diff --git a/build/assets/.pnpm-BDdfG1pO.js b/build/assets/.pnpm-BDdfG1pO.js deleted file mode 100644 index 83f69de..0000000 --- a/build/assets/.pnpm-BDdfG1pO.js +++ /dev/null @@ -1,158 +0,0 @@ -function tZ(A,I){for(var g=0;gC[Q]})}}}return Object.freeze(Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}))}function sZ(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var vZ={exports:{}},x9={},rZ={exports:{}},TA={};/** - * @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. - */var BP=Symbol.for("react.element"),B5=Symbol.for("react.portal"),E5=Symbol.for("react.fragment"),i5=Symbol.for("react.strict_mode"),e5=Symbol.for("react.profiler"),o5=Symbol.for("react.provider"),t5=Symbol.for("react.context"),s5=Symbol.for("react.forward_ref"),v5=Symbol.for("react.suspense"),r5=Symbol.for("react.memo"),a5=Symbol.for("react.lazy"),JL=Symbol.iterator;function P5(A){return A===null||typeof A!="object"?null:(A=JL&&A[JL]||A["@@iterator"],typeof A=="function"?A:null)}var aZ={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},PZ=Object.assign,cZ={};function Iv(A,I,g){this.props=A,this.context=I,this.refs=cZ,this.updater=g||aZ}Iv.prototype.isReactComponent={};Iv.prototype.setState=function(A,I){if(typeof A!="object"&&typeof A!="function"&&A!=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,A,I,"setState")};Iv.prototype.forceUpdate=function(A){this.updater.enqueueForceUpdate(this,A,"forceUpdate")};function nZ(){}nZ.prototype=Iv.prototype;function Ym(A,I,g){this.props=A,this.context=I,this.refs=cZ,this.updater=g||aZ}var km=Ym.prototype=new nZ;km.constructor=Ym;PZ(km,Iv.prototype);km.isPureReactComponent=!0;var WL=Array.isArray,lZ=Object.prototype.hasOwnProperty,pm={current:null},dZ={key:!0,ref:!0,__self:!0,__source:!0};function hZ(A,I,g){var C,Q={},B=null,E=null;if(I!=null)for(C in I.ref!==void 0&&(E=I.ref),I.key!==void 0&&(B=""+I.key),I)lZ.call(I,C)&&!dZ.hasOwnProperty(C)&&(Q[C]=I[C]);var i=arguments.length-2;if(i===1)Q.children=g;else if(1>>1,gA=Y[IA];if(0>>1;IAQ(nA,q))HQ(CA,nA)?(Y[IA]=CA,Y[H]=q,IA=H):(Y[IA]=nA,Y[bA]=q,IA=bA);else if(HQ(CA,q))Y[IA]=CA,Y[H]=q,IA=H;else break A}}return N}function Q(Y,N){var q=Y.sortIndex-N.sortIndex;return q!==0?q:Y.id-N.id}if(typeof performance=="object"&&typeof performance.now=="function"){var B=performance;A.unstable_now=function(){return B.now()}}else{var E=Date,i=E.now();A.unstable_now=function(){return E.now()-i}}var e=[],o=[],t=1,s=null,v=3,r=!1,n=!1,a=!1,c=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,l=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(Y){for(var N=g(o);N!==null;){if(N.callback===null)C(o);else if(N.startTime<=Y)C(o),N.sortIndex=N.expirationTime,I(e,N);else break;N=g(o)}}function D(Y){if(a=!1,h(Y),!n)if(g(e)!==null)n=!0,p(u);else{var N=g(o);N!==null&&J(D,N.startTime-Y)}}function u(Y,N){n=!1,a&&(a=!1,d(y),y=-1),r=!0;var q=v;try{for(h(N),s=g(e);s!==null&&(!(s.expirationTime>N)||Y&&!V());){var IA=s.callback;if(typeof IA=="function"){s.callback=null,v=s.priorityLevel;var gA=IA(s.expirationTime<=N);N=A.unstable_now(),typeof gA=="function"?s.callback=gA:s===g(e)&&C(e),h(N)}else C(e);s=g(e)}if(s!==null)var vA=!0;else{var bA=g(o);bA!==null&&J(D,bA.startTime-N),vA=!1}return vA}finally{s=null,v=q,r=!1}}var w=!1,b=null,y=-1,S=5,L=-1;function V(){return!(A.unstable_now()-LY||125IA?(Y.sortIndex=q,I(o,Y),g(e)===null&&Y===g(o)&&(a?(d(y),y=-1):a=!0,J(D,q-IA))):(Y.sortIndex=gA,I(e,Y),n||r||(n=!0,p(u))),Y},A.unstable_shouldYield=V,A.unstable_wrapCallback=function(Y){var N=v;return function(){var q=v;v=N;try{return Y.apply(this,arguments)}finally{v=q}}}})(wZ);yZ.exports=wZ;var R5=yZ.exports;/** - * @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. - */var L5=AA,gQ=R5;function _(A){for(var I="https://reactjs.org/docs/error-decoder.html?invariant="+A,g=1;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fb=Object.prototype.hasOwnProperty,S5=/^[: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]*$/,zL={},ML={};function T5(A){return fb.call(ML,A)?!0:fb.call(zL,A)?!1:S5.test(A)?ML[A]=!0:(zL[A]=!0,!1)}function U5(A,I,g,C){if(g!==null&&g.type===0)return!1;switch(typeof I){case"function":case"symbol":return!0;case"boolean":return C?!1:g!==null?!g.acceptsBooleans:(A=A.toLowerCase().slice(0,5),A!=="data-"&&A!=="aria-");default:return!1}}function F5(A,I,g,C){if(I===null||typeof I>"u"||U5(A,I,g,C))return!0;if(C)return!1;if(g!==null)switch(g.type){case 3:return!I;case 4:return I===!1;case 5:return isNaN(I);case 6:return isNaN(I)||1>I}return!1}function vC(A,I,g,C,Q,B,E){this.acceptsBooleans=I===2||I===3||I===4,this.attributeName=C,this.attributeNamespace=Q,this.mustUseProperty=g,this.propertyName=A,this.type=I,this.sanitizeURL=B,this.removeEmptyString=E}var Ug={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(A){Ug[A]=new vC(A,0,!1,A,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(A){var I=A[0];Ug[I]=new vC(I,1,!1,A[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(A){Ug[A]=new vC(A,2,!1,A.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(A){Ug[A]=new vC(A,2,!1,A,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(A){Ug[A]=new vC(A,3,!1,A.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(A){Ug[A]=new vC(A,3,!0,A,null,!1,!1)});["capture","download"].forEach(function(A){Ug[A]=new vC(A,4,!1,A,null,!1,!1)});["cols","rows","size","span"].forEach(function(A){Ug[A]=new vC(A,6,!1,A,null,!1,!1)});["rowSpan","start"].forEach(function(A){Ug[A]=new vC(A,5,!1,A.toLowerCase(),null,!1,!1)});var Zm=/[\-:]([a-z])/g;function Km(A){return A[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(A){var I=A.replace(Zm,Km);Ug[I]=new vC(I,1,!1,A,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(A){var I=A.replace(Zm,Km);Ug[I]=new vC(I,1,!1,A,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(A){var I=A.replace(Zm,Km);Ug[I]=new vC(I,1,!1,A,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(A){Ug[A]=new vC(A,1,!1,A.toLowerCase(),null,!1,!1)});Ug.xlinkHref=new vC("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(A){Ug[A]=new vC(A,1,!1,A.toLowerCase(),null,!0,!0)});function Jm(A,I,g,C){var Q=Ug.hasOwnProperty(I)?Ug[I]:null;(Q!==null?Q.type!==0:C||!(2i||Q[E]!==B[i]){var e=` -`+Q[E].replace(" at new "," at ");return A.displayName&&e.includes("")&&(e=e.replace("",A.displayName)),e}while(1<=E&&0<=i);break}}}finally{cd=!1,Error.prepareStackTrace=g}return(A=A?A.displayName||A.name:"")?yr(A):""}function Y5(A){switch(A.tag){case 5:return yr(A.type);case 16:return yr("Lazy");case 13:return yr("Suspense");case 19:return yr("SuspenseList");case 0:case 2:case 15:return A=nd(A.type,!1),A;case 11:return A=nd(A.type.render,!1),A;case 1:return A=nd(A.type,!0),A;default:return""}}function qb(A){if(A==null)return null;if(typeof A=="function")return A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case Vt:return"Fragment";case Wt:return"Portal";case Hb:return"Profiler";case Wm:return"StrictMode";case xb:return"Suspense";case Ob:return"SuspenseList"}if(typeof A=="object")switch(A.$$typeof){case RZ:return(A.displayName||"Context")+".Consumer";case GZ:return(A._context.displayName||"Context")+".Provider";case Vm:var I=A.render;return A=A.displayName,A||(A=I.displayName||I.name||"",A=A!==""?"ForwardRef("+A+")":"ForwardRef"),A;case zm:return I=A.displayName||null,I!==null?I:qb(A.type)||"Memo";case ni:I=A._payload,A=A._init;try{return qb(A(I))}catch{}}return null}function k5(A){var I=A.type;switch(A.tag){case 24:return"Cache";case 9:return(I.displayName||"Context")+".Consumer";case 10:return(I._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return A=I.render,A=A.displayName||A.name||"",I.displayName||(A!==""?"ForwardRef("+A+")":"ForwardRef");case 7:return"Fragment";case 5:return I;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return qb(I);case 8:return I===Wm?"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 I=="function")return I.displayName||I.name||null;if(typeof I=="string")return I}return null}function qi(A){switch(typeof A){case"boolean":case"number":case"string":case"undefined":return A;case"object":return A;default:return""}}function SZ(A){var I=A.type;return(A=A.nodeName)&&A.toLowerCase()==="input"&&(I==="checkbox"||I==="radio")}function p5(A){var I=SZ(A)?"checked":"value",g=Object.getOwnPropertyDescriptor(A.constructor.prototype,I),C=""+A[I];if(!A.hasOwnProperty(I)&&typeof g<"u"&&typeof g.get=="function"&&typeof g.set=="function"){var Q=g.get,B=g.set;return Object.defineProperty(A,I,{configurable:!0,get:function(){return Q.call(this)},set:function(E){C=""+E,B.call(this,E)}}),Object.defineProperty(A,I,{enumerable:g.enumerable}),{getValue:function(){return C},setValue:function(E){C=""+E},stopTracking:function(){A._valueTracker=null,delete A[I]}}}}function Cc(A){A._valueTracker||(A._valueTracker=p5(A))}function TZ(A){if(!A)return!1;var I=A._valueTracker;if(!I)return!0;var g=I.getValue(),C="";return A&&(C=SZ(A)?A.checked?"true":"false":A.value),A=C,A!==g?(I.setValue(A),!0):!1}function ml(A){if(A=A||(typeof document<"u"?document:void 0),typeof A>"u")return null;try{return A.activeElement||A.body}catch{return A.body}}function _b(A,I){var g=I.checked;return UI({},I,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:g??A._wrapperState.initialChecked})}function jL(A,I){var g=I.defaultValue==null?"":I.defaultValue,C=I.checked!=null?I.checked:I.defaultChecked;g=qi(I.value!=null?I.value:g),A._wrapperState={initialChecked:C,initialValue:g,controlled:I.type==="checkbox"||I.type==="radio"?I.checked!=null:I.value!=null}}function UZ(A,I){I=I.checked,I!=null&&Jm(A,"checked",I,!1)}function $b(A,I){UZ(A,I);var g=qi(I.value),C=I.type;if(g!=null)C==="number"?(g===0&&A.value===""||A.value!=g)&&(A.value=""+g):A.value!==""+g&&(A.value=""+g);else if(C==="submit"||C==="reset"){A.removeAttribute("value");return}I.hasOwnProperty("value")?Ay(A,I.type,g):I.hasOwnProperty("defaultValue")&&Ay(A,I.type,qi(I.defaultValue)),I.checked==null&&I.defaultChecked!=null&&(A.defaultChecked=!!I.defaultChecked)}function fL(A,I,g){if(I.hasOwnProperty("value")||I.hasOwnProperty("defaultValue")){var C=I.type;if(!(C!=="submit"&&C!=="reset"||I.value!==void 0&&I.value!==null))return;I=""+A._wrapperState.initialValue,g||I===A.value||(A.value=I),A.defaultValue=I}g=A.name,g!==""&&(A.name=""),A.defaultChecked=!!A._wrapperState.initialChecked,g!==""&&(A.name=g)}function Ay(A,I,g){(I!=="number"||ml(A.ownerDocument)!==A)&&(g==null?A.defaultValue=""+A._wrapperState.initialValue:A.defaultValue!==""+g&&(A.defaultValue=""+g))}var wr=Array.isArray;function rs(A,I,g,C){if(A=A.options,I){I={};for(var Q=0;Q"+I.valueOf().toString()+"",I=Qc.firstChild;A.firstChild;)A.removeChild(A.firstChild);for(;I.firstChild;)A.appendChild(I.firstChild)}});function wa(A,I){if(I){var g=A.firstChild;if(g&&g===A.lastChild&&g.nodeType===3){g.nodeValue=I;return}}A.textContent=I}var xr={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},N5=["Webkit","ms","Moz","O"];Object.keys(xr).forEach(function(A){N5.forEach(function(I){I=I+A.charAt(0).toUpperCase()+A.substring(1),xr[I]=xr[A]})});function pZ(A,I,g){return I==null||typeof I=="boolean"||I===""?"":g||typeof I!="number"||I===0||xr.hasOwnProperty(A)&&xr[A]?(""+I).trim():I+"px"}function NZ(A,I){A=A.style;for(var g in I)if(I.hasOwnProperty(g)){var C=g.indexOf("--")===0,Q=pZ(g,I[g],C);g==="float"&&(g="cssFloat"),C?A.setProperty(g,Q):A[g]=Q}}var Z5=UI({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 Cy(A,I){if(I){if(Z5[A]&&(I.children!=null||I.dangerouslySetInnerHTML!=null))throw Error(_(137,A));if(I.dangerouslySetInnerHTML!=null){if(I.children!=null)throw Error(_(60));if(typeof I.dangerouslySetInnerHTML!="object"||!("__html"in I.dangerouslySetInnerHTML))throw Error(_(61))}if(I.style!=null&&typeof I.style!="object")throw Error(_(62))}}function Qy(A,I){if(A.indexOf("-")===-1)return typeof I.is=="string";switch(A){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 By=null;function Mm(A){return A=A.target||A.srcElement||window,A.correspondingUseElement&&(A=A.correspondingUseElement),A.nodeType===3?A.parentNode:A}var Ey=null,as=null,Ps=null;function OL(A){if(A=eP(A)){if(typeof Ey!="function")throw Error(_(280));var I=A.stateNode;I&&(I=A0(I),Ey(A.stateNode,A.type,I))}}function ZZ(A){as?Ps?Ps.push(A):Ps=[A]:as=A}function KZ(){if(as){var A=as,I=Ps;if(Ps=as=null,OL(A),I)for(A=0;A>>=0,A===0?32:31-(x5(A)/O5|0)|0}var Bc=64,Ec=4194304;function mr(A){switch(A&-A){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 A&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return A&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return A}}function Sl(A,I){var g=A.pendingLanes;if(g===0)return 0;var C=0,Q=A.suspendedLanes,B=A.pingedLanes,E=g&268435455;if(E!==0){var i=E&~Q;i!==0?C=mr(i):(B&=E,B!==0&&(C=mr(B)))}else E=g&~Q,E!==0?C=mr(E):B!==0&&(C=mr(B));if(C===0)return 0;if(I!==0&&I!==C&&!(I&Q)&&(Q=C&-C,B=I&-I,Q>=B||Q===16&&(B&4194240)!==0))return I;if(C&4&&(C|=g&16),I=A.entangledLanes,I!==0)for(A=A.entanglements,I&=C;0g;g++)I.push(A);return I}function EP(A,I,g){A.pendingLanes|=I,I!==536870912&&(A.suspendedLanes=0,A.pingedLanes=0),A=A.eventTimes,I=31-bB(I),A[I]=g}function A3(A,I){var g=A.pendingLanes&~I;A.pendingLanes=I,A.suspendedLanes=0,A.pingedLanes=0,A.expiredLanes&=I,A.mutableReadLanes&=I,A.entangledLanes&=I,I=A.entanglements;var C=A.eventTimes;for(A=A.expirationTimes;0=qr),BS=" ",ES=!1;function BK(A,I){switch(A){case"keyup":return R3.indexOf(I.keyCode)!==-1;case"keydown":return I.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function EK(A){return A=A.detail,typeof A=="object"&&"data"in A?A.data:null}var zt=!1;function S3(A,I){switch(A){case"compositionend":return EK(I);case"keypress":return I.which!==32?null:(ES=!0,BS);case"textInput":return A=I.data,A===BS&&ES?null:A;default:return null}}function T3(A,I){if(zt)return A==="compositionend"||!_m&&BK(A,I)?(A=CK(),Sn=xm=mi=null,zt=!1,A):null;switch(A){case"paste":return null;case"keypress":if(!(I.ctrlKey||I.altKey||I.metaKey)||I.ctrlKey&&I.altKey){if(I.char&&1=I)return{node:g,offset:I-A};A=C}A:{for(;g;){if(g.nextSibling){g=g.nextSibling;break A}g=g.parentNode}g=void 0}g=tS(g)}}function tK(A,I){return A&&I?A===I?!0:A&&A.nodeType===3?!1:I&&I.nodeType===3?tK(A,I.parentNode):"contains"in A?A.contains(I):A.compareDocumentPosition?!!(A.compareDocumentPosition(I)&16):!1:!1}function sK(){for(var A=window,I=ml();I instanceof A.HTMLIFrameElement;){try{var g=typeof I.contentWindow.location.href=="string"}catch{g=!1}if(g)A=I.contentWindow;else break;I=ml(A.document)}return I}function $m(A){var I=A&&A.nodeName&&A.nodeName.toLowerCase();return I&&(I==="input"&&(A.type==="text"||A.type==="search"||A.type==="tel"||A.type==="url"||A.type==="password")||I==="textarea"||A.contentEditable==="true")}function J3(A){var I=sK(),g=A.focusedElem,C=A.selectionRange;if(I!==g&&g&&g.ownerDocument&&tK(g.ownerDocument.documentElement,g)){if(C!==null&&$m(g)){if(I=C.start,A=C.end,A===void 0&&(A=I),"selectionStart"in g)g.selectionStart=I,g.selectionEnd=Math.min(A,g.value.length);else if(A=(I=g.ownerDocument||document)&&I.defaultView||window,A.getSelection){A=A.getSelection();var Q=g.textContent.length,B=Math.min(C.start,Q);C=C.end===void 0?B:Math.min(C.end,Q),!A.extend&&B>C&&(Q=C,C=B,B=Q),Q=sS(g,B);var E=sS(g,C);Q&&E&&(A.rangeCount!==1||A.anchorNode!==Q.node||A.anchorOffset!==Q.offset||A.focusNode!==E.node||A.focusOffset!==E.offset)&&(I=I.createRange(),I.setStart(Q.node,Q.offset),A.removeAllRanges(),B>C?(A.addRange(I),A.extend(E.node,E.offset)):(I.setEnd(E.node,E.offset),A.addRange(I)))}}for(I=[],A=g;A=A.parentNode;)A.nodeType===1&&I.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof g.focus=="function"&&g.focus(),g=0;g=document.documentMode,Mt=null,vy=null,$r=null,ry=!1;function vS(A,I,g){var C=g.window===g?g.document:g.nodeType===9?g:g.ownerDocument;ry||Mt==null||Mt!==ml(C)||(C=Mt,"selectionStart"in C&&$m(C)?C={start:C.selectionStart,end:C.selectionEnd}:(C=(C.ownerDocument&&C.ownerDocument.defaultView||window).getSelection(),C={anchorNode:C.anchorNode,anchorOffset:C.anchorOffset,focusNode:C.focusNode,focusOffset:C.focusOffset}),$r&&Ta($r,C)||($r=C,C=Fl(vy,"onSelect"),0ft||(A.current=dy[ft],dy[ft]=null,ft--)}function eI(A,I){ft++,dy[ft]=A.current,A.current=I}var _i={},jg=Be(_i),UC=Be(!1),so=_i;function Ts(A,I){var g=A.type.contextTypes;if(!g)return _i;var C=A.stateNode;if(C&&C.__reactInternalMemoizedUnmaskedChildContext===I)return C.__reactInternalMemoizedMaskedChildContext;var Q={},B;for(B in g)Q[B]=I[B];return C&&(A=A.stateNode,A.__reactInternalMemoizedUnmaskedChildContext=I,A.__reactInternalMemoizedMaskedChildContext=Q),Q}function FC(A){return A=A.childContextTypes,A!=null}function kl(){nI(UC),nI(jg)}function dS(A,I,g){if(jg.current!==_i)throw Error(_(168));eI(jg,I),eI(UC,g)}function hK(A,I,g){var C=A.stateNode;if(I=I.childContextTypes,typeof C.getChildContext!="function")return g;C=C.getChildContext();for(var Q in C)if(!(Q in I))throw Error(_(108,k5(A)||"Unknown",Q));return UI({},g,C)}function pl(A){return A=(A=A.stateNode)&&A.__reactInternalMemoizedMergedChildContext||_i,so=jg.current,eI(jg,A),eI(UC,UC.current),!0}function hS(A,I,g){var C=A.stateNode;if(!C)throw Error(_(169));g?(A=hK(A,I,so),C.__reactInternalMemoizedMergedChildContext=A,nI(UC),nI(jg),eI(jg,A)):nI(UC),eI(UC,g)}var mE=null,I0=!1,Td=!1;function DK(A){mE===null?mE=[A]:mE.push(A)}function _3(A){I0=!0,DK(A)}function Ee(){if(!Td&&mE!==null){Td=!0;var A=0,I=_A;try{var g=mE;for(_A=1;A>=E,Q-=E,LE=1<<32-bB(I)+Q|g<y?(S=b,b=null):S=b.sibling;var L=v(d,b,h[y],D);if(L===null){b===null&&(b=S);break}A&&b&&L.alternate===null&&I(d,b),l=B(L,l,y),w===null?u=L:w.sibling=L,w=L,b=S}if(y===h.length)return g(d,b),wI&&Te(d,y),u;if(b===null){for(;yy?(S=b,b=null):S=b.sibling;var V=v(d,b,L.value,D);if(V===null){b===null&&(b=S);break}A&&b&&V.alternate===null&&I(d,b),l=B(V,l,y),w===null?u=V:w.sibling=V,w=V,b=S}if(L.done)return g(d,b),wI&&Te(d,y),u;if(b===null){for(;!L.done;y++,L=h.next())L=s(d,L.value,D),L!==null&&(l=B(L,l,y),w===null?u=L:w.sibling=L,w=L);return wI&&Te(d,y),u}for(b=C(d,b);!L.done;y++,L=h.next())L=r(b,d,y,L.value,D),L!==null&&(A&&L.alternate!==null&&b.delete(L.key===null?y:L.key),l=B(L,l,y),w===null?u=L:w.sibling=L,w=L);return A&&b.forEach(function(z){return I(d,z)}),wI&&Te(d,y),u}function c(d,l,h,D){if(typeof h=="object"&&h!==null&&h.type===Vt&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case gc:A:{for(var u=h.key,w=l;w!==null;){if(w.key===u){if(u=h.type,u===Vt){if(w.tag===7){g(d,w.sibling),l=Q(w,h.props.children),l.return=d,d=l;break A}}else if(w.elementType===u||typeof u=="object"&&u!==null&&u.$$typeof===ni&&bS(u)===w.type){g(d,w.sibling),l=Q(w,h.props),l.ref=Xv(d,w,h),l.return=d,d=l;break A}g(d,w);break}else I(d,w);w=w.sibling}h.type===Vt?(l=Ao(h.props.children,d.mode,D,h.key),l.return=d,d=l):(D=Zn(h.type,h.key,h.props,null,d.mode,D),D.ref=Xv(d,l,h),D.return=d,d=D)}return E(d);case Wt:A:{for(w=h.key;l!==null;){if(l.key===w)if(l.tag===4&&l.stateNode.containerInfo===h.containerInfo&&l.stateNode.implementation===h.implementation){g(d,l.sibling),l=Q(l,h.children||[]),l.return=d,d=l;break A}else{g(d,l);break}else I(d,l);l=l.sibling}l=Kd(h,d.mode,D),l.return=d,d=l}return E(d);case ni:return w=h._init,c(d,l,w(h._payload),D)}if(wr(h))return n(d,l,h,D);if(Jv(h))return a(d,l,h,D);rc(d,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,l!==null&&l.tag===6?(g(d,l.sibling),l=Q(l,h),l.return=d,d=l):(g(d,l),l=Zd(h,d.mode,D),l.return=d,d=l),E(d)):g(d,l)}return c}var Fs=wK(!0),mK=wK(!1),Kl=Be(null),Jl=null,Ot=null,CG=null;function QG(){CG=Ot=Jl=null}function BG(A){var I=Kl.current;nI(Kl),A._currentValue=I}function uy(A,I,g){for(;A!==null;){var C=A.alternate;if((A.childLanes&I)!==I?(A.childLanes|=I,C!==null&&(C.childLanes|=I)):C!==null&&(C.childLanes&I)!==I&&(C.childLanes|=I),A===g)break;A=A.return}}function ns(A,I){Jl=A,CG=Ot=null,A=A.dependencies,A!==null&&A.firstContext!==null&&(A.lanes&I&&(LC=!0),A.firstContext=null)}function XQ(A){var I=A._currentValue;if(CG!==A)if(A={context:A,memoizedValue:I,next:null},Ot===null){if(Jl===null)throw Error(_(308));Ot=A,Jl.dependencies={lanes:0,firstContext:A}}else Ot=Ot.next=A;return I}var ze=null;function EG(A){ze===null?ze=[A]:ze.push(A)}function GK(A,I,g,C){var Q=I.interleaved;return Q===null?(g.next=g,EG(I)):(g.next=Q.next,Q.next=g),I.interleaved=g,pE(A,C)}function pE(A,I){A.lanes|=I;var g=A.alternate;for(g!==null&&(g.lanes|=I),g=A,A=A.return;A!==null;)A.childLanes|=I,g=A.alternate,g!==null&&(g.childLanes|=I),g=A,A=A.return;return g.tag===3?g.stateNode:null}var li=!1;function iG(A){A.updateQueue={baseState:A.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function RK(A,I){A=A.updateQueue,I.updateQueue===A&&(I.updateQueue={baseState:A.baseState,firstBaseUpdate:A.firstBaseUpdate,lastBaseUpdate:A.lastBaseUpdate,shared:A.shared,effects:A.effects})}function FE(A,I){return{eventTime:A,lane:I,tag:0,payload:null,callback:null,next:null}}function Vi(A,I,g){var C=A.updateQueue;if(C===null)return null;if(C=C.shared,KA&2){var Q=C.pending;return Q===null?I.next=I:(I.next=Q.next,Q.next=I),C.pending=I,pE(A,g)}return Q=C.interleaved,Q===null?(I.next=I,EG(C)):(I.next=Q.next,Q.next=I),C.interleaved=I,pE(A,g)}function Un(A,I,g){if(I=I.updateQueue,I!==null&&(I=I.shared,(g&4194240)!==0)){var C=I.lanes;C&=A.pendingLanes,g|=C,I.lanes=g,jm(A,g)}}function yS(A,I){var g=A.updateQueue,C=A.alternate;if(C!==null&&(C=C.updateQueue,g===C)){var Q=null,B=null;if(g=g.firstBaseUpdate,g!==null){do{var E={eventTime:g.eventTime,lane:g.lane,tag:g.tag,payload:g.payload,callback:g.callback,next:null};B===null?Q=B=E:B=B.next=E,g=g.next}while(g!==null);B===null?Q=B=I:B=B.next=I}else Q=B=I;g={baseState:C.baseState,firstBaseUpdate:Q,lastBaseUpdate:B,shared:C.shared,effects:C.effects},A.updateQueue=g;return}A=g.lastBaseUpdate,A===null?g.firstBaseUpdate=I:A.next=I,g.lastBaseUpdate=I}function Wl(A,I,g,C){var Q=A.updateQueue;li=!1;var B=Q.firstBaseUpdate,E=Q.lastBaseUpdate,i=Q.shared.pending;if(i!==null){Q.shared.pending=null;var e=i,o=e.next;e.next=null,E===null?B=o:E.next=o,E=e;var t=A.alternate;t!==null&&(t=t.updateQueue,i=t.lastBaseUpdate,i!==E&&(i===null?t.firstBaseUpdate=o:i.next=o,t.lastBaseUpdate=e))}if(B!==null){var s=Q.baseState;E=0,t=o=e=null,i=B;do{var v=i.lane,r=i.eventTime;if((C&v)===v){t!==null&&(t=t.next={eventTime:r,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});A:{var n=A,a=i;switch(v=I,r=g,a.tag){case 1:if(n=a.payload,typeof n=="function"){s=n.call(r,s,v);break A}s=n;break A;case 3:n.flags=n.flags&-65537|128;case 0:if(n=a.payload,v=typeof n=="function"?n.call(r,s,v):n,v==null)break A;s=UI({},s,v);break A;case 2:li=!0}}i.callback!==null&&i.lane!==0&&(A.flags|=64,v=Q.effects,v===null?Q.effects=[i]:v.push(i))}else r={eventTime:r,lane:v,tag:i.tag,payload:i.payload,callback:i.callback,next:null},t===null?(o=t=r,e=s):t=t.next=r,E|=v;if(i=i.next,i===null){if(i=Q.shared.pending,i===null)break;v=i,i=v.next,v.next=null,Q.lastBaseUpdate=v,Q.shared.pending=null}}while(!0);if(t===null&&(e=s),Q.baseState=e,Q.firstBaseUpdate=o,Q.lastBaseUpdate=t,I=Q.shared.interleaved,I!==null){Q=I;do E|=Q.lane,Q=Q.next;while(Q!==I)}else B===null&&(Q.shared.lanes=0);ao|=E,A.lanes=E,A.memoizedState=s}}function wS(A,I,g){if(A=I.effects,I.effects=null,A!==null)for(I=0;Ig?g:4,A(!0);var C=Fd.transition;Fd.transition={};try{A(!1),I()}finally{_A=g,Fd.transition=C}}function XK(){return jQ().memoizedState}function gH(A,I,g){var C=Mi(A);if(g={lane:C,action:g,hasEagerState:!1,eagerState:null,next:null},jK(A))fK(I,g);else if(g=GK(A,I,g,C),g!==null){var Q=oC();yB(g,A,C,Q),HK(g,I,C)}}function CH(A,I,g){var C=Mi(A),Q={lane:C,action:g,hasEagerState:!1,eagerState:null,next:null};if(jK(A))fK(I,Q);else{var B=A.alternate;if(A.lanes===0&&(B===null||B.lanes===0)&&(B=I.lastRenderedReducer,B!==null))try{var E=I.lastRenderedState,i=B(E,g);if(Q.hasEagerState=!0,Q.eagerState=i,mB(i,E)){var e=I.interleaved;e===null?(Q.next=Q,EG(I)):(Q.next=e.next,e.next=Q),I.interleaved=Q;return}}catch{}finally{}g=GK(A,I,Q,C),g!==null&&(Q=oC(),yB(g,A,C,Q),HK(g,I,C))}}function jK(A){var I=A.alternate;return A===TI||I!==null&&I===TI}function fK(A,I){Aa=zl=!0;var g=A.pending;g===null?I.next=I:(I.next=g.next,g.next=I),A.pending=I}function HK(A,I,g){if(g&4194240){var C=I.lanes;C&=A.pendingLanes,g|=C,I.lanes=g,jm(A,g)}}var Ml={readContext:XQ,useCallback:Ng,useContext:Ng,useEffect:Ng,useImperativeHandle:Ng,useInsertionEffect:Ng,useLayoutEffect:Ng,useMemo:Ng,useReducer:Ng,useRef:Ng,useState:Ng,useDebugValue:Ng,useDeferredValue:Ng,useTransition:Ng,useMutableSource:Ng,useSyncExternalStore:Ng,useId:Ng,unstable_isNewReconciler:!1},QH={readContext:XQ,useCallback:function(A,I){return xB().memoizedState=[A,I===void 0?null:I],A},useContext:XQ,useEffect:GS,useImperativeHandle:function(A,I,g){return g=g!=null?g.concat([A]):null,Yn(4194308,4,JK.bind(null,I,A),g)},useLayoutEffect:function(A,I){return Yn(4194308,4,A,I)},useInsertionEffect:function(A,I){return Yn(4,2,A,I)},useMemo:function(A,I){var g=xB();return I=I===void 0?null:I,A=A(),g.memoizedState=[A,I],A},useReducer:function(A,I,g){var C=xB();return I=g!==void 0?g(I):I,C.memoizedState=C.baseState=I,A={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:A,lastRenderedState:I},C.queue=A,A=A.dispatch=gH.bind(null,TI,A),[C.memoizedState,A]},useRef:function(A){var I=xB();return A={current:A},I.memoizedState=A},useState:mS,useDebugValue:PG,useDeferredValue:function(A){return xB().memoizedState=A},useTransition:function(){var A=mS(!1),I=A[0];return A=IH.bind(null,A[1]),xB().memoizedState=A,[I,A]},useMutableSource:function(){},useSyncExternalStore:function(A,I,g){var C=TI,Q=xB();if(wI){if(g===void 0)throw Error(_(407));g=g()}else{if(g=I(),dg===null)throw Error(_(349));ro&30||UK(C,I,g)}Q.memoizedState=g;var B={value:g,getSnapshot:I};return Q.queue=B,GS(YK.bind(null,C,B,A),[A]),C.flags|=2048,Ka(9,FK.bind(null,C,B,g,I),void 0,null),g},useId:function(){var A=xB(),I=dg.identifierPrefix;if(wI){var g=SE,C=LE;g=(C&~(1<<32-bB(C)-1)).toString(32)+g,I=":"+I+"R"+g,g=Na++,0<\/script>",A=A.removeChild(A.firstChild)):typeof C.is=="string"?A=E.createElement(g,{is:C.is}):(A=E.createElement(g),g==="select"&&(E=A,C.multiple?E.multiple=!0:C.size&&(E.size=C.size))):A=E.createElementNS(A,g),A[AE]=I,A[Ya]=C,Q8(A,I,!1,!1),I.stateNode=A;A:{switch(E=Qy(g,C),g){case"dialog":cI("cancel",A),cI("close",A),Q=C;break;case"iframe":case"object":case"embed":cI("load",A),Q=C;break;case"video":case"audio":for(Q=0;Qps&&(I.flags|=128,C=!0,jv(B,!1),I.lanes=4194304)}else{if(!C)if(A=Vl(E),A!==null){if(I.flags|=128,C=!0,g=A.updateQueue,g!==null&&(I.updateQueue=g,I.flags|=4),jv(B,!0),B.tail===null&&B.tailMode==="hidden"&&!E.alternate&&!wI)return Zg(I),null}else 2*fI()-B.renderingStartTime>ps&&g!==1073741824&&(I.flags|=128,C=!0,jv(B,!1),I.lanes=4194304);B.isBackwards?(E.sibling=I.child,I.child=E):(g=B.last,g!==null?g.sibling=E:I.child=E,B.last=E)}return B.tail!==null?(I=B.tail,B.rendering=I,B.tail=I.sibling,B.renderingStartTime=fI(),I.sibling=null,g=RI.current,eI(RI,C?g&1|2:g&1),I):(Zg(I),null);case 22:case 23:return DG(),C=I.memoizedState!==null,A!==null&&A.memoizedState!==null!==C&&(I.flags|=8192),C&&I.mode&1?MC&1073741824&&(Zg(I),I.subtreeFlags&6&&(I.flags|=8192)):Zg(I),null;case 24:return null;case 25:return null}throw Error(_(156,I.tag))}function vH(A,I){switch(IG(I),I.tag){case 1:return FC(I.type)&&kl(),A=I.flags,A&65536?(I.flags=A&-65537|128,I):null;case 3:return Ys(),nI(UC),nI(jg),tG(),A=I.flags,A&65536&&!(A&128)?(I.flags=A&-65537|128,I):null;case 5:return oG(I),null;case 13:if(nI(RI),A=I.memoizedState,A!==null&&A.dehydrated!==null){if(I.alternate===null)throw Error(_(340));Us()}return A=I.flags,A&65536?(I.flags=A&-65537|128,I):null;case 19:return nI(RI),null;case 4:return Ys(),null;case 10:return BG(I.type._context),null;case 22:case 23:return DG(),null;case 24:return null;default:return null}}var Pc=!1,Vg=!1,rH=typeof WeakSet=="function"?WeakSet:Set,oA=null;function qt(A,I){var g=A.ref;if(g!==null)if(typeof g=="function")try{g(null)}catch(C){JI(A,I,C)}else g.current=null}function Ty(A,I,g){try{g()}catch(C){JI(A,I,C)}}var ZS=!1;function aH(A,I){if(ay=Tl,A=sK(),$m(A)){if("selectionStart"in A)var g={start:A.selectionStart,end:A.selectionEnd};else A:{g=(g=A.ownerDocument)&&g.defaultView||window;var C=g.getSelection&&g.getSelection();if(C&&C.rangeCount!==0){g=C.anchorNode;var Q=C.anchorOffset,B=C.focusNode;C=C.focusOffset;try{g.nodeType,B.nodeType}catch{g=null;break A}var E=0,i=-1,e=-1,o=0,t=0,s=A,v=null;I:for(;;){for(var r;s!==g||Q!==0&&s.nodeType!==3||(i=E+Q),s!==B||C!==0&&s.nodeType!==3||(e=E+C),s.nodeType===3&&(E+=s.nodeValue.length),(r=s.firstChild)!==null;)v=s,s=r;for(;;){if(s===A)break I;if(v===g&&++o===Q&&(i=E),v===B&&++t===C&&(e=E),(r=s.nextSibling)!==null)break;s=v,v=s.parentNode}s=r}g=i===-1||e===-1?null:{start:i,end:e}}else g=null}g=g||{start:0,end:0}}else g=null;for(Py={focusedElem:A,selectionRange:g},Tl=!1,oA=I;oA!==null;)if(I=oA,A=I.child,(I.subtreeFlags&1028)!==0&&A!==null)A.return=I,oA=A;else for(;oA!==null;){I=oA;try{var n=I.alternate;if(I.flags&1024)switch(I.tag){case 0:case 11:case 15:break;case 1:if(n!==null){var a=n.memoizedProps,c=n.memoizedState,d=I.stateNode,l=d.getSnapshotBeforeUpdate(I.elementType===I.type?a:eB(I.type,a),c);d.__reactInternalSnapshotBeforeUpdate=l}break;case 3:var h=I.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(_(163))}}catch(D){JI(I,I.return,D)}if(A=I.sibling,A!==null){A.return=I.return,oA=A;break}oA=I.return}return n=ZS,ZS=!1,n}function Ia(A,I,g){var C=I.updateQueue;if(C=C!==null?C.lastEffect:null,C!==null){var Q=C=C.next;do{if((Q.tag&A)===A){var B=Q.destroy;Q.destroy=void 0,B!==void 0&&Ty(I,g,B)}Q=Q.next}while(Q!==C)}}function Q0(A,I){if(I=I.updateQueue,I=I!==null?I.lastEffect:null,I!==null){var g=I=I.next;do{if((g.tag&A)===A){var C=g.create;g.destroy=C()}g=g.next}while(g!==I)}}function Uy(A){var I=A.ref;if(I!==null){var g=A.stateNode;switch(A.tag){case 5:A=g;break;default:A=g}typeof I=="function"?I(A):I.current=A}}function i8(A){var I=A.alternate;I!==null&&(A.alternate=null,i8(I)),A.child=null,A.deletions=null,A.sibling=null,A.tag===5&&(I=A.stateNode,I!==null&&(delete I[AE],delete I[Ya],delete I[ly],delete I[O3],delete I[q3])),A.stateNode=null,A.return=null,A.dependencies=null,A.memoizedProps=null,A.memoizedState=null,A.pendingProps=null,A.stateNode=null,A.updateQueue=null}function e8(A){return A.tag===5||A.tag===3||A.tag===4}function KS(A){A:for(;;){for(;A.sibling===null;){if(A.return===null||e8(A.return))return null;A=A.return}for(A.sibling.return=A.return,A=A.sibling;A.tag!==5&&A.tag!==6&&A.tag!==18;){if(A.flags&2||A.child===null||A.tag===4)continue A;A.child.return=A,A=A.child}if(!(A.flags&2))return A.stateNode}}function Fy(A,I,g){var C=A.tag;if(C===5||C===6)A=A.stateNode,I?g.nodeType===8?g.parentNode.insertBefore(A,I):g.insertBefore(A,I):(g.nodeType===8?(I=g.parentNode,I.insertBefore(A,g)):(I=g,I.appendChild(A)),g=g._reactRootContainer,g!=null||I.onclick!==null||(I.onclick=Yl));else if(C!==4&&(A=A.child,A!==null))for(Fy(A,I,g),A=A.sibling;A!==null;)Fy(A,I,g),A=A.sibling}function Yy(A,I,g){var C=A.tag;if(C===5||C===6)A=A.stateNode,I?g.insertBefore(A,I):g.appendChild(A);else if(C!==4&&(A=A.child,A!==null))for(Yy(A,I,g),A=A.sibling;A!==null;)Yy(A,I,g),A=A.sibling}var Gg=null,vB=!1;function Ai(A,I,g){for(g=g.child;g!==null;)o8(A,I,g),g=g.sibling}function o8(A,I,g){if(iE&&typeof iE.onCommitFiberUnmount=="function")try{iE.onCommitFiberUnmount(O9,g)}catch{}switch(g.tag){case 5:Vg||qt(g,I);case 6:var C=Gg,Q=vB;Gg=null,Ai(A,I,g),Gg=C,vB=Q,Gg!==null&&(vB?(A=Gg,g=g.stateNode,A.nodeType===8?A.parentNode.removeChild(g):A.removeChild(g)):Gg.removeChild(g.stateNode));break;case 18:Gg!==null&&(vB?(A=Gg,g=g.stateNode,A.nodeType===8?Sd(A.parentNode,g):A.nodeType===1&&Sd(A,g),La(A)):Sd(Gg,g.stateNode));break;case 4:C=Gg,Q=vB,Gg=g.stateNode.containerInfo,vB=!0,Ai(A,I,g),Gg=C,vB=Q;break;case 0:case 11:case 14:case 15:if(!Vg&&(C=g.updateQueue,C!==null&&(C=C.lastEffect,C!==null))){Q=C=C.next;do{var B=Q,E=B.destroy;B=B.tag,E!==void 0&&(B&2||B&4)&&Ty(g,I,E),Q=Q.next}while(Q!==C)}Ai(A,I,g);break;case 1:if(!Vg&&(qt(g,I),C=g.stateNode,typeof C.componentWillUnmount=="function"))try{C.props=g.memoizedProps,C.state=g.memoizedState,C.componentWillUnmount()}catch(i){JI(g,I,i)}Ai(A,I,g);break;case 21:Ai(A,I,g);break;case 22:g.mode&1?(Vg=(C=Vg)||g.memoizedState!==null,Ai(A,I,g),Vg=C):Ai(A,I,g);break;default:Ai(A,I,g)}}function JS(A){var I=A.updateQueue;if(I!==null){A.updateQueue=null;var g=A.stateNode;g===null&&(g=A.stateNode=new rH),I.forEach(function(C){var Q=bH.bind(null,A,C);g.has(C)||(g.add(C),C.then(Q,Q))})}}function gB(A,I){var g=I.deletions;if(g!==null)for(var C=0;CQ&&(Q=E),C&=~B}if(C=Q,C=fI()-C,C=(120>C?120:480>C?480:1080>C?1080:1920>C?1920:3e3>C?3e3:4320>C?4320:1960*cH(C/1960))-C,10A?16:A,Gi===null)var C=!1;else{if(A=Gi,Gi=null,fl=0,KA&6)throw Error(_(331));var Q=KA;for(KA|=4,oA=A.current;oA!==null;){var B=oA,E=B.child;if(oA.flags&16){var i=B.deletions;if(i!==null){for(var e=0;efI()-dG?$e(A,0):lG|=g),YC(A,I)}function n8(A,I){I===0&&(A.mode&1?(I=Ec,Ec<<=1,!(Ec&130023424)&&(Ec=4194304)):I=1);var g=oC();A=pE(A,I),A!==null&&(EP(A,I,g),YC(A,g))}function uH(A){var I=A.memoizedState,g=0;I!==null&&(g=I.retryLane),n8(A,g)}function bH(A,I){var g=0;switch(A.tag){case 13:var C=A.stateNode,Q=A.memoizedState;Q!==null&&(g=Q.retryLane);break;case 19:C=A.stateNode;break;default:throw Error(_(314))}C!==null&&C.delete(I),n8(A,g)}var l8;l8=function(A,I,g){if(A!==null)if(A.memoizedProps!==I.pendingProps||UC.current)LC=!0;else{if(!(A.lanes&g)&&!(I.flags&128))return LC=!1,tH(A,I,g);LC=!!(A.flags&131072)}else LC=!1,wI&&I.flags&1048576&&uK(I,Zl,I.index);switch(I.lanes=0,I.tag){case 2:var C=I.type;kn(A,I),A=I.pendingProps;var Q=Ts(I,jg.current);ns(I,g),Q=vG(null,I,C,A,Q,g);var B=rG();return I.flags|=1,typeof Q=="object"&&Q!==null&&typeof Q.render=="function"&&Q.$$typeof===void 0?(I.tag=1,I.memoizedState=null,I.updateQueue=null,FC(C)?(B=!0,pl(I)):B=!1,I.memoizedState=Q.state!==null&&Q.state!==void 0?Q.state:null,iG(I),Q.updater=C0,I.stateNode=Q,Q._reactInternals=I,yy(I,C,A,g),I=Gy(null,I,C,!0,B,g)):(I.tag=0,wI&&B&&AG(I),CC(null,I,Q,g),I=I.child),I;case 16:C=I.elementType;A:{switch(kn(A,I),A=I.pendingProps,Q=C._init,C=Q(C._payload),I.type=C,Q=I.tag=wH(C),A=eB(C,A),Q){case 0:I=my(null,I,C,A,g);break A;case 1:I=kS(null,I,C,A,g);break A;case 11:I=FS(null,I,C,A,g);break A;case 14:I=YS(null,I,C,eB(C.type,A),g);break A}throw Error(_(306,C,""))}return I;case 0:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),my(A,I,C,Q,g);case 1:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),kS(A,I,C,Q,g);case 3:A:{if(I8(I),A===null)throw Error(_(387));C=I.pendingProps,B=I.memoizedState,Q=B.element,RK(A,I),Wl(I,C,null,g);var E=I.memoizedState;if(C=E.element,B.isDehydrated)if(B={element:C,isDehydrated:!1,cache:E.cache,pendingSuspenseBoundaries:E.pendingSuspenseBoundaries,transitions:E.transitions},I.updateQueue.baseState=B,I.memoizedState=B,I.flags&256){Q=ks(Error(_(423)),I),I=pS(A,I,C,g,Q);break A}else if(C!==Q){Q=ks(Error(_(424)),I),I=pS(A,I,C,g,Q);break A}else for(HC=Wi(I.stateNode.containerInfo.firstChild),AQ=I,wI=!0,aB=null,g=mK(I,null,C,g),I.child=g;g;)g.flags=g.flags&-3|4096,g=g.sibling;else{if(Us(),C===Q){I=NE(A,I,g);break A}CC(A,I,C,g)}I=I.child}return I;case 5:return LK(I),A===null&&Dy(I),C=I.type,Q=I.pendingProps,B=A!==null?A.memoizedProps:null,E=Q.children,cy(C,Q)?E=null:B!==null&&cy(C,B)&&(I.flags|=32),A8(A,I),CC(A,I,E,g),I.child;case 6:return A===null&&Dy(I),null;case 13:return g8(A,I,g);case 4:return eG(I,I.stateNode.containerInfo),C=I.pendingProps,A===null?I.child=Fs(I,null,C,g):CC(A,I,C,g),I.child;case 11:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),FS(A,I,C,Q,g);case 7:return CC(A,I,I.pendingProps,g),I.child;case 8:return CC(A,I,I.pendingProps.children,g),I.child;case 12:return CC(A,I,I.pendingProps.children,g),I.child;case 10:A:{if(C=I.type._context,Q=I.pendingProps,B=I.memoizedProps,E=Q.value,eI(Kl,C._currentValue),C._currentValue=E,B!==null)if(mB(B.value,E)){if(B.children===Q.children&&!UC.current){I=NE(A,I,g);break A}}else for(B=I.child,B!==null&&(B.return=I);B!==null;){var i=B.dependencies;if(i!==null){E=B.child;for(var e=i.firstContext;e!==null;){if(e.context===C){if(B.tag===1){e=FE(-1,g&-g),e.tag=2;var o=B.updateQueue;if(o!==null){o=o.shared;var t=o.pending;t===null?e.next=e:(e.next=t.next,t.next=e),o.pending=e}}B.lanes|=g,e=B.alternate,e!==null&&(e.lanes|=g),uy(B.return,g,I),i.lanes|=g;break}e=e.next}}else if(B.tag===10)E=B.type===I.type?null:B.child;else if(B.tag===18){if(E=B.return,E===null)throw Error(_(341));E.lanes|=g,i=E.alternate,i!==null&&(i.lanes|=g),uy(E,g,I),E=B.sibling}else E=B.child;if(E!==null)E.return=B;else for(E=B;E!==null;){if(E===I){E=null;break}if(B=E.sibling,B!==null){B.return=E.return,E=B;break}E=E.return}B=E}CC(A,I,Q.children,g),I=I.child}return I;case 9:return Q=I.type,C=I.pendingProps.children,ns(I,g),Q=XQ(Q),C=C(Q),I.flags|=1,CC(A,I,C,g),I.child;case 14:return C=I.type,Q=eB(C,I.pendingProps),Q=eB(C.type,Q),YS(A,I,C,Q,g);case 15:return _K(A,I,I.type,I.pendingProps,g);case 17:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),kn(A,I),I.tag=1,FC(C)?(A=!0,pl(I)):A=!1,ns(I,g),xK(I,C,Q),yy(I,C,Q,g),Gy(null,I,C,!0,A,g);case 19:return C8(A,I,g);case 22:return $K(A,I,g)}throw Error(_(156,I.tag))};function d8(A,I){return jZ(A,I)}function yH(A,I,g,C){this.tag=A,this.key=g,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=I,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=C,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function NQ(A,I,g,C){return new yH(A,I,g,C)}function bG(A){return A=A.prototype,!(!A||!A.isReactComponent)}function wH(A){if(typeof A=="function")return bG(A)?1:0;if(A!=null){if(A=A.$$typeof,A===Vm)return 11;if(A===zm)return 14}return 2}function Xi(A,I){var g=A.alternate;return g===null?(g=NQ(A.tag,I,A.key,A.mode),g.elementType=A.elementType,g.type=A.type,g.stateNode=A.stateNode,g.alternate=A,A.alternate=g):(g.pendingProps=I,g.type=A.type,g.flags=0,g.subtreeFlags=0,g.deletions=null),g.flags=A.flags&14680064,g.childLanes=A.childLanes,g.lanes=A.lanes,g.child=A.child,g.memoizedProps=A.memoizedProps,g.memoizedState=A.memoizedState,g.updateQueue=A.updateQueue,I=A.dependencies,g.dependencies=I===null?null:{lanes:I.lanes,firstContext:I.firstContext},g.sibling=A.sibling,g.index=A.index,g.ref=A.ref,g}function Zn(A,I,g,C,Q,B){var E=2;if(C=A,typeof A=="function")bG(A)&&(E=1);else if(typeof A=="string")E=5;else A:switch(A){case Vt:return Ao(g.children,Q,B,I);case Wm:E=8,Q|=8;break;case Hb:return A=NQ(12,g,I,Q|2),A.elementType=Hb,A.lanes=B,A;case xb:return A=NQ(13,g,I,Q),A.elementType=xb,A.lanes=B,A;case Ob:return A=NQ(19,g,I,Q),A.elementType=Ob,A.lanes=B,A;case LZ:return E0(g,Q,B,I);default:if(typeof A=="object"&&A!==null)switch(A.$$typeof){case GZ:E=10;break A;case RZ:E=9;break A;case Vm:E=11;break A;case zm:E=14;break A;case ni:E=16,C=null;break A}throw Error(_(130,A==null?A:typeof A,""))}return I=NQ(E,g,I,Q),I.elementType=A,I.type=C,I.lanes=B,I}function Ao(A,I,g,C){return A=NQ(7,A,C,I),A.lanes=g,A}function E0(A,I,g,C){return A=NQ(22,A,C,I),A.elementType=LZ,A.lanes=g,A.stateNode={isHidden:!1},A}function Zd(A,I,g){return A=NQ(6,A,null,I),A.lanes=g,A}function Kd(A,I,g){return I=NQ(4,A.children!==null?A.children:[],A.key,I),I.lanes=g,I.stateNode={containerInfo:A.containerInfo,pendingChildren:null,implementation:A.implementation},I}function mH(A,I,g,C,Q){this.tag=I,this.containerInfo=A,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=dd(0),this.expirationTimes=dd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=dd(0),this.identifierPrefix=C,this.onRecoverableError=Q,this.mutableSourceEagerHydrationData=null}function yG(A,I,g,C,Q,B,E,i,e){return A=new mH(A,I,g,i,e),I===1?(I=1,B===!0&&(I|=8)):I=0,B=NQ(3,null,null,I),A.current=B,B.stateNode=A,B.memoizedState={element:C,isDehydrated:g,cache:null,transitions:null,pendingSuspenseBoundaries:null},iG(B),A}function GH(A,I,g){var C=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(b8)}catch(A){console.error(A)}}b8(),bZ.exports=QQ;var RG=bZ.exports;const UH=sZ(RG),FH=tZ({__proto__:null,default:UH},[RG]);var YH,HS=RG;YH=HS.createRoot,HS.hydrateRoot;/** - * @remix-run/router v1.23.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function yI(){return yI=Object.assign?Object.assign.bind():function(A){for(var I=1;I"u")throw new Error(I)}function Ns(A,I){if(!A){typeof console<"u"&&console.warn(I);try{throw new Error(I)}catch{}}}function pH(){return Math.random().toString(36).substr(2,8)}function OS(A,I){return{usr:A.state,key:A.key,idx:I}}function Wa(A,I,g,C){return g===void 0&&(g=null),yI({pathname:typeof A=="string"?A:A.pathname,search:"",hash:""},typeof I=="string"?ie(I):I,{state:g,key:I&&I.key||C||pH()})}function tP(A){let{pathname:I="/",search:g="",hash:C=""}=A;return g&&g!=="?"&&(I+=g.charAt(0)==="?"?g:"?"+g),C&&C!=="#"&&(I+=C.charAt(0)==="#"?C:"#"+C),I}function ie(A){let I={};if(A){let g=A.indexOf("#");g>=0&&(I.hash=A.substr(g),A=A.substr(0,g));let C=A.indexOf("?");C>=0&&(I.search=A.substr(C),A=A.substr(0,C)),A&&(I.pathname=A)}return I}function NH(A,I,g,C){C===void 0&&(C={});let{window:Q=document.defaultView,v5Compat:B=!1}=C,E=Q.history,i=_I.Pop,e=null,o=t();o==null&&(o=0,E.replaceState(yI({},E.state,{idx:o}),""));function t(){return(E.state||{idx:null}).idx}function s(){i=_I.Pop;let c=t(),d=c==null?null:c-o;o=c,e&&e({action:i,location:a.location,delta:d})}function v(c,d){i=_I.Push;let l=Wa(a.location,c,d);o=t()+1;let h=OS(l,o),D=a.createHref(l);try{E.pushState(h,"",D)}catch(u){if(u instanceof DOMException&&u.name==="DataCloneError")throw u;Q.location.assign(D)}B&&e&&e({action:i,location:a.location,delta:1})}function r(c,d){i=_I.Replace;let l=Wa(a.location,c,d);o=t();let h=OS(l,o),D=a.createHref(l);E.replaceState(h,"",D),B&&e&&e({action:i,location:a.location,delta:0})}function n(c){let d=Q.location.origin!=="null"?Q.location.origin:Q.location.href,l=typeof c=="string"?c:tP(c);return l=l.replace(/ $/,"%20"),kA(d,"No window.location.(origin|href) available to create URL for href: "+l),new URL(l,d)}let a={get action(){return i},get location(){return A(Q,E)},listen(c){if(e)throw new Error("A history only accepts one active listener");return Q.addEventListener(xS,s),e=c,()=>{Q.removeEventListener(xS,s),e=null}},createHref(c){return I(Q,c)},createURL:n,encodeLocation(c){let d=n(c);return{pathname:d.pathname,search:d.search,hash:d.hash}},push:v,replace:r,go(c){return E.go(c)}};return a}var qA;(function(A){A.data="data",A.deferred="deferred",A.redirect="redirect",A.error="error"})(qA||(qA={}));const ZH=new Set(["lazy","caseSensitive","path","id","index","children"]);function KH(A){return A.index===!0}function Ol(A,I,g,C){return g===void 0&&(g=[]),C===void 0&&(C={}),A.map((Q,B)=>{let E=[...g,String(B)],i=typeof Q.id=="string"?Q.id:E.join("-");if(kA(Q.index!==!0||!Q.children,"Cannot specify children on an index route"),kA(!C[i],'Found a route id collision on id "'+i+`". Route id's must be globally unique within Data Router usages`),KH(Q)){let e=yI({},Q,I(Q),{id:i});return C[i]=e,e}else{let e=yI({},Q,I(Q),{id:i,children:void 0});return C[i]=e,Q.children&&(e.children=Ol(Q.children,I,E,C)),e}})}function Ze(A,I,g){return g===void 0&&(g="/"),Kn(A,I,g,!1)}function Kn(A,I,g,C){let Q=typeof I=="string"?ie(I):I,B=sP(Q.pathname||"/",g);if(B==null)return null;let E=y8(A);WH(E);let i=null;for(let e=0;i==null&&e{let e={relativePath:i===void 0?B.path||"":i,caseSensitive:B.caseSensitive===!0,childrenIndex:E,route:B};e.relativePath.startsWith("/")&&(kA(e.relativePath.startsWith(C),'Absolute route path "'+e.relativePath+'" nested under path '+('"'+C+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),e.relativePath=e.relativePath.slice(C.length));let o=ji([C,e.relativePath]),t=g.concat(e);B.children&&B.children.length>0&&(kA(B.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+o+'".')),y8(B.children,I,t,o)),!(B.path==null&&!B.index)&&I.push({path:o,score:HH(o,B.index),routesMeta:t})};return A.forEach((B,E)=>{var i;if(B.path===""||!((i=B.path)!=null&&i.includes("?")))Q(B,E);else for(let e of w8(B.path))Q(B,E,e)}),I}function w8(A){let I=A.split("/");if(I.length===0)return[];let[g,...C]=I,Q=g.endsWith("?"),B=g.replace(/\?$/,"");if(C.length===0)return Q?[B,""]:[B];let E=w8(C.join("/")),i=[];return i.push(...E.map(e=>e===""?B:[B,e].join("/"))),Q&&i.push(...E),i.map(e=>A.startsWith("/")&&e===""?"/":e)}function WH(A){A.sort((I,g)=>I.score!==g.score?g.score-I.score:xH(I.routesMeta.map(C=>C.childrenIndex),g.routesMeta.map(C=>C.childrenIndex)))}const VH=/^:[\w-]+$/,zH=3,MH=2,XH=1,jH=10,fH=-2,qS=A=>A==="*";function HH(A,I){let g=A.split("/"),C=g.length;return g.some(qS)&&(C+=fH),I&&(C+=MH),g.filter(Q=>!qS(Q)).reduce((Q,B)=>Q+(VH.test(B)?zH:B===""?XH:jH),C)}function xH(A,I){return A.length===I.length&&A.slice(0,-1).every((C,Q)=>C===I[Q])?A[A.length-1]-I[I.length-1]:0}function OH(A,I,g){g===void 0&&(g=!1);let{routesMeta:C}=A,Q={},B="/",E=[];for(let i=0;i{let{paramName:v,isOptional:r}=t;if(v==="*"){let a=i[s]||"";E=B.slice(0,B.length-a.length).replace(/(.)\/+$/,"$1")}const n=i[s];return r&&!n?o[v]=void 0:o[v]=(n||"").replace(/%2F/g,"/"),o},{}),pathname:B,pathnameBase:E,pattern:A}}function qH(A,I,g){I===void 0&&(I=!1),g===void 0&&(g=!0),Ns(A==="*"||!A.endsWith("*")||A.endsWith("/*"),'Route path "'+A+'" will be treated as if it were '+('"'+A.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+A.replace(/\*$/,"/*")+'".'));let C=[],Q="^"+A.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(E,i,e)=>(C.push({paramName:i,isOptional:e!=null}),e?"/?([^\\/]+)?":"/([^\\/]+)"));return A.endsWith("*")?(C.push({paramName:"*"}),Q+=A==="*"||A==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):g?Q+="\\/*$":A!==""&&A!=="/"&&(Q+="(?:(?=\\/|$))"),[new RegExp(Q,I?void 0:"i"),C]}function _H(A){try{return A.split("/").map(I=>decodeURIComponent(I).replace(/\//g,"%2F")).join("/")}catch(I){return Ns(!1,'The URL path "'+A+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+I+").")),A}}function sP(A,I){if(I==="/")return A;if(!A.toLowerCase().startsWith(I.toLowerCase()))return null;let g=I.endsWith("/")?I.length-1:I.length,C=A.charAt(g);return C&&C!=="/"?null:A.slice(g)||"/"}function $H(A,I){I===void 0&&(I="/");let{pathname:g,search:C="",hash:Q=""}=typeof A=="string"?ie(A):A;return{pathname:g?g.startsWith("/")?g:A4(g,I):I,search:g4(C),hash:C4(Q)}}function A4(A,I){let g=I.replace(/\/+$/,"").split("/");return A.split("/").forEach(Q=>{Q===".."?g.length>1&&g.pop():Q!=="."&&g.push(Q)}),g.length>1?g.join("/"):"/"}function Jd(A,I,g,C){return"Cannot include a '"+A+"' character in a manually specified "+("`to."+I+"` field ["+JSON.stringify(C)+"]. Please separate it out to the ")+("`to."+g+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function m8(A){return A.filter((I,g)=>g===0||I.route.path&&I.route.path.length>0)}function G8(A,I){let g=m8(A);return I?g.map((C,Q)=>Q===g.length-1?C.pathname:C.pathnameBase):g.map(C=>C.pathnameBase)}function R8(A,I,g,C){C===void 0&&(C=!1);let Q;typeof A=="string"?Q=ie(A):(Q=yI({},A),kA(!Q.pathname||!Q.pathname.includes("?"),Jd("?","pathname","search",Q)),kA(!Q.pathname||!Q.pathname.includes("#"),Jd("#","pathname","hash",Q)),kA(!Q.search||!Q.search.includes("#"),Jd("#","search","hash",Q)));let B=A===""||Q.pathname==="",E=B?"/":Q.pathname,i;if(E==null)i=g;else{let s=I.length-1;if(!C&&E.startsWith("..")){let v=E.split("/");for(;v[0]==="..";)v.shift(),s-=1;Q.pathname=v.join("/")}i=s>=0?I[s]:"/"}let e=$H(Q,i),o=E&&E!=="/"&&E.endsWith("/"),t=(B||E===".")&&g.endsWith("/");return!e.pathname.endsWith("/")&&(o||t)&&(e.pathname+="/"),e}const ji=A=>A.join("/").replace(/\/\/+/g,"/"),I4=A=>A.replace(/\/+$/,"").replace(/^\/*/,"/"),g4=A=>!A||A==="?"?"":A.startsWith("?")?A:"?"+A,C4=A=>!A||A==="#"?"":A.startsWith("#")?A:"#"+A;class ql{constructor(I,g,C,Q){Q===void 0&&(Q=!1),this.status=I,this.statusText=g||"",this.internal=Q,C instanceof Error?(this.data=C.toString(),this.error=C):this.data=C}}function Va(A){return A!=null&&typeof A.status=="number"&&typeof A.statusText=="string"&&typeof A.internal=="boolean"&&"data"in A}const L8=["post","put","patch","delete"],Q4=new Set(L8),B4=["get",...L8],E4=new Set(B4),i4=new Set([301,302,303,307,308]),e4=new Set([307,308]),Wd={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},o4={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Hv={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},LG=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,t4=A=>({hasErrorBoundary:!!A.hasErrorBoundary}),S8="remix-router-transitions";function s4(A){const I=A.window?A.window:typeof window<"u"?window:void 0,g=typeof I<"u"&&typeof I.document<"u"&&typeof I.document.createElement<"u",C=!g;kA(A.routes.length>0,"You must provide a non-empty routes array to createRouter");let Q;if(A.mapRouteProperties)Q=A.mapRouteProperties;else if(A.detectErrorBoundary){let G=A.detectErrorBoundary;Q=T=>({hasErrorBoundary:G(T)})}else Q=t4;let B={},E=Ol(A.routes,Q,void 0,B),i,e=A.basename||"/",o=A.dataStrategy||P4,t=A.patchRoutesOnNavigation,s=yI({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},A.future),v=null,r=new Set,n=null,a=null,c=null,d=A.hydrationData!=null,l=Ze(E,A.history.location,e),h=!1,D=null;if(l==null&&!t){let G=hC(404,{pathname:A.history.location.pathname}),{matches:T,route:k}=o2(E);l=T,D={[k.id]:G}}l&&!A.hydrationData&&Mo(l,E,A.history.location.pathname).active&&(l=null);let u;if(l)if(l.some(G=>G.route.lazy))u=!1;else if(!l.some(G=>G.route.loader))u=!0;else if(s.v7_partialHydration){let G=A.hydrationData?A.hydrationData.loaderData:null,T=A.hydrationData?A.hydrationData.errors:null;if(T){let k=l.findIndex(O=>T[O.route.id]!==void 0);u=l.slice(0,k+1).every(O=>!Jy(O.route,G,T))}else u=l.every(k=>!Jy(k.route,G,T))}else u=A.hydrationData!=null;else if(u=!1,l=[],s.v7_partialHydration){let G=Mo(null,E,A.history.location.pathname);G.active&&G.matches&&(h=!0,l=G.matches)}let w,b={historyAction:A.history.action,location:A.history.location,matches:l,initialized:u,navigation:Wd,restoreScrollPosition:A.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:A.hydrationData&&A.hydrationData.loaderData||{},actionData:A.hydrationData&&A.hydrationData.actionData||null,errors:A.hydrationData&&A.hydrationData.errors||D,fetchers:new Map,blockers:new Map},y=_I.Pop,S=!1,L,V=!1,z=new Map,EA=null,eA=!1,K=!1,p=[],J=new Set,Y=new Map,N=0,q=-1,IA=new Map,gA=new Set,vA=new Map,bA=new Map,nA=new Set,H=new Map,CA=new Map,LA;function UA(){if(v=A.history.listen(G=>{let{action:T,location:k,delta:O}=G;if(LA){LA(),LA=void 0;return}Ns(CA.size===0||O!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let QA=Yv({currentLocation:b.location,nextLocation:k,historyAction:T});if(QA&&O!=null){let cA=new Promise(hA=>{LA=hA});A.history.go(O*-1),zo(QA,{state:"blocked",location:k,proceed(){zo(QA,{state:"proceeding",proceed:void 0,reset:void 0,location:k}),cA.then(()=>A.history.go(O))},reset(){let hA=new Map(b.blockers);hA.set(QA,Hv),NA({blockers:hA})}});return}return ug(T,k)}),g){L4(I,z);let G=()=>S4(I,z);I.addEventListener("pagehide",G),EA=()=>I.removeEventListener("pagehide",G)}return b.initialized||ug(_I.Pop,b.location,{initialHydration:!0}),w}function xA(){v&&v(),EA&&EA(),r.clear(),L&&L.abort(),b.fetchers.forEach((G,T)=>PE(T)),b.blockers.forEach((G,T)=>xP(T))}function rg(G){return r.add(G),()=>r.delete(G)}function NA(G,T){T===void 0&&(T={}),b=yI({},b,G);let k=[],O=[];s.v7_fetcherPersist&&b.fetchers.forEach((QA,cA)=>{QA.state==="idle"&&(nA.has(cA)?O.push(cA):k.push(cA))}),nA.forEach(QA=>{!b.fetchers.has(QA)&&!Y.has(QA)&&O.push(QA)}),[...r].forEach(QA=>QA(b,{deletedFetchers:O,viewTransitionOpts:T.viewTransitionOpts,flushSync:T.flushSync===!0})),s.v7_fetcherPersist?(k.forEach(QA=>b.fetchers.delete(QA)),O.forEach(QA=>PE(QA))):O.forEach(QA=>nA.delete(QA))}function MI(G,T,k){var O,QA;let{flushSync:cA}=k===void 0?{}:k,hA=b.actionData!=null&&b.navigation.formMethod!=null&&rB(b.navigation.formMethod)&&b.navigation.state==="loading"&&((O=G.state)==null?void 0:O._isRedirect)!==!0,sA;T.actionData?Object.keys(T.actionData).length>0?sA=T.actionData:sA=null:hA?sA=b.actionData:sA=null;let rA=T.loaderData?i2(b.loaderData,T.loaderData,T.matches||[],T.errors):b.loaderData,tA=b.blockers;tA.size>0&&(tA=new Map(tA),tA.forEach((pA,bg)=>tA.set(bg,Hv)));let PA=S===!0||b.navigation.formMethod!=null&&rB(b.navigation.formMethod)&&((QA=G.state)==null?void 0:QA._isRedirect)!==!0;i&&(E=i,i=void 0),eA||y===_I.Pop||(y===_I.Push?A.history.push(G,G.state):y===_I.Replace&&A.history.replace(G,G.state));let GA;if(y===_I.Pop){let pA=z.get(b.location.pathname);pA&&pA.has(G.pathname)?GA={currentLocation:b.location,nextLocation:G}:z.has(G.pathname)&&(GA={currentLocation:G,nextLocation:b.location})}else if(V){let pA=z.get(b.location.pathname);pA?pA.add(G.pathname):(pA=new Set([G.pathname]),z.set(b.location.pathname,pA)),GA={currentLocation:b.location,nextLocation:G}}NA(yI({},T,{actionData:sA,loaderData:rA,historyAction:y,location:G,initialized:!0,navigation:Wd,revalidation:"idle",restoreScrollPosition:qP(G,T.matches||b.matches),preventScrollReset:PA,blockers:tA}),{viewTransitionOpts:GA,flushSync:cA===!0}),y=_I.Pop,S=!1,V=!1,eA=!1,K=!1,p=[]}async function KC(G,T){if(typeof G=="number"){A.history.go(G);return}let k=Ky(b.location,b.matches,e,s.v7_prependBasename,G,s.v7_relativeSplatPath,T==null?void 0:T.fromRouteId,T==null?void 0:T.relative),{path:O,submission:QA,error:cA}=$S(s.v7_normalizeFormMethod,!1,k,T),hA=b.location,sA=Wa(b.location,O,T&&T.state);sA=yI({},sA,A.history.encodeLocation(sA));let rA=T&&T.replace!=null?T.replace:void 0,tA=_I.Push;rA===!0?tA=_I.Replace:rA===!1||QA!=null&&rB(QA.formMethod)&&QA.formAction===b.location.pathname+b.location.search&&(tA=_I.Replace);let PA=T&&"preventScrollReset"in T?T.preventScrollReset===!0:void 0,GA=(T&&T.flushSync)===!0,pA=Yv({currentLocation:hA,nextLocation:sA,historyAction:tA});if(pA){zo(pA,{state:"blocked",location:sA,proceed(){zo(pA,{state:"proceeding",proceed:void 0,reset:void 0,location:sA}),KC(G,T)},reset(){let bg=new Map(b.blockers);bg.set(pA,Hv),NA({blockers:bg})}});return}return await ug(tA,sA,{submission:QA,pendingError:cA,preventScrollReset:PA,replace:T&&T.replace,enableViewTransition:T&&T.viewTransition,flushSync:GA})}function YB(){if(Og(),NA({revalidation:"loading"}),b.navigation.state!=="submitting"){if(b.navigation.state==="idle"){ug(b.historyAction,b.location,{startUninterruptedRevalidation:!0});return}ug(y||b.historyAction,b.navigation.location,{overrideNavigation:b.navigation,enableViewTransition:V===!0})}}async function ug(G,T,k){L&&L.abort(),L=null,y=G,eA=(k&&k.startUninterruptedRevalidation)===!0,sd(b.location,b.matches),S=(k&&k.preventScrollReset)===!0,V=(k&&k.enableViewTransition)===!0;let O=i||E,QA=k&&k.overrideNavigation,cA=k!=null&&k.initialHydration&&b.matches&&b.matches.length>0&&!h?b.matches:Ze(O,T,e),hA=(k&&k.flushSync)===!0;if(cA&&b.initialized&&!K&&D4(b.location,T)&&!(k&&k.submission&&rB(k.submission.formMethod))){MI(T,{matches:cA},{flushSync:hA});return}let sA=Mo(cA,O,T.pathname);if(sA.active&&sA.matches&&(cA=sA.matches),!cA){let{error:BI,notFoundMatches:zA,route:NI}=kv(T.pathname);MI(T,{matches:zA,loaderData:{},errors:{[NI.id]:BI}},{flushSync:hA});return}L=new AbortController;let rA=Oo(A.history,T,L.signal,k&&k.submission),tA;if(k&&k.pendingError)tA=[Ke(cA).route.id,{type:qA.error,error:k.pendingError}];else if(k&&k.submission&&rB(k.submission.formMethod)){let BI=await kB(rA,T,k.submission,cA,sA.active,{replace:k.replace,flushSync:hA});if(BI.shortCircuited)return;if(BI.pendingActionResult){let[zA,NI]=BI.pendingActionResult;if(XC(NI)&&Va(NI.error)&&NI.error.status===404){L=null,MI(T,{matches:BI.matches,loaderData:{},errors:{[zA]:NI.error}});return}}cA=BI.matches||cA,tA=BI.pendingActionResult,QA=Vd(T,k.submission),hA=!1,sA.active=!1,rA=Oo(A.history,rA.url,rA.signal)}let{shortCircuited:PA,matches:GA,loaderData:pA,errors:bg}=await pB(rA,T,cA,sA.active,QA,k&&k.submission,k&&k.fetcherSubmission,k&&k.replace,k&&k.initialHydration===!0,hA,tA);PA||(L=null,MI(T,yI({matches:GA||cA},e2(tA),{loaderData:pA,errors:bg})))}async function kB(G,T,k,O,QA,cA){cA===void 0&&(cA={}),Og();let hA=G4(T,k);if(NA({navigation:hA},{flushSync:cA.flushSync===!0}),QA){let tA=await Xo(O,T.pathname,G.signal);if(tA.type==="aborted")return{shortCircuited:!0};if(tA.type==="error"){let PA=Ke(tA.partialMatches).route.id;return{matches:tA.partialMatches,pendingActionResult:[PA,{type:qA.error,error:tA.error}]}}else if(tA.matches)O=tA.matches;else{let{notFoundMatches:PA,error:GA,route:pA}=kv(T.pathname);return{matches:PA,pendingActionResult:[pA.id,{type:qA.error,error:GA}]}}}let sA,rA=Rr(O,T);if(!rA.route.action&&!rA.route.lazy)sA={type:qA.error,error:hC(405,{method:G.method,pathname:T.pathname,routeId:rA.route.id})};else if(sA=(await sQ("action",b,G,[rA],O,null))[rA.route.id],G.signal.aborted)return{shortCircuited:!0};if(Xe(sA)){let tA;return cA&&cA.replace!=null?tA=cA.replace:tA=Q2(sA.response.headers.get("Location"),new URL(G.url),e)===b.location.pathname+b.location.search,await JC(G,sA,!0,{submission:k,replace:tA}),{shortCircuited:!0}}if(Ri(sA))throw hC(400,{type:"defer-action"});if(XC(sA)){let tA=Ke(O,rA.route.id);return(cA&&cA.replace)!==!0&&(y=_I.Push),{matches:O,pendingActionResult:[tA.route.id,sA]}}return{matches:O,pendingActionResult:[rA.route.id,sA]}}async function pB(G,T,k,O,QA,cA,hA,sA,rA,tA,PA){let GA=QA||Vd(T,cA),pA=cA||hA||s2(GA),bg=!eA&&(!s.v7_partialHydration||!rA);if(O){if(bg){let ZI=tQ(PA);NA(yI({navigation:GA},ZI!==void 0?{actionData:ZI}:{}),{flushSync:tA})}let WA=await Xo(k,T.pathname,G.signal);if(WA.type==="aborted")return{shortCircuited:!0};if(WA.type==="error"){let ZI=Ke(WA.partialMatches).route.id;return{matches:WA.partialMatches,loaderData:{},errors:{[ZI]:WA.error}}}else if(WA.matches)k=WA.matches;else{let{error:ZI,notFoundMatches:fo,route:Kv}=kv(T.pathname);return{matches:fo,loaderData:{},errors:{[Kv.id]:ZI}}}}let BI=i||E,[zA,NI]=I2(A.history,b,k,pA,T,s.v7_partialHydration&&rA===!0,s.v7_skipActionErrorRevalidation,K,p,J,nA,vA,gA,BI,e,PA);if(pv(WA=>!(k&&k.some(ZI=>ZI.route.id===WA))||zA&&zA.some(ZI=>ZI.route.id===WA)),q=++N,zA.length===0&&NI.length===0){let WA=IB();return MI(T,yI({matches:k,loaderData:{},errors:PA&&XC(PA[1])?{[PA[0]]:PA[1].error}:null},e2(PA),WA?{fetchers:new Map(b.fetchers)}:{}),{flushSync:tA}),{shortCircuited:!0}}if(bg){let WA={};if(!O){WA.navigation=GA;let ZI=tQ(PA);ZI!==void 0&&(WA.actionData=ZI)}NI.length>0&&(WA.fetchers=AB(NI)),NA(WA,{flushSync:tA})}NI.forEach(WA=>{rQ(WA.key),WA.controller&&Y.set(WA.key,WA.controller)});let jo=()=>NI.forEach(WA=>rQ(WA.key));L&&L.signal.addEventListener("abort",jo);let{loaderResults:Nv,fetcherResults:cE}=await _E(b,k,zA,NI,G);if(G.signal.aborted)return{shortCircuited:!0};L&&L.signal.removeEventListener("abort",jo),NI.forEach(WA=>Y.delete(WA.key));let ZB=lc(Nv);if(ZB)return await JC(G,ZB.result,!0,{replace:sA}),{shortCircuited:!0};if(ZB=lc(cE),ZB)return gA.add(ZB.key),await JC(G,ZB.result,!0,{replace:sA}),{shortCircuited:!0};let{loaderData:rd,errors:Zv}=E2(b,k,Nv,PA,NI,cE,H);H.forEach((WA,ZI)=>{WA.subscribe(fo=>{(fo||WA.done)&&H.delete(ZI)})}),s.v7_partialHydration&&rA&&b.errors&&(Zv=yI({},b.errors,Zv));let De=IB(),$P=fP(q),Ac=De||$P||NI.length>0;return yI({matches:k,loaderData:rd,errors:Zv},Ac?{fetchers:new Map(b.fetchers)}:{})}function tQ(G){if(G&&!XC(G[1]))return{[G[0]]:G[1].data};if(b.actionData)return Object.keys(b.actionData).length===0?null:b.actionData}function AB(G){return G.forEach(T=>{let k=b.fetchers.get(T.key),O=xv(void 0,k?k.data:void 0);b.fetchers.set(T.key,O)}),new Map(b.fetchers)}function aC(G,T,k,O){if(C)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");rQ(G);let QA=(O&&O.flushSync)===!0,cA=i||E,hA=Ky(b.location,b.matches,e,s.v7_prependBasename,k,s.v7_relativeSplatPath,T,O==null?void 0:O.relative),sA=Ze(cA,hA,e),rA=Mo(sA,cA,hA);if(rA.active&&rA.matches&&(sA=rA.matches),!sA){WC(G,T,hC(404,{pathname:hA}),{flushSync:QA});return}let{path:tA,submission:PA,error:GA}=$S(s.v7_normalizeFormMethod,!0,hA,O);if(GA){WC(G,T,GA,{flushSync:QA});return}let pA=Rr(sA,tA),bg=(O&&O.preventScrollReset)===!0;if(PA&&rB(PA.formMethod)){NB(G,T,tA,pA,sA,rA.active,QA,bg,PA);return}vA.set(G,{routeId:T,path:tA}),qE(G,T,tA,pA,sA,rA.active,QA,bg,PA)}async function NB(G,T,k,O,QA,cA,hA,sA,rA){Og(),vA.delete(G);function tA(qI){if(!qI.route.action&&!qI.route.lazy){let Ho=hC(405,{method:rA.formMethod,pathname:k,routeId:T});return WC(G,T,Ho,{flushSync:hA}),!0}return!1}if(!cA&&tA(O))return;let PA=b.fetchers.get(G);vQ(G,R4(rA,PA),{flushSync:hA});let GA=new AbortController,pA=Oo(A.history,k,GA.signal,rA);if(cA){let qI=await Xo(QA,new URL(pA.url).pathname,pA.signal,G);if(qI.type==="aborted")return;if(qI.type==="error"){WC(G,T,qI.error,{flushSync:hA});return}else if(qI.matches){if(QA=qI.matches,O=Rr(QA,k),tA(O))return}else{WC(G,T,hC(404,{pathname:k}),{flushSync:hA});return}}Y.set(G,GA);let bg=N,zA=(await sQ("action",b,pA,[O],QA,G))[O.route.id];if(pA.signal.aborted){Y.get(G)===GA&&Y.delete(G);return}if(s.v7_fetcherPersist&&nA.has(G)){if(Xe(zA)||XC(zA)){vQ(G,ti(void 0));return}}else{if(Xe(zA))if(Y.delete(G),q>bg){vQ(G,ti(void 0));return}else return gA.add(G),vQ(G,xv(rA)),JC(pA,zA,!1,{fetcherSubmission:rA,preventScrollReset:sA});if(XC(zA)){WC(G,T,zA.error);return}}if(Ri(zA))throw hC(400,{type:"defer-action"});let NI=b.navigation.location||b.location,jo=Oo(A.history,NI,GA.signal),Nv=i||E,cE=b.navigation.state!=="idle"?Ze(Nv,b.navigation.location,e):b.matches;kA(cE,"Didn't find any matches after fetcher action");let ZB=++N;IA.set(G,ZB);let rd=xv(rA,zA.data);b.fetchers.set(G,rd);let[Zv,De]=I2(A.history,b,cE,rA,NI,!1,s.v7_skipActionErrorRevalidation,K,p,J,nA,vA,gA,Nv,e,[O.route.id,zA]);De.filter(qI=>qI.key!==G).forEach(qI=>{let Ho=qI.key,KL=b.fetchers.get(Ho),Q5=xv(void 0,KL?KL.data:void 0);b.fetchers.set(Ho,Q5),rQ(Ho),qI.controller&&Y.set(Ho,qI.controller)}),NA({fetchers:new Map(b.fetchers)});let $P=()=>De.forEach(qI=>rQ(qI.key));GA.signal.addEventListener("abort",$P);let{loaderResults:Ac,fetcherResults:WA}=await _E(b,cE,Zv,De,jo);if(GA.signal.aborted)return;GA.signal.removeEventListener("abort",$P),IA.delete(G),Y.delete(G),De.forEach(qI=>Y.delete(qI.key));let ZI=lc(Ac);if(ZI)return JC(jo,ZI.result,!1,{preventScrollReset:sA});if(ZI=lc(WA),ZI)return gA.add(ZI.key),JC(jo,ZI.result,!1,{preventScrollReset:sA});let{loaderData:fo,errors:Kv}=E2(b,cE,Ac,void 0,De,WA,H);if(b.fetchers.has(G)){let qI=ti(zA.data);b.fetchers.set(G,qI)}fP(ZB),b.navigation.state==="loading"&&ZB>q?(kA(y,"Expected pending action"),L&&L.abort(),MI(b.navigation.location,{matches:cE,loaderData:fo,errors:Kv,fetchers:new Map(b.fetchers)})):(NA({errors:Kv,loaderData:i2(b.loaderData,fo,cE,Kv),fetchers:new Map(b.fetchers)}),K=!1)}async function qE(G,T,k,O,QA,cA,hA,sA,rA){let tA=b.fetchers.get(G);vQ(G,xv(rA,tA?tA.data:void 0),{flushSync:hA});let PA=new AbortController,GA=Oo(A.history,k,PA.signal);if(cA){let zA=await Xo(QA,new URL(GA.url).pathname,GA.signal,G);if(zA.type==="aborted")return;if(zA.type==="error"){WC(G,T,zA.error,{flushSync:hA});return}else if(zA.matches)QA=zA.matches,O=Rr(QA,k);else{WC(G,T,hC(404,{pathname:k}),{flushSync:hA});return}}Y.set(G,PA);let pA=N,BI=(await sQ("loader",b,GA,[O],QA,G))[O.route.id];if(Ri(BI)&&(BI=await SG(BI,GA.signal,!0)||BI),Y.get(G)===PA&&Y.delete(G),!GA.signal.aborted){if(nA.has(G)){vQ(G,ti(void 0));return}if(Xe(BI))if(q>pA){vQ(G,ti(void 0));return}else{gA.add(G),await JC(GA,BI,!1,{preventScrollReset:sA});return}if(XC(BI)){WC(G,T,BI.error);return}kA(!Ri(BI),"Unhandled fetcher deferred data"),vQ(G,ti(BI.data))}}async function JC(G,T,k,O){let{submission:QA,fetcherSubmission:cA,preventScrollReset:hA,replace:sA}=O===void 0?{}:O;T.response.headers.has("X-Remix-Revalidate")&&(K=!0);let rA=T.response.headers.get("Location");kA(rA,"Expected a Location header on the redirect Response"),rA=Q2(rA,new URL(G.url),e);let tA=Wa(b.location,rA,{_isRedirect:!0});if(g){let zA=!1;if(T.response.headers.has("X-Remix-Reload-Document"))zA=!0;else if(LG.test(rA)){const NI=A.history.createURL(rA);zA=NI.origin!==I.location.origin||sP(NI.pathname,e)==null}if(zA){sA?I.location.replace(rA):I.location.assign(rA);return}}L=null;let PA=sA===!0||T.response.headers.has("X-Remix-Replace")?_I.Replace:_I.Push,{formMethod:GA,formAction:pA,formEncType:bg}=b.navigation;!QA&&!cA&&GA&&pA&&bg&&(QA=s2(b.navigation));let BI=QA||cA;if(e4.has(T.response.status)&&BI&&rB(BI.formMethod))await ug(PA,tA,{submission:yI({},BI,{formAction:rA}),preventScrollReset:hA||S,enableViewTransition:k?V:void 0});else{let zA=Vd(tA,QA);await ug(PA,tA,{overrideNavigation:zA,fetcherSubmission:cA,preventScrollReset:hA||S,enableViewTransition:k?V:void 0})}}async function sQ(G,T,k,O,QA,cA){let hA,sA={};try{hA=await c4(o,G,T,k,O,QA,cA,B,Q)}catch(rA){return O.forEach(tA=>{sA[tA.route.id]={type:qA.error,error:rA}}),sA}for(let[rA,tA]of Object.entries(hA))if(u4(tA)){let PA=tA.result;sA[rA]={type:qA.redirect,response:d4(PA,k,rA,QA,e,s.v7_relativeSplatPath)}}else sA[rA]=await l4(tA);return sA}async function _E(G,T,k,O,QA){let cA=G.matches,hA=sQ("loader",G,QA,k,T,null),sA=Promise.all(O.map(async PA=>{if(PA.matches&&PA.match&&PA.controller){let pA=(await sQ("loader",G,Oo(A.history,PA.path,PA.controller.signal),[PA.match],PA.matches,PA.key))[PA.match.route.id];return{[PA.key]:pA}}else return Promise.resolve({[PA.key]:{type:qA.error,error:hC(404,{pathname:PA.path})}})})),rA=await hA,tA=(await sA).reduce((PA,GA)=>Object.assign(PA,GA),{});return await Promise.all([w4(T,rA,QA.signal,cA,G.loaderData),m4(T,tA,O)]),{loaderResults:rA,fetcherResults:tA}}function Og(){K=!0,p.push(...pv()),vA.forEach((G,T)=>{Y.has(T)&&J.add(T),rQ(T)})}function vQ(G,T,k){k===void 0&&(k={}),b.fetchers.set(G,T),NA({fetchers:new Map(b.fetchers)},{flushSync:(k&&k.flushSync)===!0})}function WC(G,T,k,O){O===void 0&&(O={});let QA=Ke(b.matches,T);PE(G),NA({errors:{[QA.route.id]:k},fetchers:new Map(b.fetchers)},{flushSync:(O&&O.flushSync)===!0})}function Vo(G){return bA.set(G,(bA.get(G)||0)+1),nA.has(G)&&nA.delete(G),b.fetchers.get(G)||o4}function PE(G){let T=b.fetchers.get(G);Y.has(G)&&!(T&&T.state==="loading"&&IA.has(G))&&rQ(G),vA.delete(G),IA.delete(G),gA.delete(G),s.v7_fetcherPersist&&nA.delete(G),J.delete(G),b.fetchers.delete(G)}function Fv(G){let T=(bA.get(G)||0)-1;T<=0?(bA.delete(G),nA.add(G),s.v7_fetcherPersist||PE(G)):bA.set(G,T),NA({fetchers:new Map(b.fetchers)})}function rQ(G){let T=Y.get(G);T&&(T.abort(),Y.delete(G))}function $E(G){for(let T of G){let k=Vo(T),O=ti(k.data);b.fetchers.set(T,O)}}function IB(){let G=[],T=!1;for(let k of gA){let O=b.fetchers.get(k);kA(O,"Expected fetcher: "+k),O.state==="loading"&&(gA.delete(k),G.push(k),T=!0)}return $E(G),T}function fP(G){let T=[];for(let[k,O]of IA)if(O0}function HP(G,T){let k=b.blockers.get(G)||Hv;return CA.get(G)!==T&&CA.set(G,T),k}function xP(G){b.blockers.delete(G),CA.delete(G)}function zo(G,T){let k=b.blockers.get(G)||Hv;kA(k.state==="unblocked"&&T.state==="blocked"||k.state==="blocked"&&T.state==="blocked"||k.state==="blocked"&&T.state==="proceeding"||k.state==="blocked"&&T.state==="unblocked"||k.state==="proceeding"&&T.state==="unblocked","Invalid blocker state transition: "+k.state+" -> "+T.state);let O=new Map(b.blockers);O.set(G,T),NA({blockers:O})}function Yv(G){let{currentLocation:T,nextLocation:k,historyAction:O}=G;if(CA.size===0)return;CA.size>1&&Ns(!1,"A router only supports one blocker at a time");let QA=Array.from(CA.entries()),[cA,hA]=QA[QA.length-1],sA=b.blockers.get(cA);if(!(sA&&sA.state==="proceeding")&&hA({currentLocation:T,nextLocation:k,historyAction:O}))return cA}function kv(G){let T=hC(404,{pathname:G}),k=i||E,{matches:O,route:QA}=o2(k);return pv(),{notFoundMatches:O,route:QA,error:T}}function pv(G){let T=[];return H.forEach((k,O)=>{(!G||G(O))&&(k.cancel(),T.push(O),H.delete(O))}),T}function td(G,T,k){if(n=G,c=T,a=k||null,!d&&b.navigation===Wd){d=!0;let O=qP(b.location,b.matches);O!=null&&NA({restoreScrollPosition:O})}return()=>{n=null,c=null,a=null}}function OP(G,T){return a&&a(G,T.map(O=>JH(O,b.loaderData)))||G.key}function sd(G,T){if(n&&c){let k=OP(G,T);n[k]=c()}}function qP(G,T){if(n){let k=OP(G,T),O=n[k];if(typeof O=="number")return O}return null}function Mo(G,T,k){if(t)if(G){if(Object.keys(G[0].params).length>0)return{active:!0,matches:Kn(T,k,e,!0)}}else return{active:!0,matches:Kn(T,k,e,!0)||[]};return{active:!1,matches:null}}async function Xo(G,T,k,O){if(!t)return{type:"success",matches:G};let QA=G;for(;;){let cA=i==null,hA=i||E,sA=B;try{await t({signal:k,path:T,matches:QA,fetcherKey:O,patch:(PA,GA)=>{k.aborted||C2(PA,GA,hA,sA,Q)}})}catch(PA){return{type:"error",error:PA,partialMatches:QA}}finally{cA&&!k.aborted&&(E=[...E])}if(k.aborted)return{type:"aborted"};let rA=Ze(hA,T,e);if(rA)return{type:"success",matches:rA};let tA=Kn(hA,T,e,!0);if(!tA||QA.length===tA.length&&QA.every((PA,GA)=>PA.route.id===tA[GA].route.id))return{type:"success",matches:null};QA=tA}}function _P(G){B={},i=Ol(G,Q,void 0,B)}function vd(G,T){let k=i==null;C2(G,T,i||E,B,Q),k&&(E=[...E],NA({}))}return w={get basename(){return e},get future(){return s},get state(){return b},get routes(){return E},get window(){return I},initialize:UA,subscribe:rg,enableScrollRestoration:td,navigate:KC,fetch:aC,revalidate:YB,createHref:G=>A.history.createHref(G),encodeLocation:G=>A.history.encodeLocation(G),getFetcher:Vo,deleteFetcher:Fv,dispose:xA,getBlocker:HP,deleteBlocker:xP,patchRoutes:vd,_internalFetchControllers:Y,_internalActiveDeferreds:H,_internalSetRoutes:_P},w}function v4(A){return A!=null&&("formData"in A&&A.formData!=null||"body"in A&&A.body!==void 0)}function Ky(A,I,g,C,Q,B,E,i){let e,o;if(E){e=[];for(let s of I)if(e.push(s),s.route.id===E){o=s;break}}else e=I,o=I[I.length-1];let t=R8(Q||".",G8(e,B),sP(A.pathname,g)||A.pathname,i==="path");if(Q==null&&(t.search=A.search,t.hash=A.hash),(Q==null||Q===""||Q===".")&&o){let s=TG(t.search);if(o.route.index&&!s)t.search=t.search?t.search.replace(/^\?/,"?index&"):"?index";else if(!o.route.index&&s){let v=new URLSearchParams(t.search),r=v.getAll("index");v.delete("index"),r.filter(a=>a).forEach(a=>v.append("index",a));let n=v.toString();t.search=n?"?"+n:""}}return C&&g!=="/"&&(t.pathname=t.pathname==="/"?g:ji([g,t.pathname])),tP(t)}function $S(A,I,g,C){if(!C||!v4(C))return{path:g};if(C.formMethod&&!y4(C.formMethod))return{path:g,error:hC(405,{method:C.formMethod})};let Q=()=>({path:g,error:hC(400,{type:"invalid-body"})}),B=C.formMethod||"get",E=A?B.toUpperCase():B.toLowerCase(),i=F8(g);if(C.body!==void 0){if(C.formEncType==="text/plain"){if(!rB(E))return Q();let v=typeof C.body=="string"?C.body:C.body instanceof FormData||C.body instanceof URLSearchParams?Array.from(C.body.entries()).reduce((r,n)=>{let[a,c]=n;return""+r+a+"="+c+` -`},""):String(C.body);return{path:g,submission:{formMethod:E,formAction:i,formEncType:C.formEncType,formData:void 0,json:void 0,text:v}}}else if(C.formEncType==="application/json"){if(!rB(E))return Q();try{let v=typeof C.body=="string"?JSON.parse(C.body):C.body;return{path:g,submission:{formMethod:E,formAction:i,formEncType:C.formEncType,formData:void 0,json:v,text:void 0}}}catch{return Q()}}}kA(typeof FormData=="function","FormData is not available in this environment");let e,o;if(C.formData)e=Wy(C.formData),o=C.formData;else if(C.body instanceof FormData)e=Wy(C.body),o=C.body;else if(C.body instanceof URLSearchParams)e=C.body,o=B2(e);else if(C.body==null)e=new URLSearchParams,o=new FormData;else try{e=new URLSearchParams(C.body),o=B2(e)}catch{return Q()}let t={formMethod:E,formAction:i,formEncType:C&&C.formEncType||"application/x-www-form-urlencoded",formData:o,json:void 0,text:void 0};if(rB(t.formMethod))return{path:g,submission:t};let s=ie(g);return I&&s.search&&TG(s.search)&&e.append("index",""),s.search="?"+e,{path:tP(s),submission:t}}function A2(A,I,g){g===void 0&&(g=!1);let C=A.findIndex(Q=>Q.route.id===I);return C>=0?A.slice(0,g?C+1:C):A}function I2(A,I,g,C,Q,B,E,i,e,o,t,s,v,r,n,a){let c=a?XC(a[1])?a[1].error:a[1].data:void 0,d=A.createURL(I.location),l=A.createURL(Q),h=g;B&&I.errors?h=A2(g,Object.keys(I.errors)[0],!0):a&&XC(a[1])&&(h=A2(g,a[0]));let D=a?a[1].statusCode:void 0,u=E&&D&&D>=400,w=h.filter((y,S)=>{let{route:L}=y;if(L.lazy)return!0;if(L.loader==null)return!1;if(B)return Jy(L,I.loaderData,I.errors);if(r4(I.loaderData,I.matches[S],y)||e.some(EA=>EA===y.route.id))return!0;let V=I.matches[S],z=y;return g2(y,yI({currentUrl:d,currentParams:V.params,nextUrl:l,nextParams:z.params},C,{actionResult:c,actionStatus:D,defaultShouldRevalidate:u?!1:i||d.pathname+d.search===l.pathname+l.search||d.search!==l.search||T8(V,z)}))}),b=[];return s.forEach((y,S)=>{if(B||!g.some(eA=>eA.route.id===y.routeId)||t.has(S))return;let L=Ze(r,y.path,n);if(!L){b.push({key:S,routeId:y.routeId,path:y.path,matches:null,match:null,controller:null});return}let V=I.fetchers.get(S),z=Rr(L,y.path),EA=!1;v.has(S)?EA=!1:o.has(S)?(o.delete(S),EA=!0):V&&V.state!=="idle"&&V.data===void 0?EA=i:EA=g2(z,yI({currentUrl:d,currentParams:I.matches[I.matches.length-1].params,nextUrl:l,nextParams:g[g.length-1].params},C,{actionResult:c,actionStatus:D,defaultShouldRevalidate:u?!1:i})),EA&&b.push({key:S,routeId:y.routeId,path:y.path,matches:L,match:z,controller:new AbortController})}),[w,b]}function Jy(A,I,g){if(A.lazy)return!0;if(!A.loader)return!1;let C=I!=null&&I[A.id]!==void 0,Q=g!=null&&g[A.id]!==void 0;return!C&&Q?!1:typeof A.loader=="function"&&A.loader.hydrate===!0?!0:!C&&!Q}function r4(A,I,g){let C=!I||g.route.id!==I.route.id,Q=A[g.route.id]===void 0;return C||Q}function T8(A,I){let g=A.route.path;return A.pathname!==I.pathname||g!=null&&g.endsWith("*")&&A.params["*"]!==I.params["*"]}function g2(A,I){if(A.route.shouldRevalidate){let g=A.route.shouldRevalidate(I);if(typeof g=="boolean")return g}return I.defaultShouldRevalidate}function C2(A,I,g,C,Q){var B;let E;if(A){let o=C[A];kA(o,"No route found to patch children into: routeId = "+A),o.children||(o.children=[]),E=o.children}else E=g;let i=I.filter(o=>!E.some(t=>U8(o,t))),e=Ol(i,Q,[A||"_","patch",String(((B=E)==null?void 0:B.length)||"0")],C);E.push(...e)}function U8(A,I){return"id"in A&&"id"in I&&A.id===I.id?!0:A.index===I.index&&A.path===I.path&&A.caseSensitive===I.caseSensitive?(!A.children||A.children.length===0)&&(!I.children||I.children.length===0)?!0:A.children.every((g,C)=>{var Q;return(Q=I.children)==null?void 0:Q.some(B=>U8(g,B))}):!1}async function a4(A,I,g){if(!A.lazy)return;let C=await A.lazy();if(!A.lazy)return;let Q=g[A.id];kA(Q,"No route found in manifest");let B={};for(let E in C){let e=Q[E]!==void 0&&E!=="hasErrorBoundary";Ns(!e,'Route "'+Q.id+'" has a static property "'+E+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+E+'" will be ignored.')),!e&&!ZH.has(E)&&(B[E]=C[E])}Object.assign(Q,B),Object.assign(Q,yI({},I(Q),{lazy:void 0}))}async function P4(A){let{matches:I}=A,g=I.filter(Q=>Q.shouldLoad);return(await Promise.all(g.map(Q=>Q.resolve()))).reduce((Q,B,E)=>Object.assign(Q,{[g[E].route.id]:B}),{})}async function c4(A,I,g,C,Q,B,E,i,e,o){let t=B.map(r=>r.route.lazy?a4(r.route,e,i):void 0),s=B.map((r,n)=>{let a=t[n],c=Q.some(l=>l.route.id===r.route.id);return yI({},r,{shouldLoad:c,resolve:async l=>(l&&C.method==="GET"&&(r.route.lazy||r.route.loader)&&(c=!0),c?n4(I,C,r,a,l,o):Promise.resolve({type:qA.data,result:void 0}))})}),v=await A({matches:s,request:C,params:B[0].params,fetcherKey:E,context:o});try{await Promise.all(t)}catch{}return v}async function n4(A,I,g,C,Q,B){let E,i,e=o=>{let t,s=new Promise((n,a)=>t=a);i=()=>t(),I.signal.addEventListener("abort",i);let v=n=>typeof o!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+A+'" [routeId: '+g.route.id+"]"))):o({request:I,params:g.params,context:B},...n!==void 0?[n]:[]),r=(async()=>{try{return{type:"data",result:await(Q?Q(a=>v(a)):v())}}catch(n){return{type:"error",result:n}}})();return Promise.race([r,s])};try{let o=g.route[A];if(C)if(o){let t,[s]=await Promise.all([e(o).catch(v=>{t=v}),C]);if(t!==void 0)throw t;E=s}else if(await C,o=g.route[A],o)E=await e(o);else if(A==="action"){let t=new URL(I.url),s=t.pathname+t.search;throw hC(405,{method:I.method,pathname:s,routeId:g.route.id})}else return{type:qA.data,result:void 0};else if(o)E=await e(o);else{let t=new URL(I.url),s=t.pathname+t.search;throw hC(404,{pathname:s})}kA(E.result!==void 0,"You defined "+(A==="action"?"an action":"a loader")+" for route "+('"'+g.route.id+"\" but didn't return anything from your `"+A+"` ")+"function. Please return a value or `null`.")}catch(o){return{type:qA.error,result:o}}finally{i&&I.signal.removeEventListener("abort",i)}return E}async function l4(A){let{result:I,type:g}=A;if(Y8(I)){let s;try{let v=I.headers.get("Content-Type");v&&/\bapplication\/json\b/.test(v)?I.body==null?s=null:s=await I.json():s=await I.text()}catch(v){return{type:qA.error,error:v}}return g===qA.error?{type:qA.error,error:new ql(I.status,I.statusText,s),statusCode:I.status,headers:I.headers}:{type:qA.data,data:s,statusCode:I.status,headers:I.headers}}if(g===qA.error){if(t2(I)){var C,Q;if(I.data instanceof Error){var B,E;return{type:qA.error,error:I.data,statusCode:(B=I.init)==null?void 0:B.status,headers:(E=I.init)!=null&&E.headers?new Headers(I.init.headers):void 0}}return{type:qA.error,error:new ql(((C=I.init)==null?void 0:C.status)||500,void 0,I.data),statusCode:Va(I)?I.status:void 0,headers:(Q=I.init)!=null&&Q.headers?new Headers(I.init.headers):void 0}}return{type:qA.error,error:I,statusCode:Va(I)?I.status:void 0}}if(b4(I)){var i,e;return{type:qA.deferred,deferredData:I,statusCode:(i=I.init)==null?void 0:i.status,headers:((e=I.init)==null?void 0:e.headers)&&new Headers(I.init.headers)}}if(t2(I)){var o,t;return{type:qA.data,data:I.data,statusCode:(o=I.init)==null?void 0:o.status,headers:(t=I.init)!=null&&t.headers?new Headers(I.init.headers):void 0}}return{type:qA.data,data:I}}function d4(A,I,g,C,Q,B){let E=A.headers.get("Location");if(kA(E,"Redirects returned/thrown from loaders/actions must have a Location header"),!LG.test(E)){let i=C.slice(0,C.findIndex(e=>e.route.id===g)+1);E=Ky(new URL(I.url),i,Q,!0,E,B),A.headers.set("Location",E)}return A}function Q2(A,I,g){if(LG.test(A)){let C=A,Q=C.startsWith("//")?new URL(I.protocol+C):new URL(C),B=sP(Q.pathname,g)!=null;if(Q.origin===I.origin&&B)return Q.pathname+Q.search+Q.hash}return A}function Oo(A,I,g,C){let Q=A.createURL(F8(I)).toString(),B={signal:g};if(C&&rB(C.formMethod)){let{formMethod:E,formEncType:i}=C;B.method=E.toUpperCase(),i==="application/json"?(B.headers=new Headers({"Content-Type":i}),B.body=JSON.stringify(C.json)):i==="text/plain"?B.body=C.text:i==="application/x-www-form-urlencoded"&&C.formData?B.body=Wy(C.formData):B.body=C.formData}return new Request(Q,B)}function Wy(A){let I=new URLSearchParams;for(let[g,C]of A.entries())I.append(g,typeof C=="string"?C:C.name);return I}function B2(A){let I=new FormData;for(let[g,C]of A.entries())I.append(g,C);return I}function h4(A,I,g,C,Q){let B={},E=null,i,e=!1,o={},t=g&&XC(g[1])?g[1].error:void 0;return A.forEach(s=>{if(!(s.route.id in I))return;let v=s.route.id,r=I[v];if(kA(!Xe(r),"Cannot handle redirect results in processLoaderData"),XC(r)){let n=r.error;t!==void 0&&(n=t,t=void 0),E=E||{};{let a=Ke(A,v);E[a.route.id]==null&&(E[a.route.id]=n)}B[v]=void 0,e||(e=!0,i=Va(r.error)?r.error.status:500),r.headers&&(o[v]=r.headers)}else Ri(r)?(C.set(v,r.deferredData),B[v]=r.deferredData.data,r.statusCode!=null&&r.statusCode!==200&&!e&&(i=r.statusCode),r.headers&&(o[v]=r.headers)):(B[v]=r.data,r.statusCode&&r.statusCode!==200&&!e&&(i=r.statusCode),r.headers&&(o[v]=r.headers))}),t!==void 0&&g&&(E={[g[0]]:t},B[g[0]]=void 0),{loaderData:B,errors:E,statusCode:i||200,loaderHeaders:o}}function E2(A,I,g,C,Q,B,E){let{loaderData:i,errors:e}=h4(I,g,C,E);return Q.forEach(o=>{let{key:t,match:s,controller:v}=o,r=B[t];if(kA(r,"Did not find corresponding fetcher result"),!(v&&v.signal.aborted))if(XC(r)){let n=Ke(A.matches,s==null?void 0:s.route.id);e&&e[n.route.id]||(e=yI({},e,{[n.route.id]:r.error})),A.fetchers.delete(t)}else if(Xe(r))kA(!1,"Unhandled fetcher revalidation redirect");else if(Ri(r))kA(!1,"Unhandled fetcher deferred data");else{let n=ti(r.data);A.fetchers.set(t,n)}}),{loaderData:i,errors:e}}function i2(A,I,g,C){let Q=yI({},I);for(let B of g){let E=B.route.id;if(I.hasOwnProperty(E)?I[E]!==void 0&&(Q[E]=I[E]):A[E]!==void 0&&B.route.loader&&(Q[E]=A[E]),C&&C.hasOwnProperty(E))break}return Q}function e2(A){return A?XC(A[1])?{actionData:{}}:{actionData:{[A[0]]:A[1].data}}:{}}function Ke(A,I){return(I?A.slice(0,A.findIndex(C=>C.route.id===I)+1):[...A]).reverse().find(C=>C.route.hasErrorBoundary===!0)||A[0]}function o2(A){let I=A.length===1?A[0]:A.find(g=>g.index||!g.path||g.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:I}],route:I}}function hC(A,I){let{pathname:g,routeId:C,method:Q,type:B,message:E}=I===void 0?{}:I,i="Unknown Server Error",e="Unknown @remix-run/router error";return A===400?(i="Bad Request",Q&&g&&C?e="You made a "+Q+' request to "'+g+'" but '+('did not provide a `loader` for route "'+C+'", ')+"so there is no way to handle the request.":B==="defer-action"?e="defer() is not supported in actions":B==="invalid-body"&&(e="Unable to encode submission body")):A===403?(i="Forbidden",e='Route "'+C+'" does not match URL "'+g+'"'):A===404?(i="Not Found",e='No route matches URL "'+g+'"'):A===405&&(i="Method Not Allowed",Q&&g&&C?e="You made a "+Q.toUpperCase()+' request to "'+g+'" but '+('did not provide an `action` for route "'+C+'", ')+"so there is no way to handle the request.":Q&&(e='Invalid request method "'+Q.toUpperCase()+'"')),new ql(A||500,i,new Error(e),!0)}function lc(A){let I=Object.entries(A);for(let g=I.length-1;g>=0;g--){let[C,Q]=I[g];if(Xe(Q))return{key:C,result:Q}}}function F8(A){let I=typeof A=="string"?ie(A):A;return tP(yI({},I,{hash:""}))}function D4(A,I){return A.pathname!==I.pathname||A.search!==I.search?!1:A.hash===""?I.hash!=="":A.hash===I.hash?!0:I.hash!==""}function u4(A){return Y8(A.result)&&i4.has(A.result.status)}function Ri(A){return A.type===qA.deferred}function XC(A){return A.type===qA.error}function Xe(A){return(A&&A.type)===qA.redirect}function t2(A){return typeof A=="object"&&A!=null&&"type"in A&&"data"in A&&"init"in A&&A.type==="DataWithResponseInit"}function b4(A){let I=A;return I&&typeof I=="object"&&typeof I.data=="object"&&typeof I.subscribe=="function"&&typeof I.cancel=="function"&&typeof I.resolveData=="function"}function Y8(A){return A!=null&&typeof A.status=="number"&&typeof A.statusText=="string"&&typeof A.headers=="object"&&typeof A.body<"u"}function y4(A){return E4.has(A.toLowerCase())}function rB(A){return Q4.has(A.toLowerCase())}async function w4(A,I,g,C,Q){let B=Object.entries(I);for(let E=0;E(v==null?void 0:v.route.id)===i);if(!o)continue;let t=C.find(v=>v.route.id===o.route.id),s=t!=null&&!T8(t,o)&&(Q&&Q[o.route.id])!==void 0;Ri(e)&&s&&await SG(e,g,!1).then(v=>{v&&(I[i]=v)})}}async function m4(A,I,g){for(let C=0;C(o==null?void 0:o.route.id)===B)&&Ri(i)&&(kA(E,"Expected an AbortController for revalidating fetcher deferred result"),await SG(i,E.signal,!0).then(o=>{o&&(I[Q]=o)}))}}async function SG(A,I,g){if(g===void 0&&(g=!1),!await A.deferredData.resolveData(I)){if(g)try{return{type:qA.data,data:A.deferredData.unwrappedData}}catch(Q){return{type:qA.error,error:Q}}return{type:qA.data,data:A.deferredData.data}}}function TG(A){return new URLSearchParams(A).getAll("index").some(I=>I==="")}function Rr(A,I){let g=typeof I=="string"?ie(I).search:I.search;if(A[A.length-1].route.index&&TG(g||""))return A[A.length-1];let C=m8(A);return C[C.length-1]}function s2(A){let{formMethod:I,formAction:g,formEncType:C,text:Q,formData:B,json:E}=A;if(!(!I||!g||!C)){if(Q!=null)return{formMethod:I,formAction:g,formEncType:C,formData:void 0,json:void 0,text:Q};if(B!=null)return{formMethod:I,formAction:g,formEncType:C,formData:B,json:void 0,text:void 0};if(E!==void 0)return{formMethod:I,formAction:g,formEncType:C,formData:void 0,json:E,text:void 0}}}function Vd(A,I){return I?{state:"loading",location:A,formMethod:I.formMethod,formAction:I.formAction,formEncType:I.formEncType,formData:I.formData,json:I.json,text:I.text}:{state:"loading",location:A,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function G4(A,I){return{state:"submitting",location:A,formMethod:I.formMethod,formAction:I.formAction,formEncType:I.formEncType,formData:I.formData,json:I.json,text:I.text}}function xv(A,I){return A?{state:"loading",formMethod:A.formMethod,formAction:A.formAction,formEncType:A.formEncType,formData:A.formData,json:A.json,text:A.text,data:I}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:I}}function R4(A,I){return{state:"submitting",formMethod:A.formMethod,formAction:A.formAction,formEncType:A.formEncType,formData:A.formData,json:A.json,text:A.text,data:I?I.data:void 0}}function ti(A){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:A}}function L4(A,I){try{let g=A.sessionStorage.getItem(S8);if(g){let C=JSON.parse(g);for(let[Q,B]of Object.entries(C||{}))B&&Array.isArray(B)&&I.set(Q,new Set(B||[]))}}catch{}}function S4(A,I){if(I.size>0){let g={};for(let[C,Q]of I)g[C]=[...Q];try{A.sessionStorage.setItem(S8,JSON.stringify(g))}catch(C){Ns(!1,"Failed to save applied view transitions in sessionStorage ("+C+").")}}}/** - * React Router v6.30.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function _l(){return _l=Object.assign?Object.assign.bind():function(A){for(var I=1;I{i.current=!0}),AA.useCallback(function(o,t){if(t===void 0&&(t={}),!i.current)return;if(typeof o=="number"){C.go(o);return}let s=R8(o,JSON.parse(E),B,t.relative==="path");A==null&&I!=="/"&&(s.pathname=s.pathname==="/"?I:ji([I,s.pathname])),(t.replace?C.replace:C.push)(s,t.state,t)},[I,C,E,B,A])}const F4=AA.createContext(null);function Y4(A){let I=AA.useContext(So).outlet;return I&&AA.createElement(F4.Provider,{value:A},I)}function k4(A,I,g,C){r0()||kA(!1);let{navigator:Q,static:B}=AA.useContext(v0),{matches:E}=AA.useContext(So),i=E[E.length-1],e=i?i.params:{};i&&i.pathname;let o=i?i.pathnameBase:"/";i&&i.route;let t=FG(),s;s=t;let v=s.pathname||"/",r=v;if(o!=="/"){let c=o.replace(/^\//,"").split("/");r="/"+v.replace(/^\//,"").split("/").slice(c.length).join("/")}let n=!B&&g&&g.matches&&g.matches.length>0?g.matches:Ze(A,{pathname:r});return J4(n&&n.map(c=>Object.assign({},c,{params:Object.assign({},e,c.params),pathname:ji([o,Q.encodeLocation?Q.encodeLocation(c.pathname).pathname:c.pathname]),pathnameBase:c.pathnameBase==="/"?o:ji([o,Q.encodeLocation?Q.encodeLocation(c.pathnameBase).pathname:c.pathnameBase])})),E,g,C)}function p4(){let A=M4(),I=Va(A)?A.status+" "+A.statusText:A instanceof Error?A.message:JSON.stringify(A),g=A instanceof Error?A.stack:null,Q={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return AA.createElement(AA.Fragment,null,AA.createElement("h2",null,"Unexpected Application Error!"),AA.createElement("h3",{style:{fontStyle:"italic"}},I),g?AA.createElement("pre",{style:Q},g):null,null)}const N4=AA.createElement(p4,null);class Z4 extends AA.Component{constructor(I){super(I),this.state={location:I.location,revalidation:I.revalidation,error:I.error}}static getDerivedStateFromError(I){return{error:I}}static getDerivedStateFromProps(I,g){return g.location!==I.location||g.revalidation!=="idle"&&I.revalidation==="idle"?{error:I.error,location:I.location,revalidation:I.revalidation}:{error:I.error!==void 0?I.error:g.error,location:g.location,revalidation:I.revalidation||g.revalidation}}componentDidCatch(I,g){console.error("React Router caught the following error during render",I,g)}render(){return this.state.error!==void 0?AA.createElement(So.Provider,{value:this.props.routeContext},AA.createElement(p8.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function K4(A){let{routeContext:I,match:g,children:C}=A,Q=AA.useContext(s0);return Q&&Q.static&&Q.staticContext&&(g.route.errorElement||g.route.ErrorBoundary)&&(Q.staticContext._deepestRenderedBoundaryId=g.route.id),AA.createElement(So.Provider,{value:I},C)}function J4(A,I,g,C){var Q;if(I===void 0&&(I=[]),g===void 0&&(g=null),C===void 0&&(C=null),A==null){var B;if(!g)return null;if(g.errors)A=g.matches;else if((B=C)!=null&&B.v7_partialHydration&&I.length===0&&!g.initialized&&g.matches.length>0)A=g.matches;else return null}let E=A,i=(Q=g)==null?void 0:Q.errors;if(i!=null){let t=E.findIndex(s=>s.route.id&&(i==null?void 0:i[s.route.id])!==void 0);t>=0||kA(!1),E=E.slice(0,Math.min(E.length,t+1))}let e=!1,o=-1;if(g&&C&&C.v7_partialHydration)for(let t=0;t=0?E=E.slice(0,o+1):E=[E[0]];break}}}return E.reduceRight((t,s,v)=>{let r,n=!1,a=null,c=null;g&&(r=i&&s.route.id?i[s.route.id]:void 0,a=s.route.errorElement||N4,e&&(o<0&&v===0?(j4("route-fallback"),n=!0,c=null):o===v&&(n=!0,c=s.route.hydrateFallbackElement||null)));let d=I.concat(E.slice(0,v+1)),l=()=>{let h;return r?h=a:n?h=c:s.route.Component?h=AA.createElement(s.route.Component,null):s.route.element?h=s.route.element:h=t,AA.createElement(K4,{match:s,routeContext:{outlet:t,matches:d,isDataRoute:g!=null},children:h})};return g&&(s.route.ErrorBoundary||s.route.errorElement||v===0)?AA.createElement(Z4,{location:g.location,revalidation:g.revalidation,component:a,error:r,children:l(),routeContext:{outlet:null,matches:d,isDataRoute:!0}}):l()},null)}var Z8=function(A){return A.UseBlocker="useBlocker",A.UseRevalidator="useRevalidator",A.UseNavigateStable="useNavigate",A}(Z8||{}),K8=function(A){return A.UseBlocker="useBlocker",A.UseLoaderData="useLoaderData",A.UseActionData="useActionData",A.UseRouteError="useRouteError",A.UseNavigation="useNavigation",A.UseRouteLoaderData="useRouteLoaderData",A.UseMatches="useMatches",A.UseRevalidator="useRevalidator",A.UseNavigateStable="useNavigate",A.UseRouteId="useRouteId",A}(K8||{});function W4(A){let I=AA.useContext(s0);return I||kA(!1),I}function V4(A){let I=AA.useContext(k8);return I||kA(!1),I}function z4(A){let I=AA.useContext(So);return I||kA(!1),I}function J8(A){let I=z4(),g=I.matches[I.matches.length-1];return g.route.id||kA(!1),g.route.id}function M4(){var A;let I=AA.useContext(p8),g=V4(),C=J8();return I!==void 0?I:(A=g.errors)==null?void 0:A[C]}function X4(){let{router:A}=W4(Z8.UseNavigateStable),I=J8(K8.UseNavigateStable),g=AA.useRef(!1);return N8(()=>{g.current=!0}),AA.useCallback(function(Q,B){B===void 0&&(B={}),g.current&&(typeof Q=="number"?A.navigate(Q):A.navigate(Q,_l({fromRouteId:I},B)))},[A,I])}const v2={};function j4(A,I,g){v2[A]||(v2[A]=!0)}function f4(A,I){A==null||A.v7_startTransition,(A==null?void 0:A.v7_relativeSplatPath)===void 0&&(!I||I.v7_relativeSplatPath),I&&(I.v7_fetcherPersist,I.v7_normalizeFormMethod,I.v7_partialHydration,I.v7_skipActionErrorRevalidation)}function QXA(A){return Y4(A.context)}function H4(A){let{basename:I="/",children:g=null,location:C,navigationType:Q=_I.Pop,navigator:B,static:E=!1,future:i}=A;r0()&&kA(!1);let e=I.replace(/^\/*/,"/"),o=AA.useMemo(()=>({basename:e,navigator:B,static:E,future:_l({v7_relativeSplatPath:!1},i)}),[e,i,B,E]);typeof C=="string"&&(C=ie(C));let{pathname:t="/",search:s="",hash:v="",state:r=null,key:n="default"}=C,a=AA.useMemo(()=>{let c=sP(t,e);return c==null?null:{location:{pathname:c,search:s,hash:v,state:r,key:n},navigationType:Q}},[e,t,s,v,r,n,Q]);return a==null?null:AA.createElement(v0.Provider,{value:o},AA.createElement(UG.Provider,{children:g,value:a}))}new Promise(()=>{});function x4(A){let I={hasErrorBoundary:A.ErrorBoundary!=null||A.errorElement!=null};return A.Component&&Object.assign(I,{element:AA.createElement(A.Component),Component:void 0}),A.HydrateFallback&&Object.assign(I,{hydrateFallbackElement:AA.createElement(A.HydrateFallback),HydrateFallback:void 0}),A.ErrorBoundary&&Object.assign(I,{errorElement:AA.createElement(A.ErrorBoundary),ErrorBoundary:void 0}),I}/** - * React Router DOM v6.30.0 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function $l(){return $l=Object.assign?Object.assign.bind():function(A){for(var I=1;I{let C=A[g];return I.concat(Array.isArray(C)?C.map(Q=>[g,Q]):[[g,C]])},[]))}function O4(A,I){let g=Vy(A);return I&&I.forEach((C,Q)=>{g.has(Q)||I.getAll(Q).forEach(B=>{g.append(Q,B)})}),g}const q4="6";try{window.__reactRouterVersion=q4}catch{}function BXA(A,I){return s4({basename:void 0,future:$l({},void 0,{v7_prependBasename:!0}),history:kH({window:void 0}),hydrationData:_4(),routes:A,mapRouteProperties:x4,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function _4(){var A;let I=(A=window)==null?void 0:A.__staticRouterHydrationData;return I&&I.errors&&(I=$l({},I,{errors:$4(I.errors)})),I}function $4(A){if(!A)return null;let I=Object.entries(A),g={};for(let[C,Q]of I)if(Q&&Q.__type==="RouteErrorResponse")g[C]=new ql(Q.status,Q.statusText,Q.data,Q.internal===!0);else if(Q&&Q.__type==="Error"){if(Q.__subType){let B=window[Q.__subType];if(typeof B=="function")try{let E=new B(Q.message);E.stack="",g[C]=E}catch{}}if(g[C]==null){let B=new Error(Q.message);B.stack="",g[C]=B}}else g[C]=Q;return g}const Ax=AA.createContext({isTransitioning:!1}),Ix=AA.createContext(new Map),gx="startTransition",r2=D5[gx],Cx="flushSync",a2=FH[Cx];function Qx(A){r2?r2(A):A()}function Ov(A){a2?a2(A):A()}class Bx{constructor(){this.status="pending",this.promise=new Promise((I,g)=>{this.resolve=C=>{this.status==="pending"&&(this.status="resolved",I(C))},this.reject=C=>{this.status==="pending"&&(this.status="rejected",g(C))}})}}function EXA(A){let{fallbackElement:I,router:g,future:C}=A,[Q,B]=AA.useState(g.state),[E,i]=AA.useState(),[e,o]=AA.useState({isTransitioning:!1}),[t,s]=AA.useState(),[v,r]=AA.useState(),[n,a]=AA.useState(),c=AA.useRef(new Map),{v7_startTransition:d}=C||{},l=AA.useCallback(y=>{d?Qx(y):y()},[d]),h=AA.useCallback((y,S)=>{let{deletedFetchers:L,flushSync:V,viewTransitionOpts:z}=S;y.fetchers.forEach((eA,K)=>{eA.data!==void 0&&c.current.set(K,eA.data)}),L.forEach(eA=>c.current.delete(eA));let EA=g.window==null||g.window.document==null||typeof g.window.document.startViewTransition!="function";if(!z||EA){V?Ov(()=>B(y)):l(()=>B(y));return}if(V){Ov(()=>{v&&(t&&t.resolve(),v.skipTransition()),o({isTransitioning:!0,flushSync:!0,currentLocation:z.currentLocation,nextLocation:z.nextLocation})});let eA=g.window.document.startViewTransition(()=>{Ov(()=>B(y))});eA.finished.finally(()=>{Ov(()=>{s(void 0),r(void 0),i(void 0),o({isTransitioning:!1})})}),Ov(()=>r(eA));return}v?(t&&t.resolve(),v.skipTransition(),a({state:y,currentLocation:z.currentLocation,nextLocation:z.nextLocation})):(i(y),o({isTransitioning:!0,flushSync:!1,currentLocation:z.currentLocation,nextLocation:z.nextLocation}))},[g.window,v,t,c,l]);AA.useLayoutEffect(()=>g.subscribe(h),[g,h]),AA.useEffect(()=>{e.isTransitioning&&!e.flushSync&&s(new Bx)},[e]),AA.useEffect(()=>{if(t&&E&&g.window){let y=E,S=t.promise,L=g.window.document.startViewTransition(async()=>{l(()=>B(y)),await S});L.finished.finally(()=>{s(void 0),r(void 0),i(void 0),o({isTransitioning:!1})}),r(L)}},[l,E,t,g.window]),AA.useEffect(()=>{t&&E&&Q.location.key===E.location.key&&t.resolve()},[t,v,Q.location,E]),AA.useEffect(()=>{!e.isTransitioning&&n&&(i(n.state),o({isTransitioning:!0,flushSync:!1,currentLocation:n.currentLocation,nextLocation:n.nextLocation}),a(void 0))},[e.isTransitioning,n]),AA.useEffect(()=>{},[]);let D=AA.useMemo(()=>({createHref:g.createHref,encodeLocation:g.encodeLocation,go:y=>g.navigate(y),push:(y,S,L)=>g.navigate(y,{state:S,preventScrollReset:L==null?void 0:L.preventScrollReset}),replace:(y,S,L)=>g.navigate(y,{replace:!0,state:S,preventScrollReset:L==null?void 0:L.preventScrollReset})}),[g]),u=g.basename||"/",w=AA.useMemo(()=>({router:g,navigator:D,static:!1,basename:u}),[g,D,u]),b=AA.useMemo(()=>({v7_relativeSplatPath:g.future.v7_relativeSplatPath}),[g.future.v7_relativeSplatPath]);return AA.useEffect(()=>f4(C,g.future),[C,g.future]),AA.createElement(AA.Fragment,null,AA.createElement(s0.Provider,{value:w},AA.createElement(k8.Provider,{value:Q},AA.createElement(Ix.Provider,{value:c.current},AA.createElement(Ax.Provider,{value:e},AA.createElement(H4,{basename:u,location:Q.location,navigationType:Q.historyAction,navigator:D,future:b},Q.initialized||g.future.v7_partialHydration?AA.createElement(Ex,{routes:g.routes,future:g.future,state:Q}):I))))),null)}const Ex=AA.memo(ix);function ix(A){let{routes:I,future:g,state:C}=A;return k4(I,void 0,C,g)}var P2;(function(A){A.UseScrollRestoration="useScrollRestoration",A.UseSubmit="useSubmit",A.UseSubmitFetcher="useSubmitFetcher",A.UseFetcher="useFetcher",A.useViewTransitionState="useViewTransitionState"})(P2||(P2={}));var c2;(function(A){A.UseFetcher="useFetcher",A.UseFetchers="useFetchers",A.UseScrollRestoration="useScrollRestoration"})(c2||(c2={}));function iXA(A){let I=AA.useRef(Vy(A)),g=AA.useRef(!1),C=FG(),Q=AA.useMemo(()=>O4(C.search,g.current?null:I.current),[C.search]),B=T4(),E=AA.useCallback((i,e)=>{const o=Vy(typeof i=="function"?i(Q):i);g.current=!0,B("?"+o,e)},[B,Q]);return[Q,E]}function W8(A){var I,g,C="";if(typeof A=="string"||typeof A=="number")C+=A;else if(typeof A=="object")if(Array.isArray(A)){var Q=A.length;for(I=0;I{const I=tx(A),{conflictingClassGroups:g,conflictingClassGroupModifiers:C}=A;return{getClassGroupId:E=>{const i=E.split(YG);return i[0]===""&&i.length!==1&&i.shift(),V8(i,I)||ox(E)},getConflictingClassGroupIds:(E,i)=>{const e=g[E]||[];return i&&C[E]?[...e,...C[E]]:e}}},V8=(A,I)=>{var E;if(A.length===0)return I.classGroupId;const g=A[0],C=I.nextPart.get(g),Q=C?V8(A.slice(1),C):void 0;if(Q)return Q;if(I.validators.length===0)return;const B=A.join(YG);return(E=I.validators.find(({validator:i})=>i(B)))==null?void 0:E.classGroupId},n2=/^\[(.+)\]$/,ox=A=>{if(n2.test(A)){const I=n2.exec(A)[1],g=I==null?void 0:I.substring(0,I.indexOf(":"));if(g)return"arbitrary.."+g}},tx=A=>{const{theme:I,prefix:g}=A,C={nextPart:new Map,validators:[]};return vx(Object.entries(A.classGroups),g).forEach(([B,E])=>{zy(E,C,B,I)}),C},zy=(A,I,g,C)=>{A.forEach(Q=>{if(typeof Q=="string"){const B=Q===""?I:l2(I,Q);B.classGroupId=g;return}if(typeof Q=="function"){if(sx(Q)){zy(Q(C),I,g,C);return}I.validators.push({validator:Q,classGroupId:g});return}Object.entries(Q).forEach(([B,E])=>{zy(E,l2(I,B),g,C)})})},l2=(A,I)=>{let g=A;return I.split(YG).forEach(C=>{g.nextPart.has(C)||g.nextPart.set(C,{nextPart:new Map,validators:[]}),g=g.nextPart.get(C)}),g},sx=A=>A.isThemeGetter,vx=(A,I)=>I?A.map(([g,C])=>{const Q=C.map(B=>typeof B=="string"?I+B:typeof B=="object"?Object.fromEntries(Object.entries(B).map(([E,i])=>[I+E,i])):B);return[g,Q]}):A,rx=A=>{if(A<1)return{get:()=>{},set:()=>{}};let I=0,g=new Map,C=new Map;const Q=(B,E)=>{g.set(B,E),I++,I>A&&(I=0,C=g,g=new Map)};return{get(B){let E=g.get(B);if(E!==void 0)return E;if((E=C.get(B))!==void 0)return Q(B,E),E},set(B,E){g.has(B)?g.set(B,E):Q(B,E)}}},z8="!",ax=A=>{const{separator:I,experimentalParseClassName:g}=A,C=I.length===1,Q=I[0],B=I.length,E=i=>{const e=[];let o=0,t=0,s;for(let c=0;ct?s-t:void 0;return{modifiers:e,hasImportantModifier:r,baseClassName:n,maybePostfixModifierPosition:a}};return g?i=>g({className:i,parseClassName:E}):E},Px=A=>{if(A.length<=1)return A;const I=[];let g=[];return A.forEach(C=>{C[0]==="["?(I.push(...g.sort(),C),g=[]):g.push(C)}),I.push(...g.sort()),I},cx=A=>({cache:rx(A.cacheSize),parseClassName:ax(A),...ex(A)}),nx=/\s+/,lx=(A,I)=>{const{parseClassName:g,getClassGroupId:C,getConflictingClassGroupIds:Q}=I,B=[],E=A.trim().split(nx);let i="";for(let e=E.length-1;e>=0;e-=1){const o=E[e],{modifiers:t,hasImportantModifier:s,baseClassName:v,maybePostfixModifierPosition:r}=g(o);let n=!!r,a=C(n?v.substring(0,r):v);if(!a){if(!n){i=o+(i.length>0?" "+i:i);continue}if(a=C(v),!a){i=o+(i.length>0?" "+i:i);continue}n=!1}const c=Px(t).join(":"),d=s?c+z8:c,l=d+a;if(B.includes(l))continue;B.push(l);const h=Q(a,n);for(let D=0;D0?" "+i:i)}return i};function dx(){let A=0,I,g,C="";for(;A{if(typeof A=="string")return A;let I,g="";for(let C=0;Cs(t),A());return g=cx(o),C=g.cache.get,Q=g.cache.set,B=i,i(e)}function i(e){const o=C(e);if(o)return o;const t=lx(e,g);return Q(e,t),t}return function(){return B(dx.apply(null,arguments))}}const aI=A=>{const I=g=>g[A]||[];return I.isThemeGetter=!0,I},X8=/^\[(?:([a-z-]+):)?(.+)\]$/i,Dx=/^\d+\/\d+$/,ux=new Set(["px","full","screen"]),bx=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,yx=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,wx=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,mx=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Gx=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,nE=A=>ds(A)||ux.has(A)||Dx.test(A),Ii=A=>Qv(A,"length",kx),ds=A=>!!A&&!Number.isNaN(Number(A)),zd=A=>Qv(A,"number",ds),qv=A=>!!A&&Number.isInteger(Number(A)),Rx=A=>A.endsWith("%")&&ds(A.slice(0,-1)),RA=A=>X8.test(A),gi=A=>bx.test(A),Lx=new Set(["length","size","percentage"]),Sx=A=>Qv(A,Lx,j8),Tx=A=>Qv(A,"position",j8),Ux=new Set(["image","url"]),Fx=A=>Qv(A,Ux,Nx),Yx=A=>Qv(A,"",px),_v=()=>!0,Qv=(A,I,g)=>{const C=X8.exec(A);return C?C[1]?typeof I=="string"?C[1]===I:I.has(C[1]):g(C[2]):!1},kx=A=>yx.test(A)&&!wx.test(A),j8=()=>!1,px=A=>mx.test(A),Nx=A=>Gx.test(A),Zx=()=>{const A=aI("colors"),I=aI("spacing"),g=aI("blur"),C=aI("brightness"),Q=aI("borderColor"),B=aI("borderRadius"),E=aI("borderSpacing"),i=aI("borderWidth"),e=aI("contrast"),o=aI("grayscale"),t=aI("hueRotate"),s=aI("invert"),v=aI("gap"),r=aI("gradientColorStops"),n=aI("gradientColorStopPositions"),a=aI("inset"),c=aI("margin"),d=aI("opacity"),l=aI("padding"),h=aI("saturate"),D=aI("scale"),u=aI("sepia"),w=aI("skew"),b=aI("space"),y=aI("translate"),S=()=>["auto","contain","none"],L=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto",RA,I],z=()=>[RA,I],EA=()=>["",nE,Ii],eA=()=>["auto",ds,RA],K=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],p=()=>["solid","dashed","dotted","double","none"],J=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],N=()=>["","0",RA],q=()=>["auto","avoid","all","avoid-page","page","left","right","column"],IA=()=>[ds,RA];return{cacheSize:500,separator:":",theme:{colors:[_v],spacing:[nE,Ii],blur:["none","",gi,RA],brightness:IA(),borderColor:[A],borderRadius:["none","","full",gi,RA],borderSpacing:z(),borderWidth:EA(),contrast:IA(),grayscale:N(),hueRotate:IA(),invert:N(),gap:z(),gradientColorStops:[A],gradientColorStopPositions:[Rx,Ii],inset:V(),margin:V(),opacity:IA(),padding:z(),saturate:IA(),scale:IA(),sepia:N(),skew:IA(),space:z(),translate:z()},classGroups:{aspect:[{aspect:["auto","square","video",RA]}],container:["container"],columns:[{columns:[gi]}],"break-after":[{"break-after":q()}],"break-before":[{"break-before":q()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...K(),RA]}],overflow:[{overflow:L()}],"overflow-x":[{"overflow-x":L()}],"overflow-y":[{"overflow-y":L()}],overscroll:[{overscroll:S()}],"overscroll-x":[{"overscroll-x":S()}],"overscroll-y":[{"overscroll-y":S()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[a]}],"inset-x":[{"inset-x":[a]}],"inset-y":[{"inset-y":[a]}],start:[{start:[a]}],end:[{end:[a]}],top:[{top:[a]}],right:[{right:[a]}],bottom:[{bottom:[a]}],left:[{left:[a]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",qv,RA]}],basis:[{basis:V()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",RA]}],grow:[{grow:N()}],shrink:[{shrink:N()}],order:[{order:["first","last","none",qv,RA]}],"grid-cols":[{"grid-cols":[_v]}],"col-start-end":[{col:["auto",{span:["full",qv,RA]},RA]}],"col-start":[{"col-start":eA()}],"col-end":[{"col-end":eA()}],"grid-rows":[{"grid-rows":[_v]}],"row-start-end":[{row:["auto",{span:[qv,RA]},RA]}],"row-start":[{"row-start":eA()}],"row-end":[{"row-end":eA()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",RA]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",RA]}],gap:[{gap:[v]}],"gap-x":[{"gap-x":[v]}],"gap-y":[{"gap-y":[v]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[l]}],px:[{px:[l]}],py:[{py:[l]}],ps:[{ps:[l]}],pe:[{pe:[l]}],pt:[{pt:[l]}],pr:[{pr:[l]}],pb:[{pb:[l]}],pl:[{pl:[l]}],m:[{m:[c]}],mx:[{mx:[c]}],my:[{my:[c]}],ms:[{ms:[c]}],me:[{me:[c]}],mt:[{mt:[c]}],mr:[{mr:[c]}],mb:[{mb:[c]}],ml:[{ml:[c]}],"space-x":[{"space-x":[b]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[b]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",RA,I]}],"min-w":[{"min-w":[RA,I,"min","max","fit"]}],"max-w":[{"max-w":[RA,I,"none","full","min","max","fit","prose",{screen:[gi]},gi]}],h:[{h:[RA,I,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[RA,I,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[RA,I,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[RA,I,"auto","min","max","fit"]}],"font-size":[{text:["base",gi,Ii]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",zd]}],"font-family":[{font:[_v]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",RA]}],"line-clamp":[{"line-clamp":["none",ds,zd]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",nE,RA]}],"list-image":[{"list-image":["none",RA]}],"list-style-type":[{list:["none","disc","decimal",RA]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[A]}],"placeholder-opacity":[{"placeholder-opacity":[d]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[A]}],"text-opacity":[{"text-opacity":[d]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...p(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",nE,Ii]}],"underline-offset":[{"underline-offset":["auto",nE,RA]}],"text-decoration-color":[{decoration:[A]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:z()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",RA]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",RA]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[d]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...K(),Tx]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Sx]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Fx]}],"bg-color":[{bg:[A]}],"gradient-from-pos":[{from:[n]}],"gradient-via-pos":[{via:[n]}],"gradient-to-pos":[{to:[n]}],"gradient-from":[{from:[r]}],"gradient-via":[{via:[r]}],"gradient-to":[{to:[r]}],rounded:[{rounded:[B]}],"rounded-s":[{"rounded-s":[B]}],"rounded-e":[{"rounded-e":[B]}],"rounded-t":[{"rounded-t":[B]}],"rounded-r":[{"rounded-r":[B]}],"rounded-b":[{"rounded-b":[B]}],"rounded-l":[{"rounded-l":[B]}],"rounded-ss":[{"rounded-ss":[B]}],"rounded-se":[{"rounded-se":[B]}],"rounded-ee":[{"rounded-ee":[B]}],"rounded-es":[{"rounded-es":[B]}],"rounded-tl":[{"rounded-tl":[B]}],"rounded-tr":[{"rounded-tr":[B]}],"rounded-br":[{"rounded-br":[B]}],"rounded-bl":[{"rounded-bl":[B]}],"border-w":[{border:[i]}],"border-w-x":[{"border-x":[i]}],"border-w-y":[{"border-y":[i]}],"border-w-s":[{"border-s":[i]}],"border-w-e":[{"border-e":[i]}],"border-w-t":[{"border-t":[i]}],"border-w-r":[{"border-r":[i]}],"border-w-b":[{"border-b":[i]}],"border-w-l":[{"border-l":[i]}],"border-opacity":[{"border-opacity":[d]}],"border-style":[{border:[...p(),"hidden"]}],"divide-x":[{"divide-x":[i]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[i]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[d]}],"divide-style":[{divide:p()}],"border-color":[{border:[Q]}],"border-color-x":[{"border-x":[Q]}],"border-color-y":[{"border-y":[Q]}],"border-color-s":[{"border-s":[Q]}],"border-color-e":[{"border-e":[Q]}],"border-color-t":[{"border-t":[Q]}],"border-color-r":[{"border-r":[Q]}],"border-color-b":[{"border-b":[Q]}],"border-color-l":[{"border-l":[Q]}],"divide-color":[{divide:[Q]}],"outline-style":[{outline:["",...p()]}],"outline-offset":[{"outline-offset":[nE,RA]}],"outline-w":[{outline:[nE,Ii]}],"outline-color":[{outline:[A]}],"ring-w":[{ring:EA()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[A]}],"ring-opacity":[{"ring-opacity":[d]}],"ring-offset-w":[{"ring-offset":[nE,Ii]}],"ring-offset-color":[{"ring-offset":[A]}],shadow:[{shadow:["","inner","none",gi,Yx]}],"shadow-color":[{shadow:[_v]}],opacity:[{opacity:[d]}],"mix-blend":[{"mix-blend":[...J(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":J()}],filter:[{filter:["","none"]}],blur:[{blur:[g]}],brightness:[{brightness:[C]}],contrast:[{contrast:[e]}],"drop-shadow":[{"drop-shadow":["","none",gi,RA]}],grayscale:[{grayscale:[o]}],"hue-rotate":[{"hue-rotate":[t]}],invert:[{invert:[s]}],saturate:[{saturate:[h]}],sepia:[{sepia:[u]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[g]}],"backdrop-brightness":[{"backdrop-brightness":[C]}],"backdrop-contrast":[{"backdrop-contrast":[e]}],"backdrop-grayscale":[{"backdrop-grayscale":[o]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[t]}],"backdrop-invert":[{"backdrop-invert":[s]}],"backdrop-opacity":[{"backdrop-opacity":[d]}],"backdrop-saturate":[{"backdrop-saturate":[h]}],"backdrop-sepia":[{"backdrop-sepia":[u]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[E]}],"border-spacing-x":[{"border-spacing-x":[E]}],"border-spacing-y":[{"border-spacing-y":[E]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",RA]}],duration:[{duration:IA()}],ease:[{ease:["linear","in","out","in-out",RA]}],delay:[{delay:IA()}],animate:[{animate:["none","spin","ping","pulse","bounce",RA]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[D]}],"scale-x":[{"scale-x":[D]}],"scale-y":[{"scale-y":[D]}],rotate:[{rotate:[qv,RA]}],"translate-x":[{"translate-x":[y]}],"translate-y":[{"translate-y":[y]}],"skew-x":[{"skew-x":[w]}],"skew-y":[{"skew-y":[w]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",RA]}],accent:[{accent:["auto",A]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",RA]}],"caret-color":[{caret:[A]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":z()}],"scroll-mx":[{"scroll-mx":z()}],"scroll-my":[{"scroll-my":z()}],"scroll-ms":[{"scroll-ms":z()}],"scroll-me":[{"scroll-me":z()}],"scroll-mt":[{"scroll-mt":z()}],"scroll-mr":[{"scroll-mr":z()}],"scroll-mb":[{"scroll-mb":z()}],"scroll-ml":[{"scroll-ml":z()}],"scroll-p":[{"scroll-p":z()}],"scroll-px":[{"scroll-px":z()}],"scroll-py":[{"scroll-py":z()}],"scroll-ps":[{"scroll-ps":z()}],"scroll-pe":[{"scroll-pe":z()}],"scroll-pt":[{"scroll-pt":z()}],"scroll-pr":[{"scroll-pr":z()}],"scroll-pb":[{"scroll-pb":z()}],"scroll-pl":[{"scroll-pl":z()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",RA]}],fill:[{fill:[A,"none"]}],"stroke-w":[{stroke:[nE,Ii,zd]}],stroke:[{stroke:[A,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},oXA=hx(Zx);function f8(A,I){return function(){return A.apply(I,arguments)}}const{toString:Kx}=Object.prototype,{getPrototypeOf:kG}=Object,a0=(A=>I=>{const g=Kx.call(I);return A[g]||(A[g]=g.slice(8,-1).toLowerCase())})(Object.create(null)),SB=A=>(A=A.toLowerCase(),I=>a0(I)===A),P0=A=>I=>typeof I===A,{isArray:Bv}=Array,za=P0("undefined");function Jx(A){return A!==null&&!za(A)&&A.constructor!==null&&!za(A.constructor)&&IQ(A.constructor.isBuffer)&&A.constructor.isBuffer(A)}const H8=SB("ArrayBuffer");function Wx(A){let I;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?I=ArrayBuffer.isView(A):I=A&&A.buffer&&H8(A.buffer),I}const Vx=P0("string"),IQ=P0("function"),x8=P0("number"),c0=A=>A!==null&&typeof A=="object",zx=A=>A===!0||A===!1,Jn=A=>{if(a0(A)!=="object")return!1;const I=kG(A);return(I===null||I===Object.prototype||Object.getPrototypeOf(I)===null)&&!(Symbol.toStringTag in A)&&!(Symbol.iterator in A)},Mx=SB("Date"),Xx=SB("File"),jx=SB("Blob"),fx=SB("FileList"),Hx=A=>c0(A)&&IQ(A.pipe),xx=A=>{let I;return A&&(typeof FormData=="function"&&A instanceof FormData||IQ(A.append)&&((I=a0(A))==="formdata"||I==="object"&&IQ(A.toString)&&A.toString()==="[object FormData]"))},Ox=SB("URLSearchParams"),[qx,_x,$x,AO]=["ReadableStream","Request","Response","Headers"].map(SB),IO=A=>A.trim?A.trim():A.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function vP(A,I,{allOwnKeys:g=!1}={}){if(A===null||typeof A>"u")return;let C,Q;if(typeof A!="object"&&(A=[A]),Bv(A))for(C=0,Q=A.length;C0;)if(Q=g[C],I===Q.toLowerCase())return Q;return null}const je=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,q8=A=>!za(A)&&A!==je;function My(){const{caseless:A}=q8(this)&&this||{},I={},g=(C,Q)=>{const B=A&&O8(I,Q)||Q;Jn(I[B])&&Jn(C)?I[B]=My(I[B],C):Jn(C)?I[B]=My({},C):Bv(C)?I[B]=C.slice():I[B]=C};for(let C=0,Q=arguments.length;C(vP(I,(Q,B)=>{g&&IQ(Q)?A[B]=f8(Q,g):A[B]=Q},{allOwnKeys:C}),A),CO=A=>(A.charCodeAt(0)===65279&&(A=A.slice(1)),A),QO=(A,I,g,C)=>{A.prototype=Object.create(I.prototype,C),A.prototype.constructor=A,Object.defineProperty(A,"super",{value:I.prototype}),g&&Object.assign(A.prototype,g)},BO=(A,I,g,C)=>{let Q,B,E;const i={};if(I=I||{},A==null)return I;do{for(Q=Object.getOwnPropertyNames(A),B=Q.length;B-- >0;)E=Q[B],(!C||C(E,A,I))&&!i[E]&&(I[E]=A[E],i[E]=!0);A=g!==!1&&kG(A)}while(A&&(!g||g(A,I))&&A!==Object.prototype);return I},EO=(A,I,g)=>{A=String(A),(g===void 0||g>A.length)&&(g=A.length),g-=I.length;const C=A.indexOf(I,g);return C!==-1&&C===g},iO=A=>{if(!A)return null;if(Bv(A))return A;let I=A.length;if(!x8(I))return null;const g=new Array(I);for(;I-- >0;)g[I]=A[I];return g},eO=(A=>I=>A&&I instanceof A)(typeof Uint8Array<"u"&&kG(Uint8Array)),oO=(A,I)=>{const C=(A&&A[Symbol.iterator]).call(A);let Q;for(;(Q=C.next())&&!Q.done;){const B=Q.value;I.call(A,B[0],B[1])}},tO=(A,I)=>{let g;const C=[];for(;(g=A.exec(I))!==null;)C.push(g);return C},sO=SB("HTMLFormElement"),vO=A=>A.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(g,C,Q){return C.toUpperCase()+Q}),d2=(({hasOwnProperty:A})=>(I,g)=>A.call(I,g))(Object.prototype),rO=SB("RegExp"),_8=(A,I)=>{const g=Object.getOwnPropertyDescriptors(A),C={};vP(g,(Q,B)=>{let E;(E=I(Q,B,A))!==!1&&(C[B]=E||Q)}),Object.defineProperties(A,C)},aO=A=>{_8(A,(I,g)=>{if(IQ(A)&&["arguments","caller","callee"].indexOf(g)!==-1)return!1;const C=A[g];if(IQ(C)){if(I.enumerable=!1,"writable"in I){I.writable=!1;return}I.set||(I.set=()=>{throw Error("Can not rewrite read-only method '"+g+"'")})}})},PO=(A,I)=>{const g={},C=Q=>{Q.forEach(B=>{g[B]=!0})};return Bv(A)?C(A):C(String(A).split(I)),g},cO=()=>{},nO=(A,I)=>A!=null&&Number.isFinite(A=+A)?A:I;function lO(A){return!!(A&&IQ(A.append)&&A[Symbol.toStringTag]==="FormData"&&A[Symbol.iterator])}const dO=A=>{const I=new Array(10),g=(C,Q)=>{if(c0(C)){if(I.indexOf(C)>=0)return;if(!("toJSON"in C)){I[Q]=C;const B=Bv(C)?[]:{};return vP(C,(E,i)=>{const e=g(E,Q+1);!za(e)&&(B[i]=e)}),I[Q]=void 0,B}}return C};return g(A,0)},hO=SB("AsyncFunction"),DO=A=>A&&(c0(A)||IQ(A))&&IQ(A.then)&&IQ(A.catch),$8=((A,I)=>A?setImmediate:I?((g,C)=>(je.addEventListener("message",({source:Q,data:B})=>{Q===je&&B===g&&C.length&&C.shift()()},!1),Q=>{C.push(Q),je.postMessage(g,"*")}))(`axios@${Math.random()}`,[]):g=>setTimeout(g))(typeof setImmediate=="function",IQ(je.postMessage)),uO=typeof queueMicrotask<"u"?queueMicrotask.bind(je):typeof process<"u"&&process.nextTick||$8,W={isArray:Bv,isArrayBuffer:H8,isBuffer:Jx,isFormData:xx,isArrayBufferView:Wx,isString:Vx,isNumber:x8,isBoolean:zx,isObject:c0,isPlainObject:Jn,isReadableStream:qx,isRequest:_x,isResponse:$x,isHeaders:AO,isUndefined:za,isDate:Mx,isFile:Xx,isBlob:jx,isRegExp:rO,isFunction:IQ,isStream:Hx,isURLSearchParams:Ox,isTypedArray:eO,isFileList:fx,forEach:vP,merge:My,extend:gO,trim:IO,stripBOM:CO,inherits:QO,toFlatObject:BO,kindOf:a0,kindOfTest:SB,endsWith:EO,toArray:iO,forEachEntry:oO,matchAll:tO,isHTMLForm:sO,hasOwnProperty:d2,hasOwnProp:d2,reduceDescriptors:_8,freezeMethods:aO,toObjectSet:PO,toCamelCase:vO,noop:cO,toFiniteNumber:nO,findKey:O8,global:je,isContextDefined:q8,isSpecCompliantForm:lO,toJSONObject:dO,isAsyncFn:hO,isThenable:DO,setImmediate:$8,asap:uO};function mA(A,I,g,C,Q){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=A,this.name="AxiosError",I&&(this.code=I),g&&(this.config=g),C&&(this.request=C),Q&&(this.response=Q,this.status=Q.status?Q.status:null)}W.inherits(mA,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:W.toJSONObject(this.config),code:this.code,status:this.status}}});const AJ=mA.prototype,IJ={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(A=>{IJ[A]={value:A}});Object.defineProperties(mA,IJ);Object.defineProperty(AJ,"isAxiosError",{value:!0});mA.from=(A,I,g,C,Q,B)=>{const E=Object.create(AJ);return W.toFlatObject(A,E,function(e){return e!==Error.prototype},i=>i!=="isAxiosError"),mA.call(E,A.message,I,g,C,Q),E.cause=A,E.name=A.name,B&&Object.assign(E,B),E};const bO=null;function Xy(A){return W.isPlainObject(A)||W.isArray(A)}function gJ(A){return W.endsWith(A,"[]")?A.slice(0,-2):A}function h2(A,I,g){return A?A.concat(I).map(function(Q,B){return Q=gJ(Q),!g&&B?"["+Q+"]":Q}).join(g?".":""):I}function yO(A){return W.isArray(A)&&!A.some(Xy)}const wO=W.toFlatObject(W,{},null,function(I){return/^is[A-Z]/.test(I)});function n0(A,I,g){if(!W.isObject(A))throw new TypeError("target must be an object");I=I||new FormData,g=W.toFlatObject(g,{metaTokens:!0,dots:!1,indexes:!1},!1,function(a,c){return!W.isUndefined(c[a])});const C=g.metaTokens,Q=g.visitor||t,B=g.dots,E=g.indexes,e=(g.Blob||typeof Blob<"u"&&Blob)&&W.isSpecCompliantForm(I);if(!W.isFunction(Q))throw new TypeError("visitor must be a function");function o(n){if(n===null)return"";if(W.isDate(n))return n.toISOString();if(!e&&W.isBlob(n))throw new mA("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(n)||W.isTypedArray(n)?e&&typeof Blob=="function"?new Blob([n]):Buffer.from(n):n}function t(n,a,c){let d=n;if(n&&!c&&typeof n=="object"){if(W.endsWith(a,"{}"))a=C?a:a.slice(0,-2),n=JSON.stringify(n);else if(W.isArray(n)&&yO(n)||(W.isFileList(n)||W.endsWith(a,"[]"))&&(d=W.toArray(n)))return a=gJ(a),d.forEach(function(h,D){!(W.isUndefined(h)||h===null)&&I.append(E===!0?h2([a],D,B):E===null?a:a+"[]",o(h))}),!1}return Xy(n)?!0:(I.append(h2(c,a,B),o(n)),!1)}const s=[],v=Object.assign(wO,{defaultVisitor:t,convertValue:o,isVisitable:Xy});function r(n,a){if(!W.isUndefined(n)){if(s.indexOf(n)!==-1)throw Error("Circular reference detected in "+a.join("."));s.push(n),W.forEach(n,function(d,l){(!(W.isUndefined(d)||d===null)&&Q.call(I,d,W.isString(l)?l.trim():l,a,v))===!0&&r(d,a?a.concat(l):[l])}),s.pop()}}if(!W.isObject(A))throw new TypeError("data must be an object");return r(A),I}function D2(A){const I={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(A).replace(/[!'()~]|%20|%00/g,function(C){return I[C]})}function pG(A,I){this._pairs=[],A&&n0(A,this,I)}const CJ=pG.prototype;CJ.append=function(I,g){this._pairs.push([I,g])};CJ.toString=function(I){const g=I?function(C){return I.call(this,C,D2)}:D2;return this._pairs.map(function(Q){return g(Q[0])+"="+g(Q[1])},"").join("&")};function mO(A){return encodeURIComponent(A).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function QJ(A,I,g){if(!I)return A;const C=g&&g.encode||mO;W.isFunction(g)&&(g={serialize:g});const Q=g&&g.serialize;let B;if(Q?B=Q(I,g):B=W.isURLSearchParams(I)?I.toString():new pG(I,g).toString(C),B){const E=A.indexOf("#");E!==-1&&(A=A.slice(0,E)),A+=(A.indexOf("?")===-1?"?":"&")+B}return A}class u2{constructor(){this.handlers=[]}use(I,g,C){return this.handlers.push({fulfilled:I,rejected:g,synchronous:C?C.synchronous:!1,runWhen:C?C.runWhen:null}),this.handlers.length-1}eject(I){this.handlers[I]&&(this.handlers[I]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(I){W.forEach(this.handlers,function(C){C!==null&&I(C)})}}const BJ={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},GO=typeof URLSearchParams<"u"?URLSearchParams:pG,RO=typeof FormData<"u"?FormData:null,LO=typeof Blob<"u"?Blob:null,SO={isBrowser:!0,classes:{URLSearchParams:GO,FormData:RO,Blob:LO},protocols:["http","https","file","blob","url","data"]},NG=typeof window<"u"&&typeof document<"u",jy=typeof navigator=="object"&&navigator||void 0,TO=NG&&(!jy||["ReactNative","NativeScript","NS"].indexOf(jy.product)<0),UO=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",FO=NG&&window.location.href||"http://localhost",YO=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:NG,hasStandardBrowserEnv:TO,hasStandardBrowserWebWorkerEnv:UO,navigator:jy,origin:FO},Symbol.toStringTag,{value:"Module"})),Mg={...YO,...SO};function kO(A,I){return n0(A,new Mg.classes.URLSearchParams,Object.assign({visitor:function(g,C,Q,B){return Mg.isNode&&W.isBuffer(g)?(this.append(C,g.toString("base64")),!1):B.defaultVisitor.apply(this,arguments)}},I))}function pO(A){return W.matchAll(/\w+|\[(\w*)]/g,A).map(I=>I[0]==="[]"?"":I[1]||I[0])}function NO(A){const I={},g=Object.keys(A);let C;const Q=g.length;let B;for(C=0;C=g.length;return E=!E&&W.isArray(Q)?Q.length:E,e?(W.hasOwnProp(Q,E)?Q[E]=[Q[E],C]:Q[E]=C,!i):((!Q[E]||!W.isObject(Q[E]))&&(Q[E]=[]),I(g,C,Q[E],B)&&W.isArray(Q[E])&&(Q[E]=NO(Q[E])),!i)}if(W.isFormData(A)&&W.isFunction(A.entries)){const g={};return W.forEachEntry(A,(C,Q)=>{I(pO(C),Q,g,0)}),g}return null}function ZO(A,I,g){if(W.isString(A))try{return(I||JSON.parse)(A),W.trim(A)}catch(C){if(C.name!=="SyntaxError")throw C}return(g||JSON.stringify)(A)}const rP={transitional:BJ,adapter:["xhr","http","fetch"],transformRequest:[function(I,g){const C=g.getContentType()||"",Q=C.indexOf("application/json")>-1,B=W.isObject(I);if(B&&W.isHTMLForm(I)&&(I=new FormData(I)),W.isFormData(I))return Q?JSON.stringify(EJ(I)):I;if(W.isArrayBuffer(I)||W.isBuffer(I)||W.isStream(I)||W.isFile(I)||W.isBlob(I)||W.isReadableStream(I))return I;if(W.isArrayBufferView(I))return I.buffer;if(W.isURLSearchParams(I))return g.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),I.toString();let i;if(B){if(C.indexOf("application/x-www-form-urlencoded")>-1)return kO(I,this.formSerializer).toString();if((i=W.isFileList(I))||C.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return n0(i?{"files[]":I}:I,e&&new e,this.formSerializer)}}return B||Q?(g.setContentType("application/json",!1),ZO(I)):I}],transformResponse:[function(I){const g=this.transitional||rP.transitional,C=g&&g.forcedJSONParsing,Q=this.responseType==="json";if(W.isResponse(I)||W.isReadableStream(I))return I;if(I&&W.isString(I)&&(C&&!this.responseType||Q)){const E=!(g&&g.silentJSONParsing)&&Q;try{return JSON.parse(I)}catch(i){if(E)throw i.name==="SyntaxError"?mA.from(i,mA.ERR_BAD_RESPONSE,this,null,this.response):i}}return I}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Mg.classes.FormData,Blob:Mg.classes.Blob},validateStatus:function(I){return I>=200&&I<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],A=>{rP.headers[A]={}});const KO=W.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),JO=A=>{const I={};let g,C,Q;return A&&A.split(` -`).forEach(function(E){Q=E.indexOf(":"),g=E.substring(0,Q).trim().toLowerCase(),C=E.substring(Q+1).trim(),!(!g||I[g]&&KO[g])&&(g==="set-cookie"?I[g]?I[g].push(C):I[g]=[C]:I[g]=I[g]?I[g]+", "+C:C)}),I},b2=Symbol("internals");function $v(A){return A&&String(A).trim().toLowerCase()}function Wn(A){return A===!1||A==null?A:W.isArray(A)?A.map(Wn):String(A)}function WO(A){const I=Object.create(null),g=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let C;for(;C=g.exec(A);)I[C[1]]=C[2];return I}const VO=A=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(A.trim());function Md(A,I,g,C,Q){if(W.isFunction(C))return C.call(this,I,g);if(Q&&(I=g),!!W.isString(I)){if(W.isString(C))return I.indexOf(C)!==-1;if(W.isRegExp(C))return C.test(I)}}function zO(A){return A.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(I,g,C)=>g.toUpperCase()+C)}function MO(A,I){const g=W.toCamelCase(" "+I);["get","set","has"].forEach(C=>{Object.defineProperty(A,C+g,{value:function(Q,B,E){return this[C].call(this,I,Q,B,E)},configurable:!0})})}let kC=class{constructor(I){I&&this.set(I)}set(I,g,C){const Q=this;function B(i,e,o){const t=$v(e);if(!t)throw new Error("header name must be a non-empty string");const s=W.findKey(Q,t);(!s||Q[s]===void 0||o===!0||o===void 0&&Q[s]!==!1)&&(Q[s||e]=Wn(i))}const E=(i,e)=>W.forEach(i,(o,t)=>B(o,t,e));if(W.isPlainObject(I)||I instanceof this.constructor)E(I,g);else if(W.isString(I)&&(I=I.trim())&&!VO(I))E(JO(I),g);else if(W.isHeaders(I))for(const[i,e]of I.entries())B(e,i,C);else I!=null&&B(g,I,C);return this}get(I,g){if(I=$v(I),I){const C=W.findKey(this,I);if(C){const Q=this[C];if(!g)return Q;if(g===!0)return WO(Q);if(W.isFunction(g))return g.call(this,Q,C);if(W.isRegExp(g))return g.exec(Q);throw new TypeError("parser must be boolean|regexp|function")}}}has(I,g){if(I=$v(I),I){const C=W.findKey(this,I);return!!(C&&this[C]!==void 0&&(!g||Md(this,this[C],C,g)))}return!1}delete(I,g){const C=this;let Q=!1;function B(E){if(E=$v(E),E){const i=W.findKey(C,E);i&&(!g||Md(C,C[i],i,g))&&(delete C[i],Q=!0)}}return W.isArray(I)?I.forEach(B):B(I),Q}clear(I){const g=Object.keys(this);let C=g.length,Q=!1;for(;C--;){const B=g[C];(!I||Md(this,this[B],B,I,!0))&&(delete this[B],Q=!0)}return Q}normalize(I){const g=this,C={};return W.forEach(this,(Q,B)=>{const E=W.findKey(C,B);if(E){g[E]=Wn(Q),delete g[B];return}const i=I?zO(B):String(B).trim();i!==B&&delete g[B],g[i]=Wn(Q),C[i]=!0}),this}concat(...I){return this.constructor.concat(this,...I)}toJSON(I){const g=Object.create(null);return W.forEach(this,(C,Q)=>{C!=null&&C!==!1&&(g[Q]=I&&W.isArray(C)?C.join(", "):C)}),g}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([I,g])=>I+": "+g).join(` -`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(I){return I instanceof this?I:new this(I)}static concat(I,...g){const C=new this(I);return g.forEach(Q=>C.set(Q)),C}static accessor(I){const C=(this[b2]=this[b2]={accessors:{}}).accessors,Q=this.prototype;function B(E){const i=$v(E);C[i]||(MO(Q,E),C[i]=!0)}return W.isArray(I)?I.forEach(B):B(I),this}};kC.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);W.reduceDescriptors(kC.prototype,({value:A},I)=>{let g=I[0].toUpperCase()+I.slice(1);return{get:()=>A,set(C){this[g]=C}}});W.freezeMethods(kC);function Xd(A,I){const g=this||rP,C=I||g,Q=kC.from(C.headers);let B=C.data;return W.forEach(A,function(i){B=i.call(g,B,Q.normalize(),I?I.status:void 0)}),Q.normalize(),B}function iJ(A){return!!(A&&A.__CANCEL__)}function Ev(A,I,g){mA.call(this,A??"canceled",mA.ERR_CANCELED,I,g),this.name="CanceledError"}W.inherits(Ev,mA,{__CANCEL__:!0});function eJ(A,I,g){const C=g.config.validateStatus;!g.status||!C||C(g.status)?A(g):I(new mA("Request failed with status code "+g.status,[mA.ERR_BAD_REQUEST,mA.ERR_BAD_RESPONSE][Math.floor(g.status/100)-4],g.config,g.request,g))}function XO(A){const I=/^([-+\w]{1,25})(:?\/\/|:)/.exec(A);return I&&I[1]||""}function jO(A,I){A=A||10;const g=new Array(A),C=new Array(A);let Q=0,B=0,E;return I=I!==void 0?I:1e3,function(e){const o=Date.now(),t=C[B];E||(E=o),g[Q]=e,C[Q]=o;let s=B,v=0;for(;s!==Q;)v+=g[s++],s=s%A;if(Q=(Q+1)%A,Q===B&&(B=(B+1)%A),o-E{g=t,Q=null,B&&(clearTimeout(B),B=null),A.apply(null,o)};return[(...o)=>{const t=Date.now(),s=t-g;s>=C?E(o,t):(Q=o,B||(B=setTimeout(()=>{B=null,E(Q)},C-s)))},()=>Q&&E(Q)]}const A9=(A,I,g=3)=>{let C=0;const Q=jO(50,250);return fO(B=>{const E=B.loaded,i=B.lengthComputable?B.total:void 0,e=E-C,o=Q(e),t=E<=i;C=E;const s={loaded:E,total:i,progress:i?E/i:void 0,bytes:e,rate:o||void 0,estimated:o&&i&&t?(i-E)/o:void 0,event:B,lengthComputable:i!=null,[I?"download":"upload"]:!0};A(s)},g)},y2=(A,I)=>{const g=A!=null;return[C=>I[0]({lengthComputable:g,total:A,loaded:C}),I[1]]},w2=A=>(...I)=>W.asap(()=>A(...I)),HO=Mg.hasStandardBrowserEnv?((A,I)=>g=>(g=new URL(g,Mg.origin),A.protocol===g.protocol&&A.host===g.host&&(I||A.port===g.port)))(new URL(Mg.origin),Mg.navigator&&/(msie|trident)/i.test(Mg.navigator.userAgent)):()=>!0,xO=Mg.hasStandardBrowserEnv?{write(A,I,g,C,Q,B){const E=[A+"="+encodeURIComponent(I)];W.isNumber(g)&&E.push("expires="+new Date(g).toGMTString()),W.isString(C)&&E.push("path="+C),W.isString(Q)&&E.push("domain="+Q),B===!0&&E.push("secure"),document.cookie=E.join("; ")},read(A){const I=document.cookie.match(new RegExp("(^|;\\s*)("+A+")=([^;]*)"));return I?decodeURIComponent(I[3]):null},remove(A){this.write(A,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function OO(A){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(A)}function qO(A,I){return I?A.replace(/\/?\/$/,"")+"/"+I.replace(/^\/+/,""):A}function oJ(A,I,g){let C=!OO(I);return A&&(C||g==!1)?qO(A,I):I}const m2=A=>A instanceof kC?{...A}:A;function co(A,I){I=I||{};const g={};function C(o,t,s,v){return W.isPlainObject(o)&&W.isPlainObject(t)?W.merge.call({caseless:v},o,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function Q(o,t,s,v){if(W.isUndefined(t)){if(!W.isUndefined(o))return C(void 0,o,s,v)}else return C(o,t,s,v)}function B(o,t){if(!W.isUndefined(t))return C(void 0,t)}function E(o,t){if(W.isUndefined(t)){if(!W.isUndefined(o))return C(void 0,o)}else return C(void 0,t)}function i(o,t,s){if(s in I)return C(o,t);if(s in A)return C(void 0,o)}const e={url:B,method:B,data:B,baseURL:E,transformRequest:E,transformResponse:E,paramsSerializer:E,timeout:E,timeoutMessage:E,withCredentials:E,withXSRFToken:E,adapter:E,responseType:E,xsrfCookieName:E,xsrfHeaderName:E,onUploadProgress:E,onDownloadProgress:E,decompress:E,maxContentLength:E,maxBodyLength:E,beforeRedirect:E,transport:E,httpAgent:E,httpsAgent:E,cancelToken:E,socketPath:E,responseEncoding:E,validateStatus:i,headers:(o,t,s)=>Q(m2(o),m2(t),s,!0)};return W.forEach(Object.keys(Object.assign({},A,I)),function(t){const s=e[t]||Q,v=s(A[t],I[t],t);W.isUndefined(v)&&s!==i||(g[t]=v)}),g}const tJ=A=>{const I=co({},A);let{data:g,withXSRFToken:C,xsrfHeaderName:Q,xsrfCookieName:B,headers:E,auth:i}=I;I.headers=E=kC.from(E),I.url=QJ(oJ(I.baseURL,I.url,I.allowAbsoluteUrls),A.params,A.paramsSerializer),i&&E.set("Authorization","Basic "+btoa((i.username||"")+":"+(i.password?unescape(encodeURIComponent(i.password)):"")));let e;if(W.isFormData(g)){if(Mg.hasStandardBrowserEnv||Mg.hasStandardBrowserWebWorkerEnv)E.setContentType(void 0);else if((e=E.getContentType())!==!1){const[o,...t]=e?e.split(";").map(s=>s.trim()).filter(Boolean):[];E.setContentType([o||"multipart/form-data",...t].join("; "))}}if(Mg.hasStandardBrowserEnv&&(C&&W.isFunction(C)&&(C=C(I)),C||C!==!1&&HO(I.url))){const o=Q&&B&&xO.read(B);o&&E.set(Q,o)}return I},_O=typeof XMLHttpRequest<"u",$O=_O&&function(A){return new Promise(function(g,C){const Q=tJ(A);let B=Q.data;const E=kC.from(Q.headers).normalize();let{responseType:i,onUploadProgress:e,onDownloadProgress:o}=Q,t,s,v,r,n;function a(){r&&r(),n&&n(),Q.cancelToken&&Q.cancelToken.unsubscribe(t),Q.signal&&Q.signal.removeEventListener("abort",t)}let c=new XMLHttpRequest;c.open(Q.method.toUpperCase(),Q.url,!0),c.timeout=Q.timeout;function d(){if(!c)return;const h=kC.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),u={data:!i||i==="text"||i==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:h,config:A,request:c};eJ(function(b){g(b),a()},function(b){C(b),a()},u),c=null}"onloadend"in c?c.onloadend=d:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.indexOf("file:")===0)||setTimeout(d)},c.onabort=function(){c&&(C(new mA("Request aborted",mA.ECONNABORTED,A,c)),c=null)},c.onerror=function(){C(new mA("Network Error",mA.ERR_NETWORK,A,c)),c=null},c.ontimeout=function(){let D=Q.timeout?"timeout of "+Q.timeout+"ms exceeded":"timeout exceeded";const u=Q.transitional||BJ;Q.timeoutErrorMessage&&(D=Q.timeoutErrorMessage),C(new mA(D,u.clarifyTimeoutError?mA.ETIMEDOUT:mA.ECONNABORTED,A,c)),c=null},B===void 0&&E.setContentType(null),"setRequestHeader"in c&&W.forEach(E.toJSON(),function(D,u){c.setRequestHeader(u,D)}),W.isUndefined(Q.withCredentials)||(c.withCredentials=!!Q.withCredentials),i&&i!=="json"&&(c.responseType=Q.responseType),o&&([v,n]=A9(o,!0),c.addEventListener("progress",v)),e&&c.upload&&([s,r]=A9(e),c.upload.addEventListener("progress",s),c.upload.addEventListener("loadend",r)),(Q.cancelToken||Q.signal)&&(t=h=>{c&&(C(!h||h.type?new Ev(null,A,c):h),c.abort(),c=null)},Q.cancelToken&&Q.cancelToken.subscribe(t),Q.signal&&(Q.signal.aborted?t():Q.signal.addEventListener("abort",t)));const l=XO(Q.url);if(l&&Mg.protocols.indexOf(l)===-1){C(new mA("Unsupported protocol "+l+":",mA.ERR_BAD_REQUEST,A));return}c.send(B||null)})},Aq=(A,I)=>{const{length:g}=A=A?A.filter(Boolean):[];if(I||g){let C=new AbortController,Q;const B=function(o){if(!Q){Q=!0,i();const t=o instanceof Error?o:this.reason;C.abort(t instanceof mA?t:new Ev(t instanceof Error?t.message:t))}};let E=I&&setTimeout(()=>{E=null,B(new mA(`timeout ${I} of ms exceeded`,mA.ETIMEDOUT))},I);const i=()=>{A&&(E&&clearTimeout(E),E=null,A.forEach(o=>{o.unsubscribe?o.unsubscribe(B):o.removeEventListener("abort",B)}),A=null)};A.forEach(o=>o.addEventListener("abort",B));const{signal:e}=C;return e.unsubscribe=()=>W.asap(i),e}},Iq=function*(A,I){let g=A.byteLength;if(g{const Q=gq(A,I);let B=0,E,i=e=>{E||(E=!0,C&&C(e))};return new ReadableStream({async pull(e){try{const{done:o,value:t}=await Q.next();if(o){i(),e.close();return}let s=t.byteLength;if(g){let v=B+=s;g(v)}e.enqueue(new Uint8Array(t))}catch(o){throw i(o),o}},cancel(e){return i(e),Q.return()}},{highWaterMark:2})},l0=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",sJ=l0&&typeof ReadableStream=="function",Qq=l0&&(typeof TextEncoder=="function"?(A=>I=>A.encode(I))(new TextEncoder):async A=>new Uint8Array(await new Response(A).arrayBuffer())),vJ=(A,...I)=>{try{return!!A(...I)}catch{return!1}},Bq=sJ&&vJ(()=>{let A=!1;const I=new Request(Mg.origin,{body:new ReadableStream,method:"POST",get duplex(){return A=!0,"half"}}).headers.has("Content-Type");return A&&!I}),R2=64*1024,fy=sJ&&vJ(()=>W.isReadableStream(new Response("").body)),I9={stream:fy&&(A=>A.body)};l0&&(A=>{["text","arrayBuffer","blob","formData","stream"].forEach(I=>{!I9[I]&&(I9[I]=W.isFunction(A[I])?g=>g[I]():(g,C)=>{throw new mA(`Response type '${I}' is not supported`,mA.ERR_NOT_SUPPORT,C)})})})(new Response);const Eq=async A=>{if(A==null)return 0;if(W.isBlob(A))return A.size;if(W.isSpecCompliantForm(A))return(await new Request(Mg.origin,{method:"POST",body:A}).arrayBuffer()).byteLength;if(W.isArrayBufferView(A)||W.isArrayBuffer(A))return A.byteLength;if(W.isURLSearchParams(A)&&(A=A+""),W.isString(A))return(await Qq(A)).byteLength},iq=async(A,I)=>{const g=W.toFiniteNumber(A.getContentLength());return g??Eq(I)},eq=l0&&(async A=>{let{url:I,method:g,data:C,signal:Q,cancelToken:B,timeout:E,onDownloadProgress:i,onUploadProgress:e,responseType:o,headers:t,withCredentials:s="same-origin",fetchOptions:v}=tJ(A);o=o?(o+"").toLowerCase():"text";let r=Aq([Q,B&&B.toAbortSignal()],E),n;const a=r&&r.unsubscribe&&(()=>{r.unsubscribe()});let c;try{if(e&&Bq&&g!=="get"&&g!=="head"&&(c=await iq(t,C))!==0){let u=new Request(I,{method:"POST",body:C,duplex:"half"}),w;if(W.isFormData(C)&&(w=u.headers.get("content-type"))&&t.setContentType(w),u.body){const[b,y]=y2(c,A9(w2(e)));C=G2(u.body,R2,b,y)}}W.isString(s)||(s=s?"include":"omit");const d="credentials"in Request.prototype;n=new Request(I,{...v,signal:r,method:g.toUpperCase(),headers:t.normalize().toJSON(),body:C,duplex:"half",credentials:d?s:void 0});let l=await fetch(n);const h=fy&&(o==="stream"||o==="response");if(fy&&(i||h&&a)){const u={};["status","statusText","headers"].forEach(S=>{u[S]=l[S]});const w=W.toFiniteNumber(l.headers.get("content-length")),[b,y]=i&&y2(w,A9(w2(i),!0))||[];l=new Response(G2(l.body,R2,b,()=>{y&&y(),a&&a()}),u)}o=o||"text";let D=await I9[W.findKey(I9,o)||"text"](l,A);return!h&&a&&a(),await new Promise((u,w)=>{eJ(u,w,{data:D,headers:kC.from(l.headers),status:l.status,statusText:l.statusText,config:A,request:n})})}catch(d){throw a&&a(),d&&d.name==="TypeError"&&/fetch/i.test(d.message)?Object.assign(new mA("Network Error",mA.ERR_NETWORK,A,n),{cause:d.cause||d}):mA.from(d,d&&d.code,A,n)}}),Hy={http:bO,xhr:$O,fetch:eq};W.forEach(Hy,(A,I)=>{if(A){try{Object.defineProperty(A,"name",{value:I})}catch{}Object.defineProperty(A,"adapterName",{value:I})}});const L2=A=>`- ${A}`,oq=A=>W.isFunction(A)||A===null||A===!1,rJ={getAdapter:A=>{A=W.isArray(A)?A:[A];const{length:I}=A;let g,C;const Q={};for(let B=0;B`adapter ${i} `+(e===!1?"is not supported by the environment":"is not available in the build"));let E=I?B.length>1?`since : -`+B.map(L2).join(` -`):" "+L2(B[0]):"as no adapter specified";throw new mA("There is no suitable adapter to dispatch the request "+E,"ERR_NOT_SUPPORT")}return C},adapters:Hy};function jd(A){if(A.cancelToken&&A.cancelToken.throwIfRequested(),A.signal&&A.signal.aborted)throw new Ev(null,A)}function S2(A){return jd(A),A.headers=kC.from(A.headers),A.data=Xd.call(A,A.transformRequest),["post","put","patch"].indexOf(A.method)!==-1&&A.headers.setContentType("application/x-www-form-urlencoded",!1),rJ.getAdapter(A.adapter||rP.adapter)(A).then(function(C){return jd(A),C.data=Xd.call(A,A.transformResponse,C),C.headers=kC.from(C.headers),C},function(C){return iJ(C)||(jd(A),C&&C.response&&(C.response.data=Xd.call(A,A.transformResponse,C.response),C.response.headers=kC.from(C.response.headers))),Promise.reject(C)})}const aJ="1.8.4",d0={};["object","boolean","number","function","string","symbol"].forEach((A,I)=>{d0[A]=function(C){return typeof C===A||"a"+(I<1?"n ":" ")+A}});const T2={};d0.transitional=function(I,g,C){function Q(B,E){return"[Axios v"+aJ+"] Transitional option '"+B+"'"+E+(C?". "+C:"")}return(B,E,i)=>{if(I===!1)throw new mA(Q(E," has been removed"+(g?" in "+g:"")),mA.ERR_DEPRECATED);return g&&!T2[E]&&(T2[E]=!0,console.warn(Q(E," has been deprecated since v"+g+" and will be removed in the near future"))),I?I(B,E,i):!0}};d0.spelling=function(I){return(g,C)=>(console.warn(`${C} is likely a misspelling of ${I}`),!0)};function tq(A,I,g){if(typeof A!="object")throw new mA("options must be an object",mA.ERR_BAD_OPTION_VALUE);const C=Object.keys(A);let Q=C.length;for(;Q-- >0;){const B=C[Q],E=I[B];if(E){const i=A[B],e=i===void 0||E(i,B,A);if(e!==!0)throw new mA("option "+B+" must be "+e,mA.ERR_BAD_OPTION_VALUE);continue}if(g!==!0)throw new mA("Unknown option "+B,mA.ERR_BAD_OPTION)}}const Vn={assertOptions:tq,validators:d0},JB=Vn.validators;let Io=class{constructor(I){this.defaults=I,this.interceptors={request:new u2,response:new u2}}async request(I,g){try{return await this._request(I,g)}catch(C){if(C instanceof Error){let Q={};Error.captureStackTrace?Error.captureStackTrace(Q):Q=new Error;const B=Q.stack?Q.stack.replace(/^.+\n/,""):"";try{C.stack?B&&!String(C.stack).endsWith(B.replace(/^.+\n.+\n/,""))&&(C.stack+=` -`+B):C.stack=B}catch{}}throw C}}_request(I,g){typeof I=="string"?(g=g||{},g.url=I):g=I||{},g=co(this.defaults,g);const{transitional:C,paramsSerializer:Q,headers:B}=g;C!==void 0&&Vn.assertOptions(C,{silentJSONParsing:JB.transitional(JB.boolean),forcedJSONParsing:JB.transitional(JB.boolean),clarifyTimeoutError:JB.transitional(JB.boolean)},!1),Q!=null&&(W.isFunction(Q)?g.paramsSerializer={serialize:Q}:Vn.assertOptions(Q,{encode:JB.function,serialize:JB.function},!0)),g.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?g.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:g.allowAbsoluteUrls=!0),Vn.assertOptions(g,{baseUrl:JB.spelling("baseURL"),withXsrfToken:JB.spelling("withXSRFToken")},!0),g.method=(g.method||this.defaults.method||"get").toLowerCase();let E=B&&W.merge(B.common,B[g.method]);B&&W.forEach(["delete","get","head","post","put","patch","common"],n=>{delete B[n]}),g.headers=kC.concat(E,B);const i=[];let e=!0;this.interceptors.request.forEach(function(a){typeof a.runWhen=="function"&&a.runWhen(g)===!1||(e=e&&a.synchronous,i.unshift(a.fulfilled,a.rejected))});const o=[];this.interceptors.response.forEach(function(a){o.push(a.fulfilled,a.rejected)});let t,s=0,v;if(!e){const n=[S2.bind(this),void 0];for(n.unshift.apply(n,i),n.push.apply(n,o),v=n.length,t=Promise.resolve(g);s{if(!C._listeners)return;let B=C._listeners.length;for(;B-- >0;)C._listeners[B](Q);C._listeners=null}),this.promise.then=Q=>{let B;const E=new Promise(i=>{C.subscribe(i),B=i}).then(Q);return E.cancel=function(){C.unsubscribe(B)},E},I(function(B,E,i){C.reason||(C.reason=new Ev(B,E,i),g(C.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(I){if(this.reason){I(this.reason);return}this._listeners?this._listeners.push(I):this._listeners=[I]}unsubscribe(I){if(!this._listeners)return;const g=this._listeners.indexOf(I);g!==-1&&this._listeners.splice(g,1)}toAbortSignal(){const I=new AbortController,g=C=>{I.abort(C)};return this.subscribe(g),I.signal.unsubscribe=()=>this.unsubscribe(g),I.signal}static source(){let I;return{token:new PJ(function(Q){I=Q}),cancel:I}}};function vq(A){return function(g){return A.apply(null,g)}}function rq(A){return W.isObject(A)&&A.isAxiosError===!0}const xy={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(xy).forEach(([A,I])=>{xy[I]=A});function cJ(A){const I=new Io(A),g=f8(Io.prototype.request,I);return W.extend(g,Io.prototype,I,{allOwnKeys:!0}),W.extend(g,I,null,{allOwnKeys:!0}),g.create=function(Q){return cJ(co(A,Q))},g}const VI=cJ(rP);VI.Axios=Io;VI.CanceledError=Ev;VI.CancelToken=sq;VI.isCancel=iJ;VI.VERSION=aJ;VI.toFormData=n0;VI.AxiosError=mA;VI.Cancel=VI.CanceledError;VI.all=function(I){return Promise.all(I)};VI.spread=vq;VI.isAxiosError=rq;VI.mergeConfig=co;VI.AxiosHeaders=kC;VI.formToJSON=A=>EJ(W.isHTMLForm(A)?new FormData(A):A);VI.getAdapter=rJ.getAdapter;VI.HttpStatusCode=xy;VI.default=VI;const{Axios:vXA,AxiosError:rXA,CanceledError:aXA,isCancel:PXA,CancelToken:cXA,VERSION:nXA,all:lXA,Cancel:dXA,isAxiosError:hXA,spread:DXA,toFormData:ZG,AxiosHeaders:uXA,HttpStatusCode:bXA,formToJSON:yXA,getAdapter:wXA,mergeConfig:mXA}=VI,$t={};/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */var Oy=function(A,I){return Oy=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,C){g.__proto__=C}||function(g,C){for(var Q in C)C.hasOwnProperty(Q)&&(g[Q]=C[Q])},Oy(A,I)};function nJ(A,I){Oy(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}function aq(A){var I=typeof Symbol=="function"&&A[Symbol.iterator],g=0;return I?I.call(A):{next:function(){return A&&g>=A.length&&(A=void 0),{value:A&&A[g++],done:!A}}}}function Pq(A,I){var g=typeof Symbol=="function"&&A[Symbol.iterator];if(!g)return A;var C=g.call(A),Q,B=[],E;try{for(;(I===void 0||I-- >0)&&!(Q=C.next()).done;)B.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(g=C.return)&&g.call(C)}finally{if(E)throw E.error}}return B}function cq(){for(var A=[],I=0;I - * https://github.com/pladaria/reconnecting-websocket - * License MIT - */var dq=function(){if(typeof WebSocket<"u")return WebSocket},hq=function(A){return typeof A<"u"&&!!A&&A.CLOSING===2},ue={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0},Dq=function(){function A(I,g,C){var Q=this;C===void 0&&(C={}),this._listeners={error:[],message:[],open:[],close:[]},this._retryCount=-1,this._shouldReconnect=!0,this._connectLock=!1,this._binaryType="blob",this._closeCalled=!1,this._messageQueue=[],this.onclose=null,this.onerror=null,this.onmessage=null,this.onopen=null,this._handleOpen=function(B){Q._debug("open event");var E=Q._options.minUptime,i=E===void 0?ue.minUptime:E;clearTimeout(Q._connectTimeout),Q._uptimeTimeout=setTimeout(function(){return Q._acceptOpen()},i),Q._ws.binaryType=Q._binaryType,Q._messageQueue.forEach(function(e){return Q._ws.send(e)}),Q._messageQueue=[],Q.onopen&&Q.onopen(B),Q._listeners.open.forEach(function(e){return Q._callEventListener(B,e)})},this._handleMessage=function(B){Q._debug("message event"),Q.onmessage&&Q.onmessage(B),Q._listeners.message.forEach(function(E){return Q._callEventListener(B,E)})},this._handleError=function(B){Q._debug("error event",B.message),Q._disconnect(void 0,B.message==="TIMEOUT"?"timeout":void 0),Q.onerror&&Q.onerror(B),Q._debug("exec error listeners"),Q._listeners.error.forEach(function(E){return Q._callEventListener(B,E)}),Q._connect()},this._handleClose=function(B){Q._debug("close event"),Q._clearTimeouts(),Q._shouldReconnect&&Q._connect(),Q.onclose&&Q.onclose(B),Q._listeners.close.forEach(function(E){return Q._callEventListener(B,E)})},this._url=I,this._protocols=g,this._options=C,this._options.startClosed&&(this._shouldReconnect=!1),this._connect()}return Object.defineProperty(A,"CONNECTING",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(A,"OPEN",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(A,"CLOSING",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(A,"CLOSED",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CONNECTING",{get:function(){return A.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"OPEN",{get:function(){return A.OPEN},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CLOSING",{get:function(){return A.CLOSING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CLOSED",{get:function(){return A.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"binaryType",{get:function(){return this._ws?this._ws.binaryType:this._binaryType},set:function(I){this._binaryType=I,this._ws&&(this._ws.binaryType=I)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"retryCount",{get:function(){return Math.max(this._retryCount,0)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"bufferedAmount",{get:function(){var I=this._messageQueue.reduce(function(g,C){return typeof C=="string"?g+=C.length:C instanceof Blob?g+=C.size:g+=C.byteLength,g},0);return I+(this._ws?this._ws.bufferedAmount:0)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"extensions",{get:function(){return this._ws?this._ws.extensions:""},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"protocol",{get:function(){return this._ws?this._ws.protocol:""},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"readyState",{get:function(){return this._ws?this._ws.readyState:this._options.startClosed?A.CLOSED:A.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"url",{get:function(){return this._ws?this._ws.url:""},enumerable:!0,configurable:!0}),A.prototype.close=function(I,g){if(I===void 0&&(I=1e3),this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(I,g)},A.prototype.reconnect=function(I,g){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(I,g),this._connect())},A.prototype.send=function(I){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",I),this._ws.send(I);else{var g=this._options.maxEnqueuedMessages,C=g===void 0?ue.maxEnqueuedMessages:g;this._messageQueue.length"],I))},A.prototype._getNextDelay=function(){var I=this._options,g=I.reconnectionDelayGrowFactor,C=g===void 0?ue.reconnectionDelayGrowFactor:g,Q=I.minReconnectionDelay,B=Q===void 0?ue.minReconnectionDelay:Q,E=I.maxReconnectionDelay,i=E===void 0?ue.maxReconnectionDelay:E,e=0;return this._retryCount>0&&(e=B*Math.pow(C,this._retryCount-1),e>i&&(e=i)),this._debug("next delay",e),e},A.prototype._wait=function(){var I=this;return new Promise(function(g){setTimeout(g,I._getNextDelay())})},A.prototype._getNextUrl=function(I){if(typeof I=="string")return Promise.resolve(I);if(typeof I=="function"){var g=I();if(typeof g=="string")return Promise.resolve(g);if(g.then)return g}throw Error("Invalid URL")},A.prototype._connect=function(){var I=this;if(!(this._connectLock||!this._shouldReconnect)){this._connectLock=!0;var g=this._options,C=g.maxRetries,Q=C===void 0?ue.maxRetries:C,B=g.connectionTimeout,E=B===void 0?ue.connectionTimeout:B,i=g.WebSocket,e=i===void 0?dq():i;if(this._retryCount>=Q){this._debug("max retries reached",this._retryCount,">=",Q);return}if(this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),!hq(e))throw Error("No valid WebSocket class provided");this._wait().then(function(){return I._getNextUrl(I._url)}).then(function(o){I._closeCalled||(I._debug("connect",{url:o,protocols:I._protocols}),I._ws=I._protocols?new e(o,I._protocols):new e(o),I._ws.binaryType=I._binaryType,I._connectLock=!1,I._addListeners(),I._connectTimeout=setTimeout(function(){return I._handleTimeout()},E))})}},A.prototype._handleTimeout=function(){this._debug("timeout event"),this._handleError(new nq(Error("TIMEOUT"),this))},A.prototype._disconnect=function(I,g){if(I===void 0&&(I=1e3),this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(I,g),this._handleClose(new lq(I,g,this))}catch{}}},A.prototype._acceptOpen=function(){this._debug("accept open"),this._retryCount=0},A.prototype._callEventListener=function(I,g){"handleEvent"in g?g.handleEvent(I):g(I)},A.prototype._removeListeners=function(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))},A.prototype._addListeners=function(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))},A.prototype._clearTimeouts=function(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)},A}();class sI{constructor(I){this._client=I}}class uq extends sI{async create(I,g){return(await this._client.post("/v1/bot/create",I,!1,g)).data}async update(I,g){return(await this._client.post("/v1/bot/update",I,!1,g)).data}async list(I,g){return(await this._client.get("/v1/space/published_bots_list",I,!1,g)).data}async publish(I,g){return(await this._client.post("/v1/bot/publish",I,!1,g)).data}async retrieve(I,g){return(await this._client.get("/v1/bot/get_online_info",I,!1,g)).data}}function bq(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";try{return JSON.parse(A)}catch{return I}}function yq(A){return new Promise(I=>{setTimeout(I,A)})}function dJ(){return typeof uni<"u"}function Qa(){return typeof window<"u"}function wq(A){if(typeof A!="object"||A===null)return!1;const I=Object.getPrototypeOf(A);if(I===null)return!0;let g=I;for(;Object.getPrototypeOf(g)!==null;)g=Object.getPrototypeOf(g);return I===g}function ZQ(){for(var A=arguments.length,I=new Array(A),g=0;g{if(Q===void 0)return C||{};for(const B in Q)Object.prototype.hasOwnProperty.call(Q,B)&&(wq(Q[B])&&!Array.isArray(Q[B])?C[B]=ZQ(C[B]||{},Q[B]):C[B]=Q[B]);return C},{})}function mq(A){return A==null?void 0:A.startsWith("pat_")}function Gq(A,I){const g=Object.entries(I).filter(C=>{let[Q,B]=C;return B!=null&&B!==""}).map(C=>{let[Q,B]=C;return`${Q}=${B}`}).join("&");return`${A}?${g}`}class $i extends Error{}class Fg extends $i{static makeMessage(I,g,C,Q){if(!g&&C)return C;if(g){const B=[],{code:E,msg:i,error:e}=g;E&&B.push(`code: ${E}`),i&&B.push(`msg: ${i}`),e!=null&&e.detail&&i!==e.detail&&B.push(`detail: ${e.detail}`);const o=(e==null?void 0:e.logid)||(Q==null?void 0:Q["x-tt-logid"]);return o&&B.push(`logid: ${o}`),B.join(", ")}return I?`http status code: ${I} (no body)`:"(no status code or body)"}static generate(I,g,C,Q){if(!I)return new Rq({cause:Lq(g)});const B=g;return I===400||(B==null?void 0:B.code)===4e3?new DJ(I,B,C,Q):I===401||(B==null?void 0:B.code)===4100?new uJ(I,B,C,Q):I===403||(B==null?void 0:B.code)===4101?new bJ(I,B,C,Q):I===404||(B==null?void 0:B.code)===4200?new yJ(I,B,C,Q):I===429||(B==null?void 0:B.code)===4013?new wJ(I,B,C,Q):I===408?new KG(I,B,C,Q):I===502?new GJ(I,B,C,Q):I>=500?new mJ(I,B,C,Q):new Fg(I,B,C,Q)}constructor(I,g,C,Q){var B,E;super(`${Fg.makeMessage(I,g,C,Q)}`),this.status=I,this.headers=Q,this.logid=(g==null||(B=g.detail)===null||B===void 0?void 0:B.logid)||(Q==null?void 0:Q["x-tt-logid"]),this.code=g==null?void 0:g.code,this.msg=g==null?void 0:g.msg,this.detail=g==null||(E=g.error)===null||E===void 0?void 0:E.detail,this.rawError=g}}class Rq extends Fg{constructor({message:I}){super(void 0,void 0,I||"Connection error.",void 0),this.status=void 0}}class hJ extends Fg{constructor(I){super(void 0,void 0,I||"Request was aborted.",void 0),this.name="UserAbortError",this.status=void 0}}class DJ extends Fg{constructor(...I){super(...I),this.name="BadRequestError",this.status=400}}class uJ extends Fg{constructor(...I){super(...I),this.name="AuthenticationError",this.status=401}}class bJ extends Fg{constructor(...I){super(...I),this.name="PermissionDeniedError",this.status=403}}class yJ extends Fg{constructor(...I){super(...I),this.name="NotFoundError",this.status=404}}let KG=class extends Fg{constructor(...I){super(...I),this.name="TimeoutError",this.status=408}};class wJ extends Fg{constructor(...I){super(...I),this.name="RateLimitError",this.status=429}}class mJ extends Fg{constructor(...I){super(...I),this.name="InternalServerError",this.status=500}}class GJ extends Fg{constructor(...I){super(...I),this.name="GatewayError",this.status=502}}const Lq=A=>A instanceof Error?A:new Error(A);class Sq extends sI{async list(I,g,C){const Q=`/v3/chat/message/list?conversation_id=${I}&chat_id=${g}`;return(await this._client.get(Q,void 0,!1,C)).data}}const fd=()=>(Math.random()*new Date().getTime()).toString(),zn=A=>A==null?void 0:A.map(I=>({...I,content:typeof I.content=="object"?JSON.stringify(I.content):I.content})),Hd=A=>{if(A)for(const[I,g]of Object.entries(A))typeof g=="object"&&(A[I]=JSON.stringify(g));return A};class Tq extends sI{async create(I,g){I.user_id||(I.user_id=fd());const{conversation_id:C,...Q}=I,B=`/v3/chat${C?`?conversation_id=${C}`:""}`,E={...Q,additional_messages:zn(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:Hd(I.shortcut_command.parameters)}:void 0,stream:!1};return(await this._client.post(B,E,!1,g)).data}async createAndPoll(I,g){I.user_id||(I.user_id=fd());const{conversation_id:C,...Q}=I,B=`/v3/chat${C?`?conversation_id=${C}`:""}`,E={...Q,additional_messages:zn(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:Hd(I.shortcut_command.parameters)}:void 0,stream:!1},i=await this._client.post(B,E,!1,g),e=i.data.id,o=i.data.conversation_id;let t;for(;await yq(100),t=await this.retrieve(o,e),!(t.status==="completed"||t.status==="failed"||t.status==="requires_action"););const s=await this.messages.list(o,e);return{chat:t,messages:s}}async*stream(I,g){I.user_id||(I.user_id=fd());const{conversation_id:C,...Q}=I,B=`/v3/chat${C?`?conversation_id=${C}`:""}`,E={...Q,additional_messages:zn(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:Hd(I.shortcut_command.parameters)}:void 0,stream:!0},i=await this._client.post(B,E,!0,g);for await(const e of i)if(e.event==="done")yield{event:e.event,data:"[DONE]"};else try{yield{event:e.event,data:JSON.parse(e.data)}}catch{throw new $i(`Could not parse message into JSON:${e.data}`)}}async retrieve(I,g,C){const Q=`/v3/chat/retrieve?conversation_id=${I}&chat_id=${g}`;return(await this._client.post(Q,void 0,!1,C)).data}async cancel(I,g,C){const Q="/v3/chat/cancel",B={conversation_id:I,chat_id:g};return(await this._client.post(Q,B,!1,C)).data}async*submitToolOutputs(I,g){const{conversation_id:C,chat_id:Q,...B}=I,E=`/v3/chat/submit_tool_outputs?conversation_id=${I.conversation_id}&chat_id=${I.chat_id}`,i={...B};if(I.stream===!1)return(await this._client.post(E,i,!1,g)).data;{const e=await this._client.post(E,i,!0,g);for await(const o of e)if(o.event==="done")yield{event:o.event,data:"[DONE]"};else try{yield{event:o.event,data:JSON.parse(o.data)}}catch{throw new $i(`Could not parse message into JSON:${o.data}`)}}}constructor(...I){super(...I),this.messages=new Sq(this._client)}}var Uq=function(A){return A.CONVERSATION_CHAT_CREATED="conversation.chat.created",A.CONVERSATION_CHAT_IN_PROGRESS="conversation.chat.in_progress",A.CONVERSATION_CHAT_COMPLETED="conversation.chat.completed",A.CONVERSATION_CHAT_FAILED="conversation.chat.failed",A.CONVERSATION_CHAT_REQUIRES_ACTION="conversation.chat.requires_action",A.CONVERSATION_MESSAGE_DELTA="conversation.message.delta",A.CONVERSATION_MESSAGE_COMPLETED="conversation.message.completed",A.CONVERSATION_AUDIO_DELTA="conversation.audio.delta",A.DONE="done",A.ERROR="error",A}({}),RXA=function(A){return A.User="user",A.Assistant="assistant",A}({});class Fq extends sI{async create(I,g,C){const Q=`/v1/conversation/message/create?conversation_id=${I}`;return(await this._client.post(Q,g,!1,C)).data}async update(I,g,C,Q){const B=`/v1/conversation/message/modify?conversation_id=${I}&message_id=${g}`;return(await this._client.post(B,C,!1,Q)).message}async retrieve(I,g,C){const Q=`/v1/conversation/message/retrieve?conversation_id=${I}&message_id=${g}`;return(await this._client.get(Q,null,!1,C)).data}async list(I,g,C){const Q=`/v1/conversation/message/list?conversation_id=${I}`;return await this._client.post(Q,g,!1,C)}async delete(I,g,C){const Q=`/v1/conversation/message/delete?conversation_id=${I}&message_id=${g}`;return(await this._client.post(Q,void 0,!1,C)).data}}class Yq extends sI{async create(I,g){return(await this._client.post("/v1/conversation/create",I,!1,g)).data}async retrieve(I,g){const C=`/v1/conversation/retrieve?conversation_id=${I}`;return(await this._client.get(C,null,!1,g)).data}async list(I,g){return(await this._client.get("/v1/conversations",I,!1,g)).data}async clear(I,g){const C=`/v1/conversations/${I}/clear`;return(await this._client.post(C,null,!1,g)).data}constructor(...I){super(...I),this.messages=new Fq(this._client)}}class kq extends sI{async upload(I,g){return(await this._client.post("/v1/files/upload",ZG(I),!1,g)).data}async retrieve(I,g){const C=`/v1/files/retrieve?file_id=${I}`;return(await this._client.get(C,null,!1,g)).data}}class pq extends sI{async create(I,g){return await this._client.post("/v1/workflow/run",I,!1,g)}async*stream(I,g){const Q=await this._client.post("/v1/workflow/stream_run",I,!0,g);for await(const B of Q)try{B.event==="Done"?yield new U2(Number(B.id),"Done"):yield new U2(Number(B.id),B.event,JSON.parse(B.data))}catch{throw new $i(`Could not parse message into JSON:${B.data}`)}}async resume(I,g){return await this._client.post("/v1/workflow/stream_resume",I,!1,g)}async history(I,g,C){const Q=`/v1/workflows/${I}/run_histories/${g}`;return(await this._client.get(Q,void 0,!1,C)).data}}class U2{constructor(I,g,C){this.id=I,this.event=g,this.data=C}}class Nq extends sI{async*stream(I,g){const C="/v1/workflows/chat",Q={...I,additional_messages:zn(I.additional_messages)},B=await this._client.post(C,Q,!0,g);for await(const E of B)if(E.event===Uq.DONE)yield{event:E.event,data:"[DONE]"};else try{yield{event:E.event,data:JSON.parse(E.data)}}catch{throw new $i(`Could not parse message into JSON:${E.data}`)}}}class Zq extends sI{constructor(...I){super(...I),this.runs=new pq(this._client),this.chat=new Nq(this._client)}}class Kq extends sI{async list(I,g){const Q=await this._client.get("/v1/workspaces",I,!1,g);return bq(Q,Q).data}}const dc={"agw-js-conv":"str"};class Jq extends sI{list(I,g){return this._client.get("/open_api/knowledge/document/list",I,!1,ZQ(g,{headers:dc}))}async create(I,g){return(await this._client.post("/open_api/knowledge/document/create",I,!1,ZQ(g,{headers:dc}))).document_infos}async delete(I,g){await this._client.post("/open_api/knowledge/document/delete",I,!1,ZQ(g,{headers:dc}))}async update(I,g){await this._client.post("/open_api/knowledge/document/update",I,!1,ZQ(g,{headers:dc}))}}class Wq extends sI{constructor(...I){super(...I),this.documents=new Jq(this._client)}}const hc={"agw-js-conv":"str"};class Vq extends sI{async list(I,g){return await this._client.post("/open_api/knowledge/document/list",I,!1,ZQ(g,{headers:hc}))}async create(I,g){return(await this._client.post("/open_api/knowledge/document/create",I,!1,ZQ(g,{headers:hc}))).document_infos}async delete(I,g){await this._client.post("/open_api/knowledge/document/delete",I,!1,ZQ(g,{headers:hc}))}async update(I,g){await this._client.post("/open_api/knowledge/document/update",I,!1,ZQ(g,{headers:hc}))}}class zq extends sI{async update(I,g,C,Q){const B=`/v1/datasets/${I}/images/${g}`;await this._client.put(B,C,!1,Q)}async list(I,g,C){const Q=`/v1/datasets/${I}/images`;return(await this._client.get(Q,g,!1,C)).data}}class Mq extends sI{async create(I,g){return(await this._client.post("/v1/datasets",I,!1,g)).data}async list(I,g){return(await this._client.get("/v1/datasets",I,!1,g)).data}async update(I,g,C){const Q=`/v1/datasets/${I}`;await this._client.put(Q,g,!1,C)}async delete(I,g){const C=`/v1/datasets/${I}`;await this._client.delete(C,!1,g)}async process(I,g,C){const Q=`/v1/datasets/${I}/process`;return(await this._client.post(Q,g,!1,C)).data}constructor(...I){super(...I),this.documents=new Vq(this._client),this.images=new zq(this._client)}}class Xq extends sI{async clone(I,g){return(await this._client.post("/v1/audio/voices/clone",ZG(I),!1,g)).data}async list(I,g){return(await this._client.get("/v1/audio/voices",I,!1,g)).data}}class jq extends sI{async create(I,g){return(await this._client.post("/v1/audio/transcriptions",ZG(I),!1,g)).data}}class fq extends sI{async create(I,g){return await this._client.post("/v1/audio/speech",{...I,sample_rate:I.sample_rate||24e3},!1,ZQ(g,{responseType:"arraybuffer"}))}}class Hq extends sI{async create(I,g){return(await this._client.post("/v1/audio/rooms",I,!1,g)).data}}let xq=class extends sI{constructor(...I){super(...I),this.rooms=new Hq(this._client),this.voices=new Xq(this._client),this.speech=new fq(this._client),this.transcriptions=new jq(this._client)}};class Oq extends sI{async duplicate(I,g,C){const Q=`/v1/templates/${I}/duplicate`;return(await this._client.post(Q,g,!1,C)).data}}class qq extends sI{async create(I,g){const C=Gq("/v1/chat",I);return await this._client.makeWebsocket(C,g)}}class _q extends sI{async create(I){return await this._client.makeWebsocket("/v1/audio/transcriptions",I)}}class $q extends sI{async create(I){return await this._client.makeWebsocket("/v1/audio/speech",I)}}class A6 extends sI{constructor(...I){super(...I),this.speech=new $q(this._client),this.transcriptions=new _q(this._client)}}var I6=function(A){return A.CLIENT_ERROR="client_error",A.CLOSED="closed",A.ALL="all",A.ERROR="error",A.INPUT_TEXT_BUFFER_APPEND="input_text_buffer.append",A.INPUT_TEXT_BUFFER_COMPLETE="input_text_buffer.complete",A.SPEECH_UPDATE="speech.update",A.SPEECH_UPDATED="speech.updated",A.SPEECH_CREATED="speech.created",A.INPUT_TEXT_BUFFER_COMPLETED="input_text_buffer.completed",A.SPEECH_AUDIO_UPDATE="speech.audio.update",A.SPEECH_AUDIO_COMPLETED="speech.audio.completed",A.INPUT_AUDIO_BUFFER_APPEND="input_audio_buffer.append",A.INPUT_AUDIO_BUFFER_COMPLETE="input_audio_buffer.complete",A.TRANSCRIPTIONS_UPDATE="transcriptions.update",A.INPUT_AUDIO_BUFFER_CLEAR="input_audio_buffer.clear",A.TRANSCRIPTIONS_CREATED="transcriptions.created",A.INPUT_AUDIO_BUFFER_COMPLETED="input_audio_buffer.completed",A.TRANSCRIPTIONS_MESSAGE_UPDATE="transcriptions.message.update",A.TRANSCRIPTIONS_MESSAGE_COMPLETED="transcriptions.message.completed",A.INPUT_AUDIO_BUFFER_CLEARED="input_audio_buffer.cleared",A.TRANSCRIPTIONS_UPDATED="transcriptions.updated",A.CHAT_UPDATE="chat.update",A.CONVERSATION_CHAT_SUBMIT_TOOL_OUTPUTS="conversation.chat.submit_tool_outputs",A.CHAT_CREATED="chat.created",A.CHAT_UPDATED="chat.updated",A.CONVERSATION_CHAT_CREATED="conversation.chat.created",A.CONVERSATION_MESSAGE_CREATE="conversation.message.create",A.CONVERSATION_CLEAR="conversation.clear",A.CONVERSATION_CHAT_IN_PROGRESS="conversation.chat.in_progress",A.CONVERSATION_MESSAGE_DELTA="conversation.message.delta",A.CONVERSATION_CHAT_REQUIRES_ACTION="conversation.chat.requires_action",A.CONVERSATION_MESSAGE_COMPLETED="conversation.message.completed",A.CONVERSATION_AUDIO_DELTA="conversation.audio.delta",A.CONVERSATION_AUDIO_COMPLETED="conversation.audio.completed",A.CONVERSATION_CHAT_COMPLETED="conversation.chat.completed",A.CONVERSATION_CHAT_FAILED="conversation.chat.failed",A.CONVERSATION_CLEARED="conversation.cleared",A.INPUT_AUDIO_BUFFER_SPEECH_STARTED="input_audio_buffer.speech_started",A.INPUT_AUDIO_BUFFER_SPEECH_STOPPED="input_audio_buffer.speech_stopped",A.CONVERSATION_CHAT_CANCEL="conversation.chat.cancel",A.CONVERSATION_CHAT_CANCELED="conversation.chat.canceled",A.CONVERSATION_AUDIO_TRANSCRIPT_UPDATE="conversation.audio_transcript.update",A.CONVERSATION_AUDIO_TRANSCRIPT_COMPLETED="conversation.audio_transcript.completed",A.DUMP_AUDIO="dump.audio",A}({});class g6 extends sI{constructor(...I){super(...I),this.audio=new A6(this._client),this.chat=new qq(this._client)}}class C6{get readyState(){return this.rws.readyState}send(I){return this.rws.send(JSON.stringify(I))}close(I,g){return this.rws.close(I,g)}reconnect(I,g){return this.rws.reconnect(I,g)}addEventListener(I,g){this.rws.addEventListener(I,g)}removeEventListener(I,g){this.rws.removeEventListener(I,g)}constructor(I,g={}){this.onmessage=null,this.onopen=null,this.onclose=null,this.onerror=null;const C=I.includes("?")?"&":"?",{authorization:Q}=g.headers||{};this.rws=new Dq(`${I}${C}authorization=${Q}`,[],{WebSocket:Qa()?window.WebSocket:class extends $t{constructor(B,E){super(B,E,{headers:g.headers})}},...g}),this.rws.addEventListener("message",B=>{try{var E,i;const e=JSON.parse(B.data);(E=(i=this).onmessage)===null||E===void 0||E.call(i,e,B)}catch(e){console.error("WebSocketAPI onmessage error",e)}}),this.rws.addEventListener("open",B=>{var E,i;(E=(i=this).onopen)===null||E===void 0||E.call(i,B)}),this.rws.addEventListener("close",B=>{var E,i;(E=(i=this).onclose)===null||E===void 0||E.call(i,B)}),this.rws.addEventListener("error",B=>{var E,i,e,o,t,s,v,r;const{readyState:n}=this.rws;if(n===3)return;const a=(e=B.target)===null||e===void 0||(i=e._req)===null||i===void 0||(E=i.res)===null||E===void 0?void 0:E.statusCode,c=((s=B.target)===null||s===void 0||(t=s._req)===null||t===void 0||(o=t.res)===null||o===void 0?void 0:o.rawHeaders)||[],d=c.findIndex(u=>u==="X-Tt-Logid"),l=d!==-1?c[d+1]:void 0,h={id:"0",event_type:I6.ERROR,data:{code:-1,msg:"WebSocket error"},detail:{logid:l}};if(a===401)h.data.code=401,h.data.msg="Unauthorized";else if(a===403)h.data.code=403,h.data.msg="Forbidden";else{h.data.code=500;var D;h.data.msg=String((D=B==null?void 0:B.error)!==null&&D!==void 0?D:"")||"WebSocket error"}(v=(r=this).onerror)===null||v===void 0||v.call(r,h,B)})}}var Q6=JSON.parse('{"name":"@coze/api","version":"1.2.0","description":"Official Coze Node.js SDK for seamless AI integration into your applications | 扣子官方 Node.js SDK,助您轻松集成 AI 能力到应用中","keywords":["coze","ai","nodejs","sdk","chatbot","typescript"],"homepage":"https://github.com/coze-dev/coze-js/tree/main/packages/coze-js","bugs":{"url":"https://github.com/coze-dev/coze-js/issues"},"repository":{"type":"git","url":"https://github.com/coze-dev/coze-js.git","directory":"packages/coze-js"},"license":"MIT","author":"Leeight ","exports":{".":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.mjs","types":"./dist/types/index.d.ts"},"./ws-tools":{"require":"./dist/cjs/ws-tools/index.js","import":"./dist/esm/ws-tools/index.mjs","types":"./dist/types/ws-tools/ws-tools/index.d.ts"}},"main":"dist/cjs/index.js","unpkg":"dist/umd/index.js","module":"dist/esm/index.mjs","browser":{"crypto":false,"os":false,"jsonwebtoken":false,"node-fetch":false,"ws":false},"typesVersions":{"*":{".":["dist/types/index.d.ts"],"ws-tools":["dist/types/ws-tools/ws-tools/index.d.ts"]}},"files":["dist","LICENSE","README.md","README.zh-CN.md"],"scripts":{"build":"rslib build","format":"prettier --write .","lint":"eslint ./ --cache --quiet","start":"rslib build -w","test":"vitest","test:cov":"vitest --coverage --run"},"dependencies":{"agora-extension-ai-denoiser":"^1.0.0","agora-rtc-sdk-ng":"^4.23.2","agora-rte-extension":"^1.2.4","jsonwebtoken":"^9.0.2","node-fetch":"^2.x","reconnecting-websocket":"^4.4.0","uuid":"^10.0.0","ws":"^8.11.0"},"devDependencies":{"@coze-infra/eslint-config":"workspace:*","@coze-infra/ts-config":"workspace:*","@coze-infra/vitest-config":"workspace:*","@rslib/core":"0.0.18","@swc/core":"^1.3.14","@types/jsonwebtoken":"^9.0.0","@types/node":"^20","@types/node-fetch":"^2.x","@types/uuid":"^9.0.1","@types/whatwg-fetch":"^0.0.33","@types/ws":"^8.5.1","@vitest/coverage-v8":"~2.1.4","axios":"^1.7.7","typescript":"^5.5.3","vitest":"~2.1.4"},"peerDependencies":{"axios":"^1.7.1"},"cozePublishConfig":{"exports":{".":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.mjs","types":"./dist/types/index.d.ts"},"./ws-tools":{"require":"./dist/cjs/ws-tools/index.js","import":"./dist/esm/ws-tools/index.mjs","types":"./dist/types/ws-tools/ws-tools/index.d.ts"}},"main":"dist/cjs/index.js","module":"dist/esm/index.mjs","types":"dist/types/index.d.ts"},"types":"dist/types/index.d.ts"}');const{version:h0}=Q6,RJ=()=>{const A=process.version.slice(1),{platform:I}=process;let g=I.toLowerCase(),C=$t.release();if(I==="darwin"){g="macos";try{const Q=$t.release().split(".");if(Q.length>=2){const B=parseInt(Q[0],10);!isNaN(B)&&B>=9&&(C=`10.${B-9}.${Q[1]}`)}}catch{}}else I==="win32"?(g="windows",C=$t.release()):I==="linux"&&(g="linux",C=$t.release());return{osName:g,osVersion:C,nodeVersion:A}},F2=()=>{const{nodeVersion:A,osName:I,osVersion:g}=RJ();return`coze-js/${h0} node/${A} ${I}/${g}`.toLowerCase()},Y2=()=>{const{osVersion:A,nodeVersion:I,osName:g}=RJ();return JSON.stringify({version:h0,lang:"node",lang_version:I,os_name:g,os_version:A})},k2=()=>{const A={name:"unknown",version:"unknown"},I={name:"unknown",version:"unknown"},{userAgent:g}=navigator;if(g.indexOf("Windows")>-1){var C;I.name="windows";const t=((C=g.match(/Windows NT ([0-9.]+)/))===null||C===void 0?void 0:C[1])||"unknown";I.version=t}else if(g.indexOf("Mac OS X")>-1){var Q;I.name="macos",I.version=(((Q=g.match(/Mac OS X ([0-9_]+)/))===null||Q===void 0?void 0:Q[1])||"unknown").replace(/_/g,".")}else if(g.indexOf("Linux")>-1){var B;I.name="linux",I.version=((B=g.match(/Linux ([0-9.]+)/))===null||B===void 0?void 0:B[1])||"unknown"}if(g.indexOf("Chrome")>-1){var E;A.name="chrome",A.version=((E=g.match(/Chrome\/([0-9.]+)/))===null||E===void 0?void 0:E[1])||"unknown"}else if(g.indexOf("Firefox")>-1){var i;A.name="firefox",A.version=((i=g.match(/Firefox\/([0-9.]+)/))===null||i===void 0?void 0:i[1])||"unknown"}else if(g.indexOf("Safari")>-1){var e;A.name="safari",A.version=((e=g.match(/Version\/([0-9.]+)/))===null||e===void 0?void 0:e[1])||"unknown"}const o={version:h0,browser:A.name,browser_version:A.version,os_name:I.name,os_version:I.version};return JSON.stringify(o)},B6=()=>{const A=uni.getSystemInfoSync(),I={name:"unknown",version:"unknown"},g={name:"unknown",version:"unknown"};if(A.platform==="android"?(g.name="android",g.version=A.system||"unknown"):A.platform==="ios"?(g.name="ios",g.version=A.system||"unknown"):A.platform==="windows"?(g.name="windows",g.version=A.system||"unknown"):A.platform==="mac"?(g.name="macos",g.version=A.system||"unknown"):(g.name=A.platform,g.version=A.system||"unknown"),A.AppPlatform)I.name=A.AppPlatform.toLowerCase(),I.version=A.appVersion||"unknown";else if(A.uniPlatform)I.name=A.uniPlatform,I.version=A.SDKVersion||"unknown";else{const{appName:Q,appVersion:B}=A;Q&&(I.name=Q.toLowerCase(),I.version=B||"unknown")}const C={version:h0,framework:"uniapp",platform:I.name,platform_version:I.version,os_name:g.name,os_version:g.version,screen_width:A.screenWidth,screen_height:A.screenHeight,device_model:A.model,device_brand:A.brand};return JSON.stringify(C)},p2=A=>{if(!A.isAxiosError&&(!A.code||!A.message))return new $i(`Unexpected error: ${A.message}`);if(A.code==="ECONNABORTED"&&A.message.includes("timeout")||A.code==="ETIMEDOUT"){var I;return new KG(408,void 0,`Request timed out: ${A.message}`,(I=A.response)===null||I===void 0?void 0:I.headers)}if(A.code==="ERR_CANCELED")return new hJ(A.message);var g,C,Q;return Fg.generate(((g=A.response)===null||g===void 0?void 0:g.status)||500,(C=A.response)===null||C===void 0?void 0:C.data,A.message,(Q=A.response)===null||Q===void 0?void 0:Q.headers)},E6=async A=>{const I=await $t(A.url,{body:A.data,...A});return{data:I.body,...I}},i6=()=>{if(Qa()||dJ())return!0;const A=process.version.slice(1);return LJ(A,"18.0.0")>=0};async function e6(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const g=I.axiosInstance||VI;if(I.isStreaming&&o6(g)){const Q=g.VERSION||VI.VERSION;if(!Q||LJ(Q,"1.7.1")<0)throw new $i("Streaming requests require axios version 1.7.1 or higher. Please upgrade your axios version.")}const C=await g({url:A,responseType:I.isStreaming?"stream":"json",adapter:I.isStreaming?i6()?"fetch":E6:void 0,...I}).catch(Q=>{throw p2(Q)});return{async*stream(){try{const Q=C.data,B=Q[Symbol.asyncIterator]?Q[Symbol.asyncIterator]():Q.getReader(),E=new TextDecoder,i={};let e="";for(;;){const{done:o,value:t}=await(B.next?B.next():B.read());if(o){e&&(i.event="error",i.data=e,yield i);break}e+=E.decode(t,{stream:!0});const s=e.split(` -`);for(let v=0;vC.data,response:C}}function LJ(A,I){const g=A.split(".").map(Number),C=I.split(".").map(Number);for(let Q=0;Q<3;Q++){const B=g[Q]||0,E=C[Q]||0;if(B>E)return 1;if(B2&&arguments[2]!==void 0&&arguments[2],Q=arguments.length>3?arguments[3]:void 0;return this.makeRequest(I,"POST",g,C,Q)}async get(I,g,C,Q){const B=Object.entries(g||{}).map(E=>{let[i,e]=E;return`${i}=${e}`}).join("&");return this.makeRequest(B?`${I}${I.includes("?")?"&":"?"}${B}`:I,"GET",void 0,C,Q)}async put(I,g,C,Q){return this.makeRequest(I,"PUT",g,C,Q)}async delete(I,g,C){return this.makeRequest(I,"DELETE",void 0,g,C)}async makeWebsocket(I,g){const C=`${this.baseWsURL}${I}`,Q=await this.buildWebsocketOptions(g);return this.debugLog(g==null?void 0:g.debug,`--- websocket url: ${C}`),this.debugLog(g==null?void 0:g.debug,"--- websocket options:",Q),new C6(C,Q)}getConfig(){return this._config}debugLog(){let I=arguments.length>0&&arguments[0]!==void 0&&arguments[0];for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q0&&Ci[0]<4?1:+(Ci[0]+Ci[1])),!Mn&&$d&&(!(Ci=$d.match(/Edge\/(\d+)/))||Ci[1]>=74)&&(Ci=$d.match(/Chrome\/(\d+)/))&&(Mn=+Ci[1]);var PP=Mn,j2=PP,p6=II,N6=QI,Z6=N6.String,ev=!!Object.getOwnPropertySymbols&&!p6(function(){var A=Symbol("symbol detection");return!Z6(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&j2&&j2<41}),K6=ev,ZJ=K6&&!Symbol.sham&&typeof Symbol.iterator=="symbol",J6=kg,W6=xI,V6=fg,z6=ZJ,M6=Object,cP=z6?function(A){return typeof A=="symbol"}:function(A){var I=J6("Symbol");return W6(I)&&V6(I.prototype,M6(A))},X6=String,ov=function(A){try{return X6(A)}catch{return"Object"}},j6=xI,f6=ov,H6=TypeError,fQ=function(A){if(j6(A))return A;throw new H6(f6(A)+" is not a function")},x6=fQ,O6=aP,y0=function(A,I){var g=A[I];return O6(g)?void 0:x6(g)},Ah=Bg,Ih=xI,gh=rC,q6=TypeError,_6=function(A,I){var g,C;if(I==="string"&&Ih(g=A.toString)&&!gh(C=Ah(g,A))||Ih(g=A.valueOf)&&!gh(C=Ah(g,A))||I!=="string"&&Ih(g=A.toString)&&!gh(C=Ah(g,A)))return C;throw new q6("Can't convert object to primitive value")},KJ={exports:{}},JJ=!0,f2=QI,$6=Object.defineProperty,A_=function(A,I){try{$6(f2,A,{value:I,configurable:!0,writable:!0})}catch{f2[A]=I}return I},I_=QI,g_=A_,H2="__core-js_shared__",x2=KJ.exports=I_[H2]||g_(H2,{});(x2.versions||(x2.versions=[])).push({version:"3.39.0",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"});var WG=KJ.exports,O2=WG,tv=function(A,I){return O2[A]||(O2[A]=I||{})},C_=To,Q_=Object,HQ=function(A){return Q_(C_(A))},B_=fA,E_=HQ,i_=B_({}.hasOwnProperty),hg=Object.hasOwn||function(A,I){return i_(E_(A),I)},e_=fA,o_=0,t_=Math.random(),s_=e_(1 .toString),VG=function(A){return"Symbol("+(A===void 0?"":A)+")_"+s_(++o_+t_,36)},v_=QI,r_=tv,q2=hg,a_=VG,P_=ev,c_=ZJ,As=v_.Symbol,Ch=r_("wks"),n_=c_?As.for||As:As&&As.withoutSetter||a_,vI=function(A){return q2(Ch,A)||(Ch[A]=P_&&q2(As,A)?As[A]:n_("Symbol."+A)),Ch[A]},l_=Bg,_2=rC,$2=cP,d_=y0,h_=_6,D_=vI,u_=TypeError,b_=D_("toPrimitive"),y_=function(A,I){if(!_2(A)||$2(A))return A;var g,C=d_(A,b_);if(C){if(I===void 0&&(I="default"),g=l_(C,A,I),!_2(g)||$2(g))return g;throw new u_("Can't convert object to primitive value")}return I===void 0&&(I="number"),h_(A,I)},w_=y_,m_=cP,zG=function(A){var I=w_(A,"string");return m_(I)?I:I+""},G_=QI,AT=rC,$y=G_.document,R_=AT($y)&&AT($y.createElement),MG=function(A){return R_?$y.createElement(A):{}},L_=Qg,S_=II,T_=MG,WJ=!L_&&!S_(function(){return Object.defineProperty(T_("div"),"a",{get:function(){return 7}}).a!==7}),U_=Qg,F_=Bg,Y_=b0,k_=oe,p_=ME,N_=zG,Z_=hg,K_=WJ,IT=Object.getOwnPropertyDescriptor;iv.f=U_?IT:function(A,I){if(A=p_(A),I=N_(I),K_)try{return IT(A,I)}catch{}if(Z_(A,I))return k_(!F_(Y_.f,A,I),A[I])};var J_=II,W_=xI,V_=/#|\.prototype\./,nP=function(A,I){var g=M_[z_(A)];return g===j_||g!==X_&&(W_(I)?J_(I):!!I)},z_=nP.normalize=function(A){return String(A).replace(V_,".").toLowerCase()},M_=nP.data={},X_=nP.NATIVE="N",j_=nP.POLYFILL="P",VJ=nP,f_=fQ,H_=D0,x_=_y(_y.bind),XE=function(A,I){return f_(A),I===void 0?A:H_?x_(A,I):function(){return A.apply(I,arguments)}},xQ={},O_=Qg,q_=II,zJ=O_&&q_(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),__=rC,$_=String,A$=TypeError,EQ=function(A){if(__(A))return A;throw new A$($_(A)+" is not an object")},I$=Qg,g$=WJ,C$=zJ,bc=EQ,gT=zG,Q$=TypeError,Qh=Object.defineProperty,B$=Object.getOwnPropertyDescriptor,Bh="enumerable",Eh="configurable",ih="writable";xQ.f=I$?C$?function(A,I,g){if(bc(A),I=gT(I),bc(g),typeof A=="function"&&I==="prototype"&&"value"in g&&ih in g&&!g[ih]){var C=B$(A,I);C&&C[ih]&&(A[I]=g.value,g={configurable:Eh in g?g[Eh]:C[Eh],enumerable:Bh in g?g[Bh]:C[Bh],writable:!1})}return Qh(A,I,g)}:Qh:function(A,I,g){if(bc(A),I=gT(I),bc(g),g$)try{return Qh(A,I,g)}catch{}if("get"in g||"set"in g)throw new Q$("Accessors not supported");return"value"in g&&(A[I]=g.value),A};var E$=Qg,i$=xQ,e$=oe,Uo=E$?function(A,I,g){return i$.f(A,I,e$(1,g))}:function(A,I,g){return A[I]=g,A},Ir=QI,o$=u0,t$=_y,s$=xI,v$=iv.f,r$=VJ,qo=pC,a$=XE,_o=Uo,CT=hg,P$=function(A){var I=function(g,C,Q){if(this instanceof I){switch(arguments.length){case 0:return new A;case 1:return new A(g);case 2:return new A(g,C)}return new A(g,C,Q)}return o$(A,this,arguments)};return I.prototype=A.prototype,I},yA=function(A,I){var g,C,Q,B,E,i,e,o,t,s=A.target,v=A.global,r=A.stat,n=A.proto,a=v?Ir:r?Ir[s]:Ir[s]&&Ir[s].prototype,c=v?qo:qo[s]||_o(qo,s,{})[s],d=c.prototype;for(B in I)C=!(g=r$(v?B:s+(r?".":"#")+B,A.forced))&&a&&CT(a,B),i=c[B],C&&(e=A.dontCallGetSet?(t=v$(a,B))&&t.value:a[B]),E=C&&e?e:I[B],(g||n||typeof i!=typeof E)&&(o=A.bind&&C?a$(E,Ir):A.wrap&&C?P$(E):n&&s$(E)?t$(E):E,(A.sham||E&&E.sham||i&&i.sham)&&_o(o,"sham",!0),_o(c,B,o),n&&(CT(qo,Q=s+"Prototype")||_o(qo,Q,{}),_o(qo[Q],B,E),A.real&&d&&(g||!d[B])&&_o(d,B,E)))},c$=yA,n$=Qg,QT=xQ.f;c$({target:"Object",stat:!0,forced:Object.defineProperty!==QT,sham:!n$},{defineProperty:QT});var l$=pC,MJ=l$.Object,d$=SJ.exports=function(A,I,g){return MJ.defineProperty(A,I,g)};MJ.defineProperty.sham&&(d$.sham=!0);var h$=SJ.exports,D$=h$,u$=D$,b$=u$,y$=b$,w$=y$,m$=w$,G$=m$,XJ=CI(G$),R$=ee,sv=Array.isArray||function(A){return R$(A)==="Array"},L$=Math.ceil,S$=Math.floor,T$=Math.trunc||function(A){var I=+A;return(I>0?S$:L$)(I)},U$=T$,w0=function(A){var I=+A;return I!=I||I===0?0:U$(I)},F$=w0,Y$=Math.min,k$=function(A){var I=F$(A);return I>0?Y$(I,9007199254740991):0},p$=k$,jE=function(A){return p$(A.length)},N$=TypeError,Z$=9007199254740991,XG=function(A){if(A>Z$)throw N$("Maximum allowed index exceeded");return A},K$=Qg,J$=xQ,W$=oe,m0=function(A,I,g){K$?J$.f(A,I,W$(0,g)):A[I]=g},V$=vI,z$=V$("toStringTag"),jJ={};jJ[z$]="z";var jG=String(jJ)==="[object z]",M$=jG,X$=xI,Xn=ee,j$=vI,f$=j$("toStringTag"),H$=Object,x$=Xn(function(){return arguments}())==="Arguments",O$=function(A,I){try{return A[I]}catch{}},vv=M$?Xn:function(A){var I,g,C;return A===void 0?"Undefined":A===null?"Null":typeof(g=O$(I=H$(A),f$))=="string"?g:x$?Xn(I):(C=Xn(I))==="Object"&&X$(I.callee)?"Arguments":C},q$=fA,_$=xI,Aw=WG,$$=q$(Function.toString);_$(Aw.inspectSource)||(Aw.inspectSource=function(A){return $$(A)});var fJ=Aw.inspectSource,AAA=fA,IAA=II,HJ=xI,gAA=vv,CAA=kg,QAA=fJ,xJ=function(){},OJ=CAA("Reflect","construct"),fG=/^\s*(?:class|function)\b/,BAA=AAA(fG.exec),EAA=!fG.test(xJ),gr=function(A){if(!HJ(A))return!1;try{return OJ(xJ,[],A),!0}catch{return!1}},qJ=function(A){if(!HJ(A))return!1;switch(gAA(A)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return EAA||!!BAA(fG,QAA(A))}catch{return!0}};qJ.sham=!0;var HG=!OJ||IAA(function(){var A;return gr(gr.call)||!gr(Object)||!gr(function(){A=!0})||A})?qJ:gr,BT=sv,iAA=HG,eAA=rC,oAA=vI,tAA=oAA("species"),ET=Array,sAA=function(A){var I;return BT(A)&&(I=A.constructor,(iAA(I)&&(I===ET||BT(I.prototype))||eAA(I)&&(I=I[tAA])===null)&&(I=void 0)),I===void 0?ET:I},vAA=sAA,xG=function(A,I){return new(vAA(A))(I===0?0:I)},rAA=II,aAA=vI,PAA=PP,cAA=aAA("species"),_J=function(A){return PAA>=51||!rAA(function(){var I=[];return(I.constructor={})[cAA]=function(){return{foo:1}},I[A](Boolean).foo!==1})},nAA=yA,lAA=II,dAA=sv,hAA=rC,DAA=HQ,uAA=jE,iT=XG,eT=m0,bAA=xG,yAA=_J,wAA=vI,mAA=PP,$J=wAA("isConcatSpreadable"),GAA=mAA>=51||!lAA(function(){var A=[];return A[$J]=!1,A.concat()[0]!==A}),RAA=function(A){if(!hAA(A))return!1;var I=A[$J];return I!==void 0?!!I:dAA(A)},LAA=!GAA||!yAA("concat");nAA({target:"Array",proto:!0,forced:LAA},{concat:function(A){var I,g,C,Q,B,E=DAA(this),i=bAA(E,0),e=0;for(I=-1,C=arguments.length;Ii;)if((E=Q[i++])!=E)return!0}else for(;B>i;i++)if((A||i in Q)&&Q[i]===g)return A||i||0;return!A&&-1}},IW={includes:oT(!0),indexOf:oT(!1)},R0={},ZAA=fA,eh=hg,KAA=ME,JAA=IW.indexOf,WAA=R0,tT=ZAA([].push),gW=function(A,I){var g,C=KAA(A),Q=0,B=[];for(g in C)!eh(WAA,g)&&eh(C,g)&&tT(B,g);for(;I.length>Q;)eh(C,g=I[Q++])&&(~JAA(B,g)||tT(B,g));return B},OG=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],VAA=gW,zAA=OG,L0=Object.keys||function(A){return VAA(A,zAA)},MAA=Qg,XAA=zJ,jAA=xQ,fAA=EQ,HAA=ME,xAA=L0;G0.f=MAA&&!XAA?Object.defineProperties:function(A,I){fAA(A);for(var g,C=HAA(I),Q=xAA(I),B=Q.length,E=0;B>E;)jAA.f(A,g=Q[E++],C[g]);return A};var yc,OAA=kg,CW=OAA("document","documentElement"),qAA=tv,_AA=VG,sT=qAA("keys"),S0=function(A){return sT[A]||(sT[A]=_AA(A))},$AA=EQ,AIA=G0,vT=OG,IIA=R0,gIA=CW,CIA=MG,QIA=S0,rT=">",aT="<",Iw="prototype",gw="script",QW=QIA("IE_PROTO"),oh=function(){},BW=function(A){return aT+gw+rT+A+aT+"/"+gw+rT},PT=function(A){A.write(BW("")),A.close();var I=A.parentWindow.Object;return A=null,I},BIA=function(){var A,I=CIA("iframe"),g="java"+gw+":";return I.style.display="none",gIA.appendChild(I),I.src=String(g),(A=I.contentWindow.document).open(),A.write(BW("document.F=Object")),A.close(),A.F},jn=function(){try{yc=new ActiveXObject("htmlfile")}catch{}jn=typeof document<"u"?document.domain&&yc?PT(yc):BIA():PT(yc);for(var A=vT.length;A--;)delete jn[Iw][vT[A]];return jn()};IIA[QW]=!0;var lP=Object.create||function(A,I){var g;return A!==null?(oh[Iw]=$AA(A),g=new oh,oh[Iw]=null,g[QW]=A):g=jn(),I===void 0?g:AIA.f(g,I)},T0={},EIA=gW,iIA=OG,eIA=iIA.concat("length","prototype");T0.f=Object.getOwnPropertyNames||function(A){return EIA(A,eIA)};var EW={},oIA=fA,rv=oIA([].slice),tIA=ee,sIA=ME,iW=T0.f,vIA=rv,eW=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],rIA=function(A){try{return iW(A)}catch{return vIA(eW)}};EW.f=function(A){return eW&&tIA(A)==="Window"?rIA(A):iW(sIA(A))};var dP={};dP.f=Object.getOwnPropertySymbols;var aIA=Uo,se=function(A,I,g,C){return C&&C.enumerable?A[I]=g:aIA(A,I,g),A},PIA=xQ,U0=function(A,I,g){return PIA.f(A,I,g)},av={},cIA=vI;av.f=cIA;var g9,Ma,C9,cT=pC,nIA=hg,lIA=av,dIA=xQ.f,FI=function(A){var I=cT.Symbol||(cT.Symbol={});nIA(I,A)||dIA(I,A,{value:lIA.f(A)})},hIA=Bg,DIA=kg,uIA=vI,bIA=se,oW=function(){var A=DIA("Symbol"),I=A&&A.prototype,g=I&&I.valueOf,C=uIA("toPrimitive");I&&!I[C]&&bIA(I,C,function(Q){return hIA(g,this)},{})},yIA=jG,wIA=vv,mIA=yIA?{}.toString:function(){return"[object "+wIA(this)+"]"},GIA=jG,RIA=xQ.f,LIA=Uo,SIA=hg,TIA=mIA,UIA=vI,nT=UIA("toStringTag"),fE=function(A,I,g,C){var Q=g?A:A&&A.prototype;Q&&(SIA(Q,nT)||RIA(Q,nT,{configurable:!0,value:I}),C&&!GIA&&LIA(Q,"toString",TIA))},FIA=QI,YIA=xI,lT=FIA.WeakMap,kIA=YIA(lT)&&/native code/.test(String(lT)),pIA=kIA,tW=QI,NIA=rC,ZIA=Uo,th=hg,sh=WG,KIA=S0,JIA=R0,dT="Object already initialized",Cw=tW.TypeError,WIA=tW.WeakMap,VIA=function(A){return C9(A)?Ma(A):g9(A,{})},zIA=function(A){return function(I){var g;if(!NIA(I)||(g=Ma(I)).type!==A)throw new Cw("Incompatible receiver, "+A+" required");return g}};if(pIA||sh.state){var WB=sh.state||(sh.state=new WIA);WB.get=WB.get,WB.has=WB.has,WB.set=WB.set,g9=function(A,I){if(WB.has(A))throw new Cw(dT);return I.facade=A,WB.set(A,I),I},Ma=function(A){return WB.get(A)||{}},C9=function(A){return WB.has(A)}}else{var $o=KIA("state");JIA[$o]=!0,g9=function(A,I){if(th(A,$o))throw new Cw(dT);return I.facade=A,ZIA(A,$o,I),I},Ma=function(A){return th(A,$o)?A[$o]:{}},C9=function(A){return th(A,$o)}}var Pv={set:g9,get:Ma,has:C9,enforce:VIA,getterFor:zIA},MIA=XE,XIA=fA,jIA=JG,fIA=HQ,HIA=jE,xIA=xG,hT=XIA([].push),DT=function(A){var I=A===1,g=A===2,C=A===3,Q=A===4,B=A===6,E=A===7,i=A===5||B;return function(e,o,t,s){for(var v,r,n=fIA(e),a=jIA(n),c=HIA(a),d=MIA(o,t),l=0,h=s||xIA,D=I?h(e,c):g||E?h(e,0):void 0;c>l;l++)if((i||l in a)&&(r=d(v=a[l],l,n),A))if(I)D[l]=r;else if(r)switch(A){case 3:return!0;case 5:return v;case 6:return l;case 2:hT(D,v)}else switch(A){case 4:return!1;case 7:hT(D,v)}return B?-1:C||Q?Q:D}},qG={forEach:DT(0),filter:DT(2)},wc=yA,hP=QI,_G=Bg,OIA=fA,hs=Qg,At=ev,qIA=II,cg=hg,_IA=fg,Qw=EQ,F0=ME,$G=zG,$IA=NC,Bw=oe,Zs=lP,sW=L0,AgA=T0,vW=EW,IgA=dP,rW=iv,aW=xQ,ggA=G0,PW=b0,uT=se,CgA=U0,AR=tv,QgA=S0,cW=R0,bT=VG,BgA=vI,EgA=av,igA=FI,egA=oW,ogA=fE,nW=Pv,Y0=qG.forEach,GC=QgA("hidden"),Q9="Symbol",Xa="prototype",tgA=nW.set,yT=nW.getterFor(Q9),lB=Object[Xa],Is=hP.Symbol,fn=Is&&Is[Xa],sgA=hP.RangeError,vgA=hP.TypeError,vh=hP.QObject,lW=rW.f,go=aW.f,dW=vW.f,rgA=PW.f,hW=OIA([].push),ZE=AR("symbols"),DP=AR("op-symbols"),agA=AR("wks"),rh=!vh||!vh[Xa]||!vh[Xa].findChild,DW=function(A,I,g){var C=lW(lB,I);C&&delete lB[I],go(A,I,g),C&&A!==lB&&go(lB,I,C)},Ew=hs&&qIA(function(){return Zs(go({},"a",{get:function(){return go(this,"a",{value:7}).a}})).a!==7})?DW:go,ah=function(A,I){var g=ZE[A]=Zs(fn);return tgA(g,{type:Q9,tag:A,description:I}),hs||(g.description=I),g},B9=function(A,I,g){A===lB&&B9(DP,I,g),Qw(A);var C=$G(I);return Qw(g),cg(ZE,C)?(g.enumerable?(cg(A,GC)&&A[GC][C]&&(A[GC][C]=!1),g=Zs(g,{enumerable:Bw(0,!1)})):(cg(A,GC)||go(A,GC,Bw(1,Zs(null))),A[GC][C]=!0),Ew(A,C,g)):go(A,C,g)},iw=function(A,I){Qw(A);var g=F0(I),C=sW(g).concat(bW(g));return Y0(C,function(Q){hs&&!_G(uW,g,Q)||B9(A,Q,g[Q])}),A},PgA=function(A,I){return I===void 0?Zs(A):iw(Zs(A),I)},uW=function(A){var I=$G(A),g=_G(rgA,this,I);return!(this===lB&&cg(ZE,I)&&!cg(DP,I))&&(!(g||!cg(this,I)||!cg(ZE,I)||cg(this,GC)&&this[GC][I])||g)},wT=function(A,I){var g=F0(A),C=$G(I);if(g!==lB||!cg(ZE,C)||cg(DP,C)){var Q=lW(g,C);return!Q||!cg(ZE,C)||cg(g,GC)&&g[GC][C]||(Q.enumerable=!0),Q}},mT=function(A){var I=dW(F0(A)),g=[];return Y0(I,function(C){cg(ZE,C)||cg(cW,C)||hW(g,C)}),g},bW=function(A){var I=A===lB,g=dW(I?DP:F0(A)),C=[];return Y0(g,function(Q){!cg(ZE,Q)||I&&!cg(lB,Q)||hW(C,ZE[Q])}),C};At||(uT(fn=(Is=function(){if(_IA(fn,this))throw new vgA("Symbol is not a constructor");var A=arguments.length&&arguments[0]!==void 0?$IA(arguments[0]):void 0,I=bT(A),g=function(C){var Q=this===void 0?hP:this;Q===lB&&_G(g,DP,C),cg(Q,GC)&&cg(Q[GC],I)&&(Q[GC][I]=!1);var B=Bw(1,C);try{Ew(Q,I,B)}catch(E){if(!(E instanceof sgA))throw E;DW(Q,I,B)}};return hs&&rh&&Ew(lB,I,{configurable:!0,set:g}),ah(I,A)})[Xa],"toString",function(){return yT(this).tag}),uT(Is,"withoutSetter",function(A){return ah(bT(A),A)}),PW.f=uW,aW.f=B9,ggA.f=iw,rW.f=wT,AgA.f=vW.f=mT,IgA.f=bW,EgA.f=function(A){return ah(BgA(A),A)},hs&&CgA(fn,"description",{configurable:!0,get:function(){return yT(this).description}})),wc({global:!0,wrap:!0,forced:!At,sham:!At},{Symbol:Is}),Y0(sW(agA),function(A){igA(A)}),wc({target:Q9,stat:!0,forced:!At},{useSetter:function(){rh=!0},useSimple:function(){rh=!1}}),wc({target:"Object",stat:!0,forced:!At,sham:!hs},{create:PgA,defineProperty:B9,defineProperties:iw,getOwnPropertyDescriptor:wT}),wc({target:"Object",stat:!0,forced:!At},{getOwnPropertyNames:mT}),egA(),ogA(Is,Q9),cW[GC]=!0;var cgA=ev,yW=cgA&&!!Symbol.for&&!!Symbol.keyFor,ngA=yA,lgA=kg,dgA=hg,hgA=NC,wW=tv,DgA=yW,Ph=wW("string-to-symbol-registry"),ugA=wW("symbol-to-string-registry");ngA({target:"Symbol",stat:!0,forced:!DgA},{for:function(A){var I=hgA(A);if(dgA(Ph,I))return Ph[I];var g=lgA("Symbol")(I);return Ph[I]=g,ugA[g]=I,g}});var bgA=yA,ygA=hg,wgA=cP,mgA=ov,GgA=tv,RgA=yW,GT=GgA("symbol-to-string-registry");bgA({target:"Symbol",stat:!0,forced:!RgA},{keyFor:function(A){if(!wgA(A))throw new TypeError(mgA(A)+" is not a symbol");if(ygA(GT,A))return GT[A]}});var LgA=fA,RT=sv,SgA=xI,LT=ee,TgA=NC,ST=LgA([].push),UgA=function(A){if(SgA(A))return A;if(RT(A)){for(var I=A.length,g=[],C=0;C=I.length)return A.target=null,Lc(void 0,!0);switch(A.kind){case"keys":return Lc(g,!1);case"values":return Lc(I[g],!1)}return Lc([g,I[g]],!1)},"values"),jT.Arguments=jT.Array;var rQA={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},aQA=rQA,PQA=QI,cQA=fE,fT=cv;for(var nh in aQA)cQA(PQA[nh],nh),fT[nh]=fT.Array;var nQA=aCA,lQA=nQA,dQA=vI,hQA=xQ.f,HT=dQA("metadata"),xT=Function.prototype;xT[HT]===void 0&&hQA(xT,HT,{value:null});var DQA=FI;DQA("asyncDispose");var uQA=FI;uQA("dispose");var bQA=FI;bQA("metadata");var yQA=lQA,wQA=yQA,mQA=kg,GQA=fA,CR=mQA("Symbol"),RQA=CR.keyFor,LQA=GQA(CR.prototype.valueOf),JW=CR.isRegisteredSymbol||function(A){try{return RQA(LQA(A))!==void 0}catch{return!1}},SQA=yA,TQA=JW;SQA({target:"Symbol",stat:!0},{isRegisteredSymbol:TQA});for(var UQA=tv,OT=kg,FQA=fA,YQA=cP,kQA=vI,Sc=OT("Symbol"),qT=Sc.isWellKnownSymbol,WW=OT("Object","getOwnPropertyNames"),pQA=FQA(Sc.prototype.valueOf),_T=UQA("wks"),lh=0,$T=WW(Sc),NQA=$T.length;lh=i?A?"":void 0:(C=IU(B,E))<55296||C>56319||E+1===i||(Q=IU(B,E+1))<56320||Q>57343?A?gBA(B,E):C:A?CBA(B,E,E+2):Q-56320+(C-55296<<10)+65536}},zW={codeAt:gU(!1),charAt:gU(!0)},QBA=zW.charAt,BBA=NC,MW=Pv,EBA=NW,CU=gR,XW="String Iterator",iBA=MW.set,eBA=MW.getterFor(XW);EBA(String,"String",function(A){iBA(this,{type:XW,string:BBA(A),index:0})},function(){var A,I=eBA(this),g=I.string,C=I.index;return C>=g.length?CU(void 0,!0):(A=QBA(g,C),I.index+=A.length,CU(A,!1))});var oBA=av,tBA=oBA.f("iterator"),sBA=tBA,vBA=sBA,rBA=vBA,aBA=rBA,PBA=aBA,cBA=PBA,nBA=cBA,jW=CI(nBA);function E9(A){return(E9=typeof Lr=="function"&&typeof jW=="symbol"?function(I){return typeof I}:function(I){return I&&typeof Lr=="function"&&I.constructor===Lr&&I!==Lr.prototype?"symbol":typeof I})(A)}var lBA=av,dBA=lBA.f("toPrimitive"),hBA=dBA,DBA=hBA,uBA=DBA,bBA=uBA,yBA=bBA,wBA=yBA,mBA=wBA,GBA=CI(mBA);function RBA(A,I){if(E9(A)!="object"||!A)return A;var g=A[GBA];if(g!==void 0){var C=g.call(A,I);if(E9(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(I==="string"?String:Number)(A)}function LBA(A){var I=RBA(A,"string");return E9(I)=="symbol"?I:I+""}function P(A,I,g){return(I=LBA(I))in A?XJ(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}var SBA=yA,TBA=fA,UBA=sv,FBA=TBA([].reverse),QU=[1,2];SBA({target:"Array",proto:!0,forced:String(QU)===String(QU.reverse())},{reverse:function(){return UBA(this)&&(this.length=this.length),FBA(this)}});var YBA=QI,kBA=pC,oE=function(A,I){var g=kBA[A+"Prototype"],C=g&&g[I];if(C)return C;var Q=YBA[A],B=Q&&Q.prototype;return B&&B[I]},pBA=oE,NBA=pBA("Array","reverse"),ZBA=fg,KBA=NBA,dh=Array.prototype,JBA=function(A){var I=A.reverse;return A===dh||ZBA(dh,A)&&I===dh.reverse?KBA:I},WBA=JBA,VBA=WBA,zBA=VBA,MBA=zBA,XBA=MBA,jBA=XBA,fBA=jBA,HBA=fBA,fW=CI(HBA),xBA=rC,OBA=ee,qBA=vI,_BA=qBA("match"),HW=function(A){var I;return xBA(A)&&((I=A[_BA])!==void 0?!!I:OBA(A)==="RegExp")},$BA=EQ,AEA=function(){var A=$BA(this),I="";return A.hasIndices&&(I+="d"),A.global&&(I+="g"),A.ignoreCase&&(I+="i"),A.multiline&&(I+="m"),A.dotAll&&(I+="s"),A.unicode&&(I+="u"),A.unicodeSets&&(I+="v"),A.sticky&&(I+="y"),I},IEA=Bg,gEA=hg,CEA=fg,QEA=AEA,BU=RegExp.prototype,xW=function(A){var I=A.flags;return I!==void 0||"flags"in BU||gEA(A,"flags")||!CEA(BU,A)?I:IEA(QEA,A)},BR=fA,BEA=HQ,EEA=Math.floor,hh=BR("".charAt),iEA=BR("".replace),Dh=BR("".slice),eEA=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,oEA=/\$([$&'`]|\d{1,2})/g,tEA=function(A,I,g,C,Q,B){var E=g+A.length,i=C.length,e=oEA;return Q!==void 0&&(Q=BEA(Q),e=eEA),iEA(B,e,function(o,t){var s;switch(hh(t,0)){case"$":return"$";case"&":return A;case"`":return Dh(I,0,g);case"'":return Dh(I,E);case"<":s=Q[Dh(t,1,-1)];break;default:var v=+t;if(v===0)return o;if(v>i){var r=EEA(v/10);return r===0?o:r<=i?C[r-1]===void 0?hh(t,1):C[r-1]+hh(t,1):o}s=C[v-1]}return s===void 0?"":s})},sEA=yA,vEA=Bg,ER=fA,EU=To,rEA=xI,aEA=aP,PEA=HW,It=NC,cEA=y0,nEA=xW,lEA=tEA,dEA=vI,hEA=dEA("replace"),DEA=TypeError,uh=ER("".indexOf),uEA=ER("".replace),iU=ER("".slice),bEA=Math.max;sEA({target:"String",proto:!0},{replaceAll:function(A,I){var g,C,Q,B,E,i,e,o,t,s,v=EU(this),r=0,n="";if(!aEA(A)){if((g=PEA(A))&&(C=It(EU(nEA(A))),!~uh(C,"g")))throw new DEA("`.replaceAll` does not allow non-global regexes");if(Q=cEA(A,hEA))return vEA(Q,A,v,I);if(g)return uEA(It(v),A,I)}for(B=It(v),E=It(A),(i=rEA(I))||(I=It(I)),e=E.length,o=bEA(1,e),t=uh(B,E);t!==-1;)s=i?It(I(E,t,B)):lEA(E,B,t,[],void 0,I),n+=iU(B,r,t)+s,r=t+e,t=t+o>B.length?-1:uh(B,E,t+o);return r(A[A.VIDEO_SOURCE_TYPE_EXTERNAL=0]="VIDEO_SOURCE_TYPE_EXTERNAL",A[A.VIDEO_SOURCE_TYPE_INTERNAL=1]="VIDEO_SOURCE_TYPE_INTERNAL",A))(Wg||{}),VC=(A=>(A[A.AUDIO_SOURCE_TYPE_EXTERNAL=0]="AUDIO_SOURCE_TYPE_EXTERNAL",A[A.AUDIO_SOURCE_TYPE_INTERNAL=1]="AUDIO_SOURCE_TYPE_INTERNAL",A))(VC||{}),Sr=(A=>(A[A.QUIT=0]="QUIT",A[A.DROPPED=1]="DROPPED",A[A.SWITCH_TO_INVISIBLE=2]="SWITCH_TO_INVISIBLE",A[A.KICKED_BY_ADMIN=3]="KICKED_BY_ADMIN",A))(Sr||{}),tiA=(A=>(A[A.CHANNEL_PROFILE_COMMUNICATION=0]="CHANNEL_PROFILE_COMMUNICATION",A[A.CHANNEL_PROFILE_LIVE_BROADCASTING=1]="CHANNEL_PROFILE_LIVE_BROADCASTING",A))(tiA||{}),siA=(A=>(A[A.AUTO_SUBSCRIBE_MODE=0]="AUTO_SUBSCRIBE_MODE",A[A.MANUAL_SUBSCRIBE_MODE=1]="MANUAL_SUBSCRIBE_MODE",A))(siA||{}),Ds=(A=>(A[A.SUBSCRIBE_SUCC=0]="SUBSCRIBE_SUCC",A[A.SUBSCRIBE_FAIL=1]="SUBSCRIBE_FAIL",A))(Ds||{}),qB=(A=>(A[A.PUBLISH_SUCC=0]="PUBLISH_SUCC",A[A.PUBLISH_FAIL=1]="PUBLISH_FAIL",A))(qB||{}),viA=(A=>(A[A.MIRROR_MODE_OFF=0]="MIRROR_MODE_OFF",A[A.MIRROR_MODE_ON=1]="MIRROR_MODE_ON",A))(viA||{}),Fe=(A=>(A[A.RENDER_MODE_HIDDEN=0]="RENDER_MODE_HIDDEN",A[A.RENDER_MODE_FIT=1]="RENDER_MODE_FIT",A[A.RENDER_MODE_FILL=2]="RENDER_MODE_FILL",A))(Fe||{}),F=(A=>(A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A))(F||{}),iA=(A=>(A[A.AUDIO=1]="AUDIO",A[A.VIDEO=2]="VIDEO",A[A.AUDIO_AND_VIDEO=3]="AUDIO_AND_VIDEO",A))(iA||{}),_B=(A=>(A[A.STREAM_REMOVE_REASON_UNPUBLISH=0]="STREAM_REMOVE_REASON_UNPUBLISH",A[A.STREAM_REMOVE_REASON_PUBLISH_FAILED=1]="STREAM_REMOVE_REASON_PUBLISH_FAILED",A[A.STREAM_REMOVE_REASON_KEEP_LIVE_FAILED=2]="STREAM_REMOVE_REASON_KEEP_LIVE_FAILED",A[A.STREAM_REMOVE_REASON_CLIENT_DISCONNECTED=3]="STREAM_REMOVE_REASON_CLIENT_DISCONNECTED",A[A.STREAM_REMOVE_REASON_REPUBLISH=4]="STREAM_REMOVE_REASON_REPUBLISH",A[A.STREAM_REMOVE_REASON_OTHER=5]="STREAM_REMOVE_REASON_OTHER",A[A.STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED=6]="STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED",A))(_B||{}),XA=(A=>(A[A.CONNECTION_START=0]="CONNECTION_START",A[A.CONNECTION_STATE_DISCONNECTED=1]="CONNECTION_STATE_DISCONNECTED",A[A.CONNECTION_STATE_CONNECTING=2]="CONNECTION_STATE_CONNECTING",A[A.CONNECTION_STATE_CONNECTED=3]="CONNECTION_STATE_CONNECTED",A[A.CONNECTION_STATE_RECONNECTING=4]="CONNECTION_STATE_RECONNECTING",A[A.CONNECTION_STATE_RECONNECTED=5]="CONNECTION_STATE_RECONNECTED",A[A.CONNECTION_STATE_LOST=6]="CONNECTION_STATE_LOST",A))(XA||{}),di=(A=>(A.ICE_FAILED="iceFailed",A.NODE_CHANGE="nodeChange",A.JOIN_TIMEOUT="joinTimeout",A.NOTIFY_RECONNECT="notifyReconnect",A))(di||{}),Lt=(A=>(A.AUTO="auto",A.H264="h264",A.VP8="vp8",A.ByteVC1="ByteVC1",A))(Lt||{}),GQ=(A=>(A[A.MIRROR_TYPE_NONE=0]="MIRROR_TYPE_NONE",A[A.MIRROR_TYPE_RENDER=1]="MIRROR_TYPE_RENDER",A))(GQ||{}),Tr=(A=>(A[A.NORMAL=0]="NORMAL",A[A.DISCONNECT=1]="DISCONNECT",A[A.RESET=2]="RESET",A))(Tr||{}),i9=(A=>(A[A.MICROPHONE=0]="MICROPHONE",A[A.AUDIOMIXING=1]="AUDIOMIXING",A))(i9||{}),vw=(A=>(A[A.domestic=0]="domestic",A[A.overseas=1]="overseas",A))(vw||{}),riA=(A=>(A[A.OFFLINE=0]="OFFLINE",A[A.ONLINE=1]="ONLINE",A[A.UNREACHABLE=2]="UNREACHABLE",A))(riA||{}),aiA=(A=>(A[A.AUDIO_AND_VIDEO=0]="AUDIO_AND_VIDEO",A[A.AUDIO_ONLY=1]="AUDIO_ONLY",A[A.VIDEO_ONLY=2]="VIDEO_ONLY",A))(aiA||{}),qW=(A=>(A[A.PREV_FRAME=0]="PREV_FRAME",A[A.OTHER_FRAME=1]="OTHER_FRAME",A))(qW||{}),Hn=(A=>(A[A.DISABLE=0]="DISABLE",A[A.VIDEO_STREAM_LOW=1]="VIDEO_STREAM_LOW",A[A.AUDIO_ONLY=2]="AUDIO_ONLY",A))(Hn||{}),xn=(A=>(A[A.LOW=0]="LOW",A[A.MEDIUM=100]="MEDIUM",A[A.HIGH=200]="HIGH",A))(xn||{}),Ye=(A=>(A[A.UNKNOWN=0]="UNKNOWN",A[A.EXCELLENT=1]="EXCELLENT",A[A.GOOD=2]="GOOD",A[A.POOR=3]="POOR",A[A.BAD=4]="BAD",A[A.VBAD=5]="VBAD",A[A.DOWN=6]="DOWN",A))(Ye||{}),PiA=(A=>(A[A.Unknown=-1]="Unknown",A[A.SubscribeFallbackByBandwidth=0]="SubscribeFallbackByBandwidth",A[A.SubscribeRecoverByBandwidth=2]="SubscribeRecoverByBandwidth",A))(PiA||{}),EC=(A=>(A[A.communication=0]="communication",A[A.chat=5]="chat",A[A.chatRoom=6]="chatRoom",A[A.coHost=9]="coHost",A[A.meeting=16]="meeting",A[A.classRoom=18]="classRoom",A))(EC||{}),St=(A=>(A[A.default=0]="default",A[A.fluent=1]="fluent",A[A.standard=2]="standard",A[A.hd=3]="hd",A[A.standardStereo=4]="standardStereo",A[A.hdMono=5]="hdMono",A))(St||{}),Ae=(A=>(A[A.AUTO_PLAY=0]="AUTO_PLAY",A[A.VIDEO_ONLY=1]="VIDEO_ONLY",A[A.PLAY_MANUALLY=2]="PLAY_MANUALLY",A))(Ae||{}),Ba=(A=>(A.LC="LC",A.HEv1="HEv1",A.HEv2="HEv2",A))(Ba||{}),_W=(A=>(A.H264="H264",A.H265="H265",A))(_W||{}),si=(A=>(A[A.ASR_ONLY=0]="ASR_ONLY",A[A.ASR_AND_TRANSLATION=1]="ASR_AND_TRANSLATION",A))(si||{}),Tt=(A=>(A[A.STARTED=0]="STARTED",A[A.STOPPED=1]="STOPPED",A[A.ERROR=2]="ERROR",A[A.UPDATED=3]="UPDATED",A))(Tt||{}),ke=(A=>(A[A.FORWARD_STREAM_STATE_SUCCESS=0]="FORWARD_STREAM_STATE_SUCCESS",A[A.FORWARD_STREAM_STATE_FAILURE=1]="FORWARD_STREAM_STATE_FAILURE",A))(ke||{}),Ut=(A=>(A[A.FORWARD_STREAM_ERROR_OK=0]="FORWARD_STREAM_ERROR_OK",A[A.FORWARD_STREAM_ERROR_INVALID_TOKEN=1202]="FORWARD_STREAM_ERROR_INVALID_TOKEN",A[A.FORWARD_STREAM_ERROR_RESPONSE=1203]="FORWARD_STREAM_ERROR_RESPONSE",A[A.FORWARD_STREAM_ERROR_REMOTE_KICKED=1204]="FORWARD_STREAM_ERROR_REMOTE_KICKED",A[A.FORWARD_STREAM_ERROR_NOT_SUPPORT=1205]="FORWARD_STREAM_ERROR_NOT_SUPPORT",A))(Ut||{}),On=(A=>(A[A.DEFAULT=0]="DEFAULT",A[A.HIGH=1]="HIGH",A))(On||{}),Li=(A=>(A[A.VIDEO_ONLY_ONE=0]="VIDEO_ONLY_ONE",A[A.VIDEO_ON_DEMAND=1]="VIDEO_ON_DEMAND",A[A.VIDEO_ALWAYS_SIMULCAST=2]="VIDEO_ALWAYS_SIMULCAST",A))(Li||{}),Si=(A=>(A.VIDEO_STREAM_HIGH="high",A.VIDEO_STREAM_MID="mid",A.VIDEO_STREAM_LOW="low",A))(Si||{}),QC=(A=>(A[A.NONE=0]="NONE",A[A.AFTER_CAPTURE=1]="AFTER_CAPTURE",A[A.AFTER_PROCESS=2]="AFTER_PROCESS",A))(QC||{}),$W=(A=>(A[A.ROOM_MODE_RTC=0]="ROOM_MODE_RTC",A[A.ROOM_MODE_RTS_ONLY=1]="ROOM_MODE_RTS_ONLY",A))($W||{}),ciA=new Uint8Array(16);function niA(){if(!yh&&!(yh=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return yh(ciA)}var liA=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function diA(A){return typeof A=="string"&&liA.test(A)}for(var yg=[],mh=0;mh<256;++mh)yg.push((mh+256).toString(16).substr(1));function hiA(A){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,g=(yg[A[I+0]]+yg[A[I+1]]+yg[A[I+2]]+yg[A[I+3]]+"-"+yg[A[I+4]]+yg[A[I+5]]+"-"+yg[A[I+6]]+yg[A[I+7]]+"-"+yg[A[I+8]]+yg[A[I+9]]+"-"+yg[A[I+10]]+yg[A[I+11]]+yg[A[I+12]]+yg[A[I+13]]+yg[A[I+14]]+yg[A[I+15]]).toLowerCase();if(!diA(g))throw TypeError("Stringified UUID is invalid");return g}function DiA(A,I,g){var C=(A=A||{}).random||(A.rng||niA)();return C[6]=15&C[6]|64,C[8]=63&C[8]|128,hiA(C)}const Ie=()=>typeof window>"u",tC=()=>DiA(),nv=A=>typeof A=="number",uiA=A=>Function.prototype.toString.call(A).includes("[native code]");function KQ(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({contentHint:A.contentHint,enabled:A.enabled,id:A.id,kind:A.kind,label:A.label,muted:A.muted,readyState:A.readyState})}function A1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({id:A.id,active:A.active})}function I1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({track:KQ(A.track)})}function g1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({track:KQ(A.track)})}function C1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({currentDirection:A.currentDirection,direction:A.direction,mid:A.mid,stopped:A.stopped,receiver:g1(A.receiver),sender:I1(A.sender)})}const biA="@byted/ve-rtc",Gh="@byted/ve-rtc",Rh="@byted/ve-rtc-cache-size";class yiA{constructor(){P(this,"storeKey",void 0),P(this,"logLevel",void 0),P(this,"LogfileSize",void 0),P(this,"db",void 0),P(this,"logId",void 0),P(this,"cacheLog",void 0),P(this,"cachedSize",void 0),P(this,"preCacheTime",void 0),P(this,"timer",void 0),P(this,"_getSize",I=>new Blob(I).size/1048576),this.storeKey="",this.logId=1,this.cacheLog="",this.logLevel="none",this.LogfileSize=100,this._createStore()}_createStore(){if(Ie()||!window.indexedDB)return;const I=indexedDB.open(biA);I.onupgradeneeded=()=>{I.result.createObjectStore(Gh);try{localStorage.removeItem(Rh)}catch{}},I.onerror=g=>{},I.onsuccess=()=>{this.db=I.result,this._getCachedSize()}}_getCachedSize(){try{const I=localStorage.getItem(Rh);I?this.cachedSize=Number(I):this.values().then(g=>{this.cachedSize=this._getSize(g),this._setCachedSize()})}catch{}}_setCachedSize(){try{localStorage.setItem(Rh,"".concat(this.cachedSize))}catch{}}_getStore(I){if(this.db)return this.db.transaction(Gh,I).objectStore(Gh)}set(I){return new Promise((g,C)=>{if(this.logLevel==="none")return g();if(I&&this.preCacheTime&&this.preCacheTime-Date.now()<1e3)return this.cacheLog+=` - -`.concat(this.logId,": ").concat(I),this.logId++,this.timer||(this.timer=setTimeout(()=>{this.set("")},1e3-(this.preCacheTime-Date.now()))),g();clearTimeout(this.timer),this.timer=null;const Q=this._getStore("readwrite");if(!Q)return C("get store fail");this.cachedSize&&this.cachedSize>this.LogfileSize&&this.keyEarliest().then(E=>{this.get(E).then(i=>{this.del(E).then(()=>{this.cachedSize=this.cachedSize-this._getSize(["".concat(i)]),this._setCachedSize()})})});const B=Q.get(this.storeKey);B.onsuccess=()=>{try{const E="".concat(B.result||"").concat(this.cacheLog),i=I?"".concat(E?` - -`:"").concat(this.logId,": ").concat(I):"";Q.put("".concat(E).concat(i),this.storeKey),I&&this.logId++,this.cacheLog="",this.cachedSize=(this.cachedSize||0)+this._getSize(["".concat(this.cacheLog).concat(i)]),this._setCachedSize(),this.preCacheTime=Date.now(),g()}catch(E){if(!I)return C(E);this.cacheLog+=` - -`.concat(this.logId,": ").concat(I),this.logId++,C(E)}},B.onerror=E=>{if(!I)return C(E);this.cacheLog+=` - -`.concat(this.logId,": ").concat(I),this.logId++,C(E)}})}get(I){return new Promise((g,C)=>{const Q=this._getStore("readonly");if(!Q)return C();const B=Q.get(I);B.onsuccess=()=>{g(B.result)},B.onerror=E=>{C(E)}})}del(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.storeKey;return new Promise((g,C)=>{const Q=this._getStore("readwrite");if(!Q)return C();const B=Q.delete(I);B.onsuccess=()=>g(B.result),B.onerror=E=>C(E)})}keyEarliest(){return this.keys().then(I=>{let g,C=Date.now();return I.forEach(Q=>{if(!Q||!Q.length)return;const B=Q.split("-")[0];Number(B){const C=this._getStore("readonly");if(!C)return g();if(C.getAllKeys){const B=C.getAllKeys();return B.onsuccess=()=>{I(B.result)},void(B.onerror=()=>{g()})}const Q=[];C.openCursor().onsuccess=function(){this.result&&(Q.push(this.result.key),this.result.continue())},C.transaction.oncomplete=()=>I(Q)})}values(){return new Promise((I,g)=>{const C=this._getStore("readonly");if(!C)return g();if(C.getAll){const B=C.getAll();return B.onsuccess=()=>{I(B.result)},void(B.onerror=()=>{g()})}const Q=[];C.openCursor().onsuccess=function(){this.result&&(Q.push(this.result.value),this.result.continue())},C.transaction.oncomplete=()=>I(Q)})}download(I){I=I||this.storeKey,this.get(I).then(g=>{const C=document.createElement("a");C.download="".concat(I,".txt"),C.href="data:text/paint;utf-8,".concat(g||""),C.click()})}}var Ks=new yiA;let wiA=class{constructor(){P(this,"_all",{})}on(A,I){const g=this._all[A];g?g.push(I):this._all[A]=[I]}once(A,I){var g=this;const C=function(){I(...arguments),g.off(A,C)};this.on(A,C)}off(A,I){const g=this._all[A];g==null||g.splice(g.indexOf(I)>>>0,1)}emit(A){for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;CB(...g))}safeEmit(A){try{for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;C1?arguments[1]:void 0)}});var geA=oE,CeA=geA("Array","filter"),QeA=fg,BeA=CeA,Lh=Array.prototype,EeA=function(A){var I=A.filter;return A===Lh||QeA(Lh,A)&&I===Lh.filter?BeA:I},ieA=EeA,eeA=ieA,oeA=eeA,teA=oeA,seA=teA,veA=seA,reA=veA,aeA=CI(reA),B1={exports:{}},PeA=yA,ceA=II,neA=ME,E1=iv.f,i1=Qg,leA=!i1||ceA(function(){E1(1)});PeA({target:"Object",stat:!0,forced:leA,sham:!i1},{getOwnPropertyDescriptor:function(A,I){return E1(neA(A),I)}});var deA=pC,e1=deA.Object,heA=B1.exports=function(A,I){return e1.getOwnPropertyDescriptor(A,I)};e1.getOwnPropertyDescriptor.sham&&(heA.sham=!0);var DeA=B1.exports,ueA=DeA,beA=ueA,yeA=beA,weA=yeA,meA=weA,GeA=meA,ReA=GeA,o1=CI(ReA),LeA=Qg,SeA=sv,TeA=TypeError,UeA=Object.getOwnPropertyDescriptor,FeA=LeA&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(A){return A instanceof TypeError}}(),YeA=FeA?function(A,I){if(SeA(A)&&!UeA(A,"length").writable)throw new TeA("Cannot set read only .length");return A.length=I}:function(A,I){return A.length=I},keA=yA,peA=HQ,NeA=jE,ZeA=YeA,KeA=XG,JeA=II,WeA=JeA(function(){return[].push.call({length:4294967296},1)!==4294967297}),VeA=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(A){return A instanceof TypeError}},zeA=WeA||!VeA();keA({target:"Array",proto:!0,forced:zeA},{push:function(A){var I=peA(this),g=NeA(I),C=arguments.length;KeA(g+C);for(var Q=0;Q1?arguments[1]:void 0)},ioA=yA;ioA({target:"Array",proto:!0,forced:[].forEach!==sU},{forEach:sU});var eoA=oE,ooA=eoA("Array","forEach"),toA=ooA,soA=toA,voA=vv,roA=hg,aoA=fg,PoA=soA,Th=Array.prototype,coA={DOMTokenList:!0,NodeList:!0},noA=function(A){var I=A.forEach;return A===Th||aoA(Th,A)&&I===Th.forEach||roA(coA,voA(A))?PoA:I},loA=noA,doA=loA,hoA=doA,DoA=hoA,uoA=DoA,vU=CI(uoA),boA=kg,yoA=fA,woA=T0,moA=dP,GoA=EQ,RoA=yoA([].concat),s1=boA("Reflect","ownKeys")||function(A){var I=woA.f(GoA(A)),g=moA.f;return g?RoA(I,g(A)):I},LoA=yA,SoA=Qg,ToA=s1,UoA=ME,FoA=iv,YoA=m0;LoA({target:"Object",stat:!0,sham:!SoA},{getOwnPropertyDescriptors:function(A){for(var I,g,C=UoA(A),Q=FoA.f,B=ToA(C),E={},i=0;B.length>i;)(g=Q(C,I=B[i++]))!==void 0&&YoA(E,I,g);return E}});var koA=pC,poA=koA.Object.getOwnPropertyDescriptors,NoA=poA,ZoA=NoA,KoA=ZoA,JoA=KoA,WoA=JoA,VoA=WoA,zoA=VoA,rU=CI(zoA),v1={exports:{}},MoA=yA,XoA=Qg,aU=G0.f;MoA({target:"Object",stat:!0,forced:Object.defineProperties!==aU,sham:!XoA},{defineProperties:aU});var joA=pC,r1=joA.Object,foA=v1.exports=function(A,I){return r1.defineProperties(A,I)};r1.defineProperties.sham&&(foA.sham=!0);var HoA=v1.exports,xoA=HoA,OoA=xoA,qoA=OoA,_oA=qoA,$oA=_oA,AtA=$oA,ItA=AtA,gtA=CI(ItA);function PU(A,I){var g=ViA(A);if(e9){var C=e9(A);I&&(C=aeA(C).call(C,function(Q){return o1(A,Q).enumerable})),goA(g).apply(g,C)}return g}function R(A){for(var I=1;I0&&CtA(e)?(o=QtA(e),t=a1(A,I,e,o,t,B-1)-1):(BtA(t+1),A[t]=e),t++),s++;return t},itA=a1,etA=yA,otA=itA,ttA=HQ,stA=jE,vtA=w0,rtA=xG;etA({target:"Array",proto:!0},{flat:function(){var A=arguments.length?arguments[0]:void 0,I=ttA(this),g=stA(I),C=rtA(I,0);return C.length=otA(C,I,I,g,0,A===void 0?1:vtA(A)),C}});var atA=oE,PtA=atA("Array","flat"),ctA=fg,ntA=PtA,Uh=Array.prototype,ltA=function(A){var I=A.flat;return A===Uh||ctA(Uh,A)&&I===Uh.flat?ntA:I},dtA=ltA,htA=dtA,DtA=htA,utA=DtA,btA=utA,ytA=btA,wtA=ytA,mtA=wtA,P1=CI(mtA),HE={};(function(A){var I=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";function g(B,E){return Object.prototype.hasOwnProperty.call(B,E)}A.assign=function(B){for(var E=Array.prototype.slice.call(arguments,1);E.length;){var i=E.shift();if(i){if(typeof i!="object")throw new TypeError(i+"must be non-object");for(var e in i)g(i,e)&&(B[e]=i[e])}}return B},A.shrinkBuf=function(B,E){return B.length===E?B:B.subarray?B.subarray(0,E):(B.length=E,B)};var C={arraySet:function(B,E,i,e,o){if(E.subarray&&B.subarray)B.set(E.subarray(i,i+e),o);else for(var t=0;t=0;)A[I]=0}var StA=0,c1=1,TtA=2,UtA=3,FtA=258,iR=29,bP=256,ja=bP+1+iR,us=30,eR=19,n1=2*ja+1,fe=15,Fh=16,YtA=7,oR=256,l1=16,d1=17,h1=18,rw=[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],qn=[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],ktA=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],D1=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ptA=512,GE=new Array(2*(ja+2));lv(GE);var Ea=new Array(2*us);lv(Ea);var fa=new Array(ptA);lv(fa);var Ha=new Array(FtA-UtA+1);lv(Ha);var tR=new Array(iR);lv(tR);var u1,b1,y1,o9=new Array(us);function Yh(A,I,g,C,Q){this.static_tree=A,this.extra_bits=I,this.extra_base=g,this.elems=C,this.max_length=Q,this.has_stree=A&&A.length}function kh(A,I){this.dyn_tree=A,this.max_code=0,this.stat_desc=I}function w1(A){return A<256?fa[A]:fa[256+(A>>>7)]}function xa(A,I){A.pending_buf[A.pending++]=255&I,A.pending_buf[A.pending++]=I>>>8&255}function SC(A,I,g){A.bi_valid>Fh-g?(A.bi_buf|=I<>Fh-A.bi_valid,A.bi_valid+=g-Fh):(A.bi_buf|=I<>>=1,g<<=1;while(--I>0);return g>>>1}function NtA(A){A.bi_valid===16?(xa(A,A.bi_buf),A.bi_buf=0,A.bi_valid=0):A.bi_valid>=8&&(A.pending_buf[A.pending++]=255&A.bi_buf,A.bi_buf>>=8,A.bi_valid-=8)}function ZtA(A,I){var g,C,Q,B,E,i,e=I.dyn_tree,o=I.max_code,t=I.stat_desc.static_tree,s=I.stat_desc.has_stree,v=I.stat_desc.extra_bits,r=I.stat_desc.extra_base,n=I.stat_desc.max_length,a=0;for(B=0;B<=fe;B++)A.bl_count[B]=0;for(e[2*A.heap[A.heap_max]+1]=0,g=A.heap_max+1;gn&&(B=n,a++),e[2*C+1]=B,C>o||(A.bl_count[B]++,E=0,C>=r&&(E=v[C-r]),i=e[2*C],A.opt_len+=i*(B+E),s&&(A.static_len+=i*(t[2*C+1]+E)));if(a!==0){do{for(B=n-1;A.bl_count[B]===0;)B--;A.bl_count[B]--,A.bl_count[B+1]+=2,A.bl_count[n]--,a-=2}while(a>0);for(B=n;B!==0;B--)for(C=A.bl_count[B];C!==0;)(Q=A.heap[--g])>o||(e[2*Q+1]!==B&&(A.opt_len+=(B-e[2*Q+1])*e[2*Q],e[2*Q+1]=B),C--)}}function G1(A,I,g){var C,Q,B=new Array(fe+1),E=0;for(C=1;C<=fe;C++)B[C]=E=E+g[C-1]<<1;for(Q=0;Q<=I;Q++){var i=A[2*Q+1];i!==0&&(A[2*Q]=m1(B[i]++,i))}}function KtA(){var A,I,g,C,Q,B=new Array(fe+1);for(g=0,C=0;C>=7;C8?xa(A,A.bi_buf):A.bi_valid>0&&(A.pending_buf[A.pending++]=A.bi_buf),A.bi_buf=0,A.bi_valid=0}function JtA(A,I,g,C){L1(A),xa(A,g),xa(A,~g),GtA.arraySet(A.pending_buf,A.window,I,g,A.pending),A.pending+=g}function lU(A,I,g,C){var Q=2*I,B=2*g;return A[Q]>1;g>=1;g--)ph(A,B,g);Q=e;do g=A.heap[1],A.heap[1]=A.heap[A.heap_len--],ph(A,B,1),C=A.heap[1],A.heap[--A.heap_max]=g,A.heap[--A.heap_max]=C,B[2*Q]=B[2*g]+B[2*C],A.depth[Q]=(A.depth[g]>=A.depth[C]?A.depth[g]:A.depth[C])+1,B[2*g+1]=B[2*C+1]=Q,A.heap[1]=Q++,ph(A,B,1);while(A.heap_len>=2);A.heap[--A.heap_max]=A.heap[1],ZtA(A,I),G1(B,o,A.bl_count)}function hU(A,I,g){var C,Q,B=-1,E=I[1],i=0,e=7,o=4;for(E===0&&(e=138,o=3),I[2*(g+1)+1]=65535,C=0;C<=g;C++)Q=E,E=I[2*(C+1)+1],++i=3&&A.bl_tree[2*D1[I]+1]===0;I--);return A.opt_len+=3*(I+1)+5+5+4,I}function VtA(A,I,g,C){var Q;for(SC(A,I-257,5),SC(A,g-1,5),SC(A,C-4,4),Q=0;Q>>=1)if(1&g&&A.dyn_ltree[2*I]!==0)return cU;if(A.dyn_ltree[18]!==0||A.dyn_ltree[20]!==0||A.dyn_ltree[26]!==0)return nU;for(I=32;I0?(A.strm.data_type===LtA&&(A.strm.data_type=ztA(A)),aw(A,A.l_desc),aw(A,A.d_desc),E=WtA(A),Q=A.opt_len+3+7>>>3,(B=A.static_len+3+7>>>3)<=Q&&(Q=B)):Q=B=g+5,g+4<=Q&&I!==-1?S1(A,I,g,C):A.strategy===RtA||B===Q?(SC(A,(c1<<1)+(C?1:0),3),dU(A,GE,Ea)):(SC(A,(TtA<<1)+(C?1:0),3),VtA(A,A.l_desc.max_code+1,A.d_desc.max_code+1,E+1),dU(A,A.dyn_ltree,A.dyn_dtree)),R1(A),C&&L1(A)}function ftA(A,I,g){return A.pending_buf[A.d_buf+2*A.last_lit]=I>>>8&255,A.pending_buf[A.d_buf+2*A.last_lit+1]=255&I,A.pending_buf[A.l_buf+A.last_lit]=255&g,A.last_lit++,I===0?A.dyn_ltree[2*g]++:(A.matches++,I--,A.dyn_ltree[2*(Ha[g]+bP+1)]++,A.dyn_dtree[2*w1(I)]++),A.last_lit===A.lit_bufsize-1}function HtA(A,I,g,C){for(var Q=65535&A,B=A>>>16&65535,E=0;g!==0;){g-=E=g>2e3?2e3:g;do B=B+(Q=Q+I[C++]|0)|0;while(--E);Q%=65521,B%=65521}return Q|B<<16}Ft._tr_init=MtA,Ft._tr_stored_block=S1,Ft._tr_flush_block=jtA,Ft._tr_tally=ftA,Ft._tr_align=XtA;var T1=HtA;function xtA(){for(var A,I=[],g=0;g<256;g++){A=g;for(var C=0;C<8;C++)A=1&A?3988292384^A>>>1:A>>>1;I[g]=A}return I}var OtA=xtA();function qtA(A,I,g,C){var Q=OtA,B=C+g;A^=-1;for(var E=C;E>>8^Q[255&(A^I[E])];return~A}var gs,U1=qtA,sR={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},iC=HE,VQ=Ft,F1=T1,vi=U1,_tA=sR,Fo=0,$tA=1,AsA=3,Hi=4,bU=5,gE=0,yU=1,zQ=-2,IsA=-3,Nh=-5,gsA=-1,CsA=1,Tc=2,QsA=3,BsA=4,EsA=0,isA=2,k0=8,esA=9,osA=15,tsA=8,ssA=29,vsA=256,Pw=vsA+1+ssA,rsA=30,asA=19,PsA=2*Pw+1,csA=15,FA=3,Ti=258,wB=Ti+FA+1,nsA=32,p0=42,cw=69,_n=73,$n=91,Al=103,He=113,Fr=666,lg=1,yP=2,no=3,dv=4,lsA=3;function Ui(A,I){return A.msg=_tA[I],I}function wU(A){return(A<<1)-(A>4?9:0)}function ui(A){for(var I=A.length;--I>=0;)A[I]=0}function ri(A){var I=A.state,g=I.pending;g>A.avail_out&&(g=A.avail_out),g!==0&&(iC.arraySet(A.output,I.pending_buf,I.pending_out,g,A.next_out),A.next_out+=g,I.pending_out+=g,A.total_out+=g,A.avail_out-=g,I.pending-=g,I.pending===0&&(I.pending_out=0))}function Sg(A,I){VQ._tr_flush_block(A,A.block_start>=0?A.block_start:-1,A.strstart-A.block_start,I),A.block_start=A.strstart,ri(A.strm)}function VA(A,I){A.pending_buf[A.pending++]=I}function Cr(A,I){A.pending_buf[A.pending++]=I>>>8&255,A.pending_buf[A.pending++]=255&I}function dsA(A,I,g,C){var Q=A.avail_in;return Q>C&&(Q=C),Q===0?0:(A.avail_in-=Q,iC.arraySet(I,A.input,A.next_in,Q,g),A.state.wrap===1?A.adler=F1(A.adler,I,Q,g):A.state.wrap===2&&(A.adler=vi(A.adler,I,Q,g)),A.next_in+=Q,A.total_in+=Q,Q)}function Y1(A,I){var g,C,Q=A.max_chain_length,B=A.strstart,E=A.prev_length,i=A.nice_match,e=A.strstart>A.w_size-wB?A.strstart-(A.w_size-wB):0,o=A.window,t=A.w_mask,s=A.prev,v=A.strstart+Ti,r=o[B+E-1],n=o[B+E];A.prev_length>=A.good_match&&(Q>>=2),i>A.lookahead&&(i=A.lookahead);do if(o[(g=I)+E]===n&&o[g+E-1]===r&&o[g]===o[B]&&o[++g]===o[B+1]){B+=2,g++;do;while(o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&BE){if(A.match_start=I,E=C,C>=i)break;r=o[B+E-1],n=o[B+E]}}while((I=s[I&t])>e&&--Q!=0);return E<=A.lookahead?E:A.lookahead}function lo(A){var I,g,C,Q,B,E=A.w_size;do{if(Q=A.window_size-A.lookahead-A.strstart,A.strstart>=E+(E-wB)){iC.arraySet(A.window,A.window,E,E,0),A.match_start-=E,A.strstart-=E,A.block_start-=E,I=g=A.hash_size;do C=A.head[--I],A.head[I]=C>=E?C-E:0;while(--g);I=g=E;do C=A.prev[--I],A.prev[I]=C>=E?C-E:0;while(--g);Q+=E}if(A.strm.avail_in===0)break;if(g=dsA(A.strm,A.window,A.strstart+A.lookahead,Q),A.lookahead+=g,A.lookahead+A.insert>=FA)for(B=A.strstart-A.insert,A.ins_h=A.window[B],A.ins_h=(A.ins_h<A.pending_buf_size-5&&(g=A.pending_buf_size-5);;){if(A.lookahead<=1){if(lo(A),A.lookahead===0&&I===Fo)return lg;if(A.lookahead===0)break}A.strstart+=A.lookahead,A.lookahead=0;var C=A.block_start+g;if((A.strstart===0||A.strstart>=C)&&(A.lookahead=A.strstart-C,A.strstart=C,Sg(A,!1),A.strm.avail_out===0)||A.strstart-A.block_start>=A.w_size-wB&&(Sg(A,!1),A.strm.avail_out===0))return lg}return A.insert=0,I===Hi?(Sg(A,!0),A.strm.avail_out===0?no:dv):(A.strstart>A.block_start&&(Sg(A,!1),A.strm.avail_out),lg)}function Zh(A,I){for(var g,C;;){if(A.lookahead=FA&&(A.ins_h=(A.ins_h<=FA)if(C=VQ._tr_tally(A,A.strstart-A.match_start,A.match_length-FA),A.lookahead-=A.match_length,A.match_length<=A.max_lazy_match&&A.lookahead>=FA){A.match_length--;do A.strstart++,A.ins_h=(A.ins_h<=FA&&(A.ins_h=(A.ins_h<4096)&&(A.match_length=FA-1)),A.prev_length>=FA&&A.match_length<=A.prev_length){Q=A.strstart+A.lookahead-FA,C=VQ._tr_tally(A,A.strstart-1-A.prev_match,A.prev_length-FA),A.lookahead-=A.prev_length-1,A.prev_length-=2;do++A.strstart<=Q&&(A.ins_h=(A.ins_h<=FA&&A.strstart>0&&(C=E[Q=A.strstart-1])===E[++Q]&&C===E[++Q]&&C===E[++Q]){B=A.strstart+Ti;do;while(C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&QA.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=FA?(g=VQ._tr_tally(A,1,A.match_length-FA),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(g=VQ._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),g&&(Sg(A,!1),A.strm.avail_out===0))return lg}return A.insert=0,I===Hi?(Sg(A,!0),A.strm.avail_out===0?no:dv):A.last_lit&&(Sg(A,!1),A.strm.avail_out===0)?lg:yP}function usA(A,I){for(var g;;){if(A.lookahead===0&&(lo(A),A.lookahead===0)){if(I===Fo)return lg;break}if(A.match_length=0,g=VQ._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,g&&(Sg(A,!1),A.strm.avail_out===0))return lg}return A.insert=0,I===Hi?(Sg(A,!0),A.strm.avail_out===0?no:dv):A.last_lit&&(Sg(A,!1),A.strm.avail_out===0)?lg:yP}function VB(A,I,g,C,Q){this.good_length=A,this.max_lazy=I,this.nice_length=g,this.max_chain=C,this.func=Q}function bsA(A){A.window_size=2*A.w_size,ui(A.head),A.max_lazy_match=gs[A.level].max_lazy,A.good_match=gs[A.level].good_length,A.nice_match=gs[A.level].nice_length,A.max_chain_length=gs[A.level].max_chain,A.strstart=0,A.block_start=0,A.lookahead=0,A.insert=0,A.match_length=A.prev_length=FA-1,A.match_available=0,A.ins_h=0}function ysA(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=k0,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new iC.Buf16(2*PsA),this.dyn_dtree=new iC.Buf16(2*(2*rsA+1)),this.bl_tree=new iC.Buf16(2*(2*asA+1)),ui(this.dyn_ltree),ui(this.dyn_dtree),ui(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new iC.Buf16(csA+1),this.heap=new iC.Buf16(2*Pw+1),ui(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new iC.Buf16(2*Pw+1),ui(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function k1(A){var I;return A&&A.state?(A.total_in=A.total_out=0,A.data_type=isA,(I=A.state).pending=0,I.pending_out=0,I.wrap<0&&(I.wrap=-I.wrap),I.status=I.wrap?p0:He,A.adler=I.wrap===2?0:1,I.last_flush=Fo,VQ._tr_init(I),gE):Ui(A,zQ)}function p1(A){var I=k1(A);return I===gE&&bsA(A.state),I}function wsA(A,I){return A&&A.state?A.state.wrap!==2?zQ:(A.state.gzhead=I,gE):zQ}function N1(A,I,g,C,Q,B){if(!A)return zQ;var E=1;if(I===gsA&&(I=6),C<0?(E=0,C=-C):C>15&&(E=2,C-=16),Q<1||Q>esA||g!==k0||C<8||C>15||I<0||I>9||B<0||B>BsA)return Ui(A,zQ);C===8&&(C=9);var i=new ysA;return A.state=i,i.strm=A,i.wrap=E,i.gzhead=null,i.w_bits=C,i.w_size=1<bU||I<0)return A?Ui(A,zQ):zQ;if(C=A.state,!A.output||!A.input&&A.avail_in!==0||C.status===Fr&&I!==Hi)return Ui(A,A.avail_out===0?Nh:zQ);if(C.strm=A,g=C.last_flush,C.last_flush=I,C.status===p0)if(C.wrap===2)A.adler=0,VA(C,31),VA(C,139),VA(C,8),C.gzhead?(VA(C,(C.gzhead.text?1:0)+(C.gzhead.hcrc?2:0)+(C.gzhead.extra?4:0)+(C.gzhead.name?8:0)+(C.gzhead.comment?16:0)),VA(C,255&C.gzhead.time),VA(C,C.gzhead.time>>8&255),VA(C,C.gzhead.time>>16&255),VA(C,C.gzhead.time>>24&255),VA(C,C.level===9?2:C.strategy>=Tc||C.level<2?4:0),VA(C,255&C.gzhead.os),C.gzhead.extra&&C.gzhead.extra.length&&(VA(C,255&C.gzhead.extra.length),VA(C,C.gzhead.extra.length>>8&255)),C.gzhead.hcrc&&(A.adler=vi(A.adler,C.pending_buf,C.pending,0)),C.gzindex=0,C.status=cw):(VA(C,0),VA(C,0),VA(C,0),VA(C,0),VA(C,0),VA(C,C.level===9?2:C.strategy>=Tc||C.level<2?4:0),VA(C,lsA),C.status=He);else{var E=k0+(C.w_bits-8<<4)<<8;E|=(C.strategy>=Tc||C.level<2?0:C.level<6?1:C.level===6?2:3)<<6,C.strstart!==0&&(E|=nsA),E+=31-E%31,C.status=He,Cr(C,E),C.strstart!==0&&(Cr(C,A.adler>>>16),Cr(C,65535&A.adler)),A.adler=1}if(C.status===cw)if(C.gzhead.extra){for(Q=C.pending;C.gzindex<(65535&C.gzhead.extra.length)&&(C.pending!==C.pending_buf_size||(C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),ri(A),Q=C.pending,C.pending!==C.pending_buf_size));)VA(C,255&C.gzhead.extra[C.gzindex]),C.gzindex++;C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),C.gzindex===C.gzhead.extra.length&&(C.gzindex=0,C.status=_n)}else C.status=_n;if(C.status===_n)if(C.gzhead.name){Q=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),ri(A),Q=C.pending,C.pending===C.pending_buf_size)){B=1;break}B=C.gzindexQ&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),B===0&&(C.gzindex=0,C.status=$n)}else C.status=$n;if(C.status===$n)if(C.gzhead.comment){Q=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),ri(A),Q=C.pending,C.pending===C.pending_buf_size)){B=1;break}B=C.gzindexQ&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),B===0&&(C.status=Al)}else C.status=Al;if(C.status===Al&&(C.gzhead.hcrc?(C.pending+2>C.pending_buf_size&&ri(A),C.pending+2<=C.pending_buf_size&&(VA(C,255&A.adler),VA(C,A.adler>>8&255),A.adler=0,C.status=He)):C.status=He),C.pending!==0){if(ri(A),A.avail_out===0)return C.last_flush=-1,gE}else if(A.avail_in===0&&wU(I)<=wU(g)&&I!==Hi)return Ui(A,Nh);if(C.status===Fr&&A.avail_in!==0)return Ui(A,Nh);if(A.avail_in!==0||C.lookahead!==0||I!==Fo&&C.status!==Fr){var i=C.strategy===Tc?usA(C,I):C.strategy===QsA?DsA(C,I):gs[C.level].func(C,I);if(i!==no&&i!==dv||(C.status=Fr),i===lg||i===no)return A.avail_out===0&&(C.last_flush=-1),gE;if(i===yP&&(I===$tA?VQ._tr_align(C):I!==bU&&(VQ._tr_stored_block(C,0,0,!1),I===AsA&&(ui(C.head),C.lookahead===0&&(C.strstart=0,C.block_start=0,C.insert=0))),ri(A),A.avail_out===0))return C.last_flush=-1,gE}return I!==Hi?gE:C.wrap<=0?yU:(C.wrap===2?(VA(C,255&A.adler),VA(C,A.adler>>8&255),VA(C,A.adler>>16&255),VA(C,A.adler>>24&255),VA(C,255&A.total_in),VA(C,A.total_in>>8&255),VA(C,A.total_in>>16&255),VA(C,A.total_in>>24&255)):(Cr(C,A.adler>>>16),Cr(C,65535&A.adler)),ri(A),C.wrap>0&&(C.wrap=-C.wrap),C.pending!==0?gE:yU)}function RsA(A){var I;return A&&A.state?(I=A.state.status)!==p0&&I!==cw&&I!==_n&&I!==$n&&I!==Al&&I!==He&&I!==Fr?Ui(A,zQ):(A.state=null,I===He?Ui(A,IsA):gE):zQ}function LsA(A,I){var g,C,Q,B,E,i,e,o,t=I.length;if(!A||!A.state||(B=(g=A.state).wrap)===2||B===1&&g.status!==p0||g.lookahead)return zQ;for(B===1&&(A.adler=F1(A.adler,I,t,0)),g.wrap=0,t>=g.w_size&&(B===0&&(ui(g.head),g.strstart=0,g.block_start=0,g.insert=0),o=new iC.Buf8(g.w_size),iC.arraySet(o,I,t-g.w_size,g.w_size,0),I=o,t=g.w_size),E=A.avail_in,i=A.next_in,e=A.input,A.avail_in=t,A.next_in=0,A.input=I,lo(g);g.lookahead>=FA;){C=g.strstart,Q=g.lookahead-(FA-1);do g.ins_h=(g.ins_h<=252?6:Qi>=248?5:Qi>=240?4:Qi>=224?3:Qi>=192?2:1;function mU(A,I){if(I<65534&&(A.subarray&&K1||!A.subarray&&Z1))return String.fromCharCode.apply(null,t9.shrinkBuf(A,I));for(var g="",C=0;C>>6,I[B++]=128|63&g):g<65536?(I[B++]=224|g>>>12,I[B++]=128|g>>>6&63,I[B++]=128|63&g):(I[B++]=240|g>>>18,I[B++]=128|g>>>12&63,I[B++]=128|g>>>6&63,I[B++]=128|63&g);return I},Je.buf2binstring=function(A){return mU(A,A.length)},Je.binstring2buf=function(A){for(var I=new t9.Buf8(A.length),g=0,C=I.length;g4)i[C++]=65533,g+=B-1;else{for(Q&=B===2?31:B===3?15:7;B>1&&g1?i[C++]=65533:Q<65536?i[C++]=Q:(Q-=65536,i[C++]=55296|Q>>10&1023,i[C++]=56320|1023&Q)}return mU(i,C)},Je.utf8border=function(A,I){var g;for((I=I||A.length)>A.length&&(I=A.length),g=I-1;g>=0&&(192&A[g])==128;)g--;return g<0||g===0?I:g+Yr[A[g]]>I?g:I};var J1=SsA,ia=fB,kr=HE,nw=Je,lw=sR,TsA=J1,W1=Object.prototype.toString,UsA=0,Kh=4,Cs=0,GU=1,RU=2,FsA=-1,YsA=0,ksA=8;function xe(A){if(!(this instanceof xe))return new xe(A);this.options=kr.assign({level:FsA,method:ksA,chunkSize:16384,windowBits:15,memLevel:8,strategy:YsA,to:""},A||{});var I=this.options;I.raw&&I.windowBits>0?I.windowBits=-I.windowBits:I.gzip&&I.windowBits>0&&I.windowBits<16&&(I.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new TsA,this.strm.avail_out=0;var g=ia.deflateInit2(this.strm,I.level,I.method,I.windowBits,I.memLevel,I.strategy);if(g!==Cs)throw new Error(lw[g]);if(I.header&&ia.deflateSetHeader(this.strm,I.header),I.dictionary){var C;if(C=typeof I.dictionary=="string"?nw.string2buf(I.dictionary):W1.call(I.dictionary)==="[object ArrayBuffer]"?new Uint8Array(I.dictionary):I.dictionary,(g=ia.deflateSetDictionary(this.strm,C))!==Cs)throw new Error(lw[g]);this._dict_set=!0}}function vR(A,I){var g=new xe(I);if(g.push(A,!0),g.err)throw g.msg||lw[g.err];return g.result}function psA(A,I){return(I=I||{}).raw=!0,vR(A,I)}function NsA(A,I){return(I=I||{}).gzip=!0,vR(A,I)}xe.prototype.push=function(A,I){var g,C,Q=this.strm,B=this.options.chunkSize;if(this.ended)return!1;C=I===~~I?I:I===!0?Kh:UsA,typeof A=="string"?Q.input=nw.string2buf(A):W1.call(A)==="[object ArrayBuffer]"?Q.input=new Uint8Array(A):Q.input=A,Q.next_in=0,Q.avail_in=Q.input.length;do{if(Q.avail_out===0&&(Q.output=new kr.Buf8(B),Q.next_out=0,Q.avail_out=B),(g=ia.deflate(Q,C))!==GU&&g!==Cs)return this.onEnd(g),this.ended=!0,!1;Q.avail_out!==0&&(Q.avail_in!==0||C!==Kh&&C!==RU)||(this.options.to==="string"?this.onData(nw.buf2binstring(kr.shrinkBuf(Q.output,Q.next_out))):this.onData(kr.shrinkBuf(Q.output,Q.next_out)))}while((Q.avail_in>0||Q.avail_out===0)&&g!==GU);return C===Kh?(g=ia.deflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===Cs):C!==RU||(this.onEnd(Cs),Q.avail_out=0,!0)},xe.prototype.onData=function(A){this.chunks.push(A)},xe.prototype.onEnd=function(A){A===Cs&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=kr.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},Ur.Deflate=xe,Ur.deflate=vR,Ur.deflateRaw=psA,Ur.gzip=NsA;var pr={},ZsA=xW,KsA=ZsA,JsA=fg,WsA=KsA,LU=RegExp.prototype,VsA=function(A){return A===LU||JsA(LU,A)?WsA(A):A.flags},zsA=VsA,MsA=zsA,XsA=MsA,jsA=XsA,fsA=jsA,HsA=fsA,xsA=HsA,OsA=xsA,ig=CI(OsA),EB={},Uc=30,qsA=12,_sA=function(A,I){var g,C,Q,B,E,i,e,o,t,s,v,r,n,a,c,d,l,h,D,u,w,b,y,S,L;g=A.state,C=A.next_in,S=A.input,Q=C+(A.avail_in-5),B=A.next_out,L=A.output,E=B-(I-A.avail_out),i=B+(A.avail_out-257),e=g.dmax,o=g.wsize,t=g.whave,s=g.wnext,v=g.window,r=g.hold,n=g.bits,a=g.lencode,c=g.distcode,d=(1<>>=D=h>>>24,n-=D,(D=h>>>16&255)===0)L[B++]=65535&h;else{if(!(16&D)){if(64&D){if(32&D){g.mode=qsA;break A}A.msg="invalid literal/length code",g.mode=Uc;break A}h=a[(65535&h)+(r&(1<>>=D,n-=D),n<15&&(r+=S[C++]<>>=D=h>>>24,n-=D,16&(D=h>>>16&255)){if(w=65535&h,n<(D&=15)&&(r+=S[C++]<e){A.msg="invalid distance too far back",g.mode=Uc;break A}if(r>>>=D,n-=D,w>(D=B-E)){if((D=w-D)>t&&g.sane){A.msg="invalid distance too far back",g.mode=Uc;break A}if(b=0,y=v,s===0){if(b+=o-D,D2;)L[B++]=y[b++],L[B++]=y[b++],L[B++]=y[b++],u-=3;u&&(L[B++]=y[b++],u>1&&(L[B++]=y[b++]))}else{b=B-w;do L[B++]=L[b++],L[B++]=L[b++],L[B++]=L[b++],u-=3;while(u>2);u&&(L[B++]=L[b++],u>1&&(L[B++]=L[b++]))}break}if(64&D){A.msg="invalid distance code",g.mode=Uc;break A}h=c[(65535&h)+(r&(1<>3,r&=(1<<(n-=u<<3))-1,A.next_in=C,A.next_out=B,A.avail_in=C=1&&eA[u]===0;u--);if(w>u&&(w=u),u===0)return Q[B++]=20971520,Q[B++]=20971520,i.bits=1,0;for(D=1;D0&&(A===FU||u!==1))return-1;for(K[1]=0,l=1;lTU||A===YU&&L>UU)return 1;for(;;){n=l-y,E[h]r?(a=p[J+E[h]],c=z[EA+E[h]]):(a=96,c=0),e=1<>y)+(o-=e)]=n<<24|a<<16|c;while(o!==0);for(e=1<>=1;if(e!==0?(V&=e-1,V+=e):V=0,h++,--eA[l]==0){if(l===u)break;l=I[g+E[h]]}if(l>w&&(V&s)!==t){for(y===0&&(y=w),v+=D,S=1<<(b=l-y);b+yTU||A===YU&&L>UU)return 1;Q[t=V&s]=w<<24|b<<16|v-B}}return V!==0&&(Q[v+V]=l-y<<24|64<<16),i.bits=w,0},xC=HE,dw=T1,zB=U1,QvA=_sA,ea=CvA,BvA=0,V1=1,z1=2,kU=4,EvA=5,Fc=6,ho=0,ivA=1,evA=2,GB=-2,M1=-3,X1=-4,ovA=-5,pU=8,j1=1,NU=2,ZU=3,KU=4,JU=5,WU=6,VU=7,zU=8,MU=9,XU=10,s9=11,lE=12,Wh=13,jU=14,Vh=15,fU=16,HU=17,xU=18,OU=19,Yc=20,kc=21,qU=22,_U=23,$U=24,AF=25,IF=26,zh=27,gF=28,CF=29,dI=30,f1=31,tvA=852,svA=592,vvA=15,rvA=vvA;function QF(A){return(A>>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24)}function avA(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new xC.Buf16(320),this.work=new xC.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function H1(A){var I;return A&&A.state?(I=A.state,A.total_in=A.total_out=I.total=0,A.msg="",I.wrap&&(A.adler=1&I.wrap),I.mode=j1,I.last=0,I.havedict=0,I.dmax=32768,I.head=null,I.hold=0,I.bits=0,I.lencode=I.lendyn=new xC.Buf32(tvA),I.distcode=I.distdyn=new xC.Buf32(svA),I.sane=1,I.back=-1,ho):GB}function x1(A){var I;return A&&A.state?((I=A.state).wsize=0,I.whave=0,I.wnext=0,H1(A)):GB}function O1(A,I){var g,C;return A&&A.state?(C=A.state,I<0?(g=0,I=-I):(g=1+(I>>4),I<48&&(I&=15)),I&&(I<8||I>15)?GB:(C.window!==null&&C.wbits!==I&&(C.window=null),C.wrap=g,C.wbits=I,x1(A))):GB}function q1(A,I){var g,C;return A?(C=new avA,A.state=C,C.window=null,(g=O1(A,I))!==ho&&(A.state=null),g):GB}function PvA(A){return q1(A,rvA)}var Mh,Xh,BF=!0;function cvA(A){if(BF){var I;for(Mh=new xC.Buf32(512),Xh=new xC.Buf32(32),I=0;I<144;)A.lens[I++]=8;for(;I<256;)A.lens[I++]=9;for(;I<280;)A.lens[I++]=7;for(;I<288;)A.lens[I++]=8;for(ea(V1,A.lens,0,288,Mh,0,A.work,{bits:9}),I=0;I<32;)A.lens[I++]=5;ea(z1,A.lens,0,32,Xh,0,A.work,{bits:5}),BF=!1}A.lencode=Mh,A.lenbits=9,A.distcode=Xh,A.distbits=5}function _1(A,I,g,C){var Q,B=A.state;return B.window===null&&(B.wsize=1<=B.wsize?(xC.arraySet(B.window,I,g-B.wsize,B.wsize,0),B.wnext=0,B.whave=B.wsize):((Q=B.wsize-B.wnext)>C&&(Q=C),xC.arraySet(B.window,I,g-C,Q,B.wnext),(C-=Q)?(xC.arraySet(B.window,I,g-C,C,0),B.wnext=C,B.whave=B.wsize):(B.wnext+=Q,B.wnext===B.wsize&&(B.wnext=0),B.whave>>8&255,g.check=zB(g.check,V,2,0),o=0,t=0,g.mode=NU;break}if(g.flags=0,g.head&&(g.head.done=!1),!(1&g.wrap)||(((255&o)<<8)+(o>>8))%31){A.msg="incorrect header check",g.mode=dI;break}if((15&o)!==pU){A.msg="unknown compression method",g.mode=dI;break}if(t-=4,w=8+(15&(o>>>=4)),g.wbits===0)g.wbits=w;else if(w>g.wbits){A.msg="invalid window size",g.mode=dI;break}g.dmax=1<>8&1),512&ig(g)&&(V[0]=255&o,V[1]=o>>>8&255,g.check=zB(g.check,V,2,0)),o=0,t=0,g.mode=ZU;case ZU:for(;t<32;){if(i===0)break A;i--,o+=C[B++]<>>8&255,V[2]=o>>>16&255,V[3]=o>>>24&255,g.check=zB(g.check,V,4,0)),o=0,t=0,g.mode=KU;case KU:for(;t<16;){if(i===0)break A;i--,o+=C[B++]<>8),512&ig(g)&&(V[0]=255&o,V[1]=o>>>8&255,g.check=zB(g.check,V,2,0)),o=0,t=0,g.mode=JU;case JU:if(1024&ig(g)){for(;t<16;){if(i===0)break A;i--,o+=C[B++]<>>8&255,g.check=zB(g.check,V,2,0)),o=0,t=0}else g.head&&(g.head.extra=null);g.mode=WU;case WU:if(1024&ig(g)&&((r=g.length)>i&&(r=i),r&&(g.head&&(w=g.head.extra_len-g.length,g.head.extra||(g.head.extra=new Array(g.head.extra_len)),xC.arraySet(g.head.extra,C,B,r,w)),512&ig(g)&&(g.check=zB(g.check,C,r,B)),i-=r,B+=r,g.length-=r),g.length))break A;g.length=0,g.mode=VU;case VU:if(2048&ig(g)){if(i===0)break A;r=0;do w=C[B+r++],g.head&&w&&g.length<65536&&(g.head.name+=String.fromCharCode(w));while(w&&r>9&1,g.head.done=!0),A.adler=g.check=0,g.mode=lE;break;case XU:for(;t<32;){if(i===0)break A;i--,o+=C[B++]<>>=7&t,t-=7&t,g.mode=zh;break}for(;t<3;){if(i===0)break A;i--,o+=C[B++]<>>=1)){case 0:g.mode=jU;break;case 1:if(cvA(g),g.mode=Yc,I===Fc){o>>>=2,t-=2;break A}break;case 2:g.mode=HU;break;case 3:A.msg="invalid block type",g.mode=dI}o>>>=2,t-=2;break;case jU:for(o>>>=7&t,t-=7&t;t<32;){if(i===0)break A;i--,o+=C[B++]<>>16^65535)){A.msg="invalid stored block lengths",g.mode=dI;break}if(g.length=65535&o,o=0,t=0,g.mode=Vh,I===Fc)break A;case Vh:g.mode=fU;case fU:if(r=g.length){if(r>i&&(r=i),r>e&&(r=e),r===0)break A;xC.arraySet(Q,C,B,r,E),i-=r,B+=r,e-=r,E+=r,g.length-=r;break}g.mode=lE;break;case HU:for(;t<14;){if(i===0)break A;i--,o+=C[B++]<>>=5,t-=5,g.ndist=1+(31&o),o>>>=5,t-=5,g.ncode=4+(15&o),o>>>=4,t-=4,g.nlen>286||g.ndist>30){A.msg="too many length or distance symbols",g.mode=dI;break}g.have=0,g.mode=xU;case xU:for(;g.have>>=3,t-=3}for(;g.have<19;)g.lens[z[g.have++]]=0;if(g.lencode=g.lendyn,g.lenbits=7,y={bits:g.lenbits},b=ea(BvA,g.lens,0,19,g.lencode,0,g.work,y),g.lenbits=y.bits,b){A.msg="invalid code lengths set",g.mode=dI;break}g.have=0,g.mode=OU;case OU:for(;g.have>>16&255,l=65535&L,!((c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>>=c,t-=c,g.lens[g.have++]=l;else{if(l===16){for(S=c+2;t>>=c,t-=c,g.have===0){A.msg="invalid bit length repeat",g.mode=dI;break}w=g.lens[g.have-1],r=3+(3&o),o>>>=2,t-=2}else if(l===17){for(S=c+3;t>>=c)),o>>>=3,t-=3}else{for(S=c+7;t>>=c)),o>>>=7,t-=7}if(g.have+r>g.nlen+g.ndist){A.msg="invalid bit length repeat",g.mode=dI;break}for(;r--;)g.lens[g.have++]=w}}if(g.mode===dI)break;if(g.lens[256]===0){A.msg="invalid code -- missing end-of-block",g.mode=dI;break}if(g.lenbits=9,y={bits:g.lenbits},b=ea(V1,g.lens,0,g.nlen,g.lencode,0,g.work,y),g.lenbits=y.bits,b){A.msg="invalid literal/lengths set",g.mode=dI;break}if(g.distbits=6,g.distcode=g.distdyn,y={bits:g.distbits},b=ea(z1,g.lens,g.nlen,g.ndist,g.distcode,0,g.work,y),g.distbits=y.bits,b){A.msg="invalid distances set",g.mode=dI;break}if(g.mode=Yc,I===Fc)break A;case Yc:g.mode=kc;case kc:if(i>=6&&e>=258){A.next_out=E,A.avail_out=e,A.next_in=B,A.avail_in=i,g.hold=o,g.bits=t,QvA(A,v),E=A.next_out,Q=A.output,e=A.avail_out,B=A.next_in,C=A.input,i=A.avail_in,o=g.hold,t=g.bits,g.mode===lE&&(g.back=-1);break}for(g.back=0;d=(L=g.lencode[o&(1<>>16&255,l=65535&L,!((c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>h)])>>>16&255,l=65535&L,!(h+(c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>>=h,t-=h,g.back+=h}if(o>>>=c,t-=c,g.back+=c,g.length=l,d===0){g.mode=IF;break}if(32&d){g.back=-1,g.mode=lE;break}if(64&d){A.msg="invalid literal/length code",g.mode=dI;break}g.extra=15&d,g.mode=qU;case qU:if(g.extra){for(S=g.extra;t>>=g.extra,t-=g.extra,g.back+=g.extra}g.was=g.length,g.mode=_U;case _U:for(;d=(L=g.distcode[o&(1<>>16&255,l=65535&L,!((c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>h)])>>>16&255,l=65535&L,!(h+(c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>>=h,t-=h,g.back+=h}if(o>>>=c,t-=c,g.back+=c,64&d){A.msg="invalid distance code",g.mode=dI;break}g.offset=l,g.extra=15&d,g.mode=$U;case $U:if(g.extra){for(S=g.extra;t>>=g.extra,t-=g.extra,g.back+=g.extra}if(g.offset>g.dmax){A.msg="invalid distance too far back",g.mode=dI;break}g.mode=AF;case AF:if(e===0)break A;if(r=v-e,g.offset>r){if((r=g.offset-r)>g.whave&&g.sane){A.msg="invalid distance too far back",g.mode=dI;break}r>g.wnext?(r-=g.wnext,n=g.wsize-r):n=g.wnext-r,r>g.length&&(r=g.length),a=g.window}else a=Q,n=E-g.offset,r=g.length;r>e&&(r=e),e-=r,g.length-=r;do Q[E++]=a[n++];while(--r);g.length===0&&(g.mode=kc);break;case IF:if(e===0)break A;Q[E++]=g.length,e--,g.mode=kc;break;case zh:if(g.wrap){for(;t<32;){if(i===0)break A;i--,o|=C[B++]<=0&&I.windowBits<16&&(I.windowBits=-I.windowBits,I.windowBits===0&&(I.windowBits=-15)),!(I.windowBits>=0&&I.windowBits<16)||A&&A.windowBits||(I.windowBits+=32),I.windowBits>15&&I.windowBits<48&&(15&I.windowBits||(I.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new bvA,this.strm.avail_out=0;var g=bs.inflateInit2(this.strm,I.windowBits);if(g!==jI.Z_OK)throw new Error(hw[g]);if(this.header=new yvA,bs.inflateGetHeader(this.strm,this.header),I.dictionary&&(typeof I.dictionary=="string"?I.dictionary=Il.string2buf(I.dictionary):AV.call(I.dictionary)==="[object ArrayBuffer]"&&(I.dictionary=new Uint8Array(I.dictionary)),I.raw&&(g=bs.inflateSetDictionary(this.strm,I.dictionary))!==jI.Z_OK))throw new Error(hw[g])}function Dw(A,I){var g=new Oe(I);if(g.push(A,!0),g.err)throw g.msg||hw[g.err];return g.result}function wvA(A,I){return(I=I||{}).raw=!0,Dw(A,I)}Oe.prototype.push=function(A,I){var g,C,Q,B,E,i=this.strm,e=this.options.chunkSize,o=this.options.dictionary,t=!1;if(this.ended)return!1;C=I===~~I?I:I===!0?jI.Z_FINISH:jI.Z_NO_FLUSH,typeof A=="string"?i.input=Il.binstring2buf(A):AV.call(A)==="[object ArrayBuffer]"?i.input=new Uint8Array(A):i.input=A,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new Nr.Buf8(e),i.next_out=0,i.avail_out=e),(g=bs.inflate(i,jI.Z_NO_FLUSH))===jI.Z_NEED_DICT&&o&&(g=bs.inflateSetDictionary(this.strm,o)),g===jI.Z_BUF_ERROR&&t===!0&&(g=jI.Z_OK,t=!1),g!==jI.Z_STREAM_END&&g!==jI.Z_OK)return this.onEnd(g),this.ended=!0,!1;i.next_out&&(i.avail_out!==0&&g!==jI.Z_STREAM_END&&(i.avail_in!==0||C!==jI.Z_FINISH&&C!==jI.Z_SYNC_FLUSH)||(this.options.to==="string"?(Q=Il.utf8border(i.output,i.next_out),B=i.next_out-Q,E=Il.buf2string(i.output,Q),i.next_out=B,i.avail_out=e-B,B&&Nr.arraySet(i.output,i.output,Q,B,0),this.onData(E)):this.onData(Nr.shrinkBuf(i.output,i.next_out)))),i.avail_in===0&&i.avail_out===0&&(t=!0)}while((i.avail_in>0||i.avail_out===0)&&g!==jI.Z_STREAM_END);return g===jI.Z_STREAM_END&&(C=jI.Z_FINISH),C===jI.Z_FINISH?(g=bs.inflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===jI.Z_OK):C!==jI.Z_SYNC_FLUSH||(this.onEnd(jI.Z_OK),i.avail_out=0,!0)},Oe.prototype.onData=function(A){this.chunks.push(A)},Oe.prototype.onEnd=function(A){A===jI.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Nr.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},pr.Inflate=Oe,pr.inflate=Dw,pr.inflateRaw=wvA,pr.ungzip=Dw;var mvA=HE.assign,GvA=Ur,RvA=pr,LvA=$1,IV={};mvA(IV,GvA,RvA,LvA);var SvA=IV,uw=CI(SvA);let TvA=1,UvA=class{constructor(A){P(this,"lockingPromise",Promise.resolve()),P(this,"locks",0),P(this,"name",""),P(this,"lockId",void 0),this.lockId=TvA++,A&&(this.name=A)}get isLocked(){return this.locks>0}lock(){let A;this.locks+=1;const I=new Promise(C=>{A=()=>{this.locks-=1,C()}}),g=this.lockingPromise.then(()=>A);return this.lockingPromise=this.lockingPromise.then(()=>I),g}};const EF="VERTC",Qr=()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;class yC{constructor(I){P(this,"storeName",void 0),P(this,"pendingList",[]),this.storeName=I,!Ie()&&Qr()&&this._checkAndCreateStore(I)}async _checkAndCreateStore(I,g){const C=await yC._promiseLock.lock();if(Qr().databases){let Q;await new Promise(B=>{const E=()=>Qr().databases().finally(B);Q=setInterval(E,100),E()}).finally(()=>clearInterval(Q))}return new Promise(Q=>{yC.db&&(yC.db.close(),delete yC.db);const B=g?Qr().open(EF,g):Qr().open(EF);B.onupgradeneeded=()=>{B.result.createObjectStore(I)},B.onerror=()=>{console.error("IndexedDBInterface error",B.error)},B.onsuccess=()=>{const E=B.result;yC.db=E;try{yC.db.transaction(this.storeName,"readonly"),this.pendingList.forEach(async i=>{let{txMode:e,pendResolve:o,pendReject:t}=i;try{o(await this._getStore(e))}catch{t()}}),Q()}catch{Q(this._checkAndCreateStore(I,E.version+1))}finally{C()}}})}async _getStore(I){const g=await yC._promiseLock.lock();return new Promise((C,Q)=>{if(!yC.db)return this.pendingList.push({txMode:I,pendResolve:C,pendReject:Q}),void g();try{C(yC.db.transaction(this.storeName,I).objectStore(this.storeName))}catch{return void this.pendingList.push({txMode:I,pendResolve:C,pendReject:Q})}finally{g()}})}async put2String(I,g){let C;try{C=JSON.stringify(I)}catch{C=I}return await this.put(C,g)}async get4String(I){const g=await this.get(I);let C;try{C=JSON.parse(g)}catch{C=g}return C}async put(I,g){const C=await this._getStore("readwrite");return new Promise((Q,B)=>{const E=C.put(I,g);E.onsuccess=()=>{Q()},E.onerror=i=>{B(i)}})}async get(I){const g=await this._getStore("readonly");return new Promise((C,Q)=>{const B=g.get(I);B.onsuccess=()=>{C(B.result)},B.onerror=E=>{Q(E)}})}async del(I){const g=await this._getStore("readwrite");return new Promise((C,Q)=>{const B=g.delete(I);B.onsuccess=()=>{C()},B.onerror=E=>{Q(E)}})}}P(yC,"db",void 0),P(yC,"state","init"),P(yC,"_promiseLock",new UvA("iDB"));var FvA=yA,YvA=IW.includes,kvA=II,pvA=kvA(function(){return!Array(1).includes()});FvA({target:"Array",proto:!0,forced:pvA},{includes:function(A){return YvA(this,A,arguments.length>1?arguments[1]:void 0)}});var NvA=oE,ZvA=NvA("Array","includes"),KvA=HW,JvA=TypeError,WvA=function(A){if(KvA(A))throw new JvA("The method doesn't accept regular expressions");return A},VvA=vI,zvA=VvA("match"),MvA=function(A){var I=/./;try{"/./"[A](I)}catch{try{return I[zvA]=!1,"/./"[A](I)}catch{}}return!1},XvA=yA,jvA=fA,fvA=WvA,HvA=To,iF=NC,xvA=MvA,OvA=jvA("".indexOf);XvA({target:"String",proto:!0,forced:!xvA("includes")},{includes:function(A){return!!~OvA(iF(HvA(this)),iF(fvA(A)),arguments.length>1?arguments[1]:void 0)}});var qvA=oE,_vA=qvA("String","includes"),eF=fg,$vA=ZvA,ArA=_vA,jh=Array.prototype,fh=String.prototype,IrA=function(A){var I=A.includes;return A===jh||eF(jh,A)&&I===jh.includes?$vA:typeof A=="string"||A===fh||eF(fh,A)&&I===fh.includes?ArA:I},grA=IrA,CrA=grA,QrA=CrA,BrA=QrA,ErA=BrA,irA=ErA,erA=irA,gV=CI(erA);function orA(A,I){if(A==null)return{};var g={};for(var C in A)if({}.hasOwnProperty.call(A,C)){if(gV(I).call(I,C))continue;g[C]=A[C]}return g}function ve(A,I){if(A==null)return{};var g,C,Q=orA(A,I);if(e9){var B=e9(A);for(C=0;C0;){const Q=this.inBuffer[0],{message:B}=Q,E=R(R({},ve(Q,trA)),{},{message:R(R({},B),{},{msg:""})}),i=JSON.stringify(E).length,e=I-i,o=R({},E);if(e>B.msg.length)o.message.msg=B.msg,this.inBuffer.shift();else{if(!(e>=10))break;{const v=B.msg.slice(0,e);o.message.msg=v,o.message.end=!1,this.inBuffer[0].message.msg=B.msg.slice(e),this.inBuffer[0].message.index++}}const t=JSON.stringify(o.message),s=t.length;I-=s+i,C+=s+i,g.push(R(R({},o),{},{message:t}))}return{payload:g,payloadSize:C}}unshift(I){this.outBuffer=I.concat(this.outBuffer)}get(){return[...this.outBuffer,...this.inBuffer.map(I=>R(R({},I),{},{message:JSON.stringify(I.message)}))]}set(I){I.forEach(g=>{srA(g)?this.outBuffer.push(g):(g.message||(g.message=""),this.inBuffer.push(R(R({},g),{},{message:JSON.parse(g.message)})))}),this.outBuffer=[].concat(this.outBuffer),this.inBuffer=[].concat(this.inBuffer)}isEmpty(){return this.inBuffer.length===0&&this.outBuffer.length===0}}var Hh,xh,CV=new vrA;const rrA={product_line:"rtc",report_version:"5",os:"web",user_agent:Ie()?"":(Hh=navigator)===null||Hh===void 0?void 0:Hh.userAgent,platform:"web",product:"webrtc",app_state:"active"},oF=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||((xh=window.localStorage)===null||xh===void 0?void 0:xh.getItem("_rtc_debug_")));class arA{constructor(I){P(this,"_buffer",void 0),this._buffer=new yC(I)}async set(I,g){await this._buffer.put2String(I,g)}async get(I){var g;let C=[];try{C=await this._buffer.get4String(I)}catch{}return(g=C)!==null&&g!==void 0?g:[]}}class PrA{constructor(){P(this,"reportCommon",rrA),P(this,"reportIds",new Map),P(this,"dataBuffer",[]),P(this,"reportorList",[]),P(this,"dbBuffer",void 0),P(this,"posting",!1),P(this,"sucSendTimer",void 0),P(this,"preSucTime",0),P(this,"errSendTimer",void 0),P(this,"errSendDelay",100),P(this,"_logServerUrl",void 0),P(this,"_retryCount",0),P(this,"_reportLimit",5e5),P(this,"_disableTimeout",!1),Ie()||(window.addEventListener("beforeunload",()=>{clearTimeout(this.errSendTimer),clearTimeout(this.sucSendTimer),this.send(void 0,!0)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?this.setCommonStats({app_state:"active"}):document.visibilityState==="hidden"&&this.setCommonStats({app_state:"background"})}),oF&&(window.__rtc_debug_reportor__=this)),dB.on("UPLOAD_REPORT_LIMIT",I=>{this.setReportLimit(I)}),dB.on("ENABLE_REPORT_IDB_BUFFER",I=>{I&&this.enableIndexedDBBuffer()}),setTimeout(()=>{this.reportorList.push(aR),this.reportorList.push(CV)})}setUrl(I){this._logServerUrl=I}setCommonStats(I){this.reportCommon=Object.assign(this.reportCommon,I)}getCommonStats(){return this.reportCommon}setReportLimit(I){this._reportLimit=Math.max(I,5e4),this._reportLimit=Math.min(I,5e5)}getReportId(I){var g;I=(g=I)!==null&&g!==void 0?g:"__global__",this.reportIds.has(I)||this.reportIds.set(I,0);let C=this.reportIds.get(I);return C===void 0&&(Qs("no reportId in reportId map with engine-session-id ".concat(I),0,{}),C=0),this.reportIds.set(I,C+1),C}push(I){if(arguments.length>1&&arguments[1]!==void 0&&arguments[1])this.send(I);else{var g;const C=(g=I.engine_session_id)!==null&&g!==void 0?g:"__global__";this.reportIds.has(C)||this.reportIds.set(C,0),this.dataBuffer.push(I),!this.posting&&!this.errSendTimer&&Date.now()-this.preSucTime>2e3&&(clearTimeout(this.sucSendTimer),this.send())}}enableIndexedDBBuffer(){this.dbBuffer||(this.dbBuffer=new arA("ReportorDBBuffer"),this.dbBuffer.get("LogReportor").then(I=>{I.forEach(g=>{this.push(g)})}),this.reportorList.forEach(I=>{var g;(g=this.dbBuffer)===null||g===void 0||g.get(I.name).then(C=>{I.set(C)})}))}backup(){try{var I;(I=this.dbBuffer)===null||I===void 0||I.set([...this.dataBuffer],"LogReportor"),this.reportorList.forEach(g=>{var C;(C=this.dbBuffer)===null||C===void 0||C.set([...g.get()],g.name)})}catch(g){Qs("Error when save log into IDB",-1,g)}}unshift(I){this.dataBuffer=I[0].concat(this.dataBuffer),this.reportorList.forEach((g,C)=>{var Q;g.unshift((Q=I[C+1])!==null&&Q!==void 0?Q:[])})}_splice(){let I=crA(this.dataBuffer,this._reportLimit);I===0&&this.dataBuffer.length>0&&(this._reportLimit=JSON.stringify(this.dataBuffer[0]).length+10,I=1,Qs("update report limit to ".concat(this._reportLimit),0,null));const g=this.dataBuffer.splice(0,I),C=JSON.stringify(g).length,Q=[g];let B=this._reportLimit-C;return this.reportorList.forEach(E=>{const{payload:i,payloadSize:e}=E.splice(B);i.forEach(o=>{var t,s,v;o.report_id===void 0&&(o.report_id=this.getReportId(o.engine_session_id),!Ie()&&window.__onRTCReport&&((t=(s=window).__onRTCReport)===null||t===void 0||t.call(s,(v=o.engine_session_id)!==null&&v!==void 0?v:"global",o,this.getCommonStats())))}),Q.push(i),B-=e}),Q}async send(I,g){this.backup();const C=this.reportorList.reduce((s,v)=>s&&v.isEmpty(),!0);if(!I&&!this.dataBuffer.length&&C||!this._logServerUrl)return;I||(this.posting=!0);let Q=[];I||(Q=this._splice());const B=oF,E={data:I||P1(Q).call(Q),header:R(R({},this.reportCommon),{},{http_retry_count:this._retryCount}),from:"web",os:"web",version:"1"},i={method:"POST",body:B?JSON.stringify(E):uw.gzip(JSON.stringify(E))};if(!this._disableTimeout)try{const s=new AbortController;i.signal=s.signal,setTimeout(()=>{s.abort()},1e4)}catch{console.warn("AbortController is not supported"),this._disableTimeout=!0}B||(i.headers={"Content-Encoding":"gzip","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"});let e,o,t=null;try{e=await fetch(this._logServerUrl,i),e.status!==200&&e.status!==304||(t=JSON.parse(await e.text()))}catch(s){o=s}I||(this.posting=!1),t&&t.StatusCode===0?I||g||this.sucSend():(setTimeout(()=>{var s,v,r;Qs("reportor post error, resJSON:".concat((s=t)===null||s===void 0?void 0:s.toString()," err:").concat(o),(v=(r=e)===null||r===void 0?void 0:r.status)!==null&&v!==void 0?v:-1,o)},0),I?this.send(I):(this.unshift(Q),g?this.send():this.errSend()))}_getDataBufferTotalSize(){return this.dataBuffer.reduce((I,g)=>I+JSON.stringify(g).length,0)}sucSend(){this.errSendDelay=100,this._retryCount=0,this.preSucTime=Date.now();const I=this._getDataBufferTotalSize()>1e6?1e3:2e3;this.sucSendTimer=setTimeout(()=>this.send(),I)}errSend(){this.errSendTimer=setTimeout(()=>{this.send(),delete this.errSendTimer},this.errSendDelay),this.errSendDelay*=2,this._retryCount++}}function crA(A,I){let g=0;for(let C=0;CI)return C;return A.length}var oa=new PrA;class QV{constructor(I){P(this,"modifyIds",{pre_connection:!1}),this.id=I}report(I,g,C){const Q=R(R(R({event_key:I,rtc_timestamp:Date.now()},this.modifyIds),g),{},{report_id:oa.getReportId(this.modifyIds.engine_session_id)});var B,E;typeof C=="object"&&Object.keys(C).length>0&&(Q.common_extra_info=JSON.stringify(C)),Object.keys(Q).forEach(i=>{Q[i]!==void 0&&Q[i]!==""||delete Q[i]}),!Ie()&&window.__onRTCReport&&((B=(E=window).__onRTCReport)===null||B===void 0||B.call(E,this.modifyIds.engine_session_id,Q,oa.getCommonStats())),{}.VITE_TEST!=="UT"&&oa.push(Q)}reportLog(I){const g=R(R({event_key:"rtc_invoke_status",sdk_api_name:"console_log",rtc_timestamp:Date.now()},this.modifyIds),{},{message:I});aR.push(g)}reportLongString(I,g){const C=R(R({event_key:"rtc_invoke_status",sdk_api_name:"sdk_long_string_".concat(I),rtc_timestamp:Date.now()},this.modifyIds),{},{message:g});CV.push(C)}set(I){this.modifyIds=Object.assign(this.modifyIds,I)}destroy(){}}class yQ{constructor(I){P(this,"_preTime",Date.now()),P(this,"_one2oneNum",0),P(this,"_one2manyNum",0),P(this,"_one2oneMsgCache",new Map),P(this,"_one2manyMsgCache",new Map),P(this,"roomId",""),P(this,"userId",""),P(this,"rtsSessionId",""),P(this,"logger",void 0),P(this,"serverUrl","server"),this.id=I,this.logger=new uA("MessageReportor",1)}needReport(I){return!!yQ.config&&(Date.now()-this._preTime>=36e5&&(this._preTime=Date.now(),this._one2oneNum=0,this._one2manyNum=0),I==="one2one"&&this._one2oneNum{new uA("MessageReportor",1).info("setConfig","get config: ".concat(JSON.stringify(A))),yQ.config=A},lrA=A=>{const I=Yg.get(A)||new yQ(A);return Yg.set(A,I),I},drA=A=>{const I=Yg.get(A);I&&(I.destroy(),Yg.delete(A))},hrA=(A,I)=>{const g=Yg.get(A);g&&(g.serverUrl=I)},DrA=(A,I)=>{const g=Yg.get(A);g&&(g.roomId=I||"")},urA=(A,I)=>{const g=Yg.get(A);g&&(g.userId=I||"")},brA=(A,I)=>{const g=Yg.get(A);g&&(g.rtsSessionId=I)},yrA=(A,I)=>{const g=Yg.get(A);if(g!=null&&g.needReport("one2one")){const C=I.to?"one2one":"one2server";I.enable_report=!0,I.report_msg_id=I.id,g.cacheP2PMsg({rts_session_id:g.rtsSessionId,msg_id:"".concat(I.id),node_role:"src_sdk",from:I.from,to:I.to||g.serverUrl,msg_type:C,type:C,rts_room_id:I.room,req_ts:Date.now(),send_ts:Date.now(),ack_ts:Date.now(),msg_size:0,error_code:0,recv_msg_ts:0,fwd_msg_ts:0,reply_ack_ts:0,cur_dst_uid:""})}return I},wrA=(A,I,g)=>{var C;I.enable_report&&nv(I.report_msg_id)&&((C=Yg.get(A))===null||C===void 0||C.updateP2PMsg("".concat(I.report_msg_id),{send_ts:Date.now(),msg_size:g}))},mrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C==null||C.updateP2PMsg("".concat(I.report_msg_id),{ack_ts:Date.now(),error_code:g}),C==null||C.reportP2PMsg("".concat(I.report_msg_id))}},GrA=(A,I,g)=>{const C=Yg.get(A);return C!=null&&C.needReport("one2many")&&(g.enable_report=!0,g.report_msg_id=I,C.cacheCustomMsg({rts_session_id:C.rtsSessionId,msg_id:"".concat(I),node_role:"src_sdk",from:g.clientId,to:C.roomId||g.roomId,msg_type:"one2many",type:"one2many",rts_room_id:C.roomId,req_ts:Date.now(),send_ts:Date.now(),ack_ts:Date.now(),msg_size:0,error_code:0,recv_msg_ts:0,fwd_msg_ts:0,reply_ack_ts:0,cur_dst_uid:""})),g},RrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C&&C.updateOne2ManyMsg("".concat(I.report_msg_id),{send_ts:Date.now(),msg_size:g})}},LrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C&&(C==null||C.updateOne2ManyMsg("".concat(I.report_msg_id),{ack_ts:Date.now(),error_code:g}),C==null||C.reportOne2ManyMsg("".concat(I.report_msg_id)))}},SrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A),Q=I.to?"one2one":"one2many";C==null||C.reportMsgRecv({rts_session_id:C.rtsSessionId,msg_id:"".concat(I.report_msg_id),msg_size:g.msg_size,node_role:"dst_sdk",msg_type:Q,type:Q,rts_room_id:I.room,from:I.from,to:I.to||I.room,error_code:0,recv_msg_ts:g.recv_msg_ts,fwd_msg_ts:g.fwd_msg_ts,reply_ack_ts:Date.now(),cur_dst_uid:I.to?"":C.userId,config_version:"",req_ts:0,send_ts:0,ack_ts:0})}},TrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C==null||C.reportMsgRecv({rts_session_id:C.rtsSessionId,msg_id:"".concat(I.report_msg_id),msg_size:g.msg_size,node_role:"dst_sdk",msg_type:"one2many",type:"one2many",rts_room_id:I.roomId,from:I.clientId,to:I.roomId,error_code:0,recv_msg_ts:g.recv_msg_ts,fwd_msg_ts:g.fwd_msg_ts,reply_ack_ts:Date.now(),cur_dst_uid:C.userId,config_version:"",req_ts:0,send_ts:0,ack_ts:0})}},KI={_cache:Yg,setServerUrl:hrA,setConfig:nrA,setRtsSessionId:brA,createRTSMsgReportor:lrA,destroyRTSMsgReportor:drA,setRoomId:DrA,setUserId:urA,samplingP2PMsg:yrA,updateP2PMsgReq:wrA,updateP2PMsgAck:mrA,samplingOne2ManyMsg:GrA,reportP2PMsgRecv:SrA,updateOne2ManyMsgAck:LrA,updateOne2ManyMsgReq:RrA,reportOne2ManyMsgRecv:TrA};class UrA{constructor(I){P(this,"_timer",void 0),P(this,"userMessage",{}),P(this,"roomMessage",{}),this.id=I,this._setTimer()}_setTimer(){const I=()=>{this._reportAndgReset(),clearTimeout(this._timer),this._timer=setTimeout(I,1e4)};I()}_reportAndgReset(){(Object.keys(this.userMessage).length||Object.keys(this.roomMessage).length)&&(this._report(),this._reset())}_report(){var I;(I=tI(this.id))===null||I===void 0||I.report("rtc_message_statistics",{dc_user_message:Object.keys(this.userMessage).map(g=>this.userMessage[g]),dc_room_message:Object.keys(this.roomMessage).map(g=>this.roomMessage[g]),media_server_ip:""})}_reset(){this.userMessage={},this.roomMessage={}}_checkInitUserMessage(I,g){this.userMessage["".concat(g,"-").concat(I)]||(this.userMessage["".concat(g,"-").concat(I)]={dc_peer_user_id:I,dc_send_total:0,dc_recv_total:0,dc_send_ack:0,dc_send_fail:0,dc_fail_timeout:0,dc_fail_no_receiver:0,dc_fail_no_relay_path:0,dc_cost_time:0,dc_cost_e2s:0,dc_cost_s2s:0,dc_least_time:1/0,dc_most_time:0,dc_cost_peer_s2e:0,dc_send_ack_100:0,dc_send_ack_200:0,dc_send_ack_400:0,dc_send_ack_1s:0,dc_message_type:g,dc_send_binary:0})}_sendUserMessage(I,g,C){this._checkInitUserMessage(I,g),this.userMessage["".concat(g,"-").concat(I)].dc_send_total++,C&&this.userMessage["".concat(g,"-").concat(I)].dc_send_binary++}_recvUserMessage(I,g){this._checkInitUserMessage(I,g),this.userMessage["".concat(g,"-").concat(I)].dc_recv_total++}_sendUserFail(I,g,C){const Q=this.userMessage["".concat(g,"-").concat(I)];Q&&(Q.dc_send_fail++,this._handleUserFail(Q,C))}_handleUserFail(I,g){g&&(g.code||g.err)&&(["TIME_OUT","USER_MESSAGE_TIMEOUT"].includes(g.code)?I.dc_fail_timeout++:g.err===3?I.dc_fail_no_receiver++:g.err===4?I.dc_fail_no_relay_path++:g.err===1&&I.dc_fail_timeout++)}_sendUserAck(I,g,C,Q,B){const E=this.userMessage["".concat(g,"-").concat(I)];E&&(E.dc_send_ack++,E.dc_cost_time+=C,E.dc_cost_s2s+=Q||0,E.dc_cost_peer_s2e+=B,E.dc_cost_e2s+=C-(Q||0)-B,C/2<=100?(E.dc_send_ack_100++,E.dc_send_ack_200++,E.dc_send_ack_400++,E.dc_send_ack_1s++):C/2<=200?(E.dc_send_ack_200++,E.dc_send_ack_400++,E.dc_send_ack_1s++):C/2<=400?(E.dc_send_ack_400++,E.dc_send_ack_1s++):C/2<=1e3&&E.dc_send_ack_1s++,CE.dc_most_time&&(E.dc_most_time=C))}sendRoomMessage(I,g){this.roomMessage[I]||(this.roomMessage[I]={dc_room_id:I,dc_send_total:0,dc_send_ack:0,dc_cost_time:0,dc_least_time:1/0,dc_most_time:0,dc_send_fail:0,dc_send_ack_100:0,dc_send_ack_200:0,dc_send_ack_400:0,dc_send_ack_1s:0,dc_send_binary:0}),this.roomMessage[I].dc_send_total++,g&&this.roomMessage[I].dc_send_binary++}sendRoomFail(I){const g=this.roomMessage[I];g&&g.dc_send_fail++}sendRoomAck(I,g){const C=this.roomMessage[I];C&&(C.dc_send_ack++,C.dc_cost_time+=g,gC.dc_most_time&&(C.dc_most_time=g),g/2<=100?(C.dc_send_ack_100++,C.dc_send_ack_200++,C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=200?(C.dc_send_ack_200++,C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=400?(C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=1e3&&C.dc_send_ack_1s++)}sendP2PMessage(I,g){this._sendUserMessage(I,"p2p",g)}recvP2PMessage(I){this._recvUserMessage(I,"p2p")}sendP2PFail(I,g){this._sendUserFail(I,"p2p",g)}sendP2PAck(I,g,C,Q){this._sendUserAck(I,"p2p",g,C,Q)}sendP2POutRoomMessage(I,g){this._sendUserMessage(I,"p2p_outside_room",g)}recvP2POutRoomMessage(I){this._recvUserMessage(I,"p2p_outside_room")}sendP2POutRoomFail(I,g){this._sendUserFail(I,"p2p_outside_room",g)}sendP2POutRoomAck(I,g,C,Q){this._sendUserAck(I,"p2p_outside_room",g,C,Q)}sendP2serverMessage(I){this._sendUserMessage("","p2server",I)}sendP2serverFail(I){this._sendUserFail("","p2server",I)}sendP2serveAck(I,g,C){this._sendUserAck("","p2server",I,g,C)}countP2PMessage(I,g,C,Q,B){this.sendP2PMessage(g,C),I?this.sendP2PAck(g,Date.now()-Q,B.s2s_time||0,B.s2e_time||0):this.sendP2PFail(g,B)}countRoomMessage(I,g,C,Q){this.sendRoomMessage(g,C),I?this.sendRoomAck(g,Date.now()-Q):this.sendRoomFail(g)}countUserMessageOutsideRoom(I,g,C,Q,B){this.sendP2POutRoomMessage(g,C),I?this.sendP2POutRoomAck(g,Date.now()-Q,B.s2s_time,B.s2e_time):this.sendP2POutRoomFail(g,B)}countServerMessage(I,g,C,Q){this.sendP2serverMessage(g),I?(Q=Q||{},this.sendP2serveAck(Date.now()-C,Q.s2s_time||0,Q.s2e_time||0)):this.sendP2serverFail(Q)}destroy(){this._reset(),clearTimeout(this._timer)}}const ta=A=>{oa.setCommonStats(A)},BV=A=>{oa.setUrl(A)},wP=new QV("global"),EV=(A,I,g)=>{wP.report("rtc_sdk_api_call",{sdk_api_name:A,error_code:I,message:g})},Oh=(A,I,g)=>{wP.report("rtc_sdk_callback",{sdk_callback_name:A,error_code:I,message:g})},Qs=(A,I,g)=>{wP.report("rtc_error",{message:A,error_code:I},g)},tF=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",Q=arguments.length>4?arguments[4]:void 0;wP.report("rtc_invoke_status",{sdk_api_name:A,message:I,error_code:g,stream_id:C,elapse:0},Q)};function FrA(A){wP.reportLog(A)}const rR=new Map,tI=A=>rR.get(A),iV=(A,I)=>{const g=new QV(A);return g.set(R(R({},I),{},{engine_session_id:tC()})),g.report("sdk_init_engine",{start:Date.now(),type:"begin"}),rR.set(A,g),g},YrA=A=>{A.report("sdk_init_engine",{start:Date.now(),type:"end"}),rR.delete(A.id)},sF=new Map;function Z(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};I=Object.assign({debounce:0},I);const{debounce:g,debounceTag:C}=I;function Q(B,E,i,e){if(!g)return E(...i);{const o="".concat(e,"_").concat(B),t=sF.get(o);clearTimeout(t);const s=setTimeout(()=>{E(...i)},g);sF.set(o,s)}}return function(B,E,i){if(typeof i.value=="function"){const e=i.value;i.value=function(){for(var o,t,s=arguments.length,v=new Array(s),r=0;r{c[u]=v[w]}),E==="joinRoom"&&((d=tI(n))===null||d===void 0||d.set({room_id:v[1],user_id:(l=v[2])===null||l===void 0?void 0:l.userId}));let h,D="";if(C)try{D=C(...v)}catch{}Q(E,krA,[n,E,v,c,{event_session_id:a}],"start_".concat(D));try{h=e.apply(this,v)}catch(u){throw Q(E,Bs,[n,E,u.message,u.code||-1,{event_session_id:a}],"end_".concat(D)),u}return typeof((o=h)===null||o===void 0?void 0:o.then)=="function"?h.then(u=>(Q(E,Bs,[n,E,[u??{}],0,{event_session_id:a}],"end_".concat(D)),u)).catch(u=>{throw Q(E,Bs,[n,E,u.message,u.code,{event_session_id:a}],"end_".concat(D)),u}):(Q(E,Bs,[n,E,[(t=h)!==null&&t!==void 0?t:{}],0,{event_session_id:a}],"end_".concat(D)),h)}}}}const krA=function(A,I,g,C){var Q;let B=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const E=R({sdk_api_name:I,message:JSON.stringify(eV(g)),error_code:0},B);(Q=tI(A))===null||Q===void 0||Q.report("rtc_sdk_api_call",E,C)},Bs=function(A,I,g){var C;let Q=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const B=R({sdk_callback_name:I,error_code:arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,message:JSON.stringify(Array.isArray(g)?eV(g):g)},Q);(C=tI(A))===null||C===void 0||C.report("rtc_sdk_callback",B)},AI=function(A,I,g){var C;let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,B=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"",E=arguments.length>5?arguments[5]:void 0;(C=tI(A))===null||C===void 0||C.report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:Q,stream_id:B,elapse:0},E)},qh=10;function eV(A){const I=g=>{if(g!=null&&g._reportName)return g._reportName;if(g instanceof HTMLElement)return g.toString();if(g instanceof ArrayBuffer||ArrayBuffer.isView(g)){const Q=ArrayBuffer.isView(g)?g.buffer:g,B=Q.byteLength;let E=[];if(B>qh){var C;const i=new DataView(Q),e=Array.from({length:qh/2}).map((t,s)=>i.getUint8(s)),o=fW(C=Array.from({length:qh/2}).map((t,s)=>B-1-s)).call(C).map(t=>i.getUint8(t));E=[...e,"...",...o]}else E=Array.from(new Uint8Array(Q));return"".concat(g.constructor.name,"(").concat(B,") [").concat(E.join(", "),"]")}if(g instanceof ImageData)return"ImageData";if(Array.isArray(g))return g.map(I);if(["[object Object]","[object MediaStreamTrack]"].includes(Object.prototype.toString.call(g))){const Q={};for(const B in g)Q[B]=I(g[B]);return Q}return g instanceof Function?"[User Function]":g};return A.map(I)}const prA=typeof window<"u"&&window.location.search.includes("_rtc_upload_console_");class NrA{constructor(){P(this,"name","ConsoleReportor"),P(this,"_uuid","".concat(Math.floor(899*Math.random())+100)),P(this,"_consoleReportId",0),P(this,"_engineReportIdMap",new Map),P(this,"_enabled","NULL"),P(this,"_consoleCutLength",dB.getParameter("UPLOAD_CONSOLE_LENGTH_CUT")),P(this,"buffer",[]),prA&&setTimeout(()=>{this.switchOn()},0),dB.on("UPLOAD_CONSOLE_ON",I=>{I?this.switchOn():this.turnOff()}),dB.on("UPLOAD_CONSOLE_LENGTH_CUT",I=>{this._consoleCutLength=I})}get enabled(){return this._enabled!=="OFF"}switchOn(){this._enabled==="NULL"&&(console.log("[LoggerReportor.constructor] console upload switch ON"),this._enabled="ON")}turnOff(){this._enabled==="NULL"&&(console.log("[LoggerReportor.constructor] console upload switch OFF"),this._enabled="OFF",this.buffer=[])}getEngineConsoleId(I){var g;const C=(g=this._engineReportIdMap.get(I))!==null&&g!==void 0?g:0;return this._engineReportIdMap.set(I,C+1),C}report(I,g,C,Q,B,E,i,e,o){if(this._enabled==="OFF")return;const t=tI(g),s=this._consoleReportId++,v=this.getEngineConsoleId(g),r=vF(o,this._consoleCutLength),n=[...o],a="".concat(e).replace(/%o|%s/gi,()=>vF([n.shift()],this._consoleCutLength)),c="[".concat(this._uuid,"-").concat(s,"][").concat(g,"-").concat(v,"]-").concat(C,"-").concat(I,"[").concat(Q,"]").concat(B,"[").concat(E,".").concat(i,"] ").concat(a," ").concat(r);t?t.reportLog(c):FrA(c)}push(I){this._enabled!=="OFF"&&this.buffer.push(I)}splice(I){if(this._enabled!=="ON")return{payload:[],payloadSize:0};const{index:g,size:C}=ZrA(this.buffer,I);return{payload:this.buffer.splice(0,g),payloadSize:C}}unshift(I){this.buffer=I.concat(this.buffer)}get(){return this.buffer}set(I){this.buffer=I.concat(this.buffer)}isEmpty(){return this._enabled==="OFF"||this.buffer.length===0}}function vF(A,I){return A.map(g=>{let C="";try{if(typeof g=="string")return g;if(g===void 0)return"undefined";if(g===null)return"null";if(g instanceof MediaStreamTrack)return KQ(g);if(g instanceof MediaStream)return A1(g);if(g instanceof RTCRtpSender)return I1(g);if(g instanceof RTCRtpReceiver)return g1(g);if(g instanceof RTCRtpTransceiver)return C1(g);C=JSON.stringify(g)}catch{C=g.toString()}return C&&C.length>=I&&(C=C.slice(0,I)),C}).join(", ")}function ZrA(A,I){let g=0;for(let C=0;CI)return{index:C,size:g-Q}}return{index:A.length,size:g}}var _h,aR=new NrA;const KrA={DEBUG:"rgba(0, 0, 0, 0)"," INFO":"rgba(93, 173, 226, 0)"," WARN":"rgba(255, 119, 0, 0.3)",ERROR:"rgba(255, 0, 0, 0.3)"," SUCC":"rgba(0, 119, 0, 0.3)"},JrA=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||((_h=window.localStorage)===null||_h===void 0?void 0:_h.getItem("_rtc_debug_")));class WrA{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"global";P(this,"indent",void 0),P(this,"module",void 0),P(this,"_engineId",void 0),this.module=I,this.indent=g,this._engineId=C}_print(I,g){for(var C=arguments.length,Q=new Array(C>2?C-2:0),B=2;B{const s=o.shift();return JSON.stringify(s)});Ks.set("".concat("[VERTC]","[").concat(this.module,".").concat(g,"] ").concat(t," ").concat(o.map(s=>JSON.stringify(s)).join(", ")))}catch{}let i="";for(let o=0;o1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q{const A=new Date;return"".concat(A.toTimeString().split(" ")[0],":").concat(A.getMilliseconds().toString().padStart(3,"0"))};var $h,AD,ID,Qt,gD,uA=WrA;const lI=()=>typeof window>"u",WI=lI()?"":window.navigator.userAgent;function PR(){let A="none";return lI()||(WI.match("Firefox")!==null?A="mozilla":WI.match("Chrome")!==null?(A="chrome-stable",WI.match("Electron")!==null&&(A="electron")):(WI.match("Safari")!==null||WI.match("AppleWebKit")!==null)&&(A="safari")),A}const mI=PR()==="mozilla",CQ=PR()==="safari",xi=PR()==="chrome-stable",zrA=!lI()&&/CriOS/i.test(WI),MrA=!lI()&&/Edg\//i.test(WI),XrA=!lI()&&/EdgA/i.test(WI),jrA=!lI()&&/EdgiOS/i.test(WI),frA=MrA||XrA||jrA,HrA=!lI()&&/DingTalk/i.test(navigator.userAgent),xrA=!lI()&&/OPR\//.test(navigator.userAgent),v9=!lI()&&(!!/(iPad)/i.exec(WI)||/Macintosh/i.test(WI)&&"ontouchend"in document),OrA=!lI()&&/Macintosh/i.test(WI),cR=!lI()&&/MicroMessenger/i.test(WI),gl=!lI()&&WI.toLowerCase().includes("mobile"),Yo=!lI()&&!!/(iPhone|iPad|iPod)/i.exec(WI),EE=!lI()&&/Android/i.test(WI),qrA=!lI()&&/Windows/i.test(WI),_rA=!lI()&&/OpenHarmony/i.test(WI);let N0=0,oV="0";const rF=!lI()&&(($h=WI.match(/version\/(\d+)/i))===null||$h===void 0?void 0:$h[1]);var CD;CQ&&rF&&(N0=Number(rF),oV=(CD=navigator.userAgent.match(/version\/(\d+\.\d+)/i))===null||CD===void 0?void 0:CD[1]);const aF=!lI()&&((AD=WI.match(/Firefox\/(\d+)/i))===null||AD===void 0?void 0:AD[1]);mI&&aF&&(N0=Number(aF));const mP=N0,r9=N0,tV=oV,Js=(ID=!lI()&&((Qt=WI.match(/ ([\d_]+) like Mac OS X/i))===null||Qt===void 0||(Qt=Qt[1])===null||Qt===void 0?void 0:Qt.split("_").map(A=>parseInt(A))))!==null&&ID!==void 0?ID:[];let sV=0;const PF=!lI()&&((gD=WI.match(/Chrome\/(\d+)/i))===null||gD===void 0?void 0:gD[1]);PF&&(sV=Number(PF));const YQ=sV,be="VolcEngine",cF="RTC_DEVICE_ID",Br="RTC_ACCESS_NODE",QD="RTC_ACCESS_URLS",BD="ENGINE_WEB_CONFIG",ED="SERVER_CONFIG";class $rA{get(I){const g=localStorage.getItem(I);if(!g)return null;try{const C=JSON.parse(g);return C.ttl>0&&Date.now()-C.saveTime>C.ttl?(this.delete(I),null):C.message}catch{return null}}set(I,g){const C={ttl:arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1,saveTime:Date.now(),message:g};try{return localStorage.setItem(I,JSON.stringify(C)),!0}catch{return!1}}getTtl(I){const g=localStorage.getItem(I);if(!g)return null;try{return JSON.parse(g).ttl}catch{return null}}delete(I){try{return localStorage.removeItem(I),!0}catch{return!1}}}class AaA extends $rA{getDeviceId(){if(lI())return"";let I=this.get(cF);return I&&!/^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/.test(I)||(I=maA(16)),this.setDeviceId(I),I}setDeviceId(I){return ta({device_id:I}),this.set(cF,I),I}getAccessNode(I){return this.get("".concat(Br,"_").concat(I,"-").concat(be))}setAccessNode(I,g,C){return this.set("".concat(Br,"_").concat(I,"-").concat(be),g,1e3*C)}deleteAccessNode(I,g){let C=this.getAccessNode(I);const Q=this.getTtl("".concat(Br,"_").concat(I,"-").concat(be));Array.isArray(C)&&C.length>0&&(C=C.filter(B=>B.mediaID!==g.mediaID&&B.msgKey!==g.msgKey),C.length>0?this.setAccessNode(I,C,Q||0):this.clearAccessNode(I))}clearAccessNode(I){if(I)this.delete("".concat(Br,"_").concat(I,"-").concat(be));else for(const g in localStorage)g.startsWith(Br)&&localStorage.removeItem(g)}getAccessUrls(){return this.get("".concat(QD,"-").concat(be))}setAccessUrls(I){const g=I.map(C=>{let{host:Q,path:B}=C;return"https://".concat(Q).concat(B)});return this.set("".concat(QD,"-").concat(be),g)}clearAccessUrls(){this.delete("".concat(QD,"-").concat(be))}getEngineWebConfig(I,g){var C;const Q="".concat(I,"_").concat(g,"_").concat(this.getDeviceId()),B=this.get(BD);return(B==null||(C=B.find(E=>E.key===Q))===null||C===void 0?void 0:C.config)||{}}setEngineWebConfig(I,g,C){if(!C)return;const Q="".concat(I,"_").concat(g,"_").concat(this.getDeviceId());let B=this.get(BD)||[];return B=B.filter(E=>E.key!==Q),B.push({key:Q,config:C}),this.set(BD,B.slice(-5))}getServerConfig(I){var g;const C="".concat(I),Q=this.get(ED);return(Q==null||(g=Q.find(B=>B.key===C))===null||g===void 0?void 0:g.config)||{}}setServerConfig(I,g){if(!g)return;const C="".concat(I);let Q=this.get(ED)||[];return Q=Q.filter(B=>B.key!==C),Q.push({key:C,config:g}),this.set(ED,Q.slice(-5))}}var $A=new AaA;const IaA=new uA("JoinRoomConfig",0);class RQ{constructor(I){P(this,"_useTcpAfterJoinTimeout",RQ.DEFAULT_CONF.useTcpAfterJoinTimeout),P(this,"_joinWithTcpOnly",RQ.DEFAULT_CONF.joinWithTcpOnly),P(this,"_joinWithTcpOnlyDelay",RQ.DEFAULT_CONF.joinWithTcpOnlyDelay),P(this,"_blackBrowserRegexList",[]),this._engineId=I,location.search.indexOf("__rtc_tcp_only__")>-1&&(this._joinWithTcpOnly=!0,this._joinWithTcpOnlyDelay=0),this._report()}static setDefaulConf(I){let{useTcpAfterJoinTimeout:g,joinWithTcpOnly:C,joinWithTcpOnlyDelay:Q}=I;return typeof g=="boolean"&&(RQ.DEFAULT_CONF.useTcpAfterJoinTimeout=g),typeof C=="boolean"&&(RQ.DEFAULT_CONF.joinWithTcpOnly=C),typeof Q=="number"&&(RQ.DEFAULT_CONF.joinWithTcpOnlyDelay=Math.max(0,Q)),RQ.DEFAULT_CONF}get useTcpAfterJoinTimeout(){return this._useTcpAfterJoinTimeout}get useTcpJoin(){return this._joinWithTcpOnly}get useTcpJoinDelay(){return this._joinWithTcpOnlyDelay}isBlackBrower(){return this._blackBrowserRegexList.find(I=>new RegExp(I).test(navigator.userAgent))}setServerConfig(I){var g,C,Q;let B=!1;typeof(I==null||(g=I.use_tcp_after_join_timeout)===null||g===void 0?void 0:g.enable)=="boolean"&&(this._useTcpAfterJoinTimeout=I.use_tcp_after_join_timeout.enable,B=!0),typeof(I==null||(C=I.join_with_tcp_only)===null||C===void 0?void 0:C.enable)=="boolean"&&(this._joinWithTcpOnly=I.join_with_tcp_only.enable,B=!0),typeof(I==null||(Q=I.join_with_tcp_only)===null||Q===void 0?void 0:Q.delay_ms)=="number"&&(this._joinWithTcpOnlyDelay=I.join_with_tcp_only.delay_ms,B=!0),I&&Array.isArray(I.black_browser_regex_list)&&(this._blackBrowserRegexList=I.black_browser_regex_list,B=!0),B&&this._report()}toString(){return JSON.stringify({use_tcp_after_join_timeout:this._useTcpAfterJoinTimeout,join_with_tcp_only:this._joinWithTcpOnly,join_with_tcp_only_delay:this._joinWithTcpOnlyDelay,black_browser_regex_list:this._blackBrowserRegexList})}_report(){IaA.print("_report",this.toString()),AI(this._engineId,"web_join_room_config",this.toString())}}P(RQ,"DEFAULT_CONF",{useTcpAfterJoinTimeout:!0,joinWithTcpOnly:!1,joinWithTcpOnlyDelay:5e3});var m=(A=>(A.INVALID_ENGINE="INVALID_ENGINE",A.INVALID_PARAMS="INVALID_PARAMS",A.INVOKED_BEFORE_JOIN_ROOM="INVOKED_BEFORE_JOIN_ROOM",A.INVALID_TOKEN="INVALID_TOKEN",A.JOIN_ROOM_FAILED="JOIN_ROOM_FAILED",A.UPDATE_TOKEN_WITH_INVALID_TOKEN="UPDATE_TOKEN_WITH_INVALID_TOKEN",A.UPDATE_TOKEN_BEFORE_JOIN="UPDATE_TOKEN_BEFORE_JOIN",A.REPEAT_JOIN="REPEAT_JOIN",A.REPEAT_PUBLISH="REPEAT_PUBLISH",A.REPEAT_PUSH="REPEAT_PUSH",A.REPEAT_PLAY="REPEAT_PLAY",A.PUBLISH_BEFORE_JOIN="PUBLISH_BEFORE_JOIN",A.UNPUBLISH_BEFORE_JOIN="UNPUBLISH_BEFORE_JOIN",A.SUBSCRIBE_BEFORE_JOIN="SUBSCRIBE_BEFORE_JOIN",A.UNSUBSCRIBE_BEFORE_JOIN="UNSUBSCRIBE_BEFORE_JOIN",A.NO_PUBLISH_PERMISSION="NO_PUBLISH_PERMISSION",A.STREAM_NOT_EXIST="STREAM_NOT_EXIST",A.EMPTY_STREAM="EMPTY_STREAM",A.NOT_CONNECTED_YET="NOT_CONNECTED_YET",A.IM_BEFORE_JOIN="IM_BEFORE_JOIN",A.USER_NOT_EXIST="USER_NOT_EXIST",A.ALREADY_IN_ROOM="ALREADY_IN_ROOM",A.KICKED_OUT="KICKED_OUT",A.ROOM_DISMISS="ROOM_DISMISS",A.TOKEN_EXPIRED="TOKEN_EXPIRED",A.TOKEN_NO_PUBLISH_PERMISSION="TOKEN_NO_PUBLISH_PERMISSION",A.TOKEN_NO_SUBSCRIBE_PERMISSION="TOKEN_NO_SUBSCRIBE_PERMISSION",A.DUPLICATE_LOGIN="DUPLICATE_LOGIN",A.INVOKED_BEFORE_CAPTURE="INVOKED_BEFORE_CAPTURE",A.REPEAT_CAPTURE="REPEAT_CAPTURE",A.GET_VIDEO_TRACK_FAILED="GET_VIDEO_TRACK_FAILED",A.GET_AUDIO_TRACK_FAILED="GET_AUDIO_TRACK_FAILED",A.GET_SCREEN_TRACK_FAILED="GET_SCREEN_TRACK_FAILED",A.STREAM_TYPE_NOT_MATCH="STREAM_TYPE_NOT_MATCH",A.CANT_FIND_DOM="CANT_FIND_DOM",A.INVALID_DEVICE_ID="INVALID_DEVICE_ID",A.NO_PERMISSION="NO_PERMISSION",A.NOT_SUPPORTED="NOT_SUPPORTED",A.INTERRUPT="INTERRUPT",A.ICE_SERVER_WRONG="ICE_SERVER_WRONG",A.ESTABLISH_DATACHANNEL_FAILED="ESTABLISH_DATACHANNEL_FAILED",A.LOAD_RESOURCES_FAILED="LOAD_RESOURCES_FAILED",A.SIGNALING_CHANNEL_NOT_OPEN="SIGNALING_CHANNEL_NOT_OPEN",A.TIME_OUT="TIME_OUT",A.REFUSE_OPERATION_IN_DISCONNECT="REFUSE_OPERATION_IN_DISCONNECT",A.ADD_TRANSCEIVER_FAILED="ADD_TRANSCEIVER_FAILED",A.UPDATE_TRACK_FAILED="UPDATE_TRACK_FAILED",A.PUBLISH_FAILED="PUBLISH_FAILED",A.UNPUBLISH_FAILED="UNPUBLISH_FAILED",A.SUBSCRIBE_FAILED="SUBSCRIBE_FAILED",A.UNSUBSCRIBE_FAILED="UNSUBSCRIBE_FAILED",A.OPERATION_CANCEL="OPERATION_CANCEL",A.START_CLOUD_PROXY_AFTER_JOIN="START_CLOUD_PROXY_AFTER_JOIN",A.STOP_CLOUD_PROXY_BEFORE_LEAVE="STOP_CLOUD_PROXY_BEFORE_LEAVE",A.UNEXPECTED_ERROR="UNEXPECTED_ERROR",A.REPEAT_DEVICE_TEST="REPEAT_DEVICE_TEST",A.AUDIO_DEVICE_TEST_FAILED="AUDIO_DEVICE_RECORD_FAILED",A.ALREADY_LOGIN="ALREADY_LOGIN",A.LOGIN_FAILED="LOGIN_FAILED",A.NOT_LOGIN="NOT_LOGIN",A.RTM_DUPLICATE_LOGIN="RTM_DUPLICATE_LOGIN",A.RTM_TOKEN_ERROR="RTM_TOKEN_ERROR",A.USER_MESSAGE_TIMEOUT="USER_MESSAGE_TIMEOUT",A.USER_MESSAGE_BROKEN="USER_MESSAGE_BROKEN",A.USER_MESSAGE_NO_RECEIVER="USER_MESSAGE_NO_RECEIVER",A.USER_MESSAGE_NO_RELAYPATH="USER_MESSAGE_NO_RELAYPATH",A.USER_MESSAGE_EXCEED_QPS="USER_MESSAGE_EXCEED_QPS",A.USER_MESSAGE_SEND_TO_SERVER_ERROR="USER_MESSAGE_SEND_TO_SERVER_ERROR",A.USER_MESSAGE_SERVER_RESPONSE_ERROR="USER_MESSAGE_SERVER_RESPONSE_ERROR",A.USER_MESSAGE_NOT_JOIN="USER_MESSAGE_NOT_JOIN",A.USER_MESSAGE_INIT="USER_MESSAGE_INIT",A.USER_MESSAGE_NO_CONNECTION="USER_MESSAGE_NO_CONNECTION",A.USER_MESSAGE_NOT_LOGIN="USER_MESSAGE_NOT_LOGIN",A.USER_MESSAGE_SERVER_PARAMS_NOTSET="USER_MESSAGE_SERVER_PARAMS_NOTSET",A.USER_MESSAGE_UNKNOWN="USER_MESSAGE_UNKNOWN",A.START_PUBLIC_STREAM_BEFORE_JOIN="START_PUBLIC_STREAM_BEFORE_JOIN",A.RECONNECT_FAILED="RECONNECT_FAILED",A.SUBTITLE_ALREADY_ON="SUBTITLE_ALREADY_ON",A.SUBTITLE_NOT_TURNED_ON="SUBTITLE_NOT_TURNED_ON",A.SUBTITLE_ERR_POSTPROCESS="SUBTITLE_ERR_POSTPROCESS",A.SUBTITLE_ERR_CONNECTION_ERROR="SUBTITLE_ERR_CONNECTION_ERROR",A.SUBTITLE_ERR_PROCESS_ERROR="SUBTITLE_ERR_PROCESS_ERROR",A.SUBTITLE_ERR_UNKNOWN="SUBTITLE_ERR_UNKNOWN",A.UNEXPECTED_INVOKE_FORWARD_STREAM="UNEXPECTED_INVOKE_FORWARD_STREAM",A.ROOM_FORBIDDEN="ROOM_FORBIDDEN",A.USER_FORBIDDEN="USER_FORBIDDEN",A.ERR_ELECTRON_IS_NULL="ERR_ELECTRON_IS_NULL",A.ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR="ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR",A.SET_SIMULCAST_FAILED="SET_SIMULCAST_FAILED",A.MIXING_OLD_AND_NEW_APIS="MIXING_OLD_AND_NEW_APIS",A.WTN_PUSH_FAILED="WTN_PUSH_FAILED",A.WTN_PLAY_FAILED="WTN_PLAY_FAILED",A.NOT_ALLOWED_IN_RTS_ROOM="NOT_ALLOWED_IN_RTS_ROOM",A.NOT_ALLOWED_IN_RESTRICTED_MODE="NOT_ALLOWED_IN_RESTRICTED_MODE",A))(m||{}),cC=(A=>(A[A.AUDIO_MIXING_ERROR_OK=0]="AUDIO_MIXING_ERROR_OK",A[A.AUDIO_MIXING_ERROR_PRELOAD_FAILED=1]="AUDIO_MIXING_ERROR_PRELOAD_FAILED",A[A.AUDIO_MIXING_ERROR_START_FAILED=2]="AUDIO_MIXING_ERROR_START_FAILED",A[A.AUDIO_MIXING_ERROR_ID_NOT_FOUND=3]="AUDIO_MIXING_ERROR_ID_NOT_FOUND",A[A.AUDIO_MIXING_ERROR_SET_POSITION_FAILED=4]="AUDIO_MIXING_ERROR_SET_POSITION_FAILED",A[A.AUDIO_MIXING_ERROR_INVALID_VOLUME=5]="AUDIO_MIXING_ERROR_INVALID_VOLUME",A[A.AUDIO_MIXING_ERROR_LOAD_CONFLICT=6]="AUDIO_MIXING_ERROR_LOAD_CONFLICT",A[A.AUDIO_MIXING_ERROR_ID_TYPE_NOT_MATCH=7]="AUDIO_MIXING_ERROR_ID_TYPE_NOT_MATCH",A[A.AUDIO_MIXING_ERROR_ID_TYPE_INVALID_PITCH=8]="AUDIO_MIXING_ERROR_ID_TYPE_INVALID_PITCH",A[A.AUDIO_MIXING_ERROR_INVALID_AUDIO_TRACK=9]="AUDIO_MIXING_ERROR_INVALID_AUDIO_TRACK",A))(cC||{});class U extends Error{constructor(I,g,C){super(g),P(this,"code",void 0),P(this,"message",void 0),P(this,"error",void 0),this.code=I,this.message=g,this.error=C,Object.setPrototypeOf(this,U.prototype)}toString(){return"SDKError: ".concat(this.code," ").concat(this.message)}}var X=(A=>(A.onTrackEnded="onTrackEnded",A.onTrackMute="onTrackMute",A.onTrackUnmute="onTrackUnmute",A.onPlayerEvent="onPlayerEvent",A.onAutoplayFailed="onAutoplayFailed",A.onUserJoined="onUserJoined",A.onUserLeave="onUserLeave",A.onConnectionStateChanged="onConnectionStateChanged",A.onUserPublishStream="onUserPublishStream",A.onUserUnpublishStream="onUserUnpublishStream",A.onUserPublishScreen="onUserPublishScreen",A.onUserUnpublishScreen="onUserUnpublishScreen",A.onRoomMessageReceived="onRoomMessageReceived",A.onRoomBinaryMessageReceived="onRoomBinaryMessageReceived",A.onUserMessageReceived="onUserMessageReceived",A.onUserBinaryMessageReceived="onUserBinaryMessageReceived",A.onVideoFirstFrameRendered="onVideoFirstFrameRendered",A.onVideoFirstFrameDecoded="onVideoFirstFrameDecoded",A.onRemoteVideoFirstFrame="onRemoteVideoFirstFrame",A.onAudioFirstFrameDecoded="onAudioFirstFrameDecoded",A.onRemoteAudioFirstFrame="onRemoteAudioFirstFrame",A.onFirstPublicStreamVideoFrameRendered="onFirstPublicStreamVideoFrameRendered",A.onFirstPublicStreamVideoFrameDecoded="onFirstPublicStreamVideoFrameDecoded",A.onFirstPublicStreamAudioFrameDecoded="onFirstPublicStreamAudioFrameDecoded",A.onVideoDeviceStateChanged="onVideoDeviceStateChanged",A.onAudioDeviceStateChanged="onAudioDeviceStateChanged",A.onRemoteStreamStats="onRemoteStreamStats",A.onPublicStreamStats="onPublicStreamStats",A.onLocalStreamStats="onLocalStreamStats",A.onAudioVolumeIndication="onAudioVolumeIndication",A.onLocalAudioPropertiesReport="onLocalAudioPropertiesReport",A.onRemoteAudioPropertiesReport="onRemoteAudioPropertiesReport",A.onActiveSpeaker="onActiveSpeaker",A.onAudioPlaybackDeviceChanged="onAudioPlaybackDeviceChanged",A.onUserStartVideoCapture="onUserStartVideoCapture",A.onUserStopVideoCapture="onUserStopVideoCapture",A.onUserStartAudioCapture="onUserStartAudioCapture",A.onUserStopAudioCapture="onUserStopAudioCapture",A.onAutoPublishResult="onAutoPublishResult",A.onAutoSubscribeResult="onAutoSubscribeResult",A.onLiveTranscodingResult="onLiveTranscodingResult",A.onStreamMixingEvent="onStreamMixingEvent",A.onAudioPlaybackDeviceTestVolume="onAudioPlaybackDeviceTestVolume",A.onSEIMessageReceived="onSEIMessageReceived",A.onError="onError",A.onAudioMixingStateChanged="onAudioMixingStateChanged",A.onUserMessageReceivedOutsideRoom="onUserMessageReceivedOutsideRoom",A.onUserBinaryMessageReceivedOutsideRoom="onUserBinaryMessageReceivedOutsideRoom",A.onTokenWillExpire="onTokenWillExpire",A.onTokenPublishPrivilegeWillExpire="onTokenPublishPrivilegeWillExpire",A.onTokenPublishPrivilegeDidExpired="onTokenPublishPrivilegeDidExpired",A.onTokenSubscribePrivilegeWillExpire="onTokenSubscribePrivilegeWillExpire",A.onTokenSubscribePrivilegeDidExpired="onTokenSubscribePrivilegeDidExpired",A.onCloudProxyConnected="onCloudProxyConnected",A.onPushPublicStreamResult="onPushPublicStreamResult",A.onPublicStreamSEIMessageReceived="onPublicStreamSEIMessageReceived",A.onNetworkQuality="onNetworkQuality",A.onSimulcastSubscribeFallback="onSimulcastSubscribeFallback",A.onRemoteVideoSizeChanged="onRemoteVideoSizeChanged",A.onVideoStreamBanned="onVideoStreamBanned",A.onAudioStreamBanned="onAudioStreamBanned",A.onLocalVideoSizeChanged="onLocalVideoSizeChanged",A.onSubtitleStateChanged="onSubtitleStateChanged",A.onSubtitleMessageReceived="onSubtitleMessageReceived",A.onServerParamsSetResult="onServerParamsSetResult",A.onLocalStreamTrackChangedByExtension="onLocalStreamTrackChangedByExtension",A.onVendorConnectionStateChanged="onVendorConnectionStateChanged",A.onForwardStreamError="onForwardStreamError",A.onRejoinWithTcp="onRejoinWithTcp",A.onIceConnectWithTcp="onIceConnectWithTcp",A.onPublishRetry="onPublishRetry",A.onSubscribeRetry="onSubscribeRetry",A.onPublishResult="onPublishResult",A.onSubscribeResult="onSubscribeResult",A.onSEIStreamUpdate="onSEIStreamUpdate",A))(X||{});function iD(A,I){if(typeof A!="boolean")throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": The value should be boolean type."))}const vV=()=>!Ie()&&typeof HTMLVideoElement.prototype.requestVideoFrameCallback=="function";function qe(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;if(AC||typeof A!="number")throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": the value range is [").concat(g,", ").concat(C,"]. integer only"))}function OA(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;if(A==null)throw new U(m.INVALID_PARAMS,"".concat(I," cannot be empty"));if(!CaA(A,g,C))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": The value should be string type. Length of the string: [").concat(g,",").concat(C,"]"))}function MA(A,I,g){if(!g.includes(A))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": The value can only be set as ").concat(JSON.stringify(g)))}function nF(A){if(!(A instanceof MediaStreamTrack))throw new U(m.INVALID_PARAMS,"Invalid track, The value should be MediaStreamTrack type.")}function Z0(A,I){if(kQ(A))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,", should not be empty"))}function gaA(A,I){if(!Array.isArray(A))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,", should be array"))}function eD(A,I){if(!(A instanceof ArrayBuffer))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,", should be ArrayBuffer"))}function bw(A){try{const I=navigator.mediaDevices.getSupportedConstraints();for(const g of Object.keys(A))I[g]||delete A[g]}catch{}}function CaA(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.POSITIVE_INFINITY;return typeof A=="string"&&A.length<=g&&A.length>=I}function kQ(A){return A==null}function pc(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new U(m.INVALID_PARAMS,"The RoomId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function dC(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new U(m.INVALID_PARAMS,"The userId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function sa(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new U(m.INVALID_PARAMS,"The publicStreamId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function QaA(A){return typeof A!="string"}function BaA(A){Z0(A,"userInfo"),dC(A.userId),kQ(A.extraInfo)||OA(A.extraInfo,"userInfo.extraInfo",1,200)}function EaA(A){Z0(A,"roomConfig"),iD(A.isAutoPublish,"roomConfig.isAutoPublish"),iD(A.isAutoSubscribeAudio,"roomConfig.isAutoSubscribeAudio"),iD(A.isAutoSubscribeVideo,"roomConfig.isAutoSubscribeVideo"),kQ(A.roomProfileType)||MA(A.roomProfileType,"roomConfig",[EC.communication,EC.chat,EC.chatRoom,EC.coHost,EC.meeting,EC.classRoom])}function lF(A){Z0(A,"videoPlayerOption")}function iaA(A){var I,g;let C,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:64;if(!A||(A==null?void 0:A.byteLength)===0)throw new U(m.INVALID_PARAMS,"The message cannot be empty");if(A instanceof ArrayBuffer)C=A;else{if(typeof A!="string")throw new U(m.INVALID_PARAMS,"The message must be string or ArrayBuffer");C=Ag.str2ab(A)}if(((I=C)===null||I===void 0?void 0:I.byteLength)>1024*Q)throw new U(m.INVALID_PARAMS,"The message length must be less than ".concat(Q,"KB"));return(g=C.byteLength)!==null&&g!==void 0?g:0}function eaA(A){const I=lA("FORCE_ENABLED_REPORT_CALLBACKS");return I!=null&&I.includes(A)||A===X.onRemoteStreamStats&&lA("UPLOAD_REMOTE_STATS")?!0:![X.onRemoteStreamStats,X.onLocalStreamStats,X.onAudioVolumeIndication,X.onLocalAudioPropertiesReport,X.onRemoteAudioPropertiesReport].includes(A)}function oaA(A){if(typeof(A==null?void 0:A.width)!="number"||typeof(A==null?void 0:A.height)!="number")throw new U(m.INVALID_PARAMS,"remoteVideoConfig must contain width, height, frameRate")}function oD(A,I){if(typeof A=="number"&&!Number.isNaN(A)&&A>=1)return;const g=A;if(!(g!=null&&g.min||g!=null&&g.max||g!=null&&g.exact||g!=null&&g.ideal))throw new U(m.INVALID_PARAMS,"".concat(I," is not a valid ConstrainULong"))}function tD(A){gaA(A,"videoEncoderConfig");for(const I of A)Z0(I,"videoEncoderConfigItem"),qe(I==null?void 0:I.maxKbps,"maxKbps"),oD(I==null?void 0:I.width,"width"),oD(I==null?void 0:I.height,"height"),oD(I==null?void 0:I.frameRate,"frameRate")}function Cl(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.NEGATIVE_INFINITY,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;return qe(A,I,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY),A=(A=A>g?A:g)(A[A.NONE=0]="NONE",A))(OC||{});const saA="rtc-access-ag.bytedance.com,rtc-access.bytedance.com,rtc-access2-hl.bytedance.com,rtcg-access.bytevcloud.com".split(",");function rV(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return A?(/^https?:\/\/.+/.test(A)||(A="https://".concat(A)),"".concat(A,"/dispatch/v1/AccessInfo?Action=GetAccessInfo")):""}function vaA(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return A?(/^https?:\/\/.+/.test(A)||(A="https://".concat(A)),"".concat(A,"/video/v1/webrtc_log/")):""}const aV="https://web-log-report.rtc.volcvideo.com/video/v1/webrtc_log/",raA="https://web-log-report.volcvideos.com/video/v1/webrtc_log/",aaA="common.rtc.volcvideo.com,rtcg.volcvideos.com".split(","),YA={VERSION:"4.66.5",ICE_CONFIG_REQUEST_URLS_INTERNAL:saA.map(rV),ICE_CONFIG_REQUEST_URLS:[],EXPECTED_ADDR:"",LOG_SERVER_URL:aV,CONFIG_REQUEST_DOMAINS:aaA,DEVICE_ID:"",OVERSEA:!1,PLATFORM:"",PRODUCT:"",FORCE_ENABLED_REPORT_CALLBACKS:[],SKIP_WEB_AUDIO_IN_TRACK:!1,ENFORCE_WEB_AUDIO_SUPPORTED:!1,AUDIO_STALL:!0,VIDEO_STALL:!0,VIDEO_STALL_100MS:!1,STATS_SCALLBACK_SUPPORT:!0,JOIN_ROOM_CONFIG:RQ.DEFAULT_CONF,SIGNAL_COMPRESSION:!0,SIGNAL_CROP_JOINROOM:!0,VIDEO_STALL_DATA:500,AUDIO_STALL_DATA:200,IOS_SAFARI_ORIENTATION:!1,BLACK_FRAME_LIFETIME:6e4,FALLBACK_ENCODE_CODEC:"",SEI_TIME_OUT:2e3,SEI_COUNT_FPS:1,PRE_ICE:!1,STATS_LOOP_INTERVAL:1e3,HIDDEN_STATS:!1,UPLOAD_REMOTE_STATS:OC.NONE,SDK_CODEC_NEGOTIATION:!0,AUDIO_CODEC:"OPUS",DISABLE_ENCODED_TRANSFORM:!1,SKIP_SEI_FILTER:!1,AREA_CODE:"",DISABLE_COMPUTE_PRESSURE:!1,SEND_MESSAGE_SYNC:!1,H264_HW_ENCODER:!1};function jC(A,I){if(EV("setParameter",0,"key: ".concat(A,", value: ").concat(I)),A!=="VERSION"){if(A==="H264_HW_ENCODER"){const g=RTCPeerConnection.prototype.setRemoteDescription;return void(RTCPeerConnection.prototype.setRemoteDescription=function(C){var Q;return g.call(this,{type:C.type,sdp:(Q=C.sdp)===null||Q===void 0?void 0:NEA(Q).call(Q,"42e01f","42001f")})})}if(A==="JOIN_ROOM_CONFIG")return RQ.setDefaulConf(I);if(A==="ICE_CONFIG_REQUEST_URLS"){const g=typeof I=="string"?[I]:I;return YA.ICE_CONFIG_REQUEST_URLS=g.map(rV),$A.clearAccessUrls(),void $A.clearAccessNode()}if(A==="VIDEO_STALL_DATA")return void(YA.VIDEO_STALL_DATA=Math.max(500,Number(I)));if(A==="AUDIO_STALL_DATA")return void(YA.AUDIO_STALL_DATA=Math.max(200,Number(I)));if(A==="VIDEO_STALL_100MS")return void(YA.VIDEO_STALL_100MS=vV()&&!!I);if(A==="PLATFORM"&&typeof I=="string")return void ta({platform:I});if(A==="PRODUCT"&&typeof I=="string")return void ta({product:I});if(A==="FORCE_ENABLED_REPORT_CALLBACKS"){const g=typeof I=="string"?[I]:I;return void(YA.FORCE_ENABLED_REPORT_CALLBACKS=g)}if(A==="LOG_SERVER_URL"){const g=I===vw.overseas?raA:I===vw.domestic?aV:typeof I=="string"?I:void 0;g&&(YA.LOG_SERVER_URL=g,BV(g))}else if(A==="OVERSEA")return ta({extra_is_oversea:I?"1":"0"}),void(YA.OVERSEA=I);if(A==="CONFIG_REQUEST_DOMAINS"&&Array.isArray(I)&&I.length>0)return void(YA.CONFIG_REQUEST_DOMAINS=I);if(!(A==="SEI_TIME_OUT"&&typeof I!="number")&&!(A==="SEI_COUNT_FPS"&&typeof I!="number")){if(A==="UPLOAD_REMOTE_STATS"&&typeof I=="string"){const g=I.split(",").map(C=>RE(C).call(C)).reduce((C,Q)=>Q==="video"?C|iA.VIDEO:Q==="audio"?C|iA.AUDIO:C,OC.NONE);return void(YA.UPLOAD_REMOTE_STATS=g)}if(A==="AINR_URLS"&&typeof I=="string")try{const{gulpUrl:g,wasmUrl:C,type5ModelUrl:Q,type6ModelUrl:B}=JSON.parse(I);return void(YA.AINR_URLS={gulpUrl:g,wasmUrl:C,type5ModelUrl:Q,type6ModelUrl:B})}catch(g){console.error(g)}A==="DEVICE_ID"&&$A.setDeviceId(I),dB.getKeys().includes(A)?dB.setParameter(A,I):Reflect.set(YA,A,I)}}}function lA(A){return A==="DEVICE_ID"?$A.getDeviceId():YA[A]}function dF(A,I,g){var C,Q,B,E,i,e,o,t;return{type:"publicstream",action:I,publicStreamID:A,publicStreamMeta:{audio:{},video:{fps:((C=g.video)===null||C===void 0?void 0:C.fps)||15,bitrate:1e3*(((Q=g.video)===null||Q===void 0?void 0:Q.kBitRate)||40),width:((B=g.video)===null||B===void 0?void 0:B.width)||640,height:((E=g.video)===null||E===void 0?void 0:E.height)||360},layout:{layoutMode:2,interpolationMode:((i=g.layout)===null||i===void 0?void 0:i.interpolationMode)||qW.PREV_FRAME,canvas:{bgColor:((e=g.layout)===null||e===void 0?void 0:e.backgroundColor)||"#000000",bgImage:((o=g.layout)===null||o===void 0?void 0:o.backgroundImage)||""},regions:((t=g.layout)===null||t===void 0||(t=t.regions)===null||t===void 0?void 0:t.map(s=>({roomId:s.roomId,userId:s.userId,alterImage:s.alertImage||"",alpha:!s.alpha||Number(s.alpha)>1||Number(s.alpha)<=0?1:Number(s.alpha),x:!s.x||Number(s.x)>=1||Number(s.x)<0?0:Number(s.x),y:!s.y||Number(s.y)>=1||Number(s.y)<0?0:Number(s.y),w:!s.w||Number(s.w)>1||Number(s.w)<=0?1:Number(s.w),h:!s.h||Number(s.h)>1||Number(s.h)<=0?1:Number(s.h),zorder:!s.zorder||Number(s.zorder)<0||Number(s.zorder)>100?0:Number(s.zorder),renderMode:s.renderMode===void 0?1:s.renderMode,streamType:s.isScreenStream?1:0,mediaType:s.mediaType||0,sourceCrop:s.sourceCrop})))||[]}}}}let PV=[];function PaA(){return PV}function cV(A){PV=A}const caA=(A,I)=>{const g=PaA();if(!g.length)return;const C=A[0],Q=I.width||jA(C.width),B=I.height||jA(C.height),E=Q*B;if(jA(C.width)*jA(C.height)<=E)return;let i,e,o=g[0];g.forEach(s=>{const v=jA(s.width)*jA(s.height);i||(E!(e&&jA(s.width)*jA(s.height)>=E)||(e.maxKbps=Math.min(s.maxKbps,e.maxKbps),!1));return t.unshift({width:Q,height:B,frameRate:I.frameRate?Math.round(I.frameRate):t[0].frameRate,maxKbps:e.maxKbps}),t},Nc={width:640,height:480,frameRate:15,maxKbps:600},naA={width:1920,height:1080,frameRate:15,maxKbps:3e3};let Zc;const laA=new Uint8Array(16);function daA(){if(!Zc&&(Zc=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Zc))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Zc(laA)}const wg=[];for(let A=0;A<256;++A)wg.push((A+256).toString(16).slice(1));function haA(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return wg[A[I+0]]+wg[A[I+1]]+wg[A[I+2]]+wg[A[I+3]]+"-"+wg[A[I+4]]+wg[A[I+5]]+"-"+wg[A[I+6]]+wg[A[I+7]]+"-"+wg[A[I+8]]+wg[A[I+9]]+"-"+wg[A[I+10]]+wg[A[I+11]]+wg[A[I+12]]+wg[A[I+13]]+wg[A[I+14]]+wg[A[I+15]]}const DaA=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);var sD,hF={randomUUID:DaA};function uaA(A,I,g){if(hF.randomUUID&&!A)return hF.randomUUID();const C=(A=A||{}).random||(A.rng||daA)();return C[6]=15&C[6]|64,C[8]=63&C[8]|128,haA(C)}const baA=new TextDecoder,yaA=new TextEncoder,KE=()=>uaA(),aA=()=>Date.now();function nV(A){let I=0;for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;QQ!==null).join(":"))}static merge(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(const[C,Q]of Object.entries(I))Q!==null&&typeof Q=="object"?Ag.merge(I[C],g[C]):g[C]!==void 0&&(I[C]=g[C])}static ab2str(I){return baA.decode(I)}static ab2obj(I){try{const g=Ag.ab2str(I);return JSON.parse(g)}catch{return{}}}static str2ab(I){return yaA.encode(I).buffer}static async ab2b64str(I){if(lA("SEND_MESSAGE_SYNC")){const g=String.fromCharCode.apply(null,new Uint8Array(I));return window.btoa(g)}return(await new Promise(g=>{const C=new FileReader;C.onload=()=>g(C.result),C.readAsDataURL(new Blob([I]))})).split(",",2)[1]}static async b64str2ab(I,g){return fetch("data:application/octet;base64,".concat(I)).then(C=>C.arrayBuffer()).catch(C=>{throw g&&g.report("rtc_error",{error_code:2001,message:"".concat(C.message," -> ").concat(I)}),C})}}function lV(A){return new Promise(I=>{setTimeout(I,A)})}function DF(){const A=Number("".concat(Math.random()).slice(-7).padEnd(7,"0")).toString(2).padEnd(28,"1").split(""),I=[];for(;A.length;)I.push(A.splice(0,7));return I.map((g,C)=>{const Q=C===I.length-1?"0":"1";return Number.parseInt(Q+g.join(""),2)})}const Oa=()=>Math.floor(65535*Math.random());function waA(A){return!(128&~A)}function vD(A){return typeof A=="string"&&A.indexOf("__web__rtc__rtt__")>-1}function maA(A){let I="";for(let g=0;g0&&arguments[0]!==void 0&&arguments[0];if(rD)return rD;const I=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});I.createDataChannel("default"),I.addTransceiver("audio",{direction:"recvonly"}),I.addTransceiver("video",{direction:"recvonly"}),A&&(I.addTransceiver("audio",{direction:"sendonly"}),I.addTransceiver("video",{direction:"sendonly"}));const g=await I.createOffer();return I.close(),rD=g.sdp,g.sdp},RaA=A=>new Promise((I,g)=>{let C=(A=Array.isArray(A)?A:[]).length;const Q=[];C===0?g([]):A.forEach(B=>{B.then(E=>{I(E)},E=>{C--,Q.push(E),C===0&&g(Q)})})});function Er(A){return Number(Math.max(-127,10*Math.log10(Math.pow(A/255,2))).toFixed(2))}function $I(A){return(A&iA.AUDIO)===iA.AUDIO}function gI(A){return(A&iA.VIDEO)===iA.VIDEO}function DC(A){const I={};return Object.keys(A).forEach(g=>{typeof A[g]=="object"?I[g]=DC(A[g]):g.startsWith("_")&&!lA("HIDDEN_STATS")||(I[g]=A[g])}),I}function LaA(A){const I=new DataView(A.buffer);if(I.byteLength<=4||I.getUint16(0)!==65535)return{seiCount:1,seis:[A]};const g={seiCount:0,seis:[]};let C=!1,Q=2;for(;Q0&&I.byteLength-Q<=2){C=!0;break}g.seiCount++,g.seis.push(E)}return C&&(g.seiCount=1,g.seis=[A]),g}function HB(A){return A===void 0}function uF(A){return function(I,g,C){const Q=C.value;C.value=function(){console.warn("[RTC WebSDK]: Api: ".concat(g," has been abandoned from version ").concat(A));for(var B=arguments.length,E=new Array(B),i=0;iNumber.MAX_SAFE_INTEGER&&(this._id=0),this._id}}function UaA(A){const I={};return Object.keys(A).forEach(g=>{A[g]!==void 0&&(I[g]=A[g])}),I}const K0=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||!((sD=window.localStorage)===null||sD===void 0||!sD.getItem("_rtc_debug_")));function FaA(A){const I=atob(A),g=I.length,C=new Uint8Array(g);for(let Q=0;Q{if(g==="peerIdentity")return!1;try{return typeof A[g]=="function"||A[g]===void 0}catch{return!1}}).map(g=>({obj:A,prefix:I,attr:g})):[]}function paA(A,I){try{return A[I].toString().includes("[native code]")?"native":"non-native"}catch{return"untouchable"}}const dV=(typeof window<"u"?[[(aD=window.RTCPeerConnection)===null||aD===void 0?void 0:aD.prototype,"RTCPeerConnection.prototype"],[window.RTCPeerConnection,"RTCPeerConnection"],[(PD=window.RTCDataChannel)===null||PD===void 0?void 0:PD.prototype,"RTCDataChannel.prototype"],[window.RTCDataChannel,"RTCDataChannel"],[(cD=window.MediaStreamTrack)===null||cD===void 0?void 0:cD.prototype,"MediaStreamTrack.prototype"],[window.MediaStreamTrack,"MediaStreamTrack"],[(nD=window.MediaStream)===null||nD===void 0?void 0:nD.prototype,"MediaStream.prototype"],[window.MediaStream,"MediaStream"],[(lD=window.HTMLAudioElement)===null||lD===void 0?void 0:lD.prototype,"HTMLAudioElement.prototype"],[(dD=window.HTMLVideoElement)===null||dD===void 0?void 0:dD.prototype,"HTMLVideoElement.prototype"],[(hD=window.HTMLMediaElement)===null||hD===void 0?void 0:hD.prototype,"HTMLMediaElement.prototype"],[(DD=(uD=window.AudioContext)===null||uD===void 0?void 0:uD.prototype)!==null&&DD!==void 0?DD:(bD=window.webkitAudioContext)===null||bD===void 0?void 0:bD.prototype,"AudioContext.prototype"],[(yD=window.BaseAudioContext)===null||yD===void 0?void 0:yD.prototype,"BaseAudioContext.prototype"],[(wD=window.AudioNode)===null||wD===void 0?void 0:wD.prototype,"AudioNode.prototype"],[window.navigator.mediaDevices,"navigator.mediaDevices"],[window.console,"console"]]:[]).reduce((A,I)=>{let[g,C]=I;return A.concat(kaA(g,C))},[]);typeof window<"u"&&dV.push({obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getUserMedia"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getDisplayMedia"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"enumerateDevices"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getSupportedConstraints"});for(const{obj:A,prefix:I,attr:g}of dV){const C="".concat(I,".").concat(g);J0[C]=paA(A,g)}K0&&console.log("RTC_AMBULANCE",J0);const bF=Object.entries(J0).filter(A=>{let[I,g]=A;return g==="non-native"}).map(A=>{let[I,g]=A;return I});Object.keys(bF).length&&console.warn("RTC_AMBULANCE",`have non-native code: -`,bF.join(` -`));let hV=!0,DV=!0;function Ql(A,I,g){const C=A.match(I);return C&&C.length>=g&&parseInt(C[g],10)}function ko(A,I,g){if(!A.RTCPeerConnection)return;const C=A.RTCPeerConnection.prototype,Q=C.addEventListener;C.addEventListener=function(E,i){if(E!==I)return Q.apply(this,arguments);const e=o=>{const t=g(o);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[I]||(this._eventMap[I]=new Map),this._eventMap[I].set(i,e),Q.apply(this,[E,e])};const B=C.removeEventListener;C.removeEventListener=function(E,i){if(E!==I||!this._eventMap||!this._eventMap[I])return B.apply(this,arguments);if(!this._eventMap[I].has(i))return B.apply(this,arguments);const e=this._eventMap[I].get(i);return this._eventMap[I].delete(i),this._eventMap[I].size===0&&delete this._eventMap[I],Object.keys(this._eventMap).length===0&&delete this._eventMap,B.apply(this,[E,e])},Object.defineProperty(C,"on"+I,{get(){return this["_on"+I]},set(E){this["_on"+I]&&(this.removeEventListener(I,this["_on"+I]),delete this["_on"+I]),E&&this.addEventListener(I,this["_on"+I]=E)},enumerable:!0,configurable:!0})}function NaA(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(hV=A,A?"adapter.js logging disabled":"adapter.js logging enabled")}function ZaA(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(DV=!A,"adapter.js deprecation warnings "+(A?"disabled":"enabled"))}function uV(){if(typeof window=="object"){if(hV)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function nR(A,I){DV&&console.warn(A+" is deprecated, please use "+I+" instead.")}function KaA(A){const I={browser:null,version:null};if(A===void 0||!A.navigator||!A.navigator.userAgent)return I.browser="Not a browser.",I;const{navigator:g}=A;if(g.mozGetUserMedia)I.browser="firefox",I.version=Ql(g.userAgent,/Firefox\/(\d+)\./,1);else if(g.webkitGetUserMedia||A.isSecureContext===!1&&A.webkitRTCPeerConnection)I.browser="chrome",I.version=Ql(g.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else{if(!A.RTCPeerConnection||!g.userAgent.match(/AppleWebKit\/(\d+)\./))return I.browser="Not a supported browser.",I;I.browser="safari",I.version=Ql(g.userAgent,/AppleWebKit\/(\d+)\./,1),I.supportsUnifiedPlan=A.RTCRtpTransceiver&&"currentDirection"in A.RTCRtpTransceiver.prototype}return I}function yF(A){return Object.prototype.toString.call(A)==="[object Object]"}function bV(A){return yF(A)?Object.keys(A).reduce(function(I,g){const C=yF(A[g]),Q=C?bV(A[g]):A[g],B=C&&!Object.keys(Q).length;return Q===void 0||B?I:Object.assign(I,{[g]:Q})},{}):A}function yw(A,I,g){I&&!g.has(I.id)&&(g.set(I.id,I),Object.keys(I).forEach(C=>{C.endsWith("Id")?yw(A,A.get(I[C]),g):C.endsWith("Ids")&&I[C].forEach(Q=>{yw(A,A.get(Q),g)})}))}function wF(A,I,g){const C=g?"outbound-rtp":"inbound-rtp",Q=new Map;if(I===null)return Q;const B=[];return A.forEach(E=>{E.type==="track"&&E.trackIdentifier===I.id&&B.push(E)}),B.forEach(E=>{A.forEach(i=>{i.type===C&&i.trackId===E.id&&yw(A,i,Q)})}),Q}const mF=uV;function yV(A,I){const g=A&&A.navigator;if(!g.mediaDevices)return;const C=function(E){if(typeof E!="object"||E.mandatory||E.optional)return E;const i={};return Object.keys(E).forEach(e=>{if(e==="require"||e==="advanced"||e==="mediaSource")return;const o=typeof E[e]=="object"?E[e]:{ideal:E[e]};o.exact!==void 0&&typeof o.exact=="number"&&(o.min=o.max=o.exact);const t=function(s,v){return s?s+v.charAt(0).toUpperCase()+v.slice(1):v==="deviceId"?"sourceId":v};if(o.ideal!==void 0){i.optional=i.optional||[];let s={};typeof o.ideal=="number"?(s[t("min",e)]=o.ideal,i.optional.push(s),s={},s[t("max",e)]=o.ideal,i.optional.push(s)):(s[t("",e)]=o.ideal,i.optional.push(s))}o.exact!==void 0&&typeof o.exact!="number"?(i.mandatory=i.mandatory||{},i.mandatory[t("",e)]=o.exact):["min","max"].forEach(s=>{o[s]!==void 0&&(i.mandatory=i.mandatory||{},i.mandatory[t(s,e)]=o[s])})}),E.advanced&&(i.optional=(i.optional||[]).concat(E.advanced)),i},Q=function(E,i){if(I.version>=61)return i(E);if((E=JSON.parse(JSON.stringify(E)))&&typeof E.audio=="object"){const e=function(o,t,s){t in o&&!(s in o)&&(o[s]=o[t],delete o[t])};e((E=JSON.parse(JSON.stringify(E))).audio,"autoGainControl","googAutoGainControl"),e(E.audio,"noiseSuppression","googNoiseSuppression"),E.audio=C(E.audio)}if(E&&typeof E.video=="object"){let e=E.video.facingMode;e=e&&(typeof e=="object"?e:{ideal:e});const o=I.version<66;if(e&&(e.exact==="user"||e.exact==="environment"||e.ideal==="user"||e.ideal==="environment")&&(!g.mediaDevices.getSupportedConstraints||!g.mediaDevices.getSupportedConstraints().facingMode||o)){let t;if(delete E.video.facingMode,e.exact==="environment"||e.ideal==="environment"?t=["back","rear"]:e.exact!=="user"&&e.ideal!=="user"||(t=["front"]),t)return g.mediaDevices.enumerateDevices().then(s=>{let v=(s=s.filter(r=>r.kind==="videoinput")).find(r=>t.some(n=>r.label.toLowerCase().includes(n)));return!v&&s.length&&t.includes("back")&&(v=s[s.length-1]),v&&(E.video.deviceId=e.exact?{exact:v.deviceId}:{ideal:v.deviceId}),E.video=C(E.video),mF("chrome: "+JSON.stringify(E)),i(E)})}E.video=C(E.video)}return mF("chrome: "+JSON.stringify(E)),i(E)},B=function(E){return I.version>=64?E:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[E.name]||E.name,message:E.message,constraint:E.constraint||E.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(g.getUserMedia=(function(E,i,e){Q(E,o=>{g.webkitGetUserMedia(o,i,t=>{e&&e(B(t))})})}).bind(g),g.mediaDevices.getUserMedia){const E=g.mediaDevices.getUserMedia.bind(g.mediaDevices);g.mediaDevices.getUserMedia=function(i){return Q(i,e=>E(e).then(o=>{if(e.audio&&!o.getAudioTracks().length||e.video&&!o.getVideoTracks().length)throw o.getTracks().forEach(t=>{t.stop()}),new DOMException("","NotFoundError");return o},o=>Promise.reject(B(o))))}}}function JaA(A,I){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(typeof I=="function"?A.navigator.mediaDevices.getDisplayMedia=function(g){return I(g).then(C=>{const Q=g.video&&g.video.width,B=g.video&&g.video.height,E=g.video&&g.video.frameRate;return g.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:C,maxFrameRate:E||3}},Q&&(g.video.mandatory.maxWidth=Q),B&&(g.video.mandatory.maxHeight=B),A.navigator.mediaDevices.getUserMedia(g)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}function wV(A){A.MediaStream=A.MediaStream||A.webkitMediaStream}function mV(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("ontrack"in A.RTCPeerConnection.prototype)){Object.defineProperty(A.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(g){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=g)},enumerable:!0,configurable:!0});const I=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=g=>{g.stream.addEventListener("addtrack",C=>{let Q;Q=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(E=>E.track&&E.track.id===C.track.id):{track:C.track};const B=new Event("track");B.track=C.track,B.receiver=Q,B.transceiver={receiver:Q},B.streams=[g.stream],this.dispatchEvent(B)}),g.stream.getTracks().forEach(C=>{let Q;Q=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(E=>E.track&&E.track.id===C.id):{track:C};const B=new Event("track");B.track=C,B.receiver=Q,B.transceiver={receiver:Q},B.streams=[g.stream],this.dispatchEvent(B)})},this.addEventListener("addstream",this._ontrackpoly)),I.apply(this,arguments)}}else ko(A,"track",I=>(I.transceiver||Object.defineProperty(I,"transceiver",{value:{receiver:I.receiver}}),I))}function GV(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("getSenders"in A.RTCPeerConnection.prototype)&&"createDTMFSender"in A.RTCPeerConnection.prototype){const I=function(Q,B){return{track:B,get dtmf(){return this._dtmf===void 0&&(B.kind==="audio"?this._dtmf=Q.createDTMFSender(B):this._dtmf=null),this._dtmf},_pc:Q}};if(!A.RTCPeerConnection.prototype.getSenders){A.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(E,i){let e=Q.apply(this,arguments);return e||(e=I(this,E),this._senders.push(e)),e};const B=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(E){B.apply(this,arguments);const i=this._senders.indexOf(E);i!==-1&&this._senders.splice(i,1)}}const g=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(Q){this._senders=this._senders||[],g.apply(this,[Q]),Q.getTracks().forEach(B=>{this._senders.push(I(this,B))})};const C=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(Q){this._senders=this._senders||[],C.apply(this,[Q]),Q.getTracks().forEach(B=>{const E=this._senders.find(i=>i.track===B);E&&this._senders.splice(this._senders.indexOf(E),1)})}}else if(typeof A=="object"&&A.RTCPeerConnection&&"getSenders"in A.RTCPeerConnection.prototype&&"createDTMFSender"in A.RTCPeerConnection.prototype&&A.RTCRtpSender&&!("dtmf"in A.RTCRtpSender.prototype)){const I=A.RTCPeerConnection.prototype.getSenders;A.RTCPeerConnection.prototype.getSenders=function(){const g=I.apply(this,[]);return g.forEach(C=>C._pc=this),g},Object.defineProperty(A.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function RV(A){if(!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[g,C,Q]=arguments;if(arguments.length>0&&typeof g=="function")return I.apply(this,arguments);if(I.length===0&&(arguments.length===0||typeof g!="function"))return I.apply(this,[]);const B=function(i){const e={};return i.result().forEach(o=>{const t={id:o.id,timestamp:o.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[o.type]||o.type};o.names().forEach(s=>{t[s]=o.stat(s)}),e[t.id]=t}),e},E=function(i){return new Map(Object.keys(i).map(e=>[e,i[e]]))};if(arguments.length>=2){const i=function(e){C(E(B(e)))};return I.apply(this,[i,g])}return new Promise((i,e)=>{I.apply(this,[function(o){i(E(B(o)))},e])}).then(C,Q)}}function LV(A){if(!(typeof A=="object"&&A.RTCPeerConnection&&A.RTCRtpSender&&A.RTCRtpReceiver))return;if(!("getStats"in A.RTCRtpSender.prototype)){const g=A.RTCPeerConnection.prototype.getSenders;g&&(A.RTCPeerConnection.prototype.getSenders=function(){const Q=g.apply(this,[]);return Q.forEach(B=>B._pc=this),Q});const C=A.RTCPeerConnection.prototype.addTrack;C&&(A.RTCPeerConnection.prototype.addTrack=function(){const Q=C.apply(this,arguments);return Q._pc=this,Q}),A.RTCRtpSender.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(B=>wF(B,Q.track,!0))}}if(!("getStats"in A.RTCRtpReceiver.prototype)){const g=A.RTCPeerConnection.prototype.getReceivers;g&&(A.RTCPeerConnection.prototype.getReceivers=function(){const C=g.apply(this,[]);return C.forEach(Q=>Q._pc=this),C}),ko(A,"track",C=>(C.receiver._pc=C.srcElement,C)),A.RTCRtpReceiver.prototype.getStats=function(){const C=this;return this._pc.getStats().then(Q=>wF(Q,C.track,!1))}}if(!("getStats"in A.RTCRtpSender.prototype)||!("getStats"in A.RTCRtpReceiver.prototype))return;const I=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof A.MediaStreamTrack){const g=arguments[0];let C,Q,B;return this.getSenders().forEach(E=>{E.track===g&&(C?B=!0:C=E)}),this.getReceivers().forEach(E=>(E.track===g&&(Q?B=!0:Q=E),E.track===g)),B||C&&Q?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):C?C.getStats():Q?Q.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return I.apply(this,arguments)}}function SV(A){A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(B=>this._shimmedLocalStreams[B][0])};const I=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(B,E){if(!E)return I.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=I.apply(this,arguments);return this._shimmedLocalStreams[E.id]?this._shimmedLocalStreams[E.id].indexOf(i)===-1&&this._shimmedLocalStreams[E.id].push(i):this._shimmedLocalStreams[E.id]=[E,i],i};const g=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(B){this._shimmedLocalStreams=this._shimmedLocalStreams||{},B.getTracks().forEach(e=>{if(this.getSenders().find(o=>o.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const E=this.getSenders();g.apply(this,arguments);const i=this.getSenders().filter(e=>E.indexOf(e)===-1);this._shimmedLocalStreams[B.id]=[B].concat(i)};const C=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(B){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[B.id],C.apply(this,arguments)};const Q=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(B){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},B&&Object.keys(this._shimmedLocalStreams).forEach(E=>{const i=this._shimmedLocalStreams[E].indexOf(B);i!==-1&&this._shimmedLocalStreams[E].splice(i,1),this._shimmedLocalStreams[E].length===1&&delete this._shimmedLocalStreams[E]}),Q.apply(this,arguments)}}function TV(A,I){if(!A.RTCPeerConnection)return;if(A.RTCPeerConnection.prototype.addTrack&&I.version>=65)return SV(A);const g=A.RTCPeerConnection.prototype.getLocalStreams;A.RTCPeerConnection.prototype.getLocalStreams=function(){const e=g.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(o=>this._reverseStreams[o.id])};const C=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(e){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},e.getTracks().forEach(o=>{if(this.getSenders().find(t=>t.track===o))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[e.id]){const o=new A.MediaStream(e.getTracks());this._streams[e.id]=o,this._reverseStreams[o.id]=e,e=o}C.apply(this,[e])};const Q=A.RTCPeerConnection.prototype.removeStream;function B(e,o){let t=o.sdp;return Object.keys(e._reverseStreams||[]).forEach(s=>{const v=e._reverseStreams[s],r=e._streams[v.id];t=t.replace(new RegExp(r.id,"g"),v.id)}),new RTCSessionDescription({type:o.type,sdp:t})}A.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},A.RTCPeerConnection.prototype.addTrack=function(e,o){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const t=[].slice.call(arguments,1);if(t.length!==1||!t[0].getTracks().find(v=>v===e))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(v=>v.track===e))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const s=this._streams[o.id];if(s)s.addTrack(e),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const v=new A.MediaStream([e]);this._streams[o.id]=v,this._reverseStreams[v.id]=o,this.addStream(v)}return this.getSenders().find(v=>v.track===e)},["createOffer","createAnswer"].forEach(function(e){const o=A.RTCPeerConnection.prototype[e],t={[e](){const s=arguments;return arguments.length&&typeof arguments[0]=="function"?o.apply(this,[v=>{const r=B(this,v);s[0].apply(null,[r])},v=>{s[1]&&s[1].apply(null,v)},arguments[2]]):o.apply(this,arguments).then(v=>B(this,v))}};A.RTCPeerConnection.prototype[e]=t[e]});const E=A.RTCPeerConnection.prototype.setLocalDescription;A.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,o){let t=o.sdp;return Object.keys(e._reverseStreams||[]).forEach(s=>{const v=e._reverseStreams[s],r=e._streams[v.id];t=t.replace(new RegExp(v.id,"g"),r.id)}),new RTCSessionDescription({type:o.type,sdp:t})}(this,arguments[0]),E.apply(this,arguments)):E.apply(this,arguments)};const i=Object.getOwnPropertyDescriptor(A.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(A.RTCPeerConnection.prototype,"localDescription",{get(){const e=i.get.apply(this);return e.type===""?e:B(this,e)}}),A.RTCPeerConnection.prototype.removeTrack=function(e){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(e._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let o;this._streams=this._streams||{},Object.keys(this._streams).forEach(t=>{this._streams[t].getTracks().find(s=>e.track===s)&&(o=this._streams[t])}),o&&(o.getTracks().length===1?this.removeStream(this._reverseStreams[o.id]):o.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function ww(A,I){!A.RTCPeerConnection&&A.webkitRTCPeerConnection&&(A.RTCPeerConnection=A.webkitRTCPeerConnection),A.RTCPeerConnection&&I.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(g){const C=A.RTCPeerConnection.prototype[g],Q={[g](){return arguments[0]=new(g==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};A.RTCPeerConnection.prototype[g]=Q[g]})}function UV(A,I){ko(A,"negotiationneeded",g=>{const C=g.target;if(!(I.version<72||C.getConfiguration&&C.getConfiguration().sdpSemantics==="plan-b")||C.signalingState==="stable")return g})}var GF=Object.freeze({__proto__:null,fixNegotiationNeeded:UV,shimAddTrackRemoveTrack:TV,shimAddTrackRemoveTrackWithNative:SV,shimGetDisplayMedia:JaA,shimGetSendersWithDtmf:GV,shimGetStats:RV,shimGetUserMedia:yV,shimMediaStream:wV,shimOnTrack:mV,shimPeerConnection:ww,shimSenderReceiverGetStats:LV});function FV(A,I){const g=A&&A.navigator,C=A&&A.MediaStreamTrack;if(g.getUserMedia=function(Q,B,E){nR("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),g.mediaDevices.getUserMedia(Q).then(B,E)},!(I.version>55&&"autoGainControl"in g.mediaDevices.getSupportedConstraints())){const Q=function(E,i,e){i in E&&!(e in E)&&(E[e]=E[i],delete E[i])},B=g.mediaDevices.getUserMedia.bind(g.mediaDevices);if(g.mediaDevices.getUserMedia=function(E){return typeof E=="object"&&typeof E.audio=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E.audio,"autoGainControl","mozAutoGainControl"),Q(E.audio,"noiseSuppression","mozNoiseSuppression")),B(E)},C&&C.prototype.getSettings){const E=C.prototype.getSettings;C.prototype.getSettings=function(){const i=E.apply(this,arguments);return Q(i,"mozAutoGainControl","autoGainControl"),Q(i,"mozNoiseSuppression","noiseSuppression"),i}}if(C&&C.prototype.applyConstraints){const E=C.prototype.applyConstraints;C.prototype.applyConstraints=function(i){return this.kind==="audio"&&typeof i=="object"&&(i=JSON.parse(JSON.stringify(i)),Q(i,"autoGainControl","mozAutoGainControl"),Q(i,"noiseSuppression","mozNoiseSuppression")),E.apply(this,[i])}}}}function WaA(A,I){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(A.navigator.mediaDevices.getDisplayMedia=function(g){if(!g||!g.video){const C=new DOMException("getDisplayMedia without video constraints is undefined");return C.name="NotFoundError",C.code=8,Promise.reject(C)}return g.video===!0?g.video={mediaSource:I}:g.video.mediaSource=I,A.navigator.mediaDevices.getUserMedia(g)})}function YV(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function mw(A,I){if(typeof A!="object"||!A.RTCPeerConnection&&!A.mozRTCPeerConnection)return;!A.RTCPeerConnection&&A.mozRTCPeerConnection&&(A.RTCPeerConnection=A.mozRTCPeerConnection),I.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const B=A.RTCPeerConnection.prototype[Q],E={[Q](){return arguments[0]=new(Q==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),B.apply(this,arguments)}};A.RTCPeerConnection.prototype[Q]=E[Q]});const g={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},C=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[Q,B,E]=arguments;return C.apply(this,[Q||null]).then(i=>{if(I.version<53&&!B)try{i.forEach(e=>{e.type=g[e.type]||e.type})}catch(e){if(e.name!=="TypeError")throw e;i.forEach((o,t)=>{i.set(t,Object.assign({},o,{type:g[o.type]||o.type}))})}return i}).then(B,E)}}function kV(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpSender.prototype)return;const I=A.RTCPeerConnection.prototype.getSenders;I&&(A.RTCPeerConnection.prototype.getSenders=function(){const C=I.apply(this,[]);return C.forEach(Q=>Q._pc=this),C});const g=A.RTCPeerConnection.prototype.addTrack;g&&(A.RTCPeerConnection.prototype.addTrack=function(){const C=g.apply(this,arguments);return C._pc=this,C}),A.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function pV(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpReceiver.prototype)return;const I=A.RTCPeerConnection.prototype.getReceivers;I&&(A.RTCPeerConnection.prototype.getReceivers=function(){const g=I.apply(this,[]);return g.forEach(C=>C._pc=this),g}),ko(A,"track",g=>(g.receiver._pc=g.srcElement,g)),A.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function NV(A){A.RTCPeerConnection&&!("removeStream"in A.RTCPeerConnection.prototype)&&(A.RTCPeerConnection.prototype.removeStream=function(I){nR("removeStream","removeTrack"),this.getSenders().forEach(g=>{g.track&&I.getTracks().includes(g.track)&&this.removeTrack(g)})})}function ZV(A){A.DataChannel&&!A.RTCDataChannel&&(A.RTCDataChannel=A.DataChannel)}function KV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.addTransceiver;I&&(A.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let g=arguments[1]&&arguments[1].sendEncodings;g===void 0&&(g=[]),g=[...g];const C=g.length>0;C&&g.forEach(B=>{if("rid"in B&&!/^[a-z0-9]{0,16}$/i.test(B.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in B&&!(parseFloat(B.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in B&&!(parseFloat(B.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const Q=I.apply(this,arguments);if(C){const{sender:B}=Q,E=B.getParameters();(!("encodings"in E)||E.encodings.length===1&&Object.keys(E.encodings[0]).length===0)&&(E.encodings=g,B.sendEncodings=g,this.setParametersPromises.push(B.setParameters(E).then(()=>{delete B.sendEncodings}).catch(()=>{delete B.sendEncodings})))}return Q})}function JV(A){if(typeof A!="object"||!A.RTCRtpSender)return;const I=A.RTCRtpSender.prototype.getParameters;I&&(A.RTCRtpSender.prototype.getParameters=function(){const g=I.apply(this,arguments);return"encodings"in g||(g.encodings=[].concat(this.sendEncodings||[{}])),g})}function WV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>I.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):I.apply(this,arguments)}}function VV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.createAnswer;A.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>I.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):I.apply(this,arguments)}}var RF=Object.freeze({__proto__:null,shimAddTransceiver:KV,shimCreateAnswer:VV,shimCreateOffer:WV,shimGetDisplayMedia:WaA,shimGetParameters:JV,shimGetUserMedia:FV,shimOnTrack:YV,shimPeerConnection:mw,shimRTCDataChannel:ZV,shimReceiverGetStats:pV,shimRemoveStream:NV,shimSenderGetStats:kV});function zV(A){if(typeof A=="object"&&A.RTCPeerConnection){if("getLocalStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in A.RTCPeerConnection.prototype)){const I=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addStream=function(g){this._localStreams||(this._localStreams=[]),this._localStreams.includes(g)||this._localStreams.push(g),g.getAudioTracks().forEach(C=>I.call(this,C,g)),g.getVideoTracks().forEach(C=>I.call(this,C,g))},A.RTCPeerConnection.prototype.addTrack=function(g){for(var C=arguments.length,Q=new Array(C>1?C-1:0),B=1;B{this._localStreams?this._localStreams.includes(E)||this._localStreams.push(E):this._localStreams=[E]}),I.apply(this,arguments)}}"removeStream"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.removeStream=function(I){this._localStreams||(this._localStreams=[]);const g=this._localStreams.indexOf(I);if(g===-1)return;this._localStreams.splice(g,1);const C=I.getTracks();this.getSenders().forEach(Q=>{C.includes(Q.track)&&this.removeTrack(Q)})})}}function MV(A){if(typeof A=="object"&&A.RTCPeerConnection&&("getRemoteStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in A.RTCPeerConnection.prototype))){Object.defineProperty(A.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(g){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=g),this.addEventListener("track",this._onaddstreampoly=C=>{C.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const B=new Event("addstream");B.stream=Q,this.dispatchEvent(B)})})}});const I=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){const g=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(C){C.streams.forEach(Q=>{if(g._remoteStreams||(g._remoteStreams=[]),g._remoteStreams.indexOf(Q)>=0)return;g._remoteStreams.push(Q);const B=new Event("addstream");B.stream=Q,g.dispatchEvent(B)})}),I.apply(g,arguments)}}}function XV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype,g=I.createOffer,C=I.createAnswer,Q=I.setLocalDescription,B=I.setRemoteDescription,E=I.addIceCandidate;I.createOffer=function(e,o){const t=arguments.length>=2?arguments[2]:arguments[0],s=g.apply(this,[t]);return o?(s.then(e,o),Promise.resolve()):s},I.createAnswer=function(e,o){const t=arguments.length>=2?arguments[2]:arguments[0],s=C.apply(this,[t]);return o?(s.then(e,o),Promise.resolve()):s};let i=function(e,o,t){const s=Q.apply(this,[e]);return t?(s.then(o,t),Promise.resolve()):s};I.setLocalDescription=i,i=function(e,o,t){const s=B.apply(this,[e]);return t?(s.then(o,t),Promise.resolve()):s},I.setRemoteDescription=i,i=function(e,o,t){const s=E.apply(this,[e]);return t?(s.then(o,t),Promise.resolve()):s},I.addIceCandidate=i}function jV(A){const I=A&&A.navigator;if(I.mediaDevices&&I.mediaDevices.getUserMedia){const g=I.mediaDevices,C=g.getUserMedia.bind(g);I.mediaDevices.getUserMedia=Q=>C(fV(Q))}!I.getUserMedia&&I.mediaDevices&&I.mediaDevices.getUserMedia&&(I.getUserMedia=(function(g,C,Q){I.mediaDevices.getUserMedia(g).then(C,Q)}).bind(I))}function fV(A){return A&&A.video!==void 0?Object.assign({},A,{video:bV(A.video)}):A}function HV(A){if(!A.RTCPeerConnection)return;const I=A.RTCPeerConnection;A.RTCPeerConnection=function(g,C){if(g&&g.iceServers){const Q=[];for(let B=0;BI.generateCertificate})}function xV(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function OV(A){const I=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(g){if(g){g.offerToReceiveAudio!==void 0&&(g.offerToReceiveAudio=!!g.offerToReceiveAudio);const C=this.getTransceivers().find(B=>B.receiver.track.kind==="audio");g.offerToReceiveAudio===!1&&C?C.direction==="sendrecv"?C.setDirection?C.setDirection("sendonly"):C.direction="sendonly":C.direction==="recvonly"&&(C.setDirection?C.setDirection("inactive"):C.direction="inactive"):g.offerToReceiveAudio!==!0||C||this.addTransceiver("audio",{direction:"recvonly"}),g.offerToReceiveVideo!==void 0&&(g.offerToReceiveVideo=!!g.offerToReceiveVideo);const Q=this.getTransceivers().find(B=>B.receiver.track.kind==="video");g.offerToReceiveVideo===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):g.offerToReceiveVideo!==!0||Q||this.addTransceiver("video",{direction:"recvonly"})}return I.apply(this,arguments)}}function qV(A){typeof A!="object"||A.AudioContext||(A.AudioContext=A.webkitAudioContext)}var LF=Object.freeze({__proto__:null,shimAudioContext:qV,shimCallbacksAPI:XV,shimConstraints:fV,shimCreateOfferLegacy:OV,shimGetUserMedia:jV,shimLocalStreamsAPI:zV,shimRTCIceServerUrls:HV,shimRemoteStreamsAPI:MV,shimTrackEventTransceiver:xV}),_V={exports:{}};(function(A){const I={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};I.localCName=I.generateIdentifier(),I.splitLines=function(g){return RE(g).call(g).split(` -`).map(C=>RE(C).call(C))},I.splitSections=function(g){return g.split(` -m=`).map((C,Q)=>{var B;return RE(B=Q>0?"m="+C:C).call(B)+`\r -`})},I.getDescription=function(g){const C=I.splitSections(g);return C&&C[0]},I.getMediaSections=function(g){const C=I.splitSections(g);return C.shift(),C},I.matchPrefix=function(g,C){return I.splitLines(g).filter(Q=>Q.indexOf(C)===0)},I.parseCandidate=function(g){let C;C=g.indexOf("a=candidate:")===0?g.substring(12).split(" "):g.substring(10).split(" ");const Q={foundation:C[0],component:{1:"rtp",2:"rtcp"}[C[1]]||C[1],protocol:C[2].toLowerCase(),priority:parseInt(C[3],10),ip:C[4],address:C[4],port:parseInt(C[5],10),type:C[7]};for(let B=8;B0?C[0].split("/")[1]:"sendrecv",uri:C[1],attributes:C.slice(2).join(" ")}},I.writeExtmap=function(g){return"a=extmap:"+(g.id||g.preferredId)+(g.direction&&g.direction!=="sendrecv"?"/"+g.direction:"")+" "+g.uri+(g.attributes?" "+g.attributes:"")+`\r -`},I.parseFmtp=function(g){const C={};let Q;const B=g.substring(g.indexOf(" ")+1).split(";");for(let e=0;e{g.parameters[E]!==void 0?B.push(E+"="+g.parameters[E]):B.push(E)}),C+="a=fmtp:"+Q+" "+B.join(";")+`\r -`}return C},I.parseRtcpFb=function(g){const C=g.substring(g.indexOf(" ")+1).split(" ");return{type:C.shift(),parameter:C.join(" ")}},I.writeRtcpFb=function(g){let C="",Q=g.payloadType;return g.preferredPayloadType!==void 0&&(Q=g.preferredPayloadType),g.rtcpFeedback&&g.rtcpFeedback.length&&g.rtcpFeedback.forEach(B=>{C+="a=rtcp-fb:"+Q+" "+B.type+(B.parameter&&B.parameter.length?" "+B.parameter:"")+`\r -`}),C},I.parseSsrcMedia=function(g){const C=g.indexOf(" "),Q={ssrc:parseInt(g.substring(7,C),10)},B=g.indexOf(":",C);return B>-1?(Q.attribute=g.substring(C+1,B),Q.value=g.substring(B+1)):Q.attribute=g.substring(C+1),Q},I.parseSsrcGroup=function(g){const C=g.substring(13).split(" ");return{semantics:C.shift(),ssrcs:C.map(Q=>parseInt(Q,10))}},I.getMid=function(g){const C=I.matchPrefix(g,"a=mid:")[0];if(C)return C.substring(6)},I.parseFingerprint=function(g){const C=g.substring(14).split(" ");return{algorithm:C[0].toLowerCase(),value:C[1].toUpperCase()}},I.getDtlsParameters=function(g,C){return{role:"auto",fingerprints:I.matchPrefix(g+C,"a=fingerprint:").map(I.parseFingerprint)}},I.writeDtlsParameters=function(g,C){let Q="a=setup:"+C+`\r -`;return g.fingerprints.forEach(B=>{Q+="a=fingerprint:"+B.algorithm+" "+B.value+`\r -`}),Q},I.parseCryptoLine=function(g){const C=g.substring(9).split(" ");return{tag:parseInt(C[0],10),cryptoSuite:C[1],keyParams:C[2],sessionParams:C.slice(3)}},I.writeCryptoLine=function(g){return"a=crypto:"+g.tag+" "+g.cryptoSuite+" "+(typeof g.keyParams=="object"?I.writeCryptoKeyParams(g.keyParams):g.keyParams)+(g.sessionParams?" "+g.sessionParams.join(" "):"")+`\r -`},I.parseCryptoKeyParams=function(g){if(g.indexOf("inline:")!==0)return null;const C=g.substring(7).split("|");return{keyMethod:"inline",keySalt:C[0],lifeTime:C[1],mkiValue:C[2]?C[2].split(":")[0]:void 0,mkiLength:C[2]?C[2].split(":")[1]:void 0}},I.writeCryptoKeyParams=function(g){return g.keyMethod+":"+g.keySalt+(g.lifeTime?"|"+g.lifeTime:"")+(g.mkiValue&&g.mkiLength?"|"+g.mkiValue+":"+g.mkiLength:"")},I.getCryptoParameters=function(g,C){return I.matchPrefix(g+C,"a=crypto:").map(I.parseCryptoLine)},I.getIceParameters=function(g,C){const Q=I.matchPrefix(g+C,"a=ice-ufrag:")[0],B=I.matchPrefix(g+C,"a=ice-pwd:")[0];return Q&&B?{usernameFragment:Q.substring(12),password:B.substring(10)}:null},I.writeIceParameters=function(g){let C="a=ice-ufrag:"+g.usernameFragment+`\r -a=ice-pwd:`+g.password+`\r -`;return g.iceLite&&(C+=`a=ice-lite\r -`),C},I.parseRtpParameters=function(g){const C={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},Q=I.splitLines(g)[0].split(" ");C.profile=Q[2];for(let E=3;E{C.headerExtensions.push(I.parseExtmap(E))});const B=I.matchPrefix(g,"a=rtcp-fb:* ").map(I.parseRtcpFb);return C.codecs.forEach(E=>{B.forEach(i=>{E.rtcpFeedback.find(e=>e.type===i.type&&e.parameter===i.parameter)||E.rtcpFeedback.push(i)})}),C},I.writeRtpDescription=function(g,C){let Q="";Q+="m="+g+" ",Q+=C.codecs.length>0?"9":"0",Q+=" "+(C.profile||"UDP/TLS/RTP/SAVPF")+" ",Q+=C.codecs.map(E=>E.preferredPayloadType!==void 0?E.preferredPayloadType:E.payloadType).join(" ")+`\r -`,Q+=`c=IN IP4 0.0.0.0\r -`,Q+=`a=rtcp:9 IN IP4 0.0.0.0\r -`,C.codecs.forEach(E=>{Q+=I.writeRtpMap(E),Q+=I.writeFmtp(E),Q+=I.writeRtcpFb(E)});let B=0;return C.codecs.forEach(E=>{E.maxptime>B&&(B=E.maxptime)}),B>0&&(Q+="a=maxptime:"+B+`\r -`),C.headerExtensions&&C.headerExtensions.forEach(E=>{Q+=I.writeExtmap(E)}),Q},I.parseRtpEncodingParameters=function(g){const C=[],Q=I.parseRtpParameters(g),B=Q.fecMechanisms.indexOf("RED")!==-1,E=Q.fecMechanisms.indexOf("ULPFEC")!==-1,i=I.matchPrefix(g,"a=ssrc:").map(v=>I.parseSsrcMedia(v)).filter(v=>v.attribute==="cname"),e=i.length>0&&i[0].ssrc;let o;const t=I.matchPrefix(g,"a=ssrc-group:FID").map(v=>v.substring(17).split(" ").map(r=>parseInt(r,10)));t.length>0&&t[0].length>1&&t[0][0]===e&&(o=t[0][1]),Q.codecs.forEach(v=>{if(v.name.toUpperCase()==="RTX"&&v.parameters.apt){let r={ssrc:e,codecPayloadType:parseInt(v.parameters.apt,10)};e&&o&&(r.rtx={ssrc:o}),C.push(r),B&&(r=JSON.parse(JSON.stringify(r)),r.fec={ssrc:e,mechanism:E?"red+ulpfec":"red"},C.push(r))}}),C.length===0&&e&&C.push({ssrc:e});let s=I.matchPrefix(g,"b=");return s.length&&(s=s[0].indexOf("b=TIAS:")===0?parseInt(s[0].substring(7),10):s[0].indexOf("b=AS:")===0?1e3*parseInt(s[0].substring(5),10)*.95-16e3:void 0,C.forEach(v=>{v.maxBitrate=s})),C},I.parseRtcpParameters=function(g){const C={},Q=I.matchPrefix(g,"a=ssrc:").map(i=>I.parseSsrcMedia(i)).filter(i=>i.attribute==="cname")[0];Q&&(C.cname=Q.value,C.ssrc=Q.ssrc);const B=I.matchPrefix(g,"a=rtcp-rsize");C.reducedSize=B.length>0,C.compound=B.length===0;const E=I.matchPrefix(g,"a=rtcp-mux");return C.mux=E.length>0,C},I.writeRtcpParameters=function(g){let C="";return g.reducedSize&&(C+=`a=rtcp-rsize\r -`),g.mux&&(C+=`a=rtcp-mux\r -`),g.ssrc!==void 0&&g.cname&&(C+="a=ssrc:"+g.ssrc+" cname:"+g.cname+`\r -`),C},I.parseMsid=function(g){let C;const Q=I.matchPrefix(g,"a=msid:");if(Q.length===1)return C=Q[0].substring(7).split(" "),{stream:C[0],track:C[1]};const B=I.matchPrefix(g,"a=ssrc:").map(E=>I.parseSsrcMedia(E)).filter(E=>E.attribute==="msid");return B.length>0?(C=B[0].value.split(" "),{stream:C[0],track:C[1]}):void 0},I.parseSctpDescription=function(g){const C=I.parseMLine(g),Q=I.matchPrefix(g,"a=max-message-size:");let B;Q.length>0&&(B=parseInt(Q[0].substring(19),10)),isNaN(B)&&(B=65536);const E=I.matchPrefix(g,"a=sctp-port:");if(E.length>0)return{port:parseInt(E[0].substring(12),10),protocol:C.fmt,maxMessageSize:B};const i=I.matchPrefix(g,"a=sctpmap:");if(i.length>0){const e=i[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:B}}},I.writeSctpDescription=function(g,C){let Q=[];return Q=g.protocol!=="DTLS/SCTP"?["m="+g.kind+" 9 "+g.protocol+" "+C.protocol+`\r -`,`c=IN IP4 0.0.0.0\r -`,"a=sctp-port:"+C.port+`\r -`]:["m="+g.kind+" 9 "+g.protocol+" "+C.port+`\r -`,`c=IN IP4 0.0.0.0\r -`,"a=sctpmap:"+C.port+" "+C.protocol+` 65535\r -`],C.maxMessageSize!==void 0&&Q.push("a=max-message-size:"+C.maxMessageSize+`\r -`),Q.join("")},I.generateSessionId=function(){return Math.random().toString().substr(2,22)},I.writeSessionBoilerplate=function(g,C,Q){let B;const E=C!==void 0?C:2;return B=g||I.generateSessionId(),`v=0\r -o=`+(Q||"thisisadapterortc")+" "+B+" "+E+` IN IP4 127.0.0.1\r -s=-\r -t=0 0\r -`},I.getDirection=function(g,C){const Q=I.splitLines(g);for(let B=0;B(g.candidate&&Object.defineProperty(g,"candidate",{value:new A.RTCIceCandidate(g.candidate),writable:"false"}),g))}function Gw(A){!A.RTCIceCandidate||A.RTCIceCandidate&&"relayProtocol"in A.RTCIceCandidate.prototype||ko(A,"icecandidate",I=>{if(I.candidate){const g=ys.parseCandidate(I.candidate.candidate);g.type==="relay"&&(I.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[g.priority>>24])}return I})}function El(A,I){if(!A.RTCPeerConnection)return;"sctp"in A.RTCPeerConnection.prototype||Object.defineProperty(A.RTCPeerConnection.prototype,"sctp",{get(){return this._sctp===void 0?null:this._sctp}});const g=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,I.browser==="chrome"&&I.version>=76){const{sdpSemantics:C}=this.getConfiguration();C==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return this._sctp===void 0?null:this._sctp},enumerable:!0,configurable:!0})}if(function(C){if(!C||!C.sdp)return!1;const Q=ys.splitSections(C.sdp);return Q.shift(),Q.some(B=>{const E=ys.parseMLine(B);return E&&E.kind==="application"&&E.protocol.indexOf("SCTP")!==-1})}(arguments[0])){const C=function(e){const o=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(o===null||o.length<2)return-1;const t=parseInt(o[1],10);return t!=t?-1:t}(arguments[0]),Q=function(e){let o=65536;return I.browser==="firefox"&&(o=I.version<57?e===-1?16384:2147483637:I.version<60?I.version===57?65535:65536:2147483637),o}(C),B=function(e,o){let t=65536;I.browser==="firefox"&&I.version===57&&(t=65535);const s=ys.matchPrefix(e.sdp,"a=max-message-size:");return s.length>0?t=parseInt(s[0].substring(19),10):I.browser==="firefox"&&o!==-1&&(t=2147483637),t}(arguments[0],C);let E;E=Q===0&&B===0?Number.POSITIVE_INFINITY:Q===0||B===0?Math.max(Q,B):Math.min(Q,B);const i={};Object.defineProperty(i,"maxMessageSize",{get:()=>E}),this._sctp=i}return g.apply(this,arguments)}}function il(A){if(!A.RTCPeerConnection||!("createDataChannel"in A.RTCPeerConnection.prototype))return;function I(C,Q){const B=C.send;C.send=function(){return B.apply(C,arguments)}}const g=A.RTCPeerConnection.prototype.createDataChannel;A.RTCPeerConnection.prototype.createDataChannel=function(){const C=g.apply(this,arguments);return I(C),C},ko(A,"datachannel",C=>(I(C.channel,C.target),C))}function Rw(A){if(!A.RTCPeerConnection||"connectionState"in A.RTCPeerConnection.prototype)return;const I=A.RTCPeerConnection.prototype;Object.defineProperty(I,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(I,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(g){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),g&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=g)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(g=>{const C=I[g];I[g]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const B=Q.target;if(B._lastConnectionState!==B.connectionState){B._lastConnectionState=B.connectionState;const E=new Event("connectionstatechange",Q);B.dispatchEvent(E)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),C.apply(this,arguments)}})}function Lw(A,I){if(!A.RTCPeerConnection||I.browser==="chrome"&&I.version>=71||I.browser==="safari"&&I.version>=605)return;const g=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(C){if(C&&C.sdp&&C.sdp.indexOf(` -a=extmap-allow-mixed`)!==-1){const Q=C.sdp.split(` -`).filter(B=>RE(B).call(B)!=="a=extmap-allow-mixed").join(` -`);A.RTCSessionDescription&&C instanceof A.RTCSessionDescription?arguments[0]=new A.RTCSessionDescription({type:C.type,sdp:Q}):C.sdp=Q}return g.apply(this,arguments)}}function el(A,I){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const g=A.RTCPeerConnection.prototype.addIceCandidate;g&&g.length!==0&&(A.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(I.browser==="chrome"&&I.version<78||I.browser==="firefox"&&I.version<68||I.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():g.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function ol(A,I){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const g=A.RTCPeerConnection.prototype.setLocalDescription;g&&g.length!==0&&(A.RTCPeerConnection.prototype.setLocalDescription=function(){let C=arguments[0]||{};if(typeof C!="object"||C.type&&C.sdp)return g.apply(this,arguments);if(C={type:C.type,sdp:C.sdp},!C.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":C.type="offer";break;default:C.type="answer"}return C.sdp||C.type!=="offer"&&C.type!=="answer"?g.apply(this,[C]):(C.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(Q=>g.apply(this,[Q]))})}var zaA=Object.freeze({__proto__:null,removeExtmapAllowMixed:Lw,shimAddIceCandidateNullOrEmpty:el,shimConnectionState:Rw,shimMaxMessageSize:El,shimParameterlessSetLocalDescription:ol,shimRTCIceCandidate:Bl,shimRTCIceCandidateRelayProtocol:Gw,shimSendThrowTypeError:il});function MaA(){let{window:A}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const g=uV,C=KaA(A),Q={browserDetails:C,commonShim:zaA,extractVersion:Ql,disableLog:NaA,disableWarnings:ZaA,sdp:VaA};switch(C.browser){case"chrome":if(!GF||!ww||!I.shimChrome)return g("Chrome shim is not included in this adapter release."),Q;if(C.version===null)return g("Chrome shim can not determine version, not shimming."),Q;g("adapter.js shimming chrome."),Q.browserShim=GF,el(A,C),ol(A),yV(A,C),wV(A),ww(A,C),mV(A),TV(A,C),GV(A),RV(A),LV(A),UV(A,C),Bl(A),Gw(A),Rw(A),El(A,C),il(A),Lw(A,C);break;case"firefox":if(!RF||!mw||!I.shimFirefox)return g("Firefox shim is not included in this adapter release."),Q;g("adapter.js shimming firefox."),Q.browserShim=RF,el(A,C),ol(A),FV(A,C),mw(A,C),YV(A),NV(A),kV(A),pV(A),ZV(A),KV(A),JV(A),WV(A),VV(A),Bl(A),Rw(A),El(A,C),il(A);break;case"safari":if(!LF||!I.shimSafari)return g("Safari shim is not included in this adapter release."),Q;g("adapter.js shimming safari."),Q.browserShim=LF,el(A,C),ol(A),HV(A),OV(A),XV(A),zV(A),MV(A),xV(A),jV(A),qV(A),Bl(A),Gw(A),El(A,C),il(A),Lw(A,C);break;default:g("Unsupported browser!")}return Q}if(MaA({window:typeof window>"u"?void 0:window}),typeof MediaStreamTrack<"u"){const A=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){const I=A.call(this);return I.width&&(I.width=Math.floor(I.width)),I.height&&(I.height=Math.floor(I.height)),I.frameRate&&(I.frameRate=Math.floor(I.frameRate)),I}}var SF=ov,XaA=TypeError,jaA=function(A,I){if(!delete A[I])throw new XaA("Cannot delete property "+SF(I)+" of "+SF(A))},TF=rv,faA=Math.floor,Sw=function(A,I){var g=A.length;if(g<8)for(var C,Q,B=1;B0;)A[Q]=A[--Q];Q!==B++&&(A[Q]=C)}else for(var E=faA(g/2),i=Sw(TF(A,0,E),I),e=Sw(TF(A,E),I),o=i.length,t=e.length,s=0,v=0;s3)){if(EPA)return!0;if(ZF)return ZF<603;var A,I,g,C,Q="";for(A=65;A<76;A++){switch(I=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:g=3;break;case 68:case 71:g=4;break;default:g=2}for(C=0;C<47;C++)Fi.push({k:I+C,v:g})}for(Fi.sort(function(B,E){return E.v-B.v}),C=0;CkF(g)?1:-1}};APA({target:"Array",proto:!0,forced:sPA},{sort:function(A){A!==void 0&&IPA(A);var I=gPA(this);if(gz)return A===void 0?KF(I):KF(I,A);var g,C,Q=[],B=YF(I);for(C=0;C1?C-1:0),B=1;B1?g-1:0),Q=1;Q{try{super.emit(I,...C)}catch(B){JF.error("safeEmit","safeEmit() | event listener threw an error [event:%s]:%o",I,B),console.error(B)}})}}var Tw=(A=>(A[A.BLACK=0]="BLACK",A[A.NORMAL=1]="NORMAL",A))(Tw||{}),Uw=(A=>(A.streamRemovedBySchedule308="stream removed",A.clientRePublish="client republish",A.publishStreamFaied="publish failed",A.clientUnPublish="client unpublished",A.clientDisconnected="client disconnected",A.videoMuted="video muted",A))(Uw||{}),Qz=(A=>(A.PushLimitWarn="PushLimitWarn",A.OTHER="OTHER",A))(Qz||{}),Bz=(A=>(A.CHANGE_CODEC="changeCodec",A))(Bz||{}),x=(A=>(A.ON_ADD_STREAM="onAddStream",A.ON_ADD_STREAM_LIST="onAddStreamList",A.ON_REMOVE_STREAM="onRemoveStream",A.ON_REMOVE_STREAM_LIST="onRemoveStreamList",A.USER_DISCONNECTION="userDisconnection",A.USER_DISCONNECTION_LIST="userDisconnectionList",A.USER_CONNECTION="userConnection",A.USER_CONNECTION_LIST="userConnectionList",A.ON_UPDATE_STREAM_ATTRIBUTES="onUpdateStreamAttributes",A.ON_UPDATE_ROOM_ATTRIBUTES="onUpdateRoomAttributes",A.ON_UPDATE_USER_ATTRIBUTES="onUpdateUserAttributes",A.ON_PUSH_TRACK="onPushTrack",A.ON_REMOVE_TRACK="onRemoveTrack",A.ON_CUSTOM_MESSAGE="onCustomMessage",A.NODE_CHANGE="nodeChange",A.USER_MESSAGE_RECEIVED="userMessageReceived",A.USER_BINARY_MESSAGE_RECEIVED="userBinaryMessageReceived",A.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM="userMessageReceivedOutsideRoom",A.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM="userBinaryMessageReceivedOutsideRoom",A.POST_PROCESSING_MESSAGE="postProcessingMessage",A.ON_USER_TOKEN_WILL_EXPIRE="onUserTokenWillExpire",A.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE="onTokenPublishPrivilegeWillExpire",A.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED="onTokenPublishPrivilegeDidExpired",A.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE="onTokenSubscribePrivilegeWillExpire",A.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED="onTokenSubscribePrivilegeDidExpired",A.STREAM_CONTROL_MESSAGE="streamControlMessage",A.ON_SPEAKER_CHANGE="onSpeakerChange",A.ON_STREAM_FAILED="streamFailed",A.ON_NOTIFY_RECONNECT="notifyReconnect",A.ON_FORWARD_DST_ROOM_USER_KICK="onForwardDstRoomUserKick",A.ENGINE_CONTROL_MESSAGE="engineControlMessage",A.ON_STREAM_PUSHED_BY_OTHER="onStreamPushedByOther",A.ON_STREAM_PULL_STATE_CHANGED="onStreamPullStateChanged",A))(x||{}),TE=(A=>(A.RSCP="RSCP",A.RTT="RTT",A.SSC="SSC",A))(TE||{}),HI=(A=>(A.ON_CONNECTION_STATE_CHANGE="onConnectionStateChange",A.ON_VENDOR_CONNECTION_STATE_CHANGE="onVendorConnectionStateChange",A.ABNORMAL_DISCONNECTION="normalConnection",A.ON_RECONNECT_FAILED="onReconnectFailed",A.CONNECT_WITH_TCP="onIceConnectWithTcp",A))(HI||{}),ai=(A=>(A.userLeave="userLeave",A.connectionLost="connectionLost",A.userDuplicateLogin="userDuplicateLogin",A.kickedByAdmin="kickedByAdmin",A.roleChanged="roleChanged",A.onUserTokenDidExpire="onUserTokenDidExpire",A))(ai||{}),Ez=(A=>(A[A.roomDismissByAdmin=2]="roomDismissByAdmin",A))(Ez||{}),Qo=(A=>(A[A.LIMIT_MODE=1]="LIMIT_MODE",A[A.NORMAL_MODE=2]="NORMAL_MODE",A))(Qo||{}),eC=(A=>(A[A.NORMAL=0]="NORMAL",A[A.BLACK=1]="BLACK",A))(eC||{}),oI=(A=>(A[A.EXTERNAL=0]="EXTERNAL",A[A.INTERNAL=1]="INTERNAL",A))(oI||{}),Vs=(A=>(A.AUDIO="audio",A.VIDEO="video",A))(Vs||{}),LI=(A=>(A.MAIN="main",A.SCREEN="screen",A.PUBLIC="public",A.VIRTUAL="virtual",A))(LI||{});class iz extends iQ{constructor(I,g,C){super(),P(this,"trackId",KE()),P(this,"_logger",void 0),P(this,"trackInfo",void 0),P(this,"_originTrack",void 0),P(this,"_channelCount",void 0),this._ctx=I,this._logger=new uA("Track",4,I.id),this.trackInfo=C,this._originTrack=g,this._channelCount=g.getSettings().channelCount}get dummy(){return this.trackInfo.isDummy}get virtual(){return this.trackInfo.streamIndex==="virtual"}get isScreen(){return this.trackInfo.streamIndex==="screen"}get isPublic(){return this.trackInfo.streamIndex==="public"}get sourceType(){return this.trackInfo.sourceType}get mediaType(){return this.trackInfo.mediaType}get captureSessionId(){return this.trackInfo.captureSessionId}get streamIndex(){const{streamIndex:I}=this.trackInfo;return I==="main"?F.STREAM_INDEX_MAIN:I==="screen"?F.STREAM_INDEX_SCREEN:void 0}get channelCount(){var I;return(I=this._channelCount)!==null&&I!==void 0?I:0}get originTrack(){return this._originTrack}set originTrack(I){this._originTrack=I,this._channelCount=mediaTrack.getSettings().channelCount}get logger(){return this._logger.module=this.constructor.name,this._logger}destroy(){this._originTrack.stop()}}class ez extends iz{constructor(I,g,C){super(I,g,C),P(this,"_mediaTrack",void 0),P(this,"_preProcessingTrack",void 0),P(this,"isTrackReady",void 0),P(this,"handleTrackEnded",()=>{this.emit("track-ended",this),this.destroy()}),P(this,"handleMute",()=>{this.emit("track-mute",this)}),P(this,"handleUnmute",()=>{this.emit("track-unmute",this)}),this._initListeners(),this.isTrackReady=this.generatePreProcessingTrack()}get mediaTrack(){var I;return(I=this._mediaTrack)!==null&&I!==void 0?I:this._originTrack}set mediaTrack(I){this.mediaTrack.id!==I.id&&(this._mediaTrack=I,this.isTrackReady=this.generatePreProcessingTrack())}get preprocessingTrack(){var I;return(I=this._preProcessingTrack)!==null&&I!==void 0?I:this.mediaTrack}async generatePreProcessingTrack(){var I;const g=(I=this._preProcessingTrack)===null||I===void 0?void 0:I.id;this._preProcessingTrack=void 0;try{const C=await this._ctx.extensionManager.getPreProcessingTrack(this);C instanceof MediaStreamTrack&&(this._preProcessingTrack=C,g!==this._preProcessingTrack.id&&setTimeout(()=>{this.emit("needReplaceTrack")}))}catch(C){console.error(C)}}destroy(){var I,g;this._originTrack.removeEventListener("ended",this.handleTrackEnded),this._originTrack.removeEventListener("mute",this.handleMute),this._originTrack.removeEventListener("unmute",this.handleUnmute),(I=this._preProcessingTrack)===null||I===void 0||I.stop(),(g=this._mediaTrack)===null||g===void 0||g.stop(),super.destroy()}_initListeners(){this._originTrack instanceof MediaStreamTrack&&(this._originTrack.addEventListener("ended",this.handleTrackEnded),this._originTrack.addEventListener("mute",this.handleMute),this._originTrack.addEventListener("unmute",this.handleUnmute))}}class oz extends iz{constructor(I,g,C){super(I,g,C),P(this,"_mediaTrack",void 0),this._originTrack=g}get mediaTrack(){var I;return(I=this._mediaTrack)!==null&&I!==void 0?I:this._originTrack}set mediaTrack(I){this.mediaTrack.id!==I.id&&(this._mediaTrack=I)}get preprocessingTrack(){return this.mediaTrack}}var GPA=yA,GD=QI;GPA({global:!0,forced:GD.globalThis!==GD},{globalThis:GD});var RPA=QI,LPA=RPA,SPA=LPA,TPA=SPA,UPA=TPA,FPA=UPA,YPA=FPA,kPA=YPA,pPA=kPA,WF=CI(pPA),bI=(A=>(A.H264="H264",A.VP8="VP8",A.ByteVC1="ByteVC1",A))(bI||{});const NPA=async()=>{try{return!(lI()||!window.RTCPeerConnection||!window.RTCPeerConnection.prototype.addTransceiver||!window.RTCPeerConnection.prototype.createDataChannel)&&await vz()&&await sz()}catch{return!1}},qa=async()=>{const A=[];return await VPA()&&await WPA()&&A.push(bI.ByteVC1),await vz()&&await sz()&&A.push(bI.H264),await JPA()&&await KPA()&&A.push(bI.VP8),A},ZPA=async()=>(await qa()).map(A=>A===bI.ByteVC1?"H265":A.toUpperCase()),Cg={};function tz(A){const I=A.split(` -`);let g=!1;for(const C of I)if(C.includes("level-asymmetry-allowed=1")&&C.includes("packetization-mode=1")&&C.includes("profile-level-id=42e0")){g=!0;break}if(g){const C=navigator.userAgent.toLowerCase();let Q=!1;const B=[/miuibrowser/,/70.*HeyTapBrowser/i];for(const E of B)E.test(C)&&(Q=!0);return!Q}return!1}const a9=async A=>{const I=new RTCPeerConnection({sdpSemantics:"unified-plan"});I.addTransceiver("video",{direction:A});const g=await I.createOffer();return I.close(),g.sdp.toLowerCase()},dR=async()=>{let A=await a9("sendonly");return navigator.userAgent.includes("VivoBrowser")&&(A=await a9("sendonly")),Cg.h264encode=tz(A),Cg.vp8encode=A.indexOf("vp8")>-1,Cg.h265encode=A.indexOf("h265")>-1,Cg},hR=async()=>{let A=await a9("recvonly");return navigator.userAgent.includes("VivoBrowser")&&(A=await a9("recvonly")),Cg.h264decode=tz(A),Cg.vp8decode=A.indexOf("vp8")>-1,Cg.h265decode=A.indexOf("h265")>-1,Cg},sz=async()=>{if(Cg.h264encode===void 0)try{await dR()}catch{return!1}return Cg.h264encode||!1},vz=async()=>{if(Cg.h264decode===void 0)try{await hR()}catch{return!1}return Cg.h264decode||!1},KPA=async()=>{if(Cg.vp8encode===void 0)try{await dR()}catch{return!1}return Cg.vp8encode||!1},JPA=async()=>{if(Cg.vp8decode===void 0)try{await hR()}catch{return!1}return Cg.vp8decode||!1},WPA=async()=>{if(Cg.h265encode===void 0)try{await dR()}catch{return!1}return Cg.h265encode||!1},VPA=async()=>{if(Cg.h265decode===void 0)try{await hR()}catch{return!1}return Cg.h265decode||!1},hv=()=>typeof TransformStream<"u"&&typeof RTCRtpSender<"u"&&typeof RTCRtpReceiver<"u"&&typeof RTCRtpScriptTransform<"u"&&"transform"in RTCRtpSender.prototype&&"transform"in RTCRtpReceiver.prototype&&Pz()&&HPA(),JE=()=>typeof TransformStream<"u"&&typeof RTCRtpSender<"u"&&typeof RTCRtpReceiver<"u"&&RTCRtpSender.prototype.createEncodedStreams!==void 0&&RTCRtpReceiver.prototype.createEncodedStreams!==void 0,rz=()=>OrA?xi&&YQ>=70||mI&&r9>=80||CQ&&mP>=14:qrA?xi&&YQ>=70||mI&&r9>=80:Yo?Js[0]>=14:!(!EE&&!_rA)&&xi&&YQ>=86,az=xi&&YQ<=114,Fw=!mI||r9>=96,UE=!(CQ&&mP<=14),zPA=EE&&xi||Yo&&Js[0]>=16,MPA=()=>!mI&&!xrA&&(Js==null?void 0:Js[0])!==14,XPA=WF!==void 0&&"PressureObserver"in WF,Pz=()=>typeof window<"u"&&window.Worker,jPA=CQ&&mP<=14,fPA=!jPA,HPA=()=>typeof MessageChannel<"u";var cz=(A=>(A[A.internal=0]="internal",A[A.external=1]="external",A[A.bypass=2]="bypass",A))(cz||{});const Kc=new Uint8Array([109,167,53,190,103,90,72,1,170,89,63,164,194,199,19,85]),Bi=new Uint8Array([109,167,53,190,103,90,72,1,170,89,63,164,194,199,19,84]),VF=new Uint8Array([31,239,3,50,242,120,76,85,169,42,161,91,75,186,22]),xPA=A=>{const I=[];let g=0;for(const C of A)g>=2&&C<=3&&(I.push(3),g=0),C===0?g++:g=0,I.push(C);return new Uint8Array(I)},OPA=A=>{const I=[];for(let g=0;g=255;)A-=255,I.push(255);return I.push(A),new Uint8Array(I)}function LD(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,g=0;for(;A[I]===255&&I2&&arguments[2]!==void 0&&arguments[2];const Q=new Uint8Array([0,0,0,1]),B=g?qPA:new Uint8Array([6]),E=new Uint8Array([5]),i=Dv.__uuid||(C?Kc:Bi),e=RD(I.byteLength+i.byteLength),o=xPA(I);return new Uint8Array([...Q,...B,...E,...e,...i,...o,128])}static decodeSEIBody(I,g){I=I.slice(0,I.length-1);const C=OPA(I);if(C.byteLength<2)return;let Q=0;const B=g?2:1;if(C[B]!==5&&C[B]!==100)return;Q+=1+B;const[E,i]=LD(C,Q);Q=i;let e=2;const o=Q+E;return C.byteLength>=Bi.byteLength&&E>=Bi.byteLength&&(C.slice(Q,Q+Bi.byteLength).toString()===Bi.toString()||C.slice(Q,Q+VF.byteLength).toString()===VF.toString())?(Q+=Bi.byteLength,e=1):C.byteLength>=Bi.byteLength&&E>=Bi.byteLength&&C.slice(Q,Q+Kc.byteLength).toString()===Kc.toString()&&(Q+=Kc.byteLength,e=0),{type:e,payload:C.slice(Q,o)}}static parseInternalSEI(I){const g=new Map;let C=0;if(I.type===0){for(;I.payload.byteLength-C>=2;){const[Q,B]=LD(I.payload,C);C=B;const[E,i]=LD(I.payload,C);if(C=i,g.get(Q)||!(E<=I.payload.byteLength-C))break;g.set(Q,I.payload.slice(C,C+E)),C+=E}return g}}static makeInternalSei(I){const g=[];for(const[B,E]of I){const i=RD(B),e=RD(E.byteLength);g.push(i,e,E)}const C=g.reduce((B,E)=>B+E.byteLength,0),Q=new Uint8Array(C);return g.reduce((B,E)=>(Q.set(E,B),B+E.byteLength),0),Q}}P(Dv,"__uuid",void 0);var _PA=yA,$PA=fA,AcA=AW,IcA=RangeError,zF=String.fromCharCode,MF=String.fromCodePoint,gcA=$PA([].join),CcA=!!MF&&MF.length!==1;_PA({target:"String",stat:!0,forced:CcA},{fromCodePoint:function(A){for(var I,g=[],C=arguments.length,Q=0;C>Q;){if(I=+arguments[Q++],AcA(I,1114111)!==I)throw new IcA(I+" is not a valid code point");g[Q]=I<65536?zF(I):zF(55296+((I-=65536)>>10),I%1024+56320)}return gcA(g,"")}});var XF=QI,QcA=Qg,BcA=Object.getOwnPropertyDescriptor,nz=function(A){if(!QcA)return XF[A];var I=BcA(XF,A);return I&&I.value},EcA=II,icA=vI,ecA=Qg,jF=JJ,ocA=icA("iterator"),W0=!EcA(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),I=A.searchParams,g=new URLSearchParams("a=1&a=2&b=3"),C="";return A.pathname="c%20d",I.forEach(function(Q,B){I.delete("b"),C+=B+Q}),g.delete("a",2),g.delete("b",void 0),jF&&(!A.toJSON||!g.has("a",1)||g.has("a",2)||!g.has("a",void 0)||g.has("b"))||!I.size&&(jF||!ecA)||!I.sort||A.href!=="https://a/c%20d?a=1&c=3"||I.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!I[ocA]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||C!=="a1c3"||new URL("https://x",void 0).host!=="x"}),tcA=se,scA=function(A,I,g){for(var C in I)g&&g.unsafe&&A[C]?A[C]=I[C]:tcA(A,C,I[C],g);return A},vcA=fg,rcA=TypeError,DR=function(A,I){if(vcA(I,A))return A;throw new rcA("Incorrect invocation")},acA=vv,fF=y0,PcA=aP,ccA=cv,ncA=vI,lcA=ncA("iterator"),V0=function(A){if(!PcA(A))return fF(A,lcA)||fF(A,"@@iterator")||ccA[acA(A)]},dcA=Bg,hcA=fQ,DcA=EQ,ucA=ov,bcA=V0,ycA=TypeError,uR=function(A,I){var g=arguments.length<2?bcA(A):I;if(hcA(g))return DcA(dcA(g,A));throw new ycA(ucA(A)+" is not iterable")},wcA=TypeError,GP=function(A,I){if(A0&&A&g;g>>=1)I++;return I},qcA=function(A){var I=null;switch(A.length){case 1:I=A[0];break;case 2:I=(31&A[0])<<6|63&A[1];break;case 3:I=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:I=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return I>1114111?null:I},QY=function(A){for(var I=(A=bz(A,HcA," ")).length,g="",C=0;CI){g+="%",C++;continue}var B=CY(A,C+1);if(B!=B){g+=Q,C++;continue}C+=2;var E=OcA(B);if(E===0)Q=zcA(B);else{if(E===1||E>4){g+=FD,C++;continue}for(var i=[B],e=1;eI||tl(A,C)!=="%");){var o=CY(A,C+1);if(o!=o){C+=3;break}if(o>191||o<128)break;Yi(i,o),C+=2,e++}if(i.length!==E){g+=FD;continue}var t=qcA(i);t===null?g+=FD:Q=McA(t)}}g+=Q,C++}return g},_cA=/[!'()~]|%20/g,$cA={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},AnA=function(A){return $cA[A]},BY=function(A){return bz(VcA(A),_cA,AnA)},YD=ScA(function(A,I){uz(this,{type:Dz,target:DQ(A).entries,index:0,kind:I})},zs,function(){var A=JcA(this),I=A.target,g=A.index++;if(!I||g>=I.length)return A.target=null,Wc(void 0,!0);var C=I[g];switch(A.kind){case"keys":return Wc(C.key,!1);case"values":return Wc(C.value,!1)}return Wc([C.key,C.value],!1)},!0),wz=function(A){this.entries=[],this.url=null,A!==void 0&&(hz(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?tl(A,0)==="?"?yz(A,1):A:IC(A)))};wz.prototype={type:zs,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var I,g,C,Q,B,E,i,e=this.entries,o=pcA(A);if(o)for(g=(I=qF(A,o)).next;!(C=Jc(g,I)).done;){if(B=(Q=qF(YcA(C.value))).next,(E=Jc(B,Q)).done||(i=Jc(B,Q)).done||!Jc(B,Q).done)throw new WcA("Expected sequence with length 2");Yi(e,{key:IC(E.value),value:IC(i.value)})}else for(var t in A)TcA(A,t)&&Yi(e,{key:t,value:IC(A[t])})},parseQuery:function(A){if(A)for(var I,g,C=this.entries,Q=gY(A,"&"),B=0;B0?arguments[0]:void 0));Zr||(this.size=A.entries.length)},Yt=c9.prototype;if(RcA(Yt,{append:function(A,I){var g=DQ(this);Bt(arguments.length,2),Yi(g.entries,{key:IC(A),value:IC(I)}),Zr||this.length++,g.updateURL()},delete:function(A){for(var I=DQ(this),g=Bt(arguments.length,1),C=I.entries,Q=IC(A),B=g<2?void 0:arguments[1],E=B===void 0?B:IC(B),i=0;ig.key?1:-1}),A.updateURL()},forEach:function(A){for(var I,g=DQ(this).entries,C=UcA(A,arguments.length>1?arguments[1]:void 0),Q=0;Q1?EY(arguments[1]):{})}}),TD(P9)){var kD=function(A){return dz(this,UD),new P9(A,arguments.length>1?EY(arguments[1]):{})};UD.constructor=kD,kD.prototype=UD,SD({global:!0,dontCallGetSet:!0,forced:!0},{Request:kD})}}var aQ,CnA={URLSearchParams:c9,getState:DQ},iY=Qg,QnA=fA,BnA=Bg,EnA=II,pD=L0,inA=dP,enA=b0,onA=HQ,tnA=JG,Et=Object.assign,eY=Object.defineProperty,snA=QnA([].concat),vnA=!Et||EnA(function(){if(iY&&Et({b:1},Et(eY({},"a",{enumerable:!0,get:function(){eY(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},I={},g=Symbol("assign detection"),C="abcdefghijklmnopqrst";return A[g]=7,C.split("").forEach(function(Q){I[Q]=Q}),Et({},A)[g]!==7||pD(Et({},I)).join("")!==C})?function(A,I){for(var g=onA(A),C=arguments.length,Q=1,B=inA.f,E=enA.f;C>Q;)for(var i,e=tnA(arguments[Q++]),o=B?snA(pD(e),B(e)):pD(e),t=o.length,s=0;t>s;)i=o[s++],iY&&!BnA(E,e,i)||(g[i]=e[i]);return g}:Et,rnA=Bg,oY=EQ,anA=y0,mz=function(A,I,g){var C,Q;oY(A);try{if(!(C=anA(A,"return"))){if(I==="throw")throw g;return g}C=rnA(C,A)}catch(B){Q=!0,C=B}if(I==="throw")throw g;if(Q)throw C;return oY(C),g},PnA=EQ,cnA=mz,nnA=function(A,I,g,C){try{return C?I(PnA(g)[0],g[1]):I(g)}catch(Q){cnA(A,"throw",Q)}},lnA=vI,dnA=cv,hnA=lnA("iterator"),DnA=Array.prototype,Gz=function(A){return A!==void 0&&(dnA.Array===A||DnA[hnA]===A)},unA=XE,bnA=Bg,ynA=HQ,wnA=nnA,mnA=Gz,GnA=HG,RnA=jE,tY=m0,LnA=uR,SnA=V0,sY=Array,TnA=function(A){var I=ynA(A),g=GnA(this),C=arguments.length,Q=C>1?arguments[1]:void 0,B=Q!==void 0;B&&(Q=unA(Q,C>2?arguments[2]:void 0));var E,i,e,o,t,s,v=SnA(I),r=0;if(!v||this===sY&&mnA(v))for(E=RnA(I),i=g?new this(E):sY(E);E>r;r++)s=B?Q(I[r],r):I[r],tY(i,r,s);else for(i=g?new this:[],t=(o=LnA(I,v)).next;!(e=bnA(t,o)).done;r++)s=B?wnA(o,Q,[e.value,r],!0):e.value,tY(i,r,s);return i.length=r,i},po=fA,ND=2147483647,ra=36,Rz=1,Yw=26,UnA=38,FnA=700,YnA=72,knA=128,pnA="-",NnA=/[^\0-\u007E]/,Lz=/[.\u3002\uFF0E\uFF61]/g,vY="Overflow: input needs wider integers to process",ZD=ra-Rz,rY=RangeError,ZnA=po(Lz.exec),Es=Math.floor,KD=String.fromCharCode,aY=po("".charCodeAt),Sz=po([].join),ki=po([].push),KnA=po("".replace),JnA=po("".split),WnA=po("".toLowerCase),VnA=function(A){for(var I=[],g=0,C=A.length;g=55296&&Q<=56319&&g>1,A+=Es(A/I);A>ZD*Yw>>1;)A=Es(A/ZD),C+=ra;return Es(C+(ZD+1)*A/(A+UnA))},MnA=function(A){var I,g,C=[],Q=(A=VnA(A)).length,B=knA,E=0,i=YnA;for(I=0;I=B&&gEs((ND-E)/s))throw new rY(vY);for(E+=(t-B)*s,B=t,I=0;IND)throw new rY(vY);if(g===B){for(var v=E,r=ra;;){var n=r<=i?Rz:r>=i+Yw?Yw:r-i;if(v?@[\\\]^|]/,alA=/[\0\t\n\r #/:<>?@[\\\]^|]/,PlA=/^[\u0000-\u0020]+/,clA=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,nlA=/[\t\n\r]/g,llA=function(A){var I,g,C,Q,B,E,i,e=ElA(A,".");if(e.length&&e[e.length-1]===""&&e.length--,(I=e.length)>4)return A;for(g=[],C=0;C1&&TQ(Q,0)==="0"&&(B=cB(tlA,Q)?16:8,Q=aa(Q,B===8?1:2)),Q==="")E=0;else{if(!cB(B===10?vlA:B===8?slA:Yz,Q))return A;E=l9(Q,B)}kt(g,E)}for(C=0;C=nY(256,5-I))return null}else if(E>255)return null;for(i=QlA(g),C=0;C6))return;for(C=0;v();){if(Q=null,C>0){if(!(v()==="."&&C<4))return;s++}if(!cB(Nw,v()))return;for(;cB(Nw,v());){if(B=l9(v(),10),Q===null)Q=B;else{if(Q===0)return;Q=10*Q+B}if(Q>255)return;s++}e[o]=256*e[o]+Q,++C!==2&&C!==4||o++}if(C!==4)return;break}if(v()===":"){if(s++,!v())return}else if(v())return;e[o++]=I}else{if(t!==null)return;s++,t=++o}}if(t!==null)for(E=o-t,o=7;o!==0&&E>0;)i=e[o],e[o--]=e[t+E-1],e[t+--E]=i;else if(o!==8)return;return e},hlA=function(A){for(var I=null,g=1,C=null,Q=0,B=0;B<8;B++)A[B]!==0?(Q>g&&(I=C,g=Q),C=null,Q=0):(C===null&&(C=B),++Q);return Q>g?C:I},er=function(A){var I,g,C,Q;if(typeof A=="number"){for(I=[],g=0;g<4;g++)ilA(I,A%256),A=glA(A/256);return Kr(I,".")}if(typeof A=="object"){for(I="",C=hlA(A),g=0;g<8;g++)Q&&A[g]===0||(Q&&(Q=!1),C===g?(I+=g?":":"::",Q=!0):(I+=ClA(A[g],16),g<7&&(I+=":")));return"["+I+"]"}return A},sl={},kz=GR({},sl,{" ":1,'"':1,"<":1,">":1,"`":1}),pz=GR({},kz,{"#":1,"?":1,"{":1,"}":1}),VD=GR({},pz,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Ei=function(A,I){var g=xnA(A,0);return g>32&&g<127&&!kw(I,A)?A:encodeURIComponent(A)},zc={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Jr=function(A,I){var g;return A.length===2&&cB(Fz,TQ(A,0))&&((g=TQ(A,1))===":"||!I&&g==="|")},dY=function(A){var I;return A.length>1&&Jr(aa(A,0,2))&&(A.length===2||(I=TQ(A,2))==="/"||I==="\\"||I==="?"||I==="#")},DlA=function(A){return A==="."||d9(A)==="%2e"},ulA=function(A){return(A=d9(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},zD={},hY={},MD={},DY={},uY={},XD={},bY={},yY={},Mc={},Xc={},jD={},fD={},HD={},xD={},wY={},OD={},et={},MB={},mY={},we={},dE={},RR=function(A,I,g){var C,Q,B,E=DE(A);if(I){if(Q=this.parse(E))throw new pw(Q);this.searchParams=null}else{if(g!==void 0&&(C=new RR(g,!0)),Q=this.parse(E,null,C))throw new pw(Q);(B=IlA(new AlA)).bindURL(this),this.searchParams=B}};RR.prototype={type:"URL",parse:function(A,I,g){var C,Q,B,E,i=this,e=I||zD,o=0,t="",s=!1,v=!1,r=!1;for(A=DE(A),I||(i.scheme="",i.username="",i.password="",i.host=null,i.port=null,i.path=[],i.query=null,i.fragment=null,i.cannotBeABaseURL=!1,A=JD(A,PlA,""),A=JD(A,clA,"$1")),A=JD(A,nlA,""),C=it(A);o<=C.length;){switch(Q=C[o],e){case zD:if(!Q||!cB(Fz,Q)){if(I)return WD;e=MD;continue}t+=d9(Q),e=hY;break;case hY:if(Q&&(cB(olA,Q)||Q==="+"||Q==="-"||Q==="."))t+=d9(Q);else{if(Q!==":"){if(I)return WD;t="",e=MD,o=0;continue}if(I&&(i.isSpecial()!==kw(zc,t)||t==="file"&&(i.includesCredentials()||i.port!==null)||i.scheme==="file"&&!i.host))return;if(i.scheme=t,I)return void(i.isSpecial()&&zc[i.scheme]===i.port&&(i.port=null));t="",i.scheme==="file"?e=xD:i.isSpecial()&&g&&g.scheme===i.scheme?e=DY:i.isSpecial()?e=yY:C[o+1]==="/"?(e=uY,o++):(i.cannotBeABaseURL=!0,kt(i.path,""),e=mY)}break;case MD:if(!g||g.cannotBeABaseURL&&Q!=="#")return WD;if(g.cannotBeABaseURL&&Q==="#"){i.scheme=g.scheme,i.path=CB(g.path),i.query=g.query,i.fragment="",i.cannotBeABaseURL=!0,e=dE;break}e=g.scheme==="file"?xD:XD;continue;case DY:if(Q!=="/"||C[o+1]!=="/"){e=XD;continue}e=Mc,o++;break;case uY:if(Q==="/"){e=Xc;break}e=MB;continue;case XD:if(i.scheme=g.scheme,Q===aQ)i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.query=g.query;else if(Q==="/"||Q==="\\"&&i.isSpecial())e=bY;else if(Q==="?")i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.query="",e=we;else{if(Q!=="#"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.path.length--,e=MB;continue}i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.query=g.query,i.fragment="",e=dE}break;case bY:if(!i.isSpecial()||Q!=="/"&&Q!=="\\"){if(Q!=="/"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,e=MB;continue}e=Xc}else e=Mc;break;case yY:if(e=Mc,Q!=="/"||TQ(t,o+1)!=="/")continue;o++;break;case Mc:if(Q!=="/"&&Q!=="\\"){e=Xc;continue}break;case Xc:if(Q==="@"){s&&(t="%40"+t),s=!0,B=it(t);for(var n=0;n65535)return lY;i.port=i.isSpecial()&&d===zc[i.scheme]?null:d,t=""}if(I)return;e=et;continue}return lY}t+=Q;break;case xD:if(i.scheme="file",Q==="/"||Q==="\\")e=wY;else{if(!g||g.scheme!=="file"){e=MB;continue}switch(Q){case aQ:i.host=g.host,i.path=CB(g.path),i.query=g.query;break;case"?":i.host=g.host,i.path=CB(g.path),i.query="",e=we;break;case"#":i.host=g.host,i.path=CB(g.path),i.query=g.query,i.fragment="",e=dE;break;default:dY(Kr(CB(C,o),""))||(i.host=g.host,i.path=CB(g.path),i.shortenPath()),e=MB;continue}}break;case wY:if(Q==="/"||Q==="\\"){e=OD;break}g&&g.scheme==="file"&&!dY(Kr(CB(C,o),""))&&(Jr(g.path[0],!0)?kt(i.path,g.path[0]):i.host=g.host),e=MB;continue;case OD:if(Q===aQ||Q==="/"||Q==="\\"||Q==="?"||Q==="#"){if(!I&&Jr(t))e=MB;else if(t===""){if(i.host="",I)return;e=et}else{if(E=i.parseHost(t))return E;if(i.host==="localhost"&&(i.host=""),I)return;t="",e=et}continue}t+=Q;break;case et:if(i.isSpecial()){if(e=MB,Q!=="/"&&Q!=="\\")continue}else if(I||Q!=="?")if(I||Q!=="#"){if(Q!==aQ&&(e=MB,Q!=="/"))continue}else i.fragment="",e=dE;else i.query="",e=we;break;case MB:if(Q===aQ||Q==="/"||Q==="\\"&&i.isSpecial()||!I&&(Q==="?"||Q==="#")){if(ulA(t)?(i.shortenPath(),Q==="/"||Q==="\\"&&i.isSpecial()||kt(i.path,"")):DlA(t)?Q==="/"||Q==="\\"&&i.isSpecial()||kt(i.path,""):(i.scheme==="file"&&!i.path.length&&Jr(t)&&(i.host&&(i.host=""),t=TQ(t,0)+":"),kt(i.path,t)),t="",i.scheme==="file"&&(Q===aQ||Q==="?"||Q==="#"))for(;i.path.length>1&&i.path[0]==="";)BlA(i.path);Q==="?"?(i.query="",e=we):Q==="#"&&(i.fragment="",e=dE)}else t+=Ei(Q,pz);break;case mY:Q==="?"?(i.query="",e=we):Q==="#"?(i.fragment="",e=dE):Q!==aQ&&(i.path[0]+=Ei(Q,sl));break;case we:I||Q!=="#"?Q!==aQ&&(Q==="'"&&i.isSpecial()?i.query+="%27":i.query+=Q==="#"?"%23":Ei(Q,sl)):(i.fragment="",e=dE);break;case dE:Q!==aQ&&(i.fragment+=Ei(Q,kz))}o++}},parseHost:function(A){var I,g,C;if(TQ(A,0)==="["){if(TQ(A,A.length-1)!=="]"||!(I=dlA(aa(A,1,-1))))return ye;this.host=I}else if(this.isSpecial()){if(A=OnA(A),cB(rlA,A)||(I=llA(A))===null)return ye;this.host=I}else{if(cB(alA,A))return ye;for(I="",g=it(A),C=0;C1?arguments[1]:void 0,C=$nA(I,new RR(A,!1,g));wR||(I.href=C.serialize(),I.origin=C.getOrigin(),I.protocol=C.getProtocol(),I.username=C.getUsername(),I.password=C.getPassword(),I.host=C.getHost(),I.hostname=C.getHostname(),I.port=C.getPort(),I.pathname=C.getPathname(),I.search=C.getSearch(),I.searchParams=C.getSearchParams(),I.hash=C.getHash())},$g=Ms.prototype,cQ=function(A,I){return{get:function(){return n9(this)[A]()},set:I&&function(g){return n9(this)[I](g)},configurable:!0,enumerable:!0}};if(wR&&(PQ($g,"href",cQ("serialize","setHref")),PQ($g,"origin",cQ("getOrigin")),PQ($g,"protocol",cQ("getProtocol","setProtocol")),PQ($g,"username",cQ("getUsername","setUsername")),PQ($g,"password",cQ("getPassword","setPassword")),PQ($g,"host",cQ("getHost","setHost")),PQ($g,"hostname",cQ("getHostname","setHostname")),PQ($g,"port",cQ("getPort","setPort")),PQ($g,"pathname",cQ("getPathname","setPathname")),PQ($g,"search",cQ("getSearch","setSearch")),PQ($g,"searchParams",cQ("getSearchParams")),PQ($g,"hash",cQ("getHash","setHash"))),Vc($g,"toJSON",function(){return n9(this).serialize()},{enumerable:!0}),Vc($g,"toString",function(){return n9(this).serialize()},{enumerable:!0}),ir){var GY=ir.createObjectURL,RY=ir.revokeObjectURL;GY&&Vc(Ms,"createObjectURL",cY(GY,ir)),RY&&Vc(Ms,"revokeObjectURL",cY(RY,ir))}qnA(Ms,"URL"),jnA({global:!0,forced:!fnA,sham:!wR},{URL:Ms});var blA=yA,ylA=kg,Nz=II,wlA=GP,LY=NC,mlA=W0,LR=ylA("URL"),GlA=mlA&&Nz(function(){LR.canParse()}),RlA=Nz(function(){return LR.canParse.length!==1});blA({target:"URL",stat:!0,forced:!GlA||RlA},{canParse:function(A){var I=wlA(arguments.length,1),g=LY(A),C=I<2||arguments[1]===void 0?void 0:LY(arguments[1]);try{return!!new LR(g,C)}catch{return!1}}});var LlA=yA,SlA=kg,TlA=GP,SY=NC,UlA=W0,FlA=SlA("URL");LlA({target:"URL",stat:!0,forced:!UlA},{parse:function(A){var I=TlA(arguments.length,1),g=SY(A),C=I<2||arguments[1]===void 0?void 0:SY(arguments[1]);try{return new FlA(g,C)}catch{return null}}});var YlA=pC,klA=YlA.URL,plA=klA,NlA=plA,ZlA=NlA,KlA=ZlA,JlA=KlA,WlA=JlA,VlA=WlA,zlA=VlA,pQ=CI(zlA);function TY(A){const I=PressureObserver.supportedSources;let g="thermal";g=I!=null&&I.includes("thermal")?"thermal":"cpu";const C=new PressureObserver(Q=>{Q.forEach(B=>{B.source===g&&A(B.state)})});return C.observe(g,{sampleInterval:2e3}),C}class MlA{constructor(){P(this,"_state",void 0),P(this,"_handler",!1)}init(){if((XPA||!lA("DISABLE_COMPUTE_PRESSURE"))&&{}.VITE_TEST!=="UT")try{if(Pz()){const I=new Blob(["(".concat(TY.toString(),")(self.postMessage)")],{type:"text/javascript"}),g=new Worker(pQ.createObjectURL(I));g.onmessage=C=>{this._state=C.data},this._handler=g}else this._handler=TY(I=>{this._state=I})}catch{}}get state(){return K0&&!Ie()&&(window.thermal_status=this._state),this._handler||this.init(),this._state}}var h9=new MlA;const XlA=["codec","inbound-rtp","outbound-rtp","remote-inbound-rtp","remote-outbound-rtp","media-source","csrc","peer-connection","data-channel","stream","track","transceiver","sender","receiver","transport","sctp-transport","candidate-pair","local-candidate","remote-candidate","certificate","ice-server"],D9=new Map;let qD=!0;const jlA=async A=>new Promise(I=>{const g={all:[],getTrackStats:()=>[]},C=lA("STATS_SCALLBACK_SUPPORT");if(qD&&xi&&window.InstallTrigger===void 0&&az&&C)try{var Q,B,E;(Q=A.getStats(i=>{const e=[];i.result().forEach(o=>{if(XlA.includes(o.type))return;const t={};o.names().forEach(function(s){t[s]=o.stat(s)}),e.push(R(R({},t),{},{id:o.id,type:o.type,timestamp:o.timestamp}))}),I({all:e,getTrackStats:o=>e.filter(t=>t.type!=="ssrc"||t.googTrackId===o)})}))===null||Q===void 0||(B=Q.then)===null||B===void 0||(B=B.call(Q,()=>{I(g)}))===null||B===void 0||(E=B.catch)===null||E===void 0||E.call(B,()=>{qD=!1,I(g)})}catch{qD=!1,I(g)}else I(g)}),flA=async A=>{var I;const g=await A.getStats(),C={all:[]},Q=new Map;g.forEach(e=>{const o=Q.get(e.type)||new Map;o.set(e.id,e),Q.set(e.type,o),C.all.push(e)});const B=(e,o)=>{e.forEach(t=>{var s,v,r,n;let a,c,{codecId:d,transportId:l,trackId:h,playoutId:D}=t;if((s=Q.get("codec"))===null||s===void 0||s.forEach(S=>{S.id===d&&o.add(S)}),(v=Q.get("transport"))===null||v===void 0||v.forEach(S=>{S.id===l&&(a=S,o.add(S))}),(r=Q.get("track"))===null||r===void 0||r.forEach(S=>{S.id===h&&o.add(S)}),(n=Q.get("media-playout"))===null||n===void 0||n.forEach(S=>{S.id===D&&o.add(S)}),a){var u,w;const{localCertificateId:S,remoteCertificateId:L,selectedCandidatePairId:V}=a;(u=Q.get("certificate"))===null||u===void 0||u.forEach(z=>{(z.id===S||z.id===L)&&o.add(z)}),(w=Q.get("candidate-pair"))===null||w===void 0||w.forEach(z=>{z.id===V&&(c=z,o.add(z))})}if(c){var b,y;const{localCandidateId:S,remoteCandidateId:L}=c;(b=Q.get("local-candidate"))===null||b===void 0||b.forEach(V=>{V.id===S&&o.add(V)}),(y=Q.get("remote-candidate"))===null||y===void 0||y.forEach(V=>{V.id===L&&o.add(V)})}})};var E;if(Q.get("media-source"))(E=Q.get("media-source"))===null||E===void 0||E.forEach(e=>{var o;const t=new Set;t.add(e);const s=[];(o=Q.get("outbound-rtp"))===null||o===void 0||o.forEach(v=>{var r;v.mediaSourceId===e.id&&(t.add(v),s.push(v),(r=Q.get("remote-inbound-rtp"))===null||r===void 0||r.forEach(n=>{n.localId===v.id&&t.add(n)}))}),B(s,t),C[e.trackIdentifier]=Array.from(t)});else if(Q.get("track")){var i;(i=Q.get("track"))===null||i===void 0||i.forEach(e=>{var o;const t=new Set;t.add(e);const s=[];(o=Q.get("outbound-rtp"))===null||o===void 0||o.forEach(v=>{var r;v.trackId===e.id&&(t.add(v),s.push(v),(r=Q.get("remote-inbound-rtp"))===null||r===void 0||r.forEach(n=>{n.localId===v.id&&t.add(n)}))}),B(s,t),C[e.trackIdentifier]=Array.from(t)})}return(I=Q.get("inbound-rtp"))===null||I===void 0||I.forEach(e=>{var o;const t=new Set;t.add(e),(o=Q.get("remote-outbound-rtp"))===null||o===void 0||o.forEach(r=>{r.localId===e.id&&t.add(r)}),B([e],t);let{trackIdentifier:s}=e;var v;s||(v=Q.get("track"))===null||v===void 0||v.forEach(r=>{r.id===e.trackId&&(s=r.trackIdentifier)}),C[s]=Array.from(t)}),C},HlA=async(A,I,g,C)=>{const Q=I==null?void 0:I.id;if(!(A instanceof RTCPeerConnection))return[];if(mI||CQ){const e=[];try{(C?await C.getStats():await A.getStats(I)).forEach(o=>{e.push(o)})}catch{}return e}let B=D9.get(A);(!B||Date.now()-B.timestamp>150)&&(B={timestamp:Date.now(),statsPromise:flA(A),extraStatsPromise:jlA(A)},D9.set(A,B));const E=await B.statsPromise;let i=(Q?E[Q]:E.all)||[];if(!g){const e=await B.extraStatsPromise;i=i.concat((Q?e.getTrackStats(Q):e.all)||[])}return i},xlA=A=>{D9.has(A)&&D9.delete(A)};class Zz{constructor(I){P(this,"_timer",void 0),P(this,"_reportTimer",void 0),P(this,"handler",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_destroyed",!1),P(this,"_isReportStarted",!1),this._context=I,this._monitor=tI(I.id),this.logger=new uA("Stats",3,I.id)}setVar(I){this.handler=I}stopReport(I){this._isReportStarted&&(this.logger.info("stopReport","invoke"),this._isReportStarted=!1,clearTimeout(this._reportTimer),delete this._reportTimer,AI(this._context.id,"del_media_statistics_timer","reason: ".concat(I,", stack: ").concat(new Error().stack),0,this._stream.streamId||""))}filterIllegal(I){const g={};return Object.keys(I).forEach(C=>{I[C]===null||I[C]===void 0||Number.isNaN(I[C])||(g[C]=I[C])}),g}destroy(){this.logger.info("destroy","invoke"),AI(this._context.id,"media_statistics_destroy","".concat(new Error().stack),0,"".concat(this._stream.streamId)),this.stopReport("destroy"),clearTimeout(this._timer),this._destroyed=!0}}class OlA extends Zz{constructor(I,g){super(I),P(this,"_stats",{audioStats:{},videoStats:{}}),P(this,"_preReports",{audio:{},video:{}}),this._stream=g;const C=async()=>{this._stats=await this._getLocalStats(this._stream,this._preReports,!1),this._destroyed||(this._timer=setTimeout(C,lA("STATS_LOOP_INTERVAL")))};C()}setLocalStreamStatsEvtInterval(I,g){if(this._isReportStarted)return;this.logger.info("setLocalStreamStatsEvtInterval","invoke"),this._isReportStarted=!0,this.setVar(g),this._destroyed=!1;const C={audio:{},video:{}},Q=async()=>{const B=await this._getLocalStats(this._stream,C,!0);I(B),this._destroyed||(this._reportTimer=setTimeout(Q,2e3))};Q()}getLocalStats(){return this._stats}async _getLocalStats(I,g,C){var Q,B,E,i,e,o,t;const s=((Q=I.audioTrack)===null||Q===void 0?void 0:Q.mixType)!==void 0&&I.audioTrack.mixType!==JQ.PLAYOUT?(B=(E=I.audioTrack)===null||E===void 0?void 0:E.mixedAudioTrack)!==null&&B!==void 0?B:(i=I.audioTrack)===null||i===void 0?void 0:i.preprocessingTrack:(e=I.audioTrack)===null||e===void 0?void 0:e.preprocessingTrack,v=(o=I.videoTrack)===null||o===void 0?void 0:o.preprocessingTrack;var r;return Object.keys(g.audio).length===0&&Object.keys(g.video).length===0&&(await this.getAudioStats(s,g,(r=I.audioTrack)===null||r===void 0?void 0:r.getAudioLevel(),C),await this.getVideoStats(v,g,C),await lV(150)),{audioStats:await this.getAudioStats(s,g,(t=I.audioTrack)===null||t===void 0?void 0:t.getAudioLevel(),C),videoStats:await this.getVideoStats(v,g,C),isScreen:I.isScreen}}async getAudioStats(I,g,C,Q){var B,E,i;const e={},o={timestamp:Date.now()},{streamId:t,audioMid:s,isScreen:v,pubAttributes:r,pubAudio:n,audioTrack:a}=this._stream,c={media_type:"audio",is_screen:!!v,direction:"up",stream_id:t,vid:s,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,capture_state:r.localaudio?"capture_state_on":"capture_state_off",mute_state:n?"mute_state_off":"mute_state_on",thermal_status:h9.state};if(a&&(c.playback_volume=a.getVolume()),!I||!this.handler)return e;const d=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.audioTransceiver)===null||E===void 0?void 0:E.sender));if(!d.length)return e;if(d.forEach(D=>{let{type:u,packetsSent:w,packetsLost:b,bytesSent:y,clockRate:S,roundTripTime:L,channels:V,audioLevel:z,mimeType:EA,availableIncomingBitrate:eA,availableOutgoingBitrate:K,bytesReceived:p,nominated:J,id:Y,currentRoundTripTime:N,state:q,writable:IA,requestsReceived:gA,responsesReceived:vA,requestsSent:bA,consentRequestsSent:nA,responsesSent:H,jitter:CA,candidateType:LA,ip:UA,address:xA,networkType:rg,port:NA,protocol:MI,nackCount:KC,retransmittedBytesSent:YB,retransmittedPacketsSent:ug,audioInputLevel:kB,ssrc:pB,totalAudioEnergy:tQ,totalSamplesDuration:AB,mediaType:aC,fractionLost:NB}=D;u==="outbound-rtp"?(o.packetsSent=w,o.bytesSent=y,c.bytes=y,c.packetsSent=w,c.nackCount=KC,c.ssrc=pB,c.retransmitted_bytes_sent=YB,c.retransmitted_packets_sent=ug,o.retransmittedBytesSent=YB,o.retransmittedPacketsSent=ug):u==="remote-inbound-rtp"?(o.packetsLost=b,c.packetsLost=b,c.net_jitter=1e3*CA,e.rtt=1e3*L,c.rtt=e.rtt,e._fractionLost=NB||0):u==="codec"?(e.recordSampleRate=S,e.numChannels=V,c.codecName=EA):u==="media-source"&&z!==void 0?(c.audio_level=z&&-10*Math.log10(Math.pow(z,2)),c.volume=255*z,c.total_audio_energy=tQ,c.totalInputDuration=AB,c.send_level||(c.send_level=z)):u==="ssrc"&&aC==="audio"?kB&&(c.send_level=kB):u==="candidate-pair"?(c.ice_available_incoming_bitrate=eA,c.ice_available_outgoing_bitrate=K,c.ice_bytes_received=p,c.ice_bytes_sent=y,c.ice_nominated=Number(J),c.ice_pair_id=Y,c.ice_pair_rtt=N,c.ice_pair_state=q,c.ice_pair_writable=IA,c.recv_ping_requests=gA,c.recv_ping_responses=vA,c.sent_ping_requests_before_first_response=bA,c.sent_ping_requests_total=bA+(nA||0),c.sent_ping_responses=H):u==="local-candidate"?(c.local_candidate_type=LA,c.local_ip=UA||xA,c.local_network_type=rg,c.local_port=NA,c.protocol=MI):u==="remote-candidate"&&(c.remote_candidate_type=LA,c.remote_ip=UA||xA,c.remote_port=NA)}),c.send_level)c.send_level<1?c._sendVolumeLevel=32767*c.send_level:c._sendVolumeLevel=c.send_level;else{const D=(a==null?void 0:a.getAudioLevel())||0;c._sendVolumeLevel=Math.round(D/255*32767)}c.volume===void 0&&C!==void 0&&(c.volume=C,c.audio_level=C&&-10*Math.log10(Math.pow(C/255,2)));const{audio:l}=g;if(!l.timestamp)return g.audio=o,this.filterIllegal(e);var h;return o.packetsLost!==void 0&&(e.audioLossRate=Math.max(0,o.packetsLost-l.packetsLost)/(o.packetsSent-l.packetsSent),e.audioLossRate=Number.isNaN(e.audioLossRate)?0:e.audioLossRate,c.fraction_lost=e.audioLossRate),e.statsInterval=o.timestamp-l.timestamp,c.stats_interval=e.statsInterval,e.sendKBitrate=(o.bytesSent-l.bytesSent||0)/e.statsInterval*8,c.mediaBitratebps=Math.round(1e3*e.sendKBitrate),c.bandwidth=Math.round(c.mediaBitratebps/1024),o.retransmittedBytesSent!==void 0&&(c.retransmitBitratebps=(o.retransmittedBytesSent-l.retransmittedBytesSent||0)/e.statsInterval),g.audio=o,c.vendor_mode=this._stream.vendorCode||0,c.pc_session_id=(i=this.handler)===null||i===void 0?void 0:i.peerConnectionId,Q&&((h=this._monitor)===null||h===void 0||h.report("rtc_media_statistics",c)),e._retransmittedRate=(o.retransmittedPacketsSent-l.retransmittedPacketsSent)/(o.packetsSent-l.packetsSent),e.audioLossRate===void 0&&(e.audioLossRate=e._retransmittedRate,c.fraction_lost=e.audioLossRate),e._fractionLost=Math.max(e._fractionLost,e.audioLossRate),e._sendVolumeLevel=c._sendVolumeLevel,this.filterIllegal(e)}async getVideoStats(I,g,C){var Q,B,E;const i={},e={timestamp:Date.now(),simulcast:{}},{streamId:o,videoMid:t,isScreen:s,pubAttributes:v,enableSimulcast:r,pubVideo:n}=this._stream,a={media_type:"video",is_screen:!!s,direction:"up",stream_id:o,vid:t,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,capture_state:v.localvideo?"capture_state_on":"capture_state_off",mute_state:n?"mute_state_off":"mute_state_on",thermal_status:h9.state};if(!I||!this.handler)return i;a.cap_frame_width=I.getSettings().width,a.cap_frame_height=I.getSettings().height,a.frameRateSent=I.getSettings().frameRate,i.isScreen=s,a.is_intersecting=JSON.stringify((Q=this._stream)===null||Q===void 0||(Q=Q.videoTrack)===null||Q===void 0?void 0:Q.intersection());const c=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.videoTransceiver)===null||E===void 0?void 0:E.sender));if(!c.length)return i;let d=0;c.forEach(y=>{const{type:S,framesEncoded:L,packetsLost:V,bytesSent:z,framesSent:EA,retransmittedBytesSent:eA,totalPacketSendDelay:K,totalEncodeTime:p,firCount:J,targetBitrate:Y,roundTripTime:N,mimeType:q,frameWidth:IA,frameHeight:gA,packetsSent:vA,googActualEncBitrate:bA,googAvailableReceiveBandwidth:nA,googAvailableSendBandwidth:H,googAvgEncodeMs:CA,googBucketDelay:LA,googEncodeUsagePercent:UA,googFrameRateInput:xA,availableIncomingBitrate:rg,availableOutgoingBitrate:NA,bytesReceived:MI,nominated:KC,id:YB,currentRoundTripTime:ug,state:kB,writable:pB,candidateType:tQ,ip:AB,address:aC,networkType:NB,port:qE,nackCount:JC,pliCount:sQ,protocol:_E,qpSum:Og,requestsReceived:vQ,responsesReceived:WC,googRetransmitBitrate:Vo,requestsSent:PE,consentRequestsSent:Fv,responsesSent:rQ,ssrc:$E,googTargetEncBitrate:IB,googTransmitBitrate:fP,retransmittedPacketsSent:HP,encoderImplementation:xP,jitter:zo,rid:Yv,fractionLost:kv,googAdaptationChanges:pv,qualityLimitationReason:td,qualityLimitationDurations:OP,googFirsReceived:sd,googFrameRateSent:qP,keyFramesEncoded:Mo,scalabilityMode:Xo,framesPerSecond:_P,frames:vd}=y;S==="outbound-rtp"?(r&&(Yv?e.simulcast[Yv]=y:e.simulcast[d]=y,d++),e.framesEncoded=L||e.framesEncoded||0,a.key_frames_encoded=Mo||0,e.bytesSent=z||e.bytesSent||0,e.framesSent=EA||e.framesSent,a.bytes=z||a.bytes||0,e.packetsSent=vA||e.packetsSent||0,a.packetsSent=vA||a.packetsSent||0,a.nackCount=JC||a.nackCount||0,a.pli_count=sQ||a.pli_count||0,a.qp_sum=Og||a.qp_sum||0,a.ssrc=$E||a.ssrc||0,a.retransmitted_packets_sent=HP,e.retransmittedPacketsSent=HP,e.retransmittedBytesSent=eA,a.encoder_implementation=xP,a.qualityLimitationReason=td,a.qualityLimitationDurations=OP,a.scalabilityMode=Xo,IA!==void 0&&((!i.encodedFrameWidth||IA>i.encodedFrameWidth)&&(i.encodedFrameWidth=IA),(!i.encodedFrameHeight||gA>i.encodedFrameHeight)&&(i.encodedFrameHeight=gA),a.frame_size_height=gA,a.frame_size_width=IA)):S==="track"?(i.encodedFrameWidth=IA,i.encodedFrameHeight=gA,a.frame_size_height=gA,a.frame_size_width=IA):S==="remote-inbound-rtp"?(e.packetsLost=V,i.rtt=1e3*N,a.rtt=i.rtt,a.jitter=1e3*zo,a.packetsLost=V,i._fractionLost=kv||0):S==="codec"?(i.codecType=q,a.codecName=q):S==="candidate-pair"?(a.ice_available_incoming_bitrate=rg,a.ice_available_outgoing_bitrate=NA,a.ice_bytes_received=MI,a.ice_bytes_sent=z,a.ice_nominated=Number(KC),a.ice_pair_id=YB,a.ice_pair_rtt=ug,a.ice_pair_state=kB,a.ice_pair_writable=pB,a.recv_ping_requests=vQ,a.recv_ping_responses=WC,a.sent_ping_requests_before_first_response=PE,a.sent_ping_requests_total=PE+Fv,a.sent_ping_responses=rQ):S==="local-candidate"?(a.local_candidate_type=tQ,a.local_ip=AB||aC,a.local_network_type=NB,a.local_port=qE,a.protocol=_E):S==="remote-candidate"?(a.remote_candidate_type=tQ,a.remote_ip=AB||aC,a.remote_port=qE):S==="VideoBwe"?(a.encBitratebps=bA,a.available_receive_bandwidth=nA,a.available_send_bandwidth=H,a.bucket_delay=LA,a.retransmitBitratebps=Vo,a.targetEncBitratebps=IB,a.transmit_bitrate=fP,i._sendBandWidth=Number(H)):S==="ssrc"&&(a.avg_encode_ms=CA,a.encodeUsage=UA,a.frame_rate_input=xA,a.orignal_input_Framerate=Number(xA),a.ddaptationChanges=pv,a.firsReceived=sd,a.frameRateSent=qP);const G=lA("STATS_SCALLBACK_SUPPORT");if(!az||!G){const{video:T}=g,k=e.timestamp-T.timestamp;if(S==="outbound-rtp"){const O=z-T.bytesSent,QA=eA-T.retransmittedBytesSent;a.encBitratebps=Math.round(8e3*(O-QA)/k),a.bucket_delay=K/vA,a.retransmitBitratebps=Math.round(8e3*QA/k),a.targetEncBitratebps=Y,a.transmit_bitrate=Math.round(1e3*(z-T.bytesSent)*8/k),a.avg_encode_ms=1e3*p/L,a.firsReceived=J+sQ}else S==="candidate-pair"?(a.available_send_bandwidth=NA,i._sendBandWidth=NA):S==="media-source"&&(a.frame_rate_input=_P,a.orignal_input_Framerate=Number(_P),a.frame_input=vd)}});const{video:l}=g;if(!l.timestamp)return g.video=e,this.filterIllegal(i);i.statsInterval=e.timestamp-l.timestamp,a.stats_interval=i.statsInterval;const h=Object.keys(e.simulcast);if(r){var D;a.sim_enc_width=[],a.sim_enc_height=[],a.sim_enc_bps=[],a.sim_enc_framerate=[],a.sim_enc_key_frames=[],a.sim_rids=[],a.sim_enc_bandwidth=[],a.sim_sent_framerate=[],a.sim_fraction_lost=[],a.sim_keyencoded=[],a.active_sim_streams=this._context.videoProfile.activeSimStreams||[],a.sim_retransmittedRate=[];let y=!1;var u;Ws(h).call(h,(S,L)=>Number(S)-Number(L)).forEach(S=>{const{frameWidth:L,frameHeight:V,bytesSent:z,framesEncoded:EA,framesSent:eA,packetsLost:K,packetsSent:p,qualityLimitationReason:J,qualityLimitationDurations:Y,qualityLimitationResolutionChanges:N,retransmittedPacketsSent:q,pliCount:IA,keyFramesEncoded:gA}=e.simulcast[S];J!==void 0&&(a.sim_qualityLimitationReason||(a.sim_qualityLimitationReason=[],a.sim_qualityLimitationDurations=[],a.sim_qualityLimitationResolutionChanges=[]),a.sim_qualityLimitationReason.push(J),a.sim_qualityLimitationDurations.push(Y),a.sim_qualityLimitationResolutionChanges.push(N));const vA=l.simulcast[S];if(a.sim_enc_width.push(L||0),a.sim_enc_height.push(V||0),a.sim_enc_key_frames.push(gA||0),vA){const bA=(z-vA.bytesSent||0)/i.statsInterval;a.sim_enc_bps.push(Math.round(8e3*bA)),a.sim_enc_bandwidth.push(Math.round(8e3*bA/1024));const nA=1e3*(EA-vA.framesEncoded)/i.statsInterval;a.sim_enc_framerate.push(Math.round(nA)),a.sim_rids.push(S);const H=eA!==void 0?eA-vA.framesSent:EA-vA.framesEncoded,CA=1e3*H/i.statsInterval;a.sim_sent_framerate.push(Math.round(CA));let LA=(K-vA.packetsLost)/(p-vA.packetsSent);i._retransmittedRate=(q-vA.retransmittedPacketsSent)/(p-vA.packetsSent),LA=Number.isNaN(LA)?0:LA,a.sim_fraction_lost.push(LA),a.sim_keyencoded.push(IA-vA.pliCount>0),a.sim_retransmittedRate.push(i._retransmittedRate),L>0&&!y&&(i.rid=S,i.sentKBitrate=8*bA,i.encoderOutputFrameRate=nA,i.encodedFrameCount=H,i.sentFrameRate=CA,i.videoLossRate=LA,y=!0)}}),a.vendor_mode=this._stream.vendorCode||0,a.pc_session_id=(D=this.handler)===null||D===void 0?void 0:D.peerConnectionId,C&&((u=this._monitor)===null||u===void 0||u.report("rtc_media_statistics",a))}else{var w,b;i.encodedFrameCount=e.framesSent!==void 0?e.framesSent-l.framesSent:e.framesEncoded-l.framesEncoded,i.sentKBitrate=(e.bytesSent-l.bytesSent||0)/i.statsInterval*8,a.bitrate=Math.round(1e3*i.sentKBitrate),a.bandwidth=Math.round(a.bitrate/1024),i.encoderOutputFrameRate=1e3*(e.framesEncoded-l.framesEncoded)/i.statsInterval,a.frame_rate_encoded=Math.round(i.encoderOutputFrameRate),i.sentFrameRate=1e3*i.encodedFrameCount/i.statsInterval,a.frame_rate_sent=Math.round(i.sentFrameRate),i.videoLossRate=Math.max(0,e.packetsLost-l.packetsLost)/(e.packetsSent-l.packetsSent),i.videoLossRate=Number.isNaN(i.videoLossRate)?0:i.videoLossRate,a.fraction_lost=i.videoLossRate,i._retransmittedRate=(e.retransmittedPacketsSent-l.retransmittedPacketsSent)/(e.packetsSent-l.packetsSent),a.vendor_mode=this._stream.vendorCode||0,a.pc_session_id=(w=this.handler)===null||w===void 0?void 0:w.peerConnectionId,C&&((b=this._monitor)===null||b===void 0||b.report("rtc_media_statistics",a))}return g.video=e,i._fractionLost=Math.max(i._fractionLost,i.videoLossRate),i._captureResolutionWidth=a.cap_frame_width,i._captureResolutionHeight=a.cap_frame_height,this.filterIllegal(i)}}class qlA extends Zz{constructor(I,g){super(I),P(this,"_stats",{audioStats:{},videoStats:{}}),P(this,"_preReports",{audio:{},video:{}}),this._stream=g;const C=async()=>{this._stats=await this._getRemoteStreamStats(this._stream,this._preReports,!1),this._destroyed||(this._timer=setTimeout(C,lA("STATS_LOOP_INTERVAL")))};C()}async setRemoteStreamStatsEvtInterval(I,g){if(this._isReportStarted)return;this.logger.info("setRemoteStreamStatsEvtInterval","invoke"),this._isReportStarted=!0,this.setVar(g),this._destroyed=!1;const C={audio:{},video:{}},Q=async()=>{const B=await this._getRemoteStreamStats(this._stream,C,!0);I(B),this._destroyed||(this._reportTimer=setTimeout(Q,2e3))};this.stopReport("start a new timer."),Q()}getRemoteStreamStats(){return this._stats}async _getRemoteStreamStats(I,g,C){var Q,B,E;const i=(Q=I.videoTrack)===null||Q===void 0?void 0:Q.originTrack,e=(B=I.audioTrack)===null||B===void 0?void 0:B.originTrack;var o;return Object.keys(g.audio).length===0&&Object.keys(g.video).length===0&&(await this.getRemoteAudioStats(e,g,(o=this._stream.audioTrack)===null||o===void 0?void 0:o.getAudioLevel(),C),await this.getRemoteVideoStats(i,g,C),await lV(150)),{audioStats:await this.getRemoteAudioStats(e,g,(E=this._stream.audioTrack)===null||E===void 0?void 0:E.getAudioLevel(),C),videoStats:await this.getRemoteVideoStats(i,g,C),isScreen:I.isScreen,userId:I.userId,streamId:I.streamId}}unsubscribe(){this.logger.info("unsubscribe","invoke"),super.stopReport("unsubscribe"),this._stream.stopAudioStallObserve()}async getRemoteAudioStats(I,g,C,Q){var B,E,i,e;const o={},t={},{streamId:s,userId:v,isScreen:r,audioMid:n,subMediaType:a,_attributes:c,virtual:d,audioTrack:l}=this._stream,h={media_type:"audio",is_screen:!!r,direction:"down",stream_id:s,stream_user_id:v,vid:n,audio_mux:d,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,mute_state:$I(a)?"mute_state_off":"mute_state_on",remote_user_capture_state:c.localaudio?"capture_state_on":"capture_state_off",remote_user_mute_state:c.localaudio&&c.audiostream?"mute_state_off":"mute_state_on",thermal_status:h9.state};if(l&&(h.playback_volume=l.getVolume()),!I||!this.handler)return o;const D=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.audioTransceiver)===null||E===void 0?void 0:E.receiver));if(!D.length)return o;D.forEach(y=>{let{type:S,packetsLost:L,packetsReceived:V,bytesReceived:z,jitterBufferDelay:EA,jitterBufferEmittedCount:eA,clockRate:K,channels:p,totalSamplesReceived:J,concealedSamples:Y,silentConcealedSamples:N,concealmentEvents:q,totalRoundTripTime:IA,packetsDiscarded:gA,state:vA,currentRoundTripTime:bA,audioLevel:nA,totalAudioEnergy:H,totalSamplesDuration:CA,mimeType:LA,googDecodingNormal:UA,googDecodingMuted:xA,availableIncomingBitrate:rg,availableOutgoingBitrate:NA,bytesSent:MI,nominated:KC,id:YB,writable:ug,jitter:kB,candidateType:pB,ip:tQ,address:AB,networkType:aC,port:NB,protocol:qE,audioOutputLevel:JC,requestsReceived:sQ,responsesReceived:_E,requestsSent:Og,consentRequestsSent:vQ,responsesSent:WC,ssrc:Vo,nackCount:PE,lastPacketReceivedTimestamp:Fv,concealmentevents:rQ,fecPacketsReceived:$E}=y;if(S==="inbound-rtp")t.packetsLost=L,t.packetsReceived=V,h.packetsLost=L,h.packetsReceived=V,h.packetsDiscarded=gA,h.nackCount=PE,h.lastPacketReceivedTimestamp=Fv,h.concealmentevents=rQ,t.bytesReceived=z,EA!==void 0&&(o.jitterBufferDelay=EA/eA*1e3,h.average_jitter_buffer_delay_ms=o.jitterBufferDelay),J!==void 0&&(t.totalSamplesReceived=J,o.concealedSamples=Y,t.concealedSamples=Y,t.silentConcealedSamples=N,h.concealedSamples=Y,o.concealmentEvents=q,h.totalSamplesReceived=J),$E!==void 0&&(h.fec_packets_received=$E,t.fecPacketsReceived=$E),h.jitter=1e3*kB,h.ssrc=Vo,nA!==void 0&&nA!==0?(h.audio_level=nA&&-10*Math.log10(Math.pow(nA,2)),h.volume=255*nA):(h.volume=C??255*nA,h.audio_level=C&&-10*Math.log10(Math.pow(C/255,2))),H!==void 0&&(h.total_audio_energy=H),CA!==void 0&&(h.totalAudioDuration=CA);else if(S==="codec")o.recordSampleRate=K,p&&(o.numChannels=p),h.codecName=LA;else if(S==="candidate-pair"){var IB;h.ice_available_incoming_bitrate=rg,h.ice_available_outgoing_bitrate=NA,h.ice_bytes_received=z,h.ice_bytes_sent=MI,h.ice_nominated=Number(KC),h.ice_pair_id=YB,h.ice_pair_rtt=bA,h.rtt=1e3*bA,h.rtt&&(IB=this._context.streamRTT)!==null&&IB!==void 0&&(IB=IB[s])!==null&&IB!==void 0&&IB.audio&&(h.total_rtt_ms=Math.round(h.rtt+this._context.streamRTT[s].audio)),h.ice_pair_state=vA,h.ice_pair_writable=ug,h.recv_ping_requests=sQ,h.recv_ping_responses=_E,h.sent_ping_requests_before_first_response=Og,h.sent_ping_requests_total=Og+(vQ||0),h.sent_ping_responses=WC,vA==="succeeded"&&(o.rtt=1e3*bA,o.total_rtt=1e3*IA)}else S==="track"&&nA!==void 0?(nA===0&&C!==0?(h.volume=C,h.audio_level=C&&-10*Math.log10(Math.pow(C/255,2))):(h.audio_level=nA&&-10*Math.log10(Math.pow(nA,2)),h.volume=255*nA),h.total_audio_energy=H,h.totalAudioDuration=CA):S==="ssrc"?(h.decodingNormal=UA,h.recvAudioLevel=JC,h.decodingMuted=xA):S==="local-candidate"?(h.local_candidate_type=pB,h.local_ip=tQ||AB,h.local_network_type=aC,h.local_port=NB,h.protocol=qE):S==="remote-candidate"&&(h.remote_candidate_type=pB,h.remote_ip=tQ||AB,h.remote_port=NB)});const{audio:u}=g;if(!u.timestamp)return t.timestamp=Date.now(),g.audio=t,this.filterIllegal(o);let w;var b;return t.concealedSamples!==void 0&&(h.interval_concealed_samples=t.concealedSamples-u.concealedSamples,h.interval_samples_received=t.totalSamplesReceived-u.totalSamplesReceived,h.interval_silent_concealed_samples=t.silentConcealedSamples-u.silentConcealedSamples,w=await this._stream.updateAudioStallInfo(h,o,t)),t.timestamp=Date.now(),o.audioLossRate=Math.max(0,t.packetsLost-u.packetsLost)/(t.packetsReceived-u.packetsReceived+(t.packetsLost-u.packetsLost)),o.audioLossRate=Number.isNaN(o.audioLossRate)?0:o.audioLossRate,h.fraction_lost=o.audioLossRate,o.statsInterval=t.timestamp-u.timestamp,h.stats_interval=o.statsInterval,o.receivedKBitrate=(t.bytesReceived-u.bytesReceived||0)/o.statsInterval*8,h.bandwidth=Math.round(1e3*o.receivedKBitrate/1024),t.concealedSamples!==void 0&&(o.receivedSampleRate=1e3*h.interval_samples_received/o.statsInterval),t.fecPacketsReceived!==void 0&&(h.fecBitratebps=(t.fecPacketsReceived-u.fecPacketsReceived||0)/o.statsInterval),h.average_jitter_buffer_delay_ms&&h.total_rtt_ms&&(o.e2eDelay=h.average_jitter_buffer_delay_ms+h.total_rtt_ms),(i=this._context.streamRTT)!==null&&i!==void 0&&(i=i[s])!==null&&i!==void 0&&i.audio&&(o.totalRtt=(h.rtt?h.rtt:0)+this._context.streamRTT[s].audio),g.audio=t,h.vendor_mode=this._stream.vendorCode||0,h.pc_session_id=(e=this.handler)===null||e===void 0?void 0:e.peerConnectionId,Q&&((b=this._monitor)===null||b===void 0||b.report("rtc_media_statistics",h,w)),this.filterIllegal(o)}async getRemoteVideoStats(I,g,C){var Q,B,E,i,e;const o={},t={timestamp:Date.now()},{streamId:s,userId:v,isScreen:r,subMediaType:n,_attributes:a}=this._stream,c=R({media_type:"video",is_screen:!!r,direction:"down",stream_id:s,stream_user_id:v,vid:this._stream.videoMid,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,mute_state:gI(n)?"mute_state_off":"mute_state_on",remote_user_capture_state:a.localvideo?"capture_state_on":"capture_state_off",remote_user_mute_state:a.localvideo&&a.videostream?"mute_state_off":"mute_state_on",is_intersecting:JSON.stringify((Q=this._stream.videoTrack)===null||Q===void 0?void 0:Q.intersection()),thermal_status:h9.state},this._stream.getVideoRenderInfo());if(!I||!this.handler)return o;o.isScreen=r;const d=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.videoTransceiver)===null||E===void 0?void 0:E.receiver));if(!d.length)return o;d.forEach(w=>{let{type:b,frameHeight:y,frameWidth:S,packetsLost:L,packetsReceived:V,bytesReceived:z,framesDecoded:EA,jitterBufferDelay:eA,jitterBufferEmittedCount:K,mimeType:p,firCount:J,availableIncomingBitrate:Y,availableOutgoingBitrate:N,bytesSent:q,nominated:IA,id:gA,currentRoundTripTime:vA,state:bA,writable:nA,candidateType:H,ip:CA,address:LA,networkType:UA,port:xA,nackCount:rg,pliCount:NA,protocol:MI,requestsReceived:KC,responsesReceived:YB,requestsSent:ug,consentRequestsSent:kB,responsesSent:pB,ssrc:tQ,jitter:AB,framesReceived:aC,keyFramesDecoded:NB,totalDecodeTime:qE,decoderImplementation:JC,lastPacketReceivedTimestamp:sQ,framesDropped:_E}=w;if(b==="inbound-rtp")t.packetsLost=L,c.packetsLost=L,t.packetsReceived=V,c.packetsReceived=V,t.bytesReceived=z,c.bytes=z,t.framesDecoded=EA,t.totalDecodeTime=qE,eA!==void 0&&(t.jitterBufferDelay=eA/K*1e3,c.average_jitter_buffer_delay_ms=t.jitterBufferDelay),c.fir_count=J,c.nackCount=rg,t.nackCount=rg,c.pli_count=NA,c.ssrc=tQ,c.framesDropped=_E,c.jitter=1e3*AB,c.framesReceived=aC,t.framesReceived=aC,c.framesDecoded=EA,c.key_frames_decoded=NB,c.decoder_name=JC,c.last_packet_received_timestamp=sQ,S!==void 0&&(o.width=S,c.frame_size_width=S,o.height=y,c.frame_size_height=y);else if(b==="track"&&S!==void 0)o.width=S,c.frame_size_width=S,o.height=y,c.frame_size_height=y,aC!==void 0&&(c.framesReceived=aC,t.framesReceived=aC);else if(b==="codec")c.codecName=p,o.codecType=p;else if(b==="candidate-pair"){var Og;c.ice_available_incoming_bitrate=Y,c.ice_available_outgoing_bitrate=N,c.ice_bytes_received=z,c.ice_bytes_sent=q,c.ice_nominated=Number(IA),c.ice_pair_id=gA,c.ice_pair_rtt=vA,c.rtt=1e3*vA,c.rtt&&(Og=this._context.streamRTT)!==null&&Og!==void 0&&(Og=Og[s])!==null&&Og!==void 0&&Og.video&&(c.total_rtt_ms=Math.round(c.rtt+(this._context.streamRTT[s].video||0))),o.rtt=c.rtt,c.ice_pair_state=bA,c.ice_pair_writable=nA,c.recv_ping_requests=KC,c.recv_ping_responses=YB,c.sent_ping_requests_before_first_response=ug,c.sent_ping_requests_total=ug+(kB||0),c.sent_ping_responses=pB}else b==="local-candidate"?(c.local_candidate_type=H,c.local_ip=CA||LA,c.local_network_type=UA,c.local_port=xA,c.protocol=MI):b==="remote-candidate"&&(c.remote_candidate_type=H,c.remote_ip=CA||LA,c.remote_port=xA)});const{video:l}=g;if(!l.timestamp)return g.video=t,this.filterIllegal(o);const h=Math.max(0,t.packetsLost-l.packetsLost),D=t.packetsReceived-l.packetsReceived;if(o.videoLossRate=h/(D+h),o._receivePackets=t.packetsReceived,o._receivePacketsLost=t.packetsLost,l.totalDecodeTime&&l.framesDecoded&&t.framesDecoded!==l.framesDecoded){const w=t.totalDecodeTime-l.totalDecodeTime,b=t.framesDecoded-l.framesDecoded;c.decode_elapse_per_frame=Number((w/b*1e3).toFixed(2))}var u;return o._retransmittedRate=(t.nackCount-l.nackCount)/(D+h),o.videoLossRate=Number.isNaN(o.videoLossRate)?0:o.videoLossRate,c.fraction_lost=o.videoLossRate,o.statsInterval=t.timestamp-l.timestamp,c.stats_interval=o.statsInterval,o.receivedKBitrate=(t.bytesReceived-l.bytesReceived||0)/o.statsInterval*8,c.bitrate=Math.round(1e3*o.receivedKBitrate),c.bandwidth=Math.round(c.bitrate/1024),o.decoderOutputFrameRate=1e3*(t.framesDecoded-l.framesDecoded)/o.statsInterval,o.receivedFrameRate=1e3*(t.framesReceived-l.framesReceived)/o.statsInterval,c.frame_rate_decoded=Math.round(o.decoderOutputFrameRate),c.frame_rate_received=Math.round(o.receivedFrameRate),c.average_jitter_buffer_delay_ms&&c.total_rtt_ms&&(o.e2eDelay=c.average_jitter_buffer_delay_ms+c.total_rtt_ms),(i=this._context.streamRTT)!==null&&i!==void 0&&(i=i[s])!==null&&i!==void 0&&i.video&&(o.totalRtt=(c.rtt?c.rtt:0)+(this._context.streamRTT[s].video||0)),g.video=t,this._stream.updateVideoStallInfo(c,o,C),c.vendor_mode=this._stream.vendorCode||0,c.pc_session_id=(e=this.handler)===null||e===void 0?void 0:e.peerConnectionId,C&&((u=this._monitor)===null||u===void 0||u.report("rtc_media_statistics",c)),this.filterIllegal(o)}destroy(){super.destroy(),super.stopReport("destroy"),this._stream.stopAudioStallObserve()}}class _lA{constructor(I,g){P(this,"_removeHandler",void 0),P(this,"_remotePauseHandler",void 0),P(this,"_prePts",void 0),P(this,"_stallList",void 0),P(this,"_videoInWaiting",!1),P(this,"_videoInWaitingCallback",!1),P(this,"_videoInWaiting100ms",!1),P(this,"_isPaused",void 0),P(this,"_pauseStart",0),P(this,"_pauseDuration",0),P(this,"_requestVideoFrameCallbackTimer",void 0),P(this,"_logger",void 0),P(this,"_player",void 0),P(this,"_recentVideoInfo",void 0),P(this,"_stallTimeThreshold",void 0),P(this,"_openVideoStall100ms",YA.VIDEO_STALL_100MS);const C=I?1500:CQ||mI?550:500;this._stallTimeThreshold={report:C,callback:Math.max(YA.VIDEO_STALL_DATA,C)},this._logger=new uA("VideoStallObserver",1,g)}start(I){if(this._logger.print("start","invoke"),this._player=I,vV())I.domElement&&(this._requestVideoFrameCallbackTimer=I.domElement.requestVideoFrameCallback(this._onVideoRefresh.bind(this)),this._removeHandler=()=>{var C;this._requestVideoFrameCallbackTimer&&((C=I.domElement)===null||C===void 0||C.cancelVideoFrameCallback(this._requestVideoFrameCallbackTimer))});else{const C=Q=>this._onVideoTimeupdate(Q,I);I.on("playback_event",C),this._removeHandler=()=>I.off("playback_event",C)}const g=C=>this._onVideoPause(C);I.on("playback_event",g),this._remotePauseHandler=()=>I.off("playback_event",g)}getRecentRenderInfo4Report(){const I={};return this._recentVideoInfo&&Object.keys(this._recentVideoInfo).forEach(g=>{var C;const Q=g.replace(/[a-z]{1}[A-Z]{1}/g,B=>"".concat(B[0],"_").concat(B[1].toLowerCase()));I["video_".concat(Q)]=(C=this._recentVideoInfo)===null||C===void 0?void 0:C[g]}),I}stop(){var I,g;this._logger.print("stop","invoke"),delete this._player,(I=this._removeHandler)===null||I===void 0||I.call(this),delete this._removeHandler,(g=this._remotePauseHandler)===null||g===void 0||g.call(this),delete this._remotePauseHandler,delete this._stallList,delete this._prePts,delete this._recentVideoInfo,this._videoInWaiting=!1,this._videoInWaitingCallback=!1,this._videoInWaiting100ms=!1}destroy(){this.stop()}getStallInfo(I){let{interval:g,frameRateReceived:C,frameRateDecoded:Q,bitrate:B}=I;const E={pts:0,report:{stallCount:0,stallDuration:0,list:[]},callback:{stallCount:0,stallDuration:0},pauseDuration:this._getPauseDuration()};return this._stallList&&((CQ||mI)&&(B===0||(Q||1/0)<=1||(C||1/0)<=1)||this._stallList.length===0?(E.report.stallDuration=E.callback.stallDuration=2e3,E.report.stallCount=E.callback.stallCount=this._videoInWaiting?0:1,this._openVideoStall100ms&&(E.stall100ms={count:this._videoInWaiting100ms?0:1,duration:2e3}),this._videoInWaiting=!0,this._videoInWaitingCallback=!0,this._videoInWaiting100ms=!0):this._stallList.forEach((i,e)=>{let o=i.timeUpdateInterval;e===0&&this._videoInWaiting&&(o=Math.round(i.timeUpdateInterval%g));const t=i.timeUpdateInterval>this._stallTimeThreshold.report;t&&(E.report.list.push(i.timeUpdateInterval),E.report.stallDuration+=o,this._videoInWaiting||E.report.stallCount++),this._videoInWaiting=t,i.timeUpdateInterval>this._stallTimeThreshold.callback?(E.callback.stallDuration+=o,this._videoInWaitingCallback||E.callback.stallCount++,this._videoInWaitingCallback=!0):this._videoInWaitingCallback=!1,this._openVideoStall100ms&&(E.stall100ms||(E.stall100ms={count:0,duration:0}),i.timeUpdateInterval>100?(E.stall100ms.duration+=o,this._videoInWaiting100ms||E.stall100ms.count++,this._videoInWaiting100ms=!0):this._videoInWaiting100ms=!1),E.pts=i.playTime}),this._stallList=[]),E}_getPauseDuration(){let I=this._pauseDuration;if(this._pauseDuration=0,this._isPaused){const g=aA(),C=g-(this._pauseStart||0);C>500&&(this._pauseStart=g,I+=C)}return I}_onVideoPause(I){if(I.eventName==="pause")this._isPaused=!0,this._pauseStart=aA();else if(I.eventName==="play"&&this._isPaused){this._isPaused=!1;const g=aA()-this._pauseStart;g>500&&(this._pauseDuration+=g)}}_onVideoTimeupdate(I,g){if(I.eventName==="timeupdate"){const C=g.domElement;if(!C||C.currentTime===0)return;if(this._prePts===void 0)return void(this._prePts=C.currentTime);if(this._stallList||(this._stallList=[]),C.currentTime>this._prePts){const Q=C.currentTime-this._prePts;this._stallList.push({playTime:C.currentTime,timeUpdateInterval:Math.round(1e3*Q)})}this._prePts=C.currentTime}}_onVideoRefresh(I,g){var C;if(this._stallList||(this._stallList=[]),this._prePts){const Q=g.presentationTime-this._prePts;this._stallList.push({playTime:g.presentationTime,timeUpdateInterval:Math.round(Q)})}this._recentVideoInfo=g,this._prePts=g.presentationTime,(C=this._player)===null||C===void 0||(C=C.domElement)===null||C===void 0||C.requestVideoFrameCallback(this._onVideoRefresh.bind(this))}}class BC{constructor(I){P(this,"_audioStallTimer",void 0),P(this,"_preSample",void 0),P(this,"_isStallInPreCallbackEnd",!1),P(this,"_isStallInPreReportEnd",!1),P(this,"_stallList",[]),this._stream=I}static setAudioStallConfig(I){BC.interval=((I==null?void 0:I.audio_stall_interval)||200)/2,BC.ratio=(I==null?void 0:I.audio_stall_ratio)||.6}start(I,g){this.stop(),YA.AUDIO_STALL&&BC.interval>0&&typeof I=="number"&&typeof g=="number"&&(this._preSample={ts:aA(),concealedSamples:I,totalSamplesReceived:g},this._startStallCountInterval())}stop(){this._stallList=[],this._audioStallTimer&&(clearTimeout(this._audioStallTimer),delete this._audioStallTimer)}destroy(){this.stop()}async getAudioStallInfo(){const I={stats_count:this._stallList.filter(B=>!!B.get_stats_cost).length,stall_list:[...this._stallList]};try{await this._audioStallCount()}catch{}const g=UY(this._stallList,2,this._isStallInPreReportEnd);this._isStallInPreReportEnd=g.isStallInEnd;const C=YA.AUDIO_STALL_DATA/BC.interval,Q=UY(this._stallList,C,this._isStallInPreCallbackEnd);return this._isStallInPreCallbackEnd=Q.isStallInEnd,this.stop(),this._startStallCountInterval(),{report:{stall_count:g.stall_count,stall_duration:g.stall_duration,list:g.list},callback:{stall_count:Q.stall_count,stall_duration:Q.stall_duration,list:Q.list},extra:I}}_startStallCountInterval(){const I=async()=>{clearTimeout(this._audioStallTimer),delete this._audioStallTimer,await this._audioStallCount(),this._audioStallTimer||(this._audioStallTimer=setTimeout(I,BC.interval))};this._audioStallTimer=setTimeout(I,BC.interval)}async _audioStallCount(){if(!this._preSample||aA()-this._preSample.ts<.5*BC.interval)return;const{hasAudio:I,subAudio:g,virtual:C,virtualOccupy:Q,removeTrack:B,audioTrack:E}=this._stream;if(B||!E)return clearTimeout(this._audioStallTimer),void delete this._audioStallTimer;const i=I&&g;if(!i||C&&!Q)this._preSample.ts=aA(),this._stallList.push({reason:i?"virtual: ".concat(C,", virtualOccupy: ").concat(Q):"hasAudio: ".concat(I,", subAudio: ").concat(g)});else{const o=aA();let t,s,v=0;try{var e;const c=await((e=this._stream.audioTransceiver)===null||e===void 0?void 0:e.receiver.getStats());c==null||c.forEach(d=>{d.type==="inbound-rtp"&&(t=d),v++})}catch(c){s=c.message||JSON.stringify(c)}const r=aA(),n=aA(),a=n-this._preSample.ts;if(t){const{concealedSamples:c,totalSamplesReceived:d}=t,l=c-this._preSample.concealedSamples,h=d-this._preSample.totalSamplesReceived,D=l>=0&&h>=0&&l>=BC.ratio*h;this._stallList.push({concealed:l,received:h,diff:a,start:this._preSample.ts,end:n,get_stats_cost:r-o,get_stats_start:o,get_stats_end:r,is_stall:D}),this._preSample.concealedSamples=c,this._preSample.totalSamplesReceived=d,this._preSample.ts=n}else this._stallList.push({diff:a,start:this._preSample.ts,end:n,get_stats_cost:r-o,get_stats_start:o,get_stats_end:r,reason:v?s||"no inbound-rtp":"no report"})}}}P(BC,"interval",100),P(BC,"ratio",.6);const UY=(A,I,g)=>{var C;const Q={stall_count:0,stall_duration:0,isStallInEnd:!1,list:[]};let B=0,E=0;for(let i=0;i=I;const s=i+I-B-1;if(!t&&B>2){let v=0;A.slice(i+1,s+1).forEach(r=>{r.is_stall&&(v+=r.diff||0)}),t=E+v>BC.interval*I*BC.ratio,t&&(i=s,E+=v)}t&&(Q.stall_count++,Q.stall_duration+=E,Q.list.push(E)),o&&(Q.isStallInEnd=t),B=E=0}}return((C=A[0])===null||C===void 0?void 0:C.is_stall)===!0&&g&&Q.stall_count>0&&Q.stall_count--,Q};var ws=(A=>(A[A.CAPTURE=0]="CAPTURE",A[A.PRE_PROCESSING=1]="PRE_PROCESSING",A[A.ENCODE=2]="ENCODE",A[A.TRANSFER=3]="TRANSFER",A[A.POST_PROCESSING=4]="POST_PROCESSING",A[A.DECODE=5]="DECODE",A[A.RENDERING=6]="RENDERING",A))(ws||{}),Xs=(A=>(A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A))(Xs||{});class $lA{constructor(I){P(this,"_plugins",new Map),this.id=I}register(I){const g=this._plugins.get(I.type)||[];if(g.findIndex(C=>C.name===I.name)>-1)throw new Error("Failed to register ".concat(I.name,": name is repeated."));g.push(I),this._plugins.set(I.type,g)}getPluginsByType(I){return this._plugins.get(I)||[]}getPluginByName(I,g){return(this._plugins.get(I)||[]).find(C=>C.name===g)}async getPreProcessingTrack(I){const g=this._plugins.get(1)||[];let C=I.mediaTrack;for(const Q of g)C=await Q.effect(I,C);return C}destroy(){this._plugins.forEach(I=>{I.forEach(g=>g.destroy())}),this._plugins.clear()}}const A9A=new uA("InternalEventBus",1);var PB=(A=>(A.ON_IOS_INTERRUPTION_START="ON_IOS_INTERRUPTION_START",A.ON_IOS_INTERRUPTION_END="ON_IOS_INTERRUPTION_END",A.ON_IOS_LOCAL_TRACK_MUTE="ON_IOS_LOCAL_TRACK_MUTE",A.ON_IOS_LOCAL_TRACK_UNMUTE="ON_IOS_LOCAL_TRACK_UNMUTE",A))(PB||{});class I9A extends UB.EventEmitter{emit(I){A9A.info(I);for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q{if(this._audioContextInstance){const g=this._audioContextInstance.currentTime;this._contextStuckAt?this._contextStuckAt!==g&&(this._contextStuckAt=0,or.info("currentTime resume"),tF("currentTime resume","")):g&&I===g&&(this._contextStuckAt=g,or.warn("currentTime stuck",this._contextStuckAt),this._audioContextInstance.suspend(),this._audioContextInstance.resume(),tF("AudioContext currentTime stuck",this._contextStuckAt)),I=g}},3e3)}getAudioContextInstance(){if(!this._audioContextInstance){const I=window.AudioContext||window.webkitAudioContext;this._audioContextInstance=fPA?new I:new I({sampleRate:44100});try{this.isWorkletReady=this._audioContextInstance.audioWorklet.addModule(Kz),this.isWorkletReady.catch(g=>{Qs("initial AudioWorklet error in promise",-1,"".concat(g.name,"-").concat(g.message)),or.error("isWorkletReady",g),this.isWorkletReady=null})}catch(g){Qs("initial AudioWorklet error in catch",-1,"".concat(g.name,"-").concat(g.message)),or.error("isWorkletReady",g),this.isWorkletReady=null}this._audioContextInstance.onstatechange=()=>{var g,C,Q;or.warn("state change",(g=this._audioContextInstance)===null||g===void 0?void 0:g.state),this._previousState=this._currentState,this._currentState=((C=this._audioContextInstance)===null||C===void 0?void 0:C.state)||"",((Q=this._audioContextInstance)===null||Q===void 0?void 0:Q.state)==="interrupted"&&this._audioContextInstance.resume(),(Yo||v9)&&(this._previousState==="running"&&this._currentState==="interrupted"&&$B.emit(PB.ON_IOS_INTERRUPTION_START),this._previousState==="interrupted"&&this._currentState==="running"&&$B.emit(PB.ON_IOS_INTERRUPTION_END))}}return this._audioContextInstance}}class SR{constructor(I){P(this,"_ctx",void 0),P(this,"_analyserNode",void 0),P(this,"_audioSource",void 0),P(this,"currentTrackId",void 0),this.currentTrackId=I.id;const g=MQ.getAudioContextInstance();if(I instanceof MediaStreamTrack){const Q=new MediaStream;Q.addTrack(I),this._audioSource=g.createMediaStreamSource(Q)}else this._audioSource=g.createMediaElementSource(I),this._audioSource.connect(g.destination);const C=g.createAnalyser();this._audioSource.connect(C),this._analyserNode=C,this._ctx=g}getAudioLevel(){var I;((I=this._ctx)===null||I===void 0?void 0:I.state)==="suspended"&&this._ctx.resume();const g=new Uint8Array(2048);this._analyserNode.getByteTimeDomainData(g);let C=0;g.forEach(B=>C=Math.max(C,Math.abs(B-128)));const Q=C/128*255;return Q>2?Q:0}async resume(){var I;await((I=this._ctx)===null||I===void 0?void 0:I.resume())}destroy(){this._audioSource.disconnect(),this._analyserNode.disconnect()}}class TR extends UB.EventEmitter{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:MQ.getAudioContextInstance(),Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:MQ.isWorkletReady;var B;super(),P(this,"_ctx",void 0),P(this,"_worklet",void 0),P(this,"_source",void 0),P(this,"_buffers",[]),P(this,"_bufferLength",0),P(this,"_sampleRate",void 0),P(this,"_channelCount",void 0),P(this,"_frameSize",void 0),I instanceof MediaStreamTrack?this._channelCount=(B=I.getSettings().channelCount)!==null&&B!==void 0?B:1:this._channelCount=I.channelCount,this._ctx=C,this._frameSize=g,Q==null||Q.then(()=>{this._worklet=new AudioWorkletNode(this._ctx,"dump-audio-data"),I instanceof MediaStreamTrack?this._source=this._ctx.createMediaStreamSource(new MediaStream([I])):this._source=I,this._source.connect(this._worklet),this._initWorkletEventListener(this._worklet)}).catch()}_initWorkletEventListener(I){I.port.onmessage=this._handleWorkletMessage.bind(this)}_handleWorkletMessage(I){const{data:g,sampleRate:C}=I.data;if(this._bufferLength>=this._frameSize||this._sampleRate!==C){if(this._sampleRate){const Q=this._channelCount===1||g.length===1?1:2;this.emit("data",{channels:[...this._buffers],sampleRate:this._sampleRate,channelCount:Q})}this._sampleRate=C,this._buffers=new Array(this._channelCount).fill(0).map(()=>new Float32Array(this._frameSize)),this._bufferLength=0}for(let Q=0;Q1&&arguments[1]!==void 0?arguments[1]:{};const g=document.createElement(A);return I.id&&(g.id=I.id),I.classList&&I.classList.forEach(C=>{g.classList.add(C)}),I.style&&Object.assign(g.style,I.style),I.attributes&&Object.entries(I.attributes).forEach(C=>{let[Q,B]=C;Q==="muted"?g.muted=!0:g.setAttribute(Q,B)}),g};class C9A extends iQ{constructor(){var I;super(),P(this,"deviceMap",{audioinput:new Map,audiooutput:new Map,videoinput:new Map}),P(this,"checkDeviceChangeTimer",null),P(this,"isSupportedPermissionsQuery",!1),P(this,"isGrantedMicrophonePermission",!1),P(this,"isGrantedCameraPermission",!1),this.isSupportedPermissionsQuery=!lI()&&!((I=navigator)===null||I===void 0||(I=I.permissions)===null||I===void 0||!I.query),this._handleDeviceChange=this._handleDeviceChange.bind(this),!lI()&&this.initListener().then(()=>{this.updateDeviceListInSilent()})}async refreshDevices(){let I,g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"audio";if(!navigator.mediaDevices)return;if(mI)try{I=g==="audio"?await navigator.mediaDevices.getUserMedia({audio:!0}):await navigator.mediaDevices.getUserMedia({video:!0})}catch{}const C=await navigator.mediaDevices.enumerateDevices();I&&I.getTracks().forEach(Q=>Q.stop()),C.forEach(Q=>{var B;Q.deviceId&&((B=this.deviceMap[Q.kind])===null||B===void 0||B.set(Q.deviceId,Q))})}async initListener(){var I,g;if(((I=navigator.mediaDevices)===null||I===void 0?void 0:I.ondevicechange)!==void 0&&typeof((g=navigator.mediaDevices)===null||g===void 0?void 0:g.addEventListener)=="function"?navigator.mediaDevices.addEventListener("devicechange",()=>{this._handleDeviceChange(),setTimeout(()=>{this._handleDeviceChange()},300)}):this.checkDeviceChangeTimer=window.setInterval(()=>{this._handleDeviceChange()},3e3),this.isSupportedPermissionsQuery){try{const C=await navigator.permissions.query({name:"microphone"});this.isGrantedMicrophonePermission=C.state==="granted",C.addEventListener("change",()=>{this.isGrantedMicrophonePermission=C.state==="granted"})}catch{}try{const C=await navigator.permissions.query({name:"camera"});this.isGrantedCameraPermission=C.state==="granted",C.addEventListener("change",()=>{this.isGrantedCameraPermission=C.state==="granted"})}catch{}}}async _handleDeviceChange(){if(!navigator.mediaDevices)return;let I;mI&&(I=await navigator.mediaDevices.getUserMedia({audio:!0}));let g=await navigator.mediaDevices.enumerateDevices();g=g.filter(Q=>!!Q.deviceId),I&&I.getTracks().forEach(Q=>Q.stop());const C=Array.from([...this.deviceMap.audioinput.values(),...this.deviceMap.videoinput.values(),...this.deviceMap.audiooutput.values()]);(gl||v9)&&!C.length&&g.length&&g.forEach(Q=>{var B;(B=this.deviceMap[Q.kind])===null||B===void 0||B.set(Q.deviceId,Q)}),g.forEach(Q=>{const B=this.deviceMap[Q.kind].get(Q.deviceId);this.deviceMap[Q.kind].set(Q.deviceId,Q),B||(Q.kind.includes("video")?this.emit(X.onVideoDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"active"}):Q.kind.includes("audio")&&this.emit(X.onAudioDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"active"}))}),C.forEach(Q=>{g.find(B=>B.deviceId===Q.deviceId&&B.kind===Q.kind)||(this.deviceMap[Q.kind].delete(Q.deviceId),Q.kind.includes("video")?this.emit(X.onVideoDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"inactive"}):Q.kind.includes("audio")&&this.emit(X.onAudioDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"inactive"}))})}async getUserMedia(I){const g=await navigator.mediaDevices.getUserMedia(I);return I!=null&&I.audio&&(this.isGrantedMicrophonePermission=!0),I!=null&&I.video&&(this.isGrantedCameraPermission=!0),I!=null&&I.video?this.refreshDevices("video"):this.refreshDevices("audio"),g}async checkPermissionsByDevices(){const I={audio:!1,video:!1};if(!navigator.mediaDevices)return I;const g=await navigator.mediaDevices.enumerateDevices();return I.audio=g.filter(C=>C.kind==="audioinput"&&C.label&&C.deviceId).length>0,I.video=g.filter(C=>C.kind==="videoinput"&&C.label&&C.deviceId).length>0,I}async getPermissions(){var I;let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{audio:C,video:Q}=g;const{force:B}=g;C||Q||(C=!0,Q=!0);const E={audio:!1,video:!1,reason:void 0};if(!B)if(this.isSupportedPermissionsQuery){if(C&&Q){if(this.isGrantedMicrophonePermission&&this.isGrantedCameraPermission)return E.audio=!0,E.video=!0,E}else if(C&&this.isGrantedMicrophonePermission||Q&&this.isGrantedCameraPermission)return E.audio=this.isGrantedMicrophonePermission,E.video=this.isGrantedCameraPermission,E}else{const o=await this.checkPermissionsByDevices();if(C&&Q){if(o.audio&&o.video)return o}else if(C&&o.audio||Q&&o.video)return o}if((I=navigator.mediaDevices)!==null&&I!==void 0&&I.getUserMedia)try{const o=await navigator.mediaDevices.getUserMedia({audio:C,video:Q});o&&(o.getTracks().forEach(t=>t.stop()),C&&(E.audio=!0,this.isGrantedMicrophonePermission=!0),Q&&(E.video=!0,this.isGrantedCameraPermission=!0))}catch(o){if(E.reason=o,this.isSupportedPermissionsQuery){var i,e;C&&(E.audio=((i=await navigator.permissions.query({name:"microphone"}).catch(()=>{}))===null||i===void 0?void 0:i.state)==="granted"),Q&&(E.video=((e=await navigator.permissions.query({name:"camera"}).catch(()=>{}))===null||e===void 0?void 0:e.state)==="granted")}}return C?await this.refreshDevices("audio"):await this.refreshDevices("video"),E}async updateDeviceListInSilent(){this.isGrantedCameraPermission&&this.isGrantedMicrophonePermission&&this.refreshDevices("audio")}async enumerateDevices(){return await this.getPermissions(),await this.refreshDevices(),Array.from([...this.deviceMap.audioinput.values(),...this.deviceMap.videoinput.values(),...this.deviceMap.audiooutput.values()])}async enumerateAudioCaptureDevices(){return await this.getPermissions({audio:!0}),await this.refreshDevices(),Array.from(this.deviceMap.audioinput.values())}async enumerateVideoCaptureDevices(){return await this.getPermissions({video:!0}),await this.refreshDevices("video"),Array.from(this.deviceMap.videoinput.values())}async enumerateAudioPlaybackDevices(){return await this.getPermissions({audio:!0}),await this.refreshDevices("audio"),Array.from(this.deviceMap.audiooutput.values())}async getAudioPlaybackDeviceById(I){return(await this.enumerateAudioPlaybackDevices()).find(g=>g.deviceId===I)}}const Xg=new C9A;K0&&(window.__rtc_dd__=Xg);var TC=(A=>(A[A.AUTOPLAY_FAILED=-1e3]="AUTOPLAY_FAILED",A[A.TRACK_ERROR=-1001]="TRACK_ERROR",A[A.Fetch_MODIFY=-1002]="Fetch_MODIFY",A[A.BLACK_BROWSER=-1003]="BLACK_BROWSER",A[A.DC_SEND_ERROR=-1004]="DC_SEND_ERROR",A[A.DUPLICATE_DOM=-1005]="DUPLICATE_DOM",A))(TC||{});const ot=new uA("VideoSnapshot",1),Q9A=A=>{const I=A==null?void 0:A.domElement;if(I&&!I.paused&&I.readyState===4)return I},Jz=async(A,I)=>{const g=document.createElement("canvas"),C=g.getContext("2d");if(!C)throw new Error("canvas.getContext error");const Q=(i,e,o)=>(e=e||i.width,o=o||i.height,g.width=e,g.height=o,C.setTransform(1,0,0,1,0,0),C.drawImage(i,0,0,e,o),C.getImageData(0,0,e,o)),B=Date.now(),E=Q9A(I);if(E){ot.info("takeSnapshot","VideoPlayer already set.");const i=await Q(E,E.videoWidth,E.videoHeight);return ot.info("takeSnapshot","success, cost ".concat(Date.now()-B,"ms")),i}if(window.ImageCapture){const i=new window.ImageCapture(A);if(i.track.readyState==="live"&&i.track.enabled&&!i.track.muted){ot.info("takeSnapshot","use ImageCapture");const e=await Q(await i.grabFrame());return ot.info("takeSnapshot","success, cost ".concat(Date.now()-B,"ms")),e}}return ot.info("takeSnapshot","use temp video"),new Promise((i,e)=>{const o=new MediaStream([A]),t=document.createElement("video");t.setAttribute("playsinline",""),t.muted=!0,document.body.appendChild(t),t.onplaying=()=>{const s=Q(t,t.videoWidth,t.videoHeight);ot.info("takeSnapshot","success, cost ".concat(Date.now()-B,"ms")),i(s),o.removeTrack(A),t.srcObject=null,t.load()},t.onerror=e,t.srcObject=o,t.play()})},UQ=Symbol("default");var Zw=(A=>(A.START_STALL_OBSERVE="start_stall_observe",A.STOP_STALL_OBSERVE="stop_stall_observe",A))(Zw||{});class No extends ez{constructor(I,g,C){super(I,g,R(R({},C),{},{mediaType:Vs.VIDEO})),P(this,"resolution",void 0),P(this,"videoPlayers",new Map),this.resolution={width:0,height:0}}intersection(){const I={};return this.videoPlayers.forEach((g,C)=>{I[C.toString()]=g.isIntersecting}),I}async updateVideoCaptureConfig(I){this.logger.info("updateVideoEncoderConfig","update localVideoTrack: ",I);const g=R({},I);delete g.contentHint,mI&&this.trackInfo.streamIndex===LI.MAIN&&(g.frameRate={ideal:30,max:30}),await this.originTrack.applyConstraints(g);const C=this.originTrack.getSettings();(C.width&&C.width!==this.resolution.width||C.height&&C.height!==this.resolution.height)&&(this.resolution={width:C.width,height:C.height},this.emit("resolution-change",this.resolution))}setContentHint(I){"contentHint"in this.originTrack&&["text","motion","detail"].includes(I)&&(this.originTrack.contentHint=I)}setTrack(I,g){this._originTrack=I,this.trackInfo=R(R({},this.trackInfo),g),this.isTrackReady=this.generatePreProcessingTrack()}setPlayer(I,g,C,Q){var B;const E=(B=I.playerId)!==null&&B!==void 0?B:UQ;let i=this.videoPlayers.get(E);return I.player!==i&&(i=I.player,this.videoPlayers.set(E,i),Q(i,this.isPublic,this.streamIndex)),this.mirror(!!g),this.dummy||C===Ae.PLAY_MANUALLY||this.play(E),i.domElement}setUserId(I){this.trackInfo.streamUserId=I,this.videoPlayers.forEach(g=>{g.userId=I})}snapshot(){let I;for(const g of this.videoPlayers.values())if(g.played){I=g;break}return Jz(this.preprocessingTrack,I)}setRenderMode(I,g){var C;return(C=this.videoPlayers.get(I))===null||C===void 0?void 0:C.setRenderMode(g)}mirror(I){this.videoPlayers.forEach(g=>{g.mirror(I)})}removePlayerTrack(){this.videoPlayers.forEach((I,g)=>{var C;(C=this.videoPlayers.get(g))===null||C===void 0||C.removeTrack()})}play(I){const g=this.videoPlayers.get(I);return g!=null&&g.played?g.manuallyPlay():g==null?void 0:g.playVideo(this)}playAll(){this.videoPlayers.forEach((I,g)=>{this.play(g)})}manuallyPlay(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.manuallyPlay()}pause(I){var g;(g=this.videoPlayers.get(I))===null||g===void 0||g.manuallyPause()}stop(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.stop()}stopAll(){return this.videoPlayers.forEach((I,g)=>{this.stop(g)})}destroy(){this.videoPlayers.forEach((I,g)=>{this.stop(g),I.removeAllListeners(),this.videoPlayers.delete(g)}),super.destroy()}}class B9A extends oz{constructor(I,g,C,Q){super(I,g,R(R({},Q),{},{mediaType:Vs.VIDEO})),P(this,"videoPlayers",new Map),P(this,"_stream",void 0),P(this,"_observingPlayer",void 0),this._stream=C}get observingPlayerId(){var I;return(I=this._observingPlayer)===null||I===void 0?void 0:I.playerId}getSizeByPlayer(){let I=0,g=0;return this.videoPlayers.forEach(C=>{var Q;(Q=C.domElement)!==null&&Q!==void 0&&Q.videoWidth&&C.domElement.videoHeight&&(I=C.domElement.videoWidth,g=C.domElement.videoHeight)}),{width:I,height:g}}intersection(){const I={};return this.videoPlayers.forEach((g,C)=>{I[C.toString()]=g.isIntersecting}),I}setPlayer(I,g,C,Q){var B,E;const i=(B=g.playerId)!==null&&B!==void 0?B:UQ;let e=this.videoPlayers.get(i);if(g.player!==e){var o;e=g.player,!HB(this.streamIndex)&&e.mirror(this._ctx.getRemoteMirrorType((o=this.trackInfo.streamUserId)!==null&&o!==void 0?o:"",this.streamIndex)),this.videoPlayers.set(i,e),this._handlePlayerStallEvent(e),Q(e,this.isPublic,this.streamIndex)}return this.dummy||this.play(i),(E=e)===null||E===void 0?void 0:E.domElement}mirror(I){this.videoPlayers.forEach(g=>{g.mirror(I)})}dangerousGetPlayer(I){return this.videoPlayers.get(I)}snapshot(){let I;for(const g of this.videoPlayers.values())if(g.played){I=g;break}return Jz(this.preprocessingTrack,I)}stop(I){var g;(g=this.videoPlayers.get(I))===null||g===void 0||g.stop()}stopAll(){this.videoPlayers.forEach((I,g)=>{this.stop(g)})}play(I){if(this._ctx.autoPlayPolicy===Ae.PLAY_MANUALLY)return;const g=this.videoPlayers.get(I);return g==null?void 0:g.playVideo(this)}manuallyPlay(I){const g=this.videoPlayers.get(I);return g!=null&&g.played?g.manuallyPlay():g==null?void 0:g.playVideo(this)}pause(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.manuallyPause()}_handlePlayerStallEvent(I){I.on("start_stall_observe",()=>{!this._observingPlayer&&I&&(this._observingPlayer=I,this._stream.startVideoStallObserve(this._observingPlayer))}),I.on("stop_stall_observe",()=>{this._observingPlayer===I&&(this._stream.stopVideoStallObserve(),this._observingPlayer=void 0,this.videoPlayers.forEach(g=>{!this._observingPlayer&&g.played&&(this._observingPlayer=g,this._stream.startVideoStallObserve(g))}))})}destroy(){this.videoPlayers.forEach((I,g)=>{this.stop(g),I.removeAllListeners(),this.videoPlayers.delete(g)}),super.destroy()}}const u9=["play","playing","pause","ended","error","seeking","seeked","waiting","canplay","canplaythrough","durationchange","volumechange","loadedmetadata","loadeddata","loadstart","timeupdate"],E9A={playsinline:"","webkit-playsinline":""},i9A={playsinline:"","webkit-playsinline":"","x5-playsinline":"","x5-video-player-type":"h5","x-webkit-airplay":"allow",preload:"",muted:""};class Pi extends UB.EventEmitter{constructor(I,g,C){super(),P(this,"_containerDom",void 0),P(this,"_videoDom",void 0),P(this,"userId",void 0),P(this,"renderMode",void 0),P(this,"mirrorType",GQ.MIRROR_TYPE_NONE),P(this,"isScreen",void 0),P(this,"isLocal",void 0),P(this,"played",!1),P(this,"_needLoad",!1),P(this,"_emitPlayFailed",!1),P(this,"_videoContainer",void 0),P(this,"_safari15VideoTimer",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_onLocalTrackMute",void 0),P(this,"_onInterruptionEnd",void 0),P(this,"_needResume",!1),P(this,"_rotate",0),P(this,"_rotateDom",void 0),P(this,"_resizeObserver",void 0),P(this,"_hasManuallyPaused",!1),P(this,"isIntersecting",void 0),P(this,"intersectionObserver",void 0),P(this,"emitVideoEvent",e=>{var o,t;const s={type:"video",rawEvent:e,readyState:((o=this._videoDom)===null||o===void 0?void 0:o.readyState)||0,userId:this.userId,eventName:e.type,currentTime:((t=this._videoDom)===null||t===void 0?void 0:t.currentTime)||0,isScreen:this.isScreen};switch(this.emit("playback_event",s),e.type){case"canplay":this.refreshRenderSize("the video started playing."),this._internalPlay();break;case"loadeddata":this._internalPlay();break;case"playing":this.logger.info("VideoPlayerPlaying","[userId-".concat(this.userId,"] video element playing"));break;case"pause":this.logger.info("VideoPlayerPause","[userId-".concat(this.userId,"] video element pause")),this._needResume&&(this.logger.info("VideoPlayerPause","[userId-".concat(this.userId,"] video element resume")),this._internalPlay(),this._needResume=!1)}}),P(this,"_internalPlay",()=>{var e,o;if(AI(this.engineId,"video _internalPlay",{paused:(e=this._videoDom)===null||e===void 0?void 0:e.paused,hasManuallyPaused:this._hasManuallyPaused}),this._hasManuallyPaused||(o=this._videoDom)===null||o===void 0||!o.paused)return;const t=this._videoDom.play();t!=null&&t.then&&t.then(()=>{var s;this.isLocal&&zrA&&!this._needLoad&&((s=this._videoDom)===null||s===void 0||s.load(),this._needLoad=!0)}).catch(s=>{var v,r,n,a;this._emitPlayFailed||(s.name!=="AbortError"?(this._emitPlayFailed=!0,(v=this._monitor)===null||v===void 0||v.report("rtc_error",{message:"video autoplay failed, userId: ".concat(this.userId,", ").concat(s.name),error_code:TC.AUTOPLAY_FAILED}),this.emit("playback_event",{type:"video",rawEvent:s,readyState:((r=this._videoDom)===null||r===void 0?void 0:r.readyState)||0,userId:this.userId,eventName:"autoplay-error",currentTime:((n=this._videoDom)===null||n===void 0?void 0:n.currentTime)||0,isScreen:this.isScreen})):(a=this._monitor)===null||a===void 0||a.report("rtc_error",{message:"video autoplay failed, userId: ".concat(this.userId,", ").concat(s.name),error_code:TC.AUTOPLAY_FAILED}))})}),this.engineId=I,this.playerId=g;const Q=C.renderDom;this._monitor=tI(I),this.logger=new uA("Player",0,I);const{userId:B}=C,E=C.isScreen?Fe.RENDER_MODE_FIT:Fe.RENDER_MODE_HIDDEN;this.renderMode=C.renderMode!==void 0?C.renderMode:E,this._rotate=Number(C.rotation||0);const i=typeof Q=="string"?document.getElementById(Q):Q;if(!i)throw new U(m.CANT_FIND_DOM,"can't find dom");this._videoContainer=document.createElement("div"),this._videoContainer.style.width="100%",this._videoContainer.style.height="100%",this._videoContainer.style.position="relative",this._videoContainer.style.overflow="hidden",this._containerDom=i,this.userId=B,this.isLocal=!!C.isLocal,this.isScreen=!!C.isScreen,this._initVideo(),!this.isLocal||(Js==null?void 0:Js[0])!==15&&mP!==15||(this._safari15VideoTimer=setTimeout(()=>{try{this._videoContainer.style.display="block",setTimeout(()=>{this._videoContainer.style.display="flex"},500)}catch{}},1e3))}_initVideo(){this._videoDom||(this._videoDom=UR("video",{style:{width:"100%",height:"100%"},attributes:i9A}),this._videoDom.id="".concat(this.userId,"_").concat(KE()),this.setRenderMode(this.renderMode),this.mirror(this.mirrorType===GQ.MIRROR_TYPE_RENDER)),this._containerDom.appendChild(this._videoContainer),[90,270].indexOf(this._rotate)>-1?(this._rotateDom=this._createRotationDiv(),this._rotateDom.appendChild(this._videoDom),this._videoContainer.appendChild(this._rotateDom)):(this._rotate===180&&(this._videoContainer.style.transform="rotate(180deg)"),this._videoContainer.appendChild(this._videoDom)),this._initInterSectionObserver(),this._initListeners(),this._onLocalTrackMute=()=>{this._needResume=!0},this._onInterruptionEnd=()=>{this.logger.warn("resume player after iOS interruption"),this._internalPlay()},$B.on(PB.ON_IOS_LOCAL_TRACK_MUTE,this._onLocalTrackMute),$B.on(PB.ON_IOS_LOCAL_TRACK_UNMUTE,this._onInterruptionEnd),$B.on(PB.ON_IOS_INTERRUPTION_END,this._onInterruptionEnd)}_initInterSectionObserver(){!this.intersectionObserver&&typeof IntersectionObserver<"u"&&this._videoDom&&(this.intersectionObserver=new IntersectionObserver(I=>{I[0]&&(this.isIntersecting=I[0].isIntersecting)},{}),this.intersectionObserver.observe(this._videoDom))}_closeIntersectionObserver(){this.intersectionObserver&&this._videoDom&&(this.intersectionObserver.disconnect(),this.intersectionObserver.unobserve(this._videoDom),delete this.intersectionObserver)}_createRotationDiv(){const I=document.createElement("div");return I.style.transform="rotate(".concat(this._rotate,"deg)"),this._rotate!==180&&(I.style.position="absolute",this.refreshRenderSize("init"),window.ResizeObserver&&(this._resizeObserver=new ResizeObserver(()=>{this.refreshRenderSize("the container size has changed.")}),this._resizeObserver.observe(this._containerDom))),I}refreshRenderSize(I){if(this._rotateDom){var g,C;this.logger.print("refreshRenderSize","Because ".concat(I));const Q=Number(window.getComputedStyle(this._containerDom).width.replace("px","")),B=Number(window.getComputedStyle(this._containerDom).height.replace("px","")),E=(g=this._videoDom)===null||g===void 0?void 0:g.videoWidth,i=(C=this._videoDom)===null||C===void 0?void 0:C.videoHeight;if(Q&&B&&i&&E){let e,o;if(this.renderMode===Fe.RENDER_MODE_FILL)e=B,o=Q;else{const t=this.renderMode===Fe.RENDER_MODE_HIDDEN?Math.max(Q/i,B/E):Math.min(Q/i,B/E);e=E*t,o=i*t}this._rotateDom.style.width="".concat(e,"px"),this._rotateDom.style.height="".concat(o,"px"),this._rotateDom.style.left="".concat((Q-e)/2,"px"),this._rotateDom.style.top="".concat((B-o)/2,"px")}}}_initListeners(){this._videoDom&&u9.forEach(I=>{var g;(g=this._videoDom)===null||g===void 0||g.addEventListener(I,this.emitVideoEvent)})}_removeListeners(){this._videoDom&&u9.forEach(I=>{var g;(g=this._videoDom)===null||g===void 0||g.removeEventListener(I,this.emitVideoEvent)})}setRenderMode(I){this.renderMode=I,this._videoDom&&(this.renderMode===Fe.RENDER_MODE_FIT?this._videoDom.style.objectFit="contain":this.renderMode===Fe.RENDER_MODE_FILL?this._videoDom.style.objectFit="fill":this._videoDom.style.objectFit="cover")}async playVideo(I){var g,C;let Q=this._videoDom;if(this.logger.info("playVideo","play video track: ".concat(this.userId)),Q&&Q.srcObject instanceof MediaStream&&Q.srcObject.getTrackById((g=I.preprocessingTrack)===null||g===void 0?void 0:g.id)){try{AI(this.engineId,"playVideo","play video repeatedly",0,this.userId)}catch{}return}Q||(this._initVideo(),Q=this._videoDom),this.logger.info("playVideo","play video by dom: ".concat((C=Q)===null||C===void 0?void 0:C.id));const B=new MediaStream;B.addTrack(I.preprocessingTrack),Q.srcObject=B,Q&&!this._containerDom.contains(this._videoContainer)&&this._containerDom.appendChild(this._videoContainer),Q&&!this._videoContainer.contains(Q)&&this._videoContainer.appendChild(Q),setTimeout(()=>this._internalPlay()),YA.VIDEO_STALL&&this.emit(Zw.START_STALL_OBSERVE),this.played=!0}updateSrcObject(I){const g=I.preprocessingTrack;if(!g||!this._videoDom)return;const C=new MediaStream;C.addTrack(g),this._videoDom.srcObject=C}removeTrack(){var I;const g=(I=this._videoDom)===null||I===void 0?void 0:I.srcObject;if(g){const C=g.getVideoTracks();C!=null&&C.length&&C.forEach(Q=>{g.removeTrack(Q)})}}manuallyPlay(){if(this.logger.info("Invoke VideoPlayer.manuallyPlay",this.userId,this.isScreen),this._emitPlayFailed=!1,this._hasManuallyPaused=!1,!this._videoDom)throw new U(m.INVALID_PARAMS,"Player not found");return this._videoDom.readyState!==0||cR?this._videoDom.play():Promise.resolve()}manuallyPause(){if(this.logger.print("Invoke VideoPlayer.manuallyPause",this.userId,this.isScreen),this.played){if(this._hasManuallyPaused=!0,!this._videoDom)throw new U(m.INVALID_PARAMS,"Player not found");return this._videoDom.pause()}}mirror(I){this.logger.info("mirror","".concat(this.userId," set mirror: ").concat(I)),this.mirrorType=I?GQ.MIRROR_TYPE_RENDER:GQ.MIRROR_TYPE_NONE,this._videoDom&&(this._videoDom.style.transform=I?"rotateY(180deg)":"")}stop(){let I=arguments.length>0&&arguments[0]!==void 0&&arguments[0];const{_containerDom:g}=this;var C,Q;this.logger.info("stop","stop video track: ".concat(this.userId," ").concat(this.playerId.toString())),this._videoDom&&(I||(this._videoDom.srcObject=null),g!=null&&g.contains(this._videoContainer)&&g.removeChild(this._videoContainer),(C=this._videoContainer)===null||C===void 0||C.childNodes.forEach(B=>{B!==this._videoDom&&B!==this._rotateDom||this._videoContainer.removeChild(B)}),(Q=this._rotateDom)!==null&&Q!==void 0&&Q.contains(this._videoDom)&&this._rotateDom.removeChild(this._videoDom)),this._hasManuallyPaused=!1,this.played=!1,YA.VIDEO_STALL&&this.emit(Zw.STOP_STALL_OBSERVE),this._closeIntersectionObserver()}destroy(){var I;let g=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("destroy","video player: ".concat(this.userId)),this.stop(g),(I=this._resizeObserver)===null||I===void 0||I.disconnect(),super.removeAllListeners(),this._removeListeners(),$B.off(PB.ON_IOS_LOCAL_TRACK_MUTE,this._onLocalTrackMute),$B.off(PB.ON_IOS_LOCAL_TRACK_UNMUTE,this._onInterruptionEnd),$B.off(PB.ON_IOS_INTERRUPTION_END,this._onInterruptionEnd),this._videoDom&&delete this._videoDom,this._safari15VideoTimer&&(window.clearInterval(this._safari15VideoTimer),this._safari15VideoTimer=void 0)}get domElement(){return this._videoDom}}class FR extends UB.EventEmitter{constructor(I,g){let{divId:C,muted:Q,isScreen:B}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{divId:void 0,muted:!1,isScreen:!1};if(super(),P(this,"_containerDom",void 0),P(this,"_audioDom",void 0),P(this,"_fakeAudioDom",void 0),P(this,"userId",void 0),P(this,"muted",!1),P(this,"_emitPlayFailed",!1),P(this,"played",!1),P(this,"isScreen",void 0),P(this,"_wechatTimer",void 0),P(this,"_edgeTimer",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_pasued",!0),P(this,"emitAudioEvent",E=>{var i,e;const o={type:"audio",rawEvent:E,readyState:((i=this._audioDom)===null||i===void 0?void 0:i.readyState)||0,userId:this.userId,eventName:E.type,currentTime:((e=this._audioDom)===null||e===void 0?void 0:e.currentTime)||0};var t;E.type==="playing"&&this.logger.info("AudioPlayerPlaying","[userId-".concat(this.userId,"] audio element playing")),E.type==="pause"&&(this.logger.info("AudioPlayerPause","[userId-".concat(this.userId,"] audio element pause")),!this._pasued&&(t=this._audioDom)!==null&&t!==void 0&&(t=t.srcObject)!==null&&t!==void 0&&t.active&&this._internalPlay()),EE&&cR&&(E.type==="canplay"?(clearTimeout(this._wechatTimer),this._wechatTimer=setTimeout(()=>{this._autoPlayError("wechat")},500)):E.type==="playing"&&clearTimeout(this._wechatTimer)),gl&&frA&&E.type==="error"&&(clearTimeout(this._edgeTimer),this._edgeTimer=setTimeout(()=>{var s;((s=this._audioDom)===null||s===void 0?void 0:s.currentTime)===0&&this._autoPlayError("edge")},500)),this.emit("playback_event",o)}),P(this,"_internalPlay",()=>{var E,i;if(AI(this.engineId,"audio _internalPlay",{paused:(E=this._audioDom)===null||E===void 0?void 0:E.paused,userId:this.userId,screen:this.isScreen}),(i=this._audioDom)!==null&&i!==void 0&&i.paused)try{var e;let t=this._audioDom.play();const s=MQ.getAudioContextInstance();if(s.state==="suspended"){const v=s.resume(),r=setTimeout(()=>{var n;s.state==="suspended"&&(this._autoPlayError("AudioContext cannot resume"),(n=this._monitor)===null||n===void 0||n.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": Cannot resume the AudioContext - timeout"),error_code:TC.AUTOPLAY_FAILED})),clearTimeout(r)});v.catch(n=>{var a;this._autoPlayError("AudioContext cannot resume"),(a=this._monitor)===null||a===void 0||a.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": Cannot resume the AudioContext - rejected by: [").concat(n==null?void 0:n.name,"]").concat(n==null?void 0:n.message),error_code:TC.AUTOPLAY_FAILED})}).finally(()=>{clearTimeout(r)})}(e=t)!==null&&e!==void 0&&e.then&&(EE&&gl&&(t=t.then(()=>new Promise(v=>{setTimeout(async()=>{var r;(r=this._audioDom)===null||r===void 0||r.pause(),this._audioDom.volume=1,await this._audioDom.play(),v()},500)}))),t.then(()=>{AI(this.engineId,"_internalPlay successfully",{userId:this.userId,screen:this.isScreen}),this._pasued=!1}).catch(v=>{var r;this._autoPlayError(v),(r=this._monitor)===null||r===void 0||r.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": ").concat(v.message," ").concat(v.name),error_code:TC.AUTOPLAY_FAILED})}))}catch(t){var o;this._autoPlayError(t),(o=this._monitor)===null||o===void 0||o.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": ").concat(t.message," ").concat(t.name),error_code:TC.AUTOPLAY_FAILED})}}),this.engineId=I,C){const E=document.getElementById(C);if(!E)throw new U(m.CANT_FIND_DOM,"can't find dom");this._containerDom=E}else this._containerDom=document.body;this.userId=g,this.muted=Q,this.isScreen=B,this._monitor=tI(I),this.logger=new uA("Player",0,I),this._initAudio()}_initAudio(){this._audioDom||(this._audioDom=UR("audio",{style:{display:"none"},attributes:E9A}),this._audioDom.volume=this.muted?0:1,this._audioDom.muted=this.muted,this._audioDom.id="".concat(this.userId,"_").concat(KE()),this._containerDom.appendChild(this._audioDom)),this._initListeners()}_initListeners(){this._audioDom&&u9.forEach(I=>{var g;(g=this._audioDom)===null||g===void 0||g.addEventListener(I,this.emitAudioEvent)})}_removeListeners(){this._audioDom&&(u9.forEach(I=>{var g;(g=this._audioDom)===null||g===void 0||g.removeEventListener(I,this.emitAudioEvent)}),this._audioDom.removeEventListener("canplay",this._internalPlay),this._audioDom.removeEventListener("loadeddata",this._internalPlay))}async playAudio(I){var g,C,Q;this.logger.info("playAudio","play audio track: ".concat(this.userId));let B=this._audioDom;if(B&&B.srcObject instanceof MediaStream&&B.srcObject.getTrackById((g=I.preprocessingTrack)===null||g===void 0?void 0:g.id))return;B||(this._initAudio(),B=this._audioDom);const E=new MediaStream;I instanceof YR&&(this._fakeAudioDom=new Audio,this._fakeAudioDom.muted=!0,this._fakeAudioDom.srcObject=new MediaStream([I.originTrack])),E.addTrack(I.preprocessingTrack),EE&&gl&&(this._audioDom.volume=0),B.srcObject=E,(C=B)===null||C===void 0||C.addEventListener("canplay",this._internalPlay),(Q=B)===null||Q===void 0||Q.addEventListener("loadeddata",this._internalPlay),setTimeout(()=>this._internalPlay()),this.played=!0}_autoPlayError(I){var g,C;this._emitPlayFailed||(this._emitPlayFailed=!0,this.emit("playback_event",{type:"audio",rawEvent:I,readyState:((g=this._audioDom)===null||g===void 0?void 0:g.readyState)||0,userId:this.userId,eventName:"autoplay-error",currentTime:((C=this._audioDom)===null||C===void 0?void 0:C.currentTime)||0}))}pause(){if(!this._audioDom)throw new U(m.INVALID_PARAMS,"Player not found");this._pasued=!0,this._audioDom.pause()}manuallyPause(){return this.pause()}manuallyPlay(){var I;if(this.logger.info("Invoke AudioPlayer.manuallyPlay"),this._emitPlayFailed=!1,!this._audioDom)throw new U(m.INVALID_PARAMS,"Player not found");if(!this.played)return Promise.resolve();this._audioDom.volume=1,this._audioDom.muted=!1,(I=this._fakeAudioDom)===null||I===void 0||I.play();const g=[],C=this._audioDom.play();C!=null&&C.then&&g.push(C);const Q=MQ.getAudioContextInstance();if(Q.state==="suspended"){const B=Q.resume();B!=null&&B.then&&g.push(B)}(g.length>0?Promise.all(g):Promise.resolve(C)).then(()=>{this._pasued=!1})}async setPlaybackDevice(I){this.logger.info("setPlaybackDevice","setPlaybackDevice: ".concat(I)),(await Xg.enumerateAudioPlaybackDevices()).map(g=>g.deviceId).includes(I)&&this._audioDom&&this._audioDom.setSinkId&&await this._audioDom.setSinkId(I)}stop(){const{_containerDom:I}=this;this.logger.info("stopAudio","stop audio track: ".concat(this.userId)),this._audioDom&&(this._audioDom.srcObject=null,I!=null&&I.contains(this._audioDom)&&I.removeChild(this._audioDom)),this._fakeAudioDom&&(this._fakeAudioDom.srcObject=null,this._fakeAudioDom=void 0),this.played=!1}get domElement(){return this._audioDom}destroy(){this.logger.info("destroy","audio player: ".concat(this.userId)),this.stop(),super.removeAllListeners(),this._removeListeners(),this._audioDom&&(this._audioDom.srcObject=null,delete this._audioDom),this._edgeTimer&&clearTimeout(this._edgeTimer)}}class Wz{constructor(){P(this,"_ac",void 0),P(this,"_sourceNode",void 0),P(this,"_gainNode",void 0),P(this,"_destNode",void 0),this._ac=MQ.getAudioContextInstance(),this._gainNode=this._ac.createGain(),this._destNode=this._ac.createMediaStreamDestination(),this._gainNode.connect(this._destNode)}setVolume(I){this._gainNode.gain.value=I/100}getVolume(){return Math.round(100*this._gainNode.gain.value)}updateInputTrack(I){this._sourceNode&&(this._sourceNode.mediaStream.getTracks().forEach(C=>{C.stop()}),delete this._sourceNode);const g=new MediaStream;g.addTrack(I),this._sourceNode=this._ac.createMediaStreamSource(g),this._sourceNode.connect(this._gainNode)}getOutputTrack(){return this._destNode.stream.getTracks()[0]}destroy(){var I,g;(I=this._sourceNode)===null||I===void 0||I.mediaStream.getTracks().forEach(C=>{C.stop()}),mP!==13&&this._destNode.stream.getTracks().forEach(C=>{C.stop()}),(g=this._sourceNode)===null||g===void 0||g.disconnect(),this._gainNode.disconnect(),delete this._sourceNode}}class Do extends ez{constructor(I,g,C){super(I,g,R(R({},C),{},{mediaType:Vs.AUDIO})),P(this,"audioCaptureConfig",void 0),P(this,"_ap",void 0),P(this,"mixedAudioTrack",void 0),P(this,"mixType",JQ.PLAYOUT_AND_PUBLISH),P(this,"_audioFetchMap",new Map),P(this,"_audioDataFetcher",void 0),P(this,"_localPlaybackTrack",void 0),P(this,"notSupportedWebAudio",!1)}get withWebAudio(){return!!this._ap}getAudioLevel(){var I;let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:i9.MICROPHONE;const C=g===i9.AUDIOMIXING&&this.mixType!==JQ.PLAYOUT&&(I=this.mixedAudioTrack)!==null&&I!==void 0?I:this.preprocessingTrack;let Q=this._audioFetchMap.get(g);var B;return Q&&Q.currentTrackId===C.id||((B=Q)===null||B===void 0||B.destroy(),Q=new SR(C),this._audioFetchMap.set(g,Q)),Q.getAudioLevel()}async updateAudioCaptureConfig(){this.audioCaptureConfig&&(this.logger.print("updateAudioCaptureConfig","update localAudioTrack: ",this.audioCaptureConfig),await this.originTrack.applyConstraints(this.audioCaptureConfig))}setVolume(I){const g=!lA("SKIP_WEB_AUDIO_IN_TRACK")&&(rz()||lA("ENFORCE_WEB_AUDIO_SUPPORTED"));g||(this.notSupportedWebAudio=!0);const C=!this.withWebAudio&&I!==100;try{g&&C&&(this.logger.print("Create AudioProcess"),this._ap=new Wz,this._ap.updateInputTrack(this.originTrack),this.mediaTrack=this._ap.getOutputTrack())}catch{this.logger.warn("WebAudio may not supported, quired return"),this.notSupportedWebAudio=!0}var Q;this.notSupportedWebAudio||(Q=this._ap)===null||Q===void 0||Q.setVolume(I),g&&C&&this.emit("needReplaceTrack",this)}getVolume(){return this._ap?this._ap.getVolume():100}setUserId(I){this.trackInfo.streamUserId=I}setDataFetcher(I,g){this.logger.info("setDataFetcher","frameSize %s",I),MQ.isWorkletReady!==null?this._audioDataFetcher?this._audioDataFetcher.setFrameSize(I):(this._audioDataFetcher=new TR(this.preprocessingTrack,I),this._audioDataFetcher.on("data",g)):this.logger.info("setDataFetcher","audioContextManager.isWorkletReady is null")}stopDataFetcher(){var I,g;(I=this._audioDataFetcher)===null||I===void 0||I.removeAllListeners("data"),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0}play(I){var g,C;this._localPlaybackTrack&&this.stop();const Q=I===QC.AFTER_CAPTURE?this.originTrack:I===QC.AFTER_PROCESS?this.preprocessingTrack:void 0;if(!Q)return void this.logger.error("play()","no target track for %s",I);this._localPlaybackTrack=new YR(this._ctx,Q.clone(),R({},this.trackInfo));const B=this._ctx.earMonitorSettings[(g=this.streamIndex)!==null&&g!==void 0?g:F.STREAM_INDEX_MAIN].volume;this.setPlaybackVolume(B);const E=new FR(this._ctx.id,(C=this.trackInfo.streamUserId)!==null&&C!==void 0?C:"",{isScreen:this.streamIndex===F.STREAM_INDEX_SCREEN,muted:!1});return E.on("playback_event",i=>{var e;i.eventName==="autoplay-error"&&this.emit("autoplay-error",{kind:"audio",streamIndex:(e=this.streamIndex)!==null&&e!==void 0?e:F.STREAM_INDEX_MAIN,mediaType:Vs.AUDIO})}),this._localPlaybackTrack.setPlayer(E),this._localPlaybackTrack.play()}stop(){var I;(I=this._localPlaybackTrack)===null||I===void 0||I.destroy(),this._localPlaybackTrack=void 0}setPlaybackVolume(I){var g;return(g=this._localPlaybackTrack)===null||g===void 0?void 0:g.setVolume(I)}destroy(){var I,g;this._audioFetchMap.forEach(C=>C.destroy()),this._audioFetchMap.clear(),(I=this._ap)===null||I===void 0||I.destroy(),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0,this.stop(),super.destroy()}}class YR extends oz{constructor(I,g,C){super(I,g,R(R({},C),{},{mediaType:Vs.AUDIO})),P(this,"_ap",void 0),P(this,"_audioPlayer",void 0),P(this,"_audioLevelFetcher",void 0),P(this,"_audioDataFetcher",void 0),P(this,"notSupportedWebAudio",!1)}get withWebAudio(){return!!this._ap}getAudioLevel(){return this._audioLevelFetcher||(this._audioLevelFetcher=new SR(this.originTrack)),this._audioLevelFetcher.getAudioLevel()}setVolume(I){const g=!lA("SKIP_WEB_AUDIO_IN_TRACK")&&(rz()||lA("ENFORCE_WEB_AUDIO_SUPPORTED"));g||(this.notSupportedWebAudio=!0);const C=!this.withWebAudio&&I!==100;try{g&&C&&(this.logger.print("Create AudioProcess"),this._ap=new Wz,this._ap.updateInputTrack(this.originTrack),this.mediaTrack=this._ap.getOutputTrack())}catch{this.logger.warn("WebAudio may not supported, quite return"),this.notSupportedWebAudio=!0}if(this.notSupportedWebAudio){var Q;const i=(Q=this._audioPlayer)===null||Q===void 0?void 0:Q.domElement;i&&(i.volume=Math.min(I/100,1))}else{var B;(B=this._ap)===null||B===void 0||B.setVolume(I)}var E;g&&C&&(this.emit("needReplaceTrack",this),(E=this._audioPlayer)===null||E===void 0||E.playAudio(this))}getVolume(){var I,g;return this.notSupportedWebAudio?100*((I=(g=this._audioPlayer)===null||g===void 0||(g=g.domElement)===null||g===void 0?void 0:g.volume)!==null&&I!==void 0?I:1):this._ap?this._ap.getVolume():100}setPlaybackDevice(I){var g;return(g=this._audioPlayer)===null||g===void 0?void 0:g.setPlaybackDevice(I)}setPlayer(I){this._audioPlayer=I}havePlayer(){return!!this._audioPlayer}bindPlayerEvent(I){var g;this._audioPlayer&&I(this._audioPlayer,this.isPublic,(g=this.streamIndex)!==null&&g!==void 0?g:F.STREAM_INDEX_MAIN)}pause(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.pause()}play(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.playAudio(this)}manuallyPlay(){var I,g,C;return(I=this._audioPlayer)!==null&&I!==void 0&&I.played?(g=this._audioPlayer)===null||g===void 0?void 0:g.manuallyPlay():(C=this._audioPlayer)===null||C===void 0?void 0:C.playAudio(this)}manuallyPause(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.manuallyPause()}stop(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.stop()}setDataFetcher(I,g){this.logger.info("setDataFetcher","frameSize %s",I),MQ.isWorkletReady!==null?this._audioDataFetcher?this._audioDataFetcher.setFrameSize(I):(this._audioDataFetcher=new TR(this.originTrack,I),this._audioDataFetcher.on("data",g)):this.logger.warn("setDataFetcher","audioContextManager.isWorkletReady is null")}stopDataFetcher(){var I;this.logger.info("stopDataFetcher"),(I=this._audioDataFetcher)===null||I===void 0||I.destroy(),this._audioDataFetcher=void 0}destroy(){var I,g,C;(I=this._audioLevelFetcher)===null||I===void 0||I.destroy(),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0,this._ap&&this._ap.destroy(),(C=this._audioPlayer)===null||C===void 0||C.destroy(),this._audioPlayer=void 0,super.destroy()}}const e9A=new uA("VERTC",0);let Kw,tr=null;const o9A=()=>!!Vz();function Vz(){if(tr)return tr;try{tr=window.require("electron");const{ipcRenderer:A}=tr;return Kw={getSources:I=>A.invoke("DESKTOP_CAPTURER_GET_SOURCES",I)},tr}catch{return null}}async function zz(A,I,g){let C;return I||(I={width:1920,height:1080,frameRate:15}),C=g?{audio:{mandatory:{chromeMediaSource:"desktop"}},video:{mandatory:{chromeMediaSource:"desktop",maxHeight:I.height,maxWidth:I.width,maxFrameRate:I.frameRate}}}:{audio:!1,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:A,maxHeight:I.height,maxWidth:I.width,maxFrameRate:I.frameRate}}},e9A.info("getUserMediaConfig",JSON.stringify(C)),await navigator.mediaDevices.getUserMedia(C)}async function Mz(A){let I=["window","screen"];if(A==="window"&&(I=["window"]),A==="screen"&&(I=["screen"]),!Vz())throw new U(m.ERR_ELECTRON_IS_NULL,"Unable to get Electron object");let g=null;try{g=Kw.getSources({types:I})}catch{g=null}g&&g.then||(g=new Promise((C,Q)=>{Kw.getSources({types:I},(B,E)=>{B?Q(B):C(E)})}));try{return await g}catch(C){throw new U(m.ERR_ELECTRON_IS_NULL,C.toString())}}function t9A(A){return new Promise((I,g)=>{const C=document.createElement("div");C.innerText="share screen",C.setAttribute("style","text-align: center; height: 25px; line-height: 25px; border-radius: 4px 4px 0 0; background: #D4D2D4; border-bottom: solid 1px #B9B8B9;");const Q=document.createElement("div");Q.setAttribute("style","width: 100%; height: 500px; padding: 15px 25px ; box-sizing: border-box;");const B=document.createElement("div");B.innerText="Web Screensharing wants to share the contents of your screen. Choose what you'd like to share.",B.setAttribute("style","height: 12%;");const E=document.createElement("div");E.setAttribute("style","width: 100%; height: 80%; background: #FFF; border: solid 1px #CBCBCB; display: flex; flex-wrap: wrap; justify-content: space-around; overflow-y: scroll; padding: 0 15px; box-sizing: border-box;");const i=document.createElement("div");i.setAttribute("style","text-align: right; padding: 16px 0;");const e=document.createElement("button");e.innerHTML="cancel",e.setAttribute("style","width: 85px;"),e.onclick=()=>{document.body.removeChild(o);const t=new Error("NotAllowedError");t.name="NotAllowedError",g(t)},i.appendChild(e),Q.appendChild(B),Q.appendChild(E),Q.appendChild(i);const o=document.createElement("div");o.setAttribute("style","position: fixed; z-index: 99999999; top: 50%; left: 50%; width: 620px; height: 525px; background: #ECECEC; border-radius: 4px; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%);"),o.appendChild(C),o.appendChild(Q),document.body.appendChild(o),A.map(t=>{if(t.id){const s=document.createElement("div");s.setAttribute("style","width: 30%; height: 160px; padding: 20px 0; text-align: center;box-sizing: content-box;"),s.innerHTML=`
- -
- - `).concat(t.name,` - `),s.onclick=()=>{document.body.removeChild(o),I(t.id)},E.appendChild(s)}})})}async function s9A(A,I){const g=await Mz(),C=await t9A(g);return await zz(C,A,I)}async function v9A(A,I){const g=new No(A,I,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,isDummy:!0});return await g.isTrackReady,g}async function r9A(A,I){const g=new No(A,I,{isDummy:!0,streamIndex:LI.SCREEN,sourceType:oI.INTERNAL});return await g.isTrackReady,g}async function jc(A,I){var g;let C;const Q=((g=(I=I||A.videoProfile.getCaptureConfig()).deviceId)===null||g===void 0?void 0:g.exact)||"default",B=tC(),E=new uA("TrackFactory",0,A.id);try{var i,e,o;E.info("createCameraVideoTrack","constraints:",I),(i=A.monitor)===null||i===void 0||i.report("rtc_video_capture_event",{event_type:"start",media_device_id:Q,capture_session_id:B});const r=aA();mI&&(I.frameRate={ideal:30,max:30}),C=await Xg.getUserMedia({video:I}),(e=A.monitor)===null||e===void 0||e.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:Q,media_device_name:((o=C.getVideoTracks()[0])===null||o===void 0?void 0:o.label)||"",reason:"success",elapse:aA()-r,capture_session_id:B})}catch(r){var t;throw(t=A.monitor)===null||t===void 0||t.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:Q,error_code:r.code,reason:r.name+r.message,capture_session_id:B}),new U(m.GET_VIDEO_TRACK_FAILED,"throw error from getUserMedia. [".concat(r.name||"unknown name","]: ").concat(r.message||"unknown message","."),r)}const s=C.getVideoTracks()[0],v=new No(A,s,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:B});return await v.isTrackReady,v}async function Jw(A,I){var g;let C;new uA("TrackFactory",0,A.id).info("createMicrophoneAudioTrack","constraints:",I);const Q=((g=I.deviceId)===null||g===void 0?void 0:g.exact)||"default",B=tC();try{var E,i,e;(E=A.monitor)===null||E===void 0||E.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_begin",media_device_id:Q,event_session_id:B});const v=aA();A.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCAIAnsExtension")&&(I.autoGainControl=!0,I.noiseSuppression=!1),C=await Xg.getUserMedia({audio:I}),(i=A.monitor)===null||i===void 0||i.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_result",media_device_id:Q,media_device_name:((e=C.getAudioTracks()[0])===null||e===void 0?void 0:e.label)||"",reason:"success",elapse:aA()-v,event_session_id:B})}catch(v){var o;throw(o=A.monitor)===null||o===void 0||o.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_end",media_device_id:Q,error_code:v.code,reason:v.name+v.message,event_session_id:B}),new U(m.GET_AUDIO_TRACK_FAILED,"throw error from getUserMedia. [".concat(v.name||"unknown name","]: ").concat(v.message||"unknown message","."),v)}const t=C.getAudioTracks()[0],s=new Do(A,t,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:B});return await s.isTrackReady,s}async function a9A(A,I,g){var C,Q;let B;new uA("TrackFactory",0,A.id).print("createCameraAndMicrophoneTrack","audioConstraints:",I,"videoConstraints:",g);const E=((C=I.deviceId)===null||C===void 0?void 0:C.exact)||"default",i=((Q=g.deviceId)===null||Q===void 0?void 0:Q.exact)||"default",e=tC(),o=tC();try{var t,s,v,r,n,a;(t=A.monitor)===null||t===void 0||t.report("rtc_video_capture_event",{event_type:"start",media_device_id:i,capture_session_id:e}),(s=A.monitor)===null||s===void 0||s.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_begin",media_device_id:E,event_session_id:o});const w=aA();mI&&(g.frameRate={ideal:30,max:30}),A.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCAIAnsExtension")&&(I.autoGainControl=!0,I.noiseSuppression=!1),B=await Xg.getUserMedia({audio:I,video:g}),(v=A.monitor)===null||v===void 0||v.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:i,media_device_name:((r=B.getVideoTracks()[0])===null||r===void 0?void 0:r.label)||"",reason:"success",elapse:aA()-w,capture_session_id:e}),(n=A.monitor)===null||n===void 0||n.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_result",media_device_id:E,media_device_name:((a=B.getAudioTracks()[0])===null||a===void 0?void 0:a.label)||"",reason:"success",elapse:aA()-w,event_session_id:o})}catch(w){var c,d;throw(c=A.monitor)===null||c===void 0||c.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:i,error_code:w.code,reason:w.name+w.message,capture_session_id:e}),(d=A.monitor)===null||d===void 0||d.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_end",media_device_id:E,error_code:w.code,reason:w.name+w.message,event_session_id:o}),new U(m.GET_VIDEO_TRACK_FAILED,"throw error from getUserMedia. [".concat(w.name||"unknown name","]: ").concat(w.message||"unknown message","."),w)}const l=B.getVideoTracks()[0],h=new No(A,l,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:e}),D=B.getAudioTracks()[0],u=new Do(A,D,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:o});return await Promise.all([h.isTrackReady,u.isTrackReady]),{videoTrack:h,audioTrack:u}}async function P9A(A,I){const g=new uA("TrackFactory",0,A.id);let C,Q=A.videoProfile.getScreenEncodeConfig();g.info("createScreenTracks","screenConfig: %o, constraints: %o",I,Q);const B=tC(),{enableAudio:E=!1,displaySurface:i,systemAudio:e,surfaceSwitching:o,selfBrowserSurface:t,sourceId:s}=I,v={};i&&["monitor","browser","window"].includes(i)&&(Q?Q.displaySurface=i:Q={displaySurface:i}),e&&["include","exclude"].includes(e)&&(v.systemAudio=e),o&&["include","exclude"].includes(o)&&(v.surfaceSwitching=o),t&&["include","exclude"].includes(t)&&(v.selfBrowserSurface=t);try{var r,n,a,c;(r=A.monitor)===null||r===void 0||r.report("rtc_video_capture_event",{event_type:"start",media_device_id:"screen",capture_session_id:B});const u=aA();C=o9A()?s?await zz(s,Q,E):await s9A(Q,E):await navigator.mediaDevices.getDisplayMedia(R({video:!(Q&&(!CQ||tV!=="16.1"))||Q,audio:!!E&&{channelCount:2,noiseSuppression:!1,echoCancellation:!0,autoGainControl:!1}},v)),(n=A.monitor)===null||n===void 0||n.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:"screen",media_device_name:"".concat(((a=C.getVideoTracks()[0])===null||a===void 0?void 0:a.label)||"",", ").concat(((c=C.getAudioTracks()[0])===null||c===void 0?void 0:c.label)||""),reason:"success",elapse:aA()-u,capture_session_id:B})}catch(u){var d;throw(d=A.monitor)===null||d===void 0||d.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:"screen",error_code:u.code,reason:u.name+u.message,capture_session_id:B}),new U(m.GET_SCREEN_TRACK_FAILED,"throw error from getDisplayMedia",u)}const l=C.getVideoTracks()[0],h=new No(A,l,{streamIndex:LI.SCREEN,sourceType:oI.INTERNAL,captureSessionId:B}),D=C.getAudioTracks()[0];if(C.getAudioTracks().length){const u=new Do(A,D,{streamIndex:LI.SCREEN,sourceType:oI.INTERNAL,captureSessionId:B});return await Promise.all([h.isTrackReady,u.isTrackReady]),[h,u]}return await h.isTrackReady,[h,void 0]}function c9A(A,I,g,C){return new B9A(A,I,g,R({},C))}function Xz(A,I,g){return new YR(A,I,R({},g))}async function n9A(A,I){const g=new No(A,I,{streamIndex:LI.MAIN,sourceType:oI.EXTERNAL});return await g.isTrackReady,g}async function l9A(A,I){const g=new Do(A,I,{streamIndex:LI.MAIN,sourceType:oI.EXTERNAL});return await g.isTrackReady,g}async function d9A(A,I){const g=new No(A,I,{sourceType:oI.EXTERNAL,streamIndex:LI.SCREEN});return await g.isTrackReady,g}async function h9A(A,I){const g=new Do(A,I,{sourceType:oI.EXTERNAL,streamIndex:LI.SCREEN});return await g.isTrackReady,g}const jz="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IHQ9e2dldE5BTFVuaXRzKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoZS5sZW5ndGgtZS5wb3NpdGlvbjw0KXJldHVybltdO2NvbnN0e3Bvc2l0aW9uOnJ9PWU7cmV0dXJuIDE9PT1lLmdldEludDMyKHIpfHwwPT09ZS5nZXRJbnQxNihyKSYmMT09PWUuZ2V0SW50OChyKzIpP3QuZ2V0QW5uZXhiTmFscyhlLG4pOnQuZ2V0QXZjY05hbHMoZSxuKX0sZ2V0QW5uZXhiTmFscyhlLG4pe2NvbnN0IHI9W107bGV0IGk9dC5nZXRIZWFkZXJQb3NpdGlvbkFubmV4QihlKSxvPWkucG9zLGE9bztmb3IoO288ZS5sZW5ndGgtNDspe2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UobyxvK2kuaGVhZGVyTGVuZ3RoKSk7aS5wb3M9PT1lLnBvc2l0aW9uJiZlLnNraXAoaS5oZWFkZXJMZW5ndGgpLGk9dC5nZXRIZWFkZXJQb3NpdGlvbkFubmV4QihlKSxhPWkucG9zO2NvbnN0IGM9e2hlYWRlcjpzLGJvZHk6bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UobytzLmJ5dGVMZW5ndGgsYSkpLHR5cGU6LTF9O24/dC5hbmFseXNlSDI2NU5hbChjKTp0LmFuYWx5c2VOYWwoYyksKGMudHlwZTw9OXx8biYmYy50eXBlPD00MCkmJjAhPT1jLnR5cGUmJnIucHVzaChjKSxlLnNraXAoYS1lLnBvc2l0aW9uKSxvPWF9cmV0dXJuIHJ9LGdldEF2Y2NOYWxzKGUsbil7Y29uc3Qgcj1bXTtmb3IoO2UucG9zaXRpb248ZS5sZW5ndGgtNDspe2NvbnN0IGk9ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTtpZighKGUubGVuZ3RoLWUucG9zaXRpb24+PWkpKWJyZWFrO3tjb25zdCBvPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLnNsaWNlKGUucG9zaXRpb24sZS5wb3NpdGlvbis0KSk7ZS5za2lwKDQpO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UoZS5wb3NpdGlvbixlLnBvc2l0aW9uK2kpKTtlLnNraXAoaSk7Y29uc3Qgcz17aGVhZGVyOm8sYm9keTphLHR5cGU6LTF9O24/dC5hbmFseXNlSDI2NU5hbChzKTp0LmFuYWx5c2VOYWwocykscy50eXBlPD05JiYwIT09cy50eXBlJiZyLnB1c2gocyl9fXJldHVybiByfSxhbmFseXNlTmFsKHQpe2NvbnN0IGU9MzEmdC5ib2R5WzBdO3N3aXRjaCh0LnR5cGU9ZSxlKXtjYXNlIDE6dC5uZHI9ITA7YnJlYWs7Y2FzZSA1OnQuaWRyPSEwO2JyZWFrO2Nhc2UgNjp0LnNlaT0hMDticmVhaztjYXNlIDc6dC5zcHM9ITA7YnJlYWs7Y2FzZSA4OnQucHBzPSEwfX0sYW5hbHlzZUgyNjVOYWwodCl7Y29uc3QgZT0oMTI2JnQuYm9keVswXSk+PjE7c3dpdGNoKHQudHlwZT1lLGUpe2Nhc2UgMzk6Y2FzZSA0MDp0LnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpe2xldCBlPXQucG9zaXRpb24sbj0wO2NvbnN0IHI9dC5sZW5ndGg7Zm9yKDszIT09biYmNCE9PW4mJmU8ci00OykwPT09dC5nZXRJbnQxNihlKT8xPT09dC5nZXRJbnQxNihlKzIpP249NDoxPT09dC5nZXRJbnQ4KGUrMik/bj0zOmUrKzplKys7cmV0dXJuIGU9PT1yLTQmJigwPT09dC5nZXRJbnQxNihlKT8xPT09dC5nZXRJbnQxNihlKzIpP249NDplPXI6KGUrKywwPT09dC5nZXRJbnQxNihlKSYmMT09PXQuZ2V0SW50OChlKT9uPTM6ZT1yKSkse3BvczplLGhlYWRlckxlbmd0aDpufX0saXNIMjY1VmlkZW9GcmFtZSh0KXt2YXIgZTtyZXR1cm4oKG51bGw9PT0oZT10LmdldE1ldGFkYXRhKXx8dm9pZCAwPT09ZXx8bnVsbD09PShlPWUuY2FsbCh0KSl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWltZVR5cGUpfHwiIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiaDI2NSIpfX07dmFyIGU9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJkZWZhdWx0Iik/dC5kZWZhdWx0OnR9dmFyIHI9e2V4cG9ydHM6e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuTWF0aD09PU1hdGgmJnR9LG89aSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxpKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxpKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGkoIm9iamVjdCI9PXR5cGVvZiBlJiZlKXx8aSgib2JqZWN0Ij09dHlwZW9mIGUmJmUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGE9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKGUpe3JldHVybiEwfX0scz0hYSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKSxjPXMsbD1GdW5jdGlvbi5wcm90b3R5cGUsdT1sLmFwcGx5LGg9bC5jYWxsLGY9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoYz9oLmJpbmQodSk6ZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseSh1LGFyZ3VtZW50cyl9KSxkPXMsXz1GdW5jdGlvbi5wcm90b3R5cGUscD1fLmNhbGwsZz1kJiZfLmJpbmQuYmluZChwLHApLG09ZD9nOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHQsYXJndW1lbnRzKX19LHk9bSx2PXkoe30udG9TdHJpbmcpLGI9eSgiIi5zbGljZSksdz1mdW5jdGlvbih0KXtyZXR1cm4gYih2KHQpLDgsLTEpfSxrPXcsUz1tLE89ZnVuY3Rpb24odCl7aWYoIkZ1bmN0aW9uIj09PWsodCkpcmV0dXJuIFModCl9LHg9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLEE9dm9pZCAwPT09eCYmdm9pZCAwIT09eD9mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdHx8dD09PXh9OmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fSxUPXt9LEU9IWEoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksTD1zLHo9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsQj1MP3ouYmluZCh6KTpmdW5jdGlvbigpe3JldHVybiB6LmFwcGx5KHosYXJndW1lbnRzKX0sST17fSxDPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixSPU4mJiFDLmNhbGwoezE6Mn0sMSk7SS5mPVI/ZnVuY3Rpb24odCl7dmFyIGU9Tih0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpDO3ZhciBqLEQsUD1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX0sVT1hLEY9dyxNPU9iamVjdCxaPW0oIiIuc3BsaXQpLEo9VSgoZnVuY3Rpb24oKXtyZXR1cm4hTSgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT09Rih0KT9aKHQsIiIpOk0odCl9Ok0sSD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH0sVz1ILEs9VHlwZUVycm9yLEc9ZnVuY3Rpb24odCl7aWYoVyh0KSl0aHJvdyBuZXcgSygiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH0sVj1KLFk9RyxYPWZ1bmN0aW9uKHQpe3JldHVybiBWKFkodCkpfSxxPUEsJD1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQ/bnVsbCE9PXQ6cSh0KX0sUT17fSx0dD1RLGV0PW8sbnQ9QSxydD1mdW5jdGlvbih0KXtyZXR1cm4gbnQodCk/dDp2b2lkIDB9LGl0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9ydCh0dFt0XSl8fHJ0KGV0W3RdKTp0dFt0XSYmdHRbdF1bZV18fGV0W3RdJiZldFt0XVtlXX0sb3Q9bSh7fS5pc1Byb3RvdHlwZU9mKSxhdD1vLm5hdmlnYXRvcixzdD1hdCYmYXQudXNlckFnZW50LGN0PW8sbHQ9c3Q/U3RyaW5nKHN0KToiIix1dD1jdC5wcm9jZXNzLGh0PWN0LkRlbm8sZnQ9dXQmJnV0LnZlcnNpb25zfHxodCYmaHQudmVyc2lvbixkdD1mdCYmZnQudjg7ZHQmJihEPShqPWR0LnNwbGl0KCIuIikpWzBdPjAmJmpbMF08ND8xOisoalswXStqWzFdKSksIUQmJmx0JiYoIShqPWx0Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8alsxXT49NzQpJiYoaj1sdC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKEQ9K2pbMV0pO3ZhciBfdD1ELHB0PV90LGd0PWEsbXQ9by5TdHJpbmcseXQ9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhZ3QoKGZ1bmN0aW9uKCl7dmFyIHQ9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIW10KHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZwdCYmcHQ8NDF9KSksdnQ9eXQmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsYnQ9aXQsd3Q9QSxrdD1vdCxTdD1PYmplY3QsT3Q9dnQ/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXt2YXIgZT1idCgiU3ltYm9sIik7cmV0dXJuIHd0KGUpJiZrdChlLnByb3RvdHlwZSxTdCh0KSl9LHh0PVN0cmluZyxBdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHh0KHQpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0sVHQ9QSxFdD1BdCxMdD1UeXBlRXJyb3IsenQ9ZnVuY3Rpb24odCl7aWYoVHQodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEx0KEV0KHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX0sQnQ9enQsSXQ9SCxDdD1CLE50PUEsUnQ9JCxqdD1UeXBlRXJyb3IsRHQ9e2V4cG9ydHM6e319LFB0PW8sVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LEZ0PW8sTXQ9ZnVuY3Rpb24odCxlKXt0cnl7VXQoUHQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtQdFt0XT1lfXJldHVybiBlfSxadD0iX19jb3JlLWpzX3NoYXJlZF9fIixKdD1EdC5leHBvcnRzPUZ0W1p0XXx8TXQoWnQse30pOyhKdC52ZXJzaW9uc3x8KEp0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIEh0PUR0LmV4cG9ydHMsV3Q9SHQsS3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gV3RbdF18fChXdFt0XT1lfHx7fSl9LEd0PUcsVnQ9T2JqZWN0LFl0PWZ1bmN0aW9uKHQpe3JldHVybiBWdChHdCh0KSl9LFh0PVl0LHF0PW0oe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHF0KFh0KHQpLGUpfSxRdD1tLHRlPTAsZWU9TWF0aC5yYW5kb20oKSxuZT1RdCgxLi50b1N0cmluZykscmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbmUoKyt0ZStlZSwzNil9LGllPUt0LG9lPSR0LGFlPXJlLHNlPXl0LGNlPXZ0LGxlPW8uU3ltYm9sLHVlPWllKCJ3a3MiKSxoZT1jZT9sZS5mb3J8fGxlOmxlJiZsZS53aXRob3V0U2V0dGVyfHxhZSxmZT1mdW5jdGlvbih0KXtyZXR1cm4gb2UodWUsdCl8fCh1ZVt0XT1zZSYmb2UobGUsdCk/bGVbdF06aGUoIlN5bWJvbC4iK3QpKSx1ZVt0XX0sZGU9QixfZT0kLHBlPU90LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtyZXR1cm4gSXQobik/dm9pZCAwOkJ0KG4pfSxtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI7aWYoInN0cmluZyI9PT1lJiZOdChuPXQudG9TdHJpbmcpJiYhUnQocj1DdChuLHQpKSlyZXR1cm4gcjtpZihOdChuPXQudmFsdWVPZikmJiFSdChyPUN0KG4sdCkpKXJldHVybiByO2lmKCJzdHJpbmciIT09ZSYmTnQobj10LnRvU3RyaW5nKSYmIVJ0KHI9Q3Qobix0KSkpcmV0dXJuIHI7dGhyb3cgbmV3IGp0KCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0seWU9VHlwZUVycm9yLHZlPWZlKCJ0b1ByaW1pdGl2ZSIpLGJlPWZ1bmN0aW9uKHQsZSl7aWYoIV9lKHQpfHxwZSh0KSlyZXR1cm4gdDt2YXIgbixyPWdlKHQsdmUpO2lmKHIpe2lmKHZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iiksbj1kZShyLHQsZSksIV9lKG4pfHxwZShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgeWUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIiksbWUodCxlKX0sd2U9T3Qsa2U9ZnVuY3Rpb24odCl7dmFyIGU9YmUodCwic3RyaW5nIik7cmV0dXJuIHdlKGUpP2U6ZSsiIn0sU2U9JCxPZT1vLmRvY3VtZW50LHhlPVNlKE9lKSYmU2UoT2UuY3JlYXRlRWxlbWVudCksQWU9ZnVuY3Rpb24odCl7cmV0dXJuIHhlP09lLmNyZWF0ZUVsZW1lbnQodCk6e319LFRlPUFlLEVlPSFFJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLExlPUUsemU9QixCZT1JLEllPVAsQ2U9WCxOZT1rZSxSZT0kdCxqZT1FZSxEZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1QuZj1MZT9EZTpmdW5jdGlvbih0LGUpe2lmKHQ9Q2UodCksZT1OZShlKSxqZSl0cnl7cmV0dXJuIERlKHQsZSl9Y2F0Y2gobil7fWlmKFJlKHQsZSkpcmV0dXJuIEllKCF6ZShCZS5mLHQsZSksdFtlXSl9O3ZhciBQZT1hLFVlPUEsRmU9LyN8XC5wcm90b3R5cGVcLi8sTWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1KZVtaZSh0KV07cmV0dXJuIG49PT1XZXx8biE9PUhlJiYoVWUoZSk/UGUoZSk6ISFlKX0sWmU9TWUubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShGZSwiLiIpLnRvTG93ZXJDYXNlKCl9LEplPU1lLmRhdGE9e30sSGU9TWUuTkFUSVZFPSJOIixXZT1NZS5QT0xZRklMTD0iUCIsS2U9TWUsR2U9enQsVmU9cyxZZT1PKE8uYmluZCksWGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR2UodCksdm9pZCAwPT09ZT90OlZlP1llKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxxZT17fSwkZT1FJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSksUWU9JCx0bj1TdHJpbmcsZW49VHlwZUVycm9yLG5uPWZ1bmN0aW9uKHQpe2lmKFFlKHQpKXJldHVybiB0O3Rocm93IG5ldyBlbih0bih0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX0scm49RSxvbj1FZSxhbj0kZSxzbj1ubixjbj1rZSxsbj1UeXBlRXJyb3IsdW49T2JqZWN0LmRlZmluZVByb3BlcnR5LGhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZm49ImVudW1lcmFibGUiLGRuPSJjb25maWd1cmFibGUiLF9uPSJ3cml0YWJsZSI7cWUuZj1ybj9hbj9mdW5jdGlvbih0LGUsbil7aWYoc24odCksZT1jbihlKSxzbihuKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmInByb3RvdHlwZSI9PT1lJiYidmFsdWUiaW4gbiYmX24gaW4gbiYmIW5bX25dKXt2YXIgcj1obih0LGUpO3ImJnJbX25dJiYodFtlXT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTpkbiBpbiBuP25bZG5dOnJbZG5dLGVudW1lcmFibGU6Zm4gaW4gbj9uW2ZuXTpyW2ZuXSx3cml0YWJsZTohMX0pfXJldHVybiB1bih0LGUsbil9OnVuOmZ1bmN0aW9uKHQsZSxuKXtpZihzbih0KSxlPWNuKGUpLHNuKG4pLG9uKXRyeXtyZXR1cm4gdW4odCxlLG4pfWNhdGNoKHIpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBuZXcgbG4oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9O3ZhciBwbj1xZSxnbj1QLG1uPUU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBwbi5mKHQsZSxnbigxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH0seW49byx2bj1mLGJuPU8sd249QSxrbj1ULmYsU249S2UsT249USx4bj1YZSxBbj1tbixUbj0kdCxFbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihuLHIsaSl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLHIpfXJldHVybiBuZXcgdChuLHIsaSl9cmV0dXJuIHZuKHQsdGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZS5wcm90b3R5cGU9dC5wcm90b3R5cGUsZX0sTG49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaD10LnRhcmdldCxmPXQuZ2xvYmFsLGQ9dC5zdGF0LF89dC5wcm90byxwPWY/eW46ZD95bltoXTp5bltoXSYmeW5baF0ucHJvdG90eXBlLGc9Zj9PbjpPbltoXXx8QW4oT24saCx7fSlbaF0sbT1nLnByb3RvdHlwZTtmb3IobyBpbiBlKXI9IShuPVNuKGY/bzpoKyhkPyIuIjoiIyIpK28sdC5mb3JjZWQpKSYmcCYmVG4ocCxvKSxzPWdbb10sciYmKGM9dC5kb250Q2FsbEdldFNldD8odT1rbihwLG8pKSYmdS52YWx1ZTpwW29dKSxhPXImJmM/YzplW29dLChufHxffHx0eXBlb2YgcyE9dHlwZW9mIGEpJiYobD10LmJpbmQmJnI/eG4oYSx5bik6dC53cmFwJiZyP0VuKGEpOl8mJnduKGEpP2JuKGEpOmEsKHQuc2hhbXx8YSYmYS5zaGFtfHxzJiZzLnNoYW0pJiZBbihsLCJzaGFtIiwhMCksQW4oZyxvLGwpLF8mJihUbihPbixpPWgrIlByb3RvdHlwZSIpfHxBbihPbixpLHt9KSxBbihPbltpXSxvLGEpLHQucmVhbCYmbSYmKG58fCFtW29dKSYmQW4obSxvLGEpKSl9LHpuPUxuLEJuPUUsSW49cWUuZjt6bih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PUluLHNoYW06IUJufSx7ZGVmaW5lUHJvcGVydHk6SW59KTt2YXIgQ249US5PYmplY3QsTm49ci5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQ24uZGVmaW5lUHJvcGVydHkodCxlLG4pfTtDbi5kZWZpbmVQcm9wZXJ0eS5zaGFtJiYoTm4uc2hhbT0hMCk7dmFyIFJuPW4oci5leHBvcnRzKSxqbj13LERuPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PT1qbih0KX0sUG49TWF0aC5jZWlsLFVuPU1hdGguZmxvb3IsRm49TWF0aC50cnVuY3x8ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuKGU+MD9VbjpQbikoZSl9LE1uPWZ1bmN0aW9uKHQpe3ZhciBlPSt0O3JldHVybiBlIT1lfHwwPT09ZT8wOkZuKGUpfSxabj1NbixKbj1NYXRoLm1pbixIbj1mdW5jdGlvbih0KXt2YXIgZT1abih0KTtyZXR1cm4gZT4wP0puKGUsOTAwNzE5OTI1NDc0MDk5MSk6MH0sV249ZnVuY3Rpb24odCl7cmV0dXJuIEhuKHQubGVuZ3RoKX0sS249VHlwZUVycm9yLEduPWZ1bmN0aW9uKHQpe2lmKHQ+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBLbigiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHR9LFZuPUUsWW49cWUsWG49UCxxbj1mdW5jdGlvbih0LGUsbil7Vm4/WW4uZih0LGUsWG4oMCxuKSk6dFtlXT1ufSwkbj17fTskbltmZSgidG9TdHJpbmdUYWciKV09InoiO3ZhciBRbj0iW29iamVjdCB6XSI9PT1TdHJpbmcoJG4pLHRyPVFuLGVyPUEsbnI9dyxycj1mZSgidG9TdHJpbmdUYWciKSxpcj1PYmplY3Qsb3I9IkFyZ3VtZW50cyI9PT1ucihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLGFyPXRyP25yOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319KGU9aXIodCkscnIpKT9uOm9yP25yKGUpOiJPYmplY3QiPT09KHI9bnIoZSkpJiZlcihlLmNhbGxlZSk/IkFyZ3VtZW50cyI6cn0sc3I9QSxjcj1IdCxscj1tKEZ1bmN0aW9uLnRvU3RyaW5nKTtzcihjci5pbnNwZWN0U291cmNlKXx8KGNyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGxyKHQpfSk7dmFyIHVyPWNyLmluc3BlY3RTb3VyY2UsaHI9bSxmcj1hLGRyPUEsX3I9YXIscHI9dXIsZ3I9ZnVuY3Rpb24oKXt9LG1yPWl0KCJSZWZsZWN0IiwiY29uc3RydWN0IikseXI9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sdnI9aHIoeXIuZXhlYyksYnI9IXlyLnRlc3QoZ3IpLHdyPWZ1bmN0aW9uKHQpe2lmKCFkcih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIG1yKGdyLFtdLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sa3I9ZnVuY3Rpb24odCl7aWYoIWRyKHQpKXJldHVybiExO3N3aXRjaChfcih0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gYnJ8fCEhdnIoeXIscHIodCkpfWNhdGNoKGUpe3JldHVybiEwfX07a3Iuc2hhbT0hMDt2YXIgU3I9IW1yfHxmcigoZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gd3Iod3IuY2FsbCl8fCF3cihPYmplY3QpfHwhd3IoKGZ1bmN0aW9uKCl7dD0hMH0pKXx8dH0pKT9rcjp3cixPcj1Ebix4cj1TcixBcj0kLFRyPWZlKCJzcGVjaWVzIiksRXI9QXJyYXksTHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIE9yKHQpJiYoZT10LmNvbnN0cnVjdG9yLCh4cihlKSYmKGU9PT1Fcnx8T3IoZS5wcm90b3R5cGUpKXx8QXIoZSkmJm51bGw9PT0oZT1lW1RyXSkpJiYoZT12b2lkIDApKSx2b2lkIDA9PT1lP0VyOmV9LHpyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhMcih0KSkoMD09PWU/MDplKX0sQnI9YSxJcj1fdCxDcj1mZSgic3BlY2llcyIpLE5yPWZ1bmN0aW9uKHQpe3JldHVybiBJcj49NTF8fCFCcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbQ3JdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PWVbdF0oQm9vbGVhbikuZm9vfSkpfSxScj1Mbixqcj1hLERyPURuLFByPSQsVXI9WXQsRnI9V24sTXI9R24sWnI9cW4sSnI9enIsSHI9TnIsV3I9X3QsS3I9ZmUoImlzQ29uY2F0U3ByZWFkYWJsZSIpLEdyPVdyPj01MXx8IWpyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0tyXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxWcj1mdW5jdGlvbih0KXtpZighUHIodCkpcmV0dXJuITE7dmFyIGU9dFtLcl07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOkRyKHQpfTtScih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6IUdyfHwhSHIoImNvbmNhdCIpfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYT1Vcih0aGlzKSxzPUpyKGEsMCksYz0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKFZyKG89LTE9PT1lP2E6YXJndW1lbnRzW2VdKSlmb3IoaT1GcihvKSxNcihjK2kpLG49MDtuPGk7bisrLGMrKyluIGluIG8mJlpyKHMsYyxvW25dKTtlbHNlIE1yKGMrMSksWnIocyxjKyssbyk7cmV0dXJuIHMubGVuZ3RoPWMsc319KTt2YXIgWXI9YXIsWHI9U3RyaW5nLHFyPWZ1bmN0aW9uKHQpe2lmKCJTeW1ib2wiPT09WXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gWHIodCl9LCRyPXt9LFFyPU1uLHRpPU1hdGgubWF4LGVpPU1hdGgubWluLG5pPVgscmk9ZnVuY3Rpb24odCxlKXt2YXIgbj1Rcih0KTtyZXR1cm4gbjwwP3RpKG4rZSwwKTplaShuLGUpfSxpaT1XbixvaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3ZhciBpPW5pKGUpLG89aWkoaSk7aWYoMD09PW8pcmV0dXJuIXQmJi0xO3ZhciBhLHM9cmkocixvKTtpZih0JiZuIT1uKXtmb3IoO28+czspaWYoKGE9aVtzKytdKSE9YSlyZXR1cm4hMH1lbHNlIGZvcig7bz5zO3MrKylpZigodHx8cyBpbiBpKSYmaVtzXT09PW4pcmV0dXJuIHR8fHN8fDA7cmV0dXJuIXQmJi0xfX0sYWk9e2luY2x1ZGVzOm9pKCEwKSxpbmRleE9mOm9pKCExKX0sc2k9e30sY2k9JHQsbGk9WCx1aT1haS5pbmRleE9mLGhpPXNpLGZpPW0oW10ucHVzaCksZGk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWxpKHQpLGk9MCxvPVtdO2ZvcihuIGluIHIpIWNpKGhpLG4pJiZjaShyLG4pJiZmaShvLG4pO2Zvcig7ZS5sZW5ndGg+aTspY2kocixuPWVbaSsrXSkmJih+dWkobyxuKXx8ZmkobyxuKSk7cmV0dXJuIG99LF9pPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0scGk9ZGksZ2k9X2ksbWk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBwaSh0LGdpKX0seWk9RSx2aT0kZSxiaT1xZSx3aT1ubixraT1YLFNpPW1pOyRyLmY9eWkmJiF2aT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe3dpKHQpO2Zvcih2YXIgbixyPWtpKGUpLGk9U2koZSksbz1pLmxlbmd0aCxhPTA7bz5hOyliaS5mKHQsbj1pW2ErK10scltuXSk7cmV0dXJuIHR9O3ZhciBPaSx4aT1pdCgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKSxBaT1yZSxUaT1LdCgia2V5cyIpLEVpPWZ1bmN0aW9uKHQpe3JldHVybiBUaVt0XXx8KFRpW3RdPUFpKHQpKX0sTGk9bm4semk9JHIsQmk9X2ksSWk9c2ksQ2k9eGksTmk9QWUsUmk9InByb3RvdHlwZSIsamk9InNjcmlwdCIsRGk9RWkoIklFX1BST1RPIiksUGk9ZnVuY3Rpb24oKXt9LFVpPWZ1bmN0aW9uKHQpe3JldHVybiI8IitqaSsiPiIrdCsiPC8iK2ppKyI+In0sRmk9ZnVuY3Rpb24odCl7dC53cml0ZShVaSgiIikpLHQuY2xvc2UoKTt2YXIgZT10LnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIHQ9bnVsbCxlfSxNaT1mdW5jdGlvbigpe3RyeXtPaT1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChpKXt9dmFyIHQsZSxuO01pPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZPaT9GaShPaSk6KGU9TmkoImlmcmFtZSIpLG49ImphdmEiK2ppKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLENpLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZyhuKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKFVpKCJkb2N1bWVudC5GPU9iamVjdCIpKSx0LmNsb3NlKCksdC5GKTpGaShPaSk7Zm9yKHZhciByPUJpLmxlbmd0aDtyLS07KWRlbGV0ZSBNaVtSaV1bQmlbcl1dO3JldHVybiBNaSgpfTtJaVtEaV09ITA7dmFyIFppPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhQaVtSaV09TGkodCksbj1uZXcgUGksUGlbUmldPW51bGwsbltEaV09dCk6bj1NaSgpLHZvaWQgMD09PWU/bjp6aS5mKG4sZSl9LEppPXt9LEhpPWRpLFdpPV9pLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7SmkuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIEhpKHQsV2kpfTt2YXIgS2k9e30sR2k9bShbXS5zbGljZSksVmk9dyxZaT1YLFhpPUppLmYscWk9R2ksJGk9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtLaS5mPWZ1bmN0aW9uKHQpe3JldHVybiAkaSYmIldpbmRvdyI9PT1WaSh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIFhpKHQpfWNhdGNoKGUpe3JldHVybiBxaSgkaSl9fSh0KTpYaShZaSh0KSl9O3ZhciBRaT17fTtRaS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRvPW1uLGVvPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByJiZyLmVudW1lcmFibGU/dFtlXT1uOnRvKHQsZSxuKSx0fSxubz1xZSxybz17fSxpbz1mZTtyby5mPWlvO3ZhciBvbyxhbyxzbyxjbz1RLGxvPSR0LHVvPXJvLGhvPXFlLmYsZm89ZnVuY3Rpb24odCl7dmFyIGU9Y28uU3ltYm9sfHwoY28uU3ltYm9sPXt9KTtsbyhlLHQpfHxobyhlLHQse3ZhbHVlOnVvLmYodCl9KX0sX289Qixwbz1pdCxnbz1mZSxtbz1lbyx5bz1mdW5jdGlvbigpe3ZhciB0PXBvKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLG49ZSYmZS52YWx1ZU9mLHI9Z28oInRvUHJpbWl0aXZlIik7ZSYmIWVbcl0mJm1vKGUsciwoZnVuY3Rpb24odCl7cmV0dXJuIF9vKG4sdGhpcyl9KSx7YXJpdHk6MX0pfSx2bz1hcixibz1Rbj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrdm8odGhpcykrIl0ifSx3bz1Rbixrbz1xZS5mLFNvPW1uLE9vPSR0LHhvPWJvLEFvPWZlKCJ0b1N0cmluZ1RhZyIpLFRvPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4/dDp0JiZ0LnByb3RvdHlwZTtpJiYoT28oaSxBbyl8fGtvKGksQW8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSksciYmIXdvJiZTbyhpLCJ0b1N0cmluZyIseG8pKX0sRW89QSxMbz1vLldlYWtNYXAsem89RW8oTG8pJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKExvKSksQm89byxJbz0kLENvPW1uLE5vPSR0LFJvPUh0LGpvPUVpLERvPXNpLFBvPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsVW89Qm8uVHlwZUVycm9yLEZvPUJvLldlYWtNYXA7aWYoem98fFJvLnN0YXRlKXt2YXIgTW89Um8uc3RhdGV8fChSby5zdGF0ZT1uZXcgRm8pO01vLmdldD1Nby5nZXQsTW8uaGFzPU1vLmhhcyxNby5zZXQ9TW8uc2V0LG9vPWZ1bmN0aW9uKHQsZSl7aWYoTW8uaGFzKHQpKXRocm93IG5ldyBVbyhQbyk7cmV0dXJuIGUuZmFjYWRlPXQsTW8uc2V0KHQsZSksZX0sYW89ZnVuY3Rpb24odCl7cmV0dXJuIE1vLmdldCh0KXx8e319LHNvPWZ1bmN0aW9uKHQpe3JldHVybiBNby5oYXModCl9fWVsc2V7dmFyIFpvPWpvKCJzdGF0ZSIpO0RvW1pvXT0hMCxvbz1mdW5jdGlvbih0LGUpe2lmKE5vKHQsWm8pKXRocm93IG5ldyBVbyhQbyk7cmV0dXJuIGUuZmFjYWRlPXQsQ28odCxabyxlKSxlfSxhbz1mdW5jdGlvbih0KXtyZXR1cm4gTm8odCxabyk/dFtab106e319LHNvPWZ1bmN0aW9uKHQpe3JldHVybiBObyh0LFpvKX19dmFyIEpvPXtzZXQ6b28sZ2V0OmFvLGhhczpzbyxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBzbyh0KT9hbyh0KTpvbyh0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighSW8oZSl8fChuPWFvKGUpKS50eXBlIT09dCl0aHJvdyBuZXcgVW8oIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fSxIbz1YZSxXbz1KLEtvPVl0LEdvPVduLFZvPXpyLFlvPW0oW10ucHVzaCksWG89ZnVuY3Rpb24odCl7dmFyIGU9MT09PXQsbj0yPT09dCxyPTM9PT10LGk9ND09PXQsbz02PT09dCxhPTc9PT10LHM9NT09PXR8fG87cmV0dXJuIGZ1bmN0aW9uKGMsbCx1LGgpe2Zvcih2YXIgZixkLF89S28oYykscD1XbyhfKSxnPUdvKHApLG09SG8obCx1KSx5PTAsdj1ofHxWbyxiPWU/dihjLGcpOm58fGE/dihjLDApOnZvaWQgMDtnPnk7eSsrKWlmKChzfHx5IGluIHApJiYoZD1tKGY9cFt5XSx5LF8pLHQpKWlmKGUpYlt5XT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZjtjYXNlIDY6cmV0dXJuIHk7Y2FzZSAyOllvKGIsZil9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpZbyhiLGYpfXJldHVybiBvPy0xOnJ8fGk/aTpifX0scW89e2ZvckVhY2g6WG8oMCksbWFwOlhvKDEpLGZpbHRlcjpYbygyKSxzb21lOlhvKDMpLGV2ZXJ5OlhvKDQpLGZpbmQ6WG8oNSksZmluZEluZGV4OlhvKDYpLGZpbHRlclJlamVjdDpYbyg3KX0sJG89TG4sUW89byx0YT1CLGVhPW0sbmE9RSxyYT15dCxpYT1hLG9hPSR0LGFhPW90LHNhPW5uLGNhPVgsbGE9a2UsdWE9cXIsaGE9UCxmYT1aaSxkYT1taSxfYT1KaSxwYT1LaSxnYT1RaSxtYT1ULHlhPXFlLHZhPSRyLGJhPUksd2E9ZW8sa2E9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuby5mKHQsZSxuKX0sU2E9S3QsT2E9c2kseGE9cmUsQWE9ZmUsVGE9cm8sRWE9Zm8sTGE9eW8semE9VG8sQmE9Sm8sSWE9cW8uZm9yRWFjaCxDYT1FaSgiaGlkZGVuIiksTmE9IlN5bWJvbCIsUmE9InByb3RvdHlwZSIsamE9QmEuc2V0LERhPUJhLmdldHRlckZvcihOYSksUGE9T2JqZWN0W1JhXSxVYT1Rby5TeW1ib2wsRmE9VWEmJlVhW1JhXSxNYT1Rby5SYW5nZUVycm9yLFphPVFvLlR5cGVFcnJvcixKYT1Rby5RT2JqZWN0LEhhPW1hLmYsV2E9eWEuZixLYT1wYS5mLEdhPWJhLmYsVmE9ZWEoW10ucHVzaCksWWE9U2EoInN5bWJvbHMiKSxYYT1TYSgib3Atc3ltYm9scyIpLHFhPVNhKCJ3a3MiKSwkYT0hSmF8fCFKYVtSYV18fCFKYVtSYV0uZmluZENoaWxkLFFhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1IYShQYSxlKTtyJiZkZWxldGUgUGFbZV0sV2EodCxlLG4pLHImJnQhPT1QYSYmV2EoUGEsZSxyKX0sdHM9bmEmJmlhKChmdW5jdGlvbigpe3JldHVybiA3IT09ZmEoV2Eoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gV2EodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP1FhOldhLGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49WWFbdF09ZmEoRmEpO3JldHVybiBqYShuLHt0eXBlOk5hLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxuYXx8KG4uZGVzY3JpcHRpb249ZSksbn0sbnM9ZnVuY3Rpb24odCxlLG4pe3Q9PT1QYSYmbnMoWGEsZSxuKSxzYSh0KTt2YXIgcj1sYShlKTtyZXR1cm4gc2Eobiksb2EoWWEscik/KG4uZW51bWVyYWJsZT8ob2EodCxDYSkmJnRbQ2FdW3JdJiYodFtDYV1bcl09ITEpLG49ZmEobix7ZW51bWVyYWJsZTpoYSgwLCExKX0pKToob2EodCxDYSl8fFdhKHQsQ2EsaGEoMSxmYShudWxsKSkpLHRbQ2FdW3JdPSEwKSx0cyh0LHIsbikpOldhKHQscixuKX0scnM9ZnVuY3Rpb24odCxlKXtzYSh0KTt2YXIgbj1jYShlKSxyPWRhKG4pLmNvbmNhdChzcyhuKSk7cmV0dXJuIElhKHIsKGZ1bmN0aW9uKGUpe25hJiYhdGEoaXMsbixlKXx8bnModCxlLG5bZV0pfSkpLHR9LGlzPWZ1bmN0aW9uKHQpe3ZhciBlPWxhKHQpLG49dGEoR2EsdGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1QYSYmb2EoWWEsZSkmJiFvYShYYSxlKSkmJighKG58fCFvYSh0aGlzLGUpfHwhb2EoWWEsZSl8fG9hKHRoaXMsQ2EpJiZ0aGlzW0NhXVtlXSl8fG4pfSxvcz1mdW5jdGlvbih0LGUpe3ZhciBuPWNhKHQpLHI9bGEoZSk7aWYobiE9PVBhfHwhb2EoWWEscil8fG9hKFhhLHIpKXt2YXIgaT1IYShuLHIpO3JldHVybiFpfHwhb2EoWWEscil8fG9hKG4sQ2EpJiZuW0NhXVtyXXx8KGkuZW51bWVyYWJsZT0hMCksaX19LGFzPWZ1bmN0aW9uKHQpe3ZhciBlPUthKGNhKHQpKSxuPVtdO3JldHVybiBJYShlLChmdW5jdGlvbih0KXtvYShZYSx0KXx8b2EoT2EsdCl8fFZhKG4sdCl9KSksbn0sc3M9ZnVuY3Rpb24odCl7dmFyIGU9dD09PVBhLG49S2EoZT9YYTpjYSh0KSkscj1bXTtyZXR1cm4gSWEobiwoZnVuY3Rpb24odCl7IW9hKFlhLHQpfHxlJiYhb2EoUGEsdCl8fFZhKHIsWWFbdF0pfSkpLHJ9O3JhfHwoVWE9ZnVuY3Rpb24oKXtpZihhYShGYSx0aGlzKSl0aHJvdyBuZXcgWmEoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT91YShhcmd1bWVudHNbMF0pOnZvaWQgMCxlPXhhKHQpLG49ZnVuY3Rpb24odCl7dmFyIHI9dm9pZCAwPT09dGhpcz9Rbzp0aGlzO3I9PT1QYSYmdGEobixYYSx0KSxvYShyLENhKSYmb2EocltDYV0sZSkmJihyW0NhXVtlXT0hMSk7dmFyIGk9aGEoMSx0KTt0cnl7dHMocixlLGkpfWNhdGNoKG8pe2lmKCEobyBpbnN0YW5jZW9mIE1hKSl0aHJvdyBvO1FhKHIsZSxpKX19O3JldHVybiBuYSYmJGEmJnRzKFBhLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLGVzKGUsdCl9LHdhKEZhPVVhW1JhXSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBEYSh0aGlzKS50YWd9KSksd2EoVWEsIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4gZXMoeGEodCksdCl9KSksYmEuZj1pcyx5YS5mPW5zLHZhLmY9cnMsbWEuZj1vcyxfYS5mPXBhLmY9YXMsZ2EuZj1zcyxUYS5mPWZ1bmN0aW9uKHQpe3JldHVybiBlcyhBYSh0KSx0KX0sbmEmJmthKEZhLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRGEodGhpcykuZGVzY3JpcHRpb259fSkpLCRvKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IXJhLHNoYW06IXJhfSx7U3ltYm9sOlVhfSksSWEoZGEocWEpLChmdW5jdGlvbih0KXtFYSh0KX0pKSwkbyh7dGFyZ2V0Ok5hLHN0YXQ6ITAsZm9yY2VkOiFyYX0se3VzZVNldHRlcjpmdW5jdGlvbigpeyRhPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXskYT0hMX19KSwkbyh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFyYSxzaGFtOiFuYX0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2ZhKHQpOnJzKGZhKHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpucyxkZWZpbmVQcm9wZXJ0aWVzOnJzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvc30pLCRvKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXJhfSx7Z2V0T3duUHJvcGVydHlOYW1lczphc30pLExhKCksemEoVWEsTmEpLE9hW0NhXT0hMDt2YXIgY3M9eXQmJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yLGxzPUxuLHVzPWl0LGhzPSR0LGZzPXFyLGRzPUt0LF9zPWNzLHBzPWRzKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksZ3M9ZHMoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtscyh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFfc30se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1mcyh0KTtpZihocyhwcyxlKSlyZXR1cm4gcHNbZV07dmFyIG49dXMoIlN5bWJvbCIpKGUpO3JldHVybiBwc1tlXT1uLGdzW25dPWUsbn19KTt2YXIgbXM9TG4seXM9JHQsdnM9T3QsYnM9QXQsd3M9Y3Msa3M9S3QoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTttcyh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiF3c30se2tleUZvcjpmdW5jdGlvbih0KXtpZighdnModCkpdGhyb3cgbmV3IFR5cGVFcnJvcihicyh0KSsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKHlzKGtzLHQpKXJldHVybiBrc1t0XX19KTt2YXIgU3M9RG4sT3M9QSx4cz13LEFzPXFyLFRzPW0oW10ucHVzaCksRXM9TG4sTHM9aXQsenM9ZixCcz1CLElzPW0sQ3M9YSxOcz1BLFJzPU90LGpzPUdpLERzPWZ1bmN0aW9uKHQpe2lmKE9zKHQpKXJldHVybiB0O2lmKFNzKHQpKXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bXSxyPTA7cjxlO3IrKyl7dmFyIGk9dFtyXTsic3RyaW5nIj09dHlwZW9mIGk/VHMobixpKToibnVtYmVyIiE9dHlwZW9mIGkmJiJOdW1iZXIiIT09eHMoaSkmJiJTdHJpbmciIT09eHMoaSl8fFRzKG4sQXMoaSkpfXZhciBvPW4ubGVuZ3RoLGE9ITA7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoYSlyZXR1cm4gYT0hMSxlO2lmKFNzKHRoaXMpKXJldHVybiBlO2Zvcih2YXIgcj0wO3I8bztyKyspaWYobltyXT09PXQpcmV0dXJuIGV9fX0sUHM9eXQsVXM9U3RyaW5nLEZzPUxzKCJKU09OIiwic3RyaW5naWZ5IiksTXM9SXMoLy4vLmV4ZWMpLFpzPUlzKCIiLmNoYXJBdCksSnM9SXMoIiIuY2hhckNvZGVBdCksSHM9SXMoIiIucmVwbGFjZSksV3M9SXMoMS4udG9TdHJpbmcpLEtzPS9bXHVEODAwLVx1REZGRl0vZyxHcz0vXltcdUQ4MDAtXHVEQkZGXSQvLFZzPS9eW1x1REMwMC1cdURGRkZdJC8sWXM9IVBzfHxDcygoZnVuY3Rpb24oKXt2YXIgdD1McygiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PUZzKFt0XSl8fCJ7fSIhPT1Gcyh7YTp0fSl8fCJ7fSIhPT1GcyhPYmplY3QodCkpfSkpLFhzPUNzKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PUZzKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1GcygiXHVkZWFkIil9KSkscXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1qcyhhcmd1bWVudHMpLHI9RHMoZSk7aWYoTnMocil8fHZvaWQgMCE9PXQmJiFScyh0KSlyZXR1cm4gblsxXT1mdW5jdGlvbih0LGUpe2lmKE5zKHIpJiYoZT1CcyhyLHRoaXMsVXModCksZSkpLCFScyhlKSlyZXR1cm4gZX0senMoRnMsbnVsbCxuKX0sJHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVpzKG4sZS0xKSxpPVpzKG4sZSsxKTtyZXR1cm4gTXMoR3MsdCkmJiFNcyhWcyxpKXx8TXMoVnMsdCkmJiFNcyhHcyxyKT8iXFx1IitXcyhKcyh0LDApLDE2KTp0fTtGcyYmRXMoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpZc3x8WHN9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWpzKGFyZ3VtZW50cyksaT16cyhZcz9xczpGcyxudWxsLHIpO3JldHVybiBYcyYmInN0cmluZyI9PXR5cGVvZiBpP0hzKGksS3MsJHMpOml9fSk7dmFyIFFzPVFpLHRjPVl0O0xuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXl0fHxhKChmdW5jdGlvbigpe1FzLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7dmFyIGU9UXMuZjtyZXR1cm4gZT9lKHRjKHQpKTpbXX19KSxmbygiYXN5bmNJdGVyYXRvciIpLGZvKCJoYXNJbnN0YW5jZSIpLGZvKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxmbygiaXRlcmF0b3IiKSxmbygibWF0Y2giKSxmbygibWF0Y2hBbGwiKSxmbygicmVwbGFjZSIpLGZvKCJzZWFyY2giKSxmbygic3BlY2llcyIpLGZvKCJzcGxpdCIpO3ZhciBlYz15bztmbygidG9QcmltaXRpdmUiKSxlYygpO3ZhciBuYz1pdCxyYz1UbztmbygidG9TdHJpbmdUYWciKSxyYyhuYygiU3ltYm9sIiksIlN5bWJvbCIpLGZvKCJ1bnNjb3BhYmxlcyIpLFRvKG8uSlNPTiwiSlNPTiIsITApO3ZhciBpYyxvYyxhYyxzYz1RLlN5bWJvbCxjYz17fSxsYz1FLHVjPSR0LGhjPUZ1bmN0aW9uLnByb3RvdHlwZSxmYz1sYyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixkYz11YyhoYywibmFtZSIpLF9jPXtFWElTVFM6ZGMsUFJPUEVSOmRjJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpkYyYmKCFsY3x8bGMmJmZjKGhjLCJuYW1lIikuY29uZmlndXJhYmxlKX0scGM9IWEoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSksZ2M9JHQsbWM9QSx5Yz1ZdCx2Yz1wYyxiYz1FaSgiSUVfUFJPVE8iKSx3Yz1PYmplY3Qsa2M9d2MucHJvdG90eXBlLFNjPXZjP3djLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3ZhciBlPXljKHQpO2lmKGdjKGUsYmMpKXJldHVybiBlW2JjXTt2YXIgbj1lLmNvbnN0cnVjdG9yO3JldHVybiBtYyhuKSYmZSBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIHdjP2tjOm51bGx9LE9jPWEseGM9QSxBYz0kLFRjPVppLEVjPVNjLExjPWVvLHpjPWZlKCJpdGVyYXRvciIpLEJjPSExO1tdLmtleXMmJigibmV4dCJpbihhYz1bXS5rZXlzKCkpPyhvYz1FYyhFYyhhYykpKSE9PU9iamVjdC5wcm90b3R5cGUmJihpYz1vYyk6QmM9ITApO3ZhciBJYz0hQWMoaWMpfHxPYygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gaWNbemNdLmNhbGwodCkhPT10fSkpO3hjKChpYz1JYz97fTpUYyhpYykpW3pjXSl8fExjKGljLHpjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBDYz17SXRlcmF0b3JQcm90b3R5cGU6aWMsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpCY30sTmM9Q2MuSXRlcmF0b3JQcm90b3R5cGUsUmM9WmksamM9UCxEYz1UbyxQYz1jYyxVYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxGYz1MbixNYz1CLFpjPV9jLEpjPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPVJjKE5jLHtuZXh0OmpjKCshcixuKX0pLERjKHQsaSwhMSwhMCksUGNbaV09VWMsdH0sSGM9U2MsV2M9VG8sS2M9ZW8sR2M9Y2MsVmM9Q2MsWWM9WmMuUFJPUEVSLFhjPVZjLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscWM9ZmUoIml0ZXJhdG9yIiksJGM9ImtleXMiLFFjPSJ2YWx1ZXMiLHRsPSJlbnRyaWVzIixlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxubD1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtKYyhuLGUscik7dmFyIHMsYyxsLHU9ZnVuY3Rpb24odCl7aWYodD09PWkmJnApcmV0dXJuIHA7aWYoIVhjJiZ0JiZ0IGluIGQpcmV0dXJuIGRbdF07c3dpdGNoKHQpe2Nhc2UgJGM6Y2FzZSBRYzpjYXNlIHRsOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxoPWUrIiBJdGVyYXRvciIsZj0hMSxkPXQucHJvdG90eXBlLF89ZFtxY118fGRbIkBAaXRlcmF0b3IiXXx8aSYmZFtpXSxwPSFYYyYmX3x8dShpKSxnPSJBcnJheSI9PT1lJiZkLmVudHJpZXN8fF87aWYoZyYmKHM9SGMoZy5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmcy5uZXh0JiYoV2MocyxoLCEwLCEwKSxHY1toXT1lbCksWWMmJmk9PT1RYyYmXyYmXy5uYW1lIT09UWMmJihmPSEwLHA9ZnVuY3Rpb24oKXtyZXR1cm4gTWMoXyx0aGlzKX0pLGkpaWYoYz17dmFsdWVzOnUoUWMpLGtleXM6bz9wOnUoJGMpLGVudHJpZXM6dSh0bCl9LGEpZm9yKGwgaW4gYykoWGN8fGZ8fCEobCBpbiBkKSkmJktjKGQsbCxjW2xdKTtlbHNlIEZjKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6WGN8fGZ9LGMpO3JldHVybiBhJiZkW3FjXSE9PXAmJktjKGQscWMscCx7bmFtZTppfSksR2NbZV09cCxjfSxybD1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19LGlsPVgsb2w9Y2MsYWw9Sm87cWUuZjt2YXIgc2w9bmwsY2w9cmwsbGw9IkFycmF5IEl0ZXJhdG9yIix1bD1hbC5zZXQsaGw9YWwuZ2V0dGVyRm9yKGxsKTtzbChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3VsKHRoaXMse3R5cGU6bGwsdGFyZ2V0OmlsKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1obCh0aGlzKSxlPXQudGFyZ2V0LG49dC5pbmRleCsrO2lmKCFlfHxuPj1lLmxlbmd0aClyZXR1cm4gdC50YXJnZXQ9bnVsbCxjbCh2b2lkIDAsITApO3N3aXRjaCh0LmtpbmQpe2Nhc2Uia2V5cyI6cmV0dXJuIGNsKG4sITEpO2Nhc2UidmFsdWVzIjpyZXR1cm4gY2woZVtuXSwhMSl9cmV0dXJuIGNsKFtuLGVbbl1dLCExKX0pLCJ2YWx1ZXMiKSxvbC5Bcmd1bWVudHM9b2wuQXJyYXk7dmFyIGZsPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxkbD1vLF9sPVRvLHBsPWNjO2Zvcih2YXIgZ2wgaW4gZmwpX2woZGxbZ2xdLGdsKSxwbFtnbF09cGwuQXJyYXk7dmFyIG1sPXNjLHlsPWZlLHZsPXFlLmYsYmw9eWwoIm1ldGFkYXRhIiksd2w9RnVuY3Rpb24ucHJvdG90eXBlO3ZvaWQgMD09PXdsW2JsXSYmdmwod2wsYmwse3ZhbHVlOm51bGx9KSxmbygiYXN5bmNEaXNwb3NlIiksZm8oImRpc3Bvc2UiKSxmbygibWV0YWRhdGEiKTt2YXIga2w9bWwsU2w9bSxPbD1pdCgiU3ltYm9sIikseGw9T2wua2V5Rm9yLEFsPVNsKE9sLnByb3RvdHlwZS52YWx1ZU9mKSxUbD1PbC5pc1JlZ2lzdGVyZWRTeW1ib2x8fGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdm9pZCAwIT09eGwoQWwodCkpfWNhdGNoKGUpe3JldHVybiExfX07TG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwfSx7aXNSZWdpc3RlcmVkU3ltYm9sOlRsfSk7Zm9yKHZhciBFbD1LdCxMbD1pdCx6bD1tLEJsPU90LElsPWZlLENsPUxsKCJTeW1ib2wiKSxObD1DbC5pc1dlbGxLbm93blN5bWJvbCxSbD1MbCgiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIpLGpsPXpsKENsLnByb3RvdHlwZS52YWx1ZU9mKSxEbD1FbCgid2tzIiksUGw9MCxVbD1SbChDbCksRmw9VWwubGVuZ3RoO1BsPEZsO1BsKyspdHJ5e3ZhciBNbD1VbFtQbF07QmwoQ2xbTWxdKSYmSWwoTWwpfWNhdGNoKGVnKXt9dmFyIFpsPWZ1bmN0aW9uKHQpe2lmKE5sJiZObCh0KSlyZXR1cm4hMDt0cnl7Zm9yKHZhciBlPWpsKHQpLG49MCxyPVJsKERsKSxpPXIubGVuZ3RoO248aTtuKyspaWYoRGxbcltuXV09PWUpcmV0dXJuITB9Y2F0Y2goZWcpe31yZXR1cm4hMX07TG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLGZvcmNlZDohMH0se2lzV2VsbEtub3duU3ltYm9sOlpsfSksZm8oImN1c3RvbU1hdGNoZXIiKSxmbygib2JzZXJ2YWJsZSIpLExuKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxuYW1lOiJpc1JlZ2lzdGVyZWRTeW1ib2wifSx7aXNSZWdpc3RlcmVkOlRsfSksTG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzV2VsbEtub3duU3ltYm9sIixmb3JjZWQ6ITB9LHtpc1dlbGxLbm93bjpabH0pLGZvKCJtYXRjaGVyIiksZm8oIm1ldGFkYXRhS2V5IiksZm8oInBhdHRlcm5NYXRjaCIpLGZvKCJyZXBsYWNlQWxsIik7dmFyIEpsPW4oa2wpLEhsPW0sV2w9TW4sS2w9cXIsR2w9RyxWbD1IbCgiIi5jaGFyQXQpLFlsPUhsKCIiLmNoYXJDb2RlQXQpLFhsPUhsKCIiLnNsaWNlKSxxbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcixpLG89S2woR2woZSkpLGE9V2wobikscz1vLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj1zP3Q/IiI6dm9pZCAwOihyPVlsKG8sYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT1zfHwoaT1ZbChvLGErMSkpPDU2MzIwfHxpPjU3MzQzP3Q/VmwobyxhKTpyOnQ/WGwobyxhLGErMik6aS01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sJGw9e2NvZGVBdDpxbCghMSksY2hhckF0OnFsKCEwKX0uY2hhckF0LFFsPXFyLHR1PUpvLGV1PW5sLG51PXJsLHJ1PSJTdHJpbmcgSXRlcmF0b3IiLGl1PXR1LnNldCxvdT10dS5nZXR0ZXJGb3IocnUpO2V1KFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7aXUodGhpcyx7dHlwZTpydSxzdHJpbmc6UWwodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1vdSh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/bnUodm9pZCAwLCEwKToodD0kbChuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLG51KHQsITEpKX0pKTt2YXIgYXU9bihyby5mKCJpdGVyYXRvciIpKTtmdW5jdGlvbiBzdSh0KXtyZXR1cm4oc3U9ImZ1bmN0aW9uIj09dHlwZW9mIEpsJiYic3ltYm9sIj09dHlwZW9mIGF1P2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBKbCYmdC5jb25zdHJ1Y3Rvcj09PUpsJiZ0IT09SmwucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIGN1PW4ocm8uZigidG9QcmltaXRpdmUiKSk7ZnVuY3Rpb24gbHUodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9c3UodCl8fCF0KXJldHVybiB0O3ZhciBuPXRbY3VdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXN1KHIpKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXN1KGUpP2U6ZSsiIn1mdW5jdGlvbiB1dSh0LGUsbil7cmV0dXJuKGU9bHUoZSkpaW4gdD9Sbih0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1jbGFzcyBodXtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfcG9zaXRpb24iLDApLHV1KHRoaXMsIl9kYXRhdmlldyIsdm9pZCAwKSx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofWdldCBidWZmZXIoKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfXNldCBwb3NpdGlvbih0KXt0aGlzLl9wb3NpdGlvbj10fWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1iYWNrKHQpe3RoaXMucG9zaXRpb24tPXR9Z2V0VWludDgodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQ4KHQpfWdldEludDgodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldEludDgodCl9Z2V0SW50MTYodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldEludDE2KHQpfWdldFVpbnQxNih0KXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0VWludDE2KHQpfWdldFVpbnQzMih0KXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0VWludDMyKHQpfWdldEludDMyKHQpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQzMih0KX1za2lwKHQpe2NvbnN0IGU9TWF0aC5mbG9vcih0LzQpLG49dCU0O2ZvcihsZXQgcj0wO3I8ZTtyKyspaHUucmVhZEJ5dGUodGhpcyw0KTtuPjAmJmh1LnJlYWRCeXRlKHRoaXMsbil9c3RhdGljIHJlYWRCeXRlKHQsZSxuKXtsZXQgcjtzd2l0Y2goZSl7Y2FzZSAxOnI9bj90LmdldEludDgodC5wb3NpdGlvbik6dC5nZXRVaW50OCh0LnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP3QuZ2V0SW50MTYodC5wb3NpdGlvbik6dC5nZXRVaW50MTYodC5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj10LmdldFVpbnQ4KHQucG9zaXRpb24pPDwxNixyfD10LmdldFVpbnQ4KHQucG9zaXRpb24rMSk8PDgscnw9dC5nZXRVaW50OCh0LnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/dC5nZXRJbnQzMih0LnBvc2l0aW9uKTp0LmdldFVpbnQzMih0LnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPXQuZ2V0VWludDMyKHQucG9zaXRpb24pPDwzMixyfD10LmdldFVpbnQzMih0LnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gdC5wb3NpdGlvbis9ZSxyfXJlYWRVaW50OCgpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDEpfXJlYWRVaW50MTYoKXtyZXR1cm4gaHUucmVhZEJ5dGUodGhpcywyKX1yZWFkVWludDI0KCl7cmV0dXJuIGh1LnJlYWRCeXRlKHRoaXMsMyl9cmVhZFVpbnQzMigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDQpfXJlYWRVaW50NjQoKXtyZXR1cm4gaHUucmVhZEJ5dGUodGhpcyw4KX1yZWFkSW50OCgpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDEsITApfXJlYWRJbnQxNigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDIsITApfXJlYWRJbnQzMigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDQsITApfXdyaXRlVWludDMyKHQpe3JldHVybiBuZXcgVWludDhBcnJheShbdD4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdF0pfX12YXIgZnU9KHQ9Pih0W3QuaW50ZXJuYWw9MF09ImludGVybmFsIix0W3QuZXh0ZXJuYWw9MV09ImV4dGVybmFsIix0W3QuYnlwYXNzPTJdPSJieXBhc3MiLHQpKShmdXx8e30pO2NvbnN0IGR1PW5ldyBVaW50OEFycmF5KFsxMDksMTY3LDUzLDE5MCwxMDMsOTAsNzIsMSwxNzAsODksNjMsMTY0LDE5NCwxOTksMTksODVdKSxfdT1uZXcgVWludDhBcnJheShbMTA5LDE2Nyw1MywxOTAsMTAzLDkwLDcyLDEsMTcwLDg5LDYzLDE2NCwxOTQsMTk5LDE5LDg0XSkscHU9bmV3IFVpbnQ4QXJyYXkoWzMxLDIzOSwzLDUwLDI0MiwxMjAsNzYsODUsMTY5LDQyLDE2MSw5MSw3NSwxODYsMjJdKTtmdW5jdGlvbiBndSh0KXtjb25zdCBlPVtdO2Zvcig7dD49MjU1Oyl0LT0yNTUsZS5wdXNoKDI1NSk7cmV0dXJuIGUucHVzaCh0KSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBtdSh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPTA7Zm9yKDsyNTU9PT10W2VdJiZlPHQuYnl0ZUxlbmd0aDspZSsrLG4rPTI1NTtyZXR1cm4gZTx0LmJ5dGVMZW5ndGgmJihuKz10W2UrK10pLFtuLGVdfWNvbnN0IHl1PW5ldyBVaW50OEFycmF5KFs4MCwxXSk7Y2xhc3MgdnV7c3RhdGljIGdlbmVyYXRlU0VJKHQsZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPW5ldyBVaW50OEFycmF5KFswLDAsMCwxXSksaT1lP3l1Om5ldyBVaW50OEFycmF5KFs2XSksbz1uZXcgVWludDhBcnJheShbNV0pLGE9dnUuX191dWlkfHwobj9kdTpfdSkscz1ndSh0LmJ5dGVMZW5ndGgrYS5ieXRlTGVuZ3RoKSxjPSh0PT57Y29uc3QgZT1bXTtsZXQgbj0wO2Zvcihjb25zdCByIG9mIHQpbj49MiYmcjw9MyYmKGUucHVzaCgzKSxuPTApLDA9PT1yP24rKzpuPTAsZS5wdXNoKHIpO3JldHVybiBuZXcgVWludDhBcnJheShlKX0pKHQpO3JldHVybiBuZXcgVWludDhBcnJheShbLi4uciwuLi5pLC4uLm8sLi4ucywuLi5hLC4uLmMsMTI4XSl9c3RhdGljIGRlY29kZVNFSUJvZHkodCxlKXtjb25zdCBuPSh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dPD0zJiYwPT09dFtuLTFdJiYwPT09dFtuLTJdfHxlLnB1c2godFtuXSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSkodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpO2lmKG4uYnl0ZUxlbmd0aDwyKXJldHVybjtsZXQgcj0wO2NvbnN0IGk9ZT8yOjE7aWYoNSE9PW5baV0mJjEwMCE9PW5baV0pcmV0dXJuO3IrPTEraTtjb25zdFtvLGFdPW11KG4scik7cj1hO2xldCBzPTI7Y29uc3QgYz1yK287bi5ieXRlTGVuZ3RoPj1fdS5ieXRlTGVuZ3RoJiZvPj1fdS5ieXRlTGVuZ3RoJiYobi5zbGljZShyLHIrX3UuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PV91LnRvU3RyaW5nKCl8fG4uc2xpY2UocixyK3B1LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCk9PT1wdS50b1N0cmluZygpKT8ocis9X3UuYnl0ZUxlbmd0aCxzPTEpOm4uYnl0ZUxlbmd0aD49X3UuYnl0ZUxlbmd0aCYmbz49X3UuYnl0ZUxlbmd0aCYmbi5zbGljZShyLHIrZHUuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PWR1LnRvU3RyaW5nKCkmJihyKz1kdS5ieXRlTGVuZ3RoLHM9MCk7cmV0dXJue3R5cGU6cyxwYXlsb2FkOm4uc2xpY2UocixjKX19c3RhdGljIHBhcnNlSW50ZXJuYWxTRUkodCl7Y29uc3QgZT1uZXcgTWFwO2xldCBuPTA7aWYoMD09PXQudHlwZSl7Zm9yKDt0LnBheWxvYWQuYnl0ZUxlbmd0aC1uPj0yOyl7Y29uc3RbcixpXT1tdSh0LnBheWxvYWQsbik7bj1pO2NvbnN0W28sYV09bXUodC5wYXlsb2FkLG4pO2lmKG49YSxlLmdldChyKXx8IShvPD10LnBheWxvYWQuYnl0ZUxlbmd0aC1uKSlicmVhaztlLnNldChyLHQucGF5bG9hZC5zbGljZShuLG4rbykpLG4rPW99cmV0dXJuIGV9fXN0YXRpYyBtYWtlSW50ZXJuYWxTZWkodCl7Y29uc3QgZT1bXTtmb3IoY29uc3RbaSxvXW9mIHQpe2NvbnN0IHQ9Z3UoaSksbj1ndShvLmJ5dGVMZW5ndGgpO2UucHVzaCh0LG4sbyl9Y29uc3Qgbj1lLnJlZHVjZSgoKHQsZSk9PnQrZS5ieXRlTGVuZ3RoKSwwKSxyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBlLnJlZHVjZSgoKHQsZSk9PihyLnNldChlLHQpLHQrZS5ieXRlTGVuZ3RoKSksMCkscn19dXUodnUsIl9fdXVpZCIsdm9pZCAwKTt2YXIgYnUsd3U9JCxrdT13LFN1PWZlKCJtYXRjaCIpLE91PW5uLHh1PUIsQXU9JHQsVHU9b3QsRXU9ZnVuY3Rpb24oKXt2YXIgdD1PdSh0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX0sTHU9UmVnRXhwLnByb3RvdHlwZSx6dT1vLEJ1PVEsSXU9ZnVuY3Rpb24odCxlKXt2YXIgbj1CdVt0KyJQcm90b3R5cGUiXSxyPW4mJm5bZV07aWYocilyZXR1cm4gcjt2YXIgaT16dVt0XSxvPWkmJmkucHJvdG90eXBlO3JldHVybiBvJiZvW2VdfSxDdT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gTnUoKXtpZighYnUmJiEoYnU9InVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHwidW5kZWZpbmVkIiE9dHlwZW9mIG1zQ3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gYnUoQ3UpfXZhciBSdT0vXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7Zm9yKHZhciBqdT1bXSxEdT0wO0R1PDI1NjsrK0R1KWp1LnB1c2goKER1KzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7ZnVuY3Rpb24gUHUodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj0oanVbdFtlKzBdXStqdVt0W2UrMV1dK2p1W3RbZSsyXV0ranVbdFtlKzNdXSsiLSIranVbdFtlKzRdXStqdVt0W2UrNV1dKyItIitqdVt0W2UrNl1dK2p1W3RbZSs3XV0rIi0iK2p1W3RbZSs4XV0ranVbdFtlKzldXSsiLSIranVbdFtlKzEwXV0ranVbdFtlKzExXV0ranVbdFtlKzEyXV0ranVbdFtlKzEzXV0ranVbdFtlKzE0XV0ranVbdFtlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmUnUudGVzdCh0KX0obikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBVdSh0LGUsbil7dmFyIHI9KHQ9dHx8e30pLnJhbmRvbXx8KHQucm5nfHxOdSkoKTtpZihyWzZdPTE1JnJbNl18NjQscls4XT02MyZyWzhdfDEyOCxlKXtuPW58fDA7Zm9yKHZhciBpPTA7aTwxNjsrK2kpZVtuK2ldPXJbaV07cmV0dXJuIGV9cmV0dXJuIFB1KHIpfWNvbnN0IEZ1PSgpPT4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdztmdW5jdGlvbiBNdSh0KXtyZXR1cm4gbnVsbD09dD8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiB0P3Q6SlNPTi5zdHJpbmdpZnkoe2NvbnRlbnRIaW50OnQuY29udGVudEhpbnQsZW5hYmxlZDp0LmVuYWJsZWQsaWQ6dC5pZCxraW5kOnQua2luZCxsYWJlbDp0LmxhYmVsLG11dGVkOnQubXV0ZWQscmVhZHlTdGF0ZTp0LnJlYWR5U3RhdGV9KX1mdW5jdGlvbiBadSh0KXtyZXR1cm4gbnVsbD09dD8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiB0P3Q6SlNPTi5zdHJpbmdpZnkoe3RyYWNrOk11KHQudHJhY2spfSl9ZnVuY3Rpb24gSnUodCl7cmV0dXJuIG51bGw9PXQ/InVuZGVmaW5lZCB8IG51bGwiOiJzdHJpbmciPT10eXBlb2YgdD90OkpTT04uc3RyaW5naWZ5KHt0cmFjazpNdSh0LnRyYWNrKX0pfWNvbnN0IEh1PSJAYnl0ZWQvdmUtcnRjIixXdT0iQGJ5dGVkL3ZlLXJ0Yy1jYWNoZS1zaXplIjt2YXIgS3U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dXUodGhpcywic3RvcmVLZXkiLHZvaWQgMCksdXUodGhpcywibG9nTGV2ZWwiLHZvaWQgMCksdXUodGhpcywiTG9nZmlsZVNpemUiLHZvaWQgMCksdXUodGhpcywiZGIiLHZvaWQgMCksdXUodGhpcywibG9nSWQiLHZvaWQgMCksdXUodGhpcywiY2FjaGVMb2ciLHZvaWQgMCksdXUodGhpcywiY2FjaGVkU2l6ZSIsdm9pZCAwKSx1dSh0aGlzLCJwcmVDYWNoZVRpbWUiLHZvaWQgMCksdXUodGhpcywidGltZXIiLHZvaWQgMCksdXUodGhpcywiX2dldFNpemUiLCh0PT5uZXcgQmxvYih0KS5zaXplLzEwNDg1NzYpKSx0aGlzLnN0b3JlS2V5PSIiLHRoaXMubG9nSWQ9MSx0aGlzLmNhY2hlTG9nPSIiLHRoaXMubG9nTGV2ZWw9Im5vbmUiLHRoaXMuTG9nZmlsZVNpemU9MTAwLHRoaXMuX2NyZWF0ZVN0b3JlKCl9X2NyZWF0ZVN0b3JlKCl7aWYoRnUoKXx8IXdpbmRvdy5pbmRleGVkREIpcmV0dXJuO2NvbnN0IHQ9aW5kZXhlZERCLm9wZW4oIkBieXRlZC92ZS1ydGMiKTt0Lm9udXBncmFkZW5lZWRlZD0oKT0+e3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEh1KTt0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oV3UpfWNhdGNoKGVnKXt9fSx0Lm9uZXJyb3I9dD0+e30sdC5vbnN1Y2Nlc3M9KCk9Pnt0aGlzLmRiPXQucmVzdWx0LHRoaXMuX2dldENhY2hlZFNpemUoKX19X2dldENhY2hlZFNpemUoKXt0cnl7Y29uc3QgdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShXdSk7dD90aGlzLmNhY2hlZFNpemU9TnVtYmVyKHQpOnRoaXMudmFsdWVzKCkudGhlbigodD0+e3RoaXMuY2FjaGVkU2l6ZT10aGlzLl9nZXRTaXplKHQpLHRoaXMuX3NldENhY2hlZFNpemUoKX0pKX1jYXRjaChlZyl7fX1fc2V0Q2FjaGVkU2l6ZSgpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShXdSwiIi5jb25jYXQodGhpcy5jYWNoZWRTaXplKSl9Y2F0Y2goZWcpe319X2dldFN0b3JlKHQpe2lmKHRoaXMuZGIpcmV0dXJuIHRoaXMuZGIudHJhbnNhY3Rpb24oSHUsdCkub2JqZWN0U3RvcmUoSHUpfXNldCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57aWYoIm5vbmUiPT09dGhpcy5sb2dMZXZlbClyZXR1cm4gZSgpO2lmKHQmJnRoaXMucHJlQ2FjaGVUaW1lJiZ0aGlzLnByZUNhY2hlVGltZS1EYXRlLm5vdygpPDFlMylyZXR1cm4gdGhpcy5jYWNoZUxvZys9IlxuXG4iLmNvbmNhdCh0aGlzLmxvZ0lkLCI6ICIpLmNvbmNhdCh0KSx0aGlzLmxvZ0lkKyssdGhpcy50aW1lcnx8KHRoaXMudGltZXI9c2V0VGltZW91dCgoKCk9Pnt0aGlzLnNldCgiIil9KSwxZTMtKHRoaXMucHJlQ2FjaGVUaW1lLURhdGUubm93KCkpKSksZSgpO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPW51bGw7Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZHdyaXRlIik7aWYoIXIpcmV0dXJuIG4oImdldCBzdG9yZSBmYWlsIik7dGhpcy5jYWNoZWRTaXplJiZ0aGlzLmNhY2hlZFNpemU+dGhpcy5Mb2dmaWxlU2l6ZSYmdGhpcy5rZXlFYXJsaWVzdCgpLnRoZW4oKHQ9Pnt0aGlzLmdldCh0KS50aGVuKChlPT57dGhpcy5kZWwodCkudGhlbigoKCk9Pnt0aGlzLmNhY2hlZFNpemU9dGhpcy5jYWNoZWRTaXplLXRoaXMuX2dldFNpemUoWyIiLmNvbmNhdChlKV0pLHRoaXMuX3NldENhY2hlZFNpemUoKX0pKX0pKX0pKTtjb25zdCBpPXIuZ2V0KHRoaXMuc3RvcmVLZXkpO2kub25zdWNjZXNzPSgpPT57dHJ5e2NvbnN0IG49IiIuY29uY2F0KGkucmVzdWx0fHwiIikuY29uY2F0KHRoaXMuY2FjaGVMb2cpLG89dD8iIi5jb25jYXQobj8iXG5cbiI6IiIpLmNvbmNhdCh0aGlzLmxvZ0lkLCI6ICIpLmNvbmNhdCh0KToiIjtyLnB1dCgiIi5jb25jYXQobikuY29uY2F0KG8pLHRoaXMuc3RvcmVLZXkpLHQmJnRoaXMubG9nSWQrKyx0aGlzLmNhY2hlTG9nPSIiLHRoaXMuY2FjaGVkU2l6ZT0odGhpcy5jYWNoZWRTaXplfHwwKSt0aGlzLl9nZXRTaXplKFsiIi5jb25jYXQodGhpcy5jYWNoZUxvZykuY29uY2F0KG8pXSksdGhpcy5fc2V0Q2FjaGVkU2l6ZSgpLHRoaXMucHJlQ2FjaGVUaW1lPURhdGUubm93KCksZSgpfWNhdGNoKG8pe2lmKCF0KXJldHVybiBuKG8pO3RoaXMuY2FjaGVMb2crPSJcblxuIi5jb25jYXQodGhpcy5sb2dJZCwiOiAiKS5jb25jYXQodCksdGhpcy5sb2dJZCsrLG4obyl9fSxpLm9uZXJyb3I9ZT0+e2lmKCF0KXJldHVybiBuKGUpO3RoaXMuY2FjaGVMb2crPSJcblxuIi5jb25jYXQodGhpcy5sb2dJZCwiOiAiKS5jb25jYXQodCksdGhpcy5sb2dJZCsrLG4oZSl9fSkpfWdldCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZG9ubHkiKTtpZighcilyZXR1cm4gbigpO2NvbnN0IGk9ci5nZXQodCk7aS5vbnN1Y2Nlc3M9KCk9PntlKGkucmVzdWx0KX0saS5vbmVycm9yPXQ9PntuKHQpfX0pKX1kZWwoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5zdG9yZUtleTtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZHdyaXRlIik7aWYoIXIpcmV0dXJuIG4oKTtjb25zdCBpPXIuZGVsZXRlKHQpO2kub25zdWNjZXNzPSgpPT5lKGkucmVzdWx0KSxpLm9uZXJyb3I9dD0+bih0KX0pKX1rZXlFYXJsaWVzdCgpe3JldHVybiB0aGlzLmtleXMoKS50aGVuKCh0PT57bGV0IGUsbj1EYXRlLm5vdygpO3JldHVybiB0LmZvckVhY2goKHQ9PntpZighdHx8IXQubGVuZ3RoKXJldHVybjtjb25zdCByPXQuc3BsaXQoIi0iKVswXTtOdW1iZXIocik8biYmKG49TnVtYmVyKHIpLGU9dCl9KSksZX0pKX1rZXlzKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e2NvbnN0IG49dGhpcy5fZ2V0U3RvcmUoInJlYWRvbmx5Iik7aWYoIW4pcmV0dXJuIGUoKTtpZihuLmdldEFsbEtleXMpe2NvbnN0IHI9bi5nZXRBbGxLZXlzKCk7cmV0dXJuIHIub25zdWNjZXNzPSgpPT57dChyLnJlc3VsdCl9LHZvaWQoci5vbmVycm9yPSgpPT57ZSgpfSl9Y29uc3Qgcj1bXTtuLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHIucHVzaCh0aGlzLnJlc3VsdC5rZXkpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxuLnRyYW5zYWN0aW9uLm9uY29tcGxldGU9KCk9PnQocil9KSl9dmFsdWVzKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e2NvbnN0IG49dGhpcy5fZ2V0U3RvcmUoInJlYWRvbmx5Iik7aWYoIW4pcmV0dXJuIGUoKTtpZihuLmdldEFsbCl7Y29uc3Qgcj1uLmdldEFsbCgpO3JldHVybiByLm9uc3VjY2Vzcz0oKT0+e3Qoci5yZXN1bHQpfSx2b2lkKHIub25lcnJvcj0oKT0+e2UoKX0pfWNvbnN0IHI9W107bi5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQmJihyLnB1c2godGhpcy5yZXN1bHQudmFsdWUpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxuLnRyYW5zYWN0aW9uLm9uY29tcGxldGU9KCk9PnQocil9KSl9ZG93bmxvYWQodCl7dD10fHx0aGlzLnN0b3JlS2V5LHRoaXMuZ2V0KHQpLnRoZW4oKGU9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtuLmRvd25sb2FkPSIiLmNvbmNhdCh0LCIudHh0Iiksbi5ocmVmPSJkYXRhOnRleHQvcGFpbnQ7dXRmLTgsIi5jb25jYXQoZXx8IiIpLG4uY2xpY2soKX0pKX19O2NsYXNzIEd1e2NvbnN0cnVjdG9yKCl7dXUodGhpcywiX2FsbCIse30pfW9uKHQsZSl7Y29uc3Qgbj10aGlzLl9hbGxbdF07bj9uLnB1c2goZSk6dGhpcy5fYWxsW3RdPVtlXX1vbmNlKHQsZSl7dmFyIG49dGhpcztjb25zdCByPWZ1bmN0aW9uKCl7ZSguLi5hcmd1bWVudHMpLG4ub2ZmKHQscil9O3RoaXMub24odCxyKX1vZmYodCxlKXtjb25zdCBuPXRoaXMuX2FsbFt0XTtudWxsPT1ufHxuLnNwbGljZShuLmluZGV4T2YoZSk+Pj4wLDEpfWVtaXQodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2NvbnN0IGk9dGhpcy5fYWxsW3RdO251bGw9PWl8fGkuc2xpY2UoKS5mb3JFYWNoKCh0PT50KC4uLm4pKSl9c2FmZUVtaXQodCl7dHJ5e2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gdGhpcy5lbWl0KHQsLi4ubil9Y2F0Y2goZWcpe2NvbnNvbGUuZXJyb3IoZWcpfX1kZXN0cm95KCl7dGhpcy5fYWxsPXt9fX1jb25zdCBWdT1bIlVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQiLCJVUExPQURfUkVQT1JUX0xJTUlUIl07Y29uc3QgWXU9bmV3IGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHV1KHRoaXMsImNvbmZpZyIse1VQTE9BRF9DT05TT0xFX09OOiExLFVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQ6MjAwLFVQTE9BRF9SRVBPUlRfTElNSVQ6NDVlNCxFTkFCTEVfUkVQT1JUX0lEQl9CVUZGRVI6ITF9KX1zZXRQYXJhbWV0ZXIodCxlKXtpZihmdW5jdGlvbih0KXtyZXR1cm4gVnUuaW5jbHVkZXModCl9KHQpKXRyeXtjb25zdCBuPU51bWJlcihlKTtpZihOdW1iZXIuaXNOYU4obikpcmV0dXJuO3RoaXMuY29uZmlnW3RdPW59Y2F0Y2gobil7cmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJDYW5ub3QgY29udmVydCBjb3JlIGxpYiBwYXJhbWV0ZXIgIi5jb25jYXQodCwiOiIpLmNvbmNhdChlLCIgaW50byBudW1iZXIiKSl9ZWxzZSB0aGlzLmNvbmZpZ1t0XT1lO3RoaXMuZW1pdCh0LHRoaXMuY29uZmlnW3RdKX1nZXRQYXJhbWV0ZXIodCl7cmV0dXJuIHRoaXMuY29uZmlnW3RdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25maWcpfX07dmFyIFh1PVl0LHF1PW1pO0xuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YSgoZnVuY3Rpb24oKXtxdSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIHF1KFh1KHQpKX19KTt2YXIgJHU9bihRLk9iamVjdC5rZXlzKSxRdT1uKFEuT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyksdGg9cW8uZmlsdGVyO0xuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IU5yKCJmaWx0ZXIiKX0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGgodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgZWg9SXUoIkFycmF5IiwiZmlsdGVyIiksbmg9b3Qscmg9ZWgsaWg9QXJyYXkucHJvdG90eXBlLG9oPW4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZmlsdGVyO3JldHVybiB0PT09aWh8fG5oKGloLHQpJiZlPT09aWguZmlsdGVyP3JoOmV9KSksYWg9e2V4cG9ydHM6e319LHNoPUxuLGNoPWEsbGg9WCx1aD1ULmYsaGg9RTtzaCh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFoaHx8Y2goKGZ1bmN0aW9uKCl7dWgoMSl9KSksc2hhbTohaGh9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWgobGgodCksZSl9fSk7dmFyIGZoPVEuT2JqZWN0LGRoPWFoLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmguZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSl9O2ZoLmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtJiYoZGguc2hhbT0hMCk7dmFyIF9oPW4oYWguZXhwb3J0cykscGg9RSxnaD1EbixtaD1UeXBlRXJyb3IseWg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix2aD1waCYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcylyZXR1cm4hMDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKGVnKXtyZXR1cm4gZWcgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpLGJoPVl0LHdoPVduLGtoPXZoP2Z1bmN0aW9uKHQsZSl7aWYoZ2godCkmJiF5aCh0LCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBuZXcgbWgoIkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1cm4gdC5sZW5ndGg9ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg9ZX0sU2g9R247TG4oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOmEoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goZWcpe3JldHVybiBlZyBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uKHQpe3ZhciBlPWJoKHRoaXMpLG49d2goZSkscj1hcmd1bWVudHMubGVuZ3RoO1NoKG4rcik7Zm9yKHZhciBpPTA7aTxyO2krKyllW25dPWFyZ3VtZW50c1tpXSxuKys7cmV0dXJuIGtoKGUsbiksbn19KTt2YXIgT2g9SXUoIkFycmF5IiwicHVzaCIpLHhoPW90LEFoPU9oLFRoPUFycmF5LnByb3RvdHlwZSxFaD1uKChmdW5jdGlvbih0KXt2YXIgZT10LnB1c2g7cmV0dXJuIHQ9PT1UaHx8eGgoVGgsdCkmJmU9PT1UaC5wdXNoP0FoOmV9KSksTGg9YSx6aD1xby5mb3JFYWNoLEJoPWZ1bmN0aW9uKHQsZSl7dmFyIG49W11bdF07cmV0dXJuISFuJiZMaCgoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3JldHVybiAxfSwxKX0pKX0oImZvckVhY2giKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiB6aCh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfTtMbih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPT1CaH0se2ZvckVhY2g6Qmh9KTt2YXIgSWg9SXUoIkFycmF5IiwiZm9yRWFjaCIpLENoPWFyLE5oPSR0LFJoPW90LGpoPUloLERoPUFycmF5LnByb3RvdHlwZSxQaD17RE9NVG9rZW5MaXN0OiEwLE5vZGVMaXN0OiEwfSxVaD1uKChmdW5jdGlvbih0KXt2YXIgZT10LmZvckVhY2g7cmV0dXJuIHQ9PT1EaHx8UmgoRGgsdCkmJmU9PT1EaC5mb3JFYWNofHxOaChQaCxDaCh0KSk/amg6ZX0pKSxGaD1pdCxNaD1KaSxaaD1RaSxKaD1ubixIaD1tKFtdLmNvbmNhdCksV2g9RmgoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPU1oLmYoSmgodCkpLG49WmguZjtyZXR1cm4gbj9IaChlLG4odCkpOmV9LEtoPVgsR2g9VCxWaD1xbjtMbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohRX0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj1LaCh0KSxpPUdoLmYsbz1XaChyKSxhPXt9LHM9MDtvLmxlbmd0aD5zOyl2b2lkIDAhPT0obj1pKHIsZT1vW3MrK10pKSYmVmgoYSxlLG4pO3JldHVybiBhfX0pO3ZhciBZaD1uKFEuT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpLFhoPXtleHBvcnRzOnt9fSxxaD1MbiwkaD1FLFFoPSRyLmY7cWgoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuZGVmaW5lUHJvcGVydGllcyE9PVFoLHNoYW06ISRofSx7ZGVmaW5lUHJvcGVydGllczpRaH0pO3ZhciB0Zj1RLk9iamVjdCxlZj1YaC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRmLmRlZmluZVByb3BlcnRpZXModCxlKX07dGYuZGVmaW5lUHJvcGVydGllcy5zaGFtJiYoZWYuc2hhbT0hMCk7dmFyIG5mPW4oWGguZXhwb3J0cyk7ZnVuY3Rpb24gcmYodCxlKXt2YXIgbj0kdSh0KTtpZihRdSl7dmFyIHI9UXUodCk7ZSYmKHI9b2gocikuY2FsbChyLChmdW5jdGlvbihlKXtyZXR1cm4gX2godCxlKS5lbnVtZXJhYmxlfSkpKSxFaChuKS5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG9mKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuLHIsaT1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9VaChuPXJmKE9iamVjdChpKSwhMCkpLmNhbGwobiwoZnVuY3Rpb24oZSl7dXUodCxlLGlbZV0pfSkpOlloP25mKHQsWWgoaSkpOlVoKHI9cmYoT2JqZWN0KGkpKSkuY2FsbChyLChmdW5jdGlvbihlKXtSbih0LGUsX2goaSxlKSl9KSl9cmV0dXJuIHR9dmFyIGFmPURuLHNmPVduLGNmPUduLGxmPVhlLHVmPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyl7Zm9yKHZhciBjLGwsdT1pLGg9MCxmPSEhYSYmbGYoYSxzKTtoPHI7KWggaW4gbiYmKGM9Zj9mKG5baF0saCxlKTpuW2hdLG8+MCYmYWYoYyk/KGw9c2YoYyksdT11Zih0LGUsYyxsLHUsby0xKS0xKTooY2YodSsxKSx0W3VdPWMpLHUrKyksaCsrO3JldHVybiB1fSxoZj11ZixmZj1ZdCxkZj1XbixfZj1NbixwZj16cjtMbih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLGU9ZmYodGhpcyksbj1kZihlKSxyPXBmKGUsMCk7cmV0dXJuIHIubGVuZ3RoPWhmKHIsZSxlLG4sMCx2b2lkIDA9PT10PzE6X2YodCkpLHJ9fSk7dmFyIGdmPUl1KCJBcnJheSIsImZsYXQiKSxtZj1vdCx5Zj1nZix2Zj1BcnJheS5wcm90b3R5cGUsYmY9bigoZnVuY3Rpb24odCl7dmFyIGU9dC5mbGF0O3JldHVybiB0PT09dmZ8fG1mKHZmLHQpJiZlPT09dmYuZmxhdD95ZjplfSkpLHdmPXt9OyFmdW5jdGlvbih0KXt2YXIgZT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDE2QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgSW50MzJBcnJheTtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXQuYXNzaWduPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7ZS5sZW5ndGg7KXt2YXIgcj1lLnNoaWZ0KCk7aWYocil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IocisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBpIGluIHIpbihyLGkpJiYodFtpXT1yW2ldKX19cmV0dXJuIHR9LHQuc2hyaW5rQnVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZT90OnQuc3ViYXJyYXk/dC5zdWJhcnJheSgwLGUpOih0Lmxlbmd0aD1lLHQpfTt2YXIgcj17YXJyYXlTZXQ6ZnVuY3Rpb24odCxlLG4scixpKXtpZihlLnN1YmFycmF5JiZ0LnN1YmFycmF5KXQuc2V0KGUuc3ViYXJyYXkobixuK3IpLGkpO2Vsc2UgZm9yKHZhciBvPTA7bzxyO28rKyl0W2krb109ZVtuK29dfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYTtmb3Iocj0wLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspcis9dFtlXS5sZW5ndGg7Zm9yKGE9bmV3IFVpbnQ4QXJyYXkociksaT0wLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspbz10W2VdLGEuc2V0KG8saSksaSs9by5sZW5ndGg7cmV0dXJuIGF9fSxpPXthcnJheVNldDpmdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbz0wO288cjtvKyspdFtpK29dPWVbbitvXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdCl9fTt0LnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHQuQnVmOD1VaW50OEFycmF5LHQuQnVmMTY9VWludDE2QXJyYXksdC5CdWYzMj1JbnQzMkFycmF5LHQuYXNzaWduKHQscikpOih0LkJ1Zjg9QXJyYXksdC5CdWYxNj1BcnJheSx0LkJ1ZjMyPUFycmF5LHQuYXNzaWduKHQsaSkpfSx0LnNldFR5cGVkKGUpfSh3Zik7dmFyIGtmPXt9LFNmPXt9LE9mPXt9LHhmPXdmO2Z1bmN0aW9uIEFmKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDstLWU+PTA7KXRbZV09MH12YXIgVGY9MjU2LEVmPTI4NixMZj0zMCx6Zj0xNSxCZj1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxJZj1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sQ2Y9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLE5mPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxSZj1uZXcgQXJyYXkoNTc2KTtBZihSZik7dmFyIGpmPW5ldyBBcnJheSg2MCk7QWYoamYpO3ZhciBEZj1uZXcgQXJyYXkoNTEyKTtBZihEZik7dmFyIFBmPW5ldyBBcnJheSgyNTYpO0FmKFBmKTt2YXIgVWY9bmV3IEFycmF5KDI5KTtBZihVZik7dmFyIEZmLE1mLFpmLEpmPW5ldyBBcnJheShMZik7ZnVuY3Rpb24gSGYodCxlLG4scixpKXt0aGlzLnN0YXRpY190cmVlPXQsdGhpcy5leHRyYV9iaXRzPWUsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1pLHRoaXMuaGFzX3N0cmVlPXQmJnQubGVuZ3RofWZ1bmN0aW9uIFdmKHQsZSl7dGhpcy5keW5fdHJlZT10LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1lfWZ1bmN0aW9uIEtmKHQpe3JldHVybiB0PDI1Nj9EZlt0XTpEZlsyNTYrKHQ+Pj43KV19ZnVuY3Rpb24gR2YodCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lPj4+OCYyNTV9ZnVuY3Rpb24gVmYodCxlLG4pe3QuYmlfdmFsaWQ+MTYtbj8odC5iaV9idWZ8PWU8PHQuYmlfdmFsaWQmNjU1MzUsR2YodCx0LmJpX2J1ZiksdC5iaV9idWY9ZT4+MTYtdC5iaV92YWxpZCx0LmJpX3ZhbGlkKz1uLTE2KToodC5iaV9idWZ8PWU8PHQuYmlfdmFsaWQmNjU1MzUsdC5iaV92YWxpZCs9bil9ZnVuY3Rpb24gWWYodCxlLG4pe1ZmKHQsblsyKmVdLG5bMiplKzFdKX1mdW5jdGlvbiBYZih0LGUpe3ZhciBuPTA7ZG97bnw9MSZ0LHQ+Pj49MSxuPDw9MX13aGlsZSgtLWU+MCk7cmV0dXJuIG4+Pj4xfWZ1bmN0aW9uIHFmKHQsZSxuKXt2YXIgcixpLG89bmV3IEFycmF5KDE2KSxhPTA7Zm9yKHI9MTtyPD16ZjtyKyspb1tyXT1hPWErbltyLTFdPDwxO2ZvcihpPTA7aTw9ZTtpKyspe3ZhciBzPXRbMippKzFdOzAhPT1zJiYodFsyKmldPVhmKG9bc10rKyxzKSl9fWZ1bmN0aW9uICRmKHQpe3ZhciBlO2ZvcihlPTA7ZTxFZjtlKyspdC5keW5fbHRyZWVbMiplXT0wO2ZvcihlPTA7ZTxMZjtlKyspdC5keW5fZHRyZWVbMiplXT0wO2ZvcihlPTA7ZTwxOTtlKyspdC5ibF90cmVlWzIqZV09MDt0LmR5bl9sdHJlZVs1MTJdPTEsdC5vcHRfbGVuPXQuc3RhdGljX2xlbj0wLHQubGFzdF9saXQ9dC5tYXRjaGVzPTB9ZnVuY3Rpb24gUWYodCl7dC5iaV92YWxpZD44P0dmKHQsdC5iaV9idWYpOnQuYmlfdmFsaWQ+MCYmKHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPXQuYmlfYnVmKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MH1mdW5jdGlvbiB0ZCh0LGUsbixyKXt2YXIgaT0yKmUsbz0yKm47cmV0dXJuIHRbaV08dFtvXXx8dFtpXT09PXRbb10mJnJbZV08PXJbbl19ZnVuY3Rpb24gZWQodCxlLG4pe2Zvcih2YXIgcj10LmhlYXBbbl0saT1uPDwxO2k8PXQuaGVhcF9sZW4mJihpPHQuaGVhcF9sZW4mJnRkKGUsdC5oZWFwW2krMV0sdC5oZWFwW2ldLHQuZGVwdGgpJiZpKyssIXRkKGUscix0LmhlYXBbaV0sdC5kZXB0aCkpOyl0LmhlYXBbbl09dC5oZWFwW2ldLG49aSxpPDw9MTt0LmhlYXBbbl09cn1mdW5jdGlvbiBuZCh0LGUsbil7dmFyIHIsaSxvLGEscz0wO2lmKDAhPT10Lmxhc3RfbGl0KWRve3I9dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqc108PDh8dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqcysxXSxpPXQucGVuZGluZ19idWZbdC5sX2J1ZitzXSxzKyssMD09PXI/WWYodCxpLGUpOihZZih0LChvPVBmW2ldKStUZisxLGUpLDAhPT0oYT1CZltvXSkmJlZmKHQsaS09VWZbb10sYSksWWYodCxvPUtmKC0tciksbiksMCE9PShhPUlmW29dKSYmVmYodCxyLT1KZltvXSxhKSl9d2hpbGUoczx0Lmxhc3RfbGl0KTtZZih0LDI1NixlKX1mdW5jdGlvbiByZCh0LGUpe3ZhciBuLHIsaSxvPWUuZHluX3RyZWUsYT1lLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxzPWUuc3RhdF9kZXNjLmhhc19zdHJlZSxjPWUuc3RhdF9kZXNjLmVsZW1zLGw9LTE7Zm9yKHQuaGVhcF9sZW49MCx0LmhlYXBfbWF4PTU3MyxuPTA7bjxjO24rKykwIT09b1syKm5dPyh0LmhlYXBbKyt0LmhlYXBfbGVuXT1sPW4sdC5kZXB0aFtuXT0wKTpvWzIqbisxXT0wO2Zvcig7dC5oZWFwX2xlbjwyOylvWzIqKGk9dC5oZWFwWysrdC5oZWFwX2xlbl09bDwyPysrbDowKV09MSx0LmRlcHRoW2ldPTAsdC5vcHRfbGVuLS0scyYmKHQuc3RhdGljX2xlbi09YVsyKmkrMV0pO2ZvcihlLm1heF9jb2RlPWwsbj10LmhlYXBfbGVuPj4xO24+PTE7bi0tKWVkKHQsbyxuKTtpPWM7ZG97bj10LmhlYXBbMV0sdC5oZWFwWzFdPXQuaGVhcFt0LmhlYXBfbGVuLS1dLGVkKHQsbywxKSxyPXQuaGVhcFsxXSx0LmhlYXBbLS10LmhlYXBfbWF4XT1uLHQuaGVhcFstLXQuaGVhcF9tYXhdPXIsb1syKmldPW9bMipuXStvWzIqcl0sdC5kZXB0aFtpXT0odC5kZXB0aFtuXT49dC5kZXB0aFtyXT90LmRlcHRoW25dOnQuZGVwdGhbcl0pKzEsb1syKm4rMV09b1syKnIrMV09aSx0LmhlYXBbMV09aSsrLGVkKHQsbywxKX13aGlsZSh0LmhlYXBfbGVuPj0yKTt0LmhlYXBbLS10LmhlYXBfbWF4XT10LmhlYXBbMV0sZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYz1lLmR5bl90cmVlLGw9ZS5tYXhfY29kZSx1PWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLGg9ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLGY9ZS5zdGF0X2Rlc2MuZXh0cmFfYml0cyxkPWUuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsXz1lLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHA9MDtmb3Iobz0wO288PXpmO28rKyl0LmJsX2NvdW50W29dPTA7Zm9yKGNbMip0LmhlYXBbdC5oZWFwX21heF0rMV09MCxuPXQuaGVhcF9tYXgrMTtuPDU3MztuKyspKG89Y1syKmNbMioocj10LmhlYXBbbl0pKzFdKzFdKzEpPl8mJihvPV8scCsrKSxjWzIqcisxXT1vLHI+bHx8KHQuYmxfY291bnRbb10rKyxhPTAscj49ZCYmKGE9ZltyLWRdKSxzPWNbMipyXSx0Lm9wdF9sZW4rPXMqKG8rYSksaCYmKHQuc3RhdGljX2xlbis9cyoodVsyKnIrMV0rYSkpKTtpZigwIT09cCl7ZG97Zm9yKG89Xy0xOzA9PT10LmJsX2NvdW50W29dOylvLS07dC5ibF9jb3VudFtvXS0tLHQuYmxfY291bnRbbysxXSs9Mix0LmJsX2NvdW50W19dLS0scC09Mn13aGlsZShwPjApO2ZvcihvPV87MCE9PW87by0tKWZvcihyPXQuYmxfY291bnRbb107MCE9PXI7KShpPXQuaGVhcFstLW5dKT5sfHwoY1syKmkrMV0hPT1vJiYodC5vcHRfbGVuKz0oby1jWzIqaSsxXSkqY1syKmldLGNbMippKzFdPW8pLHItLSl9fSh0LGUpLHFmKG8sbCx0LmJsX2NvdW50KX1mdW5jdGlvbiBpZCh0LGUsbil7dmFyIHIsaSxvPS0xLGE9ZVsxXSxzPTAsYz03LGw9NDtmb3IoMD09PWEmJihjPTEzOCxsPTMpLGVbMioobisxKSsxXT02NTUzNSxyPTA7cjw9bjtyKyspaT1hLGE9ZVsyKihyKzEpKzFdLCsrczxjJiZpPT09YXx8KHM8bD90LmJsX3RyZWVbMippXSs9czowIT09aT8oaSE9PW8mJnQuYmxfdHJlZVsyKmldKyssdC5ibF90cmVlWzMyXSsrKTpzPD0xMD90LmJsX3RyZWVbMzRdKys6dC5ibF90cmVlWzM2XSsrLHM9MCxvPWksMD09PWE/KGM9MTM4LGw9Myk6aT09PWE/KGM9NixsPTMpOihjPTcsbD00KSl9ZnVuY3Rpb24gb2QodCxlLG4pe3ZhciByLGksbz0tMSxhPWVbMV0scz0wLGM9NyxsPTQ7Zm9yKDA9PT1hJiYoYz0xMzgsbD0zKSxyPTA7cjw9bjtyKyspaWYoaT1hLGE9ZVsyKihyKzEpKzFdLCEoKytzPGMmJmk9PT1hKSl7aWYoczxsKWRve1lmKHQsaSx0LmJsX3RyZWUpfXdoaWxlKDAhPS0tcyk7ZWxzZSAwIT09aT8oaSE9PW8mJihZZih0LGksdC5ibF90cmVlKSxzLS0pLFlmKHQsMTYsdC5ibF90cmVlKSxWZih0LHMtMywyKSk6czw9MTA/KFlmKHQsMTcsdC5ibF90cmVlKSxWZih0LHMtMywzKSk6KFlmKHQsMTgsdC5ibF90cmVlKSxWZih0LHMtMTEsNykpO3M9MCxvPWksMD09PWE/KGM9MTM4LGw9Myk6aT09PWE/KGM9NixsPTMpOihjPTcsbD00KX19QWYoSmYpO3ZhciBhZD0hMTtmdW5jdGlvbiBzZCh0LGUsbixyKXtWZih0LDArKHI/MTowKSwzKSxmdW5jdGlvbih0LGUsbixyKXtRZih0KSxyJiYoR2YodCxuKSxHZih0LH5uKSkseGYuYXJyYXlTZXQodC5wZW5kaW5nX2J1Zix0LndpbmRvdyxlLG4sdC5wZW5kaW5nKSx0LnBlbmRpbmcrPW59KHQsZSxuLCEwKX1PZi5fdHJfaW5pdD1mdW5jdGlvbih0KXthZHx8KCFmdW5jdGlvbigpe3ZhciB0LGUsbixyLGksbz1uZXcgQXJyYXkoMTYpO2ZvcihuPTAscj0wO3I8Mjg7cisrKWZvcihVZltyXT1uLHQ9MDt0PDE8PEJmW3JdO3QrKylQZltuKytdPXI7Zm9yKFBmW24tMV09cixpPTAscj0wO3I8MTY7cisrKWZvcihKZltyXT1pLHQ9MDt0PDE8PElmW3JdO3QrKylEZltpKytdPXI7Zm9yKGk+Pj03O3I8TGY7cisrKWZvcihKZltyXT1pPDw3LHQ9MDt0PDE8PElmW3JdLTc7dCsrKURmWzI1NitpKytdPXI7Zm9yKGU9MDtlPD16ZjtlKyspb1tlXT0wO2Zvcih0PTA7dDw9MTQzOylSZlsyKnQrMV09OCx0Kyssb1s4XSsrO2Zvcig7dDw9MjU1OylSZlsyKnQrMV09OSx0Kyssb1s5XSsrO2Zvcig7dDw9Mjc5OylSZlsyKnQrMV09Nyx0Kyssb1s3XSsrO2Zvcig7dDw9Mjg3OylSZlsyKnQrMV09OCx0Kyssb1s4XSsrO2ZvcihxZihSZiwyODcsbyksdD0wO3Q8TGY7dCsrKWpmWzIqdCsxXT01LGpmWzIqdF09WGYodCw1KTtGZj1uZXcgSGYoUmYsQmYsMjU3LEVmLHpmKSxNZj1uZXcgSGYoamYsSWYsMCxMZix6ZiksWmY9bmV3IEhmKG5ldyBBcnJheSgwKSxDZiwwLDE5LDcpfSgpLGFkPSEwKSx0LmxfZGVzYz1uZXcgV2YodC5keW5fbHRyZWUsRmYpLHQuZF9kZXNjPW5ldyBXZih0LmR5bl9kdHJlZSxNZiksdC5ibF9kZXNjPW5ldyBXZih0LmJsX3RyZWUsWmYpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wLCRmKHQpfSxPZi5fdHJfc3RvcmVkX2Jsb2NrPXNkLE9mLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGE9MDt0LmxldmVsPjA/KDI9PT10LnN0cm0uZGF0YV90eXBlJiYodC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbih0KXt2YXIgZSxuPTQwOTM2MjQ0NDc7Zm9yKGU9MDtlPD0zMTtlKyssbj4+Pj0xKWlmKDEmbiYmMCE9PXQuZHluX2x0cmVlWzIqZV0pcmV0dXJuIDA7aWYoMCE9PXQuZHluX2x0cmVlWzE4XXx8MCE9PXQuZHluX2x0cmVlWzIwXXx8MCE9PXQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoZT0zMjtlPFRmO2UrKylpZigwIT09dC5keW5fbHRyZWVbMiplXSlyZXR1cm4gMTtyZXR1cm4gMH0odCkpLHJkKHQsdC5sX2Rlc2MpLHJkKHQsdC5kX2Rlc2MpLGE9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGlkKHQsdC5keW5fbHRyZWUsdC5sX2Rlc2MubWF4X2NvZGUpLGlkKHQsdC5keW5fZHRyZWUsdC5kX2Rlc2MubWF4X2NvZGUpLHJkKHQsdC5ibF9kZXNjKSxlPTE4O2U+PTMmJjA9PT10LmJsX3RyZWVbMipOZltlXSsxXTtlLS0pO3JldHVybiB0Lm9wdF9sZW4rPTMqKGUrMSkrNSs1KzQsZX0odCksaT10Lm9wdF9sZW4rMys3Pj4+Mywobz10LnN0YXRpY19sZW4rMys3Pj4+Myk8PWkmJihpPW8pKTppPW89bis1LG4rNDw9aSYmLTEhPT1lP3NkKHQsZSxuLHIpOjQ9PT10LnN0cmF0ZWd5fHxvPT09aT8oVmYodCwyKyhyPzE6MCksMyksbmQodCxSZixqZikpOihWZih0LDQrKHI/MTowKSwzKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaTtmb3IoVmYodCxlLTI1Nyw1KSxWZih0LG4tMSw1KSxWZih0LHItNCw0KSxpPTA7aTxyO2krKylWZih0LHQuYmxfdHJlZVsyKk5mW2ldKzFdLDMpO29kKHQsdC5keW5fbHRyZWUsZS0xKSxvZCh0LHQuZHluX2R0cmVlLG4tMSl9KHQsdC5sX2Rlc2MubWF4X2NvZGUrMSx0LmRfZGVzYy5tYXhfY29kZSsxLGErMSksbmQodCx0LmR5bl9sdHJlZSx0LmR5bl9kdHJlZSkpLCRmKHQpLHImJlFmKHQpfSxPZi5fdHJfdGFsbHk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LnBlbmRpbmdfYnVmW3QuZF9idWYrMip0Lmxhc3RfbGl0XT1lPj4+OCYyNTUsdC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqdC5sYXN0X2xpdCsxXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QubF9idWYrdC5sYXN0X2xpdF09MjU1Jm4sdC5sYXN0X2xpdCsrLDA9PT1lP3QuZHluX2x0cmVlWzIqbl0rKzoodC5tYXRjaGVzKyssZS0tLHQuZHluX2x0cmVlWzIqKFBmW25dK1RmKzEpXSsrLHQuZHluX2R0cmVlWzIqS2YoZSldKyspLHQubGFzdF9saXQ9PT10LmxpdF9idWZzaXplLTF9LE9mLl90cl9hbGlnbj1mdW5jdGlvbih0KXtWZih0LDIsMyksWWYodCwyNTYsUmYpLGZ1bmN0aW9uKHQpezE2PT09dC5iaV92YWxpZD8oR2YodCx0LmJpX2J1ZiksdC5iaV9idWY9MCx0LmJpX3ZhbGlkPTApOnQuYmlfdmFsaWQ+PTgmJih0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmdC5iaV9idWYsdC5iaV9idWY+Pj04LHQuYmlfdmFsaWQtPTgpfSh0KX07dmFyIGNkPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT02NTUzNSZ0LG89dD4+PjE2JjY1NTM1LGE9MDswIT09bjspe24tPWE9bj4yZTM/MmUzOm47ZG97bz1vKyhpPWkrZVtyKytdfDApfDB9d2hpbGUoLS1hKTtpJT02NTUyMSxvJT02NTUyMX1yZXR1cm4gaXxvPDwxNn07dmFyIGxkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10sbj0wO248MjU2O24rKyl7dD1uO2Zvcih2YXIgcj0wO3I8ODtyKyspdD0xJnQ/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW25dPXR9cmV0dXJuIGV9KCk7dmFyIHVkLGhkPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWxkLG89cituO3RePS0xO2Zvcih2YXIgYT1yO2E8bzthKyspdD10Pj4+OF5pWzI1NSYodF5lW2FdKV07cmV0dXJufnR9LGZkPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn0sZGQ9d2YsX2Q9T2YscGQ9Y2QsZ2Q9aGQsbWQ9ZmQseWQ9LTIsdmQ9MjU4LGJkPTI2Mix3ZD0xMDMsa2Q9MTEzLFNkPTY2NjtmdW5jdGlvbiBPZCh0LGUpe3JldHVybiB0Lm1zZz1tZFtlXSxlfWZ1bmN0aW9uIHhkKHQpe3JldHVybih0PDwxKS0odD40Pzk6MCl9ZnVuY3Rpb24gQWQodCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT49MDspdFtlXT0wfWZ1bmN0aW9uIFRkKHQpe3ZhciBlPXQuc3RhdGUsbj1lLnBlbmRpbmc7bj50LmF2YWlsX291dCYmKG49dC5hdmFpbF9vdXQpLDAhPT1uJiYoZGQuYXJyYXlTZXQodC5vdXRwdXQsZS5wZW5kaW5nX2J1ZixlLnBlbmRpbmdfb3V0LG4sdC5uZXh0X291dCksdC5uZXh0X291dCs9bixlLnBlbmRpbmdfb3V0Kz1uLHQudG90YWxfb3V0Kz1uLHQuYXZhaWxfb3V0LT1uLGUucGVuZGluZy09biwwPT09ZS5wZW5kaW5nJiYoZS5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gRWQodCxlKXtfZC5fdHJfZmx1c2hfYmxvY2sodCx0LmJsb2NrX3N0YXJ0Pj0wP3QuYmxvY2tfc3RhcnQ6LTEsdC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0LGUpLHQuYmxvY2tfc3RhcnQ9dC5zdHJzdGFydCxUZCh0LnN0cm0pfWZ1bmN0aW9uIExkKHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZX1mdW5jdGlvbiB6ZCh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWU+Pj44JjI1NSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZX1mdW5jdGlvbiBCZCh0LGUpe3ZhciBuLHIsaT10Lm1heF9jaGFpbl9sZW5ndGgsbz10LnN0cnN0YXJ0LGE9dC5wcmV2X2xlbmd0aCxzPXQubmljZV9tYXRjaCxjPXQuc3Ryc3RhcnQ+dC53X3NpemUtYmQ/dC5zdHJzdGFydC0odC53X3NpemUtYmQpOjAsbD10LndpbmRvdyx1PXQud19tYXNrLGg9dC5wcmV2LGY9dC5zdHJzdGFydCt2ZCxkPWxbbythLTFdLF89bFtvK2FdO3QucHJldl9sZW5ndGg+PXQuZ29vZF9tYXRjaCYmKGk+Pj0yKSxzPnQubG9va2FoZWFkJiYocz10Lmxvb2thaGVhZCk7ZG97aWYobFsobj1lKSthXT09PV8mJmxbbithLTFdPT09ZCYmbFtuXT09PWxbb10mJmxbKytuXT09PWxbbysxXSl7bys9MixuKys7ZG97fXdoaWxlKGxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZvPGYpO2lmKHI9dmQtKGYtbyksbz1mLXZkLHI+YSl7aWYodC5tYXRjaF9zdGFydD1lLGE9cixyPj1zKWJyZWFrO2Q9bFtvK2EtMV0sXz1sW28rYV19fX13aGlsZSgoZT1oW2UmdV0pPmMmJjAhPS0taSk7cmV0dXJuIGE8PXQubG9va2FoZWFkP2E6dC5sb29rYWhlYWR9ZnVuY3Rpb24gSWQodCl7dmFyIGUsbixyLGksbyxhLHMsYyxsLHUsaD10Lndfc2l6ZTtkb3tpZihpPXQud2luZG93X3NpemUtdC5sb29rYWhlYWQtdC5zdHJzdGFydCx0LnN0cnN0YXJ0Pj1oKyhoLWJkKSl7ZGQuYXJyYXlTZXQodC53aW5kb3csdC53aW5kb3csaCxoLDApLHQubWF0Y2hfc3RhcnQtPWgsdC5zdHJzdGFydC09aCx0LmJsb2NrX3N0YXJ0LT1oLGU9bj10Lmhhc2hfc2l6ZTtkb3tyPXQuaGVhZFstLWVdLHQuaGVhZFtlXT1yPj1oP3ItaDowfXdoaWxlKC0tbik7ZT1uPWg7ZG97cj10LnByZXZbLS1lXSx0LnByZXZbZV09cj49aD9yLWg6MH13aGlsZSgtLW4pO2krPWh9aWYoMD09PXQuc3RybS5hdmFpbF9pbilicmVhaztpZihhPXQuc3RybSxzPXQud2luZG93LGM9dC5zdHJzdGFydCt0Lmxvb2thaGVhZCxsPWksdT12b2lkIDAsKHU9YS5hdmFpbF9pbik+bCYmKHU9bCksbj0wPT09dT8wOihhLmF2YWlsX2luLT11LGRkLmFycmF5U2V0KHMsYS5pbnB1dCxhLm5leHRfaW4sdSxjKSwxPT09YS5zdGF0ZS53cmFwP2EuYWRsZXI9cGQoYS5hZGxlcixzLHUsYyk6Mj09PWEuc3RhdGUud3JhcCYmKGEuYWRsZXI9Z2QoYS5hZGxlcixzLHUsYykpLGEubmV4dF9pbis9dSxhLnRvdGFsX2luKz11LHUpLHQubG9va2FoZWFkKz1uLHQubG9va2FoZWFkK3QuaW5zZXJ0Pj0zKWZvcihvPXQuc3Ryc3RhcnQtdC5pbnNlcnQsdC5pbnNfaD10LndpbmRvd1tvXSx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbbysxXSkmdC5oYXNoX21hc2s7dC5pbnNlcnQmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbbyszLTFdKSZ0Lmhhc2hfbWFzayx0LnByZXZbbyZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT1vLG8rKyx0Lmluc2VydC0tLCEodC5sb29rYWhlYWQrdC5pbnNlcnQ8MykpOyk7fXdoaWxlKHQubG9va2FoZWFkPGJkJiYwIT09dC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBDZCh0LGUpe2Zvcih2YXIgbixyOzspe2lmKHQubG9va2FoZWFkPGJkKXtpZihJZCh0KSx0Lmxvb2thaGVhZDxiZCYmMD09PWUpcmV0dXJuIDE7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfWlmKG49MCx0Lmxvb2thaGVhZD49MyYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzMtMV0pJnQuaGFzaF9tYXNrLG49dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydCksMCE9PW4mJnQuc3Ryc3RhcnQtbjw9dC53X3NpemUtYmQmJih0Lm1hdGNoX2xlbmd0aD1CZCh0LG4pKSx0Lm1hdGNoX2xlbmd0aD49MylpZihyPV9kLl90cl90YWxseSh0LHQuc3Ryc3RhcnQtdC5tYXRjaF9zdGFydCx0Lm1hdGNoX2xlbmd0aC0zKSx0Lmxvb2thaGVhZC09dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg8PXQubWF4X2xhenlfbWF0Y2gmJnQubG9va2FoZWFkPj0zKXt0Lm1hdGNoX2xlbmd0aC0tO2Rve3Quc3Ryc3RhcnQrKyx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCszLTFdKSZ0Lmhhc2hfbWFzayxuPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnR9d2hpbGUoMCE9LS10Lm1hdGNoX2xlbmd0aCk7dC5zdHJzdGFydCsrfWVsc2UgdC5zdHJzdGFydCs9dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg9MCx0Lmluc19oPXQud2luZG93W3Quc3Ryc3RhcnRdLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzFdKSZ0Lmhhc2hfbWFzaztlbHNlIHI9X2QuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0XSksdC5sb29rYWhlYWQtLSx0LnN0cnN0YXJ0Kys7aWYociYmKEVkKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gdC5pbnNlcnQ9dC5zdHJzdGFydDwyP3Quc3Ryc3RhcnQ6Miw0PT09ZT8oRWQodCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/Mzo0KTp0Lmxhc3RfbGl0JiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBOZCh0LGUpe2Zvcih2YXIgbixyLGk7Oyl7aWYodC5sb29rYWhlYWQ8YmQpe2lmKElkKHQpLHQubG9va2FoZWFkPGJkJiYwPT09ZSlyZXR1cm4gMTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYobj0wLHQubG9va2FoZWFkPj0zJiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQrMy0xXSkmdC5oYXNoX21hc2ssbj10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSx0LnByZXZfbGVuZ3RoPXQubWF0Y2hfbGVuZ3RoLHQucHJldl9tYXRjaD10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoPTIsMCE9PW4mJnQucHJldl9sZW5ndGg8dC5tYXhfbGF6eV9tYXRjaCYmdC5zdHJzdGFydC1uPD10Lndfc2l6ZS1iZCYmKHQubWF0Y2hfbGVuZ3RoPUJkKHQsbiksdC5tYXRjaF9sZW5ndGg8PTUmJigxPT09dC5zdHJhdGVneXx8Mz09PXQubWF0Y2hfbGVuZ3RoJiZ0LnN0cnN0YXJ0LXQubWF0Y2hfc3RhcnQ+NDA5NikmJih0Lm1hdGNoX2xlbmd0aD0yKSksdC5wcmV2X2xlbmd0aD49MyYmdC5tYXRjaF9sZW5ndGg8PXQucHJldl9sZW5ndGgpe2k9dC5zdHJzdGFydCt0Lmxvb2thaGVhZC0zLHI9X2QuX3RyX3RhbGx5KHQsdC5zdHJzdGFydC0xLXQucHJldl9tYXRjaCx0LnByZXZfbGVuZ3RoLTMpLHQubG9va2FoZWFkLT10LnByZXZfbGVuZ3RoLTEsdC5wcmV2X2xlbmd0aC09Mjtkb3srK3Quc3Ryc3RhcnQ8PWkmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCszLTFdKSZ0Lmhhc2hfbWFzayxuPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tdC5wcmV2X2xlbmd0aCk7aWYodC5tYXRjaF9hdmFpbGFibGU9MCx0Lm1hdGNoX2xlbmd0aD0yLHQuc3Ryc3RhcnQrKyxyJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYodC5tYXRjaF9hdmFpbGFibGUpe2lmKChyPV9kLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydC0xXSkpJiZFZCh0LCExKSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLSwwPT09dC5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHQubWF0Y2hfYXZhaWxhYmxlPTEsdC5zdHJzdGFydCsrLHQubG9va2FoZWFkLS19cmV0dXJuIHQubWF0Y2hfYXZhaWxhYmxlJiYocj1fZC5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnQtMV0pLHQubWF0Y2hfYXZhaWxhYmxlPTApLHQuaW5zZXJ0PXQuc3Ryc3RhcnQ8Mj90LnN0cnN0YXJ0OjIsND09PWU/KEVkKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0PzM6NCk6dC5sYXN0X2xpdCYmKEVkKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUmQodCxlLG4scixpKXt0aGlzLmdvb2RfbGVuZ3RoPXQsdGhpcy5tYXhfbGF6eT1lLHRoaXMubmljZV9sZW5ndGg9bix0aGlzLm1heF9jaGFpbj1yLHRoaXMuZnVuYz1pfWZ1bmN0aW9uIGpkKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9OCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgZGQuQnVmMTYoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IGRkLkJ1ZjE2KDEyMiksdGhpcy5ibF90cmVlPW5ldyBkZC5CdWYxNig3OCksQWQodGhpcy5keW5fbHRyZWUpLEFkKHRoaXMuZHluX2R0cmVlKSxBZCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBkZC5CdWYxNigxNiksdGhpcy5oZWFwPW5ldyBkZC5CdWYxNig1NzMpLEFkKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBkZC5CdWYxNig1NzMpLEFkKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIERkKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyh0LnRvdGFsX2luPXQudG90YWxfb3V0PTAsdC5kYXRhX3R5cGU9MiwoZT10LnN0YXRlKS5wZW5kaW5nPTAsZS5wZW5kaW5nX291dD0wLGUud3JhcDwwJiYoZS53cmFwPS1lLndyYXApLGUuc3RhdHVzPWUud3JhcD80MjprZCx0LmFkbGVyPTI9PT1lLndyYXA/MDoxLGUubGFzdF9mbHVzaD0wLF9kLl90cl9pbml0KGUpLDApOk9kKHQseWQpfWZ1bmN0aW9uIFBkKHQpe3ZhciBlLG49RGQodCk7cmV0dXJuIDA9PT1uJiYoKGU9dC5zdGF0ZSkud2luZG93X3NpemU9MiplLndfc2l6ZSxBZChlLmhlYWQpLGUubWF4X2xhenlfbWF0Y2g9dWRbZS5sZXZlbF0ubWF4X2xhenksZS5nb29kX21hdGNoPXVkW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD11ZFtlLmxldmVsXS5uaWNlX2xlbmd0aCxlLm1heF9jaGFpbl9sZW5ndGg9dWRbZS5sZXZlbF0ubWF4X2NoYWluLGUuc3Ryc3RhcnQ9MCxlLmJsb2NrX3N0YXJ0PTAsZS5sb29rYWhlYWQ9MCxlLmluc2VydD0wLGUubWF0Y2hfbGVuZ3RoPWUucHJldl9sZW5ndGg9MixlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MCksbn1mdW5jdGlvbiBVZCh0LGUsbixyLGksbyl7aWYoIXQpcmV0dXJuIHlkO3ZhciBhPTE7aWYoLTE9PT1lJiYoZT02KSxyPDA/KGE9MCxyPS1yKTpyPjE1JiYoYT0yLHItPTE2KSxpPDF8fGk+OXx8OCE9PW58fHI8OHx8cj4xNXx8ZTwwfHxlPjl8fG88MHx8bz40KXJldHVybiBPZCh0LHlkKTs4PT09ciYmKHI9OSk7dmFyIHM9bmV3IGpkO3JldHVybiB0LnN0YXRlPXMscy5zdHJtPXQscy53cmFwPWEscy5nemhlYWQ9bnVsbCxzLndfYml0cz1yLHMud19zaXplPTE8PHMud19iaXRzLHMud19tYXNrPXMud19zaXplLTEscy5oYXNoX2JpdHM9aSs3LHMuaGFzaF9zaXplPTE8PHMuaGFzaF9iaXRzLHMuaGFzaF9tYXNrPXMuaGFzaF9zaXplLTEscy5oYXNoX3NoaWZ0PX5+KChzLmhhc2hfYml0cyszLTEpLzMpLHMud2luZG93PW5ldyBkZC5CdWY4KDIqcy53X3NpemUpLHMuaGVhZD1uZXcgZGQuQnVmMTYocy5oYXNoX3NpemUpLHMucHJldj1uZXcgZGQuQnVmMTYocy53X3NpemUpLHMubGl0X2J1ZnNpemU9MTw8aSs2LHMucGVuZGluZ19idWZfc2l6ZT00KnMubGl0X2J1ZnNpemUscy5wZW5kaW5nX2J1Zj1uZXcgZGQuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpLHMuZF9idWY9MSpzLmxpdF9idWZzaXplLHMubF9idWY9MypzLmxpdF9idWZzaXplLHMubGV2ZWw9ZSxzLnN0cmF0ZWd5PW8scy5tZXRob2Q9bixQZCh0KX11ZD1bbmV3IFJkKDAsMCwwLDAsKGZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzU7Zm9yKG4+dC5wZW5kaW5nX2J1Zl9zaXplLTUmJihuPXQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZih0Lmxvb2thaGVhZDw9MSl7aWYoSWQodCksMD09PXQubG9va2FoZWFkJiYwPT09ZSlyZXR1cm4gMTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9dC5zdHJzdGFydCs9dC5sb29rYWhlYWQsdC5sb29rYWhlYWQ9MDt2YXIgcj10LmJsb2NrX3N0YXJ0K247aWYoKDA9PT10LnN0cnN0YXJ0fHx0LnN0cnN0YXJ0Pj1yKSYmKHQubG9va2FoZWFkPXQuc3Ryc3RhcnQtcix0LnN0cnN0YXJ0PXIsRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxO2lmKHQuc3Ryc3RhcnQtdC5ibG9ja19zdGFydD49dC53X3NpemUtYmQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHQuaW5zZXJ0PTAsND09PWU/KEVkKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0PzM6NCk6KHQuc3Ryc3RhcnQ+dC5ibG9ja19zdGFydCYmKEVkKHQsITEpLHQuc3RybS5hdmFpbF9vdXQpLDEpfSkpLG5ldyBSZCg0LDQsOCw0LENkKSxuZXcgUmQoNCw1LDE2LDgsQ2QpLG5ldyBSZCg0LDYsMzIsMzIsQ2QpLG5ldyBSZCg0LDQsMTYsMTYsTmQpLG5ldyBSZCg4LDE2LDMyLDMyLE5kKSxuZXcgUmQoOCwxNiwxMjgsMTI4LE5kKSxuZXcgUmQoOCwzMiwxMjgsMjU2LE5kKSxuZXcgUmQoMzIsMTI4LDI1OCwxMDI0LE5kKSxuZXcgUmQoMzIsMjU4LDI1OCw0MDk2LE5kKV0sU2YuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWQodCxlLDgsMTUsOCwwKX0sU2YuZGVmbGF0ZUluaXQyPVVkLFNmLmRlZmxhdGVSZXNldD1QZCxTZi5kZWZsYXRlUmVzZXRLZWVwPURkLFNmLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5zdGF0ZT8yIT09dC5zdGF0ZS53cmFwP3lkOih0LnN0YXRlLmd6aGVhZD1lLDApOnlkfSxTZi5kZWZsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG87aWYoIXR8fCF0LnN0YXRlfHxlPjV8fGU8MClyZXR1cm4gdD9PZCh0LHlkKTp5ZDtpZihyPXQuc3RhdGUsIXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW58fHIuc3RhdHVzPT09U2QmJjQhPT1lKXJldHVybiBPZCh0LDA9PT10LmF2YWlsX291dD8tNTp5ZCk7aWYoci5zdHJtPXQsbj1yLmxhc3RfZmx1c2gsci5sYXN0X2ZsdXNoPWUsNDI9PT1yLnN0YXR1cylpZigyPT09ci53cmFwKXQuYWRsZXI9MCxMZChyLDMxKSxMZChyLDEzOSksTGQociw4KSxyLmd6aGVhZD8oTGQociwoci5nemhlYWQudGV4dD8xOjApKyhyLmd6aGVhZC5oY3JjPzI6MCkrKHIuZ3poZWFkLmV4dHJhPzQ6MCkrKHIuZ3poZWFkLm5hbWU/ODowKSsoci5nemhlYWQuY29tbWVudD8xNjowKSksTGQociwyNTUmci5nemhlYWQudGltZSksTGQocixyLmd6aGVhZC50aW1lPj44JjI1NSksTGQocixyLmd6aGVhZC50aW1lPj4xNiYyNTUpLExkKHIsci5nemhlYWQudGltZT4+MjQmMjU1KSxMZChyLDk9PT1yLmxldmVsPzI6ci5zdHJhdGVneT49Mnx8ci5sZXZlbDwyPzQ6MCksTGQociwyNTUmci5nemhlYWQub3MpLHIuZ3poZWFkLmV4dHJhJiZyLmd6aGVhZC5leHRyYS5sZW5ndGgmJihMZChyLDI1NSZyLmd6aGVhZC5leHRyYS5sZW5ndGgpLExkKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHIuZ3poZWFkLmhjcmMmJih0LmFkbGVyPWdkKHQuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmcsMCkpLHIuZ3ppbmRleD0wLHIuc3RhdHVzPTY5KTooTGQociwwKSxMZChyLDApLExkKHIsMCksTGQociwwKSxMZChyLDApLExkKHIsOT09PXIubGV2ZWw/MjpyLnN0cmF0ZWd5Pj0yfHxyLmxldmVsPDI/NDowKSxMZChyLDMpLHIuc3RhdHVzPWtkKTtlbHNle3ZhciBhPTgrKHIud19iaXRzLTg8PDQpPDw4O2F8PShyLnN0cmF0ZWd5Pj0yfHxyLmxldmVsPDI/MDpyLmxldmVsPDY/MTo2PT09ci5sZXZlbD8yOjMpPDw2LDAhPT1yLnN0cnN0YXJ0JiYoYXw9MzIpLGErPTMxLWElMzEsci5zdGF0dXM9a2QsemQocixhKSwwIT09ci5zdHJzdGFydCYmKHpkKHIsdC5hZGxlcj4+PjE2KSx6ZChyLDY1NTM1JnQuYWRsZXIpKSx0LmFkbGVyPTF9aWYoNjk9PT1yLnN0YXR1cylpZihyLmd6aGVhZC5leHRyYSl7Zm9yKGk9ci5wZW5kaW5nO3IuZ3ppbmRleDwoNjU1MzUmci5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKHIucGVuZGluZyE9PXIucGVuZGluZ19idWZfc2l6ZXx8KHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLFRkKHQpLGk9ci5wZW5kaW5nLHIucGVuZGluZyE9PXIucGVuZGluZ19idWZfc2l6ZSkpOylMZChyLDI1NSZyLmd6aGVhZC5leHRyYVtyLmd6aW5kZXhdKSxyLmd6aW5kZXgrKztyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSxyLmd6aW5kZXg9PT1yLmd6aGVhZC5leHRyYS5sZW5ndGgmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz03Myl9ZWxzZSByLnN0YXR1cz03MztpZig3Mz09PXIuc3RhdHVzKWlmKHIuZ3poZWFkLm5hbWUpe2k9ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLFRkKHQpLGk9ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe289MTticmVha31vPXIuZ3ppbmRleDxyLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmci5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKTowLExkKHIsbyl9d2hpbGUoMCE9PW8pO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLDA9PT1vJiYoci5nemluZGV4PTAsci5zdGF0dXM9OTEpfWVsc2Ugci5zdGF0dXM9OTE7aWYoOTE9PT1yLnN0YXR1cylpZihyLmd6aGVhZC5jb21tZW50KXtpPXIucGVuZGluZztkb3tpZihyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSxUZCh0KSxpPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKXtvPTE7YnJlYWt9bz1yLmd6aW5kZXg8ci5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JnIuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChyLmd6aW5kZXgrKyk6MCxMZChyLG8pfXdoaWxlKDAhPT1vKTtyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSwwPT09byYmKHIuc3RhdHVzPXdkKX1lbHNlIHIuc3RhdHVzPXdkO2lmKHIuc3RhdHVzPT09d2QmJihyLmd6aGVhZC5oY3JjPyhyLnBlbmRpbmcrMj5yLnBlbmRpbmdfYnVmX3NpemUmJlRkKHQpLHIucGVuZGluZysyPD1yLnBlbmRpbmdfYnVmX3NpemUmJihMZChyLDI1NSZ0LmFkbGVyKSxMZChyLHQuYWRsZXI+PjgmMjU1KSx0LmFkbGVyPTAsci5zdGF0dXM9a2QpKTpyLnN0YXR1cz1rZCksMCE9PXIucGVuZGluZyl7aWYoVGQodCksMD09PXQuYXZhaWxfb3V0KXJldHVybiByLmxhc3RfZmx1c2g9LTEsMH1lbHNlIGlmKDA9PT10LmF2YWlsX2luJiZ4ZChlKTw9eGQobikmJjQhPT1lKXJldHVybiBPZCh0LC01KTtpZihyLnN0YXR1cz09PVNkJiYwIT09dC5hdmFpbF9pbilyZXR1cm4gT2QodCwtNSk7aWYoMCE9PXQuYXZhaWxfaW58fDAhPT1yLmxvb2thaGVhZHx8MCE9PWUmJnIuc3RhdHVzIT09U2Qpe3ZhciBzPTI9PT1yLnN0cmF0ZWd5P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuOzspe2lmKDA9PT10Lmxvb2thaGVhZCYmKElkKHQpLDA9PT10Lmxvb2thaGVhZCkpe2lmKDA9PT1lKXJldHVybiAxO2JyZWFrfWlmKHQubWF0Y2hfbGVuZ3RoPTAsbj1fZC5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKyxuJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiB0Lmluc2VydD0wLDQ9PT1lPyhFZCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD8zOjQpOnQubGFzdF9saXQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/MToyfShyLGUpOjM9PT1yLnN0cmF0ZWd5P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsaSxvLGE9dC53aW5kb3c7Oyl7aWYodC5sb29rYWhlYWQ8PXZkKXtpZihJZCh0KSx0Lmxvb2thaGVhZDw9dmQmJjA9PT1lKXJldHVybiAxO2lmKDA9PT10Lmxvb2thaGVhZClicmVha31pZih0Lm1hdGNoX2xlbmd0aD0wLHQubG9va2FoZWFkPj0zJiZ0LnN0cnN0YXJ0PjAmJihyPWFbaT10LnN0cnN0YXJ0LTFdKT09PWFbKytpXSYmcj09PWFbKytpXSYmcj09PWFbKytpXSl7bz10LnN0cnN0YXJ0K3ZkO2Rve313aGlsZShyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZpPG8pO3QubWF0Y2hfbGVuZ3RoPXZkLShvLWkpLHQubWF0Y2hfbGVuZ3RoPnQubG9va2FoZWFkJiYodC5tYXRjaF9sZW5ndGg9dC5sb29rYWhlYWQpfWlmKHQubWF0Y2hfbGVuZ3RoPj0zPyhuPV9kLl90cl90YWxseSh0LDEsdC5tYXRjaF9sZW5ndGgtMyksdC5sb29rYWhlYWQtPXQubWF0Y2hfbGVuZ3RoLHQuc3Ryc3RhcnQrPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPTApOihuPV9kLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrKSxuJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiB0Lmluc2VydD0wLDQ9PT1lPyhFZCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD8zOjQpOnQubGFzdF9saXQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/MToyfShyLGUpOnVkW3IubGV2ZWxdLmZ1bmMocixlKTtpZigzIT09cyYmNCE9PXN8fChyLnN0YXR1cz1TZCksMT09PXN8fDM9PT1zKXJldHVybiAwPT09dC5hdmFpbF9vdXQmJihyLmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PXMmJigxPT09ZT9fZC5fdHJfYWxpZ24ocik6NSE9PWUmJihfZC5fdHJfc3RvcmVkX2Jsb2NrKHIsMCwwLCExKSwzPT09ZSYmKEFkKHIuaGVhZCksMD09PXIubG9va2FoZWFkJiYoci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSkpLFRkKHQpLDA9PT10LmF2YWlsX291dCkpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSwwfXJldHVybiA0IT09ZT8wOnIud3JhcDw9MD8xOigyPT09ci53cmFwPyhMZChyLDI1NSZ0LmFkbGVyKSxMZChyLHQuYWRsZXI+PjgmMjU1KSxMZChyLHQuYWRsZXI+PjE2JjI1NSksTGQocix0LmFkbGVyPj4yNCYyNTUpLExkKHIsMjU1JnQudG90YWxfaW4pLExkKHIsdC50b3RhbF9pbj4+OCYyNTUpLExkKHIsdC50b3RhbF9pbj4+MTYmMjU1KSxMZChyLHQudG90YWxfaW4+PjI0JjI1NSkpOih6ZChyLHQuYWRsZXI+Pj4xNiksemQociw2NTUzNSZ0LmFkbGVyKSksVGQodCksci53cmFwPjAmJihyLndyYXA9LXIud3JhcCksMCE9PXIucGVuZGluZz8wOjEpfSxTZi5kZWZsYXRlRW5kPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPzQyIT09KGU9dC5zdGF0ZS5zdGF0dXMpJiY2OSE9PWUmJjczIT09ZSYmOTEhPT1lJiZlIT09d2QmJmUhPT1rZCYmZSE9PVNkP09kKHQseWQpOih0LnN0YXRlPW51bGwsZT09PWtkP09kKHQsLTMpOjApOnlkfSxTZi5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyxjLGwsdT1lLmxlbmd0aDtpZighdHx8IXQuc3RhdGUpcmV0dXJuIHlkO2lmKDI9PT0obz0obj10LnN0YXRlKS53cmFwKXx8MT09PW8mJjQyIT09bi5zdGF0dXN8fG4ubG9va2FoZWFkKXJldHVybiB5ZDtmb3IoMT09PW8mJih0LmFkbGVyPXBkKHQuYWRsZXIsZSx1LDApKSxuLndyYXA9MCx1Pj1uLndfc2l6ZSYmKDA9PT1vJiYoQWQobi5oZWFkKSxuLnN0cnN0YXJ0PTAsbi5ibG9ja19zdGFydD0wLG4uaW5zZXJ0PTApLGw9bmV3IGRkLkJ1Zjgobi53X3NpemUpLGRkLmFycmF5U2V0KGwsZSx1LW4ud19zaXplLG4ud19zaXplLDApLGU9bCx1PW4ud19zaXplKSxhPXQuYXZhaWxfaW4scz10Lm5leHRfaW4sYz10LmlucHV0LHQuYXZhaWxfaW49dSx0Lm5leHRfaW49MCx0LmlucHV0PWUsSWQobik7bi5sb29rYWhlYWQ+PTM7KXtyPW4uc3Ryc3RhcnQsaT1uLmxvb2thaGVhZC0yO2Rve24uaW5zX2g9KG4uaW5zX2g8PG4uaGFzaF9zaGlmdF5uLndpbmRvd1tyKzMtMV0pJm4uaGFzaF9tYXNrLG4ucHJldltyJm4ud19tYXNrXT1uLmhlYWRbbi5pbnNfaF0sbi5oZWFkW24uaW5zX2hdPXIscisrfXdoaWxlKC0taSk7bi5zdHJzdGFydD1yLG4ubG9va2FoZWFkPTIsSWQobil9cmV0dXJuIG4uc3Ryc3RhcnQrPW4ubG9va2FoZWFkLG4uYmxvY2tfc3RhcnQ9bi5zdHJzdGFydCxuLmluc2VydD1uLmxvb2thaGVhZCxuLmxvb2thaGVhZD0wLG4ubWF0Y2hfbGVuZ3RoPW4ucHJldl9sZW5ndGg9MixuLm1hdGNoX2F2YWlsYWJsZT0wLHQubmV4dF9pbj1zLHQuaW5wdXQ9Yyx0LmF2YWlsX2luPWEsbi53cmFwPW8sMH0sU2YuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBGZD17fSxNZD13ZixaZD0hMCxKZD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2gobmcpe1pkPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKG5nKXtKZD0hMX1mb3IodmFyIEhkPW5ldyBNZC5CdWY4KDI1NiksV2Q9MDtXZDwyNTY7V2QrKylIZFtXZF09V2Q+PTI1Mj82OldkPj0yNDg/NTpXZD49MjQwPzQ6V2Q+PTIyND8zOldkPj0xOTI/MjoxO2Z1bmN0aW9uIEtkKHQsZSl7aWYoZTw2NTUzNCYmKHQuc3ViYXJyYXkmJkpkfHwhdC5zdWJhcnJheSYmWmQpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTWQuc2hyaW5rQnVmKHQsZSkpO2Zvcih2YXIgbj0iIixyPTA7cjxlO3IrKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pO3JldHVybiBufUhkWzI1NF09SGRbMjU0XT0xLEZkLnN0cmluZzJidWY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhPXQubGVuZ3RoLHM9MDtmb3IoaT0wO2k8YTtpKyspNTUyOTY9PSg2NDUxMiYobj10LmNoYXJDb2RlQXQoaSkpKSYmaSsxPGEmJjU2MzIwPT0oNjQ1MTImKHI9dC5jaGFyQ29kZUF0KGkrMSkpKSYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksaSsrKSxzKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2ZvcihlPW5ldyBNZC5CdWY4KHMpLG89MCxpPTA7bzxzO2krKyk1NTI5Nj09KDY0NTEyJihuPXQuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYocj10LmNoYXJDb2RlQXQoaSsxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxpKyspLG48MTI4P2VbbysrXT1uOm48MjA0OD8oZVtvKytdPTE5MnxuPj4+NixlW28rK109MTI4fDYzJm4pOm48NjU1MzY/KGVbbysrXT0yMjR8bj4+PjEyLGVbbysrXT0xMjh8bj4+PjYmNjMsZVtvKytdPTEyOHw2MyZuKTooZVtvKytdPTI0MHxuPj4+MTgsZVtvKytdPTEyOHxuPj4+MTImNjMsZVtvKytdPTEyOHxuPj4+NiY2MyxlW28rK109MTI4fDYzJm4pO3JldHVybiBlfSxGZC5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBLZCh0LHQubGVuZ3RoKX0sRmQuYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1kLkJ1ZjgodC5sZW5ndGgpLG49MCxyPWUubGVuZ3RoO248cjtuKyspZVtuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIGV9LEZkLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhPWV8fHQubGVuZ3RoLHM9bmV3IEFycmF5KDIqYSk7Zm9yKHI9MCxuPTA7bjxhOylpZigoaT10W24rK10pPDEyOClzW3IrK109aTtlbHNlIGlmKChvPUhkW2ldKT40KXNbcisrXT02NTUzMyxuKz1vLTE7ZWxzZXtmb3IoaSY9Mj09PW8/MzE6Mz09PW8/MTU6NztvPjEmJm48YTspaT1pPDw2fDYzJnRbbisrXSxvLS07bz4xP3NbcisrXT02NTUzMzppPDY1NTM2P3NbcisrXT1pOihpLT02NTUzNixzW3IrK109NTUyOTZ8aT4+MTAmMTAyMyxzW3IrK109NTYzMjB8MTAyMyZpKX1yZXR1cm4gS2QocyxyKX0sRmQudXRmOGJvcmRlcj1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcigoZT1lfHx0Lmxlbmd0aCk+dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxuPWUtMTtuPj0wJiYxMjg9PSgxOTImdFtuXSk7KW4tLTtyZXR1cm4gbjwwfHwwPT09bj9lOm4rSGRbdFtuXV0+ZT9uOmV9O3ZhciBHZD1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9LFZkPVNmLFlkPXdmLFhkPUZkLHFkPWZkLCRkPUdkLFFkPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdF8odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdF8pKXJldHVybiBuZXcgdF8odCk7dGhpcy5vcHRpb25zPVlkLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+MD9lLndpbmRvd0JpdHM9LWUud2luZG93Qml0czplLmd6aXAmJmUud2luZG93Qml0cz4wJiZlLndpbmRvd0JpdHM8MTYmJihlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyAkZCx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIG49VmQuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxlLmxldmVsLGUubWV0aG9kLGUud2luZG93Qml0cyxlLm1lbUxldmVsLGUuc3RyYXRlZ3kpO2lmKDAhPT1uKXRocm93IG5ldyBFcnJvcihxZFtuXSk7aWYoZS5oZWFkZXImJlZkLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGUuaGVhZGVyKSxlLmRpY3Rpb25hcnkpe3ZhciByO2lmKHI9InN0cmluZyI9PXR5cGVvZiBlLmRpY3Rpb25hcnk/WGQuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1RZC5jYWxsKGUuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KTplLmRpY3Rpb25hcnksMCE9PShuPVZkLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxyKSkpdGhyb3cgbmV3IEVycm9yKHFkW25dKTt0aGlzLl9kaWN0X3NldD0hMH19ZnVuY3Rpb24gZV8odCxlKXt2YXIgbj1uZXcgdF8oZSk7aWYobi5wdXNoKHQsITApLG4uZXJyKXRocm93IG4ubXNnfHxxZFtuLmVycl07cmV0dXJuIG4ucmVzdWx0fXRfLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRoaXMuc3RybSxvPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtyPWU9PT1+fmU/ZTohMD09PWU/NDowLCJzdHJpbmciPT10eXBlb2YgdD9pLmlucHV0PVhkLnN0cmluZzJidWYodCk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVFkLmNhbGwodCk/aS5pbnB1dD1uZXcgVWludDhBcnJheSh0KTppLmlucHV0PXQsaS5uZXh0X2luPTAsaS5hdmFpbF9pbj1pLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09aS5hdmFpbF9vdXQmJihpLm91dHB1dD1uZXcgWWQuQnVmOChvKSxpLm5leHRfb3V0PTAsaS5hdmFpbF9vdXQ9byksMSE9PShuPVZkLmRlZmxhdGUoaSxyKSkmJjAhPT1uKXJldHVybiB0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsITE7MCE9PWkuYXZhaWxfb3V0JiYoMCE9PWkuYXZhaWxfaW58fDQhPT1yJiYyIT09cil8fCgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLm9uRGF0YShYZC5idWYyYmluc3RyaW5nKFlkLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKFlkLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpfXdoaWxlKChpLmF2YWlsX2luPjB8fDA9PT1pLmF2YWlsX291dCkmJjEhPT1uKTtyZXR1cm4gND09PXI/KG49VmQuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQobiksdGhpcy5lbmRlZD0hMCwwPT09bik6MiE9PXJ8fCh0aGlzLm9uRW5kKDApLGkuYXZhaWxfb3V0PTAsITApfSx0Xy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuY2h1bmtzLnB1c2godCl9LHRfLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXswPT09dCYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVlkLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGtmLkRlZmxhdGU9dF8sa2YuZGVmbGF0ZT1lXyxrZi5kZWZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLnJhdz0hMCxlXyh0LGUpfSxrZi5nemlwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLmd6aXA9ITAsZV8odCxlKX07dmFyIG5fPXt9LHJfPW90LGlfPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBMdXx8QXUodCwiZmxhZ3MiKXx8IVR1KEx1LHQpP2U6eHUoRXUsdCl9LG9fPVJlZ0V4cC5wcm90b3R5cGUsYV89bigoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1vX3x8cl8ob18sdCk/aV8odCk6dC5mbGFnc30pKSxzXz17fSxjXz13ZixsXz0xNSx1Xz1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGhfPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sZl89WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLGRfPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0sX189d2YscF89Y2QsZ189aGQsbV89ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaCxmLGQsXyxwLGcsbSx5LHYsYix3LGssUyxPLHgsQTtuPXQuc3RhdGUscj10Lm5leHRfaW4seD10LmlucHV0LGk9cisodC5hdmFpbF9pbi01KSxvPXQubmV4dF9vdXQsQT10Lm91dHB1dCxhPW8tKGUtdC5hdmFpbF9vdXQpLHM9bysodC5hdmFpbF9vdXQtMjU3KSxjPW4uZG1heCxsPW4ud3NpemUsdT1uLndoYXZlLGg9bi53bmV4dCxmPW4ud2luZG93LGQ9bi5ob2xkLF89bi5iaXRzLHA9bi5sZW5jb2RlLGc9bi5kaXN0Y29kZSxtPSgxPDxuLmxlbmJpdHMpLTEseT0oMTw8bi5kaXN0Yml0cyktMTt0OmRve188MTUmJihkKz14W3IrK108PF8sXys9OCxkKz14W3IrK108PF8sXys9OCksdj1wW2QmbV07ZTpmb3IoOzspe2lmKGQ+Pj49Yj12Pj4+MjQsXy09YiwwPT09KGI9dj4+PjE2JjI1NSkpQVtvKytdPTY1NTM1JnY7ZWxzZXtpZighKDE2JmIpKXtpZig2NCZiKXtpZigzMiZiKXtuLm1vZGU9MTI7YnJlYWsgdH10Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9MzA7YnJlYWsgdH12PXBbKDY1NTM1JnYpKyhkJigxPDxiKS0xKV07Y29udGludWUgZX1mb3Iodz02NTUzNSZ2LChiJj0xNSkmJihfPGImJihkKz14W3IrK108PF8sXys9OCksdys9ZCYoMTw8YiktMSxkPj4+PWIsXy09YiksXzwxNSYmKGQrPXhbcisrXTw8XyxfKz04LGQrPXhbcisrXTw8XyxfKz04KSx2PWdbZCZ5XTs7KXtpZihkPj4+PWI9dj4+PjI0LF8tPWIsMTYmKGI9dj4+PjE2JjI1NSkpe2lmKGs9NjU1MzUmdixfPChiJj0xNSkmJihkKz14W3IrK108PF8sKF8rPTgpPGImJihkKz14W3IrK108PF8sXys9OCkpLChrKz1kJigxPDxiKS0xKT5jKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT0zMDticmVhayB0fWlmKGQ+Pj49YixfLT1iLGs+KGI9by1hKSl7aWYoKGI9ay1iKT51JiZuLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPTMwO2JyZWFrIHR9aWYoUz0wLE89ZiwwPT09aCl7aWYoUys9bC1iLGI8dyl7dy09Yjtkb3tBW28rK109ZltTKytdfXdoaWxlKC0tYik7Uz1vLWssTz1BfX1lbHNlIGlmKGg8Yil7aWYoUys9bCtoLWIsKGItPWgpPHcpe3ctPWI7ZG97QVtvKytdPWZbUysrXX13aGlsZSgtLWIpO2lmKFM9MCxoPHcpe3ctPWI9aDtkb3tBW28rK109ZltTKytdfXdoaWxlKC0tYik7Uz1vLWssTz1BfX19ZWxzZSBpZihTKz1oLWIsYjx3KXt3LT1iO2Rve0FbbysrXT1mW1MrK119d2hpbGUoLS1iKTtTPW8tayxPPUF9Zm9yKDt3PjI7KUFbbysrXT1PW1MrK10sQVtvKytdPU9bUysrXSxBW28rK109T1tTKytdLHctPTM7dyYmKEFbbysrXT1PW1MrK10sdz4xJiYoQVtvKytdPU9bUysrXSkpfWVsc2V7Uz1vLWs7ZG97QVtvKytdPUFbUysrXSxBW28rK109QVtTKytdLEFbbysrXT1BW1MrK10sdy09M313aGlsZSh3PjIpO3cmJihBW28rK109QVtTKytdLHc+MSYmKEFbbysrXT1BW1MrK10pKX1icmVha31pZig2NCZiKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9MzA7YnJlYWsgdH12PWdbKDY1NTM1JnYpKyhkJigxPDxiKS0xKV19fWJyZWFrfX13aGlsZShyPGkmJm88cyk7ci09dz1fPj4zLGQmPSgxPDwoXy09dzw8MykpLTEsdC5uZXh0X2luPXIsdC5uZXh0X291dD1vLHQuYXZhaWxfaW49cjxpP2ktcis1OjUtKHItaSksdC5hdmFpbF9vdXQ9bzxzP3MtbysyNTc6MjU3LShvLXMpLG4uaG9sZD1kLG4uYml0cz1ffSx5Xz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3ZhciBjLGwsdSxoLGYsZCxfLHAsZyxtPXMuYml0cyx5PTAsdj0wLGI9MCx3PTAsaz0wLFM9MCxPPTAseD0wLEE9MCxUPTAsRT1udWxsLEw9MCx6PW5ldyBjXy5CdWYxNigxNiksQj1uZXcgY18uQnVmMTYoMTYpLEk9bnVsbCxDPTA7Zm9yKHk9MDt5PD1sXzt5Kyspelt5XT0wO2Zvcih2PTA7djxyO3YrKyl6W2Vbbit2XV0rKztmb3Ioaz1tLHc9bF87dz49MSYmMD09PXpbd107dy0tKTtpZihrPncmJihrPXcpLDA9PT13KXJldHVybiBpW28rK109MjA5NzE1MjAsaVtvKytdPTIwOTcxNTIwLHMuYml0cz0xLDA7Zm9yKGI9MTtiPHcmJjA9PT16W2JdO2IrKyk7Zm9yKGs8YiYmKGs9YikseD0xLHk9MTt5PD1sXzt5KyspaWYoeDw8PTEsKHgtPXpbeV0pPDApcmV0dXJuLTE7aWYoeD4wJiYoMD09PXR8fDEhPT13KSlyZXR1cm4tMTtmb3IoQlsxXT0wLHk9MTt5PGxfO3krKylCW3krMV09Qlt5XSt6W3ldO2Zvcih2PTA7djxyO3YrKykwIT09ZVtuK3ZdJiYoYVtCW2Vbbit2XV0rK109dik7aWYoMD09PXQ/KEU9ST1hLGQ9MTkpOjE9PT10PyhFPXVfLEwtPTI1NyxJPWhfLEMtPTI1NyxkPTI1Nik6KEU9Zl8sST1kXyxkPS0xKSxUPTAsdj0wLHk9YixmPW8sUz1rLE89MCx1PS0xLGg9KEE9MTw8ayktMSwxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtmb3IoOzspe189eS1PLGFbdl08ZD8ocD0wLGc9YVt2XSk6YVt2XT5kPyhwPUlbQythW3ZdXSxnPUVbTCthW3ZdXSk6KHA9OTYsZz0wKSxjPTE8PHktTyxiPWw9MTw8Uztkb3tpW2YrKFQ+Pk8pKyhsLT1jKV09Xzw8MjR8cDw8MTZ8Z313aGlsZSgwIT09bCk7Zm9yKGM9MTw8eS0xO1QmYzspYz4+PTE7aWYoMCE9PWM/KFQmPWMtMSxUKz1jKTpUPTAsdisrLDA9PS0telt5XSl7aWYoeT09PXcpYnJlYWs7eT1lW24rYVt2XV19aWYoeT5rJiYoVCZoKSE9PXUpe2ZvcigwPT09TyYmKE89ayksZis9Yix4PTE8PChTPXktTyk7UytPPHcmJiEoKHgtPXpbUytPXSk8PTApOylTKysseDw8PTE7aWYoQSs9MTw8UywxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtpW3U9VCZoXT1rPDwyNHxTPDwxNnxmLW99fXJldHVybiAwIT09VCYmKGlbZitUXT15LU88PDI0fDY0PDwxNikscy5iaXRzPWssMH0sdl89LTIsYl89MTIsd189MzA7ZnVuY3Rpb24ga18odCl7cmV0dXJuKHQ+Pj4yNCYyNTUpKyh0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ0KTw8OCkrKCgyNTUmdCk8PDI0KX1mdW5jdGlvbiBTXygpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgX18uQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IF9fLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIE9fKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUsdC50b3RhbF9pbj10LnRvdGFsX291dD1lLnRvdGFsPTAsdC5tc2c9IiIsZS53cmFwJiYodC5hZGxlcj0xJmUud3JhcCksZS5tb2RlPTEsZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZG1heD0zMjc2OCxlLmhlYWQ9bnVsbCxlLmhvbGQ9MCxlLmJpdHM9MCxlLmxlbmNvZGU9ZS5sZW5keW49bmV3IF9fLkJ1ZjMyKDg1MiksZS5kaXN0Y29kZT1lLmRpc3RkeW49bmV3IF9fLkJ1ZjMyKDU5MiksZS5zYW5lPTEsZS5iYWNrPS0xLDApOnZffWZ1bmN0aW9uIHhfKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPygoZT10LnN0YXRlKS53c2l6ZT0wLGUud2hhdmU9MCxlLnduZXh0PTAsT18odCkpOnZffWZ1bmN0aW9uIEFfKHQsZSl7dmFyIG4scjtyZXR1cm4gdCYmdC5zdGF0ZT8ocj10LnN0YXRlLGU8MD8obj0wLGU9LWUpOihuPTErKGU+PjQpLGU8NDgmJihlJj0xNSkpLGUmJihlPDh8fGU+MTUpP3ZfOihudWxsIT09ci53aW5kb3cmJnIud2JpdHMhPT1lJiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz1lLHhfKHQpKSk6dl99ZnVuY3Rpb24gVF8odCxlKXt2YXIgbixyO3JldHVybiB0PyhyPW5ldyBTXyx0LnN0YXRlPXIsci53aW5kb3c9bnVsbCwwIT09KG49QV8odCxlKSkmJih0LnN0YXRlPW51bGwpLG4pOnZffXZhciBFXyxMXyx6Xz0hMDtmdW5jdGlvbiBCXyh0KXtpZih6Xyl7dmFyIGU7Zm9yKEVfPW5ldyBfXy5CdWYzMig1MTIpLExfPW5ldyBfXy5CdWYzMigzMiksZT0wO2U8MTQ0Oyl0LmxlbnNbZSsrXT04O2Zvcig7ZTwyNTY7KXQubGVuc1tlKytdPTk7Zm9yKDtlPDI4MDspdC5sZW5zW2UrK109Nztmb3IoO2U8Mjg4Oyl0LmxlbnNbZSsrXT04O2Zvcih5XygxLHQubGVucywwLDI4OCxFXywwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7eV8oMix0LmxlbnMsMCwzMixMXywwLHQud29yayx7Yml0czo1fSksel89ITF9dC5sZW5jb2RlPUVfLHQubGVuYml0cz05LHQuZGlzdGNvZGU9TF8sdC5kaXN0Yml0cz01fWZ1bmN0aW9uIElfKHQsZSxuLHIpe3ZhciBpLG89dC5zdGF0ZTtyZXR1cm4gbnVsbD09PW8ud2luZG93JiYoby53c2l6ZT0xPDxvLndiaXRzLG8ud25leHQ9MCxvLndoYXZlPTAsby53aW5kb3c9bmV3IF9fLkJ1Zjgoby53c2l6ZSkpLHI+PW8ud3NpemU/KF9fLmFycmF5U2V0KG8ud2luZG93LGUsbi1vLndzaXplLG8ud3NpemUsMCksby53bmV4dD0wLG8ud2hhdmU9by53c2l6ZSk6KChpPW8ud3NpemUtby53bmV4dCk+ciYmKGk9ciksX18uYXJyYXlTZXQoby53aW5kb3csZSxuLXIsaSxvLnduZXh0KSwoci09aSk/KF9fLmFycmF5U2V0KG8ud2luZG93LGUsbi1yLHIsMCksby53bmV4dD1yLG8ud2hhdmU9by53c2l6ZSk6KG8ud25leHQrPWksby53bmV4dD09PW8ud3NpemUmJihvLnduZXh0PTApLG8ud2hhdmU8by53c2l6ZSYmKG8ud2hhdmUrPWkpKSksMH1zXy5pbmZsYXRlUmVzZXQ9eF8sc18uaW5mbGF0ZVJlc2V0Mj1BXyxzXy5pbmZsYXRlUmVzZXRLZWVwPU9fLHNfLmluZmxhdGVJbml0PWZ1bmN0aW9uKHQpe3JldHVybiBUXyh0LDE1KX0sc18uaW5mbGF0ZUluaXQyPVRfLHNfLmluZmxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaCxmLGQsXyxwLGcsbSx5LHYsYix3LGssUyxPLHgsQT0wLFQ9bmV3IF9fLkJ1ZjgoNCksRT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXR8fCF0LnN0YXRlfHwhdC5vdXRwdXR8fCF0LmlucHV0JiYwIT09dC5hdmFpbF9pbilyZXR1cm4gdl87KG49dC5zdGF0ZSkubW9kZT09PWJfJiYobi5tb2RlPTEzKSxhPXQubmV4dF9vdXQsaT10Lm91dHB1dCxjPXQuYXZhaWxfb3V0LG89dC5uZXh0X2luLHI9dC5pbnB1dCxzPXQuYXZhaWxfaW4sbD1uLmhvbGQsdT1uLmJpdHMsaD1zLGY9YyxTPTA7dDpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSAxOmlmKDA9PT1uLndyYXApe24ubW9kZT0xMzticmVha31mb3IoO3U8MTY7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZigyJm4ud3JhcCYmMzU2MTU9PT1sKXtuLmNoZWNrPTAsVFswXT0yNTUmbCxUWzFdPWw+Pj44JjI1NSxuLmNoZWNrPWdfKG4uY2hlY2ssVCwyLDApLGw9MCx1PTAsbi5tb2RlPTI7YnJlYWt9aWYobi5mbGFncz0wLG4uaGVhZCYmKG4uaGVhZC5kb25lPSExKSwhKDEmbi53cmFwKXx8KCgoMjU1JmwpPDw4KSsobD4+OCkpJTMxKXt0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWlmKDghPSgxNSZsKSl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9d187YnJlYWt9aWYodS09NCxrPTgrKDE1JihsPj4+PTQpKSwwPT09bi53Yml0cyluLndiaXRzPWs7ZWxzZSBpZihrPm4ud2JpdHMpe3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9d187YnJlYWt9bi5kbWF4PTE8PGssdC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPTUxMiZsPzEwOmJfLGw9MCx1PTA7YnJlYWs7Y2FzZSAyOmZvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKG4uZmxhZ3M9bCw4IT0oMjU1JmFfKG4pKSl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9d187YnJlYWt9aWYoNTczNDQmYV8obikpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT13XzticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1sPj44JjEpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9MztjYXNlIDM6Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5oZWFkJiYobi5oZWFkLnRpbWU9bCksNTEyJmFfKG4pJiYoVFswXT0yNTUmbCxUWzFdPWw+Pj44JjI1NSxUWzJdPWw+Pj4xNiYyNTUsVFszXT1sPj4+MjQmMjU1LG4uY2hlY2s9Z18obi5jaGVjayxULDQsMCkpLGw9MCx1PTAsbi5tb2RlPTQ7Y2FzZSA0OmZvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fW4uaGVhZCYmKG4uaGVhZC54ZmxhZ3M9MjU1Jmwsbi5oZWFkLm9zPWw+PjgpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZhXyhuKSl7Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5ndGg9bCxuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPWwpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5leHRyYT1udWxsKTtuLm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZhXyhuKSYmKChkPW4ubGVuZ3RoKT5zJiYoZD1zKSxkJiYobi5oZWFkJiYoaz1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgQXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLF9fLmFycmF5U2V0KG4uaGVhZC5leHRyYSxyLG8sZCxrKSksNTEyJmFfKG4pJiYobi5jaGVjaz1nXyhuLmNoZWNrLHIsZCxvKSkscy09ZCxvKz1kLG4ubGVuZ3RoLT1kKSxuLmxlbmd0aCkpYnJlYWsgdDtuLmxlbmd0aD0wLG4ubW9kZT03O2Nhc2UgNzppZigyMDQ4JmFfKG4pKXtpZigwPT09cylicmVhayB0O2Q9MDtkb3trPXJbbytkKytdLG4uaGVhZCYmayYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSl9d2hpbGUoayYmZDxzKTtpZig1MTImYV8obikmJihuLmNoZWNrPWdfKG4uY2hlY2sscixkLG8pKSxzLT1kLG8rPWQsaylicmVhayB0fWVsc2Ugbi5oZWFkJiYobi5oZWFkLm5hbWU9bnVsbCk7bi5sZW5ndGg9MCxuLm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZhXyhuKSl7aWYoMD09PXMpYnJlYWsgdDtkPTA7ZG97az1yW28rZCsrXSxuLmhlYWQmJmsmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaykpfXdoaWxlKGsmJmQ8cyk7aWYoNTEyJmFfKG4pJiYobi5jaGVjaz1nXyhuLmNoZWNrLHIsZCxvKSkscy09ZCxvKz1kLGspYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT05O2Nhc2UgOTppZig1MTImYV8obikpe2Zvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKGwhPT0oNjU1MzUmbi5jaGVjaykpe3QubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixuLm1vZGU9d187YnJlYWt9bD0wLHU9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1hXyhuKT4+OSYxLG4uaGVhZC5kb25lPSEwKSx0LmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9Yl87YnJlYWs7Y2FzZSAxMDpmb3IoO3U8MzI7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH10LmFkbGVyPW4uY2hlY2s9a18obCksbD0wLHU9MCxuLm1vZGU9MTE7Y2FzZSAxMTppZigwPT09bi5oYXZlZGljdClyZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWMsdC5uZXh0X2luPW8sdC5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LDI7dC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPWJfO2Nhc2UgYl86aWYoNT09PWV8fDY9PT1lKWJyZWFrIHQ7Y2FzZSAxMzppZihuLmxhc3Qpe2w+Pj49NyZ1LHUtPTcmdSxuLm1vZGU9Mjc7YnJlYWt9Zm9yKDt1PDM7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1zd2l0Y2gobi5sYXN0PTEmbCx1LT0xLDMmKGw+Pj49MSkpe2Nhc2UgMDpuLm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKEJfKG4pLG4ubW9kZT0yMCw2PT09ZSl7bD4+Pj0yLHUtPTI7YnJlYWsgdH1icmVhaztjYXNlIDI6bi5tb2RlPTE3O2JyZWFrO2Nhc2UgMzp0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9d199bD4+Pj0yLHUtPTI7YnJlYWs7Y2FzZSAxNDpmb3IobD4+Pj03JnUsdS09NyZ1O3U8MzI7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZigoNjU1MzUmbCkhPShsPj4+MTZeNjU1MzUpKXt0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsbi5tb2RlPXdfO2JyZWFrfWlmKG4ubGVuZ3RoPTY1NTM1JmwsbD0wLHU9MCxuLm1vZGU9MTUsNj09PWUpYnJlYWsgdDtjYXNlIDE1Om4ubW9kZT0xNjtjYXNlIDE2OmlmKGQ9bi5sZW5ndGgpe2lmKGQ+cyYmKGQ9cyksZD5jJiYoZD1jKSwwPT09ZClicmVhayB0O19fLmFycmF5U2V0KGkscixvLGQsYSkscy09ZCxvKz1kLGMtPWQsYSs9ZCxuLmxlbmd0aC09ZDticmVha31uLm1vZGU9Yl87YnJlYWs7Y2FzZSAxNzpmb3IoO3U8MTQ7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZihuLm5sZW49MjU3KygzMSZsKSxsPj4+PTUsdS09NSxuLm5kaXN0PTErKDMxJmwpLGw+Pj49NSx1LT01LG4ubmNvZGU9NCsoMTUmbCksbD4+Pj00LHUtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9d187YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7dTwzOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5zW0Vbbi5oYXZlKytdXT03JmwsbD4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tFW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsTz17Yml0czpuLmxlbmJpdHN9LFM9eV8oMCxuLmxlbnMsMCwxOSxuLmxlbmNvZGUsMCxuLndvcmssTyksbi5sZW5iaXRzPU8uYml0cyxTKXt0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixuLm1vZGU9d187YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtuLmhhdmU8bi5ubGVuK24ubmRpc3Q7KXtmb3IoO209KEE9bi5sZW5jb2RlW2wmKDE8PG4ubGVuYml0cyktMV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKChnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYoeTwxNilsPj4+PWcsdS09ZyxuLmxlbnNbbi5oYXZlKytdPXk7ZWxzZXtpZigxNj09PXkpe2Zvcih4PWcrMjt1PHg7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZihsPj4+PWcsdS09ZywwPT09bi5oYXZlKXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPXdfO2JyZWFrfWs9bi5sZW5zW24uaGF2ZS0xXSxkPTMrKDMmbCksbD4+Pj0yLHUtPTJ9ZWxzZSBpZigxNz09PXkpe2Zvcih4PWcrMzt1PHg7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH11LT1nLGs9MCxkPTMrKDcmKGw+Pj49ZykpLGw+Pj49Myx1LT0zfWVsc2V7Zm9yKHg9Zys3O3U8eDspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fXUtPWcsaz0wLGQ9MTErKDEyNyYobD4+Pj1nKSksbD4+Pj03LHUtPTd9aWYobi5oYXZlK2Q+bi5ubGVuK24ubmRpc3Qpe3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9d187YnJlYWt9Zm9yKDtkLS07KW4ubGVuc1tuLmhhdmUrK109a319aWYobi5tb2RlPT09d18pYnJlYWs7aWYoMD09PW4ubGVuc1syNTZdKXt0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9d187YnJlYWt9aWYobi5sZW5iaXRzPTksTz17Yml0czpuLmxlbmJpdHN9LFM9eV8oMSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLE8pLG4ubGVuYml0cz1PLmJpdHMsUyl7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPXdfO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixPPXtiaXRzOm4uZGlzdGJpdHN9LFM9eV8oMixuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxPKSxuLmRpc3RiaXRzPU8uYml0cyxTKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9d187YnJlYWt9aWYobi5tb2RlPTIwLDY9PT1lKWJyZWFrIHQ7Y2FzZSAyMDpuLm1vZGU9MjE7Y2FzZSAyMTppZihzPj02JiZjPj0yNTgpe3QubmV4dF9vdXQ9YSx0LmF2YWlsX291dD1jLHQubmV4dF9pbj1vLHQuYXZhaWxfaW49cyxuLmhvbGQ9bCxuLmJpdHM9dSxtXyh0LGYpLGE9dC5uZXh0X291dCxpPXQub3V0cHV0LGM9dC5hdmFpbF9vdXQsbz10Lm5leHRfaW4scj10LmlucHV0LHM9dC5hdmFpbF9pbixsPW4uaG9sZCx1PW4uYml0cyxuLm1vZGU9PT1iXyYmKG4uYmFjaz0tMSk7YnJlYWt9Zm9yKG4uYmFjaz0wO209KEE9bi5sZW5jb2RlW2wmKDE8PG4ubGVuYml0cyktMV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKChnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYobSYmISgyNDAmbSkpe2Zvcih2PWcsYj1tLHc9eTttPShBPW4ubGVuY29kZVt3KygobCYoMTw8ditiKS0xKT4+dildKT4+PjE2JjI1NSx5PTY1NTM1JkEsISh2KyhnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bD4+Pj12LHUtPXYsbi5iYWNrKz12fWlmKGw+Pj49Zyx1LT1nLG4uYmFjays9ZyxuLmxlbmd0aD15LDA9PT1tKXtuLm1vZGU9MjY7YnJlYWt9aWYoMzImbSl7bi5iYWNrPS0xLG4ubW9kZT1iXzticmVha31pZig2NCZtKXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9d187YnJlYWt9bi5leHRyYT0xNSZtLG4ubW9kZT0yMjtjYXNlIDIyOmlmKG4uZXh0cmEpe2Zvcih4PW4uZXh0cmE7dTx4Oyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5ndGgrPWwmKDE8PG4uZXh0cmEpLTEsbD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT0yMztjYXNlIDIzOmZvcig7bT0oQT1uLmRpc3Rjb2RlW2wmKDE8PG4uZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx5PTY1NTM1JkEsISgoZz1BPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKCEoMjQwJm0pKXtmb3Iodj1nLGI9bSx3PXk7bT0oQT1uLmRpc3Rjb2RlW3crKChsJigxPDx2K2IpLTEpPj52KV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKHYrKGc9QT4+PjI0KTw9dSk7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1sPj4+PXYsdS09dixuLmJhY2srPXZ9aWYobD4+Pj1nLHUtPWcsbi5iYWNrKz1nLDY0Jm0pe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLG4ubW9kZT13XzticmVha31uLm9mZnNldD15LG4uZXh0cmE9MTUmbSxuLm1vZGU9MjQ7Y2FzZSAyNDppZihuLmV4dHJhKXtmb3IoeD1uLmV4dHJhO3U8eDspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fW4ub2Zmc2V0Kz1sJigxPDxuLmV4dHJhKS0xLGw+Pj49bi5leHRyYSx1LT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPXdfO2JyZWFrfW4ubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1jKWJyZWFrIHQ7aWYoZD1mLWMsbi5vZmZzZXQ+ZCl7aWYoKGQ9bi5vZmZzZXQtZCk+bi53aGF2ZSYmbi5zYW5lKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT13XzticmVha31kPm4ud25leHQ/KGQtPW4ud25leHQsXz1uLndzaXplLWQpOl89bi53bmV4dC1kLGQ+bi5sZW5ndGgmJihkPW4ubGVuZ3RoKSxwPW4ud2luZG93fWVsc2UgcD1pLF89YS1uLm9mZnNldCxkPW4ubGVuZ3RoO2Q+YyYmKGQ9YyksYy09ZCxuLmxlbmd0aC09ZDtkb3tpW2ErK109cFtfKytdfXdoaWxlKC0tZCk7MD09PW4ubGVuZ3RoJiYobi5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1jKWJyZWFrIHQ7aVthKytdPW4ubGVuZ3RoLGMtLSxuLm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihuLndyYXApe2Zvcig7dTwzMjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGx8PXJbbysrXTw8dSx1Kz04fWlmKGYtPWMsdC50b3RhbF9vdXQrPWYsbi50b3RhbCs9ZixmJiYodC5hZGxlcj1uLmNoZWNrPWFfKG4pP2dfKG4uY2hlY2ssaSxmLGEtZik6cF8obi5jaGVjayxpLGYsYS1mKSksZj1jLChhXyhuKT9sOmtfKGwpKSE9PW4uY2hlY2spe3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWw9MCx1PTB9bi5tb2RlPTI4O2Nhc2UgMjg6aWYobi53cmFwJiZhXyhuKSl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYobCE9PSg0Mjk0OTY3Mjk1Jm4udG90YWwpKXt0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWw9MCx1PTB9bi5tb2RlPTI5O2Nhc2UgMjk6Uz0xO2JyZWFrIHQ7Y2FzZSB3XzpTPS0zO2JyZWFrIHQ7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiB2X31yZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWMsdC5uZXh0X2luPW8sdC5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LChuLndzaXplfHxmIT09dC5hdmFpbF9vdXQmJm4ubW9kZTx3XyYmKG4ubW9kZTwyN3x8NCE9PWUpKSYmSV8odCx0Lm91dHB1dCx0Lm5leHRfb3V0LGYtdC5hdmFpbF9vdXQpLGgtPXQuYXZhaWxfaW4sZi09dC5hdmFpbF9vdXQsdC50b3RhbF9pbis9aCx0LnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLG4ud3JhcCYmZiYmKHQuYWRsZXI9bi5jaGVjaz1hXyhuKT9nXyhuLmNoZWNrLGksZix0Lm5leHRfb3V0LWYpOnBfKG4uY2hlY2ssaSxmLHQubmV4dF9vdXQtZikpLHQuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKyhuLm1vZGU9PT1iXz8xMjg6MCkrKDIwPT09bi5tb2RlfHwxNT09PW4ubW9kZT8yNTY6MCksKDA9PT1oJiYwPT09Znx8ND09PWUpJiYwPT09UyYmKFM9LTUpLFN9LHNfLmluZmxhdGVFbmQ9ZnVuY3Rpb24odCl7aWYoIXR8fCF0LnN0YXRlKXJldHVybiB2Xzt2YXIgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCwwfSxzXy5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQmJnQuc3RhdGUmJjImKG49dC5zdGF0ZSkud3JhcD8obi5oZWFkPWUsZS5kb25lPSExLDApOnZffSxzXy5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5sZW5ndGg7cmV0dXJuIHQmJnQuc3RhdGU/MCE9PShuPXQuc3RhdGUpLndyYXAmJjExIT09bi5tb2RlP3ZfOjExPT09bi5tb2RlJiZwXygxLGUsciwwKSE9PW4uY2hlY2s/LTM6SV8odCxlLHIscik/KG4ubW9kZT0zMSwtNCk6KG4uaGF2ZWRpY3Q9MSwwKTp2X30sc18uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBDXz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fTt2YXIgTl89c18sUl89d2Ysal89RmQsRF89Q18sUF89ZmQsVV89R2QsRl89ZnVuY3Rpb24oKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX0sTV89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBaXyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBaXykpcmV0dXJuIG5ldyBaXyh0KTt0aGlzLm9wdGlvbnM9Ul8uYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLDA9PT1lLndpbmRvd0JpdHMmJihlLndpbmRvd0JpdHM9LTE1KSksIShlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNil8fHQmJnQud2luZG93Qml0c3x8KGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYoMTUmZS53aW5kb3dCaXRzfHwoZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFVfLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1OXy5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYobiE9PURfLlpfT0spdGhyb3cgbmV3IEVycm9yKFBfW25dKTtpZih0aGlzLmhlYWRlcj1uZXcgRl8sTl8uaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLGUuZGljdGlvbmFyeSYmKCJzdHJpbmciPT10eXBlb2YgZS5kaWN0aW9uYXJ5P2UuZGljdGlvbmFyeT1qXy5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PU1fLmNhbGwoZS5kaWN0aW9uYXJ5KSYmKGUuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpKSxlLnJhdyYmKG49Tl8uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGUuZGljdGlvbmFyeSkpIT09RF8uWl9PSykpdGhyb3cgbmV3IEVycm9yKFBfW25dKX1mdW5jdGlvbiBKXyh0LGUpe3ZhciBuPW5ldyBaXyhlKTtpZihuLnB1c2godCwhMCksbi5lcnIpdGhyb3cgbi5tc2d8fFBfW24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9Wl8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHM9dGhpcy5zdHJtLGM9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxsPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LHU9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtyPWU9PT1+fmU/ZTohMD09PWU/RF8uWl9GSU5JU0g6RF8uWl9OT19GTFVTSCwic3RyaW5nIj09dHlwZW9mIHQ/cy5pbnB1dD1qXy5iaW5zdHJpbmcyYnVmKHQpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1NXy5jYWxsKHQpP3MuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkodCk6cy5pbnB1dD10LHMubmV4dF9pbj0wLHMuYXZhaWxfaW49cy5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXMuYXZhaWxfb3V0JiYocy5vdXRwdXQ9bmV3IFJfLkJ1ZjgoYykscy5uZXh0X291dD0wLHMuYXZhaWxfb3V0PWMpLChuPU5fLmluZmxhdGUocyxEXy5aX05PX0ZMVVNIKSk9PT1EXy5aX05FRURfRElDVCYmbCYmKG49Tl8uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGwpKSxuPT09RF8uWl9CVUZfRVJST1ImJiEwPT09dSYmKG49RF8uWl9PSyx1PSExKSxuIT09RF8uWl9TVFJFQU1fRU5EJiZuIT09RF8uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChuKSx0aGlzLmVuZGVkPSEwLCExO3MubmV4dF9vdXQmJigwIT09cy5hdmFpbF9vdXQmJm4hPT1EXy5aX1NUUkVBTV9FTkQmJigwIT09cy5hdmFpbF9pbnx8ciE9PURfLlpfRklOSVNIJiZyIT09RF8uWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhpPWpfLnV0Zjhib3JkZXIocy5vdXRwdXQscy5uZXh0X291dCksbz1zLm5leHRfb3V0LWksYT1qXy5idWYyc3RyaW5nKHMub3V0cHV0LGkpLHMubmV4dF9vdXQ9byxzLmF2YWlsX291dD1jLW8sbyYmUl8uYXJyYXlTZXQocy5vdXRwdXQscy5vdXRwdXQsaSxvLDApLHRoaXMub25EYXRhKGEpKTp0aGlzLm9uRGF0YShSXy5zaHJpbmtCdWYocy5vdXRwdXQscy5uZXh0X291dCkpKSksMD09PXMuYXZhaWxfaW4mJjA9PT1zLmF2YWlsX291dCYmKHU9ITApfXdoaWxlKChzLmF2YWlsX2luPjB8fDA9PT1zLmF2YWlsX291dCkmJm4hPT1EXy5aX1NUUkVBTV9FTkQpO3JldHVybiBuPT09RF8uWl9TVFJFQU1fRU5EJiYocj1EXy5aX0ZJTklTSCkscj09PURfLlpfRklOSVNIPyhuPU5fLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsbj09PURfLlpfT0spOnIhPT1EXy5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKERfLlpfT0spLHMuYXZhaWxfb3V0PTAsITApfSxaXy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuY2h1bmtzLnB1c2godCl9LFpfLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09RF8uWl9PSyYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVJfLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LG5fLkluZmxhdGU9Wl8sbl8uaW5mbGF0ZT1KXyxuXy5pbmZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLnJhdz0hMCxKXyh0LGUpfSxuXy51bmd6aXA9Sl87dmFyIEhfPXt9OygwLHdmLmFzc2lnbikoSF8sa2Ysbl8sQ18pO3ZhciBXXz1uKEhfKTtsZXQgS189MTtjb25zdCBHXz0iX19ydGNfdW1kX25hbWVfXyIsVl89KCk9PndpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQjtjbGFzcyBZX3tjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJzdG9yZU5hbWUiLHZvaWQgMCksdXUodGhpcywicGVuZGluZ0xpc3QiLFtdKSx0aGlzLnN0b3JlTmFtZT10LCFGdSgpJiZWXygpJiZ0aGlzLl9jaGVja0FuZENyZWF0ZVN0b3JlKHQpfWFzeW5jIF9jaGVja0FuZENyZWF0ZVN0b3JlKHQsZSl7Y29uc3Qgbj1hd2FpdCBZXy5fcHJvbWlzZUxvY2subG9jaygpO2lmKFZfKCkuZGF0YWJhc2VzKXtsZXQgdDthd2FpdCBuZXcgUHJvbWlzZSgoZT0+e2NvbnN0IG49KCk9PlZfKCkuZGF0YWJhc2VzKCkuZmluYWxseShlKTt0PXNldEludGVydmFsKG4sMTAwKSxuKCl9KSkuZmluYWxseSgoKCk9PmNsZWFySW50ZXJ2YWwodCkpKX1yZXR1cm4gbmV3IFByb21pc2UoKHI9PntZXy5kYiYmKFlfLmRiLmNsb3NlKCksZGVsZXRlIFlfLmRiKTtjb25zdCBpPWU/Vl8oKS5vcGVuKEdfLGUpOlZfKCkub3BlbihHXyk7aS5vbnVwZ3JhZGVuZWVkZWQ9KCk9PntpLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSh0KX0saS5vbmVycm9yPSgpPT57Y29uc29sZS5lcnJvcigiSW5kZXhlZERCSW50ZXJmYWNlIGVycm9yIixpLmVycm9yKX0saS5vbnN1Y2Nlc3M9KCk9Pntjb25zdCBlPWkucmVzdWx0O1lfLmRiPWU7dHJ5e1lfLmRiLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lLCJyZWFkb25seSIpLHRoaXMucGVuZGluZ0xpc3QuZm9yRWFjaCgoYXN5bmMgdD0+e2xldHt0eE1vZGU6ZSxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn09dDt0cnl7bihhd2FpdCB0aGlzLl9nZXRTdG9yZShlKSl9Y2F0Y2goaSl7cigpfX0pKSxyKCl9Y2F0Y2gobyl7cih0aGlzLl9jaGVja0FuZENyZWF0ZVN0b3JlKHQsZS52ZXJzaW9uKzEpKX1maW5hbGx5e24oKX19fSkpfWFzeW5jIF9nZXRTdG9yZSh0KXtjb25zdCBlPWF3YWl0IFlfLl9wcm9taXNlTG9jay5sb2NrKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgobixyKT0+e2lmKCFZXy5kYilyZXR1cm4gdGhpcy5wZW5kaW5nTGlzdC5wdXNoKHt0eE1vZGU6dCxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn0pLHZvaWQgZSgpO3RyeXtuKFlfLmRiLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lLHQpLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKSl9Y2F0Y2goaSl7cmV0dXJuIHZvaWQgdGhpcy5wZW5kaW5nTGlzdC5wdXNoKHt0eE1vZGU6dCxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn0pfWZpbmFsbHl7ZSgpfX0pKX1hc3luYyBwdXQyU3RyaW5nKHQsZSl7bGV0IG47dHJ5e249SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gocil7bj10fXJldHVybiBhd2FpdCB0aGlzLnB1dChuLGUpfWFzeW5jIGdldDRTdHJpbmcodCl7Y29uc3QgZT1hd2FpdCB0aGlzLmdldCh0KTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKGUpfWNhdGNoKHIpe249ZX1yZXR1cm4gbn1hc3luYyBwdXQodCxlKXtjb25zdCBuPWF3YWl0IHRoaXMuX2dldFN0b3JlKCJyZWFkd3JpdGUiKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57Y29uc3Qgbz1uLnB1dCh0LGUpO28ub25zdWNjZXNzPSgpPT57cigpfSxvLm9uZXJyb3I9dD0+e2kodCl9fSkpfWFzeW5jIGdldCh0KXtjb25zdCBlPWF3YWl0IHRoaXMuX2dldFN0b3JlKCJyZWFkb25seSIpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pntjb25zdCBpPWUuZ2V0KHQpO2kub25zdWNjZXNzPSgpPT57bihpLnJlc3VsdCl9LGkub25lcnJvcj10PT57cih0KX19KSl9YXN5bmMgZGVsKHQpe2NvbnN0IGU9YXdhaXQgdGhpcy5fZ2V0U3RvcmUoInJlYWR3cml0ZSIpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pntjb25zdCBpPWUuZGVsZXRlKHQpO2kub25zdWNjZXNzPSgpPT57bigpfSxpLm9uZXJyb3I9dD0+e3IodCl9fSkpfX11dShZXywiZGIiLHZvaWQgMCksdXUoWV8sInN0YXRlIiwiaW5pdCIpLHV1KFlfLCJfcHJvbWlzZUxvY2siLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJsb2NraW5nUHJvbWlzZSIsUHJvbWlzZS5yZXNvbHZlKCkpLHV1KHRoaXMsImxvY2tzIiwwKSx1dSh0aGlzLCJuYW1lIiwiIiksdXUodGhpcywibG9ja0lkIix2b2lkIDApLHRoaXMubG9ja0lkPUtfKyssdCYmKHRoaXMubmFtZT10KX1nZXQgaXNMb2NrZWQoKXtyZXR1cm4gdGhpcy5sb2Nrcz4wfWxvY2soKXtsZXQgdDt0aGlzLmxvY2tzKz0xO2NvbnN0IGU9bmV3IFByb21pc2UoKGU9Pnt0PSgpPT57dGhpcy5sb2Nrcy09MSxlKCl9fSkpLG49dGhpcy5sb2NraW5nUHJvbWlzZS50aGVuKCgoKT0+dCkpO3JldHVybiB0aGlzLmxvY2tpbmdQcm9taXNlPXRoaXMubG9ja2luZ1Byb21pc2UudGhlbigoKCk9PmUpKSxufX0oImlEQiIpKTt2YXIgWF89YWkuaW5jbHVkZXM7TG4oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDphKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIFhfKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHFfPUl1KCJBcnJheSIsImluY2x1ZGVzIiksJF89ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHd1KHQpJiYodm9pZCAwIT09KGU9dFtTdV0pPyEhZToiUmVnRXhwIj09PWt1KHQpKX0sUV89VHlwZUVycm9yLHRwPWZlKCJtYXRjaCIpLGVwPUxuLG5wPWZ1bmN0aW9uKHQpe2lmKCRfKHQpKXRocm93IG5ldyBRXygiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9LHJwPUcsaXA9cXIsb3A9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXsiLy4vIlt0XShlKX1jYXRjaChuKXt0cnl7cmV0dXJuIGVbdHBdPSExLCIvLi8iW3RdKGUpfWNhdGNoKHIpe319cmV0dXJuITF9LGFwPW0oIiIuaW5kZXhPZik7ZXAoe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW9wKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+YXAoaXAocnAodGhpcykpLGlwKG5wKHQpKSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHNwPUl1KCJTdHJpbmciLCJpbmNsdWRlcyIpLGNwPW90LGxwPXFfLHVwPXNwLGhwPUFycmF5LnByb3RvdHlwZSxmcD1TdHJpbmcucHJvdG90eXBlLGRwPW4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5jbHVkZXM7cmV0dXJuIHQ9PT1ocHx8Y3AoaHAsdCkmJmU9PT1ocC5pbmNsdWRlcz9scDoic3RyaW5nIj09dHlwZW9mIHR8fHQ9PT1mcHx8Y3AoZnAsdCkmJmU9PT1mcC5pbmNsdWRlcz91cDplfSkpO2Z1bmN0aW9uIF9wKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgbixyLGk9ZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybnt9O3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KWlmKHt9Lmhhc093blByb3BlcnR5LmNhbGwodCxyKSl7aWYoZHAoZSkuY2FsbChlLHIpKWNvbnRpbnVlO25bcl09dFtyXX1yZXR1cm4gbn0odCxlKTtpZihRdSl7dmFyIG89UXUodCk7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyluPW9bcl0sZHAoZSkuY2FsbChlLG4pfHx7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQsbikmJihpW25dPXRbbl0pfXJldHVybiBpfWNvbnN0IHBwPVsibWVzc2FnZSJdO3ZhciBncCxtcCx5cD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt1dSh0aGlzLCJuYW1lIiwiTG9uZ1N0cmluZ1JlcG9ydG9yIiksdXUodGhpcywiaW5CdWZmZXIiLFtdKSx1dSh0aGlzLCJvdXRCdWZmZXIiLFtdKX1wdXNoKHQpe3QubWVzc2FnZSYmdGhpcy5pbkJ1ZmZlci5wdXNoKG9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOntpZDpVdSgpLnNsaWNlKDAsMyksaW5kZXg6MCxlbmQ6ITAsbXNnOnQubWVzc2FnZX19KSl9c3BsaWNlKHQpe2NvbnN0IGU9W107bGV0IG49MDtmb3IoO3RoaXMub3V0QnVmZmVyLmxlbmd0aDspe2NvbnN0IHI9SlNPTi5zdHJpbmdpZnkodGhpcy5vdXRCdWZmZXJbMF0pLmxlbmd0aDtpZighKHI8dCkpYnJlYWs7dC09cixuKz1yLGUucHVzaCh0aGlzLm91dEJ1ZmZlci5zaGlmdCgpKX1mb3IoO3RoaXMuaW5CdWZmZXJbMF0mJnQ+MDspe2NvbnN0IHI9dGhpcy5pbkJ1ZmZlclswXSx7bWVzc2FnZTppfT1yLG89b2Yob2Yoe30sX3AocixwcCkpLHt9LHttZXNzYWdlOm9mKG9mKHt9LGkpLHt9LHttc2c6IiJ9KX0pLGE9SlNPTi5zdHJpbmdpZnkobykubGVuZ3RoLHM9dC1hLGM9b2Yoe30sbyk7aWYocz5pLm1zZy5sZW5ndGgpYy5tZXNzYWdlLm1zZz1pLm1zZyx0aGlzLmluQnVmZmVyLnNoaWZ0KCk7ZWxzZXtpZighKHM+PTEwKSlicmVhazt7Y29uc3QgdD1pLm1zZy5zbGljZSgwLHMpO2MubWVzc2FnZS5tc2c9dCxjLm1lc3NhZ2UuZW5kPSExLHRoaXMuaW5CdWZmZXJbMF0ubWVzc2FnZS5tc2c9aS5tc2cuc2xpY2UocyksdGhpcy5pbkJ1ZmZlclswXS5tZXNzYWdlLmluZGV4Kyt9fWNvbnN0IGw9SlNPTi5zdHJpbmdpZnkoYy5tZXNzYWdlKSx1PWwubGVuZ3RoO3QtPXUrYSxuKz11K2EsZS5wdXNoKG9mKG9mKHt9LGMpLHt9LHttZXNzYWdlOmx9KSl9cmV0dXJue3BheWxvYWQ6ZSxwYXlsb2FkU2l6ZTpufX11bnNoaWZ0KHQpe3RoaXMub3V0QnVmZmVyPXQuY29uY2F0KHRoaXMub3V0QnVmZmVyKX1nZXQoKXtyZXR1cm5bLi4udGhpcy5vdXRCdWZmZXIsLi4udGhpcy5pbkJ1ZmZlci5tYXAoKHQ9Pm9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOkpTT04uc3RyaW5naWZ5KHQubWVzc2FnZSl9KSkpXX1zZXQodCl7dC5mb3JFYWNoKCh0PT57IWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnJlcG9ydF9pZH0odCk/KHQubWVzc2FnZXx8KHQubWVzc2FnZT0iIiksdGhpcy5pbkJ1ZmZlci5wdXNoKG9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOkpTT04ucGFyc2UodC5tZXNzYWdlKX0pKSk6dGhpcy5vdXRCdWZmZXIucHVzaCh0KX0pKSx0aGlzLm91dEJ1ZmZlcj1bXS5jb25jYXQodGhpcy5vdXRCdWZmZXIpLHRoaXMuaW5CdWZmZXI9W10uY29uY2F0KHRoaXMuaW5CdWZmZXIpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuaW5CdWZmZXIubGVuZ3RoJiYwPT09dGhpcy5vdXRCdWZmZXIubGVuZ3RofX07Y29uc3QgdnA9NWU1LGJwPXtwcm9kdWN0X2xpbmU6InJ0YyIscmVwb3J0X3ZlcnNpb246IjUiLG9zOiJ3ZWIiLHVzZXJfYWdlbnQ6RnUoKT8iIjpudWxsPT09KGdwPW5hdmlnYXRvcil8fHZvaWQgMD09PWdwP3ZvaWQgMDpncC51c2VyQWdlbnQscGxhdGZvcm06IndlYiIscHJvZHVjdDoid2VicnRjIixhcHBfc3RhdGU6ImFjdGl2ZSJ9LHdwPSJMb2dSZXBvcnRvciIsa3A9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cubG9jYXRpb24uc2VhcmNoLmluY2x1ZGVzKCJfcnRjX2RlYnVnXyIpfHwobnVsbD09PShtcD13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09bXA/dm9pZCAwOm1wLmdldEl0ZW0oIl9ydGNfZGVidWdfIikpKTtjbGFzcyBTcHtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfYnVmZmVyIix2b2lkIDApLHRoaXMuX2J1ZmZlcj1uZXcgWV8odCl9YXN5bmMgc2V0KHQsZSl7YXdhaXQgdGhpcy5fYnVmZmVyLnB1dDJTdHJpbmcodCxlKX1hc3luYyBnZXQodCl7dmFyIGU7bGV0IG49W107dHJ5e249YXdhaXQgdGhpcy5fYnVmZmVyLmdldDRTdHJpbmcodCl9Y2F0Y2gocil7fXJldHVybiBudWxsIT09KGU9bikmJnZvaWQgMCE9PWU/ZTpbXX19dmFyIE9wPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3V1KHRoaXMsInJlcG9ydENvbW1vbiIsYnApLHV1KHRoaXMsInJlcG9ydElkcyIsbmV3IE1hcCksdXUodGhpcywiZGF0YUJ1ZmZlciIsW10pLHV1KHRoaXMsInJlcG9ydG9yTGlzdCIsW10pLHV1KHRoaXMsImRiQnVmZmVyIix2b2lkIDApLHV1KHRoaXMsInBvc3RpbmciLCExKSx1dSh0aGlzLCJzdWNTZW5kVGltZXIiLHZvaWQgMCksdXUodGhpcywicHJlU3VjVGltZSIsMCksdXUodGhpcywiZXJyU2VuZFRpbWVyIix2b2lkIDApLHV1KHRoaXMsImVyclNlbmREZWxheSIsMTAwKSx1dSh0aGlzLCJfbG9nU2VydmVyVXJsIix2b2lkIDApLHV1KHRoaXMsIl9yZXRyeUNvdW50IiwwKSx1dSh0aGlzLCJfcmVwb3J0TGltaXQiLHZwKSx1dSh0aGlzLCJfZGlzYWJsZVRpbWVvdXQiLCExKSxGdSgpfHwod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsKCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuZXJyU2VuZFRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5zdWNTZW5kVGltZXIpLHRoaXMuc2VuZCh2b2lkIDAsITApfSkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLCgoKT0+eyJ2aXNpYmxlIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLnNldENvbW1vblN0YXRzKHthcHBfc3RhdGU6ImFjdGl2ZSJ9KToiaGlkZGVuIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmdGhpcy5zZXRDb21tb25TdGF0cyh7YXBwX3N0YXRlOiJiYWNrZ3JvdW5kIn0pfSkpLGtwJiYod2luZG93Ll9fcnRjX2RlYnVnX3JlcG9ydG9yX189dGhpcykpLFl1Lm9uKCJVUExPQURfUkVQT1JUX0xJTUlUIiwodD0+e3RoaXMuc2V0UmVwb3J0TGltaXQodCl9KSksWXUub24oIkVOQUJMRV9SRVBPUlRfSURCX0JVRkZFUiIsKHQ9Pnt0JiZ0aGlzLmVuYWJsZUluZGV4ZWREQkJ1ZmZlcigpfSkpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5yZXBvcnRvckxpc3QucHVzaChDcCksdGhpcy5yZXBvcnRvckxpc3QucHVzaCh5cCl9KSl9c2V0VXJsKHQpe3RoaXMuX2xvZ1NlcnZlclVybD10fXNldENvbW1vblN0YXRzKHQpe3RoaXMucmVwb3J0Q29tbW9uPU9iamVjdC5hc3NpZ24odGhpcy5yZXBvcnRDb21tb24sdCl9Z2V0Q29tbW9uU3RhdHMoKXtyZXR1cm4gdGhpcy5yZXBvcnRDb21tb259c2V0UmVwb3J0TGltaXQodCl7dGhpcy5fcmVwb3J0TGltaXQ9TWF0aC5tYXgodCw1ZTQpLHRoaXMuX3JlcG9ydExpbWl0PU1hdGgubWluKHQsNWU1KX1nZXRSZXBvcnRJZCh0KXt2YXIgZTt0PW51bGwhPT0oZT10KSYmdm9pZCAwIT09ZT9lOiJfX2dsb2JhbF9fIix0aGlzLnJlcG9ydElkcy5oYXModCl8fHRoaXMucmVwb3J0SWRzLnNldCh0LDApO2xldCBuPXRoaXMucmVwb3J0SWRzLmdldCh0KTtyZXR1cm4gdm9pZCAwPT09biYmKFRwKCJubyByZXBvcnRJZCBpbiByZXBvcnRJZCBtYXAgd2l0aCBlbmdpbmUtc2Vzc2lvbi1pZCAiLmNvbmNhdCh0KSwwLHt9KSxuPTApLHRoaXMucmVwb3J0SWRzLnNldCh0LG4rMSksbn1wdXNoKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pdGhpcy5zZW5kKHQpO2Vsc2V7dmFyIGU7Y29uc3Qgbj1udWxsIT09KGU9dC5lbmdpbmVfc2Vzc2lvbl9pZCkmJnZvaWQgMCE9PWU/ZToiX19nbG9iYWxfXyI7dGhpcy5yZXBvcnRJZHMuaGFzKG4pfHx0aGlzLnJlcG9ydElkcy5zZXQobiwwKSx0aGlzLmRhdGFCdWZmZXIucHVzaCh0KSwhdGhpcy5wb3N0aW5nJiYhdGhpcy5lcnJTZW5kVGltZXImJkRhdGUubm93KCktdGhpcy5wcmVTdWNUaW1lPjJlMyYmKGNsZWFyVGltZW91dCh0aGlzLnN1Y1NlbmRUaW1lciksdGhpcy5zZW5kKCkpfX1lbmFibGVJbmRleGVkREJCdWZmZXIoKXt0aGlzLmRiQnVmZmVyfHwodGhpcy5kYkJ1ZmZlcj1uZXcgU3AoIlJlcG9ydG9yREJCdWZmZXIiKSx0aGlzLmRiQnVmZmVyLmdldCh3cCkudGhlbigodD0+e3QuZm9yRWFjaCgodD0+e3RoaXMucHVzaCh0KX0pKX0pKSx0aGlzLnJlcG9ydG9yTGlzdC5mb3JFYWNoKCh0PT57dmFyIGU7bnVsbD09PShlPXRoaXMuZGJCdWZmZXIpfHx2b2lkIDA9PT1lfHxlLmdldCh0Lm5hbWUpLnRoZW4oKGU9Pnt0LnNldChlKX0pKX0pKSl9YmFja3VwKCl7dHJ5e3ZhciB0O251bGw9PT0odD10aGlzLmRiQnVmZmVyKXx8dm9pZCAwPT09dHx8dC5zZXQoWy4uLnRoaXMuZGF0YUJ1ZmZlcl0sd3ApLHRoaXMucmVwb3J0b3JMaXN0LmZvckVhY2goKHQ9Pnt2YXIgZTtudWxsPT09KGU9dGhpcy5kYkJ1ZmZlcil8fHZvaWQgMD09PWV8fGUuc2V0KFsuLi50LmdldCgpXSx0Lm5hbWUpfSkpfWNhdGNoKGUpe1RwKCJFcnJvciB3aGVuIHNhdmUgbG9nIGludG8gSURCIiwtMSxlKX19dW5zaGlmdCh0KXt0aGlzLmRhdGFCdWZmZXI9dFswXS5jb25jYXQodGhpcy5kYXRhQnVmZmVyKSx0aGlzLnJlcG9ydG9yTGlzdC5mb3JFYWNoKCgoZSxuKT0+e3ZhciByO2UudW5zaGlmdChudWxsIT09KHI9dFtuKzFdKSYmdm9pZCAwIT09cj9yOltdKX0pKX1fc3BsaWNlKCl7bGV0IHQ9ZnVuY3Rpb24odCxlKXtsZXQgbj0wO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKG4rPUpTT04uc3RyaW5naWZ5KHRbcl0pLmxlbmd0aCxuPmUpcmV0dXJuIHI7cmV0dXJuIHQubGVuZ3RofSh0aGlzLmRhdGFCdWZmZXIsdGhpcy5fcmVwb3J0TGltaXQpOzA9PT10JiZ0aGlzLmRhdGFCdWZmZXIubGVuZ3RoPjAmJih0aGlzLl9yZXBvcnRMaW1pdD1KU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFCdWZmZXJbMF0pLmxlbmd0aCsxMCx0PTEsVHAoInVwZGF0ZSByZXBvcnQgbGltaXQgdG8gIi5jb25jYXQodGhpcy5fcmVwb3J0TGltaXQpLDAsbnVsbCkpO2NvbnN0IGU9dGhpcy5kYXRhQnVmZmVyLnNwbGljZSgwLHQpLG49SlNPTi5zdHJpbmdpZnkoZSkubGVuZ3RoLHI9W2VdO2xldCBpPXRoaXMuX3JlcG9ydExpbWl0LW47cmV0dXJuIHRoaXMucmVwb3J0b3JMaXN0LmZvckVhY2goKHQ9Pntjb25zdHtwYXlsb2FkOmUscGF5bG9hZFNpemU6bn09dC5zcGxpY2UoaSk7ZS5mb3JFYWNoKCh0PT57dmFyIGUsbixyO3ZvaWQgMD09PXQucmVwb3J0X2lkJiYodC5yZXBvcnRfaWQ9dGhpcy5nZXRSZXBvcnRJZCh0LmVuZ2luZV9zZXNzaW9uX2lkKSwhRnUoKSYmd2luZG93Ll9fb25SVENSZXBvcnQmJihudWxsPT09KGU9KG49d2luZG93KS5fX29uUlRDUmVwb3J0KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKG4sbnVsbCE9PShyPXQuZW5naW5lX3Nlc3Npb25faWQpJiZ2b2lkIDAhPT1yP3I6Imdsb2JhbCIsdCx0aGlzLmdldENvbW1vblN0YXRzKCkpKSl9KSksci5wdXNoKGUpLGktPW59KSkscn1hc3luYyBzZW5kKHQsZSl7dGhpcy5iYWNrdXAoKTtjb25zdCBuPXRoaXMucmVwb3J0b3JMaXN0LnJlZHVjZSgoKHQsZSk9PnQmJmUuaXNFbXB0eSgpKSwhMCk7aWYoIXQmJiF0aGlzLmRhdGFCdWZmZXIubGVuZ3RoJiZufHwhdGhpcy5fbG9nU2VydmVyVXJsKXJldHVybjt0fHwodGhpcy5wb3N0aW5nPSEwKTtsZXQgcj1bXTt0fHwocj10aGlzLl9zcGxpY2UoKSk7Y29uc3QgaT1rcCxvPXtkYXRhOnR8fGJmKHIpLmNhbGwociksaGVhZGVyOm9mKG9mKHt9LHRoaXMucmVwb3J0Q29tbW9uKSx7fSx7aHR0cF9yZXRyeV9jb3VudDp0aGlzLl9yZXRyeUNvdW50fSksZnJvbToid2ViIixvczoid2ViIix2ZXJzaW9uOiIxIn0sYT17bWV0aG9kOiJQT1NUIixib2R5Omk/SlNPTi5zdHJpbmdpZnkobyk6V18uZ3ppcChKU09OLnN0cmluZ2lmeShvKSl9O2lmKCF0aGlzLl9kaXNhYmxlVGltZW91dCl0cnl7Y29uc3QgdD1uZXcgQWJvcnRDb250cm9sbGVyO2Euc2lnbmFsPXQuc2lnbmFsLHNldFRpbWVvdXQoKCgpPT57dC5hYm9ydCgpfSksMWU0KX1jYXRjaCh1KXtjb25zb2xlLndhcm4oIkFib3J0Q29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIiksdGhpcy5fZGlzYWJsZVRpbWVvdXQ9ITB9aXx8KGEuaGVhZGVycz17IkNvbnRlbnQtRW5jb2RpbmciOiJnemlwIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04In0pO2xldCBzLGMsbD1udWxsO3RyeXtzPWF3YWl0IGZldGNoKHRoaXMuX2xvZ1NlcnZlclVybCxhKSwyMDAhPT1zLnN0YXR1cyYmMzA0IT09cy5zdGF0dXN8fChsPUpTT04ucGFyc2UoYXdhaXQgcy50ZXh0KCkpKX1jYXRjaChoKXtjPWh9dHx8KHRoaXMucG9zdGluZz0hMSksbCYmMD09PWwuU3RhdHVzQ29kZT90fHxlfHx0aGlzLnN1Y1NlbmQoKTooc2V0VGltZW91dCgoKCk9Pnt2YXIgdCxlLG47VHAoInJlcG9ydG9yIHBvc3QgZXJyb3IsIHJlc0pTT046Ii5jb25jYXQobnVsbD09PSh0PWwpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnRvU3RyaW5nKCksIiBlcnI6IikuY29uY2F0KGMpLG51bGwhPT0oZT1udWxsPT09KG49cyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc3RhdHVzKSYmdm9pZCAwIT09ZT9lOi0xLGMpfSksMCksdD90aGlzLnNlbmQodCk6KHRoaXMudW5zaGlmdChyKSxlP3RoaXMuc2VuZCgpOnRoaXMuZXJyU2VuZCgpKSl9X2dldERhdGFCdWZmZXJUb3RhbFNpemUoKXtyZXR1cm4gdGhpcy5kYXRhQnVmZmVyLnJlZHVjZSgoKHQsZSk9PnQrSlNPTi5zdHJpbmdpZnkoZSkubGVuZ3RoKSwwKX1zdWNTZW5kKCl7dGhpcy5lcnJTZW5kRGVsYXk9MTAwLHRoaXMuX3JldHJ5Q291bnQ9MCx0aGlzLnByZVN1Y1RpbWU9RGF0ZS5ub3coKTtjb25zdCB0PXRoaXMuX2dldERhdGFCdWZmZXJUb3RhbFNpemUoKT4xZTY/MWUzOjJlMzt0aGlzLnN1Y1NlbmRUaW1lcj1zZXRUaW1lb3V0KCgoKT0+dGhpcy5zZW5kKCkpLHQpfWVyclNlbmQoKXt0aGlzLmVyclNlbmRUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VuZCgpLGRlbGV0ZSB0aGlzLmVyclNlbmRUaW1lcn0pLHRoaXMuZXJyU2VuZERlbGF5KSx0aGlzLmVyclNlbmREZWxheSo9Mix0aGlzLl9yZXRyeUNvdW50Kyt9fTtjbGFzcyB4cHtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfcHJlVGltZSIsRGF0ZS5ub3coKSksdXUodGhpcywiX29uZTJvbmVOdW0iLDApLHV1KHRoaXMsIl9vbmUybWFueU51bSIsMCksdXUodGhpcywiX29uZTJvbmVNc2dDYWNoZSIsbmV3IE1hcCksdXUodGhpcywiX29uZTJtYW55TXNnQ2FjaGUiLG5ldyBNYXApLHV1KHRoaXMsInJvb21JZCIsIiIpLHV1KHRoaXMsInVzZXJJZCIsIiIpLHV1KHRoaXMsInJ0c1Nlc3Npb25JZCIsIiIpLHV1KHRoaXMsImxvZ2dlciIsdm9pZCAwKSx1dSh0aGlzLCJzZXJ2ZXJVcmwiLCJzZXJ2ZXIiKSx0aGlzLmlkPXQsdGhpcy5sb2dnZXI9bmV3IEhwKCJNZXNzYWdlUmVwb3J0b3IiLDEpfW5lZWRSZXBvcnQodCl7cmV0dXJuISF4cC5jb25maWcmJihEYXRlLm5vdygpLXRoaXMuX3ByZVRpbWU+PTM2ZTUmJih0aGlzLl9wcmVUaW1lPURhdGUubm93KCksdGhpcy5fb25lMm9uZU51bT0wLHRoaXMuX29uZTJtYW55TnVtPTApLCJvbmUyb25lIj09PXQmJnRoaXMuX29uZTJvbmVOdW08eHAuY29uZmlnLm1heF9vbmUyb25lX2ZwdF9wZXJfaG91ciYmTWF0aC5yYW5kb20oKTw9eHAuY29uZmlnLm9uZTJvbmVfZnB0X3JhdGlvLzEwMHx8Im9uZTJtYW55Ij09PXQmJnRoaXMuX29uZTJtYW55TnVtPHhwLmNvbmZpZy5tYXhfb25lMm1hbnlfZnB0X3Blcl9ob3VyJiZNYXRoLnJhbmRvbSgpPD14cC5jb25maWcub25lMm1hbnlfZnB0X3JhdGlvLzEwMCl9Y2FjaGVQMlBNc2codCl7dmFyIGU7dGhpcy5fb25lMm9uZU1zZ0NhY2hlLnNldCh0Lm1zZ19pZCxvZih7Y29uZmlnX3ZlcnNpb246KG51bGw9PT0oZT14cC5jb25maWcpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZlcnNpb24pfHwiIn0sdCkpfXVwZGF0ZVAyUE1zZyh0LGUpe2NvbnN0IG49dGhpcy5fb25lMm9uZU1zZ0NhY2hlLmdldCh0KTtuJiZ0aGlzLl9vbmUyb25lTXNnQ2FjaGUuc2V0KHQsb2Yob2Yoe30sbiksZSkpfWNhY2hlQ3VzdG9tTXNnKHQpe3ZhciBlO3RoaXMuX29uZTJtYW55TXNnQ2FjaGUuc2V0KHQubXNnX2lkLG9mKHtjb25maWdfdmVyc2lvbjoobnVsbD09PShlPXhwLmNvbmZpZyl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmVyc2lvbil8fCIifSx0KSl9dXBkYXRlT25lMk1hbnlNc2codCxlKXtjb25zdCBuPXRoaXMuX29uZTJtYW55TXNnQ2FjaGUuZ2V0KHQpO24mJnRoaXMuX29uZTJtYW55TXNnQ2FjaGUuc2V0KHQsb2Yob2Yoe30sbiksZSkpfXJlcG9ydFAyUE1zZyh0KXtjb25zdCBlPXRoaXMuX29uZTJvbmVNc2dDYWNoZS5nZXQodCk7dmFyIG47ZSYmKHRoaXMubG9nZ2VyLmluZm8oInJlcG9ydFAyUE1zZyIsZS50eXBlLEpTT04uc3RyaW5naWZ5KGUpKSxudWxsPT09KG49THAodGhpcy5pZCkpfHx2b2lkIDA9PT1ufHxuLnJlcG9ydCgicnRzX21lc3NhZ2UiLGUpKX1yZXBvcnRPbmUyTWFueU1zZyh0KXtjb25zdCBlPXRoaXMuX29uZTJtYW55TXNnQ2FjaGUuZ2V0KHQpO3ZhciBuO2UmJih0aGlzLmxvZ2dlci5pbmZvKCJyZXBvcnRPbmUyTWFueU1zZyIsZS50eXBlLEpTT04uc3RyaW5naWZ5KGUpKSxudWxsPT09KG49THAodGhpcy5pZCkpfHx2b2lkIDA9PT1ufHxuLnJlcG9ydCgicnRzX21lc3NhZ2UiLGUpKX1yZXBvcnRNc2dSZWN2KHQpe3ZhciBlLG47dC5jb25maWdfdmVyc2lvbj0obnVsbD09PShlPXhwLmNvbmZpZyl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmVyc2lvbil8fCIiLHRoaXMubG9nZ2VyLmluZm8oInJlcG9ydE1zZ1JlY3YiLHQudHlwZSxKU09OLnN0cmluZ2lmeSh0KSksbnVsbD09PShuPUxwKHRoaXMuaWQpKXx8dm9pZCAwPT09bnx8bi5yZXBvcnQoInJ0c19tZXNzYWdlIix0KX1kZXN0cm95KCl7dGhpcy5fb25lMm1hbnlOdW09MCx0aGlzLl9vbmUyb25lTnVtPTAsdGhpcy5fb25lMm1hbnlNc2dDYWNoZS5jbGVhcigpLHRoaXMuX29uZTJvbmVNc2dDYWNoZS5jbGVhcigpLHRoaXMuX3ByZVRpbWU9RGF0ZS5ub3coKSx0aGlzLnJvb21JZD0iIix0aGlzLnVzZXJJZD0iIix0aGlzLnJ0c1Nlc3Npb25JZD0iIn19dXUoeHAsImNvbmZpZyIsdm9pZCAwKTtjb25zdCBBcD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dXUodGhpcywibW9kaWZ5SWRzIix7cHJlX2Nvbm5lY3Rpb246ITF9KSx0aGlzLmlkPXR9cmVwb3J0KHQsZSxuKXtjb25zdCByPW9mKG9mKG9mKHtldmVudF9rZXk6dCxydGNfdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubW9kaWZ5SWRzKSxlKSx7fSx7cmVwb3J0X2lkOk9wLmdldFJlcG9ydElkKHRoaXMubW9kaWZ5SWRzLmVuZ2luZV9zZXNzaW9uX2lkKX0pO3ZhciBpLG87KCJvYmplY3QiPT10eXBlb2YgbiYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmNvbW1vbl9leHRyYV9pbmZvPUpTT04uc3RyaW5naWZ5KG4pKSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKCh0PT57dm9pZCAwIT09clt0XSYmIiIhPT1yW3RdfHxkZWxldGUgclt0XX0pKSwhRnUoKSYmd2luZG93Ll9fb25SVENSZXBvcnQpJiYobnVsbD09PShpPShvPXdpbmRvdykuX19vblJUQ1JlcG9ydCl8fHZvaWQgMD09PWl8fGkuY2FsbChvLHRoaXMubW9kaWZ5SWRzLmVuZ2luZV9zZXNzaW9uX2lkLHIsT3AuZ2V0Q29tbW9uU3RhdHMoKSkpOyJVVCIhPT17fS5WSVRFX1RFU1QmJk9wLnB1c2gocil9cmVwb3J0TG9nKHQpe2NvbnN0IGU9b2Yob2Yoe2V2ZW50X2tleToicnRjX2ludm9rZV9zdGF0dXMiLHNka19hcGlfbmFtZToiY29uc29sZV9sb2ciLHJ0Y190aW1lc3RhbXA6RGF0ZS5ub3coKX0sdGhpcy5tb2RpZnlJZHMpLHt9LHttZXNzYWdlOnR9KTtDcC5wdXNoKGUpfXJlcG9ydExvbmdTdHJpbmcodCxlKXtjb25zdCBuPW9mKG9mKHtldmVudF9rZXk6InJ0Y19pbnZva2Vfc3RhdHVzIixzZGtfYXBpX25hbWU6InNka19sb25nX3N0cmluZ18iLmNvbmNhdCh0KSxydGNfdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubW9kaWZ5SWRzKSx7fSx7bWVzc2FnZTplfSk7eXAucHVzaChuKX1zZXQodCl7dGhpcy5tb2RpZnlJZHM9T2JqZWN0LmFzc2lnbih0aGlzLm1vZGlmeUlkcyx0KX1kZXN0cm95KCl7fX0oImdsb2JhbCIpLFRwPSh0LGUsbik9PntBcC5yZXBvcnQoInJ0Y19lcnJvciIse21lc3NhZ2U6dCxlcnJvcl9jb2RlOmV9LG4pfTtjb25zdCBFcD1uZXcgTWFwLExwPXQ9PkVwLmdldCh0KSx6cD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmNsdWRlcygiX3J0Y191cGxvYWRfY29uc29sZV8iKTtmdW5jdGlvbiBCcCh0LGUpe3JldHVybiB0Lm1hcCgodD0+e2xldCBuPSIiO3RyeXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dClyZXR1cm4idW5kZWZpbmVkIjtpZihudWxsPT09dClyZXR1cm4ibnVsbCI7aWYodCBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtVHJhY2spcmV0dXJuIE11KHQpO2lmKHQgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbSlyZXR1cm4gbnVsbD09KGk9dCk/InVuZGVmaW5lZCB8IG51bGwiOiJzdHJpbmciPT10eXBlb2YgaT9pOkpTT04uc3RyaW5naWZ5KHtpZDppLmlkLGFjdGl2ZTppLmFjdGl2ZX0pO2lmKHQgaW5zdGFuY2VvZiBSVENSdHBTZW5kZXIpcmV0dXJuIFp1KHQpO2lmKHQgaW5zdGFuY2VvZiBSVENSdHBSZWNlaXZlcilyZXR1cm4gSnUodCk7aWYodCBpbnN0YW5jZW9mIFJUQ1J0cFRyYW5zY2VpdmVyKXJldHVybiBudWxsPT0ocj10KT8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiByP3I6SlNPTi5zdHJpbmdpZnkoe2N1cnJlbnREaXJlY3Rpb246ci5jdXJyZW50RGlyZWN0aW9uLGRpcmVjdGlvbjpyLmRpcmVjdGlvbixtaWQ6ci5taWQsc3RvcHBlZDpyLnN0b3BwZWQscmVjZWl2ZXI6SnUoci5yZWNlaXZlciksc2VuZGVyOlp1KHIuc2VuZGVyKX0pO249SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gobyl7bj10LnRvU3RyaW5nKCl9dmFyIHIsaTtyZXR1cm4gbiYmbi5sZW5ndGg+PWUmJihuPW4uc2xpY2UoMCxlKSksbn0pKS5qb2luKCIsICIpfXZhciBJcCxDcD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt1dSh0aGlzLCJuYW1lIiwiQ29uc29sZVJlcG9ydG9yIiksdXUodGhpcywiX3V1aWQiLCIiLmNvbmNhdChNYXRoLmZsb29yKDg5OSpNYXRoLnJhbmRvbSgpKSsxMDApKSx1dSh0aGlzLCJfY29uc29sZVJlcG9ydElkIiwwKSx1dSh0aGlzLCJfZW5naW5lUmVwb3J0SWRNYXAiLG5ldyBNYXApLHV1KHRoaXMsIl9lbmFibGVkIiwiTlVMTCIpLHV1KHRoaXMsIl9jb25zb2xlQ3V0TGVuZ3RoIixZdS5nZXRQYXJhbWV0ZXIoIlVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQiKSksdXUodGhpcywiYnVmZmVyIixbXSksenAmJnNldFRpbWVvdXQoKCgpPT57dGhpcy5zd2l0Y2hPbigpfSksMCksWXUub24oIlVQTE9BRF9DT05TT0xFX09OIiwodD0+e3Q/dGhpcy5zd2l0Y2hPbigpOnRoaXMudHVybk9mZigpfSkpLFl1Lm9uKCJVUExPQURfQ09OU09MRV9MRU5HVEhfQ1VUIiwodD0+e3RoaXMuX2NvbnNvbGVDdXRMZW5ndGg9dH0pKX1nZXQgZW5hYmxlZCgpe3JldHVybiJPRkYiIT09dGhpcy5fZW5hYmxlZH1zd2l0Y2hPbigpeyJOVUxMIj09PXRoaXMuX2VuYWJsZWQmJihjb25zb2xlLmxvZygiW0xvZ2dlclJlcG9ydG9yLmNvbnN0cnVjdG9yXSBjb25zb2xlIHVwbG9hZCBzd2l0Y2ggT04iKSx0aGlzLl9lbmFibGVkPSJPTiIpfXR1cm5PZmYoKXsiTlVMTCI9PT10aGlzLl9lbmFibGVkJiYoY29uc29sZS5sb2coIltMb2dnZXJSZXBvcnRvci5jb25zdHJ1Y3Rvcl0gY29uc29sZSB1cGxvYWQgc3dpdGNoIE9GRiIpLHRoaXMuX2VuYWJsZWQ9Ik9GRiIsdGhpcy5idWZmZXI9W10pfWdldEVuZ2luZUNvbnNvbGVJZCh0KXt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT10aGlzLl9lbmdpbmVSZXBvcnRJZE1hcC5nZXQodCkpJiZ2b2lkIDAhPT1lP2U6MDtyZXR1cm4gdGhpcy5fZW5naW5lUmVwb3J0SWRNYXAuc2V0KHQsbisxKSxufXJlcG9ydCh0LGUsbixyLGksbyxhLHMsYyl7aWYoIk9GRiI9PT10aGlzLl9lbmFibGVkKXJldHVybjtjb25zdCBsPUxwKGUpLHU9dGhpcy5fY29uc29sZVJlcG9ydElkKyssaD10aGlzLmdldEVuZ2luZUNvbnNvbGVJZChlKSxmPUJwKGMsdGhpcy5fY29uc29sZUN1dExlbmd0aCksZD1bLi4uY10sXz0iIi5jb25jYXQocykucmVwbGFjZSgvJW98JXMvZ2ksKCgpPT5CcChbZC5zaGlmdCgpXSx0aGlzLl9jb25zb2xlQ3V0TGVuZ3RoKSkpLHA9IlsiLmNvbmNhdCh0aGlzLl91dWlkLCItIikuY29uY2F0KHUsIl1bIikuY29uY2F0KGUsIi0iKS5jb25jYXQoaCwiXS0iKS5jb25jYXQobiwiLSIpLmNvbmNhdCh0LCJbIikuY29uY2F0KHIsIl0iKS5jb25jYXQoaSwiWyIpLmNvbmNhdChvLCIuIikuY29uY2F0KGEsIl0gIikuY29uY2F0KF8sIiAiKS5jb25jYXQoZik7dmFyIGc7bD9sLnJlcG9ydExvZyhwKTooZz1wLEFwLnJlcG9ydExvZyhnKSl9cHVzaCh0KXsiT0ZGIiE9PXRoaXMuX2VuYWJsZWQmJnRoaXMuYnVmZmVyLnB1c2godCl9c3BsaWNlKHQpe2lmKCJPTiIhPT10aGlzLl9lbmFibGVkKXJldHVybntwYXlsb2FkOltdLHBheWxvYWRTaXplOjB9O2NvbnN0e2luZGV4OmUsc2l6ZTpufT1mdW5jdGlvbih0LGUpe2xldCBuPTA7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2NvbnN0IGk9SlNPTi5zdHJpbmdpZnkodFtyXSkubGVuZ3RoO2lmKG4rPWksbj5lKXJldHVybntpbmRleDpyLHNpemU6bi1pfX1yZXR1cm57aW5kZXg6dC5sZW5ndGgsc2l6ZTpufX0odGhpcy5idWZmZXIsdCk7cmV0dXJue3BheWxvYWQ6dGhpcy5idWZmZXIuc3BsaWNlKDAsZSkscGF5bG9hZFNpemU6bn19dW5zaGlmdCh0KXt0aGlzLmJ1ZmZlcj10LmNvbmNhdCh0aGlzLmJ1ZmZlcil9Z2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyfXNldCh0KXt0aGlzLmJ1ZmZlcj10LmNvbmNhdCh0aGlzLmJ1ZmZlcil9aXNFbXB0eSgpe3JldHVybiJPRkYiPT09dGhpcy5fZW5hYmxlZHx8MD09PXRoaXMuYnVmZmVyLmxlbmd0aH19O2NvbnN0IE5wPSJbVkVSVENdIixScD0iIzAwNTBiMyIsanA9e0RFQlVHOiJyZ2JhKDAsIDAsIDAsIDApIiwiIElORk8iOiJyZ2JhKDkzLCAxNzMsIDIyNiwgMCkiLCIgV0FSTiI6InJnYmEoMjU1LCAxMTksIDAsIDAuMykiLEVSUk9SOiJyZ2JhKDI1NSwgMCwgMCwgMC4zKSIsIiBTVUNDIjoicmdiYSgwLCAxMTksIDAsIDAuMykifSxEcD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guaW5jbHVkZXMoIl9ydGNfZGVidWdfIil8fChudWxsPT09KElwPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1JcD92b2lkIDA6SXAuZ2V0SXRlbSgiX3J0Y19kZWJ1Z18iKSkpO2NvbnN0IFBwPSgpPT57Y29uc3QgdD1uZXcgRGF0ZTtyZXR1cm4iIi5jb25jYXQodC50b1RpbWVTdHJpbmcoKS5zcGxpdCgiICIpWzBdLCI6IikuY29uY2F0KHQuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCIwIikpfTt2YXIgVXAsRnAsTXAsWnAsSnAsSHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Imdsb2JhbCI7dXUodGhpcywiaW5kZW50Iix2b2lkIDApLHV1KHRoaXMsIm1vZHVsZSIsdm9pZCAwKSx1dSh0aGlzLCJfZW5naW5lSWQiLHZvaWQgMCksdGhpcy5tb2R1bGU9dCx0aGlzLmluZGVudD1lLHRoaXMuX2VuZ2luZUlkPW59X3ByaW50KHQsZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxpPTI7aTxuO2krKylyW2ktMl09YXJndW1lbnRzW2ldO2NvbnN0IG89ci5zaGlmdCgpO3RyeXtjb25zdCB0PVsuLi5yXSxuPSIiLmNvbmNhdChvKS5yZXBsYWNlKC8lby9naSwoKCk9Pntjb25zdCBlPXQuc2hpZnQoKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSk7S3Uuc2V0KCIiLmNvbmNhdChOcCwiWyIpLmNvbmNhdCh0aGlzLm1vZHVsZSwiLiIpLmNvbmNhdChlLCJdICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHQubWFwKCh0PT5KU09OLnN0cmluZ2lmeSh0KSkpLmpvaW4oIiwgIikpKX1jYXRjaChlZyl7fWxldCBhPSIiO2ZvcihsZXQgYz0wO2M8dGhpcy5pbmRlbnQ7YysrKWErPSIgICAgIjtjb25zdCBzPVBwKCk7Q3AucmVwb3J0KE5wLHRoaXMuX2VuZ2luZUlkLHMsdCxhLHRoaXMubW9kdWxlLGUsbyxyKSxEcCYmY29uc29sZS5sb2coIiVjIi5jb25jYXQocywiLSIpLmNvbmNhdChOcCwiJWNbIikuY29uY2F0KHQsIl0lYyIpLmNvbmNhdChhLCJbIikuY29uY2F0KHRoaXMubW9kdWxlLCIuIikuY29uY2F0KGUsIl0gIikuY29uY2F0KG8pLCJjb2xvcjoiLmNvbmNhdChScCwiOyIpLCJiYWNrZ3JvdW5kLWNvbG9yOiIuY29uY2F0KGpwW3RdLCI7IiksImNvbG9yOiIuY29uY2F0KFJwLCI7IiksLi4ucil9cHJpbnQodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCIgSU5GTyIsdCwuLi5uKX1kZWJ1Zyh0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShlPjE/ZS0xOjApLHI9MTtyPGU7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dGhpcy5fcHJpbnQoIkRFQlVHIix0LC4uLm4pfWluZm8odCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCIgSU5GTyIsdCwuLi5uKX13YXJuKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9wcmludCgiIFdBUk4iLHQsLi4ubil9ZXJyb3IodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCJFUlJPUiIsdCwuLi5uKX1zdWNjZXNzKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9wcmludCgiIFNVQ0MiLHQsLi4ubil9fTtuZXcgVGV4dERlY29kZXIsbmV3IFRleHRFbmNvZGVyLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmNsdWRlcygiX3J0Y19kZWJ1Z18iKXx8bnVsbCE9PShVcD13aW5kb3cubG9jYWxTdG9yYWdlKSYmdm9pZCAwIT09VXAmJlVwLmdldEl0ZW0oIl9ydGNfZGVidWdfIikpO2NvbnN0IFdwPSgpPT4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyxLcD1XcCgpPyIiOndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O2Z1bmN0aW9uIEdwKCl7bGV0IHQ9Im5vbmUiO3JldHVybiBXcCgpfHwobnVsbCE9PUtwLm1hdGNoKCJGaXJlZm94Iik/dD0ibW96aWxsYSI6bnVsbCE9PUtwLm1hdGNoKCJDaHJvbWUiKT8odD0iY2hyb21lLXN0YWJsZSIsbnVsbCE9PUtwLm1hdGNoKCJFbGVjdHJvbiIpJiYodD0iZWxlY3Ryb24iKSk6KG51bGwhPT1LcC5tYXRjaCgiU2FmYXJpIil8fG51bGwhPT1LcC5tYXRjaCgiQXBwbGVXZWJLaXQiKSkmJih0PSJzYWZhcmkiKSksdH1HcCgpO2NvbnN0IFZwPSJzYWZhcmkiPT09R3AoKTtHcCgpLCFXcCgpJiZLcC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJtb2JpbGUiKTtjb25zdCBZcD0hV3AoKSYmKG51bGw9PT0oRnA9S3AubWF0Y2goL3ZlcnNpb25cLyhcZCspL2kpKXx8dm9pZCAwPT09RnA/dm9pZCAwOkZwWzFdKTt2YXIgWHA7VnAmJllwJiYobnVsbD09PShYcD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC92ZXJzaW9uXC8oXGQrXC5cZCspL2kpKXx8dm9pZCAwPT09WHB8fFhwWzFdKTshV3AoKSYmKG51bGw9PT0oTXA9S3AubWF0Y2goL0ZpcmVmb3hcLyhcZCspL2kpKXx8dm9pZCAwPT09TXB8fE1wWzFdKSwhV3AoKSYmKG51bGw9PT0oWnA9S3AubWF0Y2goLyAoW1xkX10rKSBsaWtlIE1hYyBPUyBYL2kpKXx8dm9pZCAwPT09WnB8fG51bGw9PT0oWnA9WnBbMV0pfHx2b2lkIDA9PT1acHx8WnAuc3BsaXQoIl8iKS5tYXAoKHQ9PnBhcnNlSW50KHQpKSkpLCFXcCgpJiYobnVsbD09PShKcD1LcC5tYXRjaCgvQ2hyb21lXC8oXGQrKS9pKSl8fHZvaWQgMD09PUpwfHxKcFsxXSk7Y29uc3QgcXA9bmV3IEhwKCJKb2luUm9vbUNvbmZpZyIsMCk7Y2xhc3MgJHB7Y29uc3RydWN0b3IodCl7dXUodGhpcywiX3VzZVRjcEFmdGVySm9pblRpbWVvdXQiLCRwLkRFRkFVTFRfQ09ORi51c2VUY3BBZnRlckpvaW5UaW1lb3V0KSx1dSh0aGlzLCJfam9pbldpdGhUY3BPbmx5IiwkcC5ERUZBVUxUX0NPTkYuam9pbldpdGhUY3BPbmx5KSx1dSh0aGlzLCJfam9pbldpdGhUY3BPbmx5RGVsYXkiLCRwLkRFRkFVTFRfQ09ORi5qb2luV2l0aFRjcE9ubHlEZWxheSksdXUodGhpcywiX2JsYWNrQnJvd3NlclJlZ2V4TGlzdCIsW10pLHRoaXMuX2VuZ2luZUlkPXQsbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoIl9fcnRjX3RjcF9vbmx5X18iKT4tMSYmKHRoaXMuX2pvaW5XaXRoVGNwT25seT0hMCx0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheT0wKSx0aGlzLl9yZXBvcnQoKX1zdGF0aWMgc2V0RGVmYXVsQ29uZih0KXtsZXR7dXNlVGNwQWZ0ZXJKb2luVGltZW91dDplLGpvaW5XaXRoVGNwT25seTpuLGpvaW5XaXRoVGNwT25seURlbGF5OnJ9PXQ7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZSYmKCRwLkRFRkFVTFRfQ09ORi51c2VUY3BBZnRlckpvaW5UaW1lb3V0PWUpLCJib29sZWFuIj09dHlwZW9mIG4mJigkcC5ERUZBVUxUX0NPTkYuam9pbldpdGhUY3BPbmx5PW4pLCJudW1iZXIiPT10eXBlb2YgciYmKCRwLkRFRkFVTFRfQ09ORi5qb2luV2l0aFRjcE9ubHlEZWxheT1NYXRoLm1heCgwLHIpKSwkcC5ERUZBVUxUX0NPTkZ9Z2V0IHVzZVRjcEFmdGVySm9pblRpbWVvdXQoKXtyZXR1cm4gdGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dH1nZXQgdXNlVGNwSm9pbigpe3JldHVybiB0aGlzLl9qb2luV2l0aFRjcE9ubHl9Z2V0IHVzZVRjcEpvaW5EZWxheSgpe3JldHVybiB0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheX1pc0JsYWNrQnJvd2VyKCl7cmV0dXJuIHRoaXMuX2JsYWNrQnJvd3NlclJlZ2V4TGlzdC5maW5kKCh0PT5uZXcgUmVnRXhwKHQpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKX1zZXRTZXJ2ZXJDb25maWcodCl7dmFyIGUsbixyO2xldCBpPSExOyJib29sZWFuIj09dHlwZW9mKG51bGw9PXR8fG51bGw9PT0oZT10LnVzZV90Y3BfYWZ0ZXJfam9pbl90aW1lb3V0KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmFibGUpJiYodGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dD10LnVzZV90Y3BfYWZ0ZXJfam9pbl90aW1lb3V0LmVuYWJsZSxpPSEwKSwiYm9vbGVhbiI9PXR5cGVvZihudWxsPT10fHxudWxsPT09KG49dC5qb2luX3dpdGhfdGNwX29ubHkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuYWJsZSkmJih0aGlzLl9qb2luV2l0aFRjcE9ubHk9dC5qb2luX3dpdGhfdGNwX29ubHkuZW5hYmxlLGk9ITApLCJudW1iZXIiPT10eXBlb2YobnVsbD09dHx8bnVsbD09PShyPXQuam9pbl93aXRoX3RjcF9vbmx5KXx8dm9pZCAwPT09cj92b2lkIDA6ci5kZWxheV9tcykmJih0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheT10LmpvaW5fd2l0aF90Y3Bfb25seS5kZWxheV9tcyxpPSEwKSx0JiZBcnJheS5pc0FycmF5KHQuYmxhY2tfYnJvd3Nlcl9yZWdleF9saXN0KSYmKHRoaXMuX2JsYWNrQnJvd3NlclJlZ2V4TGlzdD10LmJsYWNrX2Jyb3dzZXJfcmVnZXhfbGlzdCxpPSEwKSxpJiZ0aGlzLl9yZXBvcnQoKX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh7dXNlX3RjcF9hZnRlcl9qb2luX3RpbWVvdXQ6dGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dCxqb2luX3dpdGhfdGNwX29ubHk6dGhpcy5fam9pbldpdGhUY3BPbmx5LGpvaW5fd2l0aF90Y3Bfb25seV9kZWxheTp0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheSxibGFja19icm93c2VyX3JlZ2V4X2xpc3Q6dGhpcy5fYmxhY2tCcm93c2VyUmVnZXhMaXN0fSl9X3JlcG9ydCgpe3FwLnByaW50KCJfcmVwb3J0Iix0aGlzLnRvU3RyaW5nKCkpLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XToiIixhPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwO251bGw9PT0ocj1McCh0KSl8fHZvaWQgMD09PXJ8fHIucmVwb3J0KCJydGNfaW52b2tlX3N0YXR1cyIse3Nka19hcGlfbmFtZTplLG1lc3NhZ2U6bixlcnJvcl9jb2RlOmksc3RyZWFtX2lkOm8sZWxhcHNlOjB9LGEpfSh0aGlzLl9lbmdpbmVJZCwid2ViX2pvaW5fcm9vbV9jb25maWciLHRoaXMudG9TdHJpbmcoKSl9fXV1KCRwLCJERUZBVUxUX0NPTkYiLHt1c2VUY3BBZnRlckpvaW5UaW1lb3V0OiEwLGpvaW5XaXRoVGNwT25seTohMSxqb2luV2l0aFRjcE9ubHlEZWxheTo1ZTN9KTt2YXIgUXA9KHQ9Pih0W3QuTk9ORT0wXT0iTk9ORSIsdCkpKFFwfHx7fSk7Y29uc3QgdGc9Il9fcnRjX2FjY2Vzc0RvbWFpbnNfXyIuc3BsaXQoIiwiKTsiX19ydGNfY29uZmlnRG9tYWluc19fIi5zcGxpdCgiLCIpO3RnLm1hcCgoZnVuY3Rpb24oKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7cmV0dXJuIHQ/KC9eaHR0cHM/OlwvXC8uKy8udGVzdCh0KXx8KHQ9Imh0dHBzOi8vIi5jb25jYXQodCkpLCIiLmNvbmNhdCh0LCIvZGlzcGF0Y2gvdjEvQWNjZXNzSW5mbz9BY3Rpb249R2V0QWNjZXNzSW5mbyIpKToiIn0pKSwkcC5ERUZBVUxUX0NPTkYsUXAuTk9ORSwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZT0+e2NvbnN0e3RyYW5zZm9ybWVyOm59PWUse3BvcnQ6cn09bi5vcHRpb25zLGk9KG89dD0+e3IucG9zdE1lc3NhZ2UodCxbdC5wYXlsb2FkLmJ1ZmZlcl0pfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm0oZSxuKXtjb25zdCByPXQuaXNIMjY1VmlkZW9GcmFtZShlKTt0LmdldE5BTFVuaXRzKG5ldyBodShlLmRhdGEpLHIpLmZvckVhY2goKHQ9PntpZih0LnNlaSl7Y29uc3QgZT12dS5kZWNvZGVTRUlCb2R5KHQuYm9keSxyKTtlJiZlLnR5cGU9PT1mdS5leHRlcm5hbCYmbyhlKX19KSksbi5lbnF1ZXVlKGUpfX0pKTt2YXIgbztuLnJlYWRhYmxlLnBpcGVUaHJvdWdoKGkpLnBpcGVUbyhlLnRyYW5zZm9ybWVyLndyaXRhYmxlKX0pKX0oKTsK",FY=typeof window<"u"&&window.Blob&&new Blob([atob(jz)],{type:"text/javascript;charset=utf-8"});function D9A(){let A;try{if(A=FY&&(pQ||window.webkitURL).createObjectURL(FY),!A)throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+jz)}finally{!(typeof window<"u"&&navigator.userAgent.indexOf("Trident/")>0)&&A&&(pQ||window.webkitlRL).revokeObjectURL(A)}}const fz="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fXZhciBuPXtleHBvcnRzOnt9fSxyPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PT1NYXRoJiZ0fSxvPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2YgdCYmdCl8fHIoIm9iamVjdCI9PXR5cGVvZiB0JiZ0KXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxpPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19LHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdHx8dC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksYT11LGM9RnVuY3Rpb24ucHJvdG90eXBlLHM9Yy5hcHBseSxmPWMuY2FsbCxsPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGE/Zi5iaW5kKHMpOmZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkocyxhcmd1bWVudHMpfSkseT11LHA9RnVuY3Rpb24ucHJvdG90eXBlLGg9cC5jYWxsLGc9eSYmcC5iaW5kLmJpbmQoaCxoKSxkPXk/ZzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseSh0LGFyZ3VtZW50cyl9fSxiPWQsdj1iKHt9LnRvU3RyaW5nKSxtPWIoIiIuc2xpY2UpLFM9ZnVuY3Rpb24odCl7cmV0dXJuIG0odih0KSw4LC0xKX0sdz1TLE89ZCxMPWZ1bmN0aW9uKHQpe2lmKCJGdW5jdGlvbiI9PT13KHQpKXJldHVybiBPKHQpfSxqPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxBPXZvaWQgMD09PWomJnZvaWQgMCE9PWo/ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR8fHQ9PT1qfTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH0sUD17fSxJPSFpKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLEU9dSxUPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGs9RT9ULmJpbmQoVCk6ZnVuY3Rpb24oKXtyZXR1cm4gVC5hcHBseShULGFyZ3VtZW50cyl9LHg9e30sRj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxDPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTj1DJiYhRi5jYWxsKHsxOjJ9LDEpO3guZj1OP2Z1bmN0aW9uKHQpe3ZhciBlPUModGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06Rjt2YXIgTSxSLFU9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19LEQ9aSxfPVMsRz1PYmplY3QsSD1kKCIiLnNwbGl0KSxCPUQoKGZ1bmN0aW9uKCl7cmV0dXJuIUcoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09PV8odCk/SCh0LCIiKTpHKHQpfTpHLFY9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LFc9Vix6PVR5cGVFcnJvcixLPWZ1bmN0aW9uKHQpe2lmKFcodCkpdGhyb3cgbmV3IHooIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9LHE9QixKPUssWT1mdW5jdGlvbih0KXtyZXR1cm4gcShKKHQpKX0sWD1BLCQ9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OlgodCl9LFE9e30sWj1RLHR0PW8sZXQ9QSxudD1mdW5jdGlvbih0KXtyZXR1cm4gZXQodCk/dDp2b2lkIDB9LHJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9udChaW3RdKXx8bnQodHRbdF0pOlpbdF0mJlpbdF1bZV18fHR0W3RdJiZ0dFt0XVtlXX0sb3Q9ZCh7fS5pc1Byb3RvdHlwZU9mKSxpdD1vLm5hdmlnYXRvcix1dD1pdCYmaXQudXNlckFnZW50LGF0PW8sY3Q9dXQ/U3RyaW5nKHV0KToiIixzdD1hdC5wcm9jZXNzLGZ0PWF0LkRlbm8sbHQ9c3QmJnN0LnZlcnNpb25zfHxmdCYmZnQudmVyc2lvbix5dD1sdCYmbHQudjg7eXQmJihSPShNPXl0LnNwbGl0KCIuIikpWzBdPjAmJk1bMF08ND8xOisoTVswXStNWzFdKSksIVImJmN0JiYoIShNPWN0Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8TVsxXT49NzQpJiYoTT1jdC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKFI9K01bMV0pO3ZhciBwdD1SLGh0PXB0LGd0PWksZHQ9by5TdHJpbmcsYnQ9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhZ3QoKGZ1bmN0aW9uKCl7dmFyIHQ9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIWR0KHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZodCYmaHQ8NDF9KSksdnQ9YnQmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsbXQ9cnQsU3Q9QSx3dD1vdCxPdD1PYmplY3QsTHQ9dnQ/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXt2YXIgZT1tdCgiU3ltYm9sIik7cmV0dXJuIFN0KGUpJiZ3dChlLnByb3RvdHlwZSxPdCh0KSl9LGp0PVN0cmluZyxBdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGp0KHQpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0sUHQ9QSxJdD1BdCxFdD1UeXBlRXJyb3IsVHQ9ZnVuY3Rpb24odCl7aWYoUHQodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEV0KEl0KHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX0sa3Q9VHQseHQ9VixGdD1rLEN0PUEsTnQ9JCxNdD1UeXBlRXJyb3IsUnQ9e2V4cG9ydHM6e319LFV0PW8sRHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LF90PW8sR3Q9ZnVuY3Rpb24odCxlKXt0cnl7RHQoVXQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtVdFt0XT1lfXJldHVybiBlfSxIdD0iX19jb3JlLWpzX3NoYXJlZF9fIixCdD1SdC5leHBvcnRzPV90W0h0XXx8R3QoSHQse30pOyhCdC52ZXJzaW9uc3x8KEJ0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIFZ0PVJ0LmV4cG9ydHMsV3Q9VnQsenQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gV3RbdF18fChXdFt0XT1lfHx7fSl9LEt0PUsscXQ9T2JqZWN0LEp0PWZ1bmN0aW9uKHQpe3JldHVybiBxdChLdCh0KSl9LFl0PUp0LFh0PWQoe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFh0KFl0KHQpLGUpfSxRdD1kLFp0PTAsdGU9TWF0aC5yYW5kb20oKSxlZT1RdCgxLi50b1N0cmluZyksbmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrZWUoKytadCt0ZSwzNil9LHJlPXp0LG9lPSR0LGllPW5lLHVlPWJ0LGFlPXZ0LGNlPW8uU3ltYm9sLHNlPXJlKCJ3a3MiKSxmZT1hZT9jZS5mb3J8fGNlOmNlJiZjZS53aXRob3V0U2V0dGVyfHxpZSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gb2Uoc2UsdCl8fChzZVt0XT11ZSYmb2UoY2UsdCk/Y2VbdF06ZmUoIlN5bWJvbC4iK3QpKSxzZVt0XX0seWU9ayxwZT0kLGhlPUx0LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtyZXR1cm4geHQobik/dm9pZCAwOmt0KG4pfSxkZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI7aWYoInN0cmluZyI9PT1lJiZDdChuPXQudG9TdHJpbmcpJiYhTnQocj1GdChuLHQpKSlyZXR1cm4gcjtpZihDdChuPXQudmFsdWVPZikmJiFOdChyPUZ0KG4sdCkpKXJldHVybiByO2lmKCJzdHJpbmciIT09ZSYmQ3Qobj10LnRvU3RyaW5nKSYmIU50KHI9RnQobix0KSkpcmV0dXJuIHI7dGhyb3cgbmV3IE10KCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0sYmU9VHlwZUVycm9yLHZlPWxlKCJ0b1ByaW1pdGl2ZSIpLG1lPWZ1bmN0aW9uKHQsZSl7aWYoIXBlKHQpfHxoZSh0KSlyZXR1cm4gdDt2YXIgbixyPWdlKHQsdmUpO2lmKHIpe2lmKHZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iiksbj15ZShyLHQsZSksIXBlKG4pfHxoZShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgYmUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIiksZGUodCxlKX0sU2U9THQsd2U9ZnVuY3Rpb24odCl7dmFyIGU9bWUodCwic3RyaW5nIik7cmV0dXJuIFNlKGUpP2U6ZSsiIn0sT2U9JCxMZT1vLmRvY3VtZW50LGplPU9lKExlKSYmT2UoTGUuY3JlYXRlRWxlbWVudCksQWU9ZnVuY3Rpb24odCl7cmV0dXJuIGplP0xlLmNyZWF0ZUVsZW1lbnQodCk6e319LFBlPUFlLEllPSFJJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLEVlPUksVGU9ayxrZT14LHhlPVUsRmU9WSxDZT13ZSxOZT0kdCxNZT1JZSxSZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1AuZj1FZT9SZTpmdW5jdGlvbih0LGUpe2lmKHQ9RmUodCksZT1DZShlKSxNZSl0cnl7cmV0dXJuIFJlKHQsZSl9Y2F0Y2gobil7fWlmKE5lKHQsZSkpcmV0dXJuIHhlKCFUZShrZS5mLHQsZSksdFtlXSl9O3ZhciBVZT1pLERlPUEsX2U9LyN8XC5wcm90b3R5cGVcLi8sR2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1CZVtIZSh0KV07cmV0dXJuIG49PT1XZXx8biE9PVZlJiYoRGUoZSk/VWUoZSk6ISFlKX0sSGU9R2Uubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShfZSwiLiIpLnRvTG93ZXJDYXNlKCl9LEJlPUdlLmRhdGE9e30sVmU9R2UuTkFUSVZFPSJOIixXZT1HZS5QT0xZRklMTD0iUCIsemU9R2UsS2U9VHQscWU9dSxKZT1MKEwuYmluZCksWWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gS2UodCksdm9pZCAwPT09ZT90OnFlP0plKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxYZT17fSwkZT1JJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSksUWU9JCxaZT1TdHJpbmcsdG49VHlwZUVycm9yLGVuPWZ1bmN0aW9uKHQpe2lmKFFlKHQpKXJldHVybiB0O3Rocm93IG5ldyB0bihaZSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX0sbm49SSxybj1JZSxvbj0kZSx1bj1lbixhbj13ZSxjbj1UeXBlRXJyb3Isc249T2JqZWN0LmRlZmluZVByb3BlcnR5LGZuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbG49ImVudW1lcmFibGUiLHluPSJjb25maWd1cmFibGUiLHBuPSJ3cml0YWJsZSI7WGUuZj1ubj9vbj9mdW5jdGlvbih0LGUsbil7aWYodW4odCksZT1hbihlKSx1bihuKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmInByb3RvdHlwZSI9PT1lJiYidmFsdWUiaW4gbiYmcG4gaW4gbiYmIW5bcG5dKXt2YXIgcj1mbih0LGUpO3ImJnJbcG5dJiYodFtlXT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTp5biBpbiBuP25beW5dOnJbeW5dLGVudW1lcmFibGU6bG4gaW4gbj9uW2xuXTpyW2xuXSx3cml0YWJsZTohMX0pfXJldHVybiBzbih0LGUsbil9OnNuOmZ1bmN0aW9uKHQsZSxuKXtpZih1bih0KSxlPWFuKGUpLHVuKG4pLHJuKXRyeXtyZXR1cm4gc24odCxlLG4pfWNhdGNoKHIpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBuZXcgY24oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9O3ZhciBobj1YZSxnbj1VLGRuPUk/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobi5mKHQsZSxnbigxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH0sYm49byx2bj1sLG1uPUwsU249QSx3bj1QLmYsT249emUsTG49USxqbj1ZZSxBbj1kbixQbj0kdCxJbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihuLHIsbyl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLHIpfXJldHVybiBuZXcgdChuLHIsbyl9cmV0dXJuIHZuKHQsdGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZS5wcm90b3R5cGU9dC5wcm90b3R5cGUsZX0sRW49ZnVuY3Rpb24odCxlKXt2YXIgbixyLG8saSx1LGEsYyxzLGYsbD10LnRhcmdldCx5PXQuZ2xvYmFsLHA9dC5zdGF0LGg9dC5wcm90byxnPXk/Ym46cD9ibltsXTpibltsXSYmYm5bbF0ucHJvdG90eXBlLGQ9eT9MbjpMbltsXXx8QW4oTG4sbCx7fSlbbF0sYj1kLnByb3RvdHlwZTtmb3IoaSBpbiBlKXI9IShuPU9uKHk/aTpsKyhwPyIuIjoiIyIpK2ksdC5mb3JjZWQpKSYmZyYmUG4oZyxpKSxhPWRbaV0sciYmKGM9dC5kb250Q2FsbEdldFNldD8oZj13bihnLGkpKSYmZi52YWx1ZTpnW2ldKSx1PXImJmM/YzplW2ldLChufHxofHx0eXBlb2YgYSE9dHlwZW9mIHUpJiYocz10LmJpbmQmJnI/am4odSxibik6dC53cmFwJiZyP0luKHUpOmgmJlNuKHUpP21uKHUpOnUsKHQuc2hhbXx8dSYmdS5zaGFtfHxhJiZhLnNoYW0pJiZBbihzLCJzaGFtIiwhMCksQW4oZCxpLHMpLGgmJihQbihMbixvPWwrIlByb3RvdHlwZSIpfHxBbihMbixvLHt9KSxBbihMbltvXSxpLHUpLHQucmVhbCYmYiYmKG58fCFiW2ldKSYmQW4oYixpLHUpKSl9LFRuPUVuLGtuPUkseG49WGUuZjtUbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PXhuLHNoYW06IWtufSx7ZGVmaW5lUHJvcGVydHk6eG59KTt2YXIgRm49US5PYmplY3QsQ249bi5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRm4uZGVmaW5lUHJvcGVydHkodCxlLG4pfTtGbi5kZWZpbmVQcm9wZXJ0eS5zaGFtJiYoQ24uc2hhbT0hMCk7dmFyIE5uPWUobi5leHBvcnRzKSxNbj1TLFJuPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PT1Nbih0KX0sVW49TWF0aC5jZWlsLERuPU1hdGguZmxvb3IsX249TWF0aC50cnVuY3x8ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuKGU+MD9EbjpVbikoZSl9LEduPWZ1bmN0aW9uKHQpe3ZhciBlPSt0O3JldHVybiBlIT1lfHwwPT09ZT8wOl9uKGUpfSxIbj1HbixCbj1NYXRoLm1pbixWbj1mdW5jdGlvbih0KXt2YXIgZT1Ibih0KTtyZXR1cm4gZT4wP0JuKGUsOTAwNzE5OTI1NDc0MDk5MSk6MH0sV249ZnVuY3Rpb24odCl7cmV0dXJuIFZuKHQubGVuZ3RoKX0sem49VHlwZUVycm9yLEtuPUkscW49WGUsSm49VSxZbj17fTtZbltsZSgidG9TdHJpbmdUYWciKV09InoiO3ZhciBYbj0iW29iamVjdCB6XSI9PT1TdHJpbmcoWW4pLCRuPVhuLFFuPUEsWm49Uyx0cj1sZSgidG9TdHJpbmdUYWciKSxlcj1PYmplY3QsbnI9IkFyZ3VtZW50cyI9PT1abihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLHJyPSRuP1puOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319KGU9ZXIodCksdHIpKT9uOm5yP1puKGUpOiJPYmplY3QiPT09KHI9Wm4oZSkpJiZRbihlLmNhbGxlZSk/IkFyZ3VtZW50cyI6cn0sb3I9QSxpcj1WdCx1cj1kKEZ1bmN0aW9uLnRvU3RyaW5nKTtvcihpci5pbnNwZWN0U291cmNlKXx8KGlyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHVyKHQpfSk7dmFyIGFyPWlyLmluc3BlY3RTb3VyY2UsY3I9ZCxzcj1pLGZyPUEsbHI9cnIseXI9YXIscHI9ZnVuY3Rpb24oKXt9LGhyPXJ0KCJSZWZsZWN0IiwiY29uc3RydWN0IiksZ3I9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sZHI9Y3IoZ3IuZXhlYyksYnI9IWdyLnRlc3QocHIpLHZyPWZ1bmN0aW9uKHQpe2lmKCFmcih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGhyKHByLFtdLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sbXI9ZnVuY3Rpb24odCl7aWYoIWZyKHQpKXJldHVybiExO3N3aXRjaChscih0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gYnJ8fCEhZHIoZ3IseXIodCkpfWNhdGNoKGUpe3JldHVybiEwfX07bXIuc2hhbT0hMDt2YXIgU3I9IWhyfHxzcigoZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdnIodnIuY2FsbCl8fCF2cihPYmplY3QpfHwhdnIoKGZ1bmN0aW9uKCl7dD0hMH0pKXx8dH0pKT9tcjp2cix3cj1SbixPcj1TcixMcj0kLGpyPWxlKCJzcGVjaWVzIiksQXI9QXJyYXksUHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHdyKHQpJiYoZT10LmNvbnN0cnVjdG9yLChPcihlKSYmKGU9PT1Bcnx8d3IoZS5wcm90b3R5cGUpKXx8THIoZSkmJm51bGw9PT0oZT1lW2pyXSkpJiYoZT12b2lkIDApKSx2b2lkIDA9PT1lP0FyOmV9LElyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhQcih0KSkoMD09PWU/MDplKX0sRXI9aSxUcj1wdCxrcj1sZSgic3BlY2llcyIpLHhyPUVuLEZyPWksQ3I9Um4sTnI9JCxNcj1KdCxScj1XbixVcj1mdW5jdGlvbih0KXtpZih0PjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgem4oIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiB0fSxEcj1mdW5jdGlvbih0LGUsbil7S24/cW4uZih0LGUsSm4oMCxuKSk6dFtlXT1ufSxfcj1JcixHcj1mdW5jdGlvbih0KXtyZXR1cm4gVHI+PTUxfHwhRXIoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuKGUuY29uc3RydWN0b3I9e30pW2tyXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lW3RdKEJvb2xlYW4pLmZvb30pKX0sSHI9cHQsQnI9bGUoImlzQ29uY2F0U3ByZWFkYWJsZSIpLFZyPUhyPj01MXx8IUZyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0JyXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxXcj1mdW5jdGlvbih0KXtpZighTnIodCkpcmV0dXJuITE7dmFyIGU9dFtCcl07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOkNyKHQpfTt4cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6IVZyfHwhR3IoImNvbmNhdCIpfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksdT1Ncih0aGlzKSxhPV9yKHUsMCksYz0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKFdyKGk9LTE9PT1lP3U6YXJndW1lbnRzW2VdKSlmb3Iobz1ScihpKSxVcihjK28pLG49MDtuPG87bisrLGMrKyluIGluIGkmJkRyKGEsYyxpW25dKTtlbHNlIFVyKGMrMSksRHIoYSxjKyssaSk7cmV0dXJuIGEubGVuZ3RoPWMsYX19KTt2YXIgenI9cnIsS3I9U3RyaW5nLHFyPWZ1bmN0aW9uKHQpe2lmKCJTeW1ib2wiPT09enIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gS3IodCl9LEpyPXt9LFlyPUduLFhyPU1hdGgubWF4LCRyPU1hdGgubWluLFFyPVksWnI9ZnVuY3Rpb24odCxlKXt2YXIgbj1Zcih0KTtyZXR1cm4gbjwwP1hyKG4rZSwwKTokcihuLGUpfSx0bz1Xbixlbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3ZhciBvPVFyKGUpLGk9dG8obyk7aWYoMD09PWkpcmV0dXJuIXQmJi0xO3ZhciB1LGE9WnIocixpKTtpZih0JiZuIT1uKXtmb3IoO2k+YTspaWYoKHU9b1thKytdKSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7aT5hO2ErKylpZigodHx8YSBpbiBvKSYmb1thXT09PW4pcmV0dXJuIHR8fGF8fDA7cmV0dXJuIXQmJi0xfX0sbm89e2luY2x1ZGVzOmVvKCEwKSxpbmRleE9mOmVvKCExKX0scm89e30sb289JHQsaW89WSx1bz1uby5pbmRleE9mLGFvPXJvLGNvPWQoW10ucHVzaCksc289ZnVuY3Rpb24odCxlKXt2YXIgbixyPWlvKHQpLG89MCxpPVtdO2ZvcihuIGluIHIpIW9vKGFvLG4pJiZvbyhyLG4pJiZjbyhpLG4pO2Zvcig7ZS5sZW5ndGg+bzspb28ocixuPWVbbysrXSkmJih+dW8oaSxuKXx8Y28oaSxuKSk7cmV0dXJuIGl9LGZvPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0sbG89c28seW89Zm8scG89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBsbyh0LHlvKX0saG89SSxnbz0kZSxibz1YZSx2bz1lbixtbz1ZLFNvPXBvO0pyLmY9aG8mJiFnbz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe3ZvKHQpO2Zvcih2YXIgbixyPW1vKGUpLG89U28oZSksaT1vLmxlbmd0aCx1PTA7aT51Oyliby5mKHQsbj1vW3UrK10scltuXSk7cmV0dXJuIHR9O3ZhciB3byxPbz1ydCgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKSxMbz1uZSxqbz16dCgia2V5cyIpLEFvPWZ1bmN0aW9uKHQpe3JldHVybiBqb1t0XXx8KGpvW3RdPUxvKHQpKX0sUG89ZW4sSW89SnIsRW89Zm8sVG89cm8sa289T28seG89QWUsRm89InByb3RvdHlwZSIsQ289InNjcmlwdCIsTm89QW8oIklFX1BST1RPIiksTW89ZnVuY3Rpb24oKXt9LFJvPWZ1bmN0aW9uKHQpe3JldHVybiI8IitDbysiPiIrdCsiPC8iK0NvKyI+In0sVW89ZnVuY3Rpb24odCl7dC53cml0ZShSbygiIikpLHQuY2xvc2UoKTt2YXIgZT10LnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIHQ9bnVsbCxlfSxEbz1mdW5jdGlvbigpe3RyeXt3bz1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChvKXt9dmFyIHQsZSxuO0RvPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZ3bz9Vbyh3byk6KGU9eG8oImlmcmFtZSIpLG49ImphdmEiK0NvKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGtvLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZyhuKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKFJvKCJkb2N1bWVudC5GPU9iamVjdCIpKSx0LmNsb3NlKCksdC5GKTpVbyh3byk7Zm9yKHZhciByPUVvLmxlbmd0aDtyLS07KWRlbGV0ZSBEb1tGb11bRW9bcl1dO3JldHVybiBEbygpfTtUb1tOb109ITA7dmFyIF9vPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhNb1tGb109UG8odCksbj1uZXcgTW8sTW9bRm9dPW51bGwsbltOb109dCk6bj1EbygpLHZvaWQgMD09PWU/bjpJby5mKG4sZSl9LEdvPXt9LEhvPXNvLEJvPWZvLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7R28uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIEhvKHQsQm8pfTt2YXIgVm89e30sV289ZChbXS5zbGljZSksem89UyxLbz1ZLHFvPUdvLmYsSm89V28sWW89Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtWby5mPWZ1bmN0aW9uKHQpe3JldHVybiBZbyYmIldpbmRvdyI9PT16byh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHFvKHQpfWNhdGNoKGUpe3JldHVybiBKbyhZbyl9fSh0KTpxbyhLbyh0KSl9O3ZhciBYbz17fTtYby5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyICRvPWRuLFFvPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByJiZyLmVudW1lcmFibGU/dFtlXT1uOiRvKHQsZSxuKSx0fSxabz1YZSx0aT17fSxlaT1sZTt0aS5mPWVpO3ZhciBuaSxyaSxvaSxpaT1RLHVpPSR0LGFpPXRpLGNpPVhlLmYsc2k9ZnVuY3Rpb24odCl7dmFyIGU9aWkuU3ltYm9sfHwoaWkuU3ltYm9sPXt9KTt1aShlLHQpfHxjaShlLHQse3ZhbHVlOmFpLmYodCl9KX0sZmk9ayxsaT1ydCx5aT1sZSxwaT1RbyxoaT1mdW5jdGlvbigpe3ZhciB0PWxpKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLG49ZSYmZS52YWx1ZU9mLHI9eWkoInRvUHJpbWl0aXZlIik7ZSYmIWVbcl0mJnBpKGUsciwoZnVuY3Rpb24odCl7cmV0dXJuIGZpKG4sdGhpcyl9KSx7YXJpdHk6MX0pfSxnaT1ycixkaT1Ybj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrZ2kodGhpcykrIl0ifSxiaT1Ybix2aT1YZS5mLG1pPWRuLFNpPSR0LHdpPWRpLE9pPWxlKCJ0b1N0cmluZ1RhZyIpLExpPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPW4/dDp0JiZ0LnByb3RvdHlwZTtvJiYoU2kobyxPaSl8fHZpKG8sT2kse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSksciYmIWJpJiZtaShvLCJ0b1N0cmluZyIsd2kpKX0samk9QSxBaT1vLldlYWtNYXAsUGk9amkoQWkpJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKEFpKSksSWk9byxFaT0kLFRpPWRuLGtpPSR0LHhpPVZ0LEZpPUFvLENpPXJvLE5pPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsTWk9SWkuVHlwZUVycm9yLFJpPUlpLldlYWtNYXA7aWYoUGl8fHhpLnN0YXRlKXt2YXIgVWk9eGkuc3RhdGV8fCh4aS5zdGF0ZT1uZXcgUmkpO1VpLmdldD1VaS5nZXQsVWkuaGFzPVVpLmhhcyxVaS5zZXQ9VWkuc2V0LG5pPWZ1bmN0aW9uKHQsZSl7aWYoVWkuaGFzKHQpKXRocm93IG5ldyBNaShOaSk7cmV0dXJuIGUuZmFjYWRlPXQsVWkuc2V0KHQsZSksZX0scmk9ZnVuY3Rpb24odCl7cmV0dXJuIFVpLmdldCh0KXx8e319LG9pPWZ1bmN0aW9uKHQpe3JldHVybiBVaS5oYXModCl9fWVsc2V7dmFyIERpPUZpKCJzdGF0ZSIpO0NpW0RpXT0hMCxuaT1mdW5jdGlvbih0LGUpe2lmKGtpKHQsRGkpKXRocm93IG5ldyBNaShOaSk7cmV0dXJuIGUuZmFjYWRlPXQsVGkodCxEaSxlKSxlfSxyaT1mdW5jdGlvbih0KXtyZXR1cm4ga2kodCxEaSk/dFtEaV06e319LG9pPWZ1bmN0aW9uKHQpe3JldHVybiBraSh0LERpKX19dmFyIF9pPXtzZXQ6bmksZ2V0OnJpLGhhczpvaSxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBvaSh0KT9yaSh0KTpuaSh0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighRWkoZSl8fChuPXJpKGUpKS50eXBlIT09dCl0aHJvdyBuZXcgTWkoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fSxHaT1ZZSxIaT1CLEJpPUp0LFZpPVduLFdpPUlyLHppPWQoW10ucHVzaCksS2k9ZnVuY3Rpb24odCl7dmFyIGU9MT09PXQsbj0yPT09dCxyPTM9PT10LG89ND09PXQsaT02PT09dCx1PTc9PT10LGE9NT09PXR8fGk7cmV0dXJuIGZ1bmN0aW9uKGMscyxmLGwpe2Zvcih2YXIgeSxwLGg9QmkoYyksZz1IaShoKSxkPVZpKGcpLGI9R2kocyxmKSx2PTAsbT1sfHxXaSxTPWU/bShjLGQpOm58fHU/bShjLDApOnZvaWQgMDtkPnY7disrKWlmKChhfHx2IGluIGcpJiYocD1iKHk9Z1t2XSx2LGgpLHQpKWlmKGUpU1t2XT1wO2Vsc2UgaWYocClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIHY7Y2FzZSAyOnppKFMseSl9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzp6aShTLHkpfXJldHVybiBpPy0xOnJ8fG8/bzpTfX0scWk9e2ZvckVhY2g6S2koMCksbWFwOktpKDEpLGZpbHRlcjpLaSgyKSxzb21lOktpKDMpLGV2ZXJ5OktpKDQpLGZpbmQ6S2koNSksZmluZEluZGV4OktpKDYpLGZpbHRlclJlamVjdDpLaSg3KX0sSmk9RW4sWWk9byxYaT1rLCRpPWQsUWk9SSxaaT1idCx0dT1pLGV1PSR0LG51PW90LHJ1PWVuLG91PVksaXU9d2UsdXU9cXIsYXU9VSxjdT1fbyxzdT1wbyxmdT1HbyxsdT1Wbyx5dT1YbyxwdT1QLGh1PVhlLGd1PUpyLGR1PXgsYnU9UW8sdnU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBaby5mKHQsZSxuKX0sbXU9enQsU3U9cm8sd3U9bmUsT3U9bGUsTHU9dGksanU9c2ksQXU9aGksUHU9TGksSXU9X2ksRXU9cWkuZm9yRWFjaCxUdT1BbygiaGlkZGVuIiksa3U9IlN5bWJvbCIseHU9InByb3RvdHlwZSIsRnU9SXUuc2V0LEN1PUl1LmdldHRlckZvcihrdSksTnU9T2JqZWN0W3h1XSxNdT1ZaS5TeW1ib2wsUnU9TXUmJk11W3h1XSxVdT1ZaS5SYW5nZUVycm9yLER1PVlpLlR5cGVFcnJvcixfdT1ZaS5RT2JqZWN0LEd1PXB1LmYsSHU9aHUuZixCdT1sdS5mLFZ1PWR1LmYsV3U9JGkoW10ucHVzaCksenU9bXUoInN5bWJvbHMiKSxLdT1tdSgib3Atc3ltYm9scyIpLHF1PW11KCJ3a3MiKSxKdT0hX3V8fCFfdVt4dV18fCFfdVt4dV0uZmluZENoaWxkLFl1PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1HdShOdSxlKTtyJiZkZWxldGUgTnVbZV0sSHUodCxlLG4pLHImJnQhPT1OdSYmSHUoTnUsZSxyKX0sWHU9UWkmJnR1KChmdW5jdGlvbigpe3JldHVybiA3IT09Y3UoSHUoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSHUodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP1l1Okh1LCR1PWZ1bmN0aW9uKHQsZSl7dmFyIG49enVbdF09Y3UoUnUpO3JldHVybiBGdShuLHt0eXBlOmt1LHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxRaXx8KG4uZGVzY3JpcHRpb249ZSksbn0sUXU9ZnVuY3Rpb24odCxlLG4pe3Q9PT1OdSYmUXUoS3UsZSxuKSxydSh0KTt2YXIgcj1pdShlKTtyZXR1cm4gcnUobiksZXUoenUscik/KG4uZW51bWVyYWJsZT8oZXUodCxUdSkmJnRbVHVdW3JdJiYodFtUdV1bcl09ITEpLG49Y3Uobix7ZW51bWVyYWJsZTphdSgwLCExKX0pKTooZXUodCxUdSl8fEh1KHQsVHUsYXUoMSxjdShudWxsKSkpLHRbVHVdW3JdPSEwKSxYdSh0LHIsbikpOkh1KHQscixuKX0sWnU9ZnVuY3Rpb24odCxlKXtydSh0KTt2YXIgbj1vdShlKSxyPXN1KG4pLmNvbmNhdChyYShuKSk7cmV0dXJuIEV1KHIsKGZ1bmN0aW9uKGUpe1FpJiYhWGkodGEsbixlKXx8UXUodCxlLG5bZV0pfSkpLHR9LHRhPWZ1bmN0aW9uKHQpe3ZhciBlPWl1KHQpLG49WGkoVnUsdGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1OdSYmZXUoenUsZSkmJiFldShLdSxlKSkmJighKG58fCFldSh0aGlzLGUpfHwhZXUoenUsZSl8fGV1KHRoaXMsVHUpJiZ0aGlzW1R1XVtlXSl8fG4pfSxlYT1mdW5jdGlvbih0LGUpe3ZhciBuPW91KHQpLHI9aXUoZSk7aWYobiE9PU51fHwhZXUoenUscil8fGV1KEt1LHIpKXt2YXIgbz1HdShuLHIpO3JldHVybiFvfHwhZXUoenUscil8fGV1KG4sVHUpJiZuW1R1XVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LG5hPWZ1bmN0aW9uKHQpe3ZhciBlPUJ1KG91KHQpKSxuPVtdO3JldHVybiBFdShlLChmdW5jdGlvbih0KXtldSh6dSx0KXx8ZXUoU3UsdCl8fFd1KG4sdCl9KSksbn0scmE9ZnVuY3Rpb24odCl7dmFyIGU9dD09PU51LG49QnUoZT9LdTpvdSh0KSkscj1bXTtyZXR1cm4gRXUobiwoZnVuY3Rpb24odCl7IWV1KHp1LHQpfHxlJiYhZXUoTnUsdCl8fFd1KHIsenVbdF0pfSkpLHJ9O1ppfHwoTXU9ZnVuY3Rpb24oKXtpZihudShSdSx0aGlzKSl0aHJvdyBuZXcgRHUoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT91dShhcmd1bWVudHNbMF0pOnZvaWQgMCxlPXd1KHQpLG49ZnVuY3Rpb24odCl7dmFyIHI9dm9pZCAwPT09dGhpcz9ZaTp0aGlzO3I9PT1OdSYmWGkobixLdSx0KSxldShyLFR1KSYmZXUocltUdV0sZSkmJihyW1R1XVtlXT0hMSk7dmFyIG89YXUoMSx0KTt0cnl7WHUocixlLG8pfWNhdGNoKGkpe2lmKCEoaSBpbnN0YW5jZW9mIFV1KSl0aHJvdyBpO1l1KHIsZSxvKX19O3JldHVybiBRaSYmSnUmJlh1KE51LGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLCR1KGUsdCl9LGJ1KFJ1PU11W3h1XSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBDdSh0aGlzKS50YWd9KSksYnUoTXUsIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4gJHUod3UodCksdCl9KSksZHUuZj10YSxodS5mPVF1LGd1LmY9WnUscHUuZj1lYSxmdS5mPWx1LmY9bmEseXUuZj1yYSxMdS5mPWZ1bmN0aW9uKHQpe3JldHVybiAkdShPdSh0KSx0KX0sUWkmJnZ1KFJ1LCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ3UodGhpcykuZGVzY3JpcHRpb259fSkpLEppKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IVppLHNoYW06IVppfSx7U3ltYm9sOk11fSksRXUoc3UocXUpLChmdW5jdGlvbih0KXtqdSh0KX0pKSxKaSh7dGFyZ2V0Omt1LHN0YXQ6ITAsZm9yY2VkOiFaaX0se3VzZVNldHRlcjpmdW5jdGlvbigpe0p1PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtKdT0hMX19KSxKaSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFaaSxzaGFtOiFRaX0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2N1KHQpOlp1KGN1KHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpRdSxkZWZpbmVQcm9wZXJ0aWVzOlp1LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjplYX0pLEppKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IVppfSx7Z2V0T3duUHJvcGVydHlOYW1lczpuYX0pLEF1KCksUHUoTXUsa3UpLFN1W1R1XT0hMDt2YXIgb2E9YnQmJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yLGlhPUVuLHVhPXJ0LGFhPSR0LGNhPXFyLHNhPXp0LGZhPW9hLGxhPXNhKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IikseWE9c2EoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtpYSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFmYX0se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1jYSh0KTtpZihhYShsYSxlKSlyZXR1cm4gbGFbZV07dmFyIG49dWEoIlN5bWJvbCIpKGUpO3JldHVybiBsYVtlXT1uLHlhW25dPWUsbn19KTt2YXIgcGE9RW4saGE9JHQsZ2E9THQsZGE9QXQsYmE9b2EsdmE9enQoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtwYSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFiYX0se2tleUZvcjpmdW5jdGlvbih0KXtpZighZ2EodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihkYSh0KSsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGhhKHZhLHQpKXJldHVybiB2YVt0XX19KTt2YXIgbWE9Um4sU2E9QSx3YT1TLE9hPXFyLExhPWQoW10ucHVzaCksamE9RW4sQWE9cnQsUGE9bCxJYT1rLEVhPWQsVGE9aSxrYT1BLHhhPUx0LEZhPVdvLENhPWZ1bmN0aW9uKHQpe2lmKFNhKHQpKXJldHVybiB0O2lmKG1hKHQpKXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bXSxyPTA7cjxlO3IrKyl7dmFyIG89dFtyXTsic3RyaW5nIj09dHlwZW9mIG8/TGEobixvKToibnVtYmVyIiE9dHlwZW9mIG8mJiJOdW1iZXIiIT09d2EobykmJiJTdHJpbmciIT09d2Eobyl8fExhKG4sT2EobykpfXZhciBpPW4ubGVuZ3RoLHU9ITA7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodSlyZXR1cm4gdT0hMSxlO2lmKG1hKHRoaXMpKXJldHVybiBlO2Zvcih2YXIgcj0wO3I8aTtyKyspaWYobltyXT09PXQpcmV0dXJuIGV9fX0sTmE9YnQsTWE9U3RyaW5nLFJhPUFhKCJKU09OIiwic3RyaW5naWZ5IiksVWE9RWEoLy4vLmV4ZWMpLERhPUVhKCIiLmNoYXJBdCksX2E9RWEoIiIuY2hhckNvZGVBdCksR2E9RWEoIiIucmVwbGFjZSksSGE9RWEoMS4udG9TdHJpbmcpLEJhPS9bXHVEODAwLVx1REZGRl0vZyxWYT0vXltcdUQ4MDAtXHVEQkZGXSQvLFdhPS9eW1x1REMwMC1cdURGRkZdJC8semE9IU5hfHxUYSgoZnVuY3Rpb24oKXt2YXIgdD1BYSgiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PVJhKFt0XSl8fCJ7fSIhPT1SYSh7YTp0fSl8fCJ7fSIhPT1SYShPYmplY3QodCkpfSkpLEthPVRhKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PVJhKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1SYSgiXHVkZWFkIil9KSkscWE9ZnVuY3Rpb24odCxlKXt2YXIgbj1GYShhcmd1bWVudHMpLHI9Q2EoZSk7aWYoa2Eocil8fHZvaWQgMCE9PXQmJiF4YSh0KSlyZXR1cm4gblsxXT1mdW5jdGlvbih0LGUpe2lmKGthKHIpJiYoZT1JYShyLHRoaXMsTWEodCksZSkpLCF4YShlKSlyZXR1cm4gZX0sUGEoUmEsbnVsbCxuKX0sSmE9ZnVuY3Rpb24odCxlLG4pe3ZhciByPURhKG4sZS0xKSxvPURhKG4sZSsxKTtyZXR1cm4gVWEoVmEsdCkmJiFVYShXYSxvKXx8VWEoV2EsdCkmJiFVYShWYSxyKT8iXFx1IitIYShfYSh0LDApLDE2KTp0fTtSYSYmamEoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDp6YXx8S2F9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPUZhKGFyZ3VtZW50cyksbz1QYSh6YT9xYTpSYSxudWxsLHIpO3JldHVybiBLYSYmInN0cmluZyI9PXR5cGVvZiBvP0dhKG8sQmEsSmEpOm99fSk7dmFyIFlhPVhvLFhhPUp0O0VuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWJ0fHxpKChmdW5jdGlvbigpe1lhLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7dmFyIGU9WWEuZjtyZXR1cm4gZT9lKFhhKHQpKTpbXX19KSxzaSgiYXN5bmNJdGVyYXRvciIpLHNpKCJoYXNJbnN0YW5jZSIpLHNpKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxzaSgiaXRlcmF0b3IiKSxzaSgibWF0Y2giKSxzaSgibWF0Y2hBbGwiKSxzaSgicmVwbGFjZSIpLHNpKCJzZWFyY2giKSxzaSgic3BlY2llcyIpLHNpKCJzcGxpdCIpO3ZhciAkYT1oaTtzaSgidG9QcmltaXRpdmUiKSwkYSgpO3ZhciBRYT1ydCxaYT1MaTtzaSgidG9TdHJpbmdUYWciKSxaYShRYSgiU3ltYm9sIiksIlN5bWJvbCIpLHNpKCJ1bnNjb3BhYmxlcyIpLExpKG8uSlNPTiwiSlNPTiIsITApO3ZhciB0YyxlYyxuYyxyYz1RLlN5bWJvbCxvYz17fSxpYz1JLHVjPSR0LGFjPUZ1bmN0aW9uLnByb3RvdHlwZSxjYz1pYyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzYz11YyhhYywibmFtZSIpLGZjPXtFWElTVFM6c2MsUFJPUEVSOnNjJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpzYyYmKCFpY3x8aWMmJmNjKGFjLCJuYW1lIikuY29uZmlndXJhYmxlKX0sbGM9IWkoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSkseWM9JHQscGM9QSxoYz1KdCxnYz1sYyxkYz1BbygiSUVfUFJPVE8iKSxiYz1PYmplY3QsdmM9YmMucHJvdG90eXBlLG1jPWdjP2JjLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3ZhciBlPWhjKHQpO2lmKHljKGUsZGMpKXJldHVybiBlW2RjXTt2YXIgbj1lLmNvbnN0cnVjdG9yO3JldHVybiBwYyhuKSYmZSBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIGJjP3ZjOm51bGx9LFNjPWksd2M9QSxPYz0kLExjPV9vLGpjPW1jLEFjPVFvLFBjPWxlKCJpdGVyYXRvciIpLEljPSExO1tdLmtleXMmJigibmV4dCJpbihuYz1bXS5rZXlzKCkpPyhlYz1qYyhqYyhuYykpKSE9PU9iamVjdC5wcm90b3R5cGUmJih0Yz1lYyk6SWM9ITApO3ZhciBFYz0hT2ModGMpfHxTYygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGNbUGNdLmNhbGwodCkhPT10fSkpO3djKCh0Yz1FYz97fTpMYyh0YykpW1BjXSl8fEFjKHRjLFBjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBUYz17SXRlcmF0b3JQcm90b3R5cGU6dGMsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpJY30sa2M9VGMuSXRlcmF0b3JQcm90b3R5cGUseGM9X28sRmM9VSxDYz1MaSxOYz1vYyxNYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxSYz1FbixVYz1rLERjPWZjLF9jPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPXhjKGtjLHtuZXh0OkZjKCshcixuKX0pLENjKHQsbywhMSwhMCksTmNbb109TWMsdH0sR2M9bWMsSGM9TGksQmM9UW8sVmM9b2MsV2M9VGMsemM9RGMuUFJPUEVSLEtjPVdjLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscWM9bGUoIml0ZXJhdG9yIiksSmM9ImtleXMiLFljPSJ2YWx1ZXMiLFhjPSJlbnRyaWVzIiwkYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxRYz1mdW5jdGlvbih0LGUsbixyLG8saSx1KXtfYyhuLGUscik7dmFyIGEsYyxzLGY9ZnVuY3Rpb24odCl7aWYodD09PW8mJmcpcmV0dXJuIGc7aWYoIUtjJiZ0JiZ0IGluIHApcmV0dXJuIHBbdF07c3dpdGNoKHQpe2Nhc2UgSmM6Y2FzZSBZYzpjYXNlIFhjOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxsPWUrIiBJdGVyYXRvciIseT0hMSxwPXQucHJvdG90eXBlLGg9cFtxY118fHBbIkBAaXRlcmF0b3IiXXx8byYmcFtvXSxnPSFLYyYmaHx8ZihvKSxkPSJBcnJheSI9PT1lJiZwLmVudHJpZXN8fGg7aWYoZCYmKGE9R2MoZC5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmYS5uZXh0JiYoSGMoYSxsLCEwLCEwKSxWY1tsXT0kYyksemMmJm89PT1ZYyYmaCYmaC5uYW1lIT09WWMmJih5PSEwLGc9ZnVuY3Rpb24oKXtyZXR1cm4gVWMoaCx0aGlzKX0pLG8paWYoYz17dmFsdWVzOmYoWWMpLGtleXM6aT9nOmYoSmMpLGVudHJpZXM6ZihYYyl9LHUpZm9yKHMgaW4gYykoS2N8fHl8fCEocyBpbiBwKSkmJkJjKHAscyxjW3NdKTtlbHNlIFJjKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6S2N8fHl9LGMpO3JldHVybiB1JiZwW3FjXSE9PWcmJkJjKHAscWMsZyx7bmFtZTpvfSksVmNbZV09ZyxjfSxaYz1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19LHRzPVksZXM9b2MsbnM9X2k7WGUuZjt2YXIgcnM9UWMsb3M9WmMsaXM9IkFycmF5IEl0ZXJhdG9yIix1cz1ucy5zZXQsYXM9bnMuZ2V0dGVyRm9yKGlzKTtycyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3VzKHRoaXMse3R5cGU6aXMsdGFyZ2V0OnRzKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1hcyh0aGlzKSxlPXQudGFyZ2V0LG49dC5pbmRleCsrO2lmKCFlfHxuPj1lLmxlbmd0aClyZXR1cm4gdC50YXJnZXQ9bnVsbCxvcyh2b2lkIDAsITApO3N3aXRjaCh0LmtpbmQpe2Nhc2Uia2V5cyI6cmV0dXJuIG9zKG4sITEpO2Nhc2UidmFsdWVzIjpyZXR1cm4gb3MoZVtuXSwhMSl9cmV0dXJuIG9zKFtuLGVbbl1dLCExKX0pLCJ2YWx1ZXMiKSxlcy5Bcmd1bWVudHM9ZXMuQXJyYXk7dmFyIGNzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxzcz1vLGZzPUxpLGxzPW9jO2Zvcih2YXIgeXMgaW4gY3MpZnMoc3NbeXNdLHlzKSxsc1t5c109bHMuQXJyYXk7dmFyIHBzPXJjLGhzPWxlLGdzPVhlLmYsZHM9aHMoIm1ldGFkYXRhIiksYnM9RnVuY3Rpb24ucHJvdG90eXBlO3ZvaWQgMD09PWJzW2RzXSYmZ3MoYnMsZHMse3ZhbHVlOm51bGx9KSxzaSgiYXN5bmNEaXNwb3NlIiksc2koImRpc3Bvc2UiKSxzaSgibWV0YWRhdGEiKTt2YXIgdnM9cHMsbXM9ZCxTcz1ydCgiU3ltYm9sIiksd3M9U3Mua2V5Rm9yLE9zPW1zKFNzLnByb3RvdHlwZS52YWx1ZU9mKSxMcz1Tcy5pc1JlZ2lzdGVyZWRTeW1ib2x8fGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdm9pZCAwIT09d3MoT3ModCkpfWNhdGNoKGUpe3JldHVybiExfX07RW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwfSx7aXNSZWdpc3RlcmVkU3ltYm9sOkxzfSk7Zm9yKHZhciBqcz16dCxBcz1ydCxQcz1kLElzPUx0LEVzPWxlLFRzPUFzKCJTeW1ib2wiKSxrcz1Ucy5pc1dlbGxLbm93blN5bWJvbCx4cz1BcygiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIpLEZzPVBzKFRzLnByb3RvdHlwZS52YWx1ZU9mKSxDcz1qcygid2tzIiksTnM9MCxNcz14cyhUcyksUnM9TXMubGVuZ3RoO05zPFJzO05zKyspdHJ5e3ZhciBVcz1Nc1tOc107SXMoVHNbVXNdKSYmRXMoVXMpfWNhdGNoKGJmKXt9dmFyIERzPWZ1bmN0aW9uKHQpe2lmKGtzJiZrcyh0KSlyZXR1cm4hMDt0cnl7Zm9yKHZhciBlPUZzKHQpLG49MCxyPXhzKENzKSxvPXIubGVuZ3RoO248bztuKyspaWYoQ3NbcltuXV09PWUpcmV0dXJuITB9Y2F0Y2goYmYpe31yZXR1cm4hMX07RW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLGZvcmNlZDohMH0se2lzV2VsbEtub3duU3ltYm9sOkRzfSksc2koImN1c3RvbU1hdGNoZXIiKSxzaSgib2JzZXJ2YWJsZSIpLEVuKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxuYW1lOiJpc1JlZ2lzdGVyZWRTeW1ib2wifSx7aXNSZWdpc3RlcmVkOkxzfSksRW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzV2VsbEtub3duU3ltYm9sIixmb3JjZWQ6ITB9LHtpc1dlbGxLbm93bjpEc30pLHNpKCJtYXRjaGVyIiksc2koIm1ldGFkYXRhS2V5Iiksc2koInBhdHRlcm5NYXRjaCIpLHNpKCJyZXBsYWNlQWxsIik7dmFyIF9zPWUodnMpLEdzPWQsSHM9R24sQnM9cXIsVnM9SyxXcz1HcygiIi5jaGFyQXQpLHpzPUdzKCIiLmNoYXJDb2RlQXQpLEtzPUdzKCIiLnNsaWNlKSxxcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcixvLGk9QnMoVnMoZSkpLHU9SHMobiksYT1pLmxlbmd0aDtyZXR1cm4gdTwwfHx1Pj1hP3Q/IiI6dm9pZCAwOihyPXpzKGksdSkpPDU1Mjk2fHxyPjU2MzE5fHx1KzE9PT1hfHwobz16cyhpLHUrMSkpPDU2MzIwfHxvPjU3MzQzP3Q/V3MoaSx1KTpyOnQ/S3MoaSx1LHUrMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sSnM9e2NvZGVBdDpxcyghMSksY2hhckF0OnFzKCEwKX0uY2hhckF0LFlzPXFyLFhzPV9pLCRzPVFjLFFzPVpjLFpzPSJTdHJpbmcgSXRlcmF0b3IiLHRmPVhzLnNldCxlZj1Ycy5nZXR0ZXJGb3IoWnMpOyRzKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7dGYodGhpcyx7dHlwZTpacyxzdHJpbmc6WXModCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1lZih0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/UXModm9pZCAwLCEwKToodD1KcyhuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLFFzKHQsITEpKX0pKTt2YXIgbmY9ZSh0aS5mKCJpdGVyYXRvciIpKTtmdW5jdGlvbiByZih0KXtyZXR1cm4ocmY9ImZ1bmN0aW9uIj09dHlwZW9mIF9zJiYic3ltYm9sIj09dHlwZW9mIG5mP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBfcyYmdC5jb25zdHJ1Y3Rvcj09PV9zJiZ0IT09X3MucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIG9mPWUodGkuZigidG9QcmltaXRpdmUiKSk7ZnVuY3Rpb24gdWYodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9cmYodCl8fCF0KXJldHVybiB0O3ZhciBuPXRbb2ZdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXJmKHIpKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXJmKGUpP2U6ZSsiIn1mdW5jdGlvbiBhZih0LGUsbil7cmV0dXJuKGU9dWYoZSkpaW4gdD9Obih0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1jb25zdCBjZj17Z2V0TkFMVW5pdHModCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZih0Lmxlbmd0aC10LnBvc2l0aW9uPDQpcmV0dXJuW107Y29uc3R7cG9zaXRpb246bn09dDtyZXR1cm4gMT09PXQuZ2V0SW50MzIobil8fDA9PT10LmdldEludDE2KG4pJiYxPT09dC5nZXRJbnQ4KG4rMik/Y2YuZ2V0QW5uZXhiTmFscyh0LGUpOmNmLmdldEF2Y2NOYWxzKHQsZSl9LGdldEFubmV4Yk5hbHModCxlKXtjb25zdCBuPVtdO2xldCByPWNmLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLG89ci5wb3MsaT1vO2Zvcig7bzx0Lmxlbmd0aC00Oyl7Y29uc3QgdT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShvLG8rci5oZWFkZXJMZW5ndGgpKTtyLnBvcz09PXQucG9zaXRpb24mJnQuc2tpcChyLmhlYWRlckxlbmd0aCkscj1jZi5nZXRIZWFkZXJQb3NpdGlvbkFubmV4Qih0KSxpPXIucG9zO2NvbnN0IGE9e2hlYWRlcjp1LGJvZHk6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2Uobyt1LmJ5dGVMZW5ndGgsaSkpLHR5cGU6LTF9O2U/Y2YuYW5hbHlzZUgyNjVOYWwoYSk6Y2YuYW5hbHlzZU5hbChhKSwoYS50eXBlPD05fHxlJiZhLnR5cGU8PTQwKSYmMCE9PWEudHlwZSYmbi5wdXNoKGEpLHQuc2tpcChpLXQucG9zaXRpb24pLG89aX1yZXR1cm4gbn0sZ2V0QXZjY05hbHModCxlKXtjb25zdCBuPVtdO2Zvcig7dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7Y29uc3Qgcj10LmdldEludDMyKHQucG9zaXRpb24pO2lmKCEodC5sZW5ndGgtdC5wb3NpdGlvbj49cikpYnJlYWs7e2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2UodC5wb3NpdGlvbix0LnBvc2l0aW9uKzQpKTt0LnNraXAoNCk7Y29uc3QgaT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZSh0LnBvc2l0aW9uLHQucG9zaXRpb24rcikpO3Quc2tpcChyKTtjb25zdCB1PXtoZWFkZXI6byxib2R5OmksdHlwZTotMX07ZT9jZi5hbmFseXNlSDI2NU5hbCh1KTpjZi5hbmFseXNlTmFsKHUpLHUudHlwZTw9OSYmMCE9PXUudHlwZSYmbi5wdXNoKHUpfX1yZXR1cm4gbn0sYW5hbHlzZU5hbCh0KXtjb25zdCBlPTMxJnQuYm9keVswXTtzd2l0Y2godC50eXBlPWUsZSl7Y2FzZSAxOnQubmRyPSEwO2JyZWFrO2Nhc2UgNTp0Lmlkcj0hMDticmVhaztjYXNlIDY6dC5zZWk9ITA7YnJlYWs7Y2FzZSA3OnQuc3BzPSEwO2JyZWFrO2Nhc2UgODp0LnBwcz0hMH19LGFuYWx5c2VIMjY1TmFsKHQpe2NvbnN0IGU9KDEyNiZ0LmJvZHlbMF0pPj4xO3N3aXRjaCh0LnR5cGU9ZSxlKXtjYXNlIDM5OmNhc2UgNDA6dC5zZWk9ITB9fSxnZXRIZWFkZXJQb3NpdGlvbkFubmV4Qih0KXtsZXQgZT10LnBvc2l0aW9uLG49MDtjb25zdCByPXQubGVuZ3RoO2Zvcig7MyE9PW4mJjQhPT1uJiZlPHItNDspMD09PXQuZ2V0SW50MTYoZSk/MT09PXQuZ2V0SW50MTYoZSsyKT9uPTQ6MT09PXQuZ2V0SW50OChlKzIpP249MzplKys6ZSsrO3JldHVybiBlPT09ci00JiYoMD09PXQuZ2V0SW50MTYoZSk/MT09PXQuZ2V0SW50MTYoZSsyKT9uPTQ6ZT1yOihlKyssMD09PXQuZ2V0SW50MTYoZSkmJjE9PT10LmdldEludDgoZSk/bj0zOmU9cikpLHtwb3M6ZSxoZWFkZXJMZW5ndGg6bn19LGlzSDI2NVZpZGVvRnJhbWUodCl7dmFyIGU7cmV0dXJuKChudWxsPT09KGU9dC5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PWV8fG51bGw9PT0oZT1lLmNhbGwodCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19LHNmPW5ldyBVaW50OEFycmF5KFsxMDksMTY3LDUzLDE5MCwxMDMsOTAsNzIsMSwxNzAsODksNjMsMTY0LDE5NCwxOTksMTksODVdKSxmZj1uZXcgVWludDhBcnJheShbMTA5LDE2Nyw1MywxOTAsMTAzLDkwLDcyLDEsMTcwLDg5LDYzLDE2NCwxOTQsMTk5LDE5LDg0XSksbGY9bmV3IFVpbnQ4QXJyYXkoWzMxLDIzOSwzLDUwLDI0MiwxMjAsNzYsODUsMTY5LDQyLDE2MSw5MSw3NSwxODYsMjJdKTtmdW5jdGlvbiB5Zih0KXtjb25zdCBlPVtdO2Zvcig7dD49MjU1Oyl0LT0yNTUsZS5wdXNoKDI1NSk7cmV0dXJuIGUucHVzaCh0KSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBwZih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPTA7Zm9yKDsyNTU9PT10W2VdJiZlPHQuYnl0ZUxlbmd0aDspZSsrLG4rPTI1NTtyZXR1cm4gZTx0LmJ5dGVMZW5ndGgmJihuKz10W2UrK10pLFtuLGVdfWNvbnN0IGhmPW5ldyBVaW50OEFycmF5KFs4MCwxXSk7Y2xhc3MgZ2Z7c3RhdGljIGdlbmVyYXRlU0VJKHQsZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPW5ldyBVaW50OEFycmF5KFswLDAsMCwxXSksbz1lP2hmOm5ldyBVaW50OEFycmF5KFs2XSksaT1uZXcgVWludDhBcnJheShbNV0pLHU9Z2YuX191dWlkfHwobj9zZjpmZiksYT15Zih0LmJ5dGVMZW5ndGgrdS5ieXRlTGVuZ3RoKSxjPSh0PT57Y29uc3QgZT1bXTtsZXQgbj0wO2Zvcihjb25zdCByIG9mIHQpbj49MiYmcjw9MyYmKGUucHVzaCgzKSxuPTApLDA9PT1yP24rKzpuPTAsZS5wdXNoKHIpO3JldHVybiBuZXcgVWludDhBcnJheShlKX0pKHQpO3JldHVybiBuZXcgVWludDhBcnJheShbLi4uciwuLi5vLC4uLmksLi4uYSwuLi51LC4uLmMsMTI4XSl9c3RhdGljIGRlY29kZVNFSUJvZHkodCxlKXtjb25zdCBuPSh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dPD0zJiYwPT09dFtuLTFdJiYwPT09dFtuLTJdfHxlLnB1c2godFtuXSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSkodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpO2lmKG4uYnl0ZUxlbmd0aDwyKXJldHVybjtsZXQgcj0wO2NvbnN0IG89ZT8yOjE7aWYoNSE9PW5bb10mJjEwMCE9PW5bb10pcmV0dXJuO3IrPTErbztjb25zdFtpLHVdPXBmKG4scik7cj11O2xldCBhPTI7Y29uc3QgYz1yK2k7bi5ieXRlTGVuZ3RoPj1mZi5ieXRlTGVuZ3RoJiZpPj1mZi5ieXRlTGVuZ3RoJiYobi5zbGljZShyLHIrZmYuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PWZmLnRvU3RyaW5nKCl8fG4uc2xpY2UocixyK2xmLmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCk9PT1sZi50b1N0cmluZygpKT8ocis9ZmYuYnl0ZUxlbmd0aCxhPTEpOm4uYnl0ZUxlbmd0aD49ZmYuYnl0ZUxlbmd0aCYmaT49ZmYuYnl0ZUxlbmd0aCYmbi5zbGljZShyLHIrc2YuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PXNmLnRvU3RyaW5nKCkmJihyKz1zZi5ieXRlTGVuZ3RoLGE9MCk7cmV0dXJue3R5cGU6YSxwYXlsb2FkOm4uc2xpY2UocixjKX19c3RhdGljIHBhcnNlSW50ZXJuYWxTRUkodCl7Y29uc3QgZT1uZXcgTWFwO2xldCBuPTA7aWYoMD09PXQudHlwZSl7Zm9yKDt0LnBheWxvYWQuYnl0ZUxlbmd0aC1uPj0yOyl7Y29uc3RbcixvXT1wZih0LnBheWxvYWQsbik7bj1vO2NvbnN0W2ksdV09cGYodC5wYXlsb2FkLG4pO2lmKG49dSxlLmdldChyKXx8IShpPD10LnBheWxvYWQuYnl0ZUxlbmd0aC1uKSlicmVhaztlLnNldChyLHQucGF5bG9hZC5zbGljZShuLG4raSkpLG4rPWl9cmV0dXJuIGV9fXN0YXRpYyBtYWtlSW50ZXJuYWxTZWkodCl7Y29uc3QgZT1bXTtmb3IoY29uc3RbbyxpXW9mIHQpe2NvbnN0IHQ9eWYobyksbj15ZihpLmJ5dGVMZW5ndGgpO2UucHVzaCh0LG4saSl9Y29uc3Qgbj1lLnJlZHVjZSgoKHQsZSk9PnQrZS5ieXRlTGVuZ3RoKSwwKSxyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBlLnJlZHVjZSgoKHQsZSk9PihyLnNldChlLHQpLHQrZS5ieXRlTGVuZ3RoKSksMCkscn19YWYoZ2YsIl9fdXVpZCIsdm9pZCAwKTtjbGFzcyBkZntjb25zdHJ1Y3Rvcih0KXthZih0aGlzLCJzZWlMaXN0IixbXSksYWYodGhpcywibWF4U0VJQ291bnQiLDEpLHRoaXMubWF4U0VJQ291bnQ9dC5tYXhTRUlDb3VudH1zZW5kU0VJVHJhbnNmb3JtKHQsZSl7Y29uc3R7bWF4U0VJQ291bnQ6bixzZWlMaXN0OnJ9PXRoaXM7aWYoIXRoaXMuc2VpTGlzdC5sZW5ndGgpcmV0dXJuIHZvaWQgZS5lbnF1ZXVlKHQpO2NvbnN0IG89W107bGV0IGk9MDtmb3IoY29uc3QgYyBvZiByKXtpZihvLmxlbmd0aD49bilicmVhaztjb25zdCBlPWdmLmdlbmVyYXRlU0VJKGMuY29udGVudCxjZi5pc0gyNjVWaWRlb0ZyYW1lKHQpKTtpKz1lLmJ5dGVMZW5ndGgsYy5yZXBlYXRDb3VudC0tLG8ucHVzaChlKX10aGlzLnNlaUxpc3Q9ci5maWx0ZXIoKHQ9PnQucmVwZWF0Q291bnQ+MCkpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkoaSt0LmRhdGEuYnl0ZUxlbmd0aCk7dS5zZXQobmV3IFVpbnQ4QXJyYXkodC5kYXRhKSk7bGV0IGE9dC5kYXRhLmJ5dGVMZW5ndGg7by5mb3JFYWNoKCh0PT57dS5zZXQodCxhKSxhKz10LmJ5dGVMZW5ndGh9KSksdC5kYXRhPXUuYnVmZmVyLGUuZW5xdWV1ZSh0KX1wdXNoU0VJKHQpe3RoaXMuc2VpTGlzdC5wdXNoKHQpfXJldm9rZVNFSSh0KXtjb25zdCBlPXRoaXMuc2VpTGlzdC5maW5kSW5kZXgoKGU9PmUudXVpZD09PXQpKTtyZXR1cm4tMSE9PWUmJih0aGlzLnNlaUxpc3Quc3BsaWNlKGUsMSksITApfX0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwodD0+e2NvbnN0e3RyYW5zZm9ybWVyOmV9PXQse3BvcnQ6bixtYXhTRUlDb3VudDpyfT1lLm9wdGlvbnMsbz1uZXcgZGYoe21heFNFSUNvdW50OnJ9KSxpPW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTpvLnNlbmRTRUlUcmFuc2Zvcm0uYmluZChvKX0pO24ub25tZXNzYWdlPXQ9PntsZXR7ZGF0YTplfT10O2NvbnN0e3R5cGU6cixjb250ZW50Oml9PWU7aWYoInB1c2giPT09cilvLnB1c2hTRUkoaSk7ZWxzZSBpZigicmV2b2tlIj09PXIpe2NvbnN0IHQ9by5yZXZva2VTRUkoaSk7cmV0dXJuIG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJldm9rZS1hY2siLGNvbnRlbnQ6e3V1aWQ6aSxpc05vdFNlbmQ6dH19KX19LGUucmVhZGFibGUucGlwZVRocm91Z2goaSkucGlwZVRvKGUud3JpdGFibGUpfSkpfSgpOwo=",YY=typeof window<"u"&&window.Blob&&new Blob([atob(fz)],{type:"text/javascript;charset=utf-8"});function u9A(){let A;try{if(A=YY&&(pQ||window.webkitURL).createObjectURL(YY),!A)throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+fz)}finally{!(typeof window<"u"&&navigator.userAgent.indexOf("Trident/")>0)&&A&&(pQ||window.webkitlRL).revokeObjectURL(A)}}const oB={getNALUnits(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(A.length-A.position<4)return[];const{position:g}=A;return A.getInt32(g)===1||A.getInt16(g)===0&&A.getInt8(g+2)===1?oB.getAnnexbNals(A,I):oB.getAvccNals(A,I)},getAnnexbNals(A,I){const g=[];let C=oB.getHeaderPositionAnnexB(A),Q=C.pos,B=Q;for(;Q=C))break;{const Q=new Uint8Array(A.buffer.slice(A.position,A.position+4));A.skip(4);const B=new Uint8Array(A.buffer.slice(A.position,A.position+C));A.skip(C);const E={header:Q,body:B,type:-1};I?oB.analyseH265Nal(E):oB.analyseNal(E),E.type<=9&&E.type!==0&&g.push(E)}}return g},analyseNal(A){const I=31&A.body[0];switch(A.type=I,I){case 1:A.ndr=!0;break;case 5:A.idr=!0;break;case 6:A.sei=!0;break;case 7:A.sps=!0;break;case 8:A.pps=!0}},analyseH265Nal(A){const I=(126&A.body[0])>>1;switch(A.type=I,I){case 39:case 40:A.sei=!0}},getHeaderPositionAnnexB(A){let I=A.position,g=0;const C=A.length;for(;g!==3&&g!==4&&I0&&uQ.readByte(this,C)}static readByte(I,g,C){let Q;switch(g){case 1:Q=C?I.getInt8(I.position):I.getUint8(I.position);break;case 2:Q=C?I.getInt16(I.position):I.getUint16(I.position);break;case 3:if(C)throw new Error("not supported for readByte 3");Q=I.getUint8(I.position)<<16,Q|=I.getUint8(I.position+1)<<8,Q|=I.getUint8(I.position+2);break;case 4:Q=C?I.getInt32(I.position):I.getUint32(I.position);break;case 8:if(C)throw new Error("not supported for readBody 8");Q=I.getUint32(I.position)<<32,Q|=I.getUint32(I.position+4);break;default:Q=""}return I.position+=g,Q}readUint8(){return uQ.readByte(this,1)}readUint16(){return uQ.readByte(this,2)}readUint24(){return uQ.readByte(this,3)}readUint32(){return uQ.readByte(this,4)}readUint64(){return uQ.readByte(this,8)}readInt8(){return uQ.readByte(this,1,!0)}readInt16(){return uQ.readByte(this,2,!0)}readInt32(){return uQ.readByte(this,4,!0)}writeUint32(I){return new Uint8Array([I>>>24&255,I>>>16&255,I>>>8&255,255&I])}}function Hz(A){return new TransformStream({transform(I,g){const C=oB.isH265VideoFrame(I);oB.getNALUnits(new uQ(I.data),C).forEach(Q=>{if(Q.sei){const B=Dv.decodeSEIBody(Q.body,C);B&&(YA.SKIP_SEI_FILTER||B.type===cz.external)&&A(B)}}),g.enqueue(I)}})}typeof self<"u"&&self.constructor.name==="DedicatedWorkerGlobalScope"&&self.addEventListener("rtctransform",A=>{const{transformer:I}=A,{port:g}=I.options,C=Hz(Q=>{g.postMessage(Q,[Q.payload.buffer])});I.readable.pipeThrough(C).pipeTo(A.transformer.writable)});class xz{constructor(I){P(this,"seiList",[]),P(this,"maxSEICount",1),this.maxSEICount=I.maxSEICount}sendSEITransform(I,g){const{maxSEICount:C,seiList:Q}=this;if(!this.seiList.length)return void g.enqueue(I);const B=[];let E=0;for(const o of Q){if(B.length>=C)break;const t=Dv.generateSEI(o.content,oB.isH265VideoFrame(I));E+=t.byteLength,o.repeatCount--,B.push(t)}this.seiList=Q.filter(o=>o.repeatCount>0);const i=new Uint8Array(E+I.data.byteLength);i.set(new Uint8Array(I.data));let e=I.data.byteLength;B.forEach(o=>{i.set(o,e),e+=o.byteLength}),I.data=i.buffer,g.enqueue(I)}pushSEI(I){this.seiList.push(I)}revokeSEI(I){const g=this.seiList.findIndex(C=>C.uuid===I);return g!==-1&&(this.seiList.splice(g,1),!0)}}typeof self<"u"&&self.constructor.name==="DedicatedWorkerGlobalScope"&&self.addEventListener("rtctransform",A=>{const{transformer:I}=A,{port:g,maxSEICount:C}=I.options,Q=new xz({maxSEICount:C}),B=new TransformStream({transform:Q.sendSEITransform.bind(Q)});g.onmessage=E=>{let{data:i}=E;const{type:e,content:o}=i;if(e==="push")Q.pushSEI(o);else if(e==="revoke"){const t=Q.revokeSEI(o);return g.postMessage({type:"revoke-ack",content:{uuid:o,isNotSend:t}})}},I.readable.pipeThrough(B).pipeTo(I.writable)});class Oz extends iQ{constructor(I){super(),P(this,"isScreen",!1),P(this,"audioMid",void 0),P(this,"videoMid",void 0),P(this,"audioMLine",void 0),P(this,"videoMLine",void 0),P(this,"videoTransceiver",void 0),P(this,"audioTransceiver",void 0),P(this,"vendorHandler",void 0),P(this,"vendorCode",0),P(this,"engineId",void 0),P(this,"logger",void 0),P(this,"__seiHelper",Dv),P(this,"logName","StreamBase"),this._ctx=I,this.engineId=I.id,this.logger=new uA(this.constructor.name,2,I.id)}stopReport(I){this.statsReport.stopReport(I)}destroy(){var I,g;delete this.audioMid,delete this.videoMid,this.statsReport.destroy(),(I=this.observer)===null||I===void 0||I.reset(),delete this.videoTransceiver,delete this.audioTransceiver,(g=this.vendorHandler)===null||g===void 0||g.destroy(),this.vendorCode=0,delete this.vendorHandler}}var uC=(A=>(A[A.INIT=0]="INIT",A[A.SUB_ING=1]="SUB_ING",A[A.SUB_ED=2]="SUB_ED",A))(uC||{});class b9 extends Oz{constructor(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Xs.STREAM_INDEX_MAIN;super(I),P(this,"id",void 0),P(this,"stream",void 0),P(this,"streamId",void 0),P(this,"videoTrack",void 0),P(this,"audioTrack",void 0),P(this,"subVideoDescriptions",[]),P(this,"observer",void 0),P(this,"statsReport",void 0),P(this,"pubAudio",!1),P(this,"pubVideo",!1),P(this,"blackFrameRenderInterval",void 0),P(this,"blackFrameLifetimeInterval",void 0),P(this,"pubAttributes",void 0),P(this,"pcSessionId",void 0),P(this,"maxSeiCount",1),P(this,"preReports",{audio:{},video:{}}),P(this,"remoteSdp",void 0),P(this,"currentVideoCodec",void 0),P(this,"_changeCodecs",[]),P(this,"_videoCaps",[]),P(this,"_sendSEIHandler",void 0),P(this,"_trackMatchingTimer",void 0),P(this,"logName","LocalStream"),this.stream=new MediaStream,this.id=tC(),this.pubAttributes={localaudio:!1,localvideo:!1,videostream:!1,audiostream:!1,extvideo:!1,extaudio:!1,videoDescriptions:[],videoType:eC.NORMAL},this.isScreen=g===Xs.STREAM_INDEX_SCREEN,this.statsReport=new OlA(I,this);const C=lA("SEI_COUNT_FPS");typeof C=="number"&&C<=10&&(this.maxSeiCount=C),this._trackMatchingTimer=setInterval(this._checkTrackMatching.bind(this),5e3)}get enableSimulcast(){return!this.isScreen&&this._ctx.videoProfile.getSimulcastMode()}get videoEncodeConfig(){return this.isScreen?[this._ctx.videoProfile.getScreenEncodeConfig()]:this._ctx.videoProfile.getVideoEncodeConfig()}get audioHasCapture(){return this.pubAttributes.localaudio}get audioHasPublish(){return this.pubAttributes.audiostream}get videoHasCapture(){return this.pubAttributes.localvideo}get videoHasPublish(){return this.pubAttributes.videostream}get isEmptyStream(){return!this.audioTrack&&!this.videoTrack}get initStreamId(){return this.stream.id}async getSelectedCodec(){var I;const g=this._changeCodecs.length>0?this._changeCodecs:this._videoCaps.length>0?this._videoCaps:await qa(),C=this._ctx.videoProfile.getPreferCodec(this.isScreen),Q=this.isScreen?this._ctx.targetScreenCodec:this._ctx.targetCodec;if(C&&C!==Lt.AUTO){if(C===Lt.H264&&g.includes(bI.H264))return bI.H264;if(C===Lt.VP8&&g.includes(bI.VP8))return bI.VP8;if(C===Lt.ByteVC1&&g.includes(bI.ByteVC1))return bI.ByteVC1}if((I=this._ctx.serverConfig)!==null&&I!==void 0&&I.videoCodec&&g.includes(this._ctx.serverConfig.videoCodec))return this._ctx.serverConfig.videoCodec;if(C===Lt.AUTO&&g.length>0)return g[0];if(Q&&g.includes(Q))return Q;if(g.includes(bI.H264))return bI.H264;if(g.includes(bI.VP8))return bI.VP8;throw new Error("no available codec")}startReport(I,g){this.statsReport.setLocalStreamStatsEvtInterval(I,g)}getLocalStreamStats(){return this.statsReport.getLocalStats()}initVideoEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.videoTransceiver||!this.videoTransceiver.sender)return void this.logger.warn("initVideoEncodedTransform","no sender found when trying to bind encodedTransform");const{sender:I}=this.videoTransceiver;if(JE()){const{readable:g,writable:C}=I.createEncodedStreams(),Q=new xz({maxSEICount:this.maxSeiCount}),B=new TransformStream({transform:Q.sendSEITransform.bind(Q)});g.pipeThrough(B).pipeTo(C),this._sendSEIHandler=Q}else if(hv()){const g=new u9A,C=new MessageChannel;this.videoTransceiver.sender.transform=new RTCRtpScriptTransform(g,{port:C.port2,maxSEICount:this.maxSeiCount},[C.port2]),this._sendSEIHandler={pushSEI:Q=>{C.port1.postMessage({type:"push",content:Q},[Q.content.buffer])},revokeSEI:async Q=>(C.port1.postMessage({type:"revoke",content:Q}),new Promise(B=>{C.port1.addEventListener("message",E=>{let{data:i}=E;const{type:e,content:o}=i,{uuid:t,isNotSend:s}=o;e==="revoke-ack"&&t===Q&&B(s)})}))}}}initAudioEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.audioTransceiver||!this.audioTransceiver.sender)return void this.logger.warn("initAudioEncodedTransform","no sender found when trying to bind encodedTransform");if(!JE())return void this.logger.warn("initAudioEncodedTransform","legacy EncodedTransform is not supported");const{sender:I}=this.audioTransceiver,{readable:g,writable:C}=I.createEncodedStreams();g.pipeThrough(new TransformStream({transform:(Q,B)=>{B.enqueue(Q)}})).pipeTo(C)}clean(){AI(this.engineId,"localstream_clean","".concat(new Error().stack),0,this.streamId||""),super.destroy(),this.subVideoDescriptions=[],clearTimeout(this.blackFrameLifetimeInterval),clearInterval(this.blackFrameRenderInterval)}switchTrackEnableState(I,g){var C;let Q;I==="audio"?Q=this.audioTrack:I==="video"&&(Q=this.videoTrack);const B=(C=Q)===null||C===void 0?void 0:C.mediaTrack;return!(!B||(B==null?void 0:B.enabled)===g)&&(B.enabled=g,!0)}resetStream(){this.stream=new MediaStream}genBlackFrame(){var I,g;this.logger.info("genBlackFrame()");const C=(I=this.videoEncodeConfig[0])!==null&&I!==void 0&&I.frameRate?jA((g=this.videoEncodeConfig[0])===null||g===void 0?void 0:g.frameRate):15,Q=Math.ceil(1e3/C),B=document.createElement("canvas"),E=B.getContext("2d");B.width=16,B.height=16;const i=e=>{e.fillRect(0,0,16,16)};return E&&(E.fillStyle="#000",i(E),this.blackFrameRenderInterval=window.setInterval(()=>{i(E)},Q),this.refreshBlackFrameLifetime()),B.captureStream(C).getVideoTracks()[0]}stopBlackFrame(){this.logger.info("stopBlackFrame()"),clearTimeout(this.blackFrameLifetimeInterval),clearInterval(this.blackFrameRenderInterval),delete this.blackFrameRenderInterval}refreshBlackFrameLifetime(){this.logger.info("refreshBlackFrameLifetime()"),this.blackFrameRenderInterval&&(clearTimeout(this.blackFrameLifetimeInterval),this.blackFrameLifetimeInterval=setTimeout(()=>{clearInterval(this.blackFrameRenderInterval),delete this.blackFrameRenderInterval,this.emit("black-frame-ended")},YA.BLACK_FRAME_LIFETIME))}setChangeCodecs(I){this._changeCodecs=I}setVideoCaps(I){if(!I)return;const g=I.split(",").map(C=>{const Q=RE(C).call(C).toUpperCase();return{H264:bI.H264,VP8:bI.VP8,BYTEVC1:bI.ByteVC1}[Q]||null}).filter(C=>C!==null);this._videoCaps=g}sendSEIMessage(I){var g;this.logger.info("sendSEIMessage"),(g=this._sendSEIHandler)===null||g===void 0||g.pushSEI(I)}async revokeSEIMessage(I){var g;return this.logger.info("revokeSEIMessage"),this._sendSEIHandler?(g=this._sendSEIHandler)===null||g===void 0?void 0:g.revokeSEI(I):(this.logger.warn("revokeSEIMessage","no sei handler found"),!1)}destroy(){clearInterval(this._trackMatchingTimer),super.removeAllListeners(),super.destroy()}_checkTrackMatching(){var I,g,C,Q;const B=(I=this.audioTrack)===null||I===void 0?void 0:I.preprocessingTrack.id,E=(g=this.videoTrack)===null||g===void 0?void 0:g.preprocessingTrack.id,i=(C=this.audioTransceiver)===null||C===void 0||(C=C.sender.track)===null||C===void 0?void 0:C.id,e=(Q=this.videoTransceiver)===null||Q===void 0||(Q=Q.sender.track)===null||Q===void 0?void 0:Q.id;var o,t;this.pubAudio&&B!==i&&(this.logger.error("_checkTrackMatching","audio track id: ".concat(B," not matching transceiver track id ").concat(i,", streamId: ").concat(this.streamId)),(o=this._ctx.monitor)===null||o===void 0||o.report("rtc_error",{message:"audio track id: ".concat(B," not matching transceiver track id ").concat(i),error_code:-1,stream_id:this.streamId})),this.pubVideo&&E!==e&&(this.logger.error("_checkTrackMatching","video track id: ".concat(E," not matching transceiver track id ").concat(e,", streamId: ").concat(this.streamId)),(t=this._ctx.monitor)===null||t===void 0||t.report("rtc_error",{message:"video track id: ".concat(E," not matching transceiver track id ").concat(e),error_code:-1,stream_id:this.streamId}))}}class y9 extends Oz{constructor(I,g,C,Q,B,E){super(I),P(this,"streamId",void 0),P(this,"userId",void 0),P(this,"isPublic",void 0),P(this,"hasVideo",void 0),P(this,"hasAudio",void 0),P(this,"_attributes",void 0),P(this,"streamState",void 0),P(this,"removeTrack",!1),P(this,"observer",void 0),P(this,"statsReport",void 0),P(this,"subVideo",void 0),P(this,"subAudio",void 0),P(this,"subMediaType",void 0),P(this,"subLayer",void 0),P(this,"_sequenceId",void 0),P(this,"stream",void 0),P(this,"videoTrack",void 0),P(this,"audioTrack",void 0),P(this,"recordedVideoFrames",void 0),P(this,"stillExist",void 0),P(this,"originalMediaType",void 0),P(this,"priority",void 0),P(this,"remoteSessionId",""),P(this,"originalStreamIndex",0),P(this,"virtual",void 0),P(this,"pcSessionId",void 0),P(this,"_virtualOccupy",void 0),P(this,"_videoStallObserver",void 0),P(this,"_audioStallObserver",void 0),P(this,"preReports",{audio:{},video:{}}),P(this,"_installInfo",void 0),this.virtual=!1,this._virtualOccupy=!1,this.userId=g,this.isScreen=Q,this.isPublic=B,this.streamId=C,this.logName="RemoteStream-".concat(C),this.hasAudio=E.audiostream&&E.localaudio,this.hasVideo=E.videostream&&E.localvideo,this._attributes=E,this.vendorCode=(E==null?void 0:E.vendorCode)||0,this.subVideo=!1,this.subAudio=!1,this._sequenceId=0,this.subMediaType=OC.NONE,this.subLayer={spatialLayer:0,spatialSubLayer:-1},this.streamState=0,this.statsReport=new qlA(I,this),this.enableVendorMode&&(this.pcSessionId=tC())}get vendor(){return this._attributes.vendorCode}get audioHasCapture(){return this._attributes.localaudio}get audioHasPublish(){return this._attributes.audiostream}get videoHasCapture(){return this._attributes.localvideo}get videoHasPublish(){return this._attributes.videostream}get sequenceId(){return this._sequenceId||-1}set sequenceId(I){typeof I=="number"&&(this._sequenceId=I)}get enableVendorMode(){return typeof this.attributes.vendorCode=="number"&&this.attributes.vendorCode!==0}get hasSubscribed(){return this.streamState===2}get attributes(){return this._attributes}set attributes(I){this.hasVideo=I.localvideo&&I.videostream,this.hasAudio=I.localaudio&&I.audiostream,this._attributes=I,this.vendorCode=I.vendorCode||0}get virtualOccupy(){return this._virtualOccupy}set virtualOccupy(I){var g;if(this._virtualOccupy&&!I)(g=this.observer)===null||g===void 0||g.setPushTrack(!1);else if(!this._virtualOccupy&&I){var C;(C=this.observer)===null||C===void 0||C.setPushTrack(!0)}this._virtualOccupy=I}startReport(I,g){this.statsReport.setRemoteStreamStatsEvtInterval(I,g)}getRemoteStreamStats(){return this.statsReport.getRemoteStreamStats()}initVideoEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");else if(this.videoTransceiver&&this.videoTransceiver.receiver){if(JE()){var I;(I=this._ctx.monitor)===null||I===void 0||I.report("rtc_invoke_status",{sdk_api_name:"initVideoEncodedTransform",message:"using legacy EncodedTransform",error_code:0,stream_id:this.streamId,elapse:0});const{receiver:C}=this.videoTransceiver,{readable:Q,writable:B}=C.createEncodedStreams();Q.pipeThrough(Hz(E=>{this.safeEmit("onSEIMessage",E.payload)})).pipeTo(B)}else if(hv()){var g;(g=this._ctx.monitor)===null||g===void 0||g.report("rtc_invoke_status",{sdk_api_name:"initVideoEncodedTransform",message:"using standard EncodedTransform",error_code:0,stream_id:this.streamId,elapse:0});const C=new D9A,Q=new MessageChannel;this.videoTransceiver.receiver.transform=new RTCRtpScriptTransform(C,{port:Q.port2},[Q.port2]),Q.port1.onmessage=B=>{this.safeEmit("onSEIMessage",B.data.payload)}}}else this.logger.warn("no receiver found when trying to bind encodedTransform")}initAudioEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.audioTransceiver||!this.audioTransceiver.receiver)return void this.logger.warn("no receiver found when trying to bind encodedTransform");if(!JE())return void this.logger.warn("legacy EncodedTransform is not supported");const{receiver:I}=this.audioTransceiver,{readable:g,writable:C}=I.createEncodedStreams();g.pipeThrough(new TransformStream({transform:(Q,B)=>{Q.data.byteLength<=1e3?B.enqueue(Q):this.logger.print("too large audio frame",Q.data.byteLength)}})).pipeTo(C)}ontrack(I){var g;try{AI(this.engineId,"Stream.ontrack",JSON.stringify({uid:this.userId,streamId:this.streamId,streams:I.streams.reduce((Q,B)=>Q+A1(B),""),transceiver:C1(I.transceiver),track:KQ(I.track)}),0,this.streamId||"")}catch{}if(this.enableVendorMode||(g=I.streams)!==null&&g!==void 0&&(g=g[0])!==null&&g!==void 0&&(g=g.id)!==null&&g!==void 0&&g.includes(this.streamId)){var C;const{track:Q}=I;(Q==null?void 0:Q.kind)==="video"?this._setVideoTrack(Q):((C=I.track)===null||C===void 0?void 0:C.kind)==="audio"&&this._setAudioTrack(Q),this._setStream(I.streams[0])}this.safeEmit("ontrack",I)}startVideoStallObserve(I){this.logger.info("startVideoStallObserve","invoke",I.playerId),this._videoStallObserver||(this._videoStallObserver=new _lA(this.isScreen,this.engineId)),this._videoStallObserver.start(I)}stopVideoStallObserve(){var I;this.logger.info("stopVideoStallObserve","invoke"),(I=this._videoStallObserver)===null||I===void 0||I.stop()}updateVideoStallInfo(I,g,C){let Q;var B;if(C?(Q=(B=this._videoStallObserver)===null||B===void 0?void 0:B.getStallInfo({interval:I.stats_interval||0,bitrate:I.bitrate,frameRateDecoded:I.frame_rate_decoded,frameRateReceived:I.frame_rate_received}),this._installInfo=Q):Q=this._installInfo,Q){const i=Math.min(Q.report.stallDuration,I.stats_interval||0);if(I.play_time=Q.pts,I.stall_count=Q.report.stallCount,I.is_screen?I.stuck_length=i:I.stall_duration=i,I.pause_duration=Math.min(i,Q.pauseDuration),g.stallCount=Q.callback.stallCount,g.stallDuration=Q.callback.stallDuration,Q.stall100ms){const e=Math.min(Q.stall100ms.duration,I.stats_interval||0);I.stall_duration_100ms=e,I.stall_count_100ms=Q.stall100ms.count,g.stallDuration100MS=e,g.stallCount100MS=Q.stall100ms.count}var E;(Q.report.stallCount!==0||Q.report.stallDuration!==0)&&this.logger.print("video_stall_report",this.userId,(E=this.videoTrack)===null||E===void 0?void 0:E.observingPlayerId,JSON.stringify(Q.report),C)}}getVideoRenderInfo(){var I;return((I=this._videoStallObserver)===null||I===void 0?void 0:I.getRecentRenderInfo4Report())||{}}stopAudioStallObserve(){var I;this.logger.info("stopAudioStallObserve","invoke"),(I=this._audioStallObserver)===null||I===void 0||I.stop()}async updateAudioStallInfo(I,g,C){if(this._audioStallObserver){const Q=await this._audioStallObserver.getAudioStallInfo();return I.concealedSamples===I.interval_concealed_samples&&I.totalSamplesReceived===I.interval_samples_received?(I.stall_count=0,I.stall_duration=0,g.stallCount=0,g.stallDuration=0):(I.stall_count=Q.report.stall_count,I.stall_duration=Q.report.stall_duration,g.stallCount=Q.callback.stall_count,g.stallDuration=Q.callback.stall_duration),Q.report.stall_count===0&&Q.report.stall_duration===0||this.logger.print("audio_stall_report",this.userId,JSON.stringify(R(R({},Q.report),{},{callbackList:Q.callback.list}))),Q.extra}this._audioStallObserver=new BC(this),this._audioStallObserver.start(C.concealedSamples,C.totalSamplesReceived),this.logger.print("startAduioObserver","start")}resetStream(){var I,g;(I=this.audioTransceiver)===null||I===void 0||I.stop(),(g=this.videoTransceiver)===null||g===void 0||g.stop(),this.audioTransceiver=void 0,this.videoTransceiver=void 0}clean(){var I,g;this.logger.info("clean","exec stream.clean ".concat(this.streamId," ").concat(this.userId)),AI(this.engineId,"remotestream_clean","".concat(new Error().stack),0,this.streamId),super.destroy(),this.subAudio=!1,this.subVideo=!1,this.sequenceId=0,(I=this.videoTrack)===null||I===void 0||I.destroy(),this.videoTrack=void 0,(g=this.audioTrack)===null||g===void 0||g.destroy(),this.audioTrack=void 0,this.stream=void 0,this.recordedVideoFrames=void 0,delete this.priority}destroy(){var I,g;this.clean(),(I=this._audioStallObserver)===null||I===void 0||I.destroy(),delete this._audioStallObserver,(g=this._videoStallObserver)===null||g===void 0||g.destroy(),delete this._videoStallObserver,this.attributes={audiostream:!1,localaudio:!1,localvideo:!1,videostream:!1,extvideo:!1,extaudio:!1,videoDescriptions:[]},super.removeAllListeners()}resetHasSubscribed(){this.streamState=0}_setStream(I){this.stream=I,I.onaddtrack=g=>{g.track.kind==="video"?this._setVideoTrack(g.track):g.track.kind==="audio"&&this._setAudioTrack(g.track)}}_setAudioTrack(I){var g;if(((g=this.audioTrack)===null||g===void 0||(g=g.preprocessingTrack)===null||g===void 0?void 0:g.id)!==I.id){this.audioTrack=Xz(this._ctx,I,{streamIndex:this.isPublic?LI.PUBLIC:this.virtual?LI.VIRTUAL:this.isScreen?LI.SCREEN:LI.MAIN,streamUserId:this.userId});const Q=this._ctx._remoteAudioTrackDumpConfig[this.isScreen?Xs.STREAM_INDEX_SCREEN:Xs.STREAM_INDEX_MAIN].get(this.userId);var C;Q!=null&&Q.callback&&Q!=null&&Q.frameSize&&((C=this.audioTrack)===null||C===void 0||C.setDataFetcher(Q.frameSize,B=>{var E;this.audioHasCapture&&this.audioHasPublish&&((E=Q.callback)===null||E===void 0||E.call(Q,B))})),this.emit("ontrack",this.audioTrack)}}_setVideoTrack(I){var g;((g=this.videoTrack)===null||g===void 0||(g=g.preprocessingTrack)===null||g===void 0?void 0:g.id)!==I.id&&(this.videoTrack=c9A(this._ctx,I,this,{streamIndex:this.isPublic?LI.PUBLIC:this.virtual?LI.VIRTUAL:this.isScreen?LI.SCREEN:LI.MAIN,streamUserId:this.userId}),this.emit("ontrack",this.videoTrack))}}var $=(A=>(A.RESUBSCRIBE="resubscribe",A.STREAM_FAILED="stream_failed",A.SUBSCRIBE_PUSH_TRACK="subscribe_push_track",A.REMOVE_PUSH_TRACK="remove_push_track",A.VIDEO_FIRST_FRAME="video_first_frame",A.ON_USER_PUBLISH_STATE_CHANGE="on_user_publish_state_change",A.ON_USER_START_AUDIO_CAPTURE="on_user_start_audio_capture",A.ON_USER_STOP_AUDIO_CAPTURE="on_user_stop_audio_capture",A.ON_USER_START_VIDEO_CAPTURE="on_user_start_video_capture",A.ON_USER_STOP_VIDEO_CAPTURE="on_user_stop_video_capture",A.ON_SEI_MESSAGED_RECEIVED="on_sei_messaged_received",A.ON_PUBLISH_RESULT="on_publish_result",A.ON_SUBSCRIBE_RESULT="ON_SUBSCRIBE_RESULT",A.ON_UPDATE_TOKEN_SUCCESS="on_update_token_success",A.ON_REMOTE_STREAM_STATS="ON_REMOTE_STREAM_STATS",A.ON_LOCAL_STREAM_STATS="ON_LOCAL_STREAM_STATS",A.ON_USER_LEAVE="on_user_leave",A.ON_ROOM_ERROR="on_room_error",A.ON_NETWORK_QUALITY="on_network_quality",A.ON_SIMULCAST_SUBSCRIBE_FALLBACK="on_simulcast_subscribe_fallback",A.ON_REMOTE_VIDEO_SIZE_CHANGED="on_remote_video_size_changed",A.ON_SUBTITLE_STATE_CHANGED="ON_SUBTITLE_STATE_CHANGED",A.ON_SUBTITLE_MESSAGE_RECEIVED="ON_SUBTITLE_MESSAGE_RECEIVED",A.ON_VIDEO_STREAM_BANNED="ON_VIDEO_STREAM_BANNED",A.ON_AUDIO_STREAM_BANNED="ON_AUDIO_STREAM_BANNED",A.ON_FORWARD_STREAM_ERROR="ON_FORWARD_STREAM_ERROR",A.ON_REJOIN_WITH_TCP="ON_REJOIN_WITH_TCP",A.PUB_RETRY="PUB_RETRY",A.SUB_RETRY="SUB_RETRY",A.VIDEO_TYPE_CHANGE="VIDEO_TYPE_CHANGE",A.JOIN_SUCCESS="JOIN_SUCCESS",A.UPDATE_PUBLISH="UPDATE_PUBLISH",A))($||{}),wQ=(A=>(A[A.START=1]="START",A[A.START_SUCCESS=2]="START_SUCCESS",A[A.START_FAILED=3]="START_FAILED",A[A.UPDATE=4]="UPDATE",A[A.UPDATE_SUCCESS=5]="UPDATE_SUCCESS",A[A.UPDATE_FAILED=6]="UPDATE_FAILED",A[A.STOP=7]="STOP",A[A.STOP_SUCCESS=8]="STOP_SUCCESS",A[A.STOP_FAILED=9]="STOP_FAILED",A))(wQ||{}),wC=(A=>(A[A.PUB=0]="PUB",A[A.UNPUB=1]="UNPUB",A))(wC||{});const kY=async(A,I,g,C)=>{try{var Q,B,E,i;let s="",v=-1;const r=I==="video"?g==null||(Q=g.videoTrack)===null||Q===void 0?void 0:Q.originTrack:g==null||(B=g.audioTrack)===null||B===void 0?void 0:B.originTrack,n=I==="video"?g==null||(E=g.videoTransceiver)===null||E===void 0?void 0:E.receiver:g==null||(i=g.audioTransceiver)===null||i===void 0?void 0:i.receiver;try{var e,o;const a=await((e=A.peerConnection)===null||e===void 0?void 0:e.getStatsWithLowFrequency(r,!0,n)),c=(a||[]).find(D=>D.type==="inbound-rtp"),d=await(n==null?void 0:n.getStats()),l=[];let h;var t;d==null||d.forEach(D=>l.push(D.type)),(a==null?void 0:a.length)===0&&l.length!==0&&(h=await((t=A.peerConnection)===null||t===void 0?void 0:t.getStatsWithLowFrequency(void 0,void 0,n))),s=JSON.stringify({type:I,reports:a.map(D=>D.type),reports2:l,pc:((o=A.peerConnection)===null||o===void 0?void 0:o.getOriginRTCPeerConnection())||null,track:(r==null?void 0:r.id)||null,bytes:c==null?void 0:c.bytesReceived,framesReceived:c==null?void 0:c.framesReceived,packetsReceived:c==null?void 0:c.packetsReceived,allReports:h})}catch(a){v=-999,s=a.mseeage||JSON.stringify(a)}C==null||C.report("rtc_invoke_status",{sdk_api_name:"first_frame_recv_timeout",error_code:v,message:s,stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:g==null?void 0:g.userId,elapse:0})}catch{}},pY=async(A,I,g,C)=>{try{var Q,B,E,i;let s="",v=-1;const r=I==="video"?g==null||(Q=g.videoTrack)===null||Q===void 0?void 0:Q.preprocessingTrack:g==null||(B=g.audioTrack)===null||B===void 0?void 0:B.preprocessingTrack,n=I==="video"?g==null||(E=g.videoTransceiver)===null||E===void 0?void 0:E.sender:g==null||(i=g.audioTransceiver)===null||i===void 0?void 0:i.sender;try{var e,o;const a=await((e=A.peerConnection)===null||e===void 0?void 0:e.getStatsWithLowFrequency(r,!0,n)),c=(a||[]).find(D=>D.type==="outbound-rtp"),d=await(n==null?void 0:n.getStats()),l=[];let h;var t;d==null||d.forEach(D=>l.push(D.type)),a.length===0&&l.length!==0&&(h=await((t=A.peerConnection)===null||t===void 0?void 0:t.getStatsWithLowFrequency(void 0,void 0,n))),s=JSON.stringify({type:I,reports:a.map(D=>D.type),reports2:l,pc:((o=A.peerConnection)===null||o===void 0?void 0:o.getOriginRTCPeerConnection())||null,track:(r==null?void 0:r.id)||null,bytes:c==null?void 0:c.bytesSent,framesSent:c==null?void 0:c.framesSent,packetsSent:c==null?void 0:c.packetsSent,allReports:h})}catch(a){v=-999,s=a.mseeage||JSON.stringify(a)}C==null||C.report("rtc_invoke_status",{sdk_api_name:"first_frame_send_timeout",error_code:v,message:s,stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:g==null?void 0:g.userId,elapse:0})}catch{}};class qz extends UB.EventEmitter{constructor(I,g){super(),P(this,"_audioEventSessionId",Oa()),P(this,"_videoEventSessionId",Oa()),P(this,"_stream",void 0),P(this,"_firstAudioFrameTimer",void 0),P(this,"_firstVideoFrameTimer",void 0),P(this,"_transportDelayInterval",void 0),P(this,"_transportDelay",void 0),P(this,"_firstVideoFrameInterval",void 0),P(this,"_firstAudioFrameInterval",void 0),P(this,"_isScreen",!1),P(this,"_audioFirstFrameState",0),P(this,"_videoFirstFrameState",0),P(this,"_timeout",1e4),P(this,"_currentAudioRecv",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_currentVideoRecv",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_login",!1),P(this,"_unMuteAudio",!1),P(this,"_enableAudio",!1),P(this,"_unMuteVideo",!1),P(this,"_enableVideo",!1),P(this,"_remoteUnmuteAudio",!1),P(this,"_remoteUnmuteVideo",!1),P(this,"_audioExternal",!1),P(this,"_pushAudio",!1),P(this,"_videoExternal",!1),P(this,"_pushVideo",!1),P(this,"_autoSubscribeVideo",!1),P(this,"_autoSubscribeAudio",!1),P(this,"_autoSubscribe",!1),P(this,"_publishVideo",!1),P(this,"_publishAudio",!1),P(this,"_subscribeAudio",!1),P(this,"_subscribeVideo",!1),P(this,"_subscribe",!1),P(this,"_pushTrack",!1),P(this,"_multiChatMode",!1),P(this,"_monitor",void 0),P(this,"logger",void 0),this._ctx=I,this._stream=g,this.getTransportDelay(),this._monitor=tI(g.engineId),this.logger=new uA("RecvFrameObserver",0,g.engineId)}async beginRecvFrame(I,g){await this.getTransportDelay();let C=this._transportDelay,Q=!0;if(["login","unmute","subscribe","push_track"].indexOf(g)>=0&&(C=0,Q=!1),I==="audio"){var B,E,i,e,o,t,s,v;Q||this._audioEventSessionId++,this._currentAudioRecv={startTime:Date.now(),eventSessionId:this._audioEventSessionId,type:g};const u={media_type:I,event_type:"begin_recv",type:g,is_screen:!((B=this._stream)===null||B===void 0||!B.isScreen),start:(E=this._currentAudioRecv)===null||E===void 0?void 0:E.startTime,event_session_id:this._audioEventSessionId,stream_user_id:(i=this._stream)===null||i===void 0?void 0:i.userId,transport_delay:C,vendor_mode:((e=this._stream)===null||e===void 0?void 0:e.vendorCode)||0,pc_session_id:((o=this._stream)===null||o===void 0?void 0:o.pcSessionId)||((t=this._ctx.peerConnection)===null||t===void 0?void 0:t.getConnectionId()),remote_rtc_session_id:(s=this._stream)===null||s===void 0?void 0:s.remoteSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstAudioFrameTimer=setTimeout(()=>{kY(this._ctx,"audio",this._stream,this._monitor),this.stopRecvFrame("audio","timeout"),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval)},this._timeout),this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(v=this._monitor)===null||v===void 0||v.report("rtc_first_frame",u),this._watchForFirstAudioFrameRecv(),this._audioFirstFrameState=1,this._login=!0,this._unMuteAudio=!0,this._enableAudio=!0,this._remoteUnmuteAudio=!0}else if(I==="video"){var r,n,a,c,d,l,h,D;Q||this._videoEventSessionId++,this._currentVideoRecv={startTime:Date.now(),eventSessionId:this._videoEventSessionId,type:g};const u={media_type:I,event_type:"begin_recv",type:g,is_screen:!((r=this._stream)===null||r===void 0||!r.isScreen),start:(n=this._currentVideoRecv)===null||n===void 0?void 0:n.startTime,event_session_id:this._videoEventSessionId,stream_user_id:(a=this._stream)===null||a===void 0?void 0:a.userId,transport_delay:C,vendor_mode:((c=this._stream)===null||c===void 0?void 0:c.vendorCode)||0,pc_session_id:((d=this._stream)===null||d===void 0?void 0:d.pcSessionId)||((l=this._ctx.peerConnection)===null||l===void 0?void 0:l.getConnectionId()),remote_rtc_session_id:(h=this._stream)===null||h===void 0?void 0:h.remoteSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstVideoFrameTimer=setTimeout(()=>{kY(this._ctx,"video",this._stream,this._monitor),this.stopRecvFrame("video","timeout"),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval)},this._timeout),this._watchForFirstVideoFrameRecv(),this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(D=this._monitor)===null||D===void 0||D.report("rtc_first_frame",u),this._videoFirstFrameState=1,this._login=!0,this._unMuteVideo=!0,this._enableVideo=!0,this._remoteUnmuteVideo=!0}}stopRecvFrame(I,g){if(I==="audio"){var C,Q,B,E,i,e,o,t,s;if(this._audioFirstFrameState!==1)return;const u={event_type:"recv_end",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),start:(Q=this._currentAudioRecv)===null||Q===void 0?void 0:Q.startTime,reason:g,result:!1,stream_user_id:(B=this._stream)===null||B===void 0?void 0:B.userId,event_session_id:this._audioEventSessionId,type:(E=this._currentAudioRecv)===null||E===void 0?void 0:E.type,vendor_mode:((i=this._stream)===null||i===void 0?void 0:i.vendorCode)||0,pc_session_id:((e=this._stream)===null||e===void 0?void 0:e.pcSessionId)||((o=this._ctx.peerConnection)===null||o===void 0?void 0:o.getConnectionId()),remote_rtc_session_id:(t=this._stream)===null||t===void 0?void 0:t.remoteSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),delete this._currentAudioRecv,this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(s=this._monitor)===null||s===void 0||s.report("rtc_first_frame",u),this._audioFirstFrameState=2}else if(I==="video"){var v,r,n,a,c,d,l,h,D;if(this._videoFirstFrameState!==1)return;const u={event_type:"recv_end",media_type:I,is_screen:!((v=this._stream)===null||v===void 0||!v.isScreen),start:(r=this._currentVideoRecv)===null||r===void 0?void 0:r.startTime,reason:g,result:!1,stream_user_id:(n=this._stream)===null||n===void 0?void 0:n.userId,event_session_id:this._videoEventSessionId,type:(a=this._currentVideoRecv)===null||a===void 0?void 0:a.type,vendor_mode:((c=this._stream)===null||c===void 0?void 0:c.vendorCode)||0,pc_session_id:((d=this._stream)===null||d===void 0?void 0:d.pcSessionId)||((l=this._ctx.peerConnection)===null||l===void 0?void 0:l.getConnectionId()),remote_rtc_session_id:(h=this._stream)===null||h===void 0?void 0:h.remoteSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),delete this._currentVideoRecv,this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(D=this._monitor)===null||D===void 0||D.report("rtc_first_frame",u),this._videoFirstFrameState=2}}async recvFrameFinish(I){await this.getTransportDelay();let g=this._transportDelay;if(I==="audio"){var C,Q,B,E,i,e,o;if(this._audioFirstFrameState!==1||!this._currentAudioRecv)return;const{type:d,startTime:l}=this._currentAudioRecv;["login","unmute","subscribe","push_track"].indexOf(d)>=0&&(g=0);const h={event_type:"recv_end",media_type:I,start:l,result:!0,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),stream_user_id:(Q=this._stream)===null||Q===void 0?void 0:Q.userId,event_session_id:this._audioEventSessionId,type:d,transport_delay:g,vendor_mode:((B=this._stream)===null||B===void 0?void 0:B.vendorCode)||0,pc_session_id:((E=this._stream)===null||E===void 0?void 0:E.pcSessionId)||((i=this._ctx.peerConnection)===null||i===void 0?void 0:i.getConnectionId()),remote_rtc_session_id:(e=this._stream)===null||e===void 0?void 0:e.remoteSessionId};delete this._currentAudioRecv,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this.logger.info("rtcFirstFrameRecv",JSON.stringify(h)),(o=this._monitor)===null||o===void 0||o.report("rtc_first_frame",h),this.emit("recvAudioFirstFrame"),this._audioFirstFrameState=3}else if(I==="video"){var t,s,v,r,n,a,c;if(this._videoFirstFrameState!==1||!this._currentVideoRecv)return;const{type:d,startTime:l}=this._currentVideoRecv;["login","unmute","subscribe","push_track"].indexOf(d)>=0&&(g=0);const h={event_type:"recv_end",media_type:I,is_screen:!((t=this._stream)===null||t===void 0||!t.isScreen),start:l,result:!0,stream_user_id:(s=this._stream)===null||s===void 0?void 0:s.userId,event_session_id:this._videoEventSessionId,type:d,transport_delay:g,vendor_mode:((v=this._stream)===null||v===void 0?void 0:v.vendorCode)||0,pc_session_id:((r=this._stream)===null||r===void 0?void 0:r.pcSessionId)||((n=this._ctx.peerConnection)===null||n===void 0?void 0:n.getConnectionId()),remote_rtc_session_id:(a=this._stream)===null||a===void 0?void 0:a.remoteSessionId};delete this._currentVideoRecv,this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this.logger.info("rtcFirstFrameRecv",JSON.stringify(h)),(c=this._monitor)===null||c===void 0||c.report("rtc_first_frame",h),this.emit("recvVideoFirstFrame"),this._videoFirstFrameState=3}}setLogin(I){var g,C,Q,B;let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{audio:!0,video:!0};this._login!==I&&(this._login=I,I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&E.audio&&this.beginRecvFrame("audio","login"),I&&(C=this._stream)!==null&&C!==void 0&&C.hasVideo&&E.video&&this.beginRecvFrame("video","login"),!I&&(Q=this._stream)!==null&&Q!==void 0&&Q.hasAudio&&this.stopRecvFrame("audio","leave_room"),!I&&(B=this._stream)!==null&&B!==void 0&&B.hasVideo&&this.stopRecvFrame("video","leave_room"))}setUnmuteAudio(I){var g,C,Q;if(this._unMuteAudio===I)return;this._unMuteAudio=I;const B=!((g=this._stream)===null||g===void 0||!g.hasAudio);(C=this._stream)!==null&&C!==void 0&&C.audioHasCapture&&(Q=this._stream)!==null&&Q!==void 0&&Q.audioHasPublish&&(this._unMuteAudio&&B?this.beginRecvFrame("audio","unmute"):B&&this.stopRecvFrame("audio","mute"))}setRemoteUnmuteAudio(I){this._remoteUnmuteAudio!==I&&(this._remoteUnmuteAudio=I,this._remoteUnmuteAudio?this.beginRecvFrame("audio","remote_unmute"):this.stopRecvFrame("audio","remote_mute"))}setEnableAudio(I){this._enableAudio!==I&&(this._enableAudio=I,this._enableAudio?this.beginRecvFrame("audio","enable"):this.stopRecvFrame("audio","disable"))}setUnmuteVideo(I){var g,C,Q;if(this._unMuteVideo===I)return;this._unMuteVideo=I;const B=!((g=this._stream)===null||g===void 0||!g.hasVideo);(C=this._stream)!==null&&C!==void 0&&C.videoHasCapture&&(Q=this._stream)!==null&&Q!==void 0&&Q.videoHasPublish&&(this._unMuteVideo&&B?this.beginRecvFrame("video","unmute"):B&&this.stopRecvFrame("video","mute"))}setRemoteUnmuteVideo(I){this._remoteUnmuteVideo!==I&&(this._remoteUnmuteVideo=I,this._remoteUnmuteVideo?this.beginRecvFrame("video","remote_unmute"):this.stopRecvFrame("video","remote_mute"))}setEnableVideo(I){this._enableVideo!==I&&(this._enableVideo=I,this._enableVideo?this.beginRecvFrame("video","enable"):this.stopRecvFrame("video","disable"))}setExternalAudioSource(I){this._audioExternal=I}setPushAudio(I){var g;this._audioExternal&&this._pushAudio!==I&&(this._pushAudio=I),this._pushAudio&&this.beginRecvFrame("audio","push"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","stop_push")}setExternalVideoSource(I){this._videoExternal=I}setPushVideo(I){var g;this._videoExternal&&this._pushVideo!==I&&(this._pushVideo=I),this._pushVideo&&this.beginRecvFrame("video","push"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","stop_push")}setPublishVideo(I){var g;this._publishVideo!==I&&(this._publishVideo=I),this._publishVideo&&this.beginRecvFrame("video","publish"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","unpublish")}setPublishAudio(I){var g;this._publishAudio!==I&&(this._publishAudio=I),this._publishAudio&&this.beginRecvFrame("audio","publish"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","unpublish")}setAutoSubscribe(I){this._autoSubscribe=I}setAutoSubscribeVideo(I){this._autoSubscribeVideo=I}setAutoSubscribeAudio(I){this._autoSubscribeAudio=I}setSubscribeAudio(I){var g,C;this._autoSubscribeAudio||this._subscribeAudio===I||(this._subscribe=I,I&&(C=this._stream)!==null&&C!==void 0&&C.hasAudio&&this.beginRecvFrame("audio","subscribe")),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","unsubscribe")}setSubscribeVideo(I){var g,C;this._autoSubscribeVideo||this._subscribeVideo===I||(this._subscribeVideo=I,I&&(C=this._stream)!==null&&C!==void 0&&C.hasVideo&&this.beginRecvFrame("video","subscribe")),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","unsubscribe")}setPushTrack(I){var g;this._pushTrack!==I&&(this._pushTrack=I,I&&!this._isScreen&&this.beginRecvFrame("audio","push_track"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","remove_track"))}setMultiChatMode(I){this._multiChatMode=I}setTimeout(I){this._timeout=I}_watchForFirstVideoFrameRecv(){let I=-1,g=-1;this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._firstVideoFrameInterval=window.setInterval(async()=>{var C,Q,B;const E=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(E&&(B=this._stream)!==null&&B!==void 0&&(B=B.videoTrack)!==null&&B!==void 0&&B.preprocessingTrack){var i,e;const o=(i=this._stream.videoTransceiver)===null||i===void 0?void 0:i.receiver,t=(await E.getStatsWithLowFrequency((e=this._stream)===null||e===void 0||(e=e.videoTrack)===null||e===void 0?void 0:e.preprocessingTrack,!0,o)).find(s=>s.type==="inbound-rtp");if(t&&(t.framesReceived>I||t.packetsReceived>g)){if(I===-1&&g===-1)return I=t.framesReceived,void(g=t.packetsReceived);this.recvFrameFinish("video"),window.clearInterval(this._firstVideoFrameInterval)}}},200)}_watchForFirstAudioFrameRecv(){let I=-1,g=-1;this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstAudioFrameInterval=window.setInterval(async()=>{var C,Q,B;const E=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(E&&(B=this._stream)!==null&&B!==void 0&&(B=B.audioTrack)!==null&&B!==void 0&&B.originTrack){var i;const e=(await E.getStatsWithLowFrequency((i=this._stream)===null||i===void 0||(i=i.audioTrack)===null||i===void 0?void 0:i.originTrack)).find(o=>o.type==="inbound-rtp");if(e&&(e.totalSamplesReceived>I||e.packetsReceived>g)){if(I===-1&&g===-1)return I=e.totalSamplesReceived,void(g=e.packetsReceived);this.recvFrameFinish("audio"),window.clearInterval(this._firstAudioFrameInterval)}}},200)}async getTransportDelay(){await this.getTransportDelayIntl(),window.clearInterval(this._transportDelayInterval),this._transportDelayInterval=window.setInterval(async()=>{await this.getTransportDelayIntl()},2e3)}async getTransportDelayIntl(){const I=this._ctx.peerConnection;if(I){var g;const C=(g=this._stream)===null||g===void 0||(g=g.videoTransceiver)===null||g===void 0?void 0:g.receiver,Q=await I.getStatsWithLowFrequency(void 0,!0,C),B=Q.find(i=>i.type==="transport"&&i.dtlsState==="connected"),E=Q.find(i=>i.type==="candidate-pair"&&i.state==="succeeded"&&i.id===(B==null?void 0:B.selectedCandidatePairId));E&&(this._transportDelay=Math.round(1e3*E.currentRoundTripTime/2))}}setDisconnect(){this.stopRecvFrame("audio","connection_lost"),this.stopRecvFrame("video","connection_lost"),this.reset()}reset(){this._currentAudioRecv={startTime:0,eventSessionId:0,type:"login"},this._currentVideoRecv={startTime:0,eventSessionId:0,type:"login"},this._login=!1,this._unMuteAudio=!1,this._enableAudio=!1,this._unMuteVideo=!1,this._remoteUnmuteAudio=!1,this._remoteUnmuteVideo=!1,this._enableVideo=!1,this._audioExternal=!1,this._pushAudio=!1,this._videoExternal=!1,this._pushVideo=!1,this._autoSubscribeVideo=!1,this._autoSubscribeAudio=!1,this._autoSubscribe=!1,this._subscribeAudio=!1,this._subscribeVideo=!1,this._subscribe=!1,this._pushTrack=!1,this._multiChatMode=!1,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._transportDelayInterval&&window.clearInterval(this._transportDelayInterval)}get audioFirstFrameReceived(){return this._audioFirstFrameState===3}get FirstFrameReceived(){return this._audioFirstFrameState===3}}class Ww{constructor(I,g){P(this,"_audioEventSessionId",Oa()),P(this,"_videoEventSessionId",Oa()),P(this,"_pcSessionId",void 0),P(this,"_firstAudioFrameTimer",void 0),P(this,"_firstVideoFrameTimer",void 0),P(this,"_stream",void 0),P(this,"_firstVideoFrameInterval",void 0),P(this,"_firstAudioFrameInterval",void 0),P(this,"_currentAudioSend",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_currentVideoSend",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_login",!1),P(this,"_publisher",!1),P(this,"_unMuteAudio",!1),P(this,"_enableAudio",!1),P(this,"_unMuteVideo",!1),P(this,"_enableVideo",!1),P(this,"_audioExternal",!1),P(this,"_pushAudio",!1),P(this,"_videoExternal",!1),P(this,"_pushVideo",!1),P(this,"_autoPublish",!1),P(this,"_publish",!1),P(this,"_timeout",1e4),P(this,"_audioFirstFrameState",0),P(this,"_videoFirstFrameState",0),P(this,"_monitor",void 0),P(this,"logger",void 0),this._ctx=I,this._stream=g,this._monitor=tI(g.engineId),this.logger=new uA("SendFrameObserver",0,g.engineId)}beginSendFrame(I,g){if(I==="audio"){var C,Q,B,E,i,e;this._audioEventSessionId++,this._currentAudioSend={startTime:Date.now(),eventSessionId:this._audioEventSessionId,type:g};const a={event_type:"begin_send",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),type:g,start:this._currentAudioSend.startTime,event_session_id:this._audioEventSessionId,vendor_mode:((Q=this._stream)===null||Q===void 0?void 0:Q.vendorCode)||0,pc_session_id:((B=this._stream)===null||B===void 0?void 0:B.pcSessionId)||((E=this._ctx.peerConnection)===null||E===void 0?void 0:E.getConnectionId()),capture_session_id:(i=this._stream)===null||i===void 0||(i=i.audioTrack)===null||i===void 0?void 0:i.captureSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstAudioFrameTimer=setTimeout(()=>{pY(this._ctx,"audio",this._stream,this._monitor),this.stopSendFrame("audio","timeout"),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval)},this._timeout),this.logger.info("rtcFirstFrameSend",JSON.stringify(a)),(e=this._monitor)===null||e===void 0||e.report("rtc_first_frame",a),this._watchForFirstAudioFrameSend(),this._audioFirstFrameState=1,this._login=!0,this._publisher=!0,this._publish=!0,this._unMuteAudio=!0,this._pushAudio||(this._enableAudio=!0)}else if(I==="video"){var o,t,s,v,r,n;this._videoEventSessionId++,this._currentVideoSend={startTime:Date.now(),eventSessionId:this._videoEventSessionId,type:g};const a={event_type:"begin_send",media_type:I,is_screen:!((o=this._stream)===null||o===void 0||!o.isScreen),type:g,start:this._currentVideoSend.startTime,event_session_id:this._videoEventSessionId,vendor_mode:((t=this._stream)===null||t===void 0?void 0:t.vendorCode)||0,pc_session_id:((s=this._stream)===null||s===void 0?void 0:s.pcSessionId)||((v=this._ctx.peerConnection)===null||v===void 0?void 0:v.getConnectionId()),capture_session_id:(r=this._stream)===null||r===void 0||(r=r.videoTrack)===null||r===void 0?void 0:r.captureSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstVideoFrameTimer=setTimeout(()=>{pY(this._ctx,"video",this._stream,this._monitor),this.stopSendFrame("video","timeout"),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval)},this._timeout),this._watchForFirstVideoFrameSend(),this.logger.info("rtcFirstFrameSend",JSON.stringify(a)),(n=this._monitor)===null||n===void 0||n.report("rtc_first_frame",a),this._videoFirstFrameState=1,this._login=!0,this._publisher=!0,this._publish=!0,this._unMuteVideo=!0,this._pushVideo||(this._enableVideo=!0)}}stopSendFrame(I,g){if(I==="audio"){var C,Q,B,E,i,e,o,t;if(this._audioFirstFrameState!==1)return;const h={event_type:"sent_end",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),start:(Q=this._currentAudioSend)===null||Q===void 0?void 0:Q.startTime,reason:g,result:!1,event_session_id:this._audioEventSessionId,type:(B=this._currentAudioSend)===null||B===void 0?void 0:B.type,vendor_mode:((E=this._stream)===null||E===void 0?void 0:E.vendorCode)||0,pc_session_id:((i=this._stream)===null||i===void 0?void 0:i.pcSessionId)||((e=this._ctx.peerConnection)===null||e===void 0?void 0:e.getConnectionId()),capture_session_id:(o=this._stream)===null||o===void 0||(o=o.audioTrack)===null||o===void 0?void 0:o.captureSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),delete this._currentAudioSend,this.logger.info("rtcFirstFrameSend",JSON.stringify(h)),(t=this._monitor)===null||t===void 0||t.report("rtc_first_frame",h),this._audioFirstFrameState=2}else if(I==="video"){var s,v,r,n,a,c,d,l;if(this._videoFirstFrameState!==1)return;const h={event_type:"sent_end",media_type:I,start:(s=this._currentVideoSend)===null||s===void 0?void 0:s.startTime,is_screen:!((v=this._stream)===null||v===void 0||!v.isScreen),reason:g,result:!1,event_session_id:this._videoEventSessionId,type:(r=this._currentVideoSend)===null||r===void 0?void 0:r.type,vendor_mode:((n=this._stream)===null||n===void 0?void 0:n.vendorCode)||0,pc_session_id:((a=this._stream)===null||a===void 0?void 0:a.pcSessionId)||((c=this._ctx.peerConnection)===null||c===void 0?void 0:c.getConnectionId()),capture_session_id:(d=this._stream)===null||d===void 0||(d=d.videoTrack)===null||d===void 0?void 0:d.captureSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),delete this._currentVideoSend,this.logger.info("rtcFirstFrameSend",JSON.stringify(h)),(l=this._monitor)===null||l===void 0||l.report("rtc_first_frame",h),this._videoFirstFrameState=2}}sendFrameFinish(I){if(I==="audio"){var g,C,Q,B,E,i;if(this._audioFirstFrameState!==1||!this._currentAudioSend)return;const{type:n,startTime:a}=this._currentAudioSend,c={event_type:"sent_end",media_type:I,is_screen:!((g=this._stream)===null||g===void 0||!g.isScreen),start:a,result:!0,event_session_id:this._audioEventSessionId,type:n,vendor_mode:((C=this._stream)===null||C===void 0?void 0:C.vendorCode)||0,pc_session_id:((Q=this._stream)===null||Q===void 0?void 0:Q.pcSessionId)||((B=this._ctx.peerConnection)===null||B===void 0?void 0:B.getConnectionId()),capture_session_id:(E=this._stream)===null||E===void 0||(E=E.audioTrack)===null||E===void 0?void 0:E.captureSessionId};delete this._currentAudioSend,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this.logger.info("rtcFirstFrameSend",JSON.stringify(c)),(i=this._monitor)===null||i===void 0||i.report("rtc_first_frame",c),this._audioFirstFrameState=3}else if(I==="video"){var e,o,t,s,v,r;if(this._videoFirstFrameState!==1||!this._currentVideoSend)return;const{type:n,startTime:a}=this._currentVideoSend,c={event_type:"sent_end",media_type:I,is_screen:!((e=this._stream)===null||e===void 0||!e.isScreen),start:a,result:!0,event_session_id:this._videoEventSessionId,type:n,vendor_mode:((o=this._stream)===null||o===void 0?void 0:o.vendorCode)||0,pc_session_id:((t=this._stream)===null||t===void 0?void 0:t.pcSessionId)||((s=this._ctx.peerConnection)===null||s===void 0?void 0:s.getConnectionId()),capture_session_id:(v=this._stream)===null||v===void 0||(v=v.videoTrack)===null||v===void 0?void 0:v.captureSessionId};delete this._currentVideoSend,this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this.logger.info("rtcFirstFrameSend",JSON.stringify(c)),(r=this._monitor)===null||r===void 0||r.report("rtc_first_frame",c),this._videoFirstFrameState=3}}setLogin(I){if(this._login!==I){var g,C;this._login=I,I&&((g=this._stream)!==null&&g!==void 0&&g.videoTrack&&this._stream.pubVideo&&this.beginSendFrame("video","login"),(C=this._stream)!==null&&C!==void 0&&C.audioTrack&&this._stream.pubAudio&&this.beginSendFrame("audio","login")),!I&&this._audioSending&&this.stopSendFrame("audio","leave_room"),!I&&this._videoSending&&this.stopSendFrame("video","leave_room")}}setPublish(I){if(this._publish!==I){var g,C;this._publish=I,I&&(!((g=this._stream)===null||g===void 0)&&g.videoTrack&&this._stream.pubVideo&&this.beginSendFrame("video","publish"),!((C=this._stream)===null||C===void 0)&&C.audioTrack&&this._stream.pubAudio&&this.beginSendFrame("audio","publish")),!I&&this._audioSending&&this.stopSendFrame("audio","unpublish"),!I&&this._videoSending&&this.stopSendFrame("video","unpublish")}}setUnmuteAudio(I){var g;this._unMuteAudio!==I&&(this._unMuteAudio=I,(g=this._stream)!==null&&g!==void 0&&g.audioHasCapture&&(I&&this.beginSendFrame("audio","unmute"),!I&&this._audioSending&&this.stopSendFrame("audio","mute")))}setEnableAudio(I){var g;this._enableAudio!==I&&(g=this._stream)!==null&&g!==void 0&&g.pubAudio&&(this._enableAudio=I,I&&this.beginSendFrame("audio","enable"),!I&&this._audioSending&&this.stopSendFrame("audio","disable"))}setUnmuteVideo(I){var g;this._unMuteVideo!==I&&(this._unMuteVideo=I,(g=this._stream)!==null&&g!==void 0&&g.videoHasCapture&&(I&&this.beginSendFrame("video","unmute"),!I&&this._videoSending&&this.stopSendFrame("video","mute")))}setEnableVideo(I){var g;this._enableVideo!==I&&(g=this._stream)!==null&&g!==void 0&&g.pubVideo&&(this._enableVideo=I,I&&this.beginSendFrame("video","enable"),!I&&this._videoSending&&this.stopSendFrame("video","disable"))}setPushAudio(I){this._pushAudio!==I&&(this._pushAudio=I,I&&this.beginSendFrame("audio","push"),!I&&this._audioSending&&this.stopSendFrame("audio","stop_push"))}setPushVideo(I){this._pushVideo!==I&&(this._pushVideo=I,I&&this.beginSendFrame("video","push"),!I&&this._videoSending&&this.stopSendFrame("video","stop_push"))}setAutoPublish(I){this._autoPublish=I}setPublisher(I){this._publisher!==I&&(this._publisher=I,!I&&this._audioSending&&this.stopSendFrame("audio","audience"),!I&&this._videoSending&&this.stopSendFrame("video","audience"))}setDisconnect(){this._audioSending&&this.stopSendFrame("audio","connection_lost"),this._videoSending&&this.stopSendFrame("video","connection_lost"),this.reset()}setTimeout(I){this._timeout=I}setPCSessionId(I){this._pcSessionId=I}async _getFirstVideoFrameStats(){var I,g,C,Q;const B=(I=this._stream)===null||I===void 0||(I=I.videoTrack)===null||I===void 0?void 0:I.preprocessingTrack,E=(g=this._stream)===null||g===void 0||(g=g.videoTransceiver)===null||g===void 0?void 0:g.sender,i=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(i&&B)return(await i.getStatsWithLowFrequency(B,!0,E)).filter(e=>e.type==="outbound-rtp")}async _getFirstAudioFrameStats(){var I,g,C,Q;const B=(I=this._stream)===null||I===void 0||(I=I.audioTrack)===null||I===void 0?void 0:I.preprocessingTrack,E=(g=this._stream)===null||g===void 0||(g=g.audioTransceiver)===null||g===void 0?void 0:g.sender,i=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(i&&B)return(await i.getStatsWithLowFrequency(B,!0,E)).find(e=>e.type==="outbound-rtp")}_watchForFirstVideoFrameSend(){let I=-1,g=-1;this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._firstVideoFrameInterval=window.setInterval(async()=>{const C=await this._getFirstVideoFrameStats();let Q=0,B=0;if(C==null||C.map(E=>{Q+=E.framesSent,B+=E.packetsSent}),C&&C.length>0&&(Q>I||B>g)){if(I===-1&&g===-1)return I=Q,void(g=B);this.sendFrameFinish("video"),window.clearInterval(this._firstVideoFrameInterval)}},100)}_watchForFirstAudioFrameSend(){let I=-1;this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstAudioFrameInterval=window.setInterval(async()=>{const g=await this._getFirstAudioFrameStats();if(g&&g.packetsSent>I){if(I===-1)return void(I=g.packetsSent);this.sendFrameFinish("audio"),window.clearInterval(this._firstAudioFrameInterval)}},100)}reset(){this._login=!1,this._publisher=!1,this._unMuteAudio=!1,this._enableAudio=!1,this._unMuteVideo=!1,this._enableVideo=!1,this._audioExternal=!1,this._pushAudio=!1,this._videoExternal=!1,this._pushVideo=!1,this._autoPublish=!1,this._publish=!1,this._audioFirstFrameState=0,this._videoFirstFrameState=0,this._currentAudioSend={startTime:0,eventSessionId:0,type:"login"},this._currentVideoSend={startTime:0,eventSessionId:0,type:"login"},window.clearTimeout(this._firstAudioFrameTimer),window.clearTimeout(this._firstVideoFrameTimer),window.clearInterval(this._firstAudioFrameInterval),window.clearInterval(this._firstVideoFrameInterval)}destroy(){this.reset(),delete this._stream}get _audioSending(){return this._audioFirstFrameState===1}get _videoSending(){return this._videoFirstFrameState===1}}const b9A={audio:{delay:1200,stallRadio:.3},video:{delay:1200,stallRadio:.6},screen_audio:{delay:1600,stallRadio:.8},screen_video:{delay:1600,stallRadio:.8}};class y9A{constructor(I){P(this,"_preUplinkStats",new Map),P(this,"_preDownlinkStats",new Map),P(this,"_timer",void 0),P(this,"_delayTimer",void 0),P(this,"reportor",void 0),this._ctx=I}updateUplinkStats(I,g){const{audioStats:C,videoStats:Q,isScreen:B}=I;if(C.sendKBitrate>0&&C.rtt){const E=B?"screen_audio":"audio",{rtt:i,_fractionLost:e,_retransmittedRate:o}=C,t=this._getQosLevel(i,e||0,o||0),s=this._preUplinkStats.get(E)||[t];this._preUplinkStats.set(E,[...s,t].slice(-2))}if(Q.sentKBitrate>0&&Q.rtt){const E=B?"screen_video":"video";let{_fractionLost:i}=Q;const{rtt:e,_sendBandWidth:o,_retransmittedRate:t}=Q;o===0&&(i=Math.max(.65,i));const s=this._getQosLevel(e,i||0,t||0),v=this._getUplinkVideoQoE(I,g),r=this._getVideoUplinkNetworkQuality(s,v),n=this._preUplinkStats.get(E)||[r];this._preUplinkStats.set(E,[...n,r].slice(-2))}this._startNetworkQualityReport()}updateDownlinkStats(I,g){if(!g)return;const{audioActive:C,videoActive:Q}=this._getStreamActiveState(g),{audioStats:B,videoStats:E,isScreen:i,userId:e}=I;let o,t,s=!0,v=!0;if(C)if(B.receivedKBitrate===0)s=!1;else{const{rtt:a,audioLossRate:c,stallDuration:d,statsInterval:l,e2eDelay:h}=B,D=d/l,u=i?"screen_audio":"audio",w=this._getQosLevel(a,c||0,E._retransmittedRate||0),b=this._getDownlinkQoE(u,D,h);o=this._getNetworkQuality(w,b)}if(Q)if(E.receivedKBitrate===0||E.rtt===0)v=!1;else{const{rtt:a,videoLossRate:c,stallDuration:d,statsInterval:l,e2eDelay:h,_retransmittedRate:D}=E,u=d/l,w=i?"screen_video":"video",b=this._getQosLevel(a,c||0,D||0),y=this._getDownlinkQoE(w,u,h);t=this._getNetworkQuality(b,y)}const r="".concat(e).concat(i?"_screen":"");if(!s&&!v)return void this._preDownlinkStats.delete(r);const n=o&&t?Math.ceil((o+t)/2):o||t;if(n){const a=this._preDownlinkStats.get(r)||[n];this._preDownlinkStats.set(r,[...a,n].slice(-2)),this._startNetworkQualityReport()}}destroy(){this._timer&&(window.clearInterval(this._timer),delete this._timer),this._delayTimer&&(window.clearTimeout(this._delayTimer),delete this._delayTimer),this._preUplinkStats.clear(),this._preDownlinkStats.clear()}_startNetworkQualityReport(){this._delayTimer||this._timer||(this._preUplinkStats.size>0||this._preDownlinkStats.size>0)&&(this._delayTimer=setTimeout(()=>{delete this._delayTimer,this._reportNetworkQuality(),this._timer=window.setInterval(()=>{this._reportNetworkQuality()},2e3)},300))}_reportNetworkQuality(){var I;let g,C;if(["connected","connecting"].includes((I=this._ctx.handler)===null||I===void 0?void 0:I.getConnectionState())){const Q=this._getBetterQualityAndRemoveOldest("audio","up"),B=this._getBetterQualityAndRemoveOldest("video","up");g=Q&&B?Math.ceil((Q+B)/2):Q||B||this._getBetterQualityAndRemoveOldest("screen_video","up")||this._getBetterQualityAndRemoveOldest("screen_audio","up")||Ye.EXCELLENT;const E=Array.from(this._preDownlinkStats.keys()).map(i=>this._getBetterQualityAndRemoveOldest(i,"down")).filter(i=>i);C=Math.ceil(E.reduce((i,e)=>e+i,0)/E.length)||Ye.UNKNOWN}else g=C=Ye.DOWN;navigator.onLine||(g=Ye.DOWN,C=Ye.DOWN),typeof this.reportor=="function"&&this.reportor(g,C)}_getNetworkQuality(I,g){return g===1?Math.max(I-2,1):g===2?I:Math.min(I+1,5)}_getVideoUplinkNetworkQuality(I,g){return g===1||g===0?I:Math.min(g===2?I+1:I+2,5)}_getQosLevel(I,g,C){let Q;return Q=(!I||I<=250)&&g<=.15?1:(!I||I<=500)&&g<=.3?2:(!I||I<=750)&&g<=.45?3:(!I||I<=1e3)&&g<=.6?4:5,C>.5?Q=Math.max(Q,4):C>.35?Q=Math.max(Q,3):C>.15&&(Q=Math.max(Q,2)),Q}_getUplinkQoE(I,g){let C=0;switch(I){case"audio":case"video":C=g<.05?1:g<.1?2:3;break;case"screen_video":case"screen_audio":C=g<.04?1:g<.08?2:3}return C}_getUplinkVideoQoE(I,g){var C;const Q=(I==null||(C=I.videoStats)===null||C===void 0?void 0:C.rid)||"0";if(!g)return 0;const B=g.pubAttributes.videoDescriptions[Q],E=I.videoStats,i=E.encodedFrameWidth*E.encodedFrameHeight/(B.width*B.height),e=E.sentFrameRate/B.framerate;let o=0,t=0;return typeof i!="number"||Number.isNaN(i)||(o=i>=.9?1:i<.9&&i>=.8?2:3),typeof e!="number"||Number.isNaN(e)||(t=e>=.8?1:e<.8&&e>=.6?2:3),Math.max(0,o,t)}_getDownlinkQoE(I,g,C){const Q=b9A[I];return g>Q.stallRadio||C>Q.delay||g>Q.stallRadio/2&&C>Q.delay/2?3:(g>Q.stallRadio/2||Q.delay,2)}_getBetterQualityAndRemoveOldest(I,g){let C=Ye.UNKNOWN;const Q=g==="up"?this._preUplinkStats:this._preDownlinkStats,B=Q.get(I);if(B){const E=B.filter(i=>i);E.length>0&&(C=Math.min(...E)),B.shift(),B.length===0&&Q.delete(I)}return C}_getStreamActiveState(I){let{subMediaType:g,_attributes:C,subVideo:Q,subAudio:B}=I;return{audioActive:B&&$I(g)&&C.localaudio&&C.audiostream,videoActive:Q&&gI(g)&&C.localvideo&&C.videostream}}}class w9A{constructor(I){P(this,"_timer",void 0),P(this,"_remoteVideoSizeCache",{}),P(this,"_remoteScreenSizeCache",{}),P(this,"onchange",void 0),this._room=I,this._start()}destroy(){this._timer&&(window.clearInterval(this._timer),delete this._timer),this._remoteVideoSizeCache={},this._remoteScreenSizeCache={}}_start(){this._timer||(this._timer=window.setInterval(()=>{const I={},g={};this._room.remoteStreams.forEach((C,Q)=>{C.forEach(B=>{var E;const i=(E=B.videoTrack)===null||E===void 0?void 0:E.preprocessingTrack;if(i){const t=B.isScreen?this._remoteScreenSizeCache:this._remoteVideoSizeCache,{width:s=0,height:v=0}=t[Q]||{};let r=0,n=0;if(mI){var e,o;({width:r,height:n}=(e=B==null||(o=B.videoTrack)===null||o===void 0?void 0:o.getSizeByPlayer())!==null&&e!==void 0?e:{width:0,height:0})}else{const a=i.getSettings();r=a.width||0,n=a.height||0}v===n&&s===r||typeof this.onchange=="function"&&this.onchange(Q,B.isScreen,r,n),delete t[Q],(B.isScreen?g:I)[Q]={width:r,height:n}}})}),Object.keys(this._remoteVideoSizeCache).forEach(C=>{typeof this.onchange=="function"&&this.onchange(C,!1,0,0)}),Object.keys(this._remoteScreenSizeCache).forEach(C=>{typeof this.onchange=="function"&&this.onchange(C,!0,0,0)}),this._remoteVideoSizeCache=I,this._remoteScreenSizeCache=g},1e3))}}const m9A=Array.from(new TextEncoder().encode("subt")),G9A={1:m.SUBTITLE_ERR_POSTPROCESS,2:m.SUBTITLE_ERR_CONNECTION_ERROR,3:m.SUBTITLE_ERR_PROCESS_ERROR},fc=new uA("SubtitleTool",1),R9A=A=>{if(A.extraInfo)try{const g=JSON.parse(A.extraInfo);g.source_language&&["zh","en","ja"].indexOf(g.source_language)}catch{}else{var I;const g=((I=navigator.language)===null||I===void 0?void 0:I.substring(0,2))||"";["zh","en","ja"].indexOf(g)>-1&&(A.extraInfo=JSON.stringify({source_language:g}))}};class z0{constructor(I,g){P(this,"_taskId",void 0),P(this,"_sourceLanguage","zh"),P(this,"_updating",!1),P(this,"onEvent",void 0),P(this,"onMessage",void 0),P(this,"_preConfig",void 0),P(this,"_timer",void 0),this._ctx=I,this._roomConf=g;const{extraInfo:C}=g.userInfo;if(C)try{const Q=JSON.parse(C);Q.source_language&&(this._sourceLanguage=Q.source_language)}catch{}}async start(I){fc.info("start","Invoke config: %o",I),MA(I.mode,"mode",[si.ASR_ONLY,si.ASR_AND_TRANSLATION]);const g=Array.isArray(I.targetLanguage)?I.targetLanguage:[I.targetLanguage||""];if(I.mode===si.ASR_AND_TRANSLATION&&g.findIndex(C=>S9A.indexOf(C)===-1)>-1)throw new U(m.INVALID_PARAMS,"Invalid targetLanguage.");if(this._taskId)throw new U(m.SUBTITLE_ALREADY_ON,"Already turned on subtitle");this._preConfig={targetLanguage:g,mode:I.mode},this._taskId=(Date.now().toString()+this._roomConf.roomId+this._roomConf.userId).substring(0,20),await this._sendSubtitleSignalingWithRetry(I,this._taskId)}async update(I){if(fc.info("update","Invoke config: %o",I),!this._taskId)throw new U(m.SUBTITLE_NOT_TURNED_ON,"Start subtitle first.");this._sourceLanguage=I.sourceLanguage,this._updating=!0;try{await this._ctx.signalingManager.sendSignaling("controlMessage",this._genChangeSubtitleLanguageSignaling(I,this._taskId))}catch(g){throw this._updating=!1,g}}stop(){fc.info("stop","Invoke"),this._taskId&&this._ctx.signalingManager.sendSignaling("controlMessage",{type:"subtitle",action:"stopped",appId:this._ctx.appId,roomId:this._roomConf.roomId,userId:this._roomConf.userId,taskId:this._taskId}).finally(()=>{var I;delete this._taskId,(I=this.onEvent)===null||I===void 0||I.call(this,{event:Tt.STOPPED}),this._clearTimer()})}async reconnect(){this._taskId&&this._preConfig&&(await this._ctx.signalingManager.sendSignaling("controlMessage",{type:"subtitle",action:"stopped",appId:this._ctx.appId,roomId:this._roomConf.roomId,userId:this._roomConf.userId,taskId:this._taskId}),delete this._taskId,this.start(this._preConfig))}getConfig(){return this._preConfig}destroy(){fc.info("destroy","Invoke"),this.stop(),delete this._preConfig,delete this._taskId}onResult(I){const{error:g,errorMessage:C,eventType:Q}=I.body;if(g!==0){var B;const e=new U(G9A[g]||m.SUBTITLE_ERR_UNKNOWN,C||"");(B=this.onEvent)===null||B===void 0||B.call(this,{event:Tt.ERROR,errorCode:e.code,errorMessage:e.message}),this._clearTimer()}else if(Q==="SubtitleStarted"){var E;(E=this.onEvent)===null||E===void 0||E.call(this,{event:Tt.STARTED}),this._clearTimer()}else if(this._updating&&Q==="LanguageChanged"){var i;this._updating=!1,(i=this.onEvent)===null||i===void 0||i.call(this,{event:Tt.UPDATED})}}onMessageRecv(I){if(arguments.length>1&&arguments[1]!==void 0&&arguments[1]||this._taskId&&this._preConfig){const C=L9A(I);if(!C||C.length===0)return!1;if(this._taskId&&this._preConfig){const{mode:Q,targetLanguage:B}=this._preConfig,E=[];var g;C.forEach(i=>{if(Q===si.ASR_ONLY)i.mode===Q&&E.push(i);else{const e=B.includes(i.language);(e||i.mode===si.ASR_ONLY)&&E.push(i),i.mode===si.ASR_ONLY&&e&&E.push(R(R({},i),{},{mode:si.ASR_AND_TRANSLATION}))}}),E.length>0&&((g=this.onMessage)===null||g===void 0||g.call(this,E))}return!0}return!1}async _sendSubtitleSignalingWithRetry(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;await this._ctx.signalingManager.sendSignaling("controlMessage",this._genSubtitleSignaling(I,g)),this._timer=self.setTimeout(()=>{var Q;C===2?((Q=this.onEvent)===null||Q===void 0||Q.call(this,{event:Tt.ERROR,errorCode:m.TIME_OUT,errorMessage:"start subtitle timeout."}),delete this._timer,this.stop()):this._sendSubtitleSignalingWithRetry(I,g,C+1)},z0.retryIntervel)}_genSubtitleSignaling(I,g){return{taskId:g,type:"subtitle",action:"started",roomId:this._roomConf.roomId,appId:this._ctx.appId,userId:this._roomConf.userId,subtitleMeta:{subtitleConfig:{mode:I.mode,usersConfig:[{userId:this._roomConf.userId,targetLanguages:Array.isArray(I.targetLanguage)?I.targetLanguage:[I.targetLanguage||""]}]},vendorConfig:{type:0}}}}_genChangeSubtitleLanguageSignaling(I,g){return{taskId:g,type:"subtitle",action:"subtitleUpdated",roomId:this._roomConf.roomId,appId:this._ctx.appId,userId:this._roomConf.userId,subtitleMeta:{protocol:1,languageConfig:{sourceLanguages:[{userId:this._roomConf.userId,languageCode:[I.sourceLanguage]}]}}}}_clearTimer(){this._timer&&(self.clearTimeout(this._timer),delete this._timer)}}P(z0,"retryIntervel",3e4);const L9A=A=>{let{message:I}=A;if(I instanceof ArrayBuffer&&I.byteLength>8)try{const g=new DataView(I,0);let C=0;if(m9A.every(Q=>g.getUint8(C++)===Q)){const Q=g.getUint32(C);if(C+=4,Q===g.byteLength-8){const B=Ag.ab2str(I.slice(8)),{data:E,type:i}=JSON.parse(B);if(i==="subtitle")return E}}}catch{}return!1},S9A=["zh","zh-Hant","tn","vi","iu","it","id","hi","en","ho","he","es","el","uk","ur","tk","tr","ti","ty","tl","to","th","ta","te","sl","sk","ss","eo","sm","sg","st","sv","ja","tw","qu","pt","pa","no","nb","nr","my","bn","mn","mh","mk","ml","mr","ms","lu","ro","lt","lv","lo","kj","hr","kn","ki","cs","ca","nl","ko","ht","gu","ka","kl","km","lg","kg","fi","fj","fr","ru","ng","de","tt","da","ts","cv","fa","bs","pl","bi","nd","ba","bg","az","ar","af","sq","ab","os","ee","et","ay","lzh","am","ckb","cy","gl","ha","hy","ig","kmr","ln","nso","ny","om","sn","so","sr","sw","xh","yo","zu"];function T9A(A){return A.replace(/[A-Z]/g,I=>"_".concat(I.toLowerCase()))}function Vw(A,I){return R(R({},A),I)}function js(A){const I={};return Object.keys(A).forEach(g=>{const C=A[g];try{Array.isArray(C)?I[g]=C.map(Q=>Q!==null&&typeof Q=="object"?js(Q):Q):I[g]=C!==null&&typeof C=="object"?js(C):C}catch{}}),I}function NY(A){return A===null?[]:Object.keys(A).map(I=>A[I])}const _D=new uA("Locker",2);let U9A=1;class tB{constructor(I){P(this,"lockingPromise",Promise.resolve()),P(this,"locks",0),P(this,"name",""),P(this,"lockId",void 0),P(this,"closeReason",void 0),this.lockId=U9A++,I&&(this.name=I),_D.info("lock-".concat(this.name,"-").concat(this.lockId),"is created.")}get isLocked(){return this.locks>0}lock(){let I;this.locks+=1,_D.info("lock-".concat(this.name,"-").concat(this.lockId),"locked, current queue ".concat(this.locks,"."));const g=new Promise(Q=>{I=()=>{this.locks-=1,_D.info("lock-".concat(this.name,"-").concat(this.lockId),"unlocked, current queue ".concat(this.locks,".")),Q()}}),C=this.lockingPromise.then(()=>I);return this.lockingPromise=this.lockingPromise.then(()=>g),C}}var ci=(A=>(A[A.SEND=0]="SEND",A[A.FEEDBACK=1]="FEEDBACK",A))(ci||{}),kR=(A=>(A[A.P2P=0]="P2P",A[A.SIGNAL=1]="SIGNAL",A[A.BROADCAST=2]="BROADCAST",A[A.BUSINESS_SERVER=3]="BUSINESS_SERVER",A))(kR||{}),zw=(A=>(A[A.SUCCESS=0]="SUCCESS",A[A.TIMEOUT=1]="TIMEOUT",A[A.BROKEN=2]="BROKEN",A[A.NO_RECEIVER=3]="NO_RECEIVER",A[A.NO_RELAYPATH=4]="NO_RELAYPATH",A[A.EXCEED_QPS=5]="EXCEED_QPS",A[A.SEND_TO_SERVER_ERROR=17]="SEND_TO_SERVER_ERROR",A[A.SERVER_RESPONSE_ERROR=18]="SERVER_RESPONSE_ERROR",A[A.NOT_JOIN=100]="NOT_JOIN",A[A.NOT_LOGIN=105]="NOT_LOGIN",A[A.SERVER_PARAMS_NOTSET=106]="SERVER_PARAMS_NOTSET",A[A.UNKNOWN=1e3]="UNKNOWN",A))(zw||{});const F9A={0:[0,"success"],1:[m.USER_MESSAGE_TIMEOUT,"timeout, failed to send."],2:[m.USER_MESSAGE_BROKEN,"dataChannel broken, failed to send."],3:[m.USER_MESSAGE_NO_RECEIVER,"cannot find the receiver."],4:[m.USER_MESSAGE_NO_RECEIVER,"cannot find relay path."],5:[m.USER_MESSAGE_EXCEED_QPS,"cannot find relay path."],17:[m.USER_MESSAGE_SEND_TO_SERVER_ERROR,"failed to send to business server."],18:[m.USER_MESSAGE_SERVER_RESPONSE_ERROR,"business server response error."],100:[m.USER_MESSAGE_NOT_JOIN,"not join room"],105:[m.USER_MESSAGE_NOT_LOGIN,"not login."],106:[m.USER_MESSAGE_SERVER_PARAMS_NOTSET,"server param is not set."],1e3:[m.USER_MESSAGE_UNKNOWN,"unknown."]},Y9A=["msg"],ZY=[],k9A=[x.ENGINE_CONTROL_MESSAGE];var We=(A=>(A[A.C2S=0]="C2S",A[A.C2C=1]="C2C",A[A.C2GW=2]="C2GW",A[A.C2CDirect=3]="C2CDirect",A[A.C2RTM=4]="C2RTM",A))(We||{});class p9A extends UB.EventEmitter{constructor(I,g,C){super(),P(this,"_singlingCache",new Map),P(this,"_p2pCache",new Map),P(this,"_rttIds",{}),P(this,"_p2pMessageId",new TaA),P(this,"_clearDataChannelListener",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),this.id=I,this._dataChannel=g,this.connectionIds=C,this._clearDataChannelListener=this._handleHandler(),this._monitor=tI(I),this.logger=new uA("DataChannelSignaling",3,I)}destroy(){this._clearDataChannelListener(),delete this._dataChannel,this._singlingCache.forEach((I,g)=>{I.error(new U(m.OPERATION_CANCEL,"disconnect")),this._singlingCache.delete(g)}),this._singlingCache.clear(),this._p2pCache.clear(),this._rttIds={}}sendSignaling(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:6e4;return new Promise((B,E)=>{var i;const e=this._genHeader(C);e.id=DF();const o=e.id.join("-"),t=R({error_code:0,message:JSON.stringify(g),signaling_event:"call-".concat(I),signaling_type:"Send",stream_id:g.streamId,stream_user_id:g.streamUserId,direction:"up",event_session_id:o},this.connectionIds);(i=this._monitor)===null||i===void 0||i.report("rtc_signaling",t);const s=I==="customMessage";s&&KI.samplingOne2ManyMsg(this.id,Number(e.id.join("")),g);const v=setTimeout(()=>{this._singlingCache.delete(o),E(new U(m.TIME_OUT,"".concat(I," message time out"))),s&&KI.updateOne2ManyMsgAck(this.id,g,999)},Q);this._singlingCache.set(o,{start:aA(),signalingType:I,success:r=>{clearTimeout(v),B(r),s&&KI.updateOne2ManyMsgAck(this.id,g,0)},error:r=>{clearTimeout(v),E(r),s&&KI.updateOne2ManyMsgAck(this.id,g,r.code)},id:o}),this.logger.info("Signal",">>>>>> [".concat(I,"{").concat(e.functionType,"}][").concat(o,"]"),g),this._sendMessage(I,e,g)})}sendPingSignaling(){return this.sendSignaling("CheckConnectivity",{ts:Date.now()},{functionType:2})}async sendP2PMessage(I,g){let{msg:C}=I,Q=ve(I,Y9A);const B=C instanceof ArrayBuffer;return this._sendP2PMessage(KI.samplingP2PMsg(this.id,R(R({ver:1,id:this._p2pMessageId.getMessageId(),time:Date.now(),dir:ci.SEND,type:kR.P2P,err:zw.SUCCESS},Q),{},{binary:B,msg:B?await Ag.ab2b64str(C):C})),g)}_sendP2PMessage(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const C=this._genHeader(R(R({needAck:!0,functionType:1},g),{},{id:DF()}));return vD(I.msg)?this._rttIds[I.id]=I.id:I.dir===ci.SEND&&this.logger.info("_sendP2PMessage [DC Signaling p2p{".concat(C.functionType,"} >>]"),JSON.stringify(I)),new Promise((Q,B)=>{if(I.dir===ci.SEND){const E=setTimeout(()=>{this._p2pCache.delete(I.id),B(new U(m.USER_MESSAGE_TIMEOUT,"P2P message timeout")),KI.updateP2PMsgAck(this.id,I,999)},12e3);this._p2pCache.set(I.id,{success:(i,e)=>{clearTimeout(E),Q(e),KI.updateP2PMsgAck(this.id,I,0)},error:i=>{clearTimeout(E),KI.updateP2PMsgAck(this.id,I,i.err);const[e,o]=F9A[i.err]||[m.USER_MESSAGE_UNKNOWN,"err: ".concat(i.err,", msg: ").concat(i.msg)];B({err:i.err,code:e,message:i.msg||o})}})}try{this._sendMessage("p2p",C,I)}catch(E){throw E.code===m.NOT_CONNECTED_YET&&(E.code=m.USER_MESSAGE_BROKEN),E}})}_sendMessage(I,g,C){if(!this._dataChannel||this._dataChannel.readyState!=="open")throw new U(m.NOT_CONNECTED_YET,"DataChannel not open");const Q=lA("SIGNAL_COMPRESSION")||g.zip,B=g.version+(Number(Q)<<4)+(Number(g.encrypt)<<5),E=Number(g.needAck)+(Number(g.direction)<<1)+(Number(g.functionType)<<2)+(Number(g.binary)<<6),i=Ag.str2ab(JSON.stringify([I,C])),e=nV(Uint8Array,[B,E,...g.id||[]],Q||g.zip?uw.deflate(new Uint8Array(i)):new Uint8Array(i));try{this._dataChannel.send(e.buffer)}catch(t){var o;throw(o=this._monitor)===null||o===void 0||o.report("rtc_error",{message:"datachannel send error: ".concat(t.message),error_code:TC.DC_SEND_ERROR}),t}I==="p2p"?KI.updateP2PMsgReq(this.id,C,e.buffer.byteLength):I==="customMessage"&&KI.updateOne2ManyMsgReq(this.id,C,e.buffer.byteLength)}_dispartData(I){const g=new Uint8Array(I);let C=0;const Q=g[C++],B=g[C++],E={version:15&Q,zip:!(16&~Q),encrypt:!(32&~Q),needAck:!(1&~B),direction:(2&B)>>1,functionType:(60&B)>>2,binary:!(64&~B)};if(E.needAck||E.direction===1){for(;C<=6;C++)if(!waA(g[C])){C++;break}E.id=Array.from(g.slice(2,C))}return{header:E,data:g.slice(C)}}_feedbackSignaling(I,g,C){const Q=this._genHeader({needAck:!0,direction:1,id:I.split("-").map(B=>Number(B))});ZY.includes(g)||this.logger.info("Signal",">>>>>> [".concat(g,"-res][").concat(I,"]")),this._sendMessage("".concat(g,"-res"),Q,C)}async _handleMessage(I){const g=Date.now(),{byteLength:C}=I,Q=this._dispartData(I);let{data:B}=Q;const{header:E}=Q;if(E.zip){const t=new uw.Inflate;t.push(B,!0),B=t.result}const i=Ag.ab2str(B);let e=[];try{e=JSON.parse(i)}catch(t){var o;t instanceof Error&&((o=this._monitor)===null||o===void 0||o.report("rtc_signaling_msg_error",R({error_code:-1,message:t.message,reason:"message parse failed"},this.connectionIds)));return}switch(E.functionType){case 0:case 4:this.C2S(E,e,i,C,g);break;case 1:this.C2C(e,C,g);break;case 2:this.C2GW(E,e,i)}}async C2S(I,g,C,Q,B){var E;const i=((E=I.id)===null||E===void 0?void 0:E.join("-"))||"";if(I.direction===1)this._handleAckMessage(i,g[0]||{},C,I.functionType);else if(Array.isArray(g)){var e;const o=g[0];g=g[1],ZY.includes(o)||this.logger.info("Signal","<<<<<< ".concat(o,"{").concat(I.functionType,"}"),g,i),k9A.includes(o)||this._feedbackSignaling(i,o,o===x.ON_CUSTOM_MESSAGE?R(R({},g),{},{message:""}):""),g.binary&&typeof g.message=="string"&&(g.message=await Ag.b64str2ab(g.message,this._monitor));const t=Date.now();this.emit(o,R({},g)),o===x.ON_CUSTOM_MESSAGE&&KI.reportOne2ManyMsgRecv(this.id,g,{msg_size:Q,recv_msg_ts:B,fwd_msg_ts:t}),(e=this._monitor)===null||e===void 0||e.report("rtc_signaling",R({error_code:0,message:C,signaling_event:"on-".concat(o),signaling_type:"Recv",stream_id:g.streamId,stream_user_id:g.clientId,direction:"down"},this.connectionIds))}}async C2C(I,g,C){var Q,B,E,i;Array.isArray(I)&&(I=I[1]);const e=(Q=I)===null||Q===void 0?void 0:Q.id;switch(this._rttIds[e]||((B=I)===null||B===void 0?void 0:B.dir)===ci.FEEDBACK||vD((E=I)===null||E===void 0?void 0:E.msg)?delete this._rttIds[e]:this.logger.info("Signal","<<<<<< p2p response",I),I.dir){case ci.SEND:const o=Date.now();if(!vD((i=I)===null||i===void 0?void 0:i.msg)){const{binary:t,msg:s,room:v,to:r,from:n}=I,a=v===""?t?x.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM:x.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM:t?x.USER_BINARY_MESSAGE_RECEIVED:x.USER_MESSAGE_RECEIVED;r?this.emit(a,R(R({},I),{},{msg:t?await Ag.b64str2ab(s,this._monitor):s})):this.emit(x.ON_CUSTOM_MESSAGE,{clientId:n,binary:t,message:t?await Ag.b64str2ab(s,this._monitor):s})}this._sendP2PMessage(R(R({},I),{},{dir:ci.FEEDBACK,msg:""})),KI.reportP2PMsgRecv(this.id,I,{msg_size:g,recv_msg_ts:C,fwd_msg_ts:o});break;case ci.FEEDBACK:this._handleP2PMsgFeedback(I)}}C2GW(I,g,C){if(I.direction===1){var Q;const E=((Q=I.id)===null||Q===void 0?void 0:Q.join("-"))||"";this._handleAckMessage(E,g[0]||{},C,I.functionType)}else{const[E,i={}]=g;if(E==="RXMediaMsg"){var B;const{type:e,data:o}=i;switch((B=this._monitor)===null||B===void 0||B.report("rtc_signaling",R({error_code:0,message:C,signaling_event:"on-".concat(e),signaling_type:"Recv",stream_id:"",stream_user_id:"",direction:"down"},this.connectionIds)),e){case"RSCP":try{const t=JSON.parse(o);Array.isArray(t)&&this.emit(e,t)}catch{}break;case"RTT":try{const t=JSON.parse(o);t.length&&this.emit(e,t[0])}catch{}break;case"SSC":try{const t=JSON.parse(o);t.length&&(this.logger.info("Signal","<<<<<< ".concat(e),t),this.emit(e,t[0]))}catch{}}}else E==="engineControlMessage"&&this.C2S(I,g,C,0,0)}}_handleHandler(){const I=Q=>{this.logger.warn("_handleHandler","dataChannel close",Q)},g=Q=>{this.logger.error("_handleHandler","dataChannel error",Q)},C=Q=>{this._handleMessage(Q.data)};return this._dataChannel.addEventListener("close",I),this._dataChannel.addEventListener("error",g),this._dataChannel.addEventListener("message",C),()=>{const Q=this._dataChannel;Q==null||Q.removeEventListener("close",I),Q==null||Q.removeEventListener("error",g),Q==null||Q.removeEventListener("message",C)}}_genHeader(){return R({version:2,zip:!1,encrypt:!1,needAck:!0,direction:0,functionType:0,binary:!1},arguments.length>0&&arguments[0]!==void 0?arguments[0]:{})}_handleAckMessage(I,g,C,Q){var B;const E=this._singlingCache.get(I);E&&(this._singlingCache.delete(I),g.code===200?E.success(g):E.error(g),this.logger.info("Signal","<<<<<< [".concat(E.signalingType,"{").concat(Q,"}-ack] ").concat(I),g));const i=R({error_code:0,message:C,signaling_event:E==null?void 0:E.signalingType,signaling_type:"Ack",stream_id:"",stream_user_id:"",direction:"down",elapse:E?aA()-E.start:0},this.connectionIds);E!=null&&E.id&&(i.event_session_id=E.id),(B=this._monitor)===null||B===void 0||B.report("rtc_signaling",i)}_handleP2PMsgFeedback(I){const g=this._p2pCache.get(I.id);g&&(this._p2pCache.delete(I.id),I.err===zw.SUCCESS?g.success(I.id,I):g.error(I))}}class N9A{constructor(I,g){P(this,"roomId",void 0),P(this,"userInfo",void 0),P(this,"userId",void 0),P(this,"sessionId",tC()),P(this,"token",void 0),P(this,"rtcVid",void 0),P(this,"joinPromise",void 0),P(this,"startJoinTimestamp",void 0),P(this,"_liveControlMessage",void 0),P(this,"_userStreamMap",new Map),P(this,"_roomConfig",{isAutoPublish:!0,isAutoSubscribeAudio:!0,isAutoSubscribeVideo:!0,roomProfileType:EC.communication}),P(this,"_vendorConfig",{enableMultiVendor:!1,vendorCode:0}),P(this,"_roomAttr",{multiChatMode:!1,bigRoomMode:!1}),P(this,"_tokenPublishPrivilegeExpired",!1),P(this,"_tokenSubscribePrivilegeExpired",!1),P(this,"_streamQueueMap",new Map),P(this,"_monitor",void 0),this._ctx=g,this.roomId=I.roomId,this.userInfo=I.userInfo,this.userId=I.userInfo.userId,this.token=I.token,this._monitor=tI(g.id)}async checkJoinRoom(){await this.joinPromise}get vendorConfig(){return this._vendorConfig}setVendorConfig(I){this._vendorConfig=I}updateRoomAttributes(I){this._roomAttr=R(R({},this._roomAttr),I)}setLiveControlMessage(I){this._liveControlMessage=I}getLiveControlMessage(){return this._liveControlMessage}isMultiChatMode(){return this._roomAttr.multiChatMode}updateRoomConfig(I){return this._roomConfig=Vw(this._roomConfig,I),this._roomConfig}get isAutoPublish(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoPublish}get isAutoSubscribeAudio(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoSubscribeAudio}get isAutoSubscribeVideo(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoSubscribeVideo}get remoteVideoConfig(){return this._roomConfig.remoteVideoConfig}get roomProfileType(){return this._roomConfig.roomProfileType||EC.communication}isRTSOnlyRoom(){return this._roomConfig.roomMode===$W.ROOM_MODE_RTS_ONLY}get rtsOnlySignalHeader(){return this.isRTSOnlyRoom()?{functionType:We.C2RTM}:void 0}updateUserPubInfo(I){const g=this._userStreamMap.get(I.clientId)||{};I.screen?(g.screenAudio=I.attributes.audiostream,g.screenVideo=I.attributes.videostream):(g.audio=I.attributes.audiostream,g.video=I.attributes.videostream),this._userStreamMap.set(I.clientId,g)}getUserPubInfo(I){return R({audio:!1,video:!1,screenAudio:!1,screenVideo:!1},this._userStreamMap.get(I)||{})}resetUserPubInfo(){this._userStreamMap.clear()}get tokenPublishPrivilegeExpired(){return this._tokenPublishPrivilegeExpired}get tokenSubscribePrivilegeExpired(){return this._tokenSubscribePrivilegeExpired}setTokenPublishPrivilegeExpired(I){this._tokenPublishPrivilegeExpired=I}setTokenSubscribePrivilegeExpired(I){this._tokenSubscribePrivilegeExpired=I}getStayRoomDuration(){return this.startJoinTimestamp?aA()-this.startJoinTimestamp:0}getStreamQueueLock(I){let g=this._streamQueueMap.get(I);return g||(g=new tB(I),this._streamQueueMap.set(I,g)),g}report(I,g,C){var Q;(Q=this._monitor)===null||Q===void 0||Q.report(I,R({room_id:this.roomId,user_id:this.userId,rtc_session_id:this.sessionId,rtc_vid:this.rtcVid},g),C)}}const pt=(A,I,g)=>{g.info(A,"userId: %o, subAudio: %o, subVideo: %o, audioMid: %o, videoMid: %o, sequenceId: %o",I.userId,I.subAudio,I.subVideo,I.audioMid,I.videoMid,I.sequenceId)};function DA(A,I,g){const C=g.value;return g.value=async function(){if(!this._ctx.signalingManager.isConnected())throw new U(m.NOT_CONNECTED_YET,"error in ".concat(I,": try again after connect"));try{await(this._roomConf||this.config).checkJoinRoom()}catch{throw new U(m.JOIN_ROOM_FAILED,"error in ".concat(I,": try again after joined"))}for(var Q=arguments.length,B=new Array(Q),E=0;E{for(var Q,B=K9A(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&Z9A(I,g,B),B};class Nt extends iQ{constructor(I,g){super(),P(this,"_forwardDstRooms",new Map),P(this,"forwardStreamState","stopped"),this._ctx=I,this._roomConf=g}async startForwardStream2Rooms(I){if(this.forwardStreamState==="running"||this.forwardStreamState==="paused")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke startForwardStreamToRooms in state: ".concat(this.forwardStreamState));const g=await this._sendForwardStreamSignaling("start",this._roomConf.roomId,I);this._updateDstRooms(I,g);const C=this._transformForwardStreamResult(g);return this.forwardStreamState="running",C}async updateForwardStream2Rooms(I){if(this.forwardStreamState==="stopped")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke updateForwardStreamToRooms in state: ".concat(this.forwardStreamState));let g=this._mockForwardStreamResult(I);return this.forwardStreamState==="running"&&(g=await this._sendForwardStreamSignaling("update",this._roomConf.roomId,I)),this._updateDstRooms(I,g),this._transformForwardStreamResult(g)}async stopForwardStream2Rooms(){if(this.forwardStreamState==="stopped")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke stopForwardStreamToRooms in state: ".concat(this.forwardStreamState));let I=this._mockForwardStreamResult([]);if(this.forwardStreamState==="running"&&(I=await this._sendForwardStreamSignaling("stop",this._roomConf.roomId)),this._updateDstRooms([],I),[...this._forwardDstRooms.keys()].length>0)throw new U(m.UNEXPECTED_ERROR,"stopforwardstream failed: ".concat(JSON.stringify(I)));const g=this._transformForwardStreamResult(I);return this.forwardStreamState="stopped",g}async pauseForwardStream2AllRooms(){if(this.forwardStreamState==="paused"||this.forwardStreamState==="stopped")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke pauseForwardStreamToAllRooms in state: ".concat(this.forwardStreamState));const I=await this._sendForwardStreamSignaling("stop",this._roomConf.roomId),g=this._transformForwardStreamResult(I);return this.forwardStreamState="paused",g}async resumeForwardStream2AllRooms(){if(!(arguments.length>0&&arguments[0]!==void 0&&arguments[0])&&["running","stopped"].includes(this.forwardStreamState))throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke resumeForwardStreamToAllRooms in state: ".concat(this.forwardStreamState));const I=this._getDstRooms(),g=await this._sendForwardStreamSignaling("start",this._roomConf.roomId,I);this._updateDstRooms(I,g);const C=this._transformForwardStreamResult(g);return this.forwardStreamState="running",C}resumeFromReconnect(){this.forwardStreamState==="running"&&this.resumeForwardStream2AllRooms(!0).then(I=>{I.forEach(g=>{g.state===ke.FORWARD_STREAM_STATE_FAILURE&&this.safeEmit($.ON_FORWARD_STREAM_ERROR,g)})})}onForwardDstRoomUserKick(I){const g=[{dstRoomId:I.dstRoomId,code:200,forwardStreamType:"stop"}];this._updateDstRooms([],g),this.safeEmit($.ON_FORWARD_STREAM_ERROR,{roomId:I.dstRoomId,state:ke.FORWARD_STREAM_STATE_FAILURE,error:Ut.FORWARD_STREAM_ERROR_REMOTE_KICKED})}destoy(){super.removeAllListeners(),this._forwardDstRooms.clear(),this.forwardStreamState="stopped"}_mockForwardStreamResult(I){const g=[];return this._forwardDstRooms.forEach((C,Q)=>{g.push({dstRoomId:Q,forwardStreamType:"stop",code:200})}),I.forEach(C=>{const Q=g.findIndex(B=>B.dstRoomId===C.roomId);Q===-1?g.push({dstRoomId:C.roomId,forwardStreamType:"start",code:C.roomId===this._roomConf.roomId?400:200}):g[Q].forwardStreamType="update"}),g}_transformForwardStreamResult(I){I||(I=[]);const g=[];for(const{dstRoomId:C,code:Q}of I){const B={roomId:C,state:ke.FORWARD_STREAM_STATE_SUCCESS,error:Ut.FORWARD_STREAM_ERROR_OK};Q===200||(Q===400?(B.state=ke.FORWARD_STREAM_STATE_FAILURE,B.error=Ut.FORWARD_STREAM_ERROR_REMOTE_KICKED):Q>=700&&Q<800?(B.state=ke.FORWARD_STREAM_STATE_FAILURE,B.error=Ut.FORWARD_STREAM_ERROR_INVALID_TOKEN):(B.state=ke.FORWARD_STREAM_STATE_FAILURE,B.error=Ut.FORWARD_STREAM_ERROR_RESPONSE)),g.push(B)}return g}_updateDstRooms(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];g.length===0&&this._forwardDstRooms.clear(),g.forEach(C=>{let{dstRoomId:Q,code:B,forwardStreamType:E}=C;if(B===200)if(E==="stop")this._forwardDstRooms.delete(Q);else{var i;const e=I.find(t=>t.roomId===Q);if(!e&&!this._forwardDstRooms.has(Q))throw new U(m.UNEXPECTED_ERROR,"unknow roomid ".concat(Q," in signaling return"));let o=(i=this._forwardDstRooms.get(Q))!==null&&i!==void 0?i:{token:void 0};o=Object.assign(o,e),this._forwardDstRooms.set(Q,o)}else this._forwardDstRooms.has(Q)&&this._forwardDstRooms.delete(Q)})}_getDstRooms(){const I=[];return this._forwardDstRooms.forEach((g,C)=>{I.push({roomId:C,token:g.token})}),I}async _sendForwardStreamSignaling(I,g,C){const Q="".concat(Oa());if(I!=="stop"){const t=C.map(s=>s.roomId);this._roomConf.report("rtc_forward_stream",{type:"begin",dst_rooms:"{ ".concat(t.map(s=>'"'.concat(s,'"')).join(",")," }"),event_session_id:Q})}const B={forwardStreamType:I,roomId:g};(I==="start"||I==="update")&&(B.dstRoomInfos=C==null?void 0:C.map(t=>({dstRoomId:t.roomId,dstToken:Ag.token2auth(this._ctx.appId,t.roomId,this._roomConf.userId,t.token)})));const E=await this._ctx.signalingManager.sendSignaling("forwardStream",B),i=[];if((E==null?void 0:E.code)!==200)throw I!=="stop"&&(C==null||C.forEach(t=>{i.push({dst_room_id:t.roomId,result:"server error ".concat(E==null?void 0:E.code)})}),this._roomConf.report("rtc_forward_stream",{type:"end",dst_rooms:JSON.stringify(i),event_session_id:Q})),new U(m.UNEXPECTED_ERROR,"server side internal error, error code: ".concat(E));var e,o;return I!=="stop"&&((e=E.forwardStreamResults)===null||e===void 0||e.forEach(t=>{i.push({dst_room_id:t.dstRoomId,result:"dst room lost"})}),(o=E.forwardStreamResults)===null||o===void 0||o.forEach(t=>{const s=i.find(v=>v.dst_room_id===t.dstRoomId);s&&(t.code===200?t.forwardStreamType==="update"?s.result="update":s.result="success":s.result="server error ".concat(t.code))}),this._roomConf.report("rtc_forward_stream",{type:"end",dst_rooms:JSON.stringify(i),event_session_id:Q})),E.forwardStreamResults}}sr([DA],Nt.prototype,"startForwardStream2Rooms"),sr([DA],Nt.prototype,"updateForwardStream2Rooms"),sr([DA],Nt.prototype,"stopForwardStream2Rooms"),sr([DA],Nt.prototype,"pauseForwardStream2AllRooms"),sr([DA],Nt.prototype,"resumeForwardStream2AllRooms");const tt=[{maxLayers:3,totalPixels:2073600},{maxLayers:3,totalPixels:921600},{maxLayers:3,totalPixels:518400},{maxLayers:2,totalPixels:230400},{maxLayers:2,totalPixels:129600},{maxLayers:1,totalPixels:57600},{maxLayers:1,totalPixels:0}],J9A=(A,I)=>{const g=tt.findIndex(B=>A*I>=B.totalPixels),C=A*I;if(g===0)return tt[g].maxLayers;const Q=tt[g-1].totalPixels;return(Q-C)/(Q-tt[g].totalPixels)<.1?tt[g-1].maxLayers:tt[g].maxLayers};function KY(A,I,g){var C;const Q=A?(C=g.find(B=>B.rid===A))===null||C===void 0?void 0:C.maxkbps:g[0].maxkbps;return Math.min(Q??Number.POSITIVE_INFINITY,I)}const JY=(A,I)=>{var g,C,Q,B;let E=0,i=-1;const{videoDescriptions:e,subVideoDescriptions:o}=(I==null?void 0:I.attributes)||{},t=Array.isArray(o)?o:e;let s=-1;const v=A.width*A.height;for(let c=0;c<(t==null?void 0:t.length);c++){var r,n;if(v>=((r=t[c])===null||r===void 0?void 0:r.width)*((n=t[c])===null||n===void 0?void 0:n.height)){s=c;break}}let a=t[0];if(s===-1)s=t.length-1,a=t[s];else if(s!==0){const c=t[s-1].width*t[s-1].height,d=(c-v)/(c-t[s].width*t[s].height);a=d<.1?t[s-1]:t[s],s=d<.1?s-1:s}return i=(g=(C=a)===null||C===void 0?void 0:C.sub_index)!==null&&g!==void 0?g:-1,E=(Q=(B=a)===null||B===void 0?void 0:B.video_index)!==null&&Q!==void 0?Q:s,{spatialLayer:E,spatialSubLayer:i}},st=A=>({width:jA(A.width),height:jA(A.height),frameRate:jA(A.frameRate),maxKbps:A.maxKbps}),vt=A=>{let{width:I,height:g}=A;return jA(I)*jA(g)},WY=(A,I)=>{const g=jA(A.width)/jA(I.width)||1,C=jA(A.height)/jA(I.height)||1;Math.floor(g)===g&&Math.floor(C)===C||bi("setLocalSimulcastMode: The resolution setting needs to be an integer multiple")};class W9A{constructor(I){P(this,"_roomId",void 0),P(this,"_constraints",{}),P(this,"_profile",void 0),P(this,"_customMaxBitrate",0),this._appId=I}setRoomId(I){this._roomId=I}setAudioProfile(I){this._profile=I,this._customMaxBitrate=0}get customMaxBitrate(){return this._customMaxBitrate}setCustomMaxBitrate(I){const{audio_encode:g}=$A.getEngineWebConfig(this._appId,this._roomId||"");this._customMaxBitrate=g!=null&&g.bitrate?0:1e3*I}getOpusConfigStr(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const{audio_encode:g}=$A.getEngineWebConfig(this._appId,this._roomId||""),{sampleRate:C,channelCount:Q}=this.getConstraints(),B=typeof C=="number"?C:C==null?void 0:C.exact,E=typeof Q=="number"?Q:Q==null?void 0:Q.exact,i={};I.split(";").forEach(s=>{const[v,r]=s.split("=");v&&r&&(i[v]=r)});const e=(g==null?void 0:g.bitrate)||this._customMaxBitrate||this._getConfigByAudioProfile().bitrate;e&&(i.maxaveragebitrate=e);const o=(g==null?void 0:g.enc_sample_rate)||B;o&&(i["sprop-maxcapturerate"]=o);const t=(g==null?void 0:g.playback_rate)||B;return t&&(i.maxplaybackrate=t),(E&&E>1||g!=null&&g.stereo)&&(i["sprop-stereo"]=1,i.stereo=1),g!=null&&g.dtx&&(i.usedtx=1),Object.keys(i).map(s=>"".concat(s,"=").concat(i[s])).join(";")}updateConstraints(I){this._constraints=R(R({},this._constraints),I)}getConstraints(){const I=R({},this._constraints),{audio_capture:g}=$A.getEngineWebConfig(this._appId,this._roomId||"");HB(g==null?void 0:g.sample_rate)||(I.sampleRate=g.sample_rate),HB(g==null?void 0:g.channel)||(I.channelCount=g.channel),HB(g==null?void 0:g.agc)||(I.autoGainControl=g.agc),HB(g==null?void 0:g.ans)||(I.noiseSuppression=g.ans),HB(g==null?void 0:g.aec)||(I.echoCancellation=g.aec);const{sampleRate:C,channel:Q}=this._getConfigByAudioProfile();return HB(I.sampleRate)&&!HB(C)&&(I.sampleRate=C),HB(I.channelCount)&&!HB(Q)&&(I.channelCount=Q),I}_getConfigByAudioProfile(){const I={};switch(this._profile){case St.fluent:I.sampleRate=16e3,I.bitrate=24e3;break;case St.standard:I.sampleRate=48e3,I.bitrate=48e3;break;case St.hd:I.sampleRate=48e3,I.bitrate=128e3,I.channel=2;break;case St.standardStereo:I.sampleRate=48e3,I.bitrate=8e4,I.channel=2;break;case St.hdMono:I.sampleRate=48e3,I.bitrate=128e3}return I}}const V9A={start_interval:100,multiplier:2,max_interval:3e4};class _z{constructor(){P(this,"_times",0),P(this,"_config",V9A),P(this,"initTs",aA())}getRetryDelay(){return Math.min(this._config.max_interval,Math.pow(this._config.multiplier,this._times++)*this._config.start_interval)}setConfig(I){this._config=I}reset(){this._times=0}}class z9A{constructor(I){P(this,"_logger",void 0),P(this,"_monitor",void 0),this._ctx=I;const g=$A.getServerConfig(this._ctx.appId);this._logger=new uA("DecisionConfig",1,this._ctx.id),this._monitor=tI(this._ctx.id),setTimeout(()=>{this.updateConfig(g,!0)},0)}updateConfig(I,g){!g&&$A.setServerConfig(this._ctx.appId,I),I.rts_report&&KI.setConfig(I.rts_report),this._ctx.joinRoomConfig.setServerConfig(I.web_join_room),this._setRtsConfig(I.rts_config),this._setRtsQpsConfig(I.rts_qps),this._preConnect(I),this._getServerConfigExecutor(I)}_setRtsConfig(I){I!=null&&I.rts_mode&&I.rts_mode!==this._ctx.rtsMode&&(this._logger.print("_setRtsConfig","setRtsMode to %o",I.rts_mode),this._ctx.setRTSMode(I.rts_mode===Qo.NORMAL_MODE?Qo.NORMAL_MODE:Qo.LIMIT_MODE))}_setRtsQpsConfig(I){this._logger.print("_setRtsQpsConfig",JSON.stringify(I)),this._ctx.setRtsQpsConf(I),Object.keys(this._ctx.rtsLimiter).length>0&&AI(this._ctx.id,"setRtsQpsConf",JSON.stringify(I))}_getServerConfigExecutor(I){var g,C,Q,B,E,i,e,o;const{upload_console_length_cut:t,upload_report_limit:s}=(I==null?void 0:I.web_rtc_config)||{};if(dB.setParameter("UPLOAD_CONSOLE_ON",!(I==null||(g=I.web_rtc_config)===null||g===void 0||!g.upload_console_on)),t&&dB.setParameter("UPLOAD_CONSOLE_LENGTH_CUT",t),s&&dB.setParameter("UPLOAD_REPORT_LIMIT",s),dB.setParameter("ENABLE_REPORT_IDB_BUFFER",!(I==null||(C=I.web_rtc_config)===null||C===void 0||!C.enable_report_idb_buffer)),(I==null||(Q=I.web_rtc_config)===null||Q===void 0?void 0:Q.sdk_codec_negotiation)===!1&&jC("SDK_CODEC_NEGOTIATION",!1),(I==null||(B=I.web_rtc_config)===null||B===void 0?void 0:B.ainr_enable_dump)!==void 0&&jC("AINR_ENABLE_DUMP",I.web_rtc_config.ainr_enable_dump),(I==null||(E=I.web_rtc_config)===null||E===void 0?void 0:E.ainr_overload_threshold)!==void 0&&jC("AINR_OVERLOAD_THRESHOLD",I.web_rtc_config.ainr_overload_threshold),(I==null||(i=I.web_rtc_config)===null||i===void 0?void 0:i.ainr_urls)!==void 0)try{jC("AINR_URLS",JSON.parse(I.web_rtc_config.ainr_urls))}catch(v){this._logger.warn("_getServerConfigExecutor","parse AINR_URLS error %o",v)}(I==null||(e=I.web_rtc_config)===null||e===void 0?void 0:e.ainr_cache_time)!==void 0&&jC("AINR_CACHE_TIME",I.web_rtc_config.ainr_cache_time),(I==null||(o=I.web_rtc_config)===null||o===void 0?void 0:o.ainr_dump_time)!==void 0&&jC("AINR_DUMP_TIME",I.web_rtc_config.ainr_dump_time)}_preConnect(I){var g;let C=lA("PRE_ICE");var Q;typeof(I==null||(g=I.web_rtc_config)===null||g===void 0?void 0:g.pre_ice)=="boolean"&&(C=I.web_rtc_config.pre_ice),C&&(this._logger.print("preConnect","start pre ice connection."),this._ctx.signalingManager.connect(),(Q=this._monitor)===null||Q===void 0||Q.set({pre_connection:!0}),this._ctx.isPreConnection=!0)}}class M9A{constructor(I){P(this,"_reconnectTimer",void 0),P(this,"_retryFunc",void 0),P(this,"_abortControllers",[]),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_groupConfigId",KE()),P(this,"_retryLimiter",new _z),P(this,"_timer",void 0),P(this,"_destroyed",!1),P(this,"_onlineListener",()=>{this._reconnectTimer&&this._retryFunc&&(clearTimeout(this._reconnectTimer),this._retryFunc())}),P(this,"_decisionConfig",void 0),this._ctx=I,this._monitor=tI(I.id),this.logger=new uA("ICERequest",4,I.id),this._decisionConfig=new z9A(I),window.addEventListener("online",this._onlineListener)}async getICENode(I){let g;this.logger.info("getICENode","invoke");try{if(g=await this._getAccessWithRetry(I),g.length===0)throw new Error("server return empty nodes.")}catch(C){throw this._reportRtcInvokeStatus("es.join.getNodeFailed",C),new U(m.ICE_SERVER_WRONG,"get ICE config failed: ".concat(C.message),C)}return this.logger.success("getICENode","success"),this._reportRtcInvokeStatus("es.join.getNodeSuccess",g),g}_getAccessWithRetry(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g!==0&&this.logger.info("_getAccessWithRetry()","invoke feedbackInfo: %o, 201count: %o",I,g),new Promise((C,Q)=>{this._getAccessNode(I).then(B=>{this._retryLimiter.reset(),C(B)}).catch(B=>{if(this._destroyed)return;if(Array.isArray(B)&&B.length>0){if(B.findIndex(i=>400<=i.code&&i.code<500)>-1)return this._retryLimiter.reset(),Q(new Error("HTTP request failed(4xx)"));if(B.every(i=>{var e;return i.code===201||((e=i.error)===null||e===void 0?void 0:e.code)===201})&&g++,g===3)return this._retryLimiter.reset(),Q(new Error("HTTP request failed(201)"))}const E=this._retryLimiter.getRetryDelay();this.logger.warn("_getAccessWithRetry()","_getAccessWithRetry error, will retry after ".concat(E,"ms"),B),this._retryFunc=()=>{this._getAccessWithRetry(I,g).then(C).catch(Q)},this._reconnectTimer=self.setTimeout(this._retryFunc,E)})})}async _getAccessNode(I){return new Promise((g,C)=>{const Q=$A.getAccessNode(this._ctx.appId);if(Q){const B=(Array.isArray(Q)?Q:[Q]).map(E=>(E.cache_status=!0,E));this.logger.info("getAccessNode","use cache node."),g(B),this._timer=setTimeout(()=>{this._getAccessNodeFromServer(I),this._reportRtcInvokeStatus("es.R.node.cache",Q),delete this._timer},0)}else this._getAccessNodeFromServer(I).then(g).catch(C)})}async _getAccessNodeFromServer(I){const{urls:g,needFallback:C}=this._getAccessUrls();return this.getICEConfigFromServer(g,I).then(Q=>{const{nodes:B,decisionConfig:E}=Q;return!this._ctx.useCloudProxy&&(B==null?void 0:B.length)>0&&$A.setAccessNode(this._ctx.appId,B,Q.ttl||11200),E&&this._decisionConfig.updateConfig(E,!1),Q.dispatchDomains&&!this._ctx.useCloudProxy&&$A.setAccessUrls(Q.dispatchDomains),B}).catch(Q=>{if(C)return this._reportRtcInvokeStatus("es.R.req.fallback",""),$A.clearAccessUrls(),this._getAccessNodeFromServer(I);throw Q})}_getAccessUrls(){let I=$A.getAccessUrls()||[],g=!0;return I.length!==0?this._reportRtcInvokeStatus("es.R.req.cache.urls",I):(g=!1,I=YA.ICE_CONFIG_REQUEST_URLS,I.length!==0?this._reportRtcInvokeStatus("es.R.req.external.urls",I):(I=YA.ICE_CONFIG_REQUEST_URLS_INTERNAL,this._reportRtcInvokeStatus("es.R.req.internal.urls",I))),{urls:I,needFallback:g}}async getICEConfigFromServer(I,g){const C={appID:this._ctx.appId,deviceID:$A.getDeviceId(),os:"web",sdkVersion:YA.VERSION,isOversea:YA.OVERSEA,expectedAddr:lA("EXPECTED_ADDR"),productPlatform:"VolcEngine",enableCloudProxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC,decisionKeys:["rts_report","web_join_room","web_rtc_config","rts_qps","rts_config"]};var Q;g&&(C.feedbackInfo=g,((Q=g[0])===null||Q===void 0||(Q=Q.feedbackReason)===null||Q===void 0?void 0:Q.type)!=="ICE_FAILED"&&delete C.expectedAddr),lA("AREA_CODE")==="AREA_CODE_US_OPCO"&&(C.mediaArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}]),C.accessArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}]));const B=I.map(E=>this._httpRequest(E,C));return RaA(B)}async _httpRequest(I,g){var C;const Q=KE();g.connectSessionID=Q;const B=Date.now();(C=this._monitor)===null||C===void 0||C.report("rtc_get_access",{error_code:0,message:JSON.stringify(g),elapse:0,type:"request",host:I,config_id:Q,group_config_id:this._groupConfigId});const E=new AbortController;let i;this._abortControllers.push(E);try{var e;try{i=await fetch(I,{method:"POST",headers:{"Content-Type":"application/json"},mode:"cors",body:JSON.stringify(g),signal:E.signal})}catch(v){var o;throw uiA(fetch)||(o=this._monitor)===null||o===void 0||o.report("rtc_error",{error_code:TC.Fetch_MODIFY,message:"get access failed, possibly due to modifying the browser's Fetch API."},{origin_error:v}),v}if(this._abortControllers=this._abortControllers.filter(v=>v!==E),i.status!==200)throw{message:i.statusText,code:i.status};const s=await i.json();if(s.code!==200)throw s;return(e=this._monitor)===null||e===void 0||e.report("rtc_get_access",{error_code:200,message:JSON.stringify(s),elapse:Date.now()-B,type:"response",host:I,config_id:Q,group_config_id:this._groupConfigId}),s}catch(s){var t;throw(t=this._monitor)===null||t===void 0||t.report("rtc_get_access",{error_code:Number((s==null?void 0:s.code)||(s==null?void 0:s.server_code)),message:s==null?void 0:s.message,elapse:Date.now()-B,type:"response",host:I,config_id:Q,group_config_id:this._groupConfigId},{error:JSON.stringify(s)}),s}}destroy(){this._destroyed=!0,window.removeEventListener("online",this._onlineListener),this._abortControllers.forEach(I=>I.abort("engine destroy")),this._reconnectTimer&&(window.clearTimeout(this._reconnectTimer),delete this._reconnectTimer),this._timer&&(window.clearTimeout(this._timer),delete this._timer)}_reportRtcInvokeStatus(I,g){var C;(C=this._monitor)===null||C===void 0||C.report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:0,stream_id:"",elapse:0,group_config_id:this._groupConfigId})}}var dA={},$z={},AM={exports:{}},VY=AM.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(A){return A.encoding?"rtpmap:%d %s/%s/%s":A.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(A){return A.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(A){return A.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(A){return"extmap:%d"+(A.direction?"/%s":"%v")+(A["encrypt-uri"]?" %s":"%v")+" %s"+(A.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(A){return A.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(A){var I="candidate:%s %d %s %d %s %d typ %s";return I+=A.raddr!=null?" raddr %s rport %d":"%v%v",I+=A.tcptype!=null?" tcptype %s":"%v",A.generation!=null&&(I+=" generation %d"),I+=A["network-id"]!=null?" network-id %d":"%v",I+=A["network-cost"]!=null?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(A){var I="ssrc:%d";return A.attribute!=null&&(I+=" %s",A.value!=null&&(I+=":%s")),I}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(A){return A.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(A){return A.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(A){return"imageattr:%s %s %s"+(A.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(A){return"simulcast:%s %s"+(A.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(A){return"ts-refclk:%s"+(A.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(A){var I="mediaclk:";return I+=A.id!=null?"id=%s %s":"%v%s",I+=A.mediaClockValue!=null?"=%s":"",I+=A.rateNumerator!=null?" rate=%s":"",I+=A.rateDenominator!=null?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(VY).forEach(function(A){VY[A].forEach(function(I){I.reg||(I.reg=/(.*)/),I.format||(I.format="%s")})});var pR=AM.exports;(function(A){var I=function(E){return String(Number(E))===E?Number(E):E},g=function(E,i,e){var o=E.name&&E.names;E.push&&!i[E.push]?i[E.push]=[]:o&&!i[E.name]&&(i[E.name]={});var t=E.push?{}:o?i[E.name]:i;(function(s,v,r,n){if(n&&!r)v[n]=I(s[1]);else for(var a=0;a1&&(E[e[0]]=void 0),E};A.parseParams=function(E){return E.split(/;\s?/).reduce(B,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(E){return E.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(E){for(var i=[],e=E.split(" ").map(I),o=0;o=C)return Q;var B=g[I];switch(I+=1,Q){case"%%":return"%";case"%s":return String(B);case"%d":return Number(B);case"%v":return""}})},vr=function(A,I,g){var C=[A+"="+(I.format instanceof Function?I.format(I.push?g:g[I.name]):I.format)];if(I.names)for(var Q=0;QMath.floor(Math.random()*Mw+1e4);function w9(A){return A>Mw-18?(_9A.warn("generateAllSsrc","reset start id",A),w9(A=A-Mw+1e4+18)):{audio:A,audioFec:A+1,audioRtx:A+2,video:A+3,videoFec:A+4,videoRtx:A+5,next:A+18}}const m9=function(A,I,g){return[{id:g,attribute:"cname",value:arguments.length>3&&arguments[3]!==void 0?arguments[3]:$9A},{id:g,attribute:"msid",value:"".concat(A," ").concat(A,"-").concat(I)},{id:g,attribute:"mslabel",value:"".concat(A)},{id:g,attribute:"label",value:"".concat(A,"-").concat(I)}]},Xw=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const C=I.video,Q=I.videoRtx,B=I.videoFec,E=[C,Q],{cname:i,flexfec:e}=g;e&&E.push(B);const o=E.reduce((s,v)=>s.concat(m9(A,"video",v,i)),[]),t=[{semantics:"FID",ssrcs:"".concat(C," ").concat(Q)}];return e&&t.push({semantics:"FEC-FR",ssrcs:"".concat(C," ").concat(B)}),{ssrcs:o,ssrcGroups:t}};function jw(A){return A.direction="inactive",A.port=0,delete A.ext,delete A.ssrcs,delete A.ssrcGroups,delete A.simulcast,delete A.simulcast_03,delete A.rids,delete A.extmapAllowMixed,delete A.msid,delete A.bundleOnly,A}const G9=function(A,I,g){let C=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3];const Q=R(R({},A),{},{media:[]});return C&&(Q.invalid=[{value:"realx-exts:rscp"}]),I&&Q.media.push(I),g&&Q.media.push(g),delete Q.groups,delete Q.msidSemantic,dA.write(Q)};function I0A(A){const I={},{publicIPs:g,certFingerprint:C,iceParams:Q,iceConfig:B}=A;return I.fingerprint={type:"sha-256",hash:C},I.icePwd=Q.serverIcePwd,I.iceUfrag=C0A(Q.serverIceUfrag),I.candidates=g0A(g,B),I.setup="active",I.iceOptions="renomination",I}function g0A(A,I){if(!Array.isArray(A))return[];let g=0;const C=2130706431,Q=[];return A.forEach(B=>{const E={component:1,ip:B.ip,type:"host",generation:B.generation};B.udpPorts&&!I.tcpOnly&&B.udpPorts.forEach(i=>{Q.push(R(R({},E),{},{foundation:g++,transport:"udp",port:i,priority:C}))}),B.tcpPorts&&B.tcpPorts.forEach(i=>{Q.push(R(R({},E),{},{foundation:g++,transport:"tcp",port:i,tcptype:"passive",priority:2130705431}))})}),Q}const C0A=A=>{const I=new TextEncoder().encode("PREC"),g=FaA(A),C=new Uint8Array(4);crypto.getRandomValues(C);const Q=new Uint8Array(2);return Q[0]=0,Q[1]=1,YaA(nV(Uint8Array,I,g,C,Q))},MY=(A,I)=>{if(!Array.isArray(A.fmtp)||!Array.isArray(A.rtp))return;for(let C=0;Cg.push(C.payload)),A.payloads=g.join(" ")},R9=(A,I)=>{let g=0;if(!Array.isArray(A.fmtp)||!Array.isArray(A.rtp))return;for(const Q of A.fmtp)if(Q.config.includes("level-asymmetry-allowed=1")&&Q.config.includes("packetization-mode=1")&&Q.config.includes("profile-level-id=42e0")){g=Q.payload;break}for(let Q=0;QC.push(Q.payload)),A.payloads=C.join(" ")},Q0A=A=>{const I=dA.parse(A);return I.media=I.media.map(g=>g.type==="audio"?E0A(g,I):B0A(g,["H264","VP8","ByteVC1"],I)),dA.write(I)},CE=A=>{A.media.forEach(I=>{I.type!=="audio"&&I.type!=="video"||I.rtp.forEach(g=>{I.rtcpFb||(I.rtcpFb=[]),I.rtcpFb.find(C=>C.payload===g.payload&&C.type==="rrtr")||I.rtcpFb.push({payload:g.payload,type:"rrtr"})})})},B0A=function(A,I,g){let C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{rrtr:!1};const Q={},B={};let E=-1;const i=[];return Array.isArray(A.fmtp)&&A.fmtp.forEach(e=>{let{payload:o,config:t}=e;if(t.startsWith("apt=")){const s=t.slice(4);Q[o]=s}else t.includes("42e0")&&t.includes("packetization-mode=1")&&(E=o)}),Array.isArray(A.rtp)&&(A.rtp=A.rtp.filter(e=>{const o=e.codec,t=e.payload;let s;switch(o){case"H264":return s=!1,I.map(v=>{v==="H264"&&t===E&&(B[t]=t,i.push(t),s=!0)}),s;case"rtx":return!!B[Q[t]]&&(B[t]=t,!0);case"red":case"ulpfec":case"flexfec-03":return B[t]=t,!0;default:return s=!1,I.map(v=>{v===o&&(B[t]=t,i.push(t),s=!0)}),s}})),Array.isArray(A.fmtp)&&(A.fmtp=A.fmtp.filter(e=>B[e.payload])),Array.isArray(A.rtcpFb)?A.rtcpFb=A.rtcpFb.filter(e=>B[e.payload]):A.rtcpFb=[],C.rrtr&&i.forEach(e=>{var o;(o=A.rtcpFb)===null||o===void 0||o.push({payload:e,type:"rrtr"})}),IM(A,g),Array.isArray(A.ext)&&(A.ext=A.ext.filter(e=>{if(e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/video-content-type"&&e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/video-timing"&&e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/color-space")return e})),typeof A.payloads=="string"&&(A.payloads=A.payloads.split(" ").filter(e=>B[e]).join(" ")),A},E0A=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{rrtr:!1};const C={};if(Array.isArray(A.rtp)&&(A.rtp=A.rtp.filter(Q=>{const B=Q.codec,E=Q.payload;return(B==="opus"||B==="red")&&(C[E]=E,!0)})),Array.isArray(A.rtcpFb)||(A.rtcpFb=[]),g.rrtr&&Object.keys(C).forEach(Q=>{var B;(B=A.rtcpFb)===null||B===void 0||B.push({payload:Number(Q),type:"rrtr"})}),IM(A,I),typeof A.payloads=="string"){const Q=[];A.payloads.split(" ").forEach(B=>{C[B]&&Q.push(B)}),A.payloads=Q.join(" ")}return A},IM=(A,I)=>{A.iceOptions&&delete A.iceOptions,A.icePwd&&(I.icePwd=A.icePwd,delete A.icePwd),A.iceUfrag&&(I.iceUfrag=A.iceUfrag,delete A.iceUfrag),A.fingerprint&&(I.fingerprint=A.fingerprint,delete A.fingerprint)},gM=A=>CM(A,"H265","ByteVC1"),XY=A=>CM(A,"ByteVC1","H265"),CM=(A,I,g)=>{if(A.indexOf(I)===-1)return A;const C=dA.parse(A);return C.media=C.media.map(Q=>(Q.type==="video"&&(Q.rtp=Q.rtp.map(B=>(B.codec===I&&(B.codec=g),B))),Q)),dA.write(C)},i0A=JE(),jY={iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",encodedInsertableStreams:!!i0A||void 0};var QM=(A=>(A[A.DC_ERROR=0]="DC_ERROR",A[A.DC_CLOSE=1]="DC_CLOSE",A[A.ICE_FAILED=2]="ICE_FAILED",A[A.DESTROY=3]="DESTROY",A[A.TIMEOUT=4]="TIMEOUT",A))(QM||{});let e0A=0;class L9 extends iQ{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0&&arguments[2];super(),P(this,"uuid",(e0A++).toString()),P(this,"_peerConnectionId",""),P(this,"audioTrack4ff",void 0),P(this,"_pc",void 0),P(this,"_dc",void 0),P(this,"_iceNode",void 0),P(this,"_initSctpEvents",!1),P(this,"_monitor",void 0),P(this,"_offerIce",{}),P(this,"_answerIce",{}),P(this,"_offerSession",void 0),P(this,"_answerSession",void 0),P(this,"_offerMlines",[]),P(this,"_answerMlines",[]),P(this,"_connectReject",void 0),P(this,"_logger",void 0),P(this,"_destroyed",!1),P(this,"_reportTimer",void 0),P(this,"_clearPeerListeners",void 0),P(this,"_iceStartTs",0),P(this,"_icePreStepTs",0),this._ctx=I,this._groupConnectionId=g,this._isReconnect=C,this._monitor=tI(I.id),this._logger=new uA("PeerConnection_".concat(this.uuid),4,I.id),lA("DISABLE_ENCODED_TRANSFORM")&&(jY.encodedInsertableStreams=void 0),this._pc=new RTCPeerConnection(jY),this._pc.ontrack=Q=>{var B;const E=(B=Q.streams)===null||B===void 0||(B=B[0])===null||B===void 0?void 0:B.id;this._print("pc.ontrack","".concat(Q.track.kind," ").concat(Q.track.id," ").concat(E)),E==="ff-stream"&&(this.audioTrack4ff=Q.track),this.emit("ontrack",Q)},this._pc.onconnectionstatechange=()=>{this._print("onconnectionstatechange","".concat(this._pc.connectionState,". ice -> ").concat(this._pc.iceConnectionState)),this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"&&this._pc.connectionState!=="failed"||this.emit("disconnect",fC.ICE_FAILED)},this._pc.oniceconnectionstatechange=()=>{const Q=this._pc.iceConnectionState;this._report("rtc_pre_ice_state",{message:Q,ice_state:Q.toUpperCase()}),this.emit("ice_state",Q)}}static checkSupported(){if(!RTCPeerConnection)throw new U(m.NOT_SUPPORTED,"missing RTCPeerConnection API.");["addTransceiver","createDataChannel","createOffer","setLocalDescription","setRemoteDescription"].forEach(I=>{var g;if((g=RTCPeerConnection)===null||g===void 0||(g=g.prototype)===null||g===void 0||!g[I])throw new U(m.NOT_SUPPORTED,"missing peer.".concat(I," API."))})}getOriginRTCPeerConnection(){return this._pc}getConnectionId(){return this._peerConnectionId}getGroupConnectionId(){return this._groupConnectionId}getIceConnectionState(){return this._pc.iceConnectionState}async createOfferSdp(){let{sdp:I}=await this._pc.createOffer();return I&&(I=gM(I)),I}async startIceConnect(I){this._print("connect","invoke. %o",I),this._iceNode=I;const g=this._pc.createDataChannel("signaling",{negotiated:!0,id:100});g.binaryType="arraybuffer",this._dc=g;const{offerIce:C,answerIce:Q}=this._genIceInfo(I);this._offerIce=C,this._answerIce=Q,this._peerConnectionId=Q.iceUfrag||"",this.reportRtcPreIce("ice_start"),mI&&(this._pc.addTransceiver("audio",{direction:"recvonly"}),this._pc.addTransceiver("video",{direction:"recvonly"}));const B=await this.createOfferSdp();if(!B)throw new U(m.NOT_SUPPORTED,"create offer sdp failed.");const E=dA.parse(B),[i]=E.media;if(this._offerIce.fingerprint=E.fingerprint||i.fingerprint,mI){E.media=E.media.map(o=>{const t=R(R({},o),this._offerIce);var s,v,r,n;return t.type==="video"&&(Fw?(t.ext=(s=t.ext)===null||s===void 0?void 0:s.filter(a=>a.uri.indexOf("abs-send-time")===-1),t.rtcpFb=(v=t.rtcpFb)===null||v===void 0?void 0:v.filter(a=>a.type!=="goog-remb")):(t.rtcpFb=(r=t.rtcpFb)===null||r===void 0?void 0:r.filter(a=>a.type!=="transport-cc"),t.ext=(n=t.ext)===null||n===void 0?void 0:n.filter(a=>a.uri.indexOf("transport")===-1))),t}),UE&&CE(E);const e=R({},E);e.fingerprint=this._answerIce.fingerprint,e.media=e.media.map(o=>(delete(o=R(R({},o),this._answerIce)).bundleOnly,o.port=9,o.type==="application"?o.sctpmap={sctpmapNumber:5e3,app:"webrtc-datachannel",maxMessageSize:262144}:(o.type==="audio"&&(o.msid="ff-stream ff-stream-audio"),o.direction="sendonly"),o)),UE&&CE(e),await this.setLocalDescription(dA.write(E)),await this.setRemoteDescription(dA.write(e))}else{delete E.media,this._offerSession=R({},E),this._answerSession=R({},E),this._answerSession.fingerprint&&(this._answerSession.fingerprint=this._answerIce.fingerprint);const e=0;this._offerMlines=[R(R(R({},i),this._offerIce),{},{mid:"".concat(e)})],this._answerMlines=[R(R(R({},i),this._answerIce),{},{sctpmap:{sctpmapNumber:5e3,app:"webrtc-datachannel",maxMessageSize:262144},mid:"".concat(e)})],this.setDescription()}return this._reportTransportStats(),await new Promise((e,o)=>{this._connectReject=o;const t=setTimeout(()=>{var c;this.reportRtcPreIce("timeout"),(c=this._connectReject)===null||c===void 0||c.call(this,{code:4,message:"connect timeout"}),delete this._connectReject},8e3),s=()=>{this._print("connect","dataChannel open"),this._reportRtcInvokeStatus("es.dc.open",""),this.reportRtcPreIce("datachannel_opened"),clearTimeout(t),e(""),delete this._connectReject},v=c=>{var d,l,h,D;this._report("rtc_signaling_msg_error",{error_code:c==null||(d=c.error)===null||d===void 0?void 0:d.sdpLineNumber,message:c==null||(l=c.error)===null||l===void 0?void 0:l.errorDetail,reason:"invalid data"}),this._reportRtcInvokeStatus("es.dc.error",""),(h=this._connectReject)===null||h===void 0||h.call(this,{message:"dc.onerror, ".concat((D=c.error)===null||D===void 0?void 0:D.errorDetail),code:0}),this.emit("disconnect",fC.DC_ERROR),delete this._connectReject,clearTimeout(t)},r=()=>{var c;this._reportRtcInvokeStatus("es.dc.close",""),(c=this._connectReject)===null||c===void 0||c.call(this,{message:"dc.onclose",code:1}),this.reportRtcPreIce("datachannel_closed"),this.emit("disconnect",fC.DC_CLOSE),delete this._connectReject,clearTimeout(t)},n=()=>{this._pc.iceConnectionState==="connected"?this.reportRtcPreIce("ice_connected"):this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"||this.reportRtcPreIce("ice_failed")},a=()=>{var c;this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"&&this._pc.connectionState!=="failed"||((c=this._connectReject)===null||c===void 0||c.call(this,{message:"pc.connectionstatechange -> ".concat(this._pc.connectionState,", ice -> ").concat(this._pc.iceConnectionState),code:2}),delete this._connectReject,clearTimeout(t))};g.addEventListener("open",s),g.addEventListener("error",v),g.addEventListener("close",r),this._pc.addEventListener("iceconnectionstatechange",n),this._pc.addEventListener("connectionstatechange",a),this._clearPeerListeners=()=>{g.removeEventListener("open",s),g.removeEventListener("error",v),g.removeEventListener("close",r),this._pc.removeEventListener("iceconnectionstatechange",n),this._pc.removeEventListener("connectionstatechange",a)}}),this._print("connect","dataChannel establish success"),g}async setDescription(I){this._print("setDescription","invoke."),this._offerSession.media=this._offerMlines,this._answerSession.media=this._answerMlines;const g=[];this._offerMlines.forEach(Q=>{Q.direction!=="inactive"&&Q.mid&&g.push(Q.mid)}),this._offerSession.groups&&this._answerSession.groups&&(this._offerSession.groups[0].mids=g.join(" "),this._answerSession.groups[0].mids=g.join(" "));const C=aA();I&&this._report("rtc_begin_create_offer",{direction:I.streamUserId==="local"?"up":"down",stream_id:I.streamId,stream_user_id:I.streamUserId,pc_session_id:this._peerConnectionId,vendor_mode:0}),await this._pc.createOffer(),I&&this._report("rtc_create_offer",{error_code:0,direction:I.streamUserId==="local"?"up":"down",stream_id:I.streamId,stream_user_id:I.streamUserId,elapse:aA()-C}),await this.setLocalDescription(dA.write(this._offerSession),I),await this.setRemoteDescription(dA.write(this._answerSession),I)}async setLocalDescription(I,g){const C=aA();try{if(I=XY(I),await this._pc.setLocalDescription({type:"offer",sdp:I}),this._report("rtc_set_description",{error_code:0,message:I,is_local:"1",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:aA()-C},{type:"offer"}),!this._initSctpEvents){var Q;this._initSctpEvents=!0;const B=(Q=this._pc)===null||Q===void 0?void 0:Q.sctp;B&&(B.onstatechange=()=>{this._reportRtcInvokeStatus("sctp","sctp state change TO: ".concat(B.state))},B.transport&&(B.transport.onstatechange=()=>{var E;this._reportRtcInvokeStatus("dtls","dtls state change TO: ".concat(B==null||(E=B.transport)===null||E===void 0?void 0:E.state))}))}}catch(B){throw console.error("setLocal",B),this._report("rtc_set_description",{error_code:-1,message:B.message+I,is_local:"1",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:"",stream_user_id:"",elapse:aA()-C},{type:"offer"}),B}}async setRemoteDescription(I,g){const C=aA();try{I=XY(I),await this._pc.setRemoteDescription({type:"answer",sdp:I}),this._report("rtc_set_description",{error_code:0,message:I,is_local:"0",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:aA()-C},{type:"answer"})}catch(Q){throw console.error("setRemote",Q),this._report("rtc_set_description",{error_code:-1,message:Q.message+I,is_local:"0",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:aA()-C},{type:"answer"}),Q}}closeIceConnect(){var I,g,C,Q;(I=this._connectReject)===null||I===void 0||I.call(this,{code:3,message:"invoke destroy()"}),delete this._connectReject,(g=this._pc)===null||g===void 0||g.close(),(C=this._dc)===null||C===void 0||C.close(),delete this._dc,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,xlA(this._pc),(Q=this._clearPeerListeners)===null||Q===void 0||Q.call(this),delete this._clearPeerListeners}reportRtcPreIce(I){var g;const C=aA();I==="ice_start"&&(this._iceStartTs=C,this._icePreStepTs=C),this._report("rtc_pre_ice",{connect_event:I,message:I,elapse:C-this._icePreStepTs,total_elapse:C-this._iceStartTs,cache_status:!((g=this._iceNode)===null||g===void 0||!g.cache_status),is_reconnect:this._isReconnect}),this._icePreStepTs=C}getStatsWithLowFrequency(I,g,C){return HlA(this._pc,I,g,C)}destroy(){this._print("destroy",this._peerConnectionId),super.removeAllListeners(),this.closeIceConnect(),this._destroyed=!0,this._reportTimer&&(clearTimeout(this._reportTimer),delete this._reportTimer),delete this._pc}_genIceInfo(I){var g,C;return{offerIce:{iceUfrag:(g=I.iceParams)===null||g===void 0?void 0:g.clientIceUfrag,icePwd:(C=I.iceParams)===null||C===void 0?void 0:C.clientIcePwd,iceOptions:"renomination"},answerIce:I0A(I)}}async _reportTransportStats(){const I=await this.getStatsWithLowFrequency(),g={};var C;if(I.forEach(Q=>{Q.type==="transport"?(g.dtls_state=Q.dtlsState,g.bytes_received=Q.bytesReceived,g.bytes_sent=Q.bytesSent,g.ice_state=Q.iceState,g.packets_received=Q.packetsReceived,g.packets_sent=Q.packetsSent,g.selected_candidate_pair_changes=Q.selectedCandidatePairChanges):Q.type==="local-candidate"||Q.type==="remote-candidate"?g.candidates_info=[...g.candidates_info||[],{id:Q.id,is_remote:Q.isRemote,port:Q.port,protocol:Q.protocol,candidate_type:Q.candidateType,priority:Q.priority,network_type:Q.networkType,candidate_ip:Q.ip}]:Q.type==="candidate-pair"&&(g.candidatePairsInfo={},g.candidatePairsInfo.candidate_state=Q.state,g.candidatePairsInfo.writable_state=Q.writable,g.candidatePairsInfo.sent_ping_requests_total=Q.requestsSent,g.candidatePairsInfo.recv_ping_requests=Q.requestsReceived,g.candidatePairsInfo.sent_ping_responses=Q.responsesSent,g.candidatePairsInfo.recv_ping_responses=Q.responsesReceived,g.candidatePairsInfo.current_rtt=Q.currentRoundTripTime,g.candidatePairsInfo.total_rtt=Q.totalRoundTripTime,["localCandidateId","remoteCandidateId","bytesSent","bytesReceived","availableOutgoingBitrate","availableIncomingBitrate","bytesDiscardedOnSend","consentRequestsSent","packetsDiscardedOnSend","lastPacketReceivedTimestamp","lastPacketSentTimestamp"].forEach(B=>{Q[B]!==void 0&&(g.candidatePairsInfo[T9A(B)]=Q[B])}))}),Object.keys(g).length>0&&((C=this._monitor)===null||C===void 0||C.report("rtc_transport_statistics",g)),!this._destroyed){const Q=this._pc.iceConnectionState==="connected"&&this._pc.connectionState==="connected";this._reportTimer=setTimeout(()=>{this._reportTransportStats()},Q?5e3:1e3)}}_print(I){for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q({ip:i.ip,tcp:i.tcpPorts,udp:i.udpPorts})))||[])}))}_reportRtcInvokeStatus(I,g){this._report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:0,stream_id:"",elapse:0})}}var fC=(A=>(A.ICE_FAILED="ice failed",A.DC_ERROR="datachannel onerror",A.DC_CLOSE="datachannel onclose",A.NODE_CHANGE="recv nodeChange signaling",A.NOTIFY_RECONNECT="recv notifyReconnect signaling",A.JOIN_TIMEOUT="joinRoom timeout, retry with tcp only",A))(fC||{});class o0A extends iQ{constructor(I){super(),P(this,"id",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_getAccessManager",void 0),P(this,"_connectionPool",new Map),P(this,"_curConnection",void 0),P(this,"_hasReportBrowerWarning",!1),P(this,"_reconnectTimer",void 0),P(this,"_connecting",!1),P(this,"_isFirstTimeConnected",!0),P(this,"_feedbackNodes",[]),P(this,"_preIceStartTime",-1),P(this,"_tcpOnlyTimer",void 0),P(this,"_destroyed",!1),this._ctx=I,this.id=I.id,this._monitor=tI(this.id),this.logger=new uA("ConnectionManager",3,this.id),this.logger.info("constructor","invoke"),this._getAccessManager=new M9A(I)}startup(){this.logger.info("connect","invoke");try{L9.checkSupported()}catch(I){this.asyncEmit("disconnected",I)}this._connecting||(this._onConnectStart(),Promise.resolve().then(()=>this.emit("__onGetIceConfigHook")),this._getAccess())}async reconnectByNodeChange(I){var g,C,Q;this.logger.info("reconnectByNodeChange","invoke %o",I);const{nodes:B,reason:E}=I;(g=this._monitor)===null||g===void 0||g.report("rtc_node_change",{error_code:0,message:JSON.stringify(I),reason:JSON.stringify(E)}),$A.clearAccessNode(this._ctx.appId),(C=this._curConnection)===null||C===void 0||C.pc.reportRtcPreIce("node_change");const i=((Q=this._curConnection)===null||Q===void 0||(Q=Q.node.publicIPs[0])===null||Q===void 0?void 0:Q.ip)||"";this._closeCurrentConnection(),this._clearConnectionPool(),this._clearReconnectTimer(),this._onConnectStart("recv nodeChange signaling"),Array.isArray(B)&&B.length>0?this._startIceConnect(B):this._getAccess([{feedbackIP:i,feedbackReason:{type:"NODE_CHANGED",reason:E}}])}async reconnect(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this.logger.info("reconnect","invoke. ".concat(g?"ICE over TCP":"")),this._closeCurrentConnection(),this._clearConnectionPool(),this._clearReconnectTimer(),this._onConnectStart(I),this._getAccess(void 0,g)}shotdown(){this.logger.info("destroy","invoke"),this._destroyed=!0,this.asyncEmit("disconnected",new U(m.OPERATION_CANCEL,"destroy")).then(()=>{super.removeAllListeners()}),this._clearReconnectTimer(),this._clearConnectionPool(),this._getAccessManager.destroy(),this._closeCurrentConnection()}_getAccess(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this._getAccessManager.getICENode(I).then(C=>{this.emit("__onGetIceSuccessHook",C),this._startIceConnect(C,g)}).catch(C=>{this.asyncEmit("disconnected",C)}).finally(()=>{this._feedbackNodes=[]})}_startIceConnect(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(this._destroyed)return;this.logger.info("_startIceConnect","invoke");const C=tC();this._preIceStartTime=aA();const Q=this._ctx.joinRoomConfig.useTcpJoin,B=this._ctx.joinRoomConfig.useTcpJoinDelay,E=async i=>{g&&((i=js(i)).iceConfig.tcpOnly=!0);const e={node:i};try{const o=new L9(this._ctx,C,!this._isFirstTimeConnected);e.pc=o,this._connectionPool.set(o.uuid,e);const t=await o.startIceConnect(i),s=new p9A(this.id,t,{connection_id:o.getConnectionId(),group_connection_id:C});e.signaling=s,o.reportRtcPreIce("datachannel_send_ping"),await s.sendPingSignaling(),o.reportRtcPreIce("datachannel_recv_pong"),this._onConnectSuccess({node:i,pc:o,signaling:s,dc:t}),this.safeEmit("__onConnectSuccessHook",I.length)}catch(o){this._onConnectionFailed(e,o)}};this.emit("__onIceConnectStartHook"),I.forEach(E),Q&&!g&&(this.logger.info("_startIceConnect","tcp-only will try after ".concat(B,"ms")),this._tcpOnlyTimer=setTimeout(()=>{this.emit("connectWidthTcp"),I.forEach(i=>{(i=js(i)).iceConfig.tcpOnly=!0,E(i)}),delete this._tcpOnlyTimer},B))}_onConnectSuccess(I){var g;this.logger.info("connect","peer_%s connect success.",I.pc.uuid),this.emit("__onIceConnectSuccessHook",I),this._curConnection?(I.pc.destroy(),I.signaling.destroy(),this._connectionPool.delete(I.pc.uuid)):(this._curConnection=I,this._addConnectionHandler(I.pc),(g=this._monitor)===null||g===void 0||g.set({connection_id:I.pc.getConnectionId()}),this._connectionPool.delete(I.pc.uuid),this._feedbackNodes.forEach(C=>this._feedbackBySignaling(C)),this._feedbackNodes=[],this._onConnectEnded(I))}_onConnectionFailed(I,g){var C,Q;this.logger.info("connect","peer_%s connect failed. %s",((C=I.pc)===null||C===void 0?void 0:C.uuid)||"",g.message),this.emit("__onIceConnectFailedHook",I),g.code!==QM.DESTROY&&g.code!==m.OPERATION_CANCEL&&(this._curConnection?this._feedbackBySignaling(I.node):this._feedbackNodes.push(I.node),this.logger.info("connect","remove cache node"),$A.deleteAccessNode(this._ctx.appId,I.node),I.pc&&(this._connectionPool.delete(I.pc.uuid),I.pc.destroy()),(Q=I.signaling)===null||Q===void 0||Q.destroy(),this._connectionPool.size!==0||this._curConnection||this._destroyed||(this.logger.error("connect","establish peerConnection failed"),this._checkBrowserUA(),aA()-this._preIceStartTime<1e3?(this._clearReconnectTimer(),this._reconnectTimer=setTimeout(()=>{delete this._reconnectTimer,this._reconnectWithIceFailed(this._feedbackNodes)},1e3)):this._reconnectWithIceFailed(this._feedbackNodes)))}_feedbackBySignaling(I){var g;(g=this._curConnection)===null||g===void 0||g.signaling.sendSignaling("scheduleMessage",{type:"feedback",body:{feedbackIP:I.publicIPs[0].ip,feedbackReason:{type:"ICE_FAILED",reason:{}}}})}async _reconnectWithIceFailed(I){this._onConnectStart("ice failed"),this.logger.warn("reconnect","because of ice failed"),this._getAccess(I.map(g=>({feedbackIP:g.publicIPs[0].ip,feedbackReason:{type:"ICE_FAILED",reason:{}}})))}_checkBrowserUA(){var I;!this._hasReportBrowerWarning&&this._ctx.joinRoomConfig.isBlackBrower()&&(this._hasReportBrowerWarning=!0,(I=this._monitor)===null||I===void 0||I.report("rtc_error",{error_code:TC.BLACK_BROWSER,message:"failed to establish data-channel, and the current browser is on the browser blacklist."}))}_onConnectStart(I){var g;this.logger.info("_onConnectStart","invoke, reason: ".concat(I||"init")),this._connecting=!0,I?this.asyncEmit("reconnecting",I):this.asyncEmit("connecting");const C=tC();var Q;(g=this._monitor)===null||g===void 0||g.set({connect_session_id:C}),this._isFirstTimeConnected||(Q=this._monitor)===null||Q===void 0||Q.report("rtc_reconnect",{error_code:1002,message:"peerconnection reconnecting",reconnect_id:C,reconnect_type:"peerconnection"},{reason:I})}_onConnectEnded(I){var g;this.logger.info("_onConnectEnded","invoke"),this._connecting=!1,this._isFirstTimeConnected||(g=this._monitor)===null||g===void 0||g.report("rtc_reconnected",{message:"peerconnection reconnected",reconnect_type:"peerconnection"}),this._isFirstTimeConnected=!1,this.asyncEmit("connected",I),I.node.iceConfig.tcpOnly&&(this.logger.info("_onConnectEnded","use tcp only"),AI(this._ctx.id,"connected_with_tcp_only",JSON.stringify(I.node))),this._tcpOnlyTimer&&(window.clearTimeout(this._tcpOnlyTimer),delete this._tcpOnlyTimer),this._clearConnectionPool()}_addConnectionHandler(I){I.on("disconnect",g=>{this._closeCurrentConnection(),this._clearReconnectTimer(),navigator.onLine?this.reconnect(g):this._reconnectTimer=setTimeout(()=>this.reconnect(g),3e3)})}_closeCurrentConnection(){var I,g;(I=this._curConnection)===null||I===void 0||I.pc.destroy(),(g=this._curConnection)===null||g===void 0||g.signaling.destroy(),delete this._curConnection}_clearConnectionPool(){this._connectionPool.forEach((I,g)=>{var C,Q;(C=I.signaling)===null||C===void 0||C.destroy(),(Q=I.pc)===null||Q===void 0||Q.destroy(),this._connectionPool.delete(g)})}_clearReconnectTimer(){this._reconnectTimer&&(window.clearTimeout(this._reconnectTimer),delete this._reconnectTimer)}}var t0A=av,s0A=t0A.f("asyncIterator"),v0A=s0A,r0A=v0A,a0A=r0A,P0A=a0A,c0A=P0A,n0A=c0A,l0A=n0A,d0A=CI(l0A),fY=hg,h0A=s1,D0A=iv,u0A=xQ,b0A=function(A,I,g){for(var C=h0A(I),Q=u0A.f,B=D0A.f,E=0;EB;B++)if((i=d(A[B]))&&xY(qY,i))return i;return new vl(!1)}C=X0A(A,Q)}for(e=v?A.next:C.next;!(o=J0A(e,C)).done;){try{i=d(o.value)}catch(l){OY(C,"throw",l)}if(typeof i=="object"&&i&&xY(qY,i))return i}return new vl(!1)},H0A=NC,x0A=function(A,I){return A===void 0?arguments.length<2?"":I:H0A(A)},O0A=yA,q0A=fg,_0A=IR,S9=_CA,$0A=b0A,iM=lP,Au=Uo,Iu=oe,AdA=m0A,IdA=Z0A,gdA=uv,CdA=x0A,QdA=vI,BdA=QdA("toStringTag"),T9=Error,EdA=[].push,fs=function(A,I){var g,C=q0A(gu,this);S9?g=S9(new T9,C?_0A(this):gu):(g=C?this:iM(gu),Au(g,BdA,"Error")),I!==void 0&&Au(g,"message",CdA(I)),IdA(g,fs,g.stack,1),arguments.length>2&&AdA(g,arguments[2]);var Q=[];return gdA(A,EdA,{that:Q}),Au(g,"errors",Q),g};S9?S9(fs,T9):$0A(fs,T9,{name:!0});var gu=fs.prototype=iM(T9.prototype,{constructor:Iu(1,fs),message:Iu(1,""),name:Iu(1,"AggregateError")});O0A({global:!0},{AggregateError:fs});var _a,rt,_Y,Cu,rr=QI,idA=te,edA=ee,Hc=function(A){return idA.slice(0,A.length)===A},eM=Hc("Bun/")?"BUN":Hc("Cloudflare-Workers")?"CLOUDFLARE":Hc("Deno/")?"DENO":Hc("Node.js/")?"NODE":rr.Bun&&typeof Bun.version=="string"?"BUN":rr.Deno&&typeof Deno.version=="object"?"DENO":edA(rr.process)==="process"?"NODE":rr.window&&rr.document?"BROWSER":"REST",odA=eM,NR=odA==="NODE",tdA=kg,sdA=U0,vdA=vI,rdA=Qg,$Y=vdA("species"),adA=function(A){var I=tdA(A);rdA&&I&&!I[$Y]&&sdA(I,$Y,{configurable:!0,get:function(){return this}})},PdA=HG,cdA=ov,ndA=TypeError,ldA=function(A){if(PdA(A))return A;throw new ndA(cdA(A)+" is not a constructor")},Ak=EQ,ddA=ldA,hdA=aP,DdA=vI,udA=DdA("species"),oM=function(A,I){var g,C=Ak(A).constructor;return C===void 0||hdA(g=Ak(C)[udA])?I:ddA(g)},bdA=te,tM=/(?:ipad|iphone|ipod).*applewebkit/i.test(bdA),qC=QI,ydA=u0,wdA=XE,Ik=xI,mdA=hg,sM=II,gk=CW,GdA=rv,Ck=MG,RdA=GP,LdA=tM,SdA=NR,fw=qC.setImmediate,Qk=qC.clearImmediate,TdA=qC.process,Qu=qC.Dispatch,UdA=qC.Function,Bk=qC.MessageChannel,FdA=qC.String,Bu=0,Pa={},Ek="onreadystatechange";sM(function(){_a=qC.location});var ZR=function(A){if(mdA(Pa,A)){var I=Pa[A];delete Pa[A],I()}},Eu=function(A){return function(){ZR(A)}},ik=function(A){ZR(A.data)},ek=function(A){qC.postMessage(FdA(A),_a.protocol+"//"+_a.host)};fw&&Qk||(fw=function(A){RdA(arguments.length,1);var I=Ik(A)?A:UdA(A),g=GdA(arguments,1);return Pa[++Bu]=function(){ydA(I,void 0,g)},rt(Bu),Bu},Qk=function(A){delete Pa[A]},SdA?rt=function(A){TdA.nextTick(Eu(A))}:Qu&&Qu.now?rt=function(A){Qu.now(Eu(A))}:Bk&&!LdA?(Cu=(_Y=new Bk).port2,_Y.port1.onmessage=ik,rt=wdA(Cu.postMessage,Cu)):qC.addEventListener&&Ik(qC.postMessage)&&!qC.importScripts&&_a&&_a.protocol!=="file:"&&!sM(ek)?(rt=ek,qC.addEventListener("message",ik,!1)):rt=Ek in Ck("script")?function(A){gk.appendChild(Ck("script"))[Ek]=function(){gk.removeChild(this),ZR(A)}}:function(A){setTimeout(Eu(A),0)});var vM={set:fw},rM=function(){this.head=null,this.tail=null};rM.prototype={add:function(A){var I={item:A,next:null},g=this.tail;g?g.next=I:this.head=I,this.tail=I},get:function(){var A=this.head;if(A)return(this.head=A.next)===null&&(this.tail=null),A.item}};var at,iu,eu,ou,ok,aM=rM,YdA=te,kdA=/ipad|iphone|ipod/i.test(YdA)&&typeof Pebble<"u",pdA=te,NdA=/web0s(?!.*chrome)/i.test(pdA),Hs=QI,ZdA=nz,tk=XE,tu=vM.set,KdA=aM,JdA=tM,WdA=kdA,VdA=NdA,su=NR,sk=Hs.MutationObserver||Hs.WebKitMutationObserver,vk=Hs.document,rk=Hs.process,xc=Hs.Promise,Hw=ZdA("queueMicrotask");if(!Hw){var Oc=new KdA,qc=function(){var A,I;for(su&&(A=rk.domain)&&A.exit();I=Oc.get();)try{I()}catch(g){throw Oc.head&&at(),g}A&&A.enter()};JdA||su||VdA||!sk||!vk?!WdA&&xc&&xc.resolve?((ou=xc.resolve(void 0)).constructor=xc,ok=tk(ou.then,ou),at=function(){ok(qc)}):su?at=function(){rk.nextTick(qc)}:(tu=tk(tu,Hs),at=function(){tu(qc)}):(iu=!0,eu=vk.createTextNode(""),new sk(qc).observe(eu,{characterData:!0}),at=function(){eu.data=iu=!iu}),Hw=function(A){Oc.head||at(),Oc.add(A)}}var zdA=Hw,MdA=function(A,I){try{arguments.length===1?console.error(A):console.error(A,I)}catch{}},bv=function(A){try{return{error:!1,value:A()}}catch(I){return{error:!0,value:I}}},XdA=QI,uo=XdA.Promise,jdA=QI,ca=uo,fdA=xI,HdA=VJ,xdA=fJ,OdA=vI,ak=eM,vu=PP,Pk=ca&&ca.prototype,qdA=OdA("species"),PM=fdA(jdA.PromiseRejectionEvent),_dA=HdA("Promise",function(){var A=xdA(ca),I=A!==String(ca);if(!I&&vu===66||!Pk.catch||!Pk.finally)return!0;if(!vu||vu<51||!/native code/.test(A)){var g=new ca(function(Q){Q(1)}),C=function(Q){Q(function(){},function(){})};if((g.constructor={})[qdA]=C,!(g.then(function(){})instanceof C))return!0}return!(I||ak!=="BROWSER"&&ak!=="DENO"||PM)}),RP={CONSTRUCTOR:_dA,REJECTION_EVENT:PM},tE={},ck=fQ,$dA=TypeError,AhA=function(A){var I,g;this.promise=new A(function(C,Q){if(I!==void 0||g!==void 0)throw new $dA("Bad Promise constructor");I=C,g=Q}),this.resolve=ck(I),this.reject=ck(g)};tE.f=function(A){return new AhA(A)};var IhA=yA,U9=NR,ge=QI,LP=Bg,ghA=se,ChA=fE,QhA=adA,BhA=fQ,xw=xI,EhA=rC,ihA=DR,ehA=oM,cM=vM.set,KR=zdA,ohA=MdA,thA=bv,shA=aM,nM=Pv,Ow=uo,lM=RP,dM=tE,rl="Promise",nk=lM.CONSTRUCTOR,vhA=lM.REJECTION_EVENT,ru,lk,rhA,au=nM.getterFor(rl),ahA=nM.set,PhA=Ow&&Ow.prototype,ar=Ow,Pu=PhA,hM=ge.TypeError,qw=ge.document,JR=ge.process,_w=dM.f,chA=_w,nhA=!!(qw&&qw.createEvent&&ge.dispatchEvent),DM="unhandledrejection",lhA="rejectionhandled",dk=0,uM=1,dhA=2,WR=1,bM=2,yM=function(A){var I;return!(!EhA(A)||!xw(I=A.then))&&I},wM=function(A,I){var g,C,Q,B=I.value,E=I.state===uM,i=E?A.ok:A.fail,e=A.resolve,o=A.reject,t=A.domain;try{i?(E||(I.rejection===bM&&DhA(I),I.rejection=WR),i===!0?g=B:(t&&t.enter(),g=i(B),t&&(t.exit(),Q=!0)),g===A.promise?o(new hM("Promise-chain cycle")):(C=yM(g))?LP(C,g,e,o):e(g)):o(B)}catch(s){t&&!Q&&t.exit(),o(s)}},mM=function(A,I){A.notified||(A.notified=!0,KR(function(){for(var g,C=A.reactions;g=C.get();)wM(g,A);A.notified=!1,I&&!A.rejection&&hhA(A)}))},GM=function(A,I,g){var C,Q;nhA?((C=qw.createEvent("Event")).promise=I,C.reason=g,C.initEvent(A,!1,!0),ge.dispatchEvent(C)):C={promise:I,reason:g},!vhA&&(Q=ge["on"+A])?Q(C):A===DM&&ohA("Unhandled promise rejection",g)},hhA=function(A){LP(cM,ge,function(){var I,g=A.facade,C=A.value;if(hk(A)&&(I=thA(function(){U9?JR.emit("unhandledRejection",C,g):GM(DM,g,C)}),A.rejection=U9||hk(A)?bM:WR,I.error))throw I.value})},hk=function(A){return A.rejection!==WR&&!A.parent},DhA=function(A){LP(cM,ge,function(){var I=A.facade;U9?JR.emit("rejectionHandled",I):GM(lhA,I,A.value)})},is=function(A,I,g){return function(C){A(I,C,g)}},ms=function(A,I,g){A.done||(A.done=!0,g&&(A=g),A.value=I,A.state=dhA,mM(A,!0))},$w=function(A,I,g){if(!A.done){A.done=!0,g&&(A=g);try{if(A.facade===I)throw new hM("Promise can't be resolved itself");var C=yM(I);C?KR(function(){var Q={done:!1};try{LP(C,I,is($w,Q,A),is(ms,Q,A))}catch(B){ms(Q,B,A)}}):(A.value=I,A.state=uM,mM(A,!1))}catch(Q){ms({done:!1},Q,A)}}};nk&&(Pu=(ar=function(A){ihA(this,Pu),BhA(A),LP(ru,this);var I=au(this);try{A(is($w,I),is(ms,I))}catch(g){ms(I,g)}}).prototype,(ru=function(A){ahA(this,{type:rl,done:!1,notified:!1,parent:!1,reactions:new shA,rejection:!1,state:dk,value:null})}).prototype=ghA(Pu,"then",function(A,I){var g=au(this),C=_w(ehA(this,ar));return g.parent=!0,C.ok=!xw(A)||A,C.fail=xw(I)&&I,C.domain=U9?JR.domain:void 0,g.state===dk?g.reactions.add(C):KR(function(){wM(C,g)}),C.promise}),lk=function(){var A=new ru,I=au(A);this.promise=A,this.resolve=is($w,I),this.reject=is(ms,I)},dM.f=_w=function(A){return A===ar||A===rhA?new lk(A):chA(A)}),IhA({global:!0,wrap:!0,forced:nk},{Promise:ar}),ChA(ar,rl,!1,!0),QhA(rl);var uhA=vI,RM=uhA("iterator"),LM=!1;try{var bhA=0,Dk={next:function(){return{done:!!bhA++}},return:function(){LM=!0}};Dk[RM]=function(){return this},Array.from(Dk,function(){throw 2})}catch{}var yhA=function(A,I){try{if(!I&&!LM)return!1}catch{return!1}var g=!1;try{var C={};C[RM]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch{}return g},whA=uo,mhA=yhA,GhA=RP.CONSTRUCTOR,M0=GhA||!mhA(function(A){whA.all(A).then(void 0,function(){})}),RhA=yA,LhA=Bg,ShA=fQ,ThA=tE,UhA=bv,FhA=uv,YhA=M0;RhA({target:"Promise",stat:!0,forced:YhA},{all:function(A){var I=this,g=ThA.f(I),C=g.resolve,Q=g.reject,B=UhA(function(){var E=ShA(I.resolve),i=[],e=0,o=1;FhA(A,function(t){var s=e++,v=!1;o++,LhA(E,I,t).then(function(r){v||(v=!0,i[s]=r,--o||C(i))},Q)}),--o||C(i)});return B.error&&Q(B.value),g.promise}});var khA=yA,phA=RP.CONSTRUCTOR;uo&&uo.prototype,khA({target:"Promise",proto:!0,forced:phA,real:!0},{catch:function(A){return this.then(void 0,A)}});var NhA=yA,ZhA=Bg,KhA=fQ,JhA=tE,WhA=bv,VhA=uv,zhA=M0;NhA({target:"Promise",stat:!0,forced:zhA},{race:function(A){var I=this,g=JhA.f(I),C=g.reject,Q=WhA(function(){var B=KhA(I.resolve);VhA(A,function(E){ZhA(B,I,E).then(g.resolve,C)})});return Q.error&&C(Q.value),g.promise}});var MhA=yA,XhA=tE,jhA=RP.CONSTRUCTOR;MhA({target:"Promise",stat:!0,forced:jhA},{reject:function(A){var I=XhA.f(this);return(0,I.reject)(A),I.promise}});var fhA=EQ,HhA=rC,xhA=tE,SM=function(A,I){if(fhA(A),HhA(I)&&I.constructor===A)return I;var g=xhA.f(A);return(0,g.resolve)(I),g.promise},OhA=yA,qhA=kg,_hA=JJ,$hA=uo,ADA=RP.CONSTRUCTOR,IDA=SM,gDA=qhA("Promise"),CDA=!ADA;OhA({target:"Promise",stat:!0,forced:_hA},{resolve:function(A){return IDA(CDA&&this===gDA?$hA:this,A)}});var QDA=yA,BDA=Bg,EDA=fQ,iDA=tE,eDA=bv,oDA=uv,tDA=M0;QDA({target:"Promise",stat:!0,forced:tDA},{allSettled:function(A){var I=this,g=iDA.f(I),C=g.resolve,Q=g.reject,B=eDA(function(){var E=EDA(I.resolve),i=[],e=0,o=1;oDA(A,function(t){var s=e++,v=!1;o++,BDA(E,I,t).then(function(r){v||(v=!0,i[s]={status:"fulfilled",value:r},--o||C(i))},function(r){v||(v=!0,i[s]={status:"rejected",reason:r},--o||C(i))})}),--o||C(i)});return B.error&&Q(B.value),g.promise}});var sDA=yA,vDA=Bg,rDA=fQ,aDA=kg,PDA=tE,cDA=bv,nDA=uv,lDA=M0,uk="No one promise resolved";sDA({target:"Promise",stat:!0,forced:lDA},{any:function(A){var I=this,g=aDA("AggregateError"),C=PDA.f(I),Q=C.resolve,B=C.reject,E=cDA(function(){var i=rDA(I.resolve),e=[],o=0,t=1,s=!1;nDA(A,function(v){var r=o++,n=!1;t++,vDA(i,I,v).then(function(a){n||s||(s=!0,Q(a))},function(a){n||s||(n=!0,e[r]=a,--t||B(new g(e,uk)))})}),--t||B(new g(e,uk))});return E.error&&B(E.value),C.promise}});var dDA=yA,hDA=QI,DDA=u0,uDA=rv,bDA=tE,yDA=fQ,TM=bv,cu=hDA.Promise,bk=!1,wDA=!cu||!cu.try||TM(function(){cu.try(function(A){bk=A===8},8)}).error||!bk;dDA({target:"Promise",stat:!0,forced:wDA},{try:function(A){var I=arguments.length>1?uDA(arguments,1):[],g=bDA.f(this),C=TM(function(){return DDA(yDA(A),void 0,I)});return(C.error?g.reject:g.resolve)(C.value),g.promise}});var mDA=yA,GDA=tE;mDA({target:"Promise",stat:!0},{withResolvers:function(){var A=GDA.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var RDA=yA,Am=uo,LDA=II,SDA=kg,TDA=xI,UDA=oM,yk=SM,FDA=Am&&Am.prototype,YDA=!!Am&&LDA(function(){FDA.finally.call({then:function(){}},function(){})});RDA({target:"Promise",proto:!0,real:!0,forced:YDA},{finally:function(A){var I=UDA(this,SDA("Promise")),g=TDA(A);return this.then(g?function(C){return yk(I,A()).then(function(){return C})}:A,g?function(C){return yk(I,A()).then(function(){throw C})}:A)}});var kDA=pC,pDA=kDA.Promise,NDA=pDA,ZDA=NDA,KDA=ZDA,JDA=KDA,WDA=JDA,VDA=WDA,zDA=VDA,_c=CI(zDA);function MDA(A){var I,g,C,Q=2;for(Lr!==void 0&&(g=d0A,C=jW);Q--;){if(g&&(I=A[g])!=null)return I.call(A);if(C&&(I=A[C])!=null)return new Im(I.call(A));g="@@asyncIterator",C="@@iterator"}throw new TypeError("Object is not async iterable")}function Im(A){function I(g){if(Object(g)!==g)return _c.reject(new TypeError(g+" is not an object."));var C=g.done;return _c.resolve(g.value).then(function(Q){return{value:Q,done:C}})}return(Im=function(g){this.s=g,this.n=g.next}).prototype={s:null,n:null,next:function(){return I(this.n.apply(this.s,arguments))},return:function(g){var C=this.s.return;return C===void 0?_c.resolve({value:g,done:!0}):I(C.apply(this.s,arguments))},throw:function(g){var C=this.s.return;return C===void 0?_c.reject(g):I(C.apply(this.s,arguments))}},new Im(A)}var XDA=(A=>(A[A.AUTO=0]="AUTO",A[A.MODE_L=1]="MODE_L",A[A.MODE_R=2]="MODE_R",A[A.MODE_MIX=3]="MODE_MIX",A))(XDA||{}),JQ=(A=>(A[A.PLAYOUT=0]="PLAYOUT",A[A.PUBLISH=1]="PUBLISH",A[A.PLAYOUT_AND_PUBLISH=2]="PLAYOUT_AND_PUBLISH",A))(JQ||{}),nC=(A=>(A[A.AUDIO_MIXING_STATE_PRELOADED=0]="AUDIO_MIXING_STATE_PRELOADED",A[A.AUDIO_MIXING_STATE_PLAYING=1]="AUDIO_MIXING_STATE_PLAYING",A[A.AUDIO_MIXING_STATE_PAUSED=2]="AUDIO_MIXING_STATE_PAUSED",A[A.AUDIO_MIXING_STATE_STOPPED=3]="AUDIO_MIXING_STATE_STOPPED",A[A.AUDIO_MIXING_STATE_FAILED=4]="AUDIO_MIXING_STATE_FAILED",A[A.AUDIO_MIXING_STATE_FINISHED=5]="AUDIO_MIXING_STATE_FINISHED",A[A.AUDIO_MIXING_STATE_PCM_ENABLED=6]="AUDIO_MIXING_STATE_PCM_ENABLED",A[A.AUDIO_MIXING_STATE_PCM_DISABLED=7]="AUDIO_MIXING_STATE_PCM_DISABLED",A))(nC||{});class VR extends UB.EventEmitter{constructor(I,g){super(),P(this,"_context",void 0),P(this,"peerConnectionMode",0),P(this,"id",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_nextSsrc",A0A()),P(this,"_aSendonlyAnswerTpl",void 0),P(this,"_vSendonlyAnswerTpl",void 0),P(this,"_enableSubFlexfec",!1),P(this,"audioTrack4ff",void 0),P(this,"setLocalDescription",void 0),P(this,"setRemoteDescription",void 0),this.peer=g,this.id=I.id,this._monitor=tI(this.id),this.logger=new uA("BasicHandler",3,I.id),this.setLocalDescription=g.setLocalDescription.bind(g),this.setRemoteDescription=g.setRemoteDescription.bind(g),this._context=I,this.peer.on("ontrack",C=>{this.emit("ontrack",C)})}destroy(){this.logger.info("destroy",this.peerConnectionId||""),super.removeAllListeners()}get _peerConnection(){return this.peer.getOriginRTCPeerConnection()}getTransceivers(){return this._peerConnection.getTransceivers()}getConnectionState(){return this._peerConnection.connectionState}internalPublish(I){const{stream:g,videoTrack:C,audioTrack:Q,pubAudio:B,pubVideo:E}=I,i={direction:"sendonly",streams:[g]},e={direction:"sendonly",streams:[g]},{sendEncodings:o,videoDescriptions:t,subVideoDescriptions:s,activeSimulcastStreams:v}=this._context.videoProfile.genVideoDescriptions(I);e.sendEncodings=o,this._context.videoProfile.activeSimStreams=v,this.logger.info("publish videoTransceiverInit videoDescriptions","",e,t);let r=Q==null?void 0:Q.preprocessingTrack;(Q==null?void 0:Q.mixType)!==JQ.PLAYOUT&&Q!=null&&Q.mixedAudioTrack&&(r=Q==null?void 0:Q.mixedAudioTrack),r=B&&r?r:"audio";let n=C==null?void 0:C.preprocessingTrack;n=E&&n?n:"video";try{this._reportRtcInvokeStatus("Handler.internalPublish",JSON.stringify({aTrack:KQ(r),vTrack:KQ(n),audioTransceiverInit:i,videoTransceiverInit:e}))}catch{}return{semantics:"unified-plan",videoDescriptions:t,subVideoDescriptions:s,audioTransceiverInit:{track:r,init:i},videoTransceiverInit:{track:n,init:e}}}async setCurrentDescription(){}createAVMlineAnswerTpl(I){const g=dA.parse(I);g.media.forEach(C=>{if(C.type==="audio"){if(C.direction==="sendonly"){const Q=C==null?void 0:C.rtp.find(B=>B.codec==="opus");if(Q&&C!=null&&C.fmtp){const B=C==null?void 0:C.fmtp.find(E=>E.payload===Q.payload);B&&this._context&&(B.config+=";stereo=1;sprop-stereo=1")}this._aSendonlyAnswerTpl=C}}else C.type==="video"&&(C.direction==="sendonly"&&(this._vSendonlyAnswerTpl=C),Array.isArray(C.rtp)&&C.rtp.forEach(Q=>{var B;(B=Q.codec)!==null&&B!==void 0&&B.includes("flexfec")&&(this._enableSubFlexfec=!0)}))}),UE&&CE(g)}get peerConnectionId(){return this.peer.getConnectionId()||""}addBitrateLimit(I,g){I==null||I.rtp.forEach(C=>{let{codec:Q,payload:B}=C;if(["vp8","h264"].includes(Q.toLocaleLowerCase())){const E=I.fmtp.find(i=>i.payload===B);E?E.config=[...E.config.split(";"),"x-google-min-bitrate=100","x-google-start-bitrate=".concat(g)].join(";"):I.fmtp.push({payload:B,config:"x-google-min-bitrate=100;x-google-start-bitrate=".concat(g)})}})}_report(I,g,C){var Q;(Q=this._monitor)===null||Q===void 0||Q.report(I,R(R({},g),{},{connection_id:this.peer.getConnectionId(),group_connection_id:this.peer.getGroupConnectionId()}),C)}_reportRtcInvokeStatus(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",B=arguments.length>4?arguments[4]:void 0;this._report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:C,stream_id:Q,elapse:0},B)}}const jDA=new uA("queue",4);var UM=(A=>(A[A.ADD=0]="ADD",A[A.CLOSE=1]="CLOSE",A))(UM||{}),iI=(A=>(A.publish="publish",A.unpublish="unpublish",A.subscribe="subscribe",A.unsubscribe="unsubscribe",A.pushtrack="pushtrack",A.removetrack="removetrack",A))(iI||{});const fDA={publish:"unpublish",subscribe:"unsubscribe",pushtrack:"removetrack"},wk={publish:0,subscribe:0,pushtrack:0,unpublish:1,unsubscribe:1,removetrack:1};class HDA extends mPA{constructor(){super(),P(this,"_queue",void 0),this._queue=[]}get queue(){return this._queue}enqueue(I){const g=this._queue.length;let C="";return this._queue=this._queue.filter(Q=>Q.streamId!==I.streamId||I.action!==fDA[Q.action]||(C=Q.streamId,jDA.info("offsetStreamId",C),!1)),this._queue.length===g&&this._queue.push(I),this.emit("start"),C}dequeue(){if(!this._queue.length)return null;let I=this._queue.length;xi&&YQ>=86&&YQ<=92&&(I=Math.min(this._queue.length,5));const g=wk[this._queue[0].action];for(let C=1;C{this._queueBusy||this._peerConnection.signalingState!=="stable"||(this.logger.info("dequeue start"),this.dequeue())})}destroy(){super.destroy(),this._sdpQueue.destroy()}async publish(I){var g;const{stream:C,enableSimulcast:Q}=I,{videoDescriptions:B,subVideoDescriptions:E,audioTransceiverInit:i,videoTransceiverInit:e}=super.internalPublish(I),o=w9(this._nextSsrc);this._nextSsrc=o.next;const t="".concat(this._mid++),s="".concat(this._mid++),v=R(R(R({},this._aSendonlyOfferTpl),this.peer._offerIce),{},{mid:t,msid:"".concat(C.id," ").concat(C.id,"-audio"),ssrcs:m9(C.id,"audio",o.audio,zY)}),r=R(R(R({},this._vSendonlyOfferTpl),this.peer._offerIce),{},{mid:s,msid:"".concat(C.id," ").concat(C.id,"-video")});if(Q){this.logger.info("subVideoDesc","desc: %o ",E),delete r.ssrcGroups,delete r.ssrcs;const a=[];r.rids=B.map(c=>{let{rid:d}=c;return a.unshift(d),{id:d,direction:"send"}}),r.simulcast={dir1:"send",list1:a.join(";")}}else{const{ssrcs:a,ssrcGroups:c}=Xw(C.id,o,{cname:zY});r.ssrcs=a,r.ssrcGroups=c}if((g=this._context.serverConfig)!==null&&g!==void 0&&g.audioRed&&Array.isArray(v.rtp)){const a=v.rtp.findIndex(d=>d.codec==="red");if(a!==-1){const[d]=v.rtp.splice(a,1);v.rtp.unshift(d)}const c=[];v.rtp.forEach(d=>c.push(d.payload)),v.payloads=c.join(" ")}Array.isArray(r.ext)&&(lA("IOS_SAFARI_ORIENTATION")||!CQ&&!Yo||(r.ext=r.ext.filter(a=>{var c;return!(a!=null&&(c=a.uri)!==null&&c!==void 0&&c.includes("video-orientation"))})),r.ext=r.ext.filter(a=>{var c;return!(a!=null&&(c=a.uri)!==null&&c!==void 0&&c.includes("framemarking"))}));const n=v==null?void 0:v.rtp.find(a=>a.codec==="opus");if(n&&v.fmtp){const a=v.fmtp.find(c=>c.payload===n.payload);a&&this._context.audioProfileManager&&(a.config=this._context.audioProfileManager.getOpusConfigStr(a.config))}return Q||CQ||this.addBitrateLimit(r,I.videoEncodeConfig[0].maxKbps),I.audioMLine=v,I.videoMLine=r,{partialSdp:G9(this.peer._offerSession,v,r),audioMid:t,videoMid:s,type:"incroffer",semantics:"unified-plan",videoDescriptions:B,subVideoDescriptions:E,audioTransceiverInit:i,videoTransceiverInit:e,peerConnectionMode:this.peerConnectionMode}}async subscribe(I,g){var C,Q;if(this.logger.info("subscribe"),!this._aRecvonlyOfferTpl||!this._vRecvonlyOfferTpl){const w=await this._genOfferSdp();await this.createAVMlineOfferTpl(w)}let B,E,i,e,o="",t="",s=!1,v=!1;I.audioMLine=B,I.videoMLine=E,I.virtual?(o="".concat(this._mid++),s=!0):g.multiChatMode?(o="".concat(this._mid++),t="".concat(this._mid++),v=!0):(s=!0,v=!0,o="".concat(this._mid++),t="".concat(this._mid++)),o&&(B=R(R({},js(this._aRecvonlyOfferTpl)),{},{mid:o})),s&&(I.audioMLine=B,i={track:"audio",init:{direction:"recvonly"}}),t&&(E=R(R({},js(this._vRecvonlyOfferTpl)),{},{mid:t})),v&&(I.videoMLine=E,e={track:"video",init:{direction:"recvonly"}});const r=G9(this.peer._offerSession,B,E);let n,a;if(!I.enableVendorMode&&!g.multiChatMode&&!I.virtual&&this._aSendonlyAnswerTpl&&this._vSendonlyAnswerTpl){var c;n=w9(this._nextSsrc),this._nextSsrc=n.next;const w=R(R(R({},this._aSendonlyAnswerTpl),this.peer._answerIce),{},{mid:o,msid:"".concat(I.streamId).concat(this._context.avSync?"":"-audio"," ").concat(I.streamId,"-audio"),ssrcs:m9(I.streamId,"audio",n.audio)}),b=R(R(R({},this._vSendonlyAnswerTpl),this.peer._answerIce),{},{mid:t,msid:"".concat(I.streamId).concat(this._context.avSync?"":"-video"," ").concat(I.streamId,"-video")},Xw(I.streamId,n,{flexfec:this._enableSubFlexfec}));a={sdp:dA.write(R(R({},this.peer._answerSession),{},{media:[w,b]})),sequenceId:I.sequenceId?++I.sequenceId:0},(c=n)===null||c===void 0||delete c.next}const d=(C=B)===null||C===void 0?void 0:C.rtp.find(w=>w.codec==="opus");if(d&&(Q=B)!==null&&Q!==void 0&&Q.fmtp){var l;const w=(l=B)===null||l===void 0?void 0:l.fmtp.find(b=>b.payload===d.payload);w&&this._context&&(w.config+=";stereo=1;sprop-stereo=1")}if(I.isPublic&&YQ>=86){var h,D;const w=(h=E)===null||h===void 0?void 0:h.rtp.filter(b=>b.codec==="H264");var u;w!=null&&w.length&&(D=E)!==null&&D!==void 0&&D.fmtp&&((u=E)===null||u===void 0||u.fmtp.forEach(b=>{w.find(y=>y.payload===b.payload)&&(b.config+=";sps-pps-idr-in-keyframe=1")}))}return{partialSdp:r,audioMid:o,videoMid:t,type:"incroffer",semantics:"unified-plan",audioTransceiverInit:i,videoTransceiverInit:e,allSsrc:n,peerConnectionMode:this.peerConnectionMode,signalingAck:a}}async handleAck(I){return this.logger.info("handleAck()","item: %o",I),this._sdpQueue.enqueue(I)}async dequeue(){this._queueBusy=!0;const I=this._sdpQueue.dequeue();if(this.logger.info("dequeue()","ret: %o",I),!I)return void(this._queueBusy=!1);const g=[];try{const{items:v,sdpStrategy:r}=I,n=[],a=[],c=[];if(r===UM.ADD){delete R({},this.peer._answerIce).candidates;var C,Q=!1,B=!1;try{for(var E,i=MDA(v);Q=!(E=await i.next()).done;Q=!1){const d=E.value;{var e;const{audioMid:l,videoMid:h,action:D,audioTransceiverInit:u,videoTransceiverInit:w,signalingAck:b,stream:y,videoCodec:S,onSuccess:L,onFail:V}=d,z=y instanceof y9;if(L&&c.push(L),V&&g.push(V),z&&b.sequenceId{var bA;return gA==null||(bA=gA.type)===null||bA===void 0?void 0:bA.localeCompare(vA==null?void 0:vA.type)});const eA=EA.media.find(gA=>gA.type==="audio"),K=EA.media.find(gA=>gA.type==="video");if(!eA||!K)break;const p=R(R(R({},eA),this.peer._answerIce),{},{mid:l}),J=R(R(R({},K),this.peer._answerIce),{},{mid:h}),{audioMLine:Y,videoMLine:N,audioTransceiver:q,videoTransceiver:IA}=y;if(Y){let gA=this.peer._offerMlines.findIndex(vA=>vA.mid===l);var o;if(q){if(this._reportRtcInvokeStatus("chromeHandler.updateTrack",JSON.stringify({audioStreamTrack:KQ((o=y.audioTrack)===null||o===void 0?void 0:o.preprocessingTrack)})),gA===-1){this.logger.error("dequeue","audio mid not found when update sdp, %s from %o",l,this.peer._offerMlines);continue}}else u&&Y&&(y.audioTransceiver=this._peerConnection.addTransceiver(u.track,u.init),this._reportRtcInvokeStatus("chromeHandler.addTrack",JSON.stringify({audioStreamTrack:KQ(u.track)})),gA=this._inactiveMlineIndex.shift(),gA||(gA=this.peer._offerMlines.length),mk&&y.initAudioEncodedTransform());D===iI.publish&&lA("AUDIO_CODEC")!=="OPUS"&&(MY(Y,lA("AUDIO_CODEC")),MY(p,lA("AUDIO_CODEC"))),this.peer._offerMlines[gA]=R({},Y),this.peer._answerMlines[gA]=R({},p)}if(N){let gA=this.peer._offerMlines.findIndex(vA=>vA.mid===h);var t;if(IA){if(this._reportRtcInvokeStatus("chromeHandler.updateTrack",JSON.stringify({audioStreamTrack:KQ((t=y.videoTrack)===null||t===void 0?void 0:t.preprocessingTrack)})),gA===-1){this.logger.error("dequeue","video mid not found when update sdp, %s from %o",h,this.peer._offerMlines);continue}}else w&&N&&(y.videoTransceiver=this._peerConnection.addTransceiver(w.track,w.init),this._reportRtcInvokeStatus("chromeHandler.addTrack",JSON.stringify({videoStreamTrack:KQ(w.track)})),gA=this._inactiveMlineIndex.shift(),gA||(gA=this.peer._offerMlines.length),mk&&y.initVideoEncodedTransform());this.peer._offerMlines[gA]=R({},N),D===iI.publish&&S&&(R9(N,S),R9(J,S)),this.peer._answerMlines[gA]=J}n.push(y.streamId||""),a.push(z?y.userId:"local"),z&&(y.sequenceId=b.sequenceId)}}}catch(d){B=!0,C=d}finally{try{Q&&i.return!=null&&await i.return()}finally{if(B)throw C}}}else{var s;const d={};v.forEach(l=>{const{audioMid:h,videoMid:D,action:u}=l;d[h]=h,u!==iI.removetrack&&(d[D]=D),d[h]=h}),this.peer._offerMlines=this.peer._offerMlines.map((l,h)=>(l.mid&&d[l.mid]&&(l=jw(l),this._inactiveMlineIndex.push(h)),l)),Ws(s=this._inactiveMlineIndex).call(s,(l,h)=>l-h),this.peer._answerMlines=this.peer._answerMlines.map(l=>(l.mid&&d[l.mid]&&(l=jw(l)),l))}try{await this.setDescription(n.length?{streamId:n.join(","),streamUserId:a.join(",")}:void 0)}catch(d){throw this._peerConnection.signalingState==="have-local-offer"&&await this._peerConnection.setLocalDescription({type:"rollback"}),d}try{c.forEach(d=>d())}catch{}this.logger.info("dequeue","loop")}catch(v){this.logger.error("dequeue","unknown error: %o",v),g.forEach(r=>r(v))}finally{this.dequeue()}}async getDefaultSdp(){const I=await this._genOfferSdp();this.createAVMlineOfferTpl(I);const g=dA.parse(I),C=[];return g.media=g.media.filter(Q=>Q.direction==="recvonly"&&(Array.isArray(Q.ext)&&(Q.ext=Q.ext.filter(B=>B.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),C.push("".concat(Q.mid)),!0)),g.groups=[{mids:C.join(" "),type:"BUNDLE"}],UE&&CE(g),{sdp:dA.write(g),semantics:"unified-plan",type:"incroffer"}}async rollback(I){let{stream:g}=I;delete g.audioMLine,delete g.videoMLine}createAVMlineOfferTpl(I){const g=dA.parse(I);g.media.forEach(C=>{C.type==="audio"?C.direction==="sendonly"?this._aSendonlyOfferTpl=C:(Array.isArray(C.ext)&&(C.ext=C.ext.filter(Q=>Q.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),this._aRecvonlyOfferTpl=C):C.type==="video"&&(C.direction==="sendonly"?this._vSendonlyOfferTpl=C:(Array.isArray(C.ext)&&(C.ext=C.ext.filter(Q=>Q.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),this._vRecvonlyOfferTpl=C))}),UE&&CE(g)}async _genOfferSdp(){let I;try{if(I=await GaA(!0),I=gM(I),!I)throw"pc.createOffer() return empty."}catch(g){const C="Get offer Error. ".concat(g.message|g);throw new U(m.NOT_SUPPORTED,C)}return I}}class FM extends VR{constructor(I,g){super(I,g),P(this,"name","firefox"),P(this,"_aRecvonlyOfferTpl",void 0),this.logger=new uA("FirefoxHandler",3,I.id)}async publish(I){var g,C;const{videoDescriptions:Q,subVideoDescriptions:B,audioTransceiverInit:E,videoTransceiverInit:i}=super.internalPublish(I);I.audioTransceiver=this._peerConnection.addTransceiver(E.track,E.init),Array.isArray(i.init.sendEncodings)&&i.init.sendEncodings.length===1&&(i.init.sendEncodings=i.init.sendEncodings.map(a=>(delete a.rid,a))),I.videoTransceiver=this._peerConnection.addTransceiver(i.track,i.init);const e=aA();this._report("rtc_begin_create_offer",{direction:"up",stream_id:"",stream_user_id:"",pc_session_id:this.peerConnectionId,vendor_mode:0});const o=await this.peer.createOfferSdp();this._report("rtc_create_offer",{direction:"up",error_code:0,stream_id:"",stream_user_id:"",elapse:aA()-e});const t=dA.parse(o);t.media=(g=t.media)===null||g===void 0?void 0:g.map(a=>R(R({},a),this.peer._offerIce)),CE(t),await this.setLocalDescription(dA.write(t));const s=I.audioTransceiver.mid,v=I.videoTransceiver.mid;let r=null,n=null;return t.media=(C=t.media)===null||C===void 0?void 0:C.map(a=>{if("".concat(a.mid)===s){var c;r=a;const l=(c=r)===null||c===void 0?void 0:c.rtp.find(h=>h.codec==="opus");if(l&&r.fmtp){var d;const h=r.fmtp.find(D=>D.payload===l.payload);h&&(d=this._context)!==null&&d!==void 0&&d.audioProfileManager&&(h.config=this._context.audioProfileManager.getOpusConfigStr(h.config))}}else"".concat(a.mid)===v&&(n=a);return a}),this.addBitrateLimit(n,I.videoEncodeConfig[0].maxKbps),await this.setLocalDescription(dA.write(t)),I.initVideoEncodedTransform(),I.initAudioEncodedTransform(),{partialSdp:G9(t,r,n),audioMid:s,videoMid:v,type:"incroffer",semantics:"unified-plan",videoDescriptions:Q,subVideoDescriptions:B,audioTransceiverInit:E,videoTransceiverInit:i,peerConnectionMode:this.peerConnectionMode}}async _internalChangePubCodec(){const{localDescription:I}=this._peerConnection;I&&(await this.peer.createOfferSdp(),await this._peerConnection.setLocalDescription(I))}async subscribe(I,g){var C,Q,B,E;this.logger.info("subscribe()");let i,e,o="",t="",s=!1,v=!1;I.virtual?s=!0:(g.multiChatMode||(s=!0),v=!0),s&&(I.audioTransceiver=this._peerConnection.addTransceiver("audio",{direction:"recvonly"})),v&&(I.videoTransceiver=this._peerConnection.addTransceiver("video",{direction:"recvonly"}));const r=aA();this._report("rtc_begin_create_offer",{direction:"up",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:this.peerConnectionId,vendor_mode:0});const n=await this.peer.createOfferSdp();this._report("rtc_create_offer",{error_code:0,direction:"up",stream_id:I.streamId,stream_user_id:I.userId,elapse:aA()-r});const a=dA.parse(n);let c,d;if(a.media=(C=a.media)===null||C===void 0?void 0:C.map(u=>R(R({},u),this.peer._offerIce)),a.media.map(u=>{var w,b,y,S;u.type==="video"&&(Fw?(u.ext=(w=u.ext)===null||w===void 0?void 0:w.filter(L=>L.uri.indexOf("abs-send-time")===-1),u.rtcpFb=(b=u.rtcpFb)===null||b===void 0?void 0:b.filter(L=>L.type!=="goog-remb")):(u.rtcpFb=(y=u.rtcpFb)===null||y===void 0?void 0:y.filter(L=>L.type!=="transport-cc"),u.ext=(S=u.ext)===null||S===void 0?void 0:S.filter(L=>L.uri.indexOf("transport")===-1)))}),UE&&CE(a),await this.setLocalDescription(dA.write(a),{streamId:I.streamId||"",streamUserId:I.userId}),o=(Q=I.audioTransceiver)===null||Q===void 0?void 0:Q.mid,t=(B=I.videoTransceiver)===null||B===void 0?void 0:B.mid,(E=a.media)===null||E===void 0||E.forEach(u=>{"".concat(u.mid)===o?i=u:"".concat(u.mid)===t&&(e=u)}),o&&i||(o="audio_".concat(t),i=R(R({},this._aRecvonlyOfferTpl),{},{mid:o})),I.audioMid=o,I.videoMid=t,!g.multiChatMode&&!I.virtual&&this._aSendonlyAnswerTpl&&this._aSendonlyAnswerTpl){var l,h,D;c=w9(this._nextSsrc),this._nextSsrc=c.next;const u=R(R(R({},this._aSendonlyAnswerTpl),this.peer._answerIce),{},{mid:o,msid:"".concat(I.streamId).concat((l=this._context)!==null&&l!==void 0&&l.avSync?"":"-audio"," ").concat(I.streamId,"-audio"),ssrcs:m9(I.streamId,"audio",c.audio)}),w=R(R(R({},this._vSendonlyAnswerTpl),this.peer._answerIce),{},{mid:t,msid:"".concat(I.streamId).concat((h=this._context)!==null&&h!==void 0&&h.avSync?"":"-video"," ").concat(I.streamId,"-video")},Xw(I.streamId,c,{flexfec:this._enableSubFlexfec}));d={sdp:dA.write(R(R({},this.peer._answerSession),{},{media:[u,w]})),sequenceId:I.sequenceId?++I.sequenceId:0},(D=c)===null||D===void 0||delete D.next}return I.initVideoEncodedTransform(),I.initAudioEncodedTransform(),{partialSdp:G9(a,i,e,!1),audioMid:o,videoMid:t,type:"incroffer",semantics:"unified-plan",audioTransceiverInit:I.audioTransceiver?{track:"audio",init:{direction:"recvonly"}}:void 0,videoTransceiverInit:I.videoTransceiver?{track:"video",init:{direction:"recvonly"}}:void 0,allSsrc:c,peerConnectionMode:this.peerConnectionMode,signalingAck:d}}async handleAck(I){const{stream:g,action:C}=I;if(C===iI.removetrack)return"";if(C===iI.unpublish||C===iI.unsubscribe){try{await this.close(g),typeof I.onSuccess=="function"&&I.onSuccess()}catch(i){typeof I.onFail=="function"&&I.onFail(i)}return g.streamId||""}const{signalingAck:Q,videoCodec:B}=I,E=dA.parse(Q.sdp);try{await this._internalSetRemoteDescription(E.media,g,B),typeof I.onSuccess=="function"&&I.onSuccess()}catch(i){typeof I.onFail=="function"&&I.onFail(i)}return""}async _internalSetRemoteDescription(I,g,C){var Q,B;const E={},i=dA.parse((Q=this._peerConnection.remoteDescription)===null||Q===void 0?void 0:Q.sdp);i.media.forEach(t=>{t.mid!==void 0&&(E[t.mid]=t)}),I.forEach(t=>{if((t=R(R({},t),this.peer._answerIce)).type==="audio"&&(g.audioMid?(t.mid=g.audioMid,E[g.audioMid]=t):E[t.mid]=t),t.type==="video"){if(g instanceof b9&&r9<=87){const s={};Array.isArray(t.rtp)&&(t.rtp=t.rtp.filter(v=>v.codec!=="rtx"||(s[v.payload]=v.payload,!1))),typeof t.payloads=="string"&&(t.payloads=t.payloads.split(" ").filter(v=>!s[v]).join(" ")),Array.isArray(t.fmtp)&&(t.fmtp=t.fmtp.filter(v=>!s[v.payload])),Array.isArray(t.rtcpFb)&&(t.fmtp=t.fmtp.filter(v=>!s[v.payload]))}C&&R9(t,C),g.videoMid?(t.mid=g.videoMid,E[g.videoMid]=t):E[t.mid]=t}});const e=dA.parse((B=this._peerConnection.localDescription)===null||B===void 0?void 0:B.sdp),o=e.media.map(t=>{const s=E[t.mid];return t.direction==="inactive"?t:s});i.groups=e.groups,i.media=o,i.media.map(t=>{var s,v,r,n;t.type==="video"&&(Fw?(t.ext=(s=t.ext)===null||s===void 0?void 0:s.filter(a=>a.uri.indexOf("abs-send-time")===-1),t.rtcpFb=(v=t.rtcpFb)===null||v===void 0?void 0:v.filter(a=>a.type!=="goog-remb")):(t.rtcpFb=(r=t.rtcpFb)===null||r===void 0?void 0:r.filter(a=>a.type!=="transport-cc"),t.ext=(n=t.ext)===null||n===void 0?void 0:n.filter(a=>a.uri.indexOf("transport")===-1)))}),UE&&CE(i),await this.setRemoteDescription(dA.write(i))}async getDefaultSdp(){var I,g;const C=dA.parse((I=this._peerConnection.localDescription)===null||I===void 0?void 0:I.sdp);this.createAVMlineOfferTpl((g=this._peerConnection.localDescription)===null||g===void 0?void 0:g.sdp);const Q=[];return C.media=C.media.filter(B=>B.direction==="recvonly"&&(B.mid=B.mid+1,Q.push("".concat(B.mid)),!0)),UE&&CE(C),C.groups=[{mids:Q.join(" "),type:"BUNDLE"}],{sdp:dA.write(C),semantics:"unified-plan",type:"incroffer"}}async rollback(I){let{msid:g,stream:C,audioMid:Q,videoMid:B}=I;return this.logger.warn("rollback()"),this.close(C,Q,B)}async close(I,g,C){var Q;this.logger.info("close()");const B=I.audioMid||g,E=I.videoMid||C,i={};I.audioTransceiver&&B&&(I.audioTransceiver.stop(),i[B]=B),I.videoTransceiver&&E&&(I.videoTransceiver.stop(),i[E]=E);const e=[],o=await this.peer.createOfferSdp(),t=dA.parse(o);t.media=t.media.map(r=>(i[r.mid]&&(r=jw(r)),r.direction!=="inactive"&&e.push(r.mid),R(R({},r),this.peer._offerIce)));const s=dA.parse((Q=this._peerConnection.remoteDescription)===null||Q===void 0?void 0:Q.sdp),v={};s.media.forEach(r=>{r.mid!==void 0&&(v[r.mid]=r)}),s.media=t.media.map(r=>r.direction==="inactive"?r:v[r.mid]),t.groups&&s.groups&&(t.groups[0].mids=e.join(" "),s.groups[0].mids=e.join(" ")),await this.setLocalDescription(dA.write(t)),await this.setRemoteDescription(dA.write(s))}async setCurrentDescription(){await this.peer.createOfferSdp(),this._peerConnection.localDescription&&this._peerConnection.remoteDescription&&(await this._peerConnection.setLocalDescription(this._peerConnection.localDescription),await this._peerConnection.setRemoteDescription(this._peerConnection.remoteDescription))}createAVMlineOfferTpl(I){const g=dA.parse(I);g.media.forEach(C=>{C.type==="audio"&&(this._aRecvonlyOfferTpl=C)}),UE&&CE(g)}}const ODA=(A,I)=>mI?new FM(A,I):new xDA(A,I),qDA={[fC.ICE_FAILED]:di.ICE_FAILED,[fC.DC_ERROR]:di.ICE_FAILED,[fC.DC_CLOSE]:di.ICE_FAILED,[fC.NODE_CHANGE]:di.NODE_CHANGE,[fC.NOTIFY_RECONNECT]:di.NOTIFY_RECONNECT,[fC.JOIN_TIMEOUT]:di.JOIN_TIMEOUT};class _DA extends iQ{constructor(I){super(),P(this,"_connectionManager",void 0),P(this,"_dataChannelSignal",void 0),P(this,"_state",void 0),P(this,"_connectionLostTimer",void 0),P(this,"_isReconnecting",!1),P(this,"logger",void 0),this._ctx=I,this.logger=new uA("SignalingManager",1,I.id),this.logger.info("constructor","invoke"),this._connectionManager=new o0A(I),this._addConnectorHandler()}connect(){return this.isConnected()?Promise.resolve():new Promise((I,g)=>{this._connectionManager.once("connected",()=>I()),this._connectionManager.once("disconnected",g),this._connectionManager.startup()})}reconnect(I,g){this._connectionManager.reconnect(I,g)}sendSignaling(I,g,C,Q){if(!this._dataChannelSignal)throw new U(m.NOT_CONNECTED_YET,"signaling channel is not connected");return this._dataChannelSignal.sendSignaling(I,g,C,Q)}sendP2PMessage(I,g){if(!this._dataChannelSignal)throw new U(m.NOT_CONNECTED_YET,"signaling channel is not connected");return this._dataChannelSignal.sendP2PMessage(I,g)}destroy(){var I,g;this.logger.info("destroy()"),this._clearConnectionLostTimer(),this._connectionManager.shotdown(),(I=this._ctx.handler)===null||I===void 0||I.destroy(),this._ctx.handler=void 0,(g=this._dataChannelSignal)===null||g===void 0||g.destroy(),this._state&&this._setState(XA.CONNECTION_STATE_DISCONNECTED),this.removeAllListeners()}isConnected(){return this._state===XA.CONNECTION_STATE_CONNECTED||this._state===XA.CONNECTION_STATE_RECONNECTED}isReconnecting(){return this._state===XA.CONNECTION_STATE_CONNECTING||this._state===XA.CONNECTION_STATE_RECONNECTING}_setState(I,g){if(this._state===I)return;this._state=I;const C={state:I};g&&(C.reason=qDA[g]||di.ICE_FAILED),this.safeEmit(HI.ON_CONNECTION_STATE_CHANGE,C)}_addConnectorHandler(){var I=this;this._connectionManager.on("connected",g=>{var C;this.logger.info("connectStateChange","connected"),this._clearConnectionLostTimer(),(C=this._dataChannelSignal)===null||C===void 0||C.destroy(),this._ctx.peerConnection=g.pc,this._ctx.handler=ODA(this._ctx,g.pc),this._dataChannelSignal=g.signaling,this._addSignalEventHandler(),this._setState(this._isReconnecting?XA.CONNECTION_STATE_RECONNECTED:XA.CONNECTION_STATE_CONNECTED)}),this._connectionManager.on("disconnected",g=>{this._clearConnectionLostTimer(),this._setState(XA.CONNECTION_STATE_DISCONNECTED),this.logger.error("connectStateChange","disconnected. %o",g.message),this._isReconnecting&&this.safeEmit(HI.ON_RECONNECT_FAILED)}),this._connectionManager.on("connecting",()=>{this._isReconnecting=!1,this._ctx.handler=void 0,this._setState(XA.CONNECTION_STATE_CONNECTING),this.logger.info("connectStateChange","connecting")}),this._connectionManager.on("reconnecting",g=>{this._setState(XA.CONNECTION_STATE_DISCONNECTED,g),this._connectionLostTimer||(this._connectionLostTimer=setTimeout(()=>{this.safeEmit(HI.ON_CONNECTION_STATE_CHANGE,{state:XA.CONNECTION_STATE_LOST})},1e4)),this._isReconnecting=!0,this._ctx.handler=void 0,this._setState(XA.CONNECTION_STATE_RECONNECTING,g),this.logger.warn("connectStateChange","reconnecting")}),this._connectionManager.on("connectWidthTcp",()=>{this.safeEmit(HI.CONNECT_WITH_TCP)}),["__onGetIceConfigHook","__onIceConnectSuccessHook","__onConnectSuccessHook"].forEach(g=>{this._connectionManager.on(g,function(){for(var C=arguments.length,Q=new Array(C),B=0;B{var Q;(Q=this._dataChannelSignal)===null||Q===void 0||Q.on(C,B=>{this.safeEmit(C,B)})}),(I=this._dataChannelSignal)===null||I===void 0||I.on(x.NODE_CHANGE,C=>{this._connectionManager.reconnectByNodeChange(C)}),(g=this._dataChannelSignal)===null||g===void 0||g.on(x.ON_NOTIFY_RECONNECT,()=>{this._connectionManager.reconnect(fC.NOTIFY_RECONNECT)})}}var gm=(A=>(A.NORMAL_USER="normalUser",A.SILENT_USER="silentUser",A))(gm||{});const $DA=["preferCodecName"];class AuA{constructor(I){P(this,"_captureDeviceId",void 0),P(this,"_contentHint",void 0),P(this,"_videoCaptureConf",R({},Nc)),P(this,"_mainPreferCodec",void 0),P(this,"_screenPreferCodec",void 0),P(this,"_remoteVideoConfig",new Map),P(this,"_remoteSimulcastStreamType",new Map),P(this,"_simulcastMode",Li.VIDEO_ONLY_ONE),P(this,"_highVideoEncodeConf",st(Nc)),P(this,"_midVideoEncodeConf",void 0),P(this,"_lowVideoEncodeConf",void 0),P(this,"_screenEncodeConfig",naA),P(this,"_invalidVideoEncodeConf",void 0),P(this,"activeSimStreams",[]),P(this,"_logger",void 0),P(this,"_apiVersion",void 0),this._ctx=I,this._logger=new uA("EngineVideoProfile",1,I.id)}setCaptureDeviceId(I){this._captureDeviceId=I}setCaptureConfig(I){this._videoCaptureConf=R(R({},this._videoCaptureConf),I)}getCaptureConfig(I){I=I||this._captureDeviceId;const g=R({},this._videoCaptureConf);return I==="user"||I==="environment"||I==="left"||I==="right"?(delete g.deviceId,g.facingMode=I):I&&(!HrA||Yo?g.deviceId={exact:I}:delete g.deviceId),g}getContentHint(){return this._contentHint}getPreferCodec(I){return I?this._screenPreferCodec:this._mainPreferCodec}setRemoteUserVideoConfig(I,g){typeof g=="object"?this._remoteVideoConfig.set(I,g):this._remoteSimulcastStreamType.set(I,g)}getSubLayer(I,g){const C=this._remoteSimulcastStreamType.get(I.userId),Q=this._remoteVideoConfig.get(I.userId);if(C){var B,E,i,e,o,t;const{videoDescriptions:s,subVideoDescriptions:v}=I.attributes||{},r=Array.isArray(v)?v:s;let n;return r.length===1?n=0:r.length===2?n=C===Si.VIDEO_STREAM_HIGH?0:1:r.length>=3&&(n={[Si.VIDEO_STREAM_HIGH]:0,[Si.VIDEO_STREAM_MID]:1,[Si.VIDEO_STREAM_LOW]:2}[C]),{spatialLayer:(B=(E=n&&((i=r[n])===null||i===void 0?void 0:i.video_index))!==null&&E!==void 0?E:n)!==null&&B!==void 0?B:0,spatialSubLayer:(e=(o=n&&((t=r[n])===null||t===void 0?void 0:t.sub_index))!==null&&o!==void 0?o:n)!==null&&e!==void 0?e:-1}}return Q?JY(Q,I):g?JY(g,I):void 0}getSimulcastMode(){return this._simulcastMode}async setSimulcastMode(I,g){if(!MPA())throw new U(m.NOT_SUPPORTED,"Simulcast is not supported");if(this._simulcastMode!==I){if(g!=null&&g.hasPublished){var C,Q;if((C=g.localStream)!==null&&C!==void 0&&C.videoHasPublish||(Q=g.localStream)!==null&&Q!==void 0&&Q.audioHasPublish)throw new U(m.SET_SIMULCAST_FAILED,"Cannot change simulcast mode after publishing the video streams");this._logger.print("setSimulcastMode()","change simulcast mode and unpublish."),await g.unpublish()}this._simulcastMode=I,I!==Li.VIDEO_ONLY_ONE&&this._autoGenerateSubVideoEncodeConfig()}}closeSimulcast(){this._simulcastMode=Li.VIDEO_ONLY_ONE}async setVideoEncodeConfigPolyfill(I){if(Array.isArray(I)){tD(I);const[g,...C]=I;this.setVideoEncodeConfig(g),await this.setSubVideoEncodeConfig(fW(C).call(C))}else this.setVideoEncodeConfig(I)}setVideoEncodeConfig(I){tD([I]);const g=this._midVideoEncodeConf||this._lowVideoEncodeConf;g&&vt(g)>=vt(I)?(this._logger.warn("setVideoEncodeConfig","smaller then substream"),this._invalidVideoEncodeConf=st(I),I=g):delete this._invalidVideoEncodeConf;const C=R({},I),{preferCodecName:Q}=C,B=ve(C,$DA);bw(B),this._logger.print("setVideoEncodeConfig","update encode config",I),this._highVideoEncodeConf=st(I),this._contentHint=B.contentHint,this._mainPreferCodec=Q,this._logger.print("setVideoEncodeConfig","update capture config",B),this._videoCaptureConf=B}async setSubVideoEncodeConfig(I,g,C){if(this._logger.print("setSubVideoEncodeConfig","%o, published=%s",I,g==null?void 0:g.hasPublished),I&&I.length>0){tD(I),Ws(I).call(I,(t,s)=>vt(t)-vt(s));const E=this._invalidVideoEncodeConf||this._highVideoEncodeConf,i=I[I.length-1];if(vt(i)>=vt(E))throw new U(m.SET_SIMULCAST_FAILED,"The resolution cannot exceed the mainstream");if(g!=null&&g.hasPublished&&I.length!==this._getSubLayers().length){var Q,B;if((Q=g.localStream)!==null&&Q!==void 0&&Q.videoHasPublish||(B=g.localStream)!==null&&B!==void 0&&B.audioHasPublish)throw new U(m.SET_SIMULCAST_FAILED,"Cannot change the number of substreams after publishing the video streams");await g.unpublish()}I.length>2&&(AI(this._ctx.id,"simulcast_over_limit","setLocalSimulcastMode: You can set parameters for up to 2 streams"),bi("setLocalSimulcastMode: You can set parameters for up to 2 streams"));const[e,o]=I;e&&(WY(E,e),this._lowVideoEncodeConf=st(e)),o&&(WY(E,o),this._midVideoEncodeConf=st(o)),this._invalidVideoEncodeConf&&(this.setVideoEncodeConfig(this._invalidVideoEncodeConf),await(C==null?void 0:C.updateVideoCaptureConfig(this._ctx.videoProfile.getCaptureConfig())))}else this._autoGenerateSubVideoEncodeConfig()}genVideoDescriptions(I){var g,C;const Q=[];let B=[];const E=[],i=[];let{width:e,height:o,frameRate:t,maxKbps:s}=I.videoEncodeConfig[0];e=jA(e),o=jA(o);const v=(g=I.videoTrack)===null||g===void 0?void 0:g.preprocessingTrack,{width:r,height:n,frameRate:a}=(C=v==null?void 0:v.getSettings())!==null&&C!==void 0?C:{};r&&(e=Math.floor(r)),n&&(o=Math.floor(n)),a&&(t=Math.floor(a)),(typeof t!="number"||Number.isNaN(t))&&(t=30),Q.push({width:e,height:o,framerate:t,maxkbps:s,rid:"0"}),E.unshift({maxBitrate:1e3*s,rid:"0",maxFramerate:t});const{serverConfig:c}=this._ctx;if(!(I.isScreen||this._simulcastMode===Li.VIDEO_ONLY_ONE||mI&&(c==null?void 0:c.videoCodec)!=="VP8")){const d=J9A(e,o);if(d>1){const l=this._getSubVideoEncodeConfig(d,{width:e,height:o});this._logger.info("simulcast() ","simulcastLayers: %o",l),i.push(!0),l.forEach((h,D)=>{const u={maxBitrate:1e3*h.maxkbps,scaleResolutionDownBy:h.scaleResolutionDownBy,rid:"".concat(D+1),maxFramerate:h.frameRate};E.unshift(u),Q.push({width:h.width,height:h.height,framerate:h.frameRate,maxkbps:h.maxkbps,rid:"".concat(D+1)}),i.push(!0)}),c!=null&&c.simulcastOnDemand&&(B=Q.map((h,D)=>R(R({},h),{},{video_index:D,sub_index:D})))}}return c!=null&&c.e2eFeedback&&(B=Q.map((d,l)=>R(R({},d),{},{video_index:l,sub_index:l}))),{videoDescriptions:Q,subVideoDescriptions:B,sendEncodings:E,activeSimulcastStreams:i}}getVideoEncodeConfig(){return[this._highVideoEncodeConf,this._midVideoEncodeConf,this._lowVideoEncodeConf].filter(I=>I)}setScreenEncodeConfig(I){this._screenEncodeConfig=I}getScreenEncodeConfig(){return this._screenEncodeConfig}checkSimulcastApiVersion(I){if(this._apiVersion){if(this._apiVersion!==I){const g="mixing old and new apis, please use ".concat(this._apiVersion==="new"?"setLocalSimulcastMode/setRemoteSimulcastStreamType":"enableSimulcastMode/setRemoteVideoConfig"," instead.");throw AI(this._ctx.id,"mixingOldAndNewApis",g),new U(m.MIXING_OLD_AND_NEW_APIS,g)}}else this._apiVersion=I}destroy(){this._videoCaptureConf=Nc,this._highVideoEncodeConf=st(Nc),delete this._invalidVideoEncodeConf,this._remoteVideoConfig.clear(),this._remoteSimulcastStreamType.clear()}_autoGenerateSubVideoEncodeConfig(){this._logger.print("_autoGenerateSubVideoEncodeConfig()","generate low stream.");const I=this._highVideoEncodeConf,g=jA(I.width),C=jA(I.height),Q=Math.min(g,C)/90;this._lowVideoEncodeConf={width:Math.floor(g/Q),height:Math.floor(C/Q),maxKbps:100,frameRate:10}}_getSubLayers(){const I=[];return this._midVideoEncodeConf&&I.push(this._midVideoEncodeConf),this._lowVideoEncodeConf&&I.push(this._lowVideoEncodeConf),I}_getSubVideoEncodeConfig(I,g){return this._getSubLayers().slice(1-I).map(C=>{if(C.width>C.height&&g.widthg.height){const i=C.width;C.width=C.height,C.height=i}const Q=jA(C.width),B=jA(C.height),E=Math.max(g.width/Q,g.height/B);return{width:Math.floor(g.width/E),height:Math.floor(g.height/E),scaleResolutionDownBy:E,frameRate:jA(C.frameRate)||15,maxkbps:C.maxKbps||600}})}__autoResetVideoEncoderConfig(I){const g=caA(this.getVideoEncodeConfig(),I);g&&(this.setVideoEncodeConfigPolyfill(g),this._logger.print("autoResetVideoEncoderConfig() result",JSON.stringify(g)),AI(this._ctx.id,"autoResetVideoEncoderConfig",JSON.stringify(g)))}}class nu{constructor(I){P(this,"_sendTimes",[]),P(this,"_bufferSizeLimit",void 0),P(this,"_totalSizeLimitPerSecond",void 0),P(this,"_limitModeInterval",void 0),P(this,"_limitModeQPS",void 0),P(this,"_interval",void 0),P(this,"_qps",void 0),this.setLimitMode(I)}setLimitMode(I){I===Qo.LIMIT_MODE?(this._bufferSizeLimit=1,this._totalSizeLimitPerSecond=30720,this._limitModeInterval=1e3,this._limitModeQPS=60):(this._bufferSizeLimit=64,delete this._totalSizeLimitPerSecond,delete this._limitModeInterval,delete this._limitModeQPS)}setQPS(I,g){this._interval=I,this._qps=g}check(I){var g,C;const Q=Date.now(),B=iaA(I,this._bufferSizeLimit);if(typeof this._totalSizeLimitPerSecond=="number"&&this._sendTimes.reduce((e,o)=>Q-o.ts<1e3?e+o.size:e,0)+B>this._totalSizeLimitPerSecond)throw new U(m.USER_MESSAGE_EXCEED_QPS,"user message exceed total size(".concat(this._totalSizeLimitPerSecond,")"));const E=(g=this._limitModeInterval)!==null&&g!==void 0?g:this._interval,i=(C=this._limitModeQPS)!==null&&C!==void 0?C:this._qps;if(typeof E=="number"&&typeof i=="number")if(this._sendTimes.length(A.RECONNECT="ice-reconnect",A.LEAVE="leave_room",A))(YM||{});const $c=Qo.NORMAL_MODE;class IuA{constructor(I,g,C){P(this,"engineDestroyed",!1),P(this,"avSync",!0),P(this,"callId",void 0),P(this,"streamRTT",{}),P(this,"useCloudProxy",!1),P(this,"videoProfile",void 0),P(this,"audioProfileManager",void 0),P(this,"extensionManager",void 0),P(this,"userPriority",new Map),P(this,"expectedIDC",void 0),P(this,"autoPlayPolicy",void 0),P(this,"joinRoomConfig",void 0),P(this,"signalingManager",void 0),P(this,"peerConnection",void 0),P(this,"pubSubLock",new tB("pubSubLock")),P(this,"visibility",!0),P(this,"rtsLimiter",{e2e:new nu($c),e2s:new nu($c),boradcast:new nu($c),conf:void 0,rtsMode:$c}),P(this,"serverConfig",void 0),P(this,"mediaParams",void 0),P(this,"subscribeFallbackOption",void 0),P(this,"joinRoomParams",void 0),P(this,"isPreConnection",!1),P(this,"_handler",void 0),P(this,"monitor",void 0),P(this,"_businessId",void 0),P(this,"_userStreamConfig",new Map),P(this,"_localAudioTrackDumpConfig",{[F.STREAM_INDEX_MAIN]:{callback:void 0,frameSize:void 0},[F.STREAM_INDEX_SCREEN]:{callback:void 0,frameSize:void 0}}),P(this,"_remoteAudioTrackDumpConfig",{[F.STREAM_INDEX_MAIN]:new Map,[F.STREAM_INDEX_SCREEN]:new Map}),P(this,"_targetCodec",void 0),P(this,"_targetScreenCodec",void 0),P(this,"earMonitorSettings",{[F.STREAM_INDEX_MAIN]:{position:QC.NONE,volume:100},[F.STREAM_INDEX_SCREEN]:{position:QC.NONE,volume:100}}),P(this,"localVideoTrack",void 0),P(this,"localAudioTrack",void 0),P(this,"publicAudioVolume",new Map),this.id=I,this.appId=g,this.monitor=tI(I),this.expectedIDC=C==null?void 0:C.expectedIDC,this.autoPlayPolicy=C==null?void 0:C.autoPlayPolicy,this.audioProfileManager=new W9A(g),this.extensionManager=new $lA(I),this.joinRoomConfig=new RQ(I),this.signalingManager=new _DA(this),this.videoProfile=new AuA(this)}set businessId(I){var g;this._businessId=I,(g=this.monitor)===null||g===void 0||g.set({rtc_business_id:I})}get businessId(){return this._businessId}set handler(I){var g;I&&this.resetPubSubLock("ice-reconnect"),(g=this._handler)===null||g===void 0||g.destroy(),this._handler=I}get handler(){return this._handler}get role(){return this.visibility?gm.NORMAL_USER:gm.SILENT_USER}set targetCodec(I){I&&[bI.H264,bI.VP8,bI.ByteVC1].forEach(g=>{I.toLowerCase()===g.toLowerCase()&&(this._targetCodec=g)})}set targetScreenCodec(I){I&&[bI.H264,bI.VP8,bI.ByteVC1].forEach(g=>{I.toLowerCase()===g.toLowerCase()&&(this._targetScreenCodec=g)})}get targetCodec(){return this._targetCodec}get targetScreenCodec(){return this._targetScreenCodec}resetPubSubLock(I){this.pubSubLock.closeReason=I,this.pubSubLock=new tB("pubSubLock")}setUserStreamConf(I,g,C){const Q=this._userStreamConfig.get(I)||{},B=Q[g]||{};Q[g]=R(R({},B),C),this._userStreamConfig.set(I,Q)}getRemoteMirrorType(I,g){var C;return!((C=this._userStreamConfig.get(I))===null||C===void 0||(C=C[g])===null||C===void 0||!C.mirrorType)}get rtsMode(){return this.rtsLimiter.rtsMode}setRTSMode(I){this.rtsLimiter.e2e.setLimitMode(I),this.rtsLimiter.boradcast.setLimitMode(I),this.rtsLimiter.e2s.setLimitMode(I),this.rtsLimiter.rtsMode=I}setRtsQpsConf(I){this.rtsLimiter.e2e.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_e2e_qps_value),this.rtsLimiter.boradcast.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_broadcast_qps_value),this.rtsLimiter.e2s.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_e2s_qps_value),this.rtsLimiter.conf=I}destroy(){this.engineDestroyed=!0,this.signalingManager.destroy(),this.userPriority.clear(),this.avSync=!0,this._localAudioTrackDumpConfig={[F.STREAM_INDEX_MAIN]:{callback:void 0,frameSize:void 0},[F.STREAM_INDEX_SCREEN]:{callback:void 0,frameSize:void 0}},this._remoteAudioTrackDumpConfig[F.STREAM_INDEX_MAIN].clear(),this._remoteAudioTrackDumpConfig[F.STREAM_INDEX_SCREEN].clear(),this.extensionManager.destroy(),this.earMonitorSettings={[F.STREAM_INDEX_MAIN]:{position:QC.NONE,volume:100},[F.STREAM_INDEX_SCREEN]:{position:QC.NONE,volume:100}},this.publicAudioVolume.clear()}}function hB(A,I,g){const C=g.value;return g.value=async function(){var Q;const B=await this._ctx.pubSubLock.lock();((Q=this._ctx.handler)===null||Q===void 0?void 0:Q.name)==="chrome"&&B();try{const{closeReason:t}=this._ctx.pubSubLock;if(t)throw new U(m.UNEXPECTED_ERROR,t);for(var E=arguments.length,i=new Array(E),e=0;e{this._report("rtc_ice_state",{pc_session_id:this.peerConnectionId,direction:this.direction,error_code:0,ice_state:C.toUpperCase(),message:"",peer_connection_id:this.peerConnectionId,stream_id:"",stream_user_id:""})}),g.on("disconnect",()=>{this.emit("disconnect")})}async publish(I){this._context.videoProfile.closeSimulcast(),this.stream=I;const{videoDescriptions:g,subVideoDescriptions:C,audioTransceiverInit:Q,videoTransceiverInit:B}=super.internalPublish(I);I.audioTransceiver=this._peerConnection.addTransceiver(Q.track,Q.init),I.videoTransceiver=this._peerConnection.addTransceiver(B.track,B.init),Gk&&(I.initAudioEncodedTransform(),I.initVideoEncodedTransform()),this._report("rtc_begin_create_offer",{direction:"up",stream_id:"",stream_user_id:"",pc_session_id:this.peerConnectionId,vendor_mode:(I==null?void 0:I.vendorCode)||0});const E=await this.peer.createOfferSdp(),i=aA(),e=dA.parse(E);Array.isArray(e.media)&&(e.media=e.media.map(t=>{if(t.type==="video")(CQ||Yo)&&Array.isArray(t.ext)&&(t.ext=t.ext.filter(v=>{var r;return!(v!=null&&(r=v.uri)!==null&&r!==void 0&&r.includes("video-orientation"))})),CQ||this.addBitrateLimit(t,this._context.videoProfile.getVideoEncodeConfig()[0].maxKbps);else if(t.type==="audio"){const v=t==null?void 0:t.rtp.find(r=>r.codec==="opus");if(v&&t.fmtp){var s;const r=t.fmtp.find(n=>n.payload===v.payload);r&&(s=this._context)!==null&&s!==void 0&&s.audioProfileManager&&(r.config=this._context.audioProfileManager.getOpusConfigStr(r.config))}}return t}));const o={type:"offer",sdp:dA.write(e)};try{await this._peerConnection.setLocalDescription(o),this._report("rtc_set_description",{error_code:0,message:o.sdp||"",is_local:"1",direction:"up",stream_id:"",stream_user_id:"",elapse:aA()-i},{type:"offer"})}catch(t){throw this._report("rtc_set_description",{error_code:-1,message:t.message+o.sdp,is_local:"1",direction:"up",stream_id:"",stream_user_id:"",elapse:aA()-i},{type:"offer"}),t}return{partialSdp:o.sdp||"",audioMid:"0",videoMid:"1",type:"offer",semantics:"unified-plan",videoDescriptions:g,subVideoDescriptions:C,audioTransceiverInit:Q,videoTransceiverInit:B,peerConnectionMode:this.peerConnectionMode,peerConnectionId:this.peerConnectionId}}async subscribe(I){this.stream=I,this.direction="down",I.audioTransceiver=this._peerConnection.addTransceiver("audio",{direction:"recvonly"}),I.videoTransceiver=this._peerConnection.addTransceiver("video",{direction:"recvonly"}),Gk&&(I.initAudioEncodedTransform(),I.initVideoEncodedTransform()),this._report("rtc_begin_create_offer",{direction:"down",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:this.peerConnectionId,vendor_mode:I.vendorCode||0});const g=await this.peer.createOfferSdp(),C=aA(),Q=dA.parse(g);Array.isArray(Q.media)&&(Q.media=Q.media.map(E=>{if(E.type==="audio"){const i=E==null?void 0:E.rtp.find(e=>e.codec==="opus");if(i&&E!=null&&E.fmtp){const e=E==null?void 0:E.fmtp.find(o=>o.payload===i.payload);e&&this._context&&(e.config+=";stereo=1;sprop-stereo=1")}}return E}));const B={type:"offer",sdp:dA.write(Q)};try{await this._peerConnection.setLocalDescription(B),this._report("rtc_set_description",{error_code:0,message:B.sdp||"",is_local:"1",direction:"down",stream_id:I.streamId,stream_user_id:I.userId,elapse:aA()-C},{type:"offer"})}catch(E){throw this._report("rtc_set_description",{error_code:-1,message:E.message+B.sdp,is_local:"1",direction:"down",stream_id:I.streamId,stream_user_id:I.userId,elapse:aA()-C},{type:"offer"}),E}return{partialSdp:B.sdp||"",audioMid:"0",videoMid:"1",type:"offer",semantics:"unified-plan",peerConnectionMode:this.peerConnectionMode,peerConnectionId:this.peerConnectionId}}async handleAck(I){if(I.action===iI.publish||I.action===iI.subscribe){const{signalingAck:E,videoMid:i,videoCodec:e}=I,{sdp:o}=E,t=dA.parse(o);t.media=t.media.map(r=>(r.mid===i&&e&&R9(r,e),r));const s={sdp:dA.write(t),type:"answer"},v=aA();try{var g,C;await this._peerConnection.setRemoteDescription(s),this._report("rtc_set_description",{error_code:0,message:s.sdp||"",is_local:"1",direction:"down",stream_id:((g=I.stream)===null||g===void 0?void 0:g.streamId)||"",stream_user_id:(C=I.stream)===null||C===void 0?void 0:C.userId,elapse:aA()-v},{type:"answer"})}catch(r){var Q,B;throw this._report("rtc_set_description",{error_code:-1,message:r.message+s.sdp,is_local:"1",direction:"down",stream_id:((Q=I.stream)===null||Q===void 0?void 0:Q.streamId)||"",stream_user_id:(B=I.stream)===null||B===void 0?void 0:B.userId,elapse:aA()-v},{type:"offer"}),r}typeof I.onSuccess=="function"&&I.onSuccess()}else I.action!==iI.unpublish&&I.action!==iI.unsubscribe||this.destroy();return""}destroy(){this.peer.destroy(),super.destroy()}async getDefaultSdp(){return{sdp:"",type:"offer",semantics:""}}connect(){throw new Error("Method not implemented.")}async rollback(){try{this._peerConnection.close()}catch{}}get peerConnectionId(){return this._peerConnectionId}set peerConnectionId(I){this._peerConnectionId=I}}var guA=Object.defineProperty,CuA=Object.getOwnPropertyDescriptor,ii=(A,I,g,C)=>{for(var Q,B=CuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&guA(I,g,B),B};class uE extends iQ{constructor(I,g){super(),P(this,"_logger",void 0),P(this,"_pubBackOff",new Map),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomPublisher",2,I.id)}async hasPublished(I){return!!I.audioMid&&!!I.videoMid}async publish(I){return this._publish(I)}async _publish(I){var g,C,Q,B,E,i,e,o,t,s;this._logger.info("publish()","localStream: %o",I);const{videoTrack:v}=I,{audioTrack:r}=I,n=aA();let a,{handler:c}=this._ctx;this._roomConf.vendorConfig.enableMultiVendor?[c,a]=await this._getVendorPubSdpInfo(I):a=await this._ctx.handler.publish(I),this.emit("_test_pub_sdpInfo_",a);const{audioMid:d,videoMid:l}=a;I.pubAttributes={localaudio:!!r,localvideo:!!v,videostream:I.pubVideo,audiostream:I.pubAudio,extvideo:(v==null?void 0:v.sourceType)===oI.EXTERNAL,extaudio:(r==null?void 0:r.sourceType)===oI.EXTERNAL,videoDescriptions:a.videoDescriptions,videoType:eC.NORMAL};const h={attributes:R({},I.pubAttributes),audio:!0,video:!0,screen:I.isScreen,audioMid:d,videoMid:l,sdpInfo:{msid:I.stream.id,type:a.type,sdp:a.partialSdp,semantics:a.semantics},peerConnectionMode:(g=a)===null||g===void 0?void 0:g.peerConnectionMode,supportMultiVendor:!0},D=!this._roomConf.vendorConfig.enableMultiVendor&&I.enableSimulcast&&((C=this._ctx.serverConfig)===null||C===void 0?void 0:C.simulcastOnDemand)&&((Q=a.subVideoDescriptions)===null||Q===void 0?void 0:Q.length);let u;(D||(B=this._ctx.serverConfig)!==null&&B!==void 0&&B.e2eFeedback)&&(h.attributes.subVideoDescriptions=a.subVideoDescriptions),(E=a)!==null&&E!==void 0&&E.peerConnectionId&&(h.peerConnectionId=a.peerConnectionId);try{this.emit("_test_pub_body_",h),u=await this._ctx.signalingManager.sendSignaling("publish",h)}catch(V){var w;if(V instanceof Error?this._roomConf.report("rtc_publish_stat",{result:"fail",is_screen:"0",start:n,message:"".concat(V.name,": ").concat(V.message)}):V instanceof U&&this._roomConf.report("rtc_publish_stat",{result:"fail",is_screen:"0",start:n,message:"".concat(V.code,": ").concat(V.message)}),await((w=c)===null||w===void 0?void 0:w.rollback({msid:I.stream.id,stream:I,audioMid:d,videoMid:l})),V.code>=500&&V.code<600){this.emit("_test_pub_5xx_");const z=this._getPubBackOff(I.id);if(z.retryDuration<6e4)return this._logger.info("pubRetry",I.id,z.retryDuration),await new Promise(EA=>setTimeout(EA,z.interval)),z.retryDuration+=z.interval,z.interval=z.interval>4e3?8e3:2*z.interval,I.resetStream(),this.emit($.PUB_RETRY,{screen:I.isScreen}),this._publish(I);this._logger.info("pubRetry","end"),this._pubBackOff.delete(I.id)}else if(V.code===403)throw new U(m.TOKEN_NO_PUBLISH_PERMISSION,V.message||"token no publish permission");throw V}var b,y;this._roomConf.report("rtc_recv_answer",{error_code:0,answer_type:(i=u)===null||i===void 0?void 0:i.relayMessage.type,sequence_id:((e=u)===null||e===void 0||(e=e.relayMessage)===null||e===void 0?void 0:e.sequenceId)||0,message:(o=u)===null||o===void 0||(o=o.relayMessage)===null||o===void 0?void 0:o.sdp,direction:"up",stream_id:"",stream_user_id:"",pc_session_id:((t=c)===null||t===void 0?void 0:t.peerConnectionId)||""}),I.isScreen?I.setVideoCaps((b=u.relayMessage.content)===null||b===void 0?void 0:b.screenCaps):I.setVideoCaps((y=u.relayMessage.content)===null||y===void 0?void 0:y.videoCaps),I.streamId=u.streamId;const S=await I.getSelectedCodec();I.currentVideoCodec=S;const L=new Promise((V,z)=>{var EA,eA,K,p,J;(EA=c)===null||EA===void 0||EA.handleAck({action:iI.publish,streamId:u.streamId,audioMid:d,videoMid:l,audioTransceiverInit:(eA=a)===null||eA===void 0?void 0:eA.audioTransceiverInit,videoTransceiverInit:(K=a)===null||K===void 0?void 0:K.videoTransceiverInit,signalingAck:{sdp:(p=u)===null||p===void 0||(p=p.relayMessage)===null||p===void 0?void 0:p.sdp,sequenceId:(J=u)===null||J===void 0||(J=J.relayMessage)===null||J===void 0?void 0:J.sequenceId},stream:I,videoCodec:S,onSuccess:()=>{this._logger.info("publish()","publish success"),V(0)},onFail:Y=>{this._logger.info("publish()","publish fail"),z(Y)}})});!mI&&await L,this.emit("___afterHandleAckInPub"),(D&&this._ctx.videoProfile.getSimulcastMode()===Li.VIDEO_ON_DEMAND||(s=this._ctx.serverConfig)!==null&&s!==void 0&&s.e2eFeedback)&&this.emit(TE.RSCP,[{StreamIds:[I.stream.id],Metadata:{VideoIndex:0}}],!0),I.videoMid=l,I.audioMid=d,I.subVideoDescriptions=a.subVideoDescriptions,I.remoteSdp=u.relayMessage.sdp,this._roomConf.report("rtc_publish_stat",{result:"success",is_screen:"0",start:n,message:"unknown"})}async updatePubTrack(I){this._logger.info("updatePubTrack()","localStream: %o",I);const{videoTrack:g,audioTrack:C,pubAudio:Q,pubVideo:B}=I,E=I.vendorHandler||this._ctx.handler;let i=C==null?void 0:C.preprocessingTrack;const e=g==null?void 0:g.preprocessingTrack;var o,t;if(B&&e?(I.stopBlackFrame(),await((o=I.videoTransceiver)===null||o===void 0?void 0:o.sender.replaceTrack(e)),this._updateVideoDescriptions(I)):await((t=I.videoTransceiver)===null||t===void 0?void 0:t.sender.replaceTrack(null)),Q&&i){var s;const{mixType:c,mixedAudioTrack:d}=C;d&&c!==JQ.PLAYOUT&&i.enabled&&(i=d),await((s=I.audioTransceiver)===null||s===void 0?void 0:s.sender.replaceTrack(i))}else{var v;await((v=I.audioTransceiver)===null||v===void 0?void 0:v.sender.replaceTrack(null)),AI(this._ctx.id,"MediaClient.updatePubTrack(audio)","null")}await this._updatePublishCodec(I),this.emit("___onAfterReplaceTrack");try{AI(this._ctx.id,"MediaClient.updatePubTrack",JSON.stringify({audioStreamTrack:KQ(i),videoStreamTrack:KQ(e)}))}catch{}const r={localaudio:!!C,localvideo:!!g,videostream:B,audiostream:Q,extvideo:(g==null?void 0:g.sourceType)===oI.EXTERNAL,extaudio:(C==null?void 0:C.sourceType)===oI.EXTERNAL,videoType:g?eC.NORMAL:I.pubAttributes.videoType},n={};for(const[c,d]of Object.entries(r))d!==Reflect.get(I.pubAttributes,c)&&Reflect.set(n,c,d);if(!Object.keys(n).length)return;if(I.observer){const{observer:c}=I,{audiostream:d,videostream:l,localaudio:h,localvideo:D,extaudio:u,extvideo:w}=n;D!==void 0?w!==void 0?c.setPushVideo(w):c.setEnableVideo(D):l!==void 0&&c.setUnmuteVideo(l),h!==void 0?u!==void 0?c.setPushAudio(u):c.setEnableAudio(h):d!==void 0&&c.setUnmuteAudio(d)}I.pubAttributes=R(R({},I.pubAttributes),r),I.pubAttributes.videostream||I.stopBlackFrame();const a={roomId:this._roomConf.roomId,streamId:I.streamId,attributes:n};await this._ctx.signalingManager.sendSignaling("updateStreamAttributes",a),this.emit("___onAfterUpdateSignaling"),mI&&await(E==null?void 0:E.setCurrentDescription())}async _updatePublishCodec(I){this._logger.info("updatePublishCodec()","localStream: %o",I);const{audioMid:g,videoMid:C,remoteSdp:Q,streamId:B,currentVideoCodec:E}=I,i=await I.getSelectedCodec();if(this._logger.info("updatePublishCodec()","selectedCodec: %o",i),i!==E){if(I.currentVideoCodec=i,g&&C&&B&&Q){var e;return mI&&this._ctx.handler instanceof FM&&await((e=this._ctx.handler)===null||e===void 0?void 0:e._internalChangePubCodec()),new Promise((o,t)=>{var s;(s=this._ctx.handler)===null||s===void 0||s.handleAck({action:iI.publish,streamId:B,audioMid:g,videoMid:C,signalingAck:{sdp:Q,sequenceId:-1},videoCodec:i,onSuccess:o,onFail:t,stream:I})})}{const o=["audioMid","videoMid","streamId","remoteSdp"].filter(t=>!Reflect.get(I,t));this._logger.warn("updatePublishCodec()","fast return, because params: %o",o)}}else this._logger.warn("updatePublishCodec()","selectedCodec is equal to currentVideoCodec")}async unpublish(I){this._logger.info("unpublish()","localStream: %o",I);const g={roomId:this._roomConf.roomId,initStreamId:I.initStreamId,streamId:I.streamId};this._ctx.signalingManager.sendSignaling("unpublish",g).catch(()=>{});const C=I.vendorHandler||this._ctx.handler;I.stopBlackFrame(),await(C==null?void 0:C.handleAck({action:iI.unpublish,audioMid:I.audioMid,videoMid:I.videoMid,stream:I,streamId:I.streamId}))}async updatePubBlackFrame(I){var g;const C=I.genBlackFrame();C&&((g=I.videoTransceiver)===null||g===void 0||(g=g.sender)===null||g===void 0||g.replaceTrack(C),I.pubAttributes.videoType=eC.BLACK,this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:{videoType:eC.BLACK}}),I.on("black-frame-ended",()=>{var Q;(Q=I.videoTransceiver)===null||Q===void 0||(Q=Q.sender)===null||Q===void 0||Q.replaceTrack(null),I.pubAttributes.videoType=eC.NORMAL,this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:{videoType:eC.NORMAL}})}))}async cleanStream(I){return this._logger.info("cleanStream()","localStream: %o",I),I==null?void 0:I.clean()}async destroyStream(I){return this._logger.info("destroyStream()","localStream: %o",I),I==null?void 0:I.destroy()}destroy(I){I.forEach(g=>{g&&(this.unpublish(g).catch(()=>{}),this.destroyStream(g).catch(()=>{}))}),this._pubBackOff.clear(),super.removeAllListeners()}async _updateVideoDescriptions(I){var g;const C=this._ctx.videoProfile.genVideoDescriptions(I),Q=I.pubAttributes.videoDescriptions;if(Q.length!==C.videoDescriptions.length)return;const B={};if(Q.find((e,o)=>{if(e.framerate!==C.videoDescriptions[o].framerate||e.maxkbps!==C.videoDescriptions[o].maxkbps||e.width!==C.videoDescriptions[o].width||e.height!==C.videoDescriptions[o].height)return B.videoDescriptions=C.videoDescriptions,!0}),(g=I.subVideoDescriptions)===null||g===void 0||g.find((e,o)=>{if(e.framerate!==C.subVideoDescriptions[o].framerate||e.maxkbps!==C.subVideoDescriptions[o].maxkbps||e.width!==C.subVideoDescriptions[o].width||e.height!==C.subVideoDescriptions[o].height)return B.subVideoDescriptions=C.subVideoDescriptions,!0}),Object.keys(B).length>0){var E;this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:B});const e=(E=I.videoTransceiver)===null||E===void 0||(E=E.sender)===null||E===void 0?void 0:E.getParameters();var i;AI(this._ctx.id,"sender.getParameters",JSON.stringify(e),0,I.streamId),e&&Array.isArray(e==null?void 0:e.encodings)&&(e.encodings=e.encodings.map((o,t)=>{var s;return((s=o.rid)!==null&&s!==void 0?s:e.encodings.length===1?"0":void 0)===C.sendEncodings[t].rid&&(o.maxBitrate=C.sendEncodings[t].maxBitrate,o.maxFramerate=C.sendEncodings[t].maxFramerate,o.scaleResolutionDownBy=C.sendEncodings[t].scaleResolutionDownBy),o}),this._logger.info("sender.setParameters()",JSON.stringify(e.encodings)),AI(this._ctx.id,"sender.setParameters",JSON.stringify(e),0,I.streamId),(i=I.videoTransceiver)===null||i===void 0||i.sender.setParameters(e),AI(this._ctx.id,"Handler.updateScaleResolutionDownBy",JSON.stringify(e.encodings)))}}async _getVendorPubSdpInfo(I){const g=new L9(this._ctx,"");I.vendorHandler=new kM(this._ctx,g),I.pcSessionId&&(I.vendorHandler.peerConnectionId=I.pcSessionId);const C=await I.vendorHandler.publish(I),Q=I.vendorHandler;return Q.on("ice_state",B=>{this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,{state:{checking:XA.CONNECTION_STATE_CONNECTING,connected:XA.CONNECTION_STATE_CONNECTED,disconnected:XA.CONNECTION_STATE_RECONNECTING}[B],userId:this._roomConf.userId})}),Q.once("disconnect",async()=>{var B;Q.removeAllListeners(),((B=this._ctx.peerConnection)===null||B===void 0?void 0:B.getIceConnectionState())==="connected"?(await this.unpublish(I),await this.publish(I),I.vendorHandler&&I.statsReport.setVar(I.vendorHandler)):this._logger.info("vendor ice failed",I.streamId)}),[Q,C]}_getPubBackOff(I){return this._pubBackOff.has(I)||this._pubBackOff.set(I,{interval:1e3,retryDuration:0}),this._pubBackOff.get(I)}}ii([ag],uE.prototype,"hasPublished"),ii([ag,hB,DA],uE.prototype,"publish"),ii([ag,hB,DA],uE.prototype,"updatePubTrack"),ii([ag,hB,DA],uE.prototype,"unpublish"),ii([ag,DA],uE.prototype,"updatePubBlackFrame"),ii([ag],uE.prototype,"cleanStream"),ii([ag],uE.prototype,"destroyStream"),ii([DA],uE.prototype,"_updateVideoDescriptions");var QuA=Object.defineProperty,BuA=Object.getOwnPropertyDescriptor,nQ=(A,I,g,C)=>{for(var Q,B=BuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&QuA(I,g,B),B};class zC extends iQ{constructor(I,g){super(),P(this,"_logger",void 0),P(this,"_subBackOff",new Map),P(this,"_subResolves",{}),P(this,"_ontrackCallbackMap",new Map),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomSubscriber",2,I.id)}async hasSubscribed(I){return I.streamState===uC.SUB_ED}async subscribe(I,g,C){if(I.streamState!==uC.SUB_ED)return this._subscribe(I,g,C);this._logger.warn("subscribe()","remoteStream ".concat(I.streamId," has been subscribed, silently return"))}async _subscribe(I,g,C){var Q,B,E,i,e,o,t,s,v,r,n,a,c,d;this._logger.info("subscribe()","mediaType: %o",g),pt("subscribe()",I,this._logger),I.streamState=uC.SUB_ING;let l=!1,h=!1;if($I(g)&&(h=!0),gI(g)&&(l=!0),!l&&this._roomConf.isMultiChatMode())return void(I.streamState=uC.INIT);const D=aA(),u=I.subVideo,w=[];this._subResolves[I.streamId]||(this._subResolves[I.streamId]=[]),w.push(new Promise((CA,LA)=>{this._subResolves[I.streamId].push(CA);const UA=setTimeout(()=>LA(new U(m.TIME_OUT,"wait video timeout for userId: ".concat(I.userId))),6e4),xA=rg=>{rg.mediaType==="video"&&(this._logger.info("remoteStream ".concat(I.userId," received video track")),I.off("ontrack",xA),clearTimeout(UA),CA(0))};I.on("ontrack",xA)})),this._roomConf.isMultiChatMode()||w.push(new Promise((CA,LA)=>{this._subResolves[I.streamId].push(CA);const UA=setTimeout(()=>LA(new U(m.TIME_OUT,"wait audio timeout for userId: ".concat(I.userId))),6e4),xA=rg=>{rg.mediaType==="audio"&&(this._logger.info("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",xA),clearTimeout(UA),CA(0))};I.on("ontrack",xA)}));const b=CA=>{I.ontrack(CA)};(Q=this._ctx.handler)===null||Q===void 0||Q.on("ontrack",b),this._ontrackCallbackMap.set(I,b);let y,{handler:S}=this._ctx;(B=this._ctx.serverConfig)!==null&&B!==void 0&&B.forceUniHandler||!I.enableVendorMode?y=await this._ctx.handler.subscribe(I,{multiChatMode:this._roomConf.isMultiChatMode()}):[S,y]=await this._getVendorSubSdpInfo(I,b);const{audioMid:L,videoMid:V}=y;I.subVideo=l;const z={spatialLayer:(C==null?void 0:C.spatialLayer)||0,temporalLayer:0,spatialSubLayer:(C==null?void 0:C.spatialSubLayer)||-1},EA={audio:!this._roomConf.isMultiChatMode(),video:!0,data:!0,screen:I.isScreen,browser:"chrome-stable",videoMid:V,audioMid:L,sdpInfo:{sdp:(E=y)===null||E===void 0?void 0:E.partialSdp,semantics:(i=y)===null||i===void 0?void 0:i.semantics,type:(e=y)===null||e===void 0?void 0:e.type},streamUserId:I.userId,streamId:I.streamId,config:{enableMediaType:{audio:!!this._roomConf.isMultiChatMode()||h,video:l},qualityLayer:z},extra:{enableSendRTT:!0},peerConnectionMode:(o=y)===null||o===void 0?void 0:o.peerConnectionMode,supportMultiVendor:!0};(t=y)!==null&&t!==void 0&&t.peerConnectionId&&(EA.peerConnectionId=y.peerConnectionId);const{subscribeFallbackOption:eA,userPriority:K}=this._ctx;typeof eA=="number"&&(EA.config.fallbackOption=eA),K.has(I.userId)&&(EA.config.priority=K.get(I.userId)),(s=y)!==null&&s!==void 0&&s.allSsrc&&(EA.extra.subscribeSSRC=y.allSsrc);const{signalingAck:p,audioTransceiverInit:J,videoTransceiverInit:Y}=y;let N;p&&(I.videoMid=V,I.audioMid=L,await new Promise((CA,LA)=>{var UA;(UA=S)===null||UA===void 0||UA.handleAck({action:iI.subscribe,streamId:I.streamId,audioMid:L,videoMid:V,audioTransceiverInit:J,videoTransceiverInit:Y,signalingAck:p,stream:I,onSuccess:()=>{this._logger.info("ssrc","success"),CA(0)},onFail:xA=>{this._logger.info("ssrc","fail",xA),LA(xA)}})}));try{this.emit("_test_sub_body_",EA);const CA=this._ctx.signalingManager.sendSignaling("subscribe",EA);this.emit("_test_during_signaling_",EA),N=await CA}catch(CA){var q;if(I.streamState=uC.INIT,CA instanceof Error&&this._roomConf.report("rtc_subscribe_stat",{result:"fail",start:D,message:CA.message,stream_user_id:I.userId}),CA.code>=500&&CA.code<600){this.emit("_test_sub_5xx_");const UA=this._getSubBackOff(I.streamId);var IA;if(UA.retryDuration<6e4)return this._logger.info("subRetry",I.streamId,UA.retryDuration),await new Promise(xA=>setTimeout(xA,UA.interval)),UA.retryDuration+=UA.interval,UA.interval=UA.interval>4e3?8e3:2*UA.interval,this.emit($.SUB_RETRY,{screen:I.isScreen,userId:I.userId}),await((IA=S)===null||IA===void 0?void 0:IA.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:L,videoMid:V,stream:I})),I.resetStream(),this._subscribe(I,g,C);this._logger.info("subRetry","end",I.streamId),this._subBackOff.delete(I.streamId)}I.subVideo=u,await((q=S)===null||q===void 0?void 0:q.rollback({msid:I.streamId,stream:I}));const LA={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId};throw await this._ctx.signalingManager.sendSignaling("unsubscribe",LA).catch(()=>{}),I.streamState=uC.INIT,CA.code===403?new U(m.TOKEN_NO_SUBSCRIBE_PERMISSION,CA.message||"token no subscribe permission"):CA}if(!N.relayMessage)throw this._roomConf.report("rtc_error",{error_code:-1009,message:"relayMessage is null"}),new U(m.UNEXPECTED_ERROR,"unable to subscribe");const{audioMid:gA,videoMid:vA}=(v=(r=N)===null||r===void 0?void 0:r.relayMessage)!==null&&v!==void 0?v:{},bA={[L]:gA,[V]:vA};this._logger.info("sub midmap",I.userId,bA),I.videoMid=V,I.audioMid=L,I.subMediaType=g,I.streamState=uC.SUB_ED,I.subLayer=z,this._roomConf.report("rtc_recv_answer",{error_code:0,answer_type:(n=N)===null||n===void 0||(n=n.relayMessage)===null||n===void 0?void 0:n.type,sequence_id:((a=N)===null||a===void 0||(a=a.relayMessage)===null||a===void 0?void 0:a.sequenceId)||0,message:(c=N)===null||c===void 0||(c=c.relayMessage)===null||c===void 0?void 0:c.sdp,direction:"down",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:((d=S)===null||d===void 0?void 0:d.peerConnectionId)||""});try{var nA;(nA=y)!==null&&nA!==void 0&&nA.signalingAck||await new Promise((CA,LA)=>{var UA,xA,rg,NA,MI;(UA=S)===null||UA===void 0||UA.handleAck({action:iI.subscribe,streamId:I.streamId,audioMid:L,videoMid:V,audioTransceiverInit:(xA=y)===null||xA===void 0?void 0:xA.audioTransceiverInit,videoTransceiverInit:(rg=y)===null||rg===void 0?void 0:rg.videoTransceiverInit,signalingAck:{sdp:(NA=N)===null||NA===void 0||(NA=NA.relayMessage)===null||NA===void 0?void 0:NA.sdp,sequenceId:(MI=N)===null||MI===void 0||(MI=MI.relayMessage)===null||MI===void 0?void 0:MI.sequenceId},stream:I,onSuccess:()=>{this._logger.info("sub ack","success"),CA(0)},onFail:KC=>{this._logger.info("sub ack","fail",KC),LA(KC)}})}),await Promise.all(w)}catch(CA){var H;CA instanceof Error&&this._roomConf.report("rtc_subscribe_stat",{result:"fail",start:D,message:CA.message,stream_user_id:I.userId});const LA={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId};throw await this._ctx.signalingManager.sendSignaling("unsubscribe",LA).catch(()=>{}),await((H=S)===null||H===void 0?void 0:H.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:L,videoMid:V,stream:I})),I.streamState=uC.INIT,I.resetStream(),CA}this._roomConf.isMultiChatMode()||(I.subAudio=h),this._roomConf.report("rtc_subscribe_stat",{result:"success",start:D,message:"unknown",stream_user_id:I.userId}),I.startReport(CA=>this.emit("onRemoteStreamStats",CA),S)}async unsubscribe(I){var g,C;pt("unsubscribe()",I,this._logger);const Q={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId},B=I.vendorHandler||this._ctx.handler;this._ctx.signalingManager.sendSignaling("unsubscribe",Q).catch(()=>{}),I.streamState=uC.INIT,I.subVideo=!1,(g=I.observer)===null||g===void 0||g.setSubscribeVideo(!1),!this._roomConf.isMultiChatMode()&&((C=I.observer)===null||C===void 0||C.setSubscribeAudio(!1));const E=await(B==null?void 0:B.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:I.audioMid,videoMid:I.videoMid,stream:I}));this._subResolves[E]&&this._subResolves[E].forEach(i=>i(0)),this._logger.info("unsubscribe","clean unsub ".concat(I.userId)),I.clean(),I.subMediaType=OC.NONE,this._removeOnTrackListener(I),I.statsReport.unsubscribe()}async unsubscribe4removeTrack(I,g,C){var Q,B,E,i;if(pt("unsubscribe4removeTrack()",I,this._logger),this._logger.info("unsubscribe4removeTrack()","sequenceId: ",g.sequenceId,"trackType: ",C),g.sequenceId{this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,{state:{checking:XA.CONNECTION_STATE_CONNECTING,connected:XA.CONNECTION_STATE_CONNECTED,disconnected:XA.CONNECTION_STATE_RECONNECTING}[E],userId:I.userId})}),Q.once("disconnect",async()=>{var E;if(Q==null||Q.removeAllListeners(),((E=this._ctx.peerConnection)===null||E===void 0?void 0:E.getIceConnectionState())!=="connected")return void this._logger.info("vendor ice failed",I.streamId);const i=I.subMediaType;await this.unsubscribe(I),await this.subscribe(I,i),I.vendorHandler&&I.statsReport.setVar(I.vendorHandler),this.emit($.RESUBSCRIBE,{stream:I})}),[Q,B]}async subscribe4pushTrack(I,g){var C,Q,B;this._logger.info("subscribe4pushTrack()","streamInfo: %o",g),pt("subscribe4pushTrack()",I,this._logger),I.subAudio=!0;const E=await((C=this._ctx.handler)===null||C===void 0?void 0:C.subscribe(I,{multiChatMode:this._roomConf.isMultiChatMode()}));if(!E)throw new U(m.ADD_TRANSCEIVER_FAILED,"add transceiver failed");const{audioMid:i}=E,{videoMid:e}=E,o=[];o.push(new Promise((s,v)=>{const r=setTimeout(()=>v(new U(m.TIME_OUT,"wait audio timeout for userId: ".concat(I.userId))),6e4),n=a=>{a.mediaType==="audio"&&(this._logger.success("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",n),clearTimeout(r),s(0))};I.on("ontrack",n)}));const t=s=>{I.ontrack(s)};(Q=this._ctx.handler)===null||Q===void 0||Q.on("ontrack",t),this._ontrackCallbackMap.set(I,t),await((B=this._ctx.handler)===null||B===void 0?void 0:B.handleAck({action:iI.pushtrack,streamId:I.streamId,audioMid:i,videoMid:e,stream:I,audioTransceiverInit:E==null?void 0:E.audioTransceiverInit,videoTransceiverInit:E==null?void 0:E.videoTransceiverInit,signalingAck:g==null?void 0:g.message})),await Promise.all(o),I.videoMid=e,I.audioMid=i,I.startReport(s=>this.emit("onRemoteStreamStats",s),this._ctx.handler)}async updateUserAttributes(I){this._logger.info("updateUserAttributes()","attributes: %o",I),await this._ctx.signalingManager.sendSignaling("updateUserAttributes",{roomId:this._roomConf.roomId,sessionId:this._roomConf.sessionId,attributes:I})}async updateSubTrackLayer(I,g){if(this._logger.info("updateSubTrack()","subLayer: %o",g),I.subLayer.spatialLayer===g.spatialLayer&&I.subLayer.spatialSubLayer===g.spatialSubLayer)return void this._logger.warn("updateSubTrack()","subLayer no change");const C={roomId:this._roomConf.roomId,streamList:[I.streamId],streamId:I.streamId,streamUserId:I.userId,config:{qualityLayer:g}};return await this._ctx.signalingManager.sendSignaling("updateSubscribe",C),this.emit("___afterUpdateSubscribeSend"),I.subLayer=g,I}async updateSubPriority(I,g){if(this._logger.info("updateSubPriority()","priority: %o",g),I.priority===g)return this._logger.warn("updateSubPriority()","priority no change"),I;const C={roomId:this._roomConf.roomId,streamList:[I.streamId],streamId:I.streamId,streamUserId:I.userId,config:{priority:g}};return await this._ctx.signalingManager.sendSignaling("updateSubscribe",C),I.priority=g,I}async updateSubMediaType(I,g){var C;let Q=!1,B=!1;$I(g)&&(B=!0),gI(g)&&(Q=!0);const E={roomId:this._roomConf.roomId,streamList:[I.streamId],config:{enableMediaType:{video:Q,audio:!!this._roomConf.isMultiChatMode()||B}}};var i;return await this._ctx.signalingManager.sendSignaling("updateSubscribe",E),this._roomConf.isMultiChatMode()||((i=I.observer)===null||i===void 0||i.setUnmuteAudio(B),I.subAudio=B),(C=I.observer)===null||C===void 0||C.setUnmuteVideo(Q),I.subVideo=Q,I.subMediaType=g,I}async cleanStream(I){this._logger.info("cleanStream()","stream: %o",I),I==null||I.clean()}destroyStream(I){this._logger.info("destroyStream()","stream: %o",I),I==null||I.destroy()}destroy(I){var g;this._logger.info("destroy()","remoteStream: %o",I),I.forEach(C=>{this.unsubscribe(C).catch(()=>{}),this.destroyStream(C)}),this._subBackOff.clear(),this._ontrackCallbackMap.forEach((C,Q)=>{this._removeOnTrackListener(Q),this._ontrackCallbackMap.delete(Q)}),this._subResolves={},(g=this._ctx.handler)===null||g===void 0||g.removeAllListeners("ontrack"),super.removeAllListeners()}_getSubBackOff(I){return this._subBackOff.has(I)||this._subBackOff.set(I,{interval:1e3,retryDuration:0}),this._subBackOff.get(I)}}nQ([ag],zC.prototype,"hasSubscribed"),nQ([ag,hB,DA],zC.prototype,"subscribe"),nQ([ag,hB,DA],zC.prototype,"unsubscribe"),nQ([ag,hB,DA],zC.prototype,"unsubscribe4removeTrack"),nQ([DA],zC.prototype,"handleRemoveStream"),nQ([ag,hB,DA],zC.prototype,"subscribe4pushTrack"),nQ([ag,DA],zC.prototype,"updateUserAttributes"),nQ([ag,DA],zC.prototype,"updateSubTrackLayer"),nQ([ag,DA],zC.prototype,"updateSubPriority"),nQ([ag],zC.prototype,"updateSubMediaType"),nQ([ag],zC.prototype,"cleanStream"),nQ([ag],zC.prototype,"destroyStream");const Rk={[EC.communication]:[0],[EC.chat]:[0],[EC.chatRoom]:[1,"IES_chatroom"],[EC.coHost]:[1,"IES_PK"],[EC.meeting]:[16],[EC.classRoom]:[0]};class Gs extends iQ{constructor(I,g){super(),P(this,"_logger",void 0),P(this,"_authorization",void 0),P(this,"_joinRoom5xxTimer",void 0),P(this,"_joinTask",void 0),P(this,"_sdpInfo",void 0),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomJoin",2,I.id),this._logger.info("constructor","invoke")}join(){let I,g,C=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this._logger.info("join()");const Q=new Promise((B,E)=>{I=B,g=E,this._callJoinRoom(C).catch(i=>{const e=Array.isArray(i)&&i.length>0?i[0]:i;this._joinRoomFailed(e.message)})});return this._joinTask&&C?this._joinTask.startTime=aA():(this._joinTask={startTime:aA(),success:I,fail:g},this._roomConf.joinPromise=Q),this._reportJoinRoomStart(),Q}async updateToken(I){if(this._logger.info("updateToken()","newToken: %o",I),!this._ctx.appId||!this._roomConf.userId||!this._roomConf.roomId)return;const g={roomId:this._roomConf.roomId,userId:this._roomConf.userId,appId:this._ctx.appId,token:"Bearer ".concat(I)};try{await this._ctx.signalingManager.sendSignaling("updateToken",g)}catch{throw new U(m.UPDATE_TOKEN_WITH_INVALID_TOKEN,"invoke updateToken with an invalid token")}}async leave(){this._logger.info("leave()"),this._stopJoinRoom5xxRetry(),this._joinRoomFailed("leave_room");const I={Authorization:this._authorization,roomId:this._roomConf.roomId,sessionId:this._roomConf.sessionId};if(await this._ready2join(),!this._ctx.signalingManager.isConnected())return Promise.reject(new U(m.NOT_CONNECTED_YET,"server not connected"));await this._ctx.signalingManager.sendSignaling("leaveRoom",I,this._roomConf.rtsOnlySignalHeader)}destroy(){this._logger.info("destroy()"),this._joinRoomFailed("leave_room"),this._authorization=void 0,this._stopJoinRoom5xxRetry(),this.removeAllListeners()}async _ready2join(){var I;return await this._ctx.signalingManager.connect(),this._sdpInfo||(this._sdpInfo=await((I=this._ctx.handler)===null||I===void 0?void 0:I.getDefaultSdp())),Gs.supportedCodecs||(Gs.supportedCodecs=await qa()),{sdpInfo:this._sdpInfo,supportedCodecs:Gs.supportedCodecs}}async _callJoinRoom(I){var g,C;this._logger.info("_callJoinRoom","invoke"),delete this._sdpInfo;const{appId:Q,role:B,businessId:E,useCloudProxy:i,joinRoomParams:e,mediaParams:o}=this._ctx,{sdpInfo:t,supportedCodecs:s}=await this._ready2join(),v={Authorization:Ag.token2auth(Q,this._roomConf.roomId,this._roomConf.userId,this._roomConf.token),sessionId:this._roomConf.sessionId,timestamp:Date.now(),controlMessage:this._roomConf.getLiveControlMessage(),userAttributes:{extra_info:this._roomConf.userInfo.extraInfo,role:B},sdpInfo:t,params:{supportedCodecs:s,userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),appId:Q,roomId:this._roomConf.roomId,userId:this._roomConf.userId,businessId:E,enableCloudProxy:i,channelProfile:Rk[this._roomConf.roomProfileType]?"".concat(Rk[this._roomConf.roomProfileType][0]):"0",SDKCodecNegotiation:lA("SDK_CODEC_NEGOTIATION"),sdkType:"rtc",joinRoomMode:this._roomConf.isRTSOnlyRoom()?2:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=YA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0}};if(lA("AREA_CODE")==="AREA_CODE_US_OPCO"&&(v.params.mediaArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}])),e)for(const[D,u]of Object.entries(e))v.params[D]=u;o&&(v.mediaParams=o),lA("SIGNAL_CROP_JOINROOM")&&(C=v.sdpInfo)!==null&&C!==void 0&&C.sdp&&(v.sdpInfo.sdp=Q0A(v.sdpInfo.sdp)),Promise.resolve().then(()=>this.emit("onSendingJoinMessageHook"));try{var r,n,a,c;const D=I?"reconnected":"joinRoom",u=await this._joinRoomWithRetry(D,v);this._logger.success("join","send join message success");const{engine_WEB:w,_abtest_vid:b}=u.config||{};var d,l,h;this._authorization=v.Authorization,$A.setEngineWebConfig(this._ctx.appId,this._roomConf.roomId,w),this._ctx.serverConfig={videoCodec:w==null?void 0:w.video_codec,audioRed:!(w==null||!w.pub_audio_red),muteReplaceUnsub:!((r=u.config)===null||r===void 0||!r.mute_replace_unsub),simulcastOnDemand:((n=u.config)===null||n===void 0||(n=n.engine_VPM)===null||n===void 0||(n=n.ondemand)===null||n===void 0?void 0:n.enable)!==!1,forceUniHandler:((a=u.config)===null||a===void 0||(a=a.vendor_param)===null||a===void 0?void 0:a.vendor_stream_sub_mode)===1,e2eFeedback:w==null?void 0:w.e2e_feedback},lA("SDK_CODEC_NEGOTIATION")&&(this._ctx.targetCodec=(d=u.config)===null||d===void 0?void 0:d.targetCodec,this._ctx.targetScreenCodec=(l=u.config)===null||l===void 0?void 0:l.targetScreenCodec),typeof(w==null?void 0:w.av_sync)=="boolean"&&(this._ctx.avSync=w.av_sync),this._roomConf.rtcVid=b,u.vendorConfig&&this._roomConf.setVendorConfig(u.vendorConfig),BC.setAudioStallConfig(w),(c=u.relayMessage)!==null&&c!==void 0&&c.sdp&&((h=this._ctx.handler)===null||h===void 0||h.createAVMlineAnswerTpl(u.relayMessage.sdp)),this.emit($.JOIN_SUCCESS,{joinRes:u,reconnect:I}),this._joinRoomSuccess(u)}catch(D){const u={461:m.ROOM_FORBIDDEN,462:m.USER_FORBIDDEN};(D==null?void 0:D.code)>=700&&(D==null?void 0:D.code)<800?this._joinRoomFailed("token_error",m.INVALID_TOKEN):u[D==null?void 0:D.code]?this._joinRoomFailed((D==null?void 0:D.message)||u[D==null?void 0:D.code],u[D==null?void 0:D.code]):(D==null?void 0:D.code)===m.TIME_OUT&&this._ctx.joinRoomConfig.useTcpAfterJoinTimeout?(this._logger.error("join",fC.JOIN_TIMEOUT),this.safeEmit($.ON_REJOIN_WITH_TCP),this._ctx.signalingManager.reconnect(fC.JOIN_TIMEOUT,!0)):D.code===m.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting()||this._joinRoomFailed((D==null?void 0:D.message)||"signaling_error")}}_joinRoomWithRetry(I,g,C){return new Promise((Q,B)=>{this._ctx.signalingManager.sendSignaling(I,g,this._roomConf.rtsOnlySignalHeader,1e4).then(E=>{this.emit("onJoinRoomAck",E),Q(E)}).catch(E=>{if(C=C||new _z,E.code>=500&&E.code<600&&aA()-C.initTs<6e4){const i=C.getRetryDelay();return this._logger.warn("_joinRoomWithRetry","joinRoom failed(code: ".concat(E.code,"), will retry after ").concat(i,"ms")),void(this._joinRoom5xxTimer=setTimeout(()=>{delete this._joinRoom5xxTimer,this._joinRoomWithRetry(I,g,C).then(Q).catch(B)},i))}B(E)})})}_stopJoinRoom5xxRetry(){this._joinRoom5xxTimer&&(clearTimeout(this._joinRoom5xxTimer),delete this._joinRoom5xxTimer)}_reportJoinRoomStart(){this._joinTask&&(this.emit("__joinRoomStartReport"),this._roomConf.report("join_room",{type:"begin",start:this._joinTask.startTime,result:!1,reason:""},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}))}_joinRoomSuccess(I){this._joinTask&&(this._joinTask.success(I),this.emit("__joinRoomSuccessReport"),this._roomConf.report("join_room",{type:"end",start:this._joinTask.startTime,result:!0,reason:""},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}),this._roomConf.report("rtc_join_room",{error_code:0,deviceModel:"web",deviceManufacturer:"web",elapse:aA()-this._joinTask.startTime}),delete this._joinTask,delete this._roomConf.joinPromise)}_joinRoomFailed(I,g){this._joinTask&&(this._joinTask.fail(new U(g||m.JOIN_ROOM_FAILED,I)),this.emit("__joinRoomFailedReport"),this._roomConf.report("join_room",{type:"end",start:this._joinTask.startTime,result:!1,reason:I},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}),delete this._joinTask,delete this._roomConf.joinPromise)}}P(Gs,"supportedCodecs",void 0);var EuA=Object.defineProperty,iuA=Object.getOwnPropertyDescriptor,lu=(A,I,g,C)=>{for(var Q,B=iuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&EuA(I,g,B),B};class al{constructor(I,g){P(this,"_logger",void 0),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomMessage",2,I.id)}sendUserMessage(I,g){return this._ctx.signalingManager.sendP2PMessage({to:I,from:this._roomConf.userId,room:this._roomConf.roomId,app:this._ctx.appId,msg:g})}async sendRoomMessage(I,g){const C={clientId:this._roomConf.userId,binary:g,message:"",roomId:this._roomConf.roomId};return C.message=g?await Ag.ab2b64str(I):I,this._ctx.signalingManager.sendSignaling("customMessage",C,this._roomConf.rtsOnlySignalHeader)}async controlMessage(I){this._logger.info("controlMessage()","params: %o",I);const g=I;I.type==="transcode"&&(g.roomId=this._roomConf.roomId),await this._ctx.signalingManager.sendSignaling("controlMessage",g)}}lu([DA],al.prototype,"sendUserMessage"),lu([DA],al.prototype,"sendRoomMessage"),lu([DA],al.prototype,"controlMessage");var euA=Object.defineProperty,ouA=Object.getOwnPropertyDescriptor,PI=(A,I,g,C)=>{for(var Q,B=ouA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&euA(I,g,B),B};const Lk={audiostream:!0,extaudio:!1,extvideo:!1,localaudio:!0,localvideo:!1,videoDescriptions:[],videostream:!1,publishTime:0};class EI extends iQ{constructor(I,g){super(),P(this,"_localStream",void 0),P(this,"_localScreenStream",void 0),P(this,"_remoteUsers",new Map),P(this,"_remoteStreams",new Map),P(this,"_remoteStreamStreamIdUserIdMap",{}),P(this,"_virtualStreams",[]),P(this,"_serverConfig",void 0),P(this,"_userDuplicateLoginTimerMap",new Map),P(this,"_networkQualityManager",void 0),P(this,"_videoSizeObserver",void 0),P(this,"_hasPublished",!1),P(this,"_subtitleTool",void 0),P(this,"_csrcUserIdMap",{}),P(this,"_publishOnDemandItem",void 0),P(this,"_onceTriggerBySignal",!1),P(this,"_pubTransceiverReady",!1),P(this,"_publishOnDemandBusy",!1),P(this,"logger",void 0),P(this,"_forwardStreamManager",void 0),P(this,"_publisher",void 0),P(this,"_subscriber",void 0),P(this,"_roomJoin",void 0),P(this,"_roomMessage",void 0),P(this,"_clearSignalListeners",void 0),this.config=I,this._ctx=g,this.logger=new uA("Room",1,g.id),this.logger.info("constructor","invoke"),this._publisher=new uE(g,I),this._addPublisherListeners(),this._subscriber=new zC(g,I),this._addSubscriberListeners(),this._roomJoin=new Gs(g,I),this._addJoinRoomHandler(),this._forwardStreamManager=new Nt(g,I),this._addForwardStreamListeners(),this._roomMessage=new al(g,I),this._networkQualityManager=new y9A(g),this._networkQualityManager.reportor=this._reportNetworkQuality.bind(this),this._videoSizeObserver=new w9A(this),this._videoSizeObserver.onchange=this._emitVideoSizeChange.bind(this),this._addSignalListeners()}get remoteUsers(){return this._remoteUsers}get remoteStreams(){return this._remoteStreams}get localStream(){return this._localStream}get localScreenStream(){return this._localScreenStream}get virtualStreams(){return this._virtualStreams}_addSignalListeners(){const I={[x.ON_ADD_STREAM]:this._onAddStream.bind(this),[x.ON_ADD_STREAM_LIST]:g=>{g&&Array.isArray(g.streamList)&&g.streamList.forEach(C=>this._onAddStream(C))},[x.ON_REMOVE_STREAM]:this._onRemoveStream.bind(this),[x.ON_REMOVE_STREAM_LIST]:g=>{g&&Array.isArray(g.streamList)&&g.streamList.forEach(C=>this._onRemoveStream(C))},[x.USER_CONNECTION]:this._onUserConnection.bind(this),[x.USER_CONNECTION_LIST]:g=>{g&&Array.isArray(g.userList)&&g.userList.forEach(C=>this._onUserConnection(C))},[x.USER_DISCONNECTION]:this._onUserDisconnection.bind(this),[x.USER_DISCONNECTION_LIST]:g=>{g&&Array.isArray(g.userList)&&g.userList.forEach(C=>this._onUserDisconnection(C))},[x.ON_UPDATE_ROOM_ATTRIBUTES]:this._onUpdateRoomAttributes.bind(this),[x.ON_UPDATE_USER_ATTRIBUTES]:this._onUpdateUserAttributes.bind(this),[x.ON_UPDATE_STREAM_ATTRIBUTES]:this._onUpdateStreamAttributes.bind(this),[x.ON_PUSH_TRACK]:this._onPushTrack.bind(this),[x.ON_REMOVE_TRACK]:this._onRemoveTrack.bind(this),[x.ON_CUSTOM_MESSAGE]:this._onCustomMessage.bind(this),[x.USER_MESSAGE_RECEIVED]:this._onUserMessageReceived.bind(this),[x.USER_BINARY_MESSAGE_RECEIVED]:this._onUserBinaryMessageReceived.bind(this),[x.POST_PROCESSING_MESSAGE]:this._onPostProcessingMessage.bind(this),[x.ON_USER_TOKEN_WILL_EXPIRE]:this._onUserTokenWillExpire.bind(this),[x.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE]:this._onUserTokePublishPrivilegeWillExpire.bind(this),[x.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED]:this._onUserTokenPublishPrivilegeDidExpire.bind(this),[x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE]:this._onUserTokeSubscribePrivilegeWillExpire.bind(this),[x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED]:this._onUserTokenSubscribePrivilegeDidExpire.bind(this),[x.STREAM_CONTROL_MESSAGE]:this._onStreamControlMessage.bind(this),[x.ENGINE_CONTROL_MESSAGE]:this._onEngineControlMessage.bind(this),[x.ON_STREAM_FAILED]:this._onStreamFailed.bind(this),[TE.RTT]:this._onRTT.bind(this),[TE.SSC]:this._onSSC.bind(this),[HI.ON_CONNECTION_STATE_CHANGE]:this._onConnectionStateChange.bind(this),[x.ON_SPEAKER_CHANGE]:this._onMeetingSpeakerChange.bind(this),[x.ON_FORWARD_DST_ROOM_USER_KICK]:this._forwardStreamManager.onForwardDstRoomUserKick.bind(this._forwardStreamManager),[TE.RSCP]:this._onRSCP.bind(this)};Object.keys(I).forEach(g=>{this._ctx.signalingManager.on(g,I[g])}),this._clearSignalListeners=()=>{Object.keys(I).forEach(g=>{this._ctx.signalingManager.off(g,I[g])})}}_addPublisherListeners(){this._publisher.on($.PUB_RETRY,I=>{this.emit($.PUB_RETRY,I)}),this._publisher.on(TE.RSCP,this._onRSCP.bind(this)),this._publisher.on(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I=>this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I))}_addSubscriberListeners(){this._subscriber.on(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I=>this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I)),this._subscriber.on("onRemoteStreamStats",I=>{this._networkQualityManager.updateDownlinkStats(I,this._findRemoteStreamByScreen(I.userId,I.isScreen)),lA("HIDDEN_STATS")||(I=DC(I)),this.emit($.ON_REMOTE_STREAM_STATS,I)}),this._subscriber.on($.RESUBSCRIBE,I=>{this.emit($.RESUBSCRIBE,I)}),this._subscriber.on($.SUB_RETRY,I=>{this.emit($.SUB_RETRY,I)})}_addJoinRoomHandler(){this._roomJoin.on($.JOIN_SUCCESS,this._onJoinSucc.bind(this)),this._roomJoin.on($.ON_REJOIN_WITH_TCP,()=>{this.emit($.ON_REJOIN_WITH_TCP)})}_addForwardStreamListeners(){this._forwardStreamManager.on($.ON_FORWARD_STREAM_ERROR,I=>{this.safeEmit($.ON_FORWARD_STREAM_ERROR,I)})}_onLocalStreamStats(I){const g=I.isScreen?this._localScreenStream:this.localStream;this._networkQualityManager.updateUplinkStats(I,g),lA("HIDDEN_STATS")||(I=DC(I)),this.emit($.ON_LOCAL_STREAM_STATS,I)}async join(){this.logger.info("join()"),this.config.startJoinTimestamp=aA();try{var I;const g=await this._roomJoin.join();return this._ctx.callId=g.callId,(I=g.roomAttributes)!==null&&I!==void 0&&I.multiChatMode&&this._handleFFAudioTrack(),this._initSubtitleTool(),{users:g.clients,streams:g.streams}}catch(g){if(g.code!==m.OPERATION_CANCEL)throw g}}async hasScreenPublished(){return!!this._localScreenStream&&this._publisher.hasPublished(this._localScreenStream)}async hasPublished(){return!!this._localStream&&this._publisher.hasPublished(this._localStream)}async publishScreen(I,g,C,Q){this.logger.info("publishScreen()"),this._localScreenStream||(this._localScreenStream=new b9(this._ctx,F.STREAM_INDEX_SCREEN),this.config.vendorConfig.enableMultiVendor&&(this._localScreenStream.pcSessionId=tC()),this._localScreenStream.isScreen=!0,this._localScreenStream.observer=new Ww(this._ctx,this._localScreenStream));let B=!1,E=!1,i=!1,e=!1;!this._localScreenStream.videoTrack&&I?(I.sourceType===oI.EXTERNAL&&(E=!0),B=!0):this._localScreenStream.videoTrack&&!I&&(B=!1),!this._localScreenStream.audioTrack&&g?(g.sourceType===oI.EXTERNAL&&(e=!0),i=!0):this._localScreenStream.audioTrack&&!g&&(i=!1),this._localScreenStream.videoTrack=I,this._localScreenStream.audioTrack=g,C&&($I(C)&&(this._localScreenStream.pubAudio=Q===wC.PUB),gI(C)&&(this._localScreenStream.pubVideo=Q===wC.PUB),this.logger.info("publishScreen mediaType","pubAudio: %o, pubVideo: %o",this._localScreenStream.pubAudio,this._localScreenStream.pubVideo));const o=await this._publisher.hasPublished(this._localScreenStream);if(!this._localScreenStream.pubAudio&&!this._localScreenStream.pubVideo)return o?this.unpublishScreen():void 0;if(o){var t,s,v,r;E?(t=this._localScreenStream.observer)===null||t===void 0||t.setPushVideo(B):(s=this._localScreenStream.observer)===null||s===void 0||s.setEnableVideo(B),e?(v=this._localScreenStream.observer)===null||v===void 0||v.setPushAudio(i):(r=this._localScreenStream.observer)===null||r===void 0||r.setEnableAudio(i),await this.updatePubScreenTrack()}else{var n;(n=this._localScreenStream.observer)===null||n===void 0||n.setPublish(!0),await this._publisher.publish(this._localScreenStream)}this._localScreenStream.pubAudio||this._localScreenStream.pubVideo?this._ctx.handler&&this._localScreenStream.startReport(this._onLocalStreamStats.bind(this),this._localScreenStream.vendorHandler||this._ctx.handler):this._localScreenStream.stopReport("unpublish screen")}async updatePubScreenTrack(){this.logger.info("updatePubScreenTrack","Invoke updatePubScreenTrack"),this._localScreenStream&&await this._publisher.updatePubTrack(this._localScreenStream)}async unpublishScreen(){var I;this.logger.info("unpublish","Invoke unpublishScreen"),this._localScreenStream&&((I=this._localScreenStream.observer)===null||I===void 0||I.setPublish(!1),await this._publisher.unpublish(this._localScreenStream),this._localScreenStream.stopReport("unpublish screen"),await this._publisher.cleanStream(this._localScreenStream),this._localScreenStream=void 0)}async liveControlMessage(I){var g;this.logger.info("controlMessage","Invoke controlMessage"),(g=I.transcodeMeta)===null||g===void 0||g.layout.regions.forEach(C=>{C.roomID=this.config.roomId}),this.config.setLiveControlMessage(I.action==="stopped"?void 0:I);try{await this._roomMessage.controlMessage(I)}catch(C){if(I.action!=="stopped")throw C}}async publicStreamControlMessage(I){I.action==="stopped"&&delete I.publicStreamMeta,await this._roomMessage.controlMessage(I)}getLocalStreamStats(){var I;return(I=this.localStream)===null||I===void 0?void 0:I.getLocalStreamStats()}async updateUserAttributes(){this.logger.info("updateUserAttributes","Invoke updateUserAttributes"),await this._subscriber.updateUserAttributes({role:this._ctx.role})}async publish(I,g,C,Q){let B=arguments.length>4&&arguments[4]!==void 0&&arguments[4];this.logger.info("publish","Invoke publish");let E=!1;this._localStream||(this._localStream=new b9(this._ctx),this.config.vendorConfig.enableMultiVendor&&(this._localStream.pcSessionId=tC()),this._localStream.observer=new Ww(this._ctx,this._localStream),E=!0,this._localStream.vendorCode=this.config.vendorConfig.vendorCode||0),this._localStream.videoTrack=I,this._localStream.audioTrack=g;const{pubAudio:i,pubVideo:e}=this._localStream;if(C&&($I(C)&&(this._localStream.pubAudio=Q===wC.PUB),gI(C)&&(this._localStream.pubVideo=Q===wC.PUB),this.logger.info("publish mediaType","pubAudio: %o, pubVideo: %o",this._localStream.pubAudio,this._localStream.pubVideo)),await this._publisher.hasPublished(this._localStream))try{this.emit("___onMediaServerClientPublish"),await this.updatePubTrack()}catch(d){throw this._localStream.pubAudio=i,this._localStream.pubVideo=e,d}else{if(!this._localStream.pubAudio&&!this._localStream.pubVideo)return;try{var o;if(B)(o=this._localStream.observer)===null||o===void 0||o.setLogin(!0);else if(E){var t,s;const d=!!this._localStream.videoTrack,l=!!this._localStream.audioTrack,h=((t=this._localStream.videoTrack)===null||t===void 0?void 0:t.sourceType)===oI.EXTERNAL,D=((s=this._localStream.audioTrack)===null||s===void 0?void 0:s.sourceType)===oI.EXTERNAL;if(this.config.isAutoPublish&&!this._hasPublished){var v,r,n,a;d&&(h?(v=this._localStream.observer)===null||v===void 0||v.setPushVideo(!0):(r=this._localStream.observer)===null||r===void 0||r.setEnableVideo(!0)),l&&(D?(n=this._localStream.observer)===null||n===void 0||n.setPushAudio(!0):(a=this._localStream.observer)===null||a===void 0||a.setEnableAudio(!0))}else{var c;(c=this._localStream.observer)===null||c===void 0||c.setPublish(!0)}}this.emit("___onMediaServerClientPublish"),await this._publisher.publish(this._localStream),this._hasPublished=!0,this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_SUCC})}catch(d){throw this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_FAIL,errorCode:d.code}),delete this._localStream,d}}this._localStream.pubAudio||this._localStream.pubVideo?this._ctx.handler&&this._localStream.startReport(this._onLocalStreamStats.bind(this),this._localStream.vendorHandler||this._ctx.handler):this._localStream.stopReport("unpublish")}async updatePubTrack(){this.logger.info("updatePubTrack","Invoke updatePubTrack"),this._localStream&&await this._publisher.updatePubTrack(this._localStream)}async unpublish(){this.logger.info("unpublish","Invoke unpublish"),this._localStream&&(await this._publisher.unpublish(this._localStream),this._localStream.stopReport("unpublish"),await this._publisher.cleanStream(this._localStream),this._localStream=void 0)}async subscribe(I,g){if(this.logger.info("subscribe","remoteStream %o",I),await this._subscriber.hasSubscribed(I)){const Q=I.subMediaType|g;return Q!==I.subMediaType?await this._subscriber.updateSubMediaType(I,Q):void 0}const C=this._ctx.videoProfile.getSubLayer(I,this.config.remoteVideoConfig);await this._subscriber.subscribe(I,g,C)}async updateSubVideoConfig(I){var g;const C=this._findRemoteStreamByScreen(I,!1);if(this.logger.info("updateSubVideoConfig","userId %s",I),!C||!await this._subscriber.hasSubscribed(C)||((g=C.attributes)===null||g===void 0||(g=g.videoDescriptions)===null||g===void 0?void 0:g.length)<=1)return;const Q=this._ctx.videoProfile.getSubLayer(C);return Q?(C.originalStreamIndex=Q.spatialLayer,this._subscriber.updateSubTrackLayer(C,Q)):void 0}async unsubscribe(I,g){var C;if(this.logger.info("unsubscribe","Invoke unsubscribe"),!await this._subscriber.hasSubscribed(I))return;const Q=I.subMediaType-(I.subMediaType&g);if(((C=this._ctx.serverConfig)===null||C===void 0||!C.muteReplaceUnsub)&&(Q===OC.NONE||this.config.isMultiChatMode()&&Q===iA.AUDIO))return await this._subscriber.unsubscribe(I);await this._subscriber.updateSubMediaType(I,Q)}async startSubtitle(I){if(!this._subtitleTool)throw new U(m.INVOKED_BEFORE_JOIN_ROOM,"join first");await this._subtitleTool.start(I)}async updateSubtitleConfig(I){if(!this._subtitleTool)throw new U(m.INVOKED_BEFORE_JOIN_ROOM,"join first");await this._subtitleTool.update(I)}async stopSubtitle(){var I;(I=this._subtitleTool)===null||I===void 0||I.stop()}async startForwardStream2Rooms(I){return this._forwardStreamManager.startForwardStream2Rooms(I)}async updateForwardStream2Rooms(I){return this._forwardStreamManager.updateForwardStream2Rooms(I)}async stopForwardStream2Rooms(){return this._forwardStreamManager.stopForwardStream2Rooms()}async pauseForwardStream2AllRooms(){return this._forwardStreamManager.pauseForwardStream2AllRooms()}async resumeForwardStream2AllRooms(){return this._forwardStreamManager.resumeForwardStream2AllRooms()}async updateMediaParams(I){return this._ctx.signalingManager.sendSignaling("updateMediaParams",{roomId:this.config.roomId,mediaParams:I})}async leave(){var I;let g=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("leave","Invoke leave"),(I=this._subtitleTool)===null||I===void 0||I.destroy(),delete this._subtitleTool;try{for(const Q of this._remoteStreams.values())Array.isArray(Q)&&Q.forEach(B=>{var E;(E=B.observer)===null||E===void 0||E.setLogin(!1)});var C;this._localStream&&((C=this._localStream.observer)===null||C===void 0||C.setLogin(!1)),await this._roomJoin.leave().catch(()=>{}),this.destroy(),this.config.report("rtc_leave_room",{error_code:0,message:"",elapse:this.config.getStayRoomDuration()})}catch(Q){if(Q instanceof Error&&this.config.report("rtc_leave_room",{error_code:-1,message:Q.message,elapse:this.config.getStayRoomDuration()}),g)throw Q;this.destroy()}}updateRemoteUserPriority(I){var g;(g=this.remoteStreams.get(I))===null||g===void 0||g.forEach(C=>{const{userPriority:Q}=this._ctx;C.hasSubscribed&&Q.has(I)&&this._subscriber.updateSubPriority(C,Q.get(I))})}destroy(){var I,g,C;this.logger.info("destroy","Invoke destroy"),AI(this._ctx.id,"room_destroy","".concat(new Error().stack)),(I=this._subtitleTool)===null||I===void 0||I.destroy(),delete this._subtitleTool;const Q=P1(g=Array.from(this._remoteStreams.values())).call(g);this._subscriber.destroy(Q),this._subscriber.destroy(this._virtualStreams),this._publisher.destroy([this.localStream,this.localScreenStream]),this._roomJoin.destroy(),(C=this._clearSignalListeners)===null||C===void 0||C.call(this),this._remoteUsers=new Map,this._remoteStreams=new Map,this._localStream&&(this._localStream=void 0),this._localScreenStream&&(this._localScreenStream=void 0),this._userDuplicateLoginTimerMap.forEach(B=>{clearTimeout(B)}),this._userDuplicateLoginTimerMap.clear(),this._networkQualityManager.destroy(),this._videoSizeObserver.destroy(),this._csrcUserIdMap={},this._virtualStreams=[],this._remoteStreamStreamIdUserIdMap={},this._forwardStreamManager.destoy()}async updateToken(I){if(this.logger.info("updateToken","Invoke updateToken"),this.config.token=I,!this.config.isRTSOnlyRoom())try{await this._roomJoin.updateToken(I)}catch(g){throw this.safeEmit($.ON_ROOM_ERROR,{errorCode:m.UPDATE_TOKEN_WITH_INVALID_TOKEN}),g}}sendUserMessage(I,g){return this._ctx.rtsLimiter.e2e.check(g),this._roomMessage.sendUserMessage(I,g)}sendRoomMessage(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return this._ctx.rtsLimiter.boradcast.check(I),this._roomMessage.sendRoomMessage(I,g)}async maybeFillBackFrame2Stream(I){var g;I.refreshBlackFrameLifetime(),(g=I.videoTransceiver)!==null&&g!==void 0&&g.sender.track||this._publisher.updatePubBlackFrame(I)}_onJoinSucc(I){var g,C;let{joinRes:Q,reconnect:B}=I;this.logger.info("_onJoinSucc()","invoke. ".concat(B?"[reconnect]":"")),this.emit($.JOIN_SUCCESS,B),this._serverConfig=Q.config,this.config.updateRoomAttributes(Q.roomAttributes);const E=[],i=[],e=[],o=[],t=[];this.config.isRTSOnlyRoom()&&Array.isArray(Q.userInfos)&&(Q.clientsDetail=Q.userInfos.map(s=>({clientId:s.userId,clientJoinTime:s.userJoinTime}))),(g=Q.clientsDetail)===null||g===void 0||g.forEach(s=>{if(s.attributes&&(s.attributes.serverMuteVideo&&this.safeEmit($.ON_VIDEO_STREAM_BANNED,{uid:s.clientId,banned:s.attributes.serverMuteVideo===1}),s.attributes.serverMuteAudio&&this.safeEmit($.ON_AUDIO_STREAM_BANNED,{uid:s.clientId,banned:s.attributes.serverMuteAudio===1})),s.clientId===Q.clientId)return;const v=this._remoteUsers.get(s.clientId);v?v._stillExist=!0:E.push(s)});for(const s of this._remoteUsers.values())s._stillExist||i.push({clientId:s.userId}),delete s._stillExist;(C=Q.streams)===null||C===void 0||C.forEach(s=>{const v=this._findRemoteStreamByScreen(s.clientId,s.screen);this.config.updateUserPubInfo(s),v?(v.stillExist=!0,v.streamId=s.streamId,t.push(s)):o.push(s)});for(const s of this._remoteStreams.values())Array.isArray(s)&&s.forEach(v=>{v.stillExist?delete v.stillExist:e.push({clientId:v.userId,streamId:v.streamId,message:Uw.clientDisconnected})});i.forEach(s=>this._onUserDisconnection(s)),E.forEach(s=>this._onUserConnection(s)),e.forEach(s=>this._onRemoveStream(s)),o.forEach(s=>this._onAddStream(s,{fromSignal:!1})),t.forEach(s=>this._onUpdateStreamAttributes(s)),this.config.resetUserPubInfo(),B&&this._handleSendOrRecvStreamAfterReconnect(),this.emit("__joinSuccess")}_handleSendOrRecvStreamAfterReconnect(){var I;this._localStream&&(this._publisher.cleanStream(this._localStream).then(()=>{var g;this._localStream&&(this._localStream.vendorCode=this.config.vendorConfig.vendorCode||0,(g=this._localStream.observer)===null||g===void 0||g.setLogin(!0))}),this._publisher.publish(this._localStream).then(()=>{var g;this._ctx.handler&&((g=this._localStream)===null||g===void 0||g.startReport(this._onLocalStreamStats.bind(this),this._localStream.vendorHandler||this._ctx.handler)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_SUCC,retry:!0})}).catch(g=>{this.logger.error("failed repub error:".concat(g)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_FAIL,errorCode:g.code,retry:!0})})),this._localScreenStream&&(this._publisher.cleanStream(this._localScreenStream).then(()=>{var g;this._localScreenStream&&((g=this._localScreenStream.observer)===null||g===void 0||g.setLogin(!0))}),this._publisher.publish(this._localScreenStream).then(()=>{var g;this._ctx.handler&&((g=this._localScreenStream)===null||g===void 0||g.startReport(this._onLocalStreamStats.bind(this),this._localScreenStream.vendorHandler||this._ctx.handler)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!0,state:qB.PUBLISH_SUCC,retry:!0})}).catch(g=>{this.logger.error("failed repub screen stream error:".concat(g)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!0,state:qB.PUBLISH_FAIL,errorCode:g.code,retry:!0})}));for(const g of this._remoteStreams.values())Array.isArray(g)&&g.forEach(async C=>{if(C.hasSubscribed){C.resetHasSubscribed();try{var Q,B;this.logger.info("start resubscribe ".concat(C.userId," with ").concat(C.subMediaType)),gI(C.subMediaType)&&((Q=C.observer)===null||Q===void 0||Q.setSubscribeVideo(!0)),$I(C.subMediaType)&&((B=C.observer)===null||B===void 0||B.setSubscribeAudio(!0)),await this._subscriber.subscribe(C,C.subMediaType),this.logger.info("success resubscribe ".concat(C.userId," with ").concat(C.subMediaType)),this.safeEmit($.RESUBSCRIBE,{stream:C}),this.emit($.ON_SUBSCRIBE_RESULT,{state:Ds.SUBSCRIBE_SUCC,userId:C.userId,isScreen:C.isScreen,retry:!0})}catch(E){if(this.emit($.ON_SUBSCRIBE_RESULT,{state:Ds.SUBSCRIBE_FAIL,userId:C.userId,isScreen:C.isScreen,errorCode:E.code,retry:!0}),this.logger.error("failed resubscribe ".concat(C.userId," with ").concat(C.subMediaType,", error:").concat(E)),E.code===m.NOT_CONNECTED_YET)return void(C.streamState=uC.SUB_ED);await this._subscriber.cleanStream(C),C.resetHasSubscribed()}}});(I=this._subtitleTool)===null||I===void 0||I.reconnect(),this._forwardStreamManager.resumeFromReconnect()}_handleFFAudioTrack(){var I,g;const C=(I=this._ctx.handler)===null||I===void 0?void 0:I.audioTrack4ff,Q=(g=this._ctx.handler)===null||g===void 0?void 0:g.getTransceivers();if(C&&Array.isArray(Q)){const B=Q.find(E=>{var i;return(E==null||(i=E.receiver)===null||i===void 0?void 0:i.track)===C});if(B){const E=new y9(this._ctx,"ff-stream","ff-stream",!1,!1,Lk);E.virtual=!0,E.audioTransceiver=B,E.audioMid="0",E.audioTrack=Xz(this._ctx,C,{streamIndex:LI.VIRTUAL}),this._virtualStreams.push(E),this.safeEmit($.SUBSCRIBE_PUSH_TRACK,{stream:E})}}}_findRemoteStream(I,g){const C=this._remoteStreams.get(I);return Array.isArray(C)?C.find(Q=>Q.streamId===g):null}_findRemoteStreamByScreen(I,g){const C=this._remoteStreams.get(I);return Array.isArray(C)?C.find(Q=>Q.isScreen===g):null}_onAddStream(I){let{needEmit:g=!0,fromSignal:C=!0,virtual:Q=!1}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(I.clientId===this.config.userId)return;const{isAutoSubscribeAudio:B,isAutoSubscribeVideo:E}=this.config,i=this._findRemoteStreamByScreen(I.clientId,I.screen);if(i&&i.streamId!==I.streamId){var e;const t=(e=this._remoteStreams.get(I.clientId))===null||e===void 0?void 0:e.filter(s=>s.streamId!==i.streamId);this._subscriber.cleanStream(i),this._remoteStreams.set(I.clientId,t||[])}let o=this._findRemoteStream(I.clientId,I.streamId);if(this._remoteStreamStreamIdUserIdMap[I.streamId]=I.clientId,o)o.attributes=I.attributes;else if(o=new y9(this._ctx,I.clientId,I.streamId,I.screen,!1,I.attributes),o.virtual=Q,this._initStreamListeners(o),!Q){const t=this._remoteStreams.get(I.clientId);t?t.push(o):this._remoteStreams.set(I.clientId,[o])}if(o.remoteSessionId=I.remoteSessionId||"",o.observer=new qz(this._ctx,o),!o.isScreen&&E&&(C&&o.hasVideo&&(o.attributes.extvideo?(o.observer.setExternalVideoSource(!0),o.observer.setPushVideo(!0)):(o.observer.setExternalVideoSource(!1),o.observer.setPublishVideo(!0))),C&&o.hasAudio&&B&&!this.config.isMultiChatMode()&&(o.attributes.extaudio?(o.observer.setExternalAudioSource(!0),o.observer.setPushAudio(!0)):(o.observer.setExternalAudioSource(!1),o.observer.setPublishAudio(!0))),g&&!C)){const{isAutoSubscribeAudio:t,isAutoSubscribeVideo:s}=this.config;o.observer.setLogin(!0,{audio:!!t&&!this.config.isMultiChatMode(),video:!!s})}return g&&this.safeEmit(x.ON_ADD_STREAM,{stream:o}),o}_onUserConnection(I){var g;if(I.clientId===this.config.userId)return;const C=this._userDuplicateLoginTimerMap.get(I.clientId);if(typeof C=="number")return this._userDuplicateLoginTimerMap.delete(I.clientId),void self.clearTimeout(C);const Q={userId:I.clientId,extraInfo:(g=I.attributes)===null||g===void 0?void 0:g.extra_info};this._remoteUsers.set(I.clientId,R({},Q)),this.safeEmit(x.USER_CONNECTION,{userInfo:Q,publishState:this.config.getUserPubInfo(Q.userId)}),I.attributes&&(I.attributes.serverMuteVideo&&this.safeEmit($.ON_VIDEO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteVideo===1}),I.attributes.serverMuteAudio&&this.safeEmit($.ON_AUDIO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteAudio===1}))}_onUserDisconnection(I){let{clientId:g,tag:C,code:Q,forbiddenTime:B}=I;if(g)if(g===this.config.userInfo.userId){let E=null;C===ai.kickedByAdmin?E=m.KICKED_OUT:C===ai.onUserTokenDidExpire?E=m.TOKEN_EXPIRED:C===ai.userDuplicateLogin&&(E=m.DUPLICATE_LOGIN),Q===Ez.roomDismissByAdmin&&(E=m.ROOM_DISMISS),E&&this.safeEmit($.ON_ROOM_ERROR,{errorCode:E,forbiddenTime:B})}else{let E=Sr.DROPPED;C===ai.userLeave?E=Sr.QUIT:C===ai.kickedByAdmin?E=Sr.KICKED_BY_ADMIN:C===ai.roleChanged&&(E=Sr.SWITCH_TO_INVISIBLE);const i=()=>{var e;this._remoteUsers.delete(g);const o=[];(e=this._remoteStreams.get(g))===null||e===void 0||e.forEach(t=>{o.push(this._onRemoveStream({clientId:t.userId,streamId:t.streamId,message:Uw.clientDisconnected}))}),this._remoteStreams.delete(g),Promise.all(o).finally(()=>{this.safeEmit($.ON_USER_LEAVE,{userInfo:{userId:g},reason:E})})};if(C===ai.userDuplicateLogin){const e=this._userDuplicateLoginTimerMap.get(g);e&&self.clearTimeout(e);const o=self.setTimeout(i,5e3);this._userDuplicateLoginTimerMap.set(g,o)}else i()}}async _onRemoveStream(I){if(I.clientId===this.config.userId)return;const g=this._remoteStreams.get(I.clientId);if(!g)return;const C=g.find(i=>i.streamId===I.streamId);if(!C)return;var Q,B;C.hasVideo&&((Q=C.observer)===null||Q===void 0||Q.setPublishVideo(!1)),C.hasAudio&&!this.config.isMultiChatMode()&&((B=C.observer)===null||B===void 0||B.setPublishAudio(!1));const E=g.filter(i=>i.streamId!==I.streamId);this._remoteStreams.set(I.clientId,E);try{await this._subscriber.handleRemoveStream(C).then(()=>this._subscriber.cleanStream(C)).finally(()=>{this.safeEmit(x.ON_REMOVE_STREAM,{stream:C,reason:I.message,callback:()=>{this._subscriber.destroyStream(C)}})})}catch(i){console.error(i)}}_onUpdateUserAttributes(I){I.attributes&&(I.attributes.serverMuteVideo&&this.safeEmit($.ON_VIDEO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteVideo===1}),I.attributes.serverMuteAudio&&this.safeEmit($.ON_AUDIO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteAudio===1}))}_onUpdateRoomAttributes(I){var g;I.roomAttributes&&(this.config.updateRoomAttributes(I.roomAttributes),this._ctx&&(this._ctx.callId=I.roomAttributes.callId)),(g=I.roomAttributes)!==null&&g!==void 0&&g.multiChatMode&&this._handleFFAudioTrack()}_onUpdateStreamAttributes(I){const{isAutoSubscribeAudio:g,isAutoSubscribeVideo:C}=this.config,{clientId:Q,streamId:B,attributes:E}=I,i=this._findRemoteStream(Q,B);if(!i)return;const e=i.attributes,o=R(R({},e),E);let t=!1;const s=o.localaudio!==e.localaudio;let v=!1,r=!1;const n=o.localvideo!==e.localvideo;let a=!1,c=OC.NONE,d=OC.NONE;if(o.audiostream!==e.audiostream&&(t=o.localaudio,v=!!o.audiostream,o.audiostream?c|=iA.AUDIO:d|=iA.AUDIO),o.videostream!==e.videostream&&(r=o.localvideo,a=!!o.videostream,o.videostream?c|=iA.VIDEO:d|=iA.VIDEO),c&&this.safeEmit($.ON_USER_PUBLISH_STATE_CHANGE,{userId:Q,mediaType:c,isScreen:i.isScreen,pubState:wC.PUB,remoteStream:i}),d&&this.safeEmit($.ON_USER_PUBLISH_STATE_CHANGE,{userId:Q,mediaType:d,isScreen:i.isScreen,pubState:wC.UNPUB,remoteStream:i}),i.remoteSessionId=I.remoteSessionId||"",i.attributes=o,o.localaudio!==e.localaudio)if(o.localaudio){var l,h,D,u;(g||i.subAudio)&&o.audiostream&&(o.extaudio?((l=i.observer)===null||l===void 0||l.setExternalAudioSource(!0),(h=i.observer)===null||h===void 0||h.setPushAudio(!0)):((D=i.observer)===null||D===void 0||D.setExternalAudioSource(!1),(u=i.observer)===null||u===void 0||u.setEnableAudio(!0))),this.safeEmit($.ON_USER_START_AUDIO_CAPTURE,{userId:Q},i)}else{var w,b,y,S;o.extaudio?((w=i.observer)===null||w===void 0||w.setExternalAudioSource(!0),(b=i.observer)===null||b===void 0||b.setPushAudio(!1)):((y=i.observer)===null||y===void 0||y.setExternalAudioSource(!1),(S=i.observer)===null||S===void 0||S.setEnableAudio(!1)),!i.isScreen&&this.safeEmit($.ON_USER_STOP_AUDIO_CAPTURE,{userId:Q})}if(o.localvideo!==e.localvideo)if(o.localvideo){var L,V,z,EA;(C||i.subVideo)&&o.videostream&&(o.extvideo?((L=i.observer)===null||L===void 0||L.setExternalVideoSource(!0),(V=i.observer)===null||V===void 0||V.setPushVideo(!0)):((z=i.observer)===null||z===void 0||z.setExternalVideoSource(!1),(EA=i.observer)===null||EA===void 0||EA.setEnableVideo(!0))),this.safeEmit($.ON_USER_START_VIDEO_CAPTURE,{userId:Q})}else{var eA,K,p,J;o.extvideo?((eA=i.observer)===null||eA===void 0||eA.setExternalVideoSource(!0),(K=i.observer)===null||K===void 0||K.setPushVideo(!1)):((p=i.observer)===null||p===void 0||p.setExternalVideoSource(!1),(J=i.observer)===null||J===void 0||J.setEnableVideo(!1)),!i.isScreen&&this.safeEmit($.ON_USER_STOP_VIDEO_CAPTURE,{userId:Q})}var Y,N;t&&!s&&g&&((Y=i.observer)===null||Y===void 0||Y.setRemoteUnmuteAudio(v)),r&&!n&&C&&((N=i.observer)===null||N===void 0||N.setRemoteUnmuteVideo(a)),typeof o.videoType=="number"&&o.videoType!==e.videoType&&this.safeEmit($.VIDEO_TYPE_CHANGE,{userId:i.userId,isScreen:i.isScreen,type:o.videoType===eC.BLACK?Tw.BLACK:Tw.NORMAL})}_onPushTrack(I){var g;if((g=I.streamId)===null||g===void 0||!g.startsWith("audio_mux"))return void this.config.report("rtc_error",{message:"onPushTrack, userId: ".concat(I.clientId,", ").concat(I.streamId),error_code:TC.TRACK_ERROR});const C=this._onAddStream(R(R({},I),{},{attributes:Lk}),{needEmit:!1,fromSignal:!1,virtual:!0});C&&this._subscriber.subscribe4pushTrack(C,I).then(()=>{this.safeEmit($.SUBSCRIBE_PUSH_TRACK,{stream:C}),this._virtualStreams.push(C)}).catch(Q=>{this.logger.error("subscribe","push track failed %o",Q)})}_onRemoveTrack(I){let{clientId:g,streamId:C,message:Q,trackType:B}=I;this.logger.info("_onRemoveTrack","remove track: %o",g);const E=this._findRemoteStream(g,C);E&&(E.removeTrack=!0,this._subscriber.unsubscribe4removeTrack(E,Q,B),this.emit($.REMOVE_PUSH_TRACK,{stream:E,mediaType:B+1}))}_onMeetingSpeakerChange(I){if(Array.isArray(I==null?void 0:I.speakerCsrcInfo)){const g={};I==null||I.speakerCsrcInfo.forEach(C=>{let{csrc:Q,userId:B,isScreen:E}=C;E||(g[Q]=B)}),this._csrcUserIdMap=g}Array.isArray(I.muxStreamInUse)&&this._virtualStreams.forEach(g=>{var C;(C=I.muxStreamInUse)!==null&&C!==void 0&&C.includes(g.streamId)?g.virtualOccupy=!0:g.virtualOccupy=!1})}getActiveSpeakerInMultiChatMode(){const I=[];return this._virtualStreams.forEach(g=>{var C;const Q=(C=g.audioTransceiver)===null||C===void 0?void 0:C.receiver;if(Q){const[B]=Q.getContributingSources()||[];if(B){const{audioLevel:E,source:i}=B;this._csrcUserIdMap[i]&&I.push({userId:this._csrcUserIdMap[i],audioLevel:E})}}}),I.length&&Ws(I).call(I,(g,C)=>g.audioLevel-C.audioLevel),I}_onReconnecting(){var I,g;for(const C of this._remoteStreams.values())Array.isArray(C)&&C.forEach(Q=>{var B;(B=Q.observer)===null||B===void 0||B.setDisconnect(),this._subscriber.cleanStream(Q)});this._virtualStreams.forEach(C=>{var Q;this.emit($.REMOVE_PUSH_TRACK,{stream:C,mediaType:iA.AUDIO}),(Q=C.observer)===null||Q===void 0||Q.setDisconnect(),this._subscriber.cleanStream(C)}),this._virtualStreams=[],(I=this.localStream)===null||I===void 0||(I=I.observer)===null||I===void 0||I.setDisconnect(),this._publisher.cleanStream(this.localStream),(g=this.localScreenStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setDisconnect(),this._publisher.cleanStream(this.localScreenStream)}_onConnectionStateChange(I){I.state===XA.CONNECTION_STATE_RECONNECTING?this._onReconnecting():I.state===XA.CONNECTION_STATE_RECONNECTED&&this._roomJoin.join(!0)}_initStreamListeners(I){I.on("ontrack",g=>{g.track}),I.on("onSEIMessage",g=>{this.emit($.ON_SEI_MESSAGED_RECEIVED,{sei:g,remoteStreamKey:{userId:I.userId,roomId:this.config.roomId,streamIndex:I.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN}})})}_onCustomMessage(I){var g;(g=this._subtitleTool)!==null&&g!==void 0&&g.onMessageRecv(I)||this.safeEmit(x.ON_CUSTOM_MESSAGE,I)}_onUserMessageReceived(I){this.safeEmit(x.USER_MESSAGE_RECEIVED,{userId:I.from,message:I.msg})}_onUserBinaryMessageReceived(I){var g;const C={userId:I.from,message:I.msg};(g=this._subtitleTool)!==null&&g!==void 0&&g.onMessageRecv(C)||this.safeEmit(x.USER_BINARY_MESSAGE_RECEIVED,C)}_initSubtitleTool(){this._subtitleTool=new z0(this._ctx,this.config),this._subtitleTool.onEvent=I=>{this.emit($.ON_SUBTITLE_STATE_CHANGED,I)},this._subtitleTool.onMessage=I=>{this.emit($.ON_SUBTITLE_MESSAGE_RECEIVED,I)}}_onPostProcessingMessage(I){if(!I.body)return;var g;if(I.type==="subtitleCallback")return void((g=this._subtitleTool)===null||g===void 0||g.onResult(I));const C=I.body,Q=C.error||0;let B=wQ.START;const E=["success","parameter error","subscription timeout","ffmpeg error","cdn error","publish error"];if(C.protocol==="2.0"){switch(C.eventType){case"TranscodeStarted":C.error!==0&&(B=wQ.START_FAILED);break;case"TranscodeStateChanged":B=C.error!==0?wQ.START_FAILED:wQ.START_SUCCESS;break;case"TranscodeStopped":B=C.error!==0?wQ.STOP_FAILED:wQ.STOP_SUCCESS;break;case"TranscodeUpdated":B=C.error!==0?wQ.UPDATE_FAILED:wQ.UPDATE_SUCCESS}this.safeEmit(x.POST_PROCESSING_MESSAGE,{code:Q,protocol:C.protocol,error:C.error,eventType:B,message:E[Q]})}this.safeEmit(x.POST_PROCESSING_MESSAGE,{code:Q,message:E[Q],type:I.type})}_onUserTokenWillExpire(){this.safeEmit(x.ON_USER_TOKEN_WILL_EXPIRE,null)}_onUserTokePublishPrivilegeWillExpire(){this.safeEmit(x.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE,null)}_onUserTokenPublishPrivilegeDidExpire(){this.safeEmit(x.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED,null)}_onUserTokeSubscribePrivilegeWillExpire(){this.safeEmit(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE,null)}_onUserTokenSubscribePrivilegeDidExpire(){this.safeEmit(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED,null)}async _onStreamFailed(I){if(I.type==="publish"){var g,C;let Q;if(((g=this.localStream)===null||g===void 0?void 0:g.streamId)===I.streamId?Q=this.localStream:((C=this.localScreenStream)===null||C===void 0?void 0:C.streamId)===I.streamId&&(Q=this.localScreenStream),!Q)return;await this._publisher.unpublish(Q).catch(()=>{}),await this._publisher.cleanStream(Q),await this._publisher.publish(Q).catch(()=>{})}else if(I.type==="subscribe"){const Q=this._remoteStreamStreamIdUserIdMap[I.streamId],B=this._findRemoteStream(Q,I.streamId);if(B){const E=B.subMediaType,i=B.subLayer;await this._subscriber.unsubscribe(B),await this._subscriber.subscribe(B,E,i),this.safeEmit($.RESUBSCRIBE,{stream:B})}}}_onStreamControlMessage(I){var g,C;I.type===Qz.PushLimitWarn&&((g=this._localStream)!==null&&g!==void 0&&g.pubAudio||(C=this._localStream)!==null&&C!==void 0&&C.pubVideo||this.unpublish())}async _onPublishOnDemand(){var I,g,C;if(this._publishOnDemandItem&&!this._publishOnDemandBusy&&((I=this._serverConfig)===null||I===void 0||(I=I.engine_VPM)===null||I===void 0||(I=I.ondemand)===null||I===void 0?void 0:I.enable)!==!1){if((g=this._localStream)!==null&&g!==void 0&&g.videoTransceiver){this._publishOnDemandBusy=!0;const Q=this._publishOnDemandItem;this._publishOnDemandItem=void 0;const B=[],E=this._localStream.stream.id,{sender:i}=this._localStream.videoTransceiver,e=i.getParameters();if(AI(this._ctx.id,"sender.getParameters",JSON.stringify(e),0,E),Array.isArray(e.encodings)&&Array.isArray(Q)){const o={};this.logger.info("_onPublishOnDemand exec","usedDescriptions: %o",Q),Q.forEach(s=>{var v;if((v=s.StreamIds)!==null&&v!==void 0&&v.includes(E)){var r,n,a;const l=(r=(n=s.Metadata)===null||n===void 0?void 0:n.VideoIndex)!==null&&r!==void 0?r:0;let h=0;var c,d;(a=this._ctx.serverConfig)!==null&&a!==void 0&&a.e2eFeedback&&(h=Math.max(...Object.keys((c=(d=s.Metadata)===null||d===void 0?void 0:d.VideoKbpsHist)!==null&&c!==void 0?c:{}).map(D=>Number(D)),0)),o[l]={kbps:h}}});const t=[...this._localStream.pubAttributes.videoDescriptions];e.encodings=e.encodings.map(s=>{if(s.rid){if(o[s.rid]){var v;s.active=!0;const a=(v=o[s.rid])===null||v===void 0?void 0:v.kbps;a&&(s.maxBitrate=1e3*KY(s.rid,a,t))}else s.active=!1;const n=Number(s.rid);B[n]=s.active}else{var r;const n=(r=o[0])===null||r===void 0?void 0:r.kbps;n&&(s.maxBitrate=1e3*KY(void 0,n,t))}return s}),this.config.report("rtc_invoke_status",{sdk_api_name:"onPublishOnDemand",message:JSON.stringify(e.encodings),error_code:0,stream_id:E,elapse:0}),this._ctx.videoProfile.activeSimStreams=B}this.logger.info("sender.setParameters()",JSON.stringify(e.encodings)),AI(this._ctx.id,"sender.setParameters",JSON.stringify(e),0,E),await i.setParameters(e),this._publishOnDemandBusy=!1}else if((C=this._localStream)===null||C===void 0||!C.videoTransceiver)return;this._onPublishOnDemand()}}_onRTT(I){const{StreamIds:g,Metadata:C}=I;if(g!=null&&g.length&&C){const Q=g[0];this._ctx.streamRTT[Q]={audio:C.audio_rtt,video:C.video_rtt}}}_onRSCP(I,g){I.find(C=>{var Q,B;return C==null||(Q=C.StreamIds)===null||Q===void 0?void 0:Q.includes((B=this._localStream)===null||B===void 0||(B=B.stream)===null||B===void 0?void 0:B.id)})&&(g?this._pubTransceiverReady=!0:this._onceTriggerBySignal=!0,g&&this._onceTriggerBySignal||(this._publishOnDemandItem=I),this._pubTransceiverReady&&this._onPublishOnDemand())}_onSSC(I){const{StreamIds:g,Metadata:C}=I,Q=g[0],B=this._remoteStreamStreamIdUserIdMap[Q],E=this._findRemoteStream(B,Q),i={userId:B,isScreen:!!E&&E.isScreen,beforeVideoIndex:C.ssc_items[0].prev_layer_id,afterVideoIndex:C.ssc_items[0].cur_layer_id,beforeEnable:C.ssc_items[0].prev_video_open!==0,afterEnable:C.ssc_items[0].cur_video_open!==0,reason:C.ssc_items[0].change_reason};this.emit($.ON_SIMULCAST_SUBSCRIBE_FALLBACK,i)}_reportNetworkQuality(I,g){this.emit($.ON_NETWORK_QUALITY,I,g)}_emitVideoSizeChange(I,g,C,Q){this.emit($.ON_REMOTE_VIDEO_SIZE_CHANGED,{roomId:this.config.roomId,userId:I,streamIndex:g?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN},{width:C,height:Q})}async setAudioEncodeMaxBitrate(I,g){const C=I===F.STREAM_INDEX_MAIN?this.localStream:this.localScreenStream;if(C!=null&&C.pubAudio){var Q;const E=(Q=C.audioTransceiver)===null||Q===void 0?void 0:Q.sender.getParameters();var B;AI(this._ctx.id,"sender.getParameters",JSON.stringify(E),0,C.streamId),E!=null&&E.encodings.length&&(E.encodings[0].maxBitrate=1e3*g,AI(this._ctx.id,"sender.setParameters",JSON.stringify(E),0,C.streamId),await((B=C.audioTransceiver)===null||B===void 0?void 0:B.sender.setParameters(E)))}}_onEngineControlMessage(I){let{type:g,body:C}=I;if(g===Bz.CHANGE_CODEC){if(!lA("SDK_CODEC_NEGOTIATION"))return void this.logger.info("_onEngineControlMessage","SDK_CODEC_NEGOTIATION is false, ignore");const{codec:i,media:e,streamId:o}=C;if(!e||e==="audio")return;const t=i.split(",").map(v=>RE(v).call(v).toUpperCase());let s;var Q,B,E;this.logger.info("_onEngineControlMessage","changeCodec to %s",i),o?(((Q=this.localStream)===null||Q===void 0?void 0:Q.streamId)===o?s=this.localStream:((B=this.localScreenStream)===null||B===void 0?void 0:B.streamId)===o&&(s=this.localScreenStream),(E=s)===null||E===void 0||E.setChangeCodecs(t)):e==="video"?(s=this.localStream,this._ctx.targetCodec=t[0]):e==="screen"&&(s=this.localScreenStream,this._ctx.targetScreenCodec=t[0]),s&&this.emit($.UPDATE_PUBLISH,{streamIndex:s.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN})}}}PI([DA],EI.prototype,"publishScreen"),PI([DA],EI.prototype,"updatePubScreenTrack"),PI([DA],EI.prototype,"unpublishScreen"),PI([DA],EI.prototype,"liveControlMessage"),PI([DA],EI.prototype,"publicStreamControlMessage"),PI([DA],EI.prototype,"updateUserAttributes"),PI([DA],EI.prototype,"publish"),PI([DA],EI.prototype,"updatePubTrack"),PI([DA],EI.prototype,"unpublish"),PI([DA],EI.prototype,"subscribe"),PI([DA],EI.prototype,"updateSubVideoConfig"),PI([DA],EI.prototype,"unsubscribe"),PI([DA],EI.prototype,"startSubtitle"),PI([DA],EI.prototype,"stopSubtitle"),PI([DA],EI.prototype,"startForwardStream2Rooms"),PI([DA],EI.prototype,"updateForwardStream2Rooms"),PI([DA],EI.prototype,"stopForwardStream2Rooms"),PI([DA],EI.prototype,"pauseForwardStream2AllRooms"),PI([DA],EI.prototype,"resumeForwardStream2AllRooms"),PI([DA],EI.prototype,"updateMediaParams"),PI([DA],EI.prototype,"updateRemoteUserPriority"),PI([DA],EI.prototype,"updateToken"),PI([DA],EI.prototype,"sendUserMessage"),PI([DA],EI.prototype,"sendRoomMessage"),PI([DA],EI.prototype,"maybeFillBackFrame2Stream");const Sk=async(A,I)=>{const g=new Audio(pQ.createObjectURL(new Blob([A],I)));try{return g.muted=!0,await g.play(),g.pause(),!0}catch{return!1}};var tuA=Object.defineProperty,suA=Object.getOwnPropertyDescriptor,qg=(A,I,g,C)=>{for(var Q,B=suA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&tuA(I,g,B),B};class Kg{constructor(I,g){P(this,"_sharedAudioContext",new AudioContext),P(this,"_workletReady",void 0),P(this,"_audioDestination",this._sharedAudioContext.createMediaStreamDestination()),P(this,"_localGainNode",this._sharedAudioContext.createGain()),P(this,"_bufferGainNode",this._sharedAudioContext.createGain()),P(this,"_audioBufferSource",void 0),P(this,"_localSource",void 0),P(this,"_context",void 0),P(this,"_failedAudioList",[]),P(this,"_startingIds",new Map),P(this,"_revokeURLs",new Set),P(this,"_audioFetchMap",new Map),P(this,"_audioFetchConfig",new Map),P(this,"mixingMap",new Map),P(this,"resourcesCache",new Map),P(this,"volumeConfig",new Map),P(this,"cachedBuffer",[]),P(this,"id","AudioMixingManager"),this.engineId=g,this._context=I;try{var C,Q;this._workletReady=(C=this._sharedAudioContext.audioWorklet)===null||C===void 0||(Q=C.addModule)===null||Q===void 0?void 0:Q.call(C,Kz),this._workletReady.catch(()=>{this._workletReady=null})}catch{this._workletReady=null}this._localGainNode.gain.value=1}mixMediaStream(I){this._localSource&&this._localSource.disconnect(this._localGainNode),this._localSource=this._sharedAudioContext.createMediaStreamSource(I),this._localSource.connect(this._localGainNode).connect(this._audioDestination)}async startAudioMixing(I,g,C){if(this._startingIds.get(I)!==void 0)return void console.warn("AudioMixing task id: ".concat(I," is starting"));this._startingIds.set(I,I);const{playCount:Q,type:B}=C;MA(B,"mixingType",NY(JQ));const E=this._context.getLocalAudioTrack();if(!E)return;const i=E.preprocessingTrack;i&&this.mixMediaStream(new MediaStream([i])),E.once("needReplaceTrack",()=>{this.mixMediaStream(new MediaStream([E.preprocessingTrack]))});const e=this.mixingMap.get(I);if(e!=null&&e.audioNode){e.audioNode.pause(),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_STOPPED,error:cC.AUDIO_MIXING_ERROR_OK});try{e.gainNode.disconnect(this._audioDestination),e.audioSource.disconnect(e.gainNode)}catch{}}let o;const t=this.resourcesCache.get(I);if(t&&t.filePath===g)o=t.getAudioNode();else{const n=await fetch(g,{mode:"cors"}).then(c=>{if(c.ok)return c.arrayBuffer();throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_START_FAILED}),this._startingIds.delete(I),this.mixingMap.delete(I),new U(m.LOAD_RESOURCES_FAILED,c.statusText)});let a;if(g.endsWith("mp3")?a={type:"audio/mpeg"}:g.endsWith("aac")&&(a={type:"audio/aac"}),!await Sk(n,a))throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_START_FAILED}),this._startingIds.delete(I),this.mixingMap.delete(I),new U(m.LOAD_RESOURCES_FAILED,"invalid audio resource");o=new Audio,o.crossOrigin="anonymous",o.src=pQ.createObjectURL(new Blob([n],a))}if(Q<=0)o.loop=!0;else if(Q>0){let n=Q;o.onended=()=>{--n>0?o.play():(this.mixingMap.delete(I),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FINISHED,error:cC.AUDIO_MIXING_ERROR_OK}))}}try{await o.play()}catch(n){console.error(n),this._failedAudioList.push(o),this._context.onAutoPlayFailed({userId:this.id,kind:"audio",streamIndex:F.STREAM_INDEX_MAIN,mediaType:iA.AUDIO})}this._startingIds.delete(I);const s=this._sharedAudioContext.createMediaElementSource(o),v=this._sharedAudioContext.createGain(),r=this.volumeConfig.get(I);if(v.gain.value=r?r/100:1,s.connect(v).connect(this._audioDestination),this.mixingMap.set(I,{audioSource:s,audioNode:o,gainNode:v,type:"file"}),B===JQ.PUBLISH)try{v.disconnect(this._sharedAudioContext.destination)}catch{}else v.connect(this._sharedAudioContext.destination);this._context.updateLocalAudioTrack(this._audioDestination.stream.getAudioTracks()[0],C.type),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PLAYING,error:cC.AUDIO_MIXING_ERROR_OK}),this.updateFetcher(I)}stopAudioMixing(I){const g=this.mixingMap.get(I);g&&g.type==="file"&&(this.mixingMap.delete(I),g.audioNode.pause(),g.audioSource.disconnect(g.gainNode),g.gainNode.disconnect(this._audioDestination),this.updateFetcher(I),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_STOPPED,error:cC.AUDIO_MIXING_ERROR_OK}))}pauseAudioMixing(I){const g=this.mixingMap.get(I);g&&(this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PAUSED,error:cC.AUDIO_MIXING_ERROR_OK}),g.audioNode.pause())}resumeAudioMixing(I){const g=this.mixingMap.get(I);g&&(this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PLAYING,error:cC.AUDIO_MIXING_ERROR_OK}),g.audioNode.play())}async preloadAudioMixing(I,g){this.stopAudioMixing(I);const C=await fetch(g,{mode:"cors"}).then(B=>{if(B.ok)return B.arrayBuffer();throw new U(m.LOAD_RESOURCES_FAILED,B.statusText)}).catch(B=>{throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_PRELOAD_FAILED}),B instanceof U?B:new U(m.LOAD_RESOURCES_FAILED,"Load resources failed",B)});let Q;if(g.endsWith("mp3")?Q={type:"audio/mpeg"}:g.endsWith("aac")&&(Q={type:"audio/aac"}),!await Sk(C,Q))throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_PRELOAD_FAILED}),new U(m.LOAD_RESOURCES_FAILED,"Load resources failed");this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PRELOADED,error:cC.AUDIO_MIXING_ERROR_OK}),this.resourcesCache.set(I,{getAudioNode:()=>{const B=pQ.createObjectURL(new Blob([C],Q));return this._revokeURLs.add(B),new Audio(B)},filePath:g,duration:0}),await new Promise(B=>{const E=pQ.createObjectURL(new Blob([C],Q)),i=new Audio(E);i.addEventListener("durationchange",()=>{const e=this.resourcesCache.get(I);e&&(e.duration=i.duration,this.resourcesCache.set(I,e)),pQ.revokeObjectURL(E),B(null)})})}unloadAudioMixing(I){this.resourcesCache.has(I)&&this.resourcesCache.delete(I)}getAudioMixingVolume(I){const g=this.mixingMap.get(I);return g?100*g.gainNode.gain.value:0}setAudioMixingVolume(I,g){g<0?g=0:g>400&&(g=400),this.volumeConfig.set(I,g);const C=this.mixingMap.get(I);C&&(C.gainNode.gain.value=Number(g)/100)}getAudioMixingDuration(I){const g=this.mixingMap.get(I),C=this.resourcesCache.get(I);return g||C?g?1e3*g.audioNode.duration:C?1e3*C.duration:0:0}getAudioMixingCurrentPosition(I){const g=this.mixingMap.get(I);return g?1e3*g.audioNode.currentTime:0}setAudioMixingPosition(I,g){const C=this.mixingMap.get(I);C&&(C.audioNode.currentTime=g/1e3,C.audioNode.play())}setAudioFrameCallback(I,g){var C;let Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:4096;if(MA(Q,"frameSize",[256,512,1024,2048,4096,8192,16384]),Q=(C=Q)!==null&&C!==void 0?C:4096,this._workletReady===null)throw new U(m.NOT_SUPPORTED,"Not support AudioWorklet");g?this._audioFetchConfig.set(I,{callback:g,frameSize:Q}):this._audioFetchConfig.delete(I),this.updateFetcher(I)}updateFetcher(I){var g,C;const{callback:Q,frameSize:B}=(g=this._audioFetchConfig.get(I))!==null&&g!==void 0?g:{},E=(C=this.mixingMap.get(I))===null||C===void 0?void 0:C.gainNode;if(E&&Q&&B){let i=this._audioFetchMap.get(I);i?i.setFrameSize(B):i=new TR(E,B,this._sharedAudioContext,this._workletReady),i.on("data",Q),this._audioFetchMap.set(I,i)}else{const i=this._audioFetchMap.get(I);i==null||i.removeAllListeners("data"),i==null||i.destroy(),this._audioFetchMap.delete(I)}}enableAudioMixingBuffer(I){MA(I,"type",NY(JQ));const g=this._context.getLocalAudioTrack();if(!g)return;const C=g.preprocessingTrack;if(C&&this.mixMediaStream(new MediaStream([C])),I===JQ.PUBLISH)try{this._bufferGainNode.disconnect(this._sharedAudioContext.destination)}catch{}else this._bufferGainNode.connect(this._sharedAudioContext.destination);this._context.updateLocalAudioTrack(this._audioDestination.stream.getAudioTracks()[0],I),this._bufferGainNode.connect(this._audioDestination),this._context.emitMessage({mixId:-1,state:nC.AUDIO_MIXING_STATE_PCM_ENABLED,error:cC.AUDIO_MIXING_ERROR_OK})}disableAudioMixingBuffer(){if(this.cachedBuffer=[],this._audioBufferSource){try{this._audioBufferSource.onended=null,this._audioBufferSource.disconnect(this._bufferGainNode),this._bufferGainNode.disconnect(this._audioDestination),this._bufferGainNode.disconnect(this._sharedAudioContext.destination)}catch{}finally{this._audioBufferSource=void 0}this._context.updateLocalAudioTrack(),this._context.emitMessage({mixId:-1,state:nC.AUDIO_MIXING_STATE_PCM_DISABLED,error:cC.AUDIO_MIXING_ERROR_OK})}}pushAudioMixingBuffer(I){if(!(this._audioBufferSource&&(this.cachedBuffer.push(I),this.cachedBuffer.length>0))){this._audioBufferSource=this._sharedAudioContext.createBufferSource(),this._audioBufferSource.buffer=I,this._audioBufferSource.connect(this._bufferGainNode);try{this._audioBufferSource.start()}catch{this._failedAudioList.push(this._audioBufferSource)}this._audioBufferSource.onended=()=>{var g;if((g=this._audioBufferSource)===null||g===void 0||g.disconnect(this._bufferGainNode),this._audioBufferSource=void 0,this.cachedBuffer.length){const C=this.cachedBuffer.shift();C&&this.pushAudioMixingBuffer(C)}}}}stopAll(){if(this._localSource)try{this._localSource.disconnect(this._localGainNode),delete this._localSource}catch{}this.mixingMap.forEach((I,g)=>{this.stopAudioMixing(g)})}get mixTrack(){return this._audioDestination.stream.getAudioTracks()[0]}get sharedAudioContext(){return this._sharedAudioContext}async resumeLocalPlay(){const I=[];for(const g of this._failedAudioList)try{g instanceof HTMLAudioElement?(g.muted=!1,await g.play()):g.start()}catch(C){I.push(g),console.error(C),this._context.onAutoPlayFailed({userId:this.id,kind:"audio",streamIndex:F.STREAM_INDEX_MAIN,mediaType:iA.AUDIO});break}this._failedAudioList=I}destroy(){const{_sharedAudioContext:I}=this;I.state!=="closed"&&typeof I.close=="function"&&I.close(),this.cachedBuffer=[],this.mixingMap.clear(),this.resourcesCache.clear(),this.volumeConfig.clear(),this._startingIds=new Map,this._revokeURLs.forEach(g=>{pQ.revokeObjectURL(g)})}}qg([Z(["id","filePath","options"])],Kg.prototype,"startAudioMixing"),qg([Z(["id"])],Kg.prototype,"stopAudioMixing"),qg([Z(["id"])],Kg.prototype,"pauseAudioMixing"),qg([Z(["id"])],Kg.prototype,"resumeAudioMixing"),qg([Z(["id"])],Kg.prototype,"preloadAudioMixing"),qg([Z(["id"])],Kg.prototype,"unloadAudioMixing"),qg([Z(["id"])],Kg.prototype,"getAudioMixingVolume"),qg([Z(["id","volume"])],Kg.prototype,"setAudioMixingVolume"),qg([Z(["id"])],Kg.prototype,"getAudioMixingDuration"),qg([Z(["id"])],Kg.prototype,"getAudioMixingCurrentPosition"),qg([Z(["id","position"])],Kg.prototype,"setAudioMixingPosition"),qg([Z(["id","callback","frameSize"])],Kg.prototype,"setAudioFrameCallback"),qg([Z(["type"])],Kg.prototype,"enableAudioMixingBuffer"),qg([Z()],Kg.prototype,"disableAudioMixingBuffer"),qg([Z(["buffer"])],Kg.prototype,"pushAudioMixingBuffer");class vuA extends UB.EventEmitter{constructor(I){super(),P(this,"_loginSessionId",null),P(this,"_userId",null),P(this,"_token",null),P(this,"_loginResolveCallback",void 0),P(this,"_loginRejectCallback",void 0),P(this,"_waitLoginToken",!1),P(this,"_serverParamsCache",void 0),P(this,"id",void 0),P(this,"logger",void 0),P(this,"_clearListeners",void 0),this._ctx=I,this.id=I.id,this.logger=new uA("RTSClient",1,I.id)}login(I,g){return new Promise((C,Q)=>{var B;if(this.logger.info("login","invoke login, token: %o, userId: %o",I,g),this._loginSessionId)throw new U(m.ALREADY_LOGIN,"Already logined");if(this._loginResolveCallback)throw new U(m.LOGIN_FAILED,"Is logging in, please try again later.");this._userId=g,this._token=I,(B=tI(this.id))===null||B===void 0||B.set({rtm_user_id:g}),this._loginResolveCallback=C,this._loginRejectCallback=Q,this._ctx.signalingManager.connect().then(()=>{this._addSignalEventHandler(),this._login()})})}async logout(){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");this._checkNotInLimitMode("logout"),await this._ctx.signalingManager.sendSignaling("logout",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId},{functionType:We.C2RTM}).catch(()=>{}),this._clearState()}async updateLoginToken(I){return this._checkNotInLimitMode("updateLoginToken"),this._token=I,new Promise((g,C)=>{this._waitLoginToken?(this._loginResolveCallback=g,this._loginRejectCallback=C,this._login()):g()})}async getPeerOnlineStatus(I){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");this._checkNotInLimitMode("getPeerOnlineStatus");const g=await this._ctx.signalingManager.sendSignaling("getPeerOnlineStatus",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId,peerUserId:I},{functionType:We.C2RTM});return g==null?void 0:g.status}async sendUserMessageOutsideRoom(I,g){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");return this._checkNotInLimitMode("sendUserMessageOutsideRoom"),this._ctx.rtsLimiter.e2e.check(g),this._ctx.signalingManager.sendP2PMessage({from:this._userId,app:this._ctx.appId,to:I,room:"",msg:g})}async setRTSMessageLimit(I){I&&this._ctx.signalingManager.sendSignaling("RTSMessageLimit",{appId:this._ctx.appId,interval:I.rts_qps_interval,broadcast:I.rts_broadcast_qps_value,one2one:I.rts_e2e_qps_value,e2bs:I.rts_e2s_qps_value},{functionType:We.C2RTM}).catch(()=>{})}async setServerParams(I,g){try{if(OA(I,"signature"),OA(g,"url"),!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");await this._ctx.signalingManager.sendSignaling("setServerParams",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId,signature:I,url:g},{functionType:We.C2RTM}).catch(C=>{throw new U(m.UNEXPECTED_ERROR,C.msg)}),KI.setServerUrl(this.id,g),this._serverParamsCache={signature:I,url:g},this.emit("onServerParamsSetResult")}catch(C){throw this.emit("onServerParamsSetResult",C),C}}async sendServerMessage(I){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");return this._checkNotInLimitMode("sendServerMessage"),this._ctx.rtsLimiter.e2s.check(I),this._ctx.signalingManager.sendP2PMessage({from:this._userId,app:this._ctx.appId,to:"",room:"",type:kR.BUSINESS_SERVER,msg:I})}destroy(){this.logger.info("destroy","invoke."),super.removeAllListeners(),this._loginResolveCallback&&this._loginRejectCallback&&(this._loginRejectCallback(new U(m.LOGIN_FAILED,"logout")),delete this._loginResolveCallback,delete this._loginRejectCallback),this._clearState(),delete this._serverParamsCache}_login(){var I;if(!this._userId)return;const g=KE();try{this._checkNotInLimitMode("login")}catch(Q){var C;(C=this._loginRejectCallback)===null||C===void 0||C.call(this,Q)}this._ctx.signalingManager.sendSignaling("login",{Token:Ag.token2auth(this._ctx.appId,null,this._userId,this._token),timestamp:Date.now(),loginSessionId:g,params:{userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),appId:this._ctx.appId,userId:this._userId,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(I=YA.MEDIA_PROCESSING_TYPE)!==null&&I!==void 0?I:0}},{functionType:We.C2RTM}).then(()=>{typeof this._loginResolveCallback=="function"&&this._loginResolveCallback(),this._loginSessionId=g,KI.setRtsSessionId(this.id,g),this._waitLoginToken=!1,this._serverParamsCache&&this.setServerParams(this._serverParamsCache.signature,this._serverParamsCache.url)}).catch(Q=>{const{code:B,message:E}=Q||{};let i,e;this._waitLoginToken=!1,B>=700&&B<800?B===708?(i=m.INVALID_PARAMS,e="Invalid userId"):(i=m.INVALID_TOKEN,e="Invalid token",this._waitLoginToken=!0,this._loginRejectCallback||this.emit("onRTMTokenError")):(i=m.LOGIN_FAILED,e="login failed"),typeof this._loginRejectCallback=="function"&&this._loginRejectCallback(new U(i,E||e))}).finally(()=>{delete this._loginResolveCallback,delete this._loginRejectCallback})}_addSignalEventHandler(){const I=E=>{E.state===XA.CONNECTION_STATE_RECONNECTED&&this._login()},g=()=>this._clearState(),C=E=>{this.emit("onUserMessageReceivedOutsideRoom",{userId:E.from,message:E.msg})},Q=E=>{this.emit("onUserBinaryMessageReceivedOutsideRoom",{userId:E.from,message:E.msg})},B=E=>{E.clientId!==this._userId||E.roomId||(this.emit("onUserDisconnection"),this._clearState())};this._ctx.signalingManager.on(HI.ON_CONNECTION_STATE_CHANGE,I),this._ctx.signalingManager.on(HI.ON_RECONNECT_FAILED,g),this._ctx.signalingManager.on(x.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM,C),this._ctx.signalingManager.on(x.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM,Q),this._ctx.signalingManager.on(x.USER_DISCONNECTION,B),this._clearListeners=()=>{this._ctx.signalingManager.off(HI.ON_CONNECTION_STATE_CHANGE,I),this._ctx.signalingManager.off(HI.ON_RECONNECT_FAILED,g),this._ctx.signalingManager.off(x.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM,C),this._ctx.signalingManager.off(x.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM,Q),this._ctx.signalingManager.off(x.USER_DISCONNECTION,B)}}_clearState(){var I;(I=this._clearListeners)===null||I===void 0||I.call(this),this._userId=null,this._token=null,this._loginSessionId=null,KI.setRtsSessionId(this.id,"")}_checkNotInLimitMode(I){if(this._ctx.rtsMode===Qo.LIMIT_MODE)throw new U(m.NOT_ALLOWED_IN_RESTRICTED_MODE,"not allow to call ".concat(I," in rts restricted mode"))}}var Rg=(A=>(A.onWTNPushStateChanged="onWTNPushStateChanged",A.onWTNPlayStateChanged="onWTNPlayStateChanged",A.onWTNRemoteAudioStateChanged="onWTNRemoteAudioStateChanged",A.onWTNRemoteVideoStateChanged="onWTNRemoteVideoStateChanged",A.onWTNRemoteVideoStats="onWTNRemoteVideoStats",A.onWTNRemoteAudioStats="onWTNRemoteAudioStats",A.onWTNFirstRemoteVideoFrameDecoded="onWTNFirstRemoteVideoFrameDecoded",A.onWTNSEIMessageReceived="onWTNSEIMessageReceived",A))(Rg||{}),mQ=(A=>(A[A.INIT=0]="INIT",A[A.START=1]="START",A[A.SUCCESS=2]="SUCCESS",A[A.STOP=3]="STOP",A[A.FAIL=4]="FAIL",A))(mQ||{}),bE=(A=>(A[A.PUSH_SUCCESS=0]="PUSH_SUCCESS",A[A.START_PUSH=1]="START_PUSH",A[A.STOP_PUSH=2]="STOP_PUSH",A[A.IN_RETRY=3]="IN_RETRY",A[A.RETRY_FAIL=4]="RETRY_FAIL",A[A.NO_PUSH_PERMISSION=5]="NO_PUSH_PERMISSION",A[A.STREAM_PUSH_BY_OTHER=6]="STREAM_PUSH_BY_OTHER",A))(bE||{}),mg=(A=>(A[A.INIT=0]="INIT",A[A.START=1]="START",A[A.SUCCESS=2]="SUCCESS",A[A.STOP=3]="STOP",A[A.FAIL=4]="FAIL",A))(mg||{}),lC=(A=>(A[A.PLAY_SUCCESS=0]="PLAY_SUCCESS",A[A.START_PLAY=1]="START_PLAY",A[A.STOP_PLAY=2]="STOP_PLAY",A[A.REMOTE_STOP=3]="REMOTE_STOP",A[A.REMOTE_FAILURE=4]="REMOTE_FAILURE",A[A.STREAM_BANNED=5]="STREAM_BANNED",A[A.NO_PLAY_PERMISSION=6]="NO_PLAY_PERMISSION",A[A.STREAM_NOT_EXIST=7]="STREAM_NOT_EXIST",A[A.IN_RETRY=8]="IN_RETRY",A[A.RETRY_FAIL=9]="RETRY_FAIL",A[A.INTERNAL=10]="INTERNAL",A[A.OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT=1310]="OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT",A[A.OVER_STREAM_SUBSCRIBE_USER_LIMIT=1311]="OVER_STREAM_SUBSCRIBE_USER_LIMIT",A[A.OVER_STREAM_SUBSCRIBE_REQUES_TLIMIT=1312]="OVER_STREAM_SUBSCRIBE_REQUES_TLIMIT",A))(lC||{}),QE=(A=>(A[A.STOPED=0]="STOPED",A[A.STARTING=1]="STARTING",A[A.DECODING=2]="DECODING",A[A.FROZEN=3]="FROZEN",A[A.FAILED=4]="FAILED",A))(QE||{}),yi=(A=>(A[A.INTERNAL=0]="INTERNAL",A[A.NETWORK_CONGESTION=1]="NETWORK_CONGESTION",A[A.NETWORK_RECOVERY=2]="NETWORK_RECOVERY",A[A.UNMUTE=3]="UNMUTE",A[A.MUTE=4]="MUTE",A[A.REMOTE_START=5]="REMOTE_START",A[A.REMOTE_STOP=6]="REMOTE_STOP",A))(yi||{}),BE=(A=>(A[A.STOPED=0]="STOPED",A[A.STARTING=1]="STARTING",A[A.DECODING=2]="DECODING",A[A.FROZEN=3]="FROZEN",A[A.FAILED=4]="FAILED",A))(BE||{}),wi=(A=>(A[A.INTERNAL=0]="INTERNAL",A[A.NETWORK_CONGESTION=1]="NETWORK_CONGESTION",A[A.NETWORK_RECOVERY=2]="NETWORK_RECOVERY",A[A.UNMUTE=3]="UNMUTE",A[A.MUTE=4]="MUTE",A[A.REMOTE_START=5]="REMOTE_START",A[A.REMOTE_STOP=6]="REMOTE_STOP",A))(wi||{});const F9={interval:1e3,retryDuration:0};class ruA extends b9{constructor(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0&&arguments[3];super(C,Xs.STREAM_INDEX_MAIN),P(this,"_state",mQ.INIT),P(this,"_stateChangeTs",aA()),P(this,"streamId",void 0),P(this,"Authorization",void 0),P(this,"_backOff",F9),this.token=g,this.streamId=I,this.logName="WTNLocalStream-".concat(I),this.observer=new Ww(this._ctx,this),this.Authorization=Ag.token2auth(C.appId,"",I,g),this._state=Q?mQ.FAIL:mQ.INIT}setState(I,g){const C=this._state;if(C===I)return;this.logger.print("setState",I,g),this._state=I;const Q=aA();this.safeEmit(Rg.onWTNPushStateChanged,{streamId:this.streamId,oldState:C,newState:I,reason:g,elapse:Q-this._stateChangeTs}),this._stateChangeTs=Q}getPushBackOff(){return this._backOff}updatePushBackOff(){this._backOff.retryDuration+=this._backOff.interval,this._backOff.interval=this._backOff.interval>4e3?8e3:2*this._backOff.interval}resetPushBackOff(){this._backOff=F9}}class auA extends y9{constructor(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0&&arguments[3];super(C,I,I,!1,!0,{audiostream:!0,localaudio:!0,videostream:!0,localvideo:!0,extaudio:!1,extvideo:!1,videoDescriptions:[]}),P(this,"_state",mg.INIT),P(this,"Authorization",void 0),P(this,"_stateChangeTs",aA()),P(this,"streamId",void 0),P(this,"_backOff",F9),P(this,"_audioState",QE.STOPED),P(this,"_videoState",BE.STOPED),this.token=g,this.streamId=I,this.logName="WTNRemoteStream-".concat(I),this.observer=new qz(this._ctx,this),this._initObserverEvent(Q),this.Authorization=Ag.token2auth(C.appId,"",I,g),this._state=Q?mg.FAIL:mg.INIT}setState(I,g){const C=this._state;if(C===I)return;this.logger.print("setState",I,g),this._state=I;const Q=aA();this.safeEmit(Rg.onWTNPlayStateChanged,{streamId:this.streamId,oldState:C,newState:I,reason:g,elapse:Q-this._stateChangeTs}),this._stateChangeTs=Q}get state(){return this._state}getPushBackOff(){return this._backOff}updatePushBackOff(){this._backOff.retryDuration+=this._backOff.interval,this._backOff.interval=this._backOff.interval>4e3?8e3:2*this._backOff.interval}resetPushBackOff(){this._backOff=F9}setVideoState(I,g){this._videoState!==I&&(I===BE.DECODING&&this.setVideoState(BE.STARTING,g),this.logger.print("setVideoState",I,g),this._videoState=I,this.safeEmit(Rg.onWTNRemoteVideoStateChanged,{streamId:this.streamId,state:I,reason:g}))}setAudioState(I,g){this._audioState!==I&&(I===QE.DECODING&&this.setAudioState(QE.STARTING,g),this.logger.print("setAudioState",I,g),this._audioState=I,this.safeEmit(Rg.onWTNRemoteAudioStateChanged,{streamId:this.streamId,state:I,reason:g}))}muteToSubMediaType(I,g){let C=!1;const Q=$I(this.subMediaType),B=gI(this.subMediaType);return typeof I=="boolean"&&Q===I&&(this.subMediaType+=I?-iA.AUDIO:iA.AUDIO,C=!0),typeof g=="boolean"&&B===g&&(this.subMediaType+=g?-iA.VIDEO:iA.VIDEO,C=!0),C}getEnableMediaType(){return{audio:$I(this.subMediaType),video:gI(this.subMediaType)}}_initObserverEvent(I){var g,C;(g=this.observer)===null||g===void 0||g.once("recvAudioFirstFrame",()=>{this.setAudioState(QE.DECODING,I?yi.NETWORK_RECOVERY:yi.REMOTE_START)}),(C=this.observer)===null||C===void 0||C.once("recvVideoFirstFrame",()=>{this.setVideoState(BE.DECODING,I?wi.NETWORK_RECOVERY:wi.REMOTE_START)})}}const PuA=["rid"];var cuA=Object.defineProperty,nuA=Object.getOwnPropertyDescriptor,_g=(A,I,g,C)=>{for(var Q,B=nuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&cuA(I,g,B),B};class Jg extends iQ{constructor(I){super(),P(this,"_reportName","WTNStream"),P(this,"_localStreams",new Map),P(this,"_remoteStreams",new Map),P(this,"_logger",void 0),P(this,"_monitor",void 0),P(this,"_ontrackCallbackMap",new Map),P(this,"_pushTaskMap",new Map),P(this,"_playTaskMap",new Map),P(this,"engineId",void 0),P(this,"_publicVideoPlayerConfig",new Map),P(this,"__onSEIMessageReceived",void 0),P(this,"__onRemoteStreamStats",void 0),P(this,"__onResubscribe",void 0),P(this,"__onPlayerEvents",void 0),P(this,"_clearSignalListeners",void 0),this._ctx=I,this._monitor=tI(I.id),this._logger=new uA("WTNStream",1,I.id),this.engineId=I.id,this._addSignalListeners()}async startPushWTN(I,g,C,Q){let B=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(C=!!C,Q=!!Q,this._logger.print("startPushWTN",I,g,C,Q),sa(g),!kQ(I)&&OA(I,"token"),this._localStreams.get(g))return;const E=new ruA(g,I,this._ctx,B);this._addLocalStreamEventHandler(E),E.setState(mQ.START,bE.START_PUSH),this._localStreams.set(g,E),await this._ctx.signalingManager.connect(),E.videoTrack=this._ctx.localVideoTrack,E.audioTrack=this._ctx.localAudioTrack,E.pubAudio=!Q,E.pubVideo=!C,await new Promise((i,e)=>{B||this._pushTaskMap.set(g,{resolve:()=>{i(),E.startReport(()=>{},this._ctx.handler)},reject:e}),this._sendStartPushStreamSignal(E).catch(o=>e(o))})}async stopPushWTN(I){this._logger.print("stopPushWTN",I);const g=this._localStreams.get(I);g&&(g.setState(mQ.STOP,bE.STOP_PUSH),this._ctx.signalingManager.sendSignaling("stopPushStream",{appId:this._ctx.appId,streamId:I}).catch(()=>{}),await this._stopLocalStream(g))}async muteWTNLocalAudio(I,g){this._logger.print("muteWTNLocalAudio",I,g);const C=this._localStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");this._assertNotConnect(),C.pubAudio=!g,await this._updatePushStream(C)}async muteWTNLocalVideo(I,g){this._logger.print("muteWTNLocalVideo",I,g);const C=this._localStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");this._assertNotConnect(),C.pubVideo=!g,await this._updatePushStream(C)}sendWTNSEIMessage(I,g,C){this._logger.info("sendWTNSEIMessage()","streamId: %o, sei: %o, repeatCount: %o",I,g,C);const Q=this._localStreams.get(I);if(!Q||!Q.pubVideo&&!Q.pubAudio)return;if(!JE()&&!hv())return bi("Your browser does not support sending SEI"),!1;qe(C,"repeatCount",0,30);const B=typeof g=="string"?new Uint8Array(Ag.str2ab(g)):g;if(!g.length)return this._logger.warn("sei message must not be empty"),!1;if(B.byteLength>4096)return void this._logger.warn("sei size must not bigger than 4KB");EE||this._maybeFillBackFrame2Stream(Q);const E=KE();Q.sendSEIMessage({content:B,uuid:E,repeatCount:C+1}),setTimeout(async()=>{if(Q){var i;await Q.revokeSEIMessage(E)&&(console.error("[RTC WebSDK] sei timeout for message: %o",g),(i=this._monitor)===null||i===void 0||i.report("rtc_sdk_callback",{sdk_callback_name:"sendSEIMessage",message:"timeout for message: ".concat(g),error_code:400}))}},lA("SEI_TIME_OUT"))}async startPlayWTN(I,g,C,Q){var B;let E=arguments.length>4&&arguments[4]!==void 0&&arguments[4];C=!!C,Q=!!Q,this._logger.print("startPlayWTN",I,g,C,Q),sa(g),!kQ(I)&&OA(I,"token");let i=this._remoteStreams.get(g);if(i){if(i.state===mg.START||i.state===mg.SUCCESS)throw new U(m.REPEAT_PLAY,"repeat play public media stream");await this.stopPlayWTN(i.streamId)}i=new auA(g,I,this._ctx,E),this._addRemoteStreamEventHandler(i),i.setState(mg.START,lC.START_PLAY),i.muteToSubMediaType(Q,C),this._remoteStreams.set(g,i),(B=i.observer)===null||B===void 0||B.setLogin(!0,i.getEnableMediaType());try{await this._ctx.signalingManager.connect(),await new Promise((e,o)=>{E||this._playTaskMap.set(g,{resolve:e,reject:o}),this._sendStartPullStreamSignal(i).catch(t=>o(t))})}catch(e){throw this._remoteStreams.delete(g),e}}async stopPlayWTN(I){var g,C;this._logger.print("stopPlayWTN",I);const Q=this._remoteStreams.get(I);if(Q)return Q.setState(mg.STOP,lC.STOP_PLAY),Q.setAudioState(QE.STOPED,yi.MUTE),Q.setVideoState(BE.STOPED,wi.MUTE),(g=Q.observer)===null||g===void 0||g.setLogin(!1),Q==null||(C=Q.audioTrack)===null||C===void 0||C.stop(),this._remoteStreams.delete(I),await this._ctx.signalingManager.connect(),this._unsubscribePublicStream(Q)}async muteWTNRemoteAudio(I,g){this._logger.print("muteWTNRemoteAudio",I,g),this._assertNotConnect();const C=this._remoteStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");var Q;C.muteToSubMediaType(g,null)&&((Q=C.observer)===null||Q===void 0||Q.setUnmuteAudio(!g),await this._updatePullStream(I,C),C.setAudioState(g?QE.STOPED:QE.DECODING,g?yi.MUTE:yi.UNMUTE))}async muteWTNRemoteVideo(I,g){this._logger.print("muteWTNRemoteVideo",I,g),this._assertNotConnect();const C=this._remoteStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");var Q;C.muteToSubMediaType(null,g)&&((Q=C.observer)===null||Q===void 0||Q.setUnmuteVideo(!g),await this._updatePullStream(I,C),C.setVideoState(g?BE.STOPED:BE.DECODING,g?wi.MUTE:wi.UNMUTE))}setWTNRemoteVideoPlayer(I,g){var C;if(this._logger.print("setWTNRemoteVideoPlayer()","streamId: %o, videoPlayerOption: %o",I,g),(C=this._publicVideoPlayerConfig.get(I))===null||C===void 0||(C=C.player)===null||C===void 0||C.destroy(),!g.renderDom)return void this._publicVideoPlayerConfig.delete(I);const Q=new Pi(this._ctx.id,UQ,R(R({},g),{},{isLocal:!1,userId:I})),B=R(R({},g),{},{player:Q});return this._publicVideoPlayerConfig.set(I,B),this._updateVideoPlayerState(I),Q.domElement}setWTNRemoteAudioPlaybackVolume(I,g){var C;OA(I,"publicStreamId"),g=Cl(g,"volume",0,400),this._ctx.publicAudioVolume.set(I,g),(C=this._remoteStreams.get(I))===null||C===void 0||(C=C.audioTrack)===null||C===void 0||C.setVolume(g)}__getRemoteStreams(){return this._remoteStreams}__getPublicStreamTrack(I,g){const C=this._remoteStreams.get(I);if(C)return g==="video"?C.videoTrack:C.audioTrack}async _updatePushTrack(){this._localStreams.size!==0&&(this._logger.info("_updatePushTrack()"),await this._ctx.signalingManager.connect(),this._localStreams.forEach(async I=>{I.videoTrack=this._ctx.localVideoTrack,I.audioTrack=this._ctx.localAudioTrack,await this._updatePushStream(I)}))}destroy(){var I;this._remoteStreams.forEach(g=>{g.destroy()}),this._remoteStreams=new Map,this.removeAllListeners(),this._ontrackCallbackMap.clear(),this._publicVideoPlayerConfig.forEach(g=>{g.player.destroy()}),this._publicVideoPlayerConfig.clear(),(I=this._clearSignalListeners)===null||I===void 0||I.call(this)}async _sendStartPushStreamSignal(I){var g,C,Q,B;this._logger.print("_sendStartPushStreamSignal()","streamId: %s",I.streamId);const{streamId:E,Authorization:i,pubAudio:e,pubVideo:o}=I,{handler:t}=this._ctx;await(t==null?void 0:t.getDefaultSdp());const s=await t.publish(I),v=await qa(),{appId:r,businessId:n,useCloudProxy:a}=this._ctx,c={appId:r,streamId:E,Authorization:i,sdpInfo:{msid:I.stream.id,type:s.type,sdp:s.partialSdp,semantics:s.semantics},timestamp:Date.now(),params:{appId:r,businessId:n,userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),enableCloudProxy:a,channelProfile:"0",SDKCodecNegotiation:!0,supportedCodecs:v,sdkType:"rtc",joinRoomMode:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=YA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0,enableStreamStatusCallback:!0},attributes:{localaudio:!!I.audioTrack,localvideo:!!I.videoTrack,videostream:o,audiostream:e,extvideo:((C=I.videoTrack)===null||C===void 0?void 0:C.sourceType)===oI.EXTERNAL,extaudio:((Q=I.audioTrack)===null||Q===void 0?void 0:Q.sourceType)===oI.EXTERNAL,videoDescriptions:s.videoDescriptions.map(D=>ve(D,PuA)),videoType:eC.NORMAL},video:o,audio:e,screen:I.isScreen};let d;try{this.emit("__onSendingPushStreamMessageHook"),d=await this._ctx.signalingManager.sendSignaling("startPushStream",c)}catch(D){if(await(t==null?void 0:t.rollback({msid:I.stream.id,stream:I,audioMid:s.audioMid,videoMid:s.videoMid})),D.code>=500&&D.code<600){const u=I.getPushBackOff();if(u.retryDuration<6e4)return this._logger.info("pushRetry","start msid: %s, retryDuration: %s",I.id,u.retryDuration),await new Promise(w=>setTimeout(w,u.interval)),I.updatePushBackOff(),I.resetStream(),I.setState(mQ.START,bE.IN_RETRY),this._sendStartPushStreamSignal(I);throw this._logger.info("pushRetry","end"),I.setState(mQ.FAIL,bE.RETRY_FAIL),await this._stopLocalStream(I),I.resetPushBackOff(),new U(m.WTN_PUSH_FAILED,D.message||"server error")}if(D.code===401)throw I.setState(mQ.FAIL,bE.NO_PUSH_PERMISSION),await this._stopLocalStream(I),new U(m.WTN_PUSH_FAILED,D.message||"token error");if(D.code===m.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting())return;throw new U(m.WTN_PUSH_FAILED,D.message||"push error")}I.pubAttributes=c.attributes;const l=await I.getSelectedCodec();I.currentVideoCodec=l;const h=new Promise((D,u)=>{var w,b;t==null||t.handleAck({action:iI.publish,streamId:E,audioMid:s.audioMid,videoMid:s.videoMid,audioTransceiverInit:s==null?void 0:s.audioTransceiverInit,videoTransceiverInit:s==null?void 0:s.videoTransceiverInit,signalingAck:{sdp:(w=d)===null||w===void 0||(w=w.relayMessage)===null||w===void 0?void 0:w.sdp,sequenceId:(b=d)===null||b===void 0||(b=b.relayMessage)===null||b===void 0?void 0:b.sequenceId},stream:I,videoCodec:l,onSuccess:()=>{this._logger.info("pushStream()","pushStream success"),I.setState(mQ.SUCCESS,bE.PUSH_SUCCESS),D(0)},onFail:y=>{this._logger.info("pushStream()","pushStream fail"),u(y)}})});!mI&&await h,(B=this._pushTaskMap.get(E))===null||B===void 0||B.resolve(),this._pushTaskMap.delete(E)}async _stopLocalStream(I){var g;I.stopBlackFrame(),await((g=this._ctx.handler)===null||g===void 0?void 0:g.handleAck({action:iI.unpublish,audioMid:I.audioMid,videoMid:I.videoMid,stream:I,streamId:I.streamId})),I.destroy(),this._localStreams.delete(I.streamId)}async _updatePushStream(I){var g,C,Q,B;const{videoTrack:E,audioTrack:i,pubAudio:e,pubVideo:o}=I;let t=(g=I.audioTrack)===null||g===void 0?void 0:g.preprocessingTrack;const s=(C=I.videoTrack)===null||C===void 0?void 0:C.preprocessingTrack;var v,r;if(o&&s?(I.stopBlackFrame(),await((v=I.videoTransceiver)===null||v===void 0?void 0:v.sender.replaceTrack(s))):await((r=I.videoTransceiver)===null||r===void 0?void 0:r.sender.replaceTrack(null)),e&&t){var n;const{mixType:h,mixedAudioTrack:D}=I.audioTrack;D&&h!==JQ.PLAYOUT&&t.enabled&&(t=D),await((n=I.audioTransceiver)===null||n===void 0?void 0:n.sender.replaceTrack(t))}else{var a;await((a=I.audioTransceiver)===null||a===void 0?void 0:a.sender.replaceTrack(null))}const c={localaudio:!!i,localvideo:!!E,videostream:o,audiostream:e,extvideo:(E==null?void 0:E.sourceType)===oI.EXTERNAL,extaudio:(i==null?void 0:i.sourceType)===oI.EXTERNAL,videoType:E?eC.NORMAL:I.pubAttributes.videoType},d={};for(const[h,D]of Object.entries(c))D!==Reflect.get(I.pubAttributes,h)&&Reflect.set(d,h,D);var l;Object.keys(d).length&&(I.pubAudio=(Q=c.audiostream)!==null&&Q!==void 0?Q:I.pubAudio,I.pubVideo=(B=c.videostream)!==null&&B!==void 0?B:I.pubVideo,I.pubAttributes=R(R({},I.pubAttributes),c),I.pubAttributes.videostream||I.stopBlackFrame(),await this._ctx.signalingManager.sendSignaling("updatePushStream",{appId:this._ctx.appId,streamId:I.streamId,attributes:c}),mI&&await((l=this._ctx.handler)===null||l===void 0?void 0:l.setCurrentDescription()))}async _sendStartPullStreamSignal(I){var g,C,Q,B,E;this._logger.print("startPullStream()","streamId:",I.streamId);const{streamId:i,Authorization:e}=I,{handler:o}=this._ctx,t=await(o==null?void 0:o.subscribe(I,{multiChatMode:!1}));if(!t)throw new U(m.ADD_TRANSCEIVER_FAILED,"add transceiver failed");const s=aA(),{audioMid:v,videoMid:r}=t,{appId:n,businessId:a,useCloudProxy:c}=this._ctx,d=await qa(),l={appId:n,streamId:i,Authorization:e,audio:!0,video:!0,screen:!1,timestamp:Date.now(),sdpInfo:{sdp:t.partialSdp,semantics:t.semantics,type:t.type},params:{appId:n,businessId:a,userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),enableCloudProxy:c,channelProfile:"0",SDKCodecNegotiation:!0,supportedCodecs:d,sdkType:"rtc",joinRoomMode:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=YA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0,enableStreamStatusCallback:!0},config:{enableMediaType:I.getEnableMediaType(),qualityLayer:{spatialLayer:0,temporalLayer:0}}};let h;try{this.emit("__onSendingPullStreamMessageHook"),h=await this._ctx.signalingManager.sendSignaling("startPullStream",l)}catch(y){if(await(o==null?void 0:o.rollback({msid:i,stream:I})),y.code===401)throw I.setState(mg.FAIL,lC.NO_PLAY_PERMISSION),new U(m.WTN_PLAY_FAILED,y.message||"token error");if(y.code===433)throw I.setState(mg.FAIL,lC.OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT),new U(m.WTN_PLAY_FAILED,y.message||"over client subscribe stream limit");if(y.code===434)throw I.setState(mg.FAIL,lC.OVER_STREAM_SUBSCRIBE_USER_LIMIT),new U(m.WTN_PLAY_FAILED,y.message||"over stream subscribe user limit");if(y.code===m.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting())return;throw I.setState(mg.FAIL,lC.INTERNAL),new U(m.WTN_PLAY_FAILED,y.message||"play wtn error")}const D=[];D.push(new Promise((y,S)=>{const L=setTimeout(()=>S(new U(m.WTN_PLAY_FAILED,"wait video timeout for streamId: ".concat(i))),6e4),V=z=>{z.mediaType==="video"&&(this._logger.success("remoteStream ".concat(I.userId," received video track")),I.off("ontrack",V),clearTimeout(L),y(0))};I.on("ontrack",V)})),D.push(new Promise((y,S)=>{const L=setTimeout(()=>S(new U(m.WTN_PLAY_FAILED,"wait audio timeout for streamId: ".concat(i))),6e4),V=z=>{z.mediaType==="audio"&&(this._logger.success("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",V),clearTimeout(L),y(0))};I.on("ontrack",V)}));const u=y=>{I.ontrack(y)};(C=this._ctx.handler)===null||C===void 0||C.on("ontrack",u),this._ontrackCallbackMap.set(I,u);const{sequenceId:w,sdp:b}=h.relayMessage;I.videoMid=r,I.audioMid=v,I.sequenceId=w,I.streamState=uC.SUB_ED,await((Q=this._ctx.handler)===null||Q===void 0?void 0:Q.handleAck({action:iI.subscribe,streamId:i,audioMid:v,videoMid:r,audioTransceiverInit:t.audioTransceiverInit,videoTransceiverInit:t.videoTransceiverInit,signalingAck:{sdp:b,sequenceId:w},stream:I})),await Promise.all(D),(B=this._monitor)===null||B===void 0||B.report("rtc_subscribe_stat",{result:"success",start:s,message:"unknown",stream_user_id:I.userId}),I.startReport(y=>{var S;y.publicStreamId=y.userId,delete y.userId,delete y.isScreen;const L=DC(y);L.audioStats&&this.safeEmit(Rg.onWTNRemoteAudioStats,{streamId:I.streamId,audioStats:L.audioStats}),L.videoStats&&this.safeEmit(Rg.onWTNRemoteVideoStats,{streamId:I.streamId,videoStats:L.videoStats}),(S=this.__onRemoteStreamStats)===null||S===void 0||S.call(this,L)},this._ctx.handler),this._updateVideoPlayerState(i),this._initAudioPlayer(i),I.subVideo=I.getEnableMediaType().video,I.subAudio=I.getEnableMediaType().audio,(E=this._playTaskMap.get(i))===null||E===void 0||E.resolve(),this._playTaskMap.delete(i)}async _unsubscribePublicStream(I){var g;pt("_unsubscribePublicStream()",I,this._logger);const C={appId:this._ctx.appId,streamId:I.streamId};try{await this._ctx.signalingManager.sendSignaling("stopPullStream",C)}catch{}I.streamState=uC.INIT,await((g=this._ctx.handler)===null||g===void 0?void 0:g.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:I.audioMid,videoMid:I.videoMid,stream:I})),I.subMediaType=OC.NONE,this._removeOnTrackListener(I),I.statsReport.unsubscribe(),I.destroy()}async _updatePullStream(I,g){const C=g.getEnableMediaType();await this._ctx.signalingManager.sendSignaling("updatePullStream",{appId:this._ctx.appId,streamId:I,config:{enableMediaType:C}}),g.subVideo=C.video,g.subAudio=C.audio}_removeOnTrackListener(I){const g=this._ontrackCallbackMap.get(I);if(g){const C=I.vendorHandler||this._ctx.handler;C==null||C.off("ontrack",g),this._ontrackCallbackMap.delete(I)}}_addSignalListeners(){const I={[HI.ON_CONNECTION_STATE_CHANGE]:g=>{g.state===XA.CONNECTION_STATE_RECONNECTED?(Array.from(this._remoteStreams.values()).forEach(C=>{const{streamId:Q,token:B}=C,{audio:E,video:i}=C.getEnableMediaType();C.destroy(),this._remoteStreams.delete(Q),this.startPlayWTN(B,Q,!i,!E,!0).then(()=>{var e;(e=this.__onResubscribe)===null||e===void 0||e.call(this,{stream:C})})}),Array.from(this._localStreams.values()).forEach(C=>{const{token:Q,pubAudio:B,pubVideo:E}=C;C.destroy(),this._localStreams.delete(C.streamId),this.startPushWTN(Q,C.streamId,!E,!B,!0)})):g.state===XA.CONNECTION_STATE_DISCONNECTED&&(this._remoteStreams.forEach(C=>{C.setState(mg.FAIL,lC.IN_RETRY),C.setAudioState(QE.FROZEN,yi.NETWORK_CONGESTION),C.setVideoState(BE.FROZEN,wi.NETWORK_CONGESTION)}),this._localStreams.forEach(C=>{C.setState(mQ.FAIL,bE.IN_RETRY)}))},[x.ON_STREAM_PUSHED_BY_OTHER]:g=>{const C=this._localStreams.get(g.streamId);this._logger.print("_addSignalListeners","onStreamPushedByOther",g.streamId),C&&(C.setState(mQ.FAIL,bE.STREAM_PUSH_BY_OTHER),this._stopLocalStream(C))},[x.ON_STREAM_PULL_STATE_CHANGED]:async g=>{const C=this._remoteStreams.get(g.streamId);if(this._logger.print("_addSignalListeners","onStreamPullStateChanged",g),C)switch(g.code){case 0:C.setState(mg.SUCCESS,lC.PLAY_SUCCESS);break;case 1:case 2:case 3:const B={1:lC.STREAM_NOT_EXIST,2:lC.REMOTE_STOP,3:lC.REMOTE_FAILURE}[g.code];C.setAudioState(QE.STOPED,yi.REMOTE_STOP),C.setVideoState(BE.STOPED,wi.REMOTE_STOP),C.setState(mg.FAIL,B);break;case 4:const E=C.getPushBackOff();var Q;E.retryDuration<6e4?(this._logger.info("subRetry",C.streamId,E.retryDuration),C.setState(mg.START,lC.IN_RETRY),await new Promise(i=>setTimeout(i,E.interval)),C.updatePushBackOff(),await((Q=this._ctx)===null||Q===void 0||(Q=Q.handler)===null||Q===void 0?void 0:Q.handleAck({action:iI.unsubscribe,streamId:C.streamId,audioMid:C.audioMid,videoMid:C.videoMid,stream:C})),C.clean(),await this._sendStartPullStreamSignal(C)):(C.setState(mg.FAIL,lC.RETRY_FAIL),this._logger.info("subRetry","end",C.streamId),C.resetPushBackOff())}}};Object.keys(I).forEach(g=>{this._ctx.signalingManager.on(g,I[g])}),this._clearSignalListeners=()=>{Object.keys(I).forEach(g=>{this._ctx.signalingManager.off(g,I[g])})}}_addLocalStreamEventHandler(I){I.on(Rg.onWTNPushStateChanged,g=>{this.safeEmit(Rg.onWTNPushStateChanged,g)})}_addRemoteStreamEventHandler(I){I.on(Rg.onWTNPlayStateChanged,g=>{this.safeEmit(Rg.onWTNPlayStateChanged,g)}),I.on(Rg.onWTNRemoteAudioStateChanged,g=>{this.safeEmit(Rg.onWTNRemoteAudioStateChanged,g)}),I.on(Rg.onWTNRemoteVideoStateChanged,g=>{this.safeEmit(Rg.onWTNRemoteVideoStateChanged,g)}),I.on("onSEIMessage",g=>{if(g instanceof Uint8Array){const Q=LaA(g);for(let B=0;B1&&arguments[1]!==void 0&&arguments[1],Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:F.STREAM_INDEX_MAIN;(g=this.__onPlayerEvents)===null||g===void 0||g.call(this,I,C,Q),I.on("playback_event",B=>{const E=this._remoteStreams.get(I.userId);if(B.eventName==="loadeddata"){const i=()=>{E&&B.type==="video"&&this.safeEmit(Rg.onWTNFirstRemoteVideoFrameDecoded,{streamId:E.streamId})};E==null||!E.observer||E.observer.audioFirstFrameReceived?i():E.observer.once("recvVideoFirstFrame",i)}})}async _maybeFillBackFrame2Stream(I){var g;if(I.refreshBlackFrameLifetime(),(g=I.videoTransceiver)===null||g===void 0||!g.sender.track){var C;const Q=I.genBlackFrame();if(!Q)return;(C=I.videoTransceiver)===null||C===void 0||(C=C.sender)===null||C===void 0||C.replaceTrack(Q),I.pubAttributes.videoType=eC.BLACK,this._ctx.signalingManager.sendSignaling("updatePushStream",{streamId:I.streamId,appId:this._ctx.appId,attributes:{videoType:eC.BLACK}}),I.on("black-frame-ended",()=>{var B;(B=I.videoTransceiver)===null||B===void 0||(B=B.sender)===null||B===void 0||B.replaceTrack(null),I.pubAttributes.videoType=eC.NORMAL,this._ctx.signalingManager.sendSignaling("updatePushStream",{streamId:I.streamId,appId:this._ctx.appId,attributes:{videoType:eC.NORMAL}})})}}safeEmit(I){for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q3&&arguments[3]!==void 0?arguments[3]:3e4;if(!window.MediaRecorder)throw new U(m.NOT_SUPPORTED,"Your browser does not support MediaRecorder.");if(this._isAudioDeviceRecordTesting||this._isAudioPlaybackDeviceTesting)throw new U(m.REPEAT_DEVICE_TEST,"device test cannot be called repeatedly at the same time.");this._isAudioDeviceRecordTesting=!0,XI.info("startAudioDeviceRecordTest()","Invoke"),this._recoderTimer=setTimeout(()=>{XI.info("startAudioDeviceRecordTest()","".concat(Q,'ms automatic call method "stopAudioDeviceRecordAndPlayTest"')),this._stopAudioCaptureAndRecoder()},Q);try{this._onAutoplayFailed=g,await this._startAudioCaptureAndRecoder(I,C??100)}catch(B){throw this._isAudioDeviceRecordTesting=!1,delete this._onAutoplayFailed,B}delete this._audioCaptureAndRecoderResolve}stopAudioDeviceRecordAndPlayTest(){XI.info("stopAudioDeviceRecordAndPlayTest()","Invoke"),this._recoderTimer!==void 0&&(clearTimeout(this._recoderTimer),delete this._recoderTimer),this._stopAudioCaptureAndRecoder()}stopAudioDevicePlayTest(){this._isAudioDeviceRecordTesting&&(XI.info("stopAudioDevicePlayTest()","Invoke"),this._isAudioDeviceRecordTesting=!1,this._mediaRecorder&&(this._mediaRecorder.ondataavailable=null),this.stopAudioDeviceRecordAndPlayTest(),this._stopEmitAudioPlaybackDeviceTestVolume(),this._destroyAudioElement()),delete this._onAutoplayFailed}getRecordTrack(){return this._audioTrack}async setSinkId(I){if(XI.info("setSinkId()","Invoke"),HTMLAudioElement.prototype.setSinkId===void 0)throw new U(m.NOT_SUPPORTED,"setSinkId not supported by current browser");const g=await Xg.getAudioPlaybackDeviceById(I);if(!g)throw new U(m.INVALID_DEVICE_ID,"audio playback device id ".concat(I," is invalid"));return this._audioPlaybackDeviceId=I,this._setAudioCtxSinkId(),g}getSinkId(){return this._audioPlaybackDeviceId}destroy(){XI.info("destroy()","Invoke"),super.removeAllListeners(),this.stopAudioPlaybackDeviceTest(),this.stopAudioDevicePlayTest()}async _playAudioFile(I,g){return XI.info("_playAudioFile()","Invoke url=".concat(I,"; loop=").concat(g.loop)),new Promise((C,Q)=>{const B=UR("audio",{attributes:{src:I,crossOrigin:"anonymous"}});this._audioElement=B,B.loop=g.loop,this._audioLevelFetcher=new SR(B),B.onplaying=()=>{B.onplaying=null,XI.info("_playAudioFile()","onplaying"),C()},B.onerror=async E=>{var i;XI.error("_playAudioFile()","onerror",E);const e=E.message||(B==null||(i=B.error)===null||i===void 0?void 0:i.message);Q(new U(m.LOAD_RESOURCES_FAILED,"Failed to play recorded audio".concat(e?", reason: ".concat(e):".")))},this._setAudioCtxSinkId().then(()=>{var E,i;return(E=B.play())===null||E===void 0||(i=E.catch)===null||i===void 0?void 0:i.call(E,e=>{XI.warn("_playAudioFile()","autoplay error",e);const o="Failed to play recorded audio, ".concat(e.name,": ").concat(e.message);e.name==="NotAllowedError"&&this._onAutoplayFailed?this._onAutoplayFailed(()=>{var t;return Promise.all([(t=this._audioLevelFetcher)===null||t===void 0?void 0:t.resume(),B.play()])}):Q(new U(m.LOAD_RESOURCES_FAILED,o))})})})}_destroyAudioElement(){this._audioElement&&(XI.info("_destroyAudioElement()","Invoke"),this._audioElement.onplaying=null,this._audioElement.onerror=null,this._audioElement.src="",delete this._audioElement,typeof this._audioCaptureAndRecoderResolve=="function"&&this._audioCaptureAndRecoderResolve())}_startEmitAudioPlaybackDeviceTestVolume(I){I=Math.max(I,100),this._audioElement&&(XI.info("_startEmitAudioPlaybackDeviceTestVolume()","start timer(".concat(I,"ms)")),this._playbackDeviceTestTimer=self.setInterval(()=>{this._audioLevelFetcher&&this.emit("onAudioPlaybackDeviceTestVolume",this._audioLevelFetcher.getAudioLevel())},I))}_stopEmitAudioPlaybackDeviceTestVolume(){var I;this._playbackDeviceTestTimer!==void 0&&(XI.info("_stopEmitAudioPlaybackDeviceTestVolume()","stop timer"),self.clearInterval(this._playbackDeviceTestTimer),delete this._playbackDeviceTestTimer),(I=this._audioLevelFetcher)===null||I===void 0||I.destroy(),delete this._audioLevelFetcher}async _startAudioCaptureAndRecoder(I,g){this._audioTrack=await Jw(this._ctx,this._ctx.audioProfileManager.getConstraints()),this._audioTrack.setVolume(g+.01);const C=new MediaStream([this._audioTrack.preprocessingTrack]);return XI.info("startAudioDeviceRecordTest()","create microphone track success!"),new Promise((Q,B)=>{let E;typeof MediaRecorder.isTypeSupported=="function"&&(E=["audio/webm","audio/mp4"].find(e=>MediaRecorder.isTypeSupported(e)),XI.info("startAudioDeviceRecordTest()","use mimeType: ".concat(E))),this._mediaRecorder=new MediaRecorder(C,E?{mimeType:E}:void 0);const i=this._mediaRecorder.mimeType;this._mediaRecorder.ondataavailable=async e=>{if(this._isAudioDeviceRecordTesting){var o;XI.info("startAudioDeviceRecordTest()","get recorded file(mimeType: ".concat(i,")."));const t=new Blob([e.data],{type:i});try{await this._playAudioFile(pQ.createObjectURL(t),{loop:!1})}catch(s){return B(s)}this._startEmitAudioPlaybackDeviceTestVolume(I),(o=this._audioElement)===null||o===void 0||o.addEventListener("ended",()=>{this.stopAudioDevicePlayTest(),Q()}),this._audioCaptureAndRecoderResolve=Q}else Q()},this._mediaRecorder.onerror=e=>{B(new U(m.AUDIO_DEVICE_TEST_FAILED,e.message||"mediaRecorder error"))},this._audioCaptureAndRecoderResolve=Q,this._mediaRecorder.start()})}_stopAudioCaptureAndRecoder(){var I;this._mediaRecorder&&(this._mediaRecorder.state==="recording"&&this._mediaRecorder.stop(),delete this._mediaRecorder),(I=this._audioTrack)===null||I===void 0||I.destroy(),delete this._audioTrack}async _setAudioCtxSinkId(){let I=this._audioPlaybackDeviceId;if(I){I==="default"&&(I="");try{var g,C;(g=MQ.getAudioContextInstance())===null||g===void 0||(C=g.setSinkId)===null||C===void 0||C.call(g,I),XI.info("setSinkId","ctx.sinkId=".concat(I))}catch(Q){XI.error("setSinkId","failed, ".concat(Q.name," - ").concat(Q.message))}}}}const pM=()=>({url:"",video:{codec:_W.H264,width:640,height:360,fps:15,gop:2,kBitRate:NM(640,360,15)},audio:{codec:"AAC",kBitRate:64,sampleRate:48e3,channels:2,AACProfile:Ba.LC},layout:{regions:[],appData:"",backgroundColor:"#000000"}});function NM(A,I,g){return A*I<=288e3?g<=15?800:1200:A*I<=864e3?g<=15?1200:1800:A*I<=1152e3?g<=15?1600:2400:A*I<=2592e3?g<=15?2500:3750:g<=15?3300:5e3}function ZM(A){if(typeof A!="string"||!/^rtmps?:\/\//.test(A))throw new U(m.INVALID_PARAMS,"Invalid rtmp address")}function KM(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(A==null||!A.length)throw new U(m.INVALID_PARAMS,"regions should not be empty.");for(const I of A){if(typeof I.userId!="string")throw new U(m.INVALID_PARAMS,"region.userId(".concat(I.userId,") should be a string."));if(dC(I.userId),typeof I.isScreenStream!="boolean")throw new U(m.INVALID_PARAMS,"region.isScreenStream(".concat(I.isScreenStream,") should be a boolean."))}}function JM(A,I){var g,C;const Q=(s,v)=>{const r=s.reduce((a,c)=>a==null?void 0:a[c],I),n=s.reduce((a,c)=>a==null?void 0:a[c],pM());return r&&v(r)?r:n},B=s=>s%2==0?s:s+1,E=B(Q(["video","width"],s=>s>=2&&s<=1920)),i=B(Q(["video","height"],s=>s>=2&&s<=1920)),e=Q(["video","fps"],s=>s>=1&&s<=60),o=((g=I.video)===null||g===void 0?void 0:g.kBitRate)||0,t=Q(["audio","sampleRate"],s=>!![32e3,44100,48e3].find(v=>v===s||v/1e3===s));return{type:"transcode",action:A,transcodeMeta:{transcode:{url:I.url},control:{protocol:"2.0"},audio:{codec:Q(["audio","codec"],s=>s==="AAC"),bitRate:1e3*Q(["audio","kBitRate"],s=>s>=32&&s<=192),sampleRate:t<100?1e3*t:t,channels:Q(["audio","channels"],s=>[1,2].includes(s)),profile:Q(["audio","AACProfile"],s=>[Ba.LC,Ba.HEv1,Ba.HEv2].includes(s))},video:{codec:Q(["video","codec"],s=>["H264","H265"].includes(s)),fps:e,gop:Q(["video","gop"],s=>s>=1&&s<=5)*e,bitRate:1e3*(o>=16&&o<=1e4?o:NM(E,i,e)),width:E,height:i},layout:{canvas:{bgnd:Q(["layout","backgroundColor"],s=>/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(s))},regions:((C=I.layout)===null||C===void 0||(C=C.regions)===null||C===void 0?void 0:C.map(s=>({alpha:!s.alpha||Number(s.alpha)>1||Number(s.alpha)<=0?1:Number(s.alpha),uid:s.userId,zorder:!s.zorder||Number(s.zorder)<0||Number(s.zorder)>100?0:Number(s.zorder),x:!s.x||Number(s.x)>=1||Number(s.x)<0?0:Number(s.x),y:!s.y||Number(s.y)>=1||Number(s.y)<0?0:Number(s.y),w:!s.w||Number(s.w)>1||Number(s.w)<=0?1:Number(s.w),h:!s.h||Number(s.h)>1||Number(s.h)<=0?1:Number(s.h),renderMode:s.renderMode&&[1,2,3].includes(s.renderMode)?s.renderMode:1,contentControl:s.contentControl&&[0,1,2].includes(s.contentControl)?s.contentControl:0,screen:!!s.isScreenStream})))||[],app_data:Q(["layout","appData"],s=>typeof s=="string")}}}}function duA(A){var I;ZM(A.url),KM((I=A.layout)===null||I===void 0?void 0:I.regions)}function huA(A){var I;A.url&&ZM(A.url),KM((I=A.layout)===null||I===void 0?void 0:I.regions)}function DuA(A){return JM("started",A)}function uuA(A){return JM("layoutChanged",A)}const Pt={getDefaultValue:pM,checkStartParams:duA,checkUpdateParams:huA,getStartParams:DuA,getUpdateParams:uuA};let du;const buA=A=>{du&&clearTimeout(du),du=setTimeout(()=>{for(const[I,g]of A)I!=null&&I.startsWith("mux")&&g.forEach(C=>{var Q;(Q=C.audioTrack)===null||Q===void 0||Q.pause()});for(const[I,g]of A)I!=null&&I.startsWith("mux")&&g.forEach(C=>{var Q;(Q=C.audioTrack)===null||Q===void 0||Q.play()})},2e3)};var yuA=yA,wuA=uv,muA=m0;yuA({target:"Object",stat:!0},{fromEntries:function(A){var I={};return wuA(A,function(g,C){muA(I,g,C)},{AS_ENTRIES:!0}),I}});var GuA=pC,RuA=GuA.Object.fromEntries,LuA=RuA,SuA=LuA,TuA=SuA,UuA=TuA,FuA=UuA,YuA=FuA,kuA=YuA,puA=kuA,Bo=CI(puA);const NuA=["ele","fakeEle"],ZuA=["orgTrack","mediaTrack","preprocessingTrack"],KuA=["orgTrack","mediaTrack","preprocessingTrack"],Tk=["currentTime","duration","ended","error","muted","networkState","paused","readyState","seekable","sinkId","src","volume"],JuA=["currentTime","sampleRate","state","baseLatency","outputLatency","sinkId"],Pl=["contentHint","enabled","id","kind","label","muted","readyState"],WuA=["currentDirection","direction","mid","stopped"];let QB;async function VuA(A){const I=Date.now();let g=[];A._ctx.handler&&A._ctx.handler._peerConnection&&(g=await A._ctx.handler._peerConnection.getStats());const C=[];return g.forEach(Q=>{C.push(Q)}),{timestamp:I,stats:C}}function Uk(A){const I={};if(A instanceof MediaStream){I.id=A.id,I.active=A.active;const g=A.getTracks();I.tracks=g.map(C=>Bo(Pl.map(Q=>[Q,C[Q]])))}return I}async function zuA(A){const I=Date.now(),g=[];var C;A._videoPlayer&&g.push({userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,ele:A._videoPlayer._videoDom}),A._screenPlayer&&g.push({userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,ele:A._screenPlayer._videoDom}),A._remoteVideoPlayer&&A._remoteVideoPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"video",isScreen:!1,isPublic:!1,ele:B?B._videoDom:void 0})}),A._remoteScreenPlayer&&((C=A._remoteScreenPlayer)===null||C===void 0||C.forEach((B,E)=>{g.push({userId:E,mediaType:"video",isScreen:!0,isPublic:!1,ele:B?B._videoDom:void 0})})),A._remoteAudioPlayer&&A._remoteAudioPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"audio",isScreen:!1,isPublic:!1,ele:B?B._audioDom:void 0,fakeEle:B?B._fakeAudioDom:void 0})}),A._remoteScreenAudioPlayer&&A._remoteScreenAudioPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"audio",isScreen:!0,isPublic:!1,ele:B?B._audioDom:void 0,fakeEle:B?B._fakeAudioDom:void 0})}),A._publicStreamVideoPlayer&&A._publicStreamVideoPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"video",isScreen:!1,isPublic:!0,ele:B?B._videoDom:void 0})}),A._publicStreamAudioPlayer&&A._publicStreamAudioPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"audio",isScreen:!1,isPublic:!0,ele:B?B._audioDom:void 0,fakeEle:B?B._fakeAudioDom:void 0})}),A._localVideoTrack&&A._localVideoTrack.videoPlayers&&A._localVideoTrack.videoPlayers.forEach((B,E)=>{g.push({playerId:E.toString(),userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,ele:B._videoDom})}),A._localScreenTrack&&A._localScreenTrack.videoPlayers&&A._localScreenTrack.videoPlayers.forEach((B,E)=>{g.push({playerId:E.toString(),userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,ele:B._videoDom})}),A._room&&A._room._remoteStreams&&A._room._remoteStreams.forEach((B,E)=>{B.forEach(i=>{if(i.audioTrack){const e=i.audioTrack._audioPlayer;g.push({userId:E,mediaType:"audio",isScreen:i.isScreen,isPublic:!1,ele:e?e._audioDom:void 0,fakeEle:e?e._fakeAudioDom:void 0})}i.videoTrack&&i.videoTrack.videoPlayers&&i.videoTrack.videoPlayers.forEach((e,o)=>{g.push({playerId:o.toString(),userId:E,mediaType:"video",isScreen:i.isScreen,isPublic:!1,ele:e?e._videoDom:void 0})})})});let Q=A._publicStreamManager;return Q||(Q=A._outsideRoom),Q&&Q.remoteStreams&&Q.remoteStreams.forEach((B,E)=>{if(B.audioTrack){const i=B.audioTrack._audioPlayer;g.push({userId:E,mediaType:"audio",isScreen:!1,isPublic:!0,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}B.videoTrack&&B.videoTrack.videoPlayers&&B.videoTrack.videoPlayers.forEach((i,e)=>{g.push({playerId:e.toString(),userId:E,mediaType:"video",isScreen:!1,isPublic:!0,ele:i?i._videoDom:void 0})})}),A&&A._room&&A._room._virtualStreams&&A._room._virtualStreams.forEach((B,E)=>{if(B.audioTrack){const i=B.audioTrack._audioPlayer;g.push({userId:"virtualStream-".concat(E),mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!0,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}}),{timestamp:I,elementStats:g.map(B=>{let{ele:E,fakeEle:i}=B,e=ve(B,NuA);const o=R({ele:R({srcObject:E?Uk(E.srcObject):void 0},Bo(Tk.map(t=>[t,E[t]])))},e);return i&&(o.fakeEle=R({srcObject:Uk(i.srcObject)},Bo(Tk.map(t=>[t,i[t]])))),o})}}function WM(A){const I=[];let g=[];A&&A._room&&A._room._remoteStreams&&(g=A._room._remoteStreams.values());for(const C of g)C.forEach(Q=>{Q.audioTrack&&I.push(Q.audioTrack)});A._localAudioTrack&&I.push(A._localAudioTrack),A._localScreenAudioTrack&&I.push(A._localScreenAudioTrack);for(const C of I){if(C._audioLevelFetcher&&C._audioLevelFetcher._ctx)return C._audioLevelFetcher._ctx;if(C._ac)return C._ac;if(C._audioFetchMap&&Array.from(C._audioFetchMap.values()).length)return Array.from(C._audioFetchMap.values())[0]._ctx;if(C._ap&&C._ap._ac)return C._ap._ac}return null}async function MuA(A){const I=Date.now(),g=WM(A),C={};return g?(JuA.forEach(Q=>{C[Q]=g[Q]}),{timestamp:I,acState:C}):{timestamp:I,acState:void 0}}function VM(A){const I=[];A._localAudioTrack&&I.push({userId:"__local__",mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!1,orgTrack:A._localAudioTrack._originTrack,mediaTrack:A._localAudioTrack._mediaTrack,preprocessingTrack:A._localAudioTrack._preProcessingTrack}),A._localScreenAudioTrack&&I.push({userId:"__local__",mediaType:"audio",isScreen:!0,isPublic:!1,isVirtual:!1,orgTrack:A._localScreenAudioTrack._originTrack,mediaTrack:A._localScreenAudioTrack._mediaTrack,preprocessingTrack:A._localScreenAudioTrack._preProcessingTrack}),A._localVideoTrack&&I.push({userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,isVirtual:!1,orgTrack:A._localVideoTrack._originTrack,mediaTrack:A._localVideoTrack._mediaTrack,preprocessingTrack:A._localVideoTrack._preProcessingTrack}),A._localScreenVideoTrack&&I.push({userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,isVirtual:!1,orgTrack:A._localScreenVideoTrack._originTrack,mediaTrack:A._localScreenVideoTrack._mediaTrack,preprocessingTrack:A._localScreenVideoTrack._preProcessingTrack}),A._room&&A._room._remoteStreams&&A._room._remoteStreams.forEach((C,Q)=>{C.forEach(B=>{B.audioTrack&&I.push({userId:Q,mediaType:"audio",isScreen:B.isScreen,isPublic:!1,isVirtual:!1,orgTrack:B.audioTrack._originTrack,mediaTrack:B.audioTrack._mediaTrack}),B.videoTrack&&I.push({userId:Q,mediaType:"video",isScreen:B.isScreen,isPublic:!1,isVirtual:!1,orgTrack:B.videoTrack._originTrack,mediaTrack:B.videoTrack._mediaTrack})})});let g=A._publicStreamManager;return g||(g=A._outsideRoom),g&&g.remoteStreams&&g.remoteStreams.forEach((C,Q)=>{C.audioTrack&&I.push({userId:Q,mediaType:"audio",isScreen:C.isScreen,isPublic:!0,isVirtual:!1,orgTrack:C.audioTrack._originTrack,mediaTrack:C.audioTrack._mediaTrack}),C.videoTrack&&I.push({userId:Q,mediaType:"video",isScreen:C.isScreen,isPublic:!0,isVirtual:!1,orgTrack:C.videoTrack._originTrack,mediaTrack:C.videoTrack._mediaTrack})}),A&&A._room&&A._room._virtualStreams&&A._room._virtualStreams.forEach((C,Q)=>{C.audioTrack&&I.push({userId:"virtualStream-".concat(Q),mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!0,orgTrack:C.audioTrack._originTrack,mediaTrack:C.audioTrack._mediaTrack}),C.videoTrack&&I.push({userId:"virtualStream-".concat(Q),mediaType:"video",isScreen:!1,isPublic:!1,isVirtual:!0,orgTrack:C.videoTrack._originTrack,mediaTrack:C.videoTrack._mediaTrack})}),I}async function hu(A,I){if(!A)return;const g=new MediaStream;g.addTrack(A);const C=I.createMediaStreamSource(g),Q=I.createAnalyser();C.connect(Q),I.state==="suspended"&&(console.warn(I.state),I.resume());const B=new Uint8Array(2048);Q.getByteTimeDomainData(B),await new Promise(o=>{setTimeout(o,50)}),Q.getByteTimeDomainData(B),await new Promise(o=>{setTimeout(o,50)});let E=0;B.forEach(o=>E=Math.max(E,Math.abs(o-128)));const i=E/128*256,e=i>2?i:0;return C.disconnect(),Q.disconnect(),e}async function XuA(A){const I=Date.now();if(QB||(QB=new AudioContext),QB.state==="suspended"&&await new Promise(Q=>{const B=setTimeout(()=>{console.warn("[RTC_AMBULANCE] AudioContext resume failed, try to find one in RTCEngine"),QB=WM(A),QB&&console.warn("[RTC_AMBULANCE] find AudioContext in RTCEngine success"),Q()},1e3);QB.resume().then(()=>{clearTimeout(B),Q()},()=>{clearTimeout(B),QB=null,Q()})}),!QB)return void console.error("[RTC_AMBULANCE] get volume is not supported");const g=VM(A),C=[];return await Promise.all(g.filter(Q=>Q.mediaType==="audio").map(async Q=>{let{orgTrack:B,mediaTrack:E,preprocessingTrack:i}=Q;const e=R({},ve(Q,ZuA));await Promise.all([hu(B,QB).then(o=>{e.orgTrackVolume=o}),hu(E,QB).then(o=>{e.mediaTrackVolume=o}),hu(i,QB).then(o=>{e.preprocessingTrackVolume=o})]),C.push(e)})),{timestamp:I,trackVolumes:C}}async function juA(A){return{timestamp:Date.now(),trackStates:VM(A).map(I=>{let{orgTrack:g,mediaTrack:C,preprocessingTrack:Q}=I,B=ve(I,KuA);return R({orgTrack:g?Bo(Pl.map(E=>[E,g[E]])):void 0,mediaTrack:C?Bo(Pl.map(E=>[E,C[E]])):void 0,preprocessingTrack:Q?Bo(Pl.map(E=>[E,Q[E]])):void 0},B)})}}function Fk(A){if(!A)return;const I={track:A.track?A.track.id:void 0,transport:{state:A.transport?A.transport.state:void 0}};return A.transport&&A.transport.iceTransport&&(I.iceTransport={state:A.transport.iceTransport.state,role:A.transport.iceTransport.role,gatheringState:A.transport.iceTransport.gatheringState,component:A.transport.iceTransport.component}),I}async function fuA(A){const I=Date.now();let g=[];A._ctx._handler&&A._ctx._handler._peerConnection&&(g=A._ctx._handler._peerConnection.getTransceivers());const C=[];return g.forEach(Q=>{const B=R({sender:Fk(Q.sender),receiver:Fk(Q.receiver)},Bo(WuA.map(E=>[E,Q[E]])));C.push(B)}),{timestamp:I,tranceiverStates:C}}async function HuA(A){const I={stats:[],mediaElementStates:[],audioContextStates:[],volumes:[],trackStates:[],tranceiverStates:[]},g=[];return await new Promise(C=>{let Q,B=0;const E=()=>{g.push(VuA(A).then(i=>{I.stats.push(i)}),zuA(A).then(i=>{I.mediaElementStates.push(i)}),MuA(A).then(i=>{I.audioContextStates.push(i)}),XuA(A).then(i=>{I.volumes.push(i)}),juA(A).then(i=>{I.trackStates.push(i)}),fuA(A).then(i=>{I.tranceiverStates.push(i)})),B++,B>=10?Promise.all(g).then(()=>{C()}):(clearTimeout(Q),Q=setTimeout(E,500))};Q=setTimeout(E,500)}),console.log("RTC_AMBULANCE",I),I}class xuA{constructor(){P(this,"containers",new WeakSet)}getContainerById(I){return document.getElementById(I)}registerContainer(I){var g;return typeof I=="string"&&(I=(g=this.getContainerById(I))!==null&&g!==void 0?g:void 0),!(!I||this.containers.has(I))&&(this.containers.add(I),!0)}unregisterContainer(I){var g;return typeof I=="string"&&(I=(g=this.getContainerById(I))!==null&&g!==void 0?g:void 0),!!I&&(this.containers.delete(I),!0)}}const OuA=["videoStats","audioStats"];var Du,quA=Object.defineProperty,_uA=Object.getOwnPropertyDescriptor,f=(A,I,g,C)=>{for(var Q,B=_uA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&quA(I,g,B),B};const Cm=(Du=class extends iQ{constructor(A,I,g){var C;super(),C=this,P(this,"monitor",void 0),P(this,"logger",void 0),P(this,"_room",void 0),P(this,"_wtnStreamManager",void 0),P(this,"_appId",void 0),P(this,"_localImgVideoTrack",void 0),P(this,"_localImgScreenTrack",void 0),P(this,"_localScreenVideoTrack",void 0),P(this,"_localScreenAudioTrack",void 0),P(this,"_tempMixingAudioTrack",void 0),P(this,"_localAudioVolume",100),P(this,"_localScreenAudioVolume",100),P(this,"_remoteAudioVolume",new Map),P(this,"_remoteScreenAudioVolume",new Map),P(this,"_localVideoPlayerConfig",{[F.STREAM_INDEX_MAIN]:new Map,[F.STREAM_INDEX_SCREEN]:new Map}),P(this,"_remoteVideoPlayerConfig",{[F.STREAM_INDEX_MAIN]:new Map,[F.STREAM_INDEX_SCREEN]:new Map}),P(this,"_publicStreamIds",new Map),P(this,"_dummyMainImage",void 0),P(this,"_dummyScreenImage",void 0),P(this,"_trackSourceType",void 0),P(this,"_liveTranscodeConfig",void 0),P(this,"_startCloudProxyTimestamp",void 0),P(this,"_pauseAllSubscribeState",{audio:void 0,video:void 0,resumeAudioStreamIds:{},resumeVideoStreamIds:{}}),P(this,"_audioVolumeIndicationTimer",void 0),P(this,"_dummyMainTimer",void 0),P(this,"_dummyScreenTimer",void 0),P(this,"_audioPropertiesReportTimer",null),P(this,"_mirrorType",GQ.MIRROR_TYPE_RENDER),P(this,"_audioMixingManager",void 0),P(this,"_pubLock",void 0),P(this,"_subLocks",void 0),P(this,"_audioCaptureLock",void 0),P(this,"_videoCaptureLock",void 0),P(this,"_screenCaptureLock",void 0),P(this,"_subScreenLocks",void 0),P(this,"_rtmClient",void 0),P(this,"_messageStatisticsObserver",void 0),P(this,"_waitForNewToken",!1),P(this,"_originIceConfigRequestUrls",void 0),P(this,"_originConfigServerUrls",void 0),P(this,"_originLogServerUrl",void 0),P(this,"_audioDeviceManager",void 0),P(this,"_config",void 0),P(this,"_needClosePreTrack",!1),P(this,"_containerCollisionDetector",new xuA),P(this,"_ctx",void 0),P(this,"_removeDeviceEventHandler",void 0),P(this,"_updateMixAudioTrack",async function(Q){var B;let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:JQ.PLAYOUT_AND_PUBLISH;if(C.logger.info("_updateMixAudioTrack()"),!C._localAudioTrack)return void(Q&&(C._tempMixingAudioTrack={track:Q,type:E}));Q?(C._localAudioTrack.mixType=E,C._localAudioTrack.mixedAudioTrack=Q):(delete C._localAudioTrack.mixType,delete C._localAudioTrack.mixedAudioTrack),await((B=C._room)===null||B===void 0?void 0:B.hasPublished())&&await C._updatePublish(),C._wtnStreamManager._updatePushTrack()}),P(this,"_onVideoDeviceStateChange",Q=>{this.safeEmit(X.onVideoDeviceStateChanged,Q)}),P(this,"_onAudioDeviceStateChange",Q=>{this.safeEmit(X.onAudioDeviceStateChanged,Q)}),P(this,"_onAudioMixingMessage",Q=>{this.safeEmit(X.onAudioMixingStateChanged,Q)}),P(this,"_onAudioMixingAutoplayFailed",Q=>{this.safeEmit(X.onAutoplayFailed,Q)}),this.id=I,this._appId=A,this.monitor=tI(I),this._ctx=new IuA(I,A,g),this._pubLock=new tB("pubLock"),this._subLocks=new Map,this._subScreenLocks=new Map,this._audioCaptureLock=new tB("audioCap"),this._videoCaptureLock=new tB("videoCap"),this._screenCaptureLock=new tB("screenCap"),this._addDeviceEventHandler(),this._audioDeviceManager=new luA(this._ctx),this._addSignalingEventHandler(),this._wtnStreamManager=new Jg(this._ctx),this._addWTNStreamEventHandler(),K0&&(window.__rtc_engine__=this,window["__rtc_engine__".concat(Math.floor(100*Math.random()+1))]=this),this._trackSourceType={video:Wg.VIDEO_SOURCE_TYPE_INTERNAL,screenVideo:Wg.VIDEO_SOURCE_TYPE_INTERNAL,audio:VC.AUDIO_SOURCE_TYPE_INTERNAL,screenAudio:VC.AUDIO_SOURCE_TYPE_INTERNAL},this._config=g,this._rtmClient=new vuA(this._ctx),this._handleRTMClient(this._rtmClient),this._handleAudioDeviceManager(),this._messageStatisticsObserver=new UrA(I),this.logger=new uA("Engine",0,I),KI.createRTSMsgReportor(this.id),Cm.hasReportNativeDetector||(this.monitor.reportLongString("NativeDetector",JSON.stringify(J0)),Cm.hasReportNativeDetector=!0)}get appId(){return this._appId}set appId(A){this._appId=A}async updateToken(A){if(this.logger.info("updateToken()","token: %s",A),OA(A,"token"),this._room&&this._waitForNewToken)return this._waitForNewToken=!1,this._room.config.token=A,await this._join(this._room);if(!this._room)throw new U(m.UPDATE_TOKEN_BEFORE_JOIN,"update token before join room");await this._room.updateToken(A);const I=[];if(this._room.config.tokenPublishPrivilegeExpired&&this._room.config.isAutoPublish&&this._ctx.visibility&&I.push(this._updatePublish({mediaType:iA.AUDIO_AND_VIDEO})),this._room.config.tokenSubscribePrivilegeExpired){const{isAutoSubscribeAudio:g,isAutoSubscribeVideo:C}=this._room.config,Q=(g?iA.AUDIO:0)|(C?iA.VIDEO:0);Q&&I.push(this._triedResumeAllRemoteStreams(Q,!0))}await Promise.allSettled(I)}async setVideoCaptureDevice(A){if(this.logger.info("setVideoCaptureDevice()","deviceId: %s",A),OA(A,"deviceId"),!this._localVideoTrack)return void this._ctx.videoProfile.setCaptureDeviceId(A);if(cR&&EE&&this._localVideoTrack.originTrack.getSettings().deviceId===A)return;const I=this._ctx.videoProfile.getCaptureConfig(A);var g;EE&&xi&&YQ>=85&&YQ<=91&&((g=this.localVideoTrack)===null||g===void 0||g.removePlayerTrack()),this._needClosePreTrack=this._needClosePreTrack||zPA,this._needClosePreTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),delete this._localVideoTrack),this.logger.info("setVideoCaptureDevice()","start createCameraVideoTrack...");const C=await jc(this._ctx,I).catch(B=>{if(this._localVideoTrack&&!this._localVideoTrack.dummy)return this.logger.warn("setVideoCaptureDevice()","createCameraVideoTrack failed, stop pre VideoTrack."),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),delete this._localVideoTrack,jc(this._ctx,I).then(E=>(this._needClosePreTrack=!0,E)).catch(async()=>{this.logger.error("setVideoCaptureDevice()","createCameraVideoTrack failed, rollback.");const E=await jc(this._ctx);throw this._switchTrack(E),B});throw B});this.logger.success("setVideoCaptureDevice()","createCameraVideoTrack success."),this._ctx.videoProfile.setCaptureDeviceId(A),this._localVideoTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy());const Q=this._ctx.videoProfile.getContentHint();Q&&C.setContentHint(Q),await this._switchTrack(C)}async setAudioCaptureDevice(A){var I;if(this.logger.info("setAudioCaptureDevice()","deviceId: %s",A),OA(A,"deviceId"),this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:A}}),!this._localAudioTrack)return;this._localAudioTrack.destroy(),this._removeLocalTrackEvents(this._localAudioTrack);const g=await Jw(this._ctx,this._ctx.audioProfileManager.getConstraints());this._initLocalTrackEvents(g),this._localAudioTrack=g,this._localAudioTrack.setVolume(this._localAudioVolume),this._wtnStreamManager._updatePushTrack(),this._room&&(I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio&&await this._updatePublish()}_addDeviceEventHandler(){Xg.on(X.onVideoDeviceStateChanged,this._onVideoDeviceStateChange),Xg.on(X.onAudioDeviceStateChanged,this._onAudioDeviceStateChange),this._removeDeviceEventHandler=()=>{Xg.off(X.onVideoDeviceStateChanged,this._onVideoDeviceStateChange),Xg.off(X.onAudioDeviceStateChanged,this._onAudioDeviceStateChange)}}_addSignalingEventHandler(){const A=this._ctx.signalingManager;A.on(HI.ON_CONNECTION_STATE_CHANGE,this._onConnectionStateChange.bind(this)),A.on(HI.ON_RECONNECT_FAILED,()=>{this.safeEmit(X.onError,{errorCode:m.RECONNECT_FAILED})}),A.on(HI.CONNECT_WITH_TCP,()=>{this.safeEmit(X.onIceConnectWithTcp)})}_addWTNStreamEventHandler(){this._wtnStreamManager.__onResubscribe=A=>{const I=A.stream;I&&(I.audioTrack&&this._updateAudioPlayerState(I),I.videoTrack&&this._updateVideoPlayerState(I))},this._wtnStreamManager.__onRemoteStreamStats=A=>{this.safeEmit(X.onPublicStreamStats,A)},this._wtnStreamManager.__onSEIMessageReceived=A=>{this.safeEmit(X.onPublicStreamSEIMessageReceived,A)},this._wtnStreamManager.__onPlayerEvents=(A,I,g)=>{this._initPlayerEvents(A,I,g)}}_addHandlerEventHandler(){var A,I,g,C,Q,B,E,i,e,o,t,s,v,r,n,a,c,d,l,h,D,u,w,b,y,S,L,V,z,EA,eA,K,p,J,Y,N,q,IA,gA,vA,bA,nA;(A=this._room)===null||A===void 0||A.on(x.ON_ADD_STREAM,this._onAddStream.bind(this)),(I=this._room)===null||I===void 0||I.on(x.ON_REMOVE_STREAM,this._onRemoveStream.bind(this)),(g=this._room)===null||g===void 0||g.on(x.USER_CONNECTION,this._onUserConnection.bind(this)),(C=this._room)===null||C===void 0||C.on($.ON_USER_LEAVE,this._onUserLeave.bind(this)),(Q=this._room)===null||Q===void 0||Q.on($.ON_ROOM_ERROR,this._onRoomError.bind(this)),(B=this._room)===null||B===void 0||B.on($.ON_NETWORK_QUALITY,this._onNetworkQuality.bind(this)),(E=this._room)===null||E===void 0||E.on(x.ON_CUSTOM_MESSAGE,this._onCustomMessage.bind(this)),(i=this._room)===null||i===void 0||i.on(x.USER_MESSAGE_RECEIVED,this._onUserMessageReceived.bind(this)),(e=this._room)===null||e===void 0||e.on(x.USER_BINARY_MESSAGE_RECEIVED,this._onUserBinaryMessageReceived.bind(this)),(o=this._room)===null||o===void 0||o.on(x.ON_USER_TOKEN_WILL_EXPIRE,this._onUserTokenWillExpire.bind(this)),(t=this._room)===null||t===void 0||t.on(x.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE,this._onUserTokenPublishPrivilegeWillExpire.bind(this)),(s=this._room)===null||s===void 0||s.on(x.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED,this._onUserTokenPublishPrivilegeDidExpired.bind(this)),(v=this._room)===null||v===void 0||v.on(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE,this._onUserTokenSubscribePrivilegeWillExpire.bind(this)),(r=this._room)===null||r===void 0||r.on(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED,this._onUserTokenSubscribePrivilegeDidExpired.bind(this)),(n=this._room)===null||n===void 0||n.on(x.POST_PROCESSING_MESSAGE,H=>{var CA;((CA=H)==null?void 0:CA.protocol)==="2.0"?this._onStreamMixingEvent({error:H.error,event:H.eventType,message:H.message}):H.type==="publicStreamCallback"?this._onPushPublicStreamResult(H):H.type==="transcodeStatusCallback"&&this._onLiveTranscodingResult(H)}),(a=this._room)===null||a===void 0||a.on(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,H=>this.safeEmit(X.onVendorConnectionStateChanged,H)),(c=this._room)===null||c===void 0||c.on($.RESUBSCRIBE,this._onResubscribe.bind(this)),(d=this._room)===null||d===void 0||d.on($.SUBSCRIBE_PUSH_TRACK,this._onSubscribePushTrack.bind(this)),(l=this._room)===null||l===void 0||l.on($.REMOVE_PUSH_TRACK,this._onRemovePushTrack.bind(this)),(h=this._room)===null||h===void 0||h.on($.ON_PUBLISH_RESULT,H=>{var CA,LA,UA;H.state===qB.PUBLISH_SUCC&&((LA=this._room)===null||LA===void 0||LA.config.setTokenPublishPrivilegeExpired(!1)),H.state===qB.PUBLISH_FAIL&&H.errorCode===m.TOKEN_NO_PUBLISH_PERMISSION&&((UA=this._room)===null||UA===void 0||UA.config.setTokenPublishPrivilegeExpired(!0));const xA=!(H.retry||(CA=this._room)===null||CA===void 0||!CA.config.isAutoPublish);xA&&this.safeEmit(X.onAutoPublishResult,H),this.safeEmit(X.onPublishResult,{isScreen:H.isScreen,isAutoPublish:xA,errorCode:H.errorCode})}),(D=this._room)===null||D===void 0||D.on($.ON_SUBSCRIBE_RESULT,H=>{var CA;H.state===Ds.SUBSCRIBE_SUCC&&((CA=this._room)===null||CA===void 0||CA.config.setTokenSubscribePrivilegeExpired(!1)),H.state===Ds.SUBSCRIBE_FAIL&&H.errorCode===m.TOKEN_NO_SUBSCRIBE_PERMISSION&&this._handleLoseSubscribePrivilege(),this.safeEmit(X.onSubscribeResult,{userId:H.userId,isScreen:H.isScreen,isAutoSubscribe:!1,errorCode:H.errorCode})}),(u=this._room)===null||u===void 0||u.on($.ON_REMOTE_STREAM_STATS,H=>{this.safeEmit(X.onRemoteStreamStats,H)}),(w=this._room)===null||w===void 0||w.on($.ON_LOCAL_STREAM_STATS,H=>{this.safeEmit(X.onLocalStreamStats,H)}),(b=this._room)===null||b===void 0||b.on($.ON_SUBTITLE_STATE_CHANGED,H=>{this.safeEmit(X.onSubtitleStateChanged,H)}),(y=this._room)===null||y===void 0||y.on($.ON_SUBTITLE_MESSAGE_RECEIVED,H=>{this.safeEmit(X.onSubtitleMessageReceived,H)}),(S=this._room)===null||S===void 0||S.on($.ON_USER_PUBLISH_STATE_CHANGE,this._onUserPublishStateChange.bind(this)),(L=this._room)===null||L===void 0||L.on($.ON_USER_START_AUDIO_CAPTURE,(H,CA)=>{let{userId:LA}=H;this._updateAudioPlayerState(CA),this.safeEmit(X.onUserStartAudioCapture,{userId:LA})}),(V=this._room)===null||V===void 0||V.on($.ON_USER_STOP_AUDIO_CAPTURE,H=>{let{userId:CA}=H;this.safeEmit(X.onUserStopAudioCapture,{userId:CA})}),(z=this._room)===null||z===void 0||z.on($.ON_USER_START_VIDEO_CAPTURE,H=>{let{userId:CA}=H;this.safeEmit(X.onUserStartVideoCapture,{userId:CA})}),(EA=this._room)===null||EA===void 0||EA.on($.ON_USER_STOP_VIDEO_CAPTURE,H=>{let{userId:CA}=H;this.safeEmit(X.onUserStopVideoCapture,{userId:CA})}),(eA=this._room)===null||eA===void 0||eA.on($.ON_SEI_MESSAGED_RECEIVED,H=>{this.safeEmit(X.onSEIMessageReceived,H)}),(K=this._room)===null||K===void 0||K.on($.ON_REMOTE_VIDEO_SIZE_CHANGED,(H,CA)=>{this.safeEmit(X.onRemoteVideoSizeChanged,H,CA)}),(p=this._room)===null||p===void 0||p.on($.ON_SIMULCAST_SUBSCRIBE_FALLBACK,H=>this.safeEmit(X.onSimulcastSubscribeFallback,H)),(J=this._room)===null||J===void 0||J.on($.ON_VIDEO_STREAM_BANNED,H=>{this.safeEmit(X.onVideoStreamBanned,{uid:H.uid,banned:H.banned})}),(Y=this._room)===null||Y===void 0||Y.on($.ON_AUDIO_STREAM_BANNED,H=>{this.safeEmit(X.onAudioStreamBanned,{uid:H.uid,banned:H.banned})}),(N=this._room)===null||N===void 0||N.on($.ON_FORWARD_STREAM_ERROR,H=>{this.safeEmit(X.onForwardStreamError,H)}),(q=this._room)===null||q===void 0||q.on($.ON_REJOIN_WITH_TCP,()=>{this.safeEmit(X.onRejoinWithTcp)}),(IA=this._room)===null||IA===void 0||IA.on($.PUB_RETRY,H=>{this.safeEmit(X.onPublishRetry,H)}),(gA=this._room)===null||gA===void 0||gA.on($.SUB_RETRY,H=>{this.safeEmit(X.onSubscribeRetry,H)}),(vA=this._room)===null||vA===void 0||vA.on($.VIDEO_TYPE_CHANGE,H=>{this.safeEmit(X.onSEIStreamUpdate,H)}),(bA=this._room)===null||bA===void 0||bA.on($.JOIN_SUCCESS,H=>{this._ctx.isPreConnection||this.safeEmit(X.onConnectionStateChanged,{state:H?XA.CONNECTION_STATE_RECONNECTED:XA.CONNECTION_STATE_CONNECTED})}),(nA=this._room)===null||nA===void 0||nA.on($.UPDATE_PUBLISH,H=>{let{streamIndex:CA}=H;CA===F.STREAM_INDEX_MAIN?this._updatePublish():CA===F.STREAM_INDEX_SCREEN&&this._updateScreenPublish()})}safeEmit(A){for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;C{this.logger.error("_join","_updatePublish failed",C)}):(this.safeEmit(X.onAutoPublishResult,{isScreen:!1,state:qB.PUBLISH_FAIL}),this.safeEmit(X.onPublishResult,{isScreen:!1,isAutoPublish:!0,errorCode:m.NO_PUBLISH_PERMISSION}))),this.monitor.set({rtc_vid:A.config.rtcVid}),KI.setRoomId(this.id,A.config.roomId),KI.setUserId(this.id,A.config.userId),g}catch(g){throw g.code===m.INVALID_TOKEN?this._waitForNewToken=!0:(A.destroy(),this._room===A&&delete this._room),g}}async leaveRoom(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("leaveRoom()");const I=this._room;delete this._room,this._ctx.resetPubSubLock(YM.LEAVE),this._ctx.callId=void 0,A?await(I==null?void 0:I.leave(A)):I==null||I.leave(A).catch(),this._removeHandlerEventHandler(),this._subLocks=new Map,this._subScreenLocks=new Map,this._ctx.audioProfileManager.setRoomId(),this._liveTranscodeConfig&&this.stopLiveTranscoding(),I==null||I.destroy(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(g=>{g.forEach(C=>{const{player:Q,renderDom:B}=C;Q==null||Q.destroy(),this._containerCollisionDetector.unregisterContainer(B)})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].clear(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(g=>{g.forEach(C=>{const{player:Q,renderDom:B}=C;Q==null||Q.destroy(),this._containerCollisionDetector.unregisterContainer(B)})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].clear(),this._publicStreamIds=new Map,KI.setRoomId(this.id,""),KI.setUserId(this.id,""),this.monitor.set({rtc_session_id:"",rtc_vid:""})}_destroyLocalTrack(){this._localAudioTrack&&(this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy(),this._localAudioTrack=void 0),this._localVideoTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),this._localVideoTrack=void 0),this._localScreenAudioTrack&&(this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy(),this._localScreenAudioTrack=void 0),this._localScreenVideoTrack&&(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy(),this._localScreenVideoTrack=void 0),this._localImgVideoTrack&&(this._localImgVideoTrack.stop(),this._localImgVideoTrack=void 0),this._localImgScreenTrack&&(this._localImgScreenTrack.stop(),this._localImgScreenTrack=void 0)}destroy(){var A,I,g;this.logger.info("destroy()"),this.removeAllListeners(),this._removeHandlerEventHandler(),(A=this._removeDeviceEventHandler)===null||A===void 0||A.call(this),(I=this._room)===null||I===void 0||I.destroy(),this._room=void 0,this._subLocks=new Map,this._subScreenLocks=new Map,this._audioCaptureLock=new tB("audioCap"),this._videoCaptureLock=new tB("videoCap"),this._screenCaptureLock=new tB("screenCap"),this._pauseAllSubscribeState={audio:void 0,video:void 0,resumeVideoStreamIds:{},resumeAudioStreamIds:{}},this._messageStatisticsObserver.destroy(),this.monitor.destroy(),KI.destroyRTSMsgReportor(this.id),clearInterval(this._audioVolumeIndicationTimer),clearInterval(this._dummyMainTimer),clearInterval(this._dummyScreenTimer),this._audioVolumeIndicationTimer=void 0,this._stopAudioPropertiesReport(),this._destroyLocalTrack(),(g=this._audioMixingManager)===null||g===void 0||g.destroy(),this._rtmClient.destroy(),this._wtnStreamManager.destroy(),this._publicStreamIds=new Map,this._audioDeviceManager.destroy(),this._ctx.destroy(),this._localAudioVolume=100,this._localScreenAudioVolume=100,this._remoteAudioVolume.clear(),this._remoteScreenAudioVolume.clear(),this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(C=>{C.player.destroy()}),this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].clear(),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(C=>{C.player.destroy()}),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].clear(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(C=>{C.forEach(Q=>{Q.player.destroy()})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].clear(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(C=>{C.forEach(Q=>{Q.player.destroy()})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].clear()}async publishStream(A){this.logger.info("publishStream()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),gI(A)&&!this._localVideoTrack&&this._localImgVideoTrack&&(this._localVideoTrack=await v9A(this._ctx,this._localImgVideoTrack)),await this._updatePublish({mediaType:A},!0)}async unpublishStream(A,I){var g;if(this.logger.info("unpublishStream()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),I)return(g=this._room)===null||g===void 0?void 0:g.unpublish();await this._updatePublish({mediaType:A,pubState:wC.UNPUB},!0)}async publishScreen(A){this.logger.info("publishScreen()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom();try{gI(A)&&!this._localScreenVideoTrack&&this._localImgScreenTrack&&(this._localScreenVideoTrack=await r9A(this._ctx,this._localImgScreenTrack)),await this._updateScreenPublish({mediaType:A,pubState:wC.PUB})}catch(I){throw I instanceof U?I:new U(m.UNEXPECTED_ERROR,"unexpected error",I)}}async unpublishScreen(A){this.logger.info("unpublishScreen()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),await this._updateScreenPublish({mediaType:A,pubState:wC.UNPUB})}async subscribeStream(A,I){return this.logger.info("subscribeStream()","userId: %o, mediaType: %o",A,I),this._subscribe(!1,A,I)}async _subscribe(A,I,g){var C;const Q=g;if(g===iA.AUDIO&&(C=this._room)!==null&&C!==void 0&&C.config.isMultiChatMode())return void this.logger.warn("subscribeStream()","due to multiChatMode return");const B=this._room.remoteStreams.get(I),E=B==null?void 0:B.find(a=>a.isScreen===A);if(!E)throw new U(m.STREAM_NOT_EXIST,"stream not exist");const i=this._pauseAllSubscribeState.audio,e=this._pauseAllSubscribeState.video;this._pauseAllSubscribeState.audio&&(g-=g&iA.AUDIO),this._pauseAllSubscribeState.video&&(g-=g&iA.VIDEO),this.logger.warn("subscribeStream()","due to pauseAll mediaType: %o",g);const{hasSubscribed:o}=E;E.originalMediaType=g;try{var t;await this._room.subscribe(E,g),$I(g)&&this._updateAudioPlayerState(E),gI(g)&&this._updateVideoPlayerState(E);let a=0,c=0;if(i!==this._pauseAllSubscribeState.audio&&(this._pauseAllSubscribeState.audio?a|=iA.AUDIO:c|=iA.AUDIO),e!==this._pauseAllSubscribeState.video&&(this._pauseAllSubscribeState.video?a|=iA.VIDEO:c|=iA.VIDEO),a&&this.pauseAllSubscribedStream(a),c&&this.resumeAllSubscribedStream(c),$I(Q)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId]=E.streamId),gI(Q)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId]=E.streamId),E.audioTrack||E.videoTrack){var s,v;const d=!(A||!((s=this._room)!==null&&s!==void 0&&s.config.isAutoSubscribeAudio||(v=this._room)!==null&&v!==void 0&&v.config.isAutoSubscribeVideo)),l={userId:I,isScreen:!1,state:Ds.SUBSCRIBE_SUCC};d&&this.safeEmit(X.onAutoSubscribeResult,l),this.safeEmit(X.onSubscribeResult,{userId:I,isScreen:A,isAutoSubscribe:d})}var r,n;((t=this._room)===null||t===void 0||!t.config.isMultiChatMode())&&!o&&$I(g)&&E.hasAudio&&((r=E.observer)===null||r===void 0||r.setSubscribeAudio(!0)),!o&&gI(g)&&E.hasVideo&&((n=E.observer)===null||n===void 0||n.setSubscribeVideo(!0))}catch(a){throw a instanceof U&&a.code===m.TOKEN_NO_SUBSCRIBE_PERMISSION&&this._handleLoseSubscribePrivilege(),a}}async _handleLoseSubscribePrivilege(){var A;(A=this._room)===null||A===void 0||A.config.setTokenSubscribePrivilegeExpired(!0);try{await this._unSubscribeAllRemoteStreams()}catch{}}async unsubscribeStream(A,I){return this.logger.info("unsubscribeStream()","userId: %o, mediaType: %o",A,I),this._unsubscribe(!1,A,I)}async subscribeScreen(A,I){return this.logger.info("subscribeScreen() userId: %o, mediaType: %o",A,I),this._subscribe(!0,A,I)}async unsubscribeScreen(A,I){return this.logger.info("unsubscribeScreen() userId: %o, mediaType: %o",A,I),this._unsubscribe(!0,A,I)}_unsubscribe(A,I,g,C){var Q;if(g===iA.AUDIO&&(Q=this._room)!==null&&Q!==void 0&&Q.config.isMultiChatMode())return void this.logger.warn("subscribeStream()","due to multiChatMode return");const B=this._room.remoteStreams.get(I),E=B==null?void 0:B.find(e=>e.isScreen===A);if(!E)throw new U(m.STREAM_NOT_EXIST,"stream not exist");var i;return EE&&YQ&&YQ>=85&&YQ<=91&&g!==iA.AUDIO&&((i=E.videoTrack)===null||i===void 0||i.stopAll()),this._room.unsubscribe(E,g).then(()=>{C||($I(g)&&delete this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId],gI(g)&&delete this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId])})}async setRemoteVideoConfig(A,I){var g;return this.logger.info("setRemoteVideoConfig() userId: %o, remoteVideoConfig: %o",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("old"),dC(A),oaA(I),this._ctx.videoProfile.setRemoteUserVideoConfig(A,I),(g=this._room)===null||g===void 0?void 0:g.updateSubVideoConfig(A).then(()=>{})}async setRemoteSimulcastStreamType(A,I){var g;this.logger.info("setRemoteSimulcastStreamType()","userId: %s, streamType: %s",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("new"),dC(A),MA(I,"SimulcastStreamType",[Si.VIDEO_STREAM_HIGH,Si.VIDEO_STREAM_MID,Si.VIDEO_STREAM_LOW]),this._ctx.videoProfile.setRemoteUserVideoConfig(A,I),await((g=this._room)===null||g===void 0?void 0:g.updateSubVideoConfig(A))}async startVideoCapture(A){var I,g;if(this.logger.info("startVideoCapture()","deviceId: %s",A),kQ(A)||OA(A,"deviceId"),A&&this._ctx.videoProfile.setCaptureDeviceId(A),this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy)throw new U(m.REPEAT_CAPTURE,"Has already capture");let C={};const Q=await jc(this._ctx),B=this._ctx.videoProfile.getContentHint();B&&Q.setContentHint(B),this._initLocalTrackEvents(Q),this._localVideoTrack=Q,this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(e=>{var o,t;(o=this._localVideoTrack)===null||o===void 0||o.setPlayer(e,this._mirrorType,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this))}),C=Q.originTrack.getSettings();const E={width:C.width,height:C.height};if(this._localVideoTrack.resolution=E,this._ctx.videoProfile.__autoResetVideoEncoderConfig(C),setTimeout(()=>this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:F.STREAM_INDEX_MAIN,info:E})),this._ctx.engineDestroyed)return this._destroyLocalTrack(),C;if(this._wtnStreamManager._updatePushTrack(),!this._room)return C;const{isAutoPublish:i}=this._room.config;return((I=this._room.localStream)!==null&&I!==void 0&&I.pubVideo||i)&&this._ctx.visibility&&this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableVideo(!0),C}async getLocalStreamStats(){var A;return await((A=this._room)===null||A===void 0?void 0:A.getLocalStreamStats())}async stopVideoCapture(){var A,I;if(this.logger.info("stopVideoCapture()"),this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy){const g=this._ctx.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCBeautyExtension");g&&g.emit("stop"),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),this._localImgVideoTrack?this._localVideoTrack.setTrack(this._localImgVideoTrack,{isDummy:!0}):this._localVideoTrack=void 0}this._wtnStreamManager._updatePushTrack(),this._room&&((A=this._room.localStream)!==null&&A!==void 0&&A.pubVideo&&await this._updatePublish(),(I=this._room.localStream)===null||I===void 0||(I=I.observer)===null||I===void 0||I.setEnableVideo(!1))}async startAudioCapture(A){var I,g;if(this.logger.info("startAudioCapture()","deviceId: $o",A),kQ(A)||OA(A,"deviceId"),A&&this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:A}}),this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");if(this._localAudioTrack)throw new U(m.REPEAT_CAPTURE,"Has already capture");let C={};const Q=await Jw(this._ctx,this._ctx.audioProfileManager.getConstraints());C=Q.originTrack.getSettings(),this._initLocalTrackEvents(Q),this._localAudioTrack=Q,this._localAudioTrack.setVolume(this._localAudioVolume);const{frameSize:B,callback:E}=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_MAIN];B&&E&&this._localAudioTrack.setDataFetcher(B,E);const{position:i,volume:e}=this._ctx.earMonitorSettings[F.STREAM_INDEX_MAIN];if(i!==QC.NONE&&(this._localAudioTrack.play(i),this._localAudioTrack.setPlaybackVolume(e)),this._tempMixingAudioTrack&&(this._localAudioTrack.mixType=this._tempMixingAudioTrack.type,this._localAudioTrack.mixedAudioTrack=this._tempMixingAudioTrack.track,delete this._tempMixingAudioTrack),this._ctx.engineDestroyed)return this._destroyLocalTrack(),C;if(this._wtnStreamManager._updatePushTrack(),!this._room)return C;const{isAutoPublish:o}=this._room.config;return((I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio||o)&&this._ctx.visibility&&this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableAudio(!0),C}async stopAudioCapture(){var A,I,g;if(this.logger.info("stopAudioCapture()"),this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");this._localAudioTrack&&(this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy()),this._localAudioTrack=void 0,(A=this._audioMixingManager)===null||A===void 0||A.stopAll(),this._wtnStreamManager._updatePushTrack(),this._room&&((I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio&&await this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableAudio(!1))}async startAudioAndVideoCapture(A,I){var g,C,Q,B;this.logger.print("startAudioAndVideoCapture","optionsOrAudioDeviceId: $o",A,"videoDeviceId: $o",I);const{audioDeviceId:E,videoDeviceId:i}=taA(A,I);if(E&&this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:E}}),this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL||this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL?"setVideoSourceType as internal first":"setAudioSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy)throw new U(m.REPEAT_CAPTURE,"video has already capture");if(this._localAudioTrack)throw new U(m.REPEAT_CAPTURE,"audio has already capture");const e=this._ctx.videoProfile.getCaptureConfig(i);let o={},t={};const{audioTrack:s,videoTrack:v}=await a9A(this._ctx,this._ctx.audioProfileManager.getConstraints(),e),r=this._ctx.videoProfile.getContentHint();r&&v.setContentHint(r),i&&this._ctx.videoProfile.setCaptureDeviceId(i),this._initLocalTrackEvents(v),this._localVideoTrack=v,this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(h=>{var D,u;(D=this._localVideoTrack)===null||D===void 0||D.setPlayer(h,this._mirrorType,(u=this._config)===null||u===void 0?void 0:u.autoPlayPolicy,this._initPlayerEvents.bind(this))}),this._initLocalTrackEvents(s),this._localAudioTrack=s,this._localAudioTrack.setVolume(this._localAudioVolume);const{frameSize:n,callback:a}=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_MAIN];n&&a&&this._localAudioTrack.setDataFetcher(n,a),this._tempMixingAudioTrack&&(this._localAudioTrack.mixType=this._tempMixingAudioTrack.type,this._localAudioTrack.mixedAudioTrack=this._tempMixingAudioTrack.track,delete this._tempMixingAudioTrack);let c=v.originTrack;o=c.getSettings();const d={width:o.width||0,height:o.height||0};if(this._localVideoTrack.resolution=d,this._ctx.videoProfile.__autoResetVideoEncoderConfig(o),setTimeout(()=>this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:F.STREAM_INDEX_MAIN,info:d})),c=s.originTrack,t=c.getSettings(),this._ctx.engineDestroyed)return this._destroyLocalTrack(),{audioTrackSettings:t,videoTrackSettings:o};if(this._wtnStreamManager._updatePushTrack(),!this._room)return{audioTrackSettings:t,videoTrackSettings:o};const{isAutoPublish:l}=this._room.config;return((g=this._room.localStream)!==null&&g!==void 0&&g.pubVideo||(C=this._room.localStream)!==null&&C!==void 0&&C.pubAudio||l)&&this._ctx.visibility&&this._updatePublish(),(Q=this._room.localStream)===null||Q===void 0||(Q=Q.observer)===null||Q===void 0||Q.setEnableVideo(!0),(B=this._room.localStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setEnableAudio(!0),{audioTrackSettings:t,videoTrackSettings:o}}async startVideoAndAudioCapture(A,I){return this.startAudioAndVideoCapture(I,A)}getAudioMixingManager(){return this.logger.info("getAudioMixingManager()","invoke"),this._audioMixingManager||(this._audioMixingManager=new Kg({getLocalAudioTrack:()=>this._localAudioTrack,updateLocalAudioTrack:this._updateMixAudioTrack,emitMessage:this._onAudioMixingMessage,onAutoPlayFailed:this._onAudioMixingAutoplayFailed},this.id)),this._audioMixingManager}getWTNStreamManager(){return this._wtnStreamManager}getCallId(){var A;return(A=this._ctx)===null||A===void 0?void 0:A.callId}async startScreenCapture(){var A,I,g;let C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.logger.info("startScreenCapture()","config: %o",C),this._trackSourceType.screenVideo===Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._trackSourceType.screenAudio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");const[Q,B]=await P9A(this._ctx,C);B==null||B.setVolume(this._localScreenAudioVolume),this._localScreenVideoTrack&&!this._localScreenVideoTrack.dummy&&(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy()),(A=this._localScreenAudioTrack)===null||A===void 0||A.destroy(),delete this._localScreenAudioTrack,this._localScreenVideoTrack=Q;const{contentHint:E}=this._ctx.videoProfile.getScreenEncodeConfig();E&&Q.setContentHint(E);const i=Q.originTrack;setTimeout(()=>{const e=i.getSettings(),o={width:e.width,height:e.height};Q.resolution=o,this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:F.STREAM_INDEX_SCREEN,info:{width:e.width,height:e.height}})},500),B&&(this._localScreenAudioTrack=B,this._initLocalTrackEvents(B)),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(e=>{var o,t;(o=this._localScreenVideoTrack)===null||o===void 0||o.setPlayer(e,GQ.MIRROR_TYPE_NONE,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this))}),this._initLocalTrackEvents(this._localScreenVideoTrack,!0),((I=this._room)!==null&&I!==void 0&&(I=I.localScreenStream)!==null&&I!==void 0&&I.pubAudio||(g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubVideo)&&await this._updateScreenPublish()}async stopScreenCapture(){var A,I,g,C;this.logger.info("stopScreenCapture()"),(A=this._localScreenVideoTrack)===null||A===void 0||A.stopAll(),this._localScreenVideoTrack&&(this._localScreenVideoTrack.dummy||(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy(),this._localImgScreenTrack&&this._localScreenVideoTrack.setTrack(this._localImgScreenTrack,{isDummy:!0}))),this._localScreenAudioTrack&&(this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy()),this._localScreenAudioTrack=void 0,(I=this._localScreenVideoTrack)!==null&&I!==void 0&&I.dummy||(this._localScreenVideoTrack=void 0),((g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubAudio||(C=this._room)!==null&&C!==void 0&&(C=C.localScreenStream)!==null&&C!==void 0&&C.pubVideo)&&await this._updateScreenPublish()}setLocalVideoPlayer(A,I){var g;this.logger.info("setLocalVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);const C=A===F.STREAM_INDEX_MAIN?this._localVideoTrack:this._localScreenVideoTrack,Q=(g=I==null?void 0:I.playerId)!==null&&g!==void 0?g:UQ;if(I==null||!I.renderDom){var B,E;(B=this._localVideoPlayerConfig[A].get(Q))===null||B===void 0||(B=B.player)===null||B===void 0||B.destroy();const s=(E=this._localVideoPlayerConfig[A].get(Q))===null||E===void 0?void 0:E.renderDom;return this._containerCollisionDetector.unregisterContainer(s),void this._localVideoPlayerConfig[A].delete(Q)}lF(I);const i=this._localVideoPlayerConfig[A].get(Q);if(!i){var e,o,t;const{renderDom:s}=I;if(!this._containerCollisionDetector.registerContainer(s))return this.monitor.report("rtc_error",{message:"RenderDom is not empty",error_code:TC.DUPLICATE_DOM}),void bi("renderDom is not empty");const v=new Pi(this._ctx.id,Q,R(R({},I),{},{isLocal:!0,isScreen:A===F.STREAM_INDEX_SCREEN,userId:(e=I.userId)!==null&&e!==void 0?e:"_local_"})),r=R(R({},I),{},{player:v});return this._localVideoPlayerConfig[A].set(Q,r),C==null||C.setPlayer(r,A===F.STREAM_INDEX_MAIN?this._mirrorType:GQ.MIRROR_TYPE_NONE,(o=this._config)===null||o===void 0?void 0:o.autoPlayPolicy,this._initPlayerEvents.bind(this)),(t=r.player)===null||t===void 0?void 0:t.domElement}I.renderMode!==void 0&&(C==null||C.setRenderMode(Q,I.renderMode),i.renderMode=I.renderMode)}async startLiveTranscoding(A){var I;this.logger.info("startLiveTranscoding()","transcode: %o",A),Pt.checkStartParams(A),this._liveTranscodeConfig=A;const g=(I=this._room)===null||I===void 0?void 0:I.config;if(g&&g.roomId.length+g.userId.length>126)throw new U(m.INVALID_PARAMS,"The roomId+userId must be within 126 bytes");try{this.safeEmit(X.onStreamMixingEvent,{event:wQ.START,error:0,message:""}),this._room&&this._ctx.signalingManager.isConnected()&&await this._room.liveControlMessage(Pt.getStartParams(this._liveTranscodeConfig))}catch(C){throw C instanceof U?C:new U(m.UNEXPECTED_ERROR,"unexpected error",C)}}async updateLiveTranscoding(A){var I,g;if(this.logger.info("updateLiveTranscoding()","transcode: %o",A),!this._liveTranscodeConfig)return;const C=Vw({},A);delete C.audio,(I=C.video)===null||I===void 0||delete I.codec,(g=C.video)===null||g===void 0||delete g.gop,Pt.checkUpdateParams(C),this._liveTranscodeConfig=Vw(this._liveTranscodeConfig,C);try{var Q;this.safeEmit(X.onStreamMixingEvent,{event:wQ.UPDATE,error:0,message:""}),await((Q=this._room)===null||Q===void 0?void 0:Q.liveControlMessage(Pt.getUpdateParams(this._liveTranscodeConfig)))}catch(B){throw B instanceof U?B:new U(m.UNEXPECTED_ERROR,"unexpected error",B)}}async stopLiveTranscoding(){if(this.logger.info("stopLiveTranscoding()"),this._liveTranscodeConfig){delete this._liveTranscodeConfig;try{var A;this.safeEmit(X.onStreamMixingEvent,{event:wQ.STOP,error:0,message:""}),await((A=this._room)===null||A===void 0?void 0:A.liveControlMessage({action:"stopped",type:"transcode"}))}catch(I){throw I instanceof U?I:new U(m.UNEXPECTED_ERROR,"unexpected error",I)}}}async startSubtitle(A){var I;this.logger.info("startSubtitle()","config: %o",A),this._assertNotInRoom(),await((I=this._room)===null||I===void 0?void 0:I.startSubtitle(A))}async updateSubtitleConfig(A){var I;this.logger.info("updateSubtitleConfig()","config: %o",A),this._assertNotInRoom(),await((I=this._room)===null||I===void 0?void 0:I.updateSubtitleConfig(A))}stopSubtitle(){var A;this.logger.info("stopSubtitle()","invoke"),(A=this._room)===null||A===void 0||A.stopSubtitle()}setBusinessId(A){return this.logger.info("setBusinessId()","businessId: %s",A),!QaA(A)&&!this._room&&(this._ctx.businessId=A,!0)}async setUserVisibility(A){var I;if(this.logger.info("setUserVisibility()","enable: %o",A),A=!!A,this._ctx.visibility!==A)if(this._room){var g;if(this._assertNotInRoom(),this._room.localStream&&((g=this._room.localStream.observer)===null||g===void 0||g.setPublisher(A)),!A){const C=await this._pubLock.lock();try{this._room.unpublish(),this._room.unpublishScreen()}finally{C()}}this._ctx.visibility=A;try{await this._room.updateUserAttributes()}catch(C){throw this._ctx.visibility=!A,C}A&&(I=this._room)!==null&&I!==void 0&&I.config.isAutoPublish&&this._updatePublish({mediaType:iA.AUDIO_AND_VIDEO})}else this._ctx.visibility=A}_initPlayerEvents(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];const g=(arguments.length>2&&arguments[2]!==void 0?arguments[2]:F.STREAM_INDEX_MAIN)===F.STREAM_INDEX_SCREEN;A.on("playback_event",C=>{switch(C.eventName){case"timeupdate":return;case"loadeddata":if(C.type==="audio"){var Q;const i=A.userId.replace("_screen",""),e=(Q=this._room)===null||Q===void 0||(Q=Q.remoteStreams.get(i))===null||Q===void 0?void 0:Q.find(t=>t.isScreen===g),o=()=>{I?this.safeEmit(X.onFirstPublicStreamAudioFrameDecoded,{publicStreamId:i}):(this.safeEmit(X.onAudioFirstFrameDecoded,{userId:i,isScreen:g}),this.safeEmit(X.onRemoteAudioFirstFrame,{userId:i,isScreen:g})),this.monitor.report("first_remote_audio_render",{stream_id:"",stream_user_id:i||""},{isScreen:g})};e==null||!e.observer||e.observer.audioFirstFrameReceived?o():e.observer.once("recvAudioFirstFrame",o)}else{var B,E;const i={userId:A.userId,height:((B=A.domElement)===null||B===void 0?void 0:B.videoHeight)||0,width:((E=A.domElement)===null||E===void 0?void 0:E.videoWidth)||0,isScreen:g,playerId:A.playerId};I?(i.publicStreamId=i.userId,delete i.userId,delete i.isScreen,this.safeEmit(X.onFirstPublicStreamVideoFrameRendered,i),this.safeEmit(X.onFirstPublicStreamVideoFrameDecoded,i)):A.isLocal||(this.safeEmit(X.onVideoFirstFrameRendered,i),this.safeEmit(X.onVideoFirstFrameDecoded,i),this.safeEmit(X.onRemoteVideoFirstFrame,i)),this.monitor.report("first_remote_video_render",{stream_id:"",stream_user_id:C.userId||""},{isScreen:g})}break;case"autoplay-error":{I&&(C.publicStreamId=C.userId),AI(this.id,"autoplay-error",A instanceof Pi?"video":"audio",0,C.userId||"");const i={userId:C.userId,kind:A instanceof Pi?"video":"audio",mediaType:A instanceof Pi?iA.VIDEO:iA.AUDIO,streamIndex:A.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN};return A instanceof Pi&&(i.playerId=A.playerId===UQ?void 0:A.playerId),void this.safeEmit(X.onAutoplayFailed,i)}}A instanceof Pi&&(C.playerId=A.playerId===UQ?void 0:A.playerId),this.safeEmit(X.onPlayerEvent,C)})}_initLocalTrackEvents(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];["track-ended","track-mute","track-unmute"].forEach(g=>{A.on(g,async C=>{this.monitor.report("rtc_error",{message:"track-".concat(g," mediaType: ").concat(C.originTrack.kind),error_code:TC.TRACK_ERROR,capture_session_id:C.captureSessionId,media_type:g,reason:g});let Q=!1;C!==this._localScreenAudioTrack&&C!==this._localScreenVideoTrack||(Q=!0);const{kind:B}=C.originTrack;this.safeEmit({"track-ended":X.onTrackEnded,"track-mute":X.onTrackMute,"track-unmute":X.onTrackUnmute}[g],{kind:B,isScreen:Q}),(Yo||v9)&&(g==="track-mute"&&($B.emit(PB.ON_IOS_LOCAL_TRACK_MUTE,B),B==="audio"&&(await this.stopAudioCapture(),this.startAudioCapture())),g==="track-unmute"&&$B.emit(PB.ON_IOS_LOCAL_TRACK_UNMUTE,B))})}),A.on("resolution-change",g=>{this._ctx.extensionManager.getPluginsByType(ws.PRE_PROCESSING).forEach(C=>{var Q;C==null||(Q=C.applyConstraints)===null||Q===void 0||Q.call(C,I?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN,g)}),this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:I?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN,info:g})}),A.on("needReplaceTrack",()=>{if(A instanceof Do){var g,C;A.stopDataFetcher();const E=this._ctx._localAudioTrackDumpConfig[(g=A.streamIndex)!==null&&g!==void 0?g:F.STREAM_INDEX_MAIN];E!=null&&E.frameSize&&E!=null&&E.callback&&A.setDataFetcher(E.frameSize,E.callback);const{position:i,volume:e}=this._ctx.earMonitorSettings[(C=A.streamIndex)!==null&&C!==void 0?C:F.STREAM_INDEX_MAIN];if(i!==QC.NONE&&(A.play(i),A.setPlaybackVolume(e)),this._room){const{streamIndex:o}=A;var Q,B;o===F.STREAM_INDEX_MAIN?(Q=this._room.localStream)!==null&&Q!==void 0&&Q.pubAudio&&this._ctx.visibility&&this._updatePublish():(B=this._room.localStream)!==null&&B!==void 0&&B.pubAudio&&this._ctx.visibility&&this._updateScreenPublish()}}}),A.on("autoplay-error",g=>{this.safeEmit(X.onAutoplayFailed,g)})}_removeLocalTrackEvents(A){A.removeAllListeners("track-ended"),A.removeAllListeners("track-mute"),A.removeAllListeners("track-unmute"),A.removeAllListeners("resolution-change")}setRemoteVideoPlayer(A,I){var g,C,Q,B,E,i;this.logger.info("setRemoteVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),lF(I);const{userId:e}=I,o=A===F.STREAM_INDEX_SCREEN,t=(g=this._room)===null||g===void 0||(g=g.remoteStreams.get(e))===null||g===void 0?void 0:g.find(l=>l.isScreen===o),s=t==null?void 0:t.videoTrack,v=(C=I.playerId)!==null&&C!==void 0?C:UQ;(Q=this._getRemoteVideoPlayerConfig(A,e,v))===null||Q===void 0||(Q=Q.player)===null||Q===void 0||Q.destroy();const r=(B=this._getRemoteVideoPlayerConfig(A,e,v))===null||B===void 0?void 0:B.renderDom;var n;if(this._containerCollisionDetector.unregisterContainer(r),!I.renderDom)return void((n=this._remoteVideoPlayerConfig[A].get(e))===null||n===void 0||n.delete(v));const{renderDom:a}=I;if(!this._containerCollisionDetector.registerContainer(a))return this.monitor.report("rtc_error",{message:"RenderDom is not empty",error_code:TC.DUPLICATE_DOM}),void bi("renderDom is not empty");const c=new Pi(this.id,v,R(R({},I),{},{isLocal:!1,isScreen:o,userId:e})),d=R(R({},I),{},{player:c});return this._setRemoteVideoPlayerConfig(A,e,v,d),s==null||s.setPlayer(this.id,d,(E=this._config)===null||E===void 0?void 0:E.autoPlayPolicy,this._initPlayerEvents.bind(this)),t&&this._updateVideoPlayerState(t),(i=d.player)===null||i===void 0?void 0:i.domElement}setLocalVideoMirrorType(A){var I;this.logger.info("setLocalVideoMirrorType()","mirrorType: %o",A),MA(A,"mirrorType",[GQ.MIRROR_TYPE_NONE,GQ.MIRROR_TYPE_RENDER]),this._mirrorType=A,(I=this.localVideoTrack)===null||I===void 0||I.mirror(!!A)}setRemoteVideoMirrorType(A,I,g){var C;this.logger.info("setRemoteVideoMirrorType()","userId: %s, streamIndex: %o, mirrorType: %o",A,I,g),dC(A),MA(I,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(g,"mirrorType",[GQ.MIRROR_TYPE_NONE,GQ.MIRROR_TYPE_RENDER]),this._ctx.setUserStreamConf(A,I,{mirrorType:g}),(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(A))===null||C===void 0||(C=C.find(Q=>Q.isScreen===(I===F.STREAM_INDEX_SCREEN)))===null||C===void 0||(C=C.videoTrack)===null||C===void 0||C.mirror(!!g)}async setAudioPlaybackDevice(A){var I;this.logger.info("setAudioPlaybackDevice()","deviceId: %s",A),OA(A,"deviceId");const g=await this._audioDeviceManager.setSinkId(A);(I=this._room)===null||I===void 0||I.remoteStreams.forEach(C=>{C.forEach(Q=>{var B;(B=Q.audioTrack)===null||B===void 0||B.setPlaybackDevice(A)})}),this.safeEmit(X.onAudioPlaybackDeviceChanged,g),this.monitor.report("rtc_audio_device",{audio_event:"playout_device_switch",message:JSON.stringify(g),error_code:0})}async play(A){var I;let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:iA.AUDIO_AND_VIDEO,C=arguments.length>2?arguments[2]:void 0,Q=arguments.length>3?arguments[3]:void 0;this.logger.info("play()","userId: %s, mediaType: %s, streamIndex: %s",A,g,C);const B=Q??UQ,E=!A||A===this._getUserId()||A==="local_user",i=C===void 0||C===F.STREAM_INDEX_MAIN,e=C===void 0||C===F.STREAM_INDEX_SCREEN,o=g!==iA.VIDEO,t=g!==iA.AUDIO,s=[];if(E&&t){if(i&&this._localVideoTrack){this._localVideoTrack.mirror(!!this._mirrorType);const a=this._localVideoTrack.play(B);a&&s.push(a)}if(e&&this._localScreenVideoTrack){var v;!((v=this._localScreenVideoTrack)===null||v===void 0)&&v.manuallyPlay(B)&&s.push()}}this._audioMixingManager&&A===this._audioMixingManager.id&&s.push(this._audioMixingManager.resumeLocalPlay());let r=[];var n;return(I=this._room)===null||I===void 0||I.remoteStreams.forEach((a,c)=>{A&&A!==c||a.forEach(d=>{d.audioTrack&&r.push(d.audioTrack),d.videoTrack&&r.push(d.videoTrack)})}),this._wtnStreamManager.__getRemoteStreams().forEach((a,c)=>{A&&A!==c||(a.audioTrack&&r.push(a.audioTrack),a.videoTrack&&r.push(a.videoTrack))}),i||(r=r.filter(a=>!!a.isScreen)),e||(r=r.filter(a=>!a.isScreen)),o||(r=r.filter(a=>a.mediaType!=="audio")),t||(r=r.filter(a=>a.mediaType!=="video")),o&&((n=this._room)===null||n===void 0||n.virtualStreams.forEach(a=>{a.audioTrack&&r.push(a.audioTrack)})),r.forEach(a=>{const c=a.manuallyPlay(B);c&&s.push(c)}),Promise.all(s).then(()=>{})}async stop(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:iA.AUDIO_AND_VIDEO,g=arguments.length>2?arguments[2]:void 0,C=arguments.length>3?arguments[3]:void 0;this.logger.info("stop()","userId: %s, mediaType: %s, streamIndex: %s, playerId: %s",A,I,g,C);const Q=C??UQ,B=!A||A===this._getUserId()||A==="local_user",E=g===void 0||g===F.STREAM_INDEX_MAIN,i=g===void 0||g===F.STREAM_INDEX_SCREEN,e=I!==iA.VIDEO,o=I!==iA.AUDIO;if(B&&o&&(E&&this._localVideoTrack&&this._localVideoTrack.pause(Q),i&&this._localScreenVideoTrack&&this._localScreenVideoTrack.pause(Q)),A){var t;let s=[];(t=this._room)===null||t===void 0||(t=t.remoteStreams.get(A))===null||t===void 0||t.forEach(n=>{n.audioTrack&&s.push(n.audioTrack),n.videoTrack&&s.push(n.videoTrack)});const v=this._wtnStreamManager.__getPublicStreamTrack(A,"audio"),r=this._wtnStreamManager.__getPublicStreamTrack(A,"video");v&&s.push(v),r&&s.push(r),E||(s=s.filter(n=>!!n.isScreen)),i||(s=s.filter(n=>!n.isScreen)),e||(s=s.filter(n=>n.mediaType!=="audio")),o||(s=s.filter(n=>n.mediaType!=="video")),s.forEach(n=>{n.pause(Q)})}}getAudioVolume(A,I){MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);let g=0;if(I){var C;const Q=(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(I))===null||C===void 0||(C=C.find(B=>B.isScreen===(A===F.STREAM_INDEX_SCREEN)))===null||C===void 0?void 0:C.audioTrack;Q&&(g=Q.getAudioLevel())}else{const Q=A===F.STREAM_INDEX_MAIN?this._localAudioTrack:this._localScreenAudioTrack;Q&&(g=Q.getAudioLevel())}return{linearVolume:g,nonlinearVolume:Er(g)}}setAudioFrameCallback(A,I,g){var C;let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:4096;if(this.logger.info("setAudioFrameCallback()","streamIndex: %s, userId: %s, callback: %s, frameSize: %s",A,I,g?"true":"false",Q),MA(Q,"frameSize",[256,512,1024,2048,4096,8192,16384]),MQ.isWorkletReady===void 0&&MQ.getAudioContextInstance(),MQ.isWorkletReady===null)throw this.logger.error("setAudioFrameCallback()","Not support AudioWorklet"),new U(m.NOT_SUPPORTED,"Not support AudioWorklet");I?g?this._ctx._remoteAudioTrackDumpConfig[A].set(I,{callback:g,frameSize:Q}):this._ctx._remoteAudioTrackDumpConfig[A].delete(I):this._ctx._localAudioTrackDumpConfig[A]={callback:g,frameSize:g?Q:void 0};const B=I?(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(I))===null||C===void 0||(C=C.find(E=>E.isScreen===(A===F.STREAM_INDEX_SCREEN)))===null||C===void 0?void 0:C.audioTrack:A===F.STREAM_INDEX_MAIN?this._localAudioTrack:this._localScreenAudioTrack;B?g?B.setDataFetcher(Q,g):B.stopDataFetcher():this.logger.warn("setAudioFrameCallback()","track not found")}async pauseAllSubscribedStream(A){return this.logger.info("pauseAllSubscribedStream()","mediaType: %o",A),this._checkMediaType(A),$I(A)&&(this._pauseAllSubscribeState.audio=!0),gI(A)&&(this._pauseAllSubscribeState.video=!0),this._room?this._pauseAllRemoteStreams(A):Promise.resolve()}async _pauseAllRemoteStreams(A){if(!this._room)return Promise.resolve();const I=[];return this._room.remoteStreams.forEach(g=>{Array.isArray(g)&&g.forEach(C=>{if(C.hasSubscribed){C.attributes.audiostream&&$I(A)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[C.streamId]=C.streamId),C.attributes.videostream&&gI(A)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[C.streamId]=C.streamId);const Q=this._unsubscribe(C.isScreen,C.userId,A,!0);Q&&I.push(Q)}})}),Promise.all(I).then(()=>{})}async resumeAllSubscribedStream(A){if(this.logger.info("resumeAllSubscribedStream()","mediaType: %o",A),this._checkMediaType(A),$I(A)&&(this._pauseAllSubscribeState.audio=!1),gI(A)&&(this._pauseAllSubscribeState.video=!1),!this._room)return Promise.resolve();await this._triedResumeAllRemoteStreams(A,!1)}async _triedResumeAllRemoteStreams(A,I){if(!this._room||this._pauseAllSubscribeState.audio&&A===iA.AUDIO||this._pauseAllSubscribeState.video&&A===iA.VIDEO||this._pauseAllSubscribeState.video&&this._pauseAllSubscribeState.audio&&A===iA.AUDIO_AND_VIDEO)return Promise.resolve();const g=[],C=[...Object.keys(this._pauseAllSubscribeState.resumeAudioStreamIds)],Q=[...Object.keys(this._pauseAllSubscribeState.resumeVideoStreamIds)];return this._room.remoteStreams.forEach(B=>{Array.isArray(B)&&B.forEach(E=>{if(I&&E.isScreen)return;const i=this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId],e=this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId];if(i&&$I(A)||e&&gI(A)){const o=this._subscribe(E.isScreen,E.userId,A).then(()=>{i&&$I(A)&&delete this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId],e&&gI(A)&&delete this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId]});o&&g.push(o)}})}),Promise.all(g).then(()=>{var B;return(B=this._room)===null||B===void 0||B.remoteStreams.forEach(E=>{Array.isArray(E)&&E.forEach(i=>{this._updateAudioPlayerState(i),this._updateVideoPlayerState(i)})}),Promise.resolve()}).finally(()=>{var B;return(B=this._room)!==null&&B!==void 0&&B.config.tokenSubscribePrivilegeExpired&&(C.forEach(E=>{this._pauseAllSubscribeState.resumeAudioStreamIds[E]=E}),Q.forEach(E=>{this._pauseAllSubscribeState.resumeVideoStreamIds[E]=E})),Promise.resolve()})}async sendUserMessage(A,I){var g;dC(A),this._assertNotInRoom();const C=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendUserMessage(A,I))===null||g===void 0?void 0:g.then(Q=>(this._messageStatisticsObserver.countP2PMessage(!0,A,!1,C,Q),Q.id)).catch(Q=>{throw this._messageStatisticsObserver.countP2PMessage(!1,A,!1,C,Q),Q})}async sendUserBinaryMessage(A,I){var g;dC(A),eD(I,"message"),this._assertNotInRoom();const C=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendUserMessage(A,I))===null||g===void 0?void 0:g.then(Q=>(this._messageStatisticsObserver.countP2PMessage(!0,A,!0,C,Q),Q.id)).catch(Q=>{throw this._messageStatisticsObserver.countP2PMessage(!1,A,!0,C,Q),Q})}async sendRoomMessage(A){var I,g;this._assertNotInRoom();const C=(I=this._room)===null||I===void 0?void 0:I.config.roomId,Q=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendRoomMessage(A))===null||g===void 0?void 0:g.then(B=>(this._messageStatisticsObserver.countRoomMessage(!0,C,!1,Q),B)).catch(B=>{throw this._messageStatisticsObserver.countRoomMessage(!1,C,!1,Q),B})}async sendRoomBinaryMessage(A){var I,g;this._assertNotInRoom();const C=(I=this._room)===null||I===void 0?void 0:I.config.roomId,Q=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendRoomMessage(A,!0))===null||g===void 0?void 0:g.then(B=>(this._messageStatisticsObserver.countRoomMessage(!0,C,!0,Q),B)).catch(B=>{throw this._messageStatisticsObserver.countRoomMessage(!1,C,!0,Q),B})}async setAudioCaptureConfig(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger.info("setAudioCaptureConfig()","config: %o",A),delete A.deviceId,bw(A),await this._shouldUpdateAudioConf("setAudioCaptureConfig")&&this._ctx.audioProfileManager.updateConstraints(A)}async setVideoCaptureConfig(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return this.logger.info("setVideoCaptureConfig()","config: %o",A),this._setVideoCaptureConfig(A)}async _setVideoCaptureConfig(){var A;let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};delete I.deviceId,bw(I);const g=R(R({},this._ctx.videoProfile.getCaptureConfig()),I);return this._localVideoTrack&&await this._localVideoTrack.updateVideoCaptureConfig(g),this._ctx.videoProfile.setCaptureConfig(g),((A=this._localVideoTrack)===null||A===void 0?void 0:A.originTrack.getSettings())||{}}enableSimulcastMode(A){this.logger.info("enableSimulcastMode()","enabled: %o",A),this._ctx.videoProfile.checkSimulcastApiVersion("old");try{return this._ctx.videoProfile.setSimulcastMode(A?Li.VIDEO_ON_DEMAND:Li.VIDEO_ONLY_ONE,this._room),!0}catch{return!1}}async setLocalSimulcastMode(A,I){var g;this.logger.info("setLocalSimulcastMode()","mode: %o, config: %o",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("new"),await this._ctx.videoProfile.setSimulcastMode(A,this._room),await this._ctx.videoProfile.setSubVideoEncodeConfig(I,this._room,this._localVideoTrack),await((g=this._room)===null||g===void 0?void 0:g.hasPublished())&&this._updatePublish()}async setVideoEncoderConfig(A){var I;if(this.logger.info("setVideoEncoderConfig()","descriptions: %o",A),await this._ctx.videoProfile.setVideoEncodeConfigPolyfill(A),this._localVideoTrack){const g=this._ctx.videoProfile.getContentHint();g&&this._localVideoTrack.setContentHint(g),await this._localVideoTrack.updateVideoCaptureConfig(this._ctx.videoProfile.getCaptureConfig())}this._updateDummyCaptureImage(F.STREAM_INDEX_MAIN),await((I=this._room)===null||I===void 0?void 0:I.hasPublished())&&this._updatePublish()}setVideoEncoderAutoConfigList(A){if(Array.isArray(A))return Ws(A).call(A,(I,g)=>I.maxKbps-g.maxKbps),cV(A)}async setScreenEncoderConfig(A){var I;this.logger.info("setScreenEncoderConfig()","description: %o",A),this._ctx.videoProfile.setScreenEncodeConfig(A),this._localScreenVideoTrack&&(tV!=="16.1"&&await this._localScreenVideoTrack.updateVideoCaptureConfig(A),A.contentHint&&this._localScreenVideoTrack.setContentHint(A.contentHint)),this._updateDummyCaptureImage(F.STREAM_INDEX_SCREEN),await((I=this._room)===null||I===void 0?void 0:I.hasScreenPublished())&&this._updateScreenPublish()}sendSEIMessage(A,I,g){if(this.logger.info("sendSEIMessage()","streamIdex: %o, message: %o, repeatCount: %o",A,I,g),!JE()&&!hv())return bi("Your browser does not support sending SEI"),!1;MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),qe(g,"repeatCount",0,30);const C=typeof I=="string"?new Uint8Array(Ag.str2ab(I)):I;if(!I.length)return this.logger.warn("sei message must not be empty"),!1;let Q;if(A===F.STREAM_INDEX_MAIN){var B,E;if(!((B=this._room)!==null&&B!==void 0&&(B=B.localStream)!==null&&B!==void 0&&B.pubAudio||(E=this._room)!==null&&E!==void 0&&(E=E.localStream)!==null&&E!==void 0&&E.pubVideo))return;Q=this._room.localStream}else{var i,e;if(!((i=this._room)!==null&&i!==void 0&&(i=i.localScreenStream)!==null&&i!==void 0&&i.pubAudio||(e=this._room)!==null&&e!==void 0&&(e=e.localScreenStream)!==null&&e!==void 0&&e.pubVideo))return;Q=this._room.localScreenStream}if(C.byteLength>4096)return void this.logger.warn("sei size must not bigger than 4KB");var o;EE||(o=this._room)===null||o===void 0||o.maybeFillBackFrame2Stream(Q);const t=KE();return Q.sendSEIMessage({content:C,uuid:t,repeatCount:g+1}),setTimeout(async()=>{if(Q&&await Q.revokeSEIMessage(t)){const s="timeout for sei message(id: ".concat(t,")");console.error("[RTC WebSDK] ".concat(s)),this.monitor.report("rtc_sdk_callback",{sdk_callback_name:"sendSEIMessageTimeout",message:s,error_code:400})}},lA("SEI_TIME_OUT")),t}setAudioVolumeIndicationInterval(A){this.logger.info("setAudioVolumeIndicationInterval()","interval %o: ",A),(typeof A!="number"||A<200)&&(A=200);let I=[];this._audioVolumeIndicationTimer&&clearInterval(this._audioVolumeIndicationTimer),this._audioVolumeIndicationTimer=setInterval(()=>{var g,C;I=[],(g=this._room)===null||g===void 0||g.remoteStreams.forEach((B,E)=>{var i;if(B.length===0)return;const e=B.find(t=>!t.isScreen),o=e==null||(i=e.audioTrack)===null||i===void 0?void 0:i.getAudioLevel();I.push({userId:E,volume:o||0})});const Q=(C=this._localAudioTrack)===null||C===void 0?void 0:C.getAudioLevel();I.push({userId:this._getUserId(),volume:Q||0}),this.safeEmit(X.onAudioVolumeIndication,{speakers:I})},A)}_sendActiveSpeaker(A,I){if(this._room&&this._room.remoteUsers.size>=1){const g=A[0],C=I.reduce((B,E)=>B&&B.audioPropertiesInfo.nonlinearVolume>E.audioPropertiesInfo.nonlinearVolume?B:E,void 0);let Q;if(Q=g?C?g.audioPropertiesInfo.nonlinearVolume>C.audioPropertiesInfo.nonlinearVolume?g:C:g:C,Q&&Q.audioPropertiesInfo.nonlinearVolume>-35){let B;B=Q.streamKey?this._room.remoteUsers.get(Q.streamKey.userId):this._room.config.userInfo,B&&this.safeEmit(X.onActiveSpeaker,{userId:B.userId,extraInfo:B.extraInfo})}}}enableAudioPropertiesReport(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger.info("enableAudioPropertiesReport()","config %o: ",A);const{enableInBackground:I=!0,localMainReportMode:g=Tr.NORMAL,audioReportMode:C=i9.MICROPHONE}=A;let{interval:Q=100}=A;this._stopAudioPropertiesReport(),Q<=0||(Q=Math.max(100,Q),this._audioPropertiesReportTimer=self.setInterval(()=>{if(!I&&document.visibilityState==="hidden")return;const B=[],E=this._audioDeviceManager.getRecordTrack()||this._localAudioTrack;if(E){var i;const e=(i=this._room)===null||i===void 0||(i=i.localStream)===null||i===void 0?void 0:i.audioHasPublish,o=!!this._audioDeviceManager.getRecordTrack(),t=E.getAudioLevel(C),s=Er(t),v={streamIndex:F.STREAM_INDEX_MAIN,audioPropertiesInfo:{linearVolume:t,nonlinearVolume:s}};if(e||o)B.push(v);else switch(g){case Tr.DISCONNECT:break;case Tr.RESET:v.audioPropertiesInfo.linearVolume=0,v.audioPropertiesInfo.nonlinearVolume=-127,B.push(v);break;case Tr.NORMAL:B.push(v);break;default:throw new U(m.INVALID_PARAMS,"invalid localMainReportMode: ".concat(g," in config"))}}if(this._localScreenAudioTrack){const e=this._localScreenAudioTrack.getAudioLevel();B.push({streamIndex:F.STREAM_INDEX_SCREEN,audioPropertiesInfo:{linearVolume:e,nonlinearVolume:Er(e)}})}if(this.safeEmit(X.onLocalAudioPropertiesReport,B),this._room){const e=[];this._room.config.isMultiChatMode()?this._room.getActiveSpeakerInMultiChatMode().forEach(o=>{var t,s;const v=255*o.audioLevel;e.push({streamKey:{userId:o.userId,streamIndex:F.STREAM_INDEX_MAIN,roomId:(t=(s=this._room)===null||s===void 0?void 0:s.config.roomId)!==null&&t!==void 0?t:""},audioPropertiesInfo:{linearVolume:v,nonlinearVolume:Er(v)}})}):this._room.remoteStreams.forEach((o,t)=>{o.forEach(s=>{if(s.audioTrack){var v,r;const n=s.audioTrack.getAudioLevel();e.push({streamKey:{userId:t,streamIndex:s.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN,roomId:(v=(r=this._room)===null||r===void 0?void 0:r.config.roomId)!==null&&v!==void 0?v:""},audioPropertiesInfo:{linearVolume:n,nonlinearVolume:Er(n)}})}})}),this.safeEmit(X.onRemoteAudioPropertiesReport,e),this._sendActiveSpeaker(B,e.filter(o=>o.streamKey.streamIndex!==F.STREAM_INDEX_SCREEN))}},Q))}async setVideoSourceType(A,I){this.logger.print("setVideoSourceType()","index: %o, videoSourceType: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(I,"VideoSourceType",[Wg.VIDEO_SOURCE_TYPE_EXTERNAL,Wg.VIDEO_SOURCE_TYPE_INTERNAL]);const g=A===F.STREAM_INDEX_MAIN?"video":"screenVideo";if(this._trackSourceType[g]!==I){if(this._trackSourceType[g]=I,this.logger.print("setVideoSourceType","set ".concat(g," source type to ").concat(I)),this._localVideoTrack&&A===F.STREAM_INDEX_MAIN){var C,Q,B;let v=!1;if(I===Wg.VIDEO_SOURCE_TYPE_EXTERNAL){v=!0;const n=this._ctx.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCBeautyExtension");n&&n.emit("stop"),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy()}(C=this._localVideoTrack)===null||C===void 0||C.destroy(),this._localVideoTrack=void 0;const r=(Q=this._room)===null||Q===void 0?void 0:Q.config.isAutoPublish;var E,i;v?(E=this._room)===null||E===void 0||(E=E.localStream)===null||E===void 0||(E=E.observer)===null||E===void 0||E.setEnableVideo(!1):(i=this._room)===null||i===void 0||(i=i.localStream)===null||i===void 0||(i=i.observer)===null||i===void 0||i.setPushVideo(!1),((B=this._room)!==null&&B!==void 0&&(B=B.localStream)!==null&&B!==void 0&&B.pubVideo||r)&&await this._updatePublish()}if(this._localScreenVideoTrack&&A===F.STREAM_INDEX_SCREEN){var e,o;let v=!1;var t,s;I===Wg.VIDEO_SOURCE_TYPE_EXTERNAL&&(v=!0,this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy()),(e=this._localScreenVideoTrack)===null||e===void 0||e.destroy(),this._localScreenVideoTrack=void 0,v?(t=this._room)===null||t===void 0||(t=t.localScreenStream)===null||t===void 0||(t=t.observer)===null||t===void 0||t.setEnableVideo(!1):(s=this._room)===null||s===void 0||(s=s.localScreenStream)===null||s===void 0||(s=s.observer)===null||s===void 0||s.setPushVideo(!1),(o=this._room)!==null&&o!==void 0&&(o=o.localScreenStream)!==null&&o!==void 0&&o.pubVideo&&await this._updateScreenPublish()}}}async setExternalVideoTrack(A,I){if(this.logger.print("setExternalVideoTrack()","index: %o, track: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),nF(I),A===F.STREAM_INDEX_MAIN){var g,C;if(this._trackSourceType.video!==Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as external first");this._localVideoTrack=await n9A(this._ctx,I);const E=this._ctx.videoProfile.getContentHint();!I.contentHint&&E&&this._localVideoTrack.setContentHint(E),this._initLocalTrackEvents(this._localVideoTrack),this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(e=>{var o,t;(o=this._localVideoTrack)===null||o===void 0||o.setPlayer(e,this._mirrorType,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this))});const i=(g=this._room)===null||g===void 0?void 0:g.config.isAutoPublish;((C=this._room)!==null&&C!==void 0&&(C=C.localStream)!==null&&C!==void 0&&C.pubVideo||i)&&await this._updatePublish()}if(A===F.STREAM_INDEX_SCREEN){var Q,B;if(this._trackSourceType.screenVideo!==Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as external first");this._localScreenVideoTrack=await d9A(this._ctx,I),this._initLocalTrackEvents(this._localScreenVideoTrack,!0),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(E=>{var i,e;(i=this._localScreenVideoTrack)===null||i===void 0||i.setPlayer(E,this._mirrorType,(e=this._config)===null||e===void 0?void 0:e.autoPlayPolicy,this._initPlayerEvents.bind(this))}),(Q=this._room)===null||Q===void 0||(Q=Q.localScreenStream)===null||Q===void 0||(Q=Q.observer)===null||Q===void 0||Q.setPushVideo(!0),(B=this._room)!==null&&B!==void 0&&(B=B.localScreenStream)!==null&&B!==void 0&&B.pubVideo&&await this._updateScreenPublish()}}async setAudioSourceType(A,I){this.logger.print("setAudioSourceType()","index: %o, audioSourceType: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(I,"audioSourceType",[VC.AUDIO_SOURCE_TYPE_EXTERNAL,VC.AUDIO_SOURCE_TYPE_INTERNAL]);const g=A===F.STREAM_INDEX_MAIN?"audio":"screenAudio";if(this._trackSourceType[g]!==I){if(this._trackSourceType[g]=I,this.logger.print("setVideoSourceType","set ".concat(g," source type to ").concat(I)),this._localAudioTrack&&A===F.STREAM_INDEX_MAIN){var C,Q;let t=!1;this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL&&(t=!0,this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy()),this._localAudioTrack=void 0;const s=(C=this._room)===null||C===void 0?void 0:C.config.isAutoPublish;var B,E;t?(B=this._room)===null||B===void 0||(B=B.localStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setEnableAudio(!1):(E=this._room)===null||E===void 0||(E=E.localStream)===null||E===void 0||(E=E.observer)===null||E===void 0||E.setPushAudio(!1),((Q=this._room)!==null&&Q!==void 0&&(Q=Q.localStream)!==null&&Q!==void 0&&Q.pubAudio||s)&&await this._updatePublish()}if(this._localScreenAudioTrack&&A===F.STREAM_INDEX_SCREEN){var i;let t=!1;var e,o;this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL&&(t=!0,this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy()),this._localScreenAudioTrack=void 0,t?(e=this._room)===null||e===void 0||(e=e.localScreenStream)===null||e===void 0||(e=e.observer)===null||e===void 0||e.setEnableAudio(!1):(o=this._room)===null||o===void 0||(o=o.localScreenStream)===null||o===void 0||(o=o.observer)===null||o===void 0||o.setPushAudio(!1),(i=this._room)!==null&&i!==void 0&&(i=i.localScreenStream)!==null&&i!==void 0&&i.pubAudio&&await this._updateScreenPublish()}}}async setExternalAudioTrack(A,I){if(this.logger.print("setExternalAudioTrack()","index: %o, track: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),nF(I),A===F.STREAM_INDEX_MAIN){var g,C,Q;if(this._trackSourceType.audio!==VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as external first");this._localAudioTrack=await l9A(this._ctx,I),this._localAudioTrack.setVolume(this._localAudioVolume),this._initLocalTrackEvents(this._localAudioTrack);const i=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_MAIN];i.frameSize&&i.callback&&this._localAudioTrack.setDataFetcher(i.frameSize,i.callback);const{position:e,volume:o}=this._ctx.earMonitorSettings[F.STREAM_INDEX_MAIN];e!==QC.NONE&&(this.setEarMonitorMode(F.STREAM_INDEX_MAIN,e),this.setEarMonitorVolume(F.STREAM_INDEX_MAIN,o));const t=(g=this._room)===null||g===void 0?void 0:g.config.isAutoPublish;(C=this._room)===null||C===void 0||(C=C.localStream)===null||C===void 0||(C=C.observer)===null||C===void 0||C.setPushAudio(!0),((Q=this._room)!==null&&Q!==void 0&&(Q=Q.localStream)!==null&&Q!==void 0&&Q.pubAudio||t)&&await this._updatePublish()}if(A===F.STREAM_INDEX_SCREEN){var B,E;if(this._trackSourceType.screenAudio!==VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as external first");this._localScreenAudioTrack=await h9A(this._ctx,I),this._localScreenAudioTrack.setVolume(this._localScreenAudioVolume),this._initLocalTrackEvents(this._localScreenAudioTrack);const i=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_SCREEN];i.frameSize&&i.callback&&this._localScreenAudioTrack.setDataFetcher(i.frameSize,i.callback);const{position:e,volume:o}=this._ctx.earMonitorSettings[F.STREAM_INDEX_SCREEN];e!==QC.NONE&&(this.setEarMonitorMode(F.STREAM_INDEX_SCREEN,e),this.setEarMonitorVolume(F.STREAM_INDEX_SCREEN,o)),(B=this._room)===null||B===void 0||(B=B.localScreenStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setPushAudio(!0),(E=this._room)!==null&&E!==void 0&&(E=E.localScreenStream)!==null&&E!==void 0&&E.pubAudio&&await this._updateScreenPublish()}}async login(A,I){return this.logger.info("login()","token: %o, userInfo: %o",A,I),kQ(A)||OA(A,"token"),dC(I),this._rtmClient.login(A,I)}async logout(){return this.logger.info("logout()"),this._rtmClient.logout()}async updateLoginToken(A){return this.logger.info("updateLoginToken()","token: %o",A),kQ(A)||OA(A,"token"),this._rtmClient.updateLoginToken(A)}async getPeerOnlineStatus(A){return this.logger.info("getPeerOnlineStatus()","userId: %o",A),dC(A),this._rtmClient.getPeerOnlineStatus(A)}async sendUserMessageOutsideRoom(A,I){dC(A);const g=Date.now();return this._rtmClient.sendUserMessageOutsideRoom(A,I).then(C=>(this._messageStatisticsObserver.countUserMessageOutsideRoom(!0,A,!1,g,C),C.id)).catch(C=>{throw this._messageStatisticsObserver.countUserMessageOutsideRoom(!1,A,!1,g,C),C})}async sendUserBinaryMessageOutsideRoom(A,I){dC(A),eD(I,"message");const g=Date.now();return this._rtmClient.sendUserMessageOutsideRoom(A,I).then(C=>(this._messageStatisticsObserver.countUserMessageOutsideRoom(!0,A,!0,g,C),C.id)).catch(C=>{throw this._messageStatisticsObserver.countUserMessageOutsideRoom(!1,A,!0,g,C),C})}async setServerParams(A,I){return this.logger.info("setServerParams()","signature: %o, url: %0",A,I),this._rtmClient.setServerParams(A,I)}async sendServerMessage(A){OA(A,"message");const I=Date.now();return this._rtmClient.sendServerMessage(A).then(g=>{this._messageStatisticsObserver.countServerMessage(!0,!1,I,g)}).catch(g=>{throw this._messageStatisticsObserver.countServerMessage(!1,!1,I,g),g})}async sendServerBinaryMessage(A){eD(A,"message");const I=Date.now();return this._rtmClient.sendServerMessage(A).then(g=>{this._messageStatisticsObserver.countServerMessage(!0,!0,I,g)}).catch(g=>{throw this._messageStatisticsObserver.countServerMessage(!1,!0,I,g),g})}startCloudProxy(A){if(this._room)throw new U(m.START_CLOUD_PROXY_AFTER_JOIN,"[startCloudProxy] should be invoke before join room ");if(this.logger.info("startCloudProxy()",A),OA(A.logProxy,"logProxy"),Array.isArray(A.accessProxy))for(const I of A.accessProxy)OA(I,"accessProxy");else OA(A.accessProxy,"accessProxy");OA(A.configProxy,"configProxy"),this._originIceConfigRequestUrls=lA("ICE_CONFIG_REQUEST_URLS"),this._originLogServerUrl=lA("LOG_SERVER_URL"),this._originConfigServerUrls=lA("CONFIG_REQUEST_DOMAINS"),jC("ICE_CONFIG_REQUEST_URLS",A.accessProxy),jC("LOG_SERVER_URL",vaA(A.logProxy)),jC("CONFIG_REQUEST_DOMAINS",[A.configProxy]),$A.clearAccessNode(this._appId),$A.clearAccessUrls(),this._ctx.useCloudProxy=!0}stopCloudProxy(){var A,I,g;if(this._room)throw new U(m.STOP_CLOUD_PROXY_BEFORE_LEAVE,"[stopCloudProxy] should be invoke after leave room ");this.logger.info("stopCloudProxy()");const C=(A=this._originIceConfigRequestUrls)===null||A===void 0?void 0:A.map(Q=>Q.replace("https://","").replace("/dispatch/v1/AccessInfo?Action=GetAccessInfo",""));jC("ICE_CONFIG_REQUEST_URLS",C??[]),jC("LOG_SERVER_URL",(I=this._originLogServerUrl)!==null&&I!==void 0?I:""),jC("CONFIG_REQUEST_DOMAINS",(g=this._originConfigServerUrls)!==null&&g!==void 0?g:[]),$A.clearAccessNode(this._appId),$A.clearAccessUrls(),this._ctx.useCloudProxy=!1,this._startCloudProxyTimestamp=void 0}async startPushPublicStream(A,I){var g,C;if(this.logger.print("startPushPublicStream()","publicStreamId: %o, publicStreamParam: %o",A,I),sa(A),this._assertNotInRoom(),this._publicStreamIds.get(A))throw new U(m.REPEAT_PUSH,"repeat push public media stream");this._room&&((C=I.layout)===null||C===void 0||(C=C.regions)===null||C===void 0||C.map(B=>{var E;B.roomId=(E=this._room)===null||E===void 0?void 0:E.config.roomId}));const Q=dF(A,"started",I);return(g=this._room)===null||g===void 0||(g=g.publicStreamControlMessage(Q))===null||g===void 0?void 0:g.then(()=>{this._publicStreamIds.set(A,A)})}async updatePublicStreamParam(A,I){var g;this.logger.print("startPushPublicStream()","publicStreamId: %o, publicStreamParam: %o",A,I),sa(A),this._assertNotInRoom();const C=dF(A,"layoutChanged",I);return(g=this._room)===null||g===void 0?void 0:g.publicStreamControlMessage(C)}async stopPushPublicStream(A){var I;return this.logger.print("startPushPublicStream()","publicStreamId: %o",A),sa(A),this._assertNotInRoom(),(I=this._room)===null||I===void 0?void 0:I.publicStreamControlMessage({type:"publicstream",action:"stopped",publicStreamID:A}).then(()=>{this._publicStreamIds.delete(A)})}async startPlayPublicStream(A){await this._wtnStreamManager.startPlayWTN(null,A,!1,!1)}async stopPlayPublicStream(A){await this._wtnStreamManager.stopPlayWTN(A)}async setAudioProfile(A){this.logger.info("setAudioProfile()","profile: %o",A),await this._shouldUpdateAudioConf("setAudioProfile")&&this._ctx.audioProfileManager.setAudioProfile(A)}async setAudioEncodeMaxBitrate(A){if(this.logger.print("setAudioEncodeMaxBitrate()",A),qe(A,"maxBitrate",6,256),this._ctx.audioProfileManager.setCustomMaxBitrate(A),this._ctx.audioProfileManager.customMaxBitrate){var I,g,C,Q;if(mI&&((I=this._room)!==null&&I!==void 0&&(I=I.localStream)!==null&&I!==void 0&&I.pubAudio||(g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubAudio))throw new U(m.NOT_SUPPORTED,"Your browser does not support set audio encode maxBitrate dynamically.");await((C=this._room)===null||C===void 0?void 0:C.setAudioEncodeMaxBitrate(F.STREAM_INDEX_MAIN,A)),await((Q=this._room)===null||Q===void 0?void 0:Q.setAudioEncodeMaxBitrate(F.STREAM_INDEX_SCREEN,A))}}setPublicStreamVideoPlayer(A,I){return this._wtnStreamManager.setWTNRemoteVideoPlayer(A,I)}async setDummyCaptureImagePath(A,I){return new Promise((g,C)=>{OA(I,"filePath");const Q=new Image;Q.crossOrigin="anonymous",Q.src=I,Q.onload=()=>{A===F.STREAM_INDEX_MAIN?this._dummyMainImage=Q:this._dummyScreenImage=Q;try{this._updateDummyCaptureImage(A),g()}catch(B){C(new U(m.UNEXPECTED_ERROR,B.message))}},Q.onerror=()=>{C(new U(m.UNEXPECTED_ERROR,"Load image error"))}})}_updateDummyCaptureImage(A){let I,g;if(A===F.STREAM_INDEX_MAIN?(I=this._dummyMainImage,g=this._ctx.videoProfile.getVideoEncodeConfig()[0]):(I=this._dummyScreenImage,g=this._ctx.videoProfile.getScreenEncodeConfig()),!I)return;const C=document.createElement("canvas"),Q=C.getContext("2d"),B=jA(g.width),E=jA(g.height);if(!Q)throw new U(m.UNEXPECTED_ERROR,"Not support canvas");let i,e;!B||!E||I.width<=B&&I.height<=E?(i=I.width,e=I.height):(i=Math.min(B,I.width*E/I.height),e=Math.min(E,I.height*B/I.width)),C.width=i,C.height=e,Q.drawImage(I,0,0,I.width,I.height,0,0,i,e);const o=window.setInterval(()=>{I&&Q.drawImage(I,0,0,I.width,I.height,0,0,i,e)},200);A===F.STREAM_INDEX_MAIN?(clearInterval(this._dummyMainTimer),this._dummyMainTimer=o):(clearInterval(this._dummyScreenTimer),this._dummyScreenTimer=o);const t=C.captureStream(5).getVideoTracks()[0];var s,v;A===F.STREAM_INDEX_MAIN?(this._localImgVideoTrack=t,(s=this._localVideoTrack)!==null&&s!==void 0&&s.dummy&&this._localVideoTrack.setTrack(this._localImgVideoTrack)):(this._localImgScreenTrack=t,(v=this._localScreenVideoTrack)!==null&&v!==void 0&&v.dummy&&this._localScreenVideoTrack.setTrack(this._localImgScreenTrack))}_addListenExtensionEvent(A){A.on("re-capture-audio",()=>{this._localAudioTrack&&this.stopAudioCapture().then(()=>{this.startAudioCapture()})}),A.on("re-capture-video",()=>{this._localVideoTrack&&!this._localVideoTrack.dummy&&this.stopVideoCapture().then(()=>{this.startVideoCapture()})}),A.on("reset-video-effect",async(I,g)=>{if(this._localVideoTrack&&!this._localVideoTrack.dummy){var C;this._localVideoTrack&&this._removeLocalTrackEvents(this._localVideoTrack);try{await this._localVideoTrack.generatePreProcessingTrack()}catch(Q){g(Q)}this._initLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.stopAll(),this._localVideoTrack.playAll(),this.safeEmit(X.onLocalStreamTrackChangedByExtension,{streamIndex:F.STREAM_INDEX_MAIN,type:"video"}),I(),(C=this._room)!==null&&C!==void 0&&(C=C.localStream)!==null&&C!==void 0&&C.pubVideo&&await this._updatePublish(),this._wtnStreamManager._updatePushTrack()}I()})}async registerExtension(A){var I,g,C;A.monitor=this.monitor,A.logger=new uA(A.name,0,this.id);try{if(!await A.isSupported())throw new Error("This extension is not supported.")}catch{throw new Error("This extension is not supported.")}lA("VERSION")!==A.version&&(bi("This extension version is ".concat(A.version,", but the sdk version is ").concat(lA("VERSION"),".")),this.monitor.report("rtc_error",{message:"This extension version is ".concat(A.version,", but the sdk version is ").concat(lA("VERSION"),"."),error_code:-1}));let Q={};A.name==="RTCAIAnsExtension"&&(Q={overloadThreshold:lA("AINR_OVERLOAD_THRESHOLD"),enableCache:lA("AINR_ENABLE_DUMP"),urls:lA("AINR_URLS"),cacheTime:lA("AINR_CACHE_TIME"),dumpTime:lA("AINR_DUMP_TIME")}),Q=UaA(Q),await A.init(Q),this._ctx.extensionManager.register(A),this._addListenExtensionEvent(A),(I=this._localAudioTrack)===null||I===void 0||I.generatePreProcessingTrack(),(g=this._localVideoTrack)===null||g===void 0||g.generatePreProcessingTrack(),(C=this._localScreenAudioTrack)===null||C===void 0||C.generatePreProcessingTrack()}defaultTranscoding(){return JSON.parse(JSON.stringify(Pt.getDefaultValue()))}async _updatePublish(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(this.logger.info("_updatePublish()","config: %o",A),A=R(R({},{mediaType:void 0,invokeByJoinRoom:!1,pubState:wC.PUB}),A),!this._ctx.visibility)throw new U(m.NO_PUBLISH_PERMISSION,"no publish permission");const g=await this._pubLock.lock();if(this._room&&this._ctx.signalingManager.isConnected())try{await this._room.publish(this._localVideoTrack,this._localAudioTrack,A.mediaType,A.pubState,A.invokeByJoinRoom)}catch(C){throw C instanceof U?(C.code===m.TOKEN_NO_PUBLISH_PERMISSION&&this._room.config.setTokenPublishPrivilegeExpired(!0),C):new U(m.UNEXPECTED_ERROR,"unexpected error",C)}finally{g()}else if(g(),I)throw new U(m.NOT_CONNECTED_YET,"not connected")}async startAudioPlaybackDeviceTest(A,I){return this.logger.print("startAudioPlaybackDeviceTest()","filePath: %o, indicationInterval: %o",A,I),OA(A,"filePath"),qe(I,"indicationInterval"),await this._audioDeviceManager.startAudioPlaybackDeviceTest(A,I)}stopAudioPlaybackDeviceTest(){this.logger.info("stopAudioPlaybackDeviceTest()"),this._audioDeviceManager.stopAudioPlaybackDeviceTest()}async startAudioDeviceRecordTest(A,I){this.logger.print("startAudioDeviceRecordTest()","indicationInterval: %o",A),qe(A,"indicationInterval"),await this._audioDeviceManager.startAudioDeviceRecordTest(A,I,this._localAudioVolume)}stopAudioDeviceRecordAndPlayTest(){this.logger.info("stopAudioDeviceRecordAndPlayTest()"),this._audioDeviceManager.stopAudioDeviceRecordAndPlayTest()}stopAudioDevicePlayTest(){this.logger.info("stopAudioDevicePlayTest()"),this._audioDeviceManager.stopAudioDevicePlayTest()}setRemoteUserPriority(A,I){var g;this.logger.print("setRemoteUserPriority()","userId: %o, priority: %o",A,I);try{dC(A),MA(I,"priority",[xn.HIGH,xn.MEDIUM,xn.LOW])}catch(C){return console.warn(C),!1}return this._ctx.userPriority.set(A,I),(g=this._room)===null||g===void 0||g.updateRemoteUserPriority(A),!0}async takeLocalSnapshot(A){this.logger.print("takeLocalSnapshot()","streamIndex: %o",A),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);const I=A===F.STREAM_INDEX_MAIN?this.localVideoTrack:this.localScreenVideoTrack;if(!I)throw new U(m.INVOKED_BEFORE_CAPTURE,"capture first");return I.snapshot()}async takeRemoteSnapshot(A,I){var g;this.logger.print("takeRemoteSnapshot()","id: %o, streamIndex: %o",A,I),OA(A,"id"),MA(I,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);const C=((g=this._room)===null||g===void 0||(g=g.remoteStreams.get(A))===null||g===void 0||(g=g.find(Q=>Q.isScreen===(I===F.STREAM_INDEX_SCREEN)))===null||g===void 0?void 0:g.videoTrack)||this._wtnStreamManager.__getPublicStreamTrack(A,"video");if(!C)throw new U(m.STREAM_NOT_EXIST,"stream not exist");return C.snapshot()}setSubscribeFallbackOption(A){this.logger.info("setSubscribeFallbackOption()","option: %o",A);try{MA(A,"option",[Hn.DISABLE,Hn.VIDEO_STREAM_LOW,Hn.AUDIO_ONLY])}catch(I){return console.warn(I),!1}return!this._room&&(this._ctx.subscribeFallbackOption=A,!0)}getLocalStreamTrack(A,I){let g,C;if(A===F.STREAM_INDEX_MAIN?(g=I==="video"?this.localVideoTrack:this.localAudioTrack,C=()=>{var E;return(E=this._room)===null||E===void 0?void 0:E.localStream}):(g=I==="video"?this.localScreenVideoTrack:this.localScreenAudioTrack,C=()=>{var E;return(E=this._room)===null||E===void 0?void 0:E.localScreenStream}),!g)return;const Q=g instanceof Do&&g.mixedAudioTrack?g.mixedAudioTrack:g.preprocessingTrack;if(!Q)return;const B=C();return this._reportMsTrackEvent(Q,(B==null?void 0:B.stream.id)||"local"),Q}getRemoteStreamTrack(A,I,g){var C;let Q;const B=((C=this._room)===null||C===void 0?void 0:C.remoteStreams.get(A))||[];if(B==null||!B.length)return;let E;var i,e,o,t;if(I===F.STREAM_INDEX_MAIN?(E=B.find(r=>!r.isScreen),Q=g==="video"?(i=E)===null||i===void 0?void 0:i.videoTrack:(e=E)===null||e===void 0?void 0:e.audioTrack):(E=B.find(r=>r.isScreen),Q=g==="video"?(o=E)===null||o===void 0?void 0:o.videoTrack:(t=E)===null||t===void 0?void 0:t.audioTrack),!Q)return;const s=Q.preprocessingTrack;if(!s||!E)return;const{streamId:v}=E;return this._reportMsTrackEvent(s,v),s}getPublicStreamTrack(A,I){const g=this._wtnStreamManager.__getPublicStreamTrack(A,I),C=g==null?void 0:g.preprocessingTrack;if(C)return C?(this._reportMsTrackEvent(C,A),C):void 0}setRemoteStreamRenderSync(A){return!this._room&&(this._ctx.avSync=!!A,!0)}setJoinRoomParams(A){A&&(this._ctx.joinRoomParams=A)}async setAudioSelectionConfig(A){MA(A,"audioSelectionPriority",[On.DEFAULT,On.HIGH]),this._ctx.mediaParams||(this._ctx.mediaParams={}),this._ctx.mediaParams.audioSelectionConfig={isHighPriority:A===On.HIGH},this._room&&await this._room.updateMediaParams(this._ctx.mediaParams)}setCaptureVolume(A,I){MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),I=Cl(I,"volume",0,400);var g,C,Q,B,E;A===F.STREAM_INDEX_SCREEN?((g=this._localScreenAudioTrack)===null||g===void 0||g.once("needReplaceTrack",()=>{var i;(i=this._room)===null||i===void 0||i.updatePubScreenTrack()}),(C=this._localScreenAudioTrack)===null||C===void 0||C.setVolume(I),this._localScreenAudioVolume=I):((Q=this._localAudioTrack)===null||Q===void 0||Q.once("needReplaceTrack",()=>{var i;(i=this._room)===null||i===void 0||i.updatePubTrack()}),(B=this._localAudioTrack)===null||B===void 0||B.setVolume(I),(E=this._audioDeviceManager.audioTrack)===null||E===void 0||E.setVolume(I),this._localAudioVolume=I)}setPlaybackVolume(A,I,g){var C,Q,B;if(dC(A),MA(I,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),g=Cl(g,"volume",0,400),(C=this._room)!==null&&C!==void 0&&C.config.isMultiChatMode())return void bi("setPlaybackVolume is not supported in Conference mode");const E=I===F.STREAM_INDEX_SCREEN;E?this._remoteScreenAudioVolume.set(A,g):this._remoteAudioVolume.set(A,g);const i=(Q=this._room)===null||Q===void 0||(Q=Q.remoteStreams.get(A))===null||Q===void 0?void 0:Q.find(e=>e.isScreen===E);i==null||(B=i.audioTrack)===null||B===void 0||B.setVolume(g)}setPublicStreamVolume(A,I){this._wtnStreamManager.setWTNRemoteAudioPlaybackVolume(A,I)}async startForwardStreamToRooms(A){return A.forEach(I=>{pc(I.roomId)}),this._assertNotInRoom(),await this._room.startForwardStream2Rooms(A)}async updateForwardStreamToRooms(A){return A.forEach(I=>{pc(I.roomId)}),this._assertNotInRoom(),await this._room.updateForwardStream2Rooms(A)}async stopForwardStreamToRooms(){return this._assertNotInRoom(),await this._room.stopForwardStream2Rooms()}async pauseForwardStreamToAllRooms(){return this._assertNotInRoom(),await this._room.pauseForwardStream2AllRooms()}async resumeForwardStreamToAllRooms(){return this._assertNotInRoom(),await this._room.resumeForwardStream2AllRooms()}async ambulance(){const A=await HuA(this),I=JSON.stringify(A);return this.monitor.reportLongString("ambulance",I),A}async setEarMonitorMode(A,I){this.logger.info("setEarMonitorMode()","streamIndex: %s, position: %s",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(I,"position",[QC.NONE,QC.AFTER_CAPTURE,QC.AFTER_PROCESS]),this._ctx.earMonitorSettings[A].position=I;const g=A===F.STREAM_INDEX_MAIN?this.localAudioTrack:A===F.STREAM_INDEX_SCREEN?this.localScreenAudioTrack:void 0;if(g)return I!==QC.NONE?g.play(I):g.stop();this.logger.warn("setEarMonitorMode()","local audio track not exist")}setEarMonitorVolume(A,I){this.logger.info("setEarMonitorVolume()","streamIndex: %s, volume: %s",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),I=Cl(I,"volume",0,400),this._ctx.earMonitorSettings[A].volume=I;const g=A===F.STREAM_INDEX_MAIN?this.localAudioTrack:A===F.STREAM_INDEX_SCREEN?this.localScreenAudioTrack:void 0;if(g)return g.setPlaybackVolume(I);this.logger.warn("setEarMonitorVolume()","local audio track not exist")}setUserInfo(A,I){pc(A),dC(I),this.monitor.set({room_id:A,user_id:I})}_reportMsTrackEvent(A,I){if(!A.hookStop){A.hookStop=!0;const g=A.stop;A.stop=()=>{AI(this.id,"stop",I,0,I),g.call(A)}}}async _updateScreenPublish(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.logger.info("_updateScreenPublish()"),A=R(R({},{mediaType:void 0,pubState:wC.PUB}),A),!this._ctx.visibility)throw new U(m.NO_PUBLISH_PERMISSION,"no publish permission");const I=await this._pubLock.lock();if(this._room&&this._ctx.signalingManager.isConnected())try{await this._room.publishScreen(this._localScreenVideoTrack,this._localScreenAudioTrack,A.mediaType,A.pubState)}catch(g){throw g instanceof U?g:new U(m.UNEXPECTED_ERROR,"unexpected error",g)}finally{I()}else I()}_updateAudioPlayerState(A){this.logger.info("_updateAudioPlayerState()");const{userId:I,isScreen:g,isPublic:C}=A;if(A.audioTrack&&A.attributes.audiostream&&A.subAudio){var Q,B,E;if(!A.audioTrack.havePlayer()){var i,e;const r=new FR(this.id,I,{muted:((i=this._config)===null||i===void 0?void 0:i.autoPlayPolicy)===Ae.VIDEO_ONLY||((e=this._config)===null||e===void 0?void 0:e.autoPlayPolicy)===Ae.PLAY_MANUALLY,isScreen:!C&&g});A.audioTrack.setPlayer(r),A.audioTrack.bindPlayerEvent(this._initPlayerEvents.bind(this));const n=this._audioDeviceManager.getSinkId();n&&A.audioTrack.setPlaybackDevice(n)}A.audioTrack.play();const v=C?(Q=this._ctx.publicAudioVolume.get(I))!==null&&Q!==void 0?Q:100:g?(B=this._remoteScreenAudioVolume.get(I))!==null&&B!==void 0?B:100:(E=this._remoteAudioVolume.get(I))!==null&&E!==void 0?E:100;if(A.audioTrack.setVolume(v),CQ&&v9){var o,t;const r=(o=(t=this._room)===null||t===void 0?void 0:t.remoteStreams)!==null&&o!==void 0?o:new Map;buA(r)}}else{var s;(s=A.audioTrack)===null||s===void 0||s.stop()}}_updateVideoPlayerState(A){if(this.logger.info("_updateVideoPlayerState()"),A.videoTrack){const g=A.isPublic?this._wtnStreamManager._publicVideoPlayerConfig:this._remoteVideoPlayerConfig[A.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN].get(A.userId);if(g)for(const[,C]of g){var I;A.videoTrack.setPlayer(this.id,C,(I=this._config)===null||I===void 0?void 0:I.autoPlayPolicy,this._initPlayerEvents.bind(this))}}}get _localVideoTrack(){return this._ctx.localVideoTrack}get _localAudioTrack(){return this._ctx.localAudioTrack}set _localVideoTrack(A){this._ctx.localVideoTrack=A}set _localAudioTrack(A){this._ctx.localAudioTrack=A}async _onAddStream(A){const I=A.stream,{localaudio:g,audiostream:C,localvideo:Q,videostream:B}=I.attributes;let E=OC.NONE;C&&(E|=iA.AUDIO),B&&(E|=iA.VIDEO),E&&(await new Promise(i=>setTimeout(i)),I.isScreen?this.safeEmit(X.onUserPublishScreen,{userId:I.userId,mediaType:E}):(this.safeEmit(X.onUserPublishStream,{userId:I.userId,mediaType:E,videoStreamDescriptions:I.attributes.videoDescriptions}),this._handleAutoSubscribe(I,!0)),this.safeEmit("onAddStream",{userId:I.userId,mediaType:E,isScreen:!!I.isScreen}),I.isScreen||(g&&this.safeEmit(X.onUserStartAudioCapture,{userId:I.userId}),Q&&this.safeEmit(X.onUserStartVideoCapture,{userId:I.userId})))}_handleAutoSubscribe(A,I){var g,C;let Q=OC.NONE;if((g=this._room)!==null&&g!==void 0&&g.config.isAutoSubscribeAudio&&(Q|=iA.AUDIO),(C=this._room)!==null&&C!==void 0&&C.config.isAutoSubscribeVideo&&(Q|=iA.VIDEO),Q){var B,E,i;I&&$I(Q)&&((E=A.observer)===null||E===void 0||E.setAutoSubscribeAudio(!0)),I&&gI(Q)&&((i=A.observer)===null||i===void 0||i.setAutoSubscribeVideo(!0)),(B=this._room)!==null&&B!==void 0&&B.config.tokenSubscribePrivilegeExpired?($I(Q)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[A.streamId]=A.streamId),gI(Q)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[A.streamId]=A.streamId)):this._subscribe(!1,A.userId,Q)}}_onRemoveStream(A){var I;const g=A.stream,C=(I=$uA[A.reason])!==null&&I!==void 0?I:_B.STREAM_REMOVE_REASON_OTHER,Q=g.isScreen?X.onUserUnpublishScreen:X.onUserUnpublishStream;let B=OC.NONE;g.attributes.audiostream&&(B|=iA.AUDIO),g.attributes.videostream&&(B|=iA.VIDEO),B!==OC.NONE&&(this.safeEmit(Q,{userId:g.userId,mediaType:B,reason:C}),this.safeEmit("onRemoveStream",{userId:g.userId,isScreen:g.isScreen})),delete this._pauseAllSubscribeState.resumeAudioStreamIds[g.streamId],delete this._pauseAllSubscribeState.resumeVideoStreamIds[g.streamId],typeof A.callback=="function"&&A.callback()}_onUserConnection(A){setTimeout(()=>this.safeEmit(X.onUserJoined,A))}_onUserLeave(A){this.safeEmit(X.onUserLeave,A)}_onRoomError(A){var I;this.safeEmit(X.onError,A),(I=this._room)===null||I===void 0||I.destroy(),this._room=void 0}_onNetworkQuality(){for(var A=arguments.length,I=new Array(A),g=0;g{var E;return(E=B.audioTrack)===null||E===void 0?void 0:E.stop()})}else A.state===XA.CONNECTION_STATE_CONNECTED&&this._rtmClient.setRTSMessageLimit(this._ctx.rtsLimiter.conf)}_stopAudioPropertiesReport(){this._audioPropertiesReportTimer!==null&&(clearInterval(this._audioPropertiesReportTimer),this._audioPropertiesReportTimer=null)}_onResubscribe(A){var I,g;A.stream&&((I=A.stream.videoTrack)===null||I===void 0||I.stopAll(),(g=A.stream.audioTrack)===null||g===void 0||g.stop(),this._updateAudioPlayerState(A.stream),this._updateVideoPlayerState(A.stream))}_onSubscribePushTrack(A){A.stream&&this._updateAudioPlayerState(A.stream)}_onRemovePushTrack(A){A.stream&&this._updateAudioPlayerState(A.stream)}_onUserPublishStateChange(A){let{userId:I,isScreen:g,mediaType:C,pubState:Q,remoteStream:B}=A;const E={userId:I,mediaType:C};C&iA.AUDIO&&setTimeout(()=>{this._updateAudioPlayerState(B)}),g?Q===wC.PUB?this.safeEmit(X.onUserPublishScreen,E):this.safeEmit(X.onUserUnpublishScreen,R(R({},E),{},{reason:_B.STREAM_REMOVE_REASON_UNPUBLISH})):Q===wC.PUB?(E.videoStreamDescriptions=B.attributes.videoDescriptions,this.safeEmit(X.onUserPublishStream,E),this._handleAutoSubscribe(B,!0)):this.safeEmit(X.onUserUnpublishStream,R(R({},E),{},{reason:_B.STREAM_REMOVE_REASON_UNPUBLISH}))}_onCustomMessage(A){const{message:I}=A;A.binary?this.safeEmit(X.onRoomBinaryMessageReceived,{userId:A.clientId,message:I}):this.safeEmit(X.onRoomMessageReceived,{userId:A.clientId,message:I})}_onUserMessageReceived(A){this._messageStatisticsObserver.recvP2PMessage(A.userId),this.safeEmit(X.onUserMessageReceived,A)}_onUserBinaryMessageReceived(A){this._messageStatisticsObserver.recvP2PMessage(A.userId),this.safeEmit(X.onUserBinaryMessageReceived,A)}_onLiveTranscodingResult(A){this.safeEmit(X.onLiveTranscodingResult,A)}_onStreamMixingEvent(A){this.safeEmit(X.onStreamMixingEvent,A)}_onUserTokenWillExpire(){this.safeEmit(X.onTokenWillExpire)}_onUserTokenPublishPrivilegeWillExpire(){this.safeEmit(X.onTokenPublishPrivilegeWillExpire)}async _onUserTokenPublishPrivilegeDidExpired(){var A,I,g;await((A=this._room)===null||A===void 0?void 0:A.unpublish()),await((I=this._room)===null||I===void 0?void 0:I.unpublishScreen()),(g=this._room)===null||g===void 0||g.config.setTokenPublishPrivilegeExpired(!0),this.safeEmit(X.onTokenPublishPrivilegeDidExpired,{errorCode:m.TOKEN_NO_PUBLISH_PERMISSION,message:"Token no longer has publish privilege"})}_onUserTokenSubscribePrivilegeWillExpire(){this.safeEmit(X.onTokenSubscribePrivilegeWillExpire)}async _onUserTokenSubscribePrivilegeDidExpired(){this._handleLoseSubscribePrivilege(),this.safeEmit(X.onTokenSubscribePrivilegeDidExpired,{errorCode:m.TOKEN_NO_SUBSCRIBE_PERMISSION,message:"Token no longer has subscribe privilege"})}async _unSubscribeAllRemoteStreams(){return this._room?this._pauseAllRemoteStreams(iA.AUDIO_AND_VIDEO):Promise.resolve()}_onPushPublicStreamResult(A){this.safeEmit(X.onPushPublicStreamResult,A)}_handleRTMClient(A){A.on("onUserMessageReceivedOutsideRoom",I=>{this._messageStatisticsObserver.recvP2POutRoomMessage(I.userId),this.safeEmit(X.onUserMessageReceivedOutsideRoom,I)}),A.on("onUserBinaryMessageReceivedOutsideRoom",I=>{this._messageStatisticsObserver.recvP2POutRoomMessage(I.userId),this.safeEmit(X.onUserBinaryMessageReceivedOutsideRoom,I)}),A.on("onUserDisconnection",()=>{this.safeEmit(X.onError,{errorCode:m.RTM_DUPLICATE_LOGIN})}),A.on("onRTMTokenError",()=>{this.safeEmit(X.onError,{errorCode:m.RTM_TOKEN_ERROR})}),A.on("onServerParamsSetResult",I=>{this.safeEmit(X.onServerParamsSetResult,I==null?void 0:I.code)})}getSubLock(A,I){const g=A?this._subScreenLocks:this._subLocks;let C=g.get(I);return C||(C=new tB("sub_".concat(A?1:0,"_").concat(I)),g.set(I,C)),C}get localAudioTrack(){return this._localAudioTrack}get localVideoTrack(){return this._localVideoTrack}get localScreenAudioTrack(){return this._localScreenAudioTrack}get localScreenVideoTrack(){return this._localScreenVideoTrack}get remoteStreams(){var A;const I=[];return(A=this._room)!==null&&A!==void 0&&A.remoteStreams&&this._room.remoteStreams.forEach(g=>{Array.isArray(g)&&g.forEach(C=>{I.push({userId:C.userId,isScreen:C.isScreen,hasVideo:C.hasVideo,hasAudio:C.hasAudio,videoStreamDescriptions:C.attributes.videoDescriptions})})}),I}get iceState(){var A;return(A=this._ctx.peerConnection)===null||A===void 0?void 0:A.getIceConnectionState()}get remoteUsers(){var A;const I=[];return(A=this._room)!==null&&A!==void 0&&A.remoteUsers&&this._room.remoteUsers.forEach(g=>{I.push({userId:g.userId})}),I}get multiChatMode(){var A;return!((A=this._room)===null||A===void 0||!A.config.isMultiChatMode())}get checkMediaType(){return this._checkMediaType}get assertNotInRoom(){return this._assertNotInRoom}get peerConnection(){var A;return(A=this._ctx.peerConnection)===null||A===void 0?void 0:A.getOriginRTCPeerConnection()}_handleAudioDeviceManager(){this._audioDeviceManager.on("onAudioPlaybackDeviceTestVolume",A=>{this.safeEmit(X.onAudioPlaybackDeviceTestVolume,A)})}_assertNotInRoom(){if(!this._room||!this._ctx.signalingManager.isConnected())throw new U(m.NOT_CONNECTED_YET,"server not connected")}_checkMediaType(A){MA(A,"mediaType",[iA.AUDIO,iA.VIDEO,iA.AUDIO_AND_VIDEO])}_getUserId(){var A;return((A=this._room)===null||A===void 0?void 0:A.config.userInfo.userId)||"local_user"}async _switchTrack(A){var I;this._initLocalTrackEvents(A),this._localVideoTrack=A,this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(g=>{var C;A.setPlayer(g,this._mirrorType,(C=this._config)===null||C===void 0?void 0:C.autoPlayPolicy,this._initPlayerEvents.bind(this))}),(I=this._room)!==null&&I!==void 0&&(I=I.localStream)!==null&&I!==void 0&&I.pubVideo&&await this._updatePublish(),this._wtnStreamManager._updatePushTrack()}async _shouldUpdateAudioConf(A){var I,g;const C=await((I=this._room)===null||I===void 0?void 0:I.hasPublished())||((g=this._room)===null||g===void 0||(g=g.localStream)===null||g===void 0?void 0:g.pubAudio)||this._localAudioTrack&&this._localAudioTrack.sourceType===oI.INTERNAL;if(C){const Q="engine.".concat(A," should be called before publishing or capturing.");console.warn("[RTC WebSDK]: ".concat(Q)),AI(this.id,A,Q)}return!C}_getRemoteVideoPlayerConfig(A,I,g){var C;return(C=this._remoteVideoPlayerConfig[A].get(I))===null||C===void 0?void 0:C.get(g)}_setRemoteVideoPlayerConfig(A,I,g,C){const Q=this._remoteVideoPlayerConfig[A].get(I)||new Map;Q.set(g,C),this._remoteVideoPlayerConfig[A].set(I,Q)}getRemoteVideoStats(){var A;const I=(A=this._room)===null||A===void 0?void 0:A.remoteStreams;if(!I||I.size===0)return{};const g={};return I.forEach((C,Q)=>{var B,E,i;let e,o;(B=C[0])!==null&&B!==void 0&&B.isScreen?(o=C[0],e=C[1]):(o=C[1],e=C[0]);const t={mainVideoStats:DC(((E=e)===null||E===void 0?void 0:E.getRemoteStreamStats().videoStats)||{}),screenVideoStats:DC(((i=o)===null||i===void 0?void 0:i.getRemoteStreamStats().videoStats)||{})};g[Q]=t}),g}getRemoteAudioStats(){var A;const I=(A=this._room)===null||A===void 0?void 0:A.remoteStreams;if(!I||I.size===0)return{};const g={};return I.forEach((C,Q)=>{var B,E,i;let e,o;(B=C[0])!==null&&B!==void 0&&B.isScreen?(o=C[0],e=C[1]):(o=C[1],e=C[0]);const t={mainAudioStats:DC(((E=e)===null||E===void 0?void 0:E.getRemoteStreamStats().audioStats)||{}),screenAudioStats:DC(((i=o)===null||i===void 0?void 0:i.getRemoteStreamStats().audioStats)||{})};g[Q]=t}),g}getLocalVideoStats(){var A,I;return{mainVideoStats:DC(((A=this._room)===null||A===void 0||(A=A.localStream)===null||A===void 0?void 0:A.getLocalStreamStats().videoStats)||{}),screenVideoStats:DC(((I=this._room)===null||I===void 0||(I=I.localScreenStream)===null||I===void 0?void 0:I.getLocalStreamStats().videoStats)||{})}}getLocalAudioStats(){var A,I;return{mainAudioStats:DC(((A=this._room)===null||A===void 0||(A=A.localStream)===null||A===void 0?void 0:A.getLocalStreamStats().audioStats)||{}),screenAudioStats:DC(((I=this._room)===null||I===void 0||(I=I.localScreenStream)===null||I===void 0?void 0:I.getLocalStreamStats().audioStats)||{})}}getPublicVideoStats(){const A=this._wtnStreamManager.__getRemoteStreams();if(!A||A.size===0)return{};const I={};return A.forEach((g,C)=>{const Q=DC(g.getRemoteStreamStats().videoStats||{});delete Q.isScreen,I[C]=Q}),I}getPublicAudioStats(){const A=this._wtnStreamManager.__getRemoteStreams();if(!A||A.size===0)return{};const I={};return A.forEach((g,C)=>{const Q=DC(g.getRemoteStreamStats().audioStats||{});delete Q.isScreen,I[C]=Q}),I}},P(Du,"hasReportNativeDetector",!1),Du);let j=Cm;f([Z()],j.prototype,"updateToken"),f([Z(),Ge("video")],j.prototype,"setVideoCaptureDevice"),f([Z(),Ge("audio")],j.prototype,"setAudioCaptureDevice"),f([Z()],j.prototype,"connect"),f([SaA,Z()],j.prototype,"joinRoom"),f([Z()],j.prototype,"leaveRoom"),f([Z()],j.prototype,"destroy"),f([Z(),hI],j.prototype,"publishStream"),f([Z(),hI],j.prototype,"unpublishStream"),f([Z(),hI],j.prototype,"publishScreen"),f([Z(),hI],j.prototype,"unpublishScreen"),f([Z(),hI],j.prototype,"subscribeStream"),f([Yk],j.prototype,"_subscribe"),f([Z(),hI],j.prototype,"unsubscribeStream"),f([Z(),hI],j.prototype,"subscribeScreen"),f([Z(),hI],j.prototype,"unsubscribeScreen"),f([Yk],j.prototype,"_unsubscribe"),f([Z(),kk],j.prototype,"setRemoteVideoConfig"),f([Z()],j.prototype,"setRemoteSimulcastStreamType"),f([Z(),Ge("video")],j.prototype,"startVideoCapture"),f([Z(),Ge("video")],j.prototype,"stopVideoCapture"),f([Z(),Ge("audio")],j.prototype,"startAudioCapture"),f([Z(),Ge("audio")],j.prototype,"stopAudioCapture"),f([Z(),Ge("all")],j.prototype,"startAudioAndVideoCapture"),f([Z()],j.prototype,"startVideoAndAudioCapture"),f([Z()],j.prototype,"getAudioMixingManager"),f([Z()],j.prototype,"getWTNStreamManager"),f([Z()],j.prototype,"getCallId"),f([Z(),pk],j.prototype,"startScreenCapture"),f([Z(),pk],j.prototype,"stopScreenCapture"),f([Z()],j.prototype,"setLocalVideoPlayer"),f([Z(),hI],j.prototype,"startLiveTranscoding"),f([Z(),hI],j.prototype,"updateLiveTranscoding"),f([Z(),hI],j.prototype,"stopLiveTranscoding"),f([Z(),hI],j.prototype,"startSubtitle"),f([Z(),hI],j.prototype,"updateSubtitleConfig"),f([Z(),hI],j.prototype,"stopSubtitle"),f([Z()],j.prototype,"setBusinessId"),f([Z(),hI],j.prototype,"setUserVisibility"),f([Z()],j.prototype,"setRemoteVideoPlayer"),f([Z()],j.prototype,"setLocalVideoMirrorType"),f([Z()],j.prototype,"setRemoteVideoMirrorType"),f([Z()],j.prototype,"setAudioPlaybackDevice"),f([Z()],j.prototype,"play"),f([Z()],j.prototype,"stop"),f([Z()],j.prototype,"getAudioVolume"),f([Z()],j.prototype,"setAudioFrameCallback"),f([Z(),hI],j.prototype,"pauseAllSubscribedStream"),f([Z(),hI],j.prototype,"resumeAllSubscribedStream"),f([Z()],j.prototype,"sendUserMessage"),f([Z()],j.prototype,"sendUserBinaryMessage"),f([Z()],j.prototype,"sendRoomMessage"),f([Z()],j.prototype,"sendRoomBinaryMessage"),f([Z()],j.prototype,"setAudioCaptureConfig"),f([uF("4.51"),Z()],j.prototype,"setVideoCaptureConfig"),f([Z()],j.prototype,"enableSimulcastMode"),f([Z()],j.prototype,"setLocalSimulcastMode"),f([Z()],j.prototype,"setVideoEncoderConfig"),f([Z()],j.prototype,"setScreenEncoderConfig"),f([Z(),hI],j.prototype,"sendSEIMessage"),f([uF("4.42"),Z()],j.prototype,"setAudioVolumeIndicationInterval"),f([Z()],j.prototype,"enableAudioPropertiesReport"),f([Z()],j.prototype,"setVideoSourceType"),f([Z()],j.prototype,"setExternalVideoTrack"),f([Z()],j.prototype,"setAudioSourceType"),f([Z()],j.prototype,"setExternalAudioTrack"),f([Z()],j.prototype,"login"),f([Z()],j.prototype,"logout"),f([Z()],j.prototype,"updateLoginToken"),f([Z()],j.prototype,"getPeerOnlineStatus"),f([Z()],j.prototype,"sendUserMessageOutsideRoom"),f([Z()],j.prototype,"sendUserBinaryMessageOutsideRoom"),f([Z()],j.prototype,"setServerParams"),f([Z()],j.prototype,"sendServerMessage"),f([Z()],j.prototype,"sendServerBinaryMessage"),f([Z()],j.prototype,"startCloudProxy"),f([Z()],j.prototype,"stopCloudProxy"),f([Z()],j.prototype,"startPushPublicStream"),f([Z()],j.prototype,"updatePublicStreamParam"),f([Z()],j.prototype,"stopPushPublicStream"),f([Z(["streamId"])],j.prototype,"startPlayPublicStream"),f([Z(["streamId"])],j.prototype,"stopPlayPublicStream"),f([Z()],j.prototype,"setAudioProfile"),f([Z()],j.prototype,"setAudioEncodeMaxBitrate"),f([Z()],j.prototype,"setPublicStreamVideoPlayer"),f([Z()],j.prototype,"setDummyCaptureImagePath"),f([Z()],j.prototype,"registerExtension"),f([Z()],j.prototype,"startAudioPlaybackDeviceTest"),f([Z()],j.prototype,"stopAudioPlaybackDeviceTest"),f([Z()],j.prototype,"startAudioDeviceRecordTest"),f([Z()],j.prototype,"stopAudioDeviceRecordAndPlayTest"),f([Z()],j.prototype,"stopAudioDevicePlayTest"),f([Z(),kk],j.prototype,"setRemoteUserPriority"),f([Z()],j.prototype,"takeLocalSnapshot"),f([Z()],j.prototype,"takeRemoteSnapshot"),f([Z()],j.prototype,"setSubscribeFallbackOption"),f([Z()],j.prototype,"getLocalStreamTrack"),f([Z()],j.prototype,"getRemoteStreamTrack"),f([Z()],j.prototype,"getPublicStreamTrack"),f([Z()],j.prototype,"setRemoteStreamRenderSync"),f([Z()],j.prototype,"setJoinRoomParams"),f([Z(),hI],j.prototype,"setAudioSelectionConfig"),f([Z(),hI],j.prototype,"startForwardStreamToRooms"),f([Z(),hI],j.prototype,"updateForwardStreamToRooms"),f([Z(),hI],j.prototype,"stopForwardStreamToRooms"),f([Z(),hI],j.prototype,"pauseForwardStreamToAllRooms"),f([Z(),hI],j.prototype,"resumeForwardStreamToAllRooms"),f([Z()],j.prototype,"setEarMonitorMode"),f([Z([],{debounce:2e3,debounceTag:function(A){return"".concat(A)}})],j.prototype,"setEarMonitorVolume"),f([Z()],j.prototype,"setUserInfo");const $uA={"client unpublished":_B.STREAM_REMOVE_REASON_UNPUBLISH,"publish failed":_B.STREAM_REMOVE_REASON_PUBLISH_FAILED,"stream removed":_B.STREAM_REMOVE_REASON_KEEP_LIVE_FAILED,"client disconnected":_B.STREAM_REMOVE_REASON_CLIENT_DISCONNECTED,"client republish":_B.STREAM_REMOVE_REASON_REPUBLISH,"token publish privilege expired":_B.STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED};function Yk(A,I,g){const C=g.value;return g.value=async function(){for(var Q=arguments.length,B=new Array(Q),E=0;Et())}},C}}function pk(A,I,g){const C=g.value;return g.value=async function(){const Q=await this._screenCaptureLock.lock();try{for(var B=arguments.length,E=new Array(B),i=0;i{for(var Q,B=IbA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&AbA(I,g,B),B};class Zt extends j{constructor(I,g,C){super(I,g,C),P(this,"singleStreamRenderMode",!1),this.id=g,this.logger=new uA("BLWEngine",0,g),cV([{width:192,height:108,frameRate:15,maxKbps:100},{width:320,height:180,frameRate:15,maxKbps:140},{width:640,height:360,frameRate:15,maxKbps:400},{width:1280,height:720,frameRate:15,maxKbps:1e3},{width:1920,height:1080,frameRate:15,maxKbps:2e3}]),this._handleEngineEvents()}async subscribeStream(I,g){return this.logger.print("subscribeStream()","userId: %o, mediaType: %o",I,g),this.singleStreamRenderMode&&gI(g)&&super.subscribeScreen(I,iA.VIDEO).catch(C=>{this.logger.error("singleStreamRenderMode subscribeScreen()",C)}),super.subscribeStream(I,g)}async unsubscribeStream(I,g){return this.logger.print("unsubscribeStream()","userId: %o, mediaType: %o",I,g),this.singleStreamRenderMode&&gI(g)&&super.unsubscribeScreen(I,iA.VIDEO).catch(C=>{this.logger.error("singleStreamRenderMode unsubscribeScreen()",C)}),super.unsubscribeStream(I,g)}setRemoteScreenVideoStreamIndex(I){return this.logger.print("setRemoteScreenVideoStreamIndex()","streamIndex: %o",I),!this._room&&(this.singleStreamRenderMode=I===F.STREAM_INDEX_MAIN,!0)}setRemoteVideoPlayer(I,g){if(this.logger.print("setRemoteVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",I,g),g==null||delete g.playerId,!this.singleStreamRenderMode||I!==F.STREAM_INDEX_SCREEN)return super.setRemoteVideoPlayer(I,g)}destroy(){this.singleStreamRenderMode=!1,super.destroy()}_updateVideoPlayerState(I){var g,C,Q,B;if(!this.singleStreamRenderMode)return super._updateVideoPlayerState(I);const{userId:E}=I,i=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(E);let e,o;Array.isArray(i)&&i.forEach(l=>{l.isScreen?e=l:o=l});let t=(C=o)===null||C===void 0||(C=C.videoTrack)===null||C===void 0?void 0:C.dangerousGetPlayer(UQ);if(!t){var s;const l=(s=this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].get(E))===null||s===void 0?void 0:s.get(UQ);if(!l)return;var v,r,n;(v=o)===null||v===void 0||(v=v.videoTrack)===null||v===void 0||v.setPlayer(this.id,l,(r=this._config)===null||r===void 0?void 0:r.autoPlayPolicy,this._initPlayerEvents.bind(this)),t=(n=o)===null||n===void 0||(n=n.videoTrack)===null||n===void 0?void 0:n.dangerousGetPlayer(UQ)}var a,c,d;if(!I.isScreen&&(Q=e)!==null&&Q!==void 0&&Q.videoTrack&&e.videoHasPublish)return this.logger.print("_updateVideoPlayerState","prevent play main stream"),void((a=t)===null||a===void 0||a.playVideo(e.videoTrack));I.videoTrack?((c=this._config)===null||c===void 0?void 0:c.autoPlayPolicy)!==Ae.PLAY_MANUALLY&&((d=t)===null||d===void 0||d.playVideo(I.videoTrack)):(B=t)!==null&&B!==void 0&&B.played&&t.stop()}_handleEngineEvents(){this.on(X.onUserPublishScreen,I=>{if(this.singleStreamRenderMode&&gI(I.mediaType)){var g,C;const Q=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(I.userId),B=Q==null?void 0:Q.find(i=>!i.isScreen),E=Q==null?void 0:Q.find(i=>i.isScreen);E!=null&&E.hasSubscribed?(this.logger.info("onUserPublishScreen","singleStreamRenderMode screen hasSubscribed"),this._updateVideoPlayerState(E)):((C=this._room)!==null&&C!==void 0&&C.config.isAutoSubscribeVideo||B!=null&&B.hasSubscribed&&gI(B.subMediaType))&&(this.logger.info("onUserPublishScreen","singleStreamRenderMode subscribeScreen"),this.subscribeScreen(I.userId,iA.VIDEO))}}),this.on(X.onUserUnpublishScreen,I=>{if(this.singleStreamRenderMode&&gI(I.mediaType)){var g;const C=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(I.userId),Q=C==null?void 0:C.find(B=>!B.isScreen);Q&&setTimeout(()=>{this._updateVideoPlayerState(Q)})}})}}Pr([Z()],Zt.prototype,"subscribeStream"),Pr([Z()],Zt.prototype,"unsubscribeStream"),Pr([Z()],Zt.prototype,"setRemoteScreenVideoStreamIndex"),Pr([Z()],Zt.prototype,"setRemoteVideoPlayer"),Pr([Z()],Zt.prototype,"destroy");const zR=new uA("VERTC",0);Ks.storeKey="".concat(Date.now(),"-").concat($A.getDeviceId()),ta({rtc_sdk_version:YA.VERSION,device_id:$A.getDeviceId(),log_cache_key:Ks.storeKey}),BV(YA.LOG_SERVER_URL);let zM=1;const gbA=(A,I)=>{zR.info("createEngine","Invoke VERTC.createEngine"),OA(A,"appId");const g=(zM++).toString();return iV(g,{rtc_app_id:A,auto_play_policy:I==null?void 0:I.autoPlayPolicy}),new j(A,g,I)},CbA=(A,I)=>{zR.print("createBLWEngine","Invoke VERTC.createBLWEngine"),OA(A,"appId");const g=(zM++).toString();return iV(g,{rtc_app_id:A,auto_play_policy:I==null?void 0:I.autoPlayPolicy}),new Zt(A,g,I)},QbA=A=>{if(zR.info("destroyEngine","Invoke VERTC.destroyEngine"),!(A instanceof j))throw new U(m.INVALID_ENGINE,"Invalid engine object");A.destroy(),YrA(A.monitor)},BbA=async()=>Xg.enumerateDevices(),EbA=async function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{video:!0,audio:!0};const{video:I,audio:g}=A,C={video:!1,audio:!1},Q=[];return I&&Q.push(Xg.getPermissions({video:!0,force:!0}).then(B=>{C.video=B.video,B.video||(C.videoExceptionError=B.reason)})),g&&Q.push(Xg.getPermissions({audio:!0,force:!0}).then(B=>{C.audio=B.audio,B.audio||(C.audioExceptionError=B.reason)})),await Promise.allSettled(Q),C},ibA=async()=>Xg.enumerateAudioCaptureDevices(),ebA=async()=>Xg.enumerateVideoCaptureDevices(),obA=async()=>Xg.enumerateAudioPlaybackDevices(),tbA=()=>YA.VERSION,sbA=()=>NPA(),vbA=()=>ZPA(),rbA=A=>{let{logLevel:I,LogfileSize:g}=A;I&&(Ks.logLevel=I),g&&(Ks.LogfileSize=g)},abA=A=>{Ks.download(A)};function uu(){for(var A=arguments.length,I=new Array(A),g=0;gC instanceof j?"[ENGINE]":C))}function PC(A,I){return function(){EV(I,0,uu(...arguments));const g=A(...arguments);return typeof(g==null?void 0:g.then)=="function"?g.then(C=>(Oh(I,0,uu(C)),C)).catch(C=>{throw Oh(I,C.code,C.message),C}):(Oh(I,0,uu(g)),g)}}class PbA{constructor(){P(this,"getSdkVersion",PC(tbA,"getSdkVersion")),P(this,"createEngine",PC(gbA,"createEngine")),P(this,"createBLWEngine",PC(CbA,"createBLWEngine")),P(this,"destroyEngine",PC(QbA,"destroyEngine")),P(this,"enumerateDevices",PC(BbA,"enumerateDevices")),P(this,"enableDevices",PC(EbA,"enableDevices")),P(this,"enumerateAudioCaptureDevices",PC(ibA,"enumerateAudioCaptureDevices")),P(this,"enumerateVideoCaptureDevices",PC(ebA,"enumerateVideoCaptureDevices")),P(this,"enumerateAudioPlaybackDevices",PC(obA,"enumerateAudioPlaybackDevices")),P(this,"getParameter",lA),P(this,"setParameter",jC),P(this,"isSupported",PC(sbA,"isSupported")),P(this,"getSupportedCodecs",PC(vbA,"getSupportedCodecs")),P(this,"getElectronScreenSources",PC(Mz,"getElectronScreenSources")),P(this,"events",X),P(this,"ErrorCode",m),P(this,"platform","VolcEngine"),P(this,"commitInfo","HEAD<3383712*>"),P(this,"downloadLog",PC(abA,"downloadLog")),P(this,"setLogConfig",PC(rbA,"setLogConfig"))}}var uI=new PbA,An=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function SA(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var cr=function(A){return A&&A.Math===Math&&A},rI=cr(typeof globalThis=="object"&&globalThis)||cr(typeof window=="object"&&window)||cr(typeof self=="object"&&self)||cr(typeof An=="object"&&An)||cr(typeof An=="object"&&An)||function(){return this}()||Function("return this")(),JA=function(A){try{return!!A()}catch{return!0}},cbA=JA,SP=!cbA(function(){var A=(function(){}).bind();return typeof A!="function"||A.hasOwnProperty("prototype")}),nbA=SP,MM=Function.prototype,Nk=MM.apply,Zk=MM.call,yv=typeof Reflect=="object"&&Reflect.apply||(nbA?Zk.bind(Nk):function(){return Zk.apply(Nk,arguments)}),XM=SP,jM=Function.prototype,Qm=jM.call,lbA=XM&&jM.bind.bind(Qm,Qm),HA=XM?lbA:function(A){return function(){return Qm.apply(A,arguments)}},fM=HA,dbA=fM({}.toString),hbA=fM("".slice),xE=function(A){return hbA(dbA(A),8,-1)},DbA=xE,ubA=HA,Y9=function(A){if(DbA(A)==="Function")return ubA(A)},bu=typeof document=="object"&&document.all,YI=bu===void 0&&bu!==void 0?function(A){return typeof A=="function"||A===bu}:function(A){return typeof A=="function"},wv={},bbA=JA,kI=!bbA(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),ybA=SP,In=Function.prototype.call,zI=ybA?In.bind(In):function(){return In.apply(In,arguments)},X0={},HM={}.propertyIsEnumerable,xM=Object.getOwnPropertyDescriptor,wbA=xM&&!HM.call({1:2},1);X0.f=wbA?function(A){var I=xM(this,A);return!!I&&I.enumerable}:HM;var ei,cl,re=function(A,I){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:I}},mbA=HA,GbA=JA,RbA=xE,yu=Object,LbA=mbA("".split),MR=GbA(function(){return!yu("z").propertyIsEnumerable(0)})?function(A){return RbA(A)==="String"?LbA(A,""):yu(A)}:yu,mv=function(A){return A==null},SbA=mv,TbA=TypeError,Zo=function(A){if(SbA(A))throw new TbA("Can't call method on "+A);return A},UbA=MR,FbA=Zo,sE=function(A){return UbA(FbA(A))},YbA=YI,Eg=function(A){return typeof A=="object"?A!==null:YbA(A)},OI={},wu=OI,mu=rI,kbA=YI,Kk=function(A){return kbA(A)?A:void 0},sg=function(A,I){return arguments.length<2?Kk(wu[A])||Kk(mu[A]):wu[A]&&wu[A][I]||mu[A]&&mu[A][I]},pbA=HA,eQ=pbA({}.isPrototypeOf),NbA=rI,Jk=NbA.navigator,Wk=Jk&&Jk.userAgent,TP=Wk?String(Wk):"",OM=rI,Gu=TP,Vk=OM.process,zk=OM.Deno,Mk=Vk&&Vk.versions||zk&&zk.version,Xk=Mk&&Mk.v8;Xk&&(cl=(ei=Xk.split("."))[0]>0&&ei[0]<4?1:+(ei[0]+ei[1])),!cl&&Gu&&(!(ei=Gu.match(/Edge\/(\d+)/))||ei[1]>=74)&&(ei=Gu.match(/Chrome\/(\d+)/))&&(cl=+ei[1]);var j0=cl,jk=j0,ZbA=JA,KbA=rI,JbA=KbA.String,Gv=!!Object.getOwnPropertySymbols&&!ZbA(function(){var A=Symbol("symbol detection");return!JbA(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&jk&&jk<41}),WbA=Gv,qM=WbA&&!Symbol.sham&&typeof Symbol.iterator=="symbol",VbA=sg,zbA=YI,MbA=eQ,XbA=qM,jbA=Object,UP=XbA?function(A){return typeof A=="symbol"}:function(A){var I=VbA("Symbol");return zbA(I)&&MbA(I.prototype,jbA(A))},fbA=String,Rv=function(A){try{return fbA(A)}catch{return"Object"}},HbA=YI,xbA=Rv,ObA=TypeError,Dg=function(A){if(HbA(A))return A;throw new ObA(xbA(A)+" is not a function")},qbA=Dg,_bA=mv,XR=function(A,I){var g=A[I];return _bA(g)?void 0:qbA(g)},Ru=zI,Lu=YI,Su=Eg,$bA=TypeError,AyA=function(A,I){var g,C;if(I==="string"&&Lu(g=A.toString)&&!Su(C=Ru(g,A))||Lu(g=A.valueOf)&&!Su(C=Ru(g,A))||I!=="string"&&Lu(g=A.toString)&&!Su(C=Ru(g,A)))return C;throw new $bA("Can't convert object to primitive value")},_M={exports:{}},jR=!0,fk=rI,IyA=Object.defineProperty,gyA=function(A,I){try{IyA(fk,A,{value:I,configurable:!0,writable:!0})}catch{fk[A]=I}return I},CyA=rI,QyA=gyA,Hk="__core-js_shared__",xk=_M.exports=CyA[Hk]||QyA(Hk,{});(xk.versions||(xk.versions=[])).push({version:"3.39.0",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"});var fR=_M.exports,Ok=fR,Lv=function(A,I){return Ok[A]||(Ok[A]=I||{})},ByA=Zo,EyA=Object,qQ=function(A){return EyA(ByA(A))},iyA=HA,eyA=qQ,oyA=iyA({}.hasOwnProperty),vg=Object.hasOwn||function(A,I){return oyA(eyA(A),I)},tyA=HA,syA=0,vyA=Math.random(),ryA=tyA(1 .toString),f0=function(A){return"Symbol("+(A===void 0?"":A)+")_"+ryA(++syA+vyA,36)},ayA=rI,PyA=Lv,qk=vg,cyA=f0,nyA=Gv,lyA=qM,es=ayA.Symbol,Tu=PyA("wks"),dyA=lyA?es.for||es:es&&es.withoutSetter||cyA,GI=function(A){return qk(Tu,A)||(Tu[A]=nyA&&qk(es,A)?es[A]:dyA("Symbol."+A)),Tu[A]},hyA=zI,_k=Eg,$k=UP,DyA=XR,uyA=AyA,byA=GI,yyA=TypeError,wyA=byA("toPrimitive"),$M=function(A,I){if(!_k(A)||$k(A))return A;var g,C=DyA(A,wyA);if(C){if(I===void 0&&(I="default"),g=hyA(C,A,I),!_k(g)||$k(g))return g;throw new yyA("Can't convert object to primitive value")}return I===void 0&&(I="number"),uyA(A,I)},myA=$M,GyA=UP,HR=function(A){var I=myA(A,"string");return GyA(I)?I:I+""},RyA=rI,Ap=Eg,Bm=RyA.document,LyA=Ap(Bm)&&Ap(Bm.createElement),xR=function(A){return LyA?Bm.createElement(A):{}},SyA=kI,TyA=JA,UyA=xR,AX=!SyA&&!TyA(function(){return Object.defineProperty(UyA("div"),"a",{get:function(){return 7}}).a!==7}),FyA=kI,YyA=zI,kyA=X0,pyA=re,NyA=sE,ZyA=HR,KyA=vg,JyA=AX,Ip=Object.getOwnPropertyDescriptor;wv.f=FyA?Ip:function(A,I){if(A=NyA(A),I=ZyA(I),JyA)try{return Ip(A,I)}catch{}if(KyA(A,I))return pyA(!YyA(kyA.f,A,I),A[I])};var WyA=JA,VyA=YI,zyA=/#|\.prototype\./,FP=function(A,I){var g=XyA[MyA(A)];return g===fyA||g!==jyA&&(VyA(I)?WyA(I):!!I)},MyA=FP.normalize=function(A){return String(A).replace(zyA,".").toLowerCase()},XyA=FP.data={},jyA=FP.NATIVE="N",fyA=FP.POLYFILL="P",IX=FP,HyA=Dg,xyA=SP,OyA=Y9(Y9.bind),pg=function(A,I){return HyA(A),I===void 0?A:xyA?OyA(A,I):function(){return A.apply(I,arguments)}},ZC={},qyA=kI,_yA=JA,gX=qyA&&_yA(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),$yA=Eg,AwA=String,IwA=TypeError,Hg=function(A){if($yA(A))return A;throw new IwA(AwA(A)+" is not an object")},gwA=kI,CwA=AX,QwA=gX,gn=Hg,gp=HR,BwA=TypeError,Uu=Object.defineProperty,EwA=Object.getOwnPropertyDescriptor,Fu="enumerable",Yu="configurable",ku="writable";ZC.f=gwA?QwA?function(A,I,g){if(gn(A),I=gp(I),gn(g),typeof A=="function"&&I==="prototype"&&"value"in g&&ku in g&&!g[ku]){var C=EwA(A,I);C&&C[ku]&&(A[I]=g.value,g={configurable:Yu in g?g[Yu]:C[Yu],enumerable:Fu in g?g[Fu]:C[Fu],writable:!1})}return Uu(A,I,g)}:Uu:function(A,I,g){if(gn(A),I=gp(I),gn(g),CwA)try{return Uu(A,I,g)}catch{}if("get"in g||"set"in g)throw new BwA("Accessors not supported");return"value"in g&&(A[I]=g.value),A};var iwA=kI,ewA=ZC,owA=re,ae=iwA?function(A,I,g){return ewA.f(A,I,owA(1,g))}:function(A,I,g){return A[I]=g,A},nr=rI,twA=yv,swA=Y9,vwA=YI,rwA=wv.f,awA=IX,ct=OI,PwA=pg,nt=ae,Cp=vg,cwA=function(A){var I=function(g,C,Q){if(this instanceof I){switch(arguments.length){case 0:return new A;case 1:return new A(g);case 2:return new A(g,C)}return new A(g,C,Q)}return twA(A,this,arguments)};return I.prototype=A.prototype,I},BA=function(A,I){var g,C,Q,B,E,i,e,o,t,s=A.target,v=A.global,r=A.stat,n=A.proto,a=v?nr:r?nr[s]:nr[s]&&nr[s].prototype,c=v?ct:ct[s]||nt(ct,s,{})[s],d=c.prototype;for(B in I)C=!(g=awA(v?B:s+(r?".":"#")+B,A.forced))&&a&&Cp(a,B),i=c[B],C&&(e=A.dontCallGetSet?(t=rwA(a,B))&&t.value:a[B]),E=C&&e?e:I[B],(g||n||typeof i!=typeof E)&&(o=A.bind&&C?PwA(E,nr):A.wrap&&C?cwA(E):n&&vwA(E)?swA(E):E,(A.sham||E&&E.sham||i&&i.sham)&&nt(o,"sham",!0),nt(c,B,o),n&&(Cp(ct,Q=s+"Prototype")||nt(ct,Q,{}),nt(ct[Q],B,E),A.real&&d&&(g||!d[B])&&nt(d,B,E)))},nwA=HA,Pe=nwA([].slice),CX=HA,lwA=Dg,dwA=Eg,hwA=vg,Qp=Pe,DwA=SP,QX=Function,uwA=CX([].concat),bwA=CX([].join),pu={},ywA=function(A,I,g){if(!hwA(pu,I)){for(var C=[],Q=0;Q0?HwA:fwA)(I)},OwA=xwA,O0=function(A){var I=+A;return I!=I||I===0?0:OwA(I)},qwA=O0,_wA=Math.max,$wA=Math.min,_R=function(A,I){var g=qwA(A);return g<0?_wA(g+I,0):$wA(g,I)},AmA=O0,ImA=Math.min,rX=function(A){var I=AmA(A);return I>0?ImA(I,9007199254740991):0},gmA=rX,Ko=function(A){return gmA(A.length)},CmA=sE,QmA=_R,BmA=Ko,EmA=function(A){return function(I,g,C){var Q=CmA(I),B=BmA(Q);if(B===0)return!A&&-1;var E,i=QmA(C,B);if(A&&g!=g){for(;B>i;)if((E=Q[i++])!=E)return!0}else for(;B>i;i++)if((A||i in Q)&&Q[i]===g)return A||i||0;return!A&&-1}},aX={indexOf:EmA(!1)},YP={},imA=HA,Nu=vg,emA=sE,omA=aX.indexOf,tmA=YP,Bp=imA([].push),PX=function(A,I){var g,C=emA(A),Q=0,B=[];for(g in C)!Nu(tmA,g)&&Nu(C,g)&&Bp(B,g);for(;I.length>Q;)Nu(C,g=I[Q++])&&(~omA(B,g)||Bp(B,g));return B},$R=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],smA=PX,vmA=$R,q0=Object.keys||function(A){return smA(A,vmA)},rmA=kI,amA=gX,PmA=ZC,cmA=Hg,nmA=sE,lmA=q0;x0.f=rmA&&!amA?Object.defineProperties:function(A,I){cmA(A);for(var g,C=nmA(I),Q=lmA(I),B=Q.length,E=0;B>E;)PmA.f(A,g=Q[E++],C[g]);return A};var Cn,dmA=sg,cX=dmA("document","documentElement"),hmA=Lv,DmA=f0,Ep=hmA("keys"),_0=function(A){return Ep[A]||(Ep[A]=DmA(A))},umA=Hg,bmA=x0,ip=$R,ymA=YP,wmA=cX,mmA=xR,GmA=_0,ep=">",op="<",im="prototype",em="script",nX=GmA("IE_PROTO"),Zu=function(){},lX=function(A){return op+em+ep+A+op+"/"+em+ep},tp=function(A){A.write(lX("")),A.close();var I=A.parentWindow.Object;return A=null,I},RmA=function(){var A,I=mmA("iframe"),g="java"+em+":";return I.style.display="none",wmA.appendChild(I),I.src=String(g),(A=I.contentWindow.document).open(),A.write(lX("document.F=Object")),A.close(),A.F},ll=function(){try{Cn=new ActiveXObject("htmlfile")}catch{}ll=typeof document<"u"?document.domain&&Cn?tp(Cn):RmA():tp(Cn);for(var A=ip.length;A--;)delete ll[im][ip[A]];return ll()};ymA[nX]=!0;var ce=Object.create||function(A,I){var g;return A!==null?(Zu[im]=umA(A),g=new Zu,Zu[im]=null,g[nX]=A):g=ll(),I===void 0?g:bmA.f(g,I)},LmA=BA,SmA=sg,Ku=yv,TmA=BX,sp=vX,UmA=Hg,vp=Eg,FmA=ce,dX=JA,AL=SmA("Reflect","construct"),YmA=Object.prototype,kmA=[].push,hX=dX(function(){function A(){}return!(AL(function(){},[],A)instanceof A)}),DX=!dX(function(){AL(function(){})}),rp=hX||DX;LmA({target:"Reflect",stat:!0,forced:rp,sham:rp},{construct:function(A,I){sp(A),UmA(I);var g=arguments.length<3?A:sp(arguments[2]);if(DX&&!hX)return AL(A,I,g);if(A===g){switch(I.length){case 0:return new A;case 1:return new A(I[0]);case 2:return new A(I[0],I[1]);case 3:return new A(I[0],I[1],I[2]);case 4:return new A(I[0],I[1],I[2],I[3])}var C=[null];return Ku(kmA,C,I),new(Ku(TmA,A,C))}var Q=g.prototype,B=FmA(vp(Q)?Q:YmA),E=Ku(A,B,I);return vp(E)?E:B}});var pmA=OI,NmA=pmA.Reflect.construct,ZmA=NmA,KmA=ZmA,JmA=KmA,WmA=JmA,VmA=WmA,zmA=VmA,uX=zmA,MmA=SA(uX),XmA=uX,IL=SA(XmA),jmA=xE,Jo=Array.isArray||function(A){return jmA(A)==="Array"},fmA=BA,HmA=Jo;fmA({target:"Array",stat:!0},{isArray:HmA});var xmA=OI,OmA=xmA.Array.isArray,qmA=OmA,_mA=qmA,$mA=_mA,AGA=$mA,IGA=AGA,gGA=IGA,CGA=gGA,QGA=SA(CGA);function BGA(A){if(QGA(A))return A}var EGA=TypeError,iGA=9007199254740991,bX=function(A){if(A>iGA)throw EGA("Maximum allowed index exceeded");return A},eGA=kI,oGA=ZC,tGA=re,$0=function(A,I,g){eGA?oGA.f(A,I,tGA(0,g)):A[I]=g},ap=Jo,sGA=H0,vGA=Eg,rGA=GI,aGA=rGA("species"),Pp=Array,PGA=function(A){var I;return ap(A)&&(I=A.constructor,(sGA(I)&&(I===Pp||ap(I.prototype))||vGA(I)&&(I=I[aGA])===null)&&(I=void 0)),I===void 0?Pp:I},cGA=PGA,yX=function(A,I){return new(cGA(A))(I===0?0:I)},nGA=JA,lGA=GI,dGA=j0,hGA=lGA("species"),gL=function(A){return dGA>=51||!nGA(function(){var I=[];return(I.constructor={})[hGA]=function(){return{foo:1}},I[A](Boolean).foo!==1})},DGA=BA,uGA=JA,bGA=Jo,yGA=Eg,wGA=qQ,mGA=Ko,cp=bX,np=$0,GGA=yX,RGA=gL,LGA=GI,SGA=j0,wX=LGA("isConcatSpreadable"),TGA=SGA>=51||!uGA(function(){var A=[];return A[wX]=!1,A.concat()[0]!==A}),UGA=function(A){if(!yGA(A))return!1;var I=A[wX];return I!==void 0?!!I:bGA(A)},FGA=!TGA||!RGA("concat");DGA({target:"Array",proto:!0,forced:FGA},{concat:function(A){var I,g,C,Q,B,E=wGA(this),i=GGA(E,0),e=0;for(I=-1,C=arguments.length;Il;l++)if((i||l in a)&&(r=d(v=a[l],l,n),A))if(I)D[l]=r;else if(r)switch(A){case 3:return!0;case 5:return v;case 6:return l;case 2:up(D,v)}else switch(A){case 4:return!1;case 7:up(D,v)}return B?-1:C||Q?Q:D}},Ad={forEach:bp(0),filter:bp(2)},Qn=BA,KP=rI,QL=zI,wRA=HA,Rs=kI,dt=Gv,mRA=JA,ng=vg,GRA=eQ,tm=Hg,Id=sE,BL=HR,RRA=_Q,sm=re,xs=ce,SX=q0,LRA=kP,TX=CL,SRA=pP,UX=wv,FX=ZC,TRA=x0,YX=X0,yp=ne,URA=NP,EL=Lv,FRA=_0,kX=YP,wp=f0,YRA=GI,kRA=ZP,pRA=pI,NRA=RX,ZRA=vE,pX=le,gd=Ad.forEach,RC=FRA("hidden"),N9="Symbol",AP="prototype",KRA=pX.set,mp=pX.getterFor(N9),DB=Object[AP],os=KP.Symbol,dl=os&&os[AP],JRA=KP.RangeError,WRA=KP.TypeError,Vu=KP.QObject,NX=UX.f,Eo=FX.f,ZX=TX.f,VRA=YX.f,KX=wRA([].push),WE=EL("symbols"),JP=EL("op-symbols"),zRA=EL("wks"),zu=!Vu||!Vu[AP]||!Vu[AP].findChild,JX=function(A,I,g){var C=NX(DB,I);C&&delete DB[I],Eo(A,I,g),C&&A!==DB&&Eo(DB,I,C)},vm=Rs&&mRA(function(){return xs(Eo({},"a",{get:function(){return Eo(this,"a",{value:7}).a}})).a!==7})?JX:Eo,Mu=function(A,I){var g=WE[A]=xs(dl);return KRA(g,{type:N9,tag:A,description:I}),Rs||(g.description=I),g},Z9=function(A,I,g){A===DB&&Z9(JP,I,g),tm(A);var C=BL(I);return tm(g),ng(WE,C)?(g.enumerable?(ng(A,RC)&&A[RC][C]&&(A[RC][C]=!1),g=xs(g,{enumerable:sm(0,!1)})):(ng(A,RC)||Eo(A,RC,sm(1,xs(null))),A[RC][C]=!0),vm(A,C,g)):Eo(A,C,g)},rm=function(A,I){tm(A);var g=Id(I),C=SX(g).concat(VX(g));return gd(C,function(Q){Rs&&!QL(WX,g,Q)||Z9(A,Q,g[Q])}),A},MRA=function(A,I){return I===void 0?xs(A):rm(xs(A),I)},WX=function(A){var I=BL(A),g=QL(VRA,this,I);return!(this===DB&&ng(WE,I)&&!ng(JP,I))&&(!(g||!ng(this,I)||!ng(WE,I)||ng(this,RC)&&this[RC][I])||g)},Gp=function(A,I){var g=Id(A),C=BL(I);if(g!==DB||!ng(WE,C)||ng(JP,C)){var Q=NX(g,C);return!Q||!ng(WE,C)||ng(g,RC)&&g[RC][C]||(Q.enumerable=!0),Q}},Rp=function(A){var I=ZX(Id(A)),g=[];return gd(I,function(C){ng(WE,C)||ng(kX,C)||KX(g,C)}),g},VX=function(A){var I=A===DB,g=ZX(I?JP:Id(A)),C=[];return gd(g,function(Q){!ng(WE,Q)||I&&!ng(DB,Q)||KX(C,WE[Q])}),C};dt||(yp(dl=(os=function(){if(GRA(dl,this))throw new WRA("Symbol is not a constructor");var A=arguments.length&&arguments[0]!==void 0?RRA(arguments[0]):void 0,I=wp(A),g=function(C){var Q=this===void 0?KP:this;Q===DB&&QL(g,JP,C),ng(Q,RC)&&ng(Q[RC],I)&&(Q[RC][I]=!1);var B=sm(1,C);try{vm(Q,I,B)}catch(E){if(!(E instanceof JRA))throw E;JX(Q,I,B)}};return Rs&&zu&&vm(DB,I,{configurable:!0,set:g}),Mu(I,A)})[AP],"toString",function(){return mp(this).tag}),yp(os,"withoutSetter",function(A){return Mu(wp(A),A)}),YX.f=WX,FX.f=Z9,TRA.f=rm,UX.f=Gp,LRA.f=TX.f=Rp,SRA.f=VX,kRA.f=function(A){return Mu(YRA(A),A)},Rs&&URA(dl,"description",{configurable:!0,get:function(){return mp(this).description}})),Qn({global:!0,wrap:!0,forced:!dt,sham:!dt},{Symbol:os}),gd(SX(zRA),function(A){pRA(A)}),Qn({target:N9,stat:!0,forced:!dt},{useSetter:function(){zu=!0},useSimple:function(){zu=!1}}),Qn({target:"Object",stat:!0,forced:!dt,sham:!Rs},{create:MRA,defineProperty:Z9,defineProperties:rm,getOwnPropertyDescriptor:Gp}),Qn({target:"Object",stat:!0,forced:!dt},{getOwnPropertyNames:Rp}),NRA(),ZRA(os,N9),kX[RC]=!0;var XRA=Gv,zX=XRA&&!!Symbol.for&&!!Symbol.keyFor,jRA=BA,fRA=sg,HRA=vg,xRA=_Q,MX=Lv,ORA=zX,Xu=MX("string-to-symbol-registry"),qRA=MX("symbol-to-string-registry");jRA({target:"Symbol",stat:!0,forced:!ORA},{for:function(A){var I=xRA(A);if(HRA(Xu,I))return Xu[I];var g=fRA("Symbol")(I);return Xu[I]=g,qRA[g]=I,g}});var _RA=BA,$RA=vg,ALA=UP,ILA=Rv,gLA=Lv,CLA=zX,Lp=gLA("symbol-to-string-registry");_RA({target:"Symbol",stat:!0,forced:!CLA},{keyFor:function(A){if(!ALA(A))throw new TypeError(ILA(A)+" is not a symbol");if($RA(Lp,A))return Lp[A]}});var QLA=HA,Sp=Jo,BLA=YI,Tp=xE,ELA=_Q,Up=QLA([].push),iLA=function(A){if(BLA(A))return A;if(Sp(A)){for(var I=A.length,g=[],C=0;C=I.length)return A.target=null,on(void 0,!0);switch(A.kind){case"keys":return on(g,!1);case"values":return on(I[g],!1)}return on([g,I[g]],!1)},"values"),Hp.Arguments=Hp.Array;var WSA={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},VSA=WSA,zSA=rI,MSA=vE,xp=Tv;for(var fu in VSA)MSA(zSA[fu],fu),xp[fu]=xp.Array;var XSA=zLA,jSA=XSA,fSA=GI,HSA=ZC.f,Op=fSA("metadata"),qp=Function.prototype;qp[Op]===void 0&&HSA(qp,Op,{value:null});var xSA=pI;xSA("asyncDispose");var OSA=pI;OSA("dispose");var qSA=pI;qSA("metadata");var _SA=jSA,$SA=_SA,A2A=sg,I2A=HA,eL=A2A("Symbol"),g2A=eL.keyFor,C2A=I2A(eL.prototype.valueOf),Bj=eL.isRegisteredSymbol||function(A){try{return g2A(C2A(A))!==void 0}catch{return!1}},Q2A=BA,B2A=Bj;Q2A({target:"Symbol",stat:!0},{isRegisteredSymbol:B2A});for(var E2A=Lv,_p=sg,i2A=HA,e2A=UP,o2A=GI,tn=_p("Symbol"),$p=tn.isWellKnownSymbol,Ej=_p("Object","getOwnPropertyNames"),t2A=i2A(tn.prototype.valueOf),A7=E2A("wks"),Hu=0,I7=Ej(tn),s2A=I7.length;Hu=i?A?"":void 0:(C=C7(B,E))<55296||C>56319||E+1===i||(Q=C7(B,E+1))<56320||Q>57343?A?S2A(B,E):C:A?T2A(B,E,E+2):Q-56320+(C-55296<<10)+65536}},ej={codeAt:Q7(!1),charAt:Q7(!0)},U2A=ej.charAt,F2A=_Q,oj=le,Y2A=iL,B7=Qd,tj="String Iterator",k2A=oj.set,p2A=oj.getterFor(tj);Y2A(String,"String",function(A){k2A(this,{type:tj,string:F2A(A),index:0})},function(){var A,I=p2A(this),g=I.string,C=I.index;return C>=g.length?B7(void 0,!0):(A=U2A(g,C),I.index+=A.length,B7(A,!1))});var N2A=Sv,E7=XR,Z2A=mv,K2A=Tv,J2A=GI,W2A=J2A("iterator"),VP=function(A){if(!Z2A(A))return E7(A,W2A)||E7(A,"@@iterator")||K2A[N2A(A)]},V2A=VP,z2A=V2A,M2A=z2A,X2A=M2A,j2A=X2A,f2A=j2A,H2A=f2A,x2A=H2A,O2A=x2A,q2A=SA(O2A),_2A=kI,$2A=Jo,ATA=TypeError,ITA=Object.getOwnPropertyDescriptor,gTA=_2A&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(A){return A instanceof TypeError}}(),CTA=gTA?function(A,I){if($2A(A)&&!ITA(A,"length").writable)throw new ATA("Cannot set read only .length");return A.length=I}:function(A,I){return A.length=I},QTA=BA,BTA=qQ,ETA=Ko,iTA=CTA,eTA=bX,oTA=JA,tTA=oTA(function(){return[].push.call({length:4294967296},1)!==4294967297}),sTA=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(A){return A instanceof TypeError}},vTA=tTA||!sTA();QTA({target:"Array",proto:!0,forced:vTA},{push:function(A){var I=BTA(this),g=ETA(I),C=arguments.length;eTA(g+C);for(var Q=0;Q1?arguments[1]:void 0,B=Q!==void 0;B&&(Q=vUA(Q,C>2?arguments[2]:void 0));var E,i,e,o,t,s,v=hUA(I),r=0;if(!v||this===s7&&cUA(v))for(E=lUA(I),i=g?new this(E):s7(E);E>r;r++)s=B?Q(I[r],r):I[r],t7(i,r,s);else for(i=g?new this:[],t=(o=dUA(I,v)).next;!(e=rUA(t,o)).done;r++)s=B?PUA(o,Q,[e.value,r],!0):e.value,t7(i,r,s);return i.length=r,i},DUA=GI,cj=DUA("iterator"),nj=!1;try{var uUA=0,v7={next:function(){return{done:!!uUA++}},return:function(){nj=!0}};v7[cj]=function(){return this},Array.from(v7,function(){throw 2})}catch{}var lj=function(A,I){try{if(!I&&!nj)return!1}catch{return!1}var g=!1;try{var C={};C[cj]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch{}return g},bUA=BA,yUA=Pj,wUA=lj,mUA=!wUA(function(A){Array.from(A)});bUA({target:"Array",stat:!0,forced:mUA},{from:yUA});var GUA=OI,RUA=GUA.Array.from,LUA=RUA,SUA=LUA,TUA=SUA,UUA=TUA,FUA=UUA,YUA=FUA,kUA=YUA,pUA=SA(kUA);function r7(A,I){(I==null||I>A.length)&&(I=A.length);for(var g=0,C=Array(I);g1?arguments[1]:void 0)},NFA=BA;NFA({target:"Array",proto:!0,forced:[].forEach!==P7},{forEach:P7});var ZFA=de,KFA=ZFA("Array","forEach"),JFA=KFA,WFA=JFA,VFA=Sv,zFA=vg,MFA=eQ,XFA=WFA,_u=Array.prototype,jFA={DOMTokenList:!0,NodeList:!0},fFA=function(A){var I=A.forEach;return A===_u||MFA(_u,A)&&I===_u.forEach||zFA(jFA,VFA(A))?XFA:I},HFA=fFA,xFA=HFA,OFA=xFA,qFA=OFA,wj=qFA,la=SA(wj),_FA=BA,$FA=gj;_FA({target:"Object",stat:!0},{setPrototypeOf:$FA});var AYA=OI,IYA=AYA.Object.setPrototypeOf,gYA=IYA,CYA=gYA,QYA=CYA,BYA=QYA,EYA=BYA,iYA=EYA,eYA=iYA,IP=SA(eYA),oYA=sg,tYA=HA,sYA=kP,vYA=pP,rYA=Hg,aYA=tYA([].concat),mj=oYA("Reflect","ownKeys")||function(A){var I=sYA.f(rYA(A)),g=vYA.f;return g?aYA(I,g(A)):I},c7=vg,PYA=mj,cYA=wv,nYA=ZC,lYA=function(A,I,g){for(var C=PYA(I),Q=nYA.f,B=cYA.f,E=0;EB;B++)if((i=d(A[B]))&&l7(h7,i))return i;return new Dl(!1)}C=JYA(A,Q)}for(e=v?A.next:C.next;!(o=kYA(e,C)).done;){try{i=d(o.value)}catch(l){d7(C,"throw",l)}if(typeof i=="object"&&i&&l7(h7,i))return i}return new Dl(!1)},zYA=_Q,MYA=function(A,I){return A===void 0?arguments.length<2?"":I:zYA(A)},XYA=BA,jYA=eQ,fYA=Cd,J9=gj,HYA=lYA,Lj=ce,$u=ae,Ab=re,xYA=DYA,OYA=FYA,qYA=FB,_YA=MYA,$YA=GI,AkA=$YA("toStringTag"),W9=Error,IkA=[].push,Os=function(A,I){var g,C=jYA(Ib,this);J9?g=J9(new W9,C?fYA(this):Ib):(g=C?this:Lj(Ib),$u(g,AkA,"Error")),I!==void 0&&$u(g,"message",_YA(I)),OYA(g,Os,g.stack,1),arguments.length>2&&xYA(g,arguments[2]);var Q=[];return qYA(A,IkA,{that:Q}),$u(g,"errors",Q),g};J9?J9(Os,W9):HYA(Os,W9,{name:!0});var Ib=Os.prototype=Lj(W9.prototype,{constructor:Ab(1,Os),message:Ab(1,""),name:Ab(1,"AggregateError")});XYA({global:!0},{AggregateError:Os});var gP,ht,D7,gb,dr=rI,gkA=TP,CkA=xE,sn=function(A){return gkA.slice(0,A.length)===A},Sj=sn("Bun/")?"BUN":sn("Cloudflare-Workers")?"CLOUDFLARE":sn("Deno/")?"DENO":sn("Node.js/")?"NODE":dr.Bun&&typeof Bun.version=="string"?"BUN":dr.Deno&&typeof Deno.version=="object"?"DENO":CkA(dr.process)==="process"?"NODE":dr.window&&dr.document?"BROWSER":"REST",QkA=Sj,sL=QkA==="NODE",BkA=sg,EkA=NP,ikA=GI,ekA=kI,u7=ikA("species"),Tj=function(A){var I=BkA(A);ekA&&I&&!I[u7]&&EkA(I,u7,{configurable:!0,get:function(){return this}})},okA=eQ,tkA=TypeError,zP=function(A,I){if(okA(I,A))return A;throw new tkA("Incorrect invocation")},b7=Hg,skA=vX,vkA=mv,rkA=GI,akA=rkA("species"),Uj=function(A,I){var g,C=b7(A).constructor;return C===void 0||vkA(g=b7(C)[akA])?I:skA(g)},PkA=TypeError,MP=function(A,I){if(A1?a7A(arguments,1):[],g=P7A.f(this),C=$j(function(){return r7A(c7A(A),void 0,I)});return(C.error?g.reject:g.resolve)(C.value),g.promise}});var l7A=BA,d7A=rE;l7A({target:"Promise",stat:!0},{withResolvers:function(){var A=d7A.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var h7A=BA,ym=wo,D7A=JA,u7A=sg,b7A=YI,y7A=Uj,f7=_j,w7A=ym&&ym.prototype,m7A=!!ym&&D7A(function(){w7A.finally.call({then:function(){}},function(){})});h7A({target:"Promise",proto:!0,real:!0,forced:m7A},{finally:function(A){var I=y7A(this,u7A("Promise")),g=b7A(A);return this.then(g?function(C){return f7(I,A()).then(function(){return C})}:A,g?function(C){return f7(I,A()).then(function(){throw C})}:A)}});var G7A=OI,R7A=G7A.Promise,L7A=R7A,S7A=L7A,T7A=S7A,U7A=T7A,F7A=U7A,Y7A=F7A,Af=Y7A,cL=SA(Af),k7A=BA,p7A=HA,N7A=Jo,Z7A=p7A([].reverse),H7=[1,2];k7A({target:"Array",proto:!0,forced:String(H7)===String(H7.reverse())},{reverse:function(){return N7A(this)&&(this.length=this.length),Z7A(this)}});var K7A=de,J7A=K7A("Array","reverse"),W7A=eQ,V7A=J7A,cb=Array.prototype,z7A=function(A){var I=A.reverse;return A===cb||W7A(cb,A)&&I===cb.reverse?V7A:I},M7A=z7A,X7A=M7A,j7A=X7A,f7A=j7A,H7A=f7A,x7A=H7A,O7A=x7A,q7A=SA(O7A);function sB(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */sB=function(){return I};var A,I={},g=Object.prototype,C=g.hasOwnProperty,Q=yo||function(K,p,J){K[p]=J.value},B=typeof _e=="function"?_e:{},E=B.iterator||"@@iterator",i=B.asyncIterator||"@@asyncIterator",e=B.toStringTag||"@@toStringTag";function o(K,p,J){return yo(K,p,{value:J,enumerable:!0,configurable:!0,writable:!0}),K[p]}try{o({},"")}catch{o=function(p,J,Y){return p[J]=Y}}function t(K,p,J,Y){var N=p&&p.prototype instanceof d?p:d,q=hl(N.prototype),IA=new EA(Y||[]);return Q(q,"_invoke",{value:S(K,J,IA)}),q}function s(K,p,J){try{return{type:"normal",arg:K.call(p,J)}}catch(Y){return{type:"throw",arg:Y}}}I.wrap=t;var v="suspendedStart",r="suspendedYield",n="executing",a="completed",c={};function d(){}function l(){}function h(){}var D={};o(D,E,function(){return this});var u=na&&na(na(eA([])));u&&u!==g&&C.call(u,E)&&(D=u);var w=h.prototype=d.prototype=hl(D);function b(K){var p;la(p=["next","throw","return"]).call(p,function(J){o(K,J,function(Y){return this._invoke(J,Y)})})}function y(K,p){function J(N,q,IA,gA){var vA=s(K[N],K,q);if(vA.type!=="throw"){var bA=vA.arg,nA=bA.value;return nA&&bo(nA)=="object"&&C.call(nA,"__await")?p.resolve(nA.__await).then(function(H){J("next",H,IA,gA)},function(H){J("throw",H,IA,gA)}):p.resolve(nA).then(function(H){bA.value=H,IA(bA)},function(H){return J("throw",H,IA,gA)})}gA(vA.arg)}var Y;Q(this,"_invoke",{value:function(N,q){function IA(){return new p(function(gA,vA){J(N,q,gA,vA)})}return Y=Y?Y.then(IA,IA):IA()}})}function S(K,p,J){var Y=v;return function(N,q){if(Y===n)throw Error("Generator is already running");if(Y===a){if(N==="throw")throw q;return{value:A,done:!0}}for(J.method=N,J.arg=q;;){var IA=J.delegate;if(IA){var gA=L(IA,J);if(gA){if(gA===c)continue;return gA}}if(J.method==="next")J.sent=J._sent=J.arg;else if(J.method==="throw"){if(Y===v)throw Y=a,J.arg;J.dispatchException(J.arg)}else J.method==="return"&&J.abrupt("return",J.arg);Y=n;var vA=s(K,p,J);if(vA.type==="normal"){if(Y=J.done?a:r,vA.arg===c)continue;return{value:vA.arg,done:J.done}}vA.type==="throw"&&(Y=a,J.method="throw",J.arg=vA.arg)}}}function L(K,p){var J=p.method,Y=K.iterator[J];if(Y===A)return p.delegate=null,J==="throw"&&K.iterator.return&&(p.method="return",p.arg=A,L(K,p),p.method==="throw")||J!=="return"&&(p.method="throw",p.arg=new TypeError("The iterator does not provide a '"+J+"' method")),c;var N=s(Y,K.iterator,p.arg);if(N.type==="throw")return p.method="throw",p.arg=N.arg,p.delegate=null,c;var q=N.arg;return q?q.done?(p[K.resultName]=q.value,p.next=K.nextLoc,p.method!=="return"&&(p.method="next",p.arg=A),p.delegate=null,c):q:(p.method="throw",p.arg=new TypeError("iterator result is not an object"),p.delegate=null,c)}function V(K){var p,J={tryLoc:K[0]};1 in K&&(J.catchLoc=K[1]),2 in K&&(J.finallyLoc=K[2],J.afterLoc=K[3]),K9(p=this.tryEntries).call(p,J)}function z(K){var p=K.completion||{};p.type="normal",delete p.arg,K.completion=p}function EA(K){this.tryEntries=[{tryLoc:"root"}],la(K).call(K,V,this),this.reset(!0)}function eA(K){if(K||K===""){var p=K[E];if(p)return p.call(K);if(typeof K.next=="function")return K;if(!isNaN(K.length)){var J=-1,Y=function N(){for(;++J=0;--Y){var N=this.tryEntries[Y],q=N.completion;if(N.tryLoc==="root")return J("end");if(N.tryLoc<=this.prev){var IA=C.call(N,"catchLoc"),gA=C.call(N,"finallyLoc");if(IA&&gA){if(this.prev=0;--J){var Y=this.tryEntries[J];if(Y.tryLoc<=this.prev&&C.call(Y,"finallyLoc")&&this.prev=0;--p){var J=this.tryEntries[p];if(J.finallyLoc===K)return this.complete(J.completion,J.afterLoc),z(J),c}},catch:function(K){for(var p=this.tryEntries.length-1;p>=0;--p){var J=this.tryEntries[p];if(J.tryLoc===K){var Y=J.completion;if(Y.type==="throw"){var N=Y.arg;z(J)}return N}}throw Error("illegal catch attempt")},delegateYield:function(K,p,J){return this.delegate={iterator:eA(K),resultName:p,nextLoc:J},this.method==="next"&&(this.arg=A),c}},I}function x7(A,I,g,C,Q,B,E){try{var i=A[B](E),e=i.value}catch(o){return void g(o)}i.done?I(e):cL.resolve(e).then(C,Q)}function Wr(A){return function(){var I=this,g=arguments;return new cL(function(C,Q){var B=A.apply(I,g);function E(e){x7(B,C,Q,E,i,"next",e)}function i(e){x7(B,C,Q,E,i,"throw",e)}E(void 0)})}}var _7A=BA,$7A=qQ,If=q0,ANA=JA,INA=ANA(function(){If(1)});_7A({target:"Object",stat:!0,forced:INA},{keys:function(A){return If($7A(A))}});var gNA=OI,CNA=gNA.Object.keys,QNA=CNA,BNA=QNA,ENA=BNA,iNA=ENA,eNA=iNA,oNA=eNA,gf=oNA,tNA=SA(gf),sNA=OI,vNA=sNA.Object.getOwnPropertySymbols,rNA=vNA,aNA=rNA,PNA=aNA,cNA=PNA,nNA=cNA,lNA=nNA,Cf=lNA,O7=SA(Cf),dNA=BA,hNA=Ad.filter,DNA=gL,uNA=DNA("filter");dNA({target:"Array",proto:!0,forced:!uNA},{filter:function(A){return hNA(this,A,arguments.length>1?arguments[1]:void 0)}});var bNA=de,yNA=bNA("Array","filter"),wNA=eQ,mNA=yNA,nb=Array.prototype,GNA=function(A){var I=A.filter;return A===nb||wNA(nb,A)&&I===nb.filter?mNA:I},RNA=GNA,LNA=RNA,SNA=LNA,TNA=SNA,UNA=TNA,FNA=UNA,YNA=FNA,kNA=SA(YNA),Qf={exports:{}},pNA=BA,NNA=JA,ZNA=sE,Bf=wv.f,Ef=kI,KNA=!Ef||NNA(function(){Bf(1)});pNA({target:"Object",stat:!0,forced:KNA,sham:!Ef},{getOwnPropertyDescriptor:function(A,I){return Bf(ZNA(A),I)}});var JNA=OI,ef=JNA.Object,WNA=Qf.exports=function(A,I){return ef.getOwnPropertyDescriptor(A,I)};ef.getOwnPropertyDescriptor.sham&&(WNA.sham=!0);var VNA=Qf.exports,zNA=VNA,MNA=zNA,XNA=MNA,jNA=XNA,fNA=jNA,HNA=fNA,of=HNA,tf=SA(of),xNA=BA,ONA=kI,qNA=mj,_NA=sE,$NA=wv,AZA=$0;xNA({target:"Object",stat:!0,sham:!ONA},{getOwnPropertyDescriptors:function(A){for(var I,g,C=_NA(A),Q=$NA.f,B=qNA(C),E={},i=0;B.length>i;)(g=Q(C,I=B[i++]))!==void 0&&AZA(E,I,g);return E}});var IZA=OI,gZA=IZA.Object.getOwnPropertyDescriptors,CZA=gZA,QZA=CZA,BZA=QZA,EZA=BZA,iZA=EZA,eZA=iZA,oZA=eZA,q7=SA(oZA),sf={exports:{}},tZA=BA,sZA=kI,_7=x0.f;tZA({target:"Object",stat:!0,forced:Object.defineProperties!==_7,sham:!sZA},{defineProperties:_7});var vZA=OI,vf=vZA.Object,rZA=sf.exports=function(A,I){return vf.defineProperties(A,I)};vf.defineProperties.sham&&(rZA.sham=!0);var aZA=sf.exports,PZA=aZA,cZA=PZA,nZA=cZA,lZA=nZA,dZA=lZA,hZA=dZA,DZA=hZA,uZA=SA(DZA),bZA=ZP,yZA=bZA.f("toPrimitive"),wZA=yZA,mZA=wZA,GZA=mZA,RZA=GZA,LZA=RZA,SZA=LZA,TZA=SZA,UZA=SA(TZA);function FZA(A,I){if(bo(A)!="object"||!A)return A;var g=A[UZA];if(g!==void 0){var C=g.call(A,I);if(bo(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(I==="string"?String:Number)(A)}function rf(A){var I=FZA(A,"string");return bo(I)=="symbol"?I:I+""}function Lg(A,I,g){return(I=rf(I))in A?yo(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}function $7(A,I){var g=tNA(A);if(O7){var C=O7(A);I&&(C=kNA(C).call(C,function(Q){return tf(A,Q).enumerable})),K9(g).apply(g,C)}return g}function ut(A){for(var I=1;I1?arguments[1]:void 0);t=t?t.next:s.first;)for(v(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(o){return!!e(this,o)}}),QN(B,g?{get:function(o){var t=e(this,o);return t&&t.value},set:function(o,t){return i(this,o===0?0:o,t)}}:{add:function(o){return i(this,o=o===0?0:o,o)}}),Dr&&KKA(B,"size",{configurable:!0,get:function(){return E(this).size}}),Q},setStrong:function(A,I,g){var C=I+" Iterator",Q=db(I),B=db(C);MKA(A,I,function(E,i){iN(this,{type:C,target:E,state:Q(E),kind:i,last:null})},function(){for(var E=B(this),i=E.kind,e=E.last;e&&e.removed;)e=e.previous;return E.target&&(E.last=e=e?e.next:E.state.first)?BN(i==="keys"?e.key:i==="values"?e.value:[e.key,e.value],!1):(E.target=null,BN(void 0,!0))},g?"entries":"values",!g,!0),XKA(I)}},fKA=NKA,HKA=jKA;fKA("Map",function(A){return function(){return A(this,arguments.length?arguments[0]:void 0)}},HKA);var xKA=function(A,I){return I===1?function(g,C){return g[A](C)}:function(g,C,Q){return g[A](C,Q)}},OKA=sg,Pn=xKA,eN=OKA("Map"),oQ={Map:eN,set:Pn("set",2),get:Pn("get",1),has:Pn("has",1),remove:Pn("delete",1),proto:eN.prototype},qKA=BA,_KA=HA,$KA=Dg,A8A=Zo,I8A=FB,id=oQ,g8A=jR,C8A=id.Map,Q8A=id.has,B8A=id.get,E8A=id.set,i8A=_KA([].push);qKA({target:"Map",stat:!0,forced:g8A},{groupBy:function(A,I){A8A(A),$KA(I);var g=new C8A,C=0;return I8A(A,function(Q){var B=I(Q,C++);Q8A(g,B)?i8A(B8A(g,B),Q):E8A(g,B,[Q])}),g}});var e8A=OI,o8A=e8A.Map,t8A=o8A,s8A=t8A,v8A=s8A,r8A=v8A,a8A=pg,P8A=Hg,c8A=qQ,n8A=FB,l8A=function(A,I,g){return function(C){var Q=c8A(C),B=arguments.length,E=B>1?arguments[1]:void 0,i=E!==void 0,e=i?a8A(E,B>2?arguments[2]:void 0):void 0,o=new A,t=0;return n8A(Q,function(s){var v=i?e(s,t++):s;g?I(o,P8A(v)[0],v[1]):I(o,v)}),o}},d8A=BA,oN=oQ,h8A=l8A;d8A({target:"Map",stat:!0,forced:!0},{from:h8A(oN.Map,oN.set,!0)});var D8A=Hg,u8A=function(A,I,g){return function(){for(var C=new A,Q=arguments.length,B=0;B1?arguments[1]:void 0);return X8A(I,function(C,Q){if(!g(C,Q,I))return!1},!0)!==!1}});var j8A=BA,f8A=pg,H8A=xg,bf=oQ,x8A=aE,O8A=bf.Map,q8A=bf.set;j8A({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(A){var I=H8A(this),g=f8A(A,arguments.length>1?arguments[1]:void 0),C=new O8A;return x8A(I,function(Q,B){g(Q,B,I)&&q8A(C,B,Q)}),C}});var _8A=BA,$8A=pg,AJA=xg,IJA=aE;_8A({target:"Map",proto:!0,real:!0,forced:!0},{find:function(A){var I=AJA(this),g=$8A(A,arguments.length>1?arguments[1]:void 0),C=IJA(I,function(Q,B){if(g(Q,B,I))return{value:Q}},!0);return C&&C.value}});var gJA=BA,CJA=pg,QJA=xg,BJA=aE;gJA({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(A){var I=QJA(this),g=CJA(A,arguments.length>1?arguments[1]:void 0),C=BJA(I,function(Q,B){if(g(Q,B,I))return{key:B}},!0);return C&&C.key}});var EJA=function(A,I){return A===I||A!=A&&I!=I},iJA=BA,eJA=EJA,oJA=xg,tJA=aE;iJA({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(A){return tJA(oJA(this),function(I){if(eJA(I,A))return!0},!0)===!0}});var sJA=BA,vJA=xg,wL=oQ,rJA=wL.get,aJA=wL.has,PJA=wL.set;sJA({target:"Map",proto:!0,real:!0,forced:!0},{getOrInsert:function(A,I){return aJA(vJA(this),A)?rJA(this,A):(PJA(this,A,I),I)}});var cJA=BA,nJA=Dg,lJA=xg,mL=oQ,dJA=mL.get,hJA=mL.has,DJA=mL.set;cJA({target:"Map",proto:!0,real:!0,forced:!0},{getOrInsertComputed:function(A,I){if(lJA(this),nJA(I),hJA(this,A))return dJA(this,A);A===0&&1/A==-1/0&&(A=0);var g=I(A);return DJA(this,A,g),g}});var uJA=BA,bJA=xg,yJA=aE;uJA({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(A){var I=yJA(bJA(this),function(g,C){if(g===A)return{key:C}},!0);return I&&I.key}});var wJA=BA,mJA=pg,GJA=xg,yf=oQ,RJA=aE,LJA=yf.Map,SJA=yf.set;wJA({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(A){var I=GJA(this),g=mJA(A,arguments.length>1?arguments[1]:void 0),C=new LJA;return RJA(I,function(Q,B){SJA(C,g(Q,B,I),Q)}),C}});var TJA=BA,UJA=pg,FJA=xg,wf=oQ,YJA=aE,kJA=wf.Map,pJA=wf.set;TJA({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(A){var I=FJA(this),g=UJA(A,arguments.length>1?arguments[1]:void 0),C=new kJA;return YJA(I,function(Q,B){pJA(C,B,g(Q,B,I))}),C}});var NJA=BA,ZJA=xg,KJA=FB,JJA=oQ.set;NJA({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(A){for(var I=ZJA(this),g=arguments.length,C=0;C1?arguments[1]:void 0);return xJA(I,function(C,Q){if(g(C,Q,I))return!0},!0)===!0}});var OJA=BA,rN=Dg,qJA=xg,GL=oQ,_JA=TypeError,$JA=GL.get,AWA=GL.has,IWA=GL.set;OJA({target:"Map",proto:!0,real:!0,forced:!0},{update:function(A,I){var g=qJA(this),C=arguments.length;rN(I);var Q=AWA(g,A);if(!Q&&C<3)throw new _JA("Updating absent value");var B=Q?$JA(g,A):rN(C>2?arguments[2]:void 0)(A,g);return IWA(g,A,I(B,A,g)),g}});var cn=zI,hb=Dg,nn=YI,gWA=Hg,CWA=TypeError,mf=function(A,I){var g,C=gWA(this),Q=hb(C.get),B=hb(C.has),E=hb(C.set),i=arguments.length>2?arguments[2]:void 0;if(!nn(I)&&!nn(i))throw new CWA("At least one callback required");return cn(B,C,A)?(g=cn(Q,C,A),nn(I)&&(g=I(g),cn(E,C,A,g))):nn(i)&&(g=i(),cn(E,C,A,g)),g},QWA=BA,BWA=mf;QWA({target:"Map",proto:!0,real:!0,forced:!0},{upsert:BWA});var EWA=BA,iWA=mf;EWA({target:"Map",proto:!0,real:!0,forced:!0},{updateOrInsert:iWA});var eWA=r8A,oWA=eWA,tWA=oWA,sWA=tWA,Db=SA(sWA),vWA=de,rWA=vWA("Array","concat"),aWA=eQ,PWA=rWA,ub=Array.prototype,cWA=function(A){var I=A.concat;return A===ub||aWA(ub,A)&&I===ub.concat?PWA:I},nWA=cWA,lWA=nWA,dWA=lWA,hWA=dWA,DWA=hWA,uWA=DWA,bWA=uWA,yWA=bWA,bC=SA(yWA),wWA=wj,Vr=SA(wWA),mWA=Af,GWA=SA(mWA),RWA=gf,LWA=SA(RWA),SWA=af,TWA=SA(SWA),UWA=O0,FWA=_Q,YWA=Zo,kWA=RangeError,pWA=function(A){var I=FWA(YWA(this)),g="",C=UWA(A);if(C<0||C===1/0)throw new kWA("Wrong number of repetitions");for(;C>0;(C>>>=1)&&(I+=I))1&C&&(g+=I);return g},Gf=HA,NWA=rX,aN=_Q,ZWA=pWA,KWA=Zo,JWA=Gf(ZWA),WWA=Gf("".slice),VWA=Math.ceil,zWA=function(A){return function(I,g,C){var Q,B,E=aN(KWA(I)),i=NWA(g),e=E.length,o=C===void 0?" ":aN(C);return i<=e||o===""?E:((B=JWA(o,VWA((Q=i-e)/o.length))).length>Q&&(B=WWA(B,0,Q)),A?E+B:B+E)}},MWA={start:zWA(!1)},he=HA,PN=JA,Re=MWA.start,XWA=RangeError,jWA=isFinite,fWA=Math.abs,OE=Date.prototype,bb=OE.toISOString,HWA=he(OE.getTime),xWA=he(OE.getUTCDate),OWA=he(OE.getUTCFullYear),qWA=he(OE.getUTCHours),_WA=he(OE.getUTCMilliseconds),$WA=he(OE.getUTCMinutes),A1A=he(OE.getUTCMonth),I1A=he(OE.getUTCSeconds),g1A=PN(function(){return bb.call(new Date(-50000000000001))!=="0385-07-25T07:06:39.999Z"})||!PN(function(){bb.call(new Date(NaN))})?function(){if(!jWA(HWA(this)))throw new XWA("Invalid time value");var A=this,I=OWA(A),g=_WA(A),C=I<0?"-":I>9999?"+":"";return C+Re(fWA(I),C?6:4,0)+"-"+Re(A1A(A)+1,2,0)+"-"+Re(xWA(A),2,0)+"T"+Re(qWA(A),2,0)+":"+Re($WA(A),2,0)+":"+Re(I1A(A),2,0)+"."+Re(g,3,0)+"Z"}:bb,C1A=BA,Rf=zI,Q1A=qQ,B1A=$M,E1A=g1A,i1A=xE,e1A=JA,o1A=e1A(function(){return new Date(NaN).toJSON()!==null||Rf(Date.prototype.toJSON,{toISOString:function(){return 1}})!==1});C1A({target:"Date",proto:!0,forced:o1A},{toJSON:function(A){var I=Q1A(this),g=B1A(I,"number");return typeof g!="number"||isFinite(g)?"toISOString"in I||i1A(I)!=="Date"?I.toISOString():Rf(E1A,I):null}});var wm=OI,t1A=yv;wm.JSON||(wm.JSON={stringify:JSON.stringify});var s1A=function(A,I,g){return t1A(wm.JSON.stringify,null,arguments)},v1A=s1A,r1A=v1A,a1A=r1A,P1A=a1A,c1A=P1A,n1A=c1A,l1A=n1A,d1A=l1A,mm=SA(d1A),h1A=BA,D1A=HA,u1A=_R,b1A=RangeError,cN=String.fromCharCode,nN=String.fromCodePoint,y1A=D1A([].join),w1A=!!nN&&nN.length!==1;h1A({target:"String",stat:!0,forced:w1A},{fromCodePoint:function(A){for(var I,g=[],C=arguments.length,Q=0;C>Q;){if(I=+arguments[Q++],u1A(I,1114111)!==I)throw new b1A(I+" is not a valid code point");g[Q]=I<65536?cN(I):cN(55296+((I-=65536)>>10),I%1024+56320)}return y1A(g,"")}});var m1A=JA,G1A=GI,R1A=kI,lN=jR,L1A=G1A("iterator"),ed=!m1A(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),I=A.searchParams,g=new URLSearchParams("a=1&a=2&b=3"),C="";return A.pathname="c%20d",I.forEach(function(Q,B){I.delete("b"),C+=B+Q}),g.delete("a",2),g.delete("b",void 0),lN&&(!A.toJSON||!g.has("a",1)||g.has("a",2)||!g.has("a",void 0)||g.has("b"))||!I.size&&(lN||!R1A)||!I.sort||A.href!=="https://a/c%20d?a=1&c=3"||I.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!I[L1A]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||C!=="a1c3"||new URL("https://x",void 0).host!=="x"}),dN=Pe,S1A=Math.floor,Gm=function(A,I){var g=A.length;if(g<8)for(var C,Q,B=1;B0;)A[Q]=A[--Q];Q!==B++&&(A[Q]=C)}else for(var E=S1A(g/2),i=Gm(dN(A,0,E),I),e=Gm(dN(A,E),I),o=i.length,t=e.length,s=0,v=0;s0&&A&g;g>>=1)I++;return I},CVA=function(A){var I=null;switch(A.length){case 1:I=A[0];break;case 2:I=(31&A[0])<<6|63&A[1];break;case 3:I=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:I=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return I>1114111?null:I},SN=function(A){for(var I=(A=Yf(A,AVA," ")).length,g="",C=0;CI){g+="%",C++;continue}var B=LN(A,C+1);if(B!=B){g+=Q,C++;continue}C+=2;var E=gVA(B);if(E===0)Q=x1A(B);else{if(E===1||E>4){g+=Gb,C++;continue}for(var i=[B],e=1;eI||yl(A,C)!=="%");){var o=LN(A,C+1);if(o!=o){C+=3;break}if(o>191||o<128)break;pi(i,o),C+=2,e++}if(i.length!==E){g+=Gb;continue}var t=CVA(i);t===null?g+=Gb:Q=O1A(t)}}g+=Q,C++}return g},QVA=/[!'()~]|%20/g,BVA={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},EVA=function(A){return BVA[A]},TN=function(A){return Yf(H1A(A),QVA,EVA)},Rb=p1A(function(A,I){Ff(this,{type:Uf,target:bQ(A).entries,index:0,kind:I})},_s,function(){var A=j1A(this),I=A.target,g=A.index++;if(!I||g>=I.length)return A.target=null,dn(void 0,!0);var C=I[g];switch(A.kind){case"keys":return dn(C.key,!1);case"values":return dn(C.value,!1)}return dn([C.key,C.value],!1)},!0),pf=function(A){this.entries=[],this.url=null,A!==void 0&&(Tf(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?yl(A,0)==="?"?kf(A,1):A:gC(A)))};pf.prototype={type:_s,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var I,g,C,Q,B,E,i,e=this.entries,o=V1A(A);if(o)for(g=(I=bN(A,o)).next;!(C=ln(g,I)).done;){if(B=(Q=bN(J1A(C.value))).next,(E=ln(B,Q)).done||(i=ln(B,Q)).done||!ln(B,Q).done)throw new f1A("Expected sequence with length 2");pi(e,{key:gC(E.value),value:gC(i.value)})}else for(var t in A)N1A(A,t)&&pi(e,{key:t,value:gC(A[t])})},parseQuery:function(A){if(A)for(var I,g,C=this.entries,Q=RN(A,"&"),B=0;B0?arguments[0]:void 0));zr||(this.size=A.entries.length)},Kt=M9.prototype;if(Y1A(Kt,{append:function(A,I){var g=bQ(this);bt(arguments.length,2),pi(g.entries,{key:gC(A),value:gC(I)}),zr||this.length++,g.updateURL()},delete:function(A){for(var I=bQ(this),g=bt(arguments.length,1),C=I.entries,Q=gC(A),B=g<2?void 0:arguments[1],E=B===void 0?B:gC(B),i=0;ig.key?1:-1}),A.updateURL()},forEach:function(A){for(var I,g=bQ(this).entries,C=Z1A(A,arguments.length>1?arguments[1]:void 0),Q=0;Q1?UN(arguments[1]):{})}}),wb(z9)){var Lb=function(A){return Sf(this,mb),new z9(A,arguments.length>1?UN(arguments[1]):{})};mb.constructor=Lb,Lb.prototype=mb,yb({global:!0,dontCallGetSet:!0,forced:!0},{Request:Lb})}}var lQ,oVA={URLSearchParams:M9,getState:bQ},FN=kI,tVA=HA,sVA=zI,vVA=JA,Sb=q0,rVA=pP,aVA=X0,PVA=qQ,cVA=MR,yt=Object.assign,YN=Object.defineProperty,nVA=tVA([].concat),lVA=!yt||vVA(function(){if(FN&&yt({b:1},yt(YN({},"a",{enumerable:!0,get:function(){YN(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},I={},g=Symbol("assign detection"),C="abcdefghijklmnopqrst";return A[g]=7,C.split("").forEach(function(Q){I[Q]=Q}),yt({},A)[g]!==7||Sb(yt({},I)).join("")!==C})?function(A,I){for(var g=PVA(A),C=arguments.length,Q=1,B=rVA.f,E=aVA.f;C>Q;)for(var i,e=cVA(arguments[Q++]),o=B?nVA(Sb(e),B(e)):Sb(e),t=o.length,s=0;t>s;)i=o[s++],FN&&!sVA(E,e,i)||(g[i]=e[i]);return g}:yt,Wo=HA,Tb=2147483647,ua=36,Nf=1,Rm=26,dVA=38,hVA=700,DVA=72,uVA=128,bVA="-",yVA=/[^\0-\u007E]/,Zf=/[.\u3002\uFF0E\uFF61]/g,kN="Overflow: input needs wider integers to process",Ub=ua-Nf,pN=RangeError,wVA=Wo(Zf.exec),ss=Math.floor,Fb=String.fromCharCode,NN=Wo("".charCodeAt),Kf=Wo([].join),Ni=Wo([].push),mVA=Wo("".replace),GVA=Wo("".split),RVA=Wo("".toLowerCase),LVA=function(A){for(var I=[],g=0,C=A.length;g=55296&&Q<=56319&&g>1,A+=ss(A/I);A>Ub*Rm>>1;)A=ss(A/Ub),C+=ua;return ss(C+(Ub+1)*A/(A+dVA))},TVA=function(A){var I,g,C=[],Q=(A=LVA(A)).length,B=uVA,E=0,i=DVA;for(I=0;I=B&&gss((Tb-E)/s))throw new pN(kN);for(E+=(t-B)*s,B=t,I=0;ITb)throw new pN(kN);if(g===B){for(var v=E,r=ua;;){var n=r<=i?Nf:r>=i+Rm?Rm:r-i;if(v?@[\\\]^|]/,IzA=/[\0\t\n\r #/:<>?@[\\\]^|]/,gzA=/^[\u0000-\u0020]+/,CzA=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,QzA=/[\t\n\r]/g,BzA=function(A){var I,g,C,Q,B,E,i,e=fVA(A,".");if(e.length&&e[e.length-1]===""&&e.length--,(I=e.length)>4)return A;for(g=[],C=0;C1&&FQ(Q,0)==="0"&&(B=nB(qVA,Q)?16:8,Q=ba(Q,B===8?1:2)),Q==="")E=0;else{if(!nB(B===10?$VA:B===8?_VA:zf,Q))return A;E=j9(Q,B)}Jt(g,E)}for(C=0;C=JN(256,5-I))return null}else if(E>255)return null;for(i=XVA(g),C=0;C6))return;for(C=0;v();){if(Q=null,C>0){if(!(v()==="."&&C<4))return;s++}if(!nB(Tm,v()))return;for(;nB(Tm,v());){if(B=j9(v(),10),Q===null)Q=B;else{if(Q===0)return;Q=10*Q+B}if(Q>255)return;s++}e[o]=256*e[o]+Q,++C!==2&&C!==4||o++}if(C!==4)return;break}if(v()===":"){if(s++,!v())return}else if(v())return;e[o++]=I}else{if(t!==null)return;s++,t=++o}}if(t!==null)for(E=o-t,o=7;o!==0&&E>0;)i=e[o],e[o--]=e[t+E-1],e[t+--E]=i;else if(o!==8)return;return e},izA=function(A){for(var I=null,g=1,C=null,Q=0,B=0;B<8;B++)A[B]!==0?(Q>g&&(I=C,g=Q),C=null,Q=0):(C===null&&(C=B),++Q);return Q>g?C:I},br=function(A){var I,g,C,Q;if(typeof A=="number"){for(I=[],g=0;g<4;g++)HVA(I,A%256),A=zVA(A/256);return Mr(I,".")}if(typeof A=="object"){for(I="",C=izA(A),g=0;g<8;g++)Q&&A[g]===0||(Q&&(Q=!1),C===g?(I+=g?":":"::",Q=!0):(I+=MVA(A[g],16),g<7&&(I+=":")));return"["+I+"]"}return A},wl={},Mf=UL({},wl,{" ":1,'"':1,"<":1,">":1,"`":1}),Xf=UL({},Mf,{"#":1,"?":1,"{":1,"}":1}),pb=UL({},Xf,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),oi=function(A,I){var g=pVA(A,0);return g>32&&g<127&&!Lm(I,A)?A:encodeURIComponent(A)},Dn={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Xr=function(A,I){var g;return A.length===2&&nB(Vf,FQ(A,0))&&((g=FQ(A,1))===":"||!I&&g==="|")},VN=function(A){var I;return A.length>1&&Xr(ba(A,0,2))&&(A.length===2||(I=FQ(A,2))==="/"||I==="\\"||I==="?"||I==="#")},ezA=function(A){return A==="."||f9(A)==="%2e"},ozA=function(A){return(A=f9(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},Nb={},zN={},Zb={},MN={},XN={},Kb={},jN={},fN={},un={},bn={},Jb={},Wb={},Vb={},zb={},HN={},Mb={},mt={},jB={},xN={},Se={},hE={},FL=function(A,I,g){var C,Q,B,E=yE(A);if(I){if(Q=this.parse(E))throw new Sm(Q);this.searchParams=null}else{if(g!==void 0&&(C=new FL(g,!0)),Q=this.parse(E,null,C))throw new Sm(Q);(B=VVA(new WVA)).bindURL(this),this.searchParams=B}};FL.prototype={type:"URL",parse:function(A,I,g){var C,Q,B,E,i=this,e=I||Nb,o=0,t="",s=!1,v=!1,r=!1;for(A=yE(A),I||(i.scheme="",i.username="",i.password="",i.host=null,i.port=null,i.path=[],i.query=null,i.fragment=null,i.cannotBeABaseURL=!1,A=Yb(A,gzA,""),A=Yb(A,CzA,"$1")),A=Yb(A,QzA,""),C=wt(A);o<=C.length;){switch(Q=C[o],e){case Nb:if(!Q||!nB(Vf,Q)){if(I)return kb;e=Zb;continue}t+=f9(Q),e=zN;break;case zN:if(Q&&(nB(OVA,Q)||Q==="+"||Q==="-"||Q==="."))t+=f9(Q);else{if(Q!==":"){if(I)return kb;t="",e=Zb,o=0;continue}if(I&&(i.isSpecial()!==Lm(Dn,t)||t==="file"&&(i.includesCredentials()||i.port!==null)||i.scheme==="file"&&!i.host))return;if(i.scheme=t,I)return void(i.isSpecial()&&Dn[i.scheme]===i.port&&(i.port=null));t="",i.scheme==="file"?e=zb:i.isSpecial()&&g&&g.scheme===i.scheme?e=MN:i.isSpecial()?e=fN:C[o+1]==="/"?(e=XN,o++):(i.cannotBeABaseURL=!0,Jt(i.path,""),e=xN)}break;case Zb:if(!g||g.cannotBeABaseURL&&Q!=="#")return kb;if(g.cannotBeABaseURL&&Q==="#"){i.scheme=g.scheme,i.path=BB(g.path),i.query=g.query,i.fragment="",i.cannotBeABaseURL=!0,e=hE;break}e=g.scheme==="file"?zb:Kb;continue;case MN:if(Q!=="/"||C[o+1]!=="/"){e=Kb;continue}e=un,o++;break;case XN:if(Q==="/"){e=bn;break}e=jB;continue;case Kb:if(i.scheme=g.scheme,Q===lQ)i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.query=g.query;else if(Q==="/"||Q==="\\"&&i.isSpecial())e=jN;else if(Q==="?")i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.query="",e=Se;else{if(Q!=="#"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.path.length--,e=jB;continue}i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.query=g.query,i.fragment="",e=hE}break;case jN:if(!i.isSpecial()||Q!=="/"&&Q!=="\\"){if(Q!=="/"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,e=jB;continue}e=bn}else e=un;break;case fN:if(e=un,Q!=="/"||FQ(t,o+1)!=="/")continue;o++;break;case un:if(Q!=="/"&&Q!=="\\"){e=bn;continue}break;case bn:if(Q==="@"){s&&(t="%40"+t),s=!0,B=wt(t);for(var n=0;n65535)return WN;i.port=i.isSpecial()&&d===Dn[i.scheme]?null:d,t=""}if(I)return;e=mt;continue}return WN}t+=Q;break;case zb:if(i.scheme="file",Q==="/"||Q==="\\")e=HN;else{if(!g||g.scheme!=="file"){e=jB;continue}switch(Q){case lQ:i.host=g.host,i.path=BB(g.path),i.query=g.query;break;case"?":i.host=g.host,i.path=BB(g.path),i.query="",e=Se;break;case"#":i.host=g.host,i.path=BB(g.path),i.query=g.query,i.fragment="",e=hE;break;default:VN(Mr(BB(C,o),""))||(i.host=g.host,i.path=BB(g.path),i.shortenPath()),e=jB;continue}}break;case HN:if(Q==="/"||Q==="\\"){e=Mb;break}g&&g.scheme==="file"&&!VN(Mr(BB(C,o),""))&&(Xr(g.path[0],!0)?Jt(i.path,g.path[0]):i.host=g.host),e=jB;continue;case Mb:if(Q===lQ||Q==="/"||Q==="\\"||Q==="?"||Q==="#"){if(!I&&Xr(t))e=jB;else if(t===""){if(i.host="",I)return;e=mt}else{if(E=i.parseHost(t))return E;if(i.host==="localhost"&&(i.host=""),I)return;t="",e=mt}continue}t+=Q;break;case mt:if(i.isSpecial()){if(e=jB,Q!=="/"&&Q!=="\\")continue}else if(I||Q!=="?")if(I||Q!=="#"){if(Q!==lQ&&(e=jB,Q!=="/"))continue}else i.fragment="",e=hE;else i.query="",e=Se;break;case jB:if(Q===lQ||Q==="/"||Q==="\\"&&i.isSpecial()||!I&&(Q==="?"||Q==="#")){if(ozA(t)?(i.shortenPath(),Q==="/"||Q==="\\"&&i.isSpecial()||Jt(i.path,"")):ezA(t)?Q==="/"||Q==="\\"&&i.isSpecial()||Jt(i.path,""):(i.scheme==="file"&&!i.path.length&&Xr(t)&&(i.host&&(i.host=""),t=FQ(t,0)+":"),Jt(i.path,t)),t="",i.scheme==="file"&&(Q===lQ||Q==="?"||Q==="#"))for(;i.path.length>1&&i.path[0]==="";)jVA(i.path);Q==="?"?(i.query="",e=Se):Q==="#"&&(i.fragment="",e=hE)}else t+=oi(Q,Xf);break;case xN:Q==="?"?(i.query="",e=Se):Q==="#"?(i.fragment="",e=hE):Q!==lQ&&(i.path[0]+=oi(Q,wl));break;case Se:I||Q!=="#"?Q!==lQ&&(Q==="'"&&i.isSpecial()?i.query+="%27":i.query+=Q==="#"?"%23":oi(Q,wl)):(i.fragment="",e=hE);break;case hE:Q!==lQ&&(i.fragment+=oi(Q,Mf))}o++}},parseHost:function(A){var I,g,C;if(FQ(A,0)==="["){if(FQ(A,A.length-1)!=="]"||!(I=EzA(ba(A,1,-1))))return Le;this.host=I}else if(this.isSpecial()){if(A=NVA(A),nB(AzA,A)||(I=BzA(A))===null)return Le;this.host=I}else{if(nB(IzA,A))return Le;for(I="",g=wt(A),C=0;C1?arguments[1]:void 0,C=JVA(I,new FL(A,!1,g));SL||(I.href=C.serialize(),I.origin=C.getOrigin(),I.protocol=C.getProtocol(),I.username=C.getUsername(),I.password=C.getPassword(),I.host=C.getHost(),I.hostname=C.getHostname(),I.port=C.getPort(),I.pathname=C.getPathname(),I.search=C.getSearch(),I.searchParams=C.getSearchParams(),I.hash=C.getHash())},AC=$s.prototype,hQ=function(A,I){return{get:function(){return X9(this)[A]()},set:I&&function(g){return X9(this)[I](g)},configurable:!0,enumerable:!0}};if(SL&&(dQ(AC,"href",hQ("serialize","setHref")),dQ(AC,"origin",hQ("getOrigin")),dQ(AC,"protocol",hQ("getProtocol","setProtocol")),dQ(AC,"username",hQ("getUsername","setUsername")),dQ(AC,"password",hQ("getPassword","setPassword")),dQ(AC,"host",hQ("getHost","setHost")),dQ(AC,"hostname",hQ("getHostname","setHostname")),dQ(AC,"port",hQ("getPort","setPort")),dQ(AC,"pathname",hQ("getPathname","setPathname")),dQ(AC,"search",hQ("getSearch","setSearch")),dQ(AC,"searchParams",hQ("getSearchParams")),dQ(AC,"hash",hQ("getHash","setHash"))),hn(AC,"toJSON",function(){return X9(this).serialize()},{enumerable:!0}),hn(AC,"toString",function(){return X9(this).serialize()},{enumerable:!0}),ur){var ON=ur.createObjectURL,qN=ur.revokeObjectURL;ON&&hn($s,"createObjectURL",KN(ON,ur)),qN&&hn($s,"revokeObjectURL",KN(qN,ur))}ZVA($s,"URL"),FVA({global:!0,forced:!YVA,sham:!SL},{URL:$s});var tzA=BA,szA=sg,jf=JA,vzA=MP,_N=_Q,rzA=ed,YL=szA("URL"),azA=rzA&&jf(function(){YL.canParse()}),PzA=jf(function(){return YL.canParse.length!==1});tzA({target:"URL",stat:!0,forced:!azA||PzA},{canParse:function(A){var I=vzA(arguments.length,1),g=_N(A),C=I<2||arguments[1]===void 0?void 0:_N(arguments[1]);try{return!!new YL(g,C)}catch{return!1}}});var czA=BA,nzA=sg,lzA=MP,$N=_Q,dzA=ed,hzA=nzA("URL");czA({target:"URL",stat:!0,forced:!dzA},{parse:function(A){var I=lzA(arguments.length,1),g=$N(A),C=I<2||arguments[1]===void 0?void 0:$N(arguments[1]);try{return new hzA(g,C)}catch{return null}}});var DzA=OI,uzA=DzA.URL,bzA=uzA,yzA=bzA,wzA=yzA,mzA=wzA,GzA=mzA,RzA=GzA,LzA=RzA,SzA=LzA,AZ=SA(SzA),TzA=BA,UzA=Y9,FzA=aX.indexOf,YzA=yj,Um=UzA([].indexOf),ff=!!Um&&1/Um([1],1,-0)<0,kzA=ff||!YzA("indexOf");TzA({target:"Array",proto:!0,forced:kzA},{indexOf:function(A){var I=arguments.length>1?arguments[1]:void 0;return ff?Um(this,A,I)||0:FzA(this,A,I)}});var pzA=de,NzA=pzA("Array","indexOf"),ZzA=eQ,KzA=NzA,Xb=Array.prototype,JzA=function(A){var I=A.indexOf;return A===Xb||ZzA(Xb,A)&&I===Xb.indexOf?KzA:I},WzA=JzA,VzA=WzA,zzA=VzA,MzA=zzA,XzA=MzA,jzA=XzA,fzA=jzA,HzA=fzA,xzA=SA(HzA),Hf="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fXZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PT1NYXRoJiZ0fSxuPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2YgdCYmdCl8fHIoIm9iamVjdCI9PXR5cGVvZiB0JiZ0KXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19LGk9IW8oKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdHx8dC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksYT1pLHU9RnVuY3Rpb24ucHJvdG90eXBlLGM9dS5hcHBseSxzPXUuY2FsbCxmPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGE/cy5iaW5kKGMpOmZ1bmN0aW9uKCl7cmV0dXJuIHMuYXBwbHkoYyxhcmd1bWVudHMpfSksbD1pLGg9RnVuY3Rpb24ucHJvdG90eXBlLHA9aC5jYWxsLHY9bCYmaC5iaW5kLmJpbmQocCxwKSxkPWw/djpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0LGFyZ3VtZW50cyl9fSx5PWQsZz15KHt9LnRvU3RyaW5nKSxtPXkoIiIuc2xpY2UpLGI9ZnVuY3Rpb24odCl7cmV0dXJuIG0oZyh0KSw4LC0xKX0sdz1iLE89ZCxTPWZ1bmN0aW9uKHQpe2lmKCJGdW5jdGlvbiI9PT13KHQpKXJldHVybiBPKHQpfSxFPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxUPXZvaWQgMD09PUUmJnZvaWQgMCE9PUU/ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR8fHQ9PT1FfTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH0seD17fSxqPSFvKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLE09aSxrPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLEE9TT9rLmJpbmQoayk6ZnVuY3Rpb24oKXtyZXR1cm4gay5hcHBseShrLGFyZ3VtZW50cyl9LFA9e30sTD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxSPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTj1SJiYhTC5jYWxsKHsxOjJ9LDEpO1AuZj1OP2Z1bmN0aW9uKHQpe3ZhciBlPVIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06TDt2YXIgXyxDLEY9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19LEk9byxEPWIsVT1PYmplY3Qsej1kKCIiLnNwbGl0KSxCPUkoKGZ1bmN0aW9uKCl7cmV0dXJuIVUoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09PUQodCk/eih0LCIiKTpVKHQpfTpVLEc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LEg9RyxXPVR5cGVFcnJvcixKPWZ1bmN0aW9uKHQpe2lmKEgodCkpdGhyb3cgbmV3IFcoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9LEs9QixWPUoscT1mdW5jdGlvbih0KXtyZXR1cm4gSyhWKHQpKX0sWT1ULFg9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OlkodCl9LFo9e30sJD1aLFE9bix0dD1ULGV0PWZ1bmN0aW9uKHQpe3JldHVybiB0dCh0KT90OnZvaWQgMH0scnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2V0KCRbdF0pfHxldChRW3RdKTokW3RdJiYkW3RdW2VdfHxRW3RdJiZRW3RdW2VdfSxudD1kKHt9LmlzUHJvdG90eXBlT2YpLG90PW4ubmF2aWdhdG9yLGl0PW90JiZvdC51c2VyQWdlbnQsYXQ9aXQ/U3RyaW5nKGl0KToiIix1dD1uLGN0PWF0LHN0PXV0LnByb2Nlc3MsZnQ9dXQuRGVubyxsdD1zdCYmc3QudmVyc2lvbnN8fGZ0JiZmdC52ZXJzaW9uLGh0PWx0JiZsdC52ODtodCYmKEM9KF89aHQuc3BsaXQoIi4iKSlbMF0+MCYmX1swXTw0PzE6KyhfWzBdK19bMV0pKSwhQyYmY3QmJighKF89Y3QubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxfWzFdPj03NCkmJihfPWN0Lm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoQz0rX1sxXSk7dmFyIHB0PUMsdnQ9cHQsZHQ9byx5dD1uLlN0cmluZyxndD0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFkdCgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4heXQodCl8fCEoT2JqZWN0KHQpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJnZ0JiZ2dDw0MX0pKSxtdD1ndCYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcixidD1ydCx3dD1ULE90PW50LFN0PU9iamVjdCxFdD1tdD9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPWJ0KCJTeW1ib2wiKTtyZXR1cm4gd3QoZSkmJk90KGUucHJvdG90eXBlLFN0KHQpKX0sVHQ9U3RyaW5nLHh0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gVHQodCl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fSxqdD1ULE10PXh0LGt0PVR5cGVFcnJvcixBdD1mdW5jdGlvbih0KXtpZihqdCh0KSlyZXR1cm4gdDt0aHJvdyBuZXcga3QoTXQodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfSxQdD1BdCxMdD1HLFJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlXTtyZXR1cm4gTHQocik/dm9pZCAwOlB0KHIpfSxOdD1BLF90PVQsQ3Q9WCxGdD1UeXBlRXJyb3IsSXQ9e2V4cG9ydHM6e319LER0PW4sVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LHp0PW4sQnQ9ZnVuY3Rpb24odCxlKXt0cnl7VXQoRHQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtEdFt0XT1lfXJldHVybiBlfSxHdD0iX19jb3JlLWpzX3NoYXJlZF9fIixIdD1JdC5leHBvcnRzPXp0W0d0XXx8QnQoR3Qse30pOyhIdC52ZXJzaW9uc3x8KEh0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIFd0PUl0LmV4cG9ydHMsSnQ9V3QsS3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSnRbdF18fChKdFt0XT1lfHx7fSl9LFZ0PUoscXQ9T2JqZWN0LFl0PWZ1bmN0aW9uKHQpe3JldHVybiBxdChWdCh0KSl9LFh0PVl0LFp0PWQoe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFp0KFh0KHQpLGUpfSxRdD1kLHRlPTAsZWU9TWF0aC5yYW5kb20oKSxyZT1RdCgxLi50b1N0cmluZyksbmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrcmUoKyt0ZStlZSwzNil9LG9lPUt0LGllPSR0LGFlPW5lLHVlPWd0LGNlPW10LHNlPW4uU3ltYm9sLGZlPW9lKCJ3a3MiKSxsZT1jZT9zZS5mb3J8fHNlOnNlJiZzZS53aXRob3V0U2V0dGVyfHxhZSxoZT1mdW5jdGlvbih0KXtyZXR1cm4gaWUoZmUsdCl8fChmZVt0XT11ZSYmaWUoc2UsdCk/c2VbdF06bGUoIlN5bWJvbC4iK3QpKSxmZVt0XX0scGU9QSx2ZT1YLGRlPUV0LHllPVJ0LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIj09PWUmJl90KHI9dC50b1N0cmluZykmJiFDdChuPU50KHIsdCkpKXJldHVybiBuO2lmKF90KHI9dC52YWx1ZU9mKSYmIUN0KG49TnQocix0KSkpcmV0dXJuIG47aWYoInN0cmluZyIhPT1lJiZfdChyPXQudG9TdHJpbmcpJiYhQ3Qobj1OdChyLHQpKSlyZXR1cm4gbjt0aHJvdyBuZXcgRnQoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfSxtZT1UeXBlRXJyb3IsYmU9aGUoInRvUHJpbWl0aXZlIiksd2U9ZnVuY3Rpb24odCxlKXtpZighdmUodCl8fGRlKHQpKXJldHVybiB0O3ZhciByLG49eWUodCxiZSk7aWYobil7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPXBlKG4sdCxlKSwhdmUocil8fGRlKHIpKXJldHVybiByO3Rocm93IG5ldyBtZSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PWUmJihlPSJudW1iZXIiKSxnZSh0LGUpfSxPZT13ZSxTZT1FdCxFZT1mdW5jdGlvbih0KXt2YXIgZT1PZSh0LCJzdHJpbmciKTtyZXR1cm4gU2UoZSk/ZTplKyIifSxUZT1YLHhlPW4uZG9jdW1lbnQsamU9VGUoeGUpJiZUZSh4ZS5jcmVhdGVFbGVtZW50KSxNZT1mdW5jdGlvbih0KXtyZXR1cm4gamU/eGUuY3JlYXRlRWxlbWVudCh0KTp7fX0sa2U9TWUsQWU9IWomJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGtlKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSksUGU9aixMZT1BLFJlPVAsTmU9RixfZT1xLENlPUVlLEZlPSR0LEllPUFlLERlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7eC5mPVBlP0RlOmZ1bmN0aW9uKHQsZSl7aWYodD1fZSh0KSxlPUNlKGUpLEllKXRyeXtyZXR1cm4gRGUodCxlKX1jYXRjaChyKXt9aWYoRmUodCxlKSlyZXR1cm4gTmUoIUxlKFJlLmYsdCxlKSx0W2VdKX07dmFyIFVlPW8semU9VCxCZT0vI3xcLnByb3RvdHlwZVwuLyxHZT1mdW5jdGlvbih0LGUpe3ZhciByPVdlW0hlKHQpXTtyZXR1cm4gcj09PUtlfHxyIT09SmUmJih6ZShlKT9VZShlKTohIWUpfSxIZT1HZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKEJlLCIuIikudG9Mb3dlckNhc2UoKX0sV2U9R2UuZGF0YT17fSxKZT1HZS5OQVRJVkU9Ik4iLEtlPUdlLlBPTFlGSUxMPSJQIixWZT1HZSxxZT1BdCxZZT1pLFhlPVMoUy5iaW5kKSxaZT1mdW5jdGlvbih0LGUpe3JldHVybiBxZSh0KSx2b2lkIDA9PT1lP3Q6WWU/WGUodCxlKTpmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19LCRlPXt9LFFlPWomJm8oKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT09T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKSx0cj1YLGVyPVN0cmluZyxycj1UeXBlRXJyb3IsbnI9ZnVuY3Rpb24odCl7aWYodHIodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IHJyKGVyKHQpKyIgaXMgbm90IGFuIG9iamVjdCIpfSxvcj1qLGlyPUFlLGFyPVFlLHVyPW5yLGNyPUVlLHNyPVR5cGVFcnJvcixmcj1PYmplY3QuZGVmaW5lUHJvcGVydHksbHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixocj0iZW51bWVyYWJsZSIscHI9ImNvbmZpZ3VyYWJsZSIsdnI9IndyaXRhYmxlIjskZS5mPW9yP2FyP2Z1bmN0aW9uKHQsZSxyKXtpZih1cih0KSxlPWNyKGUpLHVyKHIpLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYicHJvdG90eXBlIj09PWUmJiJ2YWx1ZSJpbiByJiZ2ciBpbiByJiYhclt2cl0pe3ZhciBuPWxyKHQsZSk7biYmblt2cl0mJih0W2VdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOnByIGluIHI/cltwcl06bltwcl0sZW51bWVyYWJsZTpociBpbiByP3JbaHJdOm5baHJdLHdyaXRhYmxlOiExfSl9cmV0dXJuIGZyKHQsZSxyKX06ZnI6ZnVuY3Rpb24odCxlLHIpe2lmKHVyKHQpLGU9Y3IoZSksdXIociksaXIpdHJ5e3JldHVybiBmcih0LGUscil9Y2F0Y2gobil7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IG5ldyBzcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKHRbZV09ci52YWx1ZSksdH07dmFyIGRyPSRlLHlyPUYsZ3I9aj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGRyLmYodCxlLHlyKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fSxtcj1uLGJyPWYsd3I9UyxPcj1ULFNyPXguZixFcj1WZSxUcj1aLHhyPVplLGpyPWdyLE1yPSR0LGtyPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHIsbixvKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChyKTtjYXNlIDI6cmV0dXJuIG5ldyB0KHIsbil9cmV0dXJuIG5ldyB0KHIsbixvKX1yZXR1cm4gYnIodCx0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlLnByb3RvdHlwZT10LnByb3RvdHlwZSxlfSxBcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sbyxpLGEsdSxjLHMsZixsPXQudGFyZ2V0LGg9dC5nbG9iYWwscD10LnN0YXQsdj10LnByb3RvLGQ9aD9tcjpwP21yW2xdOm1yW2xdJiZtcltsXS5wcm90b3R5cGUseT1oP1RyOlRyW2xdfHxqcihUcixsLHt9KVtsXSxnPXkucHJvdG90eXBlO2ZvcihpIGluIGUpbj0hKHI9RXIoaD9pOmwrKHA/Ii4iOiIjIikraSx0LmZvcmNlZCkpJiZkJiZNcihkLGkpLHU9eVtpXSxuJiYoYz10LmRvbnRDYWxsR2V0U2V0PyhmPVNyKGQsaSkpJiZmLnZhbHVlOmRbaV0pLGE9biYmYz9jOmVbaV0sKHJ8fHZ8fHR5cGVvZiB1IT10eXBlb2YgYSkmJihzPXQuYmluZCYmbj94cihhLG1yKTp0LndyYXAmJm4/a3IoYSk6diYmT3IoYSk/d3IoYSk6YSwodC5zaGFtfHxhJiZhLnNoYW18fHUmJnUuc2hhbSkmJmpyKHMsInNoYW0iLCEwKSxqcih5LGkscyksdiYmKE1yKFRyLG89bCsiUHJvdG90eXBlIil8fGpyKFRyLG8se30pLGpyKFRyW29dLGksYSksdC5yZWFsJiZnJiYocnx8IWdbaV0pJiZqcihnLGksYSkpKX0sUHI9e307UHJbaGUoInRvU3RyaW5nVGFnIildPSJ6Ijt2YXIgTHI9IltvYmplY3Qgel0iPT09U3RyaW5nKFByKSxScj1McixOcj1ULF9yPWIsQ3I9aGUoInRvU3RyaW5nVGFnIiksRnI9T2JqZWN0LElyPSJBcmd1bWVudHMiPT09X3IoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxEcj1Scj9fcjpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaChyKXt9fShlPUZyKHQpLENyKSk/cjpJcj9fcihlKToiT2JqZWN0Ij09PShuPV9yKGUpKSYmTnIoZS5jYWxsZWUpPyJBcmd1bWVudHMiOm59LFVyPURyLHpyPVN0cmluZyxCcj1mdW5jdGlvbih0KXtpZigiU3ltYm9sIj09PVVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIHpyKHQpfSxHcj17fSxIcj1NYXRoLmNlaWwsV3I9TWF0aC5mbG9vcixKcj1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgZT0rdDtyZXR1cm4oZT4wP1dyOkhyKShlKX0sS3I9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6SnIoZSl9LFZyPUtyLHFyPU1hdGgubWF4LFlyPU1hdGgubWluLFhyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9VnIodCk7cmV0dXJuIHI8MD9xcihyK2UsMCk6WXIocixlKX0sWnI9S3IsJHI9TWF0aC5taW4sUXI9ZnVuY3Rpb24odCl7dmFyIGU9WnIodCk7cmV0dXJuIGU+MD8kcihlLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHRuPVFyLGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0bih0Lmxlbmd0aCl9LHJuPXEsbm49WHIsb249ZW4sYW49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgbz1ybihlKSxpPW9uKG8pO2lmKDA9PT1pKXJldHVybiF0JiYtMTt2YXIgYSx1PW5uKG4saSk7aWYodCYmciE9cil7Zm9yKDtpPnU7KWlmKChhPW9bdSsrXSkhPWEpcmV0dXJuITB9ZWxzZSBmb3IoO2k+dTt1KyspaWYoKHR8fHUgaW4gbykmJm9bdV09PT1yKXJldHVybiB0fHx1fHwwO3JldHVybiF0JiYtMX19LHVuPXtpbmNsdWRlczphbighMCksaW5kZXhPZjphbighMSl9LGNuPXt9LHNuPSR0LGZuPXEsbG49dW4uaW5kZXhPZixobj1jbixwbj1kKFtdLnB1c2gpLHZuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1mbih0KSxvPTAsaT1bXTtmb3IociBpbiBuKSFzbihobixyKSYmc24obixyKSYmcG4oaSxyKTtmb3IoO2UubGVuZ3RoPm87KXNuKG4scj1lW28rK10pJiYofmxuKGkscil8fHBuKGkscikpO3JldHVybiBpfSxkbj1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdLHluPXZuLGduPWRuLG1uPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4geW4odCxnbil9LGJuPWosd249UWUsT249JGUsU249bnIsRW49cSxUbj1tbjtHci5mPWJuJiYhd24/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtTbih0KTtmb3IodmFyIHIsbj1FbihlKSxvPVRuKGUpLGk9by5sZW5ndGgsYT0wO2k+YTspT24uZih0LHI9b1thKytdLG5bcl0pO3JldHVybiB0fTt2YXIgeG4sam49cnQoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiksTW49bmUsa249S3QoImtleXMiKSxBbj1mdW5jdGlvbih0KXtyZXR1cm4ga25bdF18fChrblt0XT1Nbih0KSl9LFBuPW5yLExuPUdyLFJuPWRuLE5uPWNuLF9uPWpuLENuPU1lLEZuPSJwcm90b3R5cGUiLEluPSJzY3JpcHQiLERuPUFuKCJJRV9QUk9UTyIpLFVuPWZ1bmN0aW9uKCl7fSx6bj1mdW5jdGlvbih0KXtyZXR1cm4iPCIrSW4rIj4iK3QrIjwvIitJbisiPiJ9LEJuPWZ1bmN0aW9uKHQpe3Qud3JpdGUoem4oIiIpKSx0LmNsb3NlKCk7dmFyIGU9dC5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiB0PW51bGwsZX0sR249ZnVuY3Rpb24oKXt0cnl7eG49bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2gobyl7fXZhciB0LGUscjtHbj0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmeG4/Qm4oeG4pOihlPUNuKCJpZnJhbWUiKSxyPSJqYXZhIitJbisiOiIsZS5zdHlsZS5kaXNwbGF5PSJub25lIixfbi5hcHBlbmRDaGlsZChlKSxlLnNyYz1TdHJpbmcociksKHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksdC53cml0ZSh6bigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6Qm4oeG4pO2Zvcih2YXIgbj1Sbi5sZW5ndGg7bi0tOylkZWxldGUgR25bRm5dW1JuW25dXTtyZXR1cm4gR24oKX07Tm5bRG5dPSEwO3ZhciBIbj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8oVW5bRm5dPVBuKHQpLHI9bmV3IFVuLFVuW0ZuXT1udWxsLHJbRG5dPXQpOnI9R24oKSx2b2lkIDA9PT1lP3I6TG4uZihyLGUpfSxXbj17fSxKbj12bixLbj1kbi5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO1duLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiBKbih0LEtuKX07dmFyIFZuPXt9LHFuPWQoW10uc2xpY2UpLFluPWIsWG49cSxabj1Xbi5mLCRuPXFuLFFuPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Vm4uZj1mdW5jdGlvbih0KXtyZXR1cm4gUW4mJiJXaW5kb3ciPT09WW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBabih0KX1jYXRjaChlKXtyZXR1cm4gJG4oUW4pfX0odCk6Wm4oWG4odCkpfTt2YXIgdG89e307dG8uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO3ZhciBlbz1ncixybz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbiYmbi5lbnVtZXJhYmxlP3RbZV09cjplbyh0LGUsciksdH0sbm89JGUsb289ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuby5mKHQsZSxyKX0saW89e30sYW89aGU7aW8uZj1hbzt2YXIgdW8sY28sc28sZm89Wixsbz0kdCxobz1pbyxwbz0kZS5mLHZvPWZ1bmN0aW9uKHQpe3ZhciBlPWZvLlN5bWJvbHx8KGZvLlN5bWJvbD17fSk7bG8oZSx0KXx8cG8oZSx0LHt2YWx1ZTpoby5mKHQpfSl9LHlvPUEsZ289cnQsbW89aGUsYm89cm8sd289ZnVuY3Rpb24oKXt2YXIgdD1nbygiU3ltYm9sIiksZT10JiZ0LnByb3RvdHlwZSxyPWUmJmUudmFsdWVPZixuPW1vKCJ0b1ByaW1pdGl2ZSIpO2UmJiFlW25dJiZibyhlLG4sKGZ1bmN0aW9uKHQpe3JldHVybiB5byhyLHRoaXMpfSkse2FyaXR5OjF9KX0sT289RHIsU289THI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK09vKHRoaXMpKyJdIn0sRW89THIsVG89JGUuZix4bz1ncixqbz0kdCxNbz1Tbyxrbz1oZSgidG9TdHJpbmdUYWciKSxBbz1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1yP3Q6dCYmdC5wcm90b3R5cGU7byYmKGpvKG8sa28pfHxUbyhvLGtvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pLG4mJiFFbyYmeG8obywidG9TdHJpbmciLE1vKSl9LFBvPVQsTG89bi5XZWFrTWFwLFJvPVBvKExvKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhMbykpLE5vPW4sX289WCxDbz1ncixGbz0kdCxJbz1XdCxEbz1BbixVbz1jbix6bz0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLEJvPU5vLlR5cGVFcnJvcixHbz1Oby5XZWFrTWFwO2lmKFJvfHxJby5zdGF0ZSl7dmFyIEhvPUlvLnN0YXRlfHwoSW8uc3RhdGU9bmV3IEdvKTtIby5nZXQ9SG8uZ2V0LEhvLmhhcz1Iby5oYXMsSG8uc2V0PUhvLnNldCx1bz1mdW5jdGlvbih0LGUpe2lmKEhvLmhhcyh0KSl0aHJvdyBuZXcgQm8oem8pO3JldHVybiBlLmZhY2FkZT10LEhvLnNldCh0LGUpLGV9LGNvPWZ1bmN0aW9uKHQpe3JldHVybiBIby5nZXQodCl8fHt9fSxzbz1mdW5jdGlvbih0KXtyZXR1cm4gSG8uaGFzKHQpfX1lbHNle3ZhciBXbz1Ebygic3RhdGUiKTtVb1tXb109ITAsdW89ZnVuY3Rpb24odCxlKXtpZihGbyh0LFdvKSl0aHJvdyBuZXcgQm8oem8pO3JldHVybiBlLmZhY2FkZT10LENvKHQsV28sZSksZX0sY289ZnVuY3Rpb24odCl7cmV0dXJuIEZvKHQsV28pP3RbV29dOnt9fSxzbz1mdW5jdGlvbih0KXtyZXR1cm4gRm8odCxXbyl9fXZhciBKbz17c2V0OnVvLGdldDpjbyxoYXM6c28sZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gc28odCk/Y28odCk6dW8odCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI7aWYoIV9vKGUpfHwocj1jbyhlKSkudHlwZSE9PXQpdGhyb3cgbmV3IEJvKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX0sS289YixWbz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iQXJyYXkiPT09S28odCl9LHFvPVQsWW89V3QsWG89ZChGdW5jdGlvbi50b1N0cmluZyk7cW8oWW8uaW5zcGVjdFNvdXJjZSl8fChZby5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBYbyh0KX0pO3ZhciBabz1Zby5pbnNwZWN0U291cmNlLCRvPWQsUW89byx0aT1ULGVpPURyLHJpPVpvLG5pPWZ1bmN0aW9uKCl7fSxvaT1ydCgiUmVmbGVjdCIsImNvbnN0cnVjdCIpLGlpPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGFpPSRvKGlpLmV4ZWMpLHVpPSFpaS50ZXN0KG5pKSxjaT1mdW5jdGlvbih0KXtpZighdGkodCkpcmV0dXJuITE7dHJ5e3JldHVybiBvaShuaSxbXSx0KSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LHNpPWZ1bmN0aW9uKHQpe2lmKCF0aSh0KSlyZXR1cm4hMTtzd2l0Y2goZWkodCkpe2Nhc2UiQXN5bmNGdW5jdGlvbiI6Y2FzZSJHZW5lcmF0b3JGdW5jdGlvbiI6Y2FzZSJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIjpyZXR1cm4hMX10cnl7cmV0dXJuIHVpfHwhIWFpKGlpLHJpKHQpKX1jYXRjaChlKXtyZXR1cm4hMH19O3NpLnNoYW09ITA7dmFyIGZpPSFvaXx8UW8oKGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGNpKGNpLmNhbGwpfHwhY2koT2JqZWN0KXx8IWNpKChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/c2k6Y2ksbGk9Vm8saGk9ZmkscGk9WCx2aT1oZSgic3BlY2llcyIpLGRpPUFycmF5LHlpPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBsaSh0KSYmKGU9dC5jb25zdHJ1Y3RvciwoaGkoZSkmJihlPT09ZGl8fGxpKGUucHJvdG90eXBlKSl8fHBpKGUpJiZudWxsPT09KGU9ZVt2aV0pKSYmKGU9dm9pZCAwKSksdm9pZCAwPT09ZT9kaTplfSxnaT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcoeWkodCkpKDA9PT1lPzA6ZSl9LG1pPVplLGJpPUIsd2k9WXQsT2k9ZW4sU2k9Z2ksRWk9ZChbXS5wdXNoKSxUaT1mdW5jdGlvbih0KXt2YXIgZT0xPT09dCxyPTI9PT10LG49Mz09PXQsbz00PT09dCxpPTY9PT10LGE9Nz09PXQsdT01PT09dHx8aTtyZXR1cm4gZnVuY3Rpb24oYyxzLGYsbCl7Zm9yKHZhciBoLHAsdj13aShjKSxkPWJpKHYpLHk9T2koZCksZz1taShzLGYpLG09MCxiPWx8fFNpLHc9ZT9iKGMseSk6cnx8YT9iKGMsMCk6dm9pZCAwO3k+bTttKyspaWYoKHV8fG0gaW4gZCkmJihwPWcoaD1kW21dLG0sdiksdCkpaWYoZSl3W21dPXA7ZWxzZSBpZihwKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gbTtjYXNlIDI6RWkodyxoKX1lbHNlIHN3aXRjaCh0KXtjYXNlIDQ6cmV0dXJuITE7Y2FzZSA3OkVpKHcsaCl9cmV0dXJuIGk/LTE6bnx8bz9vOnd9fSx4aT17Zm9yRWFjaDpUaSgwKSxtYXA6VGkoMSksZmlsdGVyOlRpKDIpLHNvbWU6VGkoMyksZXZlcnk6VGkoNCksZmluZDpUaSg1KSxmaW5kSW5kZXg6VGkoNiksZmlsdGVyUmVqZWN0OlRpKDcpfSxqaT1BcixNaT1uLGtpPUEsQWk9ZCxQaT1qLExpPWd0LFJpPW8sTmk9JHQsX2k9bnQsQ2k9bnIsRmk9cSxJaT1FZSxEaT1CcixVaT1GLHppPUhuLEJpPW1uLEdpPVduLEhpPVZuLFdpPXRvLEppPXgsS2k9JGUsVmk9R3IscWk9UCxZaT1ybyxYaT1vbyxaaT1LdCwkaT1jbixRaT1uZSx0YT1oZSxlYT1pbyxyYT12byxuYT13byxvYT1BbyxpYT1KbyxhYT14aS5mb3JFYWNoLHVhPUFuKCJoaWRkZW4iKSxjYT0iU3ltYm9sIixzYT0icHJvdG90eXBlIixmYT1pYS5zZXQsbGE9aWEuZ2V0dGVyRm9yKGNhKSxoYT1PYmplY3Rbc2FdLHBhPU1pLlN5bWJvbCx2YT1wYSYmcGFbc2FdLGRhPU1pLlJhbmdlRXJyb3IseWE9TWkuVHlwZUVycm9yLGdhPU1pLlFPYmplY3QsbWE9SmkuZixiYT1LaS5mLHdhPUhpLmYsT2E9cWkuZixTYT1BaShbXS5wdXNoKSxFYT1aaSgic3ltYm9scyIpLFRhPVppKCJvcC1zeW1ib2xzIikseGE9WmkoIndrcyIpLGphPSFnYXx8IWdhW3NhXXx8IWdhW3NhXS5maW5kQ2hpbGQsTWE9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW1hKGhhLGUpO24mJmRlbGV0ZSBoYVtlXSxiYSh0LGUsciksbiYmdCE9PWhhJiZiYShoYSxlLG4pfSxrYT1QaSYmUmkoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT16aShiYSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBiYSh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/TWE6YmEsQWE9ZnVuY3Rpb24odCxlKXt2YXIgcj1FYVt0XT16aSh2YSk7cmV0dXJuIGZhKHIse3R5cGU6Y2EsdGFnOnQsZGVzY3JpcHRpb246ZX0pLFBpfHwoci5kZXNjcmlwdGlvbj1lKSxyfSxQYT1mdW5jdGlvbih0LGUscil7dD09PWhhJiZQYShUYSxlLHIpLENpKHQpO3ZhciBuPUlpKGUpO3JldHVybiBDaShyKSxOaShFYSxuKT8oci5lbnVtZXJhYmxlPyhOaSh0LHVhKSYmdFt1YV1bbl0mJih0W3VhXVtuXT0hMSkscj16aShyLHtlbnVtZXJhYmxlOlVpKDAsITEpfSkpOihOaSh0LHVhKXx8YmEodCx1YSxVaSgxLHppKG51bGwpKSksdFt1YV1bbl09ITApLGthKHQsbixyKSk6YmEodCxuLHIpfSxMYT1mdW5jdGlvbih0LGUpe0NpKHQpO3ZhciByPUZpKGUpLG49QmkocikuY29uY2F0KENhKHIpKTtyZXR1cm4gYWEobiwoZnVuY3Rpb24oZSl7UGkmJiFraShSYSxyLGUpfHxQYSh0LGUscltlXSl9KSksdH0sUmE9ZnVuY3Rpb24odCl7dmFyIGU9SWkodCkscj1raShPYSx0aGlzLGUpO3JldHVybiEodGhpcz09PWhhJiZOaShFYSxlKSYmIU5pKFRhLGUpKSYmKCEocnx8IU5pKHRoaXMsZSl8fCFOaShFYSxlKXx8TmkodGhpcyx1YSkmJnRoaXNbdWFdW2VdKXx8cil9LE5hPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RmkodCksbj1JaShlKTtpZihyIT09aGF8fCFOaShFYSxuKXx8TmkoVGEsbikpe3ZhciBvPW1hKHIsbik7cmV0dXJuIW98fCFOaShFYSxuKXx8Tmkocix1YSkmJnJbdWFdW25dfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sX2E9ZnVuY3Rpb24odCl7dmFyIGU9d2EoRmkodCkpLHI9W107cmV0dXJuIGFhKGUsKGZ1bmN0aW9uKHQpe05pKEVhLHQpfHxOaSgkaSx0KXx8U2Eocix0KX0pKSxyfSxDYT1mdW5jdGlvbih0KXt2YXIgZT10PT09aGEscj13YShlP1RhOkZpKHQpKSxuPVtdO3JldHVybiBhYShyLChmdW5jdGlvbih0KXshTmkoRWEsdCl8fGUmJiFOaShoYSx0KXx8U2EobixFYVt0XSl9KSksbn07TGl8fChwYT1mdW5jdGlvbigpe2lmKF9pKHZhLHRoaXMpKXRocm93IG5ldyB5YSgiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP0RpKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9UWkodCkscj1mdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10aGlzP01pOnRoaXM7bj09PWhhJiZraShyLFRhLHQpLE5pKG4sdWEpJiZOaShuW3VhXSxlKSYmKG5bdWFdW2VdPSExKTt2YXIgbz1VaSgxLHQpO3RyeXtrYShuLGUsbyl9Y2F0Y2goaSl7aWYoIShpIGluc3RhbmNlb2YgZGEpKXRocm93IGk7TWEobixlLG8pfX07cmV0dXJuIFBpJiZqYSYma2EoaGEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpyfSksQWEoZSx0KX0sWWkodmE9cGFbc2FdLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxhKHRoaXMpLnRhZ30pKSxZaShwYSwid2l0aG91dFNldHRlciIsKGZ1bmN0aW9uKHQpe3JldHVybiBBYShRaSh0KSx0KX0pKSxxaS5mPVJhLEtpLmY9UGEsVmkuZj1MYSxKaS5mPU5hLEdpLmY9SGkuZj1fYSxXaS5mPUNhLGVhLmY9ZnVuY3Rpb24odCl7cmV0dXJuIEFhKHRhKHQpLHQpfSxQaSYmWGkodmEsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsYSh0aGlzKS5kZXNjcmlwdGlvbn19KSksamkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLGZvcmNlZDohTGksc2hhbTohTGl9LHtTeW1ib2w6cGF9KSxhYShCaSh4YSksKGZ1bmN0aW9uKHQpe3JhKHQpfSkpLGppKHt0YXJnZXQ6Y2Esc3RhdDohMCxmb3JjZWQ6IUxpfSx7dXNlU2V0dGVyOmZ1bmN0aW9uKCl7amE9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe2phPSExfX0pLGppKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUxpLHNoYW06IVBpfSx7Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/emkodCk6TGEoemkodCksZSl9LGRlZmluZVByb3BlcnR5OlBhLGRlZmluZVByb3BlcnRpZXM6TGEsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOk5hfSksamkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohTGl9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOl9hfSksbmEoKSxvYShwYSxjYSksJGlbdWFdPSEwO3ZhciBGYT1ndCYmISFTeW1ib2wuZm9yJiYhIVN5bWJvbC5rZXlGb3IsSWE9QXIsRGE9cnQsVWE9JHQsemE9QnIsQmE9S3QsR2E9RmEsSGE9QmEoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSxXYT1CYSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO0lhKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IUdhfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXphKHQpO2lmKFVhKEhhLGUpKXJldHVybiBIYVtlXTt2YXIgcj1EYSgiU3ltYm9sIikoZSk7cmV0dXJuIEhhW2VdPXIsV2Fbcl09ZSxyfX0pO3ZhciBKYT1BcixLYT0kdCxWYT1FdCxxYT14dCxZYT1GYSxYYT1LdCgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO0phKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IVlhfSx7a2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFWYSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHFhKHQpKyIgaXMgbm90IGEgc3ltYm9sIik7aWYoS2EoWGEsdCkpcmV0dXJuIFhhW3RdfX0pO3ZhciBaYT1WbywkYT1ULFFhPWIsdHU9QnIsZXU9ZChbXS5wdXNoKSxydT1BcixudT1ydCxvdT1mLGl1PUEsYXU9ZCx1dT1vLGN1PVQsc3U9RXQsZnU9cW4sbHU9ZnVuY3Rpb24odCl7aWYoJGEodCkpcmV0dXJuIHQ7aWYoWmEodCkpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLG49MDtuPGU7bisrKXt2YXIgbz10W25dOyJzdHJpbmciPT10eXBlb2Ygbz9ldShyLG8pOiJudW1iZXIiIT10eXBlb2YgbyYmIk51bWJlciIhPT1RYShvKSYmIlN0cmluZyIhPT1RYShvKXx8ZXUocix0dShvKSl9dmFyIGk9ci5sZW5ndGgsYT0hMDtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihhKXJldHVybiBhPSExLGU7aWYoWmEodGhpcykpcmV0dXJuIGU7Zm9yKHZhciBuPTA7bjxpO24rKylpZihyW25dPT09dClyZXR1cm4gZX19fSxodT1ndCxwdT1TdHJpbmcsdnU9bnUoIkpTT04iLCJzdHJpbmdpZnkiKSxkdT1hdSgvLi8uZXhlYykseXU9YXUoIiIuY2hhckF0KSxndT1hdSgiIi5jaGFyQ29kZUF0KSxtdT1hdSgiIi5yZXBsYWNlKSxidT1hdSgxLi50b1N0cmluZyksd3U9L1tcdUQ4MDAtXHVERkZGXS9nLE91PS9eW1x1RDgwMC1cdURCRkZdJC8sU3U9L15bXHVEQzAwLVx1REZGRl0kLyxFdT0haHV8fHV1KChmdW5jdGlvbigpe3ZhciB0PW51KCJTeW1ib2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3JldHVybiJbbnVsbF0iIT09dnUoW3RdKXx8Int9IiE9PXZ1KHthOnR9KXx8Int9IiE9PXZ1KE9iamVjdCh0KSl9KSksVHU9dXUoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09dnUoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PXZ1KCJcdWRlYWQiKX0pKSx4dT1mdW5jdGlvbih0LGUpe3ZhciByPWZ1KGFyZ3VtZW50cyksbj1sdShlKTtpZihjdShuKXx8dm9pZCAwIT09dCYmIXN1KHQpKXJldHVybiByWzFdPWZ1bmN0aW9uKHQsZSl7aWYoY3UobikmJihlPWl1KG4sdGhpcyxwdSh0KSxlKSksIXN1KGUpKXJldHVybiBlfSxvdSh2dSxudWxsLHIpfSxqdT1mdW5jdGlvbih0LGUscil7dmFyIG49eXUocixlLTEpLG89eXUocixlKzEpO3JldHVybiBkdShPdSx0KSYmIWR1KFN1LG8pfHxkdShTdSx0KSYmIWR1KE91LG4pPyJcXHUiK2J1KGd1KHQsMCksMTYpOnR9O3Z1JiZydSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOkV1fHxUdX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnUoYXJndW1lbnRzKSxvPW91KEV1P3h1OnZ1LG51bGwsbik7cmV0dXJuIFR1JiYic3RyaW5nIj09dHlwZW9mIG8/bXUobyx3dSxqdSk6b319KTt2YXIgTXU9dG8sa3U9WXQ7QXIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohZ3R8fG8oKGZ1bmN0aW9uKCl7TXUuZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbih0KXt2YXIgZT1NdS5mO3JldHVybiBlP2Uoa3UodCkpOltdfX0pO3ZhciBBdT1lKFouT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyksUHU9dW4uaW5jbHVkZXM7QXIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIFB1KHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIEx1PW4sUnU9WixOdT1mdW5jdGlvbih0LGUpe3ZhciByPVJ1W3QrIlByb3RvdHlwZSJdLG49ciYmcltlXTtpZihuKXJldHVybiBuO3ZhciBvPUx1W3RdLGk9byYmby5wcm90b3R5cGU7cmV0dXJuIGkmJmlbZV19LF91PU51KCJBcnJheSIsImluY2x1ZGVzIiksQ3U9WCxGdT1iLEl1PWhlKCJtYXRjaCIpLER1PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBDdSh0KSYmKHZvaWQgMCE9PShlPXRbSXVdKT8hIWU6IlJlZ0V4cCI9PT1GdSh0KSl9LFV1PVR5cGVFcnJvcix6dT1oZSgibWF0Y2giKSxCdT1BcixHdT1mdW5jdGlvbih0KXtpZihEdSh0KSl0aHJvdyBuZXcgVXUoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiB0fSxIdT1KLFd1PUJyLEp1PWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7Ii8uLyJbdF0oZSl9Y2F0Y2gocil7dHJ5e3JldHVybiBlW3p1XT0hMSwiLy4vIlt0XShlKX1jYXRjaChuKXt9fXJldHVybiExfSxLdT1kKCIiLmluZGV4T2YpO0J1KHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiFKdSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhfkt1KFd1KEh1KHRoaXMpKSxXdShHdSh0KSksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pO3ZhciBWdT1OdSgiU3RyaW5nIiwiaW5jbHVkZXMiKSxxdT1udCxZdT1fdSxYdT1WdSxadT1BcnJheS5wcm90b3R5cGUsJHU9U3RyaW5nLnByb3RvdHlwZSxRdT1lKChmdW5jdGlvbih0KXt2YXIgZT10LmluY2x1ZGVzO3JldHVybiB0PT09WnV8fHF1KFp1LHQpJiZlPT09WnUuaW5jbHVkZXM/WXU6InN0cmluZyI9PXR5cGVvZiB0fHx0PT09JHV8fHF1KCR1LHQpJiZlPT09JHUuaW5jbHVkZXM/WHU6ZX0pKTtmdW5jdGlvbiB0Yyh0LGUpe2lmKG51bGw9PXQpcmV0dXJue307dmFyIHIsbixvPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClpZih7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikpe2lmKFF1KGUpLmNhbGwoZSxuKSljb250aW51ZTtyW25dPXRbbl19cmV0dXJuIHJ9KHQsZSk7aWYoQXUpe3ZhciBpPUF1KHQpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspcj1pW25dLFF1KGUpLmNhbGwoZSxyKXx8e30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHIpJiYob1tyXT10W3JdKX1yZXR1cm4gb312YXIgZWM9VHlwZUVycm9yLHJjPWZ1bmN0aW9uKHQpe2lmKHQ+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBlYygiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHR9LG5jPWosb2M9JGUsaWM9RixhYz1mdW5jdGlvbih0LGUscil7bmM/b2MuZih0LGUsaWMoMCxyKSk6dFtlXT1yfSx1Yz1vLGNjPXB0LHNjPWhlKCJzcGVjaWVzIiksZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGNjPj01MXx8IXVjKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVtzY109ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9LGxjPUFyLGhjPW8scGM9Vm8sdmM9WCxkYz1ZdCx5Yz1lbixnYz1yYyxtYz1hYyxiYz1naSx3Yz1mYyxPYz1wdCxTYz1oZSgiaXNDb25jYXRTcHJlYWRhYmxlIiksRWM9T2M+PTUxfHwhaGMoKGZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRbU2NdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLFRjPWZ1bmN0aW9uKHQpe2lmKCF2Yyh0KSlyZXR1cm4hMTt2YXIgZT10W1NjXTtyZXR1cm4gdm9pZCAwIT09ZT8hIWU6cGModCl9O2xjKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDohRWN8fCF3YygiY29uY2F0Iil9LHtjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIGUscixuLG8saSxhPWRjKHRoaXMpLHU9YmMoYSwwKSxjPTA7Zm9yKGU9LTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspaWYoVGMoaT0tMT09PWU/YTphcmd1bWVudHNbZV0pKWZvcihvPXljKGkpLGdjKGMrbykscj0wO3I8bztyKyssYysrKXIgaW4gaSYmbWModSxjLGlbcl0pO2Vsc2UgZ2MoYysxKSxtYyh1LGMrKyxpKTtyZXR1cm4gdS5sZW5ndGg9Yyx1fX0pLHZvKCJhc3luY0l0ZXJhdG9yIiksdm8oImhhc0luc3RhbmNlIiksdm8oImlzQ29uY2F0U3ByZWFkYWJsZSIpLHZvKCJpdGVyYXRvciIpLHZvKCJtYXRjaCIpLHZvKCJtYXRjaEFsbCIpLHZvKCJyZXBsYWNlIiksdm8oInNlYXJjaCIpLHZvKCJzcGVjaWVzIiksdm8oInNwbGl0Iik7dmFyIHhjPXdvO3ZvKCJ0b1ByaW1pdGl2ZSIpLHhjKCk7dmFyIGpjPXJ0LE1jPUFvO3ZvKCJ0b1N0cmluZ1RhZyIpLE1jKGpjKCJTeW1ib2wiKSwiU3ltYm9sIiksdm8oInVuc2NvcGFibGVzIiksQW8obi5KU09OLCJKU09OIiwhMCk7dmFyIGtjLEFjLFBjLExjPVouU3ltYm9sLFJjPXt9LE5jPWosX2M9JHQsQ2M9RnVuY3Rpb24ucHJvdG90eXBlLEZjPU5jJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEljPV9jKENjLCJuYW1lIiksRGM9e0VYSVNUUzpJYyxQUk9QRVI6SWMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsQ09ORklHVVJBQkxFOkljJiYoIU5jfHxOYyYmRmMoQ2MsIm5hbWUiKS5jb25maWd1cmFibGUpfSxVYz0hbygoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKSx6Yz0kdCxCYz1ULEdjPVl0LEhjPVVjLFdjPUFuKCJJRV9QUk9UTyIpLEpjPU9iamVjdCxLYz1KYy5wcm90b3R5cGUsVmM9SGM/SmMuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7dmFyIGU9R2ModCk7aWYoemMoZSxXYykpcmV0dXJuIGVbV2NdO3ZhciByPWUuY29uc3RydWN0b3I7cmV0dXJuIEJjKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgSmM/S2M6bnVsbH0scWM9byxZYz1ULFhjPVgsWmM9SG4sJGM9VmMsUWM9cm8sdHM9aGUoIml0ZXJhdG9yIiksZXM9ITE7W10ua2V5cyYmKCJuZXh0ImluKFBjPVtdLmtleXMoKSk/KEFjPSRjKCRjKFBjKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKGtjPUFjKTplcz0hMCk7dmFyIHJzPSFYYyhrYyl8fHFjKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiBrY1t0c10uY2FsbCh0KSE9PXR9KSk7WWMoKGtjPXJzP3t9OlpjKGtjKSlbdHNdKXx8UWMoa2MsdHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG5zPXtJdGVyYXRvclByb3RvdHlwZTprYyxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmVzfSxvcz1ucy5JdGVyYXRvclByb3RvdHlwZSxpcz1Ibixhcz1GLHVzPUFvLGNzPVJjLHNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGZzPWQsbHM9QXQsaHM9WCxwcz1mdW5jdGlvbih0KXtyZXR1cm4gaHModCl8fG51bGw9PT10fSx2cz1TdHJpbmcsZHM9VHlwZUVycm9yLHlzPWZ1bmN0aW9uKHQsZSxyKXt0cnl7cmV0dXJuIGZzKGxzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKVtyXSkpfWNhdGNoKG4pe319LGdzPVgsbXM9Sixicz1mdW5jdGlvbih0KXtpZihwcyh0KSlyZXR1cm4gdDt0aHJvdyBuZXcgZHMoIkNhbid0IHNldCAiK3ZzKHQpKyIgYXMgYSBwcm90b3R5cGUiKX0sd3M9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxyPXt9O3RyeXsodD15cyhPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkocixbXSksZT1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2gobil7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBtcyhyKSxicyhuKSxncyhyKT8oZT90KHIsbik6ci5fX3Byb3RvX189bixyKTpyfX0oKTp2b2lkIDApLE9zPUFyLFNzPUEsRXM9RGMsVHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ZSsiIEl0ZXJhdG9yIjtyZXR1cm4gdC5wcm90b3R5cGU9aXMob3Mse25leHQ6YXMoKyFuLHIpfSksdXModCxvLCExLCEwKSxjc1tvXT1zcyx0fSx4cz1WYyxqcz1BbyxNcz1ybyxrcz1SYyxBcz1ucyxQcz1Fcy5QUk9QRVIsTHM9QXMuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxScz1oZSgiaXRlcmF0b3IiKSxOcz0ia2V5cyIsX3M9InZhbHVlcyIsQ3M9ImVudHJpZXMiLEZzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LElzPWZ1bmN0aW9uKHQsZSxyLG4sbyxpLGEpe1RzKHIsZSxuKTt2YXIgdSxjLHMsZj1mdW5jdGlvbih0KXtpZih0PT09byYmZClyZXR1cm4gZDtpZighTHMmJnQmJnQgaW4gcClyZXR1cm4gcFt0XTtzd2l0Y2godCl7Y2FzZSBOczpjYXNlIF9zOmNhc2UgQ3M6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LGw9ZSsiIEl0ZXJhdG9yIixoPSExLHA9dC5wcm90b3R5cGUsdj1wW1JzXXx8cFsiQEBpdGVyYXRvciJdfHxvJiZwW29dLGQ9IUxzJiZ2fHxmKG8pLHk9IkFycmF5Ij09PWUmJnAuZW50cmllc3x8djtpZih5JiYodT14cyh5LmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZ1Lm5leHQmJihqcyh1LGwsITAsITApLGtzW2xdPUZzKSxQcyYmbz09PV9zJiZ2JiZ2Lm5hbWUhPT1fcyYmKGg9ITAsZD1mdW5jdGlvbigpe3JldHVybiBTcyh2LHRoaXMpfSksbylpZihjPXt2YWx1ZXM6Zihfcyksa2V5czppP2Q6ZihOcyksZW50cmllczpmKENzKX0sYSlmb3IocyBpbiBjKShMc3x8aHx8IShzIGluIHApKSYmTXMocCxzLGNbc10pO2Vsc2UgT3Moe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDpMc3x8aH0sYyk7cmV0dXJuIGEmJnBbUnNdIT09ZCYmTXMocCxScyxkLHtuYW1lOm99KSxrc1tlXT1kLGN9LERzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX0sVXM9cSx6cz1SYyxCcz1KbzskZS5mO3ZhciBHcz1JcyxIcz1EcyxXcz0iQXJyYXkgSXRlcmF0b3IiLEpzPUJzLnNldCxLcz1Ccy5nZXR0ZXJGb3IoV3MpO0dzKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7SnModGhpcyx7dHlwZTpXcyx0YXJnZXQ6VXModCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PUtzKHRoaXMpLGU9dC50YXJnZXQscj10LmluZGV4Kys7aWYoIWV8fHI+PWUubGVuZ3RoKXJldHVybiB0LnRhcmdldD1udWxsLEhzKHZvaWQgMCwhMCk7c3dpdGNoKHQua2luZCl7Y2FzZSJrZXlzIjpyZXR1cm4gSHMociwhMSk7Y2FzZSJ2YWx1ZXMiOnJldHVybiBIcyhlW3JdLCExKX1yZXR1cm4gSHMoW3IsZVtyXV0sITEpfSksInZhbHVlcyIpLHpzLkFyZ3VtZW50cz16cy5BcnJheTt2YXIgVnM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9LHFzPW4sWXM9QW8sWHM9UmM7Zm9yKHZhciBacyBpbiBWcylZcyhxc1tac10sWnMpLFhzW1pzXT1Ycy5BcnJheTt2YXIgJHM9TGMsUXM9aGUsdGY9JGUuZixlZj1RcygibWV0YWRhdGEiKSxyZj1GdW5jdGlvbi5wcm90b3R5cGU7dm9pZCAwPT09cmZbZWZdJiZ0ZihyZixlZix7dmFsdWU6bnVsbH0pLHZvKCJhc3luY0Rpc3Bvc2UiKSx2bygiZGlzcG9zZSIpLHZvKCJtZXRhZGF0YSIpO3ZhciBuZj0kcyxvZj1kLGFmPXJ0KCJTeW1ib2wiKSx1Zj1hZi5rZXlGb3IsY2Y9b2YoYWYucHJvdG90eXBlLnZhbHVlT2YpLHNmPWFmLmlzUmVnaXN0ZXJlZFN5bWJvbHx8ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB2b2lkIDAhPT11ZihjZih0KSl9Y2F0Y2goZSl7cmV0dXJuITF9fTtBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITB9LHtpc1JlZ2lzdGVyZWRTeW1ib2w6c2Z9KTtmb3IodmFyIGZmPUt0LGxmPXJ0LGhmPWQscGY9RXQsdmY9aGUsZGY9bGYoIlN5bWJvbCIpLHlmPWRmLmlzV2VsbEtub3duU3ltYm9sLGdmPWxmKCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiksbWY9aGYoZGYucHJvdG90eXBlLnZhbHVlT2YpLGJmPWZmKCJ3a3MiKSx3Zj0wLE9mPWdmKGRmKSxTZj1PZi5sZW5ndGg7d2Y8U2Y7d2YrKyl0cnl7dmFyIEVmPU9mW3dmXTtwZihkZltFZl0pJiZ2ZihFZil9Y2F0Y2goa1Mpe312YXIgVGY9ZnVuY3Rpb24odCl7aWYoeWYmJnlmKHQpKXJldHVybiEwO3RyeXtmb3IodmFyIGU9bWYodCkscj0wLG49Z2YoYmYpLG89bi5sZW5ndGg7cjxvO3IrKylpZihiZltuW3JdXT09ZSlyZXR1cm4hMH1jYXRjaChrUyl7fXJldHVybiExfTtBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7aXNXZWxsS25vd25TeW1ib2w6VGZ9KSx2bygiY3VzdG9tTWF0Y2hlciIpLHZvKCJvYnNlcnZhYmxlIiksQXIoe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzUmVnaXN0ZXJlZFN5bWJvbCJ9LHtpc1JlZ2lzdGVyZWQ6c2Z9KSxBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsbmFtZToiaXNXZWxsS25vd25TeW1ib2wiLGZvcmNlZDohMH0se2lzV2VsbEtub3duOlRmfSksdm8oIm1hdGNoZXIiKSx2bygibWV0YWRhdGFLZXkiKSx2bygicGF0dGVybk1hdGNoIiksdm8oInJlcGxhY2VBbGwiKTt2YXIgeGY9ZShuZiksamY9ZCxNZj1LcixrZj1CcixBZj1KLFBmPWpmKCIiLmNoYXJBdCksTGY9amYoIiIuY2hhckNvZGVBdCksUmY9amYoIiIuc2xpY2UpLE5mPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuLG8saT1rZihBZihlKSksYT1NZihyKSx1PWkubGVuZ3RoO3JldHVybiBhPDB8fGE+PXU/dD8iIjp2b2lkIDA6KG49TGYoaSxhKSk8NTUyOTZ8fG4+NTYzMTl8fGErMT09PXV8fChvPUxmKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/dD9QZihpLGEpOm46dD9SZihpLGEsYSsyKTpvLTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzZ9fSxfZj17Y29kZUF0Ok5mKCExKSxjaGFyQXQ6TmYoITApfS5jaGFyQXQsQ2Y9QnIsRmY9Sm8sSWY9SXMsRGY9RHMsVWY9IlN0cmluZyBJdGVyYXRvciIsemY9RmYuc2V0LEJmPUZmLmdldHRlckZvcihVZik7SWYoU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbih0KXt6Zih0aGlzLHt0eXBlOlVmLHN0cmluZzpDZih0KSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPUJmKHRoaXMpLHI9ZS5zdHJpbmcsbj1lLmluZGV4O3JldHVybiBuPj1yLmxlbmd0aD9EZih2b2lkIDAsITApOih0PV9mKHIsbiksZS5pbmRleCs9dC5sZW5ndGgsRGYodCwhMSkpfSkpO3ZhciBHZj1lKGlvLmYoIml0ZXJhdG9yIikpO2Z1bmN0aW9uIEhmKHQpe3JldHVybihIZj0iZnVuY3Rpb24iPT10eXBlb2YgeGYmJiJzeW1ib2wiPT10eXBlb2YgR2Y/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHhmJiZ0LmNvbnN0cnVjdG9yPT09eGYmJnQhPT14Zi5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgV2Y9e2V4cG9ydHM6e319LEpmPUFyLEtmPWosVmY9JGUuZjtKZih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PVZmLHNoYW06IUtmfSx7ZGVmaW5lUHJvcGVydHk6VmZ9KTt2YXIgcWY9Wi5PYmplY3QsWWY9V2YuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHFmLmRlZmluZVByb3BlcnR5KHQsZSxyKX07cWYuZGVmaW5lUHJvcGVydHkuc2hhbSYmKFlmLnNoYW09ITApO3ZhciBYZj1lKFdmLmV4cG9ydHMpO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFqfSx7Y3JlYXRlOkhufSk7dmFyIFpmPVouT2JqZWN0LCRmPWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFpmLmNyZWF0ZSh0LGUpfSkpLFFmPVl0LHRsPVZjLGVsPVVjO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXt0bCgxKX0pKSxzaGFtOiFlbH0se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0bChRZih0KSl9fSk7dmFyIHJsPWUoWi5PYmplY3QuZ2V0UHJvdG90eXBlT2YpLG5sPW8sb2w9eGkuZm9yRWFjaCxpbD1mdW5jdGlvbih0LGUpe3ZhciByPVtdW3RdO3JldHVybiEhciYmbmwoKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsZXx8ZnVuY3Rpb24oKXtyZXR1cm4gMX0sMSl9KSl9KCJmb3JFYWNoIik/W10uZm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gb2wodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX07QXIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpbXS5mb3JFYWNoIT09aWx9LHtmb3JFYWNoOmlsfSk7dmFyIGFsPU51KCJBcnJheSIsImZvckVhY2giKSx1bD1EcixjbD0kdCxzbD1udCxmbD1hbCxsbD1BcnJheS5wcm90b3R5cGUsaGw9e0RPTVRva2VuTGlzdDohMCxOb2RlTGlzdDohMH0scGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5mb3JFYWNoO3JldHVybiB0PT09bGx8fHNsKGxsLHQpJiZlPT09bGwuZm9yRWFjaHx8Y2woaGwsdWwodCkpP2ZsOmV9LHZsPWUocGwpLGRsPWoseWw9Vm8sZ2w9VHlwZUVycm9yLG1sPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYmw9ZGwmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChrUyl7cmV0dXJuIGtTIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKSx3bD1ZdCxPbD1lbixTbD1ibD9mdW5jdGlvbih0LGUpe2lmKHlsKHQpJiYhbWwodCwibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbmV3IGdsKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIHQubGVuZ3RoPWV9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPWV9LEVsPXJjO0FyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKGtTKXtyZXR1cm4ga1MgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbih0KXt2YXIgZT13bCh0aGlzKSxyPU9sKGUpLG49YXJndW1lbnRzLmxlbmd0aDtFbChyK24pO2Zvcih2YXIgbz0wO288bjtvKyspZVtyXT1hcmd1bWVudHNbb10scisrO3JldHVybiBTbChlLHIpLHJ9fSk7dmFyIFRsPU51KCJBcnJheSIsInB1c2giKSx4bD1udCxqbD1UbCxNbD1BcnJheS5wcm90b3R5cGUsa2w9ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5wdXNoO3JldHVybiB0PT09TWx8fHhsKE1sLHQpJiZlPT09TWwucHVzaD9qbDplfSkpO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOndzfSk7dmFyIEFsPWUoWi5PYmplY3Quc2V0UHJvdG90eXBlT2YpLFBsPXJ0LExsPVduLFJsPXRvLE5sPW5yLF9sPWQoW10uY29uY2F0KSxDbD1QbCgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24odCl7dmFyIGU9TGwuZihObCh0KSkscj1SbC5mO3JldHVybiByP19sKGUscih0KSk6ZX0sRmw9JHQsSWw9Q2wsRGw9eCxVbD0kZSx6bD1YLEJsPWdyLEdsPUVycm9yLEhsPWQoIiIucmVwbGFjZSksV2w9U3RyaW5nKG5ldyBHbCgienhjYXNkIikuc3RhY2spLEpsPS9cblxzKmF0IFteOl0qOlteXG5dKi8sS2w9SmwudGVzdChXbCksVmw9RixxbD0hbygoZnVuY3Rpb24oKXt2YXIgdD1uZXcgRXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiB0KXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGFjayIsVmwoMSw3KSksNyE9PXQuc3RhY2spfSkpLFlsPWdyLFhsPWZ1bmN0aW9uKHQsZSl7aWYoS2wmJiJzdHJpbmciPT10eXBlb2YgdCYmIUdsLnByZXBhcmVTdGFja1RyYWNlKWZvcig7ZS0tOyl0PUhsKHQsSmwsIiIpO3JldHVybiB0fSxabD1xbCwkbD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSxRbD1SYyx0aD1oZSgiaXRlcmF0b3IiKSxlaD1BcnJheS5wcm90b3R5cGUscmg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihRbC5BcnJheT09PXR8fGVoW3RoXT09PXQpfSxuaD1EcixvaD1SdCxpaD1HLGFoPVJjLHVoPWhlKCJpdGVyYXRvciIpLGNoPWZ1bmN0aW9uKHQpe2lmKCFpaCh0KSlyZXR1cm4gb2godCx1aCl8fG9oKHQsIkBAaXRlcmF0b3IiKXx8YWhbbmgodCldfSxzaD1BLGZoPUF0LGxoPW5yLGhoPXh0LHBoPWNoLHZoPVR5cGVFcnJvcixkaD1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9waCh0KTplO2lmKGZoKHIpKXJldHVybiBsaChzaChyLHQpKTt0aHJvdyBuZXcgdmgoaGgodCkrIiBpcyBub3QgaXRlcmFibGUiKX0seWg9QSxnaD1ucixtaD1SdCxiaD1mdW5jdGlvbih0LGUscil7dmFyIG4sbztnaCh0KTt0cnl7aWYoIShuPW1oKHQsInJldHVybiIpKSl7aWYoInRocm93Ij09PWUpdGhyb3cgcjtyZXR1cm4gcn1uPXloKG4sdCl9Y2F0Y2goa1Mpe289ITAsbj1rU31pZigidGhyb3ciPT09ZSl0aHJvdyByO2lmKG8pdGhyb3cgbjtyZXR1cm4gZ2gobikscn0sd2g9WmUsT2g9QSxTaD1ucixFaD14dCxUaD1yaCx4aD1lbixqaD1udCxNaD1kaCxraD1jaCxBaD1iaCxQaD1UeXBlRXJyb3IsTGg9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSxSaD1MaC5wcm90b3R5cGUsTmg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLG8saSxhLHUsYyxzLGY9ciYmci50aGF0LGw9ISghcnx8IXIuQVNfRU5UUklFUyksaD0hKCFyfHwhci5JU19SRUNPUkQpLHA9ISghcnx8IXIuSVNfSVRFUkFUT1IpLHY9ISghcnx8IXIuSU5URVJSVVBURUQpLGQ9d2goZSxmKSx5PWZ1bmN0aW9uKHQpe3JldHVybiBuJiZBaChuLCJub3JtYWwiLHQpLG5ldyBMaCghMCx0KX0sZz1mdW5jdGlvbih0KXtyZXR1cm4gbD8oU2godCksdj9kKHRbMF0sdFsxXSx5KTpkKHRbMF0sdFsxXSkpOnY/ZCh0LHkpOmQodCl9O2lmKGgpbj10Lml0ZXJhdG9yO2Vsc2UgaWYocCluPXQ7ZWxzZXtpZighKG89a2godCkpKXRocm93IG5ldyBQaChFaCh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKFRoKG8pKXtmb3IoaT0wLGE9eGgodCk7YT5pO2krKylpZigodT1nKHRbaV0pKSYmamgoUmgsdSkpcmV0dXJuIHU7cmV0dXJuIG5ldyBMaCghMSl9bj1NaCh0LG8pfWZvcihjPWg/dC5uZXh0Om4ubmV4dDshKHM9T2goYyxuKSkuZG9uZTspe3RyeXt1PWcocy52YWx1ZSl9Y2F0Y2goa1Mpe0FoKG4sInRocm93IixrUyl9aWYoIm9iamVjdCI9PXR5cGVvZiB1JiZ1JiZqaChSaCx1KSlyZXR1cm4gdX1yZXR1cm4gbmV3IExoKCExKX0sX2g9QnIsQ2g9QXIsRmg9bnQsSWg9VmMsRGg9d3MsVWg9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1JbChlKSxvPVVsLmYsaT1EbC5mLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHU9blthXTtGbCh0LHUpfHxyJiZGbChyLHUpfHxvKHQsdSxpKGUsdSkpfX0semg9SG4sQmg9Z3IsR2g9RixIaD1mdW5jdGlvbih0LGUpe3psKGUpJiYiY2F1c2UiaW4gZSYmQmwodCwiY2F1c2UiLGUuY2F1c2UpfSxXaD1mdW5jdGlvbih0LGUscixuKXtabCYmKCRsPyRsKHQsZSk6WWwodCwic3RhY2siLFhsKHIsbikpKX0sSmg9TmgsS2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dD9hcmd1bWVudHMubGVuZ3RoPDI/IiI6ZTpfaCh0KX0sVmg9aGUoInRvU3RyaW5nVGFnIikscWg9RXJyb3IsWWg9W10ucHVzaCxYaD1mdW5jdGlvbih0LGUpe3ZhciByLG49RmgoWmgsdGhpcyk7RGg/cj1EaChuZXcgcWgsbj9JaCh0aGlzKTpaaCk6KHI9bj90aGlzOnpoKFpoKSxCaChyLFZoLCJFcnJvciIpKSx2b2lkIDAhPT1lJiZCaChyLCJtZXNzYWdlIixLaChlKSksV2gocixYaCxyLnN0YWNrLDEpLGFyZ3VtZW50cy5sZW5ndGg+MiYmSGgocixhcmd1bWVudHNbMl0pO3ZhciBvPVtdO3JldHVybiBKaCh0LFloLHt0aGF0Om99KSxCaChyLCJlcnJvcnMiLG8pLHJ9O0RoP0RoKFhoLHFoKTpVaChYaCxxaCx7bmFtZTohMH0pO3ZhciBaaD1YaC5wcm90b3R5cGU9emgocWgucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpHaCgxLFhoKSxtZXNzYWdlOkdoKDEsIiIpLG5hbWU6R2goMSwiQWdncmVnYXRlRXJyb3IiKX0pO0NoKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6Mn0se0FnZ3JlZ2F0ZUVycm9yOlhofSk7dmFyICRoLFFoLHRwLGVwLHJwPW4sbnA9YXQsb3A9YixpcD1mdW5jdGlvbih0KXtyZXR1cm4gbnAuc2xpY2UoMCx0Lmxlbmd0aCk9PT10fSxhcD1pcCgiQnVuLyIpPyJCVU4iOmlwKCJDbG91ZGZsYXJlLVdvcmtlcnMiKT8iQ0xPVURGTEFSRSI6aXAoIkRlbm8vIik/IkRFTk8iOmlwKCJOb2RlLmpzLyIpPyJOT0RFIjpycC5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6cnAuRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb24/IkRFTk8iOiJwcm9jZXNzIj09PW9wKHJwLnByb2Nlc3MpPyJOT0RFIjpycC53aW5kb3cmJnJwLmRvY3VtZW50PyJCUk9XU0VSIjoiUkVTVCIsdXA9Ik5PREUiPT09YXAsY3A9cnQsc3A9b28sZnA9aixscD1oZSgic3BlY2llcyIpLGhwPWZ1bmN0aW9uKHQpe3ZhciBlPWNwKHQpO2ZwJiZlJiYhZVtscF0mJnNwKGUsbHAse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0scHA9bnQsdnA9VHlwZUVycm9yLGRwPWZ1bmN0aW9uKHQsZSl7aWYocHAoZSx0KSlyZXR1cm4gdDt0aHJvdyBuZXcgdnAoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LHlwPWZpLGdwPXh0LG1wPVR5cGVFcnJvcixicD1ucix3cD1mdW5jdGlvbih0KXtpZih5cCh0KSlyZXR1cm4gdDt0aHJvdyBuZXcgbXAoZ3AodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciIpfSxPcD1HLFNwPWhlKCJzcGVjaWVzIiksRXA9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWJwKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1ufHxPcChyPWJwKG4pW1NwXSk/ZTp3cChyKX0sVHA9VHlwZUVycm9yLHhwPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KGF0KSxqcD1uLE1wPWYsa3A9WmUsQXA9VCxQcD0kdCxMcD1vLFJwPWpuLE5wPXFuLF9wPU1lLENwPWZ1bmN0aW9uKHQsZSl7aWYodDxlKXRocm93IG5ldyBUcCgiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4gdH0sRnA9eHAsSXA9dXAsRHA9anAuc2V0SW1tZWRpYXRlLFVwPWpwLmNsZWFySW1tZWRpYXRlLHpwPWpwLnByb2Nlc3MsQnA9anAuRGlzcGF0Y2gsR3A9anAuRnVuY3Rpb24sSHA9anAuTWVzc2FnZUNoYW5uZWwsV3A9anAuU3RyaW5nLEpwPTAsS3A9e30sVnA9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7THAoKGZ1bmN0aW9uKCl7JGg9anAubG9jYXRpb259KSk7dmFyIHFwPWZ1bmN0aW9uKHQpe2lmKFBwKEtwLHQpKXt2YXIgZT1LcFt0XTtkZWxldGUgS3BbdF0sZSgpfX0sWXA9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cXAodCl9fSxYcD1mdW5jdGlvbih0KXtxcCh0LmRhdGEpfSxacD1mdW5jdGlvbih0KXtqcC5wb3N0TWVzc2FnZShXcCh0KSwkaC5wcm90b2NvbCsiLy8iKyRoLmhvc3QpfTtEcCYmVXB8fChEcD1mdW5jdGlvbih0KXtDcChhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBlPUFwKHQpP3Q6R3AodCkscj1OcChhcmd1bWVudHMsMSk7cmV0dXJuIEtwWysrSnBdPWZ1bmN0aW9uKCl7TXAoZSx2b2lkIDAscil9LFFoKEpwKSxKcH0sVXA9ZnVuY3Rpb24odCl7ZGVsZXRlIEtwW3RdfSxJcD9RaD1mdW5jdGlvbih0KXt6cC5uZXh0VGljayhZcCh0KSl9OkJwJiZCcC5ub3c/UWg9ZnVuY3Rpb24odCl7QnAubm93KFlwKHQpKX06SHAmJiFGcD8oZXA9KHRwPW5ldyBIcCkucG9ydDIsdHAucG9ydDEub25tZXNzYWdlPVhwLFFoPWtwKGVwLnBvc3RNZXNzYWdlLGVwKSk6anAuYWRkRXZlbnRMaXN0ZW5lciYmQXAoanAucG9zdE1lc3NhZ2UpJiYhanAuaW1wb3J0U2NyaXB0cyYmJGgmJiJmaWxlOiIhPT0kaC5wcm90b2NvbCYmIUxwKFpwKT8oUWg9WnAsanAuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsWHAsITEpKTpRaD1WcCBpbiBfcCgic2NyaXB0Iik/ZnVuY3Rpb24odCl7UnAuYXBwZW5kQ2hpbGQoX3AoInNjcmlwdCIpKVtWcF09ZnVuY3Rpb24oKXtScC5yZW1vdmVDaGlsZCh0aGlzKSxxcCh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoWXAodCksMCl9KTt2YXIgJHA9e3NldDpEcCxjbGVhcjpVcH0sUXA9bix0dj1qLGV2PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IscnY9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbH07cnYucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dmFyIGU9e2l0ZW06dCxuZXh0Om51bGx9LHI9dGhpcy50YWlsO3I/ci5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWV9LGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVhZDtpZih0KXJldHVybiBudWxsPT09KHRoaXMuaGVhZD10Lm5leHQpJiYodGhpcy50YWlsPW51bGwpLHQuaXRlbX19O3ZhciBudixvdixpdixhdix1dixjdj1ydixzdj0vaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QoYXQpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFBlYmJsZSxmdj0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KGF0KSxsdj1uLGh2PWZ1bmN0aW9uKHQpe2lmKCF0dilyZXR1cm4gUXBbdF07dmFyIGU9ZXYoUXAsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHB2PVplLHZ2PSRwLnNldCxkdj1jdix5dj14cCxndj1zdixtdj1mdixidj11cCx3dj1sdi5NdXRhdGlvbk9ic2VydmVyfHxsdi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLE92PWx2LmRvY3VtZW50LFN2PWx2LnByb2Nlc3MsRXY9bHYuUHJvbWlzZSxUdj1odigicXVldWVNaWNyb3Rhc2siKTtpZighVHYpe3ZhciB4dj1uZXcgZHYsanY9ZnVuY3Rpb24oKXt2YXIgdCxlO2ZvcihidiYmKHQ9U3YuZG9tYWluKSYmdC5leGl0KCk7ZT14di5nZXQoKTspdHJ5e2UoKX1jYXRjaChrUyl7dGhyb3cgeHYuaGVhZCYmbnYoKSxrU310JiZ0LmVudGVyKCl9O3l2fHxidnx8bXZ8fCF3dnx8IU92PyFndiYmRXYmJkV2LnJlc29sdmU/KChhdj1Fdi5yZXNvbHZlKHZvaWQgMCkpLmNvbnN0cnVjdG9yPUV2LHV2PXB2KGF2LnRoZW4sYXYpLG52PWZ1bmN0aW9uKCl7dXYoanYpfSk6YnY/bnY9ZnVuY3Rpb24oKXtTdi5uZXh0VGljayhqdil9Oih2dj1wdih2dixsdiksbnY9ZnVuY3Rpb24oKXt2dihqdil9KToob3Y9ITAsaXY9T3YuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyB3dihqdikub2JzZXJ2ZShpdix7Y2hhcmFjdGVyRGF0YTohMH0pLG52PWZ1bmN0aW9uKCl7aXYuZGF0YT1vdj0hb3Z9KSxUdj1mdW5jdGlvbih0KXt4di5oZWFkfHxudigpLHh2LmFkZCh0KX19dmFyIE12PVR2LGt2PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaChrUyl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmtTfX19LEF2PW4uUHJvbWlzZSxQdj1uLEx2PUF2LFJ2PVQsTnY9VmUsX3Y9Wm8sQ3Y9aGUsRnY9YXAsSXY9cHQsRHY9THYmJkx2LnByb3RvdHlwZSxVdj1Ddigic3BlY2llcyIpLHp2PSExLEJ2PVJ2KFB2LlByb21pc2VSZWplY3Rpb25FdmVudCksR3Y9e0NPTlNUUlVDVE9SOk52KCJQcm9taXNlIiwoZnVuY3Rpb24oKXt2YXIgdD1fdihMdiksZT10IT09U3RyaW5nKEx2KTtpZighZSYmNjY9PT1JdilyZXR1cm4hMDtpZighRHYuY2F0Y2h8fCFEdi5maW5hbGx5KXJldHVybiEwO2lmKCFJdnx8SXY8NTF8fCEvbmF0aXZlIGNvZGUvLnRlc3QodCkpe3ZhciByPW5ldyBMdigoZnVuY3Rpb24odCl7dCgxKX0pKSxuPWZ1bmN0aW9uKHQpe3QoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtpZigoci5jb25zdHJ1Y3Rvcj17fSlbVXZdPW4sISh6dj1yLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBuKSlyZXR1cm4hMH1yZXR1cm4hKGV8fCJCUk9XU0VSIiE9PUZ2JiYiREVOTyIhPT1Gdnx8QnYpfSkpLFJFSkVDVElPTl9FVkVOVDpCdixTVUJDTEFTU0lORzp6dn0sSHY9e30sV3Y9QXQsSnY9VHlwZUVycm9yLEt2PWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PXIpdGhyb3cgbmV3IEp2KCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxyPW59KSksdGhpcy5yZXNvbHZlPVd2KGUpLHRoaXMucmVqZWN0PVd2KHIpfTtIdi5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS3YodCl9O3ZhciBWdixxdixZdj1BcixYdj11cCxadj1uLCR2PUEsUXY9cm8sdGQ9QW8sZWQ9aHAscmQ9QXQsbmQ9VCxvZD1YLGlkPWRwLGFkPUVwLHVkPSRwLnNldCxjZD1NdixzZD1mdW5jdGlvbih0LGUpe3RyeXsxPT09YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmVycm9yKHQpOmNvbnNvbGUuZXJyb3IodCxlKX1jYXRjaChrUyl7fX0sZmQ9a3YsbGQ9Y3YsaGQ9Sm8scGQ9QXYsdmQ9R3YsZGQ9SHYseWQ9IlByb21pc2UiLGdkPXZkLkNPTlNUUlVDVE9SLG1kPXZkLlJFSkVDVElPTl9FVkVOVCxiZD1oZC5nZXR0ZXJGb3IoeWQpLHdkPWhkLnNldCxPZD1wZCYmcGQucHJvdG90eXBlLFNkPXBkLEVkPU9kLFRkPVp2LlR5cGVFcnJvcix4ZD1adi5kb2N1bWVudCxqZD1adi5wcm9jZXNzLE1kPWRkLmYsa2Q9TWQsQWQ9ISEoeGQmJnhkLmNyZWF0ZUV2ZW50JiZadi5kaXNwYXRjaEV2ZW50KSxQZD0idW5oYW5kbGVkcmVqZWN0aW9uIixMZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFvZCh0KXx8IW5kKGU9dC50aGVuKSkmJmV9LFJkPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLGk9ZS52YWx1ZSxhPTE9PT1lLnN0YXRlLHU9YT90Lm9rOnQuZmFpbCxjPXQucmVzb2x2ZSxzPXQucmVqZWN0LGY9dC5kb21haW47dHJ5e3U/KGF8fCgyPT09ZS5yZWplY3Rpb24mJklkKGUpLGUucmVqZWN0aW9uPTEpLCEwPT09dT9yPWk6KGYmJmYuZW50ZXIoKSxyPXUoaSksZiYmKGYuZXhpdCgpLG89ITApKSxyPT09dC5wcm9taXNlP3MobmV3IFRkKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihuPUxkKHIpKT8kdihuLHIsYyxzKTpjKHIpKTpzKGkpfWNhdGNoKGtTKXtmJiYhbyYmZi5leGl0KCkscyhrUyl9fSxOZD1mdW5jdGlvbih0LGUpe3Qubm90aWZpZWR8fCh0Lm5vdGlmaWVkPSEwLGNkKChmdW5jdGlvbigpe2Zvcih2YXIgcixuPXQucmVhY3Rpb25zO3I9bi5nZXQoKTspUmQocix0KTt0Lm5vdGlmaWVkPSExLGUmJiF0LnJlamVjdGlvbiYmQ2QodCl9KSkpfSxfZD1mdW5jdGlvbih0LGUscil7dmFyIG4sbztBZD8oKG49eGQuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxuLnJlYXNvbj1yLG4uaW5pdEV2ZW50KHQsITEsITApLFp2LmRpc3BhdGNoRXZlbnQobikpOm49e3Byb21pc2U6ZSxyZWFzb246cn0sIW1kJiYobz1adlsib24iK3RdKT9vKG4pOnQ9PT1QZCYmc2QoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIscil9LENkPWZ1bmN0aW9uKHQpeyR2KHVkLFp2LChmdW5jdGlvbigpe3ZhciBlLHI9dC5mYWNhZGUsbj10LnZhbHVlO2lmKEZkKHQpJiYoZT1mZCgoZnVuY3Rpb24oKXtYdj9qZC5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLG4scik6X2QoUGQscixuKX0pKSx0LnJlamVjdGlvbj1Ydnx8RmQodCk/MjoxLGUuZXJyb3IpKXRocm93IGUudmFsdWV9KSl9LEZkPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sSWQ9ZnVuY3Rpb24odCl7JHYodWQsWnYsKGZ1bmN0aW9uKCl7dmFyIGU9dC5mYWNhZGU7WHY/amQuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsZSk6X2QoInJlamVjdGlvbmhhbmRsZWQiLGUsdC52YWx1ZSl9KSl9LERkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dChlLG4scil9fSxVZD1mdW5jdGlvbih0LGUscil7dC5kb25lfHwodC5kb25lPSEwLHImJih0PXIpLHQudmFsdWU9ZSx0LnN0YXRlPTIsTmQodCwhMCkpfSx6ZD1mdW5jdGlvbih0LGUscil7aWYoIXQuZG9uZSl7dC5kb25lPSEwLHImJih0PXIpO3RyeXtpZih0LmZhY2FkZT09PWUpdGhyb3cgbmV3IFRkKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBuPUxkKGUpO24/Y2QoKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXskdihuLGUsRGQoemQscix0KSxEZChVZCxyLHQpKX1jYXRjaChrUyl7VWQocixrUyx0KX19KSk6KHQudmFsdWU9ZSx0LnN0YXRlPTEsTmQodCwhMSkpfWNhdGNoKGtTKXtVZCh7ZG9uZTohMX0sa1MsdCl9fX07Z2QmJihFZD0oU2Q9ZnVuY3Rpb24odCl7aWQodGhpcyxFZCkscmQodCksJHYoVnYsdGhpcyk7dmFyIGU9YmQodGhpcyk7dHJ5e3QoRGQoemQsZSksRGQoVWQsZSkpfWNhdGNoKGtTKXtVZChlLGtTKX19KS5wcm90b3R5cGUsKFZ2PWZ1bmN0aW9uKHQpe3dkKHRoaXMse3R5cGU6eWQsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOm5ldyBsZCxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTpudWxsfSl9KS5wcm90b3R5cGU9UXYoRWQsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciByPWJkKHRoaXMpLG49TWQoYWQodGhpcyxTZCkpO3JldHVybiByLnBhcmVudD0hMCxuLm9rPSFuZCh0KXx8dCxuLmZhaWw9bmQoZSkmJmUsbi5kb21haW49WHY/amQuZG9tYWluOnZvaWQgMCwwPT09ci5zdGF0ZT9yLnJlYWN0aW9ucy5hZGQobik6Y2QoKGZ1bmN0aW9uKCl7UmQobixyKX0pKSxuLnByb21pc2V9KSkscXY9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVnYsZT1iZCh0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9RGQoemQsZSksdGhpcy5yZWplY3Q9RGQoVWQsZSl9LGRkLmY9TWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TZHx8dW5kZWZpbmVkPT09dD9uZXcgcXYodCk6a2QodCl9KSxZdih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOmdkfSx7UHJvbWlzZTpTZH0pLHRkKFNkLHlkLCExLCEwKSxlZCh5ZCk7dmFyIEJkPWhlKCJpdGVyYXRvciIpLEdkPSExO3RyeXt2YXIgSGQ9MCxXZD17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhSGQrK319LHJldHVybjpmdW5jdGlvbigpe0dkPSEwfX07V2RbQmRdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oV2QsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChrUyl7fXZhciBKZD1mdW5jdGlvbih0LGUpe3RyeXtpZighZSYmIUdkKXJldHVybiExfWNhdGNoKGtTKXtyZXR1cm4hMX12YXIgcj0hMTt0cnl7dmFyIG49e307bltCZF09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fX19LHQobil9Y2F0Y2goa1Mpe31yZXR1cm4gcn0sS2Q9QXYsVmQ9R3YuQ09OU1RSVUNUT1J8fCFKZCgoZnVuY3Rpb24odCl7S2QuYWxsKHQpLnRoZW4odm9pZCAwLChmdW5jdGlvbigpe30pKX0pKSxxZD1BLFlkPUF0LFhkPUh2LFpkPWt2LCRkPU5oO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1YZC5mKGUpLG49ci5yZXNvbHZlLG89ci5yZWplY3QsaT1aZCgoZnVuY3Rpb24oKXt2YXIgcj1ZZChlLnJlc29sdmUpLGk9W10sYT0wLHU9MTskZCh0LChmdW5jdGlvbih0KXt2YXIgYz1hKysscz0hMTt1KysscWQocixlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3N8fChzPSEwLGlbY109dCwtLXV8fG4oaSkpfSksbyl9KSksLS11fHxuKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgUWQ9QXIsdHk9R3YuQ09OU1RSVUNUT1I7QXYmJkF2LnByb3RvdHlwZSxRZCh7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxmb3JjZWQ6dHkscmVhbDohMH0se2NhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pO3ZhciBleT1BLHJ5PUF0LG55PUh2LG95PWt2LGl5PU5oO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7cmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9bnkuZihlKSxuPXIucmVqZWN0LG89b3koKGZ1bmN0aW9uKCl7dmFyIG89cnkoZS5yZXNvbHZlKTtpeSh0LChmdW5jdGlvbih0KXtleShvLGUsdCkudGhlbihyLnJlc29sdmUsbil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJm4oby52YWx1ZSksci5wcm9taXNlfX0pO3ZhciBheT1IdjtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpHdi5DT05TVFJVQ1RPUn0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1heS5mKHRoaXMpO3JldHVybigwLGUucmVqZWN0KSh0KSxlLnByb21pc2V9fSk7dmFyIHV5PW5yLGN5PVgsc3k9SHYsZnk9ZnVuY3Rpb24odCxlKXtpZih1eSh0KSxjeShlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIHI9c3kuZih0KTtyZXR1cm4oMCxyLnJlc29sdmUpKGUpLHIucHJvbWlzZX0sbHk9QXIsaHk9QXYscHk9R3YuQ09OU1RSVUNUT1Isdnk9ZnksZHk9cnQoIlByb21pc2UiKSx5eT0hcHk7bHkoe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6dHJ1ZX0se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHl5JiZ0aGlzPT09ZHk/aHk6dGhpcyx0KX19KTt2YXIgZ3k9QSxteT1BdCxieT1Idix3eT1rdixPeT1OaDtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpWZH0se2FsbFNldHRsZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWJ5LmYoZSksbj1yLnJlc29sdmUsbz1yLnJlamVjdCxpPXd5KChmdW5jdGlvbigpe3ZhciByPW15KGUucmVzb2x2ZSksbz1bXSxpPTAsYT0xO095KHQsKGZ1bmN0aW9uKHQpe3ZhciB1PWkrKyxjPSExO2ErKyxneShyLGUsdCkudGhlbigoZnVuY3Rpb24odCl7Y3x8KGM9ITAsb1t1XT17c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnR9LC0tYXx8bihvKSl9KSwoZnVuY3Rpb24odCl7Y3x8KGM9ITAsb1t1XT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOnR9LC0tYXx8bihvKSl9KSl9KSksLS1hfHxuKG8pfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgU3k9QSxFeT1BdCxUeT1ydCx4eT1IdixqeT1rdixNeT1OaCxreT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7YW55OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1UeSgiQWdncmVnYXRlRXJyb3IiKSxuPXh5LmYoZSksbz1uLnJlc29sdmUsaT1uLnJlamVjdCxhPWp5KChmdW5jdGlvbigpe3ZhciBuPUV5KGUucmVzb2x2ZSksYT1bXSx1PTAsYz0xLHM9ITE7TXkodCwoZnVuY3Rpb24odCl7dmFyIGY9dSsrLGw9ITE7YysrLFN5KG4sZSx0KS50aGVuKChmdW5jdGlvbih0KXtsfHxzfHwocz0hMCxvKHQpKX0pLChmdW5jdGlvbih0KXtsfHxzfHwobD0hMCxhW2ZdPXQsLS1jfHxpKG5ldyByKGEsa3kpKSl9KSl9KSksLS1jfHxpKG5ldyByKGEsa3kpKX0pKTtyZXR1cm4gYS5lcnJvciYmaShhLnZhbHVlKSxuLnByb21pc2V9fSk7dmFyIEF5PUFyLFB5PWYsTHk9cW4sUnk9SHYsTnk9QXQsX3k9a3YsQ3k9bi5Qcm9taXNlLEZ5PSExO0F5KHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOiFDeXx8IUN5LnRyeXx8X3koKGZ1bmN0aW9uKCl7Q3kudHJ5KChmdW5jdGlvbih0KXtGeT04PT09dH0pLDgpfSkpLmVycm9yfHwhRnl9LHt0cnk6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP0x5KGFyZ3VtZW50cywxKTpbXSxyPVJ5LmYodGhpcyksbj1feSgoZnVuY3Rpb24oKXtyZXR1cm4gUHkoTnkodCksdm9pZCAwLGUpfSkpO3JldHVybihuLmVycm9yP3IucmVqZWN0OnIucmVzb2x2ZSkobi52YWx1ZSksci5wcm9taXNlfX0pO3ZhciBJeT1IdjtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7d2l0aFJlc29sdmVyczpmdW5jdGlvbigpe3ZhciB0PUl5LmYodGhpcyk7cmV0dXJue3Byb21pc2U6dC5wcm9taXNlLHJlc29sdmU6dC5yZXNvbHZlLHJlamVjdDp0LnJlamVjdH19fSk7dmFyIER5PUFyLFV5PUF2LHp5PW8sQnk9cnQsR3k9VCxIeT1FcCxXeT1meSxKeT1VeSYmVXkucHJvdG90eXBlO0R5KHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhVXkmJnp5KChmdW5jdGlvbigpe0p5LmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9SHkodGhpcyxCeSgiUHJvbWlzZSIpKSxyPUd5KHQpO3JldHVybiB0aGlzLnRoZW4ocj9mdW5jdGlvbihyKXtyZXR1cm4gV3koZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9OnQscj9mdW5jdGlvbihyKXtyZXR1cm4gV3koZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06dCl9fSk7dmFyIEt5PVouUHJvbWlzZSxWeT1lKEt5KSxxeT1BcixZeT1WbyxYeT1kKFtdLnJldmVyc2UpLFp5PVsxLDJdO3F5KHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKFp5KT09PVN0cmluZyhaeS5yZXZlcnNlKCkpfSx7cmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBZeSh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxYeSh0aGlzKX19KTt2YXIgJHk9TnUoIkFycmF5IiwicmV2ZXJzZSIpLFF5PW50LHRnPSR5LGVnPUFycmF5LnByb3RvdHlwZSxyZz1lKChmdW5jdGlvbih0KXt2YXIgZT10LnJldmVyc2U7cmV0dXJuIHQ9PT1lZ3x8UXkoZWcsdCkmJmU9PT1lZy5yZXZlcnNlP3RnOmV9KSksbmc9QXIsb2c9Vm8saWc9ZmksYWc9WCx1Zz1YcixjZz1lbixzZz1xLGZnPWFjLGxnPWhlLGhnPXFuLHBnPWZjKCJzbGljZSIpLHZnPWxnKCJzcGVjaWVzIiksZGc9QXJyYXkseWc9TWF0aC5tYXg7bmcoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohcGd9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciByLG4sbyxpPXNnKHRoaXMpLGE9Y2coaSksdT11Zyh0LGEpLGM9dWcodm9pZCAwPT09ZT9hOmUsYSk7aWYob2coaSkmJihyPWkuY29uc3RydWN0b3IsKGlnKHIpJiYocj09PWRnfHxvZyhyLnByb3RvdHlwZSkpfHxhZyhyKSYmbnVsbD09PShyPXJbdmddKSkmJihyPXZvaWQgMCkscj09PWRnfHx2b2lkIDA9PT1yKSlyZXR1cm4gaGcoaSx1LGMpO2ZvcihuPW5ldyh2b2lkIDA9PT1yP2RnOnIpKHlnKGMtdSwwKSksbz0wO3U8Yzt1KyssbysrKXUgaW4gaSYmZmcobixvLGlbdV0pO3JldHVybiBuLmxlbmd0aD1vLG59fSk7dmFyIGdnPU51KCJBcnJheSIsInNsaWNlIiksbWc9bnQsYmc9Z2csd2c9QXJyYXkucHJvdG90eXBlLE9nPWUoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2U7cmV0dXJuIHQ9PT13Z3x8bWcod2csdCkmJmU9PT13Zy5zbGljZT9iZzplfSkpO2Z1bmN0aW9uIFNnKCl7U2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHQsZT17fSxyPU9iamVjdC5wcm90b3R5cGUsbj1yLmhhc093blByb3BlcnR5LG89WGZ8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIHhmP3hmOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHU9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gWGYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2goTCl7cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGc/ZTpnLGE9JGYoaS5wcm90b3R5cGUpLHU9bmV3IEEobnx8W10pO3JldHVybiBvKGEsIl9pbnZva2UiLHt2YWx1ZTp4KHQscix1KX0pLGF9ZnVuY3Rpb24gbCh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2gobil7cmV0dXJue3R5cGU6InRocm93Iixhcmc6bn19fWUud3JhcD1mO3ZhciBoPSJzdXNwZW5kZWRTdGFydCIscD0ic3VzcGVuZGVkWWllbGQiLHY9ImV4ZWN1dGluZyIsZD0iY29tcGxldGVkIix5PXt9O2Z1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBiKCl7fXZhciB3PXt9O3ModyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBPPXJsJiZybChybChQKFtdKSkpO08mJk8hPT1yJiZuLmNhbGwoTyxhKSYmKHc9Tyk7dmFyIFM9Yi5wcm90b3R5cGU9Zy5wcm90b3R5cGU9JGYodyk7ZnVuY3Rpb24gRSh0KXt2YXIgZTt2bChlPVsibmV4dCIsInRocm93IiwicmV0dXJuIl0pLmNhbGwoZSwoZnVuY3Rpb24oZSl7cyh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBUKHQsZSl7ZnVuY3Rpb24gcihvLGksYSx1KXt2YXIgYz1sKHRbb10sdCxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgcz1jLmFyZyxmPXMudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1IZihmKSYmbi5jYWxsKGYsIl9fYXdhaXQiKT9lLnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtyKCJuZXh0Iix0LGEsdSl9KSwoZnVuY3Rpb24odCl7cigidGhyb3ciLHQsYSx1KX0pKTplLnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24odCl7cy52YWx1ZT10LGEocyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHIoInRocm93Iix0LGEsdSl9KSl9dShjLmFyZyl9dmFyIGk7byh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe3IodCxuLGUsbyl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fSl9ZnVuY3Rpb24geChlLHIsbil7dmFyIG89aDtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZihvPT09dil0aHJvdyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKG89PT1kKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp0LGRvbmU6ITB9fWZvcihuLm1ldGhvZD1pLG4uYXJnPWE7Oyl7dmFyIHU9bi5kZWxlZ2F0ZTtpZih1KXt2YXIgYz1qKHUsbik7aWYoYyl7aWYoYz09PXkpY29udGludWU7cmV0dXJuIGN9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZihvPT09aCl0aHJvdyBvPWQsbi5hcmc7bi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4uYWJydXB0KCJyZXR1cm4iLG4uYXJnKTtvPXY7dmFyIHM9bChlLHIsbik7aWYoIm5vcm1hbCI9PT1zLnR5cGUpe2lmKG89bi5kb25lP2Q6cCxzLmFyZz09PXkpY29udGludWU7cmV0dXJue3ZhbHVlOnMuYXJnLGRvbmU6bi5kb25lfX0idGhyb3ciPT09cy50eXBlJiYobz1kLG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9cy5hcmcpfX19ZnVuY3Rpb24gaihlLHIpe3ZhciBuPXIubWV0aG9kLG89ZS5pdGVyYXRvcltuXTtpZihvPT09dClyZXR1cm4gci5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uJiZlLml0ZXJhdG9yLnJldHVybiYmKHIubWV0aG9kPSJyZXR1cm4iLHIuYXJnPXQsaihlLHIpLCJ0aHJvdyI9PT1yLm1ldGhvZCl8fCJyZXR1cm4iIT09biYmKHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIituKyInIG1ldGhvZCIpKSx5O3ZhciBpPWwobyxlLml0ZXJhdG9yLHIuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiByLm1ldGhvZD0idGhyb3ciLHIuYXJnPWkuYXJnLHIuZGVsZWdhdGU9bnVsbCx5O3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8ocltlLnJlc3VsdE5hbWVdPWEudmFsdWUsci5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXIubWV0aG9kJiYoci5tZXRob2Q9Im5leHQiLHIuYXJnPXQpLHIuZGVsZWdhdGU9bnVsbCx5KTphOihyLm1ldGhvZD0idGhyb3ciLHIuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksci5kZWxlZ2F0ZT1udWxsLHkpfWZ1bmN0aW9uIE0odCl7dmFyIGUscj17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKHIuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoci5maW5hbGx5TG9jPXRbMl0sci5hZnRlckxvYz10WzNdKSxrbChlPXRoaXMudHJ5RW50cmllcykuY2FsbChlLHIpfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIEEodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHZsKHQpLmNhbGwodCxNLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZXx8IiI9PT1lKXt2YXIgcj1lW2FdO2lmKHIpcmV0dXJuIHIuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBvPS0xLGk9ZnVuY3Rpb24gcigpe2Zvcig7KytvPGUubGVuZ3RoOylpZihuLmNhbGwoZSxvKSlyZXR1cm4gci52YWx1ZT1lW29dLHIuZG9uZT0hMSxyO3JldHVybiByLnZhbHVlPXQsci5kb25lPSEwLHJ9O3JldHVybiBpLm5leHQ9aX19dGhyb3cgbmV3IFR5cGVFcnJvcihIZihlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfXJldHVybiBtLnByb3RvdHlwZT1iLG8oUywiY29uc3RydWN0b3IiLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMH0pLG8oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTptLGNvbmZpZ3VyYWJsZTohMH0pLG0uZGlzcGxheU5hbWU9cyhiLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1tfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIEFsP0FsKHQsYik6KHQuX19wcm90b19fPWIscyh0LGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPSRmKFMpLHR9LGUuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LEUoVC5wcm90b3R5cGUpLHMoVC5wcm90b3R5cGUsdSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9VCxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLG8saSl7dm9pZCAwPT09aSYmKGk9VnkpO3ZhciBhPW5ldyBUKGYodCxyLG4sbyksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0sRShTKSxzKFMsYywiR2VuZXJhdG9yIikscyhTLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhTLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKWtsKHIpLmNhbGwocixuKTtyZXR1cm4gcmcocikuY2FsbChyKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sZS52YWx1ZXM9UCxBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QSxyZXNldDpmdW5jdGlvbihlKXt2YXIgcjtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdmwocj10aGlzLnRyeUVudHJpZXMpLmNhbGwocixrKSwhZSlmb3IodmFyIG8gaW4gdGhpcykidCI9PT1vLmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMsbykmJiFpc05hTigrT2cobykuY2FsbChvLDEpKSYmKHRoaXNbb109dCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgcj10aGlzO2Z1bmN0aW9uIG8obixvKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5hcmc9ZSxyLm5leHQ9bixvJiYoci5tZXRob2Q9Im5leHQiLHIuYXJnPXQpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sdT1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBjPW4uY2FsbChhLCJjYXRjaExvYyIpLHM9bi5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihjJiZzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihjKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFzKXRocm93IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG89dGhpcy50cnlFbnRyaWVzW3JdO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJm4uY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPXQsYS5hcmc9ZSxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyx5KTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLHl9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksayhyKSx5fX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBvPW4uYXJnO2socil9cmV0dXJuIG99fXRocm93IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTpyLG5leHRMb2M6bn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz10KSx5fX0sZX1mdW5jdGlvbiBFZyh0LGUscixuLG8saSxhKXt0cnl7dmFyIHU9dFtpXShhKSxjPXUudmFsdWV9Y2F0Y2gocyl7cmV0dXJuIHZvaWQgcihzKX11LmRvbmU/ZShjKTpWeS5yZXNvbHZlKGMpLnRoZW4obixvKX1mdW5jdGlvbiBUZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgVnkoKGZ1bmN0aW9uKG4sbyl7dmFyIGk9dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7RWcoaSxuLG8sYSx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe0VnKGksbixvLGEsdSwidGhyb3ciLHQpfWEodm9pZCAwKX0pKX19ZnVuY3Rpb24geGcodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgamc9ZShpby5mKCJ0b1ByaW1pdGl2ZSIpKTtmdW5jdGlvbiBNZyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT1IZih0KXx8IXQpcmV0dXJuIHQ7dmFyIHI9dFtqZ107aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9SGYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1lP1N0cmluZzpOdW1iZXIpKHQpfSh0LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09SGYoZSk/ZTplKyIifWZ1bmN0aW9uIGtnKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxYZih0LE1nKG4ua2V5KSxuKX19ZnVuY3Rpb24gQWcodCxlLHIpe3JldHVybiBlJiZrZyh0LnByb3RvdHlwZSxlKSxyJiZrZyh0LHIpLFhmKHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBQZyh0LGUscil7cmV0dXJuKGU9TWcoZSkpaW4gdD9YZih0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH12YXIgTGc9e2V4cG9ydHM6e319LFJnPW8oKGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyKXt2YXIgdD1uZXcgQXJyYXlCdWZmZXIoOCk7T2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImEiLHt2YWx1ZTo4fSl9fSkpLE5nPW8sX2c9WCxDZz1iLEZnPVJnLElnPU9iamVjdC5pc0V4dGVuc2libGUsRGc9TmcoKGZ1bmN0aW9uKCl7SWcoMSl9KSl8fEZnP2Z1bmN0aW9uKHQpe3JldHVybiEhX2codCkmJigoIUZnfHwiQXJyYXlCdWZmZXIiIT09Q2codCkpJiYoIUlnfHxJZyh0KSkpfTpJZyxVZz0hbygoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSx6Zz1BcixCZz1kLEdnPWNuLEhnPVgsV2c9JHQsSmc9JGUuZixLZz1XbixWZz1WbixxZz1EZyxZZz1VZyxYZz0hMSxaZz1uZSgibWV0YSIpLCRnPTAsUWc9ZnVuY3Rpb24odCl7SmcodCxaZyx7dmFsdWU6e29iamVjdElEOiJPIiskZysrLHdlYWtEYXRhOnt9fX0pfSx0bT1MZy5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXt0bS5lbmFibGU9ZnVuY3Rpb24oKXt9LFhnPSEwO3ZhciB0PUtnLmYsZT1CZyhbXS5zcGxpY2UpLHI9e307cltaZ109MSx0KHIpLmxlbmd0aCYmKEtnLmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksbz0wLGk9bi5sZW5ndGg7bzxpO28rKylpZihuW29dPT09Wmcpe2UobixvLDEpO2JyZWFrfXJldHVybiBufSx6Zyh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7Z2V0T3duUHJvcGVydHlOYW1lczpWZy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIUhnKHQpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgdD90Oigic3RyaW5nIj09dHlwZW9mIHQ/IlMiOiJQIikrdDtpZighV2codCxaZykpe2lmKCFxZyh0KSlyZXR1cm4iRiI7aWYoIWUpcmV0dXJuIkUiO1FnKHQpfXJldHVybiB0W1pnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighV2codCxaZykpe2lmKCFxZyh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtRZyh0KX1yZXR1cm4gdFtaZ10ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBZZyYmWGcmJnFnKHQpJiYhV2codCxaZykmJlFnKHQpLHR9fTtHZ1taZ109ITA7dmFyIGVtPUxnLmV4cG9ydHMscm09QXIsbm09bixvbT1lbSxpbT1vLGFtPWdyLHVtPU5oLGNtPWRwLHNtPVQsZm09WCxsbT1HLGhtPUFvLHBtPSRlLmYsdm09eGkuZm9yRWFjaCxkbT1qLHltPUpvLnNldCxnbT1Kby5nZXR0ZXJGb3IsbW09cm8sYm09SG4sd209b28sT209ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiBlKXImJnIudW5zYWZlJiZ0W25dP3Rbbl09ZVtuXTptbSh0LG4sZVtuXSxyKTtyZXR1cm4gdH0sU209WmUsRW09ZHAsVG09Ryx4bT1OaCxqbT1JcyxNbT1EcyxrbT1ocCxBbT1qLFBtPWVtLmZhc3RLZXksTG09Sm8uc2V0LFJtPUpvLmdldHRlckZvcixObT17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89dCgoZnVuY3Rpb24odCxvKXtFbSh0LGkpLExtKHQse3R5cGU6ZSxpbmRleDpibShudWxsKSxmaXJzdDpudWxsLGxhc3Q6bnVsbCxzaXplOjB9KSxBbXx8KHQuc2l6ZT0wKSxUbShvKXx8eG0obyx0W25dLHt0aGF0OnQsQVNfRU5UUklFUzpyfSl9KSksaT1vLnByb3RvdHlwZSxhPVJtKGUpLHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLG8saT1hKHQpLHU9Yyh0LGUpO3JldHVybiB1P3UudmFsdWU9cjooaS5sYXN0PXU9e2luZGV4Om89UG0oZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWkubGFzdCxuZXh0Om51bGwscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9dSksbiYmKG4ubmV4dD11KSxBbT9pLnNpemUrKzp0LnNpemUrKywiRiIhPT1vJiYoaS5pbmRleFtvXT11KSksdH0sYz1mdW5jdGlvbih0LGUpe3ZhciByLG49YSh0KSxvPVBtKGUpO2lmKCJGIiE9PW8pcmV0dXJuIG4uaW5kZXhbb107Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT09ZSlyZXR1cm4gcn07cmV0dXJuIE9tKGkse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWEodGhpcyksZT10LmZpcnN0O2U7KWUucmVtb3ZlZD0hMCxlLnByZXZpb3VzJiYoZS5wcmV2aW91cz1lLnByZXZpb3VzLm5leHQ9bnVsbCksZT1lLm5leHQ7dC5maXJzdD10Lmxhc3Q9bnVsbCx0LmluZGV4PWJtKG51bGwpLEFtP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWEoZSksbj1jKGUsdCk7aWYobil7dmFyIG89bi5uZXh0LGk9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxyLmZpcnN0PT09biYmKHIuZmlyc3Q9byksci5sYXN0PT09biYmKHIubGFzdD1pKSxBbT9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9YSh0aGlzKSxuPVNtKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO2U9ZT9lLm5leHQ6ci5maXJzdDspZm9yKG4oZS52YWx1ZSxlLmtleSx0aGlzKTtlJiZlLnJlbW92ZWQ7KWU9ZS5wcmV2aW91c30saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhYyh0aGlzLHQpfX0pLE9tKGkscj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWModGhpcyx0KTtyZXR1cm4gZSYmZS52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodGhpcywwPT09dD8wOnQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiB1KHRoaXMsdD0wPT09dD8wOnQsdCl9fSksQW0mJndtKGksInNpemUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuc2l6ZX19KSxvfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUrIiBJdGVyYXRvciIsbz1SbShlKSxpPVJtKG4pO2ptKHQsZSwoZnVuY3Rpb24odCxlKXtMbSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6byh0KSxraW5kOmUsbGFzdDpudWxsfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSh0aGlzKSxlPXQua2luZCxyPXQubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gdC50YXJnZXQmJih0Lmxhc3Q9cj1yP3IubmV4dDp0LnN0YXRlLmZpcnN0KT9NbSgia2V5cyI9PT1lP3Iua2V5OiJ2YWx1ZXMiPT09ZT9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KHQudGFyZ2V0PW51bGwsTW0odm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksa20oZSl9fTsoZnVuY3Rpb24odCxlLHIpe3ZhciBuLG89LTEhPT10LmluZGV4T2YoIk1hcCIpLGk9LTEhPT10LmluZGV4T2YoIldlYWsiKSxhPW8/InNldCI6ImFkZCIsdT1ubVt0XSxjPXUmJnUucHJvdG90eXBlLHM9e307aWYoZG0mJnNtKHUpJiYoaXx8Yy5mb3JFYWNoJiYhaW0oKGZ1bmN0aW9uKCl7KG5ldyB1KS5lbnRyaWVzKCkubmV4dCgpfSkpKSl7dmFyIGY9KG49ZSgoZnVuY3Rpb24oZSxyKXt5bShjbShlLGYpLHt0eXBlOnQsY29sbGVjdGlvbjpuZXcgdX0pLGxtKHIpfHx1bShyLGVbYV0se3RoYXQ6ZSxBU19FTlRSSUVTOm99KX0pKSkucHJvdG90eXBlLGw9Z20odCk7dm0oWyJhZGQiLCJjbGVhciIsImRlbGV0ZSIsImZvckVhY2giLCJnZXQiLCJoYXMiLCJzZXQiLCJrZXlzIiwidmFsdWVzIiwiZW50cmllcyJdLChmdW5jdGlvbih0KXt2YXIgZT0iYWRkIj09PXR8fCJzZXQiPT09dDshKHQgaW4gYyl8fGkmJiJjbGVhciI9PT10fHxhbShmLHQsKGZ1bmN0aW9uKHIsbil7dmFyIG89bCh0aGlzKS5jb2xsZWN0aW9uO2lmKCFlJiZpJiYhZm0ocikpcmV0dXJuImdldCI9PT10JiZ2b2lkIDA7dmFyIGE9b1t0XSgwPT09cj8wOnIsbik7cmV0dXJuIGU/dGhpczphfSkpfSkpLGl8fHBtKGYsInNpemUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcykuY29sbGVjdGlvbi5zaXplfX0pfWVsc2Ugbj1yLmdldENvbnN0cnVjdG9yKGUsdCxvLGEpLG9tLmVuYWJsZSgpO2htKG4sdCwhMSwhMCksc1t0XT1uLHJtKHtnbG9iYWw6ITAsZm9yY2VkOiEwfSxzKSxpfHxyLnNldFN0cm9uZyhuLHQsbyl9KSgiTWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLE5tKTt2YXIgX209ZnVuY3Rpb24odCxlKXtyZXR1cm4gMT09PWU/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVt0XShyKX06ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlW3RdKHIsbil9fSxDbT1ydCgiTWFwIiksRm09e01hcDpDbSxzZXQ6X20oInNldCIsMiksZ2V0Ol9tKCJnZXQiLDEpLGhhczpfbSgiaGFzIiwxKSxyZW1vdmU6X20oImRlbGV0ZSIsMSkscHJvdG86Q20ucHJvdG90eXBlfSxJbT1BcixEbT1BdCxVbT1KLHptPU5oLEJtPUZtLk1hcCxHbT1GbS5oYXMsSG09Rm0uZ2V0LFdtPUZtLnNldCxKbT1kKFtdLnB1c2gpO0ltKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMCxmb3JjZWQ6dHJ1ZX0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXtVbSh0KSxEbShlKTt2YXIgcj1uZXcgQm0sbj0wO3JldHVybiB6bSh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQsbisrKTtHbShyLG8pP0ptKEhtKHIsbyksdCk6V20ocixvLFt0XSl9KSkscn19KTt2YXIgS209Wi5NYXAsVm09WmUscW09bnIsWW09WXQsWG09TmgsWm09ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbz1ZbShuKSxpPWFyZ3VtZW50cy5sZW5ndGgsYT1pPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx1PXZvaWQgMCE9PWEsYz11P1ZtKGEsaT4yP2FyZ3VtZW50c1syXTp2b2lkIDApOnZvaWQgMCxzPW5ldyB0LGY9MDtyZXR1cm4gWG0obywoZnVuY3Rpb24odCl7dmFyIG49dT9jKHQsZisrKTp0O3I/ZShzLHFtKG4pWzBdLG5bMV0pOmUocyxuKX0pKSxzfX07QXIoe3RhcmdldDoiTWFwIixzdGF0OiEwLGZvcmNlZDohMH0se2Zyb206Wm0oRm0uTWFwLEZtLnNldCwhMCl9KTt2YXIgJG09bnIsUW09ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgdCxvPWFyZ3VtZW50cy5sZW5ndGgsaT0wO2k8bztpKyspe3ZhciBhPWFyZ3VtZW50c1tpXTtyP2UobiwkbShhKVswXSxhWzFdKTplKG4sYSl9cmV0dXJuIG59fTtBcih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7b2Y6UW0oRm0uTWFwLEZtLnNldCwhMCl9KTt2YXIgdGI9QSxlYj1OaCxyYj1ULG5iPUF0LG9iPUZtLk1hcDtBcih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7a2V5Qnk6ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcocmIodGhpcyk/dGhpczpvYik7bmIoZSk7dmFyIG49bmIoci5zZXQpO3JldHVybiBlYih0LChmdW5jdGlvbih0KXt0YihuLHIsZSh0KSx0KX0pKSxyfX0pO3ZhciBpYj14dCxhYj1UeXBlRXJyb3IsdWI9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYic2l6ZSJpbiB0JiYiaGFzImluIHQmJiJnZXQiaW4gdCYmInNldCJpbiB0JiYiZGVsZXRlImluIHQmJiJlbnRyaWVzImluIHQpcmV0dXJuIHQ7dGhyb3cgbmV3IGFiKGliKHQpKyIgaXMgbm90IGEgbWFwIil9LGNiPXViLHNiPUZtLnJlbW92ZTtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9Y2IodGhpcykscj0hMCxuPTAsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspdD1zYihlLGFyZ3VtZW50c1tuXSkscj1yJiZ0O3JldHVybiEhcn19KTt2YXIgZmI9dWIsbGI9Rm0uZ2V0LGhiPUZtLmhhcyxwYj1GbS5zZXQ7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2VtcGxhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89ZmIodGhpcyk7cmV0dXJuIGhiKG8sdCk/KHI9bGIobyx0KSwidXBkYXRlImluIGUmJihyPWUudXBkYXRlKHIsdCxvKSxwYihvLHQscikpLHIpOihuPWUuaW5zZXJ0KHQsbykscGIobyx0LG4pLG4pfX0pO3ZhciB2Yj1BLGRiPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4sbyxpPXI/dDp0Lml0ZXJhdG9yLGE9dC5uZXh0OyEobj12YihhLGkpKS5kb25lOylpZih2b2lkIDAhPT0obz1lKG4udmFsdWUpKSlyZXR1cm4gb30seWI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByP2RiKHQuZW50cmllcygpLChmdW5jdGlvbih0KXtyZXR1cm4gZSh0WzFdLHRbMF0pfSksITApOnQuZm9yRWFjaChlKX0sZ2I9WmUsbWI9dWIsYmI9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW1iKHRoaXMpLHI9Z2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuITEhPT1iYihlLChmdW5jdGlvbih0LG4pe2lmKCFyKHQsbixlKSlyZXR1cm4hMX0pLCEwKX19KTt2YXIgd2I9WmUsT2I9dWIsU2I9eWIsRWI9Rm0uTWFwLFRiPUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPU9iKHRoaXMpLHI9d2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1uZXcgRWI7cmV0dXJuIFNiKGUsKGZ1bmN0aW9uKHQsbyl7cih0LG8sZSkmJlRiKG4sbyx0KX0pKSxufX0pO3ZhciB4Yj1aZSxqYj11YixNYj15YjtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1qYih0aGlzKSxyPXhiKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLG49TWIoZSwoZnVuY3Rpb24odCxuKXtpZihyKHQsbixlKSlyZXR1cm57dmFsdWU6dH19KSwhMCk7cmV0dXJuIG4mJm4udmFsdWV9fSk7dmFyIGtiPVplLEFiPXViLFBiPXliO0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtmaW5kS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPUFiKHRoaXMpLHI9a2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1QYihlLChmdW5jdGlvbih0LG4pe2lmKHIodCxuLGUpKXJldHVybntrZXk6bn19KSwhMCk7cmV0dXJuIG4mJm4ua2V5fX0pO3ZhciBMYj1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX0sUmI9dWIsTmI9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09TmIoUmIodGhpcyksKGZ1bmN0aW9uKGUpe2lmKExiKGUsdCkpcmV0dXJuITB9KSwhMCl9fSk7dmFyIF9iPXViLENiPUZtLmdldCxGYj1GbS5oYXMsSWI9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtnZXRPckluc2VydDpmdW5jdGlvbih0LGUpe3JldHVybiBGYihfYih0aGlzKSx0KT9DYih0aGlzLHQpOihJYih0aGlzLHQsZSksZSl9fSk7dmFyIERiPUF0LFViPXViLHpiPUZtLmdldCxCYj1GbS5oYXMsR2I9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtnZXRPckluc2VydENvbXB1dGVkOmZ1bmN0aW9uKHQsZSl7aWYoVWIodGhpcyksRGIoZSksQmIodGhpcyx0KSlyZXR1cm4gemIodGhpcyx0KTswPT09dCYmMS90PT0tMS8wJiYodD0wKTt2YXIgcj1lKHQpO3JldHVybiBHYih0aGlzLHQscikscn19KTt2YXIgSGI9dWIsV2I9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2tleU9mOmZ1bmN0aW9uKHQpe3ZhciBlPVdiKEhiKHRoaXMpLChmdW5jdGlvbihlLHIpe2lmKGU9PT10KXJldHVybntrZXk6cn19KSwhMCk7cmV0dXJuIGUmJmUua2V5fX0pO3ZhciBKYj1aZSxLYj11YixWYj15YixxYj1GbS5NYXAsWWI9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHttYXBLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPUtiKHRoaXMpLHI9SmIodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1uZXcgcWI7cmV0dXJuIFZiKGUsKGZ1bmN0aW9uKHQsbyl7WWIobixyKHQsbyxlKSx0KX0pKSxufX0pO3ZhciBYYj1aZSxaYj11YiwkYj15YixRYj1GbS5NYXAsdHc9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9WmIodGhpcykscj1YYih0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxuPW5ldyBRYjtyZXR1cm4gJGIoZSwoZnVuY3Rpb24odCxvKXt0dyhuLG8scih0LG8sZSkpfSkpLG59fSk7dmFyIGV3PXViLHJ3PU5oLG53PUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsYXJpdHk6MSxmb3JjZWQ6ITB9LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9ZXcodGhpcykscj1hcmd1bWVudHMubGVuZ3RoLG49MDtuPHI7KXJ3KGFyZ3VtZW50c1tuKytdLChmdW5jdGlvbih0LHIpe253KGUsdCxyKX0pLHtBU19FTlRSSUVTOiEwfSk7cmV0dXJuIGV9fSk7dmFyIG93PUF0LGl3PXViLGF3PXliLHV3PVR5cGVFcnJvcjtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWl3KHRoaXMpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG49cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG93KHQpLGF3KGUsKGZ1bmN0aW9uKG8saSl7cj8ocj0hMSxuPW8pOm49dChuLG8saSxlKX0pKSxyKXRocm93IG5ldyB1dygiUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gbn19KTt2YXIgY3c9WmUsc3c9dWIsZnc9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9c3codGhpcykscj1jdyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4hMD09PWZ3KGUsKGZ1bmN0aW9uKHQsbil7aWYocih0LG4sZSkpcmV0dXJuITB9KSwhMCl9fSk7dmFyIGx3PUF0LGh3PXViLHB3PVR5cGVFcnJvcix2dz1GbS5nZXQsZHc9Rm0uaGFzLHl3PUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7dXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9aHcodGhpcyksbj1hcmd1bWVudHMubGVuZ3RoO2x3KGUpO3ZhciBvPWR3KHIsdCk7aWYoIW8mJm48Myl0aHJvdyBuZXcgcHcoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBpPW8/dncocix0KTpsdyhuPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxyKTtyZXR1cm4geXcocix0LGUoaSx0LHIpKSxyfX0pO3ZhciBndz1BLG13PUF0LGJ3PVQsd3c9bnIsT3c9VHlwZUVycm9yLFN3PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj13dyh0aGlzKSxvPW13KG4uZ2V0KSxpPW13KG4uaGFzKSxhPW13KG4uc2V0KSx1PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCFidyhlKSYmIWJ3KHUpKXRocm93IG5ldyBPdygiQXQgbGVhc3Qgb25lIGNhbGxiYWNrIHJlcXVpcmVkIik7cmV0dXJuIGd3KGksbix0KT8ocj1ndyhvLG4sdCksYncoZSkmJihyPWUociksZ3coYSxuLHQscikpKTpidyh1KSYmKHI9dSgpLGd3KGEsbix0LHIpKSxyfTtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7dXBzZXJ0OlN3fSksQXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLG5hbWU6InVwc2VydCIsZm9yY2VkOiEwfSx7dXBkYXRlT3JJbnNlcnQ6U3d9KTt2YXIgRXc9ZShLbSksVHc9ZCx4dz1BdCxqdz1YLE13PSR0LGt3PXFuLEF3PWksUHc9RnVuY3Rpb24sTHc9VHcoW10uY29uY2F0KSxSdz1UdyhbXS5qb2luKSxOdz17fSxfdz1Bdz9Qdy5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXh3KHRoaXMpLHI9ZS5wcm90b3R5cGUsbj1rdyhhcmd1bWVudHMsMSksbz1mdW5jdGlvbigpe3ZhciByPUx3KG4sa3coYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvP2Z1bmN0aW9uKHQsZSxyKXtpZighTXcoTncsZSkpe2Zvcih2YXIgbj1bXSxvPTA7bzxlO28rKyluW29dPSJhWyIrbysiXSI7TndbZV09UHcoIkMsYSIsInJldHVybiBuZXcgQygiK1J3KG4sIiwiKSsiKSIpfXJldHVybiBOd1tlXSh0LHIpfShlLHIubGVuZ3RoLHIpOmUuYXBwbHkodCxyKX07cmV0dXJuIGp3KHIpJiYoby5wcm90b3R5cGU9ciksb30sQ3c9X3c7QXIoe3RhcmdldDoiRnVuY3Rpb24iLHByb3RvOiEwLGZvcmNlZDpGdW5jdGlvbi5iaW5kIT09Q3d9LHtiaW5kOkN3fSk7dmFyIEZ3PU51KCJGdW5jdGlvbiIsImJpbmQiKSxJdz1udCxEdz1GdyxVdz1GdW5jdGlvbi5wcm90b3R5cGUsenc9ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5iaW5kO3JldHVybiB0PT09VXd8fEl3KFV3LHQpJiZlPT09VXcuYmluZD9EdzplfSkpLEJ3PWUoS3kpLEd3PU51KCJBcnJheSIsImNvbmNhdCIpLEh3PW50LFd3PUd3LEp3PUFycmF5LnByb3RvdHlwZSxLdz1lKChmdW5jdGlvbih0KXt2YXIgZT10LmNvbmNhdDtyZXR1cm4gdD09PUp3fHxIdyhKdyx0KSYmZT09PUp3LmNvbmNhdD9XdzplfSkpLFZ3PXhpLm1hcDtBcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFmYygibWFwIil9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIFZ3KHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHF3PU51KCJBcnJheSIsIm1hcCIpLFl3PW50LFh3PXF3LFp3PUFycmF5LnByb3RvdHlwZSwkdz1lKChmdW5jdGlvbih0KXt2YXIgZT10Lm1hcDtyZXR1cm4gdD09PVp3fHxZdyhadyx0KSYmZT09PVp3Lm1hcD9YdzplfSkpLFF3PWUocGwpLHRPPVl0LGVPPVhyLHJPPWVuLG5PPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Tyh0aGlzKSxyPXJPKGUpLG49YXJndW1lbnRzLmxlbmd0aCxvPWVPKG4+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpLGk9bj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsYT12b2lkIDA9PT1pP3I6ZU8oaSxyKTthPm87KWVbbysrXT10O3JldHVybiBlfTtBcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmaWxsOm5PfSk7dmFyIG9PPU51KCJBcnJheSIsImZpbGwiKSxpTz1udCxhTz1vTyx1Tz1BcnJheS5wcm90b3R5cGUsY089ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5maWxsO3JldHVybiB0PT09dU98fGlPKHVPLHQpJiZlPT09dU8uZmlsbD9hTzplfSkpLHNPPU5oLGZPPWFjO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBzTyh0LChmdW5jdGlvbih0LHIpe2ZPKGUsdCxyKX0pLHtBU19FTlRSSUVTOiEwfSksZX19KTt2YXIgbE89ZShaLk9iamVjdC5mcm9tRW50cmllcyksaE89bnIscE89Ymgsdk89WmUsZE89QSx5Tz1ZdCxnTz1mdW5jdGlvbih0LGUscixuKXt0cnl7cmV0dXJuIG4/ZShoTyhyKVswXSxyWzFdKTplKHIpfWNhdGNoKGtTKXtwTyh0LCJ0aHJvdyIsa1MpfX0sbU89cmgsYk89Zmksd089ZW4sT089YWMsU089ZGgsRU89Y2gsVE89QXJyYXkseE89ZnVuY3Rpb24odCl7dmFyIGU9eU8odCkscj1iTyh0aGlzKSxuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxpPXZvaWQgMCE9PW87aSYmKG89dk8obyxuPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkpO3ZhciBhLHUsYyxzLGYsbCxoPUVPKGUpLHA9MDtpZighaHx8dGhpcz09PVRPJiZtTyhoKSlmb3IoYT13TyhlKSx1PXI/bmV3IHRoaXMoYSk6VE8oYSk7YT5wO3ArKylsPWk/byhlW3BdLHApOmVbcF0sT08odSxwLGwpO2Vsc2UgZm9yKHU9cj9uZXcgdGhpczpbXSxmPShzPVNPKGUsaCkpLm5leHQ7IShjPWRPKGYscykpLmRvbmU7cCsrKWw9aT9nTyhzLG8sW2MudmFsdWUscF0sITApOmMudmFsdWUsT08odSxwLGwpO3JldHVybiB1Lmxlbmd0aD1wLHV9O0FyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohSmQoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOnhPfSk7dmFyIGpPPWUoWi5BcnJheS5mcm9tKSxNTz1OdSgiQXJyYXkiLCJ2YWx1ZXMiKSxrTz1EcixBTz0kdCxQTz1udCxMTz1NTyxSTz1BcnJheS5wcm90b3R5cGUsTk89e0RPTVRva2VuTGlzdDohMCxOb2RlTGlzdDohMH0sX089ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZXM7cmV0dXJuIHQ9PT1ST3x8UE8oUk8sdCkmJmU9PT1STy52YWx1ZXN8fEFPKE5PLGtPKHQpKT9MTzplfSkpLENPPUtyLEZPPUJyLElPPUosRE89UmFuZ2VFcnJvcixVTz1kLHpPPVFyLEJPPUJyLEdPPUosSE89VU8oKGZ1bmN0aW9uKHQpe3ZhciBlPUZPKElPKHRoaXMpKSxyPSIiLG49Q08odCk7aWYobjwwfHxuPT09MS8wKXRocm93IG5ldyBETygiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtuPjA7KG4+Pj49MSkmJihlKz1lKSkxJm4mJihyKz1lKTtyZXR1cm4gcn0pKSxXTz1VTygiIi5zbGljZSksSk89TWF0aC5jZWlsLEtPPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7dmFyIG8saSxhPUJPKEdPKGUpKSx1PXpPKHIpLGM9YS5sZW5ndGgscz12b2lkIDA9PT1uPyIgIjpCTyhuKTtyZXR1cm4gdTw9Y3x8IiI9PT1zP2E6KChpPUhPKHMsSk8oKG89dS1jKS9zLmxlbmd0aCkpKS5sZW5ndGg+byYmKGk9V08oaSwwLG8pKSx0P2EraTppK2EpfX0sVk89ZCxxTz1vLFlPPXtzdGFydDpLTyghMSksZW5kOktPKCEwKX0uc3RhcnQsWE89UmFuZ2VFcnJvcixaTz1pc0Zpbml0ZSwkTz1NYXRoLmFicyxRTz1EYXRlLnByb3RvdHlwZSx0Uz1RTy50b0lTT1N0cmluZyxlUz1WTyhRTy5nZXRUaW1lKSxyUz1WTyhRTy5nZXRVVENEYXRlKSxuUz1WTyhRTy5nZXRVVENGdWxsWWVhciksb1M9Vk8oUU8uZ2V0VVRDSG91cnMpLGlTPVZPKFFPLmdldFVUQ01pbGxpc2Vjb25kcyksYVM9Vk8oUU8uZ2V0VVRDTWludXRlcyksdVM9Vk8oUU8uZ2V0VVRDTW9udGgpLGNTPVZPKFFPLmdldFVUQ1NlY29uZHMpLHNTPXFPKChmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT09dFMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXFPKChmdW5jdGlvbigpe3RTLmNhbGwobmV3IERhdGUoTmFOKSl9KSk/ZnVuY3Rpb24oKXtpZighWk8oZVModGhpcykpKXRocm93IG5ldyBYTygiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPW5TKHQpLHI9aVModCksbj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIG4rWU8oJE8oZSksbj82OjQsMCkrIi0iK1lPKHVTKHQpKzEsMiwwKSsiLSIrWU8oclModCksMiwwKSsiVCIrWU8ob1ModCksMiwwKSsiOiIrWU8oYVModCksMiwwKSsiOiIrWU8oY1ModCksMiwwKSsiLiIrWU8ociwzLDApKyJaIn06dFMsZlM9QSxsUz1ZdCxoUz13ZSxwUz1zUyx2Uz1iO0FyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PWZTKERhdGUucHJvdG90eXBlLnRvSlNPTix7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pKX0se3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1sUyh0aGlzKSxyPWhTKGUsIm51bWJlciIpO3JldHVybiJudW1iZXIiIT10eXBlb2Ygcnx8aXNGaW5pdGUocik/InRvSVNPU3RyaW5nImluIGV8fCJEYXRlIiE9PXZTKGUpP2UudG9JU09TdHJpbmcoKTpmUyhwUyxlKTpudWxsfX0pO3ZhciBkUz1aLHlTPWY7ZFMuSlNPTnx8KGRTLkpTT049e3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeX0pO3ZhciBnUz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHlTKGRTLkpTT04uc3RyaW5naWZ5LG51bGwsYXJndW1lbnRzKX0sbVM9ZShnUyksYlM9ZnVuY3Rpb24oKXtyZXR1cm4gQWcoKGZ1bmN0aW9uIHQoZSl7eGcodGhpcyx0KSxQZyh0aGlzLCJfY2FjaGUiLHZvaWQgMCksUGcodGhpcywiX2NhY2hlSGVhZCIsMCksdGhpcy5fY2FjaGU9bmV3IEZsb2F0MzJBcnJheShlKX0pLFt7a2V5OiJjYWNoZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7aWYodC5sZW5ndGgrdGhpcy5fY2FjaGVIZWFkPnRoaXMuX2NhY2hlLmxlbmd0aCYmKGU9dC5zdWJhcnJheSh0aGlzLl9jYWNoZS5sZW5ndGgtdGhpcy5fY2FjaGVIZWFkKSx0PXQuc3ViYXJyYXkoMCx0aGlzLl9jYWNoZS5sZW5ndGgtdGhpcy5fY2FjaGVIZWFkKSksdGhpcy5fY2FjaGUuc2V0KHQsdGhpcy5fY2FjaGVIZWFkKSx0aGlzLl9jYWNoZUhlYWQrPXQubGVuZ3RoLHRoaXMuX2NhY2hlSGVhZD09PXRoaXMuX2NhY2hlLmxlbmd0aCYmKHRoaXMuX2NhY2hlSGVhZD0wKSxlKXJldHVybiB0aGlzLmNhY2hlKGUpfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSh0aGlzLl9jYWNoZS5sZW5ndGgpO3JldHVybiB0LnNldCh0aGlzLl9jYWNoZS5zdWJhcnJheSh0aGlzLl9jYWNoZUhlYWQpKSx0LnNldCh0aGlzLl9jYWNoZS5zdWJhcnJheSgwLHRoaXMuX2NhY2hlSGVhZCksdGhpcy5fY2FjaGUubGVuZ3RoLXRoaXMuX2NhY2hlSGVhZCksdH19XSl9KCk7ZnVuY3Rpb24gd1ModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtyZXR1cm4gZS5sZW5ndGgrcj50Lmxlbmd0aCYmKGU9ZS5zdWJhcnJheSgwLHQubGVuZ3RoLXIpKSx0LnNldChlLHIpLHIrZS5sZW5ndGh9dmFyIE9TPVsiZXZlbnQiXSxTUz00OGUzLEVTPWZ1bmN0aW9uKCl7cmV0dXJuIEFnKChmdW5jdGlvbiB0KGUpe3ZhciByO3hnKHRoaXMsdCksUGcodGhpcywiY2FjaGVNYW5hZ2VyTWFwIixuZXcgRXcpLFBnKHRoaXMsImR1bXBNYXAiLHZvaWQgMCksUGcodGhpcywiZHVtcEhlYWQiLDApLFBnKHRoaXMsImR1bXBMZW5ndGgiLDApLFBnKHRoaXMsImNhY2hlTGVuZ3RoIiwwKSxQZyh0aGlzLCJvdmVybG9hZFRocmVzaG9sZCIsdm9pZCAwKSxQZyh0aGlzLCJpc09uIix2b2lkIDApLFBnKHRoaXMsImd1bHBVcmwiLHZvaWQgMCksUGcodGhpcywid2FzbVVybCIsdm9pZCAwKSxQZyh0aGlzLCJ0eXBlNU1vZGVsVXJsIix2b2lkIDApLFBnKHRoaXMsInR5cGU2TW9kZWxVcmwiLHZvaWQgMCksUGcodGhpcywiYW5zTGV2ZWwiLHZvaWQgMCksUGcodGhpcywiaXNFbmhhbmNlTW9kZSIsdm9pZCAwKSxQZyh0aGlzLCJhaW5yVHlwZSIsdm9pZCAwKSxQZyh0aGlzLCJpc01vZHVsZVJlYWR5IiwhMSksUGcodGhpcywiaXNFbmdpbmVSZWFkeSIsITEpLFBnKHRoaXMsImN1cnJlbnRDaGFubmVsIix2b2lkIDApLFBnKHRoaXMsImN1cnJlbnRTYW1wbGVSYXRlIix2b2lkIDApLFBnKHRoaXMsIkFJTlIiLHZvaWQgMCksUGcodGhpcywibnJFbmdpbmVMaXN0IixbXSk7dmFyIG49ZS5lbmFibGVDYWNoZSxvPWUuY2FjaGVUaW1lLGk9ZS5vdmVybG9hZFRocmVzaG9sZCxhPWUuaXNPbix1PWUudXJscyxjPWUuYW5zTGV2ZWwscz1lLmlzRW5oYW5jZU1vZGUsZj1lLmFpbnJUeXBlLGw9dS5ndWxwVXJsLGg9dS53YXNtVXJsLHA9dS50eXBlNU1vZGVsVXJsLHY9dS50eXBlNk1vZGVsVXJsO24mJih0aGlzLmNhY2hlTGVuZ3RoPW8qU1MpLHRoaXMub3ZlcmxvYWRUaHJlc2hvbGQ9aSx0aGlzLmlzT249YSx0aGlzLmd1bHBVcmw9bCx0aGlzLndhc21Vcmw9aCx0aGlzLnR5cGU1TW9kZWxVcmw9cCx0aGlzLnR5cGU2TW9kZWxVcmw9dix0aGlzLmFuc0xldmVsPWMsdGhpcy5pc0VuaGFuY2VNb2RlPXMsdGhpcy5haW5yVHlwZT1mLHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsencocj10aGlzLmhhbmRsZU1lc3NhZ2UpLmNhbGwocix0aGlzKSksdGhpcy5pbml0V29ya2VyKCl9KSxbe2tleToiaW5pdFdvcmtlciIsdmFsdWU6KG49VGcoU2coKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscixuLG89dGhpcztyZXR1cm4gU2coKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gZT10aGlzLmd1bHBVcmwscj10aGlzLndhc21VcmwsdC5wcmV2PTEsdC5uZXh0PTQsaW1wb3J0KGUpO2Nhc2UgNDpyZXR1cm4gbj10LnNlbnQuZGVmYXVsdCx0Lm5leHQ9NyxuZXcgQncoKGZ1bmN0aW9uKHQpe28uQUlOUj17d2FzbUJpbmFyeUZpbGU6cixvblJ1bnRpbWVJbml0aWFsaXplZDpmdW5jdGlvbigpe3QoKX19LG4oby5BSU5SKX0pKTtjYXNlIDc6dGhpcy5pc01vZHVsZVJlYWR5PSEwLHQubmV4dD0xNDticmVhaztjYXNlIDEwOnQucHJldj0xMCx0LnQwPXQuY2F0Y2goMSksVFMoImVycm9yIiwiaW5pdFdvcmtlciBlcnJvciAiLmNvbmNhdCh0LnQwKSksdGhpcy5pc01vZHVsZVJlYWR5PSExO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxLDEwXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJpbml0RW5naW5lIix2YWx1ZToocj1UZyhTZygpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbixvLGksYSx1LGMscyxmO3JldHVybiBTZygpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHRoaXMuQUlOUil7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIFRTKCJlcnJvciIsIkFJTlIgbW9kdWxlIG5vdCByZWFkeSIpLHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6bz10aGlzLnR5cGU2TW9kZWxVcmwsaT10aGlzLnR5cGU1TW9kZWxVcmwsYT10aGlzLmFuc0xldmVsLHU9dGhpcy5pc0VuaGFuY2VNb2RlLGM9dGhpcy5haW5yVHlwZSxUUygiaW5mbyIsS3cobj0iaW50ZXJBdWRpb05yIHNhbXBsZVJhdGU6ICIuY29uY2F0KGUsIiwgY2hhbm5lbDogIikpLmNhbGwobixyKSk7Y2FzZSA1OmlmKCFyLS0pe3QubmV4dD0yMjticmVha31pZihzPW5ldyB0aGlzLkFJTlIuQXVkaW9OckVuZ2luZShlLDEsNiksZj0iIiw1IT09Yyl7dC5uZXh0PTE0O2JyZWFrfXJldHVybiB0Lm5leHQ9MTEseFMoaSk7Y2FzZSAxMTpmPXQuc2VudCx0Lm5leHQ9MTg7YnJlYWs7Y2FzZSAxNDppZig2IT09Yyl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0Lm5leHQ9MTcseFMobyk7Y2FzZSAxNzpmPXQuc2VudDtjYXNlIDE4OnMuaW5pdEF1ZGlvTnIoZixjLHUsYSksdGhpcy5uckVuZ2luZUxpc3QucHVzaChzKSx0Lm5leHQ9NTticmVhaztjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24odCxlKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2V0TW9kZSIsdmFsdWU6KGU9VGcoU2coKS5tYXJrKChmdW5jdGlvbiB0KGUscixuKXt2YXIgbyxpLGEsdSxjLHM7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYodGhpcy5hbnNMZXZlbD1lLHRoaXMuaXNFbmhhbmNlTW9kZT1yLHRoaXMuYWluclR5cGU9bix1PXRoaXMudHlwZTVNb2RlbFVybCxjPXRoaXMudHlwZTZNb2RlbFVybCxUUygiaW5mbyIsS3cobz1LdyhpPSJzZXRNb2RlIGFuc0xldmVsOiAiLmNvbmNhdChlLCIsIGlzRW5oYW5jZU1vZGU6ICIpKS5jYWxsKGksciwiLCBhaW5yVHlwZTogIikpLmNhbGwobyxuKSkscz0iIiw1IT09bil7dC5uZXh0PTEyO2JyZWFrfXJldHVybiB0Lm5leHQ9OSx4Uyh1KTtjYXNlIDk6cz10LnNlbnQsdC5uZXh0PTE2O2JyZWFrO2Nhc2UgMTI6aWYoNiE9PW4pe3QubmV4dD0xNjticmVha31yZXR1cm4gdC5uZXh0PTE1LHhTKGMpO2Nhc2UgMTU6cz10LnNlbnQ7Y2FzZSAxNjpyZXR1cm4gdC5uZXh0PTE4LEJ3LmFsbCgkdyhhPXRoaXMubnJFbmdpbmVMaXN0KS5jYWxsKGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZ2luZVNldENvbmZpZyhzLG4scixlKX0pKSk7Y2FzZSAxODpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7aWYoISh0aGlzLmNhY2hlTGVuZ3RoPD0wKSl7dmFyIHI9dCpTUyxuPW5ldyBFdyxvPTA7UXcoZT10aGlzLmNhY2hlTWFuYWdlck1hcCkuY2FsbChlLChmdW5jdGlvbih0LGUpe3ZhciBpPXQuZ2V0Q2FjaGUoKSxhPW5ldyBGbG9hdDMyQXJyYXkocik7bz13UyhhLGkpLG4uc2V0KGUsYSl9KSksdGhpcy5kdW1wTWFwPW4sdGhpcy5kdW1wSGVhZD1vLHRoaXMuZHVtcExlbmd0aD1yLHRoaXMuY2hlY2tGb3JEdW1wKG4scixvKX19fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOih0PVRnKFNnKCkubWFyaygoZnVuY3Rpb24gdChlLHIpe3ZhciBuLG8saSxhLHUsYyxzLGYsbCxoLHAsdixkLHksZyxtLGIsdyxPLFMsRSxULHgsaixNLGs7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoaT10aGlzLmlzT24sYT10aGlzLmlzRW5naW5lUmVhZHksdT10aGlzLmlzTW9kdWxlUmVhZHksYz10aGlzLmN1cnJlbnRTYW1wbGVSYXRlLHM9dGhpcy5jdXJyZW50Q2hhbm5lbCxmPXRoaXMub3ZlcmxvYWRUaHJlc2hvbGQsbD10aGlzLm5yRW5naW5lTGlzdCxoPXRoaXMuY2FjaGVMZW5ndGgscD10aGlzLmR1bXBNYXAsdj10aGlzLmR1bXBIZWFkLGQ9dGhpcy5kdW1wTGVuZ3RoLHk9ZS5mb3JtYXQsZz1lLm51bWJlck9mQ2hhbm5lbHMsbT1lLm51bWJlck9mRnJhbWVzLGI9ZS5zYW1wbGVSYXRlLHc9ZS50aW1lc3RhbXAsaSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHIuZW5xdWV1ZShlKSx0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA1OmlmKHUpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA3OmlmKE89YiE9PWN8fGchPT1zLGI9PT1TUyl7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBUUygiZXJyb3IiLCJVbnN1cHBvcnRlZCBzYW1wbGVSYXRlOiAiLmNvbmNhdChiLCIsIHNpbGVudCB0dXJuIG9mZiIpKSx0aGlzLmlzT249ITEsdGhpcy5lbWl0KCJvblVuc3VwcG9ydGVkIix7ZXZlbnQ6Im9uVW5zdXBwb3J0ZWQiLG1lc3NhZ2U6IlVuc3VwcG9ydGVkIHNhbXBsZVJhdGUifSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6aWYoYSYmIU8pe3QubmV4dD0yNjticmVha31yZXR1cm4gdC5wcmV2PTE0LHRoaXMuaXNFbmdpbmVSZWFkeT0hMCx0aGlzLmN1cnJlbnRDaGFubmVsPWcsdGhpcy5jdXJyZW50U2FtcGxlUmF0ZT1iLHQubmV4dD0yMCx0aGlzLmluaXRFbmdpbmUoYixnKTtjYXNlIDIwOnQubmV4dD0yNjticmVhaztjYXNlIDIyOnJldHVybiB0LnByZXY9MjIsdC50MD10LmNhdGNoKDE0KSxUUygiZXJyb3IiLCJpbml0RW5naW5lIGZhaWxlZCwgZXJyb3I6ICIuY29uY2F0KHQudDAsIiAiKSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjY6aWYodm9pZCAwIT09KFM9TVMoeSkpKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIFRTKCJlcnJvciIsIlVua25vd24gZm9ybWF0OiAiLmNvbmNhdCh5KSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzA6RT1wZXJmb3JtYW5jZS5ub3coKSxUPSR3KG49Y08obz1uZXcgQXJyYXkoZykpLmNhbGwobywwKSkuY2FsbChuLChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG0pfSkpLFF3KFQpLmNhbGwoVCwoZnVuY3Rpb24odCxyKXtlLmNvcHlUbyh0LHtwbGFuZUluZGV4OnIsZm9ybWF0Onl9KX0pKSx4PVtdLFF3KFQpLmNhbGwoVCwoZnVuY3Rpb24odCxlKXt2YXIgcj1sW2VdO3IuZ2V0SW5wdXREYXRhQnVmZmVyKCkuc2V0KHQpO3ZhciBuPXIucHJvY2Vzc0ZyYW1lKFMsMSk7eC5wdXNoKG4pfSkpLGg+MCYmKHRoaXMuY2FjaGUoVCwiaW5wdXQiKSx0aGlzLmNhY2hlKHgsIm91dHB1dCIpLHAmJih0aGlzLmNhY2hlVG9EdW1wKFQscCx2LCJpbnB1dCIpLGo9dGhpcy5jYWNoZVRvRHVtcCh4LHAsdiwib3V0cHV0IiksdGhpcy5jaGVja0ZvckR1bXAocCxkLGopKSksTT1uZXcgRmxvYXQzMkFycmF5KG0qZyksUXcoeCkuY2FsbCh4LChmdW5jdGlvbih0LGUpe00uc2V0KHQsZSptKX0pKSxyLmVucXVldWUobmV3IEF1ZGlvRGF0YSh7Zm9ybWF0Onksc2FtcGxlUmF0ZTpiLG51bWJlck9mRnJhbWVzOm0sbnVtYmVyT2ZDaGFubmVsczpnLHRpbWVzdGFtcDp3LGRhdGE6TX0pKSwoaz1wZXJmb3JtYW5jZS5ub3coKSktRT5mJiZ0aGlzLmVtaXQoIm9uT3ZlcmxvYWQiLHtldmVudDoib25PdmVybG9hZCIsZWxhcHNlZFRpbWU6ay1FfSk7Y2FzZSA0MTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyxbWzE0LDIyXV0pfSkpKSxmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYWNoZU1hbmFnZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2FjaGVNYW5hZ2VyTWFwLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGJTKHRoaXMuY2FjaGVMZW5ndGgpLHRoaXMuY2FjaGVNYW5hZ2VyTWFwLnNldCh0LGUpKSxlfX0se2tleToiY2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztRdyh0KS5jYWxsKHQsKGZ1bmN0aW9uKHQsbil7dmFyIG8saT1LdyhvPSIiLmNvbmNhdChlLCItIikpLmNhbGwobyxuKTtyLmdldENhY2hlTWFuYWdlcihpKS5jYWNoZSh0KX0pKX19LHtrZXk6ImNhY2hlVG9EdW1wIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgbz0wO3JldHVybiBRdyh0KS5jYWxsKHQsKGZ1bmN0aW9uKHQsaSl7dmFyIGEsdT1LdyhhPSIiLmNvbmNhdChuLCItIikpLmNhbGwoYSxpKSxjPWUuZ2V0KHUpO2MmJihvPXdTKGMsdCxyKSl9KSksb319LHtrZXk6ImNoZWNrRm9yRHVtcCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe2lmKHQmJnI+PWUpe3ZhciBuLG89bE8odCksaT0kdyhuPWpPKF9PKHQpLmNhbGwodCkpKS5jYWxsKG4sKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1ZmZlcn0pKTt0aGlzLmVtaXQoIm9uRHVtcCIse2V2ZW50OiJvbkR1bXAiLGR1bXBNYXA6b30saSksdGhpcy5kdW1wTWFwPXZvaWQgMH10aGlzLmR1bXBIZWFkPXJ9fSx7a2V5OiJlbWl0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOnQsZGF0YTplfSx7dHJhbnNmZXI6cn0pfX0se2tleToiaGFuZGxlTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10LmRhdGEsbj1yLmV2ZW50LG89dGMocixPUyk7aWYoVFMoImluZm8iLEt3KGU9IiIuY29uY2F0KG4sIiAiKSkuY2FsbChlLG1TKG8pKSksImNyZWF0ZVByb2Nlc3MiPT09bil7dmFyIGksYT1vLnNvdXJjZSx1PW8uc2luayxjPW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTp6dyhpPXRoaXMudHJhbnNmb3JtKS5jYWxsKGksdGhpcyl9KTthLnBpcGVUaHJvdWdoKGMpLnBpcGVUbyh1KX1lbHNlIGlmKCJzd2l0Y2hPbiI9PT1uKXt2YXIgcz1vLmlzT247dGhpcy5pc09uPXN9ZWxzZSBpZigic2V0TW9kZSI9PT1uKXt2YXIgZj1vLmFuc0xldmVsLGw9by5pc0VuaGFuY2VNb2RlLGg9by5haW5yVHlwZTt0aGlzLnNldE1vZGUoZixsLGgpfWVsc2UgaWYoImR1bXAiPT09bil7dmFyIHA9by50b3RhbFRpbWU7dGhpcy5kdW1wKHApfX19XSk7dmFyIHQsZSxyLG59KCk7ZnVuY3Rpb24gVFModCxlKXtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJsb2ciLGRhdGE6e3R5cGU6dCxtZXNzYWdlOmV9fSl9ZnVuY3Rpb24geFModCl7cmV0dXJuIGpTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqUygpe3JldHVybihqUz1UZyhTZygpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGZldGNoKGUpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5uZXh0PTUsci5hcnJheUJ1ZmZlcigpO2Nhc2UgNTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNUyh0KXtyZXR1cm4iZjMyLXBsYW5hciI9PT10PzA6InMzMi1wbGFuYXIiPT09dD8xOiJzMTYtcGxhbmFyIj09PXQ/MjoidTgtcGxhbmFyIj09PXQ/Mzp2b2lkIDB9c2VsZi5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKCJpbml0Ij09PWUuZXZlbnQpe3ZhciByPWUuY29uZmlnO25ldyBFUyhyKX19fSgpOwo=",IZ=typeof window<"u"&&window.Blob&&new Blob([atob(Hf)],{type:"text/javascript;charset=utf-8"});function OzA(){var A;try{if(!(A=IZ&&(AZ||window.webkitURL).createObjectURL(IZ)))throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+Hf)}finally{var I;!(typeof window<"u"&&xzA(I=navigator.userAgent).call(I,"Trident/")>0)&&A&&(AZ||window.webkitlRL).revokeObjectURL(A)}}var qzA=uj,gZ=SA(qzA),_zA=sj,$zA=SA(_zA),AMA=Cf,CZ=SA(AMA),xf={exports:{}};(function(A){var I=Object.prototype.hasOwnProperty,g="~";function C(){}function Q(e,o,t){this.fn=e,this.context=o,this.once=t||!1}function B(e,o,t,s,v){if(typeof t!="function")throw new TypeError("The listener must be a function");var r=new Q(t,s||e,v),n=g?g+o:o;return e._events[n]?e._events[n].fn?e._events[n]=[e._events[n],r]:e._events[n].push(r):(e._events[n]=r,e._eventsCount++),e}function E(e,o){--e._eventsCount==0?e._events=new C:delete e._events[o]}function i(){this._events=new C,this._eventsCount=0}gZ&&(C.prototype=gZ(null),new C().__proto__||(g=!1)),i.prototype.eventNames=function(){var e,o,t=[];if(this._eventsCount===0)return t;for(o in e=this._events)I.call(e,o)&&t.push(g?$zA(o).call(o,1):o);return CZ?bC(t).call(t,CZ(e)):t},i.prototype.listeners=function(e){var o=g?g+e:e,t=this._events[o];if(!t)return[];if(t.fn)return[t.fn];for(var s=0,v=t.length,r=new Array(v);s")}}]);var I}(),Of=function(A){return A[A.CAPTURE=0]="CAPTURE",A[A.PRE_PROCESSING=1]="PRE_PROCESSING",A[A.ENCODE=2]="ENCODE",A[A.TRANSFER=3]="TRANSFER",A[A.POST_PROCESSING=4]="POST_PROCESSING",A[A.DECODE=5]="DECODE",A[A.RENDERING=6]="RENDERING",A}(Of||{}),jr=function(A){return A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A}(jr||{}),qf=function(A){return A[A.EXTERNAL=0]="EXTERNAL",A[A.INTERNAL=1]="INTERNAL",A}(qf||{});function QMA(A,I,g){return I=mo(I),dL(A,Ed()?IL(I,g||[],mo(A).constructor):I.apply(A,g))}var BMA=function(){function A(){var I,g;nL(this,A);for(var C=arguments.length,Q=new Array(C),B=0;B=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&vMA(I,g,B),B},aMA={overloadThreshold:20,enableCache:!1,cacheTime:30,dumpTime:90,ansMode:vs.AUTO,resample:!0,urls:{gulpUrl:EMA,wasmUrl:iMA,type5ModelUrl:eMA,type6ModelUrl:oMA}},wn=Lg(Lg(Lg(Lg({},vs.AUTO,{ansLevel:3,isEnhanceMode:!1,ainrType:6}),vs.LOW,{ansLevel:3,isEnhanceMode:!1,ainrType:0}),vs.MEDIUM,{ansLevel:3,isEnhanceMode:!0,ainrType:0}),vs.HIGH,{ansLevel:3,isEnhanceMode:!1,ainrType:5}),Ne=function(){function A(B){var E,i;return nL(this,A),Lg(i=sMA(this,A),"name","RTCAIAnsExtension"),Lg(i,"version","4.66.5"),Lg(i,"_config",void 0),Lg(i,"_workerMap",new Db),Lg(i,"_enableMap",new Db),Lg(i,"_context",void 0),Lg(i,"_contextNodes",new Db),i._config=ut(ut({},aMA),B),i._enableMap.set(bC(E="".concat(jr.STREAM_INDEX_MAIN,"-")).call(E,pe.AUDIO_SOURCE_TYPE_INTERNAL),!0),i._config.resample&&typeof AudioContext<"u"&&(i._context=new AudioContext({sampleRate:48e3})),i}return hL(A,BMA),lL(A,[{key:"applyConstraints",value:function(B,E){}},{key:"init",value:(Q=Wr(sB().mark(function B(E){return sB().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:this._config=ut(ut({},this._config),E),this._initWorker(jr.STREAM_INDEX_MAIN,pe.AUDIO_SOURCE_TYPE_INTERNAL);case 2:case"end":return i.stop()}},B,this)})),function(B){return Q.apply(this,arguments)})},{key:"effect",value:(C=Wr(sB().mark(function B(E,i){var e,o,t,s,v,r,n,a,c,d,l,h,D;return sB().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(e=i||E.mediaTrack,o=E.mediaType,t=E.sourceType,s=E.streamIndex,t!==void 0&&s!==void 0){u.next=5;break}return(v=this.logger)===null||v===void 0||v.warn(bC(r="[AINR] track sourceType or streamIndex is undefined, sourceType: ".concat(t,", streamIndex: ")).call(r,s)),u.abrupt("return",e);case 5:if(o!=="audio"){u.next=16;break}return this._destroyWorker(s),n=this._initWorker(s,t===qf.INTERNAL?pe.AUDIO_SOURCE_TYPE_INTERNAL:pe.AUDIO_SOURCE_TYPE_EXTERNAL),a=n.worker,c=E.mediaTrack,this._config.resample&&(c=this.resample(s,c)),d=new MediaStreamTrackProcessor(c),l=new MediaStreamTrackGenerator("audio"),h=d.readable,D=l.writable,a.postMessage({event:"createProcess",source:h,sink:D},[h,D]),u.abrupt("return",l||e);case 16:return u.abrupt("return",e);case 17:case"end":return u.stop()}},B,this)})),function(B,E){return C.apply(this,arguments)})},{key:"enable",value:function(){var B,E,i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{streamIndex:jr.STREAM_INDEX_MAIN,sourceType:pe.AUDIO_SOURCE_TYPE_INTERNAL},e=i.streamIndex,o=i.sourceType;this._enableMap.set(bC(B="".concat(e,"-")).call(B,o),!0);var t=(E=this._workerMap.get(e))!==null&&E!==void 0?E:this._initWorker(e,o),s=t.worker;t.sourceType===o&&s.postMessage({event:"switchOn",isOn:!0})}},{key:"disable",value:function(){var B,E,i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{streamIndex:jr.STREAM_INDEX_MAIN,sourceType:pe.AUDIO_SOURCE_TYPE_INTERNAL},e=i.streamIndex,o=i.sourceType;this._enableMap.set(bC(B="".concat(e,"-")).call(B,o),!1);var t=(E=this._workerMap.get(e))!==null&&E!==void 0?E:{},s=t.worker,v=t.sourceType;s&&v===o&&s.postMessage({event:"switchOn",isOn:!1})}},{key:"isSupported",value:function(){return cMA()}},{key:"isOpen",value:function(B){var E,i=B.streamIndex,e=B.sourceType;return this._enableMap.get(bC(E="".concat(i,"-")).call(E,e))||!1}},{key:"setAnsMode",value:(g=Wr(sB().mark(function B(E){var i,e,o,t,s;return sB().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:this._config.ansMode=E,e=wn[E],o=e.ansLevel,t=e.isEnhanceMode,s=e.ainrType,Vr(i=this._workerMap).call(i,function(r){r.worker.postMessage({event:"setMode",ansLevel:o,isEnhanceMode:t,ainrType:s})});case 3:case"end":return v.stop()}},B,this)})),function(B){return g.apply(this,arguments)})},{key:"dump",value:(I=Wr(sB().mark(function B(E){var i,e,o=this;return sB().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e=(i=this._workerMap.get(E))===null||i===void 0?void 0:i.worker){t.next=3;break}throw new Error("worker not found");case 3:return e.postMessage({event:"dump",totalTime:this._config.dumpTime}),t.abrupt("return",new GWA(function(s){o.once("onDump",function(v){var r,n,a,c=v.dumpMap,d=[],l=[];Vr(r=LWA(c)).call(r,function(b){var y=c[b],S=KUA(b.split("-"),2),L=S[0];S[1],L==="input"?d.push(y):L==="output"&&l.push(y)});var h=bC(n="".concat(fr.BEFORE_PROCESS,"_")).call(n,E,"_",48e3,".wav"),D=bC(a="".concat(fr.AFTER_PROCESS,"_")).call(a,E,"_",48e3,".wav"),u=QZ(d,48e3,h),w=QZ(l,48e3,D);s(Lg(Lg({},fr.BEFORE_PROCESS,{file:u,name:h}),fr.AFTER_PROCESS,{file:w,name:D}))})}));case 5:case"end":return t.stop()}},B,this)})),function(B){return I.apply(this,arguments)})},{key:"_initWorker",value:function(B,E){var i,e,o=ut(ut({},this._config),{},{isOn:this._enableMap.get(bC(i="".concat(B,"-")).call(i,E))||!1,ansLevel:wn[this._config.ansMode].ansLevel,isEnhanceMode:wn[this._config.ansMode].isEnhanceMode,ainrType:wn[this._config.ansMode].ainrType}),t=new OzA;return t.postMessage({event:"init",config:o}),t.addEventListener("message",TWA(e=this._handleWorkerMessage).call(e,this)),this._workerMap.set(B,{worker:t,sourceType:E}),{worker:t,sourceType:E}}},{key:"_handleWorkerMessage",value:function(B){var E,i,e,o,t=B.data,s=t.type,v=t.data;if(s!=="log")if(s!=="onDump"){if((E=this.logger)===null||E===void 0||E.info("_handleWorkerMessage",bC(i="type ".concat(s,", data ")).call(i,v)),s==="onOverload")this.emit(Fm.onOverload,{elapsedTime:v.elapsedTime});else{if(s!=="onUnsupported")return;this.emit(Fm.onUnsupported,{message:v.message})}(e=this.monitor)===null||e===void 0||e.report("rtc_sdk_callback",{sdk_callback_name:bC(o="".concat(this.name,".")).call(o,s),error_code:0,message:mm(v||{})})}else this.emit("onDump",v);else{var r,n=v.type,a=v.message;(r=this.logger)===null||r===void 0||r[n]("worker",a)}}},{key:"_destroyWorker",value:function(B){var E,i=(E=this._workerMap.get(B))===null||E===void 0?void 0:E.worker;i&&(i.terminate(),this._workerMap.delete(B))}},{key:"resample",value:function(B,E){var i=this._context;if(!i)return E;var e=E.id,o=this._contextNodes.get(B);o&&o.id!==e&&(o.source.disconnect(),o.dest.disconnect());var t=new MediaStreamAudioSourceNode(i,{mediaStream:new MediaStream([E])}),s=new MediaStreamAudioDestinationNode(i);return t.connect(s),this._contextNodes.set(B,{id:e,source:t,dest:s}),s.stream.getAudioTracks()[0]}},{key:"destroy",value:function(){var B,E,i,e=this;Vr(B=this._workerMap).call(B,function(o,t){e._destroyWorker(t)}),Vr(E=this._contextNodes).call(E,function(o){var t=o.source,s=o.dest;t.disconnect(),s.disconnect()}),this._workerMap.clear(),this._contextNodes.clear(),(i=this._context)===null||i===void 0||i.close()}}]);var I,g,C,Q}();function PMA(){var A,I,g={ie:null,firefox:null,chrome:null,opera:null,safari:null,edge:null},C=navigator.userAgent.toLowerCase();for(var Q in(A=C.match(/msie ([\d.]+)/))?g.ie=A[1]:(A=C.match(/firefox\/([\d.]+)/))?g.firefox=A[1]:(A=C.match(/edg\/([\d.]+)/))?g.edge=A[1]:(A=C.match(/chrome\/([\d.]+)/))?g.chrome=A[1]:(A=C.match(/opera.([\d.]+)/))?g.opera=A[1]:(A=C.match(/version\/([\d.]+).*safari/))&&(g.safari=A[1]),g)g[Q]!==null&&(A=Q,I=g[Q].split(".")[0]);return{browser:A,version:I}}function cMA(){var A=PMA(),I=A.browser,g=A.version,C={chrome:94,edge:94,opera:80};return C[I]&&g>=C[I]&&!!window.MediaStreamTrackProcessor&&!!window.MediaStreamTrackGenerator&&!!window.TransformStream}Rt([Gt],Ne.prototype,"init"),Rt([Gt],Ne.prototype,"enable"),Rt([Gt],Ne.prototype,"disable"),Rt([Gt],Ne.prototype,"isSupported"),Rt([Gt],Ne.prototype,"setAnsMode"),Rt([Gt],Ne.prototype,"dump");var eo={};eo.d=function(A,I){for(var g in I)eo.o(I,g)&&!eo.o(A,g)&&Object.defineProperty(A,g,{enumerable:!0,get:I[g]})};eo.o=function(A,I){return Object.prototype.hasOwnProperty.call(A,I)};eo.r=function(A){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var _f={};eo.r(_f);eo.d(_f,{checkDevicePermission:()=>dMA,checkPermission:()=>lMA,getAudioDevices:()=>Hr,isScreenShareDevice:()=>kL,isScreenShareSupported:()=>$f,sleep:()=>nMA});const nMA=A=>{if(A<0)throw new Error("Sleep duration must be non-negative");return new Promise(I=>setTimeout(I,A))},lMA=async function(){let{audio:A=!0,video:I=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};try{return(await uI.enableDevices({audio:A,video:I})).audio}catch(g){return console.error("Failed to check device permissions:",g),!1}},dMA=async function(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return await uI.enableDevices({audio:!0,video:A})},Hr=async function(){let{video:A=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=[];return A?(I=await uI.enumerateDevices(),$f()&&I.push({deviceId:"screenShare",kind:"videoinput",label:"Screen Share",groupId:"screenShare"})):I=await[...await uI.enumerateAudioCaptureDevices(),...await uI.enumerateAudioPlaybackDevices()],I!=null&&I.length?{audioInputs:I.filter(g=>g.deviceId&&g.kind==="audioinput"),audioOutputs:I.filter(g=>g.deviceId&&g.kind==="audiooutput"),videoInputs:I.filter(g=>g.deviceId&&g.kind==="videoinput")}:{audioInputs:[],audioOutputs:[],videoInputs:[]}},kL=A=>A==="screenShare";function $f(){var A,I;return!!(!((I=navigator)===null||I===void 0||(A=I.mediaDevices)===null||A===void 0)&&A.getDisplayMedia)}var A5=function(A){return A.ALL="realtime.event",A.ALL_CLIENT="client.*",A.ALL_SERVER="server.*",A.CONNECTED="client.connected",A.CONNECTING="client.connecting",A.INTERRUPTED="client.interrupted",A.DISCONNECTED="client.disconnected",A.AUDIO_UNMUTED="client.audio.unmuted",A.AUDIO_MUTED="client.audio.muted",A.VIDEO_ON="client.video.on",A.VIDEO_OFF="client.video.off",A.PLAYER_EVENT="client.video.event",A.ERROR="client.error",A.SUPPRESS_STATIONARY_NOISE="client.suppress.stationary.noise",A.SUPPRESS_NON_STATIONARY_NOISE="client.suppress.non.stationary.noise",A.AUDIO_INPUT_DEVICE_CHANGED="client.input.device.changed",A.AUDIO_OUTPUT_DEVICE_CHANGED="client.output.device.changed",A.VIDEO_INPUT_DEVICE_CHANGED="client.video.input.device.changed",A.NETWORK_QUALITY="client.network.quality",A.BOT_JOIN="server.bot.join",A.BOT_LEAVE="server.bot.leave",A.AUDIO_AGENT_SPEECH_STARTED="server.audio.agent.speech_started",A.AUDIO_AGENT_SPEECH_STOPPED="server.audio.agent.speech_stopped",A.SERVER_ERROR="server.error",A.AUDIO_USER_SPEECH_STARTED="server.audio.user.speech_started",A.AUDIO_USER_SPEECH_STOPPED="server.audio.user.speech_stopped",A.SESSION_CREATED="server.session.created",A.SESSION_UPDATE="server.session.update",A}(A5||{});const ZA=A5;var iB=function(A){return A.DEVICE_ACCESS_ERROR="DEVICE_ACCESS_ERROR",A.STREAM_CREATION_ERROR="STREAM_CREATION_ERROR",A.CONNECTION_ERROR="CONNECTION_ERROR",A.DISCONNECTION_ERROR="DISCONNECTION_ERROR",A.INTERRUPT_ERROR="INTERRUPT_ERROR",A.EVENT_HANDLER_ERROR="EVENT_HANDLER_ERROR",A.PERMISSION_DENIED="PERMISSION_DENIED",A.NETWORK_ERROR="NETWORK_ERROR",A.INVALID_STATE="INVALID_STATE",A.CREATE_ROOM_ERROR="CREATE_ROOM_ERROR",A.PARSE_MESSAGE_ERROR="PARSE_MESSAGE_ERROR",A.HANDLER_MESSAGE_ERROR="HANDLER_MESSAGE_ERROR",A}({});class OB extends Error{constructor(I,g,C){super(`[${I}] ${g}`),this.name="RealtimeAPIError",this.code=I,this.error=C}}class I5{clearEventHandlers(){this.eventHandlers={}}on(I,g){return this._log(`on ${I} event`),this.eventHandlers[I]=this.eventHandlers[I]||[],this.eventHandlers[I].push(g),g}off(I,g){this._log(`off ${I} event`);const C=this.eventHandlers[I]||[];if(g){const Q=C.indexOf(g);if(Q===-1){console.warn(`Could not turn off specified event listener for "${I}": not found as a listener`);return}C.splice(Q,1)}else delete this.eventHandlers[I]}_dispatchToHandlers(I,g,C,Q){for(const B of C)if(!Q||I.startsWith(Q))try{B(I,g)}catch{throw new OB(iB.HANDLER_MESSAGE_ERROR,`Failed to handle message: ${I}`)}}dispatch(I,g){(!(arguments.length>2)||arguments[2]===void 0||arguments[2])&&this._log(`dispatch ${I} event`,g);const Q=(this.eventHandlers[I]||[]).slice();this._dispatchToHandlers(I,g,Q);const B=(this.eventHandlers[ZA.ALL]||[]).slice();this._dispatchToHandlers(I,g,B);const E=(this.eventHandlers[ZA.ALL_CLIENT]||[]).slice();this._dispatchToHandlers(I,g,E,"client.");const i=(this.eventHandlers[ZA.ALL_SERVER]||[]).slice();this._dispatchToHandlers(I,g,i,"server.")}_log(I,g){this._debug&&console.log(`[RealtimeClient] ${I}`,g)}constructor(I=!1){this.eventHandlers={},this._debug=I}}class hMA extends I5{bindEngineEvents(){this.engine.on(uI.events.onUserMessageReceived,this.handleMessage),this.engine.on(uI.events.onUserJoined,this.handleUserJoin),this.engine.on(uI.events.onUserLeave,this.handleUserLeave),this.engine.on(uI.events.onError,this.handleEventError),this.engine.on(uI.events.onNetworkQuality,this.handleNetworkQuality),this._isSupportVideo&&this.engine.on(uI.events.onPlayerEvent,this.handlePlayerEvent),this._debug&&(this.engine.on(uI.events.onLocalAudioPropertiesReport,this.handleLocalAudioPropertiesReport),this.engine.on(uI.events.onRemoteAudioPropertiesReport,this.handleRemoteAudioPropertiesReport))}removeEventListener(){this.engine.off(uI.events.onUserMessageReceived,this.handleMessage),this.engine.off(uI.events.onUserJoined,this.handleUserJoin),this.engine.off(uI.events.onUserLeave,this.handleUserLeave),this.engine.off(uI.events.onError,this.handleEventError),this.engine.off(uI.events.onNetworkQuality,this.handleNetworkQuality),this._isSupportVideo&&this.engine.off(uI.events.onPlayerEvent,this.handlePlayerEvent),this._debug&&(this.engine.off(uI.events.onLocalAudioPropertiesReport,this.handleLocalAudioPropertiesReport),this.engine.off(uI.events.onRemoteAudioPropertiesReport,this.handleRemoteAudioPropertiesReport))}_parseMessage(I){try{return JSON.parse(I.message)}catch(g){throw new OB(iB.PARSE_MESSAGE_ERROR,(g==null?void 0:g.message)||"Unknown error")}}handleMessage(I){try{const g=this._parseMessage(I);this.dispatch(`server.${g.event_type}`,g)}catch(g){g instanceof OB?g.code===iB.PARSE_MESSAGE_ERROR?this.dispatch(ZA.ERROR,{message:`Failed to parse message: ${I.message}`,error:g}):g.code===iB.HANDLER_MESSAGE_ERROR&&this.dispatch(ZA.ERROR,{message:`Failed to handle message: ${I.message}`,error:g}):this.dispatch(ZA.ERROR,g)}}handleEventError(I){this.dispatch(ZA.ERROR,I)}handleUserJoin(I){this.joinUserId=I.userInfo.userId,this.dispatch(ZA.BOT_JOIN,I)}handleUserLeave(I){this.dispatch(ZA.BOT_LEAVE,I)}handlePlayerEvent(I){this.dispatch(ZA.PLAYER_EVENT,I)}handleNetworkQuality(I,g){this.dispatch(ZA.NETWORK_QUALITY,{uplinkNetworkQuality:I,downlinkNetworkQuality:g})}async joinRoom(I){const{token:g,roomId:C,uid:Q,audioMutedDefault:B,videoOnDefault:E,isAutoSubscribeAudio:i}=I;try{await this.engine.joinRoom(g,C,{userId:Q},{isAutoPublish:!B,isAutoSubscribeAudio:i,isAutoSubscribeVideo:this._isSupportVideo&&E})}catch(e){if(e instanceof Error)throw new OB(iB.CONNECTION_ERROR,e.message)}}async setAudioInputDevice(I){if((await Hr()).audioInputs.findIndex(C=>C.deviceId===I)===-1)throw new OB(iB.DEVICE_ACCESS_ERROR,`Audio input device not found: ${I}`);this.engine.stopAudioCapture(),await this.engine.startAudioCapture(I)}async setAudioOutputDevice(I){if((await Hr({video:!1})).audioOutputs.findIndex(C=>C.deviceId===I)===-1)throw new OB(iB.DEVICE_ACCESS_ERROR,`Audio output device not found: ${I}`);await this.engine.setAudioPlaybackDevice(I)}async setVideoInputDevice(I){let g=!(arguments.length>1)||arguments[1]===void 0||arguments[1];var C;if((await Hr({video:!0})).videoInputs.findIndex(E=>E.deviceId===I)===-1)throw new OB(iB.DEVICE_ACCESS_ERROR,`Video input device not found: ${I}`);if(await this.changeVideoState(!1),kL(I)){if(this._streamIndex===F.STREAM_INDEX_MAIN&&this.engine.setLocalVideoPlayer(F.STREAM_INDEX_MAIN),g){var B;this.engine.setVideoSourceType(F.STREAM_INDEX_SCREEN,Wg.VIDEO_SOURCE_TYPE_INTERNAL),await this.engine.startScreenCapture((B=this._videoConfig)===null||B===void 0?void 0:B.screenConfig),await this.engine.publishScreen(iA.VIDEO)}this._streamIndex=F.STREAM_INDEX_SCREEN}else this._streamIndex===F.STREAM_INDEX_SCREEN&&this.engine.setLocalVideoPlayer(F.STREAM_INDEX_SCREEN),g&&await this.engine.startVideoCapture(I),this._streamIndex=F.STREAM_INDEX_MAIN;this.engine.setLocalVideoPlayer(this._streamIndex,{renderDom:((C=this._videoConfig)===null||C===void 0?void 0:C.renderDom)||"local-player",userId:this._roomUserId})}async createLocalStream(I,g){this._roomUserId=I;const C=await Hr({video:this._isSupportVideo});if(!C.audioInputs.length)throw new OB(iB.DEVICE_ACCESS_ERROR,"Failed to get audio devices");if(this._isSupportVideo&&!C.videoInputs.length)throw new OB(iB.DEVICE_ACCESS_ERROR,"Failed to get video devices");await this.engine.startAudioCapture(C.audioInputs[0].deviceId),this._isSupportVideo&&this.setVideoInputDevice((g==null?void 0:g.videoInputDeviceId)||C.videoInputs[0].deviceId,g==null?void 0:g.videoOnDefault)}async disconnect(){try{await this.engine.leaveRoom(),this.removeEventListener(),this.clearEventHandlers(),uI.destroyEngine(this.engine)}catch(I){throw this.dispatch(ZA.ERROR,I),I}}async changeAudioState(I){try{I?await this.engine.publishStream(iA.AUDIO):await this.engine.unpublishStream(iA.AUDIO)}catch(g){throw this.dispatch(ZA.ERROR,g),g}}async changeVideoState(I){try{if(I)if(this._streamIndex===F.STREAM_INDEX_MAIN)await this.engine.startVideoCapture();else{var g;this.engine.setVideoSourceType(F.STREAM_INDEX_SCREEN,Wg.VIDEO_SOURCE_TYPE_INTERNAL),await this.engine.startScreenCapture((g=this._videoConfig)===null||g===void 0?void 0:g.screenConfig),await this.engine.publishScreen(iA.VIDEO)}else this._streamIndex===F.STREAM_INDEX_MAIN?await this.engine.stopVideoCapture():(await this.engine.stopScreenCapture(),await this.engine.unpublishScreen(iA.VIDEO))}catch(C){throw this.dispatch(ZA.ERROR,C),C}}async stop(){try{const I=await this.engine.sendUserMessage(this.joinUserId,JSON.stringify({id:"event_1",event_type:"conversation.chat.cancel",data:{}}));this._log(`interrupt ${this.joinUserId} ${I}`)}catch(I){throw this.dispatch(ZA.ERROR,I),I}}async sendMessage(I){try{const g=await this.engine.sendUserMessage(this.joinUserId,JSON.stringify(I));this._log(`sendMessage ${this.joinUserId} ${JSON.stringify(I)} ${g}`)}catch(g){throw this.dispatch(ZA.ERROR,g),g}}enableAudioPropertiesReport(I){this.engine.enableAudioPropertiesReport(I)}handleLocalAudioPropertiesReport(I){var g,C;this._debug&&((C=I[0])===null||C===void 0||(g=C.audioPropertiesInfo)===null||g===void 0?void 0:g.linearVolume)>0&&console.log("handleLocalAudioPropertiesReport",I)}handleRemoteAudioPropertiesReport(I){this._debug&&console.log("handleRemoteAudioPropertiesReport",I)}async enableAudioNoiseReduction(){var I;await((I=this.engine)===null||I===void 0?void 0:I.setAudioCaptureConfig({noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0}))}async initAIAnsExtension(){const I=new Ne;await this.engine.registerExtension(I),this._AIAnsExtension=I}changeAIAnsExtension(I){if(I){var g;(g=this._AIAnsExtension)===null||g===void 0||g.enable()}else{var C;(C=this._AIAnsExtension)===null||C===void 0||C.disable()}}async startAudioPlaybackDeviceTest(){try{await this.engine.startAudioPlaybackDeviceTest("audio-test.wav",200)}catch(I){throw this.dispatch(ZA.ERROR,I),I}}stopAudioPlaybackDeviceTest(){try{this.engine.stopAudioPlaybackDeviceTest()}catch(I){throw this.dispatch(ZA.ERROR,I),I}}getRtcEngine(){return this.engine}constructor(I,g=!1,C=!1,Q=!1,B){super(g),this.joinUserId="",this._AIAnsExtension=null,this._isSupportVideo=!1,C&&uI.setParameter("ICE_CONFIG_REQUEST_URLS",["rtc-test.bytedance.com"]),this.engine=uI.createEngine(I),this.handleMessage=this.handleMessage.bind(this),this.handleUserJoin=this.handleUserJoin.bind(this),this.handleUserLeave=this.handleUserLeave.bind(this),this.handleEventError=this.handleEventError.bind(this),this.handlePlayerEvent=this.handlePlayerEvent.bind(this),this.handleNetworkQuality=this.handleNetworkQuality.bind(this),this.handleLocalAudioPropertiesReport=this.handleLocalAudioPropertiesReport.bind(this),this.handleRemoteAudioPropertiesReport=this.handleRemoteAudioPropertiesReport.bind(this),this._isSupportVideo=Q,this._videoConfig=B}}const DMA="6705332c79516e015e3e5f0c";class SXA extends I5{async connect(){var I;const{botId:g,conversationId:C,voiceId:Q,getRoomInfo:B}=this._config;this.dispatch(ZA.CONNECTING,{});let E;try{if(B)E=await B();else{let t;this._config.videoConfig&&(t=kL(this._config.videoConfig.videoInputDeviceId)?{video_config:{stream_video_type:"screen"}}:{video_config:{stream_video_type:"main"}}),E=await this._api.audio.rooms.create({bot_id:g,conversation_id:C||void 0,voice_id:Q&&Q.length>0?Q:void 0,connector_id:this._config.connectorId,uid:this._config.userId||void 0,workflow_id:this._config.workflowId||void 0,config:t})}}catch(t){throw this.dispatch(ZA.ERROR,t),new OB(iB.CREATE_ROOM_ERROR,t instanceof Error?t.message:"Unknown error",t)}if(this._isTestEnv=DMA===E.app_id,this._client=new hMA(E.app_id,this._config.debug,this._isTestEnv,this._isSupportVideo,this._config.videoConfig),this._client.bindEngineEvents(),this._client.on(ZA.ALL,(t,s)=>{this.dispatch(t,s,!1)}),this._config.suppressStationaryNoise&&(await this._client.enableAudioNoiseReduction(),this.dispatch(ZA.SUPPRESS_STATIONARY_NOISE,{})),this._config.suppressNonStationaryNoise)try{await this._client.initAIAnsExtension(),this._client.changeAIAnsExtension(!0),this.dispatch(ZA.SUPPRESS_NON_STATIONARY_NOISE,{})}catch(t){console.warn("Config suppressNonStationaryNoise is not supported",t)}var i,e,o;await this._client.joinRoom({token:E.token,roomId:E.room_id,uid:E.uid,audioMutedDefault:(i=this._config.audioMutedDefault)!==null&&i!==void 0&&i,videoOnDefault:(e=(I=this._config.videoConfig)===null||I===void 0?void 0:I.videoOnDefault)===null||e===void 0||e,isAutoSubscribeAudio:(o=this._config.isAutoSubscribeAudio)===null||o===void 0||o}),await this._client.createLocalStream(E.uid,this._config.videoConfig),this.isConnected=!0,this.dispatch(ZA.CONNECTED,{roomId:E.room_id,uid:E.uid,token:E.token,appId:E.app_id})}async interrupt(){var I;await((I=this._client)===null||I===void 0?void 0:I.stop()),this.dispatch(ZA.INTERRUPTED,{})}async disconnect(){var I;await((I=this._client)===null||I===void 0?void 0:I.disconnect()),this.isConnected=!1,this._client=null,this.dispatch(ZA.DISCONNECTED,{})}async sendMessage(I){var g;await((g=this._client)===null||g===void 0?void 0:g.sendMessage(I));const C=typeof I.event_type=="string"?I.event_type:"unknown_event";this.dispatch(`client.${C}`,I)}async setAudioEnable(I){var g;await((g=this._client)===null||g===void 0?void 0:g.changeAudioState(I)),I?this.dispatch(ZA.AUDIO_UNMUTED,{}):this.dispatch(ZA.AUDIO_MUTED,{})}async setVideoEnable(I){var g;await((g=this._client)===null||g===void 0?void 0:g.changeVideoState(I)),I?this.dispatch(ZA.VIDEO_ON,{}):this.dispatch(ZA.VIDEO_OFF,{})}enableAudioPropertiesReport(I){if(this._config.debug){var g;return(g=this._client)===null||g===void 0||g.enableAudioPropertiesReport(I),!0}return console.warn("enableAudioPropertiesReport is not supported in non-debug mode"),!1}async startAudioPlaybackDeviceTest(){if(this._config.debug){var I;await((I=this._client)===null||I===void 0?void 0:I.startAudioPlaybackDeviceTest())}else console.warn("startAudioPlaybackDeviceTest is not supported in non-debug mode")}stopAudioPlaybackDeviceTest(){if(this._config.debug){var I;(I=this._client)===null||I===void 0||I.stopAudioPlaybackDeviceTest()}else console.warn("stopAudioPlaybackDeviceTest is not supported in non-debug mode")}async setAudioInputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setAudioInputDevice(I)),this.dispatch(ZA.AUDIO_INPUT_DEVICE_CHANGED,{deviceId:I})}async setAudioOutputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setAudioOutputDevice(I)),this.dispatch(ZA.AUDIO_OUTPUT_DEVICE_CHANGED,{deviceId:I})}async setVideoInputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setVideoInputDevice(I)),this.dispatch(ZA.VIDEO_INPUT_DEVICE_CHANGED,{deviceId:I})}getRtcEngine(){var I;return(I=this._client)===null||I===void 0?void 0:I.getRtcEngine()}constructor(I){super(I.debug),this._client=null,this.isConnected=!1,this._isTestEnv=!1,this._isSupportVideo=!1,this._config=I;var g;const C=(g=this._config.baseURL)!==null&&g!==void 0?g:"https://api.coze.cn";this._config.baseURL=C,this._api=new v6({token:this._config.accessToken,baseURL:C,allowPersonalAccessTokenInBrowser:this._config.allowPersonalAccessTokenInBrowser}),this._isSupportVideo=!!I.videoConfig}}class oo extends Error{constructor(I,g){const C=new.target.prototype;super(`${I}: Status code '${g}'`),this.statusCode=g,this.__proto__=C}}class pL extends Error{constructor(I="A timeout occurred."){const g=new.target.prototype;super(I),this.__proto__=g}}class uB extends Error{constructor(I="An abort occurred."){const g=new.target.prototype;super(I),this.__proto__=g}}class uMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="UnsupportedTransportError",this.__proto__=C}}class bMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="DisabledTransportError",this.__proto__=C}}class yMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="FailedToStartTransportError",this.__proto__=C}}class BZ extends Error{constructor(I){const g=new.target.prototype;super(I),this.errorType="FailedToNegotiateWithServerError",this.__proto__=g}}class wMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.innerErrors=g,this.__proto__=C}}class g5{constructor(I,g,C){this.statusCode=I,this.statusText=g,this.content=C}}class od{get(I,g){return this.send({...g,method:"GET",url:I})}post(I,g){return this.send({...g,method:"POST",url:I})}delete(I,g){return this.send({...g,method:"DELETE",url:I})}getCookieString(I){return""}}var M;(function(A){A[A.Trace=0]="Trace",A[A.Debug=1]="Debug",A[A.Information=2]="Information",A[A.Warning=3]="Warning",A[A.Error=4]="Error",A[A.Critical=5]="Critical",A[A.None=6]="None"})(M||(M={}));class CP{constructor(){}log(I,g){}}CP.instance=new CP;const mMA="8.0.7";class Ig{static isRequired(I,g){if(I==null)throw new Error(`The '${g}' argument is required.`)}static isNotEmpty(I,g){if(!I||I.match(/^\s*$/))throw new Error(`The '${g}' argument should not be empty.`)}static isIn(I,g,C){if(!(I in g))throw new Error(`Unknown ${C} value: ${I}.`)}}class SI{static get isBrowser(){return!SI.isNode&&typeof window=="object"&&typeof window.document=="object"}static get isWebWorker(){return!SI.isNode&&typeof self=="object"&&"importScripts"in self}static get isReactNative(){return!SI.isNode&&typeof window=="object"&&typeof window.document>"u"}static get isNode(){return typeof process<"u"&&process.release&&process.release.name==="node"}}function QP(A,I){let g="";return Go(A)?(g=`Binary data of length ${A.byteLength}`,I&&(g+=`. Content: '${GMA(A)}'`)):typeof A=="string"&&(g=`String data of length ${A.length}`,I&&(g+=`. Content: '${A}'`)),g}function GMA(A){const I=new Uint8Array(A);let g="";return I.forEach(C=>{const Q=C<16?"0":"";g+=`0x${Q}${C.toString(16)} `}),g.substr(0,g.length-1)}function Go(A){return A&&typeof ArrayBuffer<"u"&&(A instanceof ArrayBuffer||A.constructor&&A.constructor.name==="ArrayBuffer")}async function C5(A,I,g,C,Q,B){const E={},[i,e]=Av();E[i]=e,A.log(M.Trace,`(${I} transport) sending data. ${QP(Q,B.logMessageContent)}.`);const o=Go(Q)?"arraybuffer":"text",t=await g.post(C,{content:Q,headers:{...E,...B.headers},responseType:o,timeout:B.timeout,withCredentials:B.withCredentials});A.log(M.Trace,`(${I} transport) request complete. Response status: ${t.statusCode}.`)}function RMA(A){return A===void 0?new H9(M.Information):A===null?CP.instance:A.log!==void 0?A:new H9(A)}class LMA{constructor(I,g){this._subject=I,this._observer=g}dispose(){const I=this._subject.observers.indexOf(this._observer);I>-1&&this._subject.observers.splice(I,1),this._subject.observers.length===0&&this._subject.cancelCallback&&this._subject.cancelCallback().catch(g=>{})}}class H9{constructor(I){this._minLevel=I,this.out=console}log(I,g){if(I>=this._minLevel){const C=`[${new Date().toISOString()}] ${M[I]}: ${g}`;switch(I){case M.Critical:case M.Error:this.out.error(C);break;case M.Warning:this.out.warn(C);break;case M.Information:this.out.info(C);break;default:this.out.log(C);break}}}}function Av(){let A="X-SignalR-User-Agent";return SI.isNode&&(A="User-Agent"),[A,SMA(mMA,TMA(),FMA(),UMA())]}function SMA(A,I,g,C){let Q="Microsoft SignalR/";const B=A.split(".");return Q+=`${B[0]}.${B[1]}`,Q+=` (${A}; `,I&&I!==""?Q+=`${I}; `:Q+="Unknown OS; ",Q+=`${g}`,C?Q+=`; ${C}`:Q+="; Unknown Runtime Version",Q+=")",Q}function TMA(){if(SI.isNode)switch(process.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return process.platform}else return""}function UMA(){if(SI.isNode)return process.versions.node}function FMA(){return SI.isNode?"NodeJS":"Browser"}function jb(A){return A.stack?A.stack:A.message?A.message:`${A}`}function YMA(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("could not find global")}class kMA extends od{constructor(I){if(super(),this._logger=I,typeof fetch>"u"||SI.isNode){const g=typeof __webpack_require__=="function"?__non_webpack_require__:require;this._jar=new(g("tough-cookie")).CookieJar,typeof fetch>"u"?this._fetchType=g("node-fetch"):this._fetchType=fetch,this._fetchType=g("fetch-cookie")(this._fetchType,this._jar)}else this._fetchType=fetch.bind(YMA());if(typeof AbortController>"u"){const g=typeof __webpack_require__=="function"?__non_webpack_require__:require;this._abortControllerType=g("abort-controller")}else this._abortControllerType=AbortController}async send(I){if(I.abortSignal&&I.abortSignal.aborted)throw new uB;if(!I.method)throw new Error("No method defined.");if(!I.url)throw new Error("No url defined.");const g=new this._abortControllerType;let C;I.abortSignal&&(I.abortSignal.onabort=()=>{g.abort(),C=new uB});let Q=null;if(I.timeout){const e=I.timeout;Q=setTimeout(()=>{g.abort(),this._logger.log(M.Warning,"Timeout from HTTP request."),C=new pL},e)}I.content===""&&(I.content=void 0),I.content&&(I.headers=I.headers||{},Go(I.content)?I.headers["Content-Type"]="application/octet-stream":I.headers["Content-Type"]="text/plain;charset=UTF-8");let B;try{B=await this._fetchType(I.url,{body:I.content,cache:"no-cache",credentials:I.withCredentials===!0?"include":"same-origin",headers:{"X-Requested-With":"XMLHttpRequest",...I.headers},method:I.method,mode:"cors",redirect:"follow",signal:g.signal})}catch(e){throw C||(this._logger.log(M.Warning,`Error from HTTP request. ${e}.`),e)}finally{Q&&clearTimeout(Q),I.abortSignal&&(I.abortSignal.onabort=null)}if(!B.ok){const e=await EZ(B,"text");throw new oo(e||B.statusText,B.status)}const i=await EZ(B,I.responseType);return new g5(B.status,B.statusText,i)}getCookieString(I){let g="";return SI.isNode&&this._jar&&this._jar.getCookies(I,(C,Q)=>g=Q.join("; ")),g}}function EZ(A,I){let g;switch(I){case"arraybuffer":g=A.arrayBuffer();break;case"text":g=A.text();break;case"blob":case"document":case"json":throw new Error(`${I} is not supported.`);default:g=A.text();break}return g}class pMA extends od{constructor(I){super(),this._logger=I}send(I){return I.abortSignal&&I.abortSignal.aborted?Promise.reject(new uB):I.method?I.url?new Promise((g,C)=>{const Q=new XMLHttpRequest;Q.open(I.method,I.url,!0),Q.withCredentials=I.withCredentials===void 0?!0:I.withCredentials,Q.setRequestHeader("X-Requested-With","XMLHttpRequest"),I.content===""&&(I.content=void 0),I.content&&(Go(I.content)?Q.setRequestHeader("Content-Type","application/octet-stream"):Q.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));const B=I.headers;B&&Object.keys(B).forEach(E=>{Q.setRequestHeader(E,B[E])}),I.responseType&&(Q.responseType=I.responseType),I.abortSignal&&(I.abortSignal.onabort=()=>{Q.abort(),C(new uB)}),I.timeout&&(Q.timeout=I.timeout),Q.onload=()=>{I.abortSignal&&(I.abortSignal.onabort=null),Q.status>=200&&Q.status<300?g(new g5(Q.status,Q.statusText,Q.response||Q.responseText)):C(new oo(Q.response||Q.responseText||Q.statusText,Q.status))},Q.onerror=()=>{this._logger.log(M.Warning,`Error from HTTP request. ${Q.status}: ${Q.statusText}.`),C(new oo(Q.statusText,Q.status))},Q.ontimeout=()=>{this._logger.log(M.Warning,"Timeout from HTTP request."),C(new pL)},Q.send(I.content)}):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}}class NMA extends od{constructor(I){if(super(),typeof fetch<"u"||SI.isNode)this._httpClient=new kMA(I);else if(typeof XMLHttpRequest<"u")this._httpClient=new pMA(I);else throw new Error("No usable HttpClient found.")}send(I){return I.abortSignal&&I.abortSignal.aborted?Promise.reject(new uB):I.method?I.url?this._httpClient.send(I):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}getCookieString(I){return this._httpClient.getCookieString(I)}}class $C{static write(I){return`${I}${$C.RecordSeparator}`}static parse(I){if(I[I.length-1]!==$C.RecordSeparator)throw new Error("Message is incomplete.");const g=I.split($C.RecordSeparator);return g.pop(),g}}$C.RecordSeparatorCode=30;$C.RecordSeparator=String.fromCharCode($C.RecordSeparatorCode);class ZMA{writeHandshakeRequest(I){return $C.write(JSON.stringify(I))}parseHandshakeResponse(I){let g,C;if(Go(I)){const i=new Uint8Array(I),e=i.indexOf($C.RecordSeparatorCode);if(e===-1)throw new Error("Message is incomplete.");const o=e+1;g=String.fromCharCode.apply(null,Array.prototype.slice.call(i.slice(0,o))),C=i.byteLength>o?i.slice(o).buffer:null}else{const i=I,e=i.indexOf($C.RecordSeparator);if(e===-1)throw new Error("Message is incomplete.");const o=e+1;g=i.substring(0,o),C=i.length>o?i.substring(o):null}const Q=$C.parse(g),B=JSON.parse(Q[0]);if(B.type)throw new Error("Expected a handshake response from the server.");return[C,B]}}var wA;(function(A){A[A.Invocation=1]="Invocation",A[A.StreamItem=2]="StreamItem",A[A.Completion=3]="Completion",A[A.StreamInvocation=4]="StreamInvocation",A[A.CancelInvocation=5]="CancelInvocation",A[A.Ping=6]="Ping",A[A.Close=7]="Close",A[A.Ack=8]="Ack",A[A.Sequence=9]="Sequence"})(wA||(wA={}));class KMA{constructor(){this.observers=[]}next(I){for(const g of this.observers)g.next(I)}error(I){for(const g of this.observers)g.error&&g.error(I)}complete(){for(const I of this.observers)I.complete&&I.complete()}subscribe(I){return this.observers.push(I),new LMA(this,I)}}class JMA{constructor(I,g,C){this._bufferSize=1e5,this._messages=[],this._totalMessageCount=0,this._waitForSequenceMessage=!1,this._nextReceivingSequenceId=1,this._latestReceivedSequenceId=0,this._bufferedByteCount=0,this._reconnectInProgress=!1,this._protocol=I,this._connection=g,this._bufferSize=C}async _send(I){const g=this._protocol.writeMessage(I);let C=Promise.resolve();if(this._isInvocationMessage(I)){this._totalMessageCount++;let Q=()=>{},B=()=>{};Go(g)?this._bufferedByteCount+=g.byteLength:this._bufferedByteCount+=g.length,this._bufferedByteCount>=this._bufferSize&&(C=new Promise((E,i)=>{Q=E,B=i})),this._messages.push(new WMA(g,this._totalMessageCount,Q,B))}try{this._reconnectInProgress||await this._connection.send(g)}catch{this._disconnected()}await C}_ack(I){let g=-1;for(let C=0;Cthis._nextReceivingSequenceId){this._connection.stop(new Error("Sequence ID greater than amount of messages we've received."));return}this._nextReceivingSequenceId=I.sequenceId}_disconnected(){this._reconnectInProgress=!0,this._waitForSequenceMessage=!0}async _resend(){const I=this._messages.length!==0?this._messages[0]._id:this._totalMessageCount+1;await this._connection.send(this._protocol.writeMessage({type:wA.Sequence,sequenceId:I}));const g=this._messages;for(const C of g)await this._connection.send(C._message);this._reconnectInProgress=!1}_dispose(I){I??(I=new Error("Unable to reconnect to server."));for(const g of this._messages)g._rejector(I)}_isInvocationMessage(I){switch(I.type){case wA.Invocation:case wA.StreamItem:case wA.Completion:case wA.StreamInvocation:case wA.CancelInvocation:return!0;case wA.Close:case wA.Sequence:case wA.Ping:case wA.Ack:return!1}}_ackTimer(){this._ackTimerHandle===void 0&&(this._ackTimerHandle=setTimeout(async()=>{try{this._reconnectInProgress||await this._connection.send(this._protocol.writeMessage({type:wA.Ack,sequenceId:this._latestReceivedSequenceId}))}catch{}clearTimeout(this._ackTimerHandle),this._ackTimerHandle=void 0},1e3))}}class WMA{constructor(I,g,C,Q){this._message=I,this._id=g,this._resolver=C,this._rejector=Q}}const VMA=30*1e3,zMA=15*1e3,MMA=1e5;var DI;(function(A){A.Disconnected="Disconnected",A.Connecting="Connecting",A.Connected="Connected",A.Disconnecting="Disconnecting",A.Reconnecting="Reconnecting"})(DI||(DI={}));class NL{static create(I,g,C,Q,B,E,i){return new NL(I,g,C,Q,B,E,i)}constructor(I,g,C,Q,B,E,i){this._nextKeepAlive=0,this._freezeEventListener=()=>{this._logger.log(M.Warning,"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep")},Ig.isRequired(I,"connection"),Ig.isRequired(g,"logger"),Ig.isRequired(C,"protocol"),this.serverTimeoutInMilliseconds=B??VMA,this.keepAliveIntervalInMilliseconds=E??zMA,this._statefulReconnectBufferSize=i??MMA,this._logger=g,this._protocol=C,this.connection=I,this._reconnectPolicy=Q,this._handshakeProtocol=new ZMA,this.connection.onreceive=e=>this._processIncomingData(e),this.connection.onclose=e=>this._connectionClosed(e),this._callbacks={},this._methods={},this._closedCallbacks=[],this._reconnectingCallbacks=[],this._reconnectedCallbacks=[],this._invocationId=0,this._receivedHandshakeResponse=!1,this._connectionState=DI.Disconnected,this._connectionStarted=!1,this._cachedPingMessage=this._protocol.writeMessage({type:wA.Ping})}get state(){return this._connectionState}get connectionId(){return this.connection&&this.connection.connectionId||null}get baseUrl(){return this.connection.baseUrl||""}set baseUrl(I){if(this._connectionState!==DI.Disconnected&&this._connectionState!==DI.Reconnecting)throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");if(!I)throw new Error("The HubConnection url must be a valid url.");this.connection.baseUrl=I}start(){return this._startPromise=this._startWithStateTransitions(),this._startPromise}async _startWithStateTransitions(){if(this._connectionState!==DI.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=DI.Connecting,this._logger.log(M.Debug,"Starting HubConnection.");try{await this._startInternal(),SI.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=DI.Connected,this._connectionStarted=!0,this._logger.log(M.Debug,"HubConnection connected successfully.")}catch(I){return this._connectionState=DI.Disconnected,this._logger.log(M.Debug,`HubConnection failed to start successfully because of error '${I}'.`),Promise.reject(I)}}async _startInternal(){this._stopDuringStartError=void 0,this._receivedHandshakeResponse=!1;const I=new Promise((g,C)=>{this._handshakeResolver=g,this._handshakeRejecter=C});await this.connection.start(this._protocol.transferFormat);try{let g=this._protocol.version;this.connection.features.reconnect||(g=1);const C={protocol:this._protocol.name,version:g};if(this._logger.log(M.Debug,"Sending handshake request."),await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(C)),this._logger.log(M.Information,`Using HubProtocol '${this._protocol.name}'.`),this._cleanupTimeout(),this._resetTimeoutPeriod(),this._resetKeepAliveInterval(),await I,this._stopDuringStartError)throw this._stopDuringStartError;(this.connection.features.reconnect||!1)&&(this._messageBuffer=new JMA(this._protocol,this.connection,this._statefulReconnectBufferSize),this.connection.features.disconnected=this._messageBuffer._disconnected.bind(this._messageBuffer),this.connection.features.resend=()=>{if(this._messageBuffer)return this._messageBuffer._resend()}),this.connection.features.inherentKeepAlive||await this._sendMessage(this._cachedPingMessage)}catch(g){throw this._logger.log(M.Debug,`Hub handshake failed with error '${g}' during start(). Stopping HubConnection.`),this._cleanupTimeout(),this._cleanupPingTimer(),await this.connection.stop(g),g}}async stop(){const I=this._startPromise;this.connection.features.reconnect=!1,this._stopPromise=this._stopInternal(),await this._stopPromise;try{await I}catch{}}_stopInternal(I){if(this._connectionState===DI.Disconnected)return this._logger.log(M.Debug,`Call to HubConnection.stop(${I}) ignored because it is already in the disconnected state.`),Promise.resolve();if(this._connectionState===DI.Disconnecting)return this._logger.log(M.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;const g=this._connectionState;return this._connectionState=DI.Disconnecting,this._logger.log(M.Debug,"Stopping HubConnection."),this._reconnectDelayHandle?(this._logger.log(M.Debug,"Connection stopped during reconnect delay. Done reconnecting."),clearTimeout(this._reconnectDelayHandle),this._reconnectDelayHandle=void 0,this._completeClose(),Promise.resolve()):(g===DI.Connected&&this._sendCloseMessage(),this._cleanupTimeout(),this._cleanupPingTimer(),this._stopDuringStartError=I||new uB("The connection was stopped before the hub handshake could complete."),this.connection.stop(I))}async _sendCloseMessage(){try{await this._sendWithProtocol(this._createCloseMessage())}catch{}}stream(I,...g){const[C,Q]=this._replaceStreamingParams(g),B=this._createStreamInvocation(I,g,Q);let E;const i=new KMA;return i.cancelCallback=()=>{const e=this._createCancelInvocation(B.invocationId);return delete this._callbacks[B.invocationId],E.then(()=>this._sendWithProtocol(e))},this._callbacks[B.invocationId]=(e,o)=>{if(o){i.error(o);return}else e&&(e.type===wA.Completion?e.error?i.error(new Error(e.error)):i.complete():i.next(e.item))},E=this._sendWithProtocol(B).catch(e=>{i.error(e),delete this._callbacks[B.invocationId]}),this._launchStreams(C,E),i}_sendMessage(I){return this._resetKeepAliveInterval(),this.connection.send(I)}_sendWithProtocol(I){return this._messageBuffer?this._messageBuffer._send(I):this._sendMessage(this._protocol.writeMessage(I))}send(I,...g){const[C,Q]=this._replaceStreamingParams(g),B=this._sendWithProtocol(this._createInvocation(I,g,!0,Q));return this._launchStreams(C,B),B}invoke(I,...g){const[C,Q]=this._replaceStreamingParams(g),B=this._createInvocation(I,g,!1,Q);return new Promise((i,e)=>{this._callbacks[B.invocationId]=(t,s)=>{if(s){e(s);return}else t&&(t.type===wA.Completion?t.error?e(new Error(t.error)):i(t.result):e(new Error(`Unexpected message type: ${t.type}`)))};const o=this._sendWithProtocol(B).catch(t=>{e(t),delete this._callbacks[B.invocationId]});this._launchStreams(C,o)})}on(I,g){!I||!g||(I=I.toLowerCase(),this._methods[I]||(this._methods[I]=[]),this._methods[I].indexOf(g)===-1&&this._methods[I].push(g))}off(I,g){if(!I)return;I=I.toLowerCase();const C=this._methods[I];if(C)if(g){const Q=C.indexOf(g);Q!==-1&&(C.splice(Q,1),C.length===0&&delete this._methods[I])}else delete this._methods[I]}onclose(I){I&&this._closedCallbacks.push(I)}onreconnecting(I){I&&this._reconnectingCallbacks.push(I)}onreconnected(I){I&&this._reconnectedCallbacks.push(I)}_processIncomingData(I){if(this._cleanupTimeout(),this._receivedHandshakeResponse||(I=this._processHandshakeResponse(I),this._receivedHandshakeResponse=!0),I){const g=this._protocol.parseMessages(I,this._logger);for(const C of g)if(!(this._messageBuffer&&!this._messageBuffer._shouldProcessMessage(C)))switch(C.type){case wA.Invocation:this._invokeClientMethod(C).catch(Q=>{this._logger.log(M.Error,`Invoke client method threw error: ${jb(Q)}`)});break;case wA.StreamItem:case wA.Completion:{const Q=this._callbacks[C.invocationId];if(Q){C.type===wA.Completion&&delete this._callbacks[C.invocationId];try{Q(C)}catch(B){this._logger.log(M.Error,`Stream callback threw error: ${jb(B)}`)}}break}case wA.Ping:break;case wA.Close:{this._logger.log(M.Information,"Close message received from server.");const Q=C.error?new Error("Server returned an error on close: "+C.error):void 0;C.allowReconnect===!0?this.connection.stop(Q):this._stopPromise=this._stopInternal(Q);break}case wA.Ack:this._messageBuffer&&this._messageBuffer._ack(C);break;case wA.Sequence:this._messageBuffer&&this._messageBuffer._resetSequence(C);break;default:this._logger.log(M.Warning,`Invalid message type: ${C.type}.`);break}}this._resetTimeoutPeriod()}_processHandshakeResponse(I){let g,C;try{[C,g]=this._handshakeProtocol.parseHandshakeResponse(I)}catch(Q){const B="Error parsing handshake response: "+Q;this._logger.log(M.Error,B);const E=new Error(B);throw this._handshakeRejecter(E),E}if(g.error){const Q="Server returned handshake error: "+g.error;this._logger.log(M.Error,Q);const B=new Error(Q);throw this._handshakeRejecter(B),B}else this._logger.log(M.Debug,"Server handshake complete.");return this._handshakeResolver(),C}_resetKeepAliveInterval(){this.connection.features.inherentKeepAlive||(this._nextKeepAlive=new Date().getTime()+this.keepAliveIntervalInMilliseconds,this._cleanupPingTimer())}_resetTimeoutPeriod(){if((!this.connection.features||!this.connection.features.inherentKeepAlive)&&(this._timeoutHandle=setTimeout(()=>this.serverTimeout(),this.serverTimeoutInMilliseconds),this._pingServerHandle===void 0)){let I=this._nextKeepAlive-new Date().getTime();I<0&&(I=0),this._pingServerHandle=setTimeout(async()=>{if(this._connectionState===DI.Connected)try{await this._sendMessage(this._cachedPingMessage)}catch{this._cleanupPingTimer()}},I)}}serverTimeout(){this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server."))}async _invokeClientMethod(I){const g=I.target.toLowerCase(),C=this._methods[g];if(!C){this._logger.log(M.Warning,`No client method with the name '${g}' found.`),I.invocationId&&(this._logger.log(M.Warning,`No result given for '${g}' method and invocation ID '${I.invocationId}'.`),await this._sendWithProtocol(this._createCompletionMessage(I.invocationId,"Client didn't provide a result.",null)));return}const Q=C.slice(),B=!!I.invocationId;let E,i,e;for(const o of Q)try{const t=E;E=await o.apply(this,I.arguments),B&&E&&t&&(this._logger.log(M.Error,`Multiple results provided for '${g}'. Sending error to server.`),e=this._createCompletionMessage(I.invocationId,"Client provided multiple results.",null)),i=void 0}catch(t){i=t,this._logger.log(M.Error,`A callback for the method '${g}' threw error '${t}'.`)}e?await this._sendWithProtocol(e):B?(i?e=this._createCompletionMessage(I.invocationId,`${i}`,null):E!==void 0?e=this._createCompletionMessage(I.invocationId,null,E):(this._logger.log(M.Warning,`No result given for '${g}' method and invocation ID '${I.invocationId}'.`),e=this._createCompletionMessage(I.invocationId,"Client didn't provide a result.",null)),await this._sendWithProtocol(e)):E&&this._logger.log(M.Error,`Result given for '${g}' method but server is not expecting a result.`)}_connectionClosed(I){this._logger.log(M.Debug,`HubConnection.connectionClosed(${I}) called while in state ${this._connectionState}.`),this._stopDuringStartError=this._stopDuringStartError||I||new uB("The underlying connection was closed before the hub handshake could complete."),this._handshakeResolver&&this._handshakeResolver(),this._cancelCallbacksWithError(I||new Error("Invocation canceled due to the underlying connection being closed.")),this._cleanupTimeout(),this._cleanupPingTimer(),this._connectionState===DI.Disconnecting?this._completeClose(I):this._connectionState===DI.Connected&&this._reconnectPolicy?this._reconnect(I):this._connectionState===DI.Connected&&this._completeClose(I)}_completeClose(I){if(this._connectionStarted){this._connectionState=DI.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(I??new Error("Connection closed.")),this._messageBuffer=void 0),SI.isBrowser&&window.document.removeEventListener("freeze",this._freezeEventListener);try{this._closedCallbacks.forEach(g=>g.apply(this,[I]))}catch(g){this._logger.log(M.Error,`An onclose callback called with error '${I}' threw error '${g}'.`)}}}async _reconnect(I){const g=Date.now();let C=0,Q=I!==void 0?I:new Error("Attempting to reconnect due to a unknown error."),B=this._getNextRetryDelay(C++,0,Q);if(B===null){this._logger.log(M.Debug,"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt."),this._completeClose(I);return}if(this._connectionState=DI.Reconnecting,I?this._logger.log(M.Information,`Connection reconnecting because of error '${I}'.`):this._logger.log(M.Information,"Connection reconnecting."),this._reconnectingCallbacks.length!==0){try{this._reconnectingCallbacks.forEach(E=>E.apply(this,[I]))}catch(E){this._logger.log(M.Error,`An onreconnecting callback called with error '${I}' threw error '${E}'.`)}if(this._connectionState!==DI.Reconnecting){this._logger.log(M.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.");return}}for(;B!==null;){if(this._logger.log(M.Information,`Reconnect attempt number ${C} will start in ${B} ms.`),await new Promise(E=>{this._reconnectDelayHandle=setTimeout(E,B)}),this._reconnectDelayHandle=void 0,this._connectionState!==DI.Reconnecting){this._logger.log(M.Debug,"Connection left the reconnecting state during reconnect delay. Done reconnecting.");return}try{if(await this._startInternal(),this._connectionState=DI.Connected,this._logger.log(M.Information,"HubConnection reconnected successfully."),this._reconnectedCallbacks.length!==0)try{this._reconnectedCallbacks.forEach(E=>E.apply(this,[this.connection.connectionId]))}catch(E){this._logger.log(M.Error,`An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${E}'.`)}return}catch(E){if(this._logger.log(M.Information,`Reconnect attempt failed because of error '${E}'.`),this._connectionState!==DI.Reconnecting){this._logger.log(M.Debug,`Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`),this._connectionState===DI.Disconnecting&&this._completeClose();return}Q=E instanceof Error?E:new Error(E.toString()),B=this._getNextRetryDelay(C++,Date.now()-g,Q)}}this._logger.log(M.Information,`Reconnect retries have been exhausted after ${Date.now()-g} ms and ${C} failed attempts. Connection disconnecting.`),this._completeClose()}_getNextRetryDelay(I,g,C){try{return this._reconnectPolicy.nextRetryDelayInMilliseconds({elapsedMilliseconds:g,previousRetryCount:I,retryReason:C})}catch(Q){return this._logger.log(M.Error,`IRetryPolicy.nextRetryDelayInMilliseconds(${I}, ${g}) threw error '${Q}'.`),null}}_cancelCallbacksWithError(I){const g=this._callbacks;this._callbacks={},Object.keys(g).forEach(C=>{const Q=g[C];try{Q(null,I)}catch(B){this._logger.log(M.Error,`Stream 'error' callback called with '${I}' threw error: ${jb(B)}`)}})}_cleanupPingTimer(){this._pingServerHandle&&(clearTimeout(this._pingServerHandle),this._pingServerHandle=void 0)}_cleanupTimeout(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}_createInvocation(I,g,C,Q){if(C)return Q.length!==0?{arguments:g,streamIds:Q,target:I,type:wA.Invocation}:{arguments:g,target:I,type:wA.Invocation};{const B=this._invocationId;return this._invocationId++,Q.length!==0?{arguments:g,invocationId:B.toString(),streamIds:Q,target:I,type:wA.Invocation}:{arguments:g,invocationId:B.toString(),target:I,type:wA.Invocation}}}_launchStreams(I,g){if(I.length!==0){g||(g=Promise.resolve());for(const C in I)I[C].subscribe({complete:()=>{g=g.then(()=>this._sendWithProtocol(this._createCompletionMessage(C)))},error:Q=>{let B;Q instanceof Error?B=Q.message:Q&&Q.toString?B=Q.toString():B="Unknown error",g=g.then(()=>this._sendWithProtocol(this._createCompletionMessage(C,B)))},next:Q=>{g=g.then(()=>this._sendWithProtocol(this._createStreamItemMessage(C,Q)))}})}}_replaceStreamingParams(I){const g=[],C=[];for(let Q=0;Q0)&&(g=!1,this._accessToken=await this._accessTokenFactory()),this._setAuthorizationHeader(I);const C=await this._innerClient.send(I);return g&&C.statusCode===401&&this._accessTokenFactory?(this._accessToken=await this._accessTokenFactory(),this._setAuthorizationHeader(I),await this._innerClient.send(I)):C}_setAuthorizationHeader(I){I.headers||(I.headers={}),this._accessToken?I.headers[to.Authorization]=`Bearer ${this._accessToken}`:this._accessTokenFactory&&I.headers[to.Authorization]&&delete I.headers[to.Authorization]}getCookieString(I){return this._innerClient.getCookieString(I)}}var eg;(function(A){A[A.None=0]="None",A[A.WebSockets=1]="WebSockets",A[A.ServerSentEvents=2]="ServerSentEvents",A[A.LongPolling=4]="LongPolling"})(eg||(eg={}));var zg;(function(A){A[A.Text=1]="Text",A[A.Binary=2]="Binary"})(zg||(zg={}));let fMA=class{constructor(){this._isAborted=!1,this.onabort=null}abort(){this._isAborted||(this._isAborted=!0,this.onabort&&this.onabort())}get signal(){return this}get aborted(){return this._isAborted}};class eZ{get pollAborted(){return this._pollAbort.aborted}constructor(I,g,C){this._httpClient=I,this._logger=g,this._pollAbort=new fMA,this._options=C,this._running=!1,this.onreceive=null,this.onclose=null}async connect(I,g){if(Ig.isRequired(I,"url"),Ig.isRequired(g,"transferFormat"),Ig.isIn(g,zg,"transferFormat"),this._url=I,this._logger.log(M.Trace,"(LongPolling transport) Connecting."),g===zg.Binary&&typeof XMLHttpRequest<"u"&&typeof new XMLHttpRequest().responseType!="string")throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");const[C,Q]=Av(),B={[C]:Q,...this._options.headers},E={abortSignal:this._pollAbort.signal,headers:B,timeout:1e5,withCredentials:this._options.withCredentials};g===zg.Binary&&(E.responseType="arraybuffer");const i=`${I}&_=${Date.now()}`;this._logger.log(M.Trace,`(LongPolling transport) polling: ${i}.`);const e=await this._httpClient.get(i,E);e.statusCode!==200?(this._logger.log(M.Error,`(LongPolling transport) Unexpected response code: ${e.statusCode}.`),this._closeError=new oo(e.statusText||"",e.statusCode),this._running=!1):this._running=!0,this._receiving=this._poll(this._url,E)}async _poll(I,g){try{for(;this._running;)try{const C=`${I}&_=${Date.now()}`;this._logger.log(M.Trace,`(LongPolling transport) polling: ${C}.`);const Q=await this._httpClient.get(C,g);Q.statusCode===204?(this._logger.log(M.Information,"(LongPolling transport) Poll terminated by server."),this._running=!1):Q.statusCode!==200?(this._logger.log(M.Error,`(LongPolling transport) Unexpected response code: ${Q.statusCode}.`),this._closeError=new oo(Q.statusText||"",Q.statusCode),this._running=!1):Q.content?(this._logger.log(M.Trace,`(LongPolling transport) data received. ${QP(Q.content,this._options.logMessageContent)}.`),this.onreceive&&this.onreceive(Q.content)):this._logger.log(M.Trace,"(LongPolling transport) Poll timed out, reissuing.")}catch(C){this._running?C instanceof pL?this._logger.log(M.Trace,"(LongPolling transport) Poll timed out, reissuing."):(this._closeError=C,this._running=!1):this._logger.log(M.Trace,`(LongPolling transport) Poll errored after shutdown: ${C.message}`)}}finally{this._logger.log(M.Trace,"(LongPolling transport) Polling complete."),this.pollAborted||this._raiseOnClose()}}async send(I){return this._running?C5(this._logger,"LongPolling",this._httpClient,this._url,I,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}async stop(){this._logger.log(M.Trace,"(LongPolling transport) Stopping polling."),this._running=!1,this._pollAbort.abort();try{await this._receiving,this._logger.log(M.Trace,`(LongPolling transport) sending DELETE request to ${this._url}.`);const I={},[g,C]=Av();I[g]=C;const Q={headers:{...I,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials};let B;try{await this._httpClient.delete(this._url,Q)}catch(E){B=E}B?B instanceof oo&&(B.statusCode===404?this._logger.log(M.Trace,"(LongPolling transport) A 404 response was returned from sending a DELETE request."):this._logger.log(M.Trace,`(LongPolling transport) Error sending a DELETE request: ${B}`)):this._logger.log(M.Trace,"(LongPolling transport) DELETE request accepted.")}finally{this._logger.log(M.Trace,"(LongPolling transport) Stop finished."),this._raiseOnClose()}}_raiseOnClose(){if(this.onclose){let I="(LongPolling transport) Firing onclose event.";this._closeError&&(I+=" Error: "+this._closeError),this._logger.log(M.Trace,I),this.onclose(this._closeError)}}}class HMA{constructor(I,g,C,Q){this._httpClient=I,this._accessToken=g,this._logger=C,this._options=Q,this.onreceive=null,this.onclose=null}async connect(I,g){return Ig.isRequired(I,"url"),Ig.isRequired(g,"transferFormat"),Ig.isIn(g,zg,"transferFormat"),this._logger.log(M.Trace,"(SSE transport) Connecting."),this._url=I,this._accessToken&&(I+=(I.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(this._accessToken)}`),new Promise((C,Q)=>{let B=!1;if(g!==zg.Text){Q(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"));return}let E;if(SI.isBrowser||SI.isWebWorker)E=new this._options.EventSource(I,{withCredentials:this._options.withCredentials});else{const i=this._httpClient.getCookieString(I),e={};e.Cookie=i;const[o,t]=Av();e[o]=t,E=new this._options.EventSource(I,{withCredentials:this._options.withCredentials,headers:{...e,...this._options.headers}})}try{E.onmessage=i=>{if(this.onreceive)try{this._logger.log(M.Trace,`(SSE transport) data received. ${QP(i.data,this._options.logMessageContent)}.`),this.onreceive(i.data)}catch(e){this._close(e);return}},E.onerror=i=>{B?this._close():Q(new Error("EventSource failed to connect. The connection could not be found on the server, either the connection ID is not present on the server, or a proxy is refusing/buffering the connection. If you have multiple servers check that sticky sessions are enabled."))},E.onopen=()=>{this._logger.log(M.Information,`SSE connected to ${this._url}`),this._eventSource=E,B=!0,C()}}catch(i){Q(i);return}})}async send(I){return this._eventSource?C5(this._logger,"SSE",this._httpClient,this._url,I,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}stop(){return this._close(),Promise.resolve()}_close(I){this._eventSource&&(this._eventSource.close(),this._eventSource=void 0,this.onclose&&this.onclose(I))}}class xMA{constructor(I,g,C,Q,B,E){this._logger=C,this._accessTokenFactory=g,this._logMessageContent=Q,this._webSocketConstructor=B,this._httpClient=I,this.onreceive=null,this.onclose=null,this._headers=E}async connect(I,g){Ig.isRequired(I,"url"),Ig.isRequired(g,"transferFormat"),Ig.isIn(g,zg,"transferFormat"),this._logger.log(M.Trace,"(WebSockets transport) Connecting.");let C;return this._accessTokenFactory&&(C=await this._accessTokenFactory()),new Promise((Q,B)=>{I=I.replace(/^http/,"ws");let E;const i=this._httpClient.getCookieString(I);let e=!1;if(SI.isNode||SI.isReactNative){const o={},[t,s]=Av();o[t]=s,C&&(o[to.Authorization]=`Bearer ${C}`),i&&(o[to.Cookie]=i),E=new this._webSocketConstructor(I,void 0,{headers:{...o,...this._headers}})}else C&&(I+=(I.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(C)}`);E||(E=new this._webSocketConstructor(I)),g===zg.Binary&&(E.binaryType="arraybuffer"),E.onopen=o=>{this._logger.log(M.Information,`WebSocket connected to ${I}.`),this._webSocket=E,e=!0,Q()},E.onerror=o=>{let t=null;typeof ErrorEvent<"u"&&o instanceof ErrorEvent?t=o.error:t="There was an error with the transport",this._logger.log(M.Information,`(WebSockets transport) ${t}.`)},E.onmessage=o=>{if(this._logger.log(M.Trace,`(WebSockets transport) data received. ${QP(o.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(o.data)}catch(t){this._close(t);return}},E.onclose=o=>{if(e)this._close(o);else{let t=null;typeof ErrorEvent<"u"&&o instanceof ErrorEvent?t=o.error:t="WebSocket failed to connect. The connection could not be found on the server, either the endpoint may not be a SignalR endpoint, the connection ID is not present on the server, or there is a proxy blocking WebSockets. If you have multiple servers check that sticky sessions are enabled.",B(new Error(t))}}})}send(I){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(M.Trace,`(WebSockets transport) sending data. ${QP(I,this._logMessageContent)}.`),this._webSocket.send(I),Promise.resolve()):Promise.reject("WebSocket is not in the OPEN state")}stop(){return this._webSocket&&this._close(void 0),Promise.resolve()}_close(I){this._webSocket&&(this._webSocket.onclose=()=>{},this._webSocket.onmessage=()=>{},this._webSocket.onerror=()=>{},this._webSocket.close(),this._webSocket=void 0),this._logger.log(M.Trace,"(WebSockets transport) socket closed."),this.onclose&&(this._isCloseEvent(I)&&(I.wasClean===!1||I.code!==1e3)?this.onclose(new Error(`WebSocket closed with status code: ${I.code} (${I.reason||"no reason given"}).`)):I instanceof Error?this.onclose(I):this.onclose())}_isCloseEvent(I){return I&&typeof I.wasClean=="boolean"&&typeof I.code=="number"}}const oZ=100;class OMA{constructor(I,g={}){if(this._stopPromiseResolver=()=>{},this.features={},this._negotiateVersion=1,Ig.isRequired(I,"url"),this._logger=RMA(g.logger),this.baseUrl=this._resolveUrl(I),g=g||{},g.logMessageContent=g.logMessageContent===void 0?!1:g.logMessageContent,typeof g.withCredentials=="boolean"||g.withCredentials===void 0)g.withCredentials=g.withCredentials===void 0?!0:g.withCredentials;else throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");g.timeout=g.timeout===void 0?100*1e3:g.timeout;let C=null,Q=null;if(SI.isNode&&typeof require<"u"){const B=typeof __webpack_require__=="function"?__non_webpack_require__:require;C=B("ws"),Q=B("eventsource")}!SI.isNode&&typeof WebSocket<"u"&&!g.WebSocket?g.WebSocket=WebSocket:SI.isNode&&!g.WebSocket&&C&&(g.WebSocket=C),!SI.isNode&&typeof EventSource<"u"&&!g.EventSource?g.EventSource=EventSource:SI.isNode&&!g.EventSource&&typeof Q<"u"&&(g.EventSource=Q),this._httpClient=new jMA(g.httpClient||new NMA(this._logger),g.accessTokenFactory),this._connectionState="Disconnected",this._connectionStarted=!1,this._options=g,this.onreceive=null,this.onclose=null}async start(I){if(I=I||zg.Binary,Ig.isIn(I,zg,"transferFormat"),this._logger.log(M.Debug,`Starting connection with transfer format '${zg[I]}'.`),this._connectionState!=="Disconnected")return Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state."));if(this._connectionState="Connecting",this._startInternalPromise=this._startInternal(I),await this._startInternalPromise,this._connectionState==="Disconnecting"){const g="Failed to start the HttpConnection before stop() was called.";return this._logger.log(M.Error,g),await this._stopPromise,Promise.reject(new uB(g))}else if(this._connectionState!=="Connected"){const g="HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";return this._logger.log(M.Error,g),Promise.reject(new uB(g))}this._connectionStarted=!0}send(I){return this._connectionState!=="Connected"?Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State.")):(this._sendQueue||(this._sendQueue=new ZL(this.transport)),this._sendQueue.send(I))}async stop(I){if(this._connectionState==="Disconnected")return this._logger.log(M.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnected state.`),Promise.resolve();if(this._connectionState==="Disconnecting")return this._logger.log(M.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;this._connectionState="Disconnecting",this._stopPromise=new Promise(g=>{this._stopPromiseResolver=g}),await this._stopInternal(I),await this._stopPromise}async _stopInternal(I){this._stopError=I;try{await this._startInternalPromise}catch{}if(this.transport){try{await this.transport.stop()}catch(g){this._logger.log(M.Error,`HttpConnection.transport.stop() threw error '${g}'.`),this._stopConnection()}this.transport=void 0}else this._logger.log(M.Debug,"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.")}async _startInternal(I){let g=this.baseUrl;this._accessTokenFactory=this._options.accessTokenFactory,this._httpClient._accessTokenFactory=this._accessTokenFactory;try{if(this._options.skipNegotiation)if(this._options.transport===eg.WebSockets)this.transport=this._constructTransport(eg.WebSockets),await this._startTransport(g,I);else throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");else{let C=null,Q=0;do{if(C=await this._getNegotiationResponse(g),this._connectionState==="Disconnecting"||this._connectionState==="Disconnected")throw new uB("The connection was stopped during negotiation.");if(C.error)throw new Error(C.error);if(C.ProtocolVersion)throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");if(C.url&&(g=C.url),C.accessToken){const B=C.accessToken;this._accessTokenFactory=()=>B,this._httpClient._accessToken=B,this._httpClient._accessTokenFactory=void 0}Q++}while(C.url&&Q0?Promise.reject(new wMA(`Unable to connect to the server with any of the available transports. ${E.join(" ")}`,E)):Promise.reject(new Error("None of the transports supported by the client are supported by the server."))}_constructTransport(I){switch(I){case eg.WebSockets:if(!this._options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new xMA(this._httpClient,this._accessTokenFactory,this._logger,this._options.logMessageContent,this._options.WebSocket,this._options.headers||{});case eg.ServerSentEvents:if(!this._options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new HMA(this._httpClient,this._httpClient._accessToken,this._logger,this._options);case eg.LongPolling:return new eZ(this._httpClient,this._logger,this._options);default:throw new Error(`Unknown transport: ${I}.`)}}_startTransport(I,g){return this.transport.onreceive=this.onreceive,this.features.reconnect?this.transport.onclose=async C=>{let Q=!1;if(this.features.reconnect)try{this.features.disconnected(),await this.transport.connect(I,g),await this.features.resend()}catch{Q=!0}else{this._stopConnection(C);return}Q&&this._stopConnection(C)}:this.transport.onclose=C=>this._stopConnection(C),this.transport.connect(I,g)}_resolveTransportOrError(I,g,C,Q){const B=eg[I.transport];if(B==null)return this._logger.log(M.Debug,`Skipping transport '${I.transport}' because it is not supported by this client.`),new Error(`Skipping transport '${I.transport}' because it is not supported by this client.`);if(qMA(g,B))if(I.transferFormats.map(i=>zg[i]).indexOf(C)>=0){if(B===eg.WebSockets&&!this._options.WebSocket||B===eg.ServerSentEvents&&!this._options.EventSource)return this._logger.log(M.Debug,`Skipping transport '${eg[B]}' because it is not supported in your environment.'`),new uMA(`'${eg[B]}' is not supported in your environment.`,B);this._logger.log(M.Debug,`Selecting transport '${eg[B]}'.`);try{return this.features.reconnect=B===eg.WebSockets?Q:void 0,this._constructTransport(B)}catch(i){return i}}else return this._logger.log(M.Debug,`Skipping transport '${eg[B]}' because it does not support the requested transfer format '${zg[C]}'.`),new Error(`'${eg[B]}' does not support ${zg[C]}.`);else return this._logger.log(M.Debug,`Skipping transport '${eg[B]}' because it was disabled by the client.`),new bMA(`'${eg[B]}' is disabled by the client.`,B)}_isITransport(I){return I&&typeof I=="object"&&"connect"in I}_stopConnection(I){if(this._logger.log(M.Debug,`HttpConnection.stopConnection(${I}) called while in state ${this._connectionState}.`),this.transport=void 0,I=this._stopError||I,this._stopError=void 0,this._connectionState==="Disconnected"){this._logger.log(M.Debug,`Call to HttpConnection.stopConnection(${I}) was ignored because the connection is already in the disconnected state.`);return}if(this._connectionState==="Connecting")throw this._logger.log(M.Warning,`Call to HttpConnection.stopConnection(${I}) was ignored because the connection is still in the connecting state.`),new Error(`HttpConnection.stopConnection(${I}) was called while the connection is still in the connecting state.`);if(this._connectionState==="Disconnecting"&&this._stopPromiseResolver(),I?this._logger.log(M.Error,`Connection disconnected with error '${I}'.`):this._logger.log(M.Information,"Connection disconnected."),this._sendQueue&&(this._sendQueue.stop().catch(g=>{this._logger.log(M.Error,`TransportSendQueue.stop() threw error '${g}'.`)}),this._sendQueue=void 0),this.connectionId=void 0,this._connectionState="Disconnected",this._connectionStarted){this._connectionStarted=!1;try{this.onclose&&this.onclose(I)}catch(g){this._logger.log(M.Error,`HttpConnection.onclose(${I}) threw error '${g}'.`)}}}_resolveUrl(I){if(I.lastIndexOf("https://",0)===0||I.lastIndexOf("http://",0)===0)return I;if(!SI.isBrowser)throw new Error(`Cannot resolve '${I}'.`);const g=window.document.createElement("a");return g.href=I,this._logger.log(M.Information,`Normalizing '${I}' to '${g.href}'.`),g.href}_resolveNegotiateUrl(I){const g=new URL(I);g.pathname.endsWith("/")?g.pathname+="negotiate":g.pathname+="/negotiate";const C=new URLSearchParams(g.searchParams);return C.has("negotiateVersion")||C.append("negotiateVersion",this._negotiateVersion.toString()),C.has("useStatefulReconnect")?C.get("useStatefulReconnect")==="true"&&(this._options._useStatefulReconnect=!0):this._options._useStatefulReconnect===!0&&C.append("useStatefulReconnect","true"),g.search=C.toString(),g.toString()}}function qMA(A,I){return!A||(I&A)!==0}class ZL{constructor(I){this._transport=I,this._buffer=[],this._executing=!0,this._sendBufferedData=new mn,this._transportResult=new mn,this._sendLoopPromise=this._sendLoop()}send(I){return this._bufferData(I),this._transportResult||(this._transportResult=new mn),this._transportResult.promise}stop(){return this._executing=!1,this._sendBufferedData.resolve(),this._sendLoopPromise}_bufferData(I){if(this._buffer.length&&typeof this._buffer[0]!=typeof I)throw new Error(`Expected data to be of type ${typeof this._buffer} but was of type ${typeof I}`);this._buffer.push(I),this._sendBufferedData.resolve()}async _sendLoop(){for(;;){if(await this._sendBufferedData.promise,!this._executing){this._transportResult&&this._transportResult.reject("Connection stopped.");break}this._sendBufferedData=new mn;const I=this._transportResult;this._transportResult=void 0;const g=typeof this._buffer[0]=="string"?this._buffer.join(""):ZL._concatBuffers(this._buffer);this._buffer.length=0;try{await this._transport.send(g),I.resolve()}catch(C){I.reject(C)}}}static _concatBuffers(I){const g=I.map(B=>B.byteLength).reduce((B,E)=>B+E),C=new Uint8Array(g);let Q=0;for(const B of I)C.set(new Uint8Array(B),Q),Q+=B.byteLength;return C.buffer}}class mn{constructor(){this.promise=new Promise((I,g)=>[this._resolver,this._rejecter]=[I,g])}resolve(){this._resolver()}reject(I){this._rejecter(I)}}const _MA="json";class $MA{constructor(){this.name=_MA,this.version=2,this.transferFormat=zg.Text}parseMessages(I,g){if(typeof I!="string")throw new Error("Invalid input for JSON hub protocol. Expected a string.");if(!I)return[];g===null&&(g=CP.instance);const C=$C.parse(I),Q=[];for(const B of C){const E=JSON.parse(B);if(typeof E.type!="number")throw new Error("Invalid payload.");switch(E.type){case wA.Invocation:this._isInvocationMessage(E);break;case wA.StreamItem:this._isStreamItemMessage(E);break;case wA.Completion:this._isCompletionMessage(E);break;case wA.Ping:break;case wA.Close:break;case wA.Ack:this._isAckMessage(E);break;case wA.Sequence:this._isSequenceMessage(E);break;default:g.log(M.Information,"Unknown message type '"+E.type+"' ignored.");continue}Q.push(E)}return Q}writeMessage(I){return $C.write(JSON.stringify(I))}_isInvocationMessage(I){this._assertNotEmptyString(I.target,"Invalid payload for Invocation message."),I.invocationId!==void 0&&this._assertNotEmptyString(I.invocationId,"Invalid payload for Invocation message.")}_isStreamItemMessage(I){if(this._assertNotEmptyString(I.invocationId,"Invalid payload for StreamItem message."),I.item===void 0)throw new Error("Invalid payload for StreamItem message.")}_isCompletionMessage(I){if(I.result&&I.error)throw new Error("Invalid payload for Completion message.");!I.result&&I.error&&this._assertNotEmptyString(I.error,"Invalid payload for Completion message."),this._assertNotEmptyString(I.invocationId,"Invalid payload for Completion message.")}_isAckMessage(I){if(typeof I.sequenceId!="number")throw new Error("Invalid SequenceId for Ack message.")}_isSequenceMessage(I){if(typeof I.sequenceId!="number")throw new Error("Invalid SequenceId for Sequence message.")}_assertNotEmptyString(I,g){if(typeof I!="string"||I==="")throw new Error(g)}}const AXA={trace:M.Trace,debug:M.Debug,info:M.Information,information:M.Information,warn:M.Warning,warning:M.Warning,error:M.Error,critical:M.Critical,none:M.None};function IXA(A){const I=AXA[A.toLowerCase()];if(typeof I<"u")return I;throw new Error(`Unknown log level: ${A}`)}class UXA{configureLogging(I){if(Ig.isRequired(I,"logging"),gXA(I))this.logger=I;else if(typeof I=="string"){const g=IXA(I);this.logger=new H9(g)}else this.logger=new H9(I);return this}withUrl(I,g){return Ig.isRequired(I,"url"),Ig.isNotEmpty(I,"url"),this.url=I,typeof g=="object"?this.httpConnectionOptions={...this.httpConnectionOptions,...g}:this.httpConnectionOptions={...this.httpConnectionOptions,transport:g},this}withHubProtocol(I){return Ig.isRequired(I,"protocol"),this.protocol=I,this}withAutomaticReconnect(I){if(this.reconnectPolicy)throw new Error("A reconnectPolicy has already been set.");return I?Array.isArray(I)?this.reconnectPolicy=new iZ(I):this.reconnectPolicy=I:this.reconnectPolicy=new iZ,this}withServerTimeout(I){return Ig.isRequired(I,"milliseconds"),this._serverTimeoutInMilliseconds=I,this}withKeepAliveInterval(I){return Ig.isRequired(I,"milliseconds"),this._keepAliveIntervalInMilliseconds=I,this}withStatefulReconnect(I){return this.httpConnectionOptions===void 0&&(this.httpConnectionOptions={}),this.httpConnectionOptions._useStatefulReconnect=!0,this._statefulReconnectBufferSize=I==null?void 0:I.bufferSize,this}build(){const I=this.httpConnectionOptions||{};if(I.logger===void 0&&(I.logger=this.logger),!this.url)throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection.");const g=new OMA(this.url,I);return NL.create(g,this.logger||CP.instance,this.protocol||new $MA,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}function gXA(A){return A.log!==void 0}export{UXA as H,M as L,QXA as O,EXA as R,YH as a,eXA as b,BXA as c,Uq as d,ZA as e,RXA as f,OB as g,iB as h,SXA as i,CXA as j,iXA as k,AA as r,oXA as t,_f as u}; diff --git a/build/assets/.pnpm-CAIuqsZ0.js b/build/assets/.pnpm-CAIuqsZ0.js new file mode 100644 index 0000000..212068d --- /dev/null +++ b/build/assets/.pnpm-CAIuqsZ0.js @@ -0,0 +1,186 @@ +function LW(A,I){for(var g=0;gC[Q]})}}}return Object.freeze(Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}))}var L9=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Qd(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var SW={exports:{}},id={},TW={exports:{}},VA={};/** + * @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. + */var Ac=Symbol.for("react.element"),_x=Symbol.for("react.portal"),$x=Symbol.for("react.fragment"),AO=Symbol.for("react.strict_mode"),IO=Symbol.for("react.profiler"),gO=Symbol.for("react.provider"),CO=Symbol.for("react.context"),QO=Symbol.for("react.forward_ref"),iO=Symbol.for("react.suspense"),BO=Symbol.for("react.memo"),EO=Symbol.for("react.lazy"),QT=Symbol.iterator;function eO(A){return A===null||typeof A!="object"?null:(A=QT&&A[QT]||A["@@iterator"],typeof A=="function"?A:null)}var pW={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},FW=Object.assign,UW={};function Js(A,I,g){this.props=A,this.context=I,this.refs=UW,this.updater=g||pW}Js.prototype.isReactComponent={};Js.prototype.setState=function(A,I){if(typeof A!="object"&&typeof A!="function"&&A!=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,A,I,"setState")};Js.prototype.forceUpdate=function(A){this.updater.enqueueForceUpdate(this,A,"forceUpdate")};function kW(){}kW.prototype=Js.prototype;function SR(A,I,g){this.props=A,this.context=I,this.refs=UW,this.updater=g||pW}var TR=SR.prototype=new kW;TR.constructor=SR;FW(TR,Js.prototype);TR.isPureReactComponent=!0;var iT=Array.isArray,YW=Object.prototype.hasOwnProperty,pR={current:null},NW={key:!0,ref:!0,__self:!0,__source:!0};function ZW(A,I,g){var C,Q={},i=null,B=null;if(I!=null)for(C in I.ref!==void 0&&(B=I.ref),I.key!==void 0&&(i=""+I.key),I)YW.call(I,C)&&!NW.hasOwnProperty(C)&&(Q[C]=I[C]);var E=arguments.length-2;if(E===1)Q.children=g;else if(1>>1,QA=N[CA];if(0>>1;CAQ(lA,w))HQ(tA,lA)?(N[CA]=tA,N[H]=w,CA=H):(N[CA]=lA,N[cA]=w,CA=cA);else if(HQ(tA,w))N[CA]=tA,N[H]=w,CA=H;else break A}}return z}function Q(N,z){var w=N.sortIndex-z.sortIndex;return w!==0?w:N.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;A.unstable_now=function(){return i.now()}}else{var B=Date,E=B.now();A.unstable_now=function(){return B.now()-E}}var e=[],t=[],o=1,r=null,s=3,v=!1,n=!1,a=!1,c=typeof setTimeout=="function"?setTimeout:null,P=typeof clearTimeout=="function"?clearTimeout:null,d=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(N){for(var z=g(t);z!==null;){if(z.callback===null)C(t);else if(z.startTime<=N)C(t),z.sortIndex=z.expirationTime,I(e,z);else break;z=g(t)}}function u(N){if(a=!1,h(N),!n)if(g(e)!==null)n=!0,J(D);else{var z=g(t);z!==null&&V(u,z.startTime-N)}}function D(N,z){n=!1,a&&(a=!1,P(G),G=-1),v=!0;var w=s;try{for(h(z),r=g(e);r!==null&&(!(r.expirationTime>z)||N&&!F());){var CA=r.callback;if(typeof CA=="function"){r.callback=null,s=r.priorityLevel;var QA=CA(r.expirationTime<=z);z=A.unstable_now(),typeof QA=="function"?r.callback=QA:r===g(e)&&C(e),h(z)}else C(e);r=g(e)}if(r!==null)var R=!0;else{var cA=g(t);cA!==null&&V(u,cA.startTime-z),R=!1}return R}finally{r=null,s=w,v=!1}}var y=!1,b=null,G=-1,L=5,m=-1;function F(){return!(A.unstable_now()-mN||125CA?(N.sortIndex=w,I(t,N),g(e)===null&&N===g(t)&&(a?(P(G),G=-1):a=!0,V(u,w-CA))):(N.sortIndex=QA,I(e,N),n||v||(n=!0,J(D))),N},A.unstable_shouldYield=F,A.unstable_wrapCallback=function(N){var z=s;return function(){var w=s;s=z;try{return N.apply(this,arguments)}finally{s=w}}}})(zW);VW.exports=zW;var hO=VW.exports;/** + * @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. + */var uO=k,UQ=hO;function BA(A){for(var I="https://reactjs.org/docs/error-decoder.html?invariant="+A,g=1;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Gm=Object.prototype.hasOwnProperty,DO=/^[: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]*$/,ET={},eT={};function bO(A){return Gm.call(eT,A)?!0:Gm.call(ET,A)?!1:DO.test(A)?eT[A]=!0:(ET[A]=!0,!1)}function yO(A,I,g,C){if(g!==null&&g.type===0)return!1;switch(typeof I){case"function":case"symbol":return!0;case"boolean":return C?!1:g!==null?!g.acceptsBooleans:(A=A.toLowerCase().slice(0,5),A!=="data-"&&A!=="aria-");default:return!1}}function mO(A,I,g,C){if(I===null||typeof I>"u"||yO(A,I,g,C))return!0;if(C)return!1;if(g!==null)switch(g.type){case 3:return!I;case 4:return I===!1;case 5:return isNaN(I);case 6:return isNaN(I)||1>I}return!1}function YC(A,I,g,C,Q,i,B){this.acceptsBooleans=I===2||I===3||I===4,this.attributeName=C,this.attributeNamespace=Q,this.mustUseProperty=g,this.propertyName=A,this.type=I,this.sanitizeURL=i,this.removeEmptyString=B}var Og={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(A){Og[A]=new YC(A,0,!1,A,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(A){var I=A[0];Og[I]=new YC(I,1,!1,A[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(A){Og[A]=new YC(A,2,!1,A.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(A){Og[A]=new YC(A,2,!1,A,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(A){Og[A]=new YC(A,3,!1,A.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(A){Og[A]=new YC(A,3,!0,A,null,!1,!1)});["capture","download"].forEach(function(A){Og[A]=new YC(A,4,!1,A,null,!1,!1)});["cols","rows","size","span"].forEach(function(A){Og[A]=new YC(A,6,!1,A,null,!1,!1)});["rowSpan","start"].forEach(function(A){Og[A]=new YC(A,5,!1,A.toLowerCase(),null,!1,!1)});var UR=/[\-:]([a-z])/g;function kR(A){return A[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(A){var I=A.replace(UR,kR);Og[I]=new YC(I,1,!1,A,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(A){var I=A.replace(UR,kR);Og[I]=new YC(I,1,!1,A,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(A){var I=A.replace(UR,kR);Og[I]=new YC(I,1,!1,A,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(A){Og[A]=new YC(A,1,!1,A.toLowerCase(),null,!1,!1)});Og.xlinkHref=new YC("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(A){Og[A]=new YC(A,1,!1,A.toLowerCase(),null,!0,!0)});function YR(A,I,g,C){var Q=Og.hasOwnProperty(I)?Og[I]:null;(Q!==null?Q.type!==0:C||!(2E||Q[B]!==i[E]){var e=` +`+Q[B].replace(" at new "," at ");return A.displayName&&e.includes("")&&(e=e.replace("",A.displayName)),e}while(1<=B&&0<=E);break}}}finally{Uh=!1,Error.prepareStackTrace=g}return(A=A?A.displayName||A.name:"")?va(A):""}function wO(A){switch(A.tag){case 5:return va(A.type);case 16:return va("Lazy");case 13:return va("Suspense");case 19:return va("SuspenseList");case 0:case 2:case 15:return A=kh(A.type,!1),A;case 11:return A=kh(A.type.render,!1),A;case 1:return A=kh(A.type,!0),A;default:return""}}function Tm(A){if(A==null)return null;if(typeof A=="function")return A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case wr:return"Fragment";case mr:return"Portal";case Rm:return"Profiler";case NR:return"StrictMode";case Lm:return"Suspense";case Sm:return"SuspenseList"}if(typeof A=="object")switch(A.$$typeof){case jW:return(A.displayName||"Context")+".Consumer";case fW:return(A._context.displayName||"Context")+".Provider";case ZR:var I=A.render;return A=A.displayName,A||(A=I.displayName||I.name||"",A=A!==""?"ForwardRef("+A+")":"ForwardRef"),A;case KR:return I=A.displayName||null,I!==null?I:Tm(A.type)||"Memo";case HE:I=A._payload,A=A._init;try{return Tm(A(I))}catch{}}return null}function GO(A){var I=A.type;switch(A.tag){case 24:return"Cache";case 9:return(I.displayName||"Context")+".Consumer";case 10:return(I._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return A=I.render,A=A.displayName||A.name||"",I.displayName||(A!==""?"ForwardRef("+A+")":"ForwardRef");case 7:return"Fragment";case 5:return I;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Tm(I);case 8:return I===NR?"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 I=="function")return I.displayName||I.name||null;if(typeof I=="string")return I}return null}function Re(A){switch(typeof A){case"boolean":case"number":case"string":case"undefined":return A;case"object":return A;default:return""}}function HW(A){var I=A.type;return(A=A.nodeName)&&A.toLowerCase()==="input"&&(I==="checkbox"||I==="radio")}function RO(A){var I=HW(A)?"checked":"value",g=Object.getOwnPropertyDescriptor(A.constructor.prototype,I),C=""+A[I];if(!A.hasOwnProperty(I)&&typeof g<"u"&&typeof g.get=="function"&&typeof g.set=="function"){var Q=g.get,i=g.set;return Object.defineProperty(A,I,{configurable:!0,get:function(){return Q.call(this)},set:function(B){C=""+B,i.call(this,B)}}),Object.defineProperty(A,I,{enumerable:g.enumerable}),{getValue:function(){return C},setValue:function(B){C=""+B},stopTracking:function(){A._valueTracker=null,delete A[I]}}}}function $c(A){A._valueTracker||(A._valueTracker=RO(A))}function xW(A){if(!A)return!1;var I=A._valueTracker;if(!I)return!0;var g=I.getValue(),C="";return A&&(C=HW(A)?A.checked?"true":"false":A.value),A=C,A!==g?(I.setValue(A),!0):!1}function S9(A){if(A=A||(typeof document<"u"?document:void 0),typeof A>"u")return null;try{return A.activeElement||A.body}catch{return A.body}}function pm(A,I){var g=I.checked;return XI({},I,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:g??A._wrapperState.initialChecked})}function oT(A,I){var g=I.defaultValue==null?"":I.defaultValue,C=I.checked!=null?I.checked:I.defaultChecked;g=Re(I.value!=null?I.value:g),A._wrapperState={initialChecked:C,initialValue:g,controlled:I.type==="checkbox"||I.type==="radio"?I.checked!=null:I.value!=null}}function OW(A,I){I=I.checked,I!=null&&YR(A,"checked",I,!1)}function Fm(A,I){OW(A,I);var g=Re(I.value),C=I.type;if(g!=null)C==="number"?(g===0&&A.value===""||A.value!=g)&&(A.value=""+g):A.value!==""+g&&(A.value=""+g);else if(C==="submit"||C==="reset"){A.removeAttribute("value");return}I.hasOwnProperty("value")?Um(A,I.type,g):I.hasOwnProperty("defaultValue")&&Um(A,I.type,Re(I.defaultValue)),I.checked==null&&I.defaultChecked!=null&&(A.defaultChecked=!!I.defaultChecked)}function rT(A,I,g){if(I.hasOwnProperty("value")||I.hasOwnProperty("defaultValue")){var C=I.type;if(!(C!=="submit"&&C!=="reset"||I.value!==void 0&&I.value!==null))return;I=""+A._wrapperState.initialValue,g||I===A.value||(A.value=I),A.defaultValue=I}g=A.name,g!==""&&(A.name=""),A.defaultChecked=!!A._wrapperState.initialChecked,g!==""&&(A.name=g)}function Um(A,I,g){(I!=="number"||S9(A.ownerDocument)!==A)&&(g==null?A.defaultValue=""+A._wrapperState.initialValue:A.defaultValue!==""+g&&(A.defaultValue=""+g))}var aa=Array.isArray;function qr(A,I,g,C){if(A=A.options,I){I={};for(var Q=0;Q"+I.valueOf().toString()+"",I=Al.firstChild;A.firstChild;)A.removeChild(A.firstChild);for(;I.firstChild;)A.appendChild(I.firstChild)}});function Pn(A,I){if(I){var g=A.firstChild;if(g&&g===A.lastChild&&g.nodeType===3){g.nodeValue=I;return}}A.textContent=I}var Za={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},LO=["Webkit","ms","Moz","O"];Object.keys(Za).forEach(function(A){LO.forEach(function(I){I=I+A.charAt(0).toUpperCase()+A.substring(1),Za[I]=Za[A]})});function AJ(A,I,g){return I==null||typeof I=="boolean"||I===""?"":g||typeof I!="number"||I===0||Za.hasOwnProperty(A)&&Za[A]?(""+I).trim():I+"px"}function IJ(A,I){A=A.style;for(var g in I)if(I.hasOwnProperty(g)){var C=g.indexOf("--")===0,Q=AJ(g,I[g],C);g==="float"&&(g="cssFloat"),C?A.setProperty(g,Q):A[g]=Q}}var SO=XI({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 Nm(A,I){if(I){if(SO[A]&&(I.children!=null||I.dangerouslySetInnerHTML!=null))throw Error(BA(137,A));if(I.dangerouslySetInnerHTML!=null){if(I.children!=null)throw Error(BA(60));if(typeof I.dangerouslySetInnerHTML!="object"||!("__html"in I.dangerouslySetInnerHTML))throw Error(BA(61))}if(I.style!=null&&typeof I.style!="object")throw Error(BA(62))}}function Zm(A,I){if(A.indexOf("-")===-1)return typeof I.is=="string";switch(A){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 Km=null;function WR(A){return A=A.target||A.srcElement||window,A.correspondingUseElement&&(A=A.correspondingUseElement),A.nodeType===3?A.parentNode:A}var Wm=null,_r=null,$r=null;function aT(A){if(A=Cc(A)){if(typeof Wm!="function")throw Error(BA(280));var I=A.stateNode;I&&(I=od(I),Wm(A.stateNode,A.type,I))}}function gJ(A){_r?$r?$r.push(A):$r=[A]:_r=A}function CJ(){if(_r){var A=_r,I=$r;if($r=_r=null,aT(A),I)for(A=0;A>>=0,A===0?32:31-(JO(A)/VO|0)|0}var Il=64,gl=4194304;function na(A){switch(A&-A){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 A&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return A&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return A}}function U9(A,I){var g=A.pendingLanes;if(g===0)return 0;var C=0,Q=A.suspendedLanes,i=A.pingedLanes,B=g&268435455;if(B!==0){var E=B&~Q;E!==0?C=na(E):(i&=B,i!==0&&(C=na(i)))}else B=g&~Q,B!==0?C=na(B):i!==0&&(C=na(i));if(C===0)return 0;if(I!==0&&I!==C&&!(I&Q)&&(Q=C&-C,i=I&-I,Q>=i||Q===16&&(i&4194240)!==0))return I;if(C&4&&(C|=g&16),I=A.entangledLanes,I!==0)for(A=A.entanglements,I&=C;0g;g++)I.push(A);return I}function Ic(A,I,g){A.pendingLanes|=I,I!==536870912&&(A.suspendedLanes=0,A.pingedLanes=0),A=A.eventTimes,I=31-$i(I),A[I]=g}function jO(A,I){var g=A.pendingLanes&~I;A.pendingLanes=I,A.suspendedLanes=0,A.pingedLanes=0,A.expiredLanes&=I,A.mutableReadLanes&=I,A.entangledLanes&=I,I=A.entanglements;var C=A.eventTimes;for(A=A.expirationTimes;0=Wa),bT=" ",yT=!1;function bJ(A,I){switch(A){case"keyup":return hq.indexOf(I.keyCode)!==-1;case"keydown":return I.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yJ(A){return A=A.detail,typeof A=="object"&&"data"in A?A.data:null}var Gr=!1;function Dq(A,I){switch(A){case"compositionend":return yJ(I);case"keypress":return I.which!==32?null:(yT=!0,bT);case"textInput":return A=I.data,A===bT&&yT?null:A;default:return null}}function bq(A,I){if(Gr)return A==="compositionend"||!HR&&bJ(A,I)?(A=uJ(),TP=fR=Ce=null,Gr=!1,A):null;switch(A){case"paste":return null;case"keypress":if(!(I.ctrlKey||I.altKey||I.metaKey)||I.ctrlKey&&I.altKey){if(I.char&&1=I)return{node:g,offset:I-A};A=C}A:{for(;g;){if(g.nextSibling){g=g.nextSibling;break A}g=g.parentNode}g=void 0}g=RT(g)}}function RJ(A,I){return A&&I?A===I?!0:A&&A.nodeType===3?!1:I&&I.nodeType===3?RJ(A,I.parentNode):"contains"in A?A.contains(I):A.compareDocumentPosition?!!(A.compareDocumentPosition(I)&16):!1:!1}function LJ(){for(var A=window,I=S9();I instanceof A.HTMLIFrameElement;){try{var g=typeof I.contentWindow.location.href=="string"}catch{g=!1}if(g)A=I.contentWindow;else break;I=S9(A.document)}return I}function xR(A){var I=A&&A.nodeName&&A.nodeName.toLowerCase();return I&&(I==="input"&&(A.type==="text"||A.type==="search"||A.type==="tel"||A.type==="url"||A.type==="password")||I==="textarea"||A.contentEditable==="true")}function pq(A){var I=LJ(),g=A.focusedElem,C=A.selectionRange;if(I!==g&&g&&g.ownerDocument&&RJ(g.ownerDocument.documentElement,g)){if(C!==null&&xR(g)){if(I=C.start,A=C.end,A===void 0&&(A=I),"selectionStart"in g)g.selectionStart=I,g.selectionEnd=Math.min(A,g.value.length);else if(A=(I=g.ownerDocument||document)&&I.defaultView||window,A.getSelection){A=A.getSelection();var Q=g.textContent.length,i=Math.min(C.start,Q);C=C.end===void 0?i:Math.min(C.end,Q),!A.extend&&i>C&&(Q=C,C=i,i=Q),Q=LT(g,i);var B=LT(g,C);Q&&B&&(A.rangeCount!==1||A.anchorNode!==Q.node||A.anchorOffset!==Q.offset||A.focusNode!==B.node||A.focusOffset!==B.offset)&&(I=I.createRange(),I.setStart(Q.node,Q.offset),A.removeAllRanges(),i>C?(A.addRange(I),A.extend(B.node,B.offset)):(I.setEnd(B.node,B.offset),A.addRange(I)))}}for(I=[],A=g;A=A.parentNode;)A.nodeType===1&&I.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof g.focus=="function"&&g.focus(),g=0;g=document.documentMode,Rr=null,jm=null,Va=null,Xm=!1;function ST(A,I,g){var C=g.window===g?g.document:g.nodeType===9?g:g.ownerDocument;Xm||Rr==null||Rr!==S9(C)||(C=Rr,"selectionStart"in C&&xR(C)?C={start:C.selectionStart,end:C.selectionEnd}:(C=(C.ownerDocument&&C.ownerDocument.defaultView||window).getSelection(),C={anchorNode:C.anchorNode,anchorOffset:C.anchorOffset,focusNode:C.focusNode,focusOffset:C.focusOffset}),Va&&yn(Va,C)||(Va=C,C=N9(jm,"onSelect"),0Tr||(A.current=$m[Tr],$m[Tr]=null,Tr--)}function uI(A,I){Tr++,$m[Tr]=A.current,A.current=I}var Le={},sC=Ye(Le),BQ=Ye(!1),ft=Le;function cs(A,I){var g=A.type.contextTypes;if(!g)return Le;var C=A.stateNode;if(C&&C.__reactInternalMemoizedUnmaskedChildContext===I)return C.__reactInternalMemoizedMaskedChildContext;var Q={},i;for(i in g)Q[i]=I[i];return C&&(A=A.stateNode,A.__reactInternalMemoizedUnmaskedChildContext=I,A.__reactInternalMemoizedMaskedChildContext=Q),Q}function EQ(A){return A=A.childContextTypes,A!=null}function K9(){SI(BQ),SI(sC)}function NT(A,I,g){if(sC.current!==Le)throw Error(BA(168));uI(sC,I),uI(BQ,g)}function ZJ(A,I,g){var C=A.stateNode;if(I=I.childContextTypes,typeof C.getChildContext!="function")return g;C=C.getChildContext();for(var Q in C)if(!(Q in I))throw Error(BA(108,GO(A)||"Unknown",Q));return XI({},g,C)}function W9(A){return A=(A=A.stateNode)&&A.__reactInternalMemoizedMergedChildContext||Le,ft=sC.current,uI(sC,A),uI(BQ,BQ.current),!0}function ZT(A,I,g){var C=A.stateNode;if(!C)throw Error(BA(169));g?(A=ZJ(A,I,ft),C.__reactInternalMemoizedMergedChildContext=A,SI(BQ),SI(sC),uI(sC,A)):SI(BQ),uI(BQ,g)}var gE=null,rd=!1,xh=!1;function KJ(A){gE===null?gE=[A]:gE.push(A)}function Mq(A){rd=!0,KJ(A)}function Ne(){if(!xh&&gE!==null){xh=!0;var A=0,I=tI;try{var g=gE;for(tI=1;A>=B,Q-=B,iE=1<<32-$i(I)+Q|g<G?(L=b,b=null):L=b.sibling;var m=s(P,b,h[G],u);if(m===null){b===null&&(b=L);break}A&&b&&m.alternate===null&&I(P,b),d=i(m,d,G),y===null?D=m:y.sibling=m,y=m,b=L}if(G===h.length)return g(P,b),ZI&&ot(P,G),D;if(b===null){for(;GG?(L=b,b=null):L=b.sibling;var F=s(P,b,m.value,u);if(F===null){b===null&&(b=L);break}A&&b&&F.alternate===null&&I(P,b),d=i(F,d,G),y===null?D=F:y.sibling=F,y=F,b=L}if(m.done)return g(P,b),ZI&&ot(P,G),D;if(b===null){for(;!m.done;G++,m=h.next())m=r(P,m.value,u),m!==null&&(d=i(m,d,G),y===null?D=m:y.sibling=m,y=m);return ZI&&ot(P,G),D}for(b=C(P,b);!m.done;G++,m=h.next())m=v(b,P,G,m.value,u),m!==null&&(A&&m.alternate!==null&&b.delete(m.key===null?G:m.key),d=i(m,d,G),y===null?D=m:y.sibling=m,y=m);return A&&b.forEach(function(U){return I(P,U)}),ZI&&ot(P,G),D}function c(P,d,h,u){if(typeof h=="object"&&h!==null&&h.type===wr&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case _c:A:{for(var D=h.key,y=d;y!==null;){if(y.key===D){if(D=h.type,D===wr){if(y.tag===7){g(P,y.sibling),d=Q(y,h.props.children),d.return=P,P=d;break A}}else if(y.elementType===D||typeof D=="object"&&D!==null&&D.$$typeof===HE&&JT(D)===y.type){g(P,y.sibling),d=Q(y,h.props),d.ref=pv(P,y,h),d.return=P,P=d;break A}g(P,y);break}else I(P,y);y=y.sibling}h.type===wr?(d=Ut(h.props.children,P.mode,u,h.key),d.return=P,P=d):(u=KP(h.type,h.key,h.props,null,P.mode,u),u.ref=pv(P,d,h),u.return=P,P=u)}return B(P);case mr:A:{for(y=h.key;d!==null;){if(d.key===y)if(d.tag===4&&d.stateNode.containerInfo===h.containerInfo&&d.stateNode.implementation===h.implementation){g(P,d.sibling),d=Q(d,h.children||[]),d.return=P,P=d;break A}else{g(P,d);break}else I(P,d);d=d.sibling}d=Cu(h,P.mode,u),d.return=P,P=d}return B(P);case HE:return y=h._init,c(P,d,y(h._payload),u)}if(aa(h))return n(P,d,h,u);if(Gv(h))return a(P,d,h,u);tl(P,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,d!==null&&d.tag===6?(g(P,d.sibling),d=Q(d,h),d.return=P,P=d):(g(P,d),d=gu(h,P.mode,u),d.return=P,P=d),B(P)):g(P,d)}return c}var Ps=zJ(!0),MJ=zJ(!1),z9=Ye(null),M9=null,Ur=null,$R=null;function AL(){$R=Ur=M9=null}function IL(A){var I=z9.current;SI(z9),A._currentValue=I}function gw(A,I,g){for(;A!==null;){var C=A.alternate;if((A.childLanes&I)!==I?(A.childLanes|=I,C!==null&&(C.childLanes|=I)):C!==null&&(C.childLanes&I)!==I&&(C.childLanes|=I),A===g)break;A=A.return}}function Is(A,I){M9=A,$R=Ur=null,A=A.dependencies,A!==null&&A.firstContext!==null&&(A.lanes&I&&(CQ=!0),A.firstContext=null)}function Di(A){var I=A._currentValue;if($R!==A)if(A={context:A,memoizedValue:I,next:null},Ur===null){if(M9===null)throw Error(BA(308));Ur=A,M9.dependencies={lanes:0,firstContext:A}}else Ur=Ur.next=A;return I}var bt=null;function gL(A){bt===null?bt=[A]:bt.push(A)}function fJ(A,I,g,C){var Q=I.interleaved;return Q===null?(g.next=g,gL(I)):(g.next=Q.next,Q.next=g),I.interleaved=g,sE(A,C)}function sE(A,I){A.lanes|=I;var g=A.alternate;for(g!==null&&(g.lanes|=I),g=A,A=A.return;A!==null;)A.childLanes|=I,g=A.alternate,g!==null&&(g.childLanes|=I),g=A,A=A.return;return g.tag===3?g.stateNode:null}var xE=!1;function CL(A){A.updateQueue={baseState:A.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function jJ(A,I){A=A.updateQueue,I.updateQueue===A&&(I.updateQueue={baseState:A.baseState,firstBaseUpdate:A.firstBaseUpdate,lastBaseUpdate:A.lastBaseUpdate,shared:A.shared,effects:A.effects})}function tE(A,I){return{eventTime:A,lane:I,tag:0,payload:null,callback:null,next:null}}function de(A,I,g){var C=A.updateQueue;if(C===null)return null;if(C=C.shared,qA&2){var Q=C.pending;return Q===null?I.next=I:(I.next=Q.next,Q.next=I),C.pending=I,sE(A,g)}return Q=C.interleaved,Q===null?(I.next=I,gL(C)):(I.next=Q.next,Q.next=I),C.interleaved=I,sE(A,g)}function FP(A,I,g){if(I=I.updateQueue,I!==null&&(I=I.shared,(g&4194240)!==0)){var C=I.lanes;C&=A.pendingLanes,g|=C,I.lanes=g,VR(A,g)}}function VT(A,I){var g=A.updateQueue,C=A.alternate;if(C!==null&&(C=C.updateQueue,g===C)){var Q=null,i=null;if(g=g.firstBaseUpdate,g!==null){do{var B={eventTime:g.eventTime,lane:g.lane,tag:g.tag,payload:g.payload,callback:g.callback,next:null};i===null?Q=i=B:i=i.next=B,g=g.next}while(g!==null);i===null?Q=i=I:i=i.next=I}else Q=i=I;g={baseState:C.baseState,firstBaseUpdate:Q,lastBaseUpdate:i,shared:C.shared,effects:C.effects},A.updateQueue=g;return}A=g.lastBaseUpdate,A===null?g.firstBaseUpdate=I:A.next=I,g.lastBaseUpdate=I}function f9(A,I,g,C){var Q=A.updateQueue;xE=!1;var i=Q.firstBaseUpdate,B=Q.lastBaseUpdate,E=Q.shared.pending;if(E!==null){Q.shared.pending=null;var e=E,t=e.next;e.next=null,B===null?i=t:B.next=t,B=e;var o=A.alternate;o!==null&&(o=o.updateQueue,E=o.lastBaseUpdate,E!==B&&(E===null?o.firstBaseUpdate=t:E.next=t,o.lastBaseUpdate=e))}if(i!==null){var r=Q.baseState;B=0,o=t=e=null,E=i;do{var s=E.lane,v=E.eventTime;if((C&s)===s){o!==null&&(o=o.next={eventTime:v,lane:0,tag:E.tag,payload:E.payload,callback:E.callback,next:null});A:{var n=A,a=E;switch(s=I,v=g,a.tag){case 1:if(n=a.payload,typeof n=="function"){r=n.call(v,r,s);break A}r=n;break A;case 3:n.flags=n.flags&-65537|128;case 0:if(n=a.payload,s=typeof n=="function"?n.call(v,r,s):n,s==null)break A;r=XI({},r,s);break A;case 2:xE=!0}}E.callback!==null&&E.lane!==0&&(A.flags|=64,s=Q.effects,s===null?Q.effects=[E]:s.push(E))}else v={eventTime:v,lane:s,tag:E.tag,payload:E.payload,callback:E.callback,next:null},o===null?(t=o=v,e=r):o=o.next=v,B|=s;if(E=E.next,E===null){if(E=Q.shared.pending,E===null)break;s=E,E=s.next,s.next=null,Q.lastBaseUpdate=s,Q.shared.pending=null}}while(!0);if(o===null&&(e=r),Q.baseState=e,Q.firstBaseUpdate=t,Q.lastBaseUpdate=o,I=Q.shared.interleaved,I!==null){Q=I;do B|=Q.lane,Q=Q.next;while(Q!==I)}else i===null&&(Q.shared.lanes=0);Ht|=B,A.lanes=B,A.memoizedState=r}}function zT(A,I,g){if(A=I.effects,I.effects=null,A!==null)for(I=0;Ig?g:4,A(!0);var C=qh.transition;qh.transition={};try{A(!1),I()}finally{tI=g,qh.transition=C}}function t1(){return bi().memoizedState}function Hq(A,I,g){var C=ue(A);if(g={lane:C,action:g,hasEagerState:!1,eagerState:null,next:null},o1(A))r1(I,g);else if(g=fJ(A,I,g,C),g!==null){var Q=FC();AB(g,A,C,Q),s1(g,I,C)}}function xq(A,I,g){var C=ue(A),Q={lane:C,action:g,hasEagerState:!1,eagerState:null,next:null};if(o1(A))r1(I,Q);else{var i=A.alternate;if(A.lanes===0&&(i===null||i.lanes===0)&&(i=I.lastRenderedReducer,i!==null))try{var B=I.lastRenderedState,E=i(B,g);if(Q.hasEagerState=!0,Q.eagerState=E,CB(E,B)){var e=I.interleaved;e===null?(Q.next=Q,gL(I)):(Q.next=e.next,e.next=Q),I.interleaved=Q;return}}catch{}finally{}g=fJ(A,I,Q,C),g!==null&&(Q=FC(),AB(g,A,C,Q),s1(g,I,C))}}function o1(A){var I=A.alternate;return A===jI||I!==null&&I===jI}function r1(A,I){za=X9=!0;var g=A.pending;g===null?I.next=I:(I.next=g.next,g.next=I),A.pending=I}function s1(A,I,g){if(g&4194240){var C=I.lanes;C&=A.pendingLanes,g|=C,I.lanes=g,VR(A,g)}}var H9={readContext:Di,useCallback:gC,useContext:gC,useEffect:gC,useImperativeHandle:gC,useInsertionEffect:gC,useLayoutEffect:gC,useMemo:gC,useReducer:gC,useRef:gC,useState:gC,useDebugValue:gC,useDeferredValue:gC,useTransition:gC,useMutableSource:gC,useSyncExternalStore:gC,useId:gC,unstable_isNewReconciler:!1},Oq={readContext:Di,useCallback:function(A,I){return bB().memoizedState=[A,I===void 0?null:I],A},useContext:Di,useEffect:fT,useImperativeHandle:function(A,I,g){return g=g!=null?g.concat([A]):null,kP(4194308,4,Q1.bind(null,I,A),g)},useLayoutEffect:function(A,I){return kP(4194308,4,A,I)},useInsertionEffect:function(A,I){return kP(4,2,A,I)},useMemo:function(A,I){var g=bB();return I=I===void 0?null:I,A=A(),g.memoizedState=[A,I],A},useReducer:function(A,I,g){var C=bB();return I=g!==void 0?g(I):I,C.memoizedState=C.baseState=I,A={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:A,lastRenderedState:I},C.queue=A,A=A.dispatch=Hq.bind(null,jI,A),[C.memoizedState,A]},useRef:function(A){var I=bB();return A={current:A},I.memoizedState=A},useState:MT,useDebugValue:rL,useDeferredValue:function(A){return bB().memoizedState=A},useTransition:function(){var A=MT(!1),I=A[0];return A=Xq.bind(null,A[1]),bB().memoizedState=A,[I,A]},useMutableSource:function(){},useSyncExternalStore:function(A,I,g){var C=jI,Q=bB();if(ZI){if(g===void 0)throw Error(BA(407));g=g()}else{if(g=I(),Ng===null)throw Error(BA(349));Xt&30||OJ(C,I,g)}Q.memoizedState=g;var i={value:g,getSnapshot:I};return Q.queue=i,fT(_J.bind(null,C,i,A),[A]),C.flags|=2048,pn(9,qJ.bind(null,C,i,g,I),void 0,null),g},useId:function(){var A=bB(),I=Ng.identifierPrefix;if(ZI){var g=BE,C=iE;g=(C&~(1<<32-$i(C)-1)).toString(32)+g,I=":"+I+"R"+g,g=Sn++,0<\/script>",A=A.removeChild(A.firstChild)):typeof C.is=="string"?A=B.createElement(g,{is:C.is}):(A=B.createElement(g),g==="select"&&(B=A,C.multiple?B.multiple=!0:C.size&&(B.size=C.size))):A=B.createElementNS(A,g),A[LB]=I,A[Gn]=C,D1(A,I,!1,!1),I.stateNode=A;A:{switch(B=Zm(g,C),g){case"dialog":LI("cancel",A),LI("close",A),Q=C;break;case"iframe":case"object":case"embed":LI("load",A),Q=C;break;case"video":case"audio":for(Q=0;Qus&&(I.flags|=128,C=!0,Fv(i,!1),I.lanes=4194304)}else{if(!C)if(A=j9(B),A!==null){if(I.flags|=128,C=!0,g=A.updateQueue,g!==null&&(I.updateQueue=g,I.flags|=4),Fv(i,!0),i.tail===null&&i.tailMode==="hidden"&&!B.alternate&&!ZI)return CC(I),null}else 2*tg()-i.renderingStartTime>us&&g!==1073741824&&(I.flags|=128,C=!0,Fv(i,!1),I.lanes=4194304);i.isBackwards?(B.sibling=I.child,I.child=B):(g=i.last,g!==null?g.sibling=B:I.child=B,i.last=B)}return i.tail!==null?(I=i.tail,i.rendering=I,i.tail=I.sibling,i.renderingStartTime=tg(),I.sibling=null,g=zI.current,uI(zI,C?g&1|2:g&1),I):(CC(I),null);case 22:case 23:return lL(),C=I.memoizedState!==null,A!==null&&A.memoizedState!==null!==C&&(I.flags|=8192),C&&I.mode&1?hQ&1073741824&&(CC(I),I.subtreeFlags&6&&(I.flags|=8192)):CC(I),null;case 24:return null;case 25:return null}throw Error(BA(156,I.tag))}function Q6(A,I){switch(qR(I),I.tag){case 1:return EQ(I.type)&&K9(),A=I.flags,A&65536?(I.flags=A&-65537|128,I):null;case 3:return ds(),SI(BQ),SI(sC),BL(),A=I.flags,A&65536&&!(A&128)?(I.flags=A&-65537|128,I):null;case 5:return iL(I),null;case 13:if(SI(zI),A=I.memoizedState,A!==null&&A.dehydrated!==null){if(I.alternate===null)throw Error(BA(340));ls()}return A=I.flags,A&65536?(I.flags=A&-65537|128,I):null;case 19:return SI(zI),null;case 4:return ds(),null;case 10:return IL(I.type._context),null;case 22:case 23:return lL(),null;case 24:return null;default:return null}}var rl=!1,EC=!1,i6=typeof WeakSet=="function"?WeakSet:Set,vA=null;function kr(A,I){var g=A.ref;if(g!==null)if(typeof g=="function")try{g(null)}catch(C){gg(A,I,C)}else g.current=null}function rw(A,I,g){try{g()}catch(C){gg(A,I,C)}}var gp=!1;function B6(A,I){if(Hm=k9,A=LJ(),xR(A)){if("selectionStart"in A)var g={start:A.selectionStart,end:A.selectionEnd};else A:{g=(g=A.ownerDocument)&&g.defaultView||window;var C=g.getSelection&&g.getSelection();if(C&&C.rangeCount!==0){g=C.anchorNode;var Q=C.anchorOffset,i=C.focusNode;C=C.focusOffset;try{g.nodeType,i.nodeType}catch{g=null;break A}var B=0,E=-1,e=-1,t=0,o=0,r=A,s=null;I:for(;;){for(var v;r!==g||Q!==0&&r.nodeType!==3||(E=B+Q),r!==i||C!==0&&r.nodeType!==3||(e=B+C),r.nodeType===3&&(B+=r.nodeValue.length),(v=r.firstChild)!==null;)s=r,r=v;for(;;){if(r===A)break I;if(s===g&&++t===Q&&(E=B),s===i&&++o===C&&(e=B),(v=r.nextSibling)!==null)break;r=s,s=r.parentNode}r=v}g=E===-1||e===-1?null:{start:E,end:e}}else g=null}g=g||{start:0,end:0}}else g=null;for(xm={focusedElem:A,selectionRange:g},k9=!1,vA=I;vA!==null;)if(I=vA,A=I.child,(I.subtreeFlags&1028)!==0&&A!==null)A.return=I,vA=A;else for(;vA!==null;){I=vA;try{var n=I.alternate;if(I.flags&1024)switch(I.tag){case 0:case 11:case 15:break;case 1:if(n!==null){var a=n.memoizedProps,c=n.memoizedState,P=I.stateNode,d=P.getSnapshotBeforeUpdate(I.elementType===I.type?a:Zi(I.type,a),c);P.__reactInternalSnapshotBeforeUpdate=d}break;case 3:var h=I.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(BA(163))}}catch(u){gg(I,I.return,u)}if(A=I.sibling,A!==null){A.return=I.return,vA=A;break}vA=I.return}return n=gp,gp=!1,n}function Ma(A,I,g){var C=I.updateQueue;if(C=C!==null?C.lastEffect:null,C!==null){var Q=C=C.next;do{if((Q.tag&A)===A){var i=Q.destroy;Q.destroy=void 0,i!==void 0&&rw(I,g,i)}Q=Q.next}while(Q!==C)}}function ad(A,I){if(I=I.updateQueue,I=I!==null?I.lastEffect:null,I!==null){var g=I=I.next;do{if((g.tag&A)===A){var C=g.create;g.destroy=C()}g=g.next}while(g!==I)}}function sw(A){var I=A.ref;if(I!==null){var g=A.stateNode;switch(A.tag){case 5:A=g;break;default:A=g}typeof I=="function"?I(A):I.current=A}}function m1(A){var I=A.alternate;I!==null&&(A.alternate=null,m1(I)),A.child=null,A.deletions=null,A.sibling=null,A.tag===5&&(I=A.stateNode,I!==null&&(delete I[LB],delete I[Gn],delete I[_m],delete I[Vq],delete I[zq])),A.stateNode=null,A.return=null,A.dependencies=null,A.memoizedProps=null,A.memoizedState=null,A.pendingProps=null,A.stateNode=null,A.updateQueue=null}function w1(A){return A.tag===5||A.tag===3||A.tag===4}function Cp(A){A:for(;;){for(;A.sibling===null;){if(A.return===null||w1(A.return))return null;A=A.return}for(A.sibling.return=A.return,A=A.sibling;A.tag!==5&&A.tag!==6&&A.tag!==18;){if(A.flags&2||A.child===null||A.tag===4)continue A;A.child.return=A,A=A.child}if(!(A.flags&2))return A.stateNode}}function vw(A,I,g){var C=A.tag;if(C===5||C===6)A=A.stateNode,I?g.nodeType===8?g.parentNode.insertBefore(A,I):g.insertBefore(A,I):(g.nodeType===8?(I=g.parentNode,I.insertBefore(A,g)):(I=g,I.appendChild(A)),g=g._reactRootContainer,g!=null||I.onclick!==null||(I.onclick=Z9));else if(C!==4&&(A=A.child,A!==null))for(vw(A,I,g),A=A.sibling;A!==null;)vw(A,I,g),A=A.sibling}function aw(A,I,g){var C=A.tag;if(C===5||C===6)A=A.stateNode,I?g.insertBefore(A,I):g.appendChild(A);else if(C!==4&&(A=A.child,A!==null))for(aw(A,I,g),A=A.sibling;A!==null;)aw(A,I,g),A=A.sibling}var fg=null,Vi=!1;function LE(A,I,g){for(g=g.child;g!==null;)G1(A,I,g),g=g.sibling}function G1(A,I,g){if(YB&&typeof YB.onCommitFiberUnmount=="function")try{YB.onCommitFiberUnmount(Bd,g)}catch{}switch(g.tag){case 5:EC||kr(g,I);case 6:var C=fg,Q=Vi;fg=null,LE(A,I,g),fg=C,Vi=Q,fg!==null&&(Vi?(A=fg,g=g.stateNode,A.nodeType===8?A.parentNode.removeChild(g):A.removeChild(g)):fg.removeChild(g.stateNode));break;case 18:fg!==null&&(Vi?(A=fg,g=g.stateNode,A.nodeType===8?Hh(A.parentNode,g):A.nodeType===1&&Hh(A,g),Dn(A)):Hh(fg,g.stateNode));break;case 4:C=fg,Q=Vi,fg=g.stateNode.containerInfo,Vi=!0,LE(A,I,g),fg=C,Vi=Q;break;case 0:case 11:case 14:case 15:if(!EC&&(C=g.updateQueue,C!==null&&(C=C.lastEffect,C!==null))){Q=C=C.next;do{var i=Q,B=i.destroy;i=i.tag,B!==void 0&&(i&2||i&4)&&rw(g,I,B),Q=Q.next}while(Q!==C)}LE(A,I,g);break;case 1:if(!EC&&(kr(g,I),C=g.stateNode,typeof C.componentWillUnmount=="function"))try{C.props=g.memoizedProps,C.state=g.memoizedState,C.componentWillUnmount()}catch(E){gg(g,I,E)}LE(A,I,g);break;case 21:LE(A,I,g);break;case 22:g.mode&1?(EC=(C=EC)||g.memoizedState!==null,LE(A,I,g),EC=C):LE(A,I,g);break;default:LE(A,I,g)}}function Qp(A){var I=A.updateQueue;if(I!==null){A.updateQueue=null;var g=A.stateNode;g===null&&(g=A.stateNode=new i6),I.forEach(function(C){var Q=n6.bind(null,A,C);g.has(C)||(g.add(C),C.then(Q,Q))})}}function pi(A,I){var g=I.deletions;if(g!==null)for(var C=0;CQ&&(Q=B),C&=~i}if(C=Q,C=tg()-C,C=(120>C?120:480>C?480:1080>C?1080:1920>C?1920:3e3>C?3e3:4320>C?4320:1960*e6(C/1960))-C,10A?16:A,Qe===null)var C=!1;else{if(A=Qe,Qe=null,q9=0,qA&6)throw Error(BA(331));var Q=qA;for(qA|=4,vA=A.current;vA!==null;){var i=vA,B=i.child;if(vA.flags&16){var E=i.deletions;if(E!==null){for(var e=0;etg()-nL?Ft(A,0):aL|=g),eQ(A,I)}function k1(A,I){I===0&&(A.mode&1?(I=gl,gl<<=1,!(gl&130023424)&&(gl=4194304)):I=1);var g=FC();A=sE(A,I),A!==null&&(Ic(A,I,g),eQ(A,g))}function a6(A){var I=A.memoizedState,g=0;I!==null&&(g=I.retryLane),k1(A,g)}function n6(A,I){var g=0;switch(A.tag){case 13:var C=A.stateNode,Q=A.memoizedState;Q!==null&&(g=Q.retryLane);break;case 19:C=A.stateNode;break;default:throw Error(BA(314))}C!==null&&C.delete(I),k1(A,g)}var Y1;Y1=function(A,I,g){if(A!==null)if(A.memoizedProps!==I.pendingProps||BQ.current)CQ=!0;else{if(!(A.lanes&g)&&!(I.flags&128))return CQ=!1,g6(A,I,g);CQ=!!(A.flags&131072)}else CQ=!1,ZI&&I.flags&1048576&&WJ(I,V9,I.index);switch(I.lanes=0,I.tag){case 2:var C=I.type;YP(A,I),A=I.pendingProps;var Q=cs(I,sC.current);Is(I,g),Q=eL(null,I,C,A,Q,g);var i=tL();return I.flags|=1,typeof Q=="object"&&Q!==null&&typeof Q.render=="function"&&Q.$$typeof===void 0?(I.tag=1,I.memoizedState=null,I.updateQueue=null,EQ(C)?(i=!0,W9(I)):i=!1,I.memoizedState=Q.state!==null&&Q.state!==void 0?Q.state:null,CL(I),Q.updater=vd,I.stateNode=Q,Q._reactInternals=I,Qw(I,C,A,g),I=Ew(null,I,C,!0,i,g)):(I.tag=0,ZI&&i&&OR(I),wC(null,I,Q,g),I=I.child),I;case 16:C=I.elementType;A:{switch(YP(A,I),A=I.pendingProps,Q=C._init,C=Q(C._payload),I.type=C,Q=I.tag=l6(C),A=Zi(C,A),Q){case 0:I=Bw(null,I,C,A,g);break A;case 1:I=$T(null,I,C,A,g);break A;case 11:I=qT(null,I,C,A,g);break A;case 14:I=_T(null,I,C,Zi(C.type,A),g);break A}throw Error(BA(306,C,""))}return I;case 0:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:Zi(C,Q),Bw(A,I,C,Q,g);case 1:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:Zi(C,Q),$T(A,I,C,Q,g);case 3:A:{if(d1(I),A===null)throw Error(BA(387));C=I.pendingProps,i=I.memoizedState,Q=i.element,jJ(A,I),f9(I,C,null,g);var B=I.memoizedState;if(C=B.element,i.isDehydrated)if(i={element:C,isDehydrated:!1,cache:B.cache,pendingSuspenseBoundaries:B.pendingSuspenseBoundaries,transitions:B.transitions},I.updateQueue.baseState=i,I.memoizedState=i,I.flags&256){Q=hs(Error(BA(423)),I),I=Ap(A,I,C,g,Q);break A}else if(C!==Q){Q=hs(Error(BA(424)),I),I=Ap(A,I,C,g,Q);break A}else for(mQ=Pe(I.stateNode.containerInfo.firstChild),TQ=I,ZI=!0,Mi=null,g=MJ(I,null,C,g),I.child=g;g;)g.flags=g.flags&-3|4096,g=g.sibling;else{if(ls(),C===Q){I=vE(A,I,g);break A}wC(A,I,C,g)}I=I.child}return I;case 5:return XJ(I),A===null&&Iw(I),C=I.type,Q=I.pendingProps,i=A!==null?A.memoizedProps:null,B=Q.children,Om(C,Q)?B=null:i!==null&&Om(C,i)&&(I.flags|=32),P1(A,I),wC(A,I,B,g),I.child;case 6:return A===null&&Iw(I),null;case 13:return h1(A,I,g);case 4:return QL(I,I.stateNode.containerInfo),C=I.pendingProps,A===null?I.child=Ps(I,null,C,g):wC(A,I,C,g),I.child;case 11:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:Zi(C,Q),qT(A,I,C,Q,g);case 7:return wC(A,I,I.pendingProps,g),I.child;case 8:return wC(A,I,I.pendingProps.children,g),I.child;case 12:return wC(A,I,I.pendingProps.children,g),I.child;case 10:A:{if(C=I.type._context,Q=I.pendingProps,i=I.memoizedProps,B=Q.value,uI(z9,C._currentValue),C._currentValue=B,i!==null)if(CB(i.value,B)){if(i.children===Q.children&&!BQ.current){I=vE(A,I,g);break A}}else for(i=I.child,i!==null&&(i.return=I);i!==null;){var E=i.dependencies;if(E!==null){B=i.child;for(var e=E.firstContext;e!==null;){if(e.context===C){if(i.tag===1){e=tE(-1,g&-g),e.tag=2;var t=i.updateQueue;if(t!==null){t=t.shared;var o=t.pending;o===null?e.next=e:(e.next=o.next,o.next=e),t.pending=e}}i.lanes|=g,e=i.alternate,e!==null&&(e.lanes|=g),gw(i.return,g,I),E.lanes|=g;break}e=e.next}}else if(i.tag===10)B=i.type===I.type?null:i.child;else if(i.tag===18){if(B=i.return,B===null)throw Error(BA(341));B.lanes|=g,E=B.alternate,E!==null&&(E.lanes|=g),gw(B,g,I),B=i.sibling}else B=i.child;if(B!==null)B.return=i;else for(B=i;B!==null;){if(B===I){B=null;break}if(i=B.sibling,i!==null){i.return=B.return,B=i;break}B=B.return}i=B}wC(A,I,Q.children,g),I=I.child}return I;case 9:return Q=I.type,C=I.pendingProps.children,Is(I,g),Q=Di(Q),C=C(Q),I.flags|=1,wC(A,I,C,g),I.child;case 14:return C=I.type,Q=Zi(C,I.pendingProps),Q=Zi(C.type,Q),_T(A,I,C,Q,g);case 15:return c1(A,I,I.type,I.pendingProps,g);case 17:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:Zi(C,Q),YP(A,I),I.tag=1,EQ(C)?(A=!0,W9(I)):A=!1,Is(I,g),v1(I,C,Q),Qw(I,C,Q,g),Ew(null,I,C,!0,A,g);case 19:return u1(A,I,g);case 22:return l1(A,I,g)}throw Error(BA(156,I.tag))};function N1(A,I){return oJ(A,I)}function c6(A,I,g,C){this.tag=A,this.key=g,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=I,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=C,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function ai(A,I,g,C){return new c6(A,I,g,C)}function dL(A){return A=A.prototype,!(!A||!A.isReactComponent)}function l6(A){if(typeof A=="function")return dL(A)?1:0;if(A!=null){if(A=A.$$typeof,A===ZR)return 11;if(A===KR)return 14}return 2}function De(A,I){var g=A.alternate;return g===null?(g=ai(A.tag,I,A.key,A.mode),g.elementType=A.elementType,g.type=A.type,g.stateNode=A.stateNode,g.alternate=A,A.alternate=g):(g.pendingProps=I,g.type=A.type,g.flags=0,g.subtreeFlags=0,g.deletions=null),g.flags=A.flags&14680064,g.childLanes=A.childLanes,g.lanes=A.lanes,g.child=A.child,g.memoizedProps=A.memoizedProps,g.memoizedState=A.memoizedState,g.updateQueue=A.updateQueue,I=A.dependencies,g.dependencies=I===null?null:{lanes:I.lanes,firstContext:I.firstContext},g.sibling=A.sibling,g.index=A.index,g.ref=A.ref,g}function KP(A,I,g,C,Q,i){var B=2;if(C=A,typeof A=="function")dL(A)&&(B=1);else if(typeof A=="string")B=5;else A:switch(A){case wr:return Ut(g.children,Q,i,I);case NR:B=8,Q|=8;break;case Rm:return A=ai(12,g,I,Q|2),A.elementType=Rm,A.lanes=i,A;case Lm:return A=ai(13,g,I,Q),A.elementType=Lm,A.lanes=i,A;case Sm:return A=ai(19,g,I,Q),A.elementType=Sm,A.lanes=i,A;case XW:return cd(g,Q,i,I);default:if(typeof A=="object"&&A!==null)switch(A.$$typeof){case fW:B=10;break A;case jW:B=9;break A;case ZR:B=11;break A;case KR:B=14;break A;case HE:B=16,C=null;break A}throw Error(BA(130,A==null?A:typeof A,""))}return I=ai(B,g,I,Q),I.elementType=A,I.type=C,I.lanes=i,I}function Ut(A,I,g,C){return A=ai(7,A,C,I),A.lanes=g,A}function cd(A,I,g,C){return A=ai(22,A,C,I),A.elementType=XW,A.lanes=g,A.stateNode={isHidden:!1},A}function gu(A,I,g){return A=ai(6,A,null,I),A.lanes=g,A}function Cu(A,I,g){return I=ai(4,A.children!==null?A.children:[],A.key,I),I.lanes=g,I.stateNode={containerInfo:A.containerInfo,pendingChildren:null,implementation:A.implementation},I}function P6(A,I,g,C,Q){this.tag=I,this.containerInfo=A,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Nh(0),this.expirationTimes=Nh(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Nh(0),this.identifierPrefix=C,this.onRecoverableError=Q,this.mutableSourceEagerHydrationData=null}function hL(A,I,g,C,Q,i,B,E,e){return A=new P6(A,I,g,E,e),I===1?(I=1,i===!0&&(I|=8)):I=0,i=ai(3,null,null,I),A.current=i,i.stateNode=A,i.memoizedState={element:C,isDehydrated:g,cache:null,transitions:null,pendingSuspenseBoundaries:null},CL(i),A}function d6(A,I,g){var C=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(J1)}catch(A){console.error(A)}}J1(),JW.exports=YQ;var ic=JW.exports;const V1=Qd(ic),y6=LW({__proto__:null,default:V1},[ic]);var m6,sp=ic;m6=sp.createRoot,sp.hydrateRoot;/** + * @remix-run/router v1.23.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function NI(){return NI=Object.assign?Object.assign.bind():function(A){for(var I=1;I"u")throw new Error(I)}function Ds(A,I){if(!A){typeof console<"u"&&console.warn(I);try{throw new Error(I)}catch{}}}function G6(){return Math.random().toString(36).substr(2,8)}function ap(A,I){return{usr:A.state,key:A.key,idx:I}}function Un(A,I,g,C){return g===void 0&&(g=null),NI({pathname:typeof A=="string"?A:A.pathname,search:"",hash:""},typeof I=="string"?Ze(I):I,{state:g,key:I&&I.key||C||G6()})}function Bc(A){let{pathname:I="/",search:g="",hash:C=""}=A;return g&&g!=="?"&&(I+=g.charAt(0)==="?"?g:"?"+g),C&&C!=="#"&&(I+=C.charAt(0)==="#"?C:"#"+C),I}function Ze(A){let I={};if(A){let g=A.indexOf("#");g>=0&&(I.hash=A.substr(g),A=A.substr(0,g));let C=A.indexOf("?");C>=0&&(I.search=A.substr(C),A=A.substr(0,C)),A&&(I.pathname=A)}return I}function R6(A,I,g,C){C===void 0&&(C={});let{window:Q=document.defaultView,v5Compat:i=!1}=C,B=Q.history,E=cg.Pop,e=null,t=o();t==null&&(t=0,B.replaceState(NI({},B.state,{idx:t}),""));function o(){return(B.state||{idx:null}).idx}function r(){E=cg.Pop;let c=o(),P=c==null?null:c-t;t=c,e&&e({action:E,location:a.location,delta:P})}function s(c,P){E=cg.Push;let d=Un(a.location,c,P);t=o()+1;let h=ap(d,t),u=a.createHref(d);try{B.pushState(h,"",u)}catch(D){if(D instanceof DOMException&&D.name==="DataCloneError")throw D;Q.location.assign(u)}i&&e&&e({action:E,location:a.location,delta:1})}function v(c,P){E=cg.Replace;let d=Un(a.location,c,P);t=o();let h=ap(d,t),u=a.createHref(d);B.replaceState(h,"",u),i&&e&&e({action:E,location:a.location,delta:0})}function n(c){let P=Q.location.origin!=="null"?Q.location.origin:Q.location.href,d=typeof c=="string"?c:Bc(c);return d=d.replace(/ $/,"%20"),jA(P,"No window.location.(origin|href) available to create URL for href: "+d),new URL(d,P)}let a={get action(){return E},get location(){return A(Q,B)},listen(c){if(e)throw new Error("A history only accepts one active listener");return Q.addEventListener(vp,r),e=c,()=>{Q.removeEventListener(vp,r),e=null}},createHref(c){return I(Q,c)},createURL:n,encodeLocation(c){let P=n(c);return{pathname:P.pathname,search:P.search,hash:P.hash}},push:s,replace:v,go(c){return B.go(c)}};return a}var eI;(function(A){A.data="data",A.deferred="deferred",A.redirect="redirect",A.error="error"})(eI||(eI={}));const L6=new Set(["lazy","caseSensitive","path","id","index","children"]);function S6(A){return A.index===!0}function A0(A,I,g,C){return g===void 0&&(g=[]),C===void 0&&(C={}),A.map((Q,i)=>{let B=[...g,String(i)],E=typeof Q.id=="string"?Q.id:B.join("-");if(jA(Q.index!==!0||!Q.children,"Cannot specify children on an index route"),jA(!C[E],'Found a route id collision on id "'+E+`". Route id's must be globally unique within Data Router usages`),S6(Q)){let e=NI({},Q,I(Q),{id:E});return C[E]=e,e}else{let e=NI({},Q,I(Q),{id:E,children:void 0});return C[E]=e,Q.children&&(e.children=A0(Q.children,I,B,C)),e}})}function lt(A,I,g){return g===void 0&&(g="/"),WP(A,I,g,!1)}function WP(A,I,g,C){let Q=typeof I=="string"?Ze(I):I,i=Ec(Q.pathname||"/",g);if(i==null)return null;let B=z1(A);p6(B);let E=null;for(let e=0;E==null&&e{let e={relativePath:E===void 0?i.path||"":E,caseSensitive:i.caseSensitive===!0,childrenIndex:B,route:i};e.relativePath.startsWith("/")&&(jA(e.relativePath.startsWith(C),'Absolute route path "'+e.relativePath+'" nested under path '+('"'+C+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),e.relativePath=e.relativePath.slice(C.length));let t=be([C,e.relativePath]),o=g.concat(e);i.children&&i.children.length>0&&(jA(i.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+t+'".')),z1(i.children,I,o,t)),!(i.path==null&&!i.index)&&I.push({path:t,score:K6(t,i.index),routesMeta:o})};return A.forEach((i,B)=>{var E;if(i.path===""||!((E=i.path)!=null&&E.includes("?")))Q(i,B);else for(let e of M1(i.path))Q(i,B,e)}),I}function M1(A){let I=A.split("/");if(I.length===0)return[];let[g,...C]=I,Q=g.endsWith("?"),i=g.replace(/\?$/,"");if(C.length===0)return Q?[i,""]:[i];let B=M1(C.join("/")),E=[];return E.push(...B.map(e=>e===""?i:[i,e].join("/"))),Q&&E.push(...B),E.map(e=>A.startsWith("/")&&e===""?"/":e)}function p6(A){A.sort((I,g)=>I.score!==g.score?g.score-I.score:W6(I.routesMeta.map(C=>C.childrenIndex),g.routesMeta.map(C=>C.childrenIndex)))}const F6=/^:[\w-]+$/,U6=3,k6=2,Y6=1,N6=10,Z6=-2,np=A=>A==="*";function K6(A,I){let g=A.split("/"),C=g.length;return g.some(np)&&(C+=Z6),I&&(C+=k6),g.filter(Q=>!np(Q)).reduce((Q,i)=>Q+(F6.test(i)?U6:i===""?Y6:N6),C)}function W6(A,I){return A.length===I.length&&A.slice(0,-1).every((C,Q)=>C===I[Q])?A[A.length-1]-I[I.length-1]:0}function J6(A,I,g){g===void 0&&(g=!1);let{routesMeta:C}=A,Q={},i="/",B=[];for(let E=0;E{let{paramName:s,isOptional:v}=o;if(s==="*"){let a=E[r]||"";B=i.slice(0,i.length-a.length).replace(/(.)\/+$/,"$1")}const n=E[r];return v&&!n?t[s]=void 0:t[s]=(n||"").replace(/%2F/g,"/"),t},{}),pathname:i,pathnameBase:B,pattern:A}}function V6(A,I,g){I===void 0&&(I=!1),g===void 0&&(g=!0),Ds(A==="*"||!A.endsWith("*")||A.endsWith("/*"),'Route path "'+A+'" will be treated as if it were '+('"'+A.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+A.replace(/\*$/,"/*")+'".'));let C=[],Q="^"+A.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(B,E,e)=>(C.push({paramName:E,isOptional:e!=null}),e?"/?([^\\/]+)?":"/([^\\/]+)"));return A.endsWith("*")?(C.push({paramName:"*"}),Q+=A==="*"||A==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):g?Q+="\\/*$":A!==""&&A!=="/"&&(Q+="(?:(?=\\/|$))"),[new RegExp(Q,I?void 0:"i"),C]}function z6(A){try{return A.split("/").map(I=>decodeURIComponent(I).replace(/\//g,"%2F")).join("/")}catch(I){return Ds(!1,'The URL path "'+A+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+I+").")),A}}function Ec(A,I){if(I==="/")return A;if(!A.toLowerCase().startsWith(I.toLowerCase()))return null;let g=I.endsWith("/")?I.length-1:I.length,C=A.charAt(g);return C&&C!=="/"?null:A.slice(g)||"/"}function M6(A,I){I===void 0&&(I="/");let{pathname:g,search:C="",hash:Q=""}=typeof A=="string"?Ze(A):A;return{pathname:g?g.startsWith("/")?g:f6(g,I):I,search:X6(C),hash:H6(Q)}}function f6(A,I){let g=I.replace(/\/+$/,"").split("/");return A.split("/").forEach(Q=>{Q===".."?g.length>1&&g.pop():Q!=="."&&g.push(Q)}),g.length>1?g.join("/"):"/"}function Qu(A,I,g,C){return"Cannot include a '"+A+"' character in a manually specified "+("`to."+I+"` field ["+JSON.stringify(C)+"]. Please separate it out to the ")+("`to."+g+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function f1(A){return A.filter((I,g)=>g===0||I.route.path&&I.route.path.length>0)}function j1(A,I){let g=f1(A);return I?g.map((C,Q)=>Q===g.length-1?C.pathname:C.pathnameBase):g.map(C=>C.pathnameBase)}function X1(A,I,g,C){C===void 0&&(C=!1);let Q;typeof A=="string"?Q=Ze(A):(Q=NI({},A),jA(!Q.pathname||!Q.pathname.includes("?"),Qu("?","pathname","search",Q)),jA(!Q.pathname||!Q.pathname.includes("#"),Qu("#","pathname","hash",Q)),jA(!Q.search||!Q.search.includes("#"),Qu("#","search","hash",Q)));let i=A===""||Q.pathname==="",B=i?"/":Q.pathname,E;if(B==null)E=g;else{let r=I.length-1;if(!C&&B.startsWith("..")){let s=B.split("/");for(;s[0]==="..";)s.shift(),r-=1;Q.pathname=s.join("/")}E=r>=0?I[r]:"/"}let e=M6(Q,E),t=B&&B!=="/"&&B.endsWith("/"),o=(i||B===".")&&g.endsWith("/");return!e.pathname.endsWith("/")&&(t||o)&&(e.pathname+="/"),e}const be=A=>A.join("/").replace(/\/\/+/g,"/"),j6=A=>A.replace(/\/+$/,"").replace(/^\/*/,"/"),X6=A=>!A||A==="?"?"":A.startsWith("?")?A:"?"+A,H6=A=>!A||A==="#"?"":A.startsWith("#")?A:"#"+A;class I0{constructor(I,g,C,Q){Q===void 0&&(Q=!1),this.status=I,this.statusText=g||"",this.internal=Q,C instanceof Error?(this.data=C.toString(),this.error=C):this.data=C}}function kn(A){return A!=null&&typeof A.status=="number"&&typeof A.statusText=="string"&&typeof A.internal=="boolean"&&"data"in A}const H1=["post","put","patch","delete"],x6=new Set(H1),O6=["get",...H1],q6=new Set(O6),_6=new Set([301,302,303,307,308]),$6=new Set([307,308]),iu={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},A_={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},kv={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},yL=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,I_=A=>({hasErrorBoundary:!!A.hasErrorBoundary}),x1="remix-router-transitions";function g_(A){const I=A.window?A.window:typeof window<"u"?window:void 0,g=typeof I<"u"&&typeof I.document<"u"&&typeof I.document.createElement<"u",C=!g;jA(A.routes.length>0,"You must provide a non-empty routes array to createRouter");let Q;if(A.mapRouteProperties)Q=A.mapRouteProperties;else if(A.detectErrorBoundary){let T=A.detectErrorBoundary;Q=Z=>({hasErrorBoundary:T(Z)})}else Q=I_;let i={},B=A0(A.routes,Q,void 0,i),E,e=A.basename||"/",t=A.dataStrategy||B_,o=A.patchRoutesOnNavigation,r=NI({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},A.future),s=null,v=new Set,n=null,a=null,c=null,P=A.hydrationData!=null,d=lt(B,A.history.location,e),h=!1,u=null;if(d==null&&!o){let T=HC(404,{pathname:A.history.location.pathname}),{matches:Z,route:M}=Gp(B);d=Z,u={[M.id]:T}}d&&!A.hydrationData&&wo(d,B,A.history.location.pathname).active&&(d=null);let D;if(d)if(d.some(T=>T.route.lazy))D=!1;else if(!d.some(T=>T.route.loader))D=!0;else if(r.v7_partialHydration){let T=A.hydrationData?A.hydrationData.loaderData:null,Z=A.hydrationData?A.hydrationData.errors:null;if(Z){let M=d.findIndex(gA=>Z[gA.route.id]!==void 0);D=d.slice(0,M+1).every(gA=>!hw(gA.route,T,Z))}else D=d.every(M=>!hw(M.route,T,Z))}else D=A.hydrationData!=null;else if(D=!1,d=[],r.v7_partialHydration){let T=wo(null,B,A.history.location.pathname);T.active&&T.matches&&(h=!0,d=T.matches)}let y,b={historyAction:A.history.action,location:A.history.location,matches:d,initialized:D,navigation:iu,restoreScrollPosition:A.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:A.hydrationData&&A.hydrationData.loaderData||{},actionData:A.hydrationData&&A.hydrationData.actionData||null,errors:A.hydrationData&&A.hydrationData.errors||u,fetchers:new Map,blockers:new Map},G=cg.Pop,L=!1,m,F=!1,U=new Map,AA=null,X=!1,Y=!1,J=[],V=new Set,N=new Map,z=0,w=-1,CA=new Map,QA=new Set,R=new Map,cA=new Map,lA=new Set,H=new Map,tA=new Map,GA;function FA(){if(s=A.history.listen(T=>{let{action:Z,location:M,delta:gA}=T;if(GA){GA(),GA=void 0;return}Ds(tA.size===0||gA!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let oA=uv({currentLocation:b.location,nextLocation:M,historyAction:Z});if(oA&&gA!=null){let DA=new Promise(RA=>{GA=RA});A.history.go(gA*-1),mo(oA,{state:"blocked",location:M,proceed(){mo(oA,{state:"proceeding",proceed:void 0,reset:void 0,location:M}),DA.then(()=>A.history.go(gA))},reset(){let RA=new Map(b.blockers);RA.set(oA,kv),zA({blockers:RA})}});return}return vg(Z,M)}),g){h_(I,U);let T=()=>u_(I,U);I.addEventListener("pagehide",T),AA=()=>I.removeEventListener("pagehide",T)}return b.initialized||vg(cg.Pop,b.location,{initialHydration:!0}),y}function WA(){s&&s(),AA&&AA(),v.clear(),m&&m.abort(),b.fetchers.forEach((T,Z)=>Bg(Z)),b.blockers.forEach((T,Z)=>JC(Z))}function JI(T){return v.add(T),()=>v.delete(T)}function zA(T,Z){Z===void 0&&(Z={}),b=NI({},b,T);let M=[],gA=[];r.v7_fetcherPersist&&b.fetchers.forEach((oA,DA)=>{oA.state==="idle"&&(lA.has(DA)?gA.push(DA):M.push(DA))}),lA.forEach(oA=>{!b.fetchers.has(oA)&&!N.has(oA)&&gA.push(oA)}),[...v].forEach(oA=>oA(b,{deletedFetchers:gA,viewTransitionOpts:Z.viewTransitionOpts,flushSync:Z.flushSync===!0})),r.v7_fetcherPersist?(M.forEach(oA=>b.fetchers.delete(oA)),gA.forEach(oA=>Bg(oA))):gA.forEach(oA=>lA.delete(oA))}function VI(T,Z,M){var gA,oA;let{flushSync:DA}=M===void 0?{}:M,RA=b.actionData!=null&&b.navigation.formMethod!=null&&zi(b.navigation.formMethod)&&b.navigation.state==="loading"&&((gA=T.state)==null?void 0:gA._isRedirect)!==!0,nA;Z.actionData?Object.keys(Z.actionData).length>0?nA=Z.actionData:nA=null:RA?nA=b.actionData:nA=null;let PA=Z.loaderData?mp(b.loaderData,Z.loaderData,Z.matches||[],Z.errors):b.loaderData,aA=b.blockers;aA.size>0&&(aA=new Map(aA),aA.forEach((HA,Jg)=>aA.set(Jg,kv)));let hA=L===!0||b.navigation.formMethod!=null&&zi(b.navigation.formMethod)&&((oA=T.state)==null?void 0:oA._isRedirect)!==!0;E&&(B=E,E=void 0),X||G===cg.Pop||(G===cg.Push?A.history.push(T,T.state):G===cg.Replace&&A.history.replace(T,T.state));let NA;if(G===cg.Pop){let HA=U.get(b.location.pathname);HA&&HA.has(T.pathname)?NA={currentLocation:b.location,nextLocation:T}:U.has(T.pathname)&&(NA={currentLocation:T,nextLocation:b.location})}else if(F){let HA=U.get(b.location.pathname);HA?HA.add(T.pathname):(HA=new Set([T.pathname]),U.set(b.location.pathname,HA)),NA={currentLocation:b.location,nextLocation:T}}zA(NI({},Z,{actionData:nA,loaderData:PA,historyAction:G,location:T,initialized:!0,navigation:iu,revalidation:"idle",restoreScrollPosition:Xc(T,Z.matches||b.matches),preventScrollReset:hA,blockers:aA}),{viewTransitionOpts:NA,flushSync:DA===!0}),G=cg.Pop,L=!1,F=!1,X=!1,Y=!1,J=[]}async function lC(T,Z){if(typeof T=="number"){A.history.go(T);return}let M=dw(b.location,b.matches,e,r.v7_prependBasename,T,r.v7_relativeSplatPath,Z==null?void 0:Z.fromRouteId,Z==null?void 0:Z.relative),{path:gA,submission:oA,error:DA}=lp(r.v7_normalizeFormMethod,!1,M,Z),RA=b.location,nA=Un(b.location,gA,Z&&Z.state);nA=NI({},nA,A.history.encodeLocation(nA));let PA=Z&&Z.replace!=null?Z.replace:void 0,aA=cg.Push;PA===!0?aA=cg.Replace:PA===!1||oA!=null&&zi(oA.formMethod)&&oA.formAction===b.location.pathname+b.location.search&&(aA=cg.Replace);let hA=Z&&"preventScrollReset"in Z?Z.preventScrollReset===!0:void 0,NA=(Z&&Z.flushSync)===!0,HA=uv({currentLocation:RA,nextLocation:nA,historyAction:aA});if(HA){mo(HA,{state:"blocked",location:nA,proceed(){mo(HA,{state:"proceeding",proceed:void 0,reset:void 0,location:nA}),lC(T,Z)},reset(){let Jg=new Map(b.blockers);Jg.set(HA,kv),zA({blockers:Jg})}});return}return await vg(aA,nA,{submission:oA,pendingError:DA,preventScrollReset:hA,replace:Z&&Z.replace,enableViewTransition:Z&&Z.viewTransition,flushSync:NA})}function aQ(){if(iA(),zA({revalidation:"loading"}),b.navigation.state!=="submitting"){if(b.navigation.state==="idle"){vg(b.historyAction,b.location,{startUninterruptedRevalidation:!0});return}vg(G||b.historyAction,b.navigation.location,{overrideNavigation:b.navigation,enableViewTransition:F===!0})}}async function vg(T,Z,M){m&&m.abort(),m=null,G=T,X=(M&&M.startUninterruptedRevalidation)===!0,Lh(b.location,b.matches),L=(M&&M.preventScrollReset)===!0,F=(M&&M.enableViewTransition)===!0;let gA=E||B,oA=M&&M.overrideNavigation,DA=M!=null&&M.initialHydration&&b.matches&&b.matches.length>0&&!h?b.matches:lt(gA,Z,e),RA=(M&&M.flushSync)===!0;if(DA&&b.initialized&&!Y&&s_(b.location,Z)&&!(M&&M.submission&&zi(M.submission.formMethod))){VI(Z,{matches:DA},{flushSync:RA});return}let nA=wo(DA,gA,Z.pathname);if(nA.active&&nA.matches&&(DA=nA.matches),!DA){let{error:lI,notFoundMatches:II,route:$I}=Dv(Z.pathname);VI(Z,{matches:II,loaderData:{},errors:{[$I.id]:lI}},{flushSync:RA});return}m=new AbortController;let PA=po(A.history,Z,m.signal,M&&M.submission),aA;if(M&&M.pendingError)aA=[Pt(DA).route.id,{type:eI.error,error:M.pendingError}];else if(M&&M.submission&&zi(M.submission.formMethod)){let lI=await nQ(PA,Z,M.submission,DA,nA.active,{replace:M.replace,flushSync:RA});if(lI.shortCircuited)return;if(lI.pendingActionResult){let[II,$I]=lI.pendingActionResult;if(uQ($I)&&kn($I.error)&&$I.error.status===404){m=null,VI(Z,{matches:lI.matches,loaderData:{},errors:{[II]:$I.error}});return}}DA=lI.matches||DA,aA=lI.pendingActionResult,oA=Bu(Z,M.submission),RA=!1,nA.active=!1,PA=po(A.history,PA.url,PA.signal)}let{shortCircuited:hA,matches:NA,loaderData:HA,errors:Jg}=await VQ(PA,Z,DA,nA.active,oA,M&&M.submission,M&&M.fetcherSubmission,M&&M.replace,M&&M.initialHydration===!0,RA,aA);hA||(m=null,VI(Z,NI({matches:NA||DA},wp(aA),{loaderData:HA,errors:Jg})))}async function nQ(T,Z,M,gA,oA,DA){DA===void 0&&(DA={}),iA();let RA=P_(Z,M);if(zA({navigation:RA},{flushSync:DA.flushSync===!0}),oA){let aA=await Go(gA,Z.pathname,T.signal);if(aA.type==="aborted")return{shortCircuited:!0};if(aA.type==="error"){let hA=Pt(aA.partialMatches).route.id;return{matches:aA.partialMatches,pendingActionResult:[hA,{type:eI.error,error:aA.error}]}}else if(aA.matches)gA=aA.matches;else{let{notFoundMatches:hA,error:NA,route:HA}=Dv(Z.pathname);return{matches:hA,pendingActionResult:[HA.id,{type:eI.error,error:NA}]}}}let nA,PA=la(gA,Z);if(!PA.route.action&&!PA.route.lazy)nA={type:eI.error,error:HC(405,{method:T.method,pathname:Z.pathname,routeId:PA.route.id})};else if(nA=(await KC("action",b,T,[PA],gA,null))[PA.route.id],T.signal.aborted)return{shortCircuited:!0};if(mt(nA)){let aA;return DA&&DA.replace!=null?aA=DA.replace:aA=Dp(nA.response.headers.get("Location"),new URL(T.url),e)===b.location.pathname+b.location.search,await dC(T,nA,!0,{submission:M,replace:aA}),{shortCircuited:!0}}if(ie(nA))throw HC(400,{type:"defer-action"});if(uQ(nA)){let aA=Pt(gA,PA.route.id);return(DA&&DA.replace)!==!0&&(G=cg.Push),{matches:gA,pendingActionResult:[aA.route.id,nA]}}return{matches:gA,pendingActionResult:[PA.route.id,nA]}}async function VQ(T,Z,M,gA,oA,DA,RA,nA,PA,aA,hA){let NA=oA||Bu(Z,DA),HA=DA||RA||Lp(NA),Jg=!X&&(!r.v7_partialHydration||!PA);if(gA){if(Jg){let Ag=PC(hA);zA(NI({navigation:NA},Ag!==void 0?{actionData:Ag}:{}),{flushSync:aA})}let $A=await Go(M,Z.pathname,T.signal);if($A.type==="aborted")return{shortCircuited:!0};if($A.type==="error"){let Ag=Pt($A.partialMatches).route.id;return{matches:$A.partialMatches,loaderData:{},errors:{[Ag]:$A.error}}}else if($A.matches)M=$A.matches;else{let{error:Ag,notFoundMatches:Lo,route:wv}=Dv(Z.pathname);return{matches:Lo,loaderData:{},errors:{[wv.id]:Ag}}}}let lI=E||B,[II,$I]=dp(A.history,b,M,HA,Z,r.v7_partialHydration&&PA===!0,r.v7_skipActionErrorRevalidation,Y,J,V,lA,R,QA,lI,e,hA);if(bv($A=>!(M&&M.some(Ag=>Ag.route.id===$A))||II&&II.some(Ag=>Ag.route.id===$A)),w=++z,II.length===0&&$I.length===0){let $A=Wg();return VI(Z,NI({matches:M,loaderData:{},errors:hA&&uQ(hA[1])?{[hA[0]]:hA[1].error}:null},wp(hA),$A?{fetchers:new Map(b.fetchers)}:{}),{flushSync:aA}),{shortCircuited:!0}}if(Jg){let $A={};if(!gA){$A.navigation=NA;let Ag=PC(hA);Ag!==void 0&&($A.actionData=Ag)}$I.length>0&&($A.fetchers=ZC($I)),zA($A,{flushSync:aA})}$I.forEach($A=>{_I($A.key),$A.controller&&N.set($A.key,$A.controller)});let Ro=()=>$I.forEach($A=>_I($A.key));m&&m.signal.addEventListener("abort",Ro);let{loaderResults:yv,fetcherResults:jB}=await x(b,M,II,$I,T);if(T.signal.aborted)return{shortCircuited:!0};m&&m.signal.removeEventListener("abort",Ro),$I.forEach($A=>N.delete($A.key));let sB=al(yv);if(sB)return await dC(T,sB.result,!0,{replace:nA}),{shortCircuited:!0};if(sB=al(jB),sB)return QA.add(sB.key),await dC(T,sB.result,!0,{replace:nA}),{shortCircuited:!0};let{loaderData:Th,errors:mv}=yp(b,M,yv,hA,$I,jB,H);H.forEach(($A,Ag)=>{$A.subscribe(Lo=>{(Lo||$A.done)&&H.delete(Ag)})}),r.v7_partialHydration&&PA&&b.errors&&(mv=NI({},b.errors,mv));let $e=Wg(),xc=Tg(w),Oc=$e||xc||$I.length>0;return NI({matches:M,loaderData:Th,errors:mv},Oc?{fetchers:new Map(b.fetchers)}:{})}function PC(T){if(T&&!uQ(T[1]))return{[T[0]]:T[1].data};if(b.actionData)return Object.keys(b.actionData).length===0?null:b.actionData}function ZC(T){return T.forEach(Z=>{let M=b.fetchers.get(Z.key),gA=Yv(void 0,M?M.data:void 0);b.fetchers.set(Z.key,gA)}),new Map(b.fetchers)}function IC(T,Z,M,gA){if(C)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");_I(T);let oA=(gA&&gA.flushSync)===!0,DA=E||B,RA=dw(b.location,b.matches,e,r.v7_prependBasename,M,r.v7_relativeSplatPath,Z,gA==null?void 0:gA.relative),nA=lt(DA,RA,e),PA=wo(nA,DA,RA);if(PA.active&&PA.matches&&(nA=PA.matches),!nA){mA(T,Z,HC(404,{pathname:RA}),{flushSync:oA});return}let{path:aA,submission:hA,error:NA}=lp(r.v7_normalizeFormMethod,!0,RA,gA);if(NA){mA(T,Z,NA,{flushSync:oA});return}let HA=la(nA,aA),Jg=(gA&&gA.preventScrollReset)===!0;if(hA&&zi(hA.formMethod)){zQ(T,Z,aA,HA,nA,PA.active,oA,Jg,hA);return}R.set(T,{routeId:Z,path:aA}),rB(T,Z,aA,HA,nA,PA.active,oA,Jg,hA)}async function zQ(T,Z,M,gA,oA,DA,RA,nA,PA){iA(),R.delete(T);function aA(ag){if(!ag.route.action&&!ag.route.lazy){let So=HC(405,{method:PA.formMethod,pathname:M,routeId:Z});return mA(T,Z,So,{flushSync:RA}),!0}return!1}if(!DA&&aA(gA))return;let hA=b.fetchers.get(T);uA(T,d_(PA,hA),{flushSync:RA});let NA=new AbortController,HA=po(A.history,M,NA.signal,PA);if(DA){let ag=await Go(oA,new URL(HA.url).pathname,HA.signal,T);if(ag.type==="aborted")return;if(ag.type==="error"){mA(T,Z,ag.error,{flushSync:RA});return}else if(ag.matches){if(oA=ag.matches,gA=la(oA,M),aA(gA))return}else{mA(T,Z,HC(404,{pathname:M}),{flushSync:RA});return}}N.set(T,NA);let Jg=z,II=(await KC("action",b,HA,[gA],oA,T))[gA.route.id];if(HA.signal.aborted){N.get(T)===NA&&N.delete(T);return}if(r.v7_fetcherPersist&&lA.has(T)){if(mt(II)||uQ(II)){uA(T,JE(void 0));return}}else{if(mt(II))if(N.delete(T),w>Jg){uA(T,JE(void 0));return}else return QA.add(T),uA(T,Yv(PA)),dC(HA,II,!1,{fetcherSubmission:PA,preventScrollReset:nA});if(uQ(II)){mA(T,Z,II.error);return}}if(ie(II))throw HC(400,{type:"defer-action"});let $I=b.navigation.location||b.location,Ro=po(A.history,$I,NA.signal),yv=E||B,jB=b.navigation.state!=="idle"?lt(yv,b.navigation.location,e):b.matches;jA(jB,"Didn't find any matches after fetcher action");let sB=++z;CA.set(T,sB);let Th=Yv(PA,II.data);b.fetchers.set(T,Th);let[mv,$e]=dp(A.history,b,jB,PA,$I,!1,r.v7_skipActionErrorRevalidation,Y,J,V,lA,R,QA,yv,e,[gA.route.id,II]);$e.filter(ag=>ag.key!==T).forEach(ag=>{let So=ag.key,CT=b.fetchers.get(So),qx=Yv(void 0,CT?CT.data:void 0);b.fetchers.set(So,qx),_I(So),ag.controller&&N.set(So,ag.controller)}),zA({fetchers:new Map(b.fetchers)});let xc=()=>$e.forEach(ag=>_I(ag.key));NA.signal.addEventListener("abort",xc);let{loaderResults:Oc,fetcherResults:$A}=await x(b,jB,mv,$e,Ro);if(NA.signal.aborted)return;NA.signal.removeEventListener("abort",xc),CA.delete(T),N.delete(T),$e.forEach(ag=>N.delete(ag.key));let Ag=al(Oc);if(Ag)return dC(Ro,Ag.result,!1,{preventScrollReset:nA});if(Ag=al($A),Ag)return QA.add(Ag.key),dC(Ro,Ag.result,!1,{preventScrollReset:nA});let{loaderData:Lo,errors:wv}=yp(b,jB,Oc,void 0,$e,$A,H);if(b.fetchers.has(T)){let ag=JE(II.data);b.fetchers.set(T,ag)}Tg(sB),b.navigation.state==="loading"&&sB>w?(jA(G,"Expected pending action"),m&&m.abort(),VI(b.navigation.location,{matches:jB,loaderData:Lo,errors:wv,fetchers:new Map(b.fetchers)})):(zA({errors:wv,loaderData:mp(b.loaderData,Lo,jB,wv),fetchers:new Map(b.fetchers)}),Y=!1)}async function rB(T,Z,M,gA,oA,DA,RA,nA,PA){let aA=b.fetchers.get(T);uA(T,Yv(PA,aA?aA.data:void 0),{flushSync:RA});let hA=new AbortController,NA=po(A.history,M,hA.signal);if(DA){let II=await Go(oA,new URL(NA.url).pathname,NA.signal,T);if(II.type==="aborted")return;if(II.type==="error"){mA(T,Z,II.error,{flushSync:RA});return}else if(II.matches)oA=II.matches,gA=la(oA,M);else{mA(T,Z,HC(404,{pathname:M}),{flushSync:RA});return}}N.set(T,hA);let HA=z,lI=(await KC("loader",b,NA,[gA],oA,T))[gA.route.id];if(ie(lI)&&(lI=await mL(lI,NA.signal,!0)||lI),N.get(T)===hA&&N.delete(T),!NA.signal.aborted){if(lA.has(T)){uA(T,JE(void 0));return}if(mt(lI))if(w>HA){uA(T,JE(void 0));return}else{QA.add(T),await dC(NA,lI,!1,{preventScrollReset:nA});return}if(uQ(lI)){mA(T,Z,lI.error);return}jA(!ie(lI),"Unhandled fetcher deferred data"),uA(T,JE(lI.data))}}async function dC(T,Z,M,gA){let{submission:oA,fetcherSubmission:DA,preventScrollReset:RA,replace:nA}=gA===void 0?{}:gA;Z.response.headers.has("X-Remix-Revalidate")&&(Y=!0);let PA=Z.response.headers.get("Location");jA(PA,"Expected a Location header on the redirect Response"),PA=Dp(PA,new URL(T.url),e);let aA=Un(b.location,PA,{_isRedirect:!0});if(g){let II=!1;if(Z.response.headers.has("X-Remix-Reload-Document"))II=!0;else if(yL.test(PA)){const $I=A.history.createURL(PA);II=$I.origin!==I.location.origin||Ec($I.pathname,e)==null}if(II){nA?I.location.replace(PA):I.location.assign(PA);return}}m=null;let hA=nA===!0||Z.response.headers.has("X-Remix-Replace")?cg.Replace:cg.Push,{formMethod:NA,formAction:HA,formEncType:Jg}=b.navigation;!oA&&!DA&&NA&&HA&&Jg&&(oA=Lp(b.navigation));let lI=oA||DA;if($6.has(Z.response.status)&&lI&&zi(lI.formMethod))await vg(hA,aA,{submission:NI({},lI,{formAction:PA}),preventScrollReset:RA||L,enableViewTransition:M?F:void 0});else{let II=Bu(aA,oA);await vg(hA,aA,{overrideNavigation:II,fetcherSubmission:DA,preventScrollReset:RA||L,enableViewTransition:M?F:void 0})}}async function KC(T,Z,M,gA,oA,DA){let RA,nA={};try{RA=await E_(t,T,Z,M,gA,oA,DA,i,Q)}catch(PA){return gA.forEach(aA=>{nA[aA.route.id]={type:eI.error,error:PA}}),nA}for(let[PA,aA]of Object.entries(RA))if(v_(aA)){let hA=aA.result;nA[PA]={type:eI.redirect,response:o_(hA,M,PA,oA,e,r.v7_relativeSplatPath)}}else nA[PA]=await t_(aA);return nA}async function x(T,Z,M,gA,oA){let DA=T.matches,RA=KC("loader",T,oA,M,Z,null),nA=Promise.all(gA.map(async hA=>{if(hA.matches&&hA.match&&hA.controller){let HA=(await KC("loader",T,po(A.history,hA.path,hA.controller.signal),[hA.match],hA.matches,hA.key))[hA.match.route.id];return{[hA.key]:HA}}else return Promise.resolve({[hA.key]:{type:eI.error,error:HC(404,{pathname:hA.path})}})})),PA=await RA,aA=(await nA).reduce((hA,NA)=>Object.assign(hA,NA),{});return await Promise.all([c_(Z,PA,oA.signal,DA,T.loaderData),l_(Z,aA,gA)]),{loaderResults:PA,fetcherResults:aA}}function iA(){Y=!0,J.push(...bv()),R.forEach((T,Z)=>{N.has(Z)&&V.add(Z),_I(Z)})}function uA(T,Z,M){M===void 0&&(M={}),b.fetchers.set(T,Z),zA({fetchers:new Map(b.fetchers)},{flushSync:(M&&M.flushSync)===!0})}function mA(T,Z,M,gA){gA===void 0&&(gA={});let oA=Pt(b.matches,Z);Bg(T),zA({errors:{[oA.route.id]:M},fetchers:new Map(b.fetchers)},{flushSync:(gA&&gA.flushSync)===!0})}function XA(T){return cA.set(T,(cA.get(T)||0)+1),lA.has(T)&&lA.delete(T),b.fetchers.get(T)||A_}function Bg(T){let Z=b.fetchers.get(T);N.has(T)&&!(Z&&Z.state==="loading"&&CA.has(T))&&_I(T),R.delete(T),CA.delete(T),QA.delete(T),r.v7_fetcherPersist&&lA.delete(T),V.delete(T),b.fetchers.delete(T)}function cQ(T){let Z=(cA.get(T)||0)-1;Z<=0?(cA.delete(T),lA.add(T),r.v7_fetcherPersist||Bg(T)):cA.set(T,Z),zA({fetchers:new Map(b.fetchers)})}function _I(T){let Z=N.get(T);Z&&(Z.abort(),N.delete(T))}function WC(T){for(let Z of T){let M=XA(Z),gA=JE(M.data);b.fetchers.set(Z,gA)}}function Wg(){let T=[],Z=!1;for(let M of QA){let gA=b.fetchers.get(M);jA(gA,"Expected fetcher: "+M),gA.state==="loading"&&(QA.delete(M),T.push(M),Z=!0)}return WC(T),Z}function Tg(T){let Z=[];for(let[M,gA]of CA)if(gA0}function Ti(T,Z){let M=b.blockers.get(T)||kv;return tA.get(T)!==Z&&tA.set(T,Z),M}function JC(T){b.blockers.delete(T),tA.delete(T)}function mo(T,Z){let M=b.blockers.get(T)||kv;jA(M.state==="unblocked"&&Z.state==="blocked"||M.state==="blocked"&&Z.state==="blocked"||M.state==="blocked"&&Z.state==="proceeding"||M.state==="blocked"&&Z.state==="unblocked"||M.state==="proceeding"&&Z.state==="unblocked","Invalid blocker state transition: "+M.state+" -> "+Z.state);let gA=new Map(b.blockers);gA.set(T,Z),zA({blockers:gA})}function uv(T){let{currentLocation:Z,nextLocation:M,historyAction:gA}=T;if(tA.size===0)return;tA.size>1&&Ds(!1,"A router only supports one blocker at a time");let oA=Array.from(tA.entries()),[DA,RA]=oA[oA.length-1],nA=b.blockers.get(DA);if(!(nA&&nA.state==="proceeding")&&RA({currentLocation:Z,nextLocation:M,historyAction:gA}))return DA}function Dv(T){let Z=HC(404,{pathname:T}),M=E||B,{matches:gA,route:oA}=Gp(M);return bv(),{notFoundMatches:gA,route:oA,error:Z}}function bv(T){let Z=[];return H.forEach((M,gA)=>{(!T||T(gA))&&(M.cancel(),Z.push(gA),H.delete(gA))}),Z}function Rh(T,Z,M){if(n=T,c=Z,a=M||null,!P&&b.navigation===iu){P=!0;let gA=Xc(b.location,b.matches);gA!=null&&zA({restoreScrollPosition:gA})}return()=>{n=null,c=null,a=null}}function jc(T,Z){return a&&a(T,Z.map(gA=>T6(gA,b.loaderData)))||T.key}function Lh(T,Z){if(n&&c){let M=jc(T,Z);n[M]=c()}}function Xc(T,Z){if(n){let M=jc(T,Z),gA=n[M];if(typeof gA=="number")return gA}return null}function wo(T,Z,M){if(o)if(T){if(Object.keys(T[0].params).length>0)return{active:!0,matches:WP(Z,M,e,!0)}}else return{active:!0,matches:WP(Z,M,e,!0)||[]};return{active:!1,matches:null}}async function Go(T,Z,M,gA){if(!o)return{type:"success",matches:T};let oA=T;for(;;){let DA=E==null,RA=E||B,nA=i;try{await o({signal:M,path:Z,matches:oA,fetcherKey:gA,patch:(hA,NA)=>{M.aborted||up(hA,NA,RA,nA,Q)}})}catch(hA){return{type:"error",error:hA,partialMatches:oA}}finally{DA&&!M.aborted&&(B=[...B])}if(M.aborted)return{type:"aborted"};let PA=lt(RA,Z,e);if(PA)return{type:"success",matches:PA};let aA=WP(RA,Z,e,!0);if(!aA||oA.length===aA.length&&oA.every((hA,NA)=>hA.route.id===aA[NA].route.id))return{type:"success",matches:null};oA=aA}}function Hc(T){i={},E=A0(T,Q,void 0,i)}function Sh(T,Z){let M=E==null;up(T,Z,E||B,i,Q),M&&(B=[...B],zA({}))}return y={get basename(){return e},get future(){return r},get state(){return b},get routes(){return B},get window(){return I},initialize:FA,subscribe:JI,enableScrollRestoration:Rh,navigate:lC,fetch:IC,revalidate:aQ,createHref:T=>A.history.createHref(T),encodeLocation:T=>A.history.encodeLocation(T),getFetcher:XA,deleteFetcher:cQ,dispose:WA,getBlocker:Ti,deleteBlocker:JC,patchRoutes:Sh,_internalFetchControllers:N,_internalActiveDeferreds:H,_internalSetRoutes:Hc},y}function C_(A){return A!=null&&("formData"in A&&A.formData!=null||"body"in A&&A.body!==void 0)}function dw(A,I,g,C,Q,i,B,E){let e,t;if(B){e=[];for(let r of I)if(e.push(r),r.route.id===B){t=r;break}}else e=I,t=I[I.length-1];let o=X1(Q||".",j1(e,i),Ec(A.pathname,g)||A.pathname,E==="path");if(Q==null&&(o.search=A.search,o.hash=A.hash),(Q==null||Q===""||Q===".")&&t){let r=wL(o.search);if(t.route.index&&!r)o.search=o.search?o.search.replace(/^\?/,"?index&"):"?index";else if(!t.route.index&&r){let s=new URLSearchParams(o.search),v=s.getAll("index");s.delete("index"),v.filter(a=>a).forEach(a=>s.append("index",a));let n=s.toString();o.search=n?"?"+n:""}}return C&&g!=="/"&&(o.pathname=o.pathname==="/"?g:be([g,o.pathname])),Bc(o)}function lp(A,I,g,C){if(!C||!C_(C))return{path:g};if(C.formMethod&&!n_(C.formMethod))return{path:g,error:HC(405,{method:C.formMethod})};let Q=()=>({path:g,error:HC(400,{type:"invalid-body"})}),i=C.formMethod||"get",B=A?i.toUpperCase():i.toLowerCase(),E=_1(g);if(C.body!==void 0){if(C.formEncType==="text/plain"){if(!zi(B))return Q();let s=typeof C.body=="string"?C.body:C.body instanceof FormData||C.body instanceof URLSearchParams?Array.from(C.body.entries()).reduce((v,n)=>{let[a,c]=n;return""+v+a+"="+c+` +`},""):String(C.body);return{path:g,submission:{formMethod:B,formAction:E,formEncType:C.formEncType,formData:void 0,json:void 0,text:s}}}else if(C.formEncType==="application/json"){if(!zi(B))return Q();try{let s=typeof C.body=="string"?JSON.parse(C.body):C.body;return{path:g,submission:{formMethod:B,formAction:E,formEncType:C.formEncType,formData:void 0,json:s,text:void 0}}}catch{return Q()}}}jA(typeof FormData=="function","FormData is not available in this environment");let e,t;if(C.formData)e=uw(C.formData),t=C.formData;else if(C.body instanceof FormData)e=uw(C.body),t=C.body;else if(C.body instanceof URLSearchParams)e=C.body,t=bp(e);else if(C.body==null)e=new URLSearchParams,t=new FormData;else try{e=new URLSearchParams(C.body),t=bp(e)}catch{return Q()}let o={formMethod:B,formAction:E,formEncType:C&&C.formEncType||"application/x-www-form-urlencoded",formData:t,json:void 0,text:void 0};if(zi(o.formMethod))return{path:g,submission:o};let r=Ze(g);return I&&r.search&&wL(r.search)&&e.append("index",""),r.search="?"+e,{path:Bc(r),submission:o}}function Pp(A,I,g){g===void 0&&(g=!1);let C=A.findIndex(Q=>Q.route.id===I);return C>=0?A.slice(0,g?C+1:C):A}function dp(A,I,g,C,Q,i,B,E,e,t,o,r,s,v,n,a){let c=a?uQ(a[1])?a[1].error:a[1].data:void 0,P=A.createURL(I.location),d=A.createURL(Q),h=g;i&&I.errors?h=Pp(g,Object.keys(I.errors)[0],!0):a&&uQ(a[1])&&(h=Pp(g,a[0]));let u=a?a[1].statusCode:void 0,D=B&&u&&u>=400,y=h.filter((G,L)=>{let{route:m}=G;if(m.lazy)return!0;if(m.loader==null)return!1;if(i)return hw(m,I.loaderData,I.errors);if(Q_(I.loaderData,I.matches[L],G)||e.some(AA=>AA===G.route.id))return!0;let F=I.matches[L],U=G;return hp(G,NI({currentUrl:P,currentParams:F.params,nextUrl:d,nextParams:U.params},C,{actionResult:c,actionStatus:u,defaultShouldRevalidate:D?!1:E||P.pathname+P.search===d.pathname+d.search||P.search!==d.search||O1(F,U)}))}),b=[];return r.forEach((G,L)=>{if(i||!g.some(X=>X.route.id===G.routeId)||o.has(L))return;let m=lt(v,G.path,n);if(!m){b.push({key:L,routeId:G.routeId,path:G.path,matches:null,match:null,controller:null});return}let F=I.fetchers.get(L),U=la(m,G.path),AA=!1;s.has(L)?AA=!1:t.has(L)?(t.delete(L),AA=!0):F&&F.state!=="idle"&&F.data===void 0?AA=E:AA=hp(U,NI({currentUrl:P,currentParams:I.matches[I.matches.length-1].params,nextUrl:d,nextParams:g[g.length-1].params},C,{actionResult:c,actionStatus:u,defaultShouldRevalidate:D?!1:E})),AA&&b.push({key:L,routeId:G.routeId,path:G.path,matches:m,match:U,controller:new AbortController})}),[y,b]}function hw(A,I,g){if(A.lazy)return!0;if(!A.loader)return!1;let C=I!=null&&I[A.id]!==void 0,Q=g!=null&&g[A.id]!==void 0;return!C&&Q?!1:typeof A.loader=="function"&&A.loader.hydrate===!0?!0:!C&&!Q}function Q_(A,I,g){let C=!I||g.route.id!==I.route.id,Q=A[g.route.id]===void 0;return C||Q}function O1(A,I){let g=A.route.path;return A.pathname!==I.pathname||g!=null&&g.endsWith("*")&&A.params["*"]!==I.params["*"]}function hp(A,I){if(A.route.shouldRevalidate){let g=A.route.shouldRevalidate(I);if(typeof g=="boolean")return g}return I.defaultShouldRevalidate}function up(A,I,g,C,Q){var i;let B;if(A){let t=C[A];jA(t,"No route found to patch children into: routeId = "+A),t.children||(t.children=[]),B=t.children}else B=g;let E=I.filter(t=>!B.some(o=>q1(t,o))),e=A0(E,Q,[A||"_","patch",String(((i=B)==null?void 0:i.length)||"0")],C);B.push(...e)}function q1(A,I){return"id"in A&&"id"in I&&A.id===I.id?!0:A.index===I.index&&A.path===I.path&&A.caseSensitive===I.caseSensitive?(!A.children||A.children.length===0)&&(!I.children||I.children.length===0)?!0:A.children.every((g,C)=>{var Q;return(Q=I.children)==null?void 0:Q.some(i=>q1(g,i))}):!1}async function i_(A,I,g){if(!A.lazy)return;let C=await A.lazy();if(!A.lazy)return;let Q=g[A.id];jA(Q,"No route found in manifest");let i={};for(let B in C){let e=Q[B]!==void 0&&B!=="hasErrorBoundary";Ds(!e,'Route "'+Q.id+'" has a static property "'+B+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+B+'" will be ignored.')),!e&&!L6.has(B)&&(i[B]=C[B])}Object.assign(Q,i),Object.assign(Q,NI({},I(Q),{lazy:void 0}))}async function B_(A){let{matches:I}=A,g=I.filter(Q=>Q.shouldLoad);return(await Promise.all(g.map(Q=>Q.resolve()))).reduce((Q,i,B)=>Object.assign(Q,{[g[B].route.id]:i}),{})}async function E_(A,I,g,C,Q,i,B,E,e,t){let o=i.map(v=>v.route.lazy?i_(v.route,e,E):void 0),r=i.map((v,n)=>{let a=o[n],c=Q.some(d=>d.route.id===v.route.id);return NI({},v,{shouldLoad:c,resolve:async d=>(d&&C.method==="GET"&&(v.route.lazy||v.route.loader)&&(c=!0),c?e_(I,C,v,a,d,t):Promise.resolve({type:eI.data,result:void 0}))})}),s=await A({matches:r,request:C,params:i[0].params,fetcherKey:B,context:t});try{await Promise.all(o)}catch{}return s}async function e_(A,I,g,C,Q,i){let B,E,e=t=>{let o,r=new Promise((n,a)=>o=a);E=()=>o(),I.signal.addEventListener("abort",E);let s=n=>typeof t!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+A+'" [routeId: '+g.route.id+"]"))):t({request:I,params:g.params,context:i},...n!==void 0?[n]:[]),v=(async()=>{try{return{type:"data",result:await(Q?Q(a=>s(a)):s())}}catch(n){return{type:"error",result:n}}})();return Promise.race([v,r])};try{let t=g.route[A];if(C)if(t){let o,[r]=await Promise.all([e(t).catch(s=>{o=s}),C]);if(o!==void 0)throw o;B=r}else if(await C,t=g.route[A],t)B=await e(t);else if(A==="action"){let o=new URL(I.url),r=o.pathname+o.search;throw HC(405,{method:I.method,pathname:r,routeId:g.route.id})}else return{type:eI.data,result:void 0};else if(t)B=await e(t);else{let o=new URL(I.url),r=o.pathname+o.search;throw HC(404,{pathname:r})}jA(B.result!==void 0,"You defined "+(A==="action"?"an action":"a loader")+" for route "+('"'+g.route.id+"\" but didn't return anything from your `"+A+"` ")+"function. Please return a value or `null`.")}catch(t){return{type:eI.error,result:t}}finally{E&&I.signal.removeEventListener("abort",E)}return B}async function t_(A){let{result:I,type:g}=A;if($1(I)){let r;try{let s=I.headers.get("Content-Type");s&&/\bapplication\/json\b/.test(s)?I.body==null?r=null:r=await I.json():r=await I.text()}catch(s){return{type:eI.error,error:s}}return g===eI.error?{type:eI.error,error:new I0(I.status,I.statusText,r),statusCode:I.status,headers:I.headers}:{type:eI.data,data:r,statusCode:I.status,headers:I.headers}}if(g===eI.error){if(Rp(I)){var C,Q;if(I.data instanceof Error){var i,B;return{type:eI.error,error:I.data,statusCode:(i=I.init)==null?void 0:i.status,headers:(B=I.init)!=null&&B.headers?new Headers(I.init.headers):void 0}}return{type:eI.error,error:new I0(((C=I.init)==null?void 0:C.status)||500,void 0,I.data),statusCode:kn(I)?I.status:void 0,headers:(Q=I.init)!=null&&Q.headers?new Headers(I.init.headers):void 0}}return{type:eI.error,error:I,statusCode:kn(I)?I.status:void 0}}if(a_(I)){var E,e;return{type:eI.deferred,deferredData:I,statusCode:(E=I.init)==null?void 0:E.status,headers:((e=I.init)==null?void 0:e.headers)&&new Headers(I.init.headers)}}if(Rp(I)){var t,o;return{type:eI.data,data:I.data,statusCode:(t=I.init)==null?void 0:t.status,headers:(o=I.init)!=null&&o.headers?new Headers(I.init.headers):void 0}}return{type:eI.data,data:I}}function o_(A,I,g,C,Q,i){let B=A.headers.get("Location");if(jA(B,"Redirects returned/thrown from loaders/actions must have a Location header"),!yL.test(B)){let E=C.slice(0,C.findIndex(e=>e.route.id===g)+1);B=dw(new URL(I.url),E,Q,!0,B,i),A.headers.set("Location",B)}return A}function Dp(A,I,g){if(yL.test(A)){let C=A,Q=C.startsWith("//")?new URL(I.protocol+C):new URL(C),i=Ec(Q.pathname,g)!=null;if(Q.origin===I.origin&&i)return Q.pathname+Q.search+Q.hash}return A}function po(A,I,g,C){let Q=A.createURL(_1(I)).toString(),i={signal:g};if(C&&zi(C.formMethod)){let{formMethod:B,formEncType:E}=C;i.method=B.toUpperCase(),E==="application/json"?(i.headers=new Headers({"Content-Type":E}),i.body=JSON.stringify(C.json)):E==="text/plain"?i.body=C.text:E==="application/x-www-form-urlencoded"&&C.formData?i.body=uw(C.formData):i.body=C.formData}return new Request(Q,i)}function uw(A){let I=new URLSearchParams;for(let[g,C]of A.entries())I.append(g,typeof C=="string"?C:C.name);return I}function bp(A){let I=new FormData;for(let[g,C]of A.entries())I.append(g,C);return I}function r_(A,I,g,C,Q){let i={},B=null,E,e=!1,t={},o=g&&uQ(g[1])?g[1].error:void 0;return A.forEach(r=>{if(!(r.route.id in I))return;let s=r.route.id,v=I[s];if(jA(!mt(v),"Cannot handle redirect results in processLoaderData"),uQ(v)){let n=v.error;o!==void 0&&(n=o,o=void 0),B=B||{};{let a=Pt(A,s);B[a.route.id]==null&&(B[a.route.id]=n)}i[s]=void 0,e||(e=!0,E=kn(v.error)?v.error.status:500),v.headers&&(t[s]=v.headers)}else ie(v)?(C.set(s,v.deferredData),i[s]=v.deferredData.data,v.statusCode!=null&&v.statusCode!==200&&!e&&(E=v.statusCode),v.headers&&(t[s]=v.headers)):(i[s]=v.data,v.statusCode&&v.statusCode!==200&&!e&&(E=v.statusCode),v.headers&&(t[s]=v.headers))}),o!==void 0&&g&&(B={[g[0]]:o},i[g[0]]=void 0),{loaderData:i,errors:B,statusCode:E||200,loaderHeaders:t}}function yp(A,I,g,C,Q,i,B){let{loaderData:E,errors:e}=r_(I,g,C,B);return Q.forEach(t=>{let{key:o,match:r,controller:s}=t,v=i[o];if(jA(v,"Did not find corresponding fetcher result"),!(s&&s.signal.aborted))if(uQ(v)){let n=Pt(A.matches,r==null?void 0:r.route.id);e&&e[n.route.id]||(e=NI({},e,{[n.route.id]:v.error})),A.fetchers.delete(o)}else if(mt(v))jA(!1,"Unhandled fetcher revalidation redirect");else if(ie(v))jA(!1,"Unhandled fetcher deferred data");else{let n=JE(v.data);A.fetchers.set(o,n)}}),{loaderData:E,errors:e}}function mp(A,I,g,C){let Q=NI({},I);for(let i of g){let B=i.route.id;if(I.hasOwnProperty(B)?I[B]!==void 0&&(Q[B]=I[B]):A[B]!==void 0&&i.route.loader&&(Q[B]=A[B]),C&&C.hasOwnProperty(B))break}return Q}function wp(A){return A?uQ(A[1])?{actionData:{}}:{actionData:{[A[0]]:A[1].data}}:{}}function Pt(A,I){return(I?A.slice(0,A.findIndex(C=>C.route.id===I)+1):[...A]).reverse().find(C=>C.route.hasErrorBoundary===!0)||A[0]}function Gp(A){let I=A.length===1?A[0]:A.find(g=>g.index||!g.path||g.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:I}],route:I}}function HC(A,I){let{pathname:g,routeId:C,method:Q,type:i,message:B}=I===void 0?{}:I,E="Unknown Server Error",e="Unknown @remix-run/router error";return A===400?(E="Bad Request",Q&&g&&C?e="You made a "+Q+' request to "'+g+'" but '+('did not provide a `loader` for route "'+C+'", ')+"so there is no way to handle the request.":i==="defer-action"?e="defer() is not supported in actions":i==="invalid-body"&&(e="Unable to encode submission body")):A===403?(E="Forbidden",e='Route "'+C+'" does not match URL "'+g+'"'):A===404?(E="Not Found",e='No route matches URL "'+g+'"'):A===405&&(E="Method Not Allowed",Q&&g&&C?e="You made a "+Q.toUpperCase()+' request to "'+g+'" but '+('did not provide an `action` for route "'+C+'", ')+"so there is no way to handle the request.":Q&&(e='Invalid request method "'+Q.toUpperCase()+'"')),new I0(A||500,E,new Error(e),!0)}function al(A){let I=Object.entries(A);for(let g=I.length-1;g>=0;g--){let[C,Q]=I[g];if(mt(Q))return{key:C,result:Q}}}function _1(A){let I=typeof A=="string"?Ze(A):A;return Bc(NI({},I,{hash:""}))}function s_(A,I){return A.pathname!==I.pathname||A.search!==I.search?!1:A.hash===""?I.hash!=="":A.hash===I.hash?!0:I.hash!==""}function v_(A){return $1(A.result)&&_6.has(A.result.status)}function ie(A){return A.type===eI.deferred}function uQ(A){return A.type===eI.error}function mt(A){return(A&&A.type)===eI.redirect}function Rp(A){return typeof A=="object"&&A!=null&&"type"in A&&"data"in A&&"init"in A&&A.type==="DataWithResponseInit"}function a_(A){let I=A;return I&&typeof I=="object"&&typeof I.data=="object"&&typeof I.subscribe=="function"&&typeof I.cancel=="function"&&typeof I.resolveData=="function"}function $1(A){return A!=null&&typeof A.status=="number"&&typeof A.statusText=="string"&&typeof A.headers=="object"&&typeof A.body<"u"}function n_(A){return q6.has(A.toLowerCase())}function zi(A){return x6.has(A.toLowerCase())}async function c_(A,I,g,C,Q){let i=Object.entries(I);for(let B=0;B(s==null?void 0:s.route.id)===E);if(!t)continue;let o=C.find(s=>s.route.id===t.route.id),r=o!=null&&!O1(o,t)&&(Q&&Q[t.route.id])!==void 0;ie(e)&&r&&await mL(e,g,!1).then(s=>{s&&(I[E]=s)})}}async function l_(A,I,g){for(let C=0;C(t==null?void 0:t.route.id)===i)&&ie(E)&&(jA(B,"Expected an AbortController for revalidating fetcher deferred result"),await mL(E,B.signal,!0).then(t=>{t&&(I[Q]=t)}))}}async function mL(A,I,g){if(g===void 0&&(g=!1),!await A.deferredData.resolveData(I)){if(g)try{return{type:eI.data,data:A.deferredData.unwrappedData}}catch(Q){return{type:eI.error,error:Q}}return{type:eI.data,data:A.deferredData.data}}}function wL(A){return new URLSearchParams(A).getAll("index").some(I=>I==="")}function la(A,I){let g=typeof I=="string"?Ze(I).search:I.search;if(A[A.length-1].route.index&&wL(g||""))return A[A.length-1];let C=f1(A);return C[C.length-1]}function Lp(A){let{formMethod:I,formAction:g,formEncType:C,text:Q,formData:i,json:B}=A;if(!(!I||!g||!C)){if(Q!=null)return{formMethod:I,formAction:g,formEncType:C,formData:void 0,json:void 0,text:Q};if(i!=null)return{formMethod:I,formAction:g,formEncType:C,formData:i,json:void 0,text:void 0};if(B!==void 0)return{formMethod:I,formAction:g,formEncType:C,formData:void 0,json:B,text:void 0}}}function Bu(A,I){return I?{state:"loading",location:A,formMethod:I.formMethod,formAction:I.formAction,formEncType:I.formEncType,formData:I.formData,json:I.json,text:I.text}:{state:"loading",location:A,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function P_(A,I){return{state:"submitting",location:A,formMethod:I.formMethod,formAction:I.formAction,formEncType:I.formEncType,formData:I.formData,json:I.json,text:I.text}}function Yv(A,I){return A?{state:"loading",formMethod:A.formMethod,formAction:A.formAction,formEncType:A.formEncType,formData:A.formData,json:A.json,text:A.text,data:I}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:I}}function d_(A,I){return{state:"submitting",formMethod:A.formMethod,formAction:A.formAction,formEncType:A.formEncType,formData:A.formData,json:A.json,text:A.text,data:I?I.data:void 0}}function JE(A){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:A}}function h_(A,I){try{let g=A.sessionStorage.getItem(x1);if(g){let C=JSON.parse(g);for(let[Q,i]of Object.entries(C||{}))i&&Array.isArray(i)&&I.set(Q,new Set(i||[]))}}catch{}}function u_(A,I){if(I.size>0){let g={};for(let[C,Q]of I)g[C]=[...Q];try{A.sessionStorage.setItem(x1,JSON.stringify(g))}catch(C){Ds(!1,"Failed to save applied view transitions in sessionStorage ("+C+").")}}}/** + * React Router v6.30.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function g0(){return g0=Object.assign?Object.assign.bind():function(A){for(var I=1;I{E.current=!0}),k.useCallback(function(t,o){if(o===void 0&&(o={}),!E.current)return;if(typeof t=="number"){C.go(t);return}let r=X1(t,JSON.parse(B),i,o.relative==="path");A==null&&I!=="/"&&(r.pathname=r.pathname==="/"?I:be([I,r.pathname])),(o.replace?C.replace:C.push)(r,o.state,o)},[I,C,B,i,A])}const y_=k.createContext(null);function m_(A){let I=k.useContext(ro).outlet;return I&&k.createElement(y_.Provider,{value:A},I)}function w_(A,I,g,C){bd()||jA(!1);let{navigator:Q,static:i}=k.useContext(Dd),{matches:B}=k.useContext(ro),E=B[B.length-1],e=E?E.params:{};E&&E.pathname;let t=E?E.pathnameBase:"/";E&&E.route;let o=RL(),r;r=o;let s=r.pathname||"/",v=s;if(t!=="/"){let c=t.replace(/^\//,"").split("/");v="/"+s.replace(/^\//,"").split("/").slice(c.length).join("/")}let n=!i&&g&&g.matches&&g.matches.length>0?g.matches:lt(A,{pathname:v});return T_(n&&n.map(c=>Object.assign({},c,{params:Object.assign({},e,c.params),pathname:be([t,Q.encodeLocation?Q.encodeLocation(c.pathname).pathname:c.pathname]),pathnameBase:c.pathnameBase==="/"?t:be([t,Q.encodeLocation?Q.encodeLocation(c.pathnameBase).pathname:c.pathnameBase])})),B,g,C)}function G_(){let A=k_(),I=kn(A)?A.status+" "+A.statusText:A instanceof Error?A.message:JSON.stringify(A),g=A instanceof Error?A.stack:null,Q={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return k.createElement(k.Fragment,null,k.createElement("h2",null,"Unexpected Application Error!"),k.createElement("h3",{style:{fontStyle:"italic"}},I),g?k.createElement("pre",{style:Q},g):null,null)}const R_=k.createElement(G_,null);class L_ extends k.Component{constructor(I){super(I),this.state={location:I.location,revalidation:I.revalidation,error:I.error}}static getDerivedStateFromError(I){return{error:I}}static getDerivedStateFromProps(I,g){return g.location!==I.location||g.revalidation!=="idle"&&I.revalidation==="idle"?{error:I.error,location:I.location,revalidation:I.revalidation}:{error:I.error!==void 0?I.error:g.error,location:g.location,revalidation:I.revalidation||g.revalidation}}componentDidCatch(I,g){console.error("React Router caught the following error during render",I,g)}render(){return this.state.error!==void 0?k.createElement(ro.Provider,{value:this.props.routeContext},k.createElement(IV.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function S_(A){let{routeContext:I,match:g,children:C}=A,Q=k.useContext(ud);return Q&&Q.static&&Q.staticContext&&(g.route.errorElement||g.route.ErrorBoundary)&&(Q.staticContext._deepestRenderedBoundaryId=g.route.id),k.createElement(ro.Provider,{value:I},C)}function T_(A,I,g,C){var Q;if(I===void 0&&(I=[]),g===void 0&&(g=null),C===void 0&&(C=null),A==null){var i;if(!g)return null;if(g.errors)A=g.matches;else if((i=C)!=null&&i.v7_partialHydration&&I.length===0&&!g.initialized&&g.matches.length>0)A=g.matches;else return null}let B=A,E=(Q=g)==null?void 0:Q.errors;if(E!=null){let o=B.findIndex(r=>r.route.id&&(E==null?void 0:E[r.route.id])!==void 0);o>=0||jA(!1),B=B.slice(0,Math.min(B.length,o+1))}let e=!1,t=-1;if(g&&C&&C.v7_partialHydration)for(let o=0;o=0?B=B.slice(0,t+1):B=[B[0]];break}}}return B.reduceRight((o,r,s)=>{let v,n=!1,a=null,c=null;g&&(v=E&&r.route.id?E[r.route.id]:void 0,a=r.route.errorElement||R_,e&&(t<0&&s===0?(N_("route-fallback"),n=!0,c=null):t===s&&(n=!0,c=r.route.hydrateFallbackElement||null)));let P=I.concat(B.slice(0,s+1)),d=()=>{let h;return v?h=a:n?h=c:r.route.Component?h=k.createElement(r.route.Component,null):r.route.element?h=r.route.element:h=o,k.createElement(S_,{match:r,routeContext:{outlet:o,matches:P,isDataRoute:g!=null},children:h})};return g&&(r.route.ErrorBoundary||r.route.errorElement||s===0)?k.createElement(L_,{location:g.location,revalidation:g.revalidation,component:a,error:v,children:d(),routeContext:{outlet:null,matches:P,isDataRoute:!0}}):d()},null)}var CV=function(A){return A.UseBlocker="useBlocker",A.UseRevalidator="useRevalidator",A.UseNavigateStable="useNavigate",A}(CV||{}),QV=function(A){return A.UseBlocker="useBlocker",A.UseLoaderData="useLoaderData",A.UseActionData="useActionData",A.UseRouteError="useRouteError",A.UseNavigation="useNavigation",A.UseRouteLoaderData="useRouteLoaderData",A.UseMatches="useMatches",A.UseRevalidator="useRevalidator",A.UseNavigateStable="useNavigate",A.UseRouteId="useRouteId",A}(QV||{});function p_(A){let I=k.useContext(ud);return I||jA(!1),I}function F_(A){let I=k.useContext(AV);return I||jA(!1),I}function U_(A){let I=k.useContext(ro);return I||jA(!1),I}function iV(A){let I=U_(),g=I.matches[I.matches.length-1];return g.route.id||jA(!1),g.route.id}function k_(){var A;let I=k.useContext(IV),g=F_(),C=iV();return I!==void 0?I:(A=g.errors)==null?void 0:A[C]}function Y_(){let{router:A}=p_(CV.UseNavigateStable),I=iV(QV.UseNavigateStable),g=k.useRef(!1);return gV(()=>{g.current=!0}),k.useCallback(function(Q,i){i===void 0&&(i={}),g.current&&(typeof Q=="number"?A.navigate(Q):A.navigate(Q,g0({fromRouteId:I},i)))},[A,I])}const Sp={};function N_(A,I,g){Sp[A]||(Sp[A]=!0)}function Z_(A,I){A==null||A.v7_startTransition,(A==null?void 0:A.v7_relativeSplatPath)===void 0&&(!I||I.v7_relativeSplatPath),I&&(I.v7_fetcherPersist,I.v7_normalizeFormMethod,I.v7_partialHydration,I.v7_skipActionErrorRevalidation)}function w$A(A){return m_(A.context)}function K_(A){let{basename:I="/",children:g=null,location:C,navigationType:Q=cg.Pop,navigator:i,static:B=!1,future:E}=A;bd()&&jA(!1);let e=I.replace(/^\/*/,"/"),t=k.useMemo(()=>({basename:e,navigator:i,static:B,future:g0({v7_relativeSplatPath:!1},E)}),[e,E,i,B]);typeof C=="string"&&(C=Ze(C));let{pathname:o="/",search:r="",hash:s="",state:v=null,key:n="default"}=C,a=k.useMemo(()=>{let c=Ec(o,e);return c==null?null:{location:{pathname:c,search:r,hash:s,state:v,key:n},navigationType:Q}},[e,o,r,s,v,n,Q]);return a==null?null:k.createElement(Dd.Provider,{value:t},k.createElement(GL.Provider,{children:g,value:a}))}new Promise(()=>{});function W_(A){let I={hasErrorBoundary:A.ErrorBoundary!=null||A.errorElement!=null};return A.Component&&Object.assign(I,{element:k.createElement(A.Component),Component:void 0}),A.HydrateFallback&&Object.assign(I,{hydrateFallbackElement:k.createElement(A.HydrateFallback),HydrateFallback:void 0}),A.ErrorBoundary&&Object.assign(I,{errorElement:k.createElement(A.ErrorBoundary),ErrorBoundary:void 0}),I}/** + * React Router DOM v6.30.0 + * + * Copyright (c) Remix Software Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE.md file in the root directory of this source tree. + * + * @license MIT + */function C0(){return C0=Object.assign?Object.assign.bind():function(A){for(var I=1;I{let C=A[g];return I.concat(Array.isArray(C)?C.map(Q=>[g,Q]):[[g,C]])},[]))}function J_(A,I){let g=Dw(A);return I&&I.forEach((C,Q)=>{g.has(Q)||I.getAll(Q).forEach(i=>{g.append(Q,i)})}),g}const V_="6";try{window.__reactRouterVersion=V_}catch{}function G$A(A,I){return g_({basename:void 0,future:C0({},void 0,{v7_prependBasename:!0}),history:w6({window:void 0}),hydrationData:z_(),routes:A,mapRouteProperties:W_,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function z_(){var A;let I=(A=window)==null?void 0:A.__staticRouterHydrationData;return I&&I.errors&&(I=C0({},I,{errors:M_(I.errors)})),I}function M_(A){if(!A)return null;let I=Object.entries(A),g={};for(let[C,Q]of I)if(Q&&Q.__type==="RouteErrorResponse")g[C]=new I0(Q.status,Q.statusText,Q.data,Q.internal===!0);else if(Q&&Q.__type==="Error"){if(Q.__subType){let i=window[Q.__subType];if(typeof i=="function")try{let B=new i(Q.message);B.stack="",g[C]=B}catch{}}if(g[C]==null){let i=new Error(Q.message);i.stack="",g[C]=i}}else g[C]=Q;return g}const f_=k.createContext({isTransitioning:!1}),j_=k.createContext(new Map),X_="startTransition",Tp=vO[X_],H_="flushSync",pp=y6[H_];function x_(A){Tp?Tp(A):A()}function Nv(A){pp?pp(A):A()}class O_{constructor(){this.status="pending",this.promise=new Promise((I,g)=>{this.resolve=C=>{this.status==="pending"&&(this.status="resolved",I(C))},this.reject=C=>{this.status==="pending"&&(this.status="rejected",g(C))}})}}function R$A(A){let{fallbackElement:I,router:g,future:C}=A,[Q,i]=k.useState(g.state),[B,E]=k.useState(),[e,t]=k.useState({isTransitioning:!1}),[o,r]=k.useState(),[s,v]=k.useState(),[n,a]=k.useState(),c=k.useRef(new Map),{v7_startTransition:P}=C||{},d=k.useCallback(G=>{P?x_(G):G()},[P]),h=k.useCallback((G,L)=>{let{deletedFetchers:m,flushSync:F,viewTransitionOpts:U}=L;G.fetchers.forEach((X,Y)=>{X.data!==void 0&&c.current.set(Y,X.data)}),m.forEach(X=>c.current.delete(X));let AA=g.window==null||g.window.document==null||typeof g.window.document.startViewTransition!="function";if(!U||AA){F?Nv(()=>i(G)):d(()=>i(G));return}if(F){Nv(()=>{s&&(o&&o.resolve(),s.skipTransition()),t({isTransitioning:!0,flushSync:!0,currentLocation:U.currentLocation,nextLocation:U.nextLocation})});let X=g.window.document.startViewTransition(()=>{Nv(()=>i(G))});X.finished.finally(()=>{Nv(()=>{r(void 0),v(void 0),E(void 0),t({isTransitioning:!1})})}),Nv(()=>v(X));return}s?(o&&o.resolve(),s.skipTransition(),a({state:G,currentLocation:U.currentLocation,nextLocation:U.nextLocation})):(E(G),t({isTransitioning:!0,flushSync:!1,currentLocation:U.currentLocation,nextLocation:U.nextLocation}))},[g.window,s,o,c,d]);k.useLayoutEffect(()=>g.subscribe(h),[g,h]),k.useEffect(()=>{e.isTransitioning&&!e.flushSync&&r(new O_)},[e]),k.useEffect(()=>{if(o&&B&&g.window){let G=B,L=o.promise,m=g.window.document.startViewTransition(async()=>{d(()=>i(G)),await L});m.finished.finally(()=>{r(void 0),v(void 0),E(void 0),t({isTransitioning:!1})}),v(m)}},[d,B,o,g.window]),k.useEffect(()=>{o&&B&&Q.location.key===B.location.key&&o.resolve()},[o,s,Q.location,B]),k.useEffect(()=>{!e.isTransitioning&&n&&(E(n.state),t({isTransitioning:!0,flushSync:!1,currentLocation:n.currentLocation,nextLocation:n.nextLocation}),a(void 0))},[e.isTransitioning,n]),k.useEffect(()=>{},[]);let u=k.useMemo(()=>({createHref:g.createHref,encodeLocation:g.encodeLocation,go:G=>g.navigate(G),push:(G,L,m)=>g.navigate(G,{state:L,preventScrollReset:m==null?void 0:m.preventScrollReset}),replace:(G,L,m)=>g.navigate(G,{replace:!0,state:L,preventScrollReset:m==null?void 0:m.preventScrollReset})}),[g]),D=g.basename||"/",y=k.useMemo(()=>({router:g,navigator:u,static:!1,basename:D}),[g,u,D]),b=k.useMemo(()=>({v7_relativeSplatPath:g.future.v7_relativeSplatPath}),[g.future.v7_relativeSplatPath]);return k.useEffect(()=>Z_(C,g.future),[C,g.future]),k.createElement(k.Fragment,null,k.createElement(ud.Provider,{value:y},k.createElement(AV.Provider,{value:Q},k.createElement(j_.Provider,{value:c.current},k.createElement(f_.Provider,{value:e},k.createElement(K_,{basename:D,location:Q.location,navigationType:Q.historyAction,navigator:u,future:b},Q.initialized||g.future.v7_partialHydration?k.createElement(q_,{routes:g.routes,future:g.future,state:Q}):I))))),null)}const q_=k.memo(__);function __(A){let{routes:I,future:g,state:C}=A;return w_(I,void 0,C,g)}var Fp;(function(A){A.UseScrollRestoration="useScrollRestoration",A.UseSubmit="useSubmit",A.UseSubmitFetcher="useSubmitFetcher",A.UseFetcher="useFetcher",A.useViewTransitionState="useViewTransitionState"})(Fp||(Fp={}));var Up;(function(A){A.UseFetcher="useFetcher",A.UseFetchers="useFetchers",A.UseScrollRestoration="useScrollRestoration"})(Up||(Up={}));function L$A(A){let I=k.useRef(Dw(A)),g=k.useRef(!1),C=RL(),Q=k.useMemo(()=>J_(C.search,g.current?null:I.current),[C.search]),i=D_(),B=k.useCallback((E,e)=>{const t=Dw(typeof E=="function"?E(Q):E);g.current=!0,i("?"+t,e)},[i,Q]);return[Q,B]}function BV(A){var I,g,C="";if(typeof A=="string"||typeof A=="number")C+=A;else if(typeof A=="object")if(Array.isArray(A)){var Q=A.length;for(I=0;I{const I=g$(A),{conflictingClassGroups:g,conflictingClassGroupModifiers:C}=A;return{getClassGroupId:B=>{const E=B.split(LL);return E[0]===""&&E.length!==1&&E.shift(),EV(E,I)||I$(B)},getConflictingClassGroupIds:(B,E)=>{const e=g[B]||[];return E&&C[B]?[...e,...C[B]]:e}}},EV=(A,I)=>{var B;if(A.length===0)return I.classGroupId;const g=A[0],C=I.nextPart.get(g),Q=C?EV(A.slice(1),C):void 0;if(Q)return Q;if(I.validators.length===0)return;const i=A.join(LL);return(B=I.validators.find(({validator:E})=>E(i)))==null?void 0:B.classGroupId},kp=/^\[(.+)\]$/,I$=A=>{if(kp.test(A)){const I=kp.exec(A)[1],g=I==null?void 0:I.substring(0,I.indexOf(":"));if(g)return"arbitrary.."+g}},g$=A=>{const{theme:I,prefix:g}=A,C={nextPart:new Map,validators:[]};return Q$(Object.entries(A.classGroups),g).forEach(([i,B])=>{bw(B,C,i,I)}),C},bw=(A,I,g,C)=>{A.forEach(Q=>{if(typeof Q=="string"){const i=Q===""?I:Yp(I,Q);i.classGroupId=g;return}if(typeof Q=="function"){if(C$(Q)){bw(Q(C),I,g,C);return}I.validators.push({validator:Q,classGroupId:g});return}Object.entries(Q).forEach(([i,B])=>{bw(B,Yp(I,i),g,C)})})},Yp=(A,I)=>{let g=A;return I.split(LL).forEach(C=>{g.nextPart.has(C)||g.nextPart.set(C,{nextPart:new Map,validators:[]}),g=g.nextPart.get(C)}),g},C$=A=>A.isThemeGetter,Q$=(A,I)=>I?A.map(([g,C])=>{const Q=C.map(i=>typeof i=="string"?I+i:typeof i=="object"?Object.fromEntries(Object.entries(i).map(([B,E])=>[I+B,E])):i);return[g,Q]}):A,i$=A=>{if(A<1)return{get:()=>{},set:()=>{}};let I=0,g=new Map,C=new Map;const Q=(i,B)=>{g.set(i,B),I++,I>A&&(I=0,C=g,g=new Map)};return{get(i){let B=g.get(i);if(B!==void 0)return B;if((B=C.get(i))!==void 0)return Q(i,B),B},set(i,B){g.has(i)?g.set(i,B):Q(i,B)}}},eV="!",B$=A=>{const{separator:I,experimentalParseClassName:g}=A,C=I.length===1,Q=I[0],i=I.length,B=E=>{const e=[];let t=0,o=0,r;for(let c=0;co?r-o:void 0;return{modifiers:e,hasImportantModifier:v,baseClassName:n,maybePostfixModifierPosition:a}};return g?E=>g({className:E,parseClassName:B}):B},E$=A=>{if(A.length<=1)return A;const I=[];let g=[];return A.forEach(C=>{C[0]==="["?(I.push(...g.sort(),C),g=[]):g.push(C)}),I.push(...g.sort()),I},e$=A=>({cache:i$(A.cacheSize),parseClassName:B$(A),...A$(A)}),t$=/\s+/,o$=(A,I)=>{const{parseClassName:g,getClassGroupId:C,getConflictingClassGroupIds:Q}=I,i=[],B=A.trim().split(t$);let E="";for(let e=B.length-1;e>=0;e-=1){const t=B[e],{modifiers:o,hasImportantModifier:r,baseClassName:s,maybePostfixModifierPosition:v}=g(t);let n=!!v,a=C(n?s.substring(0,v):s);if(!a){if(!n){E=t+(E.length>0?" "+E:E);continue}if(a=C(s),!a){E=t+(E.length>0?" "+E:E);continue}n=!1}const c=E$(o).join(":"),P=r?c+eV:c,d=P+a;if(i.includes(d))continue;i.push(d);const h=Q(a,n);for(let u=0;u0?" "+E:E)}return E};function r$(){let A=0,I,g,C="";for(;A{if(typeof A=="string")return A;let I,g="";for(let C=0;Cr(o),A());return g=e$(t),C=g.cache.get,Q=g.cache.set,i=E,E(e)}function E(e){const t=C(e);if(t)return t;const o=o$(e,g);return Q(e,o),o}return function(){return i(r$.apply(null,arguments))}}const GI=A=>{const I=g=>g[A]||[];return I.isThemeGetter=!0,I},oV=/^\[(?:([a-z-]+):)?(.+)\]$/i,v$=/^\d+\/\d+$/,a$=new Set(["px","full","screen"]),n$=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,c$=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,l$=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,P$=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,d$=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,XB=A=>Cs(A)||a$.has(A)||v$.test(A),SE=A=>Ms(A,"length",G$),Cs=A=>!!A&&!Number.isNaN(Number(A)),Eu=A=>Ms(A,"number",Cs),Zv=A=>!!A&&Number.isInteger(Number(A)),h$=A=>A.endsWith("%")&&Cs(A.slice(0,-1)),ZA=A=>oV.test(A),TE=A=>n$.test(A),u$=new Set(["length","size","percentage"]),D$=A=>Ms(A,u$,rV),b$=A=>Ms(A,"position",rV),y$=new Set(["image","url"]),m$=A=>Ms(A,y$,L$),w$=A=>Ms(A,"",R$),Kv=()=>!0,Ms=(A,I,g)=>{const C=oV.exec(A);return C?C[1]?typeof I=="string"?C[1]===I:I.has(C[1]):g(C[2]):!1},G$=A=>c$.test(A)&&!l$.test(A),rV=()=>!1,R$=A=>P$.test(A),L$=A=>d$.test(A),S$=()=>{const A=GI("colors"),I=GI("spacing"),g=GI("blur"),C=GI("brightness"),Q=GI("borderColor"),i=GI("borderRadius"),B=GI("borderSpacing"),E=GI("borderWidth"),e=GI("contrast"),t=GI("grayscale"),o=GI("hueRotate"),r=GI("invert"),s=GI("gap"),v=GI("gradientColorStops"),n=GI("gradientColorStopPositions"),a=GI("inset"),c=GI("margin"),P=GI("opacity"),d=GI("padding"),h=GI("saturate"),u=GI("scale"),D=GI("sepia"),y=GI("skew"),b=GI("space"),G=GI("translate"),L=()=>["auto","contain","none"],m=()=>["auto","hidden","clip","visible","scroll"],F=()=>["auto",ZA,I],U=()=>[ZA,I],AA=()=>["",XB,SE],X=()=>["auto",Cs,ZA],Y=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],J=()=>["solid","dashed","dotted","double","none"],V=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],N=()=>["start","end","center","between","around","evenly","stretch"],z=()=>["","0",ZA],w=()=>["auto","avoid","all","avoid-page","page","left","right","column"],CA=()=>[Cs,ZA];return{cacheSize:500,separator:":",theme:{colors:[Kv],spacing:[XB,SE],blur:["none","",TE,ZA],brightness:CA(),borderColor:[A],borderRadius:["none","","full",TE,ZA],borderSpacing:U(),borderWidth:AA(),contrast:CA(),grayscale:z(),hueRotate:CA(),invert:z(),gap:U(),gradientColorStops:[A],gradientColorStopPositions:[h$,SE],inset:F(),margin:F(),opacity:CA(),padding:U(),saturate:CA(),scale:CA(),sepia:z(),skew:CA(),space:U(),translate:U()},classGroups:{aspect:[{aspect:["auto","square","video",ZA]}],container:["container"],columns:[{columns:[TE]}],"break-after":[{"break-after":w()}],"break-before":[{"break-before":w()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...Y(),ZA]}],overflow:[{overflow:m()}],"overflow-x":[{"overflow-x":m()}],"overflow-y":[{"overflow-y":m()}],overscroll:[{overscroll:L()}],"overscroll-x":[{"overscroll-x":L()}],"overscroll-y":[{"overscroll-y":L()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[a]}],"inset-x":[{"inset-x":[a]}],"inset-y":[{"inset-y":[a]}],start:[{start:[a]}],end:[{end:[a]}],top:[{top:[a]}],right:[{right:[a]}],bottom:[{bottom:[a]}],left:[{left:[a]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Zv,ZA]}],basis:[{basis:F()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",ZA]}],grow:[{grow:z()}],shrink:[{shrink:z()}],order:[{order:["first","last","none",Zv,ZA]}],"grid-cols":[{"grid-cols":[Kv]}],"col-start-end":[{col:["auto",{span:["full",Zv,ZA]},ZA]}],"col-start":[{"col-start":X()}],"col-end":[{"col-end":X()}],"grid-rows":[{"grid-rows":[Kv]}],"row-start-end":[{row:["auto",{span:[Zv,ZA]},ZA]}],"row-start":[{"row-start":X()}],"row-end":[{"row-end":X()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",ZA]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",ZA]}],gap:[{gap:[s]}],"gap-x":[{"gap-x":[s]}],"gap-y":[{"gap-y":[s]}],"justify-content":[{justify:["normal",...N()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...N(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...N(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[d]}],px:[{px:[d]}],py:[{py:[d]}],ps:[{ps:[d]}],pe:[{pe:[d]}],pt:[{pt:[d]}],pr:[{pr:[d]}],pb:[{pb:[d]}],pl:[{pl:[d]}],m:[{m:[c]}],mx:[{mx:[c]}],my:[{my:[c]}],ms:[{ms:[c]}],me:[{me:[c]}],mt:[{mt:[c]}],mr:[{mr:[c]}],mb:[{mb:[c]}],ml:[{ml:[c]}],"space-x":[{"space-x":[b]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[b]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",ZA,I]}],"min-w":[{"min-w":[ZA,I,"min","max","fit"]}],"max-w":[{"max-w":[ZA,I,"none","full","min","max","fit","prose",{screen:[TE]},TE]}],h:[{h:[ZA,I,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[ZA,I,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[ZA,I,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[ZA,I,"auto","min","max","fit"]}],"font-size":[{text:["base",TE,SE]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Eu]}],"font-family":[{font:[Kv]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",ZA]}],"line-clamp":[{"line-clamp":["none",Cs,Eu]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",XB,ZA]}],"list-image":[{"list-image":["none",ZA]}],"list-style-type":[{list:["none","disc","decimal",ZA]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[A]}],"placeholder-opacity":[{"placeholder-opacity":[P]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[A]}],"text-opacity":[{"text-opacity":[P]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...J(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",XB,SE]}],"underline-offset":[{"underline-offset":["auto",XB,ZA]}],"text-decoration-color":[{decoration:[A]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:U()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ZA]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ZA]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[P]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...Y(),b$]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",D$]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},m$]}],"bg-color":[{bg:[A]}],"gradient-from-pos":[{from:[n]}],"gradient-via-pos":[{via:[n]}],"gradient-to-pos":[{to:[n]}],"gradient-from":[{from:[v]}],"gradient-via":[{via:[v]}],"gradient-to":[{to:[v]}],rounded:[{rounded:[i]}],"rounded-s":[{"rounded-s":[i]}],"rounded-e":[{"rounded-e":[i]}],"rounded-t":[{"rounded-t":[i]}],"rounded-r":[{"rounded-r":[i]}],"rounded-b":[{"rounded-b":[i]}],"rounded-l":[{"rounded-l":[i]}],"rounded-ss":[{"rounded-ss":[i]}],"rounded-se":[{"rounded-se":[i]}],"rounded-ee":[{"rounded-ee":[i]}],"rounded-es":[{"rounded-es":[i]}],"rounded-tl":[{"rounded-tl":[i]}],"rounded-tr":[{"rounded-tr":[i]}],"rounded-br":[{"rounded-br":[i]}],"rounded-bl":[{"rounded-bl":[i]}],"border-w":[{border:[E]}],"border-w-x":[{"border-x":[E]}],"border-w-y":[{"border-y":[E]}],"border-w-s":[{"border-s":[E]}],"border-w-e":[{"border-e":[E]}],"border-w-t":[{"border-t":[E]}],"border-w-r":[{"border-r":[E]}],"border-w-b":[{"border-b":[E]}],"border-w-l":[{"border-l":[E]}],"border-opacity":[{"border-opacity":[P]}],"border-style":[{border:[...J(),"hidden"]}],"divide-x":[{"divide-x":[E]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[E]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[P]}],"divide-style":[{divide:J()}],"border-color":[{border:[Q]}],"border-color-x":[{"border-x":[Q]}],"border-color-y":[{"border-y":[Q]}],"border-color-s":[{"border-s":[Q]}],"border-color-e":[{"border-e":[Q]}],"border-color-t":[{"border-t":[Q]}],"border-color-r":[{"border-r":[Q]}],"border-color-b":[{"border-b":[Q]}],"border-color-l":[{"border-l":[Q]}],"divide-color":[{divide:[Q]}],"outline-style":[{outline:["",...J()]}],"outline-offset":[{"outline-offset":[XB,ZA]}],"outline-w":[{outline:[XB,SE]}],"outline-color":[{outline:[A]}],"ring-w":[{ring:AA()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[A]}],"ring-opacity":[{"ring-opacity":[P]}],"ring-offset-w":[{"ring-offset":[XB,SE]}],"ring-offset-color":[{"ring-offset":[A]}],shadow:[{shadow:["","inner","none",TE,w$]}],"shadow-color":[{shadow:[Kv]}],opacity:[{opacity:[P]}],"mix-blend":[{"mix-blend":[...V(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":V()}],filter:[{filter:["","none"]}],blur:[{blur:[g]}],brightness:[{brightness:[C]}],contrast:[{contrast:[e]}],"drop-shadow":[{"drop-shadow":["","none",TE,ZA]}],grayscale:[{grayscale:[t]}],"hue-rotate":[{"hue-rotate":[o]}],invert:[{invert:[r]}],saturate:[{saturate:[h]}],sepia:[{sepia:[D]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[g]}],"backdrop-brightness":[{"backdrop-brightness":[C]}],"backdrop-contrast":[{"backdrop-contrast":[e]}],"backdrop-grayscale":[{"backdrop-grayscale":[t]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[o]}],"backdrop-invert":[{"backdrop-invert":[r]}],"backdrop-opacity":[{"backdrop-opacity":[P]}],"backdrop-saturate":[{"backdrop-saturate":[h]}],"backdrop-sepia":[{"backdrop-sepia":[D]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[B]}],"border-spacing-x":[{"border-spacing-x":[B]}],"border-spacing-y":[{"border-spacing-y":[B]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",ZA]}],duration:[{duration:CA()}],ease:[{ease:["linear","in","out","in-out",ZA]}],delay:[{delay:CA()}],animate:[{animate:["none","spin","ping","pulse","bounce",ZA]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[u]}],"scale-x":[{"scale-x":[u]}],"scale-y":[{"scale-y":[u]}],rotate:[{rotate:[Zv,ZA]}],"translate-x":[{"translate-x":[G]}],"translate-y":[{"translate-y":[G]}],"skew-x":[{"skew-x":[y]}],"skew-y":[{"skew-y":[y]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ZA]}],accent:[{accent:["auto",A]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ZA]}],"caret-color":[{caret:[A]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":U()}],"scroll-mx":[{"scroll-mx":U()}],"scroll-my":[{"scroll-my":U()}],"scroll-ms":[{"scroll-ms":U()}],"scroll-me":[{"scroll-me":U()}],"scroll-mt":[{"scroll-mt":U()}],"scroll-mr":[{"scroll-mr":U()}],"scroll-mb":[{"scroll-mb":U()}],"scroll-ml":[{"scroll-ml":U()}],"scroll-p":[{"scroll-p":U()}],"scroll-px":[{"scroll-px":U()}],"scroll-py":[{"scroll-py":U()}],"scroll-ps":[{"scroll-ps":U()}],"scroll-pe":[{"scroll-pe":U()}],"scroll-pt":[{"scroll-pt":U()}],"scroll-pr":[{"scroll-pr":U()}],"scroll-pb":[{"scroll-pb":U()}],"scroll-pl":[{"scroll-pl":U()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ZA]}],fill:[{fill:[A,"none"]}],"stroke-w":[{stroke:[XB,SE,Eu]}],stroke:[{stroke:[A,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},S$A=s$(S$);function yQ(A,I,{checkForDefaultPrevented:g=!0}={}){return function(Q){if(A==null||A(Q),g===!1||!Q.defaultPrevented)return I==null?void 0:I(Q)}}function Np(A,I){if(typeof A=="function")return A(I);A!=null&&(A.current=I)}function sV(...A){return I=>{let g=!1;const C=A.map(Q=>{const i=Np(Q,I);return!g&&typeof i=="function"&&(g=!0),i});if(g)return()=>{for(let Q=0;Q{var P;const{scope:s,children:v,...n}=r,a=((P=s==null?void 0:s[A])==null?void 0:P[e])||E,c=k.useMemo(()=>n,Object.values(n));return YA.jsx(a.Provider,{value:c,children:v})};t.displayName=i+"Provider";function o(r,s){var a;const v=((a=s==null?void 0:s[A])==null?void 0:a[e])||E,n=k.useContext(v);if(n)return n;if(B!==void 0)return B;throw new Error(`\`${r}\` must be used within \`${i}\``)}return[t,o]}const Q=()=>{const i=g.map(B=>k.createContext(B));return function(E){const e=(E==null?void 0:E[A])||i;return k.useMemo(()=>({[`__scope${A}`]:{...E,[A]:e}}),[E,e])}};return Q.scopeName=A,[C,T$(Q,...I)]}function T$(...A){const I=A[0];if(A.length===1)return I;const g=()=>{const C=A.map(Q=>({useScope:Q(),scopeName:Q.scopeName}));return function(i){const B=C.reduce((E,{useScope:e,scopeName:t})=>{const r=e(i)[`__scope${t}`];return{...E,...r}},{});return k.useMemo(()=>({[`__scope${I.scopeName}`]:B}),[B])}};return g.scopeName=I.scopeName,g}function yw(A){const I=p$(A),g=k.forwardRef((C,Q)=>{const{children:i,...B}=C,E=k.Children.toArray(i),e=E.find(U$);if(e){const t=e.props.children,o=E.map(r=>r===e?k.Children.count(t)>1?k.Children.only(null):k.isValidElement(t)?t.props.children:null:r);return YA.jsx(I,{...B,ref:Q,children:k.isValidElement(t)?k.cloneElement(t,void 0,o):null})}return YA.jsx(I,{...B,ref:Q,children:i})});return g.displayName=`${A}.Slot`,g}function p$(A){const I=k.forwardRef((g,C)=>{const{children:Q,...i}=g;if(k.isValidElement(Q)){const B=Y$(Q),E=k$(i,Q.props);return Q.type!==k.Fragment&&(E.ref=C?sV(C,B):B),k.cloneElement(Q,E)}return k.Children.count(Q)>1?k.Children.only(null):null});return I.displayName=`${A}.SlotClone`,I}var F$=Symbol("radix.slottable");function U$(A){return k.isValidElement(A)&&typeof A.type=="function"&&"__radixId"in A.type&&A.type.__radixId===F$}function k$(A,I){const g={...I};for(const C in I){const Q=A[C],i=I[C];/^on[A-Z]/.test(C)?Q&&i?g[C]=(...E)=>{i(...E),Q(...E)}:Q&&(g[C]=Q):C==="style"?g[C]={...Q,...i}:C==="className"&&(g[C]=[Q,i].filter(Boolean).join(" "))}return{...A,...g}}function Y$(A){var C,Q;let I=(C=Object.getOwnPropertyDescriptor(A.props,"ref"))==null?void 0:C.get,g=I&&"isReactWarning"in I&&I.isReactWarning;return g?A.ref:(I=(Q=Object.getOwnPropertyDescriptor(A,"ref"))==null?void 0:Q.get,g=I&&"isReactWarning"in I&&I.isReactWarning,g?A.props.ref:A.props.ref||A.ref)}function N$(A){const I=A+"CollectionProvider",[g,C]=vV(I),[Q,i]=g(I,{collectionRef:{current:null},itemMap:new Map}),B=a=>{const{scope:c,children:P}=a,d=WE.useRef(null),h=WE.useRef(new Map).current;return YA.jsx(Q,{scope:c,itemMap:h,collectionRef:d,children:P})};B.displayName=I;const E=A+"CollectionSlot",e=yw(E),t=WE.forwardRef((a,c)=>{const{scope:P,children:d}=a,h=i(E,P),u=Ot(c,h.collectionRef);return YA.jsx(e,{ref:u,children:d})});t.displayName=E;const o=A+"CollectionItemSlot",r="data-radix-collection-item",s=yw(o),v=WE.forwardRef((a,c)=>{const{scope:P,children:d,...h}=a,u=WE.useRef(null),D=Ot(c,u),y=i(o,P);return WE.useEffect(()=>(y.itemMap.set(u,{ref:u,...h}),()=>void y.itemMap.delete(u))),YA.jsx(s,{[r]:"",ref:D,children:d})});v.displayName=o;function n(a){const c=i(A+"CollectionConsumer",a);return WE.useCallback(()=>{const d=c.collectionRef.current;if(!d)return[];const h=Array.from(d.querySelectorAll(`[${r}]`));return Array.from(c.itemMap.values()).sort((y,b)=>h.indexOf(y.ref.current)-h.indexOf(b.ref.current))},[c.collectionRef,c.itemMap])}return[{Provider:B,Slot:t,ItemSlot:v},n,C]}var Z$=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"],ZB=Z$.reduce((A,I)=>{const g=yw(`Primitive.${I}`),C=k.forwardRef((Q,i)=>{const{asChild:B,...E}=Q,e=B?g:I;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),YA.jsx(e,{...E,ref:i})});return C.displayName=`Primitive.${I}`,{...A,[I]:C}},{});function aV(A,I){A&&ic.flushSync(()=>A.dispatchEvent(I))}function aE(A){const I=k.useRef(A);return k.useEffect(()=>{I.current=A}),k.useMemo(()=>(...g)=>{var C;return(C=I.current)==null?void 0:C.call(I,...g)},[])}function K$(A,I=globalThis==null?void 0:globalThis.document){const g=aE(A);k.useEffect(()=>{const C=Q=>{Q.key==="Escape"&&g(Q)};return I.addEventListener("keydown",C,{capture:!0}),()=>I.removeEventListener("keydown",C,{capture:!0})},[g,I])}var W$="DismissableLayer",mw="dismissableLayer.update",J$="dismissableLayer.pointerDownOutside",V$="dismissableLayer.focusOutside",Zp,nV=k.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),cV=k.forwardRef((A,I)=>{const{disableOutsidePointerEvents:g=!1,onEscapeKeyDown:C,onPointerDownOutside:Q,onFocusOutside:i,onInteractOutside:B,onDismiss:E,...e}=A,t=k.useContext(nV),[o,r]=k.useState(null),s=(o==null?void 0:o.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,v]=k.useState({}),n=Ot(I,b=>r(b)),a=Array.from(t.layers),[c]=[...t.layersWithOutsidePointerEventsDisabled].slice(-1),P=a.indexOf(c),d=o?a.indexOf(o):-1,h=t.layersWithOutsidePointerEventsDisabled.size>0,u=d>=P,D=M$(b=>{const G=b.target,L=[...t.branches].some(m=>m.contains(G));!u||L||(Q==null||Q(b),B==null||B(b),b.defaultPrevented||E==null||E())},s),y=f$(b=>{const G=b.target;[...t.branches].some(m=>m.contains(G))||(i==null||i(b),B==null||B(b),b.defaultPrevented||E==null||E())},s);return K$(b=>{d===t.layers.size-1&&(C==null||C(b),!b.defaultPrevented&&E&&(b.preventDefault(),E()))},s),k.useEffect(()=>{if(o)return g&&(t.layersWithOutsidePointerEventsDisabled.size===0&&(Zp=s.body.style.pointerEvents,s.body.style.pointerEvents="none"),t.layersWithOutsidePointerEventsDisabled.add(o)),t.layers.add(o),Kp(),()=>{g&&t.layersWithOutsidePointerEventsDisabled.size===1&&(s.body.style.pointerEvents=Zp)}},[o,s,g,t]),k.useEffect(()=>()=>{o&&(t.layers.delete(o),t.layersWithOutsidePointerEventsDisabled.delete(o),Kp())},[o,t]),k.useEffect(()=>{const b=()=>v({});return document.addEventListener(mw,b),()=>document.removeEventListener(mw,b)},[]),YA.jsx(ZB.div,{...e,ref:n,style:{pointerEvents:h?u?"auto":"none":void 0,...A.style},onFocusCapture:yQ(A.onFocusCapture,y.onFocusCapture),onBlurCapture:yQ(A.onBlurCapture,y.onBlurCapture),onPointerDownCapture:yQ(A.onPointerDownCapture,D.onPointerDownCapture)})});cV.displayName=W$;var z$="DismissableLayerBranch",lV=k.forwardRef((A,I)=>{const g=k.useContext(nV),C=k.useRef(null),Q=Ot(I,C);return k.useEffect(()=>{const i=C.current;if(i)return g.branches.add(i),()=>{g.branches.delete(i)}},[g.branches]),YA.jsx(ZB.div,{...A,ref:Q})});lV.displayName=z$;function M$(A,I=globalThis==null?void 0:globalThis.document){const g=aE(A),C=k.useRef(!1),Q=k.useRef(()=>{});return k.useEffect(()=>{const i=E=>{if(E.target&&!C.current){let e=function(){PV(J$,g,t,{discrete:!0})};const t={originalEvent:E};E.pointerType==="touch"?(I.removeEventListener("click",Q.current),Q.current=e,I.addEventListener("click",Q.current,{once:!0})):e()}else I.removeEventListener("click",Q.current);C.current=!1},B=window.setTimeout(()=>{I.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(B),I.removeEventListener("pointerdown",i),I.removeEventListener("click",Q.current)}},[I,g]),{onPointerDownCapture:()=>C.current=!0}}function f$(A,I=globalThis==null?void 0:globalThis.document){const g=aE(A),C=k.useRef(!1);return k.useEffect(()=>{const Q=i=>{i.target&&!C.current&&PV(V$,g,{originalEvent:i},{discrete:!1})};return I.addEventListener("focusin",Q),()=>I.removeEventListener("focusin",Q)},[I,g]),{onFocusCapture:()=>C.current=!0,onBlurCapture:()=>C.current=!1}}function Kp(){const A=new CustomEvent(mw);document.dispatchEvent(A)}function PV(A,I,g,{discrete:C}){const Q=g.originalEvent.target,i=new CustomEvent(A,{bubbles:!1,cancelable:!0,detail:g});I&&Q.addEventListener(A,I,{once:!0}),C?aV(Q,i):Q.dispatchEvent(i)}var j$=cV,X$=lV,Q0=globalThis!=null&&globalThis.document?k.useLayoutEffect:()=>{},H$="Portal",dV=k.forwardRef((A,I)=>{var E;const{container:g,...C}=A,[Q,i]=k.useState(!1);Q0(()=>i(!0),[]);const B=g||Q&&((E=globalThis==null?void 0:globalThis.document)==null?void 0:E.body);return B?V1.createPortal(YA.jsx(ZB.div,{...C,ref:I}),B):null});dV.displayName=H$;function x$(A,I){return k.useReducer((g,C)=>I[g][C]??g,A)}var hV=A=>{const{present:I,children:g}=A,C=O$(I),Q=typeof g=="function"?g({present:C.isPresent}):k.Children.only(g),i=Ot(C.ref,q$(Q));return typeof g=="function"||C.isPresent?k.cloneElement(Q,{ref:i}):null};hV.displayName="Presence";function O$(A){const[I,g]=k.useState(),C=k.useRef({}),Q=k.useRef(A),i=k.useRef("none"),B=A?"mounted":"unmounted",[E,e]=x$(B,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return k.useEffect(()=>{const t=nl(C.current);i.current=E==="mounted"?t:"none"},[E]),Q0(()=>{const t=C.current,o=Q.current;if(o!==A){const s=i.current,v=nl(t);A?e("MOUNT"):v==="none"||(t==null?void 0:t.display)==="none"?e("UNMOUNT"):e(o&&s!==v?"ANIMATION_OUT":"UNMOUNT"),Q.current=A}},[A,e]),Q0(()=>{if(I){let t;const o=I.ownerDocument.defaultView??window,r=v=>{const a=nl(C.current).includes(v.animationName);if(v.target===I&&a&&(e("ANIMATION_END"),!Q.current)){const c=I.style.animationFillMode;I.style.animationFillMode="forwards",t=o.setTimeout(()=>{I.style.animationFillMode==="forwards"&&(I.style.animationFillMode=c)})}},s=v=>{v.target===I&&(i.current=nl(C.current))};return I.addEventListener("animationstart",s),I.addEventListener("animationcancel",r),I.addEventListener("animationend",r),()=>{o.clearTimeout(t),I.removeEventListener("animationstart",s),I.removeEventListener("animationcancel",r),I.removeEventListener("animationend",r)}}else e("ANIMATION_END")},[I,e]),{isPresent:["mounted","unmountSuspended"].includes(E),ref:k.useCallback(t=>{t&&(C.current=getComputedStyle(t)),g(t)},[])}}function nl(A){return(A==null?void 0:A.animationName)||"none"}function q$(A){var C,Q;let I=(C=Object.getOwnPropertyDescriptor(A.props,"ref"))==null?void 0:C.get,g=I&&"isReactWarning"in I&&I.isReactWarning;return g?A.ref:(I=(Q=Object.getOwnPropertyDescriptor(A,"ref"))==null?void 0:Q.get,g=I&&"isReactWarning"in I&&I.isReactWarning,g?A.props.ref:A.props.ref||A.ref)}function _$({prop:A,defaultProp:I,onChange:g=()=>{}}){const[C,Q]=$$({defaultProp:I,onChange:g}),i=A!==void 0,B=i?A:C,E=aE(g),e=k.useCallback(t=>{if(i){const r=typeof t=="function"?t(A):t;r!==A&&E(r)}else Q(t)},[i,A,Q,E]);return[B,e]}function $$({defaultProp:A,onChange:I}){const g=k.useState(A),[C]=g,Q=k.useRef(C),i=aE(I);return k.useEffect(()=>{Q.current!==C&&(i(C),Q.current=C)},[C,Q,i]),g}var AAA="VisuallyHidden",SL=k.forwardRef((A,I)=>YA.jsx(ZB.span,{...A,ref:I,style:{position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal",...A.style}}));SL.displayName=AAA;var TL="ToastProvider",[pL,IAA,gAA]=N$("Toast"),[uV,T$A]=vV("Toast",[gAA]),[CAA,yd]=uV(TL),DV=A=>{const{__scopeToast:I,label:g="Notification",duration:C=5e3,swipeDirection:Q="right",swipeThreshold:i=50,children:B}=A,[E,e]=k.useState(null),[t,o]=k.useState(0),r=k.useRef(!1),s=k.useRef(!1);return g.trim()||console.error(`Invalid prop \`label\` supplied to \`${TL}\`. Expected non-empty \`string\`.`),YA.jsx(pL.Provider,{scope:I,children:YA.jsx(CAA,{scope:I,label:g,duration:C,swipeDirection:Q,swipeThreshold:i,toastCount:t,viewport:E,onViewportChange:e,onToastAdd:k.useCallback(()=>o(v=>v+1),[]),onToastRemove:k.useCallback(()=>o(v=>v-1),[]),isFocusedToastEscapeKeyDownRef:r,isClosePausedRef:s,children:B})})};DV.displayName=TL;var bV="ToastViewport",QAA=["F8"],ww="toast.viewportPause",Gw="toast.viewportResume",yV=k.forwardRef((A,I)=>{const{__scopeToast:g,hotkey:C=QAA,label:Q="Notifications ({hotkey})",...i}=A,B=yd(bV,g),E=IAA(g),e=k.useRef(null),t=k.useRef(null),o=k.useRef(null),r=k.useRef(null),s=Ot(I,r,B.onViewportChange),v=C.join("+").replace(/Key/g,"").replace(/Digit/g,""),n=B.toastCount>0;k.useEffect(()=>{const c=P=>{var h;C.length!==0&&C.every(u=>P[u]||P.code===u)&&((h=r.current)==null||h.focus())};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[C]),k.useEffect(()=>{const c=e.current,P=r.current;if(n&&c&&P){const d=()=>{if(!B.isClosePausedRef.current){const y=new CustomEvent(ww);P.dispatchEvent(y),B.isClosePausedRef.current=!0}},h=()=>{if(B.isClosePausedRef.current){const y=new CustomEvent(Gw);P.dispatchEvent(y),B.isClosePausedRef.current=!1}},u=y=>{!c.contains(y.relatedTarget)&&h()},D=()=>{c.contains(document.activeElement)||h()};return c.addEventListener("focusin",d),c.addEventListener("focusout",u),c.addEventListener("pointermove",d),c.addEventListener("pointerleave",D),window.addEventListener("blur",d),window.addEventListener("focus",h),()=>{c.removeEventListener("focusin",d),c.removeEventListener("focusout",u),c.removeEventListener("pointermove",d),c.removeEventListener("pointerleave",D),window.removeEventListener("blur",d),window.removeEventListener("focus",h)}}},[n,B.isClosePausedRef]);const a=k.useCallback(({tabbingDirection:c})=>{const d=E().map(h=>{const u=h.ref.current,D=[u,...lAA(u)];return c==="forwards"?D:D.reverse()});return(c==="forwards"?d.reverse():d).flat()},[E]);return k.useEffect(()=>{const c=r.current;if(c){const P=d=>{var D,y,b;const h=d.altKey||d.ctrlKey||d.metaKey;if(d.key==="Tab"&&!h){const G=document.activeElement,L=d.shiftKey;if(d.target===c&&L){(D=t.current)==null||D.focus();return}const U=a({tabbingDirection:L?"backwards":"forwards"}),AA=U.findIndex(X=>X===G);eu(U.slice(AA+1))?d.preventDefault():L?(y=t.current)==null||y.focus():(b=o.current)==null||b.focus()}};return c.addEventListener("keydown",P),()=>c.removeEventListener("keydown",P)}},[E,a]),YA.jsxs(X$,{ref:e,role:"region","aria-label":Q.replace("{hotkey}",v),tabIndex:-1,style:{pointerEvents:n?void 0:"none"},children:[n&&YA.jsx(Rw,{ref:t,onFocusFromOutsideViewport:()=>{const c=a({tabbingDirection:"forwards"});eu(c)}}),YA.jsx(pL.Slot,{scope:g,children:YA.jsx(ZB.ol,{tabIndex:-1,...i,ref:s})}),n&&YA.jsx(Rw,{ref:o,onFocusFromOutsideViewport:()=>{const c=a({tabbingDirection:"backwards"});eu(c)}})]})});yV.displayName=bV;var mV="ToastFocusProxy",Rw=k.forwardRef((A,I)=>{const{__scopeToast:g,onFocusFromOutsideViewport:C,...Q}=A,i=yd(mV,g);return YA.jsx(SL,{"aria-hidden":!0,tabIndex:0,...Q,ref:I,style:{position:"fixed"},onFocus:B=>{var t;const E=B.relatedTarget;!((t=i.viewport)!=null&&t.contains(E))&&C()}})});Rw.displayName=mV;var md="Toast",iAA="toast.swipeStart",BAA="toast.swipeMove",EAA="toast.swipeCancel",eAA="toast.swipeEnd",wV=k.forwardRef((A,I)=>{const{forceMount:g,open:C,defaultOpen:Q,onOpenChange:i,...B}=A,[E=!0,e]=_$({prop:C,defaultProp:Q,onChange:i});return YA.jsx(hV,{present:g||E,children:YA.jsx(rAA,{open:E,...B,ref:I,onClose:()=>e(!1),onPause:aE(A.onPause),onResume:aE(A.onResume),onSwipeStart:yQ(A.onSwipeStart,t=>{t.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:yQ(A.onSwipeMove,t=>{const{x:o,y:r}=t.detail.delta;t.currentTarget.setAttribute("data-swipe","move"),t.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${o}px`),t.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${r}px`)}),onSwipeCancel:yQ(A.onSwipeCancel,t=>{t.currentTarget.setAttribute("data-swipe","cancel"),t.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),t.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),t.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),t.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:yQ(A.onSwipeEnd,t=>{const{x:o,y:r}=t.detail.delta;t.currentTarget.setAttribute("data-swipe","end"),t.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),t.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),t.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${o}px`),t.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${r}px`),e(!1)})})})});wV.displayName=md;var[tAA,oAA]=uV(md,{onClose(){}}),rAA=k.forwardRef((A,I)=>{const{__scopeToast:g,type:C="foreground",duration:Q,open:i,onClose:B,onEscapeKeyDown:E,onPause:e,onResume:t,onSwipeStart:o,onSwipeMove:r,onSwipeCancel:s,onSwipeEnd:v,...n}=A,a=yd(md,g),[c,P]=k.useState(null),d=Ot(I,X=>P(X)),h=k.useRef(null),u=k.useRef(null),D=Q||a.duration,y=k.useRef(0),b=k.useRef(D),G=k.useRef(0),{onToastAdd:L,onToastRemove:m}=a,F=aE(()=>{var Y;(c==null?void 0:c.contains(document.activeElement))&&((Y=a.viewport)==null||Y.focus()),B()}),U=k.useCallback(X=>{!X||X===1/0||(window.clearTimeout(G.current),y.current=new Date().getTime(),G.current=window.setTimeout(F,X))},[F]);k.useEffect(()=>{const X=a.viewport;if(X){const Y=()=>{U(b.current),t==null||t()},J=()=>{const V=new Date().getTime()-y.current;b.current=b.current-V,window.clearTimeout(G.current),e==null||e()};return X.addEventListener(ww,J),X.addEventListener(Gw,Y),()=>{X.removeEventListener(ww,J),X.removeEventListener(Gw,Y)}}},[a.viewport,D,e,t,U]),k.useEffect(()=>{i&&!a.isClosePausedRef.current&&U(D)},[i,D,a.isClosePausedRef,U]),k.useEffect(()=>(L(),()=>m()),[L,m]);const AA=k.useMemo(()=>c?FV(c):null,[c]);return a.viewport?YA.jsxs(YA.Fragment,{children:[AA&&YA.jsx(sAA,{__scopeToast:g,role:"status","aria-live":C==="foreground"?"assertive":"polite","aria-atomic":!0,children:AA}),YA.jsx(tAA,{scope:g,onClose:F,children:ic.createPortal(YA.jsx(pL.ItemSlot,{scope:g,children:YA.jsx(j$,{asChild:!0,onEscapeKeyDown:yQ(E,()=>{a.isFocusedToastEscapeKeyDownRef.current||F(),a.isFocusedToastEscapeKeyDownRef.current=!1}),children:YA.jsx(ZB.li,{role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":i?"open":"closed","data-swipe-direction":a.swipeDirection,...n,ref:d,style:{userSelect:"none",touchAction:"none",...A.style},onKeyDown:yQ(A.onKeyDown,X=>{X.key==="Escape"&&(E==null||E(X.nativeEvent),X.nativeEvent.defaultPrevented||(a.isFocusedToastEscapeKeyDownRef.current=!0,F()))}),onPointerDown:yQ(A.onPointerDown,X=>{X.button===0&&(h.current={x:X.clientX,y:X.clientY})}),onPointerMove:yQ(A.onPointerMove,X=>{if(!h.current)return;const Y=X.clientX-h.current.x,J=X.clientY-h.current.y,V=!!u.current,N=["left","right"].includes(a.swipeDirection),z=["left","up"].includes(a.swipeDirection)?Math.min:Math.max,w=N?z(0,Y):0,CA=N?0:z(0,J),QA=X.pointerType==="touch"?10:2,R={x:w,y:CA},cA={originalEvent:X,delta:R};V?(u.current=R,cl(BAA,r,cA,{discrete:!1})):Wp(R,a.swipeDirection,QA)?(u.current=R,cl(iAA,o,cA,{discrete:!1}),X.target.setPointerCapture(X.pointerId)):(Math.abs(Y)>QA||Math.abs(J)>QA)&&(h.current=null)}),onPointerUp:yQ(A.onPointerUp,X=>{const Y=u.current,J=X.target;if(J.hasPointerCapture(X.pointerId)&&J.releasePointerCapture(X.pointerId),u.current=null,h.current=null,Y){const V=X.currentTarget,N={originalEvent:X,delta:Y};Wp(Y,a.swipeDirection,a.swipeThreshold)?cl(eAA,v,N,{discrete:!0}):cl(EAA,s,N,{discrete:!0}),V.addEventListener("click",z=>z.preventDefault(),{once:!0})}})})})}),a.viewport)})]}):null}),sAA=A=>{const{__scopeToast:I,children:g,...C}=A,Q=yd(md,I),[i,B]=k.useState(!1),[E,e]=k.useState(!1);return nAA(()=>B(!0)),k.useEffect(()=>{const t=window.setTimeout(()=>e(!0),1e3);return()=>window.clearTimeout(t)},[]),E?null:YA.jsx(dV,{asChild:!0,children:YA.jsx(SL,{...C,children:i&&YA.jsxs(YA.Fragment,{children:[Q.label," ",g]})})})},vAA="ToastTitle",GV=k.forwardRef((A,I)=>{const{__scopeToast:g,...C}=A;return YA.jsx(ZB.div,{...C,ref:I})});GV.displayName=vAA;var aAA="ToastDescription",RV=k.forwardRef((A,I)=>{const{__scopeToast:g,...C}=A;return YA.jsx(ZB.div,{...C,ref:I})});RV.displayName=aAA;var LV="ToastAction",SV=k.forwardRef((A,I)=>{const{altText:g,...C}=A;return g.trim()?YA.jsx(pV,{altText:g,asChild:!0,children:YA.jsx(FL,{...C,ref:I})}):(console.error(`Invalid prop \`altText\` supplied to \`${LV}\`. Expected non-empty \`string\`.`),null)});SV.displayName=LV;var TV="ToastClose",FL=k.forwardRef((A,I)=>{const{__scopeToast:g,...C}=A,Q=oAA(TV,g);return YA.jsx(pV,{asChild:!0,children:YA.jsx(ZB.button,{type:"button",...C,ref:I,onClick:yQ(A.onClick,Q.onClose)})})});FL.displayName=TV;var pV=k.forwardRef((A,I)=>{const{__scopeToast:g,altText:C,...Q}=A;return YA.jsx(ZB.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":C||void 0,...Q,ref:I})});function FV(A){const I=[];return Array.from(A.childNodes).forEach(C=>{if(C.nodeType===C.TEXT_NODE&&C.textContent&&I.push(C.textContent),cAA(C)){const Q=C.ariaHidden||C.hidden||C.style.display==="none",i=C.dataset.radixToastAnnounceExclude==="";if(!Q)if(i){const B=C.dataset.radixToastAnnounceAlt;B&&I.push(B)}else I.push(...FV(C))}}),I}function cl(A,I,g,{discrete:C}){const Q=g.originalEvent.currentTarget,i=new CustomEvent(A,{bubbles:!0,cancelable:!0,detail:g});I&&Q.addEventListener(A,I,{once:!0}),C?aV(Q,i):Q.dispatchEvent(i)}var Wp=(A,I,g=0)=>{const C=Math.abs(A.x),Q=Math.abs(A.y),i=C>Q;return I==="left"||I==="right"?i&&C>g:!i&&Q>g};function nAA(A=()=>{}){const I=aE(A);Q0(()=>{let g=0,C=0;return g=window.requestAnimationFrame(()=>C=window.requestAnimationFrame(I)),()=>{window.cancelAnimationFrame(g),window.cancelAnimationFrame(C)}},[I])}function cAA(A){return A.nodeType===A.ELEMENT_NODE}function lAA(A){const I=[],g=document.createTreeWalker(A,NodeFilter.SHOW_ELEMENT,{acceptNode:C=>{const Q=C.tagName==="INPUT"&&C.type==="hidden";return C.disabled||C.hidden||Q?NodeFilter.FILTER_SKIP:C.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;g.nextNode();)I.push(g.currentNode);return I}function eu(A){const I=document.activeElement;return A.some(g=>g===I?!0:(g.focus(),document.activeElement!==I))}var p$A=DV,F$A=yV,U$A=wV,k$A=GV,Y$A=RV,N$A=SV,Z$A=FL;const Jp=A=>typeof A=="boolean"?`${A}`:A===0?"0":A,Vp=$_,K$A=(A,I)=>g=>{var C;if((I==null?void 0:I.variants)==null)return Vp(A,g==null?void 0:g.class,g==null?void 0:g.className);const{variants:Q,defaultVariants:i}=I,B=Object.keys(Q).map(t=>{const o=g==null?void 0:g[t],r=i==null?void 0:i[t];if(o===null)return null;const s=Jp(o)||Jp(r);return Q[t][s]}),E=g&&Object.entries(g).reduce((t,o)=>{let[r,s]=o;return s===void 0||(t[r]=s),t},{}),e=I==null||(C=I.compoundVariants)===null||C===void 0?void 0:C.reduce((t,o)=>{let{class:r,className:s,...v}=o;return Object.entries(v).every(n=>{let[a,c]=n;return Array.isArray(c)?c.includes({...i,...E}[a]):{...i,...E}[a]===c})?[...t,r,s]:t},[]);return Vp(A,B,e,g==null?void 0:g.class,g==null?void 0:g.className)};function PAA(A,I){if(A==null)return{};var g={},C=Object.keys(A),Q,i;for(i=0;i=0)&&(g[Q]=A[Q]);return g}var dAA=["color"],W$A=k.forwardRef(function(A,I){var g=A.color,C=g===void 0?"currentColor":g,Q=PAA(A,dAA);return k.createElement("svg",Object.assign({width:"15",height:"15",viewBox:"0 0 15 15",fill:"none",xmlns:"http://www.w3.org/2000/svg"},Q,{ref:I}),k.createElement("path",{d:"M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",fill:C,fillRule:"evenodd",clipRule:"evenodd"}))});function UV(A,I){return function(){return A.apply(I,arguments)}}const{toString:hAA}=Object.prototype,{getPrototypeOf:UL}=Object,wd=(A=>I=>{const g=hAA.call(I);return A[g]||(A[g]=g.slice(8,-1).toLowerCase())})(Object.create(null)),EB=A=>(A=A.toLowerCase(),I=>wd(I)===A),Gd=A=>I=>typeof I===A,{isArray:fs}=Array,Yn=Gd("undefined");function uAA(A){return A!==null&&!Yn(A)&&A.constructor!==null&&!Yn(A.constructor)&&pQ(A.constructor.isBuffer)&&A.constructor.isBuffer(A)}const kV=EB("ArrayBuffer");function DAA(A){let I;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?I=ArrayBuffer.isView(A):I=A&&A.buffer&&kV(A.buffer),I}const bAA=Gd("string"),pQ=Gd("function"),YV=Gd("number"),Rd=A=>A!==null&&typeof A=="object",yAA=A=>A===!0||A===!1,JP=A=>{if(wd(A)!=="object")return!1;const I=UL(A);return(I===null||I===Object.prototype||Object.getPrototypeOf(I)===null)&&!(Symbol.toStringTag in A)&&!(Symbol.iterator in A)},mAA=EB("Date"),wAA=EB("File"),GAA=EB("Blob"),RAA=EB("FileList"),LAA=A=>Rd(A)&&pQ(A.pipe),SAA=A=>{let I;return A&&(typeof FormData=="function"&&A instanceof FormData||pQ(A.append)&&((I=wd(A))==="formdata"||I==="object"&&pQ(A.toString)&&A.toString()==="[object FormData]"))},TAA=EB("URLSearchParams"),[pAA,FAA,UAA,kAA]=["ReadableStream","Request","Response","Headers"].map(EB),YAA=A=>A.trim?A.trim():A.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ec(A,I,{allOwnKeys:g=!1}={}){if(A===null||typeof A>"u")return;let C,Q;if(typeof A!="object"&&(A=[A]),fs(A))for(C=0,Q=A.length;C0;)if(Q=g[C],I===Q.toLowerCase())return Q;return null}const wt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,ZV=A=>!Yn(A)&&A!==wt;function Lw(){const{caseless:A}=ZV(this)&&this||{},I={},g=(C,Q)=>{const i=A&&NV(I,Q)||Q;JP(I[i])&&JP(C)?I[i]=Lw(I[i],C):JP(C)?I[i]=Lw({},C):fs(C)?I[i]=C.slice():I[i]=C};for(let C=0,Q=arguments.length;C(ec(I,(Q,i)=>{g&&pQ(Q)?A[i]=UV(Q,g):A[i]=Q},{allOwnKeys:C}),A),ZAA=A=>(A.charCodeAt(0)===65279&&(A=A.slice(1)),A),KAA=(A,I,g,C)=>{A.prototype=Object.create(I.prototype,C),A.prototype.constructor=A,Object.defineProperty(A,"super",{value:I.prototype}),g&&Object.assign(A.prototype,g)},WAA=(A,I,g,C)=>{let Q,i,B;const E={};if(I=I||{},A==null)return I;do{for(Q=Object.getOwnPropertyNames(A),i=Q.length;i-- >0;)B=Q[i],(!C||C(B,A,I))&&!E[B]&&(I[B]=A[B],E[B]=!0);A=g!==!1&&UL(A)}while(A&&(!g||g(A,I))&&A!==Object.prototype);return I},JAA=(A,I,g)=>{A=String(A),(g===void 0||g>A.length)&&(g=A.length),g-=I.length;const C=A.indexOf(I,g);return C!==-1&&C===g},VAA=A=>{if(!A)return null;if(fs(A))return A;let I=A.length;if(!YV(I))return null;const g=new Array(I);for(;I-- >0;)g[I]=A[I];return g},zAA=(A=>I=>A&&I instanceof A)(typeof Uint8Array<"u"&&UL(Uint8Array)),MAA=(A,I)=>{const C=(A&&A[Symbol.iterator]).call(A);let Q;for(;(Q=C.next())&&!Q.done;){const i=Q.value;I.call(A,i[0],i[1])}},fAA=(A,I)=>{let g;const C=[];for(;(g=A.exec(I))!==null;)C.push(g);return C},jAA=EB("HTMLFormElement"),XAA=A=>A.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(g,C,Q){return C.toUpperCase()+Q}),zp=(({hasOwnProperty:A})=>(I,g)=>A.call(I,g))(Object.prototype),HAA=EB("RegExp"),KV=(A,I)=>{const g=Object.getOwnPropertyDescriptors(A),C={};ec(g,(Q,i)=>{let B;(B=I(Q,i,A))!==!1&&(C[i]=B||Q)}),Object.defineProperties(A,C)},xAA=A=>{KV(A,(I,g)=>{if(pQ(A)&&["arguments","caller","callee"].indexOf(g)!==-1)return!1;const C=A[g];if(pQ(C)){if(I.enumerable=!1,"writable"in I){I.writable=!1;return}I.set||(I.set=()=>{throw Error("Can not rewrite read-only method '"+g+"'")})}})},OAA=(A,I)=>{const g={},C=Q=>{Q.forEach(i=>{g[i]=!0})};return fs(A)?C(A):C(String(A).split(I)),g},qAA=()=>{},_AA=(A,I)=>A!=null&&Number.isFinite(A=+A)?A:I;function $AA(A){return!!(A&&pQ(A.append)&&A[Symbol.toStringTag]==="FormData"&&A[Symbol.iterator])}const AIA=A=>{const I=new Array(10),g=(C,Q)=>{if(Rd(C)){if(I.indexOf(C)>=0)return;if(!("toJSON"in C)){I[Q]=C;const i=fs(C)?[]:{};return ec(C,(B,E)=>{const e=g(B,Q+1);!Yn(e)&&(i[E]=e)}),I[Q]=void 0,i}}return C};return g(A,0)},IIA=EB("AsyncFunction"),gIA=A=>A&&(Rd(A)||pQ(A))&&pQ(A.then)&&pQ(A.catch),WV=((A,I)=>A?setImmediate:I?((g,C)=>(wt.addEventListener("message",({source:Q,data:i})=>{Q===wt&&i===g&&C.length&&C.shift()()},!1),Q=>{C.push(Q),wt.postMessage(g,"*")}))(`axios@${Math.random()}`,[]):g=>setTimeout(g))(typeof setImmediate=="function",pQ(wt.postMessage)),CIA=typeof queueMicrotask<"u"?queueMicrotask.bind(wt):typeof process<"u"&&process.nextTick||WV,j={isArray:fs,isArrayBuffer:kV,isBuffer:uAA,isFormData:SAA,isArrayBufferView:DAA,isString:bAA,isNumber:YV,isBoolean:yAA,isObject:Rd,isPlainObject:JP,isReadableStream:pAA,isRequest:FAA,isResponse:UAA,isHeaders:kAA,isUndefined:Yn,isDate:mAA,isFile:wAA,isBlob:GAA,isRegExp:HAA,isFunction:pQ,isStream:LAA,isURLSearchParams:TAA,isTypedArray:zAA,isFileList:RAA,forEach:ec,merge:Lw,extend:NAA,trim:YAA,stripBOM:ZAA,inherits:KAA,toFlatObject:WAA,kindOf:wd,kindOfTest:EB,endsWith:JAA,toArray:VAA,forEachEntry:MAA,matchAll:fAA,isHTMLForm:jAA,hasOwnProperty:zp,hasOwnProp:zp,reduceDescriptors:KV,freezeMethods:xAA,toObjectSet:OAA,toCamelCase:XAA,noop:qAA,toFiniteNumber:_AA,findKey:NV,global:wt,isContextDefined:ZV,isSpecCompliantForm:$AA,toJSONObject:AIA,isAsyncFn:IIA,isThenable:gIA,setImmediate:WV,asap:CIA};function kA(A,I,g,C,Q){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=A,this.name="AxiosError",I&&(this.code=I),g&&(this.config=g),C&&(this.request=C),Q&&(this.response=Q,this.status=Q.status?Q.status:null)}j.inherits(kA,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:j.toJSONObject(this.config),code:this.code,status:this.status}}});const JV=kA.prototype,VV={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(A=>{VV[A]={value:A}});Object.defineProperties(kA,VV);Object.defineProperty(JV,"isAxiosError",{value:!0});kA.from=(A,I,g,C,Q,i)=>{const B=Object.create(JV);return j.toFlatObject(A,B,function(e){return e!==Error.prototype},E=>E!=="isAxiosError"),kA.call(B,A.message,I,g,C,Q),B.cause=A,B.name=A.name,i&&Object.assign(B,i),B};const QIA=null;function Sw(A){return j.isPlainObject(A)||j.isArray(A)}function zV(A){return j.endsWith(A,"[]")?A.slice(0,-2):A}function Mp(A,I,g){return A?A.concat(I).map(function(Q,i){return Q=zV(Q),!g&&i?"["+Q+"]":Q}).join(g?".":""):I}function iIA(A){return j.isArray(A)&&!A.some(Sw)}const BIA=j.toFlatObject(j,{},null,function(I){return/^is[A-Z]/.test(I)});function Ld(A,I,g){if(!j.isObject(A))throw new TypeError("target must be an object");I=I||new FormData,g=j.toFlatObject(g,{metaTokens:!0,dots:!1,indexes:!1},!1,function(a,c){return!j.isUndefined(c[a])});const C=g.metaTokens,Q=g.visitor||o,i=g.dots,B=g.indexes,e=(g.Blob||typeof Blob<"u"&&Blob)&&j.isSpecCompliantForm(I);if(!j.isFunction(Q))throw new TypeError("visitor must be a function");function t(n){if(n===null)return"";if(j.isDate(n))return n.toISOString();if(!e&&j.isBlob(n))throw new kA("Blob is not supported. Use a Buffer instead.");return j.isArrayBuffer(n)||j.isTypedArray(n)?e&&typeof Blob=="function"?new Blob([n]):Buffer.from(n):n}function o(n,a,c){let P=n;if(n&&!c&&typeof n=="object"){if(j.endsWith(a,"{}"))a=C?a:a.slice(0,-2),n=JSON.stringify(n);else if(j.isArray(n)&&iIA(n)||(j.isFileList(n)||j.endsWith(a,"[]"))&&(P=j.toArray(n)))return a=zV(a),P.forEach(function(h,u){!(j.isUndefined(h)||h===null)&&I.append(B===!0?Mp([a],u,i):B===null?a:a+"[]",t(h))}),!1}return Sw(n)?!0:(I.append(Mp(c,a,i),t(n)),!1)}const r=[],s=Object.assign(BIA,{defaultVisitor:o,convertValue:t,isVisitable:Sw});function v(n,a){if(!j.isUndefined(n)){if(r.indexOf(n)!==-1)throw Error("Circular reference detected in "+a.join("."));r.push(n),j.forEach(n,function(P,d){(!(j.isUndefined(P)||P===null)&&Q.call(I,P,j.isString(d)?d.trim():d,a,s))===!0&&v(P,a?a.concat(d):[d])}),r.pop()}}if(!j.isObject(A))throw new TypeError("data must be an object");return v(A),I}function fp(A){const I={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(A).replace(/[!'()~]|%20|%00/g,function(C){return I[C]})}function kL(A,I){this._pairs=[],A&&Ld(A,this,I)}const MV=kL.prototype;MV.append=function(I,g){this._pairs.push([I,g])};MV.toString=function(I){const g=I?function(C){return I.call(this,C,fp)}:fp;return this._pairs.map(function(Q){return g(Q[0])+"="+g(Q[1])},"").join("&")};function EIA(A){return encodeURIComponent(A).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function fV(A,I,g){if(!I)return A;const C=g&&g.encode||EIA;j.isFunction(g)&&(g={serialize:g});const Q=g&&g.serialize;let i;if(Q?i=Q(I,g):i=j.isURLSearchParams(I)?I.toString():new kL(I,g).toString(C),i){const B=A.indexOf("#");B!==-1&&(A=A.slice(0,B)),A+=(A.indexOf("?")===-1?"?":"&")+i}return A}class jp{constructor(){this.handlers=[]}use(I,g,C){return this.handlers.push({fulfilled:I,rejected:g,synchronous:C?C.synchronous:!1,runWhen:C?C.runWhen:null}),this.handlers.length-1}eject(I){this.handlers[I]&&(this.handlers[I]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(I){j.forEach(this.handlers,function(C){C!==null&&I(C)})}}const jV={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},eIA=typeof URLSearchParams<"u"?URLSearchParams:kL,tIA=typeof FormData<"u"?FormData:null,oIA=typeof Blob<"u"?Blob:null,rIA={isBrowser:!0,classes:{URLSearchParams:eIA,FormData:tIA,Blob:oIA},protocols:["http","https","file","blob","url","data"]},YL=typeof window<"u"&&typeof document<"u",Tw=typeof navigator=="object"&&navigator||void 0,sIA=YL&&(!Tw||["ReactNative","NativeScript","NS"].indexOf(Tw.product)<0),vIA=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",aIA=YL&&window.location.href||"http://localhost",nIA=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:YL,hasStandardBrowserEnv:sIA,hasStandardBrowserWebWorkerEnv:vIA,navigator:Tw,origin:aIA},Symbol.toStringTag,{value:"Module"})),tC={...nIA,...rIA};function cIA(A,I){return Ld(A,new tC.classes.URLSearchParams,Object.assign({visitor:function(g,C,Q,i){return tC.isNode&&j.isBuffer(g)?(this.append(C,g.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},I))}function lIA(A){return j.matchAll(/\w+|\[(\w*)]/g,A).map(I=>I[0]==="[]"?"":I[1]||I[0])}function PIA(A){const I={},g=Object.keys(A);let C;const Q=g.length;let i;for(C=0;C=g.length;return B=!B&&j.isArray(Q)?Q.length:B,e?(j.hasOwnProp(Q,B)?Q[B]=[Q[B],C]:Q[B]=C,!E):((!Q[B]||!j.isObject(Q[B]))&&(Q[B]=[]),I(g,C,Q[B],i)&&j.isArray(Q[B])&&(Q[B]=PIA(Q[B])),!E)}if(j.isFormData(A)&&j.isFunction(A.entries)){const g={};return j.forEachEntry(A,(C,Q)=>{I(lIA(C),Q,g,0)}),g}return null}function dIA(A,I,g){if(j.isString(A))try{return(I||JSON.parse)(A),j.trim(A)}catch(C){if(C.name!=="SyntaxError")throw C}return(g||JSON.stringify)(A)}const tc={transitional:jV,adapter:["xhr","http","fetch"],transformRequest:[function(I,g){const C=g.getContentType()||"",Q=C.indexOf("application/json")>-1,i=j.isObject(I);if(i&&j.isHTMLForm(I)&&(I=new FormData(I)),j.isFormData(I))return Q?JSON.stringify(XV(I)):I;if(j.isArrayBuffer(I)||j.isBuffer(I)||j.isStream(I)||j.isFile(I)||j.isBlob(I)||j.isReadableStream(I))return I;if(j.isArrayBufferView(I))return I.buffer;if(j.isURLSearchParams(I))return g.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),I.toString();let E;if(i){if(C.indexOf("application/x-www-form-urlencoded")>-1)return cIA(I,this.formSerializer).toString();if((E=j.isFileList(I))||C.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return Ld(E?{"files[]":I}:I,e&&new e,this.formSerializer)}}return i||Q?(g.setContentType("application/json",!1),dIA(I)):I}],transformResponse:[function(I){const g=this.transitional||tc.transitional,C=g&&g.forcedJSONParsing,Q=this.responseType==="json";if(j.isResponse(I)||j.isReadableStream(I))return I;if(I&&j.isString(I)&&(C&&!this.responseType||Q)){const B=!(g&&g.silentJSONParsing)&&Q;try{return JSON.parse(I)}catch(E){if(B)throw E.name==="SyntaxError"?kA.from(E,kA.ERR_BAD_RESPONSE,this,null,this.response):E}}return I}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:tC.classes.FormData,Blob:tC.classes.Blob},validateStatus:function(I){return I>=200&&I<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};j.forEach(["delete","get","head","post","put","patch"],A=>{tc.headers[A]={}});const hIA=j.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),uIA=A=>{const I={};let g,C,Q;return A&&A.split(` +`).forEach(function(B){Q=B.indexOf(":"),g=B.substring(0,Q).trim().toLowerCase(),C=B.substring(Q+1).trim(),!(!g||I[g]&&hIA[g])&&(g==="set-cookie"?I[g]?I[g].push(C):I[g]=[C]:I[g]=I[g]?I[g]+", "+C:C)}),I},Xp=Symbol("internals");function Wv(A){return A&&String(A).trim().toLowerCase()}function VP(A){return A===!1||A==null?A:j.isArray(A)?A.map(VP):String(A)}function DIA(A){const I=Object.create(null),g=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let C;for(;C=g.exec(A);)I[C[1]]=C[2];return I}const bIA=A=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(A.trim());function tu(A,I,g,C,Q){if(j.isFunction(C))return C.call(this,I,g);if(Q&&(I=g),!!j.isString(I)){if(j.isString(C))return I.indexOf(C)!==-1;if(j.isRegExp(C))return C.test(I)}}function yIA(A){return A.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(I,g,C)=>g.toUpperCase()+C)}function mIA(A,I){const g=j.toCamelCase(" "+I);["get","set","has"].forEach(C=>{Object.defineProperty(A,C+g,{value:function(Q,i,B){return this[C].call(this,I,Q,i,B)},configurable:!0})})}let tQ=class{constructor(I){I&&this.set(I)}set(I,g,C){const Q=this;function i(E,e,t){const o=Wv(e);if(!o)throw new Error("header name must be a non-empty string");const r=j.findKey(Q,o);(!r||Q[r]===void 0||t===!0||t===void 0&&Q[r]!==!1)&&(Q[r||e]=VP(E))}const B=(E,e)=>j.forEach(E,(t,o)=>i(t,o,e));if(j.isPlainObject(I)||I instanceof this.constructor)B(I,g);else if(j.isString(I)&&(I=I.trim())&&!bIA(I))B(uIA(I),g);else if(j.isHeaders(I))for(const[E,e]of I.entries())i(e,E,C);else I!=null&&i(g,I,C);return this}get(I,g){if(I=Wv(I),I){const C=j.findKey(this,I);if(C){const Q=this[C];if(!g)return Q;if(g===!0)return DIA(Q);if(j.isFunction(g))return g.call(this,Q,C);if(j.isRegExp(g))return g.exec(Q);throw new TypeError("parser must be boolean|regexp|function")}}}has(I,g){if(I=Wv(I),I){const C=j.findKey(this,I);return!!(C&&this[C]!==void 0&&(!g||tu(this,this[C],C,g)))}return!1}delete(I,g){const C=this;let Q=!1;function i(B){if(B=Wv(B),B){const E=j.findKey(C,B);E&&(!g||tu(C,C[E],E,g))&&(delete C[E],Q=!0)}}return j.isArray(I)?I.forEach(i):i(I),Q}clear(I){const g=Object.keys(this);let C=g.length,Q=!1;for(;C--;){const i=g[C];(!I||tu(this,this[i],i,I,!0))&&(delete this[i],Q=!0)}return Q}normalize(I){const g=this,C={};return j.forEach(this,(Q,i)=>{const B=j.findKey(C,i);if(B){g[B]=VP(Q),delete g[i];return}const E=I?yIA(i):String(i).trim();E!==i&&delete g[i],g[E]=VP(Q),C[E]=!0}),this}concat(...I){return this.constructor.concat(this,...I)}toJSON(I){const g=Object.create(null);return j.forEach(this,(C,Q)=>{C!=null&&C!==!1&&(g[Q]=I&&j.isArray(C)?C.join(", "):C)}),g}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([I,g])=>I+": "+g).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(I){return I instanceof this?I:new this(I)}static concat(I,...g){const C=new this(I);return g.forEach(Q=>C.set(Q)),C}static accessor(I){const C=(this[Xp]=this[Xp]={accessors:{}}).accessors,Q=this.prototype;function i(B){const E=Wv(B);C[E]||(mIA(Q,B),C[E]=!0)}return j.isArray(I)?I.forEach(i):i(I),this}};tQ.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);j.reduceDescriptors(tQ.prototype,({value:A},I)=>{let g=I[0].toUpperCase()+I.slice(1);return{get:()=>A,set(C){this[g]=C}}});j.freezeMethods(tQ);function ou(A,I){const g=this||tc,C=I||g,Q=tQ.from(C.headers);let i=C.data;return j.forEach(A,function(E){i=E.call(g,i,Q.normalize(),I?I.status:void 0)}),Q.normalize(),i}function HV(A){return!!(A&&A.__CANCEL__)}function js(A,I,g){kA.call(this,A??"canceled",kA.ERR_CANCELED,I,g),this.name="CanceledError"}j.inherits(js,kA,{__CANCEL__:!0});function xV(A,I,g){const C=g.config.validateStatus;!g.status||!C||C(g.status)?A(g):I(new kA("Request failed with status code "+g.status,[kA.ERR_BAD_REQUEST,kA.ERR_BAD_RESPONSE][Math.floor(g.status/100)-4],g.config,g.request,g))}function wIA(A){const I=/^([-+\w]{1,25})(:?\/\/|:)/.exec(A);return I&&I[1]||""}function GIA(A,I){A=A||10;const g=new Array(A),C=new Array(A);let Q=0,i=0,B;return I=I!==void 0?I:1e3,function(e){const t=Date.now(),o=C[i];B||(B=t),g[Q]=e,C[Q]=t;let r=i,s=0;for(;r!==Q;)s+=g[r++],r=r%A;if(Q=(Q+1)%A,Q===i&&(i=(i+1)%A),t-B{g=o,Q=null,i&&(clearTimeout(i),i=null),A.apply(null,t)};return[(...t)=>{const o=Date.now(),r=o-g;r>=C?B(t,o):(Q=t,i||(i=setTimeout(()=>{i=null,B(Q)},C-r)))},()=>Q&&B(Q)]}const i0=(A,I,g=3)=>{let C=0;const Q=GIA(50,250);return RIA(i=>{const B=i.loaded,E=i.lengthComputable?i.total:void 0,e=B-C,t=Q(e),o=B<=E;C=B;const r={loaded:B,total:E,progress:E?B/E:void 0,bytes:e,rate:t||void 0,estimated:t&&E&&o?(E-B)/t:void 0,event:i,lengthComputable:E!=null,[I?"download":"upload"]:!0};A(r)},g)},Hp=(A,I)=>{const g=A!=null;return[C=>I[0]({lengthComputable:g,total:A,loaded:C}),I[1]]},xp=A=>(...I)=>j.asap(()=>A(...I)),LIA=tC.hasStandardBrowserEnv?((A,I)=>g=>(g=new URL(g,tC.origin),A.protocol===g.protocol&&A.host===g.host&&(I||A.port===g.port)))(new URL(tC.origin),tC.navigator&&/(msie|trident)/i.test(tC.navigator.userAgent)):()=>!0,SIA=tC.hasStandardBrowserEnv?{write(A,I,g,C,Q,i){const B=[A+"="+encodeURIComponent(I)];j.isNumber(g)&&B.push("expires="+new Date(g).toGMTString()),j.isString(C)&&B.push("path="+C),j.isString(Q)&&B.push("domain="+Q),i===!0&&B.push("secure"),document.cookie=B.join("; ")},read(A){const I=document.cookie.match(new RegExp("(^|;\\s*)("+A+")=([^;]*)"));return I?decodeURIComponent(I[3]):null},remove(A){this.write(A,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function TIA(A){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(A)}function pIA(A,I){return I?A.replace(/\/?\/$/,"")+"/"+I.replace(/^\/+/,""):A}function OV(A,I,g){let C=!TIA(I);return A&&(C||g==!1)?pIA(A,I):I}const Op=A=>A instanceof tQ?{...A}:A;function qt(A,I){I=I||{};const g={};function C(t,o,r,s){return j.isPlainObject(t)&&j.isPlainObject(o)?j.merge.call({caseless:s},t,o):j.isPlainObject(o)?j.merge({},o):j.isArray(o)?o.slice():o}function Q(t,o,r,s){if(j.isUndefined(o)){if(!j.isUndefined(t))return C(void 0,t,r,s)}else return C(t,o,r,s)}function i(t,o){if(!j.isUndefined(o))return C(void 0,o)}function B(t,o){if(j.isUndefined(o)){if(!j.isUndefined(t))return C(void 0,t)}else return C(void 0,o)}function E(t,o,r){if(r in I)return C(t,o);if(r in A)return C(void 0,t)}const e={url:i,method:i,data:i,baseURL:B,transformRequest:B,transformResponse:B,paramsSerializer:B,timeout:B,timeoutMessage:B,withCredentials:B,withXSRFToken:B,adapter:B,responseType:B,xsrfCookieName:B,xsrfHeaderName:B,onUploadProgress:B,onDownloadProgress:B,decompress:B,maxContentLength:B,maxBodyLength:B,beforeRedirect:B,transport:B,httpAgent:B,httpsAgent:B,cancelToken:B,socketPath:B,responseEncoding:B,validateStatus:E,headers:(t,o,r)=>Q(Op(t),Op(o),r,!0)};return j.forEach(Object.keys(Object.assign({},A,I)),function(o){const r=e[o]||Q,s=r(A[o],I[o],o);j.isUndefined(s)&&r!==E||(g[o]=s)}),g}const qV=A=>{const I=qt({},A);let{data:g,withXSRFToken:C,xsrfHeaderName:Q,xsrfCookieName:i,headers:B,auth:E}=I;I.headers=B=tQ.from(B),I.url=fV(OV(I.baseURL,I.url,I.allowAbsoluteUrls),A.params,A.paramsSerializer),E&&B.set("Authorization","Basic "+btoa((E.username||"")+":"+(E.password?unescape(encodeURIComponent(E.password)):"")));let e;if(j.isFormData(g)){if(tC.hasStandardBrowserEnv||tC.hasStandardBrowserWebWorkerEnv)B.setContentType(void 0);else if((e=B.getContentType())!==!1){const[t,...o]=e?e.split(";").map(r=>r.trim()).filter(Boolean):[];B.setContentType([t||"multipart/form-data",...o].join("; "))}}if(tC.hasStandardBrowserEnv&&(C&&j.isFunction(C)&&(C=C(I)),C||C!==!1&&LIA(I.url))){const t=Q&&i&&SIA.read(i);t&&B.set(Q,t)}return I},FIA=typeof XMLHttpRequest<"u",UIA=FIA&&function(A){return new Promise(function(g,C){const Q=qV(A);let i=Q.data;const B=tQ.from(Q.headers).normalize();let{responseType:E,onUploadProgress:e,onDownloadProgress:t}=Q,o,r,s,v,n;function a(){v&&v(),n&&n(),Q.cancelToken&&Q.cancelToken.unsubscribe(o),Q.signal&&Q.signal.removeEventListener("abort",o)}let c=new XMLHttpRequest;c.open(Q.method.toUpperCase(),Q.url,!0),c.timeout=Q.timeout;function P(){if(!c)return;const h=tQ.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),D={data:!E||E==="text"||E==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:h,config:A,request:c};xV(function(b){g(b),a()},function(b){C(b),a()},D),c=null}"onloadend"in c?c.onloadend=P:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.indexOf("file:")===0)||setTimeout(P)},c.onabort=function(){c&&(C(new kA("Request aborted",kA.ECONNABORTED,A,c)),c=null)},c.onerror=function(){C(new kA("Network Error",kA.ERR_NETWORK,A,c)),c=null},c.ontimeout=function(){let u=Q.timeout?"timeout of "+Q.timeout+"ms exceeded":"timeout exceeded";const D=Q.transitional||jV;Q.timeoutErrorMessage&&(u=Q.timeoutErrorMessage),C(new kA(u,D.clarifyTimeoutError?kA.ETIMEDOUT:kA.ECONNABORTED,A,c)),c=null},i===void 0&&B.setContentType(null),"setRequestHeader"in c&&j.forEach(B.toJSON(),function(u,D){c.setRequestHeader(D,u)}),j.isUndefined(Q.withCredentials)||(c.withCredentials=!!Q.withCredentials),E&&E!=="json"&&(c.responseType=Q.responseType),t&&([s,n]=i0(t,!0),c.addEventListener("progress",s)),e&&c.upload&&([r,v]=i0(e),c.upload.addEventListener("progress",r),c.upload.addEventListener("loadend",v)),(Q.cancelToken||Q.signal)&&(o=h=>{c&&(C(!h||h.type?new js(null,A,c):h),c.abort(),c=null)},Q.cancelToken&&Q.cancelToken.subscribe(o),Q.signal&&(Q.signal.aborted?o():Q.signal.addEventListener("abort",o)));const d=wIA(Q.url);if(d&&tC.protocols.indexOf(d)===-1){C(new kA("Unsupported protocol "+d+":",kA.ERR_BAD_REQUEST,A));return}c.send(i||null)})},kIA=(A,I)=>{const{length:g}=A=A?A.filter(Boolean):[];if(I||g){let C=new AbortController,Q;const i=function(t){if(!Q){Q=!0,E();const o=t instanceof Error?t:this.reason;C.abort(o instanceof kA?o:new js(o instanceof Error?o.message:o))}};let B=I&&setTimeout(()=>{B=null,i(new kA(`timeout ${I} of ms exceeded`,kA.ETIMEDOUT))},I);const E=()=>{A&&(B&&clearTimeout(B),B=null,A.forEach(t=>{t.unsubscribe?t.unsubscribe(i):t.removeEventListener("abort",i)}),A=null)};A.forEach(t=>t.addEventListener("abort",i));const{signal:e}=C;return e.unsubscribe=()=>j.asap(E),e}},YIA=function*(A,I){let g=A.byteLength;if(g{const Q=NIA(A,I);let i=0,B,E=e=>{B||(B=!0,C&&C(e))};return new ReadableStream({async pull(e){try{const{done:t,value:o}=await Q.next();if(t){E(),e.close();return}let r=o.byteLength;if(g){let s=i+=r;g(s)}e.enqueue(new Uint8Array(o))}catch(t){throw E(t),t}},cancel(e){return E(e),Q.return()}},{highWaterMark:2})},Sd=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",_V=Sd&&typeof ReadableStream=="function",KIA=Sd&&(typeof TextEncoder=="function"?(A=>I=>A.encode(I))(new TextEncoder):async A=>new Uint8Array(await new Response(A).arrayBuffer())),$V=(A,...I)=>{try{return!!A(...I)}catch{return!1}},WIA=_V&&$V(()=>{let A=!1;const I=new Request(tC.origin,{body:new ReadableStream,method:"POST",get duplex(){return A=!0,"half"}}).headers.has("Content-Type");return A&&!I}),_p=64*1024,pw=_V&&$V(()=>j.isReadableStream(new Response("").body)),B0={stream:pw&&(A=>A.body)};Sd&&(A=>{["text","arrayBuffer","blob","formData","stream"].forEach(I=>{!B0[I]&&(B0[I]=j.isFunction(A[I])?g=>g[I]():(g,C)=>{throw new kA(`Response type '${I}' is not supported`,kA.ERR_NOT_SUPPORT,C)})})})(new Response);const JIA=async A=>{if(A==null)return 0;if(j.isBlob(A))return A.size;if(j.isSpecCompliantForm(A))return(await new Request(tC.origin,{method:"POST",body:A}).arrayBuffer()).byteLength;if(j.isArrayBufferView(A)||j.isArrayBuffer(A))return A.byteLength;if(j.isURLSearchParams(A)&&(A=A+""),j.isString(A))return(await KIA(A)).byteLength},VIA=async(A,I)=>{const g=j.toFiniteNumber(A.getContentLength());return g??JIA(I)},zIA=Sd&&(async A=>{let{url:I,method:g,data:C,signal:Q,cancelToken:i,timeout:B,onDownloadProgress:E,onUploadProgress:e,responseType:t,headers:o,withCredentials:r="same-origin",fetchOptions:s}=qV(A);t=t?(t+"").toLowerCase():"text";let v=kIA([Q,i&&i.toAbortSignal()],B),n;const a=v&&v.unsubscribe&&(()=>{v.unsubscribe()});let c;try{if(e&&WIA&&g!=="get"&&g!=="head"&&(c=await VIA(o,C))!==0){let D=new Request(I,{method:"POST",body:C,duplex:"half"}),y;if(j.isFormData(C)&&(y=D.headers.get("content-type"))&&o.setContentType(y),D.body){const[b,G]=Hp(c,i0(xp(e)));C=qp(D.body,_p,b,G)}}j.isString(r)||(r=r?"include":"omit");const P="credentials"in Request.prototype;n=new Request(I,{...s,signal:v,method:g.toUpperCase(),headers:o.normalize().toJSON(),body:C,duplex:"half",credentials:P?r:void 0});let d=await fetch(n);const h=pw&&(t==="stream"||t==="response");if(pw&&(E||h&&a)){const D={};["status","statusText","headers"].forEach(L=>{D[L]=d[L]});const y=j.toFiniteNumber(d.headers.get("content-length")),[b,G]=E&&Hp(y,i0(xp(E),!0))||[];d=new Response(qp(d.body,_p,b,()=>{G&&G(),a&&a()}),D)}t=t||"text";let u=await B0[j.findKey(B0,t)||"text"](d,A);return!h&&a&&a(),await new Promise((D,y)=>{xV(D,y,{data:u,headers:tQ.from(d.headers),status:d.status,statusText:d.statusText,config:A,request:n})})}catch(P){throw a&&a(),P&&P.name==="TypeError"&&/fetch/i.test(P.message)?Object.assign(new kA("Network Error",kA.ERR_NETWORK,A,n),{cause:P.cause||P}):kA.from(P,P&&P.code,A,n)}}),Fw={http:QIA,xhr:UIA,fetch:zIA};j.forEach(Fw,(A,I)=>{if(A){try{Object.defineProperty(A,"name",{value:I})}catch{}Object.defineProperty(A,"adapterName",{value:I})}});const $p=A=>`- ${A}`,MIA=A=>j.isFunction(A)||A===null||A===!1,Az={getAdapter:A=>{A=j.isArray(A)?A:[A];const{length:I}=A;let g,C;const Q={};for(let i=0;i`adapter ${E} `+(e===!1?"is not supported by the environment":"is not available in the build"));let B=I?i.length>1?`since : +`+i.map($p).join(` +`):" "+$p(i[0]):"as no adapter specified";throw new kA("There is no suitable adapter to dispatch the request "+B,"ERR_NOT_SUPPORT")}return C},adapters:Fw};function ru(A){if(A.cancelToken&&A.cancelToken.throwIfRequested(),A.signal&&A.signal.aborted)throw new js(null,A)}function AF(A){return ru(A),A.headers=tQ.from(A.headers),A.data=ou.call(A,A.transformRequest),["post","put","patch"].indexOf(A.method)!==-1&&A.headers.setContentType("application/x-www-form-urlencoded",!1),Az.getAdapter(A.adapter||tc.adapter)(A).then(function(C){return ru(A),C.data=ou.call(A,A.transformResponse,C),C.headers=tQ.from(C.headers),C},function(C){return HV(C)||(ru(A),C&&C.response&&(C.response.data=ou.call(A,A.transformResponse,C.response),C.response.headers=tQ.from(C.response.headers))),Promise.reject(C)})}const Iz="1.8.4",Td={};["object","boolean","number","function","string","symbol"].forEach((A,I)=>{Td[A]=function(C){return typeof C===A||"a"+(I<1?"n ":" ")+A}});const IF={};Td.transitional=function(I,g,C){function Q(i,B){return"[Axios v"+Iz+"] Transitional option '"+i+"'"+B+(C?". "+C:"")}return(i,B,E)=>{if(I===!1)throw new kA(Q(B," has been removed"+(g?" in "+g:"")),kA.ERR_DEPRECATED);return g&&!IF[B]&&(IF[B]=!0,console.warn(Q(B," has been deprecated since v"+g+" and will be removed in the near future"))),I?I(i,B,E):!0}};Td.spelling=function(I){return(g,C)=>(console.warn(`${C} is likely a misspelling of ${I}`),!0)};function fIA(A,I,g){if(typeof A!="object")throw new kA("options must be an object",kA.ERR_BAD_OPTION_VALUE);const C=Object.keys(A);let Q=C.length;for(;Q-- >0;){const i=C[Q],B=I[i];if(B){const E=A[i],e=E===void 0||B(E,i,A);if(e!==!0)throw new kA("option "+i+" must be "+e,kA.ERR_BAD_OPTION_VALUE);continue}if(g!==!0)throw new kA("Unknown option "+i,kA.ERR_BAD_OPTION)}}const zP={assertOptions:fIA,validators:Td},aB=zP.validators;let kt=class{constructor(I){this.defaults=I,this.interceptors={request:new jp,response:new jp}}async request(I,g){try{return await this._request(I,g)}catch(C){if(C instanceof Error){let Q={};Error.captureStackTrace?Error.captureStackTrace(Q):Q=new Error;const i=Q.stack?Q.stack.replace(/^.+\n/,""):"";try{C.stack?i&&!String(C.stack).endsWith(i.replace(/^.+\n.+\n/,""))&&(C.stack+=` +`+i):C.stack=i}catch{}}throw C}}_request(I,g){typeof I=="string"?(g=g||{},g.url=I):g=I||{},g=qt(this.defaults,g);const{transitional:C,paramsSerializer:Q,headers:i}=g;C!==void 0&&zP.assertOptions(C,{silentJSONParsing:aB.transitional(aB.boolean),forcedJSONParsing:aB.transitional(aB.boolean),clarifyTimeoutError:aB.transitional(aB.boolean)},!1),Q!=null&&(j.isFunction(Q)?g.paramsSerializer={serialize:Q}:zP.assertOptions(Q,{encode:aB.function,serialize:aB.function},!0)),g.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?g.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:g.allowAbsoluteUrls=!0),zP.assertOptions(g,{baseUrl:aB.spelling("baseURL"),withXsrfToken:aB.spelling("withXSRFToken")},!0),g.method=(g.method||this.defaults.method||"get").toLowerCase();let B=i&&j.merge(i.common,i[g.method]);i&&j.forEach(["delete","get","head","post","put","patch","common"],n=>{delete i[n]}),g.headers=tQ.concat(B,i);const E=[];let e=!0;this.interceptors.request.forEach(function(a){typeof a.runWhen=="function"&&a.runWhen(g)===!1||(e=e&&a.synchronous,E.unshift(a.fulfilled,a.rejected))});const t=[];this.interceptors.response.forEach(function(a){t.push(a.fulfilled,a.rejected)});let o,r=0,s;if(!e){const n=[AF.bind(this),void 0];for(n.unshift.apply(n,E),n.push.apply(n,t),s=n.length,o=Promise.resolve(g);r{if(!C._listeners)return;let i=C._listeners.length;for(;i-- >0;)C._listeners[i](Q);C._listeners=null}),this.promise.then=Q=>{let i;const B=new Promise(E=>{C.subscribe(E),i=E}).then(Q);return B.cancel=function(){C.unsubscribe(i)},B},I(function(i,B,E){C.reason||(C.reason=new js(i,B,E),g(C.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(I){if(this.reason){I(this.reason);return}this._listeners?this._listeners.push(I):this._listeners=[I]}unsubscribe(I){if(!this._listeners)return;const g=this._listeners.indexOf(I);g!==-1&&this._listeners.splice(g,1)}toAbortSignal(){const I=new AbortController,g=C=>{I.abort(C)};return this.subscribe(g),I.signal.unsubscribe=()=>this.unsubscribe(g),I.signal}static source(){let I;return{token:new gz(function(Q){I=Q}),cancel:I}}};function XIA(A){return function(g){return A.apply(null,g)}}function HIA(A){return j.isObject(A)&&A.isAxiosError===!0}const Uw={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Uw).forEach(([A,I])=>{Uw[I]=A});function Cz(A){const I=new kt(A),g=UV(kt.prototype.request,I);return j.extend(g,kt.prototype,I,{allOwnKeys:!0}),j.extend(g,I,null,{allOwnKeys:!0}),g.create=function(Q){return Cz(qt(A,Q))},g}const Qg=Cz(tc);Qg.Axios=kt;Qg.CanceledError=js;Qg.CancelToken=jIA;Qg.isCancel=HV;Qg.VERSION=Iz;Qg.toFormData=Ld;Qg.AxiosError=kA;Qg.Cancel=Qg.CanceledError;Qg.all=function(I){return Promise.all(I)};Qg.spread=XIA;Qg.isAxiosError=HIA;Qg.mergeConfig=qt;Qg.AxiosHeaders=tQ;Qg.formToJSON=A=>XV(j.isHTMLForm(A)?new FormData(A):A);Qg.getAdapter=Az.getAdapter;Qg.HttpStatusCode=Uw;Qg.default=Qg;const{Axios:z$A,AxiosError:M$A,CanceledError:f$A,isCancel:j$A,CancelToken:X$A,VERSION:H$A,all:x$A,Cancel:O$A,isAxiosError:q$A,spread:_$A,toFormData:NL,AxiosHeaders:$$A,HttpStatusCode:AAI,formToJSON:IAI,getAdapter:gAI,mergeConfig:CAI}=Qg,Nr={};/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */var kw=function(A,I){return kw=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,C){g.__proto__=C}||function(g,C){for(var Q in C)C.hasOwnProperty(Q)&&(g[Q]=C[Q])},kw(A,I)};function Qz(A,I){kw(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}function xIA(A){var I=typeof Symbol=="function"&&A[Symbol.iterator],g=0;return I?I.call(A):{next:function(){return A&&g>=A.length&&(A=void 0),{value:A&&A[g++],done:!A}}}}function OIA(A,I){var g=typeof Symbol=="function"&&A[Symbol.iterator];if(!g)return A;var C=g.call(A),Q,i=[],B;try{for(;(I===void 0||I-- >0)&&!(Q=C.next()).done;)i.push(Q.value)}catch(E){B={error:E}}finally{try{Q&&!Q.done&&(g=C.return)&&g.call(C)}finally{if(B)throw B.error}}return i}function qIA(){for(var A=[],I=0;I + * https://github.com/pladaria/reconnecting-websocket + * License MIT + */var AgA=function(){if(typeof WebSocket<"u")return WebSocket},IgA=function(A){return typeof A<"u"&&!!A&&A.CLOSING===2},At={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0},ggA=function(){function A(I,g,C){var Q=this;C===void 0&&(C={}),this._listeners={error:[],message:[],open:[],close:[]},this._retryCount=-1,this._shouldReconnect=!0,this._connectLock=!1,this._binaryType="blob",this._closeCalled=!1,this._messageQueue=[],this.onclose=null,this.onerror=null,this.onmessage=null,this.onopen=null,this._handleOpen=function(i){Q._debug("open event");var B=Q._options.minUptime,E=B===void 0?At.minUptime:B;clearTimeout(Q._connectTimeout),Q._uptimeTimeout=setTimeout(function(){return Q._acceptOpen()},E),Q._ws.binaryType=Q._binaryType,Q._messageQueue.forEach(function(e){return Q._ws.send(e)}),Q._messageQueue=[],Q.onopen&&Q.onopen(i),Q._listeners.open.forEach(function(e){return Q._callEventListener(i,e)})},this._handleMessage=function(i){Q._debug("message event"),Q.onmessage&&Q.onmessage(i),Q._listeners.message.forEach(function(B){return Q._callEventListener(i,B)})},this._handleError=function(i){Q._debug("error event",i.message),Q._disconnect(void 0,i.message==="TIMEOUT"?"timeout":void 0),Q.onerror&&Q.onerror(i),Q._debug("exec error listeners"),Q._listeners.error.forEach(function(B){return Q._callEventListener(i,B)}),Q._connect()},this._handleClose=function(i){Q._debug("close event"),Q._clearTimeouts(),Q._shouldReconnect&&Q._connect(),Q.onclose&&Q.onclose(i),Q._listeners.close.forEach(function(B){return Q._callEventListener(i,B)})},this._url=I,this._protocols=g,this._options=C,this._options.startClosed&&(this._shouldReconnect=!1),this._connect()}return Object.defineProperty(A,"CONNECTING",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(A,"OPEN",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(A,"CLOSING",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(A,"CLOSED",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CONNECTING",{get:function(){return A.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"OPEN",{get:function(){return A.OPEN},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CLOSING",{get:function(){return A.CLOSING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CLOSED",{get:function(){return A.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"binaryType",{get:function(){return this._ws?this._ws.binaryType:this._binaryType},set:function(I){this._binaryType=I,this._ws&&(this._ws.binaryType=I)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"retryCount",{get:function(){return Math.max(this._retryCount,0)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"bufferedAmount",{get:function(){var I=this._messageQueue.reduce(function(g,C){return typeof C=="string"?g+=C.length:C instanceof Blob?g+=C.size:g+=C.byteLength,g},0);return I+(this._ws?this._ws.bufferedAmount:0)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"extensions",{get:function(){return this._ws?this._ws.extensions:""},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"protocol",{get:function(){return this._ws?this._ws.protocol:""},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"readyState",{get:function(){return this._ws?this._ws.readyState:this._options.startClosed?A.CLOSED:A.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"url",{get:function(){return this._ws?this._ws.url:""},enumerable:!0,configurable:!0}),A.prototype.close=function(I,g){if(I===void 0&&(I=1e3),this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(I,g)},A.prototype.reconnect=function(I,g){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(I,g),this._connect())},A.prototype.send=function(I){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",I),this._ws.send(I);else{var g=this._options.maxEnqueuedMessages,C=g===void 0?At.maxEnqueuedMessages:g;this._messageQueue.length"],I))},A.prototype._getNextDelay=function(){var I=this._options,g=I.reconnectionDelayGrowFactor,C=g===void 0?At.reconnectionDelayGrowFactor:g,Q=I.minReconnectionDelay,i=Q===void 0?At.minReconnectionDelay:Q,B=I.maxReconnectionDelay,E=B===void 0?At.maxReconnectionDelay:B,e=0;return this._retryCount>0&&(e=i*Math.pow(C,this._retryCount-1),e>E&&(e=E)),this._debug("next delay",e),e},A.prototype._wait=function(){var I=this;return new Promise(function(g){setTimeout(g,I._getNextDelay())})},A.prototype._getNextUrl=function(I){if(typeof I=="string")return Promise.resolve(I);if(typeof I=="function"){var g=I();if(typeof g=="string")return Promise.resolve(g);if(g.then)return g}throw Error("Invalid URL")},A.prototype._connect=function(){var I=this;if(!(this._connectLock||!this._shouldReconnect)){this._connectLock=!0;var g=this._options,C=g.maxRetries,Q=C===void 0?At.maxRetries:C,i=g.connectionTimeout,B=i===void 0?At.connectionTimeout:i,E=g.WebSocket,e=E===void 0?AgA():E;if(this._retryCount>=Q){this._debug("max retries reached",this._retryCount,">=",Q);return}if(this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),!IgA(e))throw Error("No valid WebSocket class provided");this._wait().then(function(){return I._getNextUrl(I._url)}).then(function(t){I._closeCalled||(I._debug("connect",{url:t,protocols:I._protocols}),I._ws=I._protocols?new e(t,I._protocols):new e(t),I._ws.binaryType=I._binaryType,I._connectLock=!1,I._addListeners(),I._connectTimeout=setTimeout(function(){return I._handleTimeout()},B))})}},A.prototype._handleTimeout=function(){this._debug("timeout event"),this._handleError(new _IA(Error("TIMEOUT"),this))},A.prototype._disconnect=function(I,g){if(I===void 0&&(I=1e3),this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(I,g),this._handleClose(new $IA(I,g,this))}catch{}}},A.prototype._acceptOpen=function(){this._debug("accept open"),this._retryCount=0},A.prototype._callEventListener=function(I,g){"handleEvent"in g?g.handleEvent(I):g(I)},A.prototype._removeListeners=function(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))},A.prototype._addListeners=function(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))},A.prototype._clearTimeouts=function(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)},A}();class yI{constructor(I){this._client=I}}class CgA extends yI{async create(I,g){return(await this._client.post("/v1/bot/create",I,!1,g)).data}async update(I,g){return(await this._client.post("/v1/bot/update",I,!1,g)).data}async list(I,g){return(await this._client.get("/v1/space/published_bots_list",I,!1,g)).data}async publish(I,g){return(await this._client.post("/v1/bot/publish",I,!1,g)).data}async retrieve(I,g){return(await this._client.get("/v1/bot/get_online_info",I,!1,g)).data}}function QgA(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";try{return JSON.parse(A)}catch{return I}}function igA(A){return new Promise(I=>{setTimeout(I,A)})}function Bz(){return typeof uni<"u"}function Xa(){return typeof window<"u"}function BgA(A){if(typeof A!="object"||A===null)return!1;const I=Object.getPrototypeOf(A);if(I===null)return!0;let g=I;for(;Object.getPrototypeOf(g)!==null;)g=Object.getPrototypeOf(g);return I===g}function ni(){for(var A=arguments.length,I=new Array(A),g=0;g{if(Q===void 0)return C||{};for(const i in Q)Object.prototype.hasOwnProperty.call(Q,i)&&(BgA(Q[i])&&!Array.isArray(Q[i])?C[i]=ni(C[i]||{},Q[i]):C[i]=Q[i]);return C},{})}function EgA(A){return A==null?void 0:A.startsWith("pat_")}function egA(A,I){const g=Object.entries(I).filter(C=>{let[Q,i]=C;return i!=null&&i!==""}).map(C=>{let[Q,i]=C;return`${Q}=${i}`}).join("&");return`${A}?${g}`}class Se extends Error{}class qg extends Se{static makeMessage(I,g,C,Q){if(!g&&C)return C;if(g){const i=[],{code:B,msg:E,error:e}=g;B&&i.push(`code: ${B}`),E&&i.push(`msg: ${E}`),e!=null&&e.detail&&E!==e.detail&&i.push(`detail: ${e.detail}`);const t=(e==null?void 0:e.logid)||(Q==null?void 0:Q["x-tt-logid"]);return t&&i.push(`logid: ${t}`),i.join(", ")}return I?`http status code: ${I} (no body)`:"(no status code or body)"}static generate(I,g,C,Q){if(!I)return new tgA({cause:ogA(g)});const i=g;return I===400||(i==null?void 0:i.code)===4e3?new ez(I,i,C,Q):I===401||(i==null?void 0:i.code)===4100?new tz(I,i,C,Q):I===403||(i==null?void 0:i.code)===4101?new oz(I,i,C,Q):I===404||(i==null?void 0:i.code)===4200?new rz(I,i,C,Q):I===429||(i==null?void 0:i.code)===4013?new sz(I,i,C,Q):I===408?new ZL(I,i,C,Q):I===502?new az(I,i,C,Q):I>=500?new vz(I,i,C,Q):new qg(I,i,C,Q)}constructor(I,g,C,Q){var i,B;super(`${qg.makeMessage(I,g,C,Q)}`),this.status=I,this.headers=Q,this.logid=(g==null||(i=g.detail)===null||i===void 0?void 0:i.logid)||(Q==null?void 0:Q["x-tt-logid"]),this.code=g==null?void 0:g.code,this.msg=g==null?void 0:g.msg,this.detail=g==null||(B=g.error)===null||B===void 0?void 0:B.detail,this.rawError=g}}class tgA extends qg{constructor({message:I}){super(void 0,void 0,I||"Connection error.",void 0),this.status=void 0}}class Ez extends qg{constructor(I){super(void 0,void 0,I||"Request was aborted.",void 0),this.name="UserAbortError",this.status=void 0}}class ez extends qg{constructor(...I){super(...I),this.name="BadRequestError",this.status=400}}class tz extends qg{constructor(...I){super(...I),this.name="AuthenticationError",this.status=401}}class oz extends qg{constructor(...I){super(...I),this.name="PermissionDeniedError",this.status=403}}class rz extends qg{constructor(...I){super(...I),this.name="NotFoundError",this.status=404}}let ZL=class extends qg{constructor(...I){super(...I),this.name="TimeoutError",this.status=408}};class sz extends qg{constructor(...I){super(...I),this.name="RateLimitError",this.status=429}}class vz extends qg{constructor(...I){super(...I),this.name="InternalServerError",this.status=500}}class az extends qg{constructor(...I){super(...I),this.name="GatewayError",this.status=502}}const ogA=A=>A instanceof Error?A:new Error(A);class rgA extends yI{async list(I,g,C){const Q=`/v3/chat/message/list?conversation_id=${I}&chat_id=${g}`;return(await this._client.get(Q,void 0,!1,C)).data}}const su=()=>(Math.random()*new Date().getTime()).toString(),MP=A=>A==null?void 0:A.map(I=>({...I,content:typeof I.content=="object"?JSON.stringify(I.content):I.content})),vu=A=>{if(A)for(const[I,g]of Object.entries(A))typeof g=="object"&&(A[I]=JSON.stringify(g));return A};class sgA extends yI{async create(I,g){I.user_id||(I.user_id=su());const{conversation_id:C,...Q}=I,i=`/v3/chat${C?`?conversation_id=${C}`:""}`,B={...Q,additional_messages:MP(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:vu(I.shortcut_command.parameters)}:void 0,stream:!1};return(await this._client.post(i,B,!1,g)).data}async createAndPoll(I,g){I.user_id||(I.user_id=su());const{conversation_id:C,...Q}=I,i=`/v3/chat${C?`?conversation_id=${C}`:""}`,B={...Q,additional_messages:MP(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:vu(I.shortcut_command.parameters)}:void 0,stream:!1},E=await this._client.post(i,B,!1,g),e=E.data.id,t=E.data.conversation_id;let o;for(;await igA(100),o=await this.retrieve(t,e),!(o.status==="completed"||o.status==="failed"||o.status==="requires_action"););const r=await this.messages.list(t,e);return{chat:o,messages:r}}async*stream(I,g){I.user_id||(I.user_id=su());const{conversation_id:C,...Q}=I,i=`/v3/chat${C?`?conversation_id=${C}`:""}`,B={...Q,additional_messages:MP(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:vu(I.shortcut_command.parameters)}:void 0,stream:!0},E=await this._client.post(i,B,!0,g);for await(const e of E)if(e.event==="done")yield{event:e.event,data:"[DONE]"};else try{yield{event:e.event,data:JSON.parse(e.data)}}catch{throw new Se(`Could not parse message into JSON:${e.data}`)}}async retrieve(I,g,C){const Q=`/v3/chat/retrieve?conversation_id=${I}&chat_id=${g}`;return(await this._client.post(Q,void 0,!1,C)).data}async cancel(I,g,C){const Q="/v3/chat/cancel",i={conversation_id:I,chat_id:g};return(await this._client.post(Q,i,!1,C)).data}async*submitToolOutputs(I,g){const{conversation_id:C,chat_id:Q,...i}=I,B=`/v3/chat/submit_tool_outputs?conversation_id=${I.conversation_id}&chat_id=${I.chat_id}`,E={...i};if(I.stream===!1)return(await this._client.post(B,E,!1,g)).data;{const e=await this._client.post(B,E,!0,g);for await(const t of e)if(t.event==="done")yield{event:t.event,data:"[DONE]"};else try{yield{event:t.event,data:JSON.parse(t.data)}}catch{throw new Se(`Could not parse message into JSON:${t.data}`)}}}constructor(...I){super(...I),this.messages=new rgA(this._client)}}var vgA=function(A){return A.CONVERSATION_CHAT_CREATED="conversation.chat.created",A.CONVERSATION_CHAT_IN_PROGRESS="conversation.chat.in_progress",A.CONVERSATION_CHAT_COMPLETED="conversation.chat.completed",A.CONVERSATION_CHAT_FAILED="conversation.chat.failed",A.CONVERSATION_CHAT_REQUIRES_ACTION="conversation.chat.requires_action",A.CONVERSATION_MESSAGE_DELTA="conversation.message.delta",A.CONVERSATION_MESSAGE_COMPLETED="conversation.message.completed",A.CONVERSATION_AUDIO_DELTA="conversation.audio.delta",A.DONE="done",A.ERROR="error",A}({}),iAI=function(A){return A.User="user",A.Assistant="assistant",A}({});class agA extends yI{async create(I,g,C){const Q=`/v1/conversation/message/create?conversation_id=${I}`;return(await this._client.post(Q,g,!1,C)).data}async update(I,g,C,Q){const i=`/v1/conversation/message/modify?conversation_id=${I}&message_id=${g}`;return(await this._client.post(i,C,!1,Q)).message}async retrieve(I,g,C){const Q=`/v1/conversation/message/retrieve?conversation_id=${I}&message_id=${g}`;return(await this._client.get(Q,null,!1,C)).data}async list(I,g,C){const Q=`/v1/conversation/message/list?conversation_id=${I}`;return await this._client.post(Q,g,!1,C)}async delete(I,g,C){const Q=`/v1/conversation/message/delete?conversation_id=${I}&message_id=${g}`;return(await this._client.post(Q,void 0,!1,C)).data}}class ngA extends yI{async create(I,g){return(await this._client.post("/v1/conversation/create",I,!1,g)).data}async retrieve(I,g){const C=`/v1/conversation/retrieve?conversation_id=${I}`;return(await this._client.get(C,null,!1,g)).data}async list(I,g){return(await this._client.get("/v1/conversations",I,!1,g)).data}async clear(I,g){const C=`/v1/conversations/${I}/clear`;return(await this._client.post(C,null,!1,g)).data}constructor(...I){super(...I),this.messages=new agA(this._client)}}class cgA extends yI{async upload(I,g){return(await this._client.post("/v1/files/upload",NL(I),!1,g)).data}async retrieve(I,g){const C=`/v1/files/retrieve?file_id=${I}`;return(await this._client.get(C,null,!1,g)).data}}class lgA extends yI{async create(I,g){return await this._client.post("/v1/workflow/run",I,!1,g)}async*stream(I,g){const Q=await this._client.post("/v1/workflow/stream_run",I,!0,g);for await(const i of Q)try{i.event==="Done"?yield new gF(Number(i.id),"Done"):yield new gF(Number(i.id),i.event,JSON.parse(i.data))}catch{throw new Se(`Could not parse message into JSON:${i.data}`)}}async resume(I,g){return await this._client.post("/v1/workflow/stream_resume",I,!1,g)}async history(I,g,C){const Q=`/v1/workflows/${I}/run_histories/${g}`;return(await this._client.get(Q,void 0,!1,C)).data}}class gF{constructor(I,g,C){this.id=I,this.event=g,this.data=C}}class PgA extends yI{async*stream(I,g){const C="/v1/workflows/chat",Q={...I,additional_messages:MP(I.additional_messages)},i=await this._client.post(C,Q,!0,g);for await(const B of i)if(B.event===vgA.DONE)yield{event:B.event,data:"[DONE]"};else try{yield{event:B.event,data:JSON.parse(B.data)}}catch{throw new Se(`Could not parse message into JSON:${B.data}`)}}}class dgA extends yI{constructor(...I){super(...I),this.runs=new lgA(this._client),this.chat=new PgA(this._client)}}class hgA extends yI{async list(I,g){const Q=await this._client.get("/v1/workspaces",I,!1,g);return QgA(Q,Q).data}}const ll={"agw-js-conv":"str"};class ugA extends yI{list(I,g){return this._client.get("/open_api/knowledge/document/list",I,!1,ni(g,{headers:ll}))}async create(I,g){return(await this._client.post("/open_api/knowledge/document/create",I,!1,ni(g,{headers:ll}))).document_infos}async delete(I,g){await this._client.post("/open_api/knowledge/document/delete",I,!1,ni(g,{headers:ll}))}async update(I,g){await this._client.post("/open_api/knowledge/document/update",I,!1,ni(g,{headers:ll}))}}class DgA extends yI{constructor(...I){super(...I),this.documents=new ugA(this._client)}}const Pl={"agw-js-conv":"str"};class bgA extends yI{async list(I,g){return await this._client.post("/open_api/knowledge/document/list",I,!1,ni(g,{headers:Pl}))}async create(I,g){return(await this._client.post("/open_api/knowledge/document/create",I,!1,ni(g,{headers:Pl}))).document_infos}async delete(I,g){await this._client.post("/open_api/knowledge/document/delete",I,!1,ni(g,{headers:Pl}))}async update(I,g){await this._client.post("/open_api/knowledge/document/update",I,!1,ni(g,{headers:Pl}))}}class ygA extends yI{async update(I,g,C,Q){const i=`/v1/datasets/${I}/images/${g}`;await this._client.put(i,C,!1,Q)}async list(I,g,C){const Q=`/v1/datasets/${I}/images`;return(await this._client.get(Q,g,!1,C)).data}}class mgA extends yI{async create(I,g){return(await this._client.post("/v1/datasets",I,!1,g)).data}async list(I,g){return(await this._client.get("/v1/datasets",I,!1,g)).data}async update(I,g,C){const Q=`/v1/datasets/${I}`;await this._client.put(Q,g,!1,C)}async delete(I,g){const C=`/v1/datasets/${I}`;await this._client.delete(C,!1,g)}async process(I,g,C){const Q=`/v1/datasets/${I}/process`;return(await this._client.post(Q,g,!1,C)).data}constructor(...I){super(...I),this.documents=new bgA(this._client),this.images=new ygA(this._client)}}class wgA extends yI{async clone(I,g){return(await this._client.post("/v1/audio/voices/clone",NL(I),!1,g)).data}async list(I,g){return(await this._client.get("/v1/audio/voices",I,!1,g)).data}}class GgA extends yI{async create(I,g){return(await this._client.post("/v1/audio/transcriptions",NL(I),!1,g)).data}}class RgA extends yI{async create(I,g){return await this._client.post("/v1/audio/speech",{...I,sample_rate:I.sample_rate||24e3},!1,ni(g,{responseType:"arraybuffer"}))}}class LgA extends yI{async create(I,g){return(await this._client.post("/v1/audio/rooms",I,!1,g)).data}}let SgA=class extends yI{constructor(...I){super(...I),this.rooms=new LgA(this._client),this.voices=new wgA(this._client),this.speech=new RgA(this._client),this.transcriptions=new GgA(this._client)}};class TgA extends yI{async duplicate(I,g,C){const Q=`/v1/templates/${I}/duplicate`;return(await this._client.post(Q,g,!1,C)).data}}class pgA extends yI{async create(I,g){const C=egA("/v1/chat",I);return await this._client.makeWebsocket(C,g)}}class FgA extends yI{async create(I){return await this._client.makeWebsocket("/v1/audio/transcriptions",I)}}class UgA extends yI{async create(I){return await this._client.makeWebsocket("/v1/audio/speech",I)}}class kgA extends yI{constructor(...I){super(...I),this.speech=new UgA(this._client),this.transcriptions=new FgA(this._client)}}var YgA=function(A){return A.CLIENT_ERROR="client_error",A.CLOSED="closed",A.ALL="all",A.ERROR="error",A.INPUT_TEXT_BUFFER_APPEND="input_text_buffer.append",A.INPUT_TEXT_BUFFER_COMPLETE="input_text_buffer.complete",A.SPEECH_UPDATE="speech.update",A.SPEECH_UPDATED="speech.updated",A.SPEECH_CREATED="speech.created",A.INPUT_TEXT_BUFFER_COMPLETED="input_text_buffer.completed",A.SPEECH_AUDIO_UPDATE="speech.audio.update",A.SPEECH_AUDIO_COMPLETED="speech.audio.completed",A.INPUT_AUDIO_BUFFER_APPEND="input_audio_buffer.append",A.INPUT_AUDIO_BUFFER_COMPLETE="input_audio_buffer.complete",A.TRANSCRIPTIONS_UPDATE="transcriptions.update",A.INPUT_AUDIO_BUFFER_CLEAR="input_audio_buffer.clear",A.TRANSCRIPTIONS_CREATED="transcriptions.created",A.INPUT_AUDIO_BUFFER_COMPLETED="input_audio_buffer.completed",A.TRANSCRIPTIONS_MESSAGE_UPDATE="transcriptions.message.update",A.TRANSCRIPTIONS_MESSAGE_COMPLETED="transcriptions.message.completed",A.INPUT_AUDIO_BUFFER_CLEARED="input_audio_buffer.cleared",A.TRANSCRIPTIONS_UPDATED="transcriptions.updated",A.CHAT_UPDATE="chat.update",A.CONVERSATION_CHAT_SUBMIT_TOOL_OUTPUTS="conversation.chat.submit_tool_outputs",A.CHAT_CREATED="chat.created",A.CHAT_UPDATED="chat.updated",A.CONVERSATION_CHAT_CREATED="conversation.chat.created",A.CONVERSATION_MESSAGE_CREATE="conversation.message.create",A.CONVERSATION_CLEAR="conversation.clear",A.CONVERSATION_CHAT_IN_PROGRESS="conversation.chat.in_progress",A.CONVERSATION_MESSAGE_DELTA="conversation.message.delta",A.CONVERSATION_CHAT_REQUIRES_ACTION="conversation.chat.requires_action",A.CONVERSATION_MESSAGE_COMPLETED="conversation.message.completed",A.CONVERSATION_AUDIO_DELTA="conversation.audio.delta",A.CONVERSATION_AUDIO_COMPLETED="conversation.audio.completed",A.CONVERSATION_CHAT_COMPLETED="conversation.chat.completed",A.CONVERSATION_CHAT_FAILED="conversation.chat.failed",A.CONVERSATION_CLEARED="conversation.cleared",A.INPUT_AUDIO_BUFFER_SPEECH_STARTED="input_audio_buffer.speech_started",A.INPUT_AUDIO_BUFFER_SPEECH_STOPPED="input_audio_buffer.speech_stopped",A.CONVERSATION_CHAT_CANCEL="conversation.chat.cancel",A.CONVERSATION_CHAT_CANCELED="conversation.chat.canceled",A.CONVERSATION_AUDIO_TRANSCRIPT_UPDATE="conversation.audio_transcript.update",A.CONVERSATION_AUDIO_TRANSCRIPT_COMPLETED="conversation.audio_transcript.completed",A.DUMP_AUDIO="dump.audio",A}({});class NgA extends yI{constructor(...I){super(...I),this.audio=new kgA(this._client),this.chat=new pgA(this._client)}}class ZgA{get readyState(){return this.rws.readyState}send(I){return this.rws.send(JSON.stringify(I))}close(I,g){return this.rws.close(I,g)}reconnect(I,g){return this.rws.reconnect(I,g)}addEventListener(I,g){this.rws.addEventListener(I,g)}removeEventListener(I,g){this.rws.removeEventListener(I,g)}constructor(I,g={}){this.onmessage=null,this.onopen=null,this.onclose=null,this.onerror=null;const C=I.includes("?")?"&":"?",{authorization:Q}=g.headers||{};this.rws=new ggA(`${I}${C}authorization=${Q}`,[],{WebSocket:Xa()?window.WebSocket:class extends Nr{constructor(i,B){super(i,B,{headers:g.headers})}},...g}),this.rws.addEventListener("message",i=>{try{var B,E;const e=JSON.parse(i.data);(B=(E=this).onmessage)===null||B===void 0||B.call(E,e,i)}catch(e){console.error("WebSocketAPI onmessage error",e)}}),this.rws.addEventListener("open",i=>{var B,E;(B=(E=this).onopen)===null||B===void 0||B.call(E,i)}),this.rws.addEventListener("close",i=>{var B,E;(B=(E=this).onclose)===null||B===void 0||B.call(E,i)}),this.rws.addEventListener("error",i=>{var B,E,e,t,o,r,s,v;const{readyState:n}=this.rws;if(n===3)return;const a=(e=i.target)===null||e===void 0||(E=e._req)===null||E===void 0||(B=E.res)===null||B===void 0?void 0:B.statusCode,c=((r=i.target)===null||r===void 0||(o=r._req)===null||o===void 0||(t=o.res)===null||t===void 0?void 0:t.rawHeaders)||[],P=c.findIndex(D=>D==="X-Tt-Logid"),d=P!==-1?c[P+1]:void 0,h={id:"0",event_type:YgA.ERROR,data:{code:-1,msg:"WebSocket error"},detail:{logid:d}};if(a===401)h.data.code=401,h.data.msg="Unauthorized";else if(a===403)h.data.code=403,h.data.msg="Forbidden";else{h.data.code=500;var u;h.data.msg=String((u=i==null?void 0:i.error)!==null&&u!==void 0?u:"")||"WebSocket error"}(s=(v=this).onerror)===null||s===void 0||s.call(v,h,i)})}}var KgA=JSON.parse('{"name":"@coze/api","version":"1.2.0","description":"Official Coze Node.js SDK for seamless AI integration into your applications | 扣子官方 Node.js SDK,助您轻松集成 AI 能力到应用中","keywords":["coze","ai","nodejs","sdk","chatbot","typescript"],"homepage":"https://github.com/coze-dev/coze-js/tree/main/packages/coze-js","bugs":{"url":"https://github.com/coze-dev/coze-js/issues"},"repository":{"type":"git","url":"https://github.com/coze-dev/coze-js.git","directory":"packages/coze-js"},"license":"MIT","author":"Leeight ","exports":{".":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.mjs","types":"./dist/types/index.d.ts"},"./ws-tools":{"require":"./dist/cjs/ws-tools/index.js","import":"./dist/esm/ws-tools/index.mjs","types":"./dist/types/ws-tools/ws-tools/index.d.ts"}},"main":"dist/cjs/index.js","unpkg":"dist/umd/index.js","module":"dist/esm/index.mjs","browser":{"crypto":false,"os":false,"jsonwebtoken":false,"node-fetch":false,"ws":false},"typesVersions":{"*":{".":["dist/types/index.d.ts"],"ws-tools":["dist/types/ws-tools/ws-tools/index.d.ts"]}},"files":["dist","LICENSE","README.md","README.zh-CN.md"],"scripts":{"build":"rslib build","format":"prettier --write .","lint":"eslint ./ --cache --quiet","start":"rslib build -w","test":"vitest","test:cov":"vitest --coverage --run"},"dependencies":{"agora-extension-ai-denoiser":"^1.0.0","agora-rtc-sdk-ng":"^4.23.2","agora-rte-extension":"^1.2.4","jsonwebtoken":"^9.0.2","node-fetch":"^2.x","reconnecting-websocket":"^4.4.0","uuid":"^10.0.0","ws":"^8.11.0"},"devDependencies":{"@coze-infra/eslint-config":"workspace:*","@coze-infra/ts-config":"workspace:*","@coze-infra/vitest-config":"workspace:*","@rslib/core":"0.0.18","@swc/core":"^1.3.14","@types/jsonwebtoken":"^9.0.0","@types/node":"^20","@types/node-fetch":"^2.x","@types/uuid":"^9.0.1","@types/whatwg-fetch":"^0.0.33","@types/ws":"^8.5.1","@vitest/coverage-v8":"~2.1.4","axios":"^1.7.7","typescript":"^5.5.3","vitest":"~2.1.4"},"peerDependencies":{"axios":"^1.7.1"},"cozePublishConfig":{"exports":{".":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.mjs","types":"./dist/types/index.d.ts"},"./ws-tools":{"require":"./dist/cjs/ws-tools/index.js","import":"./dist/esm/ws-tools/index.mjs","types":"./dist/types/ws-tools/ws-tools/index.d.ts"}},"main":"dist/cjs/index.js","module":"dist/esm/index.mjs","types":"dist/types/index.d.ts"},"types":"dist/types/index.d.ts"}');const{version:pd}=KgA,nz=()=>{const A=process.version.slice(1),{platform:I}=process;let g=I.toLowerCase(),C=Nr.release();if(I==="darwin"){g="macos";try{const Q=Nr.release().split(".");if(Q.length>=2){const i=parseInt(Q[0],10);!isNaN(i)&&i>=9&&(C=`10.${i-9}.${Q[1]}`)}}catch{}}else I==="win32"?(g="windows",C=Nr.release()):I==="linux"&&(g="linux",C=Nr.release());return{osName:g,osVersion:C,nodeVersion:A}},CF=()=>{const{nodeVersion:A,osName:I,osVersion:g}=nz();return`coze-js/${pd} node/${A} ${I}/${g}`.toLowerCase()},QF=()=>{const{osVersion:A,nodeVersion:I,osName:g}=nz();return JSON.stringify({version:pd,lang:"node",lang_version:I,os_name:g,os_version:A})},iF=()=>{const A={name:"unknown",version:"unknown"},I={name:"unknown",version:"unknown"},{userAgent:g}=navigator;if(g.indexOf("Windows")>-1){var C;I.name="windows";const o=((C=g.match(/Windows NT ([0-9.]+)/))===null||C===void 0?void 0:C[1])||"unknown";I.version=o}else if(g.indexOf("Mac OS X")>-1){var Q;I.name="macos",I.version=(((Q=g.match(/Mac OS X ([0-9_]+)/))===null||Q===void 0?void 0:Q[1])||"unknown").replace(/_/g,".")}else if(g.indexOf("Linux")>-1){var i;I.name="linux",I.version=((i=g.match(/Linux ([0-9.]+)/))===null||i===void 0?void 0:i[1])||"unknown"}if(g.indexOf("Chrome")>-1){var B;A.name="chrome",A.version=((B=g.match(/Chrome\/([0-9.]+)/))===null||B===void 0?void 0:B[1])||"unknown"}else if(g.indexOf("Firefox")>-1){var E;A.name="firefox",A.version=((E=g.match(/Firefox\/([0-9.]+)/))===null||E===void 0?void 0:E[1])||"unknown"}else if(g.indexOf("Safari")>-1){var e;A.name="safari",A.version=((e=g.match(/Version\/([0-9.]+)/))===null||e===void 0?void 0:e[1])||"unknown"}const t={version:pd,browser:A.name,browser_version:A.version,os_name:I.name,os_version:I.version};return JSON.stringify(t)},WgA=()=>{const A=uni.getSystemInfoSync(),I={name:"unknown",version:"unknown"},g={name:"unknown",version:"unknown"};if(A.platform==="android"?(g.name="android",g.version=A.system||"unknown"):A.platform==="ios"?(g.name="ios",g.version=A.system||"unknown"):A.platform==="windows"?(g.name="windows",g.version=A.system||"unknown"):A.platform==="mac"?(g.name="macos",g.version=A.system||"unknown"):(g.name=A.platform,g.version=A.system||"unknown"),A.AppPlatform)I.name=A.AppPlatform.toLowerCase(),I.version=A.appVersion||"unknown";else if(A.uniPlatform)I.name=A.uniPlatform,I.version=A.SDKVersion||"unknown";else{const{appName:Q,appVersion:i}=A;Q&&(I.name=Q.toLowerCase(),I.version=i||"unknown")}const C={version:pd,framework:"uniapp",platform:I.name,platform_version:I.version,os_name:g.name,os_version:g.version,screen_width:A.screenWidth,screen_height:A.screenHeight,device_model:A.model,device_brand:A.brand};return JSON.stringify(C)},BF=A=>{if(!A.isAxiosError&&(!A.code||!A.message))return new Se(`Unexpected error: ${A.message}`);if(A.code==="ECONNABORTED"&&A.message.includes("timeout")||A.code==="ETIMEDOUT"){var I;return new ZL(408,void 0,`Request timed out: ${A.message}`,(I=A.response)===null||I===void 0?void 0:I.headers)}if(A.code==="ERR_CANCELED")return new Ez(A.message);var g,C,Q;return qg.generate(((g=A.response)===null||g===void 0?void 0:g.status)||500,(C=A.response)===null||C===void 0?void 0:C.data,A.message,(Q=A.response)===null||Q===void 0?void 0:Q.headers)},JgA=async A=>{const I=await Nr(A.url,{body:A.data,...A});return{data:I.body,...I}},VgA=()=>{if(Xa()||Bz())return!0;const A=process.version.slice(1);return cz(A,"18.0.0")>=0};async function zgA(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const g=I.axiosInstance||Qg;if(I.isStreaming&&MgA(g)){const Q=g.VERSION||Qg.VERSION;if(!Q||cz(Q,"1.7.1")<0)throw new Se("Streaming requests require axios version 1.7.1 or higher. Please upgrade your axios version.")}const C=await g({url:A,responseType:I.isStreaming?"stream":"json",adapter:I.isStreaming?VgA()?"fetch":JgA:void 0,...I}).catch(Q=>{throw BF(Q)});return{async*stream(){try{const Q=C.data,i=Q[Symbol.asyncIterator]?Q[Symbol.asyncIterator]():Q.getReader(),B=new TextDecoder,E={};let e="";for(;;){const{done:t,value:o}=await(i.next?i.next():i.read());if(t){e&&(E.event="error",E.data=e,yield E);break}e+=B.decode(o,{stream:!0});const r=e.split(` +`);for(let s=0;sC.data,response:C}}function cz(A,I){const g=A.split(".").map(Number),C=I.split(".").map(Number);for(let Q=0;Q<3;Q++){const i=g[Q]||0,B=C[Q]||0;if(i>B)return 1;if(i2&&arguments[2]!==void 0&&arguments[2],Q=arguments.length>3?arguments[3]:void 0;return this.makeRequest(I,"POST",g,C,Q)}async get(I,g,C,Q){const i=Object.entries(g||{}).map(B=>{let[E,e]=B;return`${E}=${e}`}).join("&");return this.makeRequest(i?`${I}${I.includes("?")?"&":"?"}${i}`:I,"GET",void 0,C,Q)}async put(I,g,C,Q){return this.makeRequest(I,"PUT",g,C,Q)}async delete(I,g,C){return this.makeRequest(I,"DELETE",void 0,g,C)}async makeWebsocket(I,g){const C=`${this.baseWsURL}${I}`,Q=await this.buildWebsocketOptions(g);return this.debugLog(g==null?void 0:g.debug,`--- websocket url: ${C}`),this.debugLog(g==null?void 0:g.debug,"--- websocket options:",Q),new ZgA(C,Q)}getConfig(){return this._config}debugLog(){let I=arguments.length>0&&arguments[0]!==void 0&&arguments[0];for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q0&&pE[0]<4?1:+(pE[0]+pE[1])),!fP&&Pu&&(!(pE=Pu.match(/Edge\/(\d+)/))||pE[1]>=74)&&(pE=Pu.match(/Chrome\/(\d+)/))&&(fP=+pE[1]);var rc=fP,cF=rc,lCA=sI,PCA=cI,dCA=PCA.String,Hs=!!Object.getOwnPropertySymbols&&!lCA(function(){var A=Symbol("symbol detection");return!dCA(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&cF&&cF<41}),hCA=Hs,mz=hCA&&!Symbol.sham&&typeof Symbol.iterator=="symbol",uCA=$g,DCA=rg,bCA=vC,yCA=mz,mCA=Object,sc=yCA?function(A){return typeof A=="symbol"}:function(A){var I=uCA("Symbol");return DCA(I)&&bCA(I.prototype,mCA(A))},wCA=String,xs=function(A){try{return wCA(A)}catch{return"Object"}},GCA=rg,RCA=xs,LCA=TypeError,yi=function(A){if(GCA(A))return A;throw new LCA(RCA(A)+" is not a function")},SCA=yi,TCA=oc,Yd=function(A,I){var g=A[I];return TCA(g)?void 0:SCA(g)},du=bg,hu=rg,uu=NC,pCA=TypeError,FCA=function(A,I){var g,C;if(I==="string"&&hu(g=A.toString)&&!uu(C=du(g,A))||hu(g=A.valueOf)&&!uu(C=du(g,A))||I!=="string"&&hu(g=A.toString)&&!uu(C=du(g,A)))return C;throw new pCA("Can't convert object to primitive value")},wz={exports:{}},Gz=!0,lF=cI,UCA=Object.defineProperty,kCA=function(A,I){try{UCA(lF,A,{value:I,configurable:!0,writable:!0})}catch{lF[A]=I}return I},YCA=cI,NCA=kCA,PF="__core-js_shared__",dF=wz.exports=YCA[PF]||NCA(PF,{});(dF.versions||(dF.versions=[])).push({version:"3.39.0",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"});var WL=wz.exports,hF=WL,Os=function(A,I){return hF[A]||(hF[A]=I||{})},ZCA=so,KCA=Object,mi=function(A){return KCA(ZCA(A))},WCA=iI,JCA=mi,VCA=WCA({}.hasOwnProperty),Zg=Object.hasOwn||function(A,I){return VCA(JCA(A),I)},zCA=iI,MCA=0,fCA=Math.random(),jCA=zCA(1 .toString),JL=function(A){return"Symbol("+(A===void 0?"":A)+")_"+jCA(++MCA+fCA,36)},XCA=cI,HCA=Os,uF=Zg,xCA=JL,OCA=Hs,qCA=mz,Zr=XCA.Symbol,Du=HCA("wks"),_CA=qCA?Zr.for||Zr:Zr&&Zr.withoutSetter||xCA,mI=function(A){return uF(Du,A)||(Du[A]=OCA&&uF(Zr,A)?Zr[A]:_CA("Symbol."+A)),Du[A]},$CA=bg,DF=NC,bF=sc,AQA=Yd,IQA=FCA,gQA=mI,CQA=TypeError,QQA=gQA("toPrimitive"),iQA=function(A,I){if(!DF(A)||bF(A))return A;var g,C=AQA(A,QQA);if(C){if(I===void 0&&(I="default"),g=$CA(C,A,I),!DF(g)||bF(g))return g;throw new CQA("Can't convert object to primitive value")}return I===void 0&&(I="number"),IQA(A,I)},BQA=iQA,EQA=sc,VL=function(A){var I=BQA(A,"string");return EQA(I)?I:I+""},eQA=cI,yF=NC,Zw=eQA.document,tQA=yF(Zw)&&yF(Zw.createElement),zL=function(A){return tQA?Zw.createElement(A):{}},oQA=Dg,rQA=sI,sQA=zL,Rz=!oQA&&!rQA(function(){return Object.defineProperty(sQA("div"),"a",{get:function(){return 7}}).a!==7}),vQA=Dg,aQA=bg,nQA=kd,cQA=We,lQA=uE,PQA=VL,dQA=Zg,hQA=Rz,mF=Object.getOwnPropertyDescriptor;Xs.f=vQA?mF:function(A,I){if(A=lQA(A),I=PQA(I),hQA)try{return mF(A,I)}catch{}if(dQA(A,I))return cQA(!aQA(nQA.f,A,I),A[I])};var uQA=sI,DQA=rg,bQA=/#|\.prototype\./,vc=function(A,I){var g=mQA[yQA(A)];return g===GQA||g!==wQA&&(DQA(I)?uQA(I):!!I)},yQA=vc.normalize=function(A){return String(A).replace(bQA,".").toLowerCase()},mQA=vc.data={},wQA=vc.NATIVE="N",GQA=vc.POLYFILL="P",Lz=vc,RQA=yi,LQA=Fd,SQA=Nw(Nw.bind),DE=function(A,I){return RQA(A),I===void 0?A:LQA?SQA(A,I):function(){return A.apply(I,arguments)}},wi={},TQA=Dg,pQA=sI,Sz=TQA&&pQA(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),FQA=NC,UQA=String,kQA=TypeError,ZQ=function(A){if(FQA(A))return A;throw new kQA(UQA(A)+" is not an object")},YQA=Dg,NQA=Rz,ZQA=Sz,ul=ZQ,wF=VL,KQA=TypeError,bu=Object.defineProperty,WQA=Object.getOwnPropertyDescriptor,yu="enumerable",mu="configurable",wu="writable";wi.f=YQA?ZQA?function(A,I,g){if(ul(A),I=wF(I),ul(g),typeof A=="function"&&I==="prototype"&&"value"in g&&wu in g&&!g[wu]){var C=WQA(A,I);C&&C[wu]&&(A[I]=g.value,g={configurable:mu in g?g[mu]:C[mu],enumerable:yu in g?g[yu]:C[yu],writable:!1})}return bu(A,I,g)}:bu:function(A,I,g){if(ul(A),I=wF(I),ul(g),NQA)try{return bu(A,I,g)}catch{}if("get"in g||"set"in g)throw new KQA("Accessors not supported");return"value"in g&&(A[I]=g.value),A};var JQA=Dg,VQA=wi,zQA=We,vo=JQA?function(A,I,g){return VQA.f(A,I,zQA(1,g))}:function(A,I,g){return A[I]=g,A},Vv=cI,MQA=Ud,fQA=Nw,jQA=rg,XQA=Xs.f,HQA=Lz,Fo=oQ,xQA=DE,Uo=vo,GF=Zg,OQA=function(A){var I=function(g,C,Q){if(this instanceof I){switch(arguments.length){case 0:return new A;case 1:return new A(g);case 2:return new A(g,C)}return new A(g,C,Q)}return MQA(A,this,arguments)};return I.prototype=A.prototype,I},TA=function(A,I){var g,C,Q,i,B,E,e,t,o,r=A.target,s=A.global,v=A.stat,n=A.proto,a=s?Vv:v?Vv[r]:Vv[r]&&Vv[r].prototype,c=s?Fo:Fo[r]||Uo(Fo,r,{})[r],P=c.prototype;for(i in I)C=!(g=HQA(s?i:r+(v?".":"#")+i,A.forced))&&a&&GF(a,i),E=c[i],C&&(e=A.dontCallGetSet?(o=XQA(a,i))&&o.value:a[i]),B=C&&e?e:I[i],(g||n||typeof E!=typeof B)&&(t=A.bind&&C?xQA(B,Vv):A.wrap&&C?OQA(B):n&&jQA(B)?fQA(B):B,(A.sham||B&&B.sham||E&&E.sham)&&Uo(t,"sham",!0),Uo(c,i,t),n&&(GF(Fo,Q=r+"Prototype")||Uo(Fo,Q,{}),Uo(Fo[Q],i,B),A.real&&P&&(g||!P[i])&&Uo(P,i,B)))},qQA=TA,_QA=Dg,RF=wi.f;qQA({target:"Object",stat:!0,forced:Object.defineProperty!==RF,sham:!_QA},{defineProperty:RF});var $QA=oQ,Tz=$QA.Object,AiA=lz.exports=function(A,I,g){return Tz.defineProperty(A,I,g)};Tz.defineProperty.sham&&(AiA.sham=!0);var IiA=lz.exports,giA=IiA,CiA=giA,QiA=CiA,iiA=QiA,BiA=iiA,EiA=BiA,eiA=EiA,pz=nI(eiA),tiA=Ke,qs=Array.isArray||function(A){return tiA(A)==="Array"},oiA=Math.ceil,riA=Math.floor,siA=Math.trunc||function(A){var I=+A;return(I>0?riA:oiA)(I)},viA=siA,Nd=function(A){var I=+A;return I!=I||I===0?0:viA(I)},aiA=Nd,niA=Math.min,ciA=function(A){var I=aiA(A);return I>0?niA(I,9007199254740991):0},liA=ciA,bE=function(A){return liA(A.length)},PiA=TypeError,diA=9007199254740991,ML=function(A){if(A>diA)throw PiA("Maximum allowed index exceeded");return A},hiA=Dg,uiA=wi,DiA=We,Zd=function(A,I,g){hiA?uiA.f(A,I,DiA(0,g)):A[I]=g},biA=mI,yiA=biA("toStringTag"),Fz={};Fz[yiA]="z";var fL=String(Fz)==="[object z]",miA=fL,wiA=rg,jP=Ke,GiA=mI,RiA=GiA("toStringTag"),LiA=Object,SiA=jP(function(){return arguments}())==="Arguments",TiA=function(A,I){try{return A[I]}catch{}},_s=miA?jP:function(A){var I,g,C;return A===void 0?"Undefined":A===null?"Null":typeof(g=TiA(I=LiA(A),RiA))=="string"?g:SiA?jP(I):(C=jP(I))==="Object"&&wiA(I.callee)?"Arguments":C},piA=iI,FiA=rg,Kw=WL,UiA=piA(Function.toString);FiA(Kw.inspectSource)||(Kw.inspectSource=function(A){return UiA(A)});var Uz=Kw.inspectSource,kiA=iI,YiA=sI,kz=rg,NiA=_s,ZiA=$g,KiA=Uz,Yz=function(){},Nz=ZiA("Reflect","construct"),jL=/^\s*(?:class|function)\b/,WiA=kiA(jL.exec),JiA=!jL.test(Yz),zv=function(A){if(!kz(A))return!1;try{return Nz(Yz,[],A),!0}catch{return!1}},Zz=function(A){if(!kz(A))return!1;switch(NiA(A)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return JiA||!!WiA(jL,KiA(A))}catch{return!0}};Zz.sham=!0;var XL=!Nz||YiA(function(){var A;return zv(zv.call)||!zv(Object)||!zv(function(){A=!0})||A})?Zz:zv,LF=qs,ViA=XL,ziA=NC,MiA=mI,fiA=MiA("species"),SF=Array,jiA=function(A){var I;return LF(A)&&(I=A.constructor,(ViA(I)&&(I===SF||LF(I.prototype))||ziA(I)&&(I=I[fiA])===null)&&(I=void 0)),I===void 0?SF:I},XiA=jiA,HL=function(A,I){return new(XiA(A))(I===0?0:I)},HiA=sI,xiA=mI,OiA=rc,qiA=xiA("species"),Kz=function(A){return OiA>=51||!HiA(function(){var I=[];return(I.constructor={})[qiA]=function(){return{foo:1}},I[A](Boolean).foo!==1})},_iA=TA,$iA=sI,ABA=qs,IBA=NC,gBA=mi,CBA=bE,TF=ML,pF=Zd,QBA=HL,iBA=Kz,BBA=mI,EBA=rc,Wz=BBA("isConcatSpreadable"),eBA=EBA>=51||!$iA(function(){var A=[];return A[Wz]=!1,A.concat()[0]!==A}),tBA=function(A){if(!IBA(A))return!1;var I=A[Wz];return I!==void 0?!!I:ABA(A)},oBA=!eBA||!iBA("concat");_iA({target:"Array",proto:!0,forced:oBA},{concat:function(A){var I,g,C,Q,i,B=gBA(this),E=QBA(B,0),e=0;for(I=-1,C=arguments.length;IE;)if((B=Q[E++])!=B)return!0}else for(;i>E;E++)if((A||E in Q)&&Q[E]===g)return A||E||0;return!A&&-1}},Vz={includes:FF(!0),indexOf:FF(!1)},Wd={},dBA=iI,Gu=Zg,hBA=uE,uBA=Vz.indexOf,DBA=Wd,UF=dBA([].push),zz=function(A,I){var g,C=hBA(A),Q=0,i=[];for(g in C)!Gu(DBA,g)&&Gu(C,g)&&UF(i,g);for(;I.length>Q;)Gu(C,g=I[Q++])&&(~uBA(i,g)||UF(i,g));return i},xL=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],bBA=zz,yBA=xL,Jd=Object.keys||function(A){return bBA(A,yBA)},mBA=Dg,wBA=Sz,GBA=wi,RBA=ZQ,LBA=uE,SBA=Jd;Kd.f=mBA&&!wBA?Object.defineProperties:function(A,I){RBA(A);for(var g,C=LBA(I),Q=SBA(I),i=Q.length,B=0;i>B;)GBA.f(A,g=Q[B++],C[g]);return A};var Dl,TBA=$g,Mz=TBA("document","documentElement"),pBA=Os,FBA=JL,kF=pBA("keys"),Vd=function(A){return kF[A]||(kF[A]=FBA(A))},UBA=ZQ,kBA=Kd,YF=xL,YBA=Wd,NBA=Mz,ZBA=zL,KBA=Vd,NF=">",ZF="<",Ww="prototype",Jw="script",fz=KBA("IE_PROTO"),Ru=function(){},jz=function(A){return ZF+Jw+NF+A+ZF+"/"+Jw+NF},KF=function(A){A.write(jz("")),A.close();var I=A.parentWindow.Object;return A=null,I},WBA=function(){var A,I=ZBA("iframe"),g="java"+Jw+":";return I.style.display="none",NBA.appendChild(I),I.src=String(g),(A=I.contentWindow.document).open(),A.write(jz("document.F=Object")),A.close(),A.F},XP=function(){try{Dl=new ActiveXObject("htmlfile")}catch{}XP=typeof document<"u"?document.domain&&Dl?KF(Dl):WBA():KF(Dl);for(var A=YF.length;A--;)delete XP[Ww][YF[A]];return XP()};YBA[fz]=!0;var ac=Object.create||function(A,I){var g;return A!==null?(Ru[Ww]=UBA(A),g=new Ru,Ru[Ww]=null,g[fz]=A):g=XP(),I===void 0?g:kBA.f(g,I)},zd={},JBA=zz,VBA=xL,zBA=VBA.concat("length","prototype");zd.f=Object.getOwnPropertyNames||function(A){return JBA(A,zBA)};var Xz={},MBA=iI,$s=MBA([].slice),fBA=Ke,jBA=uE,Hz=zd.f,XBA=$s,xz=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],HBA=function(A){try{return Hz(A)}catch{return XBA(xz)}};Xz.f=function(A){return xz&&fBA(A)==="Window"?HBA(A):Hz(jBA(A))};var nc={};nc.f=Object.getOwnPropertySymbols;var xBA=vo,Ve=function(A,I,g,C){return C&&C.enumerable?A[I]=g:xBA(A,I,g),A},OBA=wi,Md=function(A,I,g){return OBA.f(A,I,g)},Av={},qBA=mI;Av.f=qBA;var E0,Nn,e0,WF=oQ,_BA=Zg,$BA=Av,AEA=wi.f,HI=function(A){var I=WF.Symbol||(WF.Symbol={});_BA(I,A)||AEA(I,A,{value:$BA.f(A)})},IEA=bg,gEA=$g,CEA=mI,QEA=Ve,Oz=function(){var A=gEA("Symbol"),I=A&&A.prototype,g=I&&I.valueOf,C=CEA("toPrimitive");I&&!I[C]&&QEA(I,C,function(Q){return IEA(g,this)},{})},iEA=fL,BEA=_s,EEA=iEA?{}.toString:function(){return"[object "+BEA(this)+"]"},eEA=fL,tEA=wi.f,oEA=vo,rEA=Zg,sEA=EEA,vEA=mI,JF=vEA("toStringTag"),yE=function(A,I,g,C){var Q=g?A:A&&A.prototype;Q&&(rEA(Q,JF)||tEA(Q,JF,{configurable:!0,value:I}),C&&!eEA&&oEA(Q,"toString",sEA))},aEA=cI,nEA=rg,VF=aEA.WeakMap,cEA=nEA(VF)&&/native code/.test(String(VF)),lEA=cEA,qz=cI,PEA=NC,dEA=vo,Lu=Zg,Su=WL,hEA=Vd,uEA=Wd,zF="Object already initialized",Vw=qz.TypeError,DEA=qz.WeakMap,bEA=function(A){return e0(A)?Nn(A):E0(A,{})},yEA=function(A){return function(I){var g;if(!PEA(I)||(g=Nn(I)).type!==A)throw new Vw("Incompatible receiver, "+A+" required");return g}};if(lEA||Su.state){var nB=Su.state||(Su.state=new DEA);nB.get=nB.get,nB.has=nB.has,nB.set=nB.set,E0=function(A,I){if(nB.has(A))throw new Vw(zF);return I.facade=A,nB.set(A,I),I},Nn=function(A){return nB.get(A)||{}},e0=function(A){return nB.has(A)}}else{var ko=hEA("state");uEA[ko]=!0,E0=function(A,I){if(Lu(A,ko))throw new Vw(zF);return I.facade=A,dEA(A,ko,I),I},Nn=function(A){return Lu(A,ko)?A[ko]:{}},e0=function(A){return Lu(A,ko)}}var Iv={set:E0,get:Nn,has:e0,enforce:bEA,getterFor:yEA},mEA=DE,wEA=iI,GEA=KL,REA=mi,LEA=bE,SEA=HL,MF=wEA([].push),fF=function(A){var I=A===1,g=A===2,C=A===3,Q=A===4,i=A===6,B=A===7,E=A===5||i;return function(e,t,o,r){for(var s,v,n=REA(e),a=GEA(n),c=LEA(a),P=mEA(t,o),d=0,h=r||SEA,u=I?h(e,c):g||B?h(e,0):void 0;c>d;d++)if((E||d in a)&&(v=P(s=a[d],d,n),A))if(I)u[d]=v;else if(v)switch(A){case 3:return!0;case 5:return s;case 6:return d;case 2:MF(u,s)}else switch(A){case 4:return!1;case 7:MF(u,s)}return i?-1:C||Q?Q:u}},OL={forEach:fF(0),filter:fF(2)},bl=TA,cc=cI,qL=bg,TEA=iI,Qs=Dg,Yo=Hs,pEA=sI,Ug=Zg,FEA=vC,zw=ZQ,fd=uE,_L=VL,UEA=rQ,Mw=We,bs=ac,_z=Jd,kEA=zd,$z=Xz,YEA=nc,AM=Xs,IM=wi,NEA=Kd,gM=kd,jF=Ve,ZEA=Md,$L=Os,KEA=Vd,CM=Wd,XF=JL,WEA=mI,JEA=Av,VEA=HI,zEA=Oz,MEA=yE,QM=Iv,jd=OL.forEach,IQ=KEA("hidden"),t0="Symbol",Zn="prototype",fEA=QM.set,HF=QM.getterFor(t0),Hi=Object[Zn],Kr=cc.Symbol,HP=Kr&&Kr[Zn],jEA=cc.RangeError,XEA=cc.TypeError,Tu=cc.QObject,iM=AM.f,Yt=IM.f,BM=$z.f,HEA=gM.f,EM=TEA([].push),nE=$L("symbols"),lc=$L("op-symbols"),xEA=$L("wks"),pu=!Tu||!Tu[Zn]||!Tu[Zn].findChild,eM=function(A,I,g){var C=iM(Hi,I);C&&delete Hi[I],Yt(A,I,g),C&&A!==Hi&&Yt(Hi,I,C)},fw=Qs&&pEA(function(){return bs(Yt({},"a",{get:function(){return Yt(this,"a",{value:7}).a}})).a!==7})?eM:Yt,Fu=function(A,I){var g=nE[A]=bs(HP);return fEA(g,{type:t0,tag:A,description:I}),Qs||(g.description=I),g},o0=function(A,I,g){A===Hi&&o0(lc,I,g),zw(A);var C=_L(I);return zw(g),Ug(nE,C)?(g.enumerable?(Ug(A,IQ)&&A[IQ][C]&&(A[IQ][C]=!1),g=bs(g,{enumerable:Mw(0,!1)})):(Ug(A,IQ)||Yt(A,IQ,Mw(1,bs(null))),A[IQ][C]=!0),fw(A,C,g)):Yt(A,C,g)},jw=function(A,I){zw(A);var g=fd(I),C=_z(g).concat(oM(g));return jd(C,function(Q){Qs&&!qL(tM,g,Q)||o0(A,Q,g[Q])}),A},OEA=function(A,I){return I===void 0?bs(A):jw(bs(A),I)},tM=function(A){var I=_L(A),g=qL(HEA,this,I);return!(this===Hi&&Ug(nE,I)&&!Ug(lc,I))&&(!(g||!Ug(this,I)||!Ug(nE,I)||Ug(this,IQ)&&this[IQ][I])||g)},xF=function(A,I){var g=fd(A),C=_L(I);if(g!==Hi||!Ug(nE,C)||Ug(lc,C)){var Q=iM(g,C);return!Q||!Ug(nE,C)||Ug(g,IQ)&&g[IQ][C]||(Q.enumerable=!0),Q}},OF=function(A){var I=BM(fd(A)),g=[];return jd(I,function(C){Ug(nE,C)||Ug(CM,C)||EM(g,C)}),g},oM=function(A){var I=A===Hi,g=BM(I?lc:fd(A)),C=[];return jd(g,function(Q){!Ug(nE,Q)||I&&!Ug(Hi,Q)||EM(C,nE[Q])}),C};Yo||(jF(HP=(Kr=function(){if(FEA(HP,this))throw new XEA("Symbol is not a constructor");var A=arguments.length&&arguments[0]!==void 0?UEA(arguments[0]):void 0,I=XF(A),g=function(C){var Q=this===void 0?cc:this;Q===Hi&&qL(g,lc,C),Ug(Q,IQ)&&Ug(Q[IQ],I)&&(Q[IQ][I]=!1);var i=Mw(1,C);try{fw(Q,I,i)}catch(B){if(!(B instanceof jEA))throw B;eM(Q,I,i)}};return Qs&&pu&&fw(Hi,I,{configurable:!0,set:g}),Fu(I,A)})[Zn],"toString",function(){return HF(this).tag}),jF(Kr,"withoutSetter",function(A){return Fu(XF(A),A)}),gM.f=tM,IM.f=o0,NEA.f=jw,AM.f=xF,kEA.f=$z.f=OF,YEA.f=oM,JEA.f=function(A){return Fu(WEA(A),A)},Qs&&ZEA(HP,"description",{configurable:!0,get:function(){return HF(this).description}})),bl({global:!0,wrap:!0,forced:!Yo,sham:!Yo},{Symbol:Kr}),jd(_z(xEA),function(A){VEA(A)}),bl({target:t0,stat:!0,forced:!Yo},{useSetter:function(){pu=!0},useSimple:function(){pu=!1}}),bl({target:"Object",stat:!0,forced:!Yo,sham:!Qs},{create:OEA,defineProperty:o0,defineProperties:jw,getOwnPropertyDescriptor:xF}),bl({target:"Object",stat:!0,forced:!Yo},{getOwnPropertyNames:OF}),zEA(),MEA(Kr,t0),CM[IQ]=!0;var qEA=Hs,rM=qEA&&!!Symbol.for&&!!Symbol.keyFor,_EA=TA,$EA=$g,AeA=Zg,IeA=rQ,sM=Os,geA=rM,Uu=sM("string-to-symbol-registry"),CeA=sM("symbol-to-string-registry");_EA({target:"Symbol",stat:!0,forced:!geA},{for:function(A){var I=IeA(A);if(AeA(Uu,I))return Uu[I];var g=$EA("Symbol")(I);return Uu[I]=g,CeA[g]=I,g}});var QeA=TA,ieA=Zg,BeA=sc,EeA=xs,eeA=Os,teA=rM,qF=eeA("symbol-to-string-registry");QeA({target:"Symbol",stat:!0,forced:!teA},{keyFor:function(A){if(!BeA(A))throw new TypeError(EeA(A)+" is not a symbol");if(ieA(qF,A))return qF[A]}});var oeA=iI,_F=qs,reA=rg,$F=Ke,seA=rQ,AU=oeA([].push),veA=function(A){if(reA(A))return A;if(_F(A)){for(var I=A.length,g=[],C=0;C=I.length)return A.target=null,Gl(void 0,!0);switch(A.kind){case"keys":return Gl(g,!1);case"values":return Gl(I[g],!1)}return Gl([g,I[g]],!1)},"values"),cU.Arguments=cU.Array;var HtA={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},xtA=HtA,OtA=cI,qtA=yE,lU=gv;for(var Yu in xtA)qtA(OtA[Yu],Yu),lU[Yu]=lU.Array;var _tA=xeA,$tA=_tA,AoA=mI,IoA=wi.f,PU=AoA("metadata"),dU=Function.prototype;dU[PU]===void 0&&IoA(dU,PU,{value:null});var goA=HI;goA("asyncDispose");var CoA=HI;CoA("dispose");var QoA=HI;QoA("metadata");var ioA=$tA,BoA=ioA,EoA=$g,eoA=iI,gS=EoA("Symbol"),toA=gS.keyFor,ooA=eoA(gS.prototype.valueOf),GM=gS.isRegisteredSymbol||function(A){try{return toA(ooA(A))!==void 0}catch{return!1}},roA=TA,soA=GM;roA({target:"Symbol",stat:!0},{isRegisteredSymbol:soA});for(var voA=Os,hU=$g,aoA=iI,noA=sc,coA=mI,Rl=hU("Symbol"),uU=Rl.isWellKnownSymbol,RM=hU("Object","getOwnPropertyNames"),loA=aoA(Rl.prototype.valueOf),DU=voA("wks"),Nu=0,bU=RM(Rl),PoA=bU.length;Nu=E?A?"":void 0:(C=mU(i,B))<55296||C>56319||B+1===E||(Q=mU(i,B+1))<56320||Q>57343?A?NoA(i,B):C:A?ZoA(i,B,B+2):Q-56320+(C-55296<<10)+65536}},SM={codeAt:wU(!1),charAt:wU(!0)},KoA=SM.charAt,WoA=rQ,TM=Iv,JoA=yM,GU=IS,pM="String Iterator",VoA=TM.set,zoA=TM.getterFor(pM);JoA(String,"String",function(A){VoA(this,{type:pM,string:WoA(A),index:0})},function(){var A,I=zoA(this),g=I.string,C=I.index;return C>=g.length?GU(void 0,!0):(A=KoA(g,C),I.index+=A.length,GU(A,!1))});var MoA=Av,foA=MoA.f("iterator"),joA=foA,XoA=joA,HoA=XoA,xoA=HoA,OoA=xoA,qoA=OoA,_oA=qoA,FM=nI(_oA);function r0(A){return(r0=typeof Pa=="function"&&typeof FM=="symbol"?function(I){return typeof I}:function(I){return I&&typeof Pa=="function"&&I.constructor===Pa&&I!==Pa.prototype?"symbol":typeof I})(A)}var $oA=Av,ArA=$oA.f("toPrimitive"),IrA=ArA,grA=IrA,CrA=grA,QrA=CrA,irA=QrA,BrA=irA,ErA=BrA,erA=nI(ErA);function trA(A,I){if(r0(A)!="object"||!A)return A;var g=A[erA];if(g!==void 0){var C=g.call(A,I);if(r0(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(I==="string"?String:Number)(A)}function orA(A){var I=trA(A,"string");return r0(I)=="symbol"?I:I+""}function l(A,I,g){return(I=orA(I))in A?pz(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}var rrA=TA,srA=iI,vrA=qs,arA=srA([].reverse),RU=[1,2];rrA({target:"Array",proto:!0,forced:String(RU)===String(RU.reverse())},{reverse:function(){return vrA(this)&&(this.length=this.length),arA(this)}});var nrA=cI,crA=oQ,KB=function(A,I){var g=crA[A+"Prototype"],C=g&&g[I];if(C)return C;var Q=nrA[A],i=Q&&Q.prototype;return i&&i[I]},lrA=KB,PrA=lrA("Array","reverse"),drA=vC,hrA=PrA,Zu=Array.prototype,urA=function(A){var I=A.reverse;return A===Zu||drA(Zu,A)&&I===Zu.reverse?hrA:I},DrA=urA,brA=DrA,yrA=brA,mrA=yrA,wrA=mrA,GrA=wrA,RrA=GrA,LrA=RrA,UM=nI(LrA),SrA=NC,TrA=Ke,prA=mI,FrA=prA("match"),kM=function(A){var I;return SrA(A)&&((I=A[FrA])!==void 0?!!I:TrA(A)==="RegExp")},UrA=ZQ,krA=function(){var A=UrA(this),I="";return A.hasIndices&&(I+="d"),A.global&&(I+="g"),A.ignoreCase&&(I+="i"),A.multiline&&(I+="m"),A.dotAll&&(I+="s"),A.unicode&&(I+="u"),A.unicodeSets&&(I+="v"),A.sticky&&(I+="y"),I},YrA=bg,NrA=Zg,ZrA=vC,KrA=krA,LU=RegExp.prototype,YM=function(A){var I=A.flags;return I!==void 0||"flags"in LU||NrA(A,"flags")||!ZrA(LU,A)?I:YrA(KrA,A)},QS=iI,WrA=mi,JrA=Math.floor,Ku=QS("".charAt),VrA=QS("".replace),Wu=QS("".slice),zrA=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,MrA=/\$([$&'`]|\d{1,2})/g,frA=function(A,I,g,C,Q,i){var B=g+A.length,E=C.length,e=MrA;return Q!==void 0&&(Q=WrA(Q),e=zrA),VrA(i,e,function(t,o){var r;switch(Ku(o,0)){case"$":return"$";case"&":return A;case"`":return Wu(I,0,g);case"'":return Wu(I,B);case"<":r=Q[Wu(o,1,-1)];break;default:var s=+o;if(s===0)return t;if(s>E){var v=JrA(s/10);return v===0?t:v<=E?C[v-1]===void 0?Ku(o,1):C[v-1]+Ku(o,1):t}r=C[s-1]}return r===void 0?"":r})},jrA=TA,XrA=bg,iS=iI,SU=so,HrA=rg,xrA=oc,OrA=kM,No=rQ,qrA=Yd,_rA=YM,$rA=frA,AsA=mI,IsA=AsA("replace"),gsA=TypeError,Ju=iS("".indexOf),CsA=iS("".replace),TU=iS("".slice),QsA=Math.max;jrA({target:"String",proto:!0},{replaceAll:function(A,I){var g,C,Q,i,B,E,e,t,o,r,s=SU(this),v=0,n="";if(!xrA(A)){if((g=OrA(A))&&(C=No(SU(_rA(A))),!~Ju(C,"g")))throw new gsA("`.replaceAll` does not allow non-global regexes");if(Q=qrA(A,IsA))return XrA(Q,A,s,I);if(g)return CsA(No(s),A,I)}for(i=No(s),B=No(A),(E=HrA(I))||(I=No(I)),e=B.length,t=QsA(1,e),o=Ju(i,B);o!==-1;)r=E?No(I(B,o,i)):$rA(B,i,o,[],void 0,I),n+=TU(i,v,o)+r,v=o+e,o=o+t>i.length?-1:Ju(i,B,o+t);return v(A[A.VIDEO_SOURCE_TYPE_EXTERNAL=0]="VIDEO_SOURCE_TYPE_EXTERNAL",A[A.VIDEO_SOURCE_TYPE_INTERNAL=1]="VIDEO_SOURCE_TYPE_INTERNAL",A))(BC||{}),lQ=(A=>(A[A.AUDIO_SOURCE_TYPE_EXTERNAL=0]="AUDIO_SOURCE_TYPE_EXTERNAL",A[A.AUDIO_SOURCE_TYPE_INTERNAL=1]="AUDIO_SOURCE_TYPE_INTERNAL",A))(lQ||{}),da=(A=>(A[A.QUIT=0]="QUIT",A[A.DROPPED=1]="DROPPED",A[A.SWITCH_TO_INVISIBLE=2]="SWITCH_TO_INVISIBLE",A[A.KICKED_BY_ADMIN=3]="KICKED_BY_ADMIN",A))(da||{}),fsA=(A=>(A[A.CHANNEL_PROFILE_COMMUNICATION=0]="CHANNEL_PROFILE_COMMUNICATION",A[A.CHANNEL_PROFILE_LIVE_BROADCASTING=1]="CHANNEL_PROFILE_LIVE_BROADCASTING",A))(fsA||{}),jsA=(A=>(A[A.AUTO_SUBSCRIBE_MODE=0]="AUTO_SUBSCRIBE_MODE",A[A.MANUAL_SUBSCRIBE_MODE=1]="MANUAL_SUBSCRIBE_MODE",A))(jsA||{}),is=(A=>(A[A.SUBSCRIBE_SUCC=0]="SUBSCRIBE_SUCC",A[A.SUBSCRIBE_FAIL=1]="SUBSCRIBE_FAIL",A))(is||{}),wB=(A=>(A[A.PUBLISH_SUCC=0]="PUBLISH_SUCC",A[A.PUBLISH_FAIL=1]="PUBLISH_FAIL",A))(wB||{}),XsA=(A=>(A[A.MIRROR_MODE_OFF=0]="MIRROR_MODE_OFF",A[A.MIRROR_MODE_ON=1]="MIRROR_MODE_ON",A))(XsA||{}),st=(A=>(A[A.RENDER_MODE_HIDDEN=0]="RENDER_MODE_HIDDEN",A[A.RENDER_MODE_FIT=1]="RENDER_MODE_FIT",A[A.RENDER_MODE_FILL=2]="RENDER_MODE_FILL",A))(st||{}),W=(A=>(A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A))(W||{}),sA=(A=>(A[A.AUDIO=1]="AUDIO",A[A.VIDEO=2]="VIDEO",A[A.AUDIO_AND_VIDEO=3]="AUDIO_AND_VIDEO",A))(sA||{}),GB=(A=>(A[A.STREAM_REMOVE_REASON_UNPUBLISH=0]="STREAM_REMOVE_REASON_UNPUBLISH",A[A.STREAM_REMOVE_REASON_PUBLISH_FAILED=1]="STREAM_REMOVE_REASON_PUBLISH_FAILED",A[A.STREAM_REMOVE_REASON_KEEP_LIVE_FAILED=2]="STREAM_REMOVE_REASON_KEEP_LIVE_FAILED",A[A.STREAM_REMOVE_REASON_CLIENT_DISCONNECTED=3]="STREAM_REMOVE_REASON_CLIENT_DISCONNECTED",A[A.STREAM_REMOVE_REASON_REPUBLISH=4]="STREAM_REMOVE_REASON_REPUBLISH",A[A.STREAM_REMOVE_REASON_OTHER=5]="STREAM_REMOVE_REASON_OTHER",A[A.STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED=6]="STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED",A))(GB||{}),CI=(A=>(A[A.CONNECTION_START=0]="CONNECTION_START",A[A.CONNECTION_STATE_DISCONNECTED=1]="CONNECTION_STATE_DISCONNECTED",A[A.CONNECTION_STATE_CONNECTING=2]="CONNECTION_STATE_CONNECTING",A[A.CONNECTION_STATE_CONNECTED=3]="CONNECTION_STATE_CONNECTED",A[A.CONNECTION_STATE_RECONNECTING=4]="CONNECTION_STATE_RECONNECTING",A[A.CONNECTION_STATE_RECONNECTED=5]="CONNECTION_STATE_RECONNECTED",A[A.CONNECTION_STATE_LOST=6]="CONNECTION_STATE_LOST",A))(CI||{}),OE=(A=>(A.ICE_FAILED="iceFailed",A.NODE_CHANGE="nodeChange",A.JOIN_TIMEOUT="joinTimeout",A.NOTIFY_RECONNECT="notifyReconnect",A))(OE||{}),sr=(A=>(A.AUTO="auto",A.H264="h264",A.VP8="vp8",A.ByteVC1="ByteVC1",A))(sr||{}),Ci=(A=>(A[A.MIRROR_TYPE_NONE=0]="MIRROR_TYPE_NONE",A[A.MIRROR_TYPE_RENDER=1]="MIRROR_TYPE_RENDER",A))(Ci||{}),ha=(A=>(A[A.NORMAL=0]="NORMAL",A[A.DISCONNECT=1]="DISCONNECT",A[A.RESET=2]="RESET",A))(ha||{}),s0=(A=>(A[A.MICROPHONE=0]="MICROPHONE",A[A.AUDIOMIXING=1]="AUDIOMIXING",A))(s0||{}),qw=(A=>(A[A.domestic=0]="domestic",A[A.overseas=1]="overseas",A))(qw||{}),HsA=(A=>(A[A.OFFLINE=0]="OFFLINE",A[A.ONLINE=1]="ONLINE",A[A.UNREACHABLE=2]="UNREACHABLE",A))(HsA||{}),xsA=(A=>(A[A.AUDIO_AND_VIDEO=0]="AUDIO_AND_VIDEO",A[A.AUDIO_ONLY=1]="AUDIO_ONLY",A[A.VIDEO_ONLY=2]="VIDEO_ONLY",A))(xsA||{}),ZM=(A=>(A[A.PREV_FRAME=0]="PREV_FRAME",A[A.OTHER_FRAME=1]="OTHER_FRAME",A))(ZM||{}),xP=(A=>(A[A.DISABLE=0]="DISABLE",A[A.VIDEO_STREAM_LOW=1]="VIDEO_STREAM_LOW",A[A.AUDIO_ONLY=2]="AUDIO_ONLY",A))(xP||{}),OP=(A=>(A[A.LOW=0]="LOW",A[A.MEDIUM=100]="MEDIUM",A[A.HIGH=200]="HIGH",A))(OP||{}),vt=(A=>(A[A.UNKNOWN=0]="UNKNOWN",A[A.EXCELLENT=1]="EXCELLENT",A[A.GOOD=2]="GOOD",A[A.POOR=3]="POOR",A[A.BAD=4]="BAD",A[A.VBAD=5]="VBAD",A[A.DOWN=6]="DOWN",A))(vt||{}),OsA=(A=>(A[A.Unknown=-1]="Unknown",A[A.SubscribeFallbackByBandwidth=0]="SubscribeFallbackByBandwidth",A[A.SubscribeRecoverByBandwidth=2]="SubscribeRecoverByBandwidth",A))(OsA||{}),LC=(A=>(A[A.communication=0]="communication",A[A.chat=5]="chat",A[A.chatRoom=6]="chatRoom",A[A.coHost=9]="coHost",A[A.meeting=16]="meeting",A[A.classRoom=18]="classRoom",A))(LC||{}),vr=(A=>(A[A.default=0]="default",A[A.fluent=1]="fluent",A[A.standard=2]="standard",A[A.hd=3]="hd",A[A.standardStereo=4]="standardStereo",A[A.hdMono=5]="hdMono",A))(vr||{}),Te=(A=>(A[A.AUTO_PLAY=0]="AUTO_PLAY",A[A.VIDEO_ONLY=1]="VIDEO_ONLY",A[A.PLAY_MANUALLY=2]="PLAY_MANUALLY",A))(Te||{}),Ha=(A=>(A.LC="LC",A.HEv1="HEv1",A.HEv2="HEv2",A))(Ha||{}),KM=(A=>(A.H264="H264",A.H265="H265",A))(KM||{}),VE=(A=>(A[A.ASR_ONLY=0]="ASR_ONLY",A[A.ASR_AND_TRANSLATION=1]="ASR_AND_TRANSLATION",A))(VE||{}),ar=(A=>(A[A.STARTED=0]="STARTED",A[A.STOPPED=1]="STOPPED",A[A.ERROR=2]="ERROR",A[A.UPDATED=3]="UPDATED",A))(ar||{}),at=(A=>(A[A.FORWARD_STREAM_STATE_SUCCESS=0]="FORWARD_STREAM_STATE_SUCCESS",A[A.FORWARD_STREAM_STATE_FAILURE=1]="FORWARD_STREAM_STATE_FAILURE",A))(at||{}),nr=(A=>(A[A.FORWARD_STREAM_ERROR_OK=0]="FORWARD_STREAM_ERROR_OK",A[A.FORWARD_STREAM_ERROR_INVALID_TOKEN=1202]="FORWARD_STREAM_ERROR_INVALID_TOKEN",A[A.FORWARD_STREAM_ERROR_RESPONSE=1203]="FORWARD_STREAM_ERROR_RESPONSE",A[A.FORWARD_STREAM_ERROR_REMOTE_KICKED=1204]="FORWARD_STREAM_ERROR_REMOTE_KICKED",A[A.FORWARD_STREAM_ERROR_NOT_SUPPORT=1205]="FORWARD_STREAM_ERROR_NOT_SUPPORT",A))(nr||{}),qP=(A=>(A[A.DEFAULT=0]="DEFAULT",A[A.HIGH=1]="HIGH",A))(qP||{}),Be=(A=>(A[A.VIDEO_ONLY_ONE=0]="VIDEO_ONLY_ONE",A[A.VIDEO_ON_DEMAND=1]="VIDEO_ON_DEMAND",A[A.VIDEO_ALWAYS_SIMULCAST=2]="VIDEO_ALWAYS_SIMULCAST",A))(Be||{}),Ee=(A=>(A.VIDEO_STREAM_HIGH="high",A.VIDEO_STREAM_MID="mid",A.VIDEO_STREAM_LOW="low",A))(Ee||{}),GC=(A=>(A[A.NONE=0]="NONE",A[A.AFTER_CAPTURE=1]="AFTER_CAPTURE",A[A.AFTER_PROCESS=2]="AFTER_PROCESS",A))(GC||{}),WM=(A=>(A[A.ROOM_MODE_RTC=0]="ROOM_MODE_RTC",A[A.ROOM_MODE_RTS_ONLY=1]="ROOM_MODE_RTS_ONLY",A))(WM||{}),qsA=new Uint8Array(16);function _sA(){if(!zu&&!(zu=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return zu(qsA)}var $sA=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function AvA(A){return typeof A=="string"&&$sA.test(A)}for(var Vg=[],fu=0;fu<256;++fu)Vg.push((fu+256).toString(16).substr(1));function IvA(A){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,g=(Vg[A[I+0]]+Vg[A[I+1]]+Vg[A[I+2]]+Vg[A[I+3]]+"-"+Vg[A[I+4]]+Vg[A[I+5]]+"-"+Vg[A[I+6]]+Vg[A[I+7]]+"-"+Vg[A[I+8]]+Vg[A[I+9]]+"-"+Vg[A[I+10]]+Vg[A[I+11]]+Vg[A[I+12]]+Vg[A[I+13]]+Vg[A[I+14]]+Vg[A[I+15]]).toLowerCase();if(!AvA(g))throw TypeError("Stringified UUID is invalid");return g}function gvA(A,I,g){var C=(A=A||{}).random||(A.rng||_sA)();return C[6]=15&C[6]|64,C[8]=63&C[8]|128,IvA(C)}const pe=()=>typeof window>"u",UC=()=>gvA(),Cv=A=>typeof A=="number",CvA=A=>Function.prototype.toString.call(A).includes("[native code]");function ci(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({contentHint:A.contentHint,enabled:A.enabled,id:A.id,kind:A.kind,label:A.label,muted:A.muted,readyState:A.readyState})}function JM(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({id:A.id,active:A.active})}function VM(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({track:ci(A.track)})}function zM(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({track:ci(A.track)})}function MM(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({currentDirection:A.currentDirection,direction:A.direction,mid:A.mid,stopped:A.stopped,receiver:zM(A.receiver),sender:VM(A.sender)})}const QvA="@byted/ve-rtc",ju="@byted/ve-rtc",Xu="@byted/ve-rtc-cache-size";class ivA{constructor(){l(this,"storeKey",void 0),l(this,"logLevel",void 0),l(this,"LogfileSize",void 0),l(this,"db",void 0),l(this,"logId",void 0),l(this,"cacheLog",void 0),l(this,"cachedSize",void 0),l(this,"preCacheTime",void 0),l(this,"timer",void 0),l(this,"_getSize",I=>new Blob(I).size/1048576),this.storeKey="",this.logId=1,this.cacheLog="",this.logLevel="none",this.LogfileSize=100,this._createStore()}_createStore(){if(pe()||!window.indexedDB)return;const I=indexedDB.open(QvA);I.onupgradeneeded=()=>{I.result.createObjectStore(ju);try{localStorage.removeItem(Xu)}catch{}},I.onerror=g=>{},I.onsuccess=()=>{this.db=I.result,this._getCachedSize()}}_getCachedSize(){try{const I=localStorage.getItem(Xu);I?this.cachedSize=Number(I):this.values().then(g=>{this.cachedSize=this._getSize(g),this._setCachedSize()})}catch{}}_setCachedSize(){try{localStorage.setItem(Xu,"".concat(this.cachedSize))}catch{}}_getStore(I){if(this.db)return this.db.transaction(ju,I).objectStore(ju)}set(I){return new Promise((g,C)=>{if(this.logLevel==="none")return g();if(I&&this.preCacheTime&&this.preCacheTime-Date.now()<1e3)return this.cacheLog+=` + +`.concat(this.logId,": ").concat(I),this.logId++,this.timer||(this.timer=setTimeout(()=>{this.set("")},1e3-(this.preCacheTime-Date.now()))),g();clearTimeout(this.timer),this.timer=null;const Q=this._getStore("readwrite");if(!Q)return C("get store fail");this.cachedSize&&this.cachedSize>this.LogfileSize&&this.keyEarliest().then(B=>{this.get(B).then(E=>{this.del(B).then(()=>{this.cachedSize=this.cachedSize-this._getSize(["".concat(E)]),this._setCachedSize()})})});const i=Q.get(this.storeKey);i.onsuccess=()=>{try{const B="".concat(i.result||"").concat(this.cacheLog),E=I?"".concat(B?` + +`:"").concat(this.logId,": ").concat(I):"";Q.put("".concat(B).concat(E),this.storeKey),I&&this.logId++,this.cacheLog="",this.cachedSize=(this.cachedSize||0)+this._getSize(["".concat(this.cacheLog).concat(E)]),this._setCachedSize(),this.preCacheTime=Date.now(),g()}catch(B){if(!I)return C(B);this.cacheLog+=` + +`.concat(this.logId,": ").concat(I),this.logId++,C(B)}},i.onerror=B=>{if(!I)return C(B);this.cacheLog+=` + +`.concat(this.logId,": ").concat(I),this.logId++,C(B)}})}get(I){return new Promise((g,C)=>{const Q=this._getStore("readonly");if(!Q)return C();const i=Q.get(I);i.onsuccess=()=>{g(i.result)},i.onerror=B=>{C(B)}})}del(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.storeKey;return new Promise((g,C)=>{const Q=this._getStore("readwrite");if(!Q)return C();const i=Q.delete(I);i.onsuccess=()=>g(i.result),i.onerror=B=>C(B)})}keyEarliest(){return this.keys().then(I=>{let g,C=Date.now();return I.forEach(Q=>{if(!Q||!Q.length)return;const i=Q.split("-")[0];Number(i){const C=this._getStore("readonly");if(!C)return g();if(C.getAllKeys){const i=C.getAllKeys();return i.onsuccess=()=>{I(i.result)},void(i.onerror=()=>{g()})}const Q=[];C.openCursor().onsuccess=function(){this.result&&(Q.push(this.result.key),this.result.continue())},C.transaction.oncomplete=()=>I(Q)})}values(){return new Promise((I,g)=>{const C=this._getStore("readonly");if(!C)return g();if(C.getAll){const i=C.getAll();return i.onsuccess=()=>{I(i.result)},void(i.onerror=()=>{g()})}const Q=[];C.openCursor().onsuccess=function(){this.result&&(Q.push(this.result.value),this.result.continue())},C.transaction.oncomplete=()=>I(Q)})}download(I){I=I||this.storeKey,this.get(I).then(g=>{const C=document.createElement("a");C.download="".concat(I,".txt"),C.href="data:text/paint;utf-8,".concat(g||""),C.click()})}}var ys=new ivA;let BvA=class{constructor(){l(this,"_all",{})}on(A,I){const g=this._all[A];g?g.push(I):this._all[A]=[I]}once(A,I){var g=this;const C=function(){I(...arguments),g.off(A,C)};this.on(A,C)}off(A,I){const g=this._all[A];g==null||g.splice(g.indexOf(I)>>>0,1)}emit(A){for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;Ci(...g))}safeEmit(A){try{for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;C1?arguments[1]:void 0)}});var NvA=KB,ZvA=NvA("Array","filter"),KvA=vC,WvA=ZvA,Hu=Array.prototype,JvA=function(A){var I=A.filter;return A===Hu||KvA(Hu,A)&&I===Hu.filter?WvA:I},VvA=JvA,zvA=VvA,MvA=zvA,fvA=MvA,jvA=fvA,XvA=jvA,HvA=XvA,xvA=nI(HvA),jM={exports:{}},OvA=TA,qvA=sI,_vA=uE,XM=Xs.f,HM=Dg,$vA=!HM||qvA(function(){XM(1)});OvA({target:"Object",stat:!0,forced:$vA,sham:!HM},{getOwnPropertyDescriptor:function(A,I){return XM(_vA(A),I)}});var AaA=oQ,xM=AaA.Object,IaA=jM.exports=function(A,I){return xM.getOwnPropertyDescriptor(A,I)};xM.getOwnPropertyDescriptor.sham&&(IaA.sham=!0);var gaA=jM.exports,CaA=gaA,QaA=CaA,iaA=QaA,BaA=iaA,EaA=BaA,eaA=EaA,taA=eaA,OM=nI(taA),oaA=Dg,raA=qs,saA=TypeError,vaA=Object.getOwnPropertyDescriptor,aaA=oaA&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(A){return A instanceof TypeError}}(),naA=aaA?function(A,I){if(raA(A)&&!vaA(A,"length").writable)throw new saA("Cannot set read only .length");return A.length=I}:function(A,I){return A.length=I},caA=TA,laA=mi,PaA=bE,daA=naA,haA=ML,uaA=sI,DaA=uaA(function(){return[].push.call({length:4294967296},1)!==4294967297}),baA=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(A){return A instanceof TypeError}},yaA=DaA||!baA();caA({target:"Array",proto:!0,forced:yaA},{push:function(A){var I=laA(this),g=PaA(I),C=arguments.length;haA(g+C);for(var Q=0;Q1?arguments[1]:void 0)},VaA=TA;VaA({target:"Array",proto:!0,forced:[].forEach!==kU},{forEach:kU});var zaA=KB,MaA=zaA("Array","forEach"),faA=MaA,jaA=faA,XaA=_s,HaA=Zg,xaA=vC,OaA=jaA,Ou=Array.prototype,qaA={DOMTokenList:!0,NodeList:!0},_aA=function(A){var I=A.forEach;return A===Ou||xaA(Ou,A)&&I===Ou.forEach||HaA(qaA,XaA(A))?OaA:I},$aA=_aA,AnA=$aA,InA=AnA,gnA=InA,CnA=gnA,YU=nI(CnA),QnA=$g,inA=iI,BnA=zd,EnA=nc,enA=ZQ,tnA=inA([].concat),_M=QnA("Reflect","ownKeys")||function(A){var I=BnA.f(enA(A)),g=EnA.f;return g?tnA(I,g(A)):I},onA=TA,rnA=Dg,snA=_M,vnA=uE,anA=Xs,nnA=Zd;onA({target:"Object",stat:!0,sham:!rnA},{getOwnPropertyDescriptors:function(A){for(var I,g,C=vnA(A),Q=anA.f,i=snA(C),B={},E=0;i.length>E;)(g=Q(C,I=i[E++]))!==void 0&&nnA(B,I,g);return B}});var cnA=oQ,lnA=cnA.Object.getOwnPropertyDescriptors,PnA=lnA,dnA=PnA,hnA=dnA,unA=hnA,DnA=unA,bnA=DnA,ynA=bnA,NU=nI(ynA),$M={exports:{}},mnA=TA,wnA=Dg,ZU=Kd.f;mnA({target:"Object",stat:!0,forced:Object.defineProperties!==ZU,sham:!wnA},{defineProperties:ZU});var GnA=oQ,Af=GnA.Object,RnA=$M.exports=function(A,I){return Af.defineProperties(A,I)};Af.defineProperties.sham&&(RnA.sham=!0);var LnA=$M.exports,SnA=LnA,TnA=SnA,pnA=TnA,FnA=pnA,UnA=FnA,knA=UnA,YnA=knA,NnA=nI(YnA);function KU(A,I){var g=bvA(A);if(v0){var C=v0(A);I&&(C=xvA(C).call(C,function(Q){return OM(A,Q).enumerable})),NaA(g).apply(g,C)}return g}function p(A){for(var I=1;I0&&ZnA(e)?(t=KnA(e),o=If(A,I,e,t,o,i-1)-1):(WnA(o+1),A[o]=e),o++),r++;return o},VnA=If,znA=TA,MnA=VnA,fnA=mi,jnA=bE,XnA=Nd,HnA=HL;znA({target:"Array",proto:!0},{flat:function(){var A=arguments.length?arguments[0]:void 0,I=fnA(this),g=jnA(I),C=HnA(I,0);return C.length=MnA(C,I,I,g,0,A===void 0?1:XnA(A)),C}});var xnA=KB,OnA=xnA("Array","flat"),qnA=vC,_nA=OnA,qu=Array.prototype,$nA=function(A){var I=A.flat;return A===qu||qnA(qu,A)&&I===qu.flat?_nA:I},AcA=$nA,IcA=AcA,gcA=IcA,CcA=gcA,QcA=CcA,icA=QcA,BcA=icA,EcA=BcA,gf=nI(EcA),mE={};(function(A){var I=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";function g(i,B){return Object.prototype.hasOwnProperty.call(i,B)}A.assign=function(i){for(var B=Array.prototype.slice.call(arguments,1);B.length;){var E=B.shift();if(E){if(typeof E!="object")throw new TypeError(E+"must be non-object");for(var e in E)g(E,e)&&(i[e]=E[e])}}return i},A.shrinkBuf=function(i,B){return i.length===B?i:i.subarray?i.subarray(0,B):(i.length=B,i)};var C={arraySet:function(i,B,E,e,t){if(B.subarray&&i.subarray)i.set(B.subarray(E,E+e),t);else for(var o=0;o=0;)A[I]=0}var rcA=0,Cf=1,scA=2,vcA=3,acA=258,BS=29,dc=256,Kn=dc+1+BS,Bs=30,ES=19,Qf=2*Kn+1,Gt=15,_u=16,ncA=7,eS=256,Bf=16,Ef=17,ef=18,_w=[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],_P=[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],ccA=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],tf=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],lcA=512,CE=new Array(2*(Kn+2));Qv(CE);var xa=new Array(2*Bs);Qv(xa);var Wn=new Array(lcA);Qv(Wn);var Jn=new Array(acA-vcA+1);Qv(Jn);var tS=new Array(BS);Qv(tS);var of,rf,sf,a0=new Array(Bs);function $u(A,I,g,C,Q){this.static_tree=A,this.extra_bits=I,this.extra_base=g,this.elems=C,this.max_length=Q,this.has_stree=A&&A.length}function AD(A,I){this.dyn_tree=A,this.max_code=0,this.stat_desc=I}function vf(A){return A<256?Wn[A]:Wn[256+(A>>>7)]}function Vn(A,I){A.pending_buf[A.pending++]=255&I,A.pending_buf[A.pending++]=I>>>8&255}function QQ(A,I,g){A.bi_valid>_u-g?(A.bi_buf|=I<>_u-A.bi_valid,A.bi_valid+=g-_u):(A.bi_buf|=I<>>=1,g<<=1;while(--I>0);return g>>>1}function PcA(A){A.bi_valid===16?(Vn(A,A.bi_buf),A.bi_buf=0,A.bi_valid=0):A.bi_valid>=8&&(A.pending_buf[A.pending++]=255&A.bi_buf,A.bi_buf>>=8,A.bi_valid-=8)}function dcA(A,I){var g,C,Q,i,B,E,e=I.dyn_tree,t=I.max_code,o=I.stat_desc.static_tree,r=I.stat_desc.has_stree,s=I.stat_desc.extra_bits,v=I.stat_desc.extra_base,n=I.stat_desc.max_length,a=0;for(i=0;i<=Gt;i++)A.bl_count[i]=0;for(e[2*A.heap[A.heap_max]+1]=0,g=A.heap_max+1;gn&&(i=n,a++),e[2*C+1]=i,C>t||(A.bl_count[i]++,B=0,C>=v&&(B=s[C-v]),E=e[2*C],A.opt_len+=E*(i+B),r&&(A.static_len+=E*(o[2*C+1]+B)));if(a!==0){do{for(i=n-1;A.bl_count[i]===0;)i--;A.bl_count[i]--,A.bl_count[i+1]+=2,A.bl_count[n]--,a-=2}while(a>0);for(i=n;i!==0;i--)for(C=A.bl_count[i];C!==0;)(Q=A.heap[--g])>t||(e[2*Q+1]!==i&&(A.opt_len+=(i-e[2*Q+1])*e[2*Q],e[2*Q+1]=i),C--)}}function nf(A,I,g){var C,Q,i=new Array(Gt+1),B=0;for(C=1;C<=Gt;C++)i[C]=B=B+g[C-1]<<1;for(Q=0;Q<=I;Q++){var E=A[2*Q+1];E!==0&&(A[2*Q]=af(i[E]++,E))}}function hcA(){var A,I,g,C,Q,i=new Array(Gt+1);for(g=0,C=0;C>=7;C8?Vn(A,A.bi_buf):A.bi_valid>0&&(A.pending_buf[A.pending++]=A.bi_buf),A.bi_buf=0,A.bi_valid=0}function ucA(A,I,g,C){lf(A),Vn(A,g),Vn(A,~g),ecA.arraySet(A.pending_buf,A.window,I,g,A.pending),A.pending+=g}function VU(A,I,g,C){var Q=2*I,i=2*g;return A[Q]>1;g>=1;g--)ID(A,i,g);Q=e;do g=A.heap[1],A.heap[1]=A.heap[A.heap_len--],ID(A,i,1),C=A.heap[1],A.heap[--A.heap_max]=g,A.heap[--A.heap_max]=C,i[2*Q]=i[2*g]+i[2*C],A.depth[Q]=(A.depth[g]>=A.depth[C]?A.depth[g]:A.depth[C])+1,i[2*g+1]=i[2*C+1]=Q,A.heap[1]=Q++,ID(A,i,1);while(A.heap_len>=2);A.heap[--A.heap_max]=A.heap[1],dcA(A,I),nf(i,t,A.bl_count)}function MU(A,I,g){var C,Q,i=-1,B=I[1],E=0,e=7,t=4;for(B===0&&(e=138,t=3),I[2*(g+1)+1]=65535,C=0;C<=g;C++)Q=B,B=I[2*(C+1)+1],++E=3&&A.bl_tree[2*tf[I]+1]===0;I--);return A.opt_len+=3*(I+1)+5+5+4,I}function bcA(A,I,g,C){var Q;for(QQ(A,I-257,5),QQ(A,g-1,5),QQ(A,C-4,4),Q=0;Q>>=1)if(1&g&&A.dyn_ltree[2*I]!==0)return WU;if(A.dyn_ltree[18]!==0||A.dyn_ltree[20]!==0||A.dyn_ltree[26]!==0)return JU;for(I=32;I0?(A.strm.data_type===ocA&&(A.strm.data_type=ycA(A)),$w(A,A.l_desc),$w(A,A.d_desc),B=DcA(A),Q=A.opt_len+3+7>>>3,(i=A.static_len+3+7>>>3)<=Q&&(Q=i)):Q=i=g+5,g+4<=Q&&I!==-1?Pf(A,I,g,C):A.strategy===tcA||i===Q?(QQ(A,(Cf<<1)+(C?1:0),3),zU(A,CE,xa)):(QQ(A,(scA<<1)+(C?1:0),3),bcA(A,A.l_desc.max_code+1,A.d_desc.max_code+1,B+1),zU(A,A.dyn_ltree,A.dyn_dtree)),cf(A),C&&lf(A)}function RcA(A,I,g){return A.pending_buf[A.d_buf+2*A.last_lit]=I>>>8&255,A.pending_buf[A.d_buf+2*A.last_lit+1]=255&I,A.pending_buf[A.l_buf+A.last_lit]=255&g,A.last_lit++,I===0?A.dyn_ltree[2*g]++:(A.matches++,I--,A.dyn_ltree[2*(Jn[g]+dc+1)]++,A.dyn_dtree[2*vf(I)]++),A.last_lit===A.lit_bufsize-1}function LcA(A,I,g,C){for(var Q=65535&A,i=A>>>16&65535,B=0;g!==0;){g-=B=g>2e3?2e3:g;do i=i+(Q=Q+I[C++]|0)|0;while(--B);Q%=65521,i%=65521}return Q|i<<16}cr._tr_init=mcA,cr._tr_stored_block=Pf,cr._tr_flush_block=GcA,cr._tr_tally=RcA,cr._tr_align=wcA;var df=LcA;function ScA(){for(var A,I=[],g=0;g<256;g++){A=g;for(var C=0;C<8;C++)A=1&A?3988292384^A>>>1:A>>>1;I[g]=A}return I}var TcA=ScA();function pcA(A,I,g,C){var Q=TcA,i=C+g;A^=-1;for(var B=C;B>>8^Q[255&(A^I[B])];return~A}var Wr,hf=pcA,oS={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},SC=mE,di=cr,uf=df,zE=hf,FcA=oS,ao=0,UcA=1,kcA=3,me=4,XU=5,TB=0,HU=1,hi=-2,YcA=-3,gD=-5,NcA=-1,ZcA=1,Ll=2,KcA=3,WcA=4,JcA=0,VcA=2,Xd=8,zcA=9,McA=15,fcA=8,jcA=29,XcA=256,AG=XcA+1+jcA,HcA=30,xcA=19,OcA=2*AG+1,qcA=15,MA=3,ee=258,IB=ee+MA+1,_cA=32,Hd=42,IG=69,$P=73,A9=91,I9=103,Rt=113,Da=666,Yg=1,hc=2,_t=3,iv=4,$cA=3;function te(A,I){return A.msg=FcA[I],I}function xU(A){return(A<<1)-(A>4?9:0)}function $E(A){for(var I=A.length;--I>=0;)A[I]=0}function ME(A){var I=A.state,g=I.pending;g>A.avail_out&&(g=A.avail_out),g!==0&&(SC.arraySet(A.output,I.pending_buf,I.pending_out,g,A.next_out),A.next_out+=g,I.pending_out+=g,A.total_out+=g,A.avail_out-=g,I.pending-=g,I.pending===0&&(I.pending_out=0))}function Hg(A,I){di._tr_flush_block(A,A.block_start>=0?A.block_start:-1,A.strstart-A.block_start,I),A.block_start=A.strstart,ME(A.strm)}function AI(A,I){A.pending_buf[A.pending++]=I}function Mv(A,I){A.pending_buf[A.pending++]=I>>>8&255,A.pending_buf[A.pending++]=255&I}function AlA(A,I,g,C){var Q=A.avail_in;return Q>C&&(Q=C),Q===0?0:(A.avail_in-=Q,SC.arraySet(I,A.input,A.next_in,Q,g),A.state.wrap===1?A.adler=uf(A.adler,I,Q,g):A.state.wrap===2&&(A.adler=zE(A.adler,I,Q,g)),A.next_in+=Q,A.total_in+=Q,Q)}function Df(A,I){var g,C,Q=A.max_chain_length,i=A.strstart,B=A.prev_length,E=A.nice_match,e=A.strstart>A.w_size-IB?A.strstart-(A.w_size-IB):0,t=A.window,o=A.w_mask,r=A.prev,s=A.strstart+ee,v=t[i+B-1],n=t[i+B];A.prev_length>=A.good_match&&(Q>>=2),E>A.lookahead&&(E=A.lookahead);do if(t[(g=I)+B]===n&&t[g+B-1]===v&&t[g]===t[i]&&t[++g]===t[i+1]){i+=2,g++;do;while(t[++i]===t[++g]&&t[++i]===t[++g]&&t[++i]===t[++g]&&t[++i]===t[++g]&&t[++i]===t[++g]&&t[++i]===t[++g]&&t[++i]===t[++g]&&t[++i]===t[++g]&&iB){if(A.match_start=I,B=C,C>=E)break;v=t[i+B-1],n=t[i+B]}}while((I=r[I&o])>e&&--Q!=0);return B<=A.lookahead?B:A.lookahead}function $t(A){var I,g,C,Q,i,B=A.w_size;do{if(Q=A.window_size-A.lookahead-A.strstart,A.strstart>=B+(B-IB)){SC.arraySet(A.window,A.window,B,B,0),A.match_start-=B,A.strstart-=B,A.block_start-=B,I=g=A.hash_size;do C=A.head[--I],A.head[I]=C>=B?C-B:0;while(--g);I=g=B;do C=A.prev[--I],A.prev[I]=C>=B?C-B:0;while(--g);Q+=B}if(A.strm.avail_in===0)break;if(g=AlA(A.strm,A.window,A.strstart+A.lookahead,Q),A.lookahead+=g,A.lookahead+A.insert>=MA)for(i=A.strstart-A.insert,A.ins_h=A.window[i],A.ins_h=(A.ins_h<A.pending_buf_size-5&&(g=A.pending_buf_size-5);;){if(A.lookahead<=1){if($t(A),A.lookahead===0&&I===ao)return Yg;if(A.lookahead===0)break}A.strstart+=A.lookahead,A.lookahead=0;var C=A.block_start+g;if((A.strstart===0||A.strstart>=C)&&(A.lookahead=A.strstart-C,A.strstart=C,Hg(A,!1),A.strm.avail_out===0)||A.strstart-A.block_start>=A.w_size-IB&&(Hg(A,!1),A.strm.avail_out===0))return Yg}return A.insert=0,I===me?(Hg(A,!0),A.strm.avail_out===0?_t:iv):(A.strstart>A.block_start&&(Hg(A,!1),A.strm.avail_out),Yg)}function CD(A,I){for(var g,C;;){if(A.lookahead=MA&&(A.ins_h=(A.ins_h<=MA)if(C=di._tr_tally(A,A.strstart-A.match_start,A.match_length-MA),A.lookahead-=A.match_length,A.match_length<=A.max_lazy_match&&A.lookahead>=MA){A.match_length--;do A.strstart++,A.ins_h=(A.ins_h<=MA&&(A.ins_h=(A.ins_h<4096)&&(A.match_length=MA-1)),A.prev_length>=MA&&A.match_length<=A.prev_length){Q=A.strstart+A.lookahead-MA,C=di._tr_tally(A,A.strstart-1-A.prev_match,A.prev_length-MA),A.lookahead-=A.prev_length-1,A.prev_length-=2;do++A.strstart<=Q&&(A.ins_h=(A.ins_h<=MA&&A.strstart>0&&(C=B[Q=A.strstart-1])===B[++Q]&&C===B[++Q]&&C===B[++Q]){i=A.strstart+ee;do;while(C===B[++Q]&&C===B[++Q]&&C===B[++Q]&&C===B[++Q]&&C===B[++Q]&&C===B[++Q]&&C===B[++Q]&&C===B[++Q]&&QA.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=MA?(g=di._tr_tally(A,1,A.match_length-MA),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(g=di._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),g&&(Hg(A,!1),A.strm.avail_out===0))return Yg}return A.insert=0,I===me?(Hg(A,!0),A.strm.avail_out===0?_t:iv):A.last_lit&&(Hg(A,!1),A.strm.avail_out===0)?Yg:hc}function ClA(A,I){for(var g;;){if(A.lookahead===0&&($t(A),A.lookahead===0)){if(I===ao)return Yg;break}if(A.match_length=0,g=di._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,g&&(Hg(A,!1),A.strm.avail_out===0))return Yg}return A.insert=0,I===me?(Hg(A,!0),A.strm.avail_out===0?_t:iv):A.last_lit&&(Hg(A,!1),A.strm.avail_out===0)?Yg:hc}function cB(A,I,g,C,Q){this.good_length=A,this.max_lazy=I,this.nice_length=g,this.max_chain=C,this.func=Q}function QlA(A){A.window_size=2*A.w_size,$E(A.head),A.max_lazy_match=Wr[A.level].max_lazy,A.good_match=Wr[A.level].good_length,A.nice_match=Wr[A.level].nice_length,A.max_chain_length=Wr[A.level].max_chain,A.strstart=0,A.block_start=0,A.lookahead=0,A.insert=0,A.match_length=A.prev_length=MA-1,A.match_available=0,A.ins_h=0}function ilA(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Xd,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new SC.Buf16(2*OcA),this.dyn_dtree=new SC.Buf16(2*(2*HcA+1)),this.bl_tree=new SC.Buf16(2*(2*xcA+1)),$E(this.dyn_ltree),$E(this.dyn_dtree),$E(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new SC.Buf16(qcA+1),this.heap=new SC.Buf16(2*AG+1),$E(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new SC.Buf16(2*AG+1),$E(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function bf(A){var I;return A&&A.state?(A.total_in=A.total_out=0,A.data_type=VcA,(I=A.state).pending=0,I.pending_out=0,I.wrap<0&&(I.wrap=-I.wrap),I.status=I.wrap?Hd:Rt,A.adler=I.wrap===2?0:1,I.last_flush=ao,di._tr_init(I),TB):te(A,hi)}function yf(A){var I=bf(A);return I===TB&&QlA(A.state),I}function BlA(A,I){return A&&A.state?A.state.wrap!==2?hi:(A.state.gzhead=I,TB):hi}function mf(A,I,g,C,Q,i){if(!A)return hi;var B=1;if(I===NcA&&(I=6),C<0?(B=0,C=-C):C>15&&(B=2,C-=16),Q<1||Q>zcA||g!==Xd||C<8||C>15||I<0||I>9||i<0||i>WcA)return te(A,hi);C===8&&(C=9);var E=new ilA;return A.state=E,E.strm=A,E.wrap=B,E.gzhead=null,E.w_bits=C,E.w_size=1<XU||I<0)return A?te(A,hi):hi;if(C=A.state,!A.output||!A.input&&A.avail_in!==0||C.status===Da&&I!==me)return te(A,A.avail_out===0?gD:hi);if(C.strm=A,g=C.last_flush,C.last_flush=I,C.status===Hd)if(C.wrap===2)A.adler=0,AI(C,31),AI(C,139),AI(C,8),C.gzhead?(AI(C,(C.gzhead.text?1:0)+(C.gzhead.hcrc?2:0)+(C.gzhead.extra?4:0)+(C.gzhead.name?8:0)+(C.gzhead.comment?16:0)),AI(C,255&C.gzhead.time),AI(C,C.gzhead.time>>8&255),AI(C,C.gzhead.time>>16&255),AI(C,C.gzhead.time>>24&255),AI(C,C.level===9?2:C.strategy>=Ll||C.level<2?4:0),AI(C,255&C.gzhead.os),C.gzhead.extra&&C.gzhead.extra.length&&(AI(C,255&C.gzhead.extra.length),AI(C,C.gzhead.extra.length>>8&255)),C.gzhead.hcrc&&(A.adler=zE(A.adler,C.pending_buf,C.pending,0)),C.gzindex=0,C.status=IG):(AI(C,0),AI(C,0),AI(C,0),AI(C,0),AI(C,0),AI(C,C.level===9?2:C.strategy>=Ll||C.level<2?4:0),AI(C,$cA),C.status=Rt);else{var B=Xd+(C.w_bits-8<<4)<<8;B|=(C.strategy>=Ll||C.level<2?0:C.level<6?1:C.level===6?2:3)<<6,C.strstart!==0&&(B|=_cA),B+=31-B%31,C.status=Rt,Mv(C,B),C.strstart!==0&&(Mv(C,A.adler>>>16),Mv(C,65535&A.adler)),A.adler=1}if(C.status===IG)if(C.gzhead.extra){for(Q=C.pending;C.gzindex<(65535&C.gzhead.extra.length)&&(C.pending!==C.pending_buf_size||(C.gzhead.hcrc&&C.pending>Q&&(A.adler=zE(A.adler,C.pending_buf,C.pending-Q,Q)),ME(A),Q=C.pending,C.pending!==C.pending_buf_size));)AI(C,255&C.gzhead.extra[C.gzindex]),C.gzindex++;C.gzhead.hcrc&&C.pending>Q&&(A.adler=zE(A.adler,C.pending_buf,C.pending-Q,Q)),C.gzindex===C.gzhead.extra.length&&(C.gzindex=0,C.status=$P)}else C.status=$P;if(C.status===$P)if(C.gzhead.name){Q=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>Q&&(A.adler=zE(A.adler,C.pending_buf,C.pending-Q,Q)),ME(A),Q=C.pending,C.pending===C.pending_buf_size)){i=1;break}i=C.gzindexQ&&(A.adler=zE(A.adler,C.pending_buf,C.pending-Q,Q)),i===0&&(C.gzindex=0,C.status=A9)}else C.status=A9;if(C.status===A9)if(C.gzhead.comment){Q=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>Q&&(A.adler=zE(A.adler,C.pending_buf,C.pending-Q,Q)),ME(A),Q=C.pending,C.pending===C.pending_buf_size)){i=1;break}i=C.gzindexQ&&(A.adler=zE(A.adler,C.pending_buf,C.pending-Q,Q)),i===0&&(C.status=I9)}else C.status=I9;if(C.status===I9&&(C.gzhead.hcrc?(C.pending+2>C.pending_buf_size&&ME(A),C.pending+2<=C.pending_buf_size&&(AI(C,255&A.adler),AI(C,A.adler>>8&255),A.adler=0,C.status=Rt)):C.status=Rt),C.pending!==0){if(ME(A),A.avail_out===0)return C.last_flush=-1,TB}else if(A.avail_in===0&&xU(I)<=xU(g)&&I!==me)return te(A,gD);if(C.status===Da&&A.avail_in!==0)return te(A,gD);if(A.avail_in!==0||C.lookahead!==0||I!==ao&&C.status!==Da){var E=C.strategy===Ll?ClA(C,I):C.strategy===KcA?glA(C,I):Wr[C.level].func(C,I);if(E!==_t&&E!==iv||(C.status=Da),E===Yg||E===_t)return A.avail_out===0&&(C.last_flush=-1),TB;if(E===hc&&(I===UcA?di._tr_align(C):I!==XU&&(di._tr_stored_block(C,0,0,!1),I===kcA&&($E(C.head),C.lookahead===0&&(C.strstart=0,C.block_start=0,C.insert=0))),ME(A),A.avail_out===0))return C.last_flush=-1,TB}return I!==me?TB:C.wrap<=0?HU:(C.wrap===2?(AI(C,255&A.adler),AI(C,A.adler>>8&255),AI(C,A.adler>>16&255),AI(C,A.adler>>24&255),AI(C,255&A.total_in),AI(C,A.total_in>>8&255),AI(C,A.total_in>>16&255),AI(C,A.total_in>>24&255)):(Mv(C,A.adler>>>16),Mv(C,65535&A.adler)),ME(A),C.wrap>0&&(C.wrap=-C.wrap),C.pending!==0?TB:HU)}function tlA(A){var I;return A&&A.state?(I=A.state.status)!==Hd&&I!==IG&&I!==$P&&I!==A9&&I!==I9&&I!==Rt&&I!==Da?te(A,hi):(A.state=null,I===Rt?te(A,YcA):TB):hi}function olA(A,I){var g,C,Q,i,B,E,e,t,o=I.length;if(!A||!A.state||(i=(g=A.state).wrap)===2||i===1&&g.status!==Hd||g.lookahead)return hi;for(i===1&&(A.adler=uf(A.adler,I,o,0)),g.wrap=0,o>=g.w_size&&(i===0&&($E(g.head),g.strstart=0,g.block_start=0,g.insert=0),t=new SC.Buf8(g.w_size),SC.arraySet(t,I,o-g.w_size,g.w_size,0),I=t,o=g.w_size),B=A.avail_in,E=A.next_in,e=A.input,A.avail_in=o,A.next_in=0,A.input=I,$t(g);g.lookahead>=MA;){C=g.strstart,Q=g.lookahead-(MA-1);do g.ins_h=(g.ins_h<=252?6:FE>=248?5:FE>=240?4:FE>=224?3:FE>=192?2:1;function OU(A,I){if(I<65534&&(A.subarray&&Gf||!A.subarray&&wf))return String.fromCharCode.apply(null,n0.shrinkBuf(A,I));for(var g="",C=0;C>>6,I[i++]=128|63&g):g<65536?(I[i++]=224|g>>>12,I[i++]=128|g>>>6&63,I[i++]=128|63&g):(I[i++]=240|g>>>18,I[i++]=128|g>>>12&63,I[i++]=128|g>>>6&63,I[i++]=128|63&g);return I},dt.buf2binstring=function(A){return OU(A,A.length)},dt.binstring2buf=function(A){for(var I=new n0.Buf8(A.length),g=0,C=I.length;g4)E[C++]=65533,g+=i-1;else{for(Q&=i===2?31:i===3?15:7;i>1&&g1?E[C++]=65533:Q<65536?E[C++]=Q:(Q-=65536,E[C++]=55296|Q>>10&1023,E[C++]=56320|1023&Q)}return OU(E,C)},dt.utf8border=function(A,I){var g;for((I=I||A.length)>A.length&&(I=A.length),g=I-1;g>=0&&(192&A[g])==128;)g--;return g<0||g===0?I:g+ba[A[g]]>I?g:I};var Rf=rlA,Oa=uB,ya=mE,gG=dt,CG=oS,slA=Rf,Lf=Object.prototype.toString,vlA=0,QD=4,Jr=0,qU=1,_U=2,alA=-1,nlA=0,clA=8;function Lt(A){if(!(this instanceof Lt))return new Lt(A);this.options=ya.assign({level:alA,method:clA,chunkSize:16384,windowBits:15,memLevel:8,strategy:nlA,to:""},A||{});var I=this.options;I.raw&&I.windowBits>0?I.windowBits=-I.windowBits:I.gzip&&I.windowBits>0&&I.windowBits<16&&(I.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new slA,this.strm.avail_out=0;var g=Oa.deflateInit2(this.strm,I.level,I.method,I.windowBits,I.memLevel,I.strategy);if(g!==Jr)throw new Error(CG[g]);if(I.header&&Oa.deflateSetHeader(this.strm,I.header),I.dictionary){var C;if(C=typeof I.dictionary=="string"?gG.string2buf(I.dictionary):Lf.call(I.dictionary)==="[object ArrayBuffer]"?new Uint8Array(I.dictionary):I.dictionary,(g=Oa.deflateSetDictionary(this.strm,C))!==Jr)throw new Error(CG[g]);this._dict_set=!0}}function rS(A,I){var g=new Lt(I);if(g.push(A,!0),g.err)throw g.msg||CG[g.err];return g.result}function llA(A,I){return(I=I||{}).raw=!0,rS(A,I)}function PlA(A,I){return(I=I||{}).gzip=!0,rS(A,I)}Lt.prototype.push=function(A,I){var g,C,Q=this.strm,i=this.options.chunkSize;if(this.ended)return!1;C=I===~~I?I:I===!0?QD:vlA,typeof A=="string"?Q.input=gG.string2buf(A):Lf.call(A)==="[object ArrayBuffer]"?Q.input=new Uint8Array(A):Q.input=A,Q.next_in=0,Q.avail_in=Q.input.length;do{if(Q.avail_out===0&&(Q.output=new ya.Buf8(i),Q.next_out=0,Q.avail_out=i),(g=Oa.deflate(Q,C))!==qU&&g!==Jr)return this.onEnd(g),this.ended=!0,!1;Q.avail_out!==0&&(Q.avail_in!==0||C!==QD&&C!==_U)||(this.options.to==="string"?this.onData(gG.buf2binstring(ya.shrinkBuf(Q.output,Q.next_out))):this.onData(ya.shrinkBuf(Q.output,Q.next_out)))}while((Q.avail_in>0||Q.avail_out===0)&&g!==qU);return C===QD?(g=Oa.deflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===Jr):C!==_U||(this.onEnd(Jr),Q.avail_out=0,!0)},Lt.prototype.onData=function(A){this.chunks.push(A)},Lt.prototype.onEnd=function(A){A===Jr&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=ya.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},ua.Deflate=Lt,ua.deflate=rS,ua.deflateRaw=llA,ua.gzip=PlA;var ma={},dlA=YM,hlA=dlA,ulA=vC,DlA=hlA,$U=RegExp.prototype,blA=function(A){return A===$U||ulA($U,A)?DlA(A):A.flags},ylA=blA,mlA=ylA,wlA=mlA,GlA=wlA,RlA=GlA,LlA=RlA,SlA=LlA,TlA=SlA,mg=nI(TlA),Yi={},Sl=30,plA=12,FlA=function(A,I){var g,C,Q,i,B,E,e,t,o,r,s,v,n,a,c,P,d,h,u,D,y,b,G,L,m;g=A.state,C=A.next_in,L=A.input,Q=C+(A.avail_in-5),i=A.next_out,m=A.output,B=i-(I-A.avail_out),E=i+(A.avail_out-257),e=g.dmax,t=g.wsize,o=g.whave,r=g.wnext,s=g.window,v=g.hold,n=g.bits,a=g.lencode,c=g.distcode,P=(1<>>=u=h>>>24,n-=u,(u=h>>>16&255)===0)m[i++]=65535&h;else{if(!(16&u)){if(64&u){if(32&u){g.mode=plA;break A}A.msg="invalid literal/length code",g.mode=Sl;break A}h=a[(65535&h)+(v&(1<>>=u,n-=u),n<15&&(v+=L[C++]<>>=u=h>>>24,n-=u,16&(u=h>>>16&255)){if(y=65535&h,n<(u&=15)&&(v+=L[C++]<e){A.msg="invalid distance too far back",g.mode=Sl;break A}if(v>>>=u,n-=u,y>(u=i-B)){if((u=y-u)>o&&g.sane){A.msg="invalid distance too far back",g.mode=Sl;break A}if(b=0,G=s,r===0){if(b+=t-u,u2;)m[i++]=G[b++],m[i++]=G[b++],m[i++]=G[b++],D-=3;D&&(m[i++]=G[b++],D>1&&(m[i++]=G[b++]))}else{b=i-y;do m[i++]=m[b++],m[i++]=m[b++],m[i++]=m[b++],D-=3;while(D>2);D&&(m[i++]=m[b++],D>1&&(m[i++]=m[b++]))}break}if(64&u){A.msg="invalid distance code",g.mode=Sl;break A}h=c[(65535&h)+(v&(1<>3,v&=(1<<(n-=D<<3))-1,A.next_in=C,A.next_out=i,A.avail_in=C=1&&X[D]===0;D--);if(y>D&&(y=D),D===0)return Q[i++]=20971520,Q[i++]=20971520,E.bits=1,0;for(u=1;u0&&(A===Ck||D!==1))return-1;for(Y[1]=0,d=1;dIk||A===Qk&&m>gk)return 1;for(;;){n=d-G,B[h]v?(a=J[V+B[h]],c=U[AA+B[h]]):(a=96,c=0),e=1<>G)+(t-=e)]=n<<24|a<<16|c;while(t!==0);for(e=1<>=1;if(e!==0?(F&=e-1,F+=e):F=0,h++,--X[d]==0){if(d===D)break;d=I[g+B[h]]}if(d>y&&(F&r)!==o){for(G===0&&(G=y),s+=u,L=1<<(b=d-G);b+GIk||A===Qk&&m>gk)return 1;Q[o=F&r]=y<<24|b<<16|s-i}}return F!==0&&(Q[s+F]=d-G<<24|64<<16),E.bits=y,0},wQ=mE,QG=df,lB=hf,KlA=FlA,qa=ZlA,WlA=0,Sf=1,Tf=2,ik=4,JlA=5,Tl=6,Ao=0,VlA=1,zlA=2,QB=-2,pf=-3,Ff=-4,MlA=-5,Bk=8,Uf=1,Ek=2,ek=3,tk=4,ok=5,rk=6,sk=7,vk=8,ak=9,nk=10,c0=11,HB=12,BD=13,ck=14,ED=15,lk=16,Pk=17,dk=18,hk=19,pl=20,Fl=21,uk=22,Dk=23,bk=24,yk=25,mk=26,eD=27,wk=28,Gk=29,pI=30,kf=31,flA=852,jlA=592,XlA=15,HlA=XlA;function Rk(A){return(A>>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24)}function xlA(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new wQ.Buf16(320),this.work=new wQ.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Yf(A){var I;return A&&A.state?(I=A.state,A.total_in=A.total_out=I.total=0,A.msg="",I.wrap&&(A.adler=1&I.wrap),I.mode=Uf,I.last=0,I.havedict=0,I.dmax=32768,I.head=null,I.hold=0,I.bits=0,I.lencode=I.lendyn=new wQ.Buf32(flA),I.distcode=I.distdyn=new wQ.Buf32(jlA),I.sane=1,I.back=-1,Ao):QB}function Nf(A){var I;return A&&A.state?((I=A.state).wsize=0,I.whave=0,I.wnext=0,Yf(A)):QB}function Zf(A,I){var g,C;return A&&A.state?(C=A.state,I<0?(g=0,I=-I):(g=1+(I>>4),I<48&&(I&=15)),I&&(I<8||I>15)?QB:(C.window!==null&&C.wbits!==I&&(C.window=null),C.wrap=g,C.wbits=I,Nf(A))):QB}function Kf(A,I){var g,C;return A?(C=new xlA,A.state=C,C.window=null,(g=Zf(A,I))!==Ao&&(A.state=null),g):QB}function OlA(A){return Kf(A,HlA)}var tD,oD,Lk=!0;function qlA(A){if(Lk){var I;for(tD=new wQ.Buf32(512),oD=new wQ.Buf32(32),I=0;I<144;)A.lens[I++]=8;for(;I<256;)A.lens[I++]=9;for(;I<280;)A.lens[I++]=7;for(;I<288;)A.lens[I++]=8;for(qa(Sf,A.lens,0,288,tD,0,A.work,{bits:9}),I=0;I<32;)A.lens[I++]=5;qa(Tf,A.lens,0,32,oD,0,A.work,{bits:5}),Lk=!1}A.lencode=tD,A.lenbits=9,A.distcode=oD,A.distbits=5}function Wf(A,I,g,C){var Q,i=A.state;return i.window===null&&(i.wsize=1<=i.wsize?(wQ.arraySet(i.window,I,g-i.wsize,i.wsize,0),i.wnext=0,i.whave=i.wsize):((Q=i.wsize-i.wnext)>C&&(Q=C),wQ.arraySet(i.window,I,g-C,Q,i.wnext),(C-=Q)?(wQ.arraySet(i.window,I,g-C,C,0),i.wnext=C,i.whave=i.wsize):(i.wnext+=Q,i.wnext===i.wsize&&(i.wnext=0),i.whave>>8&255,g.check=lB(g.check,F,2,0),t=0,o=0,g.mode=Ek;break}if(g.flags=0,g.head&&(g.head.done=!1),!(1&g.wrap)||(((255&t)<<8)+(t>>8))%31){A.msg="incorrect header check",g.mode=pI;break}if((15&t)!==Bk){A.msg="unknown compression method",g.mode=pI;break}if(o-=4,y=8+(15&(t>>>=4)),g.wbits===0)g.wbits=y;else if(y>g.wbits){A.msg="invalid window size",g.mode=pI;break}g.dmax=1<>8&1),512&mg(g)&&(F[0]=255&t,F[1]=t>>>8&255,g.check=lB(g.check,F,2,0)),t=0,o=0,g.mode=ek;case ek:for(;o<32;){if(E===0)break A;E--,t+=C[i++]<>>8&255,F[2]=t>>>16&255,F[3]=t>>>24&255,g.check=lB(g.check,F,4,0)),t=0,o=0,g.mode=tk;case tk:for(;o<16;){if(E===0)break A;E--,t+=C[i++]<>8),512&mg(g)&&(F[0]=255&t,F[1]=t>>>8&255,g.check=lB(g.check,F,2,0)),t=0,o=0,g.mode=ok;case ok:if(1024&mg(g)){for(;o<16;){if(E===0)break A;E--,t+=C[i++]<>>8&255,g.check=lB(g.check,F,2,0)),t=0,o=0}else g.head&&(g.head.extra=null);g.mode=rk;case rk:if(1024&mg(g)&&((v=g.length)>E&&(v=E),v&&(g.head&&(y=g.head.extra_len-g.length,g.head.extra||(g.head.extra=new Array(g.head.extra_len)),wQ.arraySet(g.head.extra,C,i,v,y)),512&mg(g)&&(g.check=lB(g.check,C,v,i)),E-=v,i+=v,g.length-=v),g.length))break A;g.length=0,g.mode=sk;case sk:if(2048&mg(g)){if(E===0)break A;v=0;do y=C[i+v++],g.head&&y&&g.length<65536&&(g.head.name+=String.fromCharCode(y));while(y&&v>9&1,g.head.done=!0),A.adler=g.check=0,g.mode=HB;break;case nk:for(;o<32;){if(E===0)break A;E--,t+=C[i++]<>>=7&o,o-=7&o,g.mode=eD;break}for(;o<3;){if(E===0)break A;E--,t+=C[i++]<>>=1)){case 0:g.mode=ck;break;case 1:if(qlA(g),g.mode=pl,I===Tl){t>>>=2,o-=2;break A}break;case 2:g.mode=Pk;break;case 3:A.msg="invalid block type",g.mode=pI}t>>>=2,o-=2;break;case ck:for(t>>>=7&o,o-=7&o;o<32;){if(E===0)break A;E--,t+=C[i++]<>>16^65535)){A.msg="invalid stored block lengths",g.mode=pI;break}if(g.length=65535&t,t=0,o=0,g.mode=ED,I===Tl)break A;case ED:g.mode=lk;case lk:if(v=g.length){if(v>E&&(v=E),v>e&&(v=e),v===0)break A;wQ.arraySet(Q,C,i,v,B),E-=v,i+=v,e-=v,B+=v,g.length-=v;break}g.mode=HB;break;case Pk:for(;o<14;){if(E===0)break A;E--,t+=C[i++]<>>=5,o-=5,g.ndist=1+(31&t),t>>>=5,o-=5,g.ncode=4+(15&t),t>>>=4,o-=4,g.nlen>286||g.ndist>30){A.msg="too many length or distance symbols",g.mode=pI;break}g.have=0,g.mode=dk;case dk:for(;g.have>>=3,o-=3}for(;g.have<19;)g.lens[U[g.have++]]=0;if(g.lencode=g.lendyn,g.lenbits=7,G={bits:g.lenbits},b=qa(WlA,g.lens,0,19,g.lencode,0,g.work,G),g.lenbits=G.bits,b){A.msg="invalid code lengths set",g.mode=pI;break}g.have=0,g.mode=hk;case hk:for(;g.have>>16&255,d=65535&m,!((c=m>>>24)<=o);){if(E===0)break A;E--,t+=C[i++]<>>=c,o-=c,g.lens[g.have++]=d;else{if(d===16){for(L=c+2;o>>=c,o-=c,g.have===0){A.msg="invalid bit length repeat",g.mode=pI;break}y=g.lens[g.have-1],v=3+(3&t),t>>>=2,o-=2}else if(d===17){for(L=c+3;o>>=c)),t>>>=3,o-=3}else{for(L=c+7;o>>=c)),t>>>=7,o-=7}if(g.have+v>g.nlen+g.ndist){A.msg="invalid bit length repeat",g.mode=pI;break}for(;v--;)g.lens[g.have++]=y}}if(g.mode===pI)break;if(g.lens[256]===0){A.msg="invalid code -- missing end-of-block",g.mode=pI;break}if(g.lenbits=9,G={bits:g.lenbits},b=qa(Sf,g.lens,0,g.nlen,g.lencode,0,g.work,G),g.lenbits=G.bits,b){A.msg="invalid literal/lengths set",g.mode=pI;break}if(g.distbits=6,g.distcode=g.distdyn,G={bits:g.distbits},b=qa(Tf,g.lens,g.nlen,g.ndist,g.distcode,0,g.work,G),g.distbits=G.bits,b){A.msg="invalid distances set",g.mode=pI;break}if(g.mode=pl,I===Tl)break A;case pl:g.mode=Fl;case Fl:if(E>=6&&e>=258){A.next_out=B,A.avail_out=e,A.next_in=i,A.avail_in=E,g.hold=t,g.bits=o,KlA(A,s),B=A.next_out,Q=A.output,e=A.avail_out,i=A.next_in,C=A.input,E=A.avail_in,t=g.hold,o=g.bits,g.mode===HB&&(g.back=-1);break}for(g.back=0;P=(m=g.lencode[t&(1<>>16&255,d=65535&m,!((c=m>>>24)<=o);){if(E===0)break A;E--,t+=C[i++]<>h)])>>>16&255,d=65535&m,!(h+(c=m>>>24)<=o);){if(E===0)break A;E--,t+=C[i++]<>>=h,o-=h,g.back+=h}if(t>>>=c,o-=c,g.back+=c,g.length=d,P===0){g.mode=mk;break}if(32&P){g.back=-1,g.mode=HB;break}if(64&P){A.msg="invalid literal/length code",g.mode=pI;break}g.extra=15&P,g.mode=uk;case uk:if(g.extra){for(L=g.extra;o>>=g.extra,o-=g.extra,g.back+=g.extra}g.was=g.length,g.mode=Dk;case Dk:for(;P=(m=g.distcode[t&(1<>>16&255,d=65535&m,!((c=m>>>24)<=o);){if(E===0)break A;E--,t+=C[i++]<>h)])>>>16&255,d=65535&m,!(h+(c=m>>>24)<=o);){if(E===0)break A;E--,t+=C[i++]<>>=h,o-=h,g.back+=h}if(t>>>=c,o-=c,g.back+=c,64&P){A.msg="invalid distance code",g.mode=pI;break}g.offset=d,g.extra=15&P,g.mode=bk;case bk:if(g.extra){for(L=g.extra;o>>=g.extra,o-=g.extra,g.back+=g.extra}if(g.offset>g.dmax){A.msg="invalid distance too far back",g.mode=pI;break}g.mode=yk;case yk:if(e===0)break A;if(v=s-e,g.offset>v){if((v=g.offset-v)>g.whave&&g.sane){A.msg="invalid distance too far back",g.mode=pI;break}v>g.wnext?(v-=g.wnext,n=g.wsize-v):n=g.wnext-v,v>g.length&&(v=g.length),a=g.window}else a=Q,n=B-g.offset,v=g.length;v>e&&(v=e),e-=v,g.length-=v;do Q[B++]=a[n++];while(--v);g.length===0&&(g.mode=Fl);break;case mk:if(e===0)break A;Q[B++]=g.length,e--,g.mode=Fl;break;case eD:if(g.wrap){for(;o<32;){if(E===0)break A;E--,t|=C[i++]<=0&&I.windowBits<16&&(I.windowBits=-I.windowBits,I.windowBits===0&&(I.windowBits=-15)),!(I.windowBits>=0&&I.windowBits<16)||A&&A.windowBits||(I.windowBits+=32),I.windowBits>15&&I.windowBits<48&&(15&I.windowBits||(I.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new QPA,this.strm.avail_out=0;var g=Es.inflateInit2(this.strm,I.windowBits);if(g!==eg.Z_OK)throw new Error(iG[g]);if(this.header=new iPA,Es.inflateGetHeader(this.strm,this.header),I.dictionary&&(typeof I.dictionary=="string"?I.dictionary=g9.string2buf(I.dictionary):Vf.call(I.dictionary)==="[object ArrayBuffer]"&&(I.dictionary=new Uint8Array(I.dictionary)),I.raw&&(g=Es.inflateSetDictionary(this.strm,I.dictionary))!==eg.Z_OK))throw new Error(iG[g])}function BG(A,I){var g=new St(I);if(g.push(A,!0),g.err)throw g.msg||iG[g.err];return g.result}function BPA(A,I){return(I=I||{}).raw=!0,BG(A,I)}St.prototype.push=function(A,I){var g,C,Q,i,B,E=this.strm,e=this.options.chunkSize,t=this.options.dictionary,o=!1;if(this.ended)return!1;C=I===~~I?I:I===!0?eg.Z_FINISH:eg.Z_NO_FLUSH,typeof A=="string"?E.input=g9.binstring2buf(A):Vf.call(A)==="[object ArrayBuffer]"?E.input=new Uint8Array(A):E.input=A,E.next_in=0,E.avail_in=E.input.length;do{if(E.avail_out===0&&(E.output=new wa.Buf8(e),E.next_out=0,E.avail_out=e),(g=Es.inflate(E,eg.Z_NO_FLUSH))===eg.Z_NEED_DICT&&t&&(g=Es.inflateSetDictionary(this.strm,t)),g===eg.Z_BUF_ERROR&&o===!0&&(g=eg.Z_OK,o=!1),g!==eg.Z_STREAM_END&&g!==eg.Z_OK)return this.onEnd(g),this.ended=!0,!1;E.next_out&&(E.avail_out!==0&&g!==eg.Z_STREAM_END&&(E.avail_in!==0||C!==eg.Z_FINISH&&C!==eg.Z_SYNC_FLUSH)||(this.options.to==="string"?(Q=g9.utf8border(E.output,E.next_out),i=E.next_out-Q,B=g9.buf2string(E.output,Q),E.next_out=i,E.avail_out=e-i,i&&wa.arraySet(E.output,E.output,Q,i,0),this.onData(B)):this.onData(wa.shrinkBuf(E.output,E.next_out)))),E.avail_in===0&&E.avail_out===0&&(o=!0)}while((E.avail_in>0||E.avail_out===0)&&g!==eg.Z_STREAM_END);return g===eg.Z_STREAM_END&&(C=eg.Z_FINISH),C===eg.Z_FINISH?(g=Es.inflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===eg.Z_OK):C!==eg.Z_SYNC_FLUSH||(this.onEnd(eg.Z_OK),E.avail_out=0,!0)},St.prototype.onData=function(A){this.chunks.push(A)},St.prototype.onEnd=function(A){A===eg.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=wa.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},ma.Inflate=St,ma.inflate=BG,ma.inflateRaw=BPA,ma.ungzip=BG;var EPA=mE.assign,ePA=ua,tPA=ma,oPA=Jf,zf={};EPA(zf,ePA,tPA,oPA);var rPA=zf,EG=nI(rPA);let sPA=1,vPA=class{constructor(A){l(this,"lockingPromise",Promise.resolve()),l(this,"locks",0),l(this,"name",""),l(this,"lockId",void 0),this.lockId=sPA++,A&&(this.name=A)}get isLocked(){return this.locks>0}lock(){let A;this.locks+=1;const I=new Promise(C=>{A=()=>{this.locks-=1,C()}}),g=this.lockingPromise.then(()=>A);return this.lockingPromise=this.lockingPromise.then(()=>I),g}};const Sk="VERTC",fv=()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;class _C{constructor(I){l(this,"storeName",void 0),l(this,"pendingList",[]),this.storeName=I,!pe()&&fv()&&this._checkAndCreateStore(I)}async _checkAndCreateStore(I,g){const C=await _C._promiseLock.lock();if(fv().databases){let Q;await new Promise(i=>{const B=()=>fv().databases().finally(i);Q=setInterval(B,100),B()}).finally(()=>clearInterval(Q))}return new Promise(Q=>{_C.db&&(_C.db.close(),delete _C.db);const i=g?fv().open(Sk,g):fv().open(Sk);i.onupgradeneeded=()=>{i.result.createObjectStore(I)},i.onerror=()=>{console.error("IndexedDBInterface error",i.error)},i.onsuccess=()=>{const B=i.result;_C.db=B;try{_C.db.transaction(this.storeName,"readonly"),this.pendingList.forEach(async E=>{let{txMode:e,pendResolve:t,pendReject:o}=E;try{t(await this._getStore(e))}catch{o()}}),Q()}catch{Q(this._checkAndCreateStore(I,B.version+1))}finally{C()}}})}async _getStore(I){const g=await _C._promiseLock.lock();return new Promise((C,Q)=>{if(!_C.db)return this.pendingList.push({txMode:I,pendResolve:C,pendReject:Q}),void g();try{C(_C.db.transaction(this.storeName,I).objectStore(this.storeName))}catch{return void this.pendingList.push({txMode:I,pendResolve:C,pendReject:Q})}finally{g()}})}async put2String(I,g){let C;try{C=JSON.stringify(I)}catch{C=I}return await this.put(C,g)}async get4String(I){const g=await this.get(I);let C;try{C=JSON.parse(g)}catch{C=g}return C}async put(I,g){const C=await this._getStore("readwrite");return new Promise((Q,i)=>{const B=C.put(I,g);B.onsuccess=()=>{Q()},B.onerror=E=>{i(E)}})}async get(I){const g=await this._getStore("readonly");return new Promise((C,Q)=>{const i=g.get(I);i.onsuccess=()=>{C(i.result)},i.onerror=B=>{Q(B)}})}async del(I){const g=await this._getStore("readwrite");return new Promise((C,Q)=>{const i=g.delete(I);i.onsuccess=()=>{C()},i.onerror=B=>{Q(B)}})}}l(_C,"db",void 0),l(_C,"state","init"),l(_C,"_promiseLock",new vPA("iDB"));var aPA=TA,nPA=Vz.includes,cPA=sI,lPA=cPA(function(){return!Array(1).includes()});aPA({target:"Array",proto:!0,forced:lPA},{includes:function(A){return nPA(this,A,arguments.length>1?arguments[1]:void 0)}});var PPA=KB,dPA=PPA("Array","includes"),hPA=kM,uPA=TypeError,DPA=function(A){if(hPA(A))throw new uPA("The method doesn't accept regular expressions");return A},bPA=mI,yPA=bPA("match"),mPA=function(A){var I=/./;try{"/./"[A](I)}catch{try{return I[yPA]=!1,"/./"[A](I)}catch{}}return!1},wPA=TA,GPA=iI,RPA=DPA,LPA=so,Tk=rQ,SPA=mPA,TPA=GPA("".indexOf);wPA({target:"String",proto:!0,forced:!SPA("includes")},{includes:function(A){return!!~TPA(Tk(LPA(this)),Tk(RPA(A)),arguments.length>1?arguments[1]:void 0)}});var pPA=KB,FPA=pPA("String","includes"),pk=vC,UPA=dPA,kPA=FPA,rD=Array.prototype,sD=String.prototype,YPA=function(A){var I=A.includes;return A===rD||pk(rD,A)&&I===rD.includes?UPA:typeof A=="string"||A===sD||pk(sD,A)&&I===sD.includes?kPA:I},NPA=YPA,ZPA=NPA,KPA=ZPA,WPA=KPA,JPA=WPA,VPA=JPA,zPA=VPA,Mf=nI(zPA);function MPA(A,I){if(A==null)return{};var g={};for(var C in A)if({}.hasOwnProperty.call(A,C)){if(Mf(I).call(I,C))continue;g[C]=A[C]}return g}function ze(A,I){if(A==null)return{};var g,C,Q=MPA(A,I);if(v0){var i=v0(A);for(C=0;C0;){const Q=this.inBuffer[0],{message:i}=Q,B=p(p({},ze(Q,fPA)),{},{message:p(p({},i),{},{msg:""})}),E=JSON.stringify(B).length,e=I-E,t=p({},B);if(e>i.msg.length)t.message.msg=i.msg,this.inBuffer.shift();else{if(!(e>=10))break;{const s=i.msg.slice(0,e);t.message.msg=s,t.message.end=!1,this.inBuffer[0].message.msg=i.msg.slice(e),this.inBuffer[0].message.index++}}const o=JSON.stringify(t.message),r=o.length;I-=r+E,C+=r+E,g.push(p(p({},t),{},{message:o}))}return{payload:g,payloadSize:C}}unshift(I){this.outBuffer=I.concat(this.outBuffer)}get(){return[...this.outBuffer,...this.inBuffer.map(I=>p(p({},I),{},{message:JSON.stringify(I.message)}))]}set(I){I.forEach(g=>{jPA(g)?this.outBuffer.push(g):(g.message||(g.message=""),this.inBuffer.push(p(p({},g),{},{message:JSON.parse(g.message)})))}),this.outBuffer=[].concat(this.outBuffer),this.inBuffer=[].concat(this.inBuffer)}isEmpty(){return this.inBuffer.length===0&&this.outBuffer.length===0}}var vD,aD,ff=new XPA;const HPA={product_line:"rtc",report_version:"5",os:"web",user_agent:pe()?"":(vD=navigator)===null||vD===void 0?void 0:vD.userAgent,platform:"web",product:"webrtc",app_state:"active"},Fk=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||((aD=window.localStorage)===null||aD===void 0?void 0:aD.getItem("_rtc_debug_")));class xPA{constructor(I){l(this,"_buffer",void 0),this._buffer=new _C(I)}async set(I,g){await this._buffer.put2String(I,g)}async get(I){var g;let C=[];try{C=await this._buffer.get4String(I)}catch{}return(g=C)!==null&&g!==void 0?g:[]}}class OPA{constructor(){l(this,"reportCommon",HPA),l(this,"reportIds",new Map),l(this,"dataBuffer",[]),l(this,"reportorList",[]),l(this,"dbBuffer",void 0),l(this,"posting",!1),l(this,"sucSendTimer",void 0),l(this,"preSucTime",0),l(this,"errSendTimer",void 0),l(this,"errSendDelay",100),l(this,"_logServerUrl",void 0),l(this,"_retryCount",0),l(this,"_reportLimit",5e5),l(this,"_disableTimeout",!1),pe()||(window.addEventListener("beforeunload",()=>{clearTimeout(this.errSendTimer),clearTimeout(this.sucSendTimer),this.send(void 0,!0)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?this.setCommonStats({app_state:"active"}):document.visibilityState==="hidden"&&this.setCommonStats({app_state:"background"})}),Fk&&(window.__rtc_debug_reportor__=this)),xi.on("UPLOAD_REPORT_LIMIT",I=>{this.setReportLimit(I)}),xi.on("ENABLE_REPORT_IDB_BUFFER",I=>{I&&this.enableIndexedDBBuffer()}),setTimeout(()=>{this.reportorList.push(vS),this.reportorList.push(ff)})}setUrl(I){this._logServerUrl=I}setCommonStats(I){this.reportCommon=Object.assign(this.reportCommon,I)}getCommonStats(){return this.reportCommon}setReportLimit(I){this._reportLimit=Math.max(I,5e4),this._reportLimit=Math.min(I,5e5)}getReportId(I){var g;I=(g=I)!==null&&g!==void 0?g:"__global__",this.reportIds.has(I)||this.reportIds.set(I,0);let C=this.reportIds.get(I);return C===void 0&&(Vr("no reportId in reportId map with engine-session-id ".concat(I),0,{}),C=0),this.reportIds.set(I,C+1),C}push(I){if(arguments.length>1&&arguments[1]!==void 0&&arguments[1])this.send(I);else{var g;const C=(g=I.engine_session_id)!==null&&g!==void 0?g:"__global__";this.reportIds.has(C)||this.reportIds.set(C,0),this.dataBuffer.push(I),!this.posting&&!this.errSendTimer&&Date.now()-this.preSucTime>2e3&&(clearTimeout(this.sucSendTimer),this.send())}}enableIndexedDBBuffer(){this.dbBuffer||(this.dbBuffer=new xPA("ReportorDBBuffer"),this.dbBuffer.get("LogReportor").then(I=>{I.forEach(g=>{this.push(g)})}),this.reportorList.forEach(I=>{var g;(g=this.dbBuffer)===null||g===void 0||g.get(I.name).then(C=>{I.set(C)})}))}backup(){try{var I;(I=this.dbBuffer)===null||I===void 0||I.set([...this.dataBuffer],"LogReportor"),this.reportorList.forEach(g=>{var C;(C=this.dbBuffer)===null||C===void 0||C.set([...g.get()],g.name)})}catch(g){Vr("Error when save log into IDB",-1,g)}}unshift(I){this.dataBuffer=I[0].concat(this.dataBuffer),this.reportorList.forEach((g,C)=>{var Q;g.unshift((Q=I[C+1])!==null&&Q!==void 0?Q:[])})}_splice(){let I=qPA(this.dataBuffer,this._reportLimit);I===0&&this.dataBuffer.length>0&&(this._reportLimit=JSON.stringify(this.dataBuffer[0]).length+10,I=1,Vr("update report limit to ".concat(this._reportLimit),0,null));const g=this.dataBuffer.splice(0,I),C=JSON.stringify(g).length,Q=[g];let i=this._reportLimit-C;return this.reportorList.forEach(B=>{const{payload:E,payloadSize:e}=B.splice(i);E.forEach(t=>{var o,r,s;t.report_id===void 0&&(t.report_id=this.getReportId(t.engine_session_id),!pe()&&window.__onRTCReport&&((o=(r=window).__onRTCReport)===null||o===void 0||o.call(r,(s=t.engine_session_id)!==null&&s!==void 0?s:"global",t,this.getCommonStats())))}),Q.push(E),i-=e}),Q}async send(I,g){this.backup();const C=this.reportorList.reduce((r,s)=>r&&s.isEmpty(),!0);if(!I&&!this.dataBuffer.length&&C||!this._logServerUrl)return;I||(this.posting=!0);let Q=[];I||(Q=this._splice());const i=Fk,B={data:I||gf(Q).call(Q),header:p(p({},this.reportCommon),{},{http_retry_count:this._retryCount}),from:"web",os:"web",version:"1"},E={method:"POST",body:i?JSON.stringify(B):EG.gzip(JSON.stringify(B))};if(!this._disableTimeout)try{const r=new AbortController;E.signal=r.signal,setTimeout(()=>{r.abort()},1e4)}catch{console.warn("AbortController is not supported"),this._disableTimeout=!0}i||(E.headers={"Content-Encoding":"gzip","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"});let e,t,o=null;try{e=await fetch(this._logServerUrl,E),e.status!==200&&e.status!==304||(o=JSON.parse(await e.text()))}catch(r){t=r}I||(this.posting=!1),o&&o.StatusCode===0?I||g||this.sucSend():(setTimeout(()=>{var r,s,v;Vr("reportor post error, resJSON:".concat((r=o)===null||r===void 0?void 0:r.toString()," err:").concat(t),(s=(v=e)===null||v===void 0?void 0:v.status)!==null&&s!==void 0?s:-1,t)},0),I?this.send(I):(this.unshift(Q),g?this.send():this.errSend()))}_getDataBufferTotalSize(){return this.dataBuffer.reduce((I,g)=>I+JSON.stringify(g).length,0)}sucSend(){this.errSendDelay=100,this._retryCount=0,this.preSucTime=Date.now();const I=this._getDataBufferTotalSize()>1e6?1e3:2e3;this.sucSendTimer=setTimeout(()=>this.send(),I)}errSend(){this.errSendTimer=setTimeout(()=>{this.send(),delete this.errSendTimer},this.errSendDelay),this.errSendDelay*=2,this._retryCount++}}function qPA(A,I){let g=0;for(let C=0;CI)return C;return A.length}var _a=new OPA;class jf{constructor(I){l(this,"modifyIds",{pre_connection:!1}),this.id=I}report(I,g,C){const Q=p(p(p({event_key:I,rtc_timestamp:Date.now()},this.modifyIds),g),{},{report_id:_a.getReportId(this.modifyIds.engine_session_id)});var i,B;typeof C=="object"&&Object.keys(C).length>0&&(Q.common_extra_info=JSON.stringify(C)),Object.keys(Q).forEach(E=>{Q[E]!==void 0&&Q[E]!==""||delete Q[E]}),!pe()&&window.__onRTCReport&&((i=(B=window).__onRTCReport)===null||i===void 0||i.call(B,this.modifyIds.engine_session_id,Q,_a.getCommonStats())),{}.VITE_TEST!=="UT"&&_a.push(Q)}reportLog(I){const g=p(p({event_key:"rtc_invoke_status",sdk_api_name:"console_log",rtc_timestamp:Date.now()},this.modifyIds),{},{message:I});vS.push(g)}reportLongString(I,g){const C=p(p({event_key:"rtc_invoke_status",sdk_api_name:"sdk_long_string_".concat(I),rtc_timestamp:Date.now()},this.modifyIds),{},{message:g});ff.push(C)}set(I){this.modifyIds=Object.assign(this.modifyIds,I)}destroy(){}}class Ai{constructor(I){l(this,"_preTime",Date.now()),l(this,"_one2oneNum",0),l(this,"_one2manyNum",0),l(this,"_one2oneMsgCache",new Map),l(this,"_one2manyMsgCache",new Map),l(this,"roomId",""),l(this,"userId",""),l(this,"rtsSessionId",""),l(this,"logger",void 0),l(this,"serverUrl","server"),this.id=I,this.logger=new SA("MessageReportor",1)}needReport(I){return!!Ai.config&&(Date.now()-this._preTime>=36e5&&(this._preTime=Date.now(),this._one2oneNum=0,this._one2manyNum=0),I==="one2one"&&this._one2oneNum{new SA("MessageReportor",1).info("setConfig","get config: ".concat(JSON.stringify(A))),Ai.config=A},$PA=A=>{const I=_g.get(A)||new Ai(A);return _g.set(A,I),I},A9A=A=>{const I=_g.get(A);I&&(I.destroy(),_g.delete(A))},I9A=(A,I)=>{const g=_g.get(A);g&&(g.serverUrl=I)},g9A=(A,I)=>{const g=_g.get(A);g&&(g.roomId=I||"")},C9A=(A,I)=>{const g=_g.get(A);g&&(g.userId=I||"")},Q9A=(A,I)=>{const g=_g.get(A);g&&(g.rtsSessionId=I)},i9A=(A,I)=>{const g=_g.get(A);if(g!=null&&g.needReport("one2one")){const C=I.to?"one2one":"one2server";I.enable_report=!0,I.report_msg_id=I.id,g.cacheP2PMsg({rts_session_id:g.rtsSessionId,msg_id:"".concat(I.id),node_role:"src_sdk",from:I.from,to:I.to||g.serverUrl,msg_type:C,type:C,rts_room_id:I.room,req_ts:Date.now(),send_ts:Date.now(),ack_ts:Date.now(),msg_size:0,error_code:0,recv_msg_ts:0,fwd_msg_ts:0,reply_ack_ts:0,cur_dst_uid:""})}return I},B9A=(A,I,g)=>{var C;I.enable_report&&Cv(I.report_msg_id)&&((C=_g.get(A))===null||C===void 0||C.updateP2PMsg("".concat(I.report_msg_id),{send_ts:Date.now(),msg_size:g}))},E9A=(A,I,g)=>{if(I.enable_report&&Cv(I.report_msg_id)){const C=_g.get(A);C==null||C.updateP2PMsg("".concat(I.report_msg_id),{ack_ts:Date.now(),error_code:g}),C==null||C.reportP2PMsg("".concat(I.report_msg_id))}},e9A=(A,I,g)=>{const C=_g.get(A);return C!=null&&C.needReport("one2many")&&(g.enable_report=!0,g.report_msg_id=I,C.cacheCustomMsg({rts_session_id:C.rtsSessionId,msg_id:"".concat(I),node_role:"src_sdk",from:g.clientId,to:C.roomId||g.roomId,msg_type:"one2many",type:"one2many",rts_room_id:C.roomId,req_ts:Date.now(),send_ts:Date.now(),ack_ts:Date.now(),msg_size:0,error_code:0,recv_msg_ts:0,fwd_msg_ts:0,reply_ack_ts:0,cur_dst_uid:""})),g},t9A=(A,I,g)=>{if(I.enable_report&&Cv(I.report_msg_id)){const C=_g.get(A);C&&C.updateOne2ManyMsg("".concat(I.report_msg_id),{send_ts:Date.now(),msg_size:g})}},o9A=(A,I,g)=>{if(I.enable_report&&Cv(I.report_msg_id)){const C=_g.get(A);C&&(C==null||C.updateOne2ManyMsg("".concat(I.report_msg_id),{ack_ts:Date.now(),error_code:g}),C==null||C.reportOne2ManyMsg("".concat(I.report_msg_id)))}},r9A=(A,I,g)=>{if(I.enable_report&&Cv(I.report_msg_id)){const C=_g.get(A),Q=I.to?"one2one":"one2many";C==null||C.reportMsgRecv({rts_session_id:C.rtsSessionId,msg_id:"".concat(I.report_msg_id),msg_size:g.msg_size,node_role:"dst_sdk",msg_type:Q,type:Q,rts_room_id:I.room,from:I.from,to:I.to||I.room,error_code:0,recv_msg_ts:g.recv_msg_ts,fwd_msg_ts:g.fwd_msg_ts,reply_ack_ts:Date.now(),cur_dst_uid:I.to?"":C.userId,config_version:"",req_ts:0,send_ts:0,ack_ts:0})}},s9A=(A,I,g)=>{if(I.enable_report&&Cv(I.report_msg_id)){const C=_g.get(A);C==null||C.reportMsgRecv({rts_session_id:C.rtsSessionId,msg_id:"".concat(I.report_msg_id),msg_size:g.msg_size,node_role:"dst_sdk",msg_type:"one2many",type:"one2many",rts_room_id:I.roomId,from:I.clientId,to:I.roomId,error_code:0,recv_msg_ts:g.recv_msg_ts,fwd_msg_ts:g.fwd_msg_ts,reply_ack_ts:Date.now(),cur_dst_uid:C.userId,config_version:"",req_ts:0,send_ts:0,ack_ts:0})}},Ig={_cache:_g,setServerUrl:I9A,setConfig:_PA,setRtsSessionId:Q9A,createRTSMsgReportor:$PA,destroyRTSMsgReportor:A9A,setRoomId:g9A,setUserId:C9A,samplingP2PMsg:i9A,updateP2PMsgReq:B9A,updateP2PMsgAck:E9A,samplingOne2ManyMsg:e9A,reportP2PMsgRecv:r9A,updateOne2ManyMsgAck:o9A,updateOne2ManyMsgReq:t9A,reportOne2ManyMsgRecv:s9A};class v9A{constructor(I){l(this,"_timer",void 0),l(this,"userMessage",{}),l(this,"roomMessage",{}),this.id=I,this._setTimer()}_setTimer(){const I=()=>{this._reportAndgReset(),clearTimeout(this._timer),this._timer=setTimeout(I,1e4)};I()}_reportAndgReset(){(Object.keys(this.userMessage).length||Object.keys(this.roomMessage).length)&&(this._report(),this._reset())}_report(){var I;(I=bI(this.id))===null||I===void 0||I.report("rtc_message_statistics",{dc_user_message:Object.keys(this.userMessage).map(g=>this.userMessage[g]),dc_room_message:Object.keys(this.roomMessage).map(g=>this.roomMessage[g]),media_server_ip:""})}_reset(){this.userMessage={},this.roomMessage={}}_checkInitUserMessage(I,g){this.userMessage["".concat(g,"-").concat(I)]||(this.userMessage["".concat(g,"-").concat(I)]={dc_peer_user_id:I,dc_send_total:0,dc_recv_total:0,dc_send_ack:0,dc_send_fail:0,dc_fail_timeout:0,dc_fail_no_receiver:0,dc_fail_no_relay_path:0,dc_cost_time:0,dc_cost_e2s:0,dc_cost_s2s:0,dc_least_time:1/0,dc_most_time:0,dc_cost_peer_s2e:0,dc_send_ack_100:0,dc_send_ack_200:0,dc_send_ack_400:0,dc_send_ack_1s:0,dc_message_type:g,dc_send_binary:0})}_sendUserMessage(I,g,C){this._checkInitUserMessage(I,g),this.userMessage["".concat(g,"-").concat(I)].dc_send_total++,C&&this.userMessage["".concat(g,"-").concat(I)].dc_send_binary++}_recvUserMessage(I,g){this._checkInitUserMessage(I,g),this.userMessage["".concat(g,"-").concat(I)].dc_recv_total++}_sendUserFail(I,g,C){const Q=this.userMessage["".concat(g,"-").concat(I)];Q&&(Q.dc_send_fail++,this._handleUserFail(Q,C))}_handleUserFail(I,g){g&&(g.code||g.err)&&(["TIME_OUT","USER_MESSAGE_TIMEOUT"].includes(g.code)?I.dc_fail_timeout++:g.err===3?I.dc_fail_no_receiver++:g.err===4?I.dc_fail_no_relay_path++:g.err===1&&I.dc_fail_timeout++)}_sendUserAck(I,g,C,Q,i){const B=this.userMessage["".concat(g,"-").concat(I)];B&&(B.dc_send_ack++,B.dc_cost_time+=C,B.dc_cost_s2s+=Q||0,B.dc_cost_peer_s2e+=i,B.dc_cost_e2s+=C-(Q||0)-i,C/2<=100?(B.dc_send_ack_100++,B.dc_send_ack_200++,B.dc_send_ack_400++,B.dc_send_ack_1s++):C/2<=200?(B.dc_send_ack_200++,B.dc_send_ack_400++,B.dc_send_ack_1s++):C/2<=400?(B.dc_send_ack_400++,B.dc_send_ack_1s++):C/2<=1e3&&B.dc_send_ack_1s++,CB.dc_most_time&&(B.dc_most_time=C))}sendRoomMessage(I,g){this.roomMessage[I]||(this.roomMessage[I]={dc_room_id:I,dc_send_total:0,dc_send_ack:0,dc_cost_time:0,dc_least_time:1/0,dc_most_time:0,dc_send_fail:0,dc_send_ack_100:0,dc_send_ack_200:0,dc_send_ack_400:0,dc_send_ack_1s:0,dc_send_binary:0}),this.roomMessage[I].dc_send_total++,g&&this.roomMessage[I].dc_send_binary++}sendRoomFail(I){const g=this.roomMessage[I];g&&g.dc_send_fail++}sendRoomAck(I,g){const C=this.roomMessage[I];C&&(C.dc_send_ack++,C.dc_cost_time+=g,gC.dc_most_time&&(C.dc_most_time=g),g/2<=100?(C.dc_send_ack_100++,C.dc_send_ack_200++,C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=200?(C.dc_send_ack_200++,C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=400?(C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=1e3&&C.dc_send_ack_1s++)}sendP2PMessage(I,g){this._sendUserMessage(I,"p2p",g)}recvP2PMessage(I){this._recvUserMessage(I,"p2p")}sendP2PFail(I,g){this._sendUserFail(I,"p2p",g)}sendP2PAck(I,g,C,Q){this._sendUserAck(I,"p2p",g,C,Q)}sendP2POutRoomMessage(I,g){this._sendUserMessage(I,"p2p_outside_room",g)}recvP2POutRoomMessage(I){this._recvUserMessage(I,"p2p_outside_room")}sendP2POutRoomFail(I,g){this._sendUserFail(I,"p2p_outside_room",g)}sendP2POutRoomAck(I,g,C,Q){this._sendUserAck(I,"p2p_outside_room",g,C,Q)}sendP2serverMessage(I){this._sendUserMessage("","p2server",I)}sendP2serverFail(I){this._sendUserFail("","p2server",I)}sendP2serveAck(I,g,C){this._sendUserAck("","p2server",I,g,C)}countP2PMessage(I,g,C,Q,i){this.sendP2PMessage(g,C),I?this.sendP2PAck(g,Date.now()-Q,i.s2s_time||0,i.s2e_time||0):this.sendP2PFail(g,i)}countRoomMessage(I,g,C,Q){this.sendRoomMessage(g,C),I?this.sendRoomAck(g,Date.now()-Q):this.sendRoomFail(g)}countUserMessageOutsideRoom(I,g,C,Q,i){this.sendP2POutRoomMessage(g,C),I?this.sendP2POutRoomAck(g,Date.now()-Q,i.s2s_time,i.s2e_time):this.sendP2POutRoomFail(g,i)}countServerMessage(I,g,C,Q){this.sendP2serverMessage(g),I?(Q=Q||{},this.sendP2serveAck(Date.now()-C,Q.s2s_time||0,Q.s2e_time||0)):this.sendP2serverFail(Q)}destroy(){this._reset(),clearTimeout(this._timer)}}const $a=A=>{_a.setCommonStats(A)},Xf=A=>{_a.setUrl(A)},uc=new jf("global"),Hf=(A,I,g)=>{uc.report("rtc_sdk_api_call",{sdk_api_name:A,error_code:I,message:g})},nD=(A,I,g)=>{uc.report("rtc_sdk_callback",{sdk_callback_name:A,error_code:I,message:g})},Vr=(A,I,g)=>{uc.report("rtc_error",{message:A,error_code:I},g)},Uk=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",Q=arguments.length>4?arguments[4]:void 0;uc.report("rtc_invoke_status",{sdk_api_name:A,message:I,error_code:g,stream_id:C,elapse:0},Q)};function a9A(A){uc.reportLog(A)}const sS=new Map,bI=A=>sS.get(A),xf=(A,I)=>{const g=new jf(A);return g.set(p(p({},I),{},{engine_session_id:UC()})),g.report("sdk_init_engine",{start:Date.now(),type:"begin"}),sS.set(A,g),g},n9A=A=>{A.report("sdk_init_engine",{start:Date.now(),type:"end"}),sS.delete(A.id)},kk=new Map;function f(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};I=Object.assign({debounce:0},I);const{debounce:g,debounceTag:C}=I;function Q(i,B,E,e){if(!g)return B(...E);{const t="".concat(e,"_").concat(i),o=kk.get(t);clearTimeout(o);const r=setTimeout(()=>{B(...E)},g);kk.set(t,r)}}return function(i,B,E){if(typeof E.value=="function"){const e=E.value;E.value=function(){for(var t,o,r=arguments.length,s=new Array(r),v=0;v{c[D]=s[y]}),B==="joinRoom"&&((P=bI(n))===null||P===void 0||P.set({room_id:s[1],user_id:(d=s[2])===null||d===void 0?void 0:d.userId}));let h,u="";if(C)try{u=C(...s)}catch{}Q(B,c9A,[n,B,s,c,{event_session_id:a}],"start_".concat(u));try{h=e.apply(this,s)}catch(D){throw Q(B,zr,[n,B,D.message,D.code||-1,{event_session_id:a}],"end_".concat(u)),D}return typeof((t=h)===null||t===void 0?void 0:t.then)=="function"?h.then(D=>(Q(B,zr,[n,B,[D??{}],0,{event_session_id:a}],"end_".concat(u)),D)).catch(D=>{throw Q(B,zr,[n,B,D.message,D.code,{event_session_id:a}],"end_".concat(u)),D}):(Q(B,zr,[n,B,[(o=h)!==null&&o!==void 0?o:{}],0,{event_session_id:a}],"end_".concat(u)),h)}}}}const c9A=function(A,I,g,C){var Q;let i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const B=p({sdk_api_name:I,message:JSON.stringify(Of(g)),error_code:0},i);(Q=bI(A))===null||Q===void 0||Q.report("rtc_sdk_api_call",B,C)},zr=function(A,I,g){var C;let Q=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const i=p({sdk_callback_name:I,error_code:arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,message:JSON.stringify(Array.isArray(g)?Of(g):g)},Q);(C=bI(A))===null||C===void 0||C.report("rtc_sdk_callback",i)},rI=function(A,I,g){var C;let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,i=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"",B=arguments.length>5?arguments[5]:void 0;(C=bI(A))===null||C===void 0||C.report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:Q,stream_id:i,elapse:0},B)},cD=10;function Of(A){const I=g=>{if(g!=null&&g._reportName)return g._reportName;if(g instanceof HTMLElement)return g.toString();if(g instanceof ArrayBuffer||ArrayBuffer.isView(g)){const Q=ArrayBuffer.isView(g)?g.buffer:g,i=Q.byteLength;let B=[];if(i>cD){var C;const E=new DataView(Q),e=Array.from({length:cD/2}).map((o,r)=>E.getUint8(r)),t=UM(C=Array.from({length:cD/2}).map((o,r)=>i-1-r)).call(C).map(o=>E.getUint8(o));B=[...e,"...",...t]}else B=Array.from(new Uint8Array(Q));return"".concat(g.constructor.name,"(").concat(i,") [").concat(B.join(", "),"]")}if(g instanceof ImageData)return"ImageData";if(Array.isArray(g))return g.map(I);if(["[object Object]","[object MediaStreamTrack]"].includes(Object.prototype.toString.call(g))){const Q={};for(const i in g)Q[i]=I(g[i]);return Q}return g instanceof Function?"[User Function]":g};return A.map(I)}const l9A=typeof window<"u"&&window.location.search.includes("_rtc_upload_console_");class P9A{constructor(){l(this,"name","ConsoleReportor"),l(this,"_uuid","".concat(Math.floor(899*Math.random())+100)),l(this,"_consoleReportId",0),l(this,"_engineReportIdMap",new Map),l(this,"_enabled","NULL"),l(this,"_consoleCutLength",xi.getParameter("UPLOAD_CONSOLE_LENGTH_CUT")),l(this,"buffer",[]),l9A&&setTimeout(()=>{this.switchOn()},0),xi.on("UPLOAD_CONSOLE_ON",I=>{I?this.switchOn():this.turnOff()}),xi.on("UPLOAD_CONSOLE_LENGTH_CUT",I=>{this._consoleCutLength=I})}get enabled(){return this._enabled!=="OFF"}switchOn(){this._enabled==="NULL"&&(console.log("[LoggerReportor.constructor] console upload switch ON"),this._enabled="ON")}turnOff(){this._enabled==="NULL"&&(console.log("[LoggerReportor.constructor] console upload switch OFF"),this._enabled="OFF",this.buffer=[])}getEngineConsoleId(I){var g;const C=(g=this._engineReportIdMap.get(I))!==null&&g!==void 0?g:0;return this._engineReportIdMap.set(I,C+1),C}report(I,g,C,Q,i,B,E,e,t){if(this._enabled==="OFF")return;const o=bI(g),r=this._consoleReportId++,s=this.getEngineConsoleId(g),v=Yk(t,this._consoleCutLength),n=[...t],a="".concat(e).replace(/%o|%s/gi,()=>Yk([n.shift()],this._consoleCutLength)),c="[".concat(this._uuid,"-").concat(r,"][").concat(g,"-").concat(s,"]-").concat(C,"-").concat(I,"[").concat(Q,"]").concat(i,"[").concat(B,".").concat(E,"] ").concat(a," ").concat(v);o?o.reportLog(c):a9A(c)}push(I){this._enabled!=="OFF"&&this.buffer.push(I)}splice(I){if(this._enabled!=="ON")return{payload:[],payloadSize:0};const{index:g,size:C}=d9A(this.buffer,I);return{payload:this.buffer.splice(0,g),payloadSize:C}}unshift(I){this.buffer=I.concat(this.buffer)}get(){return this.buffer}set(I){this.buffer=I.concat(this.buffer)}isEmpty(){return this._enabled==="OFF"||this.buffer.length===0}}function Yk(A,I){return A.map(g=>{let C="";try{if(typeof g=="string")return g;if(g===void 0)return"undefined";if(g===null)return"null";if(g instanceof MediaStreamTrack)return ci(g);if(g instanceof MediaStream)return JM(g);if(g instanceof RTCRtpSender)return VM(g);if(g instanceof RTCRtpReceiver)return zM(g);if(g instanceof RTCRtpTransceiver)return MM(g);C=JSON.stringify(g)}catch{C=g.toString()}return C&&C.length>=I&&(C=C.slice(0,I)),C}).join(", ")}function d9A(A,I){let g=0;for(let C=0;CI)return{index:C,size:g-Q}}return{index:A.length,size:g}}var lD,vS=new P9A;const h9A={DEBUG:"rgba(0, 0, 0, 0)"," INFO":"rgba(93, 173, 226, 0)"," WARN":"rgba(255, 119, 0, 0.3)",ERROR:"rgba(255, 0, 0, 0.3)"," SUCC":"rgba(0, 119, 0, 0.3)"},u9A=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||((lD=window.localStorage)===null||lD===void 0?void 0:lD.getItem("_rtc_debug_")));class D9A{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"global";l(this,"indent",void 0),l(this,"module",void 0),l(this,"_engineId",void 0),this.module=I,this.indent=g,this._engineId=C}_print(I,g){for(var C=arguments.length,Q=new Array(C>2?C-2:0),i=2;i{const r=t.shift();return JSON.stringify(r)});ys.set("".concat("[VERTC]","[").concat(this.module,".").concat(g,"] ").concat(o," ").concat(t.map(r=>JSON.stringify(r)).join(", ")))}catch{}let E="";for(let t=0;t1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q{const A=new Date;return"".concat(A.toTimeString().split(" ")[0],":").concat(A.getMilliseconds().toString().padStart(3,"0"))};var PD,dD,hD,Wo,uD,SA=D9A;const TI=()=>typeof window>"u",Cg=TI()?"":window.navigator.userAgent;function aS(){let A="none";return TI()||(Cg.match("Firefox")!==null?A="mozilla":Cg.match("Chrome")!==null?(A="chrome-stable",Cg.match("Electron")!==null&&(A="electron")):(Cg.match("Safari")!==null||Cg.match("AppleWebKit")!==null)&&(A="safari")),A}const KI=aS()==="mozilla",kQ=aS()==="safari",we=aS()==="chrome-stable",y9A=!TI()&&/CriOS/i.test(Cg),m9A=!TI()&&/Edg\//i.test(Cg),w9A=!TI()&&/EdgA/i.test(Cg),G9A=!TI()&&/EdgiOS/i.test(Cg),R9A=m9A||w9A||G9A,L9A=!TI()&&/DingTalk/i.test(navigator.userAgent),S9A=!TI()&&/OPR\//.test(navigator.userAgent),l0=!TI()&&(!!/(iPad)/i.exec(Cg)||/Macintosh/i.test(Cg)&&"ontouchend"in document),T9A=!TI()&&/Macintosh/i.test(Cg),nS=!TI()&&/MicroMessenger/i.test(Cg),C9=!TI()&&Cg.toLowerCase().includes("mobile"),no=!TI()&&!!/(iPhone|iPad|iPod)/i.exec(Cg),kB=!TI()&&/Android/i.test(Cg),p9A=!TI()&&/Windows/i.test(Cg),F9A=!TI()&&/OpenHarmony/i.test(Cg);let xd=0,qf="0";const Nk=!TI()&&((PD=Cg.match(/version\/(\d+)/i))===null||PD===void 0?void 0:PD[1]);var DD;kQ&&Nk&&(xd=Number(Nk),qf=(DD=navigator.userAgent.match(/version\/(\d+\.\d+)/i))===null||DD===void 0?void 0:DD[1]);const Zk=!TI()&&((dD=Cg.match(/Firefox\/(\d+)/i))===null||dD===void 0?void 0:dD[1]);KI&&Zk&&(xd=Number(Zk));const Dc=xd,P0=xd,_f=qf,ms=(hD=!TI()&&((Wo=Cg.match(/ ([\d_]+) like Mac OS X/i))===null||Wo===void 0||(Wo=Wo[1])===null||Wo===void 0?void 0:Wo.split("_").map(A=>parseInt(A))))!==null&&hD!==void 0?hD:[];let $f=0;const Kk=!TI()&&((uD=Cg.match(/Chrome\/(\d+)/i))===null||uD===void 0?void 0:uD[1]);Kk&&($f=Number(Kk));const ri=$f,It="VolcEngine",Wk="RTC_DEVICE_ID",jv="RTC_ACCESS_NODE",bD="RTC_ACCESS_URLS",yD="ENGINE_WEB_CONFIG",mD="SERVER_CONFIG";class U9A{get(I){const g=localStorage.getItem(I);if(!g)return null;try{const C=JSON.parse(g);return C.ttl>0&&Date.now()-C.saveTime>C.ttl?(this.delete(I),null):C.message}catch{return null}}set(I,g){const C={ttl:arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1,saveTime:Date.now(),message:g};try{return localStorage.setItem(I,JSON.stringify(C)),!0}catch{return!1}}getTtl(I){const g=localStorage.getItem(I);if(!g)return null;try{return JSON.parse(g).ttl}catch{return null}}delete(I){try{return localStorage.removeItem(I),!0}catch{return!1}}}class k9A extends U9A{getDeviceId(){if(TI())return"";let I=this.get(Wk);return I&&!/^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/.test(I)||(I=E0A(16)),this.setDeviceId(I),I}setDeviceId(I){return $a({device_id:I}),this.set(Wk,I),I}getAccessNode(I){return this.get("".concat(jv,"_").concat(I,"-").concat(It))}setAccessNode(I,g,C){return this.set("".concat(jv,"_").concat(I,"-").concat(It),g,1e3*C)}deleteAccessNode(I,g){let C=this.getAccessNode(I);const Q=this.getTtl("".concat(jv,"_").concat(I,"-").concat(It));Array.isArray(C)&&C.length>0&&(C=C.filter(i=>i.mediaID!==g.mediaID&&i.msgKey!==g.msgKey),C.length>0?this.setAccessNode(I,C,Q||0):this.clearAccessNode(I))}clearAccessNode(I){if(I)this.delete("".concat(jv,"_").concat(I,"-").concat(It));else for(const g in localStorage)g.startsWith(jv)&&localStorage.removeItem(g)}getAccessUrls(){return this.get("".concat(bD,"-").concat(It))}setAccessUrls(I){const g=I.map(C=>{let{host:Q,path:i}=C;return"https://".concat(Q).concat(i)});return this.set("".concat(bD,"-").concat(It),g)}clearAccessUrls(){this.delete("".concat(bD,"-").concat(It))}getEngineWebConfig(I,g){var C;const Q="".concat(I,"_").concat(g,"_").concat(this.getDeviceId()),i=this.get(yD);return(i==null||(C=i.find(B=>B.key===Q))===null||C===void 0?void 0:C.config)||{}}setEngineWebConfig(I,g,C){if(!C)return;const Q="".concat(I,"_").concat(g,"_").concat(this.getDeviceId());let i=this.get(yD)||[];return i=i.filter(B=>B.key!==Q),i.push({key:Q,config:C}),this.set(yD,i.slice(-5))}getServerConfig(I){var g;const C="".concat(I),Q=this.get(mD);return(Q==null||(g=Q.find(i=>i.key===C))===null||g===void 0?void 0:g.config)||{}}setServerConfig(I,g){if(!g)return;const C="".concat(I);let Q=this.get(mD)||[];return Q=Q.filter(i=>i.key!==C),Q.push({key:C,config:g}),this.set(mD,Q.slice(-5))}}var oI=new k9A;const Y9A=new SA("JoinRoomConfig",0);class Qi{constructor(I){l(this,"_useTcpAfterJoinTimeout",Qi.DEFAULT_CONF.useTcpAfterJoinTimeout),l(this,"_joinWithTcpOnly",Qi.DEFAULT_CONF.joinWithTcpOnly),l(this,"_joinWithTcpOnlyDelay",Qi.DEFAULT_CONF.joinWithTcpOnlyDelay),l(this,"_blackBrowserRegexList",[]),this._engineId=I,location.search.indexOf("__rtc_tcp_only__")>-1&&(this._joinWithTcpOnly=!0,this._joinWithTcpOnlyDelay=0),this._report()}static setDefaulConf(I){let{useTcpAfterJoinTimeout:g,joinWithTcpOnly:C,joinWithTcpOnlyDelay:Q}=I;return typeof g=="boolean"&&(Qi.DEFAULT_CONF.useTcpAfterJoinTimeout=g),typeof C=="boolean"&&(Qi.DEFAULT_CONF.joinWithTcpOnly=C),typeof Q=="number"&&(Qi.DEFAULT_CONF.joinWithTcpOnlyDelay=Math.max(0,Q)),Qi.DEFAULT_CONF}get useTcpAfterJoinTimeout(){return this._useTcpAfterJoinTimeout}get useTcpJoin(){return this._joinWithTcpOnly}get useTcpJoinDelay(){return this._joinWithTcpOnlyDelay}isBlackBrower(){return this._blackBrowserRegexList.find(I=>new RegExp(I).test(navigator.userAgent))}setServerConfig(I){var g,C,Q;let i=!1;typeof(I==null||(g=I.use_tcp_after_join_timeout)===null||g===void 0?void 0:g.enable)=="boolean"&&(this._useTcpAfterJoinTimeout=I.use_tcp_after_join_timeout.enable,i=!0),typeof(I==null||(C=I.join_with_tcp_only)===null||C===void 0?void 0:C.enable)=="boolean"&&(this._joinWithTcpOnly=I.join_with_tcp_only.enable,i=!0),typeof(I==null||(Q=I.join_with_tcp_only)===null||Q===void 0?void 0:Q.delay_ms)=="number"&&(this._joinWithTcpOnlyDelay=I.join_with_tcp_only.delay_ms,i=!0),I&&Array.isArray(I.black_browser_regex_list)&&(this._blackBrowserRegexList=I.black_browser_regex_list,i=!0),i&&this._report()}toString(){return JSON.stringify({use_tcp_after_join_timeout:this._useTcpAfterJoinTimeout,join_with_tcp_only:this._joinWithTcpOnly,join_with_tcp_only_delay:this._joinWithTcpOnlyDelay,black_browser_regex_list:this._blackBrowserRegexList})}_report(){Y9A.print("_report",this.toString()),rI(this._engineId,"web_join_room_config",this.toString())}}l(Qi,"DEFAULT_CONF",{useTcpAfterJoinTimeout:!0,joinWithTcpOnly:!1,joinWithTcpOnlyDelay:5e3});var S=(A=>(A.INVALID_ENGINE="INVALID_ENGINE",A.INVALID_PARAMS="INVALID_PARAMS",A.INVOKED_BEFORE_JOIN_ROOM="INVOKED_BEFORE_JOIN_ROOM",A.INVALID_TOKEN="INVALID_TOKEN",A.JOIN_ROOM_FAILED="JOIN_ROOM_FAILED",A.UPDATE_TOKEN_WITH_INVALID_TOKEN="UPDATE_TOKEN_WITH_INVALID_TOKEN",A.UPDATE_TOKEN_BEFORE_JOIN="UPDATE_TOKEN_BEFORE_JOIN",A.REPEAT_JOIN="REPEAT_JOIN",A.REPEAT_PUBLISH="REPEAT_PUBLISH",A.REPEAT_PUSH="REPEAT_PUSH",A.REPEAT_PLAY="REPEAT_PLAY",A.PUBLISH_BEFORE_JOIN="PUBLISH_BEFORE_JOIN",A.UNPUBLISH_BEFORE_JOIN="UNPUBLISH_BEFORE_JOIN",A.SUBSCRIBE_BEFORE_JOIN="SUBSCRIBE_BEFORE_JOIN",A.UNSUBSCRIBE_BEFORE_JOIN="UNSUBSCRIBE_BEFORE_JOIN",A.NO_PUBLISH_PERMISSION="NO_PUBLISH_PERMISSION",A.STREAM_NOT_EXIST="STREAM_NOT_EXIST",A.EMPTY_STREAM="EMPTY_STREAM",A.NOT_CONNECTED_YET="NOT_CONNECTED_YET",A.IM_BEFORE_JOIN="IM_BEFORE_JOIN",A.USER_NOT_EXIST="USER_NOT_EXIST",A.ALREADY_IN_ROOM="ALREADY_IN_ROOM",A.KICKED_OUT="KICKED_OUT",A.ROOM_DISMISS="ROOM_DISMISS",A.TOKEN_EXPIRED="TOKEN_EXPIRED",A.TOKEN_NO_PUBLISH_PERMISSION="TOKEN_NO_PUBLISH_PERMISSION",A.TOKEN_NO_SUBSCRIBE_PERMISSION="TOKEN_NO_SUBSCRIBE_PERMISSION",A.DUPLICATE_LOGIN="DUPLICATE_LOGIN",A.INVOKED_BEFORE_CAPTURE="INVOKED_BEFORE_CAPTURE",A.REPEAT_CAPTURE="REPEAT_CAPTURE",A.GET_VIDEO_TRACK_FAILED="GET_VIDEO_TRACK_FAILED",A.GET_AUDIO_TRACK_FAILED="GET_AUDIO_TRACK_FAILED",A.GET_SCREEN_TRACK_FAILED="GET_SCREEN_TRACK_FAILED",A.STREAM_TYPE_NOT_MATCH="STREAM_TYPE_NOT_MATCH",A.CANT_FIND_DOM="CANT_FIND_DOM",A.INVALID_DEVICE_ID="INVALID_DEVICE_ID",A.NO_PERMISSION="NO_PERMISSION",A.NOT_SUPPORTED="NOT_SUPPORTED",A.INTERRUPT="INTERRUPT",A.ICE_SERVER_WRONG="ICE_SERVER_WRONG",A.ESTABLISH_DATACHANNEL_FAILED="ESTABLISH_DATACHANNEL_FAILED",A.LOAD_RESOURCES_FAILED="LOAD_RESOURCES_FAILED",A.SIGNALING_CHANNEL_NOT_OPEN="SIGNALING_CHANNEL_NOT_OPEN",A.TIME_OUT="TIME_OUT",A.REFUSE_OPERATION_IN_DISCONNECT="REFUSE_OPERATION_IN_DISCONNECT",A.ADD_TRANSCEIVER_FAILED="ADD_TRANSCEIVER_FAILED",A.UPDATE_TRACK_FAILED="UPDATE_TRACK_FAILED",A.PUBLISH_FAILED="PUBLISH_FAILED",A.UNPUBLISH_FAILED="UNPUBLISH_FAILED",A.SUBSCRIBE_FAILED="SUBSCRIBE_FAILED",A.UNSUBSCRIBE_FAILED="UNSUBSCRIBE_FAILED",A.OPERATION_CANCEL="OPERATION_CANCEL",A.START_CLOUD_PROXY_AFTER_JOIN="START_CLOUD_PROXY_AFTER_JOIN",A.STOP_CLOUD_PROXY_BEFORE_LEAVE="STOP_CLOUD_PROXY_BEFORE_LEAVE",A.UNEXPECTED_ERROR="UNEXPECTED_ERROR",A.REPEAT_DEVICE_TEST="REPEAT_DEVICE_TEST",A.AUDIO_DEVICE_TEST_FAILED="AUDIO_DEVICE_RECORD_FAILED",A.ALREADY_LOGIN="ALREADY_LOGIN",A.LOGIN_FAILED="LOGIN_FAILED",A.NOT_LOGIN="NOT_LOGIN",A.RTM_DUPLICATE_LOGIN="RTM_DUPLICATE_LOGIN",A.RTM_TOKEN_ERROR="RTM_TOKEN_ERROR",A.USER_MESSAGE_TIMEOUT="USER_MESSAGE_TIMEOUT",A.USER_MESSAGE_BROKEN="USER_MESSAGE_BROKEN",A.USER_MESSAGE_NO_RECEIVER="USER_MESSAGE_NO_RECEIVER",A.USER_MESSAGE_NO_RELAYPATH="USER_MESSAGE_NO_RELAYPATH",A.USER_MESSAGE_EXCEED_QPS="USER_MESSAGE_EXCEED_QPS",A.USER_MESSAGE_SEND_TO_SERVER_ERROR="USER_MESSAGE_SEND_TO_SERVER_ERROR",A.USER_MESSAGE_SERVER_RESPONSE_ERROR="USER_MESSAGE_SERVER_RESPONSE_ERROR",A.USER_MESSAGE_NOT_JOIN="USER_MESSAGE_NOT_JOIN",A.USER_MESSAGE_INIT="USER_MESSAGE_INIT",A.USER_MESSAGE_NO_CONNECTION="USER_MESSAGE_NO_CONNECTION",A.USER_MESSAGE_NOT_LOGIN="USER_MESSAGE_NOT_LOGIN",A.USER_MESSAGE_SERVER_PARAMS_NOTSET="USER_MESSAGE_SERVER_PARAMS_NOTSET",A.USER_MESSAGE_UNKNOWN="USER_MESSAGE_UNKNOWN",A.START_PUBLIC_STREAM_BEFORE_JOIN="START_PUBLIC_STREAM_BEFORE_JOIN",A.RECONNECT_FAILED="RECONNECT_FAILED",A.SUBTITLE_ALREADY_ON="SUBTITLE_ALREADY_ON",A.SUBTITLE_NOT_TURNED_ON="SUBTITLE_NOT_TURNED_ON",A.SUBTITLE_ERR_POSTPROCESS="SUBTITLE_ERR_POSTPROCESS",A.SUBTITLE_ERR_CONNECTION_ERROR="SUBTITLE_ERR_CONNECTION_ERROR",A.SUBTITLE_ERR_PROCESS_ERROR="SUBTITLE_ERR_PROCESS_ERROR",A.SUBTITLE_ERR_UNKNOWN="SUBTITLE_ERR_UNKNOWN",A.UNEXPECTED_INVOKE_FORWARD_STREAM="UNEXPECTED_INVOKE_FORWARD_STREAM",A.ROOM_FORBIDDEN="ROOM_FORBIDDEN",A.USER_FORBIDDEN="USER_FORBIDDEN",A.ERR_ELECTRON_IS_NULL="ERR_ELECTRON_IS_NULL",A.ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR="ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR",A.SET_SIMULCAST_FAILED="SET_SIMULCAST_FAILED",A.MIXING_OLD_AND_NEW_APIS="MIXING_OLD_AND_NEW_APIS",A.WTN_PUSH_FAILED="WTN_PUSH_FAILED",A.WTN_PLAY_FAILED="WTN_PLAY_FAILED",A.NOT_ALLOWED_IN_RTS_ROOM="NOT_ALLOWED_IN_RTS_ROOM",A.NOT_ALLOWED_IN_RESTRICTED_MODE="NOT_ALLOWED_IN_RESTRICTED_MODE",A))(S||{}),zC=(A=>(A[A.AUDIO_MIXING_ERROR_OK=0]="AUDIO_MIXING_ERROR_OK",A[A.AUDIO_MIXING_ERROR_PRELOAD_FAILED=1]="AUDIO_MIXING_ERROR_PRELOAD_FAILED",A[A.AUDIO_MIXING_ERROR_START_FAILED=2]="AUDIO_MIXING_ERROR_START_FAILED",A[A.AUDIO_MIXING_ERROR_ID_NOT_FOUND=3]="AUDIO_MIXING_ERROR_ID_NOT_FOUND",A[A.AUDIO_MIXING_ERROR_SET_POSITION_FAILED=4]="AUDIO_MIXING_ERROR_SET_POSITION_FAILED",A[A.AUDIO_MIXING_ERROR_INVALID_VOLUME=5]="AUDIO_MIXING_ERROR_INVALID_VOLUME",A[A.AUDIO_MIXING_ERROR_LOAD_CONFLICT=6]="AUDIO_MIXING_ERROR_LOAD_CONFLICT",A[A.AUDIO_MIXING_ERROR_ID_TYPE_NOT_MATCH=7]="AUDIO_MIXING_ERROR_ID_TYPE_NOT_MATCH",A[A.AUDIO_MIXING_ERROR_ID_TYPE_INVALID_PITCH=8]="AUDIO_MIXING_ERROR_ID_TYPE_INVALID_PITCH",A[A.AUDIO_MIXING_ERROR_INVALID_AUDIO_TRACK=9]="AUDIO_MIXING_ERROR_INVALID_AUDIO_TRACK",A))(zC||{});class K extends Error{constructor(I,g,C){super(g),l(this,"code",void 0),l(this,"message",void 0),l(this,"error",void 0),this.code=I,this.message=g,this.error=C,Object.setPrototypeOf(this,K.prototype)}toString(){return"SDKError: ".concat(this.code," ").concat(this.message)}}var q=(A=>(A.onTrackEnded="onTrackEnded",A.onTrackMute="onTrackMute",A.onTrackUnmute="onTrackUnmute",A.onPlayerEvent="onPlayerEvent",A.onAutoplayFailed="onAutoplayFailed",A.onUserJoined="onUserJoined",A.onUserLeave="onUserLeave",A.onConnectionStateChanged="onConnectionStateChanged",A.onUserPublishStream="onUserPublishStream",A.onUserUnpublishStream="onUserUnpublishStream",A.onUserPublishScreen="onUserPublishScreen",A.onUserUnpublishScreen="onUserUnpublishScreen",A.onRoomMessageReceived="onRoomMessageReceived",A.onRoomBinaryMessageReceived="onRoomBinaryMessageReceived",A.onUserMessageReceived="onUserMessageReceived",A.onUserBinaryMessageReceived="onUserBinaryMessageReceived",A.onVideoFirstFrameRendered="onVideoFirstFrameRendered",A.onVideoFirstFrameDecoded="onVideoFirstFrameDecoded",A.onRemoteVideoFirstFrame="onRemoteVideoFirstFrame",A.onAudioFirstFrameDecoded="onAudioFirstFrameDecoded",A.onRemoteAudioFirstFrame="onRemoteAudioFirstFrame",A.onFirstPublicStreamVideoFrameRendered="onFirstPublicStreamVideoFrameRendered",A.onFirstPublicStreamVideoFrameDecoded="onFirstPublicStreamVideoFrameDecoded",A.onFirstPublicStreamAudioFrameDecoded="onFirstPublicStreamAudioFrameDecoded",A.onVideoDeviceStateChanged="onVideoDeviceStateChanged",A.onAudioDeviceStateChanged="onAudioDeviceStateChanged",A.onRemoteStreamStats="onRemoteStreamStats",A.onPublicStreamStats="onPublicStreamStats",A.onLocalStreamStats="onLocalStreamStats",A.onAudioVolumeIndication="onAudioVolumeIndication",A.onLocalAudioPropertiesReport="onLocalAudioPropertiesReport",A.onRemoteAudioPropertiesReport="onRemoteAudioPropertiesReport",A.onActiveSpeaker="onActiveSpeaker",A.onAudioPlaybackDeviceChanged="onAudioPlaybackDeviceChanged",A.onUserStartVideoCapture="onUserStartVideoCapture",A.onUserStopVideoCapture="onUserStopVideoCapture",A.onUserStartAudioCapture="onUserStartAudioCapture",A.onUserStopAudioCapture="onUserStopAudioCapture",A.onAutoPublishResult="onAutoPublishResult",A.onAutoSubscribeResult="onAutoSubscribeResult",A.onLiveTranscodingResult="onLiveTranscodingResult",A.onStreamMixingEvent="onStreamMixingEvent",A.onAudioPlaybackDeviceTestVolume="onAudioPlaybackDeviceTestVolume",A.onSEIMessageReceived="onSEIMessageReceived",A.onError="onError",A.onAudioMixingStateChanged="onAudioMixingStateChanged",A.onUserMessageReceivedOutsideRoom="onUserMessageReceivedOutsideRoom",A.onUserBinaryMessageReceivedOutsideRoom="onUserBinaryMessageReceivedOutsideRoom",A.onTokenWillExpire="onTokenWillExpire",A.onTokenPublishPrivilegeWillExpire="onTokenPublishPrivilegeWillExpire",A.onTokenPublishPrivilegeDidExpired="onTokenPublishPrivilegeDidExpired",A.onTokenSubscribePrivilegeWillExpire="onTokenSubscribePrivilegeWillExpire",A.onTokenSubscribePrivilegeDidExpired="onTokenSubscribePrivilegeDidExpired",A.onCloudProxyConnected="onCloudProxyConnected",A.onPushPublicStreamResult="onPushPublicStreamResult",A.onPublicStreamSEIMessageReceived="onPublicStreamSEIMessageReceived",A.onNetworkQuality="onNetworkQuality",A.onSimulcastSubscribeFallback="onSimulcastSubscribeFallback",A.onRemoteVideoSizeChanged="onRemoteVideoSizeChanged",A.onVideoStreamBanned="onVideoStreamBanned",A.onAudioStreamBanned="onAudioStreamBanned",A.onLocalVideoSizeChanged="onLocalVideoSizeChanged",A.onSubtitleStateChanged="onSubtitleStateChanged",A.onSubtitleMessageReceived="onSubtitleMessageReceived",A.onServerParamsSetResult="onServerParamsSetResult",A.onLocalStreamTrackChangedByExtension="onLocalStreamTrackChangedByExtension",A.onVendorConnectionStateChanged="onVendorConnectionStateChanged",A.onForwardStreamError="onForwardStreamError",A.onRejoinWithTcp="onRejoinWithTcp",A.onIceConnectWithTcp="onIceConnectWithTcp",A.onPublishRetry="onPublishRetry",A.onSubscribeRetry="onSubscribeRetry",A.onPublishResult="onPublishResult",A.onSubscribeResult="onSubscribeResult",A.onSEIStreamUpdate="onSEIStreamUpdate",A))(q||{});function wD(A,I){if(typeof A!="boolean")throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,": The value should be boolean type."))}const Aj=()=>!pe()&&typeof HTMLVideoElement.prototype.requestVideoFrameCallback=="function";function Tt(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;if(AC||typeof A!="number")throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,": the value range is [").concat(g,", ").concat(C,"]. integer only"))}function EI(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;if(A==null)throw new K(S.INVALID_PARAMS,"".concat(I," cannot be empty"));if(!Z9A(A,g,C))throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,": The value should be string type. Length of the string: [").concat(g,",").concat(C,"]"))}function gI(A,I,g){if(!g.includes(A))throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,": The value can only be set as ").concat(JSON.stringify(g)))}function Jk(A){if(!(A instanceof MediaStreamTrack))throw new K(S.INVALID_PARAMS,"Invalid track, The value should be MediaStreamTrack type.")}function Od(A,I){if(si(A))throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,", should not be empty"))}function N9A(A,I){if(!Array.isArray(A))throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,", should be array"))}function GD(A,I){if(!(A instanceof ArrayBuffer))throw new K(S.INVALID_PARAMS,"Invalid ".concat(I,", should be ArrayBuffer"))}function eG(A){try{const I=navigator.mediaDevices.getSupportedConstraints();for(const g of Object.keys(A))I[g]||delete A[g]}catch{}}function Z9A(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.POSITIVE_INFINITY;return typeof A=="string"&&A.length<=g&&A.length>=I}function si(A){return A==null}function Ul(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new K(S.INVALID_PARAMS,"The RoomId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function XC(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new K(S.INVALID_PARAMS,"The userId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function An(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new K(S.INVALID_PARAMS,"The publicStreamId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function K9A(A){return typeof A!="string"}function W9A(A){Od(A,"userInfo"),XC(A.userId),si(A.extraInfo)||EI(A.extraInfo,"userInfo.extraInfo",1,200)}function J9A(A){Od(A,"roomConfig"),wD(A.isAutoPublish,"roomConfig.isAutoPublish"),wD(A.isAutoSubscribeAudio,"roomConfig.isAutoSubscribeAudio"),wD(A.isAutoSubscribeVideo,"roomConfig.isAutoSubscribeVideo"),si(A.roomProfileType)||gI(A.roomProfileType,"roomConfig",[LC.communication,LC.chat,LC.chatRoom,LC.coHost,LC.meeting,LC.classRoom])}function Vk(A){Od(A,"videoPlayerOption")}function V9A(A){var I,g;let C,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:64;if(!A||(A==null?void 0:A.byteLength)===0)throw new K(S.INVALID_PARAMS,"The message cannot be empty");if(A instanceof ArrayBuffer)C=A;else{if(typeof A!="string")throw new K(S.INVALID_PARAMS,"The message must be string or ArrayBuffer");C=Pg.str2ab(A)}if(((I=C)===null||I===void 0?void 0:I.byteLength)>1024*Q)throw new K(S.INVALID_PARAMS,"The message length must be less than ".concat(Q,"KB"));return(g=C.byteLength)!==null&&g!==void 0?g:0}function z9A(A){const I=yA("FORCE_ENABLED_REPORT_CALLBACKS");return I!=null&&I.includes(A)||A===q.onRemoteStreamStats&&yA("UPLOAD_REMOTE_STATS")?!0:![q.onRemoteStreamStats,q.onLocalStreamStats,q.onAudioVolumeIndication,q.onLocalAudioPropertiesReport,q.onRemoteAudioPropertiesReport].includes(A)}function M9A(A){if(typeof(A==null?void 0:A.width)!="number"||typeof(A==null?void 0:A.height)!="number")throw new K(S.INVALID_PARAMS,"remoteVideoConfig must contain width, height, frameRate")}function RD(A,I){if(typeof A=="number"&&!Number.isNaN(A)&&A>=1)return;const g=A;if(!(g!=null&&g.min||g!=null&&g.max||g!=null&&g.exact||g!=null&&g.ideal))throw new K(S.INVALID_PARAMS,"".concat(I," is not a valid ConstrainULong"))}function LD(A){N9A(A,"videoEncoderConfig");for(const I of A)Od(I,"videoEncoderConfigItem"),Tt(I==null?void 0:I.maxKbps,"maxKbps"),RD(I==null?void 0:I.width,"width"),RD(I==null?void 0:I.height,"height"),RD(I==null?void 0:I.frameRate,"frameRate")}function Q9(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.NEGATIVE_INFINITY,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;return Tt(A,I,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY),A=(A=A>g?A:g)(A[A.NONE=0]="NONE",A))(GQ||{});const j9A="rtc-access-ag.bytedance.com,rtc-access.bytedance.com,rtc-access2-hl.bytedance.com,rtcg-access.bytevcloud.com".split(",");function Ij(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return A?(/^https?:\/\/.+/.test(A)||(A="https://".concat(A)),"".concat(A,"/dispatch/v1/AccessInfo?Action=GetAccessInfo")):""}function X9A(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return A?(/^https?:\/\/.+/.test(A)||(A="https://".concat(A)),"".concat(A,"/video/v1/webrtc_log/")):""}const gj="https://web-log-report.rtc.volcvideo.com/video/v1/webrtc_log/",H9A="https://web-log-report.volcvideos.com/video/v1/webrtc_log/",x9A="common.rtc.volcvideo.com,rtcg.volcvideos.com".split(","),fA={VERSION:"4.66.5",ICE_CONFIG_REQUEST_URLS_INTERNAL:j9A.map(Ij),ICE_CONFIG_REQUEST_URLS:[],EXPECTED_ADDR:"",LOG_SERVER_URL:gj,CONFIG_REQUEST_DOMAINS:x9A,DEVICE_ID:"",OVERSEA:!1,PLATFORM:"",PRODUCT:"",FORCE_ENABLED_REPORT_CALLBACKS:[],SKIP_WEB_AUDIO_IN_TRACK:!1,ENFORCE_WEB_AUDIO_SUPPORTED:!1,AUDIO_STALL:!0,VIDEO_STALL:!0,VIDEO_STALL_100MS:!1,STATS_SCALLBACK_SUPPORT:!0,JOIN_ROOM_CONFIG:Qi.DEFAULT_CONF,SIGNAL_COMPRESSION:!0,SIGNAL_CROP_JOINROOM:!0,VIDEO_STALL_DATA:500,AUDIO_STALL_DATA:200,IOS_SAFARI_ORIENTATION:!1,BLACK_FRAME_LIFETIME:6e4,FALLBACK_ENCODE_CODEC:"",SEI_TIME_OUT:2e3,SEI_COUNT_FPS:1,PRE_ICE:!1,STATS_LOOP_INTERVAL:1e3,HIDDEN_STATS:!1,UPLOAD_REMOTE_STATS:GQ.NONE,SDK_CODEC_NEGOTIATION:!0,AUDIO_CODEC:"OPUS",DISABLE_ENCODED_TRANSFORM:!1,SKIP_SEI_FILTER:!1,AREA_CODE:"",DISABLE_COMPUTE_PRESSURE:!1,SEND_MESSAGE_SYNC:!1,H264_HW_ENCODER:!1};function DQ(A,I){if(Hf("setParameter",0,"key: ".concat(A,", value: ").concat(I)),A!=="VERSION"){if(A==="H264_HW_ENCODER"){const g=RTCPeerConnection.prototype.setRemoteDescription;return void(RTCPeerConnection.prototype.setRemoteDescription=function(C){var Q;return g.call(this,{type:C.type,sdp:(Q=C.sdp)===null||Q===void 0?void 0:PsA(Q).call(Q,"42e01f","42001f")})})}if(A==="JOIN_ROOM_CONFIG")return Qi.setDefaulConf(I);if(A==="ICE_CONFIG_REQUEST_URLS"){const g=typeof I=="string"?[I]:I;return fA.ICE_CONFIG_REQUEST_URLS=g.map(Ij),oI.clearAccessUrls(),void oI.clearAccessNode()}if(A==="VIDEO_STALL_DATA")return void(fA.VIDEO_STALL_DATA=Math.max(500,Number(I)));if(A==="AUDIO_STALL_DATA")return void(fA.AUDIO_STALL_DATA=Math.max(200,Number(I)));if(A==="VIDEO_STALL_100MS")return void(fA.VIDEO_STALL_100MS=Aj()&&!!I);if(A==="PLATFORM"&&typeof I=="string")return void $a({platform:I});if(A==="PRODUCT"&&typeof I=="string")return void $a({product:I});if(A==="FORCE_ENABLED_REPORT_CALLBACKS"){const g=typeof I=="string"?[I]:I;return void(fA.FORCE_ENABLED_REPORT_CALLBACKS=g)}if(A==="LOG_SERVER_URL"){const g=I===qw.overseas?H9A:I===qw.domestic?gj:typeof I=="string"?I:void 0;g&&(fA.LOG_SERVER_URL=g,Xf(g))}else if(A==="OVERSEA")return $a({extra_is_oversea:I?"1":"0"}),void(fA.OVERSEA=I);if(A==="CONFIG_REQUEST_DOMAINS"&&Array.isArray(I)&&I.length>0)return void(fA.CONFIG_REQUEST_DOMAINS=I);if(!(A==="SEI_TIME_OUT"&&typeof I!="number")&&!(A==="SEI_COUNT_FPS"&&typeof I!="number")){if(A==="UPLOAD_REMOTE_STATS"&&typeof I=="string"){const g=I.split(",").map(C=>QE(C).call(C)).reduce((C,Q)=>Q==="video"?C|sA.VIDEO:Q==="audio"?C|sA.AUDIO:C,GQ.NONE);return void(fA.UPLOAD_REMOTE_STATS=g)}if(A==="AINR_URLS"&&typeof I=="string")try{const{gulpUrl:g,wasmUrl:C,type5ModelUrl:Q,type6ModelUrl:i}=JSON.parse(I);return void(fA.AINR_URLS={gulpUrl:g,wasmUrl:C,type5ModelUrl:Q,type6ModelUrl:i})}catch(g){console.error(g)}A==="DEVICE_ID"&&oI.setDeviceId(I),xi.getKeys().includes(A)?xi.setParameter(A,I):Reflect.set(fA,A,I)}}}function yA(A){return A==="DEVICE_ID"?oI.getDeviceId():fA[A]}function zk(A,I,g){var C,Q,i,B,E,e,t,o;return{type:"publicstream",action:I,publicStreamID:A,publicStreamMeta:{audio:{},video:{fps:((C=g.video)===null||C===void 0?void 0:C.fps)||15,bitrate:1e3*(((Q=g.video)===null||Q===void 0?void 0:Q.kBitRate)||40),width:((i=g.video)===null||i===void 0?void 0:i.width)||640,height:((B=g.video)===null||B===void 0?void 0:B.height)||360},layout:{layoutMode:2,interpolationMode:((E=g.layout)===null||E===void 0?void 0:E.interpolationMode)||ZM.PREV_FRAME,canvas:{bgColor:((e=g.layout)===null||e===void 0?void 0:e.backgroundColor)||"#000000",bgImage:((t=g.layout)===null||t===void 0?void 0:t.backgroundImage)||""},regions:((o=g.layout)===null||o===void 0||(o=o.regions)===null||o===void 0?void 0:o.map(r=>({roomId:r.roomId,userId:r.userId,alterImage:r.alertImage||"",alpha:!r.alpha||Number(r.alpha)>1||Number(r.alpha)<=0?1:Number(r.alpha),x:!r.x||Number(r.x)>=1||Number(r.x)<0?0:Number(r.x),y:!r.y||Number(r.y)>=1||Number(r.y)<0?0:Number(r.y),w:!r.w||Number(r.w)>1||Number(r.w)<=0?1:Number(r.w),h:!r.h||Number(r.h)>1||Number(r.h)<=0?1:Number(r.h),zorder:!r.zorder||Number(r.zorder)<0||Number(r.zorder)>100?0:Number(r.zorder),renderMode:r.renderMode===void 0?1:r.renderMode,streamType:r.isScreenStream?1:0,mediaType:r.mediaType||0,sourceCrop:r.sourceCrop})))||[]}}}}let Cj=[];function O9A(){return Cj}function Qj(A){Cj=A}const q9A=(A,I)=>{const g=O9A();if(!g.length)return;const C=A[0],Q=I.width||QI(C.width),i=I.height||QI(C.height),B=Q*i;if(QI(C.width)*QI(C.height)<=B)return;let E,e,t=g[0];g.forEach(r=>{const s=QI(r.width)*QI(r.height);E||(B!(e&&QI(r.width)*QI(r.height)>=B)||(e.maxKbps=Math.min(r.maxKbps,e.maxKbps),!1));return o.unshift({width:Q,height:i,frameRate:I.frameRate?Math.round(I.frameRate):o[0].frameRate,maxKbps:e.maxKbps}),o},kl={width:640,height:480,frameRate:15,maxKbps:600},_9A={width:1920,height:1080,frameRate:15,maxKbps:3e3};let Yl;const $9A=new Uint8Array(16);function A0A(){if(!Yl&&(Yl=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Yl))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Yl($9A)}const zg=[];for(let A=0;A<256;++A)zg.push((A+256).toString(16).slice(1));function I0A(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return zg[A[I+0]]+zg[A[I+1]]+zg[A[I+2]]+zg[A[I+3]]+"-"+zg[A[I+4]]+zg[A[I+5]]+"-"+zg[A[I+6]]+zg[A[I+7]]+"-"+zg[A[I+8]]+zg[A[I+9]]+"-"+zg[A[I+10]]+zg[A[I+11]]+zg[A[I+12]]+zg[A[I+13]]+zg[A[I+14]]+zg[A[I+15]]}const g0A=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);var SD,Mk={randomUUID:g0A};function C0A(A,I,g){if(Mk.randomUUID&&!A)return Mk.randomUUID();const C=(A=A||{}).random||(A.rng||A0A)();return C[6]=15&C[6]|64,C[8]=63&C[8]|128,I0A(C)}const Q0A=new TextDecoder,i0A=new TextEncoder,cE=()=>C0A(),dA=()=>Date.now();function ij(A){let I=0;for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;QQ!==null).join(":"))}static merge(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(const[C,Q]of Object.entries(I))Q!==null&&typeof Q=="object"?Pg.merge(I[C],g[C]):g[C]!==void 0&&(I[C]=g[C])}static ab2str(I){return Q0A.decode(I)}static ab2obj(I){try{const g=Pg.ab2str(I);return JSON.parse(g)}catch{return{}}}static str2ab(I){return i0A.encode(I).buffer}static async ab2b64str(I){if(yA("SEND_MESSAGE_SYNC")){const g=String.fromCharCode.apply(null,new Uint8Array(I));return window.btoa(g)}return(await new Promise(g=>{const C=new FileReader;C.onload=()=>g(C.result),C.readAsDataURL(new Blob([I]))})).split(",",2)[1]}static async b64str2ab(I,g){return fetch("data:application/octet;base64,".concat(I)).then(C=>C.arrayBuffer()).catch(C=>{throw g&&g.report("rtc_error",{error_code:2001,message:"".concat(C.message," -> ").concat(I)}),C})}}function Bj(A){return new Promise(I=>{setTimeout(I,A)})}function fk(){const A=Number("".concat(Math.random()).slice(-7).padEnd(7,"0")).toString(2).padEnd(28,"1").split(""),I=[];for(;A.length;)I.push(A.splice(0,7));return I.map((g,C)=>{const Q=C===I.length-1?"0":"1";return Number.parseInt(Q+g.join(""),2)})}const zn=()=>Math.floor(65535*Math.random());function B0A(A){return!(128&~A)}function TD(A){return typeof A=="string"&&A.indexOf("__web__rtc__rtt__")>-1}function E0A(A){let I="";for(let g=0;g0&&arguments[0]!==void 0&&arguments[0];if(pD)return pD;const I=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});I.createDataChannel("default"),I.addTransceiver("audio",{direction:"recvonly"}),I.addTransceiver("video",{direction:"recvonly"}),A&&(I.addTransceiver("audio",{direction:"sendonly"}),I.addTransceiver("video",{direction:"sendonly"}));const g=await I.createOffer();return I.close(),pD=g.sdp,g.sdp},t0A=A=>new Promise((I,g)=>{let C=(A=Array.isArray(A)?A:[]).length;const Q=[];C===0?g([]):A.forEach(i=>{i.then(B=>{I(B)},B=>{C--,Q.push(B),C===0&&g(Q)})})});function Xv(A){return Number(Math.max(-127,10*Math.log10(Math.pow(A/255,2))).toFixed(2))}function lg(A){return(A&sA.AUDIO)===sA.AUDIO}function vI(A){return(A&sA.VIDEO)===sA.VIDEO}function xC(A){const I={};return Object.keys(A).forEach(g=>{typeof A[g]=="object"?I[g]=xC(A[g]):g.startsWith("_")&&!yA("HIDDEN_STATS")||(I[g]=A[g])}),I}function o0A(A){const I=new DataView(A.buffer);if(I.byteLength<=4||I.getUint16(0)!==65535)return{seiCount:1,seis:[A]};const g={seiCount:0,seis:[]};let C=!1,Q=2;for(;Q0&&I.byteLength-Q<=2){C=!0;break}g.seiCount++,g.seis.push(B)}return C&&(g.seiCount=1,g.seis=[A]),g}function DB(A){return A===void 0}function jk(A){return function(I,g,C){const Q=C.value;C.value=function(){console.warn("[RTC WebSDK]: Api: ".concat(g," has been abandoned from version ").concat(A));for(var i=arguments.length,B=new Array(i),E=0;ENumber.MAX_SAFE_INTEGER&&(this._id=0),this._id}}function v0A(A){const I={};return Object.keys(A).forEach(g=>{A[g]!==void 0&&(I[g]=A[g])}),I}const qd=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||!((SD=window.localStorage)===null||SD===void 0||!SD.getItem("_rtc_debug_")));function a0A(A){const I=atob(A),g=I.length,C=new Uint8Array(g);for(let Q=0;Q{if(g==="peerIdentity")return!1;try{return typeof A[g]=="function"||A[g]===void 0}catch{return!1}}).map(g=>({obj:A,prefix:I,attr:g})):[]}function l0A(A,I){try{return A[I].toString().includes("[native code]")?"native":"non-native"}catch{return"untouchable"}}const Ej=(typeof window<"u"?[[(FD=window.RTCPeerConnection)===null||FD===void 0?void 0:FD.prototype,"RTCPeerConnection.prototype"],[window.RTCPeerConnection,"RTCPeerConnection"],[(UD=window.RTCDataChannel)===null||UD===void 0?void 0:UD.prototype,"RTCDataChannel.prototype"],[window.RTCDataChannel,"RTCDataChannel"],[(kD=window.MediaStreamTrack)===null||kD===void 0?void 0:kD.prototype,"MediaStreamTrack.prototype"],[window.MediaStreamTrack,"MediaStreamTrack"],[(YD=window.MediaStream)===null||YD===void 0?void 0:YD.prototype,"MediaStream.prototype"],[window.MediaStream,"MediaStream"],[(ND=window.HTMLAudioElement)===null||ND===void 0?void 0:ND.prototype,"HTMLAudioElement.prototype"],[(ZD=window.HTMLVideoElement)===null||ZD===void 0?void 0:ZD.prototype,"HTMLVideoElement.prototype"],[(KD=window.HTMLMediaElement)===null||KD===void 0?void 0:KD.prototype,"HTMLMediaElement.prototype"],[(WD=(JD=window.AudioContext)===null||JD===void 0?void 0:JD.prototype)!==null&&WD!==void 0?WD:(VD=window.webkitAudioContext)===null||VD===void 0?void 0:VD.prototype,"AudioContext.prototype"],[(zD=window.BaseAudioContext)===null||zD===void 0?void 0:zD.prototype,"BaseAudioContext.prototype"],[(MD=window.AudioNode)===null||MD===void 0?void 0:MD.prototype,"AudioNode.prototype"],[window.navigator.mediaDevices,"navigator.mediaDevices"],[window.console,"console"]]:[]).reduce((A,I)=>{let[g,C]=I;return A.concat(c0A(g,C))},[]);typeof window<"u"&&Ej.push({obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getUserMedia"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getDisplayMedia"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"enumerateDevices"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getSupportedConstraints"});for(const{obj:A,prefix:I,attr:g}of Ej){const C="".concat(I,".").concat(g);_d[C]=l0A(A,g)}qd&&console.log("RTC_AMBULANCE",_d);const Xk=Object.entries(_d).filter(A=>{let[I,g]=A;return g==="non-native"}).map(A=>{let[I,g]=A;return I});Object.keys(Xk).length&&console.warn("RTC_AMBULANCE",`have non-native code: +`,Xk.join(` +`));let ej=!0,tj=!0;function i9(A,I,g){const C=A.match(I);return C&&C.length>=g&&parseInt(C[g],10)}function co(A,I,g){if(!A.RTCPeerConnection)return;const C=A.RTCPeerConnection.prototype,Q=C.addEventListener;C.addEventListener=function(B,E){if(B!==I)return Q.apply(this,arguments);const e=t=>{const o=g(t);o&&(E.handleEvent?E.handleEvent(o):E(o))};return this._eventMap=this._eventMap||{},this._eventMap[I]||(this._eventMap[I]=new Map),this._eventMap[I].set(E,e),Q.apply(this,[B,e])};const i=C.removeEventListener;C.removeEventListener=function(B,E){if(B!==I||!this._eventMap||!this._eventMap[I])return i.apply(this,arguments);if(!this._eventMap[I].has(E))return i.apply(this,arguments);const e=this._eventMap[I].get(E);return this._eventMap[I].delete(E),this._eventMap[I].size===0&&delete this._eventMap[I],Object.keys(this._eventMap).length===0&&delete this._eventMap,i.apply(this,[B,e])},Object.defineProperty(C,"on"+I,{get(){return this["_on"+I]},set(B){this["_on"+I]&&(this.removeEventListener(I,this["_on"+I]),delete this["_on"+I]),B&&this.addEventListener(I,this["_on"+I]=B)},enumerable:!0,configurable:!0})}function P0A(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(ej=A,A?"adapter.js logging disabled":"adapter.js logging enabled")}function d0A(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(tj=!A,"adapter.js deprecation warnings "+(A?"disabled":"enabled"))}function oj(){if(typeof window=="object"){if(ej)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function cS(A,I){tj&&console.warn(A+" is deprecated, please use "+I+" instead.")}function h0A(A){const I={browser:null,version:null};if(A===void 0||!A.navigator||!A.navigator.userAgent)return I.browser="Not a browser.",I;const{navigator:g}=A;if(g.mozGetUserMedia)I.browser="firefox",I.version=i9(g.userAgent,/Firefox\/(\d+)\./,1);else if(g.webkitGetUserMedia||A.isSecureContext===!1&&A.webkitRTCPeerConnection)I.browser="chrome",I.version=i9(g.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else{if(!A.RTCPeerConnection||!g.userAgent.match(/AppleWebKit\/(\d+)\./))return I.browser="Not a supported browser.",I;I.browser="safari",I.version=i9(g.userAgent,/AppleWebKit\/(\d+)\./,1),I.supportsUnifiedPlan=A.RTCRtpTransceiver&&"currentDirection"in A.RTCRtpTransceiver.prototype}return I}function Hk(A){return Object.prototype.toString.call(A)==="[object Object]"}function rj(A){return Hk(A)?Object.keys(A).reduce(function(I,g){const C=Hk(A[g]),Q=C?rj(A[g]):A[g],i=C&&!Object.keys(Q).length;return Q===void 0||i?I:Object.assign(I,{[g]:Q})},{}):A}function tG(A,I,g){I&&!g.has(I.id)&&(g.set(I.id,I),Object.keys(I).forEach(C=>{C.endsWith("Id")?tG(A,A.get(I[C]),g):C.endsWith("Ids")&&I[C].forEach(Q=>{tG(A,A.get(Q),g)})}))}function xk(A,I,g){const C=g?"outbound-rtp":"inbound-rtp",Q=new Map;if(I===null)return Q;const i=[];return A.forEach(B=>{B.type==="track"&&B.trackIdentifier===I.id&&i.push(B)}),i.forEach(B=>{A.forEach(E=>{E.type===C&&E.trackId===B.id&&tG(A,E,Q)})}),Q}const Ok=oj;function sj(A,I){const g=A&&A.navigator;if(!g.mediaDevices)return;const C=function(B){if(typeof B!="object"||B.mandatory||B.optional)return B;const E={};return Object.keys(B).forEach(e=>{if(e==="require"||e==="advanced"||e==="mediaSource")return;const t=typeof B[e]=="object"?B[e]:{ideal:B[e]};t.exact!==void 0&&typeof t.exact=="number"&&(t.min=t.max=t.exact);const o=function(r,s){return r?r+s.charAt(0).toUpperCase()+s.slice(1):s==="deviceId"?"sourceId":s};if(t.ideal!==void 0){E.optional=E.optional||[];let r={};typeof t.ideal=="number"?(r[o("min",e)]=t.ideal,E.optional.push(r),r={},r[o("max",e)]=t.ideal,E.optional.push(r)):(r[o("",e)]=t.ideal,E.optional.push(r))}t.exact!==void 0&&typeof t.exact!="number"?(E.mandatory=E.mandatory||{},E.mandatory[o("",e)]=t.exact):["min","max"].forEach(r=>{t[r]!==void 0&&(E.mandatory=E.mandatory||{},E.mandatory[o(r,e)]=t[r])})}),B.advanced&&(E.optional=(E.optional||[]).concat(B.advanced)),E},Q=function(B,E){if(I.version>=61)return E(B);if((B=JSON.parse(JSON.stringify(B)))&&typeof B.audio=="object"){const e=function(t,o,r){o in t&&!(r in t)&&(t[r]=t[o],delete t[o])};e((B=JSON.parse(JSON.stringify(B))).audio,"autoGainControl","googAutoGainControl"),e(B.audio,"noiseSuppression","googNoiseSuppression"),B.audio=C(B.audio)}if(B&&typeof B.video=="object"){let e=B.video.facingMode;e=e&&(typeof e=="object"?e:{ideal:e});const t=I.version<66;if(e&&(e.exact==="user"||e.exact==="environment"||e.ideal==="user"||e.ideal==="environment")&&(!g.mediaDevices.getSupportedConstraints||!g.mediaDevices.getSupportedConstraints().facingMode||t)){let o;if(delete B.video.facingMode,e.exact==="environment"||e.ideal==="environment"?o=["back","rear"]:e.exact!=="user"&&e.ideal!=="user"||(o=["front"]),o)return g.mediaDevices.enumerateDevices().then(r=>{let s=(r=r.filter(v=>v.kind==="videoinput")).find(v=>o.some(n=>v.label.toLowerCase().includes(n)));return!s&&r.length&&o.includes("back")&&(s=r[r.length-1]),s&&(B.video.deviceId=e.exact?{exact:s.deviceId}:{ideal:s.deviceId}),B.video=C(B.video),Ok("chrome: "+JSON.stringify(B)),E(B)})}B.video=C(B.video)}return Ok("chrome: "+JSON.stringify(B)),E(B)},i=function(B){return I.version>=64?B:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[B.name]||B.name,message:B.message,constraint:B.constraint||B.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(g.getUserMedia=(function(B,E,e){Q(B,t=>{g.webkitGetUserMedia(t,E,o=>{e&&e(i(o))})})}).bind(g),g.mediaDevices.getUserMedia){const B=g.mediaDevices.getUserMedia.bind(g.mediaDevices);g.mediaDevices.getUserMedia=function(E){return Q(E,e=>B(e).then(t=>{if(e.audio&&!t.getAudioTracks().length||e.video&&!t.getVideoTracks().length)throw t.getTracks().forEach(o=>{o.stop()}),new DOMException("","NotFoundError");return t},t=>Promise.reject(i(t))))}}}function u0A(A,I){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(typeof I=="function"?A.navigator.mediaDevices.getDisplayMedia=function(g){return I(g).then(C=>{const Q=g.video&&g.video.width,i=g.video&&g.video.height,B=g.video&&g.video.frameRate;return g.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:C,maxFrameRate:B||3}},Q&&(g.video.mandatory.maxWidth=Q),i&&(g.video.mandatory.maxHeight=i),A.navigator.mediaDevices.getUserMedia(g)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}function vj(A){A.MediaStream=A.MediaStream||A.webkitMediaStream}function aj(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("ontrack"in A.RTCPeerConnection.prototype)){Object.defineProperty(A.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(g){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=g)},enumerable:!0,configurable:!0});const I=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=g=>{g.stream.addEventListener("addtrack",C=>{let Q;Q=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(B=>B.track&&B.track.id===C.track.id):{track:C.track};const i=new Event("track");i.track=C.track,i.receiver=Q,i.transceiver={receiver:Q},i.streams=[g.stream],this.dispatchEvent(i)}),g.stream.getTracks().forEach(C=>{let Q;Q=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(B=>B.track&&B.track.id===C.id):{track:C};const i=new Event("track");i.track=C,i.receiver=Q,i.transceiver={receiver:Q},i.streams=[g.stream],this.dispatchEvent(i)})},this.addEventListener("addstream",this._ontrackpoly)),I.apply(this,arguments)}}else co(A,"track",I=>(I.transceiver||Object.defineProperty(I,"transceiver",{value:{receiver:I.receiver}}),I))}function nj(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("getSenders"in A.RTCPeerConnection.prototype)&&"createDTMFSender"in A.RTCPeerConnection.prototype){const I=function(Q,i){return{track:i,get dtmf(){return this._dtmf===void 0&&(i.kind==="audio"?this._dtmf=Q.createDTMFSender(i):this._dtmf=null),this._dtmf},_pc:Q}};if(!A.RTCPeerConnection.prototype.getSenders){A.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(B,E){let e=Q.apply(this,arguments);return e||(e=I(this,B),this._senders.push(e)),e};const i=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(B){i.apply(this,arguments);const E=this._senders.indexOf(B);E!==-1&&this._senders.splice(E,1)}}const g=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(Q){this._senders=this._senders||[],g.apply(this,[Q]),Q.getTracks().forEach(i=>{this._senders.push(I(this,i))})};const C=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(Q){this._senders=this._senders||[],C.apply(this,[Q]),Q.getTracks().forEach(i=>{const B=this._senders.find(E=>E.track===i);B&&this._senders.splice(this._senders.indexOf(B),1)})}}else if(typeof A=="object"&&A.RTCPeerConnection&&"getSenders"in A.RTCPeerConnection.prototype&&"createDTMFSender"in A.RTCPeerConnection.prototype&&A.RTCRtpSender&&!("dtmf"in A.RTCRtpSender.prototype)){const I=A.RTCPeerConnection.prototype.getSenders;A.RTCPeerConnection.prototype.getSenders=function(){const g=I.apply(this,[]);return g.forEach(C=>C._pc=this),g},Object.defineProperty(A.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function cj(A){if(!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[g,C,Q]=arguments;if(arguments.length>0&&typeof g=="function")return I.apply(this,arguments);if(I.length===0&&(arguments.length===0||typeof g!="function"))return I.apply(this,[]);const i=function(E){const e={};return E.result().forEach(t=>{const o={id:t.id,timestamp:t.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[t.type]||t.type};t.names().forEach(r=>{o[r]=t.stat(r)}),e[o.id]=o}),e},B=function(E){return new Map(Object.keys(E).map(e=>[e,E[e]]))};if(arguments.length>=2){const E=function(e){C(B(i(e)))};return I.apply(this,[E,g])}return new Promise((E,e)=>{I.apply(this,[function(t){E(B(i(t)))},e])}).then(C,Q)}}function lj(A){if(!(typeof A=="object"&&A.RTCPeerConnection&&A.RTCRtpSender&&A.RTCRtpReceiver))return;if(!("getStats"in A.RTCRtpSender.prototype)){const g=A.RTCPeerConnection.prototype.getSenders;g&&(A.RTCPeerConnection.prototype.getSenders=function(){const Q=g.apply(this,[]);return Q.forEach(i=>i._pc=this),Q});const C=A.RTCPeerConnection.prototype.addTrack;C&&(A.RTCPeerConnection.prototype.addTrack=function(){const Q=C.apply(this,arguments);return Q._pc=this,Q}),A.RTCRtpSender.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(i=>xk(i,Q.track,!0))}}if(!("getStats"in A.RTCRtpReceiver.prototype)){const g=A.RTCPeerConnection.prototype.getReceivers;g&&(A.RTCPeerConnection.prototype.getReceivers=function(){const C=g.apply(this,[]);return C.forEach(Q=>Q._pc=this),C}),co(A,"track",C=>(C.receiver._pc=C.srcElement,C)),A.RTCRtpReceiver.prototype.getStats=function(){const C=this;return this._pc.getStats().then(Q=>xk(Q,C.track,!1))}}if(!("getStats"in A.RTCRtpSender.prototype)||!("getStats"in A.RTCRtpReceiver.prototype))return;const I=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof A.MediaStreamTrack){const g=arguments[0];let C,Q,i;return this.getSenders().forEach(B=>{B.track===g&&(C?i=!0:C=B)}),this.getReceivers().forEach(B=>(B.track===g&&(Q?i=!0:Q=B),B.track===g)),i||C&&Q?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):C?C.getStats():Q?Q.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return I.apply(this,arguments)}}function Pj(A){A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(i=>this._shimmedLocalStreams[i][0])};const I=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(i,B){if(!B)return I.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const E=I.apply(this,arguments);return this._shimmedLocalStreams[B.id]?this._shimmedLocalStreams[B.id].indexOf(E)===-1&&this._shimmedLocalStreams[B.id].push(E):this._shimmedLocalStreams[B.id]=[B,E],E};const g=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(i){this._shimmedLocalStreams=this._shimmedLocalStreams||{},i.getTracks().forEach(e=>{if(this.getSenders().find(t=>t.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const B=this.getSenders();g.apply(this,arguments);const E=this.getSenders().filter(e=>B.indexOf(e)===-1);this._shimmedLocalStreams[i.id]=[i].concat(E)};const C=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(i){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[i.id],C.apply(this,arguments)};const Q=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(i){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},i&&Object.keys(this._shimmedLocalStreams).forEach(B=>{const E=this._shimmedLocalStreams[B].indexOf(i);E!==-1&&this._shimmedLocalStreams[B].splice(E,1),this._shimmedLocalStreams[B].length===1&&delete this._shimmedLocalStreams[B]}),Q.apply(this,arguments)}}function dj(A,I){if(!A.RTCPeerConnection)return;if(A.RTCPeerConnection.prototype.addTrack&&I.version>=65)return Pj(A);const g=A.RTCPeerConnection.prototype.getLocalStreams;A.RTCPeerConnection.prototype.getLocalStreams=function(){const e=g.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(t=>this._reverseStreams[t.id])};const C=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(e){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},e.getTracks().forEach(t=>{if(this.getSenders().find(o=>o.track===t))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[e.id]){const t=new A.MediaStream(e.getTracks());this._streams[e.id]=t,this._reverseStreams[t.id]=e,e=t}C.apply(this,[e])};const Q=A.RTCPeerConnection.prototype.removeStream;function i(e,t){let o=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(r=>{const s=e._reverseStreams[r],v=e._streams[s.id];o=o.replace(new RegExp(v.id,"g"),s.id)}),new RTCSessionDescription({type:t.type,sdp:o})}A.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},A.RTCPeerConnection.prototype.addTrack=function(e,t){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const o=[].slice.call(arguments,1);if(o.length!==1||!o[0].getTracks().find(s=>s===e))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(s=>s.track===e))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const r=this._streams[t.id];if(r)r.addTrack(e),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const s=new A.MediaStream([e]);this._streams[t.id]=s,this._reverseStreams[s.id]=t,this.addStream(s)}return this.getSenders().find(s=>s.track===e)},["createOffer","createAnswer"].forEach(function(e){const t=A.RTCPeerConnection.prototype[e],o={[e](){const r=arguments;return arguments.length&&typeof arguments[0]=="function"?t.apply(this,[s=>{const v=i(this,s);r[0].apply(null,[v])},s=>{r[1]&&r[1].apply(null,s)},arguments[2]]):t.apply(this,arguments).then(s=>i(this,s))}};A.RTCPeerConnection.prototype[e]=o[e]});const B=A.RTCPeerConnection.prototype.setLocalDescription;A.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,t){let o=t.sdp;return Object.keys(e._reverseStreams||[]).forEach(r=>{const s=e._reverseStreams[r],v=e._streams[s.id];o=o.replace(new RegExp(s.id,"g"),v.id)}),new RTCSessionDescription({type:t.type,sdp:o})}(this,arguments[0]),B.apply(this,arguments)):B.apply(this,arguments)};const E=Object.getOwnPropertyDescriptor(A.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(A.RTCPeerConnection.prototype,"localDescription",{get(){const e=E.get.apply(this);return e.type===""?e:i(this,e)}}),A.RTCPeerConnection.prototype.removeTrack=function(e){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(e._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let t;this._streams=this._streams||{},Object.keys(this._streams).forEach(o=>{this._streams[o].getTracks().find(r=>e.track===r)&&(t=this._streams[o])}),t&&(t.getTracks().length===1?this.removeStream(this._reverseStreams[t.id]):t.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function oG(A,I){!A.RTCPeerConnection&&A.webkitRTCPeerConnection&&(A.RTCPeerConnection=A.webkitRTCPeerConnection),A.RTCPeerConnection&&I.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(g){const C=A.RTCPeerConnection.prototype[g],Q={[g](){return arguments[0]=new(g==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};A.RTCPeerConnection.prototype[g]=Q[g]})}function hj(A,I){co(A,"negotiationneeded",g=>{const C=g.target;if(!(I.version<72||C.getConfiguration&&C.getConfiguration().sdpSemantics==="plan-b")||C.signalingState==="stable")return g})}var qk=Object.freeze({__proto__:null,fixNegotiationNeeded:hj,shimAddTrackRemoveTrack:dj,shimAddTrackRemoveTrackWithNative:Pj,shimGetDisplayMedia:u0A,shimGetSendersWithDtmf:nj,shimGetStats:cj,shimGetUserMedia:sj,shimMediaStream:vj,shimOnTrack:aj,shimPeerConnection:oG,shimSenderReceiverGetStats:lj});function uj(A,I){const g=A&&A.navigator,C=A&&A.MediaStreamTrack;if(g.getUserMedia=function(Q,i,B){cS("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),g.mediaDevices.getUserMedia(Q).then(i,B)},!(I.version>55&&"autoGainControl"in g.mediaDevices.getSupportedConstraints())){const Q=function(B,E,e){E in B&&!(e in B)&&(B[e]=B[E],delete B[E])},i=g.mediaDevices.getUserMedia.bind(g.mediaDevices);if(g.mediaDevices.getUserMedia=function(B){return typeof B=="object"&&typeof B.audio=="object"&&(B=JSON.parse(JSON.stringify(B)),Q(B.audio,"autoGainControl","mozAutoGainControl"),Q(B.audio,"noiseSuppression","mozNoiseSuppression")),i(B)},C&&C.prototype.getSettings){const B=C.prototype.getSettings;C.prototype.getSettings=function(){const E=B.apply(this,arguments);return Q(E,"mozAutoGainControl","autoGainControl"),Q(E,"mozNoiseSuppression","noiseSuppression"),E}}if(C&&C.prototype.applyConstraints){const B=C.prototype.applyConstraints;C.prototype.applyConstraints=function(E){return this.kind==="audio"&&typeof E=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E,"autoGainControl","mozAutoGainControl"),Q(E,"noiseSuppression","mozNoiseSuppression")),B.apply(this,[E])}}}}function D0A(A,I){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(A.navigator.mediaDevices.getDisplayMedia=function(g){if(!g||!g.video){const C=new DOMException("getDisplayMedia without video constraints is undefined");return C.name="NotFoundError",C.code=8,Promise.reject(C)}return g.video===!0?g.video={mediaSource:I}:g.video.mediaSource=I,A.navigator.mediaDevices.getUserMedia(g)})}function Dj(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function rG(A,I){if(typeof A!="object"||!A.RTCPeerConnection&&!A.mozRTCPeerConnection)return;!A.RTCPeerConnection&&A.mozRTCPeerConnection&&(A.RTCPeerConnection=A.mozRTCPeerConnection),I.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const i=A.RTCPeerConnection.prototype[Q],B={[Q](){return arguments[0]=new(Q==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),i.apply(this,arguments)}};A.RTCPeerConnection.prototype[Q]=B[Q]});const g={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},C=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[Q,i,B]=arguments;return C.apply(this,[Q||null]).then(E=>{if(I.version<53&&!i)try{E.forEach(e=>{e.type=g[e.type]||e.type})}catch(e){if(e.name!=="TypeError")throw e;E.forEach((t,o)=>{E.set(o,Object.assign({},t,{type:g[t.type]||t.type}))})}return E}).then(i,B)}}function bj(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpSender.prototype)return;const I=A.RTCPeerConnection.prototype.getSenders;I&&(A.RTCPeerConnection.prototype.getSenders=function(){const C=I.apply(this,[]);return C.forEach(Q=>Q._pc=this),C});const g=A.RTCPeerConnection.prototype.addTrack;g&&(A.RTCPeerConnection.prototype.addTrack=function(){const C=g.apply(this,arguments);return C._pc=this,C}),A.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function yj(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpReceiver.prototype)return;const I=A.RTCPeerConnection.prototype.getReceivers;I&&(A.RTCPeerConnection.prototype.getReceivers=function(){const g=I.apply(this,[]);return g.forEach(C=>C._pc=this),g}),co(A,"track",g=>(g.receiver._pc=g.srcElement,g)),A.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function mj(A){A.RTCPeerConnection&&!("removeStream"in A.RTCPeerConnection.prototype)&&(A.RTCPeerConnection.prototype.removeStream=function(I){cS("removeStream","removeTrack"),this.getSenders().forEach(g=>{g.track&&I.getTracks().includes(g.track)&&this.removeTrack(g)})})}function wj(A){A.DataChannel&&!A.RTCDataChannel&&(A.RTCDataChannel=A.DataChannel)}function Gj(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.addTransceiver;I&&(A.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let g=arguments[1]&&arguments[1].sendEncodings;g===void 0&&(g=[]),g=[...g];const C=g.length>0;C&&g.forEach(i=>{if("rid"in i&&!/^[a-z0-9]{0,16}$/i.test(i.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in i&&!(parseFloat(i.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in i&&!(parseFloat(i.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const Q=I.apply(this,arguments);if(C){const{sender:i}=Q,B=i.getParameters();(!("encodings"in B)||B.encodings.length===1&&Object.keys(B.encodings[0]).length===0)&&(B.encodings=g,i.sendEncodings=g,this.setParametersPromises.push(i.setParameters(B).then(()=>{delete i.sendEncodings}).catch(()=>{delete i.sendEncodings})))}return Q})}function Rj(A){if(typeof A!="object"||!A.RTCRtpSender)return;const I=A.RTCRtpSender.prototype.getParameters;I&&(A.RTCRtpSender.prototype.getParameters=function(){const g=I.apply(this,arguments);return"encodings"in g||(g.encodings=[].concat(this.sendEncodings||[{}])),g})}function Lj(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>I.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):I.apply(this,arguments)}}function Sj(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.createAnswer;A.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>I.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):I.apply(this,arguments)}}var _k=Object.freeze({__proto__:null,shimAddTransceiver:Gj,shimCreateAnswer:Sj,shimCreateOffer:Lj,shimGetDisplayMedia:D0A,shimGetParameters:Rj,shimGetUserMedia:uj,shimOnTrack:Dj,shimPeerConnection:rG,shimRTCDataChannel:wj,shimReceiverGetStats:yj,shimRemoveStream:mj,shimSenderGetStats:bj});function Tj(A){if(typeof A=="object"&&A.RTCPeerConnection){if("getLocalStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in A.RTCPeerConnection.prototype)){const I=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addStream=function(g){this._localStreams||(this._localStreams=[]),this._localStreams.includes(g)||this._localStreams.push(g),g.getAudioTracks().forEach(C=>I.call(this,C,g)),g.getVideoTracks().forEach(C=>I.call(this,C,g))},A.RTCPeerConnection.prototype.addTrack=function(g){for(var C=arguments.length,Q=new Array(C>1?C-1:0),i=1;i{this._localStreams?this._localStreams.includes(B)||this._localStreams.push(B):this._localStreams=[B]}),I.apply(this,arguments)}}"removeStream"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.removeStream=function(I){this._localStreams||(this._localStreams=[]);const g=this._localStreams.indexOf(I);if(g===-1)return;this._localStreams.splice(g,1);const C=I.getTracks();this.getSenders().forEach(Q=>{C.includes(Q.track)&&this.removeTrack(Q)})})}}function pj(A){if(typeof A=="object"&&A.RTCPeerConnection&&("getRemoteStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in A.RTCPeerConnection.prototype))){Object.defineProperty(A.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(g){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=g),this.addEventListener("track",this._onaddstreampoly=C=>{C.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const i=new Event("addstream");i.stream=Q,this.dispatchEvent(i)})})}});const I=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){const g=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(C){C.streams.forEach(Q=>{if(g._remoteStreams||(g._remoteStreams=[]),g._remoteStreams.indexOf(Q)>=0)return;g._remoteStreams.push(Q);const i=new Event("addstream");i.stream=Q,g.dispatchEvent(i)})}),I.apply(g,arguments)}}}function Fj(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype,g=I.createOffer,C=I.createAnswer,Q=I.setLocalDescription,i=I.setRemoteDescription,B=I.addIceCandidate;I.createOffer=function(e,t){const o=arguments.length>=2?arguments[2]:arguments[0],r=g.apply(this,[o]);return t?(r.then(e,t),Promise.resolve()):r},I.createAnswer=function(e,t){const o=arguments.length>=2?arguments[2]:arguments[0],r=C.apply(this,[o]);return t?(r.then(e,t),Promise.resolve()):r};let E=function(e,t,o){const r=Q.apply(this,[e]);return o?(r.then(t,o),Promise.resolve()):r};I.setLocalDescription=E,E=function(e,t,o){const r=i.apply(this,[e]);return o?(r.then(t,o),Promise.resolve()):r},I.setRemoteDescription=E,E=function(e,t,o){const r=B.apply(this,[e]);return o?(r.then(t,o),Promise.resolve()):r},I.addIceCandidate=E}function Uj(A){const I=A&&A.navigator;if(I.mediaDevices&&I.mediaDevices.getUserMedia){const g=I.mediaDevices,C=g.getUserMedia.bind(g);I.mediaDevices.getUserMedia=Q=>C(kj(Q))}!I.getUserMedia&&I.mediaDevices&&I.mediaDevices.getUserMedia&&(I.getUserMedia=(function(g,C,Q){I.mediaDevices.getUserMedia(g).then(C,Q)}).bind(I))}function kj(A){return A&&A.video!==void 0?Object.assign({},A,{video:rj(A.video)}):A}function Yj(A){if(!A.RTCPeerConnection)return;const I=A.RTCPeerConnection;A.RTCPeerConnection=function(g,C){if(g&&g.iceServers){const Q=[];for(let i=0;iI.generateCertificate})}function Nj(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function Zj(A){const I=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(g){if(g){g.offerToReceiveAudio!==void 0&&(g.offerToReceiveAudio=!!g.offerToReceiveAudio);const C=this.getTransceivers().find(i=>i.receiver.track.kind==="audio");g.offerToReceiveAudio===!1&&C?C.direction==="sendrecv"?C.setDirection?C.setDirection("sendonly"):C.direction="sendonly":C.direction==="recvonly"&&(C.setDirection?C.setDirection("inactive"):C.direction="inactive"):g.offerToReceiveAudio!==!0||C||this.addTransceiver("audio",{direction:"recvonly"}),g.offerToReceiveVideo!==void 0&&(g.offerToReceiveVideo=!!g.offerToReceiveVideo);const Q=this.getTransceivers().find(i=>i.receiver.track.kind==="video");g.offerToReceiveVideo===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):g.offerToReceiveVideo!==!0||Q||this.addTransceiver("video",{direction:"recvonly"})}return I.apply(this,arguments)}}function Kj(A){typeof A!="object"||A.AudioContext||(A.AudioContext=A.webkitAudioContext)}var $k=Object.freeze({__proto__:null,shimAudioContext:Kj,shimCallbacksAPI:Fj,shimConstraints:kj,shimCreateOfferLegacy:Zj,shimGetUserMedia:Uj,shimLocalStreamsAPI:Tj,shimRTCIceServerUrls:Yj,shimRemoteStreamsAPI:pj,shimTrackEventTransceiver:Nj}),Wj={exports:{}};(function(A){const I={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};I.localCName=I.generateIdentifier(),I.splitLines=function(g){return QE(g).call(g).split(` +`).map(C=>QE(C).call(C))},I.splitSections=function(g){return g.split(` +m=`).map((C,Q)=>{var i;return QE(i=Q>0?"m="+C:C).call(i)+`\r +`})},I.getDescription=function(g){const C=I.splitSections(g);return C&&C[0]},I.getMediaSections=function(g){const C=I.splitSections(g);return C.shift(),C},I.matchPrefix=function(g,C){return I.splitLines(g).filter(Q=>Q.indexOf(C)===0)},I.parseCandidate=function(g){let C;C=g.indexOf("a=candidate:")===0?g.substring(12).split(" "):g.substring(10).split(" ");const Q={foundation:C[0],component:{1:"rtp",2:"rtcp"}[C[1]]||C[1],protocol:C[2].toLowerCase(),priority:parseInt(C[3],10),ip:C[4],address:C[4],port:parseInt(C[5],10),type:C[7]};for(let i=8;i0?C[0].split("/")[1]:"sendrecv",uri:C[1],attributes:C.slice(2).join(" ")}},I.writeExtmap=function(g){return"a=extmap:"+(g.id||g.preferredId)+(g.direction&&g.direction!=="sendrecv"?"/"+g.direction:"")+" "+g.uri+(g.attributes?" "+g.attributes:"")+`\r +`},I.parseFmtp=function(g){const C={};let Q;const i=g.substring(g.indexOf(" ")+1).split(";");for(let e=0;e{g.parameters[B]!==void 0?i.push(B+"="+g.parameters[B]):i.push(B)}),C+="a=fmtp:"+Q+" "+i.join(";")+`\r +`}return C},I.parseRtcpFb=function(g){const C=g.substring(g.indexOf(" ")+1).split(" ");return{type:C.shift(),parameter:C.join(" ")}},I.writeRtcpFb=function(g){let C="",Q=g.payloadType;return g.preferredPayloadType!==void 0&&(Q=g.preferredPayloadType),g.rtcpFeedback&&g.rtcpFeedback.length&&g.rtcpFeedback.forEach(i=>{C+="a=rtcp-fb:"+Q+" "+i.type+(i.parameter&&i.parameter.length?" "+i.parameter:"")+`\r +`}),C},I.parseSsrcMedia=function(g){const C=g.indexOf(" "),Q={ssrc:parseInt(g.substring(7,C),10)},i=g.indexOf(":",C);return i>-1?(Q.attribute=g.substring(C+1,i),Q.value=g.substring(i+1)):Q.attribute=g.substring(C+1),Q},I.parseSsrcGroup=function(g){const C=g.substring(13).split(" ");return{semantics:C.shift(),ssrcs:C.map(Q=>parseInt(Q,10))}},I.getMid=function(g){const C=I.matchPrefix(g,"a=mid:")[0];if(C)return C.substring(6)},I.parseFingerprint=function(g){const C=g.substring(14).split(" ");return{algorithm:C[0].toLowerCase(),value:C[1].toUpperCase()}},I.getDtlsParameters=function(g,C){return{role:"auto",fingerprints:I.matchPrefix(g+C,"a=fingerprint:").map(I.parseFingerprint)}},I.writeDtlsParameters=function(g,C){let Q="a=setup:"+C+`\r +`;return g.fingerprints.forEach(i=>{Q+="a=fingerprint:"+i.algorithm+" "+i.value+`\r +`}),Q},I.parseCryptoLine=function(g){const C=g.substring(9).split(" ");return{tag:parseInt(C[0],10),cryptoSuite:C[1],keyParams:C[2],sessionParams:C.slice(3)}},I.writeCryptoLine=function(g){return"a=crypto:"+g.tag+" "+g.cryptoSuite+" "+(typeof g.keyParams=="object"?I.writeCryptoKeyParams(g.keyParams):g.keyParams)+(g.sessionParams?" "+g.sessionParams.join(" "):"")+`\r +`},I.parseCryptoKeyParams=function(g){if(g.indexOf("inline:")!==0)return null;const C=g.substring(7).split("|");return{keyMethod:"inline",keySalt:C[0],lifeTime:C[1],mkiValue:C[2]?C[2].split(":")[0]:void 0,mkiLength:C[2]?C[2].split(":")[1]:void 0}},I.writeCryptoKeyParams=function(g){return g.keyMethod+":"+g.keySalt+(g.lifeTime?"|"+g.lifeTime:"")+(g.mkiValue&&g.mkiLength?"|"+g.mkiValue+":"+g.mkiLength:"")},I.getCryptoParameters=function(g,C){return I.matchPrefix(g+C,"a=crypto:").map(I.parseCryptoLine)},I.getIceParameters=function(g,C){const Q=I.matchPrefix(g+C,"a=ice-ufrag:")[0],i=I.matchPrefix(g+C,"a=ice-pwd:")[0];return Q&&i?{usernameFragment:Q.substring(12),password:i.substring(10)}:null},I.writeIceParameters=function(g){let C="a=ice-ufrag:"+g.usernameFragment+`\r +a=ice-pwd:`+g.password+`\r +`;return g.iceLite&&(C+=`a=ice-lite\r +`),C},I.parseRtpParameters=function(g){const C={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},Q=I.splitLines(g)[0].split(" ");C.profile=Q[2];for(let B=3;B{C.headerExtensions.push(I.parseExtmap(B))});const i=I.matchPrefix(g,"a=rtcp-fb:* ").map(I.parseRtcpFb);return C.codecs.forEach(B=>{i.forEach(E=>{B.rtcpFeedback.find(e=>e.type===E.type&&e.parameter===E.parameter)||B.rtcpFeedback.push(E)})}),C},I.writeRtpDescription=function(g,C){let Q="";Q+="m="+g+" ",Q+=C.codecs.length>0?"9":"0",Q+=" "+(C.profile||"UDP/TLS/RTP/SAVPF")+" ",Q+=C.codecs.map(B=>B.preferredPayloadType!==void 0?B.preferredPayloadType:B.payloadType).join(" ")+`\r +`,Q+=`c=IN IP4 0.0.0.0\r +`,Q+=`a=rtcp:9 IN IP4 0.0.0.0\r +`,C.codecs.forEach(B=>{Q+=I.writeRtpMap(B),Q+=I.writeFmtp(B),Q+=I.writeRtcpFb(B)});let i=0;return C.codecs.forEach(B=>{B.maxptime>i&&(i=B.maxptime)}),i>0&&(Q+="a=maxptime:"+i+`\r +`),C.headerExtensions&&C.headerExtensions.forEach(B=>{Q+=I.writeExtmap(B)}),Q},I.parseRtpEncodingParameters=function(g){const C=[],Q=I.parseRtpParameters(g),i=Q.fecMechanisms.indexOf("RED")!==-1,B=Q.fecMechanisms.indexOf("ULPFEC")!==-1,E=I.matchPrefix(g,"a=ssrc:").map(s=>I.parseSsrcMedia(s)).filter(s=>s.attribute==="cname"),e=E.length>0&&E[0].ssrc;let t;const o=I.matchPrefix(g,"a=ssrc-group:FID").map(s=>s.substring(17).split(" ").map(v=>parseInt(v,10)));o.length>0&&o[0].length>1&&o[0][0]===e&&(t=o[0][1]),Q.codecs.forEach(s=>{if(s.name.toUpperCase()==="RTX"&&s.parameters.apt){let v={ssrc:e,codecPayloadType:parseInt(s.parameters.apt,10)};e&&t&&(v.rtx={ssrc:t}),C.push(v),i&&(v=JSON.parse(JSON.stringify(v)),v.fec={ssrc:e,mechanism:B?"red+ulpfec":"red"},C.push(v))}}),C.length===0&&e&&C.push({ssrc:e});let r=I.matchPrefix(g,"b=");return r.length&&(r=r[0].indexOf("b=TIAS:")===0?parseInt(r[0].substring(7),10):r[0].indexOf("b=AS:")===0?1e3*parseInt(r[0].substring(5),10)*.95-16e3:void 0,C.forEach(s=>{s.maxBitrate=r})),C},I.parseRtcpParameters=function(g){const C={},Q=I.matchPrefix(g,"a=ssrc:").map(E=>I.parseSsrcMedia(E)).filter(E=>E.attribute==="cname")[0];Q&&(C.cname=Q.value,C.ssrc=Q.ssrc);const i=I.matchPrefix(g,"a=rtcp-rsize");C.reducedSize=i.length>0,C.compound=i.length===0;const B=I.matchPrefix(g,"a=rtcp-mux");return C.mux=B.length>0,C},I.writeRtcpParameters=function(g){let C="";return g.reducedSize&&(C+=`a=rtcp-rsize\r +`),g.mux&&(C+=`a=rtcp-mux\r +`),g.ssrc!==void 0&&g.cname&&(C+="a=ssrc:"+g.ssrc+" cname:"+g.cname+`\r +`),C},I.parseMsid=function(g){let C;const Q=I.matchPrefix(g,"a=msid:");if(Q.length===1)return C=Q[0].substring(7).split(" "),{stream:C[0],track:C[1]};const i=I.matchPrefix(g,"a=ssrc:").map(B=>I.parseSsrcMedia(B)).filter(B=>B.attribute==="msid");return i.length>0?(C=i[0].value.split(" "),{stream:C[0],track:C[1]}):void 0},I.parseSctpDescription=function(g){const C=I.parseMLine(g),Q=I.matchPrefix(g,"a=max-message-size:");let i;Q.length>0&&(i=parseInt(Q[0].substring(19),10)),isNaN(i)&&(i=65536);const B=I.matchPrefix(g,"a=sctp-port:");if(B.length>0)return{port:parseInt(B[0].substring(12),10),protocol:C.fmt,maxMessageSize:i};const E=I.matchPrefix(g,"a=sctpmap:");if(E.length>0){const e=E[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:i}}},I.writeSctpDescription=function(g,C){let Q=[];return Q=g.protocol!=="DTLS/SCTP"?["m="+g.kind+" 9 "+g.protocol+" "+C.protocol+`\r +`,`c=IN IP4 0.0.0.0\r +`,"a=sctp-port:"+C.port+`\r +`]:["m="+g.kind+" 9 "+g.protocol+" "+C.port+`\r +`,`c=IN IP4 0.0.0.0\r +`,"a=sctpmap:"+C.port+" "+C.protocol+` 65535\r +`],C.maxMessageSize!==void 0&&Q.push("a=max-message-size:"+C.maxMessageSize+`\r +`),Q.join("")},I.generateSessionId=function(){return Math.random().toString().substr(2,22)},I.writeSessionBoilerplate=function(g,C,Q){let i;const B=C!==void 0?C:2;return i=g||I.generateSessionId(),`v=0\r +o=`+(Q||"thisisadapterortc")+" "+i+" "+B+` IN IP4 127.0.0.1\r +s=-\r +t=0 0\r +`},I.getDirection=function(g,C){const Q=I.splitLines(g);for(let i=0;i(g.candidate&&Object.defineProperty(g,"candidate",{value:new A.RTCIceCandidate(g.candidate),writable:"false"}),g))}function sG(A){!A.RTCIceCandidate||A.RTCIceCandidate&&"relayProtocol"in A.RTCIceCandidate.prototype||co(A,"icecandidate",I=>{if(I.candidate){const g=es.parseCandidate(I.candidate.candidate);g.type==="relay"&&(I.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[g.priority>>24])}return I})}function E9(A,I){if(!A.RTCPeerConnection)return;"sctp"in A.RTCPeerConnection.prototype||Object.defineProperty(A.RTCPeerConnection.prototype,"sctp",{get(){return this._sctp===void 0?null:this._sctp}});const g=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,I.browser==="chrome"&&I.version>=76){const{sdpSemantics:C}=this.getConfiguration();C==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return this._sctp===void 0?null:this._sctp},enumerable:!0,configurable:!0})}if(function(C){if(!C||!C.sdp)return!1;const Q=es.splitSections(C.sdp);return Q.shift(),Q.some(i=>{const B=es.parseMLine(i);return B&&B.kind==="application"&&B.protocol.indexOf("SCTP")!==-1})}(arguments[0])){const C=function(e){const t=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(t===null||t.length<2)return-1;const o=parseInt(t[1],10);return o!=o?-1:o}(arguments[0]),Q=function(e){let t=65536;return I.browser==="firefox"&&(t=I.version<57?e===-1?16384:2147483637:I.version<60?I.version===57?65535:65536:2147483637),t}(C),i=function(e,t){let o=65536;I.browser==="firefox"&&I.version===57&&(o=65535);const r=es.matchPrefix(e.sdp,"a=max-message-size:");return r.length>0?o=parseInt(r[0].substring(19),10):I.browser==="firefox"&&t!==-1&&(o=2147483637),o}(arguments[0],C);let B;B=Q===0&&i===0?Number.POSITIVE_INFINITY:Q===0||i===0?Math.max(Q,i):Math.min(Q,i);const E={};Object.defineProperty(E,"maxMessageSize",{get:()=>B}),this._sctp=E}return g.apply(this,arguments)}}function e9(A){if(!A.RTCPeerConnection||!("createDataChannel"in A.RTCPeerConnection.prototype))return;function I(C,Q){const i=C.send;C.send=function(){return i.apply(C,arguments)}}const g=A.RTCPeerConnection.prototype.createDataChannel;A.RTCPeerConnection.prototype.createDataChannel=function(){const C=g.apply(this,arguments);return I(C),C},co(A,"datachannel",C=>(I(C.channel,C.target),C))}function vG(A){if(!A.RTCPeerConnection||"connectionState"in A.RTCPeerConnection.prototype)return;const I=A.RTCPeerConnection.prototype;Object.defineProperty(I,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(I,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(g){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),g&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=g)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(g=>{const C=I[g];I[g]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const i=Q.target;if(i._lastConnectionState!==i.connectionState){i._lastConnectionState=i.connectionState;const B=new Event("connectionstatechange",Q);i.dispatchEvent(B)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),C.apply(this,arguments)}})}function aG(A,I){if(!A.RTCPeerConnection||I.browser==="chrome"&&I.version>=71||I.browser==="safari"&&I.version>=605)return;const g=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(C){if(C&&C.sdp&&C.sdp.indexOf(` +a=extmap-allow-mixed`)!==-1){const Q=C.sdp.split(` +`).filter(i=>QE(i).call(i)!=="a=extmap-allow-mixed").join(` +`);A.RTCSessionDescription&&C instanceof A.RTCSessionDescription?arguments[0]=new A.RTCSessionDescription({type:C.type,sdp:Q}):C.sdp=Q}return g.apply(this,arguments)}}function t9(A,I){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const g=A.RTCPeerConnection.prototype.addIceCandidate;g&&g.length!==0&&(A.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(I.browser==="chrome"&&I.version<78||I.browser==="firefox"&&I.version<68||I.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():g.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function o9(A,I){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const g=A.RTCPeerConnection.prototype.setLocalDescription;g&&g.length!==0&&(A.RTCPeerConnection.prototype.setLocalDescription=function(){let C=arguments[0]||{};if(typeof C!="object"||C.type&&C.sdp)return g.apply(this,arguments);if(C={type:C.type,sdp:C.sdp},!C.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":C.type="offer";break;default:C.type="answer"}return C.sdp||C.type!=="offer"&&C.type!=="answer"?g.apply(this,[C]):(C.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(Q=>g.apply(this,[Q]))})}var y0A=Object.freeze({__proto__:null,removeExtmapAllowMixed:aG,shimAddIceCandidateNullOrEmpty:t9,shimConnectionState:vG,shimMaxMessageSize:E9,shimParameterlessSetLocalDescription:o9,shimRTCIceCandidate:B9,shimRTCIceCandidateRelayProtocol:sG,shimSendThrowTypeError:e9});function m0A(){let{window:A}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const g=oj,C=h0A(A),Q={browserDetails:C,commonShim:y0A,extractVersion:i9,disableLog:P0A,disableWarnings:d0A,sdp:b0A};switch(C.browser){case"chrome":if(!qk||!oG||!I.shimChrome)return g("Chrome shim is not included in this adapter release."),Q;if(C.version===null)return g("Chrome shim can not determine version, not shimming."),Q;g("adapter.js shimming chrome."),Q.browserShim=qk,t9(A,C),o9(A),sj(A,C),vj(A),oG(A,C),aj(A),dj(A,C),nj(A),cj(A),lj(A),hj(A,C),B9(A),sG(A),vG(A),E9(A,C),e9(A),aG(A,C);break;case"firefox":if(!_k||!rG||!I.shimFirefox)return g("Firefox shim is not included in this adapter release."),Q;g("adapter.js shimming firefox."),Q.browserShim=_k,t9(A,C),o9(A),uj(A,C),rG(A,C),Dj(A),mj(A),bj(A),yj(A),wj(A),Gj(A),Rj(A),Lj(A),Sj(A),B9(A),vG(A),E9(A,C),e9(A);break;case"safari":if(!$k||!I.shimSafari)return g("Safari shim is not included in this adapter release."),Q;g("adapter.js shimming safari."),Q.browserShim=$k,t9(A,C),o9(A),Yj(A),Zj(A),Fj(A),Tj(A),pj(A),Nj(A),Uj(A),Kj(A),B9(A),sG(A),E9(A,C),e9(A),aG(A,C);break;default:g("Unsupported browser!")}return Q}if(m0A({window:typeof window>"u"?void 0:window}),typeof MediaStreamTrack<"u"){const A=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){const I=A.call(this);return I.width&&(I.width=Math.floor(I.width)),I.height&&(I.height=Math.floor(I.height)),I.frameRate&&(I.frameRate=Math.floor(I.frameRate)),I}}var AY=xs,w0A=TypeError,G0A=function(A,I){if(!delete A[I])throw new w0A("Cannot delete property "+AY(I)+" of "+AY(A))},IY=$s,R0A=Math.floor,nG=function(A,I){var g=A.length;if(g<8)for(var C,Q,i=1;i0;)A[Q]=A[--Q];Q!==i++&&(A[Q]=C)}else for(var B=R0A(g/2),E=nG(IY(A,0,B),I),e=nG(IY(A,B),I),t=E.length,o=e.length,r=0,s=0;r3)){if(J0A)return!0;if(eY)return eY<603;var A,I,g,C,Q="";for(A=65;A<76;A++){switch(I=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:g=3;break;case 68:case 71:g=4;break;default:g=2}for(C=0;C<47;C++)oe.push({k:I+C,v:g})}for(oe.sort(function(i,B){return B.v-i.v}),C=0;CiY(g)?1:-1}};k0A({target:"Array",proto:!0,forced:j0A},{sort:function(A){A!==void 0&&Y0A(A);var I=N0A(this);if(Mj)return A===void 0?tY(I):tY(I,A);var g,C,Q=[],i=QY(I);for(C=0;C1?C-1:0),i=1;i1?g-1:0),Q=1;Q{try{super.emit(I,...C)}catch(i){oY.error("safeEmit","safeEmit() | event listener threw an error [event:%s]:%o",I,i),console.error(i)}})}}var cG=(A=>(A[A.BLACK=0]="BLACK",A[A.NORMAL=1]="NORMAL",A))(cG||{}),lG=(A=>(A.streamRemovedBySchedule308="stream removed",A.clientRePublish="client republish",A.publishStreamFaied="publish failed",A.clientUnPublish="client unpublished",A.clientDisconnected="client disconnected",A.videoMuted="video muted",A))(lG||{}),jj=(A=>(A.PushLimitWarn="PushLimitWarn",A.OTHER="OTHER",A))(jj||{}),Xj=(A=>(A.CHANGE_CODEC="changeCodec",A))(Xj||{}),IA=(A=>(A.ON_ADD_STREAM="onAddStream",A.ON_ADD_STREAM_LIST="onAddStreamList",A.ON_REMOVE_STREAM="onRemoveStream",A.ON_REMOVE_STREAM_LIST="onRemoveStreamList",A.USER_DISCONNECTION="userDisconnection",A.USER_DISCONNECTION_LIST="userDisconnectionList",A.USER_CONNECTION="userConnection",A.USER_CONNECTION_LIST="userConnectionList",A.ON_UPDATE_STREAM_ATTRIBUTES="onUpdateStreamAttributes",A.ON_UPDATE_ROOM_ATTRIBUTES="onUpdateRoomAttributes",A.ON_UPDATE_USER_ATTRIBUTES="onUpdateUserAttributes",A.ON_PUSH_TRACK="onPushTrack",A.ON_REMOVE_TRACK="onRemoveTrack",A.ON_CUSTOM_MESSAGE="onCustomMessage",A.NODE_CHANGE="nodeChange",A.USER_MESSAGE_RECEIVED="userMessageReceived",A.USER_BINARY_MESSAGE_RECEIVED="userBinaryMessageReceived",A.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM="userMessageReceivedOutsideRoom",A.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM="userBinaryMessageReceivedOutsideRoom",A.POST_PROCESSING_MESSAGE="postProcessingMessage",A.ON_USER_TOKEN_WILL_EXPIRE="onUserTokenWillExpire",A.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE="onTokenPublishPrivilegeWillExpire",A.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED="onTokenPublishPrivilegeDidExpired",A.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE="onTokenSubscribePrivilegeWillExpire",A.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED="onTokenSubscribePrivilegeDidExpired",A.STREAM_CONTROL_MESSAGE="streamControlMessage",A.ON_SPEAKER_CHANGE="onSpeakerChange",A.ON_STREAM_FAILED="streamFailed",A.ON_NOTIFY_RECONNECT="notifyReconnect",A.ON_FORWARD_DST_ROOM_USER_KICK="onForwardDstRoomUserKick",A.ENGINE_CONTROL_MESSAGE="engineControlMessage",A.ON_STREAM_PUSHED_BY_OTHER="onStreamPushedByOther",A.ON_STREAM_PULL_STATE_CHANGED="onStreamPullStateChanged",A))(IA||{}),EE=(A=>(A.RSCP="RSCP",A.RTT="RTT",A.SSC="SSC",A))(EE||{}),og=(A=>(A.ON_CONNECTION_STATE_CHANGE="onConnectionStateChange",A.ON_VENDOR_CONNECTION_STATE_CHANGE="onVendorConnectionStateChange",A.ABNORMAL_DISCONNECTION="normalConnection",A.ON_RECONNECT_FAILED="onReconnectFailed",A.CONNECT_WITH_TCP="onIceConnectWithTcp",A))(og||{}),fE=(A=>(A.userLeave="userLeave",A.connectionLost="connectionLost",A.userDuplicateLogin="userDuplicateLogin",A.kickedByAdmin="kickedByAdmin",A.roleChanged="roleChanged",A.onUserTokenDidExpire="onUserTokenDidExpire",A))(fE||{}),Hj=(A=>(A[A.roomDismissByAdmin=2]="roomDismissByAdmin",A))(Hj||{}),Zt=(A=>(A[A.LIMIT_MODE=1]="LIMIT_MODE",A[A.NORMAL_MODE=2]="NORMAL_MODE",A))(Zt||{}),TC=(A=>(A[A.NORMAL=0]="NORMAL",A[A.BLACK=1]="BLACK",A))(TC||{}),DI=(A=>(A[A.EXTERNAL=0]="EXTERNAL",A[A.INTERNAL=1]="INTERNAL",A))(DI||{}),Gs=(A=>(A.AUDIO="audio",A.VIDEO="video",A))(Gs||{}),MI=(A=>(A.MAIN="main",A.SCREEN="screen",A.PUBLIC="public",A.VIRTUAL="virtual",A))(MI||{});class xj extends KQ{constructor(I,g,C){super(),l(this,"trackId",cE()),l(this,"_logger",void 0),l(this,"trackInfo",void 0),l(this,"_originTrack",void 0),l(this,"_channelCount",void 0),this._ctx=I,this._logger=new SA("Track",4,I.id),this.trackInfo=C,this._originTrack=g,this._channelCount=g.getSettings().channelCount}get dummy(){return this.trackInfo.isDummy}get virtual(){return this.trackInfo.streamIndex==="virtual"}get isScreen(){return this.trackInfo.streamIndex==="screen"}get isPublic(){return this.trackInfo.streamIndex==="public"}get sourceType(){return this.trackInfo.sourceType}get mediaType(){return this.trackInfo.mediaType}get captureSessionId(){return this.trackInfo.captureSessionId}get streamIndex(){const{streamIndex:I}=this.trackInfo;return I==="main"?W.STREAM_INDEX_MAIN:I==="screen"?W.STREAM_INDEX_SCREEN:void 0}get channelCount(){var I;return(I=this._channelCount)!==null&&I!==void 0?I:0}get originTrack(){return this._originTrack}set originTrack(I){this._originTrack=I,this._channelCount=mediaTrack.getSettings().channelCount}get logger(){return this._logger.module=this.constructor.name,this._logger}destroy(){this._originTrack.stop()}}class Oj extends xj{constructor(I,g,C){super(I,g,C),l(this,"_mediaTrack",void 0),l(this,"_preProcessingTrack",void 0),l(this,"isTrackReady",void 0),l(this,"handleTrackEnded",()=>{this.emit("track-ended",this),this.destroy()}),l(this,"handleMute",()=>{this.emit("track-mute",this)}),l(this,"handleUnmute",()=>{this.emit("track-unmute",this)}),this._initListeners(),this.isTrackReady=this.generatePreProcessingTrack()}get mediaTrack(){var I;return(I=this._mediaTrack)!==null&&I!==void 0?I:this._originTrack}set mediaTrack(I){this.mediaTrack.id!==I.id&&(this._mediaTrack=I,this.isTrackReady=this.generatePreProcessingTrack())}get preprocessingTrack(){var I;return(I=this._preProcessingTrack)!==null&&I!==void 0?I:this.mediaTrack}async generatePreProcessingTrack(){var I;const g=(I=this._preProcessingTrack)===null||I===void 0?void 0:I.id;this._preProcessingTrack=void 0;try{const C=await this._ctx.extensionManager.getPreProcessingTrack(this);C instanceof MediaStreamTrack&&(this._preProcessingTrack=C,g!==this._preProcessingTrack.id&&setTimeout(()=>{this.emit("needReplaceTrack")}))}catch(C){console.error(C)}}destroy(){var I,g;this._originTrack.removeEventListener("ended",this.handleTrackEnded),this._originTrack.removeEventListener("mute",this.handleMute),this._originTrack.removeEventListener("unmute",this.handleUnmute),(I=this._preProcessingTrack)===null||I===void 0||I.stop(),(g=this._mediaTrack)===null||g===void 0||g.stop(),super.destroy()}_initListeners(){this._originTrack instanceof MediaStreamTrack&&(this._originTrack.addEventListener("ended",this.handleTrackEnded),this._originTrack.addEventListener("mute",this.handleMute),this._originTrack.addEventListener("unmute",this.handleUnmute))}}class qj extends xj{constructor(I,g,C){super(I,g,C),l(this,"_mediaTrack",void 0),this._originTrack=g}get mediaTrack(){var I;return(I=this._mediaTrack)!==null&&I!==void 0?I:this._originTrack}set mediaTrack(I){this.mediaTrack.id!==I.id&&(this._mediaTrack=I)}get preprocessingTrack(){return this.mediaTrack}}var edA=TA,jD=cI;edA({global:!0,forced:jD.globalThis!==jD},{globalThis:jD});var tdA=cI,odA=tdA,rdA=odA,sdA=rdA,vdA=sdA,adA=vdA,ndA=adA,cdA=ndA,ldA=cdA,rY=nI(ldA),YI=(A=>(A.H264="H264",A.VP8="VP8",A.ByteVC1="ByteVC1",A))(YI||{});const PdA=async()=>{try{return!(TI()||!window.RTCPeerConnection||!window.RTCPeerConnection.prototype.addTransceiver||!window.RTCPeerConnection.prototype.createDataChannel)&&await AX()&&await $j()}catch{return!1}},Mn=async()=>{const A=[];return await bdA()&&await DdA()&&A.push(YI.ByteVC1),await AX()&&await $j()&&A.push(YI.H264),await udA()&&await hdA()&&A.push(YI.VP8),A},ddA=async()=>(await Mn()).map(A=>A===YI.ByteVC1?"H265":A.toUpperCase()),ug={};function _j(A){const I=A.split(` +`);let g=!1;for(const C of I)if(C.includes("level-asymmetry-allowed=1")&&C.includes("packetization-mode=1")&&C.includes("profile-level-id=42e0")){g=!0;break}if(g){const C=navigator.userAgent.toLowerCase();let Q=!1;const i=[/miuibrowser/,/70.*HeyTapBrowser/i];for(const B of i)B.test(C)&&(Q=!0);return!Q}return!1}const d0=async A=>{const I=new RTCPeerConnection({sdpSemantics:"unified-plan"});I.addTransceiver("video",{direction:A});const g=await I.createOffer();return I.close(),g.sdp.toLowerCase()},PS=async()=>{let A=await d0("sendonly");return navigator.userAgent.includes("VivoBrowser")&&(A=await d0("sendonly")),ug.h264encode=_j(A),ug.vp8encode=A.indexOf("vp8")>-1,ug.h265encode=A.indexOf("h265")>-1,ug},dS=async()=>{let A=await d0("recvonly");return navigator.userAgent.includes("VivoBrowser")&&(A=await d0("recvonly")),ug.h264decode=_j(A),ug.vp8decode=A.indexOf("vp8")>-1,ug.h265decode=A.indexOf("h265")>-1,ug},$j=async()=>{if(ug.h264encode===void 0)try{await PS()}catch{return!1}return ug.h264encode||!1},AX=async()=>{if(ug.h264decode===void 0)try{await dS()}catch{return!1}return ug.h264decode||!1},hdA=async()=>{if(ug.vp8encode===void 0)try{await PS()}catch{return!1}return ug.vp8encode||!1},udA=async()=>{if(ug.vp8decode===void 0)try{await dS()}catch{return!1}return ug.vp8decode||!1},DdA=async()=>{if(ug.h265encode===void 0)try{await PS()}catch{return!1}return ug.h265encode||!1},bdA=async()=>{if(ug.h265decode===void 0)try{await dS()}catch{return!1}return ug.h265decode||!1},Bv=()=>typeof TransformStream<"u"&&typeof RTCRtpSender<"u"&&typeof RTCRtpReceiver<"u"&&typeof RTCRtpScriptTransform<"u"&&"transform"in RTCRtpSender.prototype&&"transform"in RTCRtpReceiver.prototype&&CX()&&LdA(),lE=()=>typeof TransformStream<"u"&&typeof RTCRtpSender<"u"&&typeof RTCRtpReceiver<"u"&&RTCRtpSender.prototype.createEncodedStreams!==void 0&&RTCRtpReceiver.prototype.createEncodedStreams!==void 0,IX=()=>T9A?we&&ri>=70||KI&&P0>=80||kQ&&Dc>=14:p9A?we&&ri>=70||KI&&P0>=80:no?ms[0]>=14:!(!kB&&!F9A)&&we&&ri>=86,gX=we&&ri<=114,PG=!KI||P0>=96,eE=!(kQ&&Dc<=14),ydA=kB&&we||no&&ms[0]>=16,mdA=()=>!KI&&!S9A&&(ms==null?void 0:ms[0])!==14,wdA=rY!==void 0&&"PressureObserver"in rY,CX=()=>typeof window<"u"&&window.Worker,GdA=kQ&&Dc<=14,RdA=!GdA,LdA=()=>typeof MessageChannel<"u";var QX=(A=>(A[A.internal=0]="internal",A[A.external=1]="external",A[A.bypass=2]="bypass",A))(QX||{});const Nl=new Uint8Array([109,167,53,190,103,90,72,1,170,89,63,164,194,199,19,85]),UE=new Uint8Array([109,167,53,190,103,90,72,1,170,89,63,164,194,199,19,84]),sY=new Uint8Array([31,239,3,50,242,120,76,85,169,42,161,91,75,186,22]),SdA=A=>{const I=[];let g=0;for(const C of A)g>=2&&C<=3&&(I.push(3),g=0),C===0?g++:g=0,I.push(C);return new Uint8Array(I)},TdA=A=>{const I=[];for(let g=0;g=255;)A-=255,I.push(255);return I.push(A),new Uint8Array(I)}function HD(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,g=0;for(;A[I]===255&&I2&&arguments[2]!==void 0&&arguments[2];const Q=new Uint8Array([0,0,0,1]),i=g?pdA:new Uint8Array([6]),B=new Uint8Array([5]),E=Ev.__uuid||(C?Nl:UE),e=XD(I.byteLength+E.byteLength),t=SdA(I);return new Uint8Array([...Q,...i,...B,...e,...E,...t,128])}static decodeSEIBody(I,g){I=I.slice(0,I.length-1);const C=TdA(I);if(C.byteLength<2)return;let Q=0;const i=g?2:1;if(C[i]!==5&&C[i]!==100)return;Q+=1+i;const[B,E]=HD(C,Q);Q=E;let e=2;const t=Q+B;return C.byteLength>=UE.byteLength&&B>=UE.byteLength&&(C.slice(Q,Q+UE.byteLength).toString()===UE.toString()||C.slice(Q,Q+sY.byteLength).toString()===sY.toString())?(Q+=UE.byteLength,e=1):C.byteLength>=UE.byteLength&&B>=UE.byteLength&&C.slice(Q,Q+Nl.byteLength).toString()===Nl.toString()&&(Q+=Nl.byteLength,e=0),{type:e,payload:C.slice(Q,t)}}static parseInternalSEI(I){const g=new Map;let C=0;if(I.type===0){for(;I.payload.byteLength-C>=2;){const[Q,i]=HD(I.payload,C);C=i;const[B,E]=HD(I.payload,C);if(C=E,g.get(Q)||!(B<=I.payload.byteLength-C))break;g.set(Q,I.payload.slice(C,C+B)),C+=B}return g}}static makeInternalSei(I){const g=[];for(const[i,B]of I){const E=XD(i),e=XD(B.byteLength);g.push(E,e,B)}const C=g.reduce((i,B)=>i+B.byteLength,0),Q=new Uint8Array(C);return g.reduce((i,B)=>(Q.set(B,i),i+B.byteLength),0),Q}}l(Ev,"__uuid",void 0);var FdA=TA,UdA=iI,kdA=Jz,YdA=RangeError,vY=String.fromCharCode,aY=String.fromCodePoint,NdA=UdA([].join),ZdA=!!aY&&aY.length!==1;FdA({target:"String",stat:!0,forced:ZdA},{fromCodePoint:function(A){for(var I,g=[],C=arguments.length,Q=0;C>Q;){if(I=+arguments[Q++],kdA(I,1114111)!==I)throw new YdA(I+" is not a valid code point");g[Q]=I<65536?vY(I):vY(55296+((I-=65536)>>10),I%1024+56320)}return NdA(g,"")}});var nY=cI,KdA=Dg,WdA=Object.getOwnPropertyDescriptor,iX=function(A){if(!KdA)return nY[A];var I=WdA(nY,A);return I&&I.value},JdA=sI,VdA=mI,zdA=Dg,cY=Gz,MdA=VdA("iterator"),$d=!JdA(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),I=A.searchParams,g=new URLSearchParams("a=1&a=2&b=3"),C="";return A.pathname="c%20d",I.forEach(function(Q,i){I.delete("b"),C+=i+Q}),g.delete("a",2),g.delete("b",void 0),cY&&(!A.toJSON||!g.has("a",1)||g.has("a",2)||!g.has("a",void 0)||g.has("b"))||!I.size&&(cY||!zdA)||!I.sort||A.href!=="https://a/c%20d?a=1&c=3"||I.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!I[MdA]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||C!=="a1c3"||new URL("https://x",void 0).host!=="x"}),fdA=Ve,jdA=function(A,I,g){for(var C in I)g&&g.unsafe&&A[C]?A[C]=I[C]:fdA(A,C,I[C],g);return A},XdA=vC,HdA=TypeError,hS=function(A,I){if(XdA(I,A))return A;throw new HdA("Incorrect invocation")},xdA=_s,lY=Yd,OdA=oc,qdA=gv,_dA=mI,$dA=_dA("iterator"),Ah=function(A){if(!OdA(A))return lY(A,$dA)||lY(A,"@@iterator")||qdA[xdA(A)]},AhA=bg,IhA=yi,ghA=ZQ,ChA=xs,QhA=Ah,ihA=TypeError,uS=function(A,I){var g=arguments.length<2?QhA(A):I;if(IhA(g))return ghA(AhA(g,A));throw new ihA(ChA(A)+" is not iterable")},BhA=TypeError,bc=function(A,I){if(A0&&A&g;g>>=1)I++;return I},phA=function(A){var I=null;switch(A.length){case 1:I=A[0];break;case 2:I=(31&A[0])<<6|63&A[1];break;case 3:I=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:I=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return I>1114111?null:I},RY=function(A){for(var I=(A=rX(A,LhA," ")).length,g="",C=0;CI){g+="%",C++;continue}var i=GY(A,C+1);if(i!=i){g+=Q,C++;continue}C+=2;var B=ThA(i);if(B===0)Q=yhA(i);else{if(B===1||B>4){g+=_D,C++;continue}for(var E=[i],e=1;eI||r9(A,C)!=="%");){var t=GY(A,C+1);if(t!=t){C+=3;break}if(t>191||t<128)break;re(E,t),C+=2,e++}if(E.length!==B){g+=_D;continue}var o=phA(E);o===null?g+=_D:Q=mhA(o)}}g+=Q,C++}return g},FhA=/[!'()~]|%20/g,UhA={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},khA=function(A){return UhA[A]},LY=function(A){return rX(bhA(A),FhA,khA)},$D=rhA(function(A,I){oX(this,{type:tX,target:qQ(A).entries,index:0,kind:I})},Rs,function(){var A=uhA(this),I=A.target,g=A.index++;if(!I||g>=I.length)return A.target=null,Kl(void 0,!0);var C=I[g];switch(A.kind){case"keys":return Kl(C.key,!1);case"values":return Kl(C.value,!1)}return Kl([C.key,C.value],!1)},!0),vX=function(A){this.entries=[],this.url=null,A!==void 0&&(eX(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?r9(A,0)==="?"?sX(A,1):A:yC(A)))};vX.prototype={type:Rs,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var I,g,C,Q,i,B,E,e=this.entries,t=lhA(A);if(t)for(g=(I=uY(A,t)).next;!(C=Zl(g,I)).done;){if(i=(Q=uY(nhA(C.value))).next,(B=Zl(i,Q)).done||(E=Zl(i,Q)).done||!Zl(i,Q).done)throw new DhA("Expected sequence with length 2");re(e,{key:yC(B.value),value:yC(E.value)})}else for(var o in A)shA(A,o)&&re(e,{key:o,value:yC(A[o])})},parseQuery:function(A){if(A)for(var I,g,C=this.entries,Q=wY(A,"&"),i=0;i0?arguments[0]:void 0));Ga||(this.size=A.entries.length)},lr=u0.prototype;if(thA(lr,{append:function(A,I){var g=qQ(this);Jo(arguments.length,2),re(g.entries,{key:yC(A),value:yC(I)}),Ga||this.length++,g.updateURL()},delete:function(A){for(var I=qQ(this),g=Jo(arguments.length,1),C=I.entries,Q=yC(A),i=g<2?void 0:arguments[1],B=i===void 0?i:yC(i),E=0;Eg.key?1:-1}),A.updateURL()},forEach:function(A){for(var I,g=qQ(this).entries,C=vhA(A,arguments.length>1?arguments[1]:void 0),Q=0;Q1?SY(arguments[1]):{})}}),OD(h0)){var Ab=function(A){return EX(this,qD),new h0(A,arguments.length>1?SY(arguments[1]):{})};qD.constructor=Ab,Ab.prototype=qD,xD({global:!0,dontCallGetSet:!0,forced:!0},{Request:Ab})}}var MQ,ZhA={URLSearchParams:u0,getState:qQ},TY=Dg,KhA=iI,WhA=bg,JhA=sI,Ib=Jd,VhA=nc,zhA=kd,MhA=mi,fhA=KL,Vo=Object.assign,pY=Object.defineProperty,jhA=KhA([].concat),XhA=!Vo||JhA(function(){if(TY&&Vo({b:1},Vo(pY({},"a",{enumerable:!0,get:function(){pY(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},I={},g=Symbol("assign detection"),C="abcdefghijklmnopqrst";return A[g]=7,C.split("").forEach(function(Q){I[Q]=Q}),Vo({},A)[g]!==7||Ib(Vo({},I)).join("")!==C})?function(A,I){for(var g=MhA(A),C=arguments.length,Q=1,i=VhA.f,B=zhA.f;C>Q;)for(var E,e=fhA(arguments[Q++]),t=i?jhA(Ib(e),i(e)):Ib(e),o=t.length,r=0;o>r;)E=t[r++],TY&&!WhA(B,e,E)||(g[E]=e[E]);return g}:Vo,HhA=bg,FY=ZQ,xhA=Yd,aX=function(A,I,g){var C,Q;FY(A);try{if(!(C=xhA(A,"return"))){if(I==="throw")throw g;return g}C=HhA(C,A)}catch(i){Q=!0,C=i}if(I==="throw")throw g;if(Q)throw C;return FY(C),g},OhA=ZQ,qhA=aX,_hA=function(A,I,g,C){try{return C?I(OhA(g)[0],g[1]):I(g)}catch(Q){qhA(A,"throw",Q)}},$hA=mI,AuA=gv,IuA=$hA("iterator"),guA=Array.prototype,nX=function(A){return A!==void 0&&(AuA.Array===A||guA[IuA]===A)},CuA=DE,QuA=bg,iuA=mi,BuA=_hA,EuA=nX,euA=XL,tuA=bE,UY=Zd,ouA=uS,ruA=Ah,kY=Array,suA=function(A){var I=iuA(A),g=euA(this),C=arguments.length,Q=C>1?arguments[1]:void 0,i=Q!==void 0;i&&(Q=CuA(Q,C>2?arguments[2]:void 0));var B,E,e,t,o,r,s=ruA(I),v=0;if(!s||this===kY&&EuA(s))for(B=tuA(I),E=g?new this(B):kY(B);B>v;v++)r=i?Q(I[v],v):I[v],UY(E,v,r);else for(E=g?new this:[],o=(t=ouA(I,s)).next;!(e=QuA(o,t)).done;v++)r=i?BuA(t,Q,[e.value,v],!0):e.value,UY(E,v,r);return E.length=v,E},lo=iI,gb=2147483647,gn=36,cX=1,dG=26,vuA=38,auA=700,nuA=72,cuA=128,luA="-",PuA=/[^\0-\u007E]/,lX=/[.\u3002\uFF0E\uFF61]/g,YY="Overflow: input needs wider integers to process",Cb=gn-cX,NY=RangeError,duA=lo(lX.exec),Mr=Math.floor,Qb=String.fromCharCode,ZY=lo("".charCodeAt),PX=lo([].join),se=lo([].push),huA=lo("".replace),uuA=lo("".split),DuA=lo("".toLowerCase),buA=function(A){for(var I=[],g=0,C=A.length;g=55296&&Q<=56319&&g>1,A+=Mr(A/I);A>Cb*dG>>1;)A=Mr(A/Cb),C+=gn;return Mr(C+(Cb+1)*A/(A+vuA))},muA=function(A){var I,g,C=[],Q=(A=buA(A)).length,i=cuA,B=0,E=nuA;for(I=0;I=i&&gMr((gb-B)/r))throw new NY(YY);for(B+=(o-i)*r,i=o,I=0;Igb)throw new NY(YY);if(g===i){for(var s=B,v=gn;;){var n=v<=E?cX:v>=E+dG?dG:v-E;if(s?@[\\\]^|]/,xuA=/[\0\t\n\r #/:<>?@[\\\]^|]/,OuA=/^[\u0000-\u0020]+/,quA=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,_uA=/[\t\n\r]/g,$uA=function(A){var I,g,C,Q,i,B,E,e=JuA(A,".");if(e.length&&e[e.length-1]===""&&e.length--,(I=e.length)>4)return A;for(g=[],C=0;C1&&Ei(Q,0)==="0"&&(i=ji(fuA,Q)?16:8,Q=Cn(Q,i===8?1:2)),Q==="")B=0;else{if(!ji(i===10?XuA:i===8?juA:DX,Q))return A;B=b0(Q,i)}Pr(g,B)}for(C=0;C=JY(256,5-I))return null}else if(B>255)return null;for(E=KuA(g),C=0;C6))return;for(C=0;s();){if(Q=null,C>0){if(!(s()==="."&&C<4))return;r++}if(!ji(DG,s()))return;for(;ji(DG,s());){if(i=b0(s(),10),Q===null)Q=i;else{if(Q===0)return;Q=10*Q+i}if(Q>255)return;r++}e[t]=256*e[t]+Q,++C!==2&&C!==4||t++}if(C!==4)return;break}if(s()===":"){if(r++,!s())return}else if(s())return;e[t++]=I}else{if(o!==null)return;r++,o=++t}}if(o!==null)for(B=t-o,t=7;t!==0&&B>0;)E=e[t],e[t--]=e[o+B-1],e[o+--B]=E;else if(t!==8)return;return e},IDA=function(A){for(var I=null,g=1,C=null,Q=0,i=0;i<8;i++)A[i]!==0?(Q>g&&(I=C,g=Q),C=null,Q=0):(C===null&&(C=i),++Q);return Q>g?C:I},xv=function(A){var I,g,C,Q;if(typeof A=="number"){for(I=[],g=0;g<4;g++)VuA(I,A%256),A=NuA(A/256);return Ra(I,".")}if(typeof A=="object"){for(I="",C=IDA(A),g=0;g<8;g++)Q&&A[g]===0||(Q&&(Q=!1),C===g?(I+=g?":":"::",Q=!0):(I+=ZuA(A[g],16),g<7&&(I+=":")));return"["+I+"]"}return A},s9={},bX=wS({},s9,{" ":1,'"':1,"<":1,">":1,"`":1}),yX=wS({},bX,{"#":1,"?":1,"{":1,"}":1}),Eb=wS({},yX,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),kE=function(A,I){var g=SuA(A,0);return g>32&&g<127&&!hG(I,A)?A:encodeURIComponent(A)},Jl={ftp:21,file:null,http:80,https:443,ws:80,wss:443},La=function(A,I){var g;return A.length===2&&ji(uX,Ei(A,0))&&((g=Ei(A,1))===":"||!I&&g==="|")},zY=function(A){var I;return A.length>1&&La(Cn(A,0,2))&&(A.length===2||(I=Ei(A,2))==="/"||I==="\\"||I==="?"||I==="#")},gDA=function(A){return A==="."||y0(A)==="%2e"},CDA=function(A){return(A=y0(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},eb={},MY={},tb={},fY={},jY={},ob={},XY={},HY={},Vl={},zl={},rb={},sb={},vb={},ab={},xY={},nb={},Mo={},PB={},OY={},Ct={},xB={},GS=function(A,I,g){var C,Q,i,B=qB(A);if(I){if(Q=this.parse(B))throw new uG(Q);this.searchParams=null}else{if(g!==void 0&&(C=new GS(g,!0)),Q=this.parse(B,null,C))throw new uG(Q);(i=YuA(new kuA)).bindURL(this),this.searchParams=i}};GS.prototype={type:"URL",parse:function(A,I,g){var C,Q,i,B,E=this,e=I||eb,t=0,o="",r=!1,s=!1,v=!1;for(A=qB(A),I||(E.scheme="",E.username="",E.password="",E.host=null,E.port=null,E.path=[],E.query=null,E.fragment=null,E.cannotBeABaseURL=!1,A=ib(A,OuA,""),A=ib(A,quA,"$1")),A=ib(A,_uA,""),C=zo(A);t<=C.length;){switch(Q=C[t],e){case eb:if(!Q||!ji(uX,Q)){if(I)return Bb;e=tb;continue}o+=y0(Q),e=MY;break;case MY:if(Q&&(ji(MuA,Q)||Q==="+"||Q==="-"||Q==="."))o+=y0(Q);else{if(Q!==":"){if(I)return Bb;o="",e=tb,t=0;continue}if(I&&(E.isSpecial()!==hG(Jl,o)||o==="file"&&(E.includesCredentials()||E.port!==null)||E.scheme==="file"&&!E.host))return;if(E.scheme=o,I)return void(E.isSpecial()&&Jl[E.scheme]===E.port&&(E.port=null));o="",E.scheme==="file"?e=ab:E.isSpecial()&&g&&g.scheme===E.scheme?e=fY:E.isSpecial()?e=HY:C[t+1]==="/"?(e=jY,t++):(E.cannotBeABaseURL=!0,Pr(E.path,""),e=OY)}break;case tb:if(!g||g.cannotBeABaseURL&&Q!=="#")return Bb;if(g.cannotBeABaseURL&&Q==="#"){E.scheme=g.scheme,E.path=Fi(g.path),E.query=g.query,E.fragment="",E.cannotBeABaseURL=!0,e=xB;break}e=g.scheme==="file"?ab:ob;continue;case fY:if(Q!=="/"||C[t+1]!=="/"){e=ob;continue}e=Vl,t++;break;case jY:if(Q==="/"){e=zl;break}e=PB;continue;case ob:if(E.scheme=g.scheme,Q===MQ)E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=Fi(g.path),E.query=g.query;else if(Q==="/"||Q==="\\"&&E.isSpecial())e=XY;else if(Q==="?")E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=Fi(g.path),E.query="",e=Ct;else{if(Q!=="#"){E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=Fi(g.path),E.path.length--,e=PB;continue}E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=Fi(g.path),E.query=g.query,E.fragment="",e=xB}break;case XY:if(!E.isSpecial()||Q!=="/"&&Q!=="\\"){if(Q!=="/"){E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,e=PB;continue}e=zl}else e=Vl;break;case HY:if(e=Vl,Q!=="/"||Ei(o,t+1)!=="/")continue;t++;break;case Vl:if(Q!=="/"&&Q!=="\\"){e=zl;continue}break;case zl:if(Q==="@"){r&&(o="%40"+o),r=!0,i=zo(o);for(var n=0;n65535)return VY;E.port=E.isSpecial()&&P===Jl[E.scheme]?null:P,o=""}if(I)return;e=Mo;continue}return VY}o+=Q;break;case ab:if(E.scheme="file",Q==="/"||Q==="\\")e=xY;else{if(!g||g.scheme!=="file"){e=PB;continue}switch(Q){case MQ:E.host=g.host,E.path=Fi(g.path),E.query=g.query;break;case"?":E.host=g.host,E.path=Fi(g.path),E.query="",e=Ct;break;case"#":E.host=g.host,E.path=Fi(g.path),E.query=g.query,E.fragment="",e=xB;break;default:zY(Ra(Fi(C,t),""))||(E.host=g.host,E.path=Fi(g.path),E.shortenPath()),e=PB;continue}}break;case xY:if(Q==="/"||Q==="\\"){e=nb;break}g&&g.scheme==="file"&&!zY(Ra(Fi(C,t),""))&&(La(g.path[0],!0)?Pr(E.path,g.path[0]):E.host=g.host),e=PB;continue;case nb:if(Q===MQ||Q==="/"||Q==="\\"||Q==="?"||Q==="#"){if(!I&&La(o))e=PB;else if(o===""){if(E.host="",I)return;e=Mo}else{if(B=E.parseHost(o))return B;if(E.host==="localhost"&&(E.host=""),I)return;o="",e=Mo}continue}o+=Q;break;case Mo:if(E.isSpecial()){if(e=PB,Q!=="/"&&Q!=="\\")continue}else if(I||Q!=="?")if(I||Q!=="#"){if(Q!==MQ&&(e=PB,Q!=="/"))continue}else E.fragment="",e=xB;else E.query="",e=Ct;break;case PB:if(Q===MQ||Q==="/"||Q==="\\"&&E.isSpecial()||!I&&(Q==="?"||Q==="#")){if(CDA(o)?(E.shortenPath(),Q==="/"||Q==="\\"&&E.isSpecial()||Pr(E.path,"")):gDA(o)?Q==="/"||Q==="\\"&&E.isSpecial()||Pr(E.path,""):(E.scheme==="file"&&!E.path.length&&La(o)&&(E.host&&(E.host=""),o=Ei(o,0)+":"),Pr(E.path,o)),o="",E.scheme==="file"&&(Q===MQ||Q==="?"||Q==="#"))for(;E.path.length>1&&E.path[0]==="";)WuA(E.path);Q==="?"?(E.query="",e=Ct):Q==="#"&&(E.fragment="",e=xB)}else o+=kE(Q,yX);break;case OY:Q==="?"?(E.query="",e=Ct):Q==="#"?(E.fragment="",e=xB):Q!==MQ&&(E.path[0]+=kE(Q,s9));break;case Ct:I||Q!=="#"?Q!==MQ&&(Q==="'"&&E.isSpecial()?E.query+="%27":E.query+=Q==="#"?"%23":kE(Q,s9)):(E.fragment="",e=xB);break;case xB:Q!==MQ&&(E.fragment+=kE(Q,bX))}t++}},parseHost:function(A){var I,g,C;if(Ei(A,0)==="["){if(Ei(A,A.length-1)!=="]"||!(I=ADA(Cn(A,1,-1))))return gt;this.host=I}else if(this.isSpecial()){if(A=TuA(A),ji(HuA,A)||(I=$uA(A))===null)return gt;this.host=I}else{if(ji(xuA,A))return gt;for(I="",g=zo(A),C=0;C1?arguments[1]:void 0,C=UuA(I,new GS(A,!1,g));yS||(I.href=C.serialize(),I.origin=C.getOrigin(),I.protocol=C.getProtocol(),I.username=C.getUsername(),I.password=C.getPassword(),I.host=C.getHost(),I.hostname=C.getHostname(),I.port=C.getPort(),I.pathname=C.getPathname(),I.search=C.getSearch(),I.searchParams=C.getSearchParams(),I.hash=C.getHash())},DC=Ls.prototype,jQ=function(A,I){return{get:function(){return D0(this)[A]()},set:I&&function(g){return D0(this)[I](g)},configurable:!0,enumerable:!0}};if(yS&&(fQ(DC,"href",jQ("serialize","setHref")),fQ(DC,"origin",jQ("getOrigin")),fQ(DC,"protocol",jQ("getProtocol","setProtocol")),fQ(DC,"username",jQ("getUsername","setUsername")),fQ(DC,"password",jQ("getPassword","setPassword")),fQ(DC,"host",jQ("getHost","setHost")),fQ(DC,"hostname",jQ("getHostname","setHostname")),fQ(DC,"port",jQ("getPort","setPort")),fQ(DC,"pathname",jQ("getPathname","setPathname")),fQ(DC,"search",jQ("getSearch","setSearch")),fQ(DC,"searchParams",jQ("getSearchParams")),fQ(DC,"hash",jQ("getHash","setHash"))),Wl(DC,"toJSON",function(){return D0(this).serialize()},{enumerable:!0}),Wl(DC,"toString",function(){return D0(this).serialize()},{enumerable:!0}),Hv){var qY=Hv.createObjectURL,_Y=Hv.revokeObjectURL;qY&&Wl(Ls,"createObjectURL",WY(qY,Hv)),_Y&&Wl(Ls,"revokeObjectURL",WY(_Y,Hv))}puA(Ls,"URL"),GuA({global:!0,forced:!RuA,sham:!yS},{URL:Ls});var QDA=TA,iDA=$g,mX=sI,BDA=bc,$Y=rQ,EDA=$d,RS=iDA("URL"),eDA=EDA&&mX(function(){RS.canParse()}),tDA=mX(function(){return RS.canParse.length!==1});QDA({target:"URL",stat:!0,forced:!eDA||tDA},{canParse:function(A){var I=BDA(arguments.length,1),g=$Y(A),C=I<2||arguments[1]===void 0?void 0:$Y(arguments[1]);try{return!!new RS(g,C)}catch{return!1}}});var oDA=TA,rDA=$g,sDA=bc,AN=rQ,vDA=$d,aDA=rDA("URL");oDA({target:"URL",stat:!0,forced:!vDA},{parse:function(A){var I=sDA(arguments.length,1),g=AN(A),C=I<2||arguments[1]===void 0?void 0:AN(arguments[1]);try{return new aDA(g,C)}catch{return null}}});var nDA=oQ,cDA=nDA.URL,lDA=cDA,PDA=lDA,dDA=PDA,hDA=dDA,uDA=hDA,DDA=uDA,bDA=DDA,yDA=bDA,vi=nI(yDA);function IN(A){const I=PressureObserver.supportedSources;let g="thermal";g=I!=null&&I.includes("thermal")?"thermal":"cpu";const C=new PressureObserver(Q=>{Q.forEach(i=>{i.source===g&&A(i.state)})});return C.observe(g,{sampleInterval:2e3}),C}class mDA{constructor(){l(this,"_state",void 0),l(this,"_handler",!1)}init(){if((wdA||!yA("DISABLE_COMPUTE_PRESSURE"))&&{}.VITE_TEST!=="UT")try{if(CX()){const I=new Blob(["(".concat(IN.toString(),")(self.postMessage)")],{type:"text/javascript"}),g=new Worker(vi.createObjectURL(I));g.onmessage=C=>{this._state=C.data},this._handler=g}else this._handler=IN(I=>{this._state=I})}catch{}}get state(){return qd&&!pe()&&(window.thermal_status=this._state),this._handler||this.init(),this._state}}var m0=new mDA;const wDA=["codec","inbound-rtp","outbound-rtp","remote-inbound-rtp","remote-outbound-rtp","media-source","csrc","peer-connection","data-channel","stream","track","transceiver","sender","receiver","transport","sctp-transport","candidate-pair","local-candidate","remote-candidate","certificate","ice-server"],w0=new Map;let cb=!0;const GDA=async A=>new Promise(I=>{const g={all:[],getTrackStats:()=>[]},C=yA("STATS_SCALLBACK_SUPPORT");if(cb&&we&&window.InstallTrigger===void 0&&gX&&C)try{var Q,i,B;(Q=A.getStats(E=>{const e=[];E.result().forEach(t=>{if(wDA.includes(t.type))return;const o={};t.names().forEach(function(r){o[r]=t.stat(r)}),e.push(p(p({},o),{},{id:t.id,type:t.type,timestamp:t.timestamp}))}),I({all:e,getTrackStats:t=>e.filter(o=>o.type!=="ssrc"||o.googTrackId===t)})}))===null||Q===void 0||(i=Q.then)===null||i===void 0||(i=i.call(Q,()=>{I(g)}))===null||i===void 0||(B=i.catch)===null||B===void 0||B.call(i,()=>{cb=!1,I(g)})}catch{cb=!1,I(g)}else I(g)}),RDA=async A=>{var I;const g=await A.getStats(),C={all:[]},Q=new Map;g.forEach(e=>{const t=Q.get(e.type)||new Map;t.set(e.id,e),Q.set(e.type,t),C.all.push(e)});const i=(e,t)=>{e.forEach(o=>{var r,s,v,n;let a,c,{codecId:P,transportId:d,trackId:h,playoutId:u}=o;if((r=Q.get("codec"))===null||r===void 0||r.forEach(L=>{L.id===P&&t.add(L)}),(s=Q.get("transport"))===null||s===void 0||s.forEach(L=>{L.id===d&&(a=L,t.add(L))}),(v=Q.get("track"))===null||v===void 0||v.forEach(L=>{L.id===h&&t.add(L)}),(n=Q.get("media-playout"))===null||n===void 0||n.forEach(L=>{L.id===u&&t.add(L)}),a){var D,y;const{localCertificateId:L,remoteCertificateId:m,selectedCandidatePairId:F}=a;(D=Q.get("certificate"))===null||D===void 0||D.forEach(U=>{(U.id===L||U.id===m)&&t.add(U)}),(y=Q.get("candidate-pair"))===null||y===void 0||y.forEach(U=>{U.id===F&&(c=U,t.add(U))})}if(c){var b,G;const{localCandidateId:L,remoteCandidateId:m}=c;(b=Q.get("local-candidate"))===null||b===void 0||b.forEach(F=>{F.id===L&&t.add(F)}),(G=Q.get("remote-candidate"))===null||G===void 0||G.forEach(F=>{F.id===m&&t.add(F)})}})};var B;if(Q.get("media-source"))(B=Q.get("media-source"))===null||B===void 0||B.forEach(e=>{var t;const o=new Set;o.add(e);const r=[];(t=Q.get("outbound-rtp"))===null||t===void 0||t.forEach(s=>{var v;s.mediaSourceId===e.id&&(o.add(s),r.push(s),(v=Q.get("remote-inbound-rtp"))===null||v===void 0||v.forEach(n=>{n.localId===s.id&&o.add(n)}))}),i(r,o),C[e.trackIdentifier]=Array.from(o)});else if(Q.get("track")){var E;(E=Q.get("track"))===null||E===void 0||E.forEach(e=>{var t;const o=new Set;o.add(e);const r=[];(t=Q.get("outbound-rtp"))===null||t===void 0||t.forEach(s=>{var v;s.trackId===e.id&&(o.add(s),r.push(s),(v=Q.get("remote-inbound-rtp"))===null||v===void 0||v.forEach(n=>{n.localId===s.id&&o.add(n)}))}),i(r,o),C[e.trackIdentifier]=Array.from(o)})}return(I=Q.get("inbound-rtp"))===null||I===void 0||I.forEach(e=>{var t;const o=new Set;o.add(e),(t=Q.get("remote-outbound-rtp"))===null||t===void 0||t.forEach(v=>{v.localId===e.id&&o.add(v)}),i([e],o);let{trackIdentifier:r}=e;var s;r||(s=Q.get("track"))===null||s===void 0||s.forEach(v=>{v.id===e.trackId&&(r=v.trackIdentifier)}),C[r]=Array.from(o)}),C},LDA=async(A,I,g,C)=>{const Q=I==null?void 0:I.id;if(!(A instanceof RTCPeerConnection))return[];if(KI||kQ){const e=[];try{(C?await C.getStats():await A.getStats(I)).forEach(t=>{e.push(t)})}catch{}return e}let i=w0.get(A);(!i||Date.now()-i.timestamp>150)&&(i={timestamp:Date.now(),statsPromise:RDA(A),extraStatsPromise:GDA(A)},w0.set(A,i));const B=await i.statsPromise;let E=(Q?B[Q]:B.all)||[];if(!g){const e=await i.extraStatsPromise;E=E.concat((Q?e.getTrackStats(Q):e.all)||[])}return E},SDA=A=>{w0.has(A)&&w0.delete(A)};class wX{constructor(I){l(this,"_timer",void 0),l(this,"_reportTimer",void 0),l(this,"handler",void 0),l(this,"_monitor",void 0),l(this,"logger",void 0),l(this,"_destroyed",!1),l(this,"_isReportStarted",!1),this._context=I,this._monitor=bI(I.id),this.logger=new SA("Stats",3,I.id)}setVar(I){this.handler=I}stopReport(I){this._isReportStarted&&(this.logger.info("stopReport","invoke"),this._isReportStarted=!1,clearTimeout(this._reportTimer),delete this._reportTimer,rI(this._context.id,"del_media_statistics_timer","reason: ".concat(I,", stack: ").concat(new Error().stack),0,this._stream.streamId||""))}filterIllegal(I){const g={};return Object.keys(I).forEach(C=>{I[C]===null||I[C]===void 0||Number.isNaN(I[C])||(g[C]=I[C])}),g}destroy(){this.logger.info("destroy","invoke"),rI(this._context.id,"media_statistics_destroy","".concat(new Error().stack),0,"".concat(this._stream.streamId)),this.stopReport("destroy"),clearTimeout(this._timer),this._destroyed=!0}}class TDA extends wX{constructor(I,g){super(I),l(this,"_stats",{audioStats:{},videoStats:{}}),l(this,"_preReports",{audio:{},video:{}}),this._stream=g;const C=async()=>{this._stats=await this._getLocalStats(this._stream,this._preReports,!1),this._destroyed||(this._timer=setTimeout(C,yA("STATS_LOOP_INTERVAL")))};C()}setLocalStreamStatsEvtInterval(I,g){if(this._isReportStarted)return;this.logger.info("setLocalStreamStatsEvtInterval","invoke"),this._isReportStarted=!0,this.setVar(g),this._destroyed=!1;const C={audio:{},video:{}},Q=async()=>{const i=await this._getLocalStats(this._stream,C,!0);I(i),this._destroyed||(this._reportTimer=setTimeout(Q,2e3))};Q()}getLocalStats(){return this._stats}async _getLocalStats(I,g,C){var Q,i,B,E,e,t,o;const r=((Q=I.audioTrack)===null||Q===void 0?void 0:Q.mixType)!==void 0&&I.audioTrack.mixType!==li.PLAYOUT?(i=(B=I.audioTrack)===null||B===void 0?void 0:B.mixedAudioTrack)!==null&&i!==void 0?i:(E=I.audioTrack)===null||E===void 0?void 0:E.preprocessingTrack:(e=I.audioTrack)===null||e===void 0?void 0:e.preprocessingTrack,s=(t=I.videoTrack)===null||t===void 0?void 0:t.preprocessingTrack;var v;return Object.keys(g.audio).length===0&&Object.keys(g.video).length===0&&(await this.getAudioStats(r,g,(v=I.audioTrack)===null||v===void 0?void 0:v.getAudioLevel(),C),await this.getVideoStats(s,g,C),await Bj(150)),{audioStats:await this.getAudioStats(r,g,(o=I.audioTrack)===null||o===void 0?void 0:o.getAudioLevel(),C),videoStats:await this.getVideoStats(s,g,C),isScreen:I.isScreen}}async getAudioStats(I,g,C,Q){var i,B,E;const e={},t={timestamp:Date.now()},{streamId:o,audioMid:r,isScreen:s,pubAttributes:v,pubAudio:n,audioTrack:a}=this._stream,c={media_type:"audio",is_screen:!!s,direction:"up",stream_id:o,vid:r,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,capture_state:v.localaudio?"capture_state_on":"capture_state_off",mute_state:n?"mute_state_off":"mute_state_on",thermal_status:m0.state};if(a&&(c.playback_volume=a.getVolume()),!I||!this.handler)return e;const P=await((i=this.handler.peer)===null||i===void 0?void 0:i.getStatsWithLowFrequency(I,!1,(B=this._stream.audioTransceiver)===null||B===void 0?void 0:B.sender));if(!P.length)return e;if(P.forEach(u=>{let{type:D,packetsSent:y,packetsLost:b,bytesSent:G,clockRate:L,roundTripTime:m,channels:F,audioLevel:U,mimeType:AA,availableIncomingBitrate:X,availableOutgoingBitrate:Y,bytesReceived:J,nominated:V,id:N,currentRoundTripTime:z,state:w,writable:CA,requestsReceived:QA,responsesReceived:R,requestsSent:cA,consentRequestsSent:lA,responsesSent:H,jitter:tA,candidateType:GA,ip:FA,address:WA,networkType:JI,port:zA,protocol:VI,nackCount:lC,retransmittedBytesSent:aQ,retransmittedPacketsSent:vg,audioInputLevel:nQ,ssrc:VQ,totalAudioEnergy:PC,totalSamplesDuration:ZC,mediaType:IC,fractionLost:zQ}=u;D==="outbound-rtp"?(t.packetsSent=y,t.bytesSent=G,c.bytes=G,c.packetsSent=y,c.nackCount=lC,c.ssrc=VQ,c.retransmitted_bytes_sent=aQ,c.retransmitted_packets_sent=vg,t.retransmittedBytesSent=aQ,t.retransmittedPacketsSent=vg):D==="remote-inbound-rtp"?(t.packetsLost=b,c.packetsLost=b,c.net_jitter=1e3*tA,e.rtt=1e3*m,c.rtt=e.rtt,e._fractionLost=zQ||0):D==="codec"?(e.recordSampleRate=L,e.numChannels=F,c.codecName=AA):D==="media-source"&&U!==void 0?(c.audio_level=U&&-10*Math.log10(Math.pow(U,2)),c.volume=255*U,c.total_audio_energy=PC,c.totalInputDuration=ZC,c.send_level||(c.send_level=U)):D==="ssrc"&&IC==="audio"?nQ&&(c.send_level=nQ):D==="candidate-pair"?(c.ice_available_incoming_bitrate=X,c.ice_available_outgoing_bitrate=Y,c.ice_bytes_received=J,c.ice_bytes_sent=G,c.ice_nominated=Number(V),c.ice_pair_id=N,c.ice_pair_rtt=z,c.ice_pair_state=w,c.ice_pair_writable=CA,c.recv_ping_requests=QA,c.recv_ping_responses=R,c.sent_ping_requests_before_first_response=cA,c.sent_ping_requests_total=cA+(lA||0),c.sent_ping_responses=H):D==="local-candidate"?(c.local_candidate_type=GA,c.local_ip=FA||WA,c.local_network_type=JI,c.local_port=zA,c.protocol=VI):D==="remote-candidate"&&(c.remote_candidate_type=GA,c.remote_ip=FA||WA,c.remote_port=zA)}),c.send_level)c.send_level<1?c._sendVolumeLevel=32767*c.send_level:c._sendVolumeLevel=c.send_level;else{const u=(a==null?void 0:a.getAudioLevel())||0;c._sendVolumeLevel=Math.round(u/255*32767)}c.volume===void 0&&C!==void 0&&(c.volume=C,c.audio_level=C&&-10*Math.log10(Math.pow(C/255,2)));const{audio:d}=g;if(!d.timestamp)return g.audio=t,this.filterIllegal(e);var h;return t.packetsLost!==void 0&&(e.audioLossRate=Math.max(0,t.packetsLost-d.packetsLost)/(t.packetsSent-d.packetsSent),e.audioLossRate=Number.isNaN(e.audioLossRate)?0:e.audioLossRate,c.fraction_lost=e.audioLossRate),e.statsInterval=t.timestamp-d.timestamp,c.stats_interval=e.statsInterval,e.sendKBitrate=(t.bytesSent-d.bytesSent||0)/e.statsInterval*8,c.mediaBitratebps=Math.round(1e3*e.sendKBitrate),c.bandwidth=Math.round(c.mediaBitratebps/1024),t.retransmittedBytesSent!==void 0&&(c.retransmitBitratebps=(t.retransmittedBytesSent-d.retransmittedBytesSent||0)/e.statsInterval),g.audio=t,c.vendor_mode=this._stream.vendorCode||0,c.pc_session_id=(E=this.handler)===null||E===void 0?void 0:E.peerConnectionId,Q&&((h=this._monitor)===null||h===void 0||h.report("rtc_media_statistics",c)),e._retransmittedRate=(t.retransmittedPacketsSent-d.retransmittedPacketsSent)/(t.packetsSent-d.packetsSent),e.audioLossRate===void 0&&(e.audioLossRate=e._retransmittedRate,c.fraction_lost=e.audioLossRate),e._fractionLost=Math.max(e._fractionLost,e.audioLossRate),e._sendVolumeLevel=c._sendVolumeLevel,this.filterIllegal(e)}async getVideoStats(I,g,C){var Q,i,B;const E={},e={timestamp:Date.now(),simulcast:{}},{streamId:t,videoMid:o,isScreen:r,pubAttributes:s,enableSimulcast:v,pubVideo:n}=this._stream,a={media_type:"video",is_screen:!!r,direction:"up",stream_id:t,vid:o,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,capture_state:s.localvideo?"capture_state_on":"capture_state_off",mute_state:n?"mute_state_off":"mute_state_on",thermal_status:m0.state};if(!I||!this.handler)return E;a.cap_frame_width=I.getSettings().width,a.cap_frame_height=I.getSettings().height,a.frameRateSent=I.getSettings().frameRate,E.isScreen=r,a.is_intersecting=JSON.stringify((Q=this._stream)===null||Q===void 0||(Q=Q.videoTrack)===null||Q===void 0?void 0:Q.intersection());const c=await((i=this.handler.peer)===null||i===void 0?void 0:i.getStatsWithLowFrequency(I,!1,(B=this._stream.videoTransceiver)===null||B===void 0?void 0:B.sender));if(!c.length)return E;let P=0;c.forEach(G=>{const{type:L,framesEncoded:m,packetsLost:F,bytesSent:U,framesSent:AA,retransmittedBytesSent:X,totalPacketSendDelay:Y,totalEncodeTime:J,firCount:V,targetBitrate:N,roundTripTime:z,mimeType:w,frameWidth:CA,frameHeight:QA,packetsSent:R,googActualEncBitrate:cA,googAvailableReceiveBandwidth:lA,googAvailableSendBandwidth:H,googAvgEncodeMs:tA,googBucketDelay:GA,googEncodeUsagePercent:FA,googFrameRateInput:WA,availableIncomingBitrate:JI,availableOutgoingBitrate:zA,bytesReceived:VI,nominated:lC,id:aQ,currentRoundTripTime:vg,state:nQ,writable:VQ,candidateType:PC,ip:ZC,address:IC,networkType:zQ,port:rB,nackCount:dC,pliCount:KC,protocol:x,qpSum:iA,requestsReceived:uA,responsesReceived:mA,googRetransmitBitrate:XA,requestsSent:Bg,consentRequestsSent:cQ,responsesSent:_I,ssrc:WC,googTargetEncBitrate:Wg,googTransmitBitrate:Tg,retransmittedPacketsSent:Ti,encoderImplementation:JC,jitter:mo,rid:uv,fractionLost:Dv,googAdaptationChanges:bv,qualityLimitationReason:Rh,qualityLimitationDurations:jc,googFirsReceived:Lh,googFrameRateSent:Xc,keyFramesEncoded:wo,scalabilityMode:Go,framesPerSecond:Hc,frames:Sh}=G;L==="outbound-rtp"?(v&&(uv?e.simulcast[uv]=G:e.simulcast[P]=G,P++),e.framesEncoded=m||e.framesEncoded||0,a.key_frames_encoded=wo||0,e.bytesSent=U||e.bytesSent||0,e.framesSent=AA||e.framesSent,a.bytes=U||a.bytes||0,e.packetsSent=R||e.packetsSent||0,a.packetsSent=R||a.packetsSent||0,a.nackCount=dC||a.nackCount||0,a.pli_count=KC||a.pli_count||0,a.qp_sum=iA||a.qp_sum||0,a.ssrc=WC||a.ssrc||0,a.retransmitted_packets_sent=Ti,e.retransmittedPacketsSent=Ti,e.retransmittedBytesSent=X,a.encoder_implementation=JC,a.qualityLimitationReason=Rh,a.qualityLimitationDurations=jc,a.scalabilityMode=Go,CA!==void 0&&((!E.encodedFrameWidth||CA>E.encodedFrameWidth)&&(E.encodedFrameWidth=CA),(!E.encodedFrameHeight||QA>E.encodedFrameHeight)&&(E.encodedFrameHeight=QA),a.frame_size_height=QA,a.frame_size_width=CA)):L==="track"?(E.encodedFrameWidth=CA,E.encodedFrameHeight=QA,a.frame_size_height=QA,a.frame_size_width=CA):L==="remote-inbound-rtp"?(e.packetsLost=F,E.rtt=1e3*z,a.rtt=E.rtt,a.jitter=1e3*mo,a.packetsLost=F,E._fractionLost=Dv||0):L==="codec"?(E.codecType=w,a.codecName=w):L==="candidate-pair"?(a.ice_available_incoming_bitrate=JI,a.ice_available_outgoing_bitrate=zA,a.ice_bytes_received=VI,a.ice_bytes_sent=U,a.ice_nominated=Number(lC),a.ice_pair_id=aQ,a.ice_pair_rtt=vg,a.ice_pair_state=nQ,a.ice_pair_writable=VQ,a.recv_ping_requests=uA,a.recv_ping_responses=mA,a.sent_ping_requests_before_first_response=Bg,a.sent_ping_requests_total=Bg+cQ,a.sent_ping_responses=_I):L==="local-candidate"?(a.local_candidate_type=PC,a.local_ip=ZC||IC,a.local_network_type=zQ,a.local_port=rB,a.protocol=x):L==="remote-candidate"?(a.remote_candidate_type=PC,a.remote_ip=ZC||IC,a.remote_port=rB):L==="VideoBwe"?(a.encBitratebps=cA,a.available_receive_bandwidth=lA,a.available_send_bandwidth=H,a.bucket_delay=GA,a.retransmitBitratebps=XA,a.targetEncBitratebps=Wg,a.transmit_bitrate=Tg,E._sendBandWidth=Number(H)):L==="ssrc"&&(a.avg_encode_ms=tA,a.encodeUsage=FA,a.frame_rate_input=WA,a.orignal_input_Framerate=Number(WA),a.ddaptationChanges=bv,a.firsReceived=Lh,a.frameRateSent=Xc);const T=yA("STATS_SCALLBACK_SUPPORT");if(!gX||!T){const{video:Z}=g,M=e.timestamp-Z.timestamp;if(L==="outbound-rtp"){const gA=U-Z.bytesSent,oA=X-Z.retransmittedBytesSent;a.encBitratebps=Math.round(8e3*(gA-oA)/M),a.bucket_delay=Y/R,a.retransmitBitratebps=Math.round(8e3*oA/M),a.targetEncBitratebps=N,a.transmit_bitrate=Math.round(1e3*(U-Z.bytesSent)*8/M),a.avg_encode_ms=1e3*J/m,a.firsReceived=V+KC}else L==="candidate-pair"?(a.available_send_bandwidth=zA,E._sendBandWidth=zA):L==="media-source"&&(a.frame_rate_input=Hc,a.orignal_input_Framerate=Number(Hc),a.frame_input=Sh)}});const{video:d}=g;if(!d.timestamp)return g.video=e,this.filterIllegal(E);E.statsInterval=e.timestamp-d.timestamp,a.stats_interval=E.statsInterval;const h=Object.keys(e.simulcast);if(v){var u;a.sim_enc_width=[],a.sim_enc_height=[],a.sim_enc_bps=[],a.sim_enc_framerate=[],a.sim_enc_key_frames=[],a.sim_rids=[],a.sim_enc_bandwidth=[],a.sim_sent_framerate=[],a.sim_fraction_lost=[],a.sim_keyencoded=[],a.active_sim_streams=this._context.videoProfile.activeSimStreams||[],a.sim_retransmittedRate=[];let G=!1;var D;ws(h).call(h,(L,m)=>Number(L)-Number(m)).forEach(L=>{const{frameWidth:m,frameHeight:F,bytesSent:U,framesEncoded:AA,framesSent:X,packetsLost:Y,packetsSent:J,qualityLimitationReason:V,qualityLimitationDurations:N,qualityLimitationResolutionChanges:z,retransmittedPacketsSent:w,pliCount:CA,keyFramesEncoded:QA}=e.simulcast[L];V!==void 0&&(a.sim_qualityLimitationReason||(a.sim_qualityLimitationReason=[],a.sim_qualityLimitationDurations=[],a.sim_qualityLimitationResolutionChanges=[]),a.sim_qualityLimitationReason.push(V),a.sim_qualityLimitationDurations.push(N),a.sim_qualityLimitationResolutionChanges.push(z));const R=d.simulcast[L];if(a.sim_enc_width.push(m||0),a.sim_enc_height.push(F||0),a.sim_enc_key_frames.push(QA||0),R){const cA=(U-R.bytesSent||0)/E.statsInterval;a.sim_enc_bps.push(Math.round(8e3*cA)),a.sim_enc_bandwidth.push(Math.round(8e3*cA/1024));const lA=1e3*(AA-R.framesEncoded)/E.statsInterval;a.sim_enc_framerate.push(Math.round(lA)),a.sim_rids.push(L);const H=X!==void 0?X-R.framesSent:AA-R.framesEncoded,tA=1e3*H/E.statsInterval;a.sim_sent_framerate.push(Math.round(tA));let GA=(Y-R.packetsLost)/(J-R.packetsSent);E._retransmittedRate=(w-R.retransmittedPacketsSent)/(J-R.packetsSent),GA=Number.isNaN(GA)?0:GA,a.sim_fraction_lost.push(GA),a.sim_keyencoded.push(CA-R.pliCount>0),a.sim_retransmittedRate.push(E._retransmittedRate),m>0&&!G&&(E.rid=L,E.sentKBitrate=8*cA,E.encoderOutputFrameRate=lA,E.encodedFrameCount=H,E.sentFrameRate=tA,E.videoLossRate=GA,G=!0)}}),a.vendor_mode=this._stream.vendorCode||0,a.pc_session_id=(u=this.handler)===null||u===void 0?void 0:u.peerConnectionId,C&&((D=this._monitor)===null||D===void 0||D.report("rtc_media_statistics",a))}else{var y,b;E.encodedFrameCount=e.framesSent!==void 0?e.framesSent-d.framesSent:e.framesEncoded-d.framesEncoded,E.sentKBitrate=(e.bytesSent-d.bytesSent||0)/E.statsInterval*8,a.bitrate=Math.round(1e3*E.sentKBitrate),a.bandwidth=Math.round(a.bitrate/1024),E.encoderOutputFrameRate=1e3*(e.framesEncoded-d.framesEncoded)/E.statsInterval,a.frame_rate_encoded=Math.round(E.encoderOutputFrameRate),E.sentFrameRate=1e3*E.encodedFrameCount/E.statsInterval,a.frame_rate_sent=Math.round(E.sentFrameRate),E.videoLossRate=Math.max(0,e.packetsLost-d.packetsLost)/(e.packetsSent-d.packetsSent),E.videoLossRate=Number.isNaN(E.videoLossRate)?0:E.videoLossRate,a.fraction_lost=E.videoLossRate,E._retransmittedRate=(e.retransmittedPacketsSent-d.retransmittedPacketsSent)/(e.packetsSent-d.packetsSent),a.vendor_mode=this._stream.vendorCode||0,a.pc_session_id=(y=this.handler)===null||y===void 0?void 0:y.peerConnectionId,C&&((b=this._monitor)===null||b===void 0||b.report("rtc_media_statistics",a))}return g.video=e,E._fractionLost=Math.max(E._fractionLost,E.videoLossRate),E._captureResolutionWidth=a.cap_frame_width,E._captureResolutionHeight=a.cap_frame_height,this.filterIllegal(E)}}class pDA extends wX{constructor(I,g){super(I),l(this,"_stats",{audioStats:{},videoStats:{}}),l(this,"_preReports",{audio:{},video:{}}),this._stream=g;const C=async()=>{this._stats=await this._getRemoteStreamStats(this._stream,this._preReports,!1),this._destroyed||(this._timer=setTimeout(C,yA("STATS_LOOP_INTERVAL")))};C()}async setRemoteStreamStatsEvtInterval(I,g){if(this._isReportStarted)return;this.logger.info("setRemoteStreamStatsEvtInterval","invoke"),this._isReportStarted=!0,this.setVar(g),this._destroyed=!1;const C={audio:{},video:{}},Q=async()=>{const i=await this._getRemoteStreamStats(this._stream,C,!0);I(i),this._destroyed||(this._reportTimer=setTimeout(Q,2e3))};this.stopReport("start a new timer."),Q()}getRemoteStreamStats(){return this._stats}async _getRemoteStreamStats(I,g,C){var Q,i,B;const E=(Q=I.videoTrack)===null||Q===void 0?void 0:Q.originTrack,e=(i=I.audioTrack)===null||i===void 0?void 0:i.originTrack;var t;return Object.keys(g.audio).length===0&&Object.keys(g.video).length===0&&(await this.getRemoteAudioStats(e,g,(t=this._stream.audioTrack)===null||t===void 0?void 0:t.getAudioLevel(),C),await this.getRemoteVideoStats(E,g,C),await Bj(150)),{audioStats:await this.getRemoteAudioStats(e,g,(B=this._stream.audioTrack)===null||B===void 0?void 0:B.getAudioLevel(),C),videoStats:await this.getRemoteVideoStats(E,g,C),isScreen:I.isScreen,userId:I.userId,streamId:I.streamId}}unsubscribe(){this.logger.info("unsubscribe","invoke"),super.stopReport("unsubscribe"),this._stream.stopAudioStallObserve()}async getRemoteAudioStats(I,g,C,Q){var i,B,E,e;const t={},o={},{streamId:r,userId:s,isScreen:v,audioMid:n,subMediaType:a,_attributes:c,virtual:P,audioTrack:d}=this._stream,h={media_type:"audio",is_screen:!!v,direction:"down",stream_id:r,stream_user_id:s,vid:n,audio_mux:P,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,mute_state:lg(a)?"mute_state_off":"mute_state_on",remote_user_capture_state:c.localaudio?"capture_state_on":"capture_state_off",remote_user_mute_state:c.localaudio&&c.audiostream?"mute_state_off":"mute_state_on",thermal_status:m0.state};if(d&&(h.playback_volume=d.getVolume()),!I||!this.handler)return t;const u=await((i=this.handler.peer)===null||i===void 0?void 0:i.getStatsWithLowFrequency(I,!1,(B=this._stream.audioTransceiver)===null||B===void 0?void 0:B.receiver));if(!u.length)return t;u.forEach(G=>{let{type:L,packetsLost:m,packetsReceived:F,bytesReceived:U,jitterBufferDelay:AA,jitterBufferEmittedCount:X,clockRate:Y,channels:J,totalSamplesReceived:V,concealedSamples:N,silentConcealedSamples:z,concealmentEvents:w,totalRoundTripTime:CA,packetsDiscarded:QA,state:R,currentRoundTripTime:cA,audioLevel:lA,totalAudioEnergy:H,totalSamplesDuration:tA,mimeType:GA,googDecodingNormal:FA,googDecodingMuted:WA,availableIncomingBitrate:JI,availableOutgoingBitrate:zA,bytesSent:VI,nominated:lC,id:aQ,writable:vg,jitter:nQ,candidateType:VQ,ip:PC,address:ZC,networkType:IC,port:zQ,protocol:rB,audioOutputLevel:dC,requestsReceived:KC,responsesReceived:x,requestsSent:iA,consentRequestsSent:uA,responsesSent:mA,ssrc:XA,nackCount:Bg,lastPacketReceivedTimestamp:cQ,concealmentevents:_I,fecPacketsReceived:WC}=G;if(L==="inbound-rtp")o.packetsLost=m,o.packetsReceived=F,h.packetsLost=m,h.packetsReceived=F,h.packetsDiscarded=QA,h.nackCount=Bg,h.lastPacketReceivedTimestamp=cQ,h.concealmentevents=_I,o.bytesReceived=U,AA!==void 0&&(t.jitterBufferDelay=AA/X*1e3,h.average_jitter_buffer_delay_ms=t.jitterBufferDelay),V!==void 0&&(o.totalSamplesReceived=V,t.concealedSamples=N,o.concealedSamples=N,o.silentConcealedSamples=z,h.concealedSamples=N,t.concealmentEvents=w,h.totalSamplesReceived=V),WC!==void 0&&(h.fec_packets_received=WC,o.fecPacketsReceived=WC),h.jitter=1e3*nQ,h.ssrc=XA,lA!==void 0&&lA!==0?(h.audio_level=lA&&-10*Math.log10(Math.pow(lA,2)),h.volume=255*lA):(h.volume=C??255*lA,h.audio_level=C&&-10*Math.log10(Math.pow(C/255,2))),H!==void 0&&(h.total_audio_energy=H),tA!==void 0&&(h.totalAudioDuration=tA);else if(L==="codec")t.recordSampleRate=Y,J&&(t.numChannels=J),h.codecName=GA;else if(L==="candidate-pair"){var Wg;h.ice_available_incoming_bitrate=JI,h.ice_available_outgoing_bitrate=zA,h.ice_bytes_received=U,h.ice_bytes_sent=VI,h.ice_nominated=Number(lC),h.ice_pair_id=aQ,h.ice_pair_rtt=cA,h.rtt=1e3*cA,h.rtt&&(Wg=this._context.streamRTT)!==null&&Wg!==void 0&&(Wg=Wg[r])!==null&&Wg!==void 0&&Wg.audio&&(h.total_rtt_ms=Math.round(h.rtt+this._context.streamRTT[r].audio)),h.ice_pair_state=R,h.ice_pair_writable=vg,h.recv_ping_requests=KC,h.recv_ping_responses=x,h.sent_ping_requests_before_first_response=iA,h.sent_ping_requests_total=iA+(uA||0),h.sent_ping_responses=mA,R==="succeeded"&&(t.rtt=1e3*cA,t.total_rtt=1e3*CA)}else L==="track"&&lA!==void 0?(lA===0&&C!==0?(h.volume=C,h.audio_level=C&&-10*Math.log10(Math.pow(C/255,2))):(h.audio_level=lA&&-10*Math.log10(Math.pow(lA,2)),h.volume=255*lA),h.total_audio_energy=H,h.totalAudioDuration=tA):L==="ssrc"?(h.decodingNormal=FA,h.recvAudioLevel=dC,h.decodingMuted=WA):L==="local-candidate"?(h.local_candidate_type=VQ,h.local_ip=PC||ZC,h.local_network_type=IC,h.local_port=zQ,h.protocol=rB):L==="remote-candidate"&&(h.remote_candidate_type=VQ,h.remote_ip=PC||ZC,h.remote_port=zQ)});const{audio:D}=g;if(!D.timestamp)return o.timestamp=Date.now(),g.audio=o,this.filterIllegal(t);let y;var b;return o.concealedSamples!==void 0&&(h.interval_concealed_samples=o.concealedSamples-D.concealedSamples,h.interval_samples_received=o.totalSamplesReceived-D.totalSamplesReceived,h.interval_silent_concealed_samples=o.silentConcealedSamples-D.silentConcealedSamples,y=await this._stream.updateAudioStallInfo(h,t,o)),o.timestamp=Date.now(),t.audioLossRate=Math.max(0,o.packetsLost-D.packetsLost)/(o.packetsReceived-D.packetsReceived+(o.packetsLost-D.packetsLost)),t.audioLossRate=Number.isNaN(t.audioLossRate)?0:t.audioLossRate,h.fraction_lost=t.audioLossRate,t.statsInterval=o.timestamp-D.timestamp,h.stats_interval=t.statsInterval,t.receivedKBitrate=(o.bytesReceived-D.bytesReceived||0)/t.statsInterval*8,h.bandwidth=Math.round(1e3*t.receivedKBitrate/1024),o.concealedSamples!==void 0&&(t.receivedSampleRate=1e3*h.interval_samples_received/t.statsInterval),o.fecPacketsReceived!==void 0&&(h.fecBitratebps=(o.fecPacketsReceived-D.fecPacketsReceived||0)/t.statsInterval),h.average_jitter_buffer_delay_ms&&h.total_rtt_ms&&(t.e2eDelay=h.average_jitter_buffer_delay_ms+h.total_rtt_ms),(E=this._context.streamRTT)!==null&&E!==void 0&&(E=E[r])!==null&&E!==void 0&&E.audio&&(t.totalRtt=(h.rtt?h.rtt:0)+this._context.streamRTT[r].audio),g.audio=o,h.vendor_mode=this._stream.vendorCode||0,h.pc_session_id=(e=this.handler)===null||e===void 0?void 0:e.peerConnectionId,Q&&((b=this._monitor)===null||b===void 0||b.report("rtc_media_statistics",h,y)),this.filterIllegal(t)}async getRemoteVideoStats(I,g,C){var Q,i,B,E,e;const t={},o={timestamp:Date.now()},{streamId:r,userId:s,isScreen:v,subMediaType:n,_attributes:a}=this._stream,c=p({media_type:"video",is_screen:!!v,direction:"down",stream_id:r,stream_user_id:s,vid:this._stream.videoMid,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,mute_state:vI(n)?"mute_state_off":"mute_state_on",remote_user_capture_state:a.localvideo?"capture_state_on":"capture_state_off",remote_user_mute_state:a.localvideo&&a.videostream?"mute_state_off":"mute_state_on",is_intersecting:JSON.stringify((Q=this._stream.videoTrack)===null||Q===void 0?void 0:Q.intersection()),thermal_status:m0.state},this._stream.getVideoRenderInfo());if(!I||!this.handler)return t;t.isScreen=v;const P=await((i=this.handler.peer)===null||i===void 0?void 0:i.getStatsWithLowFrequency(I,!1,(B=this._stream.videoTransceiver)===null||B===void 0?void 0:B.receiver));if(!P.length)return t;P.forEach(y=>{let{type:b,frameHeight:G,frameWidth:L,packetsLost:m,packetsReceived:F,bytesReceived:U,framesDecoded:AA,jitterBufferDelay:X,jitterBufferEmittedCount:Y,mimeType:J,firCount:V,availableIncomingBitrate:N,availableOutgoingBitrate:z,bytesSent:w,nominated:CA,id:QA,currentRoundTripTime:R,state:cA,writable:lA,candidateType:H,ip:tA,address:GA,networkType:FA,port:WA,nackCount:JI,pliCount:zA,protocol:VI,requestsReceived:lC,responsesReceived:aQ,requestsSent:vg,consentRequestsSent:nQ,responsesSent:VQ,ssrc:PC,jitter:ZC,framesReceived:IC,keyFramesDecoded:zQ,totalDecodeTime:rB,decoderImplementation:dC,lastPacketReceivedTimestamp:KC,framesDropped:x}=y;if(b==="inbound-rtp")o.packetsLost=m,c.packetsLost=m,o.packetsReceived=F,c.packetsReceived=F,o.bytesReceived=U,c.bytes=U,o.framesDecoded=AA,o.totalDecodeTime=rB,X!==void 0&&(o.jitterBufferDelay=X/Y*1e3,c.average_jitter_buffer_delay_ms=o.jitterBufferDelay),c.fir_count=V,c.nackCount=JI,o.nackCount=JI,c.pli_count=zA,c.ssrc=PC,c.framesDropped=x,c.jitter=1e3*ZC,c.framesReceived=IC,o.framesReceived=IC,c.framesDecoded=AA,c.key_frames_decoded=zQ,c.decoder_name=dC,c.last_packet_received_timestamp=KC,L!==void 0&&(t.width=L,c.frame_size_width=L,t.height=G,c.frame_size_height=G);else if(b==="track"&&L!==void 0)t.width=L,c.frame_size_width=L,t.height=G,c.frame_size_height=G,IC!==void 0&&(c.framesReceived=IC,o.framesReceived=IC);else if(b==="codec")c.codecName=J,t.codecType=J;else if(b==="candidate-pair"){var iA;c.ice_available_incoming_bitrate=N,c.ice_available_outgoing_bitrate=z,c.ice_bytes_received=U,c.ice_bytes_sent=w,c.ice_nominated=Number(CA),c.ice_pair_id=QA,c.ice_pair_rtt=R,c.rtt=1e3*R,c.rtt&&(iA=this._context.streamRTT)!==null&&iA!==void 0&&(iA=iA[r])!==null&&iA!==void 0&&iA.video&&(c.total_rtt_ms=Math.round(c.rtt+(this._context.streamRTT[r].video||0))),t.rtt=c.rtt,c.ice_pair_state=cA,c.ice_pair_writable=lA,c.recv_ping_requests=lC,c.recv_ping_responses=aQ,c.sent_ping_requests_before_first_response=vg,c.sent_ping_requests_total=vg+(nQ||0),c.sent_ping_responses=VQ}else b==="local-candidate"?(c.local_candidate_type=H,c.local_ip=tA||GA,c.local_network_type=FA,c.local_port=WA,c.protocol=VI):b==="remote-candidate"&&(c.remote_candidate_type=H,c.remote_ip=tA||GA,c.remote_port=WA)});const{video:d}=g;if(!d.timestamp)return g.video=o,this.filterIllegal(t);const h=Math.max(0,o.packetsLost-d.packetsLost),u=o.packetsReceived-d.packetsReceived;if(t.videoLossRate=h/(u+h),t._receivePackets=o.packetsReceived,t._receivePacketsLost=o.packetsLost,d.totalDecodeTime&&d.framesDecoded&&o.framesDecoded!==d.framesDecoded){const y=o.totalDecodeTime-d.totalDecodeTime,b=o.framesDecoded-d.framesDecoded;c.decode_elapse_per_frame=Number((y/b*1e3).toFixed(2))}var D;return t._retransmittedRate=(o.nackCount-d.nackCount)/(u+h),t.videoLossRate=Number.isNaN(t.videoLossRate)?0:t.videoLossRate,c.fraction_lost=t.videoLossRate,t.statsInterval=o.timestamp-d.timestamp,c.stats_interval=t.statsInterval,t.receivedKBitrate=(o.bytesReceived-d.bytesReceived||0)/t.statsInterval*8,c.bitrate=Math.round(1e3*t.receivedKBitrate),c.bandwidth=Math.round(c.bitrate/1024),t.decoderOutputFrameRate=1e3*(o.framesDecoded-d.framesDecoded)/t.statsInterval,t.receivedFrameRate=1e3*(o.framesReceived-d.framesReceived)/t.statsInterval,c.frame_rate_decoded=Math.round(t.decoderOutputFrameRate),c.frame_rate_received=Math.round(t.receivedFrameRate),c.average_jitter_buffer_delay_ms&&c.total_rtt_ms&&(t.e2eDelay=c.average_jitter_buffer_delay_ms+c.total_rtt_ms),(E=this._context.streamRTT)!==null&&E!==void 0&&(E=E[r])!==null&&E!==void 0&&E.video&&(t.totalRtt=(c.rtt?c.rtt:0)+(this._context.streamRTT[r].video||0)),g.video=o,this._stream.updateVideoStallInfo(c,t,C),c.vendor_mode=this._stream.vendorCode||0,c.pc_session_id=(e=this.handler)===null||e===void 0?void 0:e.peerConnectionId,C&&((D=this._monitor)===null||D===void 0||D.report("rtc_media_statistics",c)),this.filterIllegal(t)}destroy(){super.destroy(),super.stopReport("destroy"),this._stream.stopAudioStallObserve()}}class FDA{constructor(I,g){l(this,"_removeHandler",void 0),l(this,"_remotePauseHandler",void 0),l(this,"_prePts",void 0),l(this,"_stallList",void 0),l(this,"_videoInWaiting",!1),l(this,"_videoInWaitingCallback",!1),l(this,"_videoInWaiting100ms",!1),l(this,"_isPaused",void 0),l(this,"_pauseStart",0),l(this,"_pauseDuration",0),l(this,"_requestVideoFrameCallbackTimer",void 0),l(this,"_logger",void 0),l(this,"_player",void 0),l(this,"_recentVideoInfo",void 0),l(this,"_stallTimeThreshold",void 0),l(this,"_openVideoStall100ms",fA.VIDEO_STALL_100MS);const C=I?1500:kQ||KI?550:500;this._stallTimeThreshold={report:C,callback:Math.max(fA.VIDEO_STALL_DATA,C)},this._logger=new SA("VideoStallObserver",1,g)}start(I){if(this._logger.print("start","invoke"),this._player=I,Aj())I.domElement&&(this._requestVideoFrameCallbackTimer=I.domElement.requestVideoFrameCallback(this._onVideoRefresh.bind(this)),this._removeHandler=()=>{var C;this._requestVideoFrameCallbackTimer&&((C=I.domElement)===null||C===void 0||C.cancelVideoFrameCallback(this._requestVideoFrameCallbackTimer))});else{const C=Q=>this._onVideoTimeupdate(Q,I);I.on("playback_event",C),this._removeHandler=()=>I.off("playback_event",C)}const g=C=>this._onVideoPause(C);I.on("playback_event",g),this._remotePauseHandler=()=>I.off("playback_event",g)}getRecentRenderInfo4Report(){const I={};return this._recentVideoInfo&&Object.keys(this._recentVideoInfo).forEach(g=>{var C;const Q=g.replace(/[a-z]{1}[A-Z]{1}/g,i=>"".concat(i[0],"_").concat(i[1].toLowerCase()));I["video_".concat(Q)]=(C=this._recentVideoInfo)===null||C===void 0?void 0:C[g]}),I}stop(){var I,g;this._logger.print("stop","invoke"),delete this._player,(I=this._removeHandler)===null||I===void 0||I.call(this),delete this._removeHandler,(g=this._remotePauseHandler)===null||g===void 0||g.call(this),delete this._remotePauseHandler,delete this._stallList,delete this._prePts,delete this._recentVideoInfo,this._videoInWaiting=!1,this._videoInWaitingCallback=!1,this._videoInWaiting100ms=!1}destroy(){this.stop()}getStallInfo(I){let{interval:g,frameRateReceived:C,frameRateDecoded:Q,bitrate:i}=I;const B={pts:0,report:{stallCount:0,stallDuration:0,list:[]},callback:{stallCount:0,stallDuration:0},pauseDuration:this._getPauseDuration()};return this._stallList&&((kQ||KI)&&(i===0||(Q||1/0)<=1||(C||1/0)<=1)||this._stallList.length===0?(B.report.stallDuration=B.callback.stallDuration=2e3,B.report.stallCount=B.callback.stallCount=this._videoInWaiting?0:1,this._openVideoStall100ms&&(B.stall100ms={count:this._videoInWaiting100ms?0:1,duration:2e3}),this._videoInWaiting=!0,this._videoInWaitingCallback=!0,this._videoInWaiting100ms=!0):this._stallList.forEach((E,e)=>{let t=E.timeUpdateInterval;e===0&&this._videoInWaiting&&(t=Math.round(E.timeUpdateInterval%g));const o=E.timeUpdateInterval>this._stallTimeThreshold.report;o&&(B.report.list.push(E.timeUpdateInterval),B.report.stallDuration+=t,this._videoInWaiting||B.report.stallCount++),this._videoInWaiting=o,E.timeUpdateInterval>this._stallTimeThreshold.callback?(B.callback.stallDuration+=t,this._videoInWaitingCallback||B.callback.stallCount++,this._videoInWaitingCallback=!0):this._videoInWaitingCallback=!1,this._openVideoStall100ms&&(B.stall100ms||(B.stall100ms={count:0,duration:0}),E.timeUpdateInterval>100?(B.stall100ms.duration+=t,this._videoInWaiting100ms||B.stall100ms.count++,this._videoInWaiting100ms=!0):this._videoInWaiting100ms=!1),B.pts=E.playTime}),this._stallList=[]),B}_getPauseDuration(){let I=this._pauseDuration;if(this._pauseDuration=0,this._isPaused){const g=dA(),C=g-(this._pauseStart||0);C>500&&(this._pauseStart=g,I+=C)}return I}_onVideoPause(I){if(I.eventName==="pause")this._isPaused=!0,this._pauseStart=dA();else if(I.eventName==="play"&&this._isPaused){this._isPaused=!1;const g=dA()-this._pauseStart;g>500&&(this._pauseDuration+=g)}}_onVideoTimeupdate(I,g){if(I.eventName==="timeupdate"){const C=g.domElement;if(!C||C.currentTime===0)return;if(this._prePts===void 0)return void(this._prePts=C.currentTime);if(this._stallList||(this._stallList=[]),C.currentTime>this._prePts){const Q=C.currentTime-this._prePts;this._stallList.push({playTime:C.currentTime,timeUpdateInterval:Math.round(1e3*Q)})}this._prePts=C.currentTime}}_onVideoRefresh(I,g){var C;if(this._stallList||(this._stallList=[]),this._prePts){const Q=g.presentationTime-this._prePts;this._stallList.push({playTime:g.presentationTime,timeUpdateInterval:Math.round(Q)})}this._recentVideoInfo=g,this._prePts=g.presentationTime,(C=this._player)===null||C===void 0||(C=C.domElement)===null||C===void 0||C.requestVideoFrameCallback(this._onVideoRefresh.bind(this))}}class RC{constructor(I){l(this,"_audioStallTimer",void 0),l(this,"_preSample",void 0),l(this,"_isStallInPreCallbackEnd",!1),l(this,"_isStallInPreReportEnd",!1),l(this,"_stallList",[]),this._stream=I}static setAudioStallConfig(I){RC.interval=((I==null?void 0:I.audio_stall_interval)||200)/2,RC.ratio=(I==null?void 0:I.audio_stall_ratio)||.6}start(I,g){this.stop(),fA.AUDIO_STALL&&RC.interval>0&&typeof I=="number"&&typeof g=="number"&&(this._preSample={ts:dA(),concealedSamples:I,totalSamplesReceived:g},this._startStallCountInterval())}stop(){this._stallList=[],this._audioStallTimer&&(clearTimeout(this._audioStallTimer),delete this._audioStallTimer)}destroy(){this.stop()}async getAudioStallInfo(){const I={stats_count:this._stallList.filter(i=>!!i.get_stats_cost).length,stall_list:[...this._stallList]};try{await this._audioStallCount()}catch{}const g=gN(this._stallList,2,this._isStallInPreReportEnd);this._isStallInPreReportEnd=g.isStallInEnd;const C=fA.AUDIO_STALL_DATA/RC.interval,Q=gN(this._stallList,C,this._isStallInPreCallbackEnd);return this._isStallInPreCallbackEnd=Q.isStallInEnd,this.stop(),this._startStallCountInterval(),{report:{stall_count:g.stall_count,stall_duration:g.stall_duration,list:g.list},callback:{stall_count:Q.stall_count,stall_duration:Q.stall_duration,list:Q.list},extra:I}}_startStallCountInterval(){const I=async()=>{clearTimeout(this._audioStallTimer),delete this._audioStallTimer,await this._audioStallCount(),this._audioStallTimer||(this._audioStallTimer=setTimeout(I,RC.interval))};this._audioStallTimer=setTimeout(I,RC.interval)}async _audioStallCount(){if(!this._preSample||dA()-this._preSample.ts<.5*RC.interval)return;const{hasAudio:I,subAudio:g,virtual:C,virtualOccupy:Q,removeTrack:i,audioTrack:B}=this._stream;if(i||!B)return clearTimeout(this._audioStallTimer),void delete this._audioStallTimer;const E=I&&g;if(!E||C&&!Q)this._preSample.ts=dA(),this._stallList.push({reason:E?"virtual: ".concat(C,", virtualOccupy: ").concat(Q):"hasAudio: ".concat(I,", subAudio: ").concat(g)});else{const t=dA();let o,r,s=0;try{var e;const c=await((e=this._stream.audioTransceiver)===null||e===void 0?void 0:e.receiver.getStats());c==null||c.forEach(P=>{P.type==="inbound-rtp"&&(o=P),s++})}catch(c){r=c.message||JSON.stringify(c)}const v=dA(),n=dA(),a=n-this._preSample.ts;if(o){const{concealedSamples:c,totalSamplesReceived:P}=o,d=c-this._preSample.concealedSamples,h=P-this._preSample.totalSamplesReceived,u=d>=0&&h>=0&&d>=RC.ratio*h;this._stallList.push({concealed:d,received:h,diff:a,start:this._preSample.ts,end:n,get_stats_cost:v-t,get_stats_start:t,get_stats_end:v,is_stall:u}),this._preSample.concealedSamples=c,this._preSample.totalSamplesReceived=P,this._preSample.ts=n}else this._stallList.push({diff:a,start:this._preSample.ts,end:n,get_stats_cost:v-t,get_stats_start:t,get_stats_end:v,reason:s?r||"no inbound-rtp":"no report"})}}}l(RC,"interval",100),l(RC,"ratio",.6);const gN=(A,I,g)=>{var C;const Q={stall_count:0,stall_duration:0,isStallInEnd:!1,list:[]};let i=0,B=0;for(let E=0;E=I;const r=E+I-i-1;if(!o&&i>2){let s=0;A.slice(E+1,r+1).forEach(v=>{v.is_stall&&(s+=v.diff||0)}),o=B+s>RC.interval*I*RC.ratio,o&&(E=r,B+=s)}o&&(Q.stall_count++,Q.stall_duration+=B,Q.list.push(B)),t&&(Q.isStallInEnd=o),i=B=0}}return((C=A[0])===null||C===void 0?void 0:C.is_stall)===!0&&g&&Q.stall_count>0&&Q.stall_count--,Q};var ts=(A=>(A[A.CAPTURE=0]="CAPTURE",A[A.PRE_PROCESSING=1]="PRE_PROCESSING",A[A.ENCODE=2]="ENCODE",A[A.TRANSFER=3]="TRANSFER",A[A.POST_PROCESSING=4]="POST_PROCESSING",A[A.DECODE=5]="DECODE",A[A.RENDERING=6]="RENDERING",A))(ts||{}),Ss=(A=>(A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A))(Ss||{});class UDA{constructor(I){l(this,"_plugins",new Map),this.id=I}register(I){const g=this._plugins.get(I.type)||[];if(g.findIndex(C=>C.name===I.name)>-1)throw new Error("Failed to register ".concat(I.name,": name is repeated."));g.push(I),this._plugins.set(I.type,g)}getPluginsByType(I){return this._plugins.get(I)||[]}getPluginByName(I,g){return(this._plugins.get(I)||[]).find(C=>C.name===g)}async getPreProcessingTrack(I){const g=this._plugins.get(1)||[];let C=I.mediaTrack;for(const Q of g)C=await Q.effect(I,C);return C}destroy(){this._plugins.forEach(I=>{I.forEach(g=>g.destroy())}),this._plugins.clear()}}const kDA=new SA("InternalEventBus",1);var fi=(A=>(A.ON_IOS_INTERRUPTION_START="ON_IOS_INTERRUPTION_START",A.ON_IOS_INTERRUPTION_END="ON_IOS_INTERRUPTION_END",A.ON_IOS_LOCAL_TRACK_MUTE="ON_IOS_LOCAL_TRACK_MUTE",A.ON_IOS_LOCAL_TRACK_UNMUTE="ON_IOS_LOCAL_TRACK_UNMUTE",A))(fi||{});class YDA extends tB.EventEmitter{emit(I){kDA.info(I);for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q{if(this._audioContextInstance){const g=this._audioContextInstance.currentTime;this._contextStuckAt?this._contextStuckAt!==g&&(this._contextStuckAt=0,Ov.info("currentTime resume"),Uk("currentTime resume","")):g&&I===g&&(this._contextStuckAt=g,Ov.warn("currentTime stuck",this._contextStuckAt),this._audioContextInstance.suspend(),this._audioContextInstance.resume(),Uk("AudioContext currentTime stuck",this._contextStuckAt)),I=g}},3e3)}getAudioContextInstance(){if(!this._audioContextInstance){const I=window.AudioContext||window.webkitAudioContext;this._audioContextInstance=RdA?new I:new I({sampleRate:44100});try{this.isWorkletReady=this._audioContextInstance.audioWorklet.addModule(GX),this.isWorkletReady.catch(g=>{Vr("initial AudioWorklet error in promise",-1,"".concat(g.name,"-").concat(g.message)),Ov.error("isWorkletReady",g),this.isWorkletReady=null})}catch(g){Vr("initial AudioWorklet error in catch",-1,"".concat(g.name,"-").concat(g.message)),Ov.error("isWorkletReady",g),this.isWorkletReady=null}this._audioContextInstance.onstatechange=()=>{var g,C,Q;Ov.warn("state change",(g=this._audioContextInstance)===null||g===void 0?void 0:g.state),this._previousState=this._currentState,this._currentState=((C=this._audioContextInstance)===null||C===void 0?void 0:C.state)||"",((Q=this._audioContextInstance)===null||Q===void 0?void 0:Q.state)==="interrupted"&&this._audioContextInstance.resume(),(no||l0)&&(this._previousState==="running"&&this._currentState==="interrupted"&&RB.emit(fi.ON_IOS_INTERRUPTION_START),this._previousState==="interrupted"&&this._currentState==="running"&&RB.emit(fi.ON_IOS_INTERRUPTION_END))}}return this._audioContextInstance}}class LS{constructor(I){l(this,"_ctx",void 0),l(this,"_analyserNode",void 0),l(this,"_audioSource",void 0),l(this,"currentTrackId",void 0),this.currentTrackId=I.id;const g=ui.getAudioContextInstance();if(I instanceof MediaStreamTrack){const Q=new MediaStream;Q.addTrack(I),this._audioSource=g.createMediaStreamSource(Q)}else this._audioSource=g.createMediaElementSource(I),this._audioSource.connect(g.destination);const C=g.createAnalyser();this._audioSource.connect(C),this._analyserNode=C,this._ctx=g}getAudioLevel(){var I;((I=this._ctx)===null||I===void 0?void 0:I.state)==="suspended"&&this._ctx.resume();const g=new Uint8Array(2048);this._analyserNode.getByteTimeDomainData(g);let C=0;g.forEach(i=>C=Math.max(C,Math.abs(i-128)));const Q=C/128*255;return Q>2?Q:0}async resume(){var I;await((I=this._ctx)===null||I===void 0?void 0:I.resume())}destroy(){this._audioSource.disconnect(),this._analyserNode.disconnect()}}class SS extends tB.EventEmitter{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ui.getAudioContextInstance(),Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:ui.isWorkletReady;var i;super(),l(this,"_ctx",void 0),l(this,"_worklet",void 0),l(this,"_source",void 0),l(this,"_buffers",[]),l(this,"_bufferLength",0),l(this,"_sampleRate",void 0),l(this,"_channelCount",void 0),l(this,"_frameSize",void 0),I instanceof MediaStreamTrack?this._channelCount=(i=I.getSettings().channelCount)!==null&&i!==void 0?i:1:this._channelCount=I.channelCount,this._ctx=C,this._frameSize=g,Q==null||Q.then(()=>{this._worklet=new AudioWorkletNode(this._ctx,"dump-audio-data"),I instanceof MediaStreamTrack?this._source=this._ctx.createMediaStreamSource(new MediaStream([I])):this._source=I,this._source.connect(this._worklet),this._initWorkletEventListener(this._worklet)}).catch()}_initWorkletEventListener(I){I.port.onmessage=this._handleWorkletMessage.bind(this)}_handleWorkletMessage(I){const{data:g,sampleRate:C}=I.data;if(this._bufferLength>=this._frameSize||this._sampleRate!==C){if(this._sampleRate){const Q=this._channelCount===1||g.length===1?1:2;this.emit("data",{channels:[...this._buffers],sampleRate:this._sampleRate,channelCount:Q})}this._sampleRate=C,this._buffers=new Array(this._channelCount).fill(0).map(()=>new Float32Array(this._frameSize)),this._bufferLength=0}for(let Q=0;Q1&&arguments[1]!==void 0?arguments[1]:{};const g=document.createElement(A);return I.id&&(g.id=I.id),I.classList&&I.classList.forEach(C=>{g.classList.add(C)}),I.style&&Object.assign(g.style,I.style),I.attributes&&Object.entries(I.attributes).forEach(C=>{let[Q,i]=C;Q==="muted"?g.muted=!0:g.setAttribute(Q,i)}),g};class ZDA extends KQ{constructor(){var I;super(),l(this,"deviceMap",{audioinput:new Map,audiooutput:new Map,videoinput:new Map}),l(this,"checkDeviceChangeTimer",null),l(this,"isSupportedPermissionsQuery",!1),l(this,"isGrantedMicrophonePermission",!1),l(this,"isGrantedCameraPermission",!1),this.isSupportedPermissionsQuery=!TI()&&!((I=navigator)===null||I===void 0||(I=I.permissions)===null||I===void 0||!I.query),this._handleDeviceChange=this._handleDeviceChange.bind(this),!TI()&&this.initListener().then(()=>{this.updateDeviceListInSilent()})}async refreshDevices(){let I,g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"audio";if(!navigator.mediaDevices)return;if(KI)try{I=g==="audio"?await navigator.mediaDevices.getUserMedia({audio:!0}):await navigator.mediaDevices.getUserMedia({video:!0})}catch{}const C=await navigator.mediaDevices.enumerateDevices();I&&I.getTracks().forEach(Q=>Q.stop()),C.forEach(Q=>{var i;Q.deviceId&&((i=this.deviceMap[Q.kind])===null||i===void 0||i.set(Q.deviceId,Q))})}async initListener(){var I,g;if(((I=navigator.mediaDevices)===null||I===void 0?void 0:I.ondevicechange)!==void 0&&typeof((g=navigator.mediaDevices)===null||g===void 0?void 0:g.addEventListener)=="function"?navigator.mediaDevices.addEventListener("devicechange",()=>{this._handleDeviceChange(),setTimeout(()=>{this._handleDeviceChange()},300)}):this.checkDeviceChangeTimer=window.setInterval(()=>{this._handleDeviceChange()},3e3),this.isSupportedPermissionsQuery){try{const C=await navigator.permissions.query({name:"microphone"});this.isGrantedMicrophonePermission=C.state==="granted",C.addEventListener("change",()=>{this.isGrantedMicrophonePermission=C.state==="granted"})}catch{}try{const C=await navigator.permissions.query({name:"camera"});this.isGrantedCameraPermission=C.state==="granted",C.addEventListener("change",()=>{this.isGrantedCameraPermission=C.state==="granted"})}catch{}}}async _handleDeviceChange(){if(!navigator.mediaDevices)return;let I;KI&&(I=await navigator.mediaDevices.getUserMedia({audio:!0}));let g=await navigator.mediaDevices.enumerateDevices();g=g.filter(Q=>!!Q.deviceId),I&&I.getTracks().forEach(Q=>Q.stop());const C=Array.from([...this.deviceMap.audioinput.values(),...this.deviceMap.videoinput.values(),...this.deviceMap.audiooutput.values()]);(C9||l0)&&!C.length&&g.length&&g.forEach(Q=>{var i;(i=this.deviceMap[Q.kind])===null||i===void 0||i.set(Q.deviceId,Q)}),g.forEach(Q=>{const i=this.deviceMap[Q.kind].get(Q.deviceId);this.deviceMap[Q.kind].set(Q.deviceId,Q),i||(Q.kind.includes("video")?this.emit(q.onVideoDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"active"}):Q.kind.includes("audio")&&this.emit(q.onAudioDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"active"}))}),C.forEach(Q=>{g.find(i=>i.deviceId===Q.deviceId&&i.kind===Q.kind)||(this.deviceMap[Q.kind].delete(Q.deviceId),Q.kind.includes("video")?this.emit(q.onVideoDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"inactive"}):Q.kind.includes("audio")&&this.emit(q.onAudioDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"inactive"}))})}async getUserMedia(I){const g=await navigator.mediaDevices.getUserMedia(I);return I!=null&&I.audio&&(this.isGrantedMicrophonePermission=!0),I!=null&&I.video&&(this.isGrantedCameraPermission=!0),I!=null&&I.video?this.refreshDevices("video"):this.refreshDevices("audio"),g}async checkPermissionsByDevices(){const I={audio:!1,video:!1};if(!navigator.mediaDevices)return I;const g=await navigator.mediaDevices.enumerateDevices();return I.audio=g.filter(C=>C.kind==="audioinput"&&C.label&&C.deviceId).length>0,I.video=g.filter(C=>C.kind==="videoinput"&&C.label&&C.deviceId).length>0,I}async getPermissions(){var I;let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{audio:C,video:Q}=g;const{force:i}=g;C||Q||(C=!0,Q=!0);const B={audio:!1,video:!1,reason:void 0};if(!i)if(this.isSupportedPermissionsQuery){if(C&&Q){if(this.isGrantedMicrophonePermission&&this.isGrantedCameraPermission)return B.audio=!0,B.video=!0,B}else if(C&&this.isGrantedMicrophonePermission||Q&&this.isGrantedCameraPermission)return B.audio=this.isGrantedMicrophonePermission,B.video=this.isGrantedCameraPermission,B}else{const t=await this.checkPermissionsByDevices();if(C&&Q){if(t.audio&&t.video)return t}else if(C&&t.audio||Q&&t.video)return t}if((I=navigator.mediaDevices)!==null&&I!==void 0&&I.getUserMedia)try{const t=await navigator.mediaDevices.getUserMedia({audio:C,video:Q});t&&(t.getTracks().forEach(o=>o.stop()),C&&(B.audio=!0,this.isGrantedMicrophonePermission=!0),Q&&(B.video=!0,this.isGrantedCameraPermission=!0))}catch(t){if(B.reason=t,this.isSupportedPermissionsQuery){var E,e;C&&(B.audio=((E=await navigator.permissions.query({name:"microphone"}).catch(()=>{}))===null||E===void 0?void 0:E.state)==="granted"),Q&&(B.video=((e=await navigator.permissions.query({name:"camera"}).catch(()=>{}))===null||e===void 0?void 0:e.state)==="granted")}}return C?await this.refreshDevices("audio"):await this.refreshDevices("video"),B}async updateDeviceListInSilent(){this.isGrantedCameraPermission&&this.isGrantedMicrophonePermission&&this.refreshDevices("audio")}async enumerateDevices(){return await this.getPermissions(),await this.refreshDevices(),Array.from([...this.deviceMap.audioinput.values(),...this.deviceMap.videoinput.values(),...this.deviceMap.audiooutput.values()])}async enumerateAudioCaptureDevices(){return await this.getPermissions({audio:!0}),await this.refreshDevices(),Array.from(this.deviceMap.audioinput.values())}async enumerateVideoCaptureDevices(){return await this.getPermissions({video:!0}),await this.refreshDevices("video"),Array.from(this.deviceMap.videoinput.values())}async enumerateAudioPlaybackDevices(){return await this.getPermissions({audio:!0}),await this.refreshDevices("audio"),Array.from(this.deviceMap.audiooutput.values())}async getAudioPlaybackDeviceById(I){return(await this.enumerateAudioPlaybackDevices()).find(g=>g.deviceId===I)}}const oC=new ZDA;qd&&(window.__rtc_dd__=oC);var iQ=(A=>(A[A.AUTOPLAY_FAILED=-1e3]="AUTOPLAY_FAILED",A[A.TRACK_ERROR=-1001]="TRACK_ERROR",A[A.Fetch_MODIFY=-1002]="Fetch_MODIFY",A[A.BLACK_BROWSER=-1003]="BLACK_BROWSER",A[A.DC_SEND_ERROR=-1004]="DC_SEND_ERROR",A[A.DUPLICATE_DOM=-1005]="DUPLICATE_DOM",A))(iQ||{});const fo=new SA("VideoSnapshot",1),KDA=A=>{const I=A==null?void 0:A.domElement;if(I&&!I.paused&&I.readyState===4)return I},RX=async(A,I)=>{const g=document.createElement("canvas"),C=g.getContext("2d");if(!C)throw new Error("canvas.getContext error");const Q=(E,e,t)=>(e=e||E.width,t=t||E.height,g.width=e,g.height=t,C.setTransform(1,0,0,1,0,0),C.drawImage(E,0,0,e,t),C.getImageData(0,0,e,t)),i=Date.now(),B=KDA(I);if(B){fo.info("takeSnapshot","VideoPlayer already set.");const E=await Q(B,B.videoWidth,B.videoHeight);return fo.info("takeSnapshot","success, cost ".concat(Date.now()-i,"ms")),E}if(window.ImageCapture){const E=new window.ImageCapture(A);if(E.track.readyState==="live"&&E.track.enabled&&!E.track.muted){fo.info("takeSnapshot","use ImageCapture");const e=await Q(await E.grabFrame());return fo.info("takeSnapshot","success, cost ".concat(Date.now()-i,"ms")),e}}return fo.info("takeSnapshot","use temp video"),new Promise((E,e)=>{const t=new MediaStream([A]),o=document.createElement("video");o.setAttribute("playsinline",""),o.muted=!0,document.body.appendChild(o),o.onplaying=()=>{const r=Q(o,o.videoWidth,o.videoHeight);fo.info("takeSnapshot","success, cost ".concat(Date.now()-i,"ms")),E(r),t.removeTrack(A),o.srcObject=null,o.load()},o.onerror=e,o.srcObject=t,o.play()})},ei=Symbol("default");var bG=(A=>(A.START_STALL_OBSERVE="start_stall_observe",A.STOP_STALL_OBSERVE="stop_stall_observe",A))(bG||{});class Po extends Oj{constructor(I,g,C){super(I,g,p(p({},C),{},{mediaType:Gs.VIDEO})),l(this,"resolution",void 0),l(this,"videoPlayers",new Map),this.resolution={width:0,height:0}}intersection(){const I={};return this.videoPlayers.forEach((g,C)=>{I[C.toString()]=g.isIntersecting}),I}async updateVideoCaptureConfig(I){this.logger.info("updateVideoEncoderConfig","update localVideoTrack: ",I);const g=p({},I);delete g.contentHint,KI&&this.trackInfo.streamIndex===MI.MAIN&&(g.frameRate={ideal:30,max:30}),await this.originTrack.applyConstraints(g);const C=this.originTrack.getSettings();(C.width&&C.width!==this.resolution.width||C.height&&C.height!==this.resolution.height)&&(this.resolution={width:C.width,height:C.height},this.emit("resolution-change",this.resolution))}setContentHint(I){"contentHint"in this.originTrack&&["text","motion","detail"].includes(I)&&(this.originTrack.contentHint=I)}setTrack(I,g){this._originTrack=I,this.trackInfo=p(p({},this.trackInfo),g),this.isTrackReady=this.generatePreProcessingTrack()}setPlayer(I,g,C,Q){var i;const B=(i=I.playerId)!==null&&i!==void 0?i:ei;let E=this.videoPlayers.get(B);return I.player!==E&&(E=I.player,this.videoPlayers.set(B,E),Q(E,this.isPublic,this.streamIndex)),this.mirror(!!g),this.dummy||C===Te.PLAY_MANUALLY||this.play(B),E.domElement}setUserId(I){this.trackInfo.streamUserId=I,this.videoPlayers.forEach(g=>{g.userId=I})}snapshot(){let I;for(const g of this.videoPlayers.values())if(g.played){I=g;break}return RX(this.preprocessingTrack,I)}setRenderMode(I,g){var C;return(C=this.videoPlayers.get(I))===null||C===void 0?void 0:C.setRenderMode(g)}mirror(I){this.videoPlayers.forEach(g=>{g.mirror(I)})}removePlayerTrack(){this.videoPlayers.forEach((I,g)=>{var C;(C=this.videoPlayers.get(g))===null||C===void 0||C.removeTrack()})}play(I){const g=this.videoPlayers.get(I);return g!=null&&g.played?g.manuallyPlay():g==null?void 0:g.playVideo(this)}playAll(){this.videoPlayers.forEach((I,g)=>{this.play(g)})}manuallyPlay(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.manuallyPlay()}pause(I){var g;(g=this.videoPlayers.get(I))===null||g===void 0||g.manuallyPause()}stop(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.stop()}stopAll(){return this.videoPlayers.forEach((I,g)=>{this.stop(g)})}destroy(){this.videoPlayers.forEach((I,g)=>{this.stop(g),I.removeAllListeners(),this.videoPlayers.delete(g)}),super.destroy()}}class WDA extends qj{constructor(I,g,C,Q){super(I,g,p(p({},Q),{},{mediaType:Gs.VIDEO})),l(this,"videoPlayers",new Map),l(this,"_stream",void 0),l(this,"_observingPlayer",void 0),this._stream=C}get observingPlayerId(){var I;return(I=this._observingPlayer)===null||I===void 0?void 0:I.playerId}getSizeByPlayer(){let I=0,g=0;return this.videoPlayers.forEach(C=>{var Q;(Q=C.domElement)!==null&&Q!==void 0&&Q.videoWidth&&C.domElement.videoHeight&&(I=C.domElement.videoWidth,g=C.domElement.videoHeight)}),{width:I,height:g}}intersection(){const I={};return this.videoPlayers.forEach((g,C)=>{I[C.toString()]=g.isIntersecting}),I}setPlayer(I,g,C,Q){var i,B;const E=(i=g.playerId)!==null&&i!==void 0?i:ei;let e=this.videoPlayers.get(E);if(g.player!==e){var t;e=g.player,!DB(this.streamIndex)&&e.mirror(this._ctx.getRemoteMirrorType((t=this.trackInfo.streamUserId)!==null&&t!==void 0?t:"",this.streamIndex)),this.videoPlayers.set(E,e),this._handlePlayerStallEvent(e),Q(e,this.isPublic,this.streamIndex)}return this.dummy||this.play(E),(B=e)===null||B===void 0?void 0:B.domElement}mirror(I){this.videoPlayers.forEach(g=>{g.mirror(I)})}dangerousGetPlayer(I){return this.videoPlayers.get(I)}snapshot(){let I;for(const g of this.videoPlayers.values())if(g.played){I=g;break}return RX(this.preprocessingTrack,I)}stop(I){var g;(g=this.videoPlayers.get(I))===null||g===void 0||g.stop()}stopAll(){this.videoPlayers.forEach((I,g)=>{this.stop(g)})}play(I){if(this._ctx.autoPlayPolicy===Te.PLAY_MANUALLY)return;const g=this.videoPlayers.get(I);return g==null?void 0:g.playVideo(this)}manuallyPlay(I){const g=this.videoPlayers.get(I);return g!=null&&g.played?g.manuallyPlay():g==null?void 0:g.playVideo(this)}pause(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.manuallyPause()}_handlePlayerStallEvent(I){I.on("start_stall_observe",()=>{!this._observingPlayer&&I&&(this._observingPlayer=I,this._stream.startVideoStallObserve(this._observingPlayer))}),I.on("stop_stall_observe",()=>{this._observingPlayer===I&&(this._stream.stopVideoStallObserve(),this._observingPlayer=void 0,this.videoPlayers.forEach(g=>{!this._observingPlayer&&g.played&&(this._observingPlayer=g,this._stream.startVideoStallObserve(g))}))})}destroy(){this.videoPlayers.forEach((I,g)=>{this.stop(g),I.removeAllListeners(),this.videoPlayers.delete(g)}),super.destroy()}}const G0=["play","playing","pause","ended","error","seeking","seeked","waiting","canplay","canplaythrough","durationchange","volumechange","loadedmetadata","loadeddata","loadstart","timeupdate"],JDA={playsinline:"","webkit-playsinline":""},VDA={playsinline:"","webkit-playsinline":"","x5-playsinline":"","x5-video-player-type":"h5","x-webkit-airplay":"allow",preload:"",muted:""};class jE extends tB.EventEmitter{constructor(I,g,C){super(),l(this,"_containerDom",void 0),l(this,"_videoDom",void 0),l(this,"userId",void 0),l(this,"renderMode",void 0),l(this,"mirrorType",Ci.MIRROR_TYPE_NONE),l(this,"isScreen",void 0),l(this,"isLocal",void 0),l(this,"played",!1),l(this,"_needLoad",!1),l(this,"_emitPlayFailed",!1),l(this,"_videoContainer",void 0),l(this,"_safari15VideoTimer",void 0),l(this,"_monitor",void 0),l(this,"logger",void 0),l(this,"_onLocalTrackMute",void 0),l(this,"_onInterruptionEnd",void 0),l(this,"_needResume",!1),l(this,"_rotate",0),l(this,"_rotateDom",void 0),l(this,"_resizeObserver",void 0),l(this,"_hasManuallyPaused",!1),l(this,"isIntersecting",void 0),l(this,"intersectionObserver",void 0),l(this,"emitVideoEvent",e=>{var t,o;const r={type:"video",rawEvent:e,readyState:((t=this._videoDom)===null||t===void 0?void 0:t.readyState)||0,userId:this.userId,eventName:e.type,currentTime:((o=this._videoDom)===null||o===void 0?void 0:o.currentTime)||0,isScreen:this.isScreen};switch(this.emit("playback_event",r),e.type){case"canplay":this.refreshRenderSize("the video started playing."),this._internalPlay();break;case"loadeddata":this._internalPlay();break;case"playing":this.logger.info("VideoPlayerPlaying","[userId-".concat(this.userId,"] video element playing"));break;case"pause":this.logger.info("VideoPlayerPause","[userId-".concat(this.userId,"] video element pause")),this._needResume&&(this.logger.info("VideoPlayerPause","[userId-".concat(this.userId,"] video element resume")),this._internalPlay(),this._needResume=!1)}}),l(this,"_internalPlay",()=>{var e,t;if(rI(this.engineId,"video _internalPlay",{paused:(e=this._videoDom)===null||e===void 0?void 0:e.paused,hasManuallyPaused:this._hasManuallyPaused}),this._hasManuallyPaused||(t=this._videoDom)===null||t===void 0||!t.paused)return;const o=this._videoDom.play();o!=null&&o.then&&o.then(()=>{var r;this.isLocal&&y9A&&!this._needLoad&&((r=this._videoDom)===null||r===void 0||r.load(),this._needLoad=!0)}).catch(r=>{var s,v,n,a;this._emitPlayFailed||(r.name!=="AbortError"?(this._emitPlayFailed=!0,(s=this._monitor)===null||s===void 0||s.report("rtc_error",{message:"video autoplay failed, userId: ".concat(this.userId,", ").concat(r.name),error_code:iQ.AUTOPLAY_FAILED}),this.emit("playback_event",{type:"video",rawEvent:r,readyState:((v=this._videoDom)===null||v===void 0?void 0:v.readyState)||0,userId:this.userId,eventName:"autoplay-error",currentTime:((n=this._videoDom)===null||n===void 0?void 0:n.currentTime)||0,isScreen:this.isScreen})):(a=this._monitor)===null||a===void 0||a.report("rtc_error",{message:"video autoplay failed, userId: ".concat(this.userId,", ").concat(r.name),error_code:iQ.AUTOPLAY_FAILED}))})}),this.engineId=I,this.playerId=g;const Q=C.renderDom;this._monitor=bI(I),this.logger=new SA("Player",0,I);const{userId:i}=C,B=C.isScreen?st.RENDER_MODE_FIT:st.RENDER_MODE_HIDDEN;this.renderMode=C.renderMode!==void 0?C.renderMode:B,this._rotate=Number(C.rotation||0);const E=typeof Q=="string"?document.getElementById(Q):Q;if(!E)throw new K(S.CANT_FIND_DOM,"can't find dom");this._videoContainer=document.createElement("div"),this._videoContainer.style.width="100%",this._videoContainer.style.height="100%",this._videoContainer.style.position="relative",this._videoContainer.style.overflow="hidden",this._containerDom=E,this.userId=i,this.isLocal=!!C.isLocal,this.isScreen=!!C.isScreen,this._initVideo(),!this.isLocal||(ms==null?void 0:ms[0])!==15&&Dc!==15||(this._safari15VideoTimer=setTimeout(()=>{try{this._videoContainer.style.display="block",setTimeout(()=>{this._videoContainer.style.display="flex"},500)}catch{}},1e3))}_initVideo(){this._videoDom||(this._videoDom=TS("video",{style:{width:"100%",height:"100%"},attributes:VDA}),this._videoDom.id="".concat(this.userId,"_").concat(cE()),this.setRenderMode(this.renderMode),this.mirror(this.mirrorType===Ci.MIRROR_TYPE_RENDER)),this._containerDom.appendChild(this._videoContainer),[90,270].indexOf(this._rotate)>-1?(this._rotateDom=this._createRotationDiv(),this._rotateDom.appendChild(this._videoDom),this._videoContainer.appendChild(this._rotateDom)):(this._rotate===180&&(this._videoContainer.style.transform="rotate(180deg)"),this._videoContainer.appendChild(this._videoDom)),this._initInterSectionObserver(),this._initListeners(),this._onLocalTrackMute=()=>{this._needResume=!0},this._onInterruptionEnd=()=>{this.logger.warn("resume player after iOS interruption"),this._internalPlay()},RB.on(fi.ON_IOS_LOCAL_TRACK_MUTE,this._onLocalTrackMute),RB.on(fi.ON_IOS_LOCAL_TRACK_UNMUTE,this._onInterruptionEnd),RB.on(fi.ON_IOS_INTERRUPTION_END,this._onInterruptionEnd)}_initInterSectionObserver(){!this.intersectionObserver&&typeof IntersectionObserver<"u"&&this._videoDom&&(this.intersectionObserver=new IntersectionObserver(I=>{I[0]&&(this.isIntersecting=I[0].isIntersecting)},{}),this.intersectionObserver.observe(this._videoDom))}_closeIntersectionObserver(){this.intersectionObserver&&this._videoDom&&(this.intersectionObserver.disconnect(),this.intersectionObserver.unobserve(this._videoDom),delete this.intersectionObserver)}_createRotationDiv(){const I=document.createElement("div");return I.style.transform="rotate(".concat(this._rotate,"deg)"),this._rotate!==180&&(I.style.position="absolute",this.refreshRenderSize("init"),window.ResizeObserver&&(this._resizeObserver=new ResizeObserver(()=>{this.refreshRenderSize("the container size has changed.")}),this._resizeObserver.observe(this._containerDom))),I}refreshRenderSize(I){if(this._rotateDom){var g,C;this.logger.print("refreshRenderSize","Because ".concat(I));const Q=Number(window.getComputedStyle(this._containerDom).width.replace("px","")),i=Number(window.getComputedStyle(this._containerDom).height.replace("px","")),B=(g=this._videoDom)===null||g===void 0?void 0:g.videoWidth,E=(C=this._videoDom)===null||C===void 0?void 0:C.videoHeight;if(Q&&i&&E&&B){let e,t;if(this.renderMode===st.RENDER_MODE_FILL)e=i,t=Q;else{const o=this.renderMode===st.RENDER_MODE_HIDDEN?Math.max(Q/E,i/B):Math.min(Q/E,i/B);e=B*o,t=E*o}this._rotateDom.style.width="".concat(e,"px"),this._rotateDom.style.height="".concat(t,"px"),this._rotateDom.style.left="".concat((Q-e)/2,"px"),this._rotateDom.style.top="".concat((i-t)/2,"px")}}}_initListeners(){this._videoDom&&G0.forEach(I=>{var g;(g=this._videoDom)===null||g===void 0||g.addEventListener(I,this.emitVideoEvent)})}_removeListeners(){this._videoDom&&G0.forEach(I=>{var g;(g=this._videoDom)===null||g===void 0||g.removeEventListener(I,this.emitVideoEvent)})}setRenderMode(I){this.renderMode=I,this._videoDom&&(this.renderMode===st.RENDER_MODE_FIT?this._videoDom.style.objectFit="contain":this.renderMode===st.RENDER_MODE_FILL?this._videoDom.style.objectFit="fill":this._videoDom.style.objectFit="cover")}async playVideo(I){var g,C;let Q=this._videoDom;if(this.logger.info("playVideo","play video track: ".concat(this.userId)),Q&&Q.srcObject instanceof MediaStream&&Q.srcObject.getTrackById((g=I.preprocessingTrack)===null||g===void 0?void 0:g.id)){try{rI(this.engineId,"playVideo","play video repeatedly",0,this.userId)}catch{}return}Q||(this._initVideo(),Q=this._videoDom),this.logger.info("playVideo","play video by dom: ".concat((C=Q)===null||C===void 0?void 0:C.id));const i=new MediaStream;i.addTrack(I.preprocessingTrack),Q.srcObject=i,Q&&!this._containerDom.contains(this._videoContainer)&&this._containerDom.appendChild(this._videoContainer),Q&&!this._videoContainer.contains(Q)&&this._videoContainer.appendChild(Q),setTimeout(()=>this._internalPlay()),fA.VIDEO_STALL&&this.emit(bG.START_STALL_OBSERVE),this.played=!0}updateSrcObject(I){const g=I.preprocessingTrack;if(!g||!this._videoDom)return;const C=new MediaStream;C.addTrack(g),this._videoDom.srcObject=C}removeTrack(){var I;const g=(I=this._videoDom)===null||I===void 0?void 0:I.srcObject;if(g){const C=g.getVideoTracks();C!=null&&C.length&&C.forEach(Q=>{g.removeTrack(Q)})}}manuallyPlay(){if(this.logger.info("Invoke VideoPlayer.manuallyPlay",this.userId,this.isScreen),this._emitPlayFailed=!1,this._hasManuallyPaused=!1,!this._videoDom)throw new K(S.INVALID_PARAMS,"Player not found");return this._videoDom.readyState!==0||nS?this._videoDom.play():Promise.resolve()}manuallyPause(){if(this.logger.print("Invoke VideoPlayer.manuallyPause",this.userId,this.isScreen),this.played){if(this._hasManuallyPaused=!0,!this._videoDom)throw new K(S.INVALID_PARAMS,"Player not found");return this._videoDom.pause()}}mirror(I){this.logger.info("mirror","".concat(this.userId," set mirror: ").concat(I)),this.mirrorType=I?Ci.MIRROR_TYPE_RENDER:Ci.MIRROR_TYPE_NONE,this._videoDom&&(this._videoDom.style.transform=I?"rotateY(180deg)":"")}stop(){let I=arguments.length>0&&arguments[0]!==void 0&&arguments[0];const{_containerDom:g}=this;var C,Q;this.logger.info("stop","stop video track: ".concat(this.userId," ").concat(this.playerId.toString())),this._videoDom&&(I||(this._videoDom.srcObject=null),g!=null&&g.contains(this._videoContainer)&&g.removeChild(this._videoContainer),(C=this._videoContainer)===null||C===void 0||C.childNodes.forEach(i=>{i!==this._videoDom&&i!==this._rotateDom||this._videoContainer.removeChild(i)}),(Q=this._rotateDom)!==null&&Q!==void 0&&Q.contains(this._videoDom)&&this._rotateDom.removeChild(this._videoDom)),this._hasManuallyPaused=!1,this.played=!1,fA.VIDEO_STALL&&this.emit(bG.STOP_STALL_OBSERVE),this._closeIntersectionObserver()}destroy(){var I;let g=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("destroy","video player: ".concat(this.userId)),this.stop(g),(I=this._resizeObserver)===null||I===void 0||I.disconnect(),super.removeAllListeners(),this._removeListeners(),RB.off(fi.ON_IOS_LOCAL_TRACK_MUTE,this._onLocalTrackMute),RB.off(fi.ON_IOS_LOCAL_TRACK_UNMUTE,this._onInterruptionEnd),RB.off(fi.ON_IOS_INTERRUPTION_END,this._onInterruptionEnd),this._videoDom&&delete this._videoDom,this._safari15VideoTimer&&(window.clearInterval(this._safari15VideoTimer),this._safari15VideoTimer=void 0)}get domElement(){return this._videoDom}}class pS extends tB.EventEmitter{constructor(I,g){let{divId:C,muted:Q,isScreen:i}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{divId:void 0,muted:!1,isScreen:!1};if(super(),l(this,"_containerDom",void 0),l(this,"_audioDom",void 0),l(this,"_fakeAudioDom",void 0),l(this,"userId",void 0),l(this,"muted",!1),l(this,"_emitPlayFailed",!1),l(this,"played",!1),l(this,"isScreen",void 0),l(this,"_wechatTimer",void 0),l(this,"_edgeTimer",void 0),l(this,"_monitor",void 0),l(this,"logger",void 0),l(this,"_pasued",!0),l(this,"emitAudioEvent",B=>{var E,e;const t={type:"audio",rawEvent:B,readyState:((E=this._audioDom)===null||E===void 0?void 0:E.readyState)||0,userId:this.userId,eventName:B.type,currentTime:((e=this._audioDom)===null||e===void 0?void 0:e.currentTime)||0};var o;B.type==="playing"&&this.logger.info("AudioPlayerPlaying","[userId-".concat(this.userId,"] audio element playing")),B.type==="pause"&&(this.logger.info("AudioPlayerPause","[userId-".concat(this.userId,"] audio element pause")),!this._pasued&&(o=this._audioDom)!==null&&o!==void 0&&(o=o.srcObject)!==null&&o!==void 0&&o.active&&this._internalPlay()),kB&&nS&&(B.type==="canplay"?(clearTimeout(this._wechatTimer),this._wechatTimer=setTimeout(()=>{this._autoPlayError("wechat")},500)):B.type==="playing"&&clearTimeout(this._wechatTimer)),C9&&R9A&&B.type==="error"&&(clearTimeout(this._edgeTimer),this._edgeTimer=setTimeout(()=>{var r;((r=this._audioDom)===null||r===void 0?void 0:r.currentTime)===0&&this._autoPlayError("edge")},500)),this.emit("playback_event",t)}),l(this,"_internalPlay",()=>{var B,E;if(rI(this.engineId,"audio _internalPlay",{paused:(B=this._audioDom)===null||B===void 0?void 0:B.paused,userId:this.userId,screen:this.isScreen}),(E=this._audioDom)!==null&&E!==void 0&&E.paused)try{var e;let o=this._audioDom.play();const r=ui.getAudioContextInstance();if(r.state==="suspended"){const s=r.resume(),v=setTimeout(()=>{var n;r.state==="suspended"&&(this._autoPlayError("AudioContext cannot resume"),(n=this._monitor)===null||n===void 0||n.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": Cannot resume the AudioContext - timeout"),error_code:iQ.AUTOPLAY_FAILED})),clearTimeout(v)});s.catch(n=>{var a;this._autoPlayError("AudioContext cannot resume"),(a=this._monitor)===null||a===void 0||a.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": Cannot resume the AudioContext - rejected by: [").concat(n==null?void 0:n.name,"]").concat(n==null?void 0:n.message),error_code:iQ.AUTOPLAY_FAILED})}).finally(()=>{clearTimeout(v)})}(e=o)!==null&&e!==void 0&&e.then&&(kB&&C9&&(o=o.then(()=>new Promise(s=>{setTimeout(async()=>{var v;(v=this._audioDom)===null||v===void 0||v.pause(),this._audioDom.volume=1,await this._audioDom.play(),s()},500)}))),o.then(()=>{rI(this.engineId,"_internalPlay successfully",{userId:this.userId,screen:this.isScreen}),this._pasued=!1}).catch(s=>{var v;this._autoPlayError(s),(v=this._monitor)===null||v===void 0||v.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": ").concat(s.message," ").concat(s.name),error_code:iQ.AUTOPLAY_FAILED})}))}catch(o){var t;this._autoPlayError(o),(t=this._monitor)===null||t===void 0||t.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": ").concat(o.message," ").concat(o.name),error_code:iQ.AUTOPLAY_FAILED})}}),this.engineId=I,C){const B=document.getElementById(C);if(!B)throw new K(S.CANT_FIND_DOM,"can't find dom");this._containerDom=B}else this._containerDom=document.body;this.userId=g,this.muted=Q,this.isScreen=i,this._monitor=bI(I),this.logger=new SA("Player",0,I),this._initAudio()}_initAudio(){this._audioDom||(this._audioDom=TS("audio",{style:{display:"none"},attributes:JDA}),this._audioDom.volume=this.muted?0:1,this._audioDom.muted=this.muted,this._audioDom.id="".concat(this.userId,"_").concat(cE()),this._containerDom.appendChild(this._audioDom)),this._initListeners()}_initListeners(){this._audioDom&&G0.forEach(I=>{var g;(g=this._audioDom)===null||g===void 0||g.addEventListener(I,this.emitAudioEvent)})}_removeListeners(){this._audioDom&&(G0.forEach(I=>{var g;(g=this._audioDom)===null||g===void 0||g.removeEventListener(I,this.emitAudioEvent)}),this._audioDom.removeEventListener("canplay",this._internalPlay),this._audioDom.removeEventListener("loadeddata",this._internalPlay))}async playAudio(I){var g,C,Q;this.logger.info("playAudio","play audio track: ".concat(this.userId));let i=this._audioDom;if(i&&i.srcObject instanceof MediaStream&&i.srcObject.getTrackById((g=I.preprocessingTrack)===null||g===void 0?void 0:g.id))return;i||(this._initAudio(),i=this._audioDom);const B=new MediaStream;I instanceof FS&&(this._fakeAudioDom=new Audio,this._fakeAudioDom.muted=!0,this._fakeAudioDom.srcObject=new MediaStream([I.originTrack])),B.addTrack(I.preprocessingTrack),kB&&C9&&(this._audioDom.volume=0),i.srcObject=B,(C=i)===null||C===void 0||C.addEventListener("canplay",this._internalPlay),(Q=i)===null||Q===void 0||Q.addEventListener("loadeddata",this._internalPlay),setTimeout(()=>this._internalPlay()),this.played=!0}_autoPlayError(I){var g,C;this._emitPlayFailed||(this._emitPlayFailed=!0,this.emit("playback_event",{type:"audio",rawEvent:I,readyState:((g=this._audioDom)===null||g===void 0?void 0:g.readyState)||0,userId:this.userId,eventName:"autoplay-error",currentTime:((C=this._audioDom)===null||C===void 0?void 0:C.currentTime)||0}))}pause(){if(!this._audioDom)throw new K(S.INVALID_PARAMS,"Player not found");this._pasued=!0,this._audioDom.pause()}manuallyPause(){return this.pause()}manuallyPlay(){var I;if(this.logger.info("Invoke AudioPlayer.manuallyPlay"),this._emitPlayFailed=!1,!this._audioDom)throw new K(S.INVALID_PARAMS,"Player not found");if(!this.played)return Promise.resolve();this._audioDom.volume=1,this._audioDom.muted=!1,(I=this._fakeAudioDom)===null||I===void 0||I.play();const g=[],C=this._audioDom.play();C!=null&&C.then&&g.push(C);const Q=ui.getAudioContextInstance();if(Q.state==="suspended"){const i=Q.resume();i!=null&&i.then&&g.push(i)}(g.length>0?Promise.all(g):Promise.resolve(C)).then(()=>{this._pasued=!1})}async setPlaybackDevice(I){this.logger.info("setPlaybackDevice","setPlaybackDevice: ".concat(I)),(await oC.enumerateAudioPlaybackDevices()).map(g=>g.deviceId).includes(I)&&this._audioDom&&this._audioDom.setSinkId&&await this._audioDom.setSinkId(I)}stop(){const{_containerDom:I}=this;this.logger.info("stopAudio","stop audio track: ".concat(this.userId)),this._audioDom&&(this._audioDom.srcObject=null,I!=null&&I.contains(this._audioDom)&&I.removeChild(this._audioDom)),this._fakeAudioDom&&(this._fakeAudioDom.srcObject=null,this._fakeAudioDom=void 0),this.played=!1}get domElement(){return this._audioDom}destroy(){this.logger.info("destroy","audio player: ".concat(this.userId)),this.stop(),super.removeAllListeners(),this._removeListeners(),this._audioDom&&(this._audioDom.srcObject=null,delete this._audioDom),this._edgeTimer&&clearTimeout(this._edgeTimer)}}class LX{constructor(){l(this,"_ac",void 0),l(this,"_sourceNode",void 0),l(this,"_gainNode",void 0),l(this,"_destNode",void 0),this._ac=ui.getAudioContextInstance(),this._gainNode=this._ac.createGain(),this._destNode=this._ac.createMediaStreamDestination(),this._gainNode.connect(this._destNode)}setVolume(I){this._gainNode.gain.value=I/100}getVolume(){return Math.round(100*this._gainNode.gain.value)}updateInputTrack(I){this._sourceNode&&(this._sourceNode.mediaStream.getTracks().forEach(C=>{C.stop()}),delete this._sourceNode);const g=new MediaStream;g.addTrack(I),this._sourceNode=this._ac.createMediaStreamSource(g),this._sourceNode.connect(this._gainNode)}getOutputTrack(){return this._destNode.stream.getTracks()[0]}destroy(){var I,g;(I=this._sourceNode)===null||I===void 0||I.mediaStream.getTracks().forEach(C=>{C.stop()}),Dc!==13&&this._destNode.stream.getTracks().forEach(C=>{C.stop()}),(g=this._sourceNode)===null||g===void 0||g.disconnect(),this._gainNode.disconnect(),delete this._sourceNode}}class Io extends Oj{constructor(I,g,C){super(I,g,p(p({},C),{},{mediaType:Gs.AUDIO})),l(this,"audioCaptureConfig",void 0),l(this,"_ap",void 0),l(this,"mixedAudioTrack",void 0),l(this,"mixType",li.PLAYOUT_AND_PUBLISH),l(this,"_audioFetchMap",new Map),l(this,"_audioDataFetcher",void 0),l(this,"_localPlaybackTrack",void 0),l(this,"notSupportedWebAudio",!1)}get withWebAudio(){return!!this._ap}getAudioLevel(){var I;let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:s0.MICROPHONE;const C=g===s0.AUDIOMIXING&&this.mixType!==li.PLAYOUT&&(I=this.mixedAudioTrack)!==null&&I!==void 0?I:this.preprocessingTrack;let Q=this._audioFetchMap.get(g);var i;return Q&&Q.currentTrackId===C.id||((i=Q)===null||i===void 0||i.destroy(),Q=new LS(C),this._audioFetchMap.set(g,Q)),Q.getAudioLevel()}async updateAudioCaptureConfig(){this.audioCaptureConfig&&(this.logger.print("updateAudioCaptureConfig","update localAudioTrack: ",this.audioCaptureConfig),await this.originTrack.applyConstraints(this.audioCaptureConfig))}setVolume(I){const g=!yA("SKIP_WEB_AUDIO_IN_TRACK")&&(IX()||yA("ENFORCE_WEB_AUDIO_SUPPORTED"));g||(this.notSupportedWebAudio=!0);const C=!this.withWebAudio&&I!==100;try{g&&C&&(this.logger.print("Create AudioProcess"),this._ap=new LX,this._ap.updateInputTrack(this.originTrack),this.mediaTrack=this._ap.getOutputTrack())}catch{this.logger.warn("WebAudio may not supported, quired return"),this.notSupportedWebAudio=!0}var Q;this.notSupportedWebAudio||(Q=this._ap)===null||Q===void 0||Q.setVolume(I),g&&C&&this.emit("needReplaceTrack",this)}getVolume(){return this._ap?this._ap.getVolume():100}setUserId(I){this.trackInfo.streamUserId=I}setDataFetcher(I,g){this.logger.info("setDataFetcher","frameSize %s",I),ui.isWorkletReady!==null?this._audioDataFetcher?this._audioDataFetcher.setFrameSize(I):(this._audioDataFetcher=new SS(this.preprocessingTrack,I),this._audioDataFetcher.on("data",g)):this.logger.info("setDataFetcher","audioContextManager.isWorkletReady is null")}stopDataFetcher(){var I,g;(I=this._audioDataFetcher)===null||I===void 0||I.removeAllListeners("data"),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0}play(I){var g,C;this._localPlaybackTrack&&this.stop();const Q=I===GC.AFTER_CAPTURE?this.originTrack:I===GC.AFTER_PROCESS?this.preprocessingTrack:void 0;if(!Q)return void this.logger.error("play()","no target track for %s",I);this._localPlaybackTrack=new FS(this._ctx,Q.clone(),p({},this.trackInfo));const i=this._ctx.earMonitorSettings[(g=this.streamIndex)!==null&&g!==void 0?g:W.STREAM_INDEX_MAIN].volume;this.setPlaybackVolume(i);const B=new pS(this._ctx.id,(C=this.trackInfo.streamUserId)!==null&&C!==void 0?C:"",{isScreen:this.streamIndex===W.STREAM_INDEX_SCREEN,muted:!1});return B.on("playback_event",E=>{var e;E.eventName==="autoplay-error"&&this.emit("autoplay-error",{kind:"audio",streamIndex:(e=this.streamIndex)!==null&&e!==void 0?e:W.STREAM_INDEX_MAIN,mediaType:Gs.AUDIO})}),this._localPlaybackTrack.setPlayer(B),this._localPlaybackTrack.play()}stop(){var I;(I=this._localPlaybackTrack)===null||I===void 0||I.destroy(),this._localPlaybackTrack=void 0}setPlaybackVolume(I){var g;return(g=this._localPlaybackTrack)===null||g===void 0?void 0:g.setVolume(I)}destroy(){var I,g;this._audioFetchMap.forEach(C=>C.destroy()),this._audioFetchMap.clear(),(I=this._ap)===null||I===void 0||I.destroy(),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0,this.stop(),super.destroy()}}class FS extends qj{constructor(I,g,C){super(I,g,p(p({},C),{},{mediaType:Gs.AUDIO})),l(this,"_ap",void 0),l(this,"_audioPlayer",void 0),l(this,"_audioLevelFetcher",void 0),l(this,"_audioDataFetcher",void 0),l(this,"notSupportedWebAudio",!1)}get withWebAudio(){return!!this._ap}getAudioLevel(){return this._audioLevelFetcher||(this._audioLevelFetcher=new LS(this.originTrack)),this._audioLevelFetcher.getAudioLevel()}setVolume(I){const g=!yA("SKIP_WEB_AUDIO_IN_TRACK")&&(IX()||yA("ENFORCE_WEB_AUDIO_SUPPORTED"));g||(this.notSupportedWebAudio=!0);const C=!this.withWebAudio&&I!==100;try{g&&C&&(this.logger.print("Create AudioProcess"),this._ap=new LX,this._ap.updateInputTrack(this.originTrack),this.mediaTrack=this._ap.getOutputTrack())}catch{this.logger.warn("WebAudio may not supported, quite return"),this.notSupportedWebAudio=!0}if(this.notSupportedWebAudio){var Q;const E=(Q=this._audioPlayer)===null||Q===void 0?void 0:Q.domElement;E&&(E.volume=Math.min(I/100,1))}else{var i;(i=this._ap)===null||i===void 0||i.setVolume(I)}var B;g&&C&&(this.emit("needReplaceTrack",this),(B=this._audioPlayer)===null||B===void 0||B.playAudio(this))}getVolume(){var I,g;return this.notSupportedWebAudio?100*((I=(g=this._audioPlayer)===null||g===void 0||(g=g.domElement)===null||g===void 0?void 0:g.volume)!==null&&I!==void 0?I:1):this._ap?this._ap.getVolume():100}setPlaybackDevice(I){var g;return(g=this._audioPlayer)===null||g===void 0?void 0:g.setPlaybackDevice(I)}setPlayer(I){this._audioPlayer=I}havePlayer(){return!!this._audioPlayer}bindPlayerEvent(I){var g;this._audioPlayer&&I(this._audioPlayer,this.isPublic,(g=this.streamIndex)!==null&&g!==void 0?g:W.STREAM_INDEX_MAIN)}pause(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.pause()}play(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.playAudio(this)}manuallyPlay(){var I,g,C;return(I=this._audioPlayer)!==null&&I!==void 0&&I.played?(g=this._audioPlayer)===null||g===void 0?void 0:g.manuallyPlay():(C=this._audioPlayer)===null||C===void 0?void 0:C.playAudio(this)}manuallyPause(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.manuallyPause()}stop(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.stop()}setDataFetcher(I,g){this.logger.info("setDataFetcher","frameSize %s",I),ui.isWorkletReady!==null?this._audioDataFetcher?this._audioDataFetcher.setFrameSize(I):(this._audioDataFetcher=new SS(this.originTrack,I),this._audioDataFetcher.on("data",g)):this.logger.warn("setDataFetcher","audioContextManager.isWorkletReady is null")}stopDataFetcher(){var I;this.logger.info("stopDataFetcher"),(I=this._audioDataFetcher)===null||I===void 0||I.destroy(),this._audioDataFetcher=void 0}destroy(){var I,g,C;(I=this._audioLevelFetcher)===null||I===void 0||I.destroy(),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0,this._ap&&this._ap.destroy(),(C=this._audioPlayer)===null||C===void 0||C.destroy(),this._audioPlayer=void 0,super.destroy()}}const zDA=new SA("VERTC",0);let yG,qv=null;const MDA=()=>!!SX();function SX(){if(qv)return qv;try{qv=window.require("electron");const{ipcRenderer:A}=qv;return yG={getSources:I=>A.invoke("DESKTOP_CAPTURER_GET_SOURCES",I)},qv}catch{return null}}async function TX(A,I,g){let C;return I||(I={width:1920,height:1080,frameRate:15}),C=g?{audio:{mandatory:{chromeMediaSource:"desktop"}},video:{mandatory:{chromeMediaSource:"desktop",maxHeight:I.height,maxWidth:I.width,maxFrameRate:I.frameRate}}}:{audio:!1,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:A,maxHeight:I.height,maxWidth:I.width,maxFrameRate:I.frameRate}}},zDA.info("getUserMediaConfig",JSON.stringify(C)),await navigator.mediaDevices.getUserMedia(C)}async function pX(A){let I=["window","screen"];if(A==="window"&&(I=["window"]),A==="screen"&&(I=["screen"]),!SX())throw new K(S.ERR_ELECTRON_IS_NULL,"Unable to get Electron object");let g=null;try{g=yG.getSources({types:I})}catch{g=null}g&&g.then||(g=new Promise((C,Q)=>{yG.getSources({types:I},(i,B)=>{i?Q(i):C(B)})}));try{return await g}catch(C){throw new K(S.ERR_ELECTRON_IS_NULL,C.toString())}}function fDA(A){return new Promise((I,g)=>{const C=document.createElement("div");C.innerText="share screen",C.setAttribute("style","text-align: center; height: 25px; line-height: 25px; border-radius: 4px 4px 0 0; background: #D4D2D4; border-bottom: solid 1px #B9B8B9;");const Q=document.createElement("div");Q.setAttribute("style","width: 100%; height: 500px; padding: 15px 25px ; box-sizing: border-box;");const i=document.createElement("div");i.innerText="Web Screensharing wants to share the contents of your screen. Choose what you'd like to share.",i.setAttribute("style","height: 12%;");const B=document.createElement("div");B.setAttribute("style","width: 100%; height: 80%; background: #FFF; border: solid 1px #CBCBCB; display: flex; flex-wrap: wrap; justify-content: space-around; overflow-y: scroll; padding: 0 15px; box-sizing: border-box;");const E=document.createElement("div");E.setAttribute("style","text-align: right; padding: 16px 0;");const e=document.createElement("button");e.innerHTML="cancel",e.setAttribute("style","width: 85px;"),e.onclick=()=>{document.body.removeChild(t);const o=new Error("NotAllowedError");o.name="NotAllowedError",g(o)},E.appendChild(e),Q.appendChild(i),Q.appendChild(B),Q.appendChild(E);const t=document.createElement("div");t.setAttribute("style","position: fixed; z-index: 99999999; top: 50%; left: 50%; width: 620px; height: 525px; background: #ECECEC; border-radius: 4px; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%);"),t.appendChild(C),t.appendChild(Q),document.body.appendChild(t),A.map(o=>{if(o.id){const r=document.createElement("div");r.setAttribute("style","width: 30%; height: 160px; padding: 20px 0; text-align: center;box-sizing: content-box;"),r.innerHTML=`
+ +
+ + `).concat(o.name,` + `),r.onclick=()=>{document.body.removeChild(t),I(o.id)},B.appendChild(r)}})})}async function jDA(A,I){const g=await pX(),C=await fDA(g);return await TX(C,A,I)}async function XDA(A,I){const g=new Po(A,I,{streamIndex:MI.MAIN,sourceType:DI.INTERNAL,isDummy:!0});return await g.isTrackReady,g}async function HDA(A,I){const g=new Po(A,I,{isDummy:!0,streamIndex:MI.SCREEN,sourceType:DI.INTERNAL});return await g.isTrackReady,g}async function Ml(A,I){var g;let C;const Q=((g=(I=I||A.videoProfile.getCaptureConfig()).deviceId)===null||g===void 0?void 0:g.exact)||"default",i=UC(),B=new SA("TrackFactory",0,A.id);try{var E,e,t;B.info("createCameraVideoTrack","constraints:",I),(E=A.monitor)===null||E===void 0||E.report("rtc_video_capture_event",{event_type:"start",media_device_id:Q,capture_session_id:i});const v=dA();KI&&(I.frameRate={ideal:30,max:30}),C=await oC.getUserMedia({video:I}),(e=A.monitor)===null||e===void 0||e.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:Q,media_device_name:((t=C.getVideoTracks()[0])===null||t===void 0?void 0:t.label)||"",reason:"success",elapse:dA()-v,capture_session_id:i})}catch(v){var o;throw(o=A.monitor)===null||o===void 0||o.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:Q,error_code:v.code,reason:v.name+v.message,capture_session_id:i}),new K(S.GET_VIDEO_TRACK_FAILED,"throw error from getUserMedia. [".concat(v.name||"unknown name","]: ").concat(v.message||"unknown message","."),v)}const r=C.getVideoTracks()[0],s=new Po(A,r,{streamIndex:MI.MAIN,sourceType:DI.INTERNAL,captureSessionId:i});return await s.isTrackReady,s}async function mG(A,I){var g;let C;new SA("TrackFactory",0,A.id).info("createMicrophoneAudioTrack","constraints:",I);const Q=((g=I.deviceId)===null||g===void 0?void 0:g.exact)||"default",i=UC();try{var B,E,e;(B=A.monitor)===null||B===void 0||B.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_begin",media_device_id:Q,event_session_id:i});const s=dA();A.extensionManager.getPluginByName(ts.PRE_PROCESSING,"RTCAIAnsExtension")&&(I.autoGainControl=!0,I.noiseSuppression=!1),C=await oC.getUserMedia({audio:I}),(E=A.monitor)===null||E===void 0||E.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_result",media_device_id:Q,media_device_name:((e=C.getAudioTracks()[0])===null||e===void 0?void 0:e.label)||"",reason:"success",elapse:dA()-s,event_session_id:i})}catch(s){var t;throw(t=A.monitor)===null||t===void 0||t.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_end",media_device_id:Q,error_code:s.code,reason:s.name+s.message,event_session_id:i}),new K(S.GET_AUDIO_TRACK_FAILED,"throw error from getUserMedia. [".concat(s.name||"unknown name","]: ").concat(s.message||"unknown message","."),s)}const o=C.getAudioTracks()[0],r=new Io(A,o,{streamIndex:MI.MAIN,sourceType:DI.INTERNAL,captureSessionId:i});return await r.isTrackReady,r}async function xDA(A,I,g){var C,Q;let i;new SA("TrackFactory",0,A.id).print("createCameraAndMicrophoneTrack","audioConstraints:",I,"videoConstraints:",g);const B=((C=I.deviceId)===null||C===void 0?void 0:C.exact)||"default",E=((Q=g.deviceId)===null||Q===void 0?void 0:Q.exact)||"default",e=UC(),t=UC();try{var o,r,s,v,n,a;(o=A.monitor)===null||o===void 0||o.report("rtc_video_capture_event",{event_type:"start",media_device_id:E,capture_session_id:e}),(r=A.monitor)===null||r===void 0||r.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_begin",media_device_id:B,event_session_id:t});const y=dA();KI&&(g.frameRate={ideal:30,max:30}),A.extensionManager.getPluginByName(ts.PRE_PROCESSING,"RTCAIAnsExtension")&&(I.autoGainControl=!0,I.noiseSuppression=!1),i=await oC.getUserMedia({audio:I,video:g}),(s=A.monitor)===null||s===void 0||s.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:E,media_device_name:((v=i.getVideoTracks()[0])===null||v===void 0?void 0:v.label)||"",reason:"success",elapse:dA()-y,capture_session_id:e}),(n=A.monitor)===null||n===void 0||n.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_result",media_device_id:B,media_device_name:((a=i.getAudioTracks()[0])===null||a===void 0?void 0:a.label)||"",reason:"success",elapse:dA()-y,event_session_id:t})}catch(y){var c,P;throw(c=A.monitor)===null||c===void 0||c.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:E,error_code:y.code,reason:y.name+y.message,capture_session_id:e}),(P=A.monitor)===null||P===void 0||P.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_end",media_device_id:B,error_code:y.code,reason:y.name+y.message,event_session_id:t}),new K(S.GET_VIDEO_TRACK_FAILED,"throw error from getUserMedia. [".concat(y.name||"unknown name","]: ").concat(y.message||"unknown message","."),y)}const d=i.getVideoTracks()[0],h=new Po(A,d,{streamIndex:MI.MAIN,sourceType:DI.INTERNAL,captureSessionId:e}),u=i.getAudioTracks()[0],D=new Io(A,u,{streamIndex:MI.MAIN,sourceType:DI.INTERNAL,captureSessionId:t});return await Promise.all([h.isTrackReady,D.isTrackReady]),{videoTrack:h,audioTrack:D}}async function ODA(A,I){const g=new SA("TrackFactory",0,A.id);let C,Q=A.videoProfile.getScreenEncodeConfig();g.info("createScreenTracks","screenConfig: %o, constraints: %o",I,Q);const i=UC(),{enableAudio:B=!1,displaySurface:E,systemAudio:e,surfaceSwitching:t,selfBrowserSurface:o,sourceId:r}=I,s={};E&&["monitor","browser","window"].includes(E)&&(Q?Q.displaySurface=E:Q={displaySurface:E}),e&&["include","exclude"].includes(e)&&(s.systemAudio=e),t&&["include","exclude"].includes(t)&&(s.surfaceSwitching=t),o&&["include","exclude"].includes(o)&&(s.selfBrowserSurface=o);try{var v,n,a,c;(v=A.monitor)===null||v===void 0||v.report("rtc_video_capture_event",{event_type:"start",media_device_id:"screen",capture_session_id:i});const D=dA();C=MDA()?r?await TX(r,Q,B):await jDA(Q,B):await navigator.mediaDevices.getDisplayMedia(p({video:!(Q&&(!kQ||_f!=="16.1"))||Q,audio:!!B&&{channelCount:2,noiseSuppression:!1,echoCancellation:!0,autoGainControl:!1}},s)),(n=A.monitor)===null||n===void 0||n.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:"screen",media_device_name:"".concat(((a=C.getVideoTracks()[0])===null||a===void 0?void 0:a.label)||"",", ").concat(((c=C.getAudioTracks()[0])===null||c===void 0?void 0:c.label)||""),reason:"success",elapse:dA()-D,capture_session_id:i})}catch(D){var P;throw(P=A.monitor)===null||P===void 0||P.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:"screen",error_code:D.code,reason:D.name+D.message,capture_session_id:i}),new K(S.GET_SCREEN_TRACK_FAILED,"throw error from getDisplayMedia",D)}const d=C.getVideoTracks()[0],h=new Po(A,d,{streamIndex:MI.SCREEN,sourceType:DI.INTERNAL,captureSessionId:i}),u=C.getAudioTracks()[0];if(C.getAudioTracks().length){const D=new Io(A,u,{streamIndex:MI.SCREEN,sourceType:DI.INTERNAL,captureSessionId:i});return await Promise.all([h.isTrackReady,D.isTrackReady]),[h,D]}return await h.isTrackReady,[h,void 0]}function qDA(A,I,g,C){return new WDA(A,I,g,p({},C))}function FX(A,I,g){return new FS(A,I,p({},g))}async function _DA(A,I){const g=new Po(A,I,{streamIndex:MI.MAIN,sourceType:DI.EXTERNAL});return await g.isTrackReady,g}async function $DA(A,I){const g=new Io(A,I,{streamIndex:MI.MAIN,sourceType:DI.EXTERNAL});return await g.isTrackReady,g}async function AbA(A,I){const g=new Po(A,I,{sourceType:DI.EXTERNAL,streamIndex:MI.SCREEN});return await g.isTrackReady,g}async function IbA(A,I){const g=new Io(A,I,{sourceType:DI.EXTERNAL,streamIndex:MI.SCREEN});return await g.isTrackReady,g}const UX="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IHQ9e2dldE5BTFVuaXRzKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoZS5sZW5ndGgtZS5wb3NpdGlvbjw0KXJldHVybltdO2NvbnN0e3Bvc2l0aW9uOnJ9PWU7cmV0dXJuIDE9PT1lLmdldEludDMyKHIpfHwwPT09ZS5nZXRJbnQxNihyKSYmMT09PWUuZ2V0SW50OChyKzIpP3QuZ2V0QW5uZXhiTmFscyhlLG4pOnQuZ2V0QXZjY05hbHMoZSxuKX0sZ2V0QW5uZXhiTmFscyhlLG4pe2NvbnN0IHI9W107bGV0IGk9dC5nZXRIZWFkZXJQb3NpdGlvbkFubmV4QihlKSxvPWkucG9zLGE9bztmb3IoO288ZS5sZW5ndGgtNDspe2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UobyxvK2kuaGVhZGVyTGVuZ3RoKSk7aS5wb3M9PT1lLnBvc2l0aW9uJiZlLnNraXAoaS5oZWFkZXJMZW5ndGgpLGk9dC5nZXRIZWFkZXJQb3NpdGlvbkFubmV4QihlKSxhPWkucG9zO2NvbnN0IGM9e2hlYWRlcjpzLGJvZHk6bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UobytzLmJ5dGVMZW5ndGgsYSkpLHR5cGU6LTF9O24/dC5hbmFseXNlSDI2NU5hbChjKTp0LmFuYWx5c2VOYWwoYyksKGMudHlwZTw9OXx8biYmYy50eXBlPD00MCkmJjAhPT1jLnR5cGUmJnIucHVzaChjKSxlLnNraXAoYS1lLnBvc2l0aW9uKSxvPWF9cmV0dXJuIHJ9LGdldEF2Y2NOYWxzKGUsbil7Y29uc3Qgcj1bXTtmb3IoO2UucG9zaXRpb248ZS5sZW5ndGgtNDspe2NvbnN0IGk9ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTtpZighKGUubGVuZ3RoLWUucG9zaXRpb24+PWkpKWJyZWFrO3tjb25zdCBvPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLnNsaWNlKGUucG9zaXRpb24sZS5wb3NpdGlvbis0KSk7ZS5za2lwKDQpO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UoZS5wb3NpdGlvbixlLnBvc2l0aW9uK2kpKTtlLnNraXAoaSk7Y29uc3Qgcz17aGVhZGVyOm8sYm9keTphLHR5cGU6LTF9O24/dC5hbmFseXNlSDI2NU5hbChzKTp0LmFuYWx5c2VOYWwocykscy50eXBlPD05JiYwIT09cy50eXBlJiZyLnB1c2gocyl9fXJldHVybiByfSxhbmFseXNlTmFsKHQpe2NvbnN0IGU9MzEmdC5ib2R5WzBdO3N3aXRjaCh0LnR5cGU9ZSxlKXtjYXNlIDE6dC5uZHI9ITA7YnJlYWs7Y2FzZSA1OnQuaWRyPSEwO2JyZWFrO2Nhc2UgNjp0LnNlaT0hMDticmVhaztjYXNlIDc6dC5zcHM9ITA7YnJlYWs7Y2FzZSA4OnQucHBzPSEwfX0sYW5hbHlzZUgyNjVOYWwodCl7Y29uc3QgZT0oMTI2JnQuYm9keVswXSk+PjE7c3dpdGNoKHQudHlwZT1lLGUpe2Nhc2UgMzk6Y2FzZSA0MDp0LnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpe2xldCBlPXQucG9zaXRpb24sbj0wO2NvbnN0IHI9dC5sZW5ndGg7Zm9yKDszIT09biYmNCE9PW4mJmU8ci00OykwPT09dC5nZXRJbnQxNihlKT8xPT09dC5nZXRJbnQxNihlKzIpP249NDoxPT09dC5nZXRJbnQ4KGUrMik/bj0zOmUrKzplKys7cmV0dXJuIGU9PT1yLTQmJigwPT09dC5nZXRJbnQxNihlKT8xPT09dC5nZXRJbnQxNihlKzIpP249NDplPXI6KGUrKywwPT09dC5nZXRJbnQxNihlKSYmMT09PXQuZ2V0SW50OChlKT9uPTM6ZT1yKSkse3BvczplLGhlYWRlckxlbmd0aDpufX0saXNIMjY1VmlkZW9GcmFtZSh0KXt2YXIgZTtyZXR1cm4oKG51bGw9PT0oZT10LmdldE1ldGFkYXRhKXx8dm9pZCAwPT09ZXx8bnVsbD09PShlPWUuY2FsbCh0KSl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWltZVR5cGUpfHwiIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiaDI2NSIpfX07dmFyIGU9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJkZWZhdWx0Iik/dC5kZWZhdWx0OnR9dmFyIHI9e2V4cG9ydHM6e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuTWF0aD09PU1hdGgmJnR9LG89aSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxpKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxpKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGkoIm9iamVjdCI9PXR5cGVvZiBlJiZlKXx8aSgib2JqZWN0Ij09dHlwZW9mIGUmJmUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGE9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKGUpe3JldHVybiEwfX0scz0hYSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKSxjPXMsbD1GdW5jdGlvbi5wcm90b3R5cGUsdT1sLmFwcGx5LGg9bC5jYWxsLGY9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoYz9oLmJpbmQodSk6ZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseSh1LGFyZ3VtZW50cyl9KSxkPXMsXz1GdW5jdGlvbi5wcm90b3R5cGUscD1fLmNhbGwsZz1kJiZfLmJpbmQuYmluZChwLHApLG09ZD9nOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHQsYXJndW1lbnRzKX19LHk9bSx2PXkoe30udG9TdHJpbmcpLGI9eSgiIi5zbGljZSksdz1mdW5jdGlvbih0KXtyZXR1cm4gYih2KHQpLDgsLTEpfSxrPXcsUz1tLE89ZnVuY3Rpb24odCl7aWYoIkZ1bmN0aW9uIj09PWsodCkpcmV0dXJuIFModCl9LHg9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLEE9dm9pZCAwPT09eCYmdm9pZCAwIT09eD9mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdHx8dD09PXh9OmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fSxUPXt9LEU9IWEoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksTD1zLHo9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsQj1MP3ouYmluZCh6KTpmdW5jdGlvbigpe3JldHVybiB6LmFwcGx5KHosYXJndW1lbnRzKX0sST17fSxDPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixSPU4mJiFDLmNhbGwoezE6Mn0sMSk7SS5mPVI/ZnVuY3Rpb24odCl7dmFyIGU9Tih0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpDO3ZhciBqLEQsUD1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX0sVT1hLEY9dyxNPU9iamVjdCxaPW0oIiIuc3BsaXQpLEo9VSgoZnVuY3Rpb24oKXtyZXR1cm4hTSgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT09Rih0KT9aKHQsIiIpOk0odCl9Ok0sSD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH0sVz1ILEs9VHlwZUVycm9yLEc9ZnVuY3Rpb24odCl7aWYoVyh0KSl0aHJvdyBuZXcgSygiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH0sVj1KLFk9RyxYPWZ1bmN0aW9uKHQpe3JldHVybiBWKFkodCkpfSxxPUEsJD1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQ/bnVsbCE9PXQ6cSh0KX0sUT17fSx0dD1RLGV0PW8sbnQ9QSxydD1mdW5jdGlvbih0KXtyZXR1cm4gbnQodCk/dDp2b2lkIDB9LGl0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9ydCh0dFt0XSl8fHJ0KGV0W3RdKTp0dFt0XSYmdHRbdF1bZV18fGV0W3RdJiZldFt0XVtlXX0sb3Q9bSh7fS5pc1Byb3RvdHlwZU9mKSxhdD1vLm5hdmlnYXRvcixzdD1hdCYmYXQudXNlckFnZW50LGN0PW8sbHQ9c3Q/U3RyaW5nKHN0KToiIix1dD1jdC5wcm9jZXNzLGh0PWN0LkRlbm8sZnQ9dXQmJnV0LnZlcnNpb25zfHxodCYmaHQudmVyc2lvbixkdD1mdCYmZnQudjg7ZHQmJihEPShqPWR0LnNwbGl0KCIuIikpWzBdPjAmJmpbMF08ND8xOisoalswXStqWzFdKSksIUQmJmx0JiYoIShqPWx0Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8alsxXT49NzQpJiYoaj1sdC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKEQ9K2pbMV0pO3ZhciBfdD1ELHB0PV90LGd0PWEsbXQ9by5TdHJpbmcseXQ9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhZ3QoKGZ1bmN0aW9uKCl7dmFyIHQ9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIW10KHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZwdCYmcHQ8NDF9KSksdnQ9eXQmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsYnQ9aXQsd3Q9QSxrdD1vdCxTdD1PYmplY3QsT3Q9dnQ/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXt2YXIgZT1idCgiU3ltYm9sIik7cmV0dXJuIHd0KGUpJiZrdChlLnByb3RvdHlwZSxTdCh0KSl9LHh0PVN0cmluZyxBdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHh0KHQpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0sVHQ9QSxFdD1BdCxMdD1UeXBlRXJyb3IsenQ9ZnVuY3Rpb24odCl7aWYoVHQodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEx0KEV0KHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX0sQnQ9enQsSXQ9SCxDdD1CLE50PUEsUnQ9JCxqdD1UeXBlRXJyb3IsRHQ9e2V4cG9ydHM6e319LFB0PW8sVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LEZ0PW8sTXQ9ZnVuY3Rpb24odCxlKXt0cnl7VXQoUHQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtQdFt0XT1lfXJldHVybiBlfSxadD0iX19jb3JlLWpzX3NoYXJlZF9fIixKdD1EdC5leHBvcnRzPUZ0W1p0XXx8TXQoWnQse30pOyhKdC52ZXJzaW9uc3x8KEp0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIEh0PUR0LmV4cG9ydHMsV3Q9SHQsS3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gV3RbdF18fChXdFt0XT1lfHx7fSl9LEd0PUcsVnQ9T2JqZWN0LFl0PWZ1bmN0aW9uKHQpe3JldHVybiBWdChHdCh0KSl9LFh0PVl0LHF0PW0oe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHF0KFh0KHQpLGUpfSxRdD1tLHRlPTAsZWU9TWF0aC5yYW5kb20oKSxuZT1RdCgxLi50b1N0cmluZykscmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbmUoKyt0ZStlZSwzNil9LGllPUt0LG9lPSR0LGFlPXJlLHNlPXl0LGNlPXZ0LGxlPW8uU3ltYm9sLHVlPWllKCJ3a3MiKSxoZT1jZT9sZS5mb3J8fGxlOmxlJiZsZS53aXRob3V0U2V0dGVyfHxhZSxmZT1mdW5jdGlvbih0KXtyZXR1cm4gb2UodWUsdCl8fCh1ZVt0XT1zZSYmb2UobGUsdCk/bGVbdF06aGUoIlN5bWJvbC4iK3QpKSx1ZVt0XX0sZGU9QixfZT0kLHBlPU90LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtyZXR1cm4gSXQobik/dm9pZCAwOkJ0KG4pfSxtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI7aWYoInN0cmluZyI9PT1lJiZOdChuPXQudG9TdHJpbmcpJiYhUnQocj1DdChuLHQpKSlyZXR1cm4gcjtpZihOdChuPXQudmFsdWVPZikmJiFSdChyPUN0KG4sdCkpKXJldHVybiByO2lmKCJzdHJpbmciIT09ZSYmTnQobj10LnRvU3RyaW5nKSYmIVJ0KHI9Q3Qobix0KSkpcmV0dXJuIHI7dGhyb3cgbmV3IGp0KCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0seWU9VHlwZUVycm9yLHZlPWZlKCJ0b1ByaW1pdGl2ZSIpLGJlPWZ1bmN0aW9uKHQsZSl7aWYoIV9lKHQpfHxwZSh0KSlyZXR1cm4gdDt2YXIgbixyPWdlKHQsdmUpO2lmKHIpe2lmKHZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iiksbj1kZShyLHQsZSksIV9lKG4pfHxwZShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgeWUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIiksbWUodCxlKX0sd2U9T3Qsa2U9ZnVuY3Rpb24odCl7dmFyIGU9YmUodCwic3RyaW5nIik7cmV0dXJuIHdlKGUpP2U6ZSsiIn0sU2U9JCxPZT1vLmRvY3VtZW50LHhlPVNlKE9lKSYmU2UoT2UuY3JlYXRlRWxlbWVudCksQWU9ZnVuY3Rpb24odCl7cmV0dXJuIHhlP09lLmNyZWF0ZUVsZW1lbnQodCk6e319LFRlPUFlLEVlPSFFJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLExlPUUsemU9QixCZT1JLEllPVAsQ2U9WCxOZT1rZSxSZT0kdCxqZT1FZSxEZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1QuZj1MZT9EZTpmdW5jdGlvbih0LGUpe2lmKHQ9Q2UodCksZT1OZShlKSxqZSl0cnl7cmV0dXJuIERlKHQsZSl9Y2F0Y2gobil7fWlmKFJlKHQsZSkpcmV0dXJuIEllKCF6ZShCZS5mLHQsZSksdFtlXSl9O3ZhciBQZT1hLFVlPUEsRmU9LyN8XC5wcm90b3R5cGVcLi8sTWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1KZVtaZSh0KV07cmV0dXJuIG49PT1XZXx8biE9PUhlJiYoVWUoZSk/UGUoZSk6ISFlKX0sWmU9TWUubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShGZSwiLiIpLnRvTG93ZXJDYXNlKCl9LEplPU1lLmRhdGE9e30sSGU9TWUuTkFUSVZFPSJOIixXZT1NZS5QT0xZRklMTD0iUCIsS2U9TWUsR2U9enQsVmU9cyxZZT1PKE8uYmluZCksWGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR2UodCksdm9pZCAwPT09ZT90OlZlP1llKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxxZT17fSwkZT1FJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSksUWU9JCx0bj1TdHJpbmcsZW49VHlwZUVycm9yLG5uPWZ1bmN0aW9uKHQpe2lmKFFlKHQpKXJldHVybiB0O3Rocm93IG5ldyBlbih0bih0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX0scm49RSxvbj1FZSxhbj0kZSxzbj1ubixjbj1rZSxsbj1UeXBlRXJyb3IsdW49T2JqZWN0LmRlZmluZVByb3BlcnR5LGhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZm49ImVudW1lcmFibGUiLGRuPSJjb25maWd1cmFibGUiLF9uPSJ3cml0YWJsZSI7cWUuZj1ybj9hbj9mdW5jdGlvbih0LGUsbil7aWYoc24odCksZT1jbihlKSxzbihuKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmInByb3RvdHlwZSI9PT1lJiYidmFsdWUiaW4gbiYmX24gaW4gbiYmIW5bX25dKXt2YXIgcj1obih0LGUpO3ImJnJbX25dJiYodFtlXT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTpkbiBpbiBuP25bZG5dOnJbZG5dLGVudW1lcmFibGU6Zm4gaW4gbj9uW2ZuXTpyW2ZuXSx3cml0YWJsZTohMX0pfXJldHVybiB1bih0LGUsbil9OnVuOmZ1bmN0aW9uKHQsZSxuKXtpZihzbih0KSxlPWNuKGUpLHNuKG4pLG9uKXRyeXtyZXR1cm4gdW4odCxlLG4pfWNhdGNoKHIpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBuZXcgbG4oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9O3ZhciBwbj1xZSxnbj1QLG1uPUU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBwbi5mKHQsZSxnbigxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH0seW49byx2bj1mLGJuPU8sd249QSxrbj1ULmYsU249S2UsT249USx4bj1YZSxBbj1tbixUbj0kdCxFbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihuLHIsaSl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLHIpfXJldHVybiBuZXcgdChuLHIsaSl9cmV0dXJuIHZuKHQsdGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZS5wcm90b3R5cGU9dC5wcm90b3R5cGUsZX0sTG49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaD10LnRhcmdldCxmPXQuZ2xvYmFsLGQ9dC5zdGF0LF89dC5wcm90byxwPWY/eW46ZD95bltoXTp5bltoXSYmeW5baF0ucHJvdG90eXBlLGc9Zj9PbjpPbltoXXx8QW4oT24saCx7fSlbaF0sbT1nLnByb3RvdHlwZTtmb3IobyBpbiBlKXI9IShuPVNuKGY/bzpoKyhkPyIuIjoiIyIpK28sdC5mb3JjZWQpKSYmcCYmVG4ocCxvKSxzPWdbb10sciYmKGM9dC5kb250Q2FsbEdldFNldD8odT1rbihwLG8pKSYmdS52YWx1ZTpwW29dKSxhPXImJmM/YzplW29dLChufHxffHx0eXBlb2YgcyE9dHlwZW9mIGEpJiYobD10LmJpbmQmJnI/eG4oYSx5bik6dC53cmFwJiZyP0VuKGEpOl8mJnduKGEpP2JuKGEpOmEsKHQuc2hhbXx8YSYmYS5zaGFtfHxzJiZzLnNoYW0pJiZBbihsLCJzaGFtIiwhMCksQW4oZyxvLGwpLF8mJihUbihPbixpPWgrIlByb3RvdHlwZSIpfHxBbihPbixpLHt9KSxBbihPbltpXSxvLGEpLHQucmVhbCYmbSYmKG58fCFtW29dKSYmQW4obSxvLGEpKSl9LHpuPUxuLEJuPUUsSW49cWUuZjt6bih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PUluLHNoYW06IUJufSx7ZGVmaW5lUHJvcGVydHk6SW59KTt2YXIgQ249US5PYmplY3QsTm49ci5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQ24uZGVmaW5lUHJvcGVydHkodCxlLG4pfTtDbi5kZWZpbmVQcm9wZXJ0eS5zaGFtJiYoTm4uc2hhbT0hMCk7dmFyIFJuPW4oci5leHBvcnRzKSxqbj13LERuPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PT1qbih0KX0sUG49TWF0aC5jZWlsLFVuPU1hdGguZmxvb3IsRm49TWF0aC50cnVuY3x8ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuKGU+MD9VbjpQbikoZSl9LE1uPWZ1bmN0aW9uKHQpe3ZhciBlPSt0O3JldHVybiBlIT1lfHwwPT09ZT8wOkZuKGUpfSxabj1NbixKbj1NYXRoLm1pbixIbj1mdW5jdGlvbih0KXt2YXIgZT1abih0KTtyZXR1cm4gZT4wP0puKGUsOTAwNzE5OTI1NDc0MDk5MSk6MH0sV249ZnVuY3Rpb24odCl7cmV0dXJuIEhuKHQubGVuZ3RoKX0sS249VHlwZUVycm9yLEduPWZ1bmN0aW9uKHQpe2lmKHQ+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBLbigiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHR9LFZuPUUsWW49cWUsWG49UCxxbj1mdW5jdGlvbih0LGUsbil7Vm4/WW4uZih0LGUsWG4oMCxuKSk6dFtlXT1ufSwkbj17fTskbltmZSgidG9TdHJpbmdUYWciKV09InoiO3ZhciBRbj0iW29iamVjdCB6XSI9PT1TdHJpbmcoJG4pLHRyPVFuLGVyPUEsbnI9dyxycj1mZSgidG9TdHJpbmdUYWciKSxpcj1PYmplY3Qsb3I9IkFyZ3VtZW50cyI9PT1ucihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLGFyPXRyP25yOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319KGU9aXIodCkscnIpKT9uOm9yP25yKGUpOiJPYmplY3QiPT09KHI9bnIoZSkpJiZlcihlLmNhbGxlZSk/IkFyZ3VtZW50cyI6cn0sc3I9QSxjcj1IdCxscj1tKEZ1bmN0aW9uLnRvU3RyaW5nKTtzcihjci5pbnNwZWN0U291cmNlKXx8KGNyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGxyKHQpfSk7dmFyIHVyPWNyLmluc3BlY3RTb3VyY2UsaHI9bSxmcj1hLGRyPUEsX3I9YXIscHI9dXIsZ3I9ZnVuY3Rpb24oKXt9LG1yPWl0KCJSZWZsZWN0IiwiY29uc3RydWN0IikseXI9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sdnI9aHIoeXIuZXhlYyksYnI9IXlyLnRlc3QoZ3IpLHdyPWZ1bmN0aW9uKHQpe2lmKCFkcih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIG1yKGdyLFtdLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sa3I9ZnVuY3Rpb24odCl7aWYoIWRyKHQpKXJldHVybiExO3N3aXRjaChfcih0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gYnJ8fCEhdnIoeXIscHIodCkpfWNhdGNoKGUpe3JldHVybiEwfX07a3Iuc2hhbT0hMDt2YXIgU3I9IW1yfHxmcigoZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gd3Iod3IuY2FsbCl8fCF3cihPYmplY3QpfHwhd3IoKGZ1bmN0aW9uKCl7dD0hMH0pKXx8dH0pKT9rcjp3cixPcj1Ebix4cj1TcixBcj0kLFRyPWZlKCJzcGVjaWVzIiksRXI9QXJyYXksTHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIE9yKHQpJiYoZT10LmNvbnN0cnVjdG9yLCh4cihlKSYmKGU9PT1Fcnx8T3IoZS5wcm90b3R5cGUpKXx8QXIoZSkmJm51bGw9PT0oZT1lW1RyXSkpJiYoZT12b2lkIDApKSx2b2lkIDA9PT1lP0VyOmV9LHpyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhMcih0KSkoMD09PWU/MDplKX0sQnI9YSxJcj1fdCxDcj1mZSgic3BlY2llcyIpLE5yPWZ1bmN0aW9uKHQpe3JldHVybiBJcj49NTF8fCFCcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbQ3JdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PWVbdF0oQm9vbGVhbikuZm9vfSkpfSxScj1Mbixqcj1hLERyPURuLFByPSQsVXI9WXQsRnI9V24sTXI9R24sWnI9cW4sSnI9enIsSHI9TnIsV3I9X3QsS3I9ZmUoImlzQ29uY2F0U3ByZWFkYWJsZSIpLEdyPVdyPj01MXx8IWpyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0tyXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxWcj1mdW5jdGlvbih0KXtpZighUHIodCkpcmV0dXJuITE7dmFyIGU9dFtLcl07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOkRyKHQpfTtScih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6IUdyfHwhSHIoImNvbmNhdCIpfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYT1Vcih0aGlzKSxzPUpyKGEsMCksYz0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKFZyKG89LTE9PT1lP2E6YXJndW1lbnRzW2VdKSlmb3IoaT1GcihvKSxNcihjK2kpLG49MDtuPGk7bisrLGMrKyluIGluIG8mJlpyKHMsYyxvW25dKTtlbHNlIE1yKGMrMSksWnIocyxjKyssbyk7cmV0dXJuIHMubGVuZ3RoPWMsc319KTt2YXIgWXI9YXIsWHI9U3RyaW5nLHFyPWZ1bmN0aW9uKHQpe2lmKCJTeW1ib2wiPT09WXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gWHIodCl9LCRyPXt9LFFyPU1uLHRpPU1hdGgubWF4LGVpPU1hdGgubWluLG5pPVgscmk9ZnVuY3Rpb24odCxlKXt2YXIgbj1Rcih0KTtyZXR1cm4gbjwwP3RpKG4rZSwwKTplaShuLGUpfSxpaT1XbixvaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3ZhciBpPW5pKGUpLG89aWkoaSk7aWYoMD09PW8pcmV0dXJuIXQmJi0xO3ZhciBhLHM9cmkocixvKTtpZih0JiZuIT1uKXtmb3IoO28+czspaWYoKGE9aVtzKytdKSE9YSlyZXR1cm4hMH1lbHNlIGZvcig7bz5zO3MrKylpZigodHx8cyBpbiBpKSYmaVtzXT09PW4pcmV0dXJuIHR8fHN8fDA7cmV0dXJuIXQmJi0xfX0sYWk9e2luY2x1ZGVzOm9pKCEwKSxpbmRleE9mOm9pKCExKX0sc2k9e30sY2k9JHQsbGk9WCx1aT1haS5pbmRleE9mLGhpPXNpLGZpPW0oW10ucHVzaCksZGk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWxpKHQpLGk9MCxvPVtdO2ZvcihuIGluIHIpIWNpKGhpLG4pJiZjaShyLG4pJiZmaShvLG4pO2Zvcig7ZS5sZW5ndGg+aTspY2kocixuPWVbaSsrXSkmJih+dWkobyxuKXx8ZmkobyxuKSk7cmV0dXJuIG99LF9pPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0scGk9ZGksZ2k9X2ksbWk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBwaSh0LGdpKX0seWk9RSx2aT0kZSxiaT1xZSx3aT1ubixraT1YLFNpPW1pOyRyLmY9eWkmJiF2aT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe3dpKHQpO2Zvcih2YXIgbixyPWtpKGUpLGk9U2koZSksbz1pLmxlbmd0aCxhPTA7bz5hOyliaS5mKHQsbj1pW2ErK10scltuXSk7cmV0dXJuIHR9O3ZhciBPaSx4aT1pdCgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKSxBaT1yZSxUaT1LdCgia2V5cyIpLEVpPWZ1bmN0aW9uKHQpe3JldHVybiBUaVt0XXx8KFRpW3RdPUFpKHQpKX0sTGk9bm4semk9JHIsQmk9X2ksSWk9c2ksQ2k9eGksTmk9QWUsUmk9InByb3RvdHlwZSIsamk9InNjcmlwdCIsRGk9RWkoIklFX1BST1RPIiksUGk9ZnVuY3Rpb24oKXt9LFVpPWZ1bmN0aW9uKHQpe3JldHVybiI8IitqaSsiPiIrdCsiPC8iK2ppKyI+In0sRmk9ZnVuY3Rpb24odCl7dC53cml0ZShVaSgiIikpLHQuY2xvc2UoKTt2YXIgZT10LnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIHQ9bnVsbCxlfSxNaT1mdW5jdGlvbigpe3RyeXtPaT1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChpKXt9dmFyIHQsZSxuO01pPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZPaT9GaShPaSk6KGU9TmkoImlmcmFtZSIpLG49ImphdmEiK2ppKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLENpLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZyhuKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKFVpKCJkb2N1bWVudC5GPU9iamVjdCIpKSx0LmNsb3NlKCksdC5GKTpGaShPaSk7Zm9yKHZhciByPUJpLmxlbmd0aDtyLS07KWRlbGV0ZSBNaVtSaV1bQmlbcl1dO3JldHVybiBNaSgpfTtJaVtEaV09ITA7dmFyIFppPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhQaVtSaV09TGkodCksbj1uZXcgUGksUGlbUmldPW51bGwsbltEaV09dCk6bj1NaSgpLHZvaWQgMD09PWU/bjp6aS5mKG4sZSl9LEppPXt9LEhpPWRpLFdpPV9pLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7SmkuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIEhpKHQsV2kpfTt2YXIgS2k9e30sR2k9bShbXS5zbGljZSksVmk9dyxZaT1YLFhpPUppLmYscWk9R2ksJGk9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtLaS5mPWZ1bmN0aW9uKHQpe3JldHVybiAkaSYmIldpbmRvdyI9PT1WaSh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIFhpKHQpfWNhdGNoKGUpe3JldHVybiBxaSgkaSl9fSh0KTpYaShZaSh0KSl9O3ZhciBRaT17fTtRaS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRvPW1uLGVvPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByJiZyLmVudW1lcmFibGU/dFtlXT1uOnRvKHQsZSxuKSx0fSxubz1xZSxybz17fSxpbz1mZTtyby5mPWlvO3ZhciBvbyxhbyxzbyxjbz1RLGxvPSR0LHVvPXJvLGhvPXFlLmYsZm89ZnVuY3Rpb24odCl7dmFyIGU9Y28uU3ltYm9sfHwoY28uU3ltYm9sPXt9KTtsbyhlLHQpfHxobyhlLHQse3ZhbHVlOnVvLmYodCl9KX0sX289Qixwbz1pdCxnbz1mZSxtbz1lbyx5bz1mdW5jdGlvbigpe3ZhciB0PXBvKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLG49ZSYmZS52YWx1ZU9mLHI9Z28oInRvUHJpbWl0aXZlIik7ZSYmIWVbcl0mJm1vKGUsciwoZnVuY3Rpb24odCl7cmV0dXJuIF9vKG4sdGhpcyl9KSx7YXJpdHk6MX0pfSx2bz1hcixibz1Rbj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrdm8odGhpcykrIl0ifSx3bz1Rbixrbz1xZS5mLFNvPW1uLE9vPSR0LHhvPWJvLEFvPWZlKCJ0b1N0cmluZ1RhZyIpLFRvPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4/dDp0JiZ0LnByb3RvdHlwZTtpJiYoT28oaSxBbyl8fGtvKGksQW8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSksciYmIXdvJiZTbyhpLCJ0b1N0cmluZyIseG8pKX0sRW89QSxMbz1vLldlYWtNYXAsem89RW8oTG8pJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKExvKSksQm89byxJbz0kLENvPW1uLE5vPSR0LFJvPUh0LGpvPUVpLERvPXNpLFBvPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsVW89Qm8uVHlwZUVycm9yLEZvPUJvLldlYWtNYXA7aWYoem98fFJvLnN0YXRlKXt2YXIgTW89Um8uc3RhdGV8fChSby5zdGF0ZT1uZXcgRm8pO01vLmdldD1Nby5nZXQsTW8uaGFzPU1vLmhhcyxNby5zZXQ9TW8uc2V0LG9vPWZ1bmN0aW9uKHQsZSl7aWYoTW8uaGFzKHQpKXRocm93IG5ldyBVbyhQbyk7cmV0dXJuIGUuZmFjYWRlPXQsTW8uc2V0KHQsZSksZX0sYW89ZnVuY3Rpb24odCl7cmV0dXJuIE1vLmdldCh0KXx8e319LHNvPWZ1bmN0aW9uKHQpe3JldHVybiBNby5oYXModCl9fWVsc2V7dmFyIFpvPWpvKCJzdGF0ZSIpO0RvW1pvXT0hMCxvbz1mdW5jdGlvbih0LGUpe2lmKE5vKHQsWm8pKXRocm93IG5ldyBVbyhQbyk7cmV0dXJuIGUuZmFjYWRlPXQsQ28odCxabyxlKSxlfSxhbz1mdW5jdGlvbih0KXtyZXR1cm4gTm8odCxabyk/dFtab106e319LHNvPWZ1bmN0aW9uKHQpe3JldHVybiBObyh0LFpvKX19dmFyIEpvPXtzZXQ6b28sZ2V0OmFvLGhhczpzbyxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBzbyh0KT9hbyh0KTpvbyh0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighSW8oZSl8fChuPWFvKGUpKS50eXBlIT09dCl0aHJvdyBuZXcgVW8oIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fSxIbz1YZSxXbz1KLEtvPVl0LEdvPVduLFZvPXpyLFlvPW0oW10ucHVzaCksWG89ZnVuY3Rpb24odCl7dmFyIGU9MT09PXQsbj0yPT09dCxyPTM9PT10LGk9ND09PXQsbz02PT09dCxhPTc9PT10LHM9NT09PXR8fG87cmV0dXJuIGZ1bmN0aW9uKGMsbCx1LGgpe2Zvcih2YXIgZixkLF89S28oYykscD1XbyhfKSxnPUdvKHApLG09SG8obCx1KSx5PTAsdj1ofHxWbyxiPWU/dihjLGcpOm58fGE/dihjLDApOnZvaWQgMDtnPnk7eSsrKWlmKChzfHx5IGluIHApJiYoZD1tKGY9cFt5XSx5LF8pLHQpKWlmKGUpYlt5XT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZjtjYXNlIDY6cmV0dXJuIHk7Y2FzZSAyOllvKGIsZil9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpZbyhiLGYpfXJldHVybiBvPy0xOnJ8fGk/aTpifX0scW89e2ZvckVhY2g6WG8oMCksbWFwOlhvKDEpLGZpbHRlcjpYbygyKSxzb21lOlhvKDMpLGV2ZXJ5OlhvKDQpLGZpbmQ6WG8oNSksZmluZEluZGV4OlhvKDYpLGZpbHRlclJlamVjdDpYbyg3KX0sJG89TG4sUW89byx0YT1CLGVhPW0sbmE9RSxyYT15dCxpYT1hLG9hPSR0LGFhPW90LHNhPW5uLGNhPVgsbGE9a2UsdWE9cXIsaGE9UCxmYT1aaSxkYT1taSxfYT1KaSxwYT1LaSxnYT1RaSxtYT1ULHlhPXFlLHZhPSRyLGJhPUksd2E9ZW8sa2E9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuby5mKHQsZSxuKX0sU2E9S3QsT2E9c2kseGE9cmUsQWE9ZmUsVGE9cm8sRWE9Zm8sTGE9eW8semE9VG8sQmE9Sm8sSWE9cW8uZm9yRWFjaCxDYT1FaSgiaGlkZGVuIiksTmE9IlN5bWJvbCIsUmE9InByb3RvdHlwZSIsamE9QmEuc2V0LERhPUJhLmdldHRlckZvcihOYSksUGE9T2JqZWN0W1JhXSxVYT1Rby5TeW1ib2wsRmE9VWEmJlVhW1JhXSxNYT1Rby5SYW5nZUVycm9yLFphPVFvLlR5cGVFcnJvcixKYT1Rby5RT2JqZWN0LEhhPW1hLmYsV2E9eWEuZixLYT1wYS5mLEdhPWJhLmYsVmE9ZWEoW10ucHVzaCksWWE9U2EoInN5bWJvbHMiKSxYYT1TYSgib3Atc3ltYm9scyIpLHFhPVNhKCJ3a3MiKSwkYT0hSmF8fCFKYVtSYV18fCFKYVtSYV0uZmluZENoaWxkLFFhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1IYShQYSxlKTtyJiZkZWxldGUgUGFbZV0sV2EodCxlLG4pLHImJnQhPT1QYSYmV2EoUGEsZSxyKX0sdHM9bmEmJmlhKChmdW5jdGlvbigpe3JldHVybiA3IT09ZmEoV2Eoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gV2EodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP1FhOldhLGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49WWFbdF09ZmEoRmEpO3JldHVybiBqYShuLHt0eXBlOk5hLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxuYXx8KG4uZGVzY3JpcHRpb249ZSksbn0sbnM9ZnVuY3Rpb24odCxlLG4pe3Q9PT1QYSYmbnMoWGEsZSxuKSxzYSh0KTt2YXIgcj1sYShlKTtyZXR1cm4gc2Eobiksb2EoWWEscik/KG4uZW51bWVyYWJsZT8ob2EodCxDYSkmJnRbQ2FdW3JdJiYodFtDYV1bcl09ITEpLG49ZmEobix7ZW51bWVyYWJsZTpoYSgwLCExKX0pKToob2EodCxDYSl8fFdhKHQsQ2EsaGEoMSxmYShudWxsKSkpLHRbQ2FdW3JdPSEwKSx0cyh0LHIsbikpOldhKHQscixuKX0scnM9ZnVuY3Rpb24odCxlKXtzYSh0KTt2YXIgbj1jYShlKSxyPWRhKG4pLmNvbmNhdChzcyhuKSk7cmV0dXJuIElhKHIsKGZ1bmN0aW9uKGUpe25hJiYhdGEoaXMsbixlKXx8bnModCxlLG5bZV0pfSkpLHR9LGlzPWZ1bmN0aW9uKHQpe3ZhciBlPWxhKHQpLG49dGEoR2EsdGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1QYSYmb2EoWWEsZSkmJiFvYShYYSxlKSkmJighKG58fCFvYSh0aGlzLGUpfHwhb2EoWWEsZSl8fG9hKHRoaXMsQ2EpJiZ0aGlzW0NhXVtlXSl8fG4pfSxvcz1mdW5jdGlvbih0LGUpe3ZhciBuPWNhKHQpLHI9bGEoZSk7aWYobiE9PVBhfHwhb2EoWWEscil8fG9hKFhhLHIpKXt2YXIgaT1IYShuLHIpO3JldHVybiFpfHwhb2EoWWEscil8fG9hKG4sQ2EpJiZuW0NhXVtyXXx8KGkuZW51bWVyYWJsZT0hMCksaX19LGFzPWZ1bmN0aW9uKHQpe3ZhciBlPUthKGNhKHQpKSxuPVtdO3JldHVybiBJYShlLChmdW5jdGlvbih0KXtvYShZYSx0KXx8b2EoT2EsdCl8fFZhKG4sdCl9KSksbn0sc3M9ZnVuY3Rpb24odCl7dmFyIGU9dD09PVBhLG49S2EoZT9YYTpjYSh0KSkscj1bXTtyZXR1cm4gSWEobiwoZnVuY3Rpb24odCl7IW9hKFlhLHQpfHxlJiYhb2EoUGEsdCl8fFZhKHIsWWFbdF0pfSkpLHJ9O3JhfHwoVWE9ZnVuY3Rpb24oKXtpZihhYShGYSx0aGlzKSl0aHJvdyBuZXcgWmEoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT91YShhcmd1bWVudHNbMF0pOnZvaWQgMCxlPXhhKHQpLG49ZnVuY3Rpb24odCl7dmFyIHI9dm9pZCAwPT09dGhpcz9Rbzp0aGlzO3I9PT1QYSYmdGEobixYYSx0KSxvYShyLENhKSYmb2EocltDYV0sZSkmJihyW0NhXVtlXT0hMSk7dmFyIGk9aGEoMSx0KTt0cnl7dHMocixlLGkpfWNhdGNoKG8pe2lmKCEobyBpbnN0YW5jZW9mIE1hKSl0aHJvdyBvO1FhKHIsZSxpKX19O3JldHVybiBuYSYmJGEmJnRzKFBhLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLGVzKGUsdCl9LHdhKEZhPVVhW1JhXSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBEYSh0aGlzKS50YWd9KSksd2EoVWEsIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4gZXMoeGEodCksdCl9KSksYmEuZj1pcyx5YS5mPW5zLHZhLmY9cnMsbWEuZj1vcyxfYS5mPXBhLmY9YXMsZ2EuZj1zcyxUYS5mPWZ1bmN0aW9uKHQpe3JldHVybiBlcyhBYSh0KSx0KX0sbmEmJmthKEZhLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRGEodGhpcykuZGVzY3JpcHRpb259fSkpLCRvKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IXJhLHNoYW06IXJhfSx7U3ltYm9sOlVhfSksSWEoZGEocWEpLChmdW5jdGlvbih0KXtFYSh0KX0pKSwkbyh7dGFyZ2V0Ok5hLHN0YXQ6ITAsZm9yY2VkOiFyYX0se3VzZVNldHRlcjpmdW5jdGlvbigpeyRhPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXskYT0hMX19KSwkbyh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFyYSxzaGFtOiFuYX0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2ZhKHQpOnJzKGZhKHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpucyxkZWZpbmVQcm9wZXJ0aWVzOnJzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvc30pLCRvKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXJhfSx7Z2V0T3duUHJvcGVydHlOYW1lczphc30pLExhKCksemEoVWEsTmEpLE9hW0NhXT0hMDt2YXIgY3M9eXQmJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yLGxzPUxuLHVzPWl0LGhzPSR0LGZzPXFyLGRzPUt0LF9zPWNzLHBzPWRzKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksZ3M9ZHMoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtscyh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFfc30se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1mcyh0KTtpZihocyhwcyxlKSlyZXR1cm4gcHNbZV07dmFyIG49dXMoIlN5bWJvbCIpKGUpO3JldHVybiBwc1tlXT1uLGdzW25dPWUsbn19KTt2YXIgbXM9TG4seXM9JHQsdnM9T3QsYnM9QXQsd3M9Y3Msa3M9S3QoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTttcyh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiF3c30se2tleUZvcjpmdW5jdGlvbih0KXtpZighdnModCkpdGhyb3cgbmV3IFR5cGVFcnJvcihicyh0KSsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKHlzKGtzLHQpKXJldHVybiBrc1t0XX19KTt2YXIgU3M9RG4sT3M9QSx4cz13LEFzPXFyLFRzPW0oW10ucHVzaCksRXM9TG4sTHM9aXQsenM9ZixCcz1CLElzPW0sQ3M9YSxOcz1BLFJzPU90LGpzPUdpLERzPWZ1bmN0aW9uKHQpe2lmKE9zKHQpKXJldHVybiB0O2lmKFNzKHQpKXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bXSxyPTA7cjxlO3IrKyl7dmFyIGk9dFtyXTsic3RyaW5nIj09dHlwZW9mIGk/VHMobixpKToibnVtYmVyIiE9dHlwZW9mIGkmJiJOdW1iZXIiIT09eHMoaSkmJiJTdHJpbmciIT09eHMoaSl8fFRzKG4sQXMoaSkpfXZhciBvPW4ubGVuZ3RoLGE9ITA7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoYSlyZXR1cm4gYT0hMSxlO2lmKFNzKHRoaXMpKXJldHVybiBlO2Zvcih2YXIgcj0wO3I8bztyKyspaWYobltyXT09PXQpcmV0dXJuIGV9fX0sUHM9eXQsVXM9U3RyaW5nLEZzPUxzKCJKU09OIiwic3RyaW5naWZ5IiksTXM9SXMoLy4vLmV4ZWMpLFpzPUlzKCIiLmNoYXJBdCksSnM9SXMoIiIuY2hhckNvZGVBdCksSHM9SXMoIiIucmVwbGFjZSksV3M9SXMoMS4udG9TdHJpbmcpLEtzPS9bXHVEODAwLVx1REZGRl0vZyxHcz0vXltcdUQ4MDAtXHVEQkZGXSQvLFZzPS9eW1x1REMwMC1cdURGRkZdJC8sWXM9IVBzfHxDcygoZnVuY3Rpb24oKXt2YXIgdD1McygiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PUZzKFt0XSl8fCJ7fSIhPT1Gcyh7YTp0fSl8fCJ7fSIhPT1GcyhPYmplY3QodCkpfSkpLFhzPUNzKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PUZzKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1GcygiXHVkZWFkIil9KSkscXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1qcyhhcmd1bWVudHMpLHI9RHMoZSk7aWYoTnMocil8fHZvaWQgMCE9PXQmJiFScyh0KSlyZXR1cm4gblsxXT1mdW5jdGlvbih0LGUpe2lmKE5zKHIpJiYoZT1CcyhyLHRoaXMsVXModCksZSkpLCFScyhlKSlyZXR1cm4gZX0senMoRnMsbnVsbCxuKX0sJHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVpzKG4sZS0xKSxpPVpzKG4sZSsxKTtyZXR1cm4gTXMoR3MsdCkmJiFNcyhWcyxpKXx8TXMoVnMsdCkmJiFNcyhHcyxyKT8iXFx1IitXcyhKcyh0LDApLDE2KTp0fTtGcyYmRXMoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpZc3x8WHN9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWpzKGFyZ3VtZW50cyksaT16cyhZcz9xczpGcyxudWxsLHIpO3JldHVybiBYcyYmInN0cmluZyI9PXR5cGVvZiBpP0hzKGksS3MsJHMpOml9fSk7dmFyIFFzPVFpLHRjPVl0O0xuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXl0fHxhKChmdW5jdGlvbigpe1FzLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7dmFyIGU9UXMuZjtyZXR1cm4gZT9lKHRjKHQpKTpbXX19KSxmbygiYXN5bmNJdGVyYXRvciIpLGZvKCJoYXNJbnN0YW5jZSIpLGZvKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxmbygiaXRlcmF0b3IiKSxmbygibWF0Y2giKSxmbygibWF0Y2hBbGwiKSxmbygicmVwbGFjZSIpLGZvKCJzZWFyY2giKSxmbygic3BlY2llcyIpLGZvKCJzcGxpdCIpO3ZhciBlYz15bztmbygidG9QcmltaXRpdmUiKSxlYygpO3ZhciBuYz1pdCxyYz1UbztmbygidG9TdHJpbmdUYWciKSxyYyhuYygiU3ltYm9sIiksIlN5bWJvbCIpLGZvKCJ1bnNjb3BhYmxlcyIpLFRvKG8uSlNPTiwiSlNPTiIsITApO3ZhciBpYyxvYyxhYyxzYz1RLlN5bWJvbCxjYz17fSxsYz1FLHVjPSR0LGhjPUZ1bmN0aW9uLnByb3RvdHlwZSxmYz1sYyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixkYz11YyhoYywibmFtZSIpLF9jPXtFWElTVFM6ZGMsUFJPUEVSOmRjJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpkYyYmKCFsY3x8bGMmJmZjKGhjLCJuYW1lIikuY29uZmlndXJhYmxlKX0scGM9IWEoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSksZ2M9JHQsbWM9QSx5Yz1ZdCx2Yz1wYyxiYz1FaSgiSUVfUFJPVE8iKSx3Yz1PYmplY3Qsa2M9d2MucHJvdG90eXBlLFNjPXZjP3djLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3ZhciBlPXljKHQpO2lmKGdjKGUsYmMpKXJldHVybiBlW2JjXTt2YXIgbj1lLmNvbnN0cnVjdG9yO3JldHVybiBtYyhuKSYmZSBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIHdjP2tjOm51bGx9LE9jPWEseGM9QSxBYz0kLFRjPVppLEVjPVNjLExjPWVvLHpjPWZlKCJpdGVyYXRvciIpLEJjPSExO1tdLmtleXMmJigibmV4dCJpbihhYz1bXS5rZXlzKCkpPyhvYz1FYyhFYyhhYykpKSE9PU9iamVjdC5wcm90b3R5cGUmJihpYz1vYyk6QmM9ITApO3ZhciBJYz0hQWMoaWMpfHxPYygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gaWNbemNdLmNhbGwodCkhPT10fSkpO3hjKChpYz1JYz97fTpUYyhpYykpW3pjXSl8fExjKGljLHpjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBDYz17SXRlcmF0b3JQcm90b3R5cGU6aWMsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpCY30sTmM9Q2MuSXRlcmF0b3JQcm90b3R5cGUsUmM9WmksamM9UCxEYz1UbyxQYz1jYyxVYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxGYz1MbixNYz1CLFpjPV9jLEpjPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPVJjKE5jLHtuZXh0OmpjKCshcixuKX0pLERjKHQsaSwhMSwhMCksUGNbaV09VWMsdH0sSGM9U2MsV2M9VG8sS2M9ZW8sR2M9Y2MsVmM9Q2MsWWM9WmMuUFJPUEVSLFhjPVZjLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscWM9ZmUoIml0ZXJhdG9yIiksJGM9ImtleXMiLFFjPSJ2YWx1ZXMiLHRsPSJlbnRyaWVzIixlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxubD1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtKYyhuLGUscik7dmFyIHMsYyxsLHU9ZnVuY3Rpb24odCl7aWYodD09PWkmJnApcmV0dXJuIHA7aWYoIVhjJiZ0JiZ0IGluIGQpcmV0dXJuIGRbdF07c3dpdGNoKHQpe2Nhc2UgJGM6Y2FzZSBRYzpjYXNlIHRsOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxoPWUrIiBJdGVyYXRvciIsZj0hMSxkPXQucHJvdG90eXBlLF89ZFtxY118fGRbIkBAaXRlcmF0b3IiXXx8aSYmZFtpXSxwPSFYYyYmX3x8dShpKSxnPSJBcnJheSI9PT1lJiZkLmVudHJpZXN8fF87aWYoZyYmKHM9SGMoZy5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmcy5uZXh0JiYoV2MocyxoLCEwLCEwKSxHY1toXT1lbCksWWMmJmk9PT1RYyYmXyYmXy5uYW1lIT09UWMmJihmPSEwLHA9ZnVuY3Rpb24oKXtyZXR1cm4gTWMoXyx0aGlzKX0pLGkpaWYoYz17dmFsdWVzOnUoUWMpLGtleXM6bz9wOnUoJGMpLGVudHJpZXM6dSh0bCl9LGEpZm9yKGwgaW4gYykoWGN8fGZ8fCEobCBpbiBkKSkmJktjKGQsbCxjW2xdKTtlbHNlIEZjKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6WGN8fGZ9LGMpO3JldHVybiBhJiZkW3FjXSE9PXAmJktjKGQscWMscCx7bmFtZTppfSksR2NbZV09cCxjfSxybD1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19LGlsPVgsb2w9Y2MsYWw9Sm87cWUuZjt2YXIgc2w9bmwsY2w9cmwsbGw9IkFycmF5IEl0ZXJhdG9yIix1bD1hbC5zZXQsaGw9YWwuZ2V0dGVyRm9yKGxsKTtzbChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3VsKHRoaXMse3R5cGU6bGwsdGFyZ2V0OmlsKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1obCh0aGlzKSxlPXQudGFyZ2V0LG49dC5pbmRleCsrO2lmKCFlfHxuPj1lLmxlbmd0aClyZXR1cm4gdC50YXJnZXQ9bnVsbCxjbCh2b2lkIDAsITApO3N3aXRjaCh0LmtpbmQpe2Nhc2Uia2V5cyI6cmV0dXJuIGNsKG4sITEpO2Nhc2UidmFsdWVzIjpyZXR1cm4gY2woZVtuXSwhMSl9cmV0dXJuIGNsKFtuLGVbbl1dLCExKX0pLCJ2YWx1ZXMiKSxvbC5Bcmd1bWVudHM9b2wuQXJyYXk7dmFyIGZsPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxkbD1vLF9sPVRvLHBsPWNjO2Zvcih2YXIgZ2wgaW4gZmwpX2woZGxbZ2xdLGdsKSxwbFtnbF09cGwuQXJyYXk7dmFyIG1sPXNjLHlsPWZlLHZsPXFlLmYsYmw9eWwoIm1ldGFkYXRhIiksd2w9RnVuY3Rpb24ucHJvdG90eXBlO3ZvaWQgMD09PXdsW2JsXSYmdmwod2wsYmwse3ZhbHVlOm51bGx9KSxmbygiYXN5bmNEaXNwb3NlIiksZm8oImRpc3Bvc2UiKSxmbygibWV0YWRhdGEiKTt2YXIga2w9bWwsU2w9bSxPbD1pdCgiU3ltYm9sIikseGw9T2wua2V5Rm9yLEFsPVNsKE9sLnByb3RvdHlwZS52YWx1ZU9mKSxUbD1PbC5pc1JlZ2lzdGVyZWRTeW1ib2x8fGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdm9pZCAwIT09eGwoQWwodCkpfWNhdGNoKGUpe3JldHVybiExfX07TG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwfSx7aXNSZWdpc3RlcmVkU3ltYm9sOlRsfSk7Zm9yKHZhciBFbD1LdCxMbD1pdCx6bD1tLEJsPU90LElsPWZlLENsPUxsKCJTeW1ib2wiKSxObD1DbC5pc1dlbGxLbm93blN5bWJvbCxSbD1MbCgiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIpLGpsPXpsKENsLnByb3RvdHlwZS52YWx1ZU9mKSxEbD1FbCgid2tzIiksUGw9MCxVbD1SbChDbCksRmw9VWwubGVuZ3RoO1BsPEZsO1BsKyspdHJ5e3ZhciBNbD1VbFtQbF07QmwoQ2xbTWxdKSYmSWwoTWwpfWNhdGNoKGVnKXt9dmFyIFpsPWZ1bmN0aW9uKHQpe2lmKE5sJiZObCh0KSlyZXR1cm4hMDt0cnl7Zm9yKHZhciBlPWpsKHQpLG49MCxyPVJsKERsKSxpPXIubGVuZ3RoO248aTtuKyspaWYoRGxbcltuXV09PWUpcmV0dXJuITB9Y2F0Y2goZWcpe31yZXR1cm4hMX07TG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLGZvcmNlZDohMH0se2lzV2VsbEtub3duU3ltYm9sOlpsfSksZm8oImN1c3RvbU1hdGNoZXIiKSxmbygib2JzZXJ2YWJsZSIpLExuKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxuYW1lOiJpc1JlZ2lzdGVyZWRTeW1ib2wifSx7aXNSZWdpc3RlcmVkOlRsfSksTG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzV2VsbEtub3duU3ltYm9sIixmb3JjZWQ6ITB9LHtpc1dlbGxLbm93bjpabH0pLGZvKCJtYXRjaGVyIiksZm8oIm1ldGFkYXRhS2V5IiksZm8oInBhdHRlcm5NYXRjaCIpLGZvKCJyZXBsYWNlQWxsIik7dmFyIEpsPW4oa2wpLEhsPW0sV2w9TW4sS2w9cXIsR2w9RyxWbD1IbCgiIi5jaGFyQXQpLFlsPUhsKCIiLmNoYXJDb2RlQXQpLFhsPUhsKCIiLnNsaWNlKSxxbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcixpLG89S2woR2woZSkpLGE9V2wobikscz1vLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj1zP3Q/IiI6dm9pZCAwOihyPVlsKG8sYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT1zfHwoaT1ZbChvLGErMSkpPDU2MzIwfHxpPjU3MzQzP3Q/VmwobyxhKTpyOnQ/WGwobyxhLGErMik6aS01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sJGw9e2NvZGVBdDpxbCghMSksY2hhckF0OnFsKCEwKX0uY2hhckF0LFFsPXFyLHR1PUpvLGV1PW5sLG51PXJsLHJ1PSJTdHJpbmcgSXRlcmF0b3IiLGl1PXR1LnNldCxvdT10dS5nZXR0ZXJGb3IocnUpO2V1KFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7aXUodGhpcyx7dHlwZTpydSxzdHJpbmc6UWwodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1vdSh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/bnUodm9pZCAwLCEwKToodD0kbChuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLG51KHQsITEpKX0pKTt2YXIgYXU9bihyby5mKCJpdGVyYXRvciIpKTtmdW5jdGlvbiBzdSh0KXtyZXR1cm4oc3U9ImZ1bmN0aW9uIj09dHlwZW9mIEpsJiYic3ltYm9sIj09dHlwZW9mIGF1P2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBKbCYmdC5jb25zdHJ1Y3Rvcj09PUpsJiZ0IT09SmwucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIGN1PW4ocm8uZigidG9QcmltaXRpdmUiKSk7ZnVuY3Rpb24gbHUodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9c3UodCl8fCF0KXJldHVybiB0O3ZhciBuPXRbY3VdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXN1KHIpKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXN1KGUpP2U6ZSsiIn1mdW5jdGlvbiB1dSh0LGUsbil7cmV0dXJuKGU9bHUoZSkpaW4gdD9Sbih0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1jbGFzcyBodXtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfcG9zaXRpb24iLDApLHV1KHRoaXMsIl9kYXRhdmlldyIsdm9pZCAwKSx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofWdldCBidWZmZXIoKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfXNldCBwb3NpdGlvbih0KXt0aGlzLl9wb3NpdGlvbj10fWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1iYWNrKHQpe3RoaXMucG9zaXRpb24tPXR9Z2V0VWludDgodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQ4KHQpfWdldEludDgodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldEludDgodCl9Z2V0SW50MTYodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldEludDE2KHQpfWdldFVpbnQxNih0KXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0VWludDE2KHQpfWdldFVpbnQzMih0KXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0VWludDMyKHQpfWdldEludDMyKHQpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQzMih0KX1za2lwKHQpe2NvbnN0IGU9TWF0aC5mbG9vcih0LzQpLG49dCU0O2ZvcihsZXQgcj0wO3I8ZTtyKyspaHUucmVhZEJ5dGUodGhpcyw0KTtuPjAmJmh1LnJlYWRCeXRlKHRoaXMsbil9c3RhdGljIHJlYWRCeXRlKHQsZSxuKXtsZXQgcjtzd2l0Y2goZSl7Y2FzZSAxOnI9bj90LmdldEludDgodC5wb3NpdGlvbik6dC5nZXRVaW50OCh0LnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP3QuZ2V0SW50MTYodC5wb3NpdGlvbik6dC5nZXRVaW50MTYodC5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj10LmdldFVpbnQ4KHQucG9zaXRpb24pPDwxNixyfD10LmdldFVpbnQ4KHQucG9zaXRpb24rMSk8PDgscnw9dC5nZXRVaW50OCh0LnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/dC5nZXRJbnQzMih0LnBvc2l0aW9uKTp0LmdldFVpbnQzMih0LnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPXQuZ2V0VWludDMyKHQucG9zaXRpb24pPDwzMixyfD10LmdldFVpbnQzMih0LnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gdC5wb3NpdGlvbis9ZSxyfXJlYWRVaW50OCgpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDEpfXJlYWRVaW50MTYoKXtyZXR1cm4gaHUucmVhZEJ5dGUodGhpcywyKX1yZWFkVWludDI0KCl7cmV0dXJuIGh1LnJlYWRCeXRlKHRoaXMsMyl9cmVhZFVpbnQzMigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDQpfXJlYWRVaW50NjQoKXtyZXR1cm4gaHUucmVhZEJ5dGUodGhpcyw4KX1yZWFkSW50OCgpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDEsITApfXJlYWRJbnQxNigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDIsITApfXJlYWRJbnQzMigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDQsITApfXdyaXRlVWludDMyKHQpe3JldHVybiBuZXcgVWludDhBcnJheShbdD4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdF0pfX12YXIgZnU9KHQ9Pih0W3QuaW50ZXJuYWw9MF09ImludGVybmFsIix0W3QuZXh0ZXJuYWw9MV09ImV4dGVybmFsIix0W3QuYnlwYXNzPTJdPSJieXBhc3MiLHQpKShmdXx8e30pO2NvbnN0IGR1PW5ldyBVaW50OEFycmF5KFsxMDksMTY3LDUzLDE5MCwxMDMsOTAsNzIsMSwxNzAsODksNjMsMTY0LDE5NCwxOTksMTksODVdKSxfdT1uZXcgVWludDhBcnJheShbMTA5LDE2Nyw1MywxOTAsMTAzLDkwLDcyLDEsMTcwLDg5LDYzLDE2NCwxOTQsMTk5LDE5LDg0XSkscHU9bmV3IFVpbnQ4QXJyYXkoWzMxLDIzOSwzLDUwLDI0MiwxMjAsNzYsODUsMTY5LDQyLDE2MSw5MSw3NSwxODYsMjJdKTtmdW5jdGlvbiBndSh0KXtjb25zdCBlPVtdO2Zvcig7dD49MjU1Oyl0LT0yNTUsZS5wdXNoKDI1NSk7cmV0dXJuIGUucHVzaCh0KSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBtdSh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPTA7Zm9yKDsyNTU9PT10W2VdJiZlPHQuYnl0ZUxlbmd0aDspZSsrLG4rPTI1NTtyZXR1cm4gZTx0LmJ5dGVMZW5ndGgmJihuKz10W2UrK10pLFtuLGVdfWNvbnN0IHl1PW5ldyBVaW50OEFycmF5KFs4MCwxXSk7Y2xhc3MgdnV7c3RhdGljIGdlbmVyYXRlU0VJKHQsZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPW5ldyBVaW50OEFycmF5KFswLDAsMCwxXSksaT1lP3l1Om5ldyBVaW50OEFycmF5KFs2XSksbz1uZXcgVWludDhBcnJheShbNV0pLGE9dnUuX191dWlkfHwobj9kdTpfdSkscz1ndSh0LmJ5dGVMZW5ndGgrYS5ieXRlTGVuZ3RoKSxjPSh0PT57Y29uc3QgZT1bXTtsZXQgbj0wO2Zvcihjb25zdCByIG9mIHQpbj49MiYmcjw9MyYmKGUucHVzaCgzKSxuPTApLDA9PT1yP24rKzpuPTAsZS5wdXNoKHIpO3JldHVybiBuZXcgVWludDhBcnJheShlKX0pKHQpO3JldHVybiBuZXcgVWludDhBcnJheShbLi4uciwuLi5pLC4uLm8sLi4ucywuLi5hLC4uLmMsMTI4XSl9c3RhdGljIGRlY29kZVNFSUJvZHkodCxlKXtjb25zdCBuPSh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dPD0zJiYwPT09dFtuLTFdJiYwPT09dFtuLTJdfHxlLnB1c2godFtuXSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSkodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpO2lmKG4uYnl0ZUxlbmd0aDwyKXJldHVybjtsZXQgcj0wO2NvbnN0IGk9ZT8yOjE7aWYoNSE9PW5baV0mJjEwMCE9PW5baV0pcmV0dXJuO3IrPTEraTtjb25zdFtvLGFdPW11KG4scik7cj1hO2xldCBzPTI7Y29uc3QgYz1yK287bi5ieXRlTGVuZ3RoPj1fdS5ieXRlTGVuZ3RoJiZvPj1fdS5ieXRlTGVuZ3RoJiYobi5zbGljZShyLHIrX3UuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PV91LnRvU3RyaW5nKCl8fG4uc2xpY2UocixyK3B1LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCk9PT1wdS50b1N0cmluZygpKT8ocis9X3UuYnl0ZUxlbmd0aCxzPTEpOm4uYnl0ZUxlbmd0aD49X3UuYnl0ZUxlbmd0aCYmbz49X3UuYnl0ZUxlbmd0aCYmbi5zbGljZShyLHIrZHUuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PWR1LnRvU3RyaW5nKCkmJihyKz1kdS5ieXRlTGVuZ3RoLHM9MCk7cmV0dXJue3R5cGU6cyxwYXlsb2FkOm4uc2xpY2UocixjKX19c3RhdGljIHBhcnNlSW50ZXJuYWxTRUkodCl7Y29uc3QgZT1uZXcgTWFwO2xldCBuPTA7aWYoMD09PXQudHlwZSl7Zm9yKDt0LnBheWxvYWQuYnl0ZUxlbmd0aC1uPj0yOyl7Y29uc3RbcixpXT1tdSh0LnBheWxvYWQsbik7bj1pO2NvbnN0W28sYV09bXUodC5wYXlsb2FkLG4pO2lmKG49YSxlLmdldChyKXx8IShvPD10LnBheWxvYWQuYnl0ZUxlbmd0aC1uKSlicmVhaztlLnNldChyLHQucGF5bG9hZC5zbGljZShuLG4rbykpLG4rPW99cmV0dXJuIGV9fXN0YXRpYyBtYWtlSW50ZXJuYWxTZWkodCl7Y29uc3QgZT1bXTtmb3IoY29uc3RbaSxvXW9mIHQpe2NvbnN0IHQ9Z3UoaSksbj1ndShvLmJ5dGVMZW5ndGgpO2UucHVzaCh0LG4sbyl9Y29uc3Qgbj1lLnJlZHVjZSgoKHQsZSk9PnQrZS5ieXRlTGVuZ3RoKSwwKSxyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBlLnJlZHVjZSgoKHQsZSk9PihyLnNldChlLHQpLHQrZS5ieXRlTGVuZ3RoKSksMCkscn19dXUodnUsIl9fdXVpZCIsdm9pZCAwKTt2YXIgYnUsd3U9JCxrdT13LFN1PWZlKCJtYXRjaCIpLE91PW5uLHh1PUIsQXU9JHQsVHU9b3QsRXU9ZnVuY3Rpb24oKXt2YXIgdD1PdSh0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX0sTHU9UmVnRXhwLnByb3RvdHlwZSx6dT1vLEJ1PVEsSXU9ZnVuY3Rpb24odCxlKXt2YXIgbj1CdVt0KyJQcm90b3R5cGUiXSxyPW4mJm5bZV07aWYocilyZXR1cm4gcjt2YXIgaT16dVt0XSxvPWkmJmkucHJvdG90eXBlO3JldHVybiBvJiZvW2VdfSxDdT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gTnUoKXtpZighYnUmJiEoYnU9InVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHwidW5kZWZpbmVkIiE9dHlwZW9mIG1zQ3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gYnUoQ3UpfXZhciBSdT0vXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7Zm9yKHZhciBqdT1bXSxEdT0wO0R1PDI1NjsrK0R1KWp1LnB1c2goKER1KzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7ZnVuY3Rpb24gUHUodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj0oanVbdFtlKzBdXStqdVt0W2UrMV1dK2p1W3RbZSsyXV0ranVbdFtlKzNdXSsiLSIranVbdFtlKzRdXStqdVt0W2UrNV1dKyItIitqdVt0W2UrNl1dK2p1W3RbZSs3XV0rIi0iK2p1W3RbZSs4XV0ranVbdFtlKzldXSsiLSIranVbdFtlKzEwXV0ranVbdFtlKzExXV0ranVbdFtlKzEyXV0ranVbdFtlKzEzXV0ranVbdFtlKzE0XV0ranVbdFtlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmUnUudGVzdCh0KX0obikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBVdSh0LGUsbil7dmFyIHI9KHQ9dHx8e30pLnJhbmRvbXx8KHQucm5nfHxOdSkoKTtpZihyWzZdPTE1JnJbNl18NjQscls4XT02MyZyWzhdfDEyOCxlKXtuPW58fDA7Zm9yKHZhciBpPTA7aTwxNjsrK2kpZVtuK2ldPXJbaV07cmV0dXJuIGV9cmV0dXJuIFB1KHIpfWNvbnN0IEZ1PSgpPT4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdztmdW5jdGlvbiBNdSh0KXtyZXR1cm4gbnVsbD09dD8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiB0P3Q6SlNPTi5zdHJpbmdpZnkoe2NvbnRlbnRIaW50OnQuY29udGVudEhpbnQsZW5hYmxlZDp0LmVuYWJsZWQsaWQ6dC5pZCxraW5kOnQua2luZCxsYWJlbDp0LmxhYmVsLG11dGVkOnQubXV0ZWQscmVhZHlTdGF0ZTp0LnJlYWR5U3RhdGV9KX1mdW5jdGlvbiBadSh0KXtyZXR1cm4gbnVsbD09dD8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiB0P3Q6SlNPTi5zdHJpbmdpZnkoe3RyYWNrOk11KHQudHJhY2spfSl9ZnVuY3Rpb24gSnUodCl7cmV0dXJuIG51bGw9PXQ/InVuZGVmaW5lZCB8IG51bGwiOiJzdHJpbmciPT10eXBlb2YgdD90OkpTT04uc3RyaW5naWZ5KHt0cmFjazpNdSh0LnRyYWNrKX0pfWNvbnN0IEh1PSJAYnl0ZWQvdmUtcnRjIixXdT0iQGJ5dGVkL3ZlLXJ0Yy1jYWNoZS1zaXplIjt2YXIgS3U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dXUodGhpcywic3RvcmVLZXkiLHZvaWQgMCksdXUodGhpcywibG9nTGV2ZWwiLHZvaWQgMCksdXUodGhpcywiTG9nZmlsZVNpemUiLHZvaWQgMCksdXUodGhpcywiZGIiLHZvaWQgMCksdXUodGhpcywibG9nSWQiLHZvaWQgMCksdXUodGhpcywiY2FjaGVMb2ciLHZvaWQgMCksdXUodGhpcywiY2FjaGVkU2l6ZSIsdm9pZCAwKSx1dSh0aGlzLCJwcmVDYWNoZVRpbWUiLHZvaWQgMCksdXUodGhpcywidGltZXIiLHZvaWQgMCksdXUodGhpcywiX2dldFNpemUiLCh0PT5uZXcgQmxvYih0KS5zaXplLzEwNDg1NzYpKSx0aGlzLnN0b3JlS2V5PSIiLHRoaXMubG9nSWQ9MSx0aGlzLmNhY2hlTG9nPSIiLHRoaXMubG9nTGV2ZWw9Im5vbmUiLHRoaXMuTG9nZmlsZVNpemU9MTAwLHRoaXMuX2NyZWF0ZVN0b3JlKCl9X2NyZWF0ZVN0b3JlKCl7aWYoRnUoKXx8IXdpbmRvdy5pbmRleGVkREIpcmV0dXJuO2NvbnN0IHQ9aW5kZXhlZERCLm9wZW4oIkBieXRlZC92ZS1ydGMiKTt0Lm9udXBncmFkZW5lZWRlZD0oKT0+e3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEh1KTt0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oV3UpfWNhdGNoKGVnKXt9fSx0Lm9uZXJyb3I9dD0+e30sdC5vbnN1Y2Nlc3M9KCk9Pnt0aGlzLmRiPXQucmVzdWx0LHRoaXMuX2dldENhY2hlZFNpemUoKX19X2dldENhY2hlZFNpemUoKXt0cnl7Y29uc3QgdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShXdSk7dD90aGlzLmNhY2hlZFNpemU9TnVtYmVyKHQpOnRoaXMudmFsdWVzKCkudGhlbigodD0+e3RoaXMuY2FjaGVkU2l6ZT10aGlzLl9nZXRTaXplKHQpLHRoaXMuX3NldENhY2hlZFNpemUoKX0pKX1jYXRjaChlZyl7fX1fc2V0Q2FjaGVkU2l6ZSgpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShXdSwiIi5jb25jYXQodGhpcy5jYWNoZWRTaXplKSl9Y2F0Y2goZWcpe319X2dldFN0b3JlKHQpe2lmKHRoaXMuZGIpcmV0dXJuIHRoaXMuZGIudHJhbnNhY3Rpb24oSHUsdCkub2JqZWN0U3RvcmUoSHUpfXNldCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57aWYoIm5vbmUiPT09dGhpcy5sb2dMZXZlbClyZXR1cm4gZSgpO2lmKHQmJnRoaXMucHJlQ2FjaGVUaW1lJiZ0aGlzLnByZUNhY2hlVGltZS1EYXRlLm5vdygpPDFlMylyZXR1cm4gdGhpcy5jYWNoZUxvZys9IlxuXG4iLmNvbmNhdCh0aGlzLmxvZ0lkLCI6ICIpLmNvbmNhdCh0KSx0aGlzLmxvZ0lkKyssdGhpcy50aW1lcnx8KHRoaXMudGltZXI9c2V0VGltZW91dCgoKCk9Pnt0aGlzLnNldCgiIil9KSwxZTMtKHRoaXMucHJlQ2FjaGVUaW1lLURhdGUubm93KCkpKSksZSgpO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPW51bGw7Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZHdyaXRlIik7aWYoIXIpcmV0dXJuIG4oImdldCBzdG9yZSBmYWlsIik7dGhpcy5jYWNoZWRTaXplJiZ0aGlzLmNhY2hlZFNpemU+dGhpcy5Mb2dmaWxlU2l6ZSYmdGhpcy5rZXlFYXJsaWVzdCgpLnRoZW4oKHQ9Pnt0aGlzLmdldCh0KS50aGVuKChlPT57dGhpcy5kZWwodCkudGhlbigoKCk9Pnt0aGlzLmNhY2hlZFNpemU9dGhpcy5jYWNoZWRTaXplLXRoaXMuX2dldFNpemUoWyIiLmNvbmNhdChlKV0pLHRoaXMuX3NldENhY2hlZFNpemUoKX0pKX0pKX0pKTtjb25zdCBpPXIuZ2V0KHRoaXMuc3RvcmVLZXkpO2kub25zdWNjZXNzPSgpPT57dHJ5e2NvbnN0IG49IiIuY29uY2F0KGkucmVzdWx0fHwiIikuY29uY2F0KHRoaXMuY2FjaGVMb2cpLG89dD8iIi5jb25jYXQobj8iXG5cbiI6IiIpLmNvbmNhdCh0aGlzLmxvZ0lkLCI6ICIpLmNvbmNhdCh0KToiIjtyLnB1dCgiIi5jb25jYXQobikuY29uY2F0KG8pLHRoaXMuc3RvcmVLZXkpLHQmJnRoaXMubG9nSWQrKyx0aGlzLmNhY2hlTG9nPSIiLHRoaXMuY2FjaGVkU2l6ZT0odGhpcy5jYWNoZWRTaXplfHwwKSt0aGlzLl9nZXRTaXplKFsiIi5jb25jYXQodGhpcy5jYWNoZUxvZykuY29uY2F0KG8pXSksdGhpcy5fc2V0Q2FjaGVkU2l6ZSgpLHRoaXMucHJlQ2FjaGVUaW1lPURhdGUubm93KCksZSgpfWNhdGNoKG8pe2lmKCF0KXJldHVybiBuKG8pO3RoaXMuY2FjaGVMb2crPSJcblxuIi5jb25jYXQodGhpcy5sb2dJZCwiOiAiKS5jb25jYXQodCksdGhpcy5sb2dJZCsrLG4obyl9fSxpLm9uZXJyb3I9ZT0+e2lmKCF0KXJldHVybiBuKGUpO3RoaXMuY2FjaGVMb2crPSJcblxuIi5jb25jYXQodGhpcy5sb2dJZCwiOiAiKS5jb25jYXQodCksdGhpcy5sb2dJZCsrLG4oZSl9fSkpfWdldCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZG9ubHkiKTtpZighcilyZXR1cm4gbigpO2NvbnN0IGk9ci5nZXQodCk7aS5vbnN1Y2Nlc3M9KCk9PntlKGkucmVzdWx0KX0saS5vbmVycm9yPXQ9PntuKHQpfX0pKX1kZWwoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5zdG9yZUtleTtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZHdyaXRlIik7aWYoIXIpcmV0dXJuIG4oKTtjb25zdCBpPXIuZGVsZXRlKHQpO2kub25zdWNjZXNzPSgpPT5lKGkucmVzdWx0KSxpLm9uZXJyb3I9dD0+bih0KX0pKX1rZXlFYXJsaWVzdCgpe3JldHVybiB0aGlzLmtleXMoKS50aGVuKCh0PT57bGV0IGUsbj1EYXRlLm5vdygpO3JldHVybiB0LmZvckVhY2goKHQ9PntpZighdHx8IXQubGVuZ3RoKXJldHVybjtjb25zdCByPXQuc3BsaXQoIi0iKVswXTtOdW1iZXIocik8biYmKG49TnVtYmVyKHIpLGU9dCl9KSksZX0pKX1rZXlzKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e2NvbnN0IG49dGhpcy5fZ2V0U3RvcmUoInJlYWRvbmx5Iik7aWYoIW4pcmV0dXJuIGUoKTtpZihuLmdldEFsbEtleXMpe2NvbnN0IHI9bi5nZXRBbGxLZXlzKCk7cmV0dXJuIHIub25zdWNjZXNzPSgpPT57dChyLnJlc3VsdCl9LHZvaWQoci5vbmVycm9yPSgpPT57ZSgpfSl9Y29uc3Qgcj1bXTtuLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHIucHVzaCh0aGlzLnJlc3VsdC5rZXkpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxuLnRyYW5zYWN0aW9uLm9uY29tcGxldGU9KCk9PnQocil9KSl9dmFsdWVzKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e2NvbnN0IG49dGhpcy5fZ2V0U3RvcmUoInJlYWRvbmx5Iik7aWYoIW4pcmV0dXJuIGUoKTtpZihuLmdldEFsbCl7Y29uc3Qgcj1uLmdldEFsbCgpO3JldHVybiByLm9uc3VjY2Vzcz0oKT0+e3Qoci5yZXN1bHQpfSx2b2lkKHIub25lcnJvcj0oKT0+e2UoKX0pfWNvbnN0IHI9W107bi5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQmJihyLnB1c2godGhpcy5yZXN1bHQudmFsdWUpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxuLnRyYW5zYWN0aW9uLm9uY29tcGxldGU9KCk9PnQocil9KSl9ZG93bmxvYWQodCl7dD10fHx0aGlzLnN0b3JlS2V5LHRoaXMuZ2V0KHQpLnRoZW4oKGU9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtuLmRvd25sb2FkPSIiLmNvbmNhdCh0LCIudHh0Iiksbi5ocmVmPSJkYXRhOnRleHQvcGFpbnQ7dXRmLTgsIi5jb25jYXQoZXx8IiIpLG4uY2xpY2soKX0pKX19O2NsYXNzIEd1e2NvbnN0cnVjdG9yKCl7dXUodGhpcywiX2FsbCIse30pfW9uKHQsZSl7Y29uc3Qgbj10aGlzLl9hbGxbdF07bj9uLnB1c2goZSk6dGhpcy5fYWxsW3RdPVtlXX1vbmNlKHQsZSl7dmFyIG49dGhpcztjb25zdCByPWZ1bmN0aW9uKCl7ZSguLi5hcmd1bWVudHMpLG4ub2ZmKHQscil9O3RoaXMub24odCxyKX1vZmYodCxlKXtjb25zdCBuPXRoaXMuX2FsbFt0XTtudWxsPT1ufHxuLnNwbGljZShuLmluZGV4T2YoZSk+Pj4wLDEpfWVtaXQodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2NvbnN0IGk9dGhpcy5fYWxsW3RdO251bGw9PWl8fGkuc2xpY2UoKS5mb3JFYWNoKCh0PT50KC4uLm4pKSl9c2FmZUVtaXQodCl7dHJ5e2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gdGhpcy5lbWl0KHQsLi4ubil9Y2F0Y2goZWcpe2NvbnNvbGUuZXJyb3IoZWcpfX1kZXN0cm95KCl7dGhpcy5fYWxsPXt9fX1jb25zdCBWdT1bIlVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQiLCJVUExPQURfUkVQT1JUX0xJTUlUIl07Y29uc3QgWXU9bmV3IGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHV1KHRoaXMsImNvbmZpZyIse1VQTE9BRF9DT05TT0xFX09OOiExLFVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQ6MjAwLFVQTE9BRF9SRVBPUlRfTElNSVQ6NDVlNCxFTkFCTEVfUkVQT1JUX0lEQl9CVUZGRVI6ITF9KX1zZXRQYXJhbWV0ZXIodCxlKXtpZihmdW5jdGlvbih0KXtyZXR1cm4gVnUuaW5jbHVkZXModCl9KHQpKXRyeXtjb25zdCBuPU51bWJlcihlKTtpZihOdW1iZXIuaXNOYU4obikpcmV0dXJuO3RoaXMuY29uZmlnW3RdPW59Y2F0Y2gobil7cmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJDYW5ub3QgY29udmVydCBjb3JlIGxpYiBwYXJhbWV0ZXIgIi5jb25jYXQodCwiOiIpLmNvbmNhdChlLCIgaW50byBudW1iZXIiKSl9ZWxzZSB0aGlzLmNvbmZpZ1t0XT1lO3RoaXMuZW1pdCh0LHRoaXMuY29uZmlnW3RdKX1nZXRQYXJhbWV0ZXIodCl7cmV0dXJuIHRoaXMuY29uZmlnW3RdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25maWcpfX07dmFyIFh1PVl0LHF1PW1pO0xuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YSgoZnVuY3Rpb24oKXtxdSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIHF1KFh1KHQpKX19KTt2YXIgJHU9bihRLk9iamVjdC5rZXlzKSxRdT1uKFEuT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyksdGg9cW8uZmlsdGVyO0xuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IU5yKCJmaWx0ZXIiKX0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGgodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgZWg9SXUoIkFycmF5IiwiZmlsdGVyIiksbmg9b3Qscmg9ZWgsaWg9QXJyYXkucHJvdG90eXBlLG9oPW4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZmlsdGVyO3JldHVybiB0PT09aWh8fG5oKGloLHQpJiZlPT09aWguZmlsdGVyP3JoOmV9KSksYWg9e2V4cG9ydHM6e319LHNoPUxuLGNoPWEsbGg9WCx1aD1ULmYsaGg9RTtzaCh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFoaHx8Y2goKGZ1bmN0aW9uKCl7dWgoMSl9KSksc2hhbTohaGh9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWgobGgodCksZSl9fSk7dmFyIGZoPVEuT2JqZWN0LGRoPWFoLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmguZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSl9O2ZoLmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtJiYoZGguc2hhbT0hMCk7dmFyIF9oPW4oYWguZXhwb3J0cykscGg9RSxnaD1EbixtaD1UeXBlRXJyb3IseWg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix2aD1waCYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcylyZXR1cm4hMDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKGVnKXtyZXR1cm4gZWcgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpLGJoPVl0LHdoPVduLGtoPXZoP2Z1bmN0aW9uKHQsZSl7aWYoZ2godCkmJiF5aCh0LCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBuZXcgbWgoIkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1cm4gdC5sZW5ndGg9ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg9ZX0sU2g9R247TG4oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOmEoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goZWcpe3JldHVybiBlZyBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uKHQpe3ZhciBlPWJoKHRoaXMpLG49d2goZSkscj1hcmd1bWVudHMubGVuZ3RoO1NoKG4rcik7Zm9yKHZhciBpPTA7aTxyO2krKyllW25dPWFyZ3VtZW50c1tpXSxuKys7cmV0dXJuIGtoKGUsbiksbn19KTt2YXIgT2g9SXUoIkFycmF5IiwicHVzaCIpLHhoPW90LEFoPU9oLFRoPUFycmF5LnByb3RvdHlwZSxFaD1uKChmdW5jdGlvbih0KXt2YXIgZT10LnB1c2g7cmV0dXJuIHQ9PT1UaHx8eGgoVGgsdCkmJmU9PT1UaC5wdXNoP0FoOmV9KSksTGg9YSx6aD1xby5mb3JFYWNoLEJoPWZ1bmN0aW9uKHQsZSl7dmFyIG49W11bdF07cmV0dXJuISFuJiZMaCgoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3JldHVybiAxfSwxKX0pKX0oImZvckVhY2giKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiB6aCh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfTtMbih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPT1CaH0se2ZvckVhY2g6Qmh9KTt2YXIgSWg9SXUoIkFycmF5IiwiZm9yRWFjaCIpLENoPWFyLE5oPSR0LFJoPW90LGpoPUloLERoPUFycmF5LnByb3RvdHlwZSxQaD17RE9NVG9rZW5MaXN0OiEwLE5vZGVMaXN0OiEwfSxVaD1uKChmdW5jdGlvbih0KXt2YXIgZT10LmZvckVhY2g7cmV0dXJuIHQ9PT1EaHx8UmgoRGgsdCkmJmU9PT1EaC5mb3JFYWNofHxOaChQaCxDaCh0KSk/amg6ZX0pKSxGaD1pdCxNaD1KaSxaaD1RaSxKaD1ubixIaD1tKFtdLmNvbmNhdCksV2g9RmgoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPU1oLmYoSmgodCkpLG49WmguZjtyZXR1cm4gbj9IaChlLG4odCkpOmV9LEtoPVgsR2g9VCxWaD1xbjtMbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohRX0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj1LaCh0KSxpPUdoLmYsbz1XaChyKSxhPXt9LHM9MDtvLmxlbmd0aD5zOyl2b2lkIDAhPT0obj1pKHIsZT1vW3MrK10pKSYmVmgoYSxlLG4pO3JldHVybiBhfX0pO3ZhciBZaD1uKFEuT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpLFhoPXtleHBvcnRzOnt9fSxxaD1MbiwkaD1FLFFoPSRyLmY7cWgoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuZGVmaW5lUHJvcGVydGllcyE9PVFoLHNoYW06ISRofSx7ZGVmaW5lUHJvcGVydGllczpRaH0pO3ZhciB0Zj1RLk9iamVjdCxlZj1YaC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRmLmRlZmluZVByb3BlcnRpZXModCxlKX07dGYuZGVmaW5lUHJvcGVydGllcy5zaGFtJiYoZWYuc2hhbT0hMCk7dmFyIG5mPW4oWGguZXhwb3J0cyk7ZnVuY3Rpb24gcmYodCxlKXt2YXIgbj0kdSh0KTtpZihRdSl7dmFyIHI9UXUodCk7ZSYmKHI9b2gocikuY2FsbChyLChmdW5jdGlvbihlKXtyZXR1cm4gX2godCxlKS5lbnVtZXJhYmxlfSkpKSxFaChuKS5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG9mKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuLHIsaT1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9VaChuPXJmKE9iamVjdChpKSwhMCkpLmNhbGwobiwoZnVuY3Rpb24oZSl7dXUodCxlLGlbZV0pfSkpOlloP25mKHQsWWgoaSkpOlVoKHI9cmYoT2JqZWN0KGkpKSkuY2FsbChyLChmdW5jdGlvbihlKXtSbih0LGUsX2goaSxlKSl9KSl9cmV0dXJuIHR9dmFyIGFmPURuLHNmPVduLGNmPUduLGxmPVhlLHVmPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyl7Zm9yKHZhciBjLGwsdT1pLGg9MCxmPSEhYSYmbGYoYSxzKTtoPHI7KWggaW4gbiYmKGM9Zj9mKG5baF0saCxlKTpuW2hdLG8+MCYmYWYoYyk/KGw9c2YoYyksdT11Zih0LGUsYyxsLHUsby0xKS0xKTooY2YodSsxKSx0W3VdPWMpLHUrKyksaCsrO3JldHVybiB1fSxoZj11ZixmZj1ZdCxkZj1XbixfZj1NbixwZj16cjtMbih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLGU9ZmYodGhpcyksbj1kZihlKSxyPXBmKGUsMCk7cmV0dXJuIHIubGVuZ3RoPWhmKHIsZSxlLG4sMCx2b2lkIDA9PT10PzE6X2YodCkpLHJ9fSk7dmFyIGdmPUl1KCJBcnJheSIsImZsYXQiKSxtZj1vdCx5Zj1nZix2Zj1BcnJheS5wcm90b3R5cGUsYmY9bigoZnVuY3Rpb24odCl7dmFyIGU9dC5mbGF0O3JldHVybiB0PT09dmZ8fG1mKHZmLHQpJiZlPT09dmYuZmxhdD95ZjplfSkpLHdmPXt9OyFmdW5jdGlvbih0KXt2YXIgZT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDE2QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgSW50MzJBcnJheTtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXQuYXNzaWduPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7ZS5sZW5ndGg7KXt2YXIgcj1lLnNoaWZ0KCk7aWYocil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IocisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBpIGluIHIpbihyLGkpJiYodFtpXT1yW2ldKX19cmV0dXJuIHR9LHQuc2hyaW5rQnVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZT90OnQuc3ViYXJyYXk/dC5zdWJhcnJheSgwLGUpOih0Lmxlbmd0aD1lLHQpfTt2YXIgcj17YXJyYXlTZXQ6ZnVuY3Rpb24odCxlLG4scixpKXtpZihlLnN1YmFycmF5JiZ0LnN1YmFycmF5KXQuc2V0KGUuc3ViYXJyYXkobixuK3IpLGkpO2Vsc2UgZm9yKHZhciBvPTA7bzxyO28rKyl0W2krb109ZVtuK29dfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYTtmb3Iocj0wLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspcis9dFtlXS5sZW5ndGg7Zm9yKGE9bmV3IFVpbnQ4QXJyYXkociksaT0wLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspbz10W2VdLGEuc2V0KG8saSksaSs9by5sZW5ndGg7cmV0dXJuIGF9fSxpPXthcnJheVNldDpmdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbz0wO288cjtvKyspdFtpK29dPWVbbitvXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdCl9fTt0LnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHQuQnVmOD1VaW50OEFycmF5LHQuQnVmMTY9VWludDE2QXJyYXksdC5CdWYzMj1JbnQzMkFycmF5LHQuYXNzaWduKHQscikpOih0LkJ1Zjg9QXJyYXksdC5CdWYxNj1BcnJheSx0LkJ1ZjMyPUFycmF5LHQuYXNzaWduKHQsaSkpfSx0LnNldFR5cGVkKGUpfSh3Zik7dmFyIGtmPXt9LFNmPXt9LE9mPXt9LHhmPXdmO2Z1bmN0aW9uIEFmKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDstLWU+PTA7KXRbZV09MH12YXIgVGY9MjU2LEVmPTI4NixMZj0zMCx6Zj0xNSxCZj1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxJZj1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sQ2Y9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLE5mPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxSZj1uZXcgQXJyYXkoNTc2KTtBZihSZik7dmFyIGpmPW5ldyBBcnJheSg2MCk7QWYoamYpO3ZhciBEZj1uZXcgQXJyYXkoNTEyKTtBZihEZik7dmFyIFBmPW5ldyBBcnJheSgyNTYpO0FmKFBmKTt2YXIgVWY9bmV3IEFycmF5KDI5KTtBZihVZik7dmFyIEZmLE1mLFpmLEpmPW5ldyBBcnJheShMZik7ZnVuY3Rpb24gSGYodCxlLG4scixpKXt0aGlzLnN0YXRpY190cmVlPXQsdGhpcy5leHRyYV9iaXRzPWUsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1pLHRoaXMuaGFzX3N0cmVlPXQmJnQubGVuZ3RofWZ1bmN0aW9uIFdmKHQsZSl7dGhpcy5keW5fdHJlZT10LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1lfWZ1bmN0aW9uIEtmKHQpe3JldHVybiB0PDI1Nj9EZlt0XTpEZlsyNTYrKHQ+Pj43KV19ZnVuY3Rpb24gR2YodCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lPj4+OCYyNTV9ZnVuY3Rpb24gVmYodCxlLG4pe3QuYmlfdmFsaWQ+MTYtbj8odC5iaV9idWZ8PWU8PHQuYmlfdmFsaWQmNjU1MzUsR2YodCx0LmJpX2J1ZiksdC5iaV9idWY9ZT4+MTYtdC5iaV92YWxpZCx0LmJpX3ZhbGlkKz1uLTE2KToodC5iaV9idWZ8PWU8PHQuYmlfdmFsaWQmNjU1MzUsdC5iaV92YWxpZCs9bil9ZnVuY3Rpb24gWWYodCxlLG4pe1ZmKHQsblsyKmVdLG5bMiplKzFdKX1mdW5jdGlvbiBYZih0LGUpe3ZhciBuPTA7ZG97bnw9MSZ0LHQ+Pj49MSxuPDw9MX13aGlsZSgtLWU+MCk7cmV0dXJuIG4+Pj4xfWZ1bmN0aW9uIHFmKHQsZSxuKXt2YXIgcixpLG89bmV3IEFycmF5KDE2KSxhPTA7Zm9yKHI9MTtyPD16ZjtyKyspb1tyXT1hPWErbltyLTFdPDwxO2ZvcihpPTA7aTw9ZTtpKyspe3ZhciBzPXRbMippKzFdOzAhPT1zJiYodFsyKmldPVhmKG9bc10rKyxzKSl9fWZ1bmN0aW9uICRmKHQpe3ZhciBlO2ZvcihlPTA7ZTxFZjtlKyspdC5keW5fbHRyZWVbMiplXT0wO2ZvcihlPTA7ZTxMZjtlKyspdC5keW5fZHRyZWVbMiplXT0wO2ZvcihlPTA7ZTwxOTtlKyspdC5ibF90cmVlWzIqZV09MDt0LmR5bl9sdHJlZVs1MTJdPTEsdC5vcHRfbGVuPXQuc3RhdGljX2xlbj0wLHQubGFzdF9saXQ9dC5tYXRjaGVzPTB9ZnVuY3Rpb24gUWYodCl7dC5iaV92YWxpZD44P0dmKHQsdC5iaV9idWYpOnQuYmlfdmFsaWQ+MCYmKHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPXQuYmlfYnVmKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MH1mdW5jdGlvbiB0ZCh0LGUsbixyKXt2YXIgaT0yKmUsbz0yKm47cmV0dXJuIHRbaV08dFtvXXx8dFtpXT09PXRbb10mJnJbZV08PXJbbl19ZnVuY3Rpb24gZWQodCxlLG4pe2Zvcih2YXIgcj10LmhlYXBbbl0saT1uPDwxO2k8PXQuaGVhcF9sZW4mJihpPHQuaGVhcF9sZW4mJnRkKGUsdC5oZWFwW2krMV0sdC5oZWFwW2ldLHQuZGVwdGgpJiZpKyssIXRkKGUscix0LmhlYXBbaV0sdC5kZXB0aCkpOyl0LmhlYXBbbl09dC5oZWFwW2ldLG49aSxpPDw9MTt0LmhlYXBbbl09cn1mdW5jdGlvbiBuZCh0LGUsbil7dmFyIHIsaSxvLGEscz0wO2lmKDAhPT10Lmxhc3RfbGl0KWRve3I9dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqc108PDh8dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqcysxXSxpPXQucGVuZGluZ19idWZbdC5sX2J1ZitzXSxzKyssMD09PXI/WWYodCxpLGUpOihZZih0LChvPVBmW2ldKStUZisxLGUpLDAhPT0oYT1CZltvXSkmJlZmKHQsaS09VWZbb10sYSksWWYodCxvPUtmKC0tciksbiksMCE9PShhPUlmW29dKSYmVmYodCxyLT1KZltvXSxhKSl9d2hpbGUoczx0Lmxhc3RfbGl0KTtZZih0LDI1NixlKX1mdW5jdGlvbiByZCh0LGUpe3ZhciBuLHIsaSxvPWUuZHluX3RyZWUsYT1lLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxzPWUuc3RhdF9kZXNjLmhhc19zdHJlZSxjPWUuc3RhdF9kZXNjLmVsZW1zLGw9LTE7Zm9yKHQuaGVhcF9sZW49MCx0LmhlYXBfbWF4PTU3MyxuPTA7bjxjO24rKykwIT09b1syKm5dPyh0LmhlYXBbKyt0LmhlYXBfbGVuXT1sPW4sdC5kZXB0aFtuXT0wKTpvWzIqbisxXT0wO2Zvcig7dC5oZWFwX2xlbjwyOylvWzIqKGk9dC5oZWFwWysrdC5oZWFwX2xlbl09bDwyPysrbDowKV09MSx0LmRlcHRoW2ldPTAsdC5vcHRfbGVuLS0scyYmKHQuc3RhdGljX2xlbi09YVsyKmkrMV0pO2ZvcihlLm1heF9jb2RlPWwsbj10LmhlYXBfbGVuPj4xO24+PTE7bi0tKWVkKHQsbyxuKTtpPWM7ZG97bj10LmhlYXBbMV0sdC5oZWFwWzFdPXQuaGVhcFt0LmhlYXBfbGVuLS1dLGVkKHQsbywxKSxyPXQuaGVhcFsxXSx0LmhlYXBbLS10LmhlYXBfbWF4XT1uLHQuaGVhcFstLXQuaGVhcF9tYXhdPXIsb1syKmldPW9bMipuXStvWzIqcl0sdC5kZXB0aFtpXT0odC5kZXB0aFtuXT49dC5kZXB0aFtyXT90LmRlcHRoW25dOnQuZGVwdGhbcl0pKzEsb1syKm4rMV09b1syKnIrMV09aSx0LmhlYXBbMV09aSsrLGVkKHQsbywxKX13aGlsZSh0LmhlYXBfbGVuPj0yKTt0LmhlYXBbLS10LmhlYXBfbWF4XT10LmhlYXBbMV0sZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYz1lLmR5bl90cmVlLGw9ZS5tYXhfY29kZSx1PWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLGg9ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLGY9ZS5zdGF0X2Rlc2MuZXh0cmFfYml0cyxkPWUuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsXz1lLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHA9MDtmb3Iobz0wO288PXpmO28rKyl0LmJsX2NvdW50W29dPTA7Zm9yKGNbMip0LmhlYXBbdC5oZWFwX21heF0rMV09MCxuPXQuaGVhcF9tYXgrMTtuPDU3MztuKyspKG89Y1syKmNbMioocj10LmhlYXBbbl0pKzFdKzFdKzEpPl8mJihvPV8scCsrKSxjWzIqcisxXT1vLHI+bHx8KHQuYmxfY291bnRbb10rKyxhPTAscj49ZCYmKGE9ZltyLWRdKSxzPWNbMipyXSx0Lm9wdF9sZW4rPXMqKG8rYSksaCYmKHQuc3RhdGljX2xlbis9cyoodVsyKnIrMV0rYSkpKTtpZigwIT09cCl7ZG97Zm9yKG89Xy0xOzA9PT10LmJsX2NvdW50W29dOylvLS07dC5ibF9jb3VudFtvXS0tLHQuYmxfY291bnRbbysxXSs9Mix0LmJsX2NvdW50W19dLS0scC09Mn13aGlsZShwPjApO2ZvcihvPV87MCE9PW87by0tKWZvcihyPXQuYmxfY291bnRbb107MCE9PXI7KShpPXQuaGVhcFstLW5dKT5sfHwoY1syKmkrMV0hPT1vJiYodC5vcHRfbGVuKz0oby1jWzIqaSsxXSkqY1syKmldLGNbMippKzFdPW8pLHItLSl9fSh0LGUpLHFmKG8sbCx0LmJsX2NvdW50KX1mdW5jdGlvbiBpZCh0LGUsbil7dmFyIHIsaSxvPS0xLGE9ZVsxXSxzPTAsYz03LGw9NDtmb3IoMD09PWEmJihjPTEzOCxsPTMpLGVbMioobisxKSsxXT02NTUzNSxyPTA7cjw9bjtyKyspaT1hLGE9ZVsyKihyKzEpKzFdLCsrczxjJiZpPT09YXx8KHM8bD90LmJsX3RyZWVbMippXSs9czowIT09aT8oaSE9PW8mJnQuYmxfdHJlZVsyKmldKyssdC5ibF90cmVlWzMyXSsrKTpzPD0xMD90LmJsX3RyZWVbMzRdKys6dC5ibF90cmVlWzM2XSsrLHM9MCxvPWksMD09PWE/KGM9MTM4LGw9Myk6aT09PWE/KGM9NixsPTMpOihjPTcsbD00KSl9ZnVuY3Rpb24gb2QodCxlLG4pe3ZhciByLGksbz0tMSxhPWVbMV0scz0wLGM9NyxsPTQ7Zm9yKDA9PT1hJiYoYz0xMzgsbD0zKSxyPTA7cjw9bjtyKyspaWYoaT1hLGE9ZVsyKihyKzEpKzFdLCEoKytzPGMmJmk9PT1hKSl7aWYoczxsKWRve1lmKHQsaSx0LmJsX3RyZWUpfXdoaWxlKDAhPS0tcyk7ZWxzZSAwIT09aT8oaSE9PW8mJihZZih0LGksdC5ibF90cmVlKSxzLS0pLFlmKHQsMTYsdC5ibF90cmVlKSxWZih0LHMtMywyKSk6czw9MTA/KFlmKHQsMTcsdC5ibF90cmVlKSxWZih0LHMtMywzKSk6KFlmKHQsMTgsdC5ibF90cmVlKSxWZih0LHMtMTEsNykpO3M9MCxvPWksMD09PWE/KGM9MTM4LGw9Myk6aT09PWE/KGM9NixsPTMpOihjPTcsbD00KX19QWYoSmYpO3ZhciBhZD0hMTtmdW5jdGlvbiBzZCh0LGUsbixyKXtWZih0LDArKHI/MTowKSwzKSxmdW5jdGlvbih0LGUsbixyKXtRZih0KSxyJiYoR2YodCxuKSxHZih0LH5uKSkseGYuYXJyYXlTZXQodC5wZW5kaW5nX2J1Zix0LndpbmRvdyxlLG4sdC5wZW5kaW5nKSx0LnBlbmRpbmcrPW59KHQsZSxuLCEwKX1PZi5fdHJfaW5pdD1mdW5jdGlvbih0KXthZHx8KCFmdW5jdGlvbigpe3ZhciB0LGUsbixyLGksbz1uZXcgQXJyYXkoMTYpO2ZvcihuPTAscj0wO3I8Mjg7cisrKWZvcihVZltyXT1uLHQ9MDt0PDE8PEJmW3JdO3QrKylQZltuKytdPXI7Zm9yKFBmW24tMV09cixpPTAscj0wO3I8MTY7cisrKWZvcihKZltyXT1pLHQ9MDt0PDE8PElmW3JdO3QrKylEZltpKytdPXI7Zm9yKGk+Pj03O3I8TGY7cisrKWZvcihKZltyXT1pPDw3LHQ9MDt0PDE8PElmW3JdLTc7dCsrKURmWzI1NitpKytdPXI7Zm9yKGU9MDtlPD16ZjtlKyspb1tlXT0wO2Zvcih0PTA7dDw9MTQzOylSZlsyKnQrMV09OCx0Kyssb1s4XSsrO2Zvcig7dDw9MjU1OylSZlsyKnQrMV09OSx0Kyssb1s5XSsrO2Zvcig7dDw9Mjc5OylSZlsyKnQrMV09Nyx0Kyssb1s3XSsrO2Zvcig7dDw9Mjg3OylSZlsyKnQrMV09OCx0Kyssb1s4XSsrO2ZvcihxZihSZiwyODcsbyksdD0wO3Q8TGY7dCsrKWpmWzIqdCsxXT01LGpmWzIqdF09WGYodCw1KTtGZj1uZXcgSGYoUmYsQmYsMjU3LEVmLHpmKSxNZj1uZXcgSGYoamYsSWYsMCxMZix6ZiksWmY9bmV3IEhmKG5ldyBBcnJheSgwKSxDZiwwLDE5LDcpfSgpLGFkPSEwKSx0LmxfZGVzYz1uZXcgV2YodC5keW5fbHRyZWUsRmYpLHQuZF9kZXNjPW5ldyBXZih0LmR5bl9kdHJlZSxNZiksdC5ibF9kZXNjPW5ldyBXZih0LmJsX3RyZWUsWmYpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wLCRmKHQpfSxPZi5fdHJfc3RvcmVkX2Jsb2NrPXNkLE9mLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGE9MDt0LmxldmVsPjA/KDI9PT10LnN0cm0uZGF0YV90eXBlJiYodC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbih0KXt2YXIgZSxuPTQwOTM2MjQ0NDc7Zm9yKGU9MDtlPD0zMTtlKyssbj4+Pj0xKWlmKDEmbiYmMCE9PXQuZHluX2x0cmVlWzIqZV0pcmV0dXJuIDA7aWYoMCE9PXQuZHluX2x0cmVlWzE4XXx8MCE9PXQuZHluX2x0cmVlWzIwXXx8MCE9PXQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoZT0zMjtlPFRmO2UrKylpZigwIT09dC5keW5fbHRyZWVbMiplXSlyZXR1cm4gMTtyZXR1cm4gMH0odCkpLHJkKHQsdC5sX2Rlc2MpLHJkKHQsdC5kX2Rlc2MpLGE9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGlkKHQsdC5keW5fbHRyZWUsdC5sX2Rlc2MubWF4X2NvZGUpLGlkKHQsdC5keW5fZHRyZWUsdC5kX2Rlc2MubWF4X2NvZGUpLHJkKHQsdC5ibF9kZXNjKSxlPTE4O2U+PTMmJjA9PT10LmJsX3RyZWVbMipOZltlXSsxXTtlLS0pO3JldHVybiB0Lm9wdF9sZW4rPTMqKGUrMSkrNSs1KzQsZX0odCksaT10Lm9wdF9sZW4rMys3Pj4+Mywobz10LnN0YXRpY19sZW4rMys3Pj4+Myk8PWkmJihpPW8pKTppPW89bis1LG4rNDw9aSYmLTEhPT1lP3NkKHQsZSxuLHIpOjQ9PT10LnN0cmF0ZWd5fHxvPT09aT8oVmYodCwyKyhyPzE6MCksMyksbmQodCxSZixqZikpOihWZih0LDQrKHI/MTowKSwzKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaTtmb3IoVmYodCxlLTI1Nyw1KSxWZih0LG4tMSw1KSxWZih0LHItNCw0KSxpPTA7aTxyO2krKylWZih0LHQuYmxfdHJlZVsyKk5mW2ldKzFdLDMpO29kKHQsdC5keW5fbHRyZWUsZS0xKSxvZCh0LHQuZHluX2R0cmVlLG4tMSl9KHQsdC5sX2Rlc2MubWF4X2NvZGUrMSx0LmRfZGVzYy5tYXhfY29kZSsxLGErMSksbmQodCx0LmR5bl9sdHJlZSx0LmR5bl9kdHJlZSkpLCRmKHQpLHImJlFmKHQpfSxPZi5fdHJfdGFsbHk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LnBlbmRpbmdfYnVmW3QuZF9idWYrMip0Lmxhc3RfbGl0XT1lPj4+OCYyNTUsdC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqdC5sYXN0X2xpdCsxXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QubF9idWYrdC5sYXN0X2xpdF09MjU1Jm4sdC5sYXN0X2xpdCsrLDA9PT1lP3QuZHluX2x0cmVlWzIqbl0rKzoodC5tYXRjaGVzKyssZS0tLHQuZHluX2x0cmVlWzIqKFBmW25dK1RmKzEpXSsrLHQuZHluX2R0cmVlWzIqS2YoZSldKyspLHQubGFzdF9saXQ9PT10LmxpdF9idWZzaXplLTF9LE9mLl90cl9hbGlnbj1mdW5jdGlvbih0KXtWZih0LDIsMyksWWYodCwyNTYsUmYpLGZ1bmN0aW9uKHQpezE2PT09dC5iaV92YWxpZD8oR2YodCx0LmJpX2J1ZiksdC5iaV9idWY9MCx0LmJpX3ZhbGlkPTApOnQuYmlfdmFsaWQ+PTgmJih0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmdC5iaV9idWYsdC5iaV9idWY+Pj04LHQuYmlfdmFsaWQtPTgpfSh0KX07dmFyIGNkPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT02NTUzNSZ0LG89dD4+PjE2JjY1NTM1LGE9MDswIT09bjspe24tPWE9bj4yZTM/MmUzOm47ZG97bz1vKyhpPWkrZVtyKytdfDApfDB9d2hpbGUoLS1hKTtpJT02NTUyMSxvJT02NTUyMX1yZXR1cm4gaXxvPDwxNn07dmFyIGxkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10sbj0wO248MjU2O24rKyl7dD1uO2Zvcih2YXIgcj0wO3I8ODtyKyspdD0xJnQ/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW25dPXR9cmV0dXJuIGV9KCk7dmFyIHVkLGhkPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWxkLG89cituO3RePS0xO2Zvcih2YXIgYT1yO2E8bzthKyspdD10Pj4+OF5pWzI1NSYodF5lW2FdKV07cmV0dXJufnR9LGZkPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn0sZGQ9d2YsX2Q9T2YscGQ9Y2QsZ2Q9aGQsbWQ9ZmQseWQ9LTIsdmQ9MjU4LGJkPTI2Mix3ZD0xMDMsa2Q9MTEzLFNkPTY2NjtmdW5jdGlvbiBPZCh0LGUpe3JldHVybiB0Lm1zZz1tZFtlXSxlfWZ1bmN0aW9uIHhkKHQpe3JldHVybih0PDwxKS0odD40Pzk6MCl9ZnVuY3Rpb24gQWQodCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT49MDspdFtlXT0wfWZ1bmN0aW9uIFRkKHQpe3ZhciBlPXQuc3RhdGUsbj1lLnBlbmRpbmc7bj50LmF2YWlsX291dCYmKG49dC5hdmFpbF9vdXQpLDAhPT1uJiYoZGQuYXJyYXlTZXQodC5vdXRwdXQsZS5wZW5kaW5nX2J1ZixlLnBlbmRpbmdfb3V0LG4sdC5uZXh0X291dCksdC5uZXh0X291dCs9bixlLnBlbmRpbmdfb3V0Kz1uLHQudG90YWxfb3V0Kz1uLHQuYXZhaWxfb3V0LT1uLGUucGVuZGluZy09biwwPT09ZS5wZW5kaW5nJiYoZS5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gRWQodCxlKXtfZC5fdHJfZmx1c2hfYmxvY2sodCx0LmJsb2NrX3N0YXJ0Pj0wP3QuYmxvY2tfc3RhcnQ6LTEsdC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0LGUpLHQuYmxvY2tfc3RhcnQ9dC5zdHJzdGFydCxUZCh0LnN0cm0pfWZ1bmN0aW9uIExkKHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZX1mdW5jdGlvbiB6ZCh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWU+Pj44JjI1NSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZX1mdW5jdGlvbiBCZCh0LGUpe3ZhciBuLHIsaT10Lm1heF9jaGFpbl9sZW5ndGgsbz10LnN0cnN0YXJ0LGE9dC5wcmV2X2xlbmd0aCxzPXQubmljZV9tYXRjaCxjPXQuc3Ryc3RhcnQ+dC53X3NpemUtYmQ/dC5zdHJzdGFydC0odC53X3NpemUtYmQpOjAsbD10LndpbmRvdyx1PXQud19tYXNrLGg9dC5wcmV2LGY9dC5zdHJzdGFydCt2ZCxkPWxbbythLTFdLF89bFtvK2FdO3QucHJldl9sZW5ndGg+PXQuZ29vZF9tYXRjaCYmKGk+Pj0yKSxzPnQubG9va2FoZWFkJiYocz10Lmxvb2thaGVhZCk7ZG97aWYobFsobj1lKSthXT09PV8mJmxbbithLTFdPT09ZCYmbFtuXT09PWxbb10mJmxbKytuXT09PWxbbysxXSl7bys9MixuKys7ZG97fXdoaWxlKGxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZvPGYpO2lmKHI9dmQtKGYtbyksbz1mLXZkLHI+YSl7aWYodC5tYXRjaF9zdGFydD1lLGE9cixyPj1zKWJyZWFrO2Q9bFtvK2EtMV0sXz1sW28rYV19fX13aGlsZSgoZT1oW2UmdV0pPmMmJjAhPS0taSk7cmV0dXJuIGE8PXQubG9va2FoZWFkP2E6dC5sb29rYWhlYWR9ZnVuY3Rpb24gSWQodCl7dmFyIGUsbixyLGksbyxhLHMsYyxsLHUsaD10Lndfc2l6ZTtkb3tpZihpPXQud2luZG93X3NpemUtdC5sb29rYWhlYWQtdC5zdHJzdGFydCx0LnN0cnN0YXJ0Pj1oKyhoLWJkKSl7ZGQuYXJyYXlTZXQodC53aW5kb3csdC53aW5kb3csaCxoLDApLHQubWF0Y2hfc3RhcnQtPWgsdC5zdHJzdGFydC09aCx0LmJsb2NrX3N0YXJ0LT1oLGU9bj10Lmhhc2hfc2l6ZTtkb3tyPXQuaGVhZFstLWVdLHQuaGVhZFtlXT1yPj1oP3ItaDowfXdoaWxlKC0tbik7ZT1uPWg7ZG97cj10LnByZXZbLS1lXSx0LnByZXZbZV09cj49aD9yLWg6MH13aGlsZSgtLW4pO2krPWh9aWYoMD09PXQuc3RybS5hdmFpbF9pbilicmVhaztpZihhPXQuc3RybSxzPXQud2luZG93LGM9dC5zdHJzdGFydCt0Lmxvb2thaGVhZCxsPWksdT12b2lkIDAsKHU9YS5hdmFpbF9pbik+bCYmKHU9bCksbj0wPT09dT8wOihhLmF2YWlsX2luLT11LGRkLmFycmF5U2V0KHMsYS5pbnB1dCxhLm5leHRfaW4sdSxjKSwxPT09YS5zdGF0ZS53cmFwP2EuYWRsZXI9cGQoYS5hZGxlcixzLHUsYyk6Mj09PWEuc3RhdGUud3JhcCYmKGEuYWRsZXI9Z2QoYS5hZGxlcixzLHUsYykpLGEubmV4dF9pbis9dSxhLnRvdGFsX2luKz11LHUpLHQubG9va2FoZWFkKz1uLHQubG9va2FoZWFkK3QuaW5zZXJ0Pj0zKWZvcihvPXQuc3Ryc3RhcnQtdC5pbnNlcnQsdC5pbnNfaD10LndpbmRvd1tvXSx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbbysxXSkmdC5oYXNoX21hc2s7dC5pbnNlcnQmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbbyszLTFdKSZ0Lmhhc2hfbWFzayx0LnByZXZbbyZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT1vLG8rKyx0Lmluc2VydC0tLCEodC5sb29rYWhlYWQrdC5pbnNlcnQ8MykpOyk7fXdoaWxlKHQubG9va2FoZWFkPGJkJiYwIT09dC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBDZCh0LGUpe2Zvcih2YXIgbixyOzspe2lmKHQubG9va2FoZWFkPGJkKXtpZihJZCh0KSx0Lmxvb2thaGVhZDxiZCYmMD09PWUpcmV0dXJuIDE7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfWlmKG49MCx0Lmxvb2thaGVhZD49MyYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzMtMV0pJnQuaGFzaF9tYXNrLG49dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydCksMCE9PW4mJnQuc3Ryc3RhcnQtbjw9dC53X3NpemUtYmQmJih0Lm1hdGNoX2xlbmd0aD1CZCh0LG4pKSx0Lm1hdGNoX2xlbmd0aD49MylpZihyPV9kLl90cl90YWxseSh0LHQuc3Ryc3RhcnQtdC5tYXRjaF9zdGFydCx0Lm1hdGNoX2xlbmd0aC0zKSx0Lmxvb2thaGVhZC09dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg8PXQubWF4X2xhenlfbWF0Y2gmJnQubG9va2FoZWFkPj0zKXt0Lm1hdGNoX2xlbmd0aC0tO2Rve3Quc3Ryc3RhcnQrKyx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCszLTFdKSZ0Lmhhc2hfbWFzayxuPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnR9d2hpbGUoMCE9LS10Lm1hdGNoX2xlbmd0aCk7dC5zdHJzdGFydCsrfWVsc2UgdC5zdHJzdGFydCs9dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg9MCx0Lmluc19oPXQud2luZG93W3Quc3Ryc3RhcnRdLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzFdKSZ0Lmhhc2hfbWFzaztlbHNlIHI9X2QuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0XSksdC5sb29rYWhlYWQtLSx0LnN0cnN0YXJ0Kys7aWYociYmKEVkKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gdC5pbnNlcnQ9dC5zdHJzdGFydDwyP3Quc3Ryc3RhcnQ6Miw0PT09ZT8oRWQodCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/Mzo0KTp0Lmxhc3RfbGl0JiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBOZCh0LGUpe2Zvcih2YXIgbixyLGk7Oyl7aWYodC5sb29rYWhlYWQ8YmQpe2lmKElkKHQpLHQubG9va2FoZWFkPGJkJiYwPT09ZSlyZXR1cm4gMTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYobj0wLHQubG9va2FoZWFkPj0zJiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQrMy0xXSkmdC5oYXNoX21hc2ssbj10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSx0LnByZXZfbGVuZ3RoPXQubWF0Y2hfbGVuZ3RoLHQucHJldl9tYXRjaD10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoPTIsMCE9PW4mJnQucHJldl9sZW5ndGg8dC5tYXhfbGF6eV9tYXRjaCYmdC5zdHJzdGFydC1uPD10Lndfc2l6ZS1iZCYmKHQubWF0Y2hfbGVuZ3RoPUJkKHQsbiksdC5tYXRjaF9sZW5ndGg8PTUmJigxPT09dC5zdHJhdGVneXx8Mz09PXQubWF0Y2hfbGVuZ3RoJiZ0LnN0cnN0YXJ0LXQubWF0Y2hfc3RhcnQ+NDA5NikmJih0Lm1hdGNoX2xlbmd0aD0yKSksdC5wcmV2X2xlbmd0aD49MyYmdC5tYXRjaF9sZW5ndGg8PXQucHJldl9sZW5ndGgpe2k9dC5zdHJzdGFydCt0Lmxvb2thaGVhZC0zLHI9X2QuX3RyX3RhbGx5KHQsdC5zdHJzdGFydC0xLXQucHJldl9tYXRjaCx0LnByZXZfbGVuZ3RoLTMpLHQubG9va2FoZWFkLT10LnByZXZfbGVuZ3RoLTEsdC5wcmV2X2xlbmd0aC09Mjtkb3srK3Quc3Ryc3RhcnQ8PWkmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCszLTFdKSZ0Lmhhc2hfbWFzayxuPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tdC5wcmV2X2xlbmd0aCk7aWYodC5tYXRjaF9hdmFpbGFibGU9MCx0Lm1hdGNoX2xlbmd0aD0yLHQuc3Ryc3RhcnQrKyxyJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYodC5tYXRjaF9hdmFpbGFibGUpe2lmKChyPV9kLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydC0xXSkpJiZFZCh0LCExKSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLSwwPT09dC5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHQubWF0Y2hfYXZhaWxhYmxlPTEsdC5zdHJzdGFydCsrLHQubG9va2FoZWFkLS19cmV0dXJuIHQubWF0Y2hfYXZhaWxhYmxlJiYocj1fZC5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnQtMV0pLHQubWF0Y2hfYXZhaWxhYmxlPTApLHQuaW5zZXJ0PXQuc3Ryc3RhcnQ8Mj90LnN0cnN0YXJ0OjIsND09PWU/KEVkKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0PzM6NCk6dC5sYXN0X2xpdCYmKEVkKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUmQodCxlLG4scixpKXt0aGlzLmdvb2RfbGVuZ3RoPXQsdGhpcy5tYXhfbGF6eT1lLHRoaXMubmljZV9sZW5ndGg9bix0aGlzLm1heF9jaGFpbj1yLHRoaXMuZnVuYz1pfWZ1bmN0aW9uIGpkKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9OCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgZGQuQnVmMTYoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IGRkLkJ1ZjE2KDEyMiksdGhpcy5ibF90cmVlPW5ldyBkZC5CdWYxNig3OCksQWQodGhpcy5keW5fbHRyZWUpLEFkKHRoaXMuZHluX2R0cmVlKSxBZCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBkZC5CdWYxNigxNiksdGhpcy5oZWFwPW5ldyBkZC5CdWYxNig1NzMpLEFkKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBkZC5CdWYxNig1NzMpLEFkKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIERkKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyh0LnRvdGFsX2luPXQudG90YWxfb3V0PTAsdC5kYXRhX3R5cGU9MiwoZT10LnN0YXRlKS5wZW5kaW5nPTAsZS5wZW5kaW5nX291dD0wLGUud3JhcDwwJiYoZS53cmFwPS1lLndyYXApLGUuc3RhdHVzPWUud3JhcD80MjprZCx0LmFkbGVyPTI9PT1lLndyYXA/MDoxLGUubGFzdF9mbHVzaD0wLF9kLl90cl9pbml0KGUpLDApOk9kKHQseWQpfWZ1bmN0aW9uIFBkKHQpe3ZhciBlLG49RGQodCk7cmV0dXJuIDA9PT1uJiYoKGU9dC5zdGF0ZSkud2luZG93X3NpemU9MiplLndfc2l6ZSxBZChlLmhlYWQpLGUubWF4X2xhenlfbWF0Y2g9dWRbZS5sZXZlbF0ubWF4X2xhenksZS5nb29kX21hdGNoPXVkW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD11ZFtlLmxldmVsXS5uaWNlX2xlbmd0aCxlLm1heF9jaGFpbl9sZW5ndGg9dWRbZS5sZXZlbF0ubWF4X2NoYWluLGUuc3Ryc3RhcnQ9MCxlLmJsb2NrX3N0YXJ0PTAsZS5sb29rYWhlYWQ9MCxlLmluc2VydD0wLGUubWF0Y2hfbGVuZ3RoPWUucHJldl9sZW5ndGg9MixlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MCksbn1mdW5jdGlvbiBVZCh0LGUsbixyLGksbyl7aWYoIXQpcmV0dXJuIHlkO3ZhciBhPTE7aWYoLTE9PT1lJiYoZT02KSxyPDA/KGE9MCxyPS1yKTpyPjE1JiYoYT0yLHItPTE2KSxpPDF8fGk+OXx8OCE9PW58fHI8OHx8cj4xNXx8ZTwwfHxlPjl8fG88MHx8bz40KXJldHVybiBPZCh0LHlkKTs4PT09ciYmKHI9OSk7dmFyIHM9bmV3IGpkO3JldHVybiB0LnN0YXRlPXMscy5zdHJtPXQscy53cmFwPWEscy5nemhlYWQ9bnVsbCxzLndfYml0cz1yLHMud19zaXplPTE8PHMud19iaXRzLHMud19tYXNrPXMud19zaXplLTEscy5oYXNoX2JpdHM9aSs3LHMuaGFzaF9zaXplPTE8PHMuaGFzaF9iaXRzLHMuaGFzaF9tYXNrPXMuaGFzaF9zaXplLTEscy5oYXNoX3NoaWZ0PX5+KChzLmhhc2hfYml0cyszLTEpLzMpLHMud2luZG93PW5ldyBkZC5CdWY4KDIqcy53X3NpemUpLHMuaGVhZD1uZXcgZGQuQnVmMTYocy5oYXNoX3NpemUpLHMucHJldj1uZXcgZGQuQnVmMTYocy53X3NpemUpLHMubGl0X2J1ZnNpemU9MTw8aSs2LHMucGVuZGluZ19idWZfc2l6ZT00KnMubGl0X2J1ZnNpemUscy5wZW5kaW5nX2J1Zj1uZXcgZGQuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpLHMuZF9idWY9MSpzLmxpdF9idWZzaXplLHMubF9idWY9MypzLmxpdF9idWZzaXplLHMubGV2ZWw9ZSxzLnN0cmF0ZWd5PW8scy5tZXRob2Q9bixQZCh0KX11ZD1bbmV3IFJkKDAsMCwwLDAsKGZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzU7Zm9yKG4+dC5wZW5kaW5nX2J1Zl9zaXplLTUmJihuPXQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZih0Lmxvb2thaGVhZDw9MSl7aWYoSWQodCksMD09PXQubG9va2FoZWFkJiYwPT09ZSlyZXR1cm4gMTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9dC5zdHJzdGFydCs9dC5sb29rYWhlYWQsdC5sb29rYWhlYWQ9MDt2YXIgcj10LmJsb2NrX3N0YXJ0K247aWYoKDA9PT10LnN0cnN0YXJ0fHx0LnN0cnN0YXJ0Pj1yKSYmKHQubG9va2FoZWFkPXQuc3Ryc3RhcnQtcix0LnN0cnN0YXJ0PXIsRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxO2lmKHQuc3Ryc3RhcnQtdC5ibG9ja19zdGFydD49dC53X3NpemUtYmQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHQuaW5zZXJ0PTAsND09PWU/KEVkKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0PzM6NCk6KHQuc3Ryc3RhcnQ+dC5ibG9ja19zdGFydCYmKEVkKHQsITEpLHQuc3RybS5hdmFpbF9vdXQpLDEpfSkpLG5ldyBSZCg0LDQsOCw0LENkKSxuZXcgUmQoNCw1LDE2LDgsQ2QpLG5ldyBSZCg0LDYsMzIsMzIsQ2QpLG5ldyBSZCg0LDQsMTYsMTYsTmQpLG5ldyBSZCg4LDE2LDMyLDMyLE5kKSxuZXcgUmQoOCwxNiwxMjgsMTI4LE5kKSxuZXcgUmQoOCwzMiwxMjgsMjU2LE5kKSxuZXcgUmQoMzIsMTI4LDI1OCwxMDI0LE5kKSxuZXcgUmQoMzIsMjU4LDI1OCw0MDk2LE5kKV0sU2YuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWQodCxlLDgsMTUsOCwwKX0sU2YuZGVmbGF0ZUluaXQyPVVkLFNmLmRlZmxhdGVSZXNldD1QZCxTZi5kZWZsYXRlUmVzZXRLZWVwPURkLFNmLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5zdGF0ZT8yIT09dC5zdGF0ZS53cmFwP3lkOih0LnN0YXRlLmd6aGVhZD1lLDApOnlkfSxTZi5kZWZsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG87aWYoIXR8fCF0LnN0YXRlfHxlPjV8fGU8MClyZXR1cm4gdD9PZCh0LHlkKTp5ZDtpZihyPXQuc3RhdGUsIXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW58fHIuc3RhdHVzPT09U2QmJjQhPT1lKXJldHVybiBPZCh0LDA9PT10LmF2YWlsX291dD8tNTp5ZCk7aWYoci5zdHJtPXQsbj1yLmxhc3RfZmx1c2gsci5sYXN0X2ZsdXNoPWUsNDI9PT1yLnN0YXR1cylpZigyPT09ci53cmFwKXQuYWRsZXI9MCxMZChyLDMxKSxMZChyLDEzOSksTGQociw4KSxyLmd6aGVhZD8oTGQociwoci5nemhlYWQudGV4dD8xOjApKyhyLmd6aGVhZC5oY3JjPzI6MCkrKHIuZ3poZWFkLmV4dHJhPzQ6MCkrKHIuZ3poZWFkLm5hbWU/ODowKSsoci5nemhlYWQuY29tbWVudD8xNjowKSksTGQociwyNTUmci5nemhlYWQudGltZSksTGQocixyLmd6aGVhZC50aW1lPj44JjI1NSksTGQocixyLmd6aGVhZC50aW1lPj4xNiYyNTUpLExkKHIsci5nemhlYWQudGltZT4+MjQmMjU1KSxMZChyLDk9PT1yLmxldmVsPzI6ci5zdHJhdGVneT49Mnx8ci5sZXZlbDwyPzQ6MCksTGQociwyNTUmci5nemhlYWQub3MpLHIuZ3poZWFkLmV4dHJhJiZyLmd6aGVhZC5leHRyYS5sZW5ndGgmJihMZChyLDI1NSZyLmd6aGVhZC5leHRyYS5sZW5ndGgpLExkKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHIuZ3poZWFkLmhjcmMmJih0LmFkbGVyPWdkKHQuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmcsMCkpLHIuZ3ppbmRleD0wLHIuc3RhdHVzPTY5KTooTGQociwwKSxMZChyLDApLExkKHIsMCksTGQociwwKSxMZChyLDApLExkKHIsOT09PXIubGV2ZWw/MjpyLnN0cmF0ZWd5Pj0yfHxyLmxldmVsPDI/NDowKSxMZChyLDMpLHIuc3RhdHVzPWtkKTtlbHNle3ZhciBhPTgrKHIud19iaXRzLTg8PDQpPDw4O2F8PShyLnN0cmF0ZWd5Pj0yfHxyLmxldmVsPDI/MDpyLmxldmVsPDY/MTo2PT09ci5sZXZlbD8yOjMpPDw2LDAhPT1yLnN0cnN0YXJ0JiYoYXw9MzIpLGErPTMxLWElMzEsci5zdGF0dXM9a2QsemQocixhKSwwIT09ci5zdHJzdGFydCYmKHpkKHIsdC5hZGxlcj4+PjE2KSx6ZChyLDY1NTM1JnQuYWRsZXIpKSx0LmFkbGVyPTF9aWYoNjk9PT1yLnN0YXR1cylpZihyLmd6aGVhZC5leHRyYSl7Zm9yKGk9ci5wZW5kaW5nO3IuZ3ppbmRleDwoNjU1MzUmci5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKHIucGVuZGluZyE9PXIucGVuZGluZ19idWZfc2l6ZXx8KHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLFRkKHQpLGk9ci5wZW5kaW5nLHIucGVuZGluZyE9PXIucGVuZGluZ19idWZfc2l6ZSkpOylMZChyLDI1NSZyLmd6aGVhZC5leHRyYVtyLmd6aW5kZXhdKSxyLmd6aW5kZXgrKztyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSxyLmd6aW5kZXg9PT1yLmd6aGVhZC5leHRyYS5sZW5ndGgmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz03Myl9ZWxzZSByLnN0YXR1cz03MztpZig3Mz09PXIuc3RhdHVzKWlmKHIuZ3poZWFkLm5hbWUpe2k9ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLFRkKHQpLGk9ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe289MTticmVha31vPXIuZ3ppbmRleDxyLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmci5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKTowLExkKHIsbyl9d2hpbGUoMCE9PW8pO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLDA9PT1vJiYoci5nemluZGV4PTAsci5zdGF0dXM9OTEpfWVsc2Ugci5zdGF0dXM9OTE7aWYoOTE9PT1yLnN0YXR1cylpZihyLmd6aGVhZC5jb21tZW50KXtpPXIucGVuZGluZztkb3tpZihyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSxUZCh0KSxpPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKXtvPTE7YnJlYWt9bz1yLmd6aW5kZXg8ci5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JnIuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChyLmd6aW5kZXgrKyk6MCxMZChyLG8pfXdoaWxlKDAhPT1vKTtyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSwwPT09byYmKHIuc3RhdHVzPXdkKX1lbHNlIHIuc3RhdHVzPXdkO2lmKHIuc3RhdHVzPT09d2QmJihyLmd6aGVhZC5oY3JjPyhyLnBlbmRpbmcrMj5yLnBlbmRpbmdfYnVmX3NpemUmJlRkKHQpLHIucGVuZGluZysyPD1yLnBlbmRpbmdfYnVmX3NpemUmJihMZChyLDI1NSZ0LmFkbGVyKSxMZChyLHQuYWRsZXI+PjgmMjU1KSx0LmFkbGVyPTAsci5zdGF0dXM9a2QpKTpyLnN0YXR1cz1rZCksMCE9PXIucGVuZGluZyl7aWYoVGQodCksMD09PXQuYXZhaWxfb3V0KXJldHVybiByLmxhc3RfZmx1c2g9LTEsMH1lbHNlIGlmKDA9PT10LmF2YWlsX2luJiZ4ZChlKTw9eGQobikmJjQhPT1lKXJldHVybiBPZCh0LC01KTtpZihyLnN0YXR1cz09PVNkJiYwIT09dC5hdmFpbF9pbilyZXR1cm4gT2QodCwtNSk7aWYoMCE9PXQuYXZhaWxfaW58fDAhPT1yLmxvb2thaGVhZHx8MCE9PWUmJnIuc3RhdHVzIT09U2Qpe3ZhciBzPTI9PT1yLnN0cmF0ZWd5P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuOzspe2lmKDA9PT10Lmxvb2thaGVhZCYmKElkKHQpLDA9PT10Lmxvb2thaGVhZCkpe2lmKDA9PT1lKXJldHVybiAxO2JyZWFrfWlmKHQubWF0Y2hfbGVuZ3RoPTAsbj1fZC5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKyxuJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiB0Lmluc2VydD0wLDQ9PT1lPyhFZCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD8zOjQpOnQubGFzdF9saXQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/MToyfShyLGUpOjM9PT1yLnN0cmF0ZWd5P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsaSxvLGE9dC53aW5kb3c7Oyl7aWYodC5sb29rYWhlYWQ8PXZkKXtpZihJZCh0KSx0Lmxvb2thaGVhZDw9dmQmJjA9PT1lKXJldHVybiAxO2lmKDA9PT10Lmxvb2thaGVhZClicmVha31pZih0Lm1hdGNoX2xlbmd0aD0wLHQubG9va2FoZWFkPj0zJiZ0LnN0cnN0YXJ0PjAmJihyPWFbaT10LnN0cnN0YXJ0LTFdKT09PWFbKytpXSYmcj09PWFbKytpXSYmcj09PWFbKytpXSl7bz10LnN0cnN0YXJ0K3ZkO2Rve313aGlsZShyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZpPG8pO3QubWF0Y2hfbGVuZ3RoPXZkLShvLWkpLHQubWF0Y2hfbGVuZ3RoPnQubG9va2FoZWFkJiYodC5tYXRjaF9sZW5ndGg9dC5sb29rYWhlYWQpfWlmKHQubWF0Y2hfbGVuZ3RoPj0zPyhuPV9kLl90cl90YWxseSh0LDEsdC5tYXRjaF9sZW5ndGgtMyksdC5sb29rYWhlYWQtPXQubWF0Y2hfbGVuZ3RoLHQuc3Ryc3RhcnQrPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPTApOihuPV9kLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrKSxuJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiB0Lmluc2VydD0wLDQ9PT1lPyhFZCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD8zOjQpOnQubGFzdF9saXQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/MToyfShyLGUpOnVkW3IubGV2ZWxdLmZ1bmMocixlKTtpZigzIT09cyYmNCE9PXN8fChyLnN0YXR1cz1TZCksMT09PXN8fDM9PT1zKXJldHVybiAwPT09dC5hdmFpbF9vdXQmJihyLmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PXMmJigxPT09ZT9fZC5fdHJfYWxpZ24ocik6NSE9PWUmJihfZC5fdHJfc3RvcmVkX2Jsb2NrKHIsMCwwLCExKSwzPT09ZSYmKEFkKHIuaGVhZCksMD09PXIubG9va2FoZWFkJiYoci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSkpLFRkKHQpLDA9PT10LmF2YWlsX291dCkpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSwwfXJldHVybiA0IT09ZT8wOnIud3JhcDw9MD8xOigyPT09ci53cmFwPyhMZChyLDI1NSZ0LmFkbGVyKSxMZChyLHQuYWRsZXI+PjgmMjU1KSxMZChyLHQuYWRsZXI+PjE2JjI1NSksTGQocix0LmFkbGVyPj4yNCYyNTUpLExkKHIsMjU1JnQudG90YWxfaW4pLExkKHIsdC50b3RhbF9pbj4+OCYyNTUpLExkKHIsdC50b3RhbF9pbj4+MTYmMjU1KSxMZChyLHQudG90YWxfaW4+PjI0JjI1NSkpOih6ZChyLHQuYWRsZXI+Pj4xNiksemQociw2NTUzNSZ0LmFkbGVyKSksVGQodCksci53cmFwPjAmJihyLndyYXA9LXIud3JhcCksMCE9PXIucGVuZGluZz8wOjEpfSxTZi5kZWZsYXRlRW5kPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPzQyIT09KGU9dC5zdGF0ZS5zdGF0dXMpJiY2OSE9PWUmJjczIT09ZSYmOTEhPT1lJiZlIT09d2QmJmUhPT1rZCYmZSE9PVNkP09kKHQseWQpOih0LnN0YXRlPW51bGwsZT09PWtkP09kKHQsLTMpOjApOnlkfSxTZi5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyxjLGwsdT1lLmxlbmd0aDtpZighdHx8IXQuc3RhdGUpcmV0dXJuIHlkO2lmKDI9PT0obz0obj10LnN0YXRlKS53cmFwKXx8MT09PW8mJjQyIT09bi5zdGF0dXN8fG4ubG9va2FoZWFkKXJldHVybiB5ZDtmb3IoMT09PW8mJih0LmFkbGVyPXBkKHQuYWRsZXIsZSx1LDApKSxuLndyYXA9MCx1Pj1uLndfc2l6ZSYmKDA9PT1vJiYoQWQobi5oZWFkKSxuLnN0cnN0YXJ0PTAsbi5ibG9ja19zdGFydD0wLG4uaW5zZXJ0PTApLGw9bmV3IGRkLkJ1Zjgobi53X3NpemUpLGRkLmFycmF5U2V0KGwsZSx1LW4ud19zaXplLG4ud19zaXplLDApLGU9bCx1PW4ud19zaXplKSxhPXQuYXZhaWxfaW4scz10Lm5leHRfaW4sYz10LmlucHV0LHQuYXZhaWxfaW49dSx0Lm5leHRfaW49MCx0LmlucHV0PWUsSWQobik7bi5sb29rYWhlYWQ+PTM7KXtyPW4uc3Ryc3RhcnQsaT1uLmxvb2thaGVhZC0yO2Rve24uaW5zX2g9KG4uaW5zX2g8PG4uaGFzaF9zaGlmdF5uLndpbmRvd1tyKzMtMV0pJm4uaGFzaF9tYXNrLG4ucHJldltyJm4ud19tYXNrXT1uLmhlYWRbbi5pbnNfaF0sbi5oZWFkW24uaW5zX2hdPXIscisrfXdoaWxlKC0taSk7bi5zdHJzdGFydD1yLG4ubG9va2FoZWFkPTIsSWQobil9cmV0dXJuIG4uc3Ryc3RhcnQrPW4ubG9va2FoZWFkLG4uYmxvY2tfc3RhcnQ9bi5zdHJzdGFydCxuLmluc2VydD1uLmxvb2thaGVhZCxuLmxvb2thaGVhZD0wLG4ubWF0Y2hfbGVuZ3RoPW4ucHJldl9sZW5ndGg9MixuLm1hdGNoX2F2YWlsYWJsZT0wLHQubmV4dF9pbj1zLHQuaW5wdXQ9Yyx0LmF2YWlsX2luPWEsbi53cmFwPW8sMH0sU2YuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBGZD17fSxNZD13ZixaZD0hMCxKZD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2gobmcpe1pkPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKG5nKXtKZD0hMX1mb3IodmFyIEhkPW5ldyBNZC5CdWY4KDI1NiksV2Q9MDtXZDwyNTY7V2QrKylIZFtXZF09V2Q+PTI1Mj82OldkPj0yNDg/NTpXZD49MjQwPzQ6V2Q+PTIyND8zOldkPj0xOTI/MjoxO2Z1bmN0aW9uIEtkKHQsZSl7aWYoZTw2NTUzNCYmKHQuc3ViYXJyYXkmJkpkfHwhdC5zdWJhcnJheSYmWmQpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTWQuc2hyaW5rQnVmKHQsZSkpO2Zvcih2YXIgbj0iIixyPTA7cjxlO3IrKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pO3JldHVybiBufUhkWzI1NF09SGRbMjU0XT0xLEZkLnN0cmluZzJidWY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhPXQubGVuZ3RoLHM9MDtmb3IoaT0wO2k8YTtpKyspNTUyOTY9PSg2NDUxMiYobj10LmNoYXJDb2RlQXQoaSkpKSYmaSsxPGEmJjU2MzIwPT0oNjQ1MTImKHI9dC5jaGFyQ29kZUF0KGkrMSkpKSYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksaSsrKSxzKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2ZvcihlPW5ldyBNZC5CdWY4KHMpLG89MCxpPTA7bzxzO2krKyk1NTI5Nj09KDY0NTEyJihuPXQuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYocj10LmNoYXJDb2RlQXQoaSsxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxpKyspLG48MTI4P2VbbysrXT1uOm48MjA0OD8oZVtvKytdPTE5MnxuPj4+NixlW28rK109MTI4fDYzJm4pOm48NjU1MzY/KGVbbysrXT0yMjR8bj4+PjEyLGVbbysrXT0xMjh8bj4+PjYmNjMsZVtvKytdPTEyOHw2MyZuKTooZVtvKytdPTI0MHxuPj4+MTgsZVtvKytdPTEyOHxuPj4+MTImNjMsZVtvKytdPTEyOHxuPj4+NiY2MyxlW28rK109MTI4fDYzJm4pO3JldHVybiBlfSxGZC5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBLZCh0LHQubGVuZ3RoKX0sRmQuYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1kLkJ1ZjgodC5sZW5ndGgpLG49MCxyPWUubGVuZ3RoO248cjtuKyspZVtuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIGV9LEZkLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhPWV8fHQubGVuZ3RoLHM9bmV3IEFycmF5KDIqYSk7Zm9yKHI9MCxuPTA7bjxhOylpZigoaT10W24rK10pPDEyOClzW3IrK109aTtlbHNlIGlmKChvPUhkW2ldKT40KXNbcisrXT02NTUzMyxuKz1vLTE7ZWxzZXtmb3IoaSY9Mj09PW8/MzE6Mz09PW8/MTU6NztvPjEmJm48YTspaT1pPDw2fDYzJnRbbisrXSxvLS07bz4xP3NbcisrXT02NTUzMzppPDY1NTM2P3NbcisrXT1pOihpLT02NTUzNixzW3IrK109NTUyOTZ8aT4+MTAmMTAyMyxzW3IrK109NTYzMjB8MTAyMyZpKX1yZXR1cm4gS2QocyxyKX0sRmQudXRmOGJvcmRlcj1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcigoZT1lfHx0Lmxlbmd0aCk+dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxuPWUtMTtuPj0wJiYxMjg9PSgxOTImdFtuXSk7KW4tLTtyZXR1cm4gbjwwfHwwPT09bj9lOm4rSGRbdFtuXV0+ZT9uOmV9O3ZhciBHZD1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9LFZkPVNmLFlkPXdmLFhkPUZkLHFkPWZkLCRkPUdkLFFkPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdF8odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdF8pKXJldHVybiBuZXcgdF8odCk7dGhpcy5vcHRpb25zPVlkLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+MD9lLndpbmRvd0JpdHM9LWUud2luZG93Qml0czplLmd6aXAmJmUud2luZG93Qml0cz4wJiZlLndpbmRvd0JpdHM8MTYmJihlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyAkZCx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIG49VmQuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxlLmxldmVsLGUubWV0aG9kLGUud2luZG93Qml0cyxlLm1lbUxldmVsLGUuc3RyYXRlZ3kpO2lmKDAhPT1uKXRocm93IG5ldyBFcnJvcihxZFtuXSk7aWYoZS5oZWFkZXImJlZkLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGUuaGVhZGVyKSxlLmRpY3Rpb25hcnkpe3ZhciByO2lmKHI9InN0cmluZyI9PXR5cGVvZiBlLmRpY3Rpb25hcnk/WGQuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1RZC5jYWxsKGUuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KTplLmRpY3Rpb25hcnksMCE9PShuPVZkLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxyKSkpdGhyb3cgbmV3IEVycm9yKHFkW25dKTt0aGlzLl9kaWN0X3NldD0hMH19ZnVuY3Rpb24gZV8odCxlKXt2YXIgbj1uZXcgdF8oZSk7aWYobi5wdXNoKHQsITApLG4uZXJyKXRocm93IG4ubXNnfHxxZFtuLmVycl07cmV0dXJuIG4ucmVzdWx0fXRfLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRoaXMuc3RybSxvPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtyPWU9PT1+fmU/ZTohMD09PWU/NDowLCJzdHJpbmciPT10eXBlb2YgdD9pLmlucHV0PVhkLnN0cmluZzJidWYodCk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVFkLmNhbGwodCk/aS5pbnB1dD1uZXcgVWludDhBcnJheSh0KTppLmlucHV0PXQsaS5uZXh0X2luPTAsaS5hdmFpbF9pbj1pLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09aS5hdmFpbF9vdXQmJihpLm91dHB1dD1uZXcgWWQuQnVmOChvKSxpLm5leHRfb3V0PTAsaS5hdmFpbF9vdXQ9byksMSE9PShuPVZkLmRlZmxhdGUoaSxyKSkmJjAhPT1uKXJldHVybiB0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsITE7MCE9PWkuYXZhaWxfb3V0JiYoMCE9PWkuYXZhaWxfaW58fDQhPT1yJiYyIT09cil8fCgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLm9uRGF0YShYZC5idWYyYmluc3RyaW5nKFlkLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKFlkLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpfXdoaWxlKChpLmF2YWlsX2luPjB8fDA9PT1pLmF2YWlsX291dCkmJjEhPT1uKTtyZXR1cm4gND09PXI/KG49VmQuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQobiksdGhpcy5lbmRlZD0hMCwwPT09bik6MiE9PXJ8fCh0aGlzLm9uRW5kKDApLGkuYXZhaWxfb3V0PTAsITApfSx0Xy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuY2h1bmtzLnB1c2godCl9LHRfLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXswPT09dCYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVlkLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGtmLkRlZmxhdGU9dF8sa2YuZGVmbGF0ZT1lXyxrZi5kZWZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLnJhdz0hMCxlXyh0LGUpfSxrZi5nemlwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLmd6aXA9ITAsZV8odCxlKX07dmFyIG5fPXt9LHJfPW90LGlfPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBMdXx8QXUodCwiZmxhZ3MiKXx8IVR1KEx1LHQpP2U6eHUoRXUsdCl9LG9fPVJlZ0V4cC5wcm90b3R5cGUsYV89bigoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1vX3x8cl8ob18sdCk/aV8odCk6dC5mbGFnc30pKSxzXz17fSxjXz13ZixsXz0xNSx1Xz1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGhfPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sZl89WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLGRfPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0sX189d2YscF89Y2QsZ189aGQsbV89ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaCxmLGQsXyxwLGcsbSx5LHYsYix3LGssUyxPLHgsQTtuPXQuc3RhdGUscj10Lm5leHRfaW4seD10LmlucHV0LGk9cisodC5hdmFpbF9pbi01KSxvPXQubmV4dF9vdXQsQT10Lm91dHB1dCxhPW8tKGUtdC5hdmFpbF9vdXQpLHM9bysodC5hdmFpbF9vdXQtMjU3KSxjPW4uZG1heCxsPW4ud3NpemUsdT1uLndoYXZlLGg9bi53bmV4dCxmPW4ud2luZG93LGQ9bi5ob2xkLF89bi5iaXRzLHA9bi5sZW5jb2RlLGc9bi5kaXN0Y29kZSxtPSgxPDxuLmxlbmJpdHMpLTEseT0oMTw8bi5kaXN0Yml0cyktMTt0OmRve188MTUmJihkKz14W3IrK108PF8sXys9OCxkKz14W3IrK108PF8sXys9OCksdj1wW2QmbV07ZTpmb3IoOzspe2lmKGQ+Pj49Yj12Pj4+MjQsXy09YiwwPT09KGI9dj4+PjE2JjI1NSkpQVtvKytdPTY1NTM1JnY7ZWxzZXtpZighKDE2JmIpKXtpZig2NCZiKXtpZigzMiZiKXtuLm1vZGU9MTI7YnJlYWsgdH10Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9MzA7YnJlYWsgdH12PXBbKDY1NTM1JnYpKyhkJigxPDxiKS0xKV07Y29udGludWUgZX1mb3Iodz02NTUzNSZ2LChiJj0xNSkmJihfPGImJihkKz14W3IrK108PF8sXys9OCksdys9ZCYoMTw8YiktMSxkPj4+PWIsXy09YiksXzwxNSYmKGQrPXhbcisrXTw8XyxfKz04LGQrPXhbcisrXTw8XyxfKz04KSx2PWdbZCZ5XTs7KXtpZihkPj4+PWI9dj4+PjI0LF8tPWIsMTYmKGI9dj4+PjE2JjI1NSkpe2lmKGs9NjU1MzUmdixfPChiJj0xNSkmJihkKz14W3IrK108PF8sKF8rPTgpPGImJihkKz14W3IrK108PF8sXys9OCkpLChrKz1kJigxPDxiKS0xKT5jKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT0zMDticmVhayB0fWlmKGQ+Pj49YixfLT1iLGs+KGI9by1hKSl7aWYoKGI9ay1iKT51JiZuLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPTMwO2JyZWFrIHR9aWYoUz0wLE89ZiwwPT09aCl7aWYoUys9bC1iLGI8dyl7dy09Yjtkb3tBW28rK109ZltTKytdfXdoaWxlKC0tYik7Uz1vLWssTz1BfX1lbHNlIGlmKGg8Yil7aWYoUys9bCtoLWIsKGItPWgpPHcpe3ctPWI7ZG97QVtvKytdPWZbUysrXX13aGlsZSgtLWIpO2lmKFM9MCxoPHcpe3ctPWI9aDtkb3tBW28rK109ZltTKytdfXdoaWxlKC0tYik7Uz1vLWssTz1BfX19ZWxzZSBpZihTKz1oLWIsYjx3KXt3LT1iO2Rve0FbbysrXT1mW1MrK119d2hpbGUoLS1iKTtTPW8tayxPPUF9Zm9yKDt3PjI7KUFbbysrXT1PW1MrK10sQVtvKytdPU9bUysrXSxBW28rK109T1tTKytdLHctPTM7dyYmKEFbbysrXT1PW1MrK10sdz4xJiYoQVtvKytdPU9bUysrXSkpfWVsc2V7Uz1vLWs7ZG97QVtvKytdPUFbUysrXSxBW28rK109QVtTKytdLEFbbysrXT1BW1MrK10sdy09M313aGlsZSh3PjIpO3cmJihBW28rK109QVtTKytdLHc+MSYmKEFbbysrXT1BW1MrK10pKX1icmVha31pZig2NCZiKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9MzA7YnJlYWsgdH12PWdbKDY1NTM1JnYpKyhkJigxPDxiKS0xKV19fWJyZWFrfX13aGlsZShyPGkmJm88cyk7ci09dz1fPj4zLGQmPSgxPDwoXy09dzw8MykpLTEsdC5uZXh0X2luPXIsdC5uZXh0X291dD1vLHQuYXZhaWxfaW49cjxpP2ktcis1OjUtKHItaSksdC5hdmFpbF9vdXQ9bzxzP3MtbysyNTc6MjU3LShvLXMpLG4uaG9sZD1kLG4uYml0cz1ffSx5Xz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3ZhciBjLGwsdSxoLGYsZCxfLHAsZyxtPXMuYml0cyx5PTAsdj0wLGI9MCx3PTAsaz0wLFM9MCxPPTAseD0wLEE9MCxUPTAsRT1udWxsLEw9MCx6PW5ldyBjXy5CdWYxNigxNiksQj1uZXcgY18uQnVmMTYoMTYpLEk9bnVsbCxDPTA7Zm9yKHk9MDt5PD1sXzt5Kyspelt5XT0wO2Zvcih2PTA7djxyO3YrKyl6W2Vbbit2XV0rKztmb3Ioaz1tLHc9bF87dz49MSYmMD09PXpbd107dy0tKTtpZihrPncmJihrPXcpLDA9PT13KXJldHVybiBpW28rK109MjA5NzE1MjAsaVtvKytdPTIwOTcxNTIwLHMuYml0cz0xLDA7Zm9yKGI9MTtiPHcmJjA9PT16W2JdO2IrKyk7Zm9yKGs8YiYmKGs9YikseD0xLHk9MTt5PD1sXzt5KyspaWYoeDw8PTEsKHgtPXpbeV0pPDApcmV0dXJuLTE7aWYoeD4wJiYoMD09PXR8fDEhPT13KSlyZXR1cm4tMTtmb3IoQlsxXT0wLHk9MTt5PGxfO3krKylCW3krMV09Qlt5XSt6W3ldO2Zvcih2PTA7djxyO3YrKykwIT09ZVtuK3ZdJiYoYVtCW2Vbbit2XV0rK109dik7aWYoMD09PXQ/KEU9ST1hLGQ9MTkpOjE9PT10PyhFPXVfLEwtPTI1NyxJPWhfLEMtPTI1NyxkPTI1Nik6KEU9Zl8sST1kXyxkPS0xKSxUPTAsdj0wLHk9YixmPW8sUz1rLE89MCx1PS0xLGg9KEE9MTw8ayktMSwxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtmb3IoOzspe189eS1PLGFbdl08ZD8ocD0wLGc9YVt2XSk6YVt2XT5kPyhwPUlbQythW3ZdXSxnPUVbTCthW3ZdXSk6KHA9OTYsZz0wKSxjPTE8PHktTyxiPWw9MTw8Uztkb3tpW2YrKFQ+Pk8pKyhsLT1jKV09Xzw8MjR8cDw8MTZ8Z313aGlsZSgwIT09bCk7Zm9yKGM9MTw8eS0xO1QmYzspYz4+PTE7aWYoMCE9PWM/KFQmPWMtMSxUKz1jKTpUPTAsdisrLDA9PS0telt5XSl7aWYoeT09PXcpYnJlYWs7eT1lW24rYVt2XV19aWYoeT5rJiYoVCZoKSE9PXUpe2ZvcigwPT09TyYmKE89ayksZis9Yix4PTE8PChTPXktTyk7UytPPHcmJiEoKHgtPXpbUytPXSk8PTApOylTKysseDw8PTE7aWYoQSs9MTw8UywxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtpW3U9VCZoXT1rPDwyNHxTPDwxNnxmLW99fXJldHVybiAwIT09VCYmKGlbZitUXT15LU88PDI0fDY0PDwxNikscy5iaXRzPWssMH0sdl89LTIsYl89MTIsd189MzA7ZnVuY3Rpb24ga18odCl7cmV0dXJuKHQ+Pj4yNCYyNTUpKyh0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ0KTw8OCkrKCgyNTUmdCk8PDI0KX1mdW5jdGlvbiBTXygpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgX18uQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IF9fLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIE9fKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUsdC50b3RhbF9pbj10LnRvdGFsX291dD1lLnRvdGFsPTAsdC5tc2c9IiIsZS53cmFwJiYodC5hZGxlcj0xJmUud3JhcCksZS5tb2RlPTEsZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZG1heD0zMjc2OCxlLmhlYWQ9bnVsbCxlLmhvbGQ9MCxlLmJpdHM9MCxlLmxlbmNvZGU9ZS5sZW5keW49bmV3IF9fLkJ1ZjMyKDg1MiksZS5kaXN0Y29kZT1lLmRpc3RkeW49bmV3IF9fLkJ1ZjMyKDU5MiksZS5zYW5lPTEsZS5iYWNrPS0xLDApOnZffWZ1bmN0aW9uIHhfKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPygoZT10LnN0YXRlKS53c2l6ZT0wLGUud2hhdmU9MCxlLnduZXh0PTAsT18odCkpOnZffWZ1bmN0aW9uIEFfKHQsZSl7dmFyIG4scjtyZXR1cm4gdCYmdC5zdGF0ZT8ocj10LnN0YXRlLGU8MD8obj0wLGU9LWUpOihuPTErKGU+PjQpLGU8NDgmJihlJj0xNSkpLGUmJihlPDh8fGU+MTUpP3ZfOihudWxsIT09ci53aW5kb3cmJnIud2JpdHMhPT1lJiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz1lLHhfKHQpKSk6dl99ZnVuY3Rpb24gVF8odCxlKXt2YXIgbixyO3JldHVybiB0PyhyPW5ldyBTXyx0LnN0YXRlPXIsci53aW5kb3c9bnVsbCwwIT09KG49QV8odCxlKSkmJih0LnN0YXRlPW51bGwpLG4pOnZffXZhciBFXyxMXyx6Xz0hMDtmdW5jdGlvbiBCXyh0KXtpZih6Xyl7dmFyIGU7Zm9yKEVfPW5ldyBfXy5CdWYzMig1MTIpLExfPW5ldyBfXy5CdWYzMigzMiksZT0wO2U8MTQ0Oyl0LmxlbnNbZSsrXT04O2Zvcig7ZTwyNTY7KXQubGVuc1tlKytdPTk7Zm9yKDtlPDI4MDspdC5sZW5zW2UrK109Nztmb3IoO2U8Mjg4Oyl0LmxlbnNbZSsrXT04O2Zvcih5XygxLHQubGVucywwLDI4OCxFXywwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7eV8oMix0LmxlbnMsMCwzMixMXywwLHQud29yayx7Yml0czo1fSksel89ITF9dC5sZW5jb2RlPUVfLHQubGVuYml0cz05LHQuZGlzdGNvZGU9TF8sdC5kaXN0Yml0cz01fWZ1bmN0aW9uIElfKHQsZSxuLHIpe3ZhciBpLG89dC5zdGF0ZTtyZXR1cm4gbnVsbD09PW8ud2luZG93JiYoby53c2l6ZT0xPDxvLndiaXRzLG8ud25leHQ9MCxvLndoYXZlPTAsby53aW5kb3c9bmV3IF9fLkJ1Zjgoby53c2l6ZSkpLHI+PW8ud3NpemU/KF9fLmFycmF5U2V0KG8ud2luZG93LGUsbi1vLndzaXplLG8ud3NpemUsMCksby53bmV4dD0wLG8ud2hhdmU9by53c2l6ZSk6KChpPW8ud3NpemUtby53bmV4dCk+ciYmKGk9ciksX18uYXJyYXlTZXQoby53aW5kb3csZSxuLXIsaSxvLnduZXh0KSwoci09aSk/KF9fLmFycmF5U2V0KG8ud2luZG93LGUsbi1yLHIsMCksby53bmV4dD1yLG8ud2hhdmU9by53c2l6ZSk6KG8ud25leHQrPWksby53bmV4dD09PW8ud3NpemUmJihvLnduZXh0PTApLG8ud2hhdmU8by53c2l6ZSYmKG8ud2hhdmUrPWkpKSksMH1zXy5pbmZsYXRlUmVzZXQ9eF8sc18uaW5mbGF0ZVJlc2V0Mj1BXyxzXy5pbmZsYXRlUmVzZXRLZWVwPU9fLHNfLmluZmxhdGVJbml0PWZ1bmN0aW9uKHQpe3JldHVybiBUXyh0LDE1KX0sc18uaW5mbGF0ZUluaXQyPVRfLHNfLmluZmxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaCxmLGQsXyxwLGcsbSx5LHYsYix3LGssUyxPLHgsQT0wLFQ9bmV3IF9fLkJ1ZjgoNCksRT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXR8fCF0LnN0YXRlfHwhdC5vdXRwdXR8fCF0LmlucHV0JiYwIT09dC5hdmFpbF9pbilyZXR1cm4gdl87KG49dC5zdGF0ZSkubW9kZT09PWJfJiYobi5tb2RlPTEzKSxhPXQubmV4dF9vdXQsaT10Lm91dHB1dCxjPXQuYXZhaWxfb3V0LG89dC5uZXh0X2luLHI9dC5pbnB1dCxzPXQuYXZhaWxfaW4sbD1uLmhvbGQsdT1uLmJpdHMsaD1zLGY9YyxTPTA7dDpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSAxOmlmKDA9PT1uLndyYXApe24ubW9kZT0xMzticmVha31mb3IoO3U8MTY7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZigyJm4ud3JhcCYmMzU2MTU9PT1sKXtuLmNoZWNrPTAsVFswXT0yNTUmbCxUWzFdPWw+Pj44JjI1NSxuLmNoZWNrPWdfKG4uY2hlY2ssVCwyLDApLGw9MCx1PTAsbi5tb2RlPTI7YnJlYWt9aWYobi5mbGFncz0wLG4uaGVhZCYmKG4uaGVhZC5kb25lPSExKSwhKDEmbi53cmFwKXx8KCgoMjU1JmwpPDw4KSsobD4+OCkpJTMxKXt0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWlmKDghPSgxNSZsKSl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9d187YnJlYWt9aWYodS09NCxrPTgrKDE1JihsPj4+PTQpKSwwPT09bi53Yml0cyluLndiaXRzPWs7ZWxzZSBpZihrPm4ud2JpdHMpe3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9d187YnJlYWt9bi5kbWF4PTE8PGssdC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPTUxMiZsPzEwOmJfLGw9MCx1PTA7YnJlYWs7Y2FzZSAyOmZvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKG4uZmxhZ3M9bCw4IT0oMjU1JmFfKG4pKSl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9d187YnJlYWt9aWYoNTczNDQmYV8obikpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT13XzticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1sPj44JjEpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9MztjYXNlIDM6Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5oZWFkJiYobi5oZWFkLnRpbWU9bCksNTEyJmFfKG4pJiYoVFswXT0yNTUmbCxUWzFdPWw+Pj44JjI1NSxUWzJdPWw+Pj4xNiYyNTUsVFszXT1sPj4+MjQmMjU1LG4uY2hlY2s9Z18obi5jaGVjayxULDQsMCkpLGw9MCx1PTAsbi5tb2RlPTQ7Y2FzZSA0OmZvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fW4uaGVhZCYmKG4uaGVhZC54ZmxhZ3M9MjU1Jmwsbi5oZWFkLm9zPWw+PjgpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZhXyhuKSl7Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5ndGg9bCxuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPWwpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5leHRyYT1udWxsKTtuLm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZhXyhuKSYmKChkPW4ubGVuZ3RoKT5zJiYoZD1zKSxkJiYobi5oZWFkJiYoaz1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgQXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLF9fLmFycmF5U2V0KG4uaGVhZC5leHRyYSxyLG8sZCxrKSksNTEyJmFfKG4pJiYobi5jaGVjaz1nXyhuLmNoZWNrLHIsZCxvKSkscy09ZCxvKz1kLG4ubGVuZ3RoLT1kKSxuLmxlbmd0aCkpYnJlYWsgdDtuLmxlbmd0aD0wLG4ubW9kZT03O2Nhc2UgNzppZigyMDQ4JmFfKG4pKXtpZigwPT09cylicmVhayB0O2Q9MDtkb3trPXJbbytkKytdLG4uaGVhZCYmayYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSl9d2hpbGUoayYmZDxzKTtpZig1MTImYV8obikmJihuLmNoZWNrPWdfKG4uY2hlY2sscixkLG8pKSxzLT1kLG8rPWQsaylicmVhayB0fWVsc2Ugbi5oZWFkJiYobi5oZWFkLm5hbWU9bnVsbCk7bi5sZW5ndGg9MCxuLm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZhXyhuKSl7aWYoMD09PXMpYnJlYWsgdDtkPTA7ZG97az1yW28rZCsrXSxuLmhlYWQmJmsmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaykpfXdoaWxlKGsmJmQ8cyk7aWYoNTEyJmFfKG4pJiYobi5jaGVjaz1nXyhuLmNoZWNrLHIsZCxvKSkscy09ZCxvKz1kLGspYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT05O2Nhc2UgOTppZig1MTImYV8obikpe2Zvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKGwhPT0oNjU1MzUmbi5jaGVjaykpe3QubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixuLm1vZGU9d187YnJlYWt9bD0wLHU9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1hXyhuKT4+OSYxLG4uaGVhZC5kb25lPSEwKSx0LmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9Yl87YnJlYWs7Y2FzZSAxMDpmb3IoO3U8MzI7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH10LmFkbGVyPW4uY2hlY2s9a18obCksbD0wLHU9MCxuLm1vZGU9MTE7Y2FzZSAxMTppZigwPT09bi5oYXZlZGljdClyZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWMsdC5uZXh0X2luPW8sdC5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LDI7dC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPWJfO2Nhc2UgYl86aWYoNT09PWV8fDY9PT1lKWJyZWFrIHQ7Y2FzZSAxMzppZihuLmxhc3Qpe2w+Pj49NyZ1LHUtPTcmdSxuLm1vZGU9Mjc7YnJlYWt9Zm9yKDt1PDM7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1zd2l0Y2gobi5sYXN0PTEmbCx1LT0xLDMmKGw+Pj49MSkpe2Nhc2UgMDpuLm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKEJfKG4pLG4ubW9kZT0yMCw2PT09ZSl7bD4+Pj0yLHUtPTI7YnJlYWsgdH1icmVhaztjYXNlIDI6bi5tb2RlPTE3O2JyZWFrO2Nhc2UgMzp0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9d199bD4+Pj0yLHUtPTI7YnJlYWs7Y2FzZSAxNDpmb3IobD4+Pj03JnUsdS09NyZ1O3U8MzI7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZigoNjU1MzUmbCkhPShsPj4+MTZeNjU1MzUpKXt0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsbi5tb2RlPXdfO2JyZWFrfWlmKG4ubGVuZ3RoPTY1NTM1JmwsbD0wLHU9MCxuLm1vZGU9MTUsNj09PWUpYnJlYWsgdDtjYXNlIDE1Om4ubW9kZT0xNjtjYXNlIDE2OmlmKGQ9bi5sZW5ndGgpe2lmKGQ+cyYmKGQ9cyksZD5jJiYoZD1jKSwwPT09ZClicmVhayB0O19fLmFycmF5U2V0KGkscixvLGQsYSkscy09ZCxvKz1kLGMtPWQsYSs9ZCxuLmxlbmd0aC09ZDticmVha31uLm1vZGU9Yl87YnJlYWs7Y2FzZSAxNzpmb3IoO3U8MTQ7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZihuLm5sZW49MjU3KygzMSZsKSxsPj4+PTUsdS09NSxuLm5kaXN0PTErKDMxJmwpLGw+Pj49NSx1LT01LG4ubmNvZGU9NCsoMTUmbCksbD4+Pj00LHUtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9d187YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7dTwzOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5zW0Vbbi5oYXZlKytdXT03JmwsbD4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tFW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsTz17Yml0czpuLmxlbmJpdHN9LFM9eV8oMCxuLmxlbnMsMCwxOSxuLmxlbmNvZGUsMCxuLndvcmssTyksbi5sZW5iaXRzPU8uYml0cyxTKXt0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixuLm1vZGU9d187YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtuLmhhdmU8bi5ubGVuK24ubmRpc3Q7KXtmb3IoO209KEE9bi5sZW5jb2RlW2wmKDE8PG4ubGVuYml0cyktMV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKChnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYoeTwxNilsPj4+PWcsdS09ZyxuLmxlbnNbbi5oYXZlKytdPXk7ZWxzZXtpZigxNj09PXkpe2Zvcih4PWcrMjt1PHg7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZihsPj4+PWcsdS09ZywwPT09bi5oYXZlKXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPXdfO2JyZWFrfWs9bi5sZW5zW24uaGF2ZS0xXSxkPTMrKDMmbCksbD4+Pj0yLHUtPTJ9ZWxzZSBpZigxNz09PXkpe2Zvcih4PWcrMzt1PHg7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH11LT1nLGs9MCxkPTMrKDcmKGw+Pj49ZykpLGw+Pj49Myx1LT0zfWVsc2V7Zm9yKHg9Zys3O3U8eDspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fXUtPWcsaz0wLGQ9MTErKDEyNyYobD4+Pj1nKSksbD4+Pj03LHUtPTd9aWYobi5oYXZlK2Q+bi5ubGVuK24ubmRpc3Qpe3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9d187YnJlYWt9Zm9yKDtkLS07KW4ubGVuc1tuLmhhdmUrK109a319aWYobi5tb2RlPT09d18pYnJlYWs7aWYoMD09PW4ubGVuc1syNTZdKXt0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9d187YnJlYWt9aWYobi5sZW5iaXRzPTksTz17Yml0czpuLmxlbmJpdHN9LFM9eV8oMSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLE8pLG4ubGVuYml0cz1PLmJpdHMsUyl7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPXdfO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixPPXtiaXRzOm4uZGlzdGJpdHN9LFM9eV8oMixuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxPKSxuLmRpc3RiaXRzPU8uYml0cyxTKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9d187YnJlYWt9aWYobi5tb2RlPTIwLDY9PT1lKWJyZWFrIHQ7Y2FzZSAyMDpuLm1vZGU9MjE7Y2FzZSAyMTppZihzPj02JiZjPj0yNTgpe3QubmV4dF9vdXQ9YSx0LmF2YWlsX291dD1jLHQubmV4dF9pbj1vLHQuYXZhaWxfaW49cyxuLmhvbGQ9bCxuLmJpdHM9dSxtXyh0LGYpLGE9dC5uZXh0X291dCxpPXQub3V0cHV0LGM9dC5hdmFpbF9vdXQsbz10Lm5leHRfaW4scj10LmlucHV0LHM9dC5hdmFpbF9pbixsPW4uaG9sZCx1PW4uYml0cyxuLm1vZGU9PT1iXyYmKG4uYmFjaz0tMSk7YnJlYWt9Zm9yKG4uYmFjaz0wO209KEE9bi5sZW5jb2RlW2wmKDE8PG4ubGVuYml0cyktMV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKChnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYobSYmISgyNDAmbSkpe2Zvcih2PWcsYj1tLHc9eTttPShBPW4ubGVuY29kZVt3KygobCYoMTw8ditiKS0xKT4+dildKT4+PjE2JjI1NSx5PTY1NTM1JkEsISh2KyhnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bD4+Pj12LHUtPXYsbi5iYWNrKz12fWlmKGw+Pj49Zyx1LT1nLG4uYmFjays9ZyxuLmxlbmd0aD15LDA9PT1tKXtuLm1vZGU9MjY7YnJlYWt9aWYoMzImbSl7bi5iYWNrPS0xLG4ubW9kZT1iXzticmVha31pZig2NCZtKXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9d187YnJlYWt9bi5leHRyYT0xNSZtLG4ubW9kZT0yMjtjYXNlIDIyOmlmKG4uZXh0cmEpe2Zvcih4PW4uZXh0cmE7dTx4Oyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5ndGgrPWwmKDE8PG4uZXh0cmEpLTEsbD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT0yMztjYXNlIDIzOmZvcig7bT0oQT1uLmRpc3Rjb2RlW2wmKDE8PG4uZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx5PTY1NTM1JkEsISgoZz1BPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKCEoMjQwJm0pKXtmb3Iodj1nLGI9bSx3PXk7bT0oQT1uLmRpc3Rjb2RlW3crKChsJigxPDx2K2IpLTEpPj52KV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKHYrKGc9QT4+PjI0KTw9dSk7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1sPj4+PXYsdS09dixuLmJhY2srPXZ9aWYobD4+Pj1nLHUtPWcsbi5iYWNrKz1nLDY0Jm0pe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLG4ubW9kZT13XzticmVha31uLm9mZnNldD15LG4uZXh0cmE9MTUmbSxuLm1vZGU9MjQ7Y2FzZSAyNDppZihuLmV4dHJhKXtmb3IoeD1uLmV4dHJhO3U8eDspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fW4ub2Zmc2V0Kz1sJigxPDxuLmV4dHJhKS0xLGw+Pj49bi5leHRyYSx1LT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPXdfO2JyZWFrfW4ubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1jKWJyZWFrIHQ7aWYoZD1mLWMsbi5vZmZzZXQ+ZCl7aWYoKGQ9bi5vZmZzZXQtZCk+bi53aGF2ZSYmbi5zYW5lKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT13XzticmVha31kPm4ud25leHQ/KGQtPW4ud25leHQsXz1uLndzaXplLWQpOl89bi53bmV4dC1kLGQ+bi5sZW5ndGgmJihkPW4ubGVuZ3RoKSxwPW4ud2luZG93fWVsc2UgcD1pLF89YS1uLm9mZnNldCxkPW4ubGVuZ3RoO2Q+YyYmKGQ9YyksYy09ZCxuLmxlbmd0aC09ZDtkb3tpW2ErK109cFtfKytdfXdoaWxlKC0tZCk7MD09PW4ubGVuZ3RoJiYobi5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1jKWJyZWFrIHQ7aVthKytdPW4ubGVuZ3RoLGMtLSxuLm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihuLndyYXApe2Zvcig7dTwzMjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGx8PXJbbysrXTw8dSx1Kz04fWlmKGYtPWMsdC50b3RhbF9vdXQrPWYsbi50b3RhbCs9ZixmJiYodC5hZGxlcj1uLmNoZWNrPWFfKG4pP2dfKG4uY2hlY2ssaSxmLGEtZik6cF8obi5jaGVjayxpLGYsYS1mKSksZj1jLChhXyhuKT9sOmtfKGwpKSE9PW4uY2hlY2spe3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWw9MCx1PTB9bi5tb2RlPTI4O2Nhc2UgMjg6aWYobi53cmFwJiZhXyhuKSl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYobCE9PSg0Mjk0OTY3Mjk1Jm4udG90YWwpKXt0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWw9MCx1PTB9bi5tb2RlPTI5O2Nhc2UgMjk6Uz0xO2JyZWFrIHQ7Y2FzZSB3XzpTPS0zO2JyZWFrIHQ7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiB2X31yZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWMsdC5uZXh0X2luPW8sdC5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LChuLndzaXplfHxmIT09dC5hdmFpbF9vdXQmJm4ubW9kZTx3XyYmKG4ubW9kZTwyN3x8NCE9PWUpKSYmSV8odCx0Lm91dHB1dCx0Lm5leHRfb3V0LGYtdC5hdmFpbF9vdXQpLGgtPXQuYXZhaWxfaW4sZi09dC5hdmFpbF9vdXQsdC50b3RhbF9pbis9aCx0LnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLG4ud3JhcCYmZiYmKHQuYWRsZXI9bi5jaGVjaz1hXyhuKT9nXyhuLmNoZWNrLGksZix0Lm5leHRfb3V0LWYpOnBfKG4uY2hlY2ssaSxmLHQubmV4dF9vdXQtZikpLHQuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKyhuLm1vZGU9PT1iXz8xMjg6MCkrKDIwPT09bi5tb2RlfHwxNT09PW4ubW9kZT8yNTY6MCksKDA9PT1oJiYwPT09Znx8ND09PWUpJiYwPT09UyYmKFM9LTUpLFN9LHNfLmluZmxhdGVFbmQ9ZnVuY3Rpb24odCl7aWYoIXR8fCF0LnN0YXRlKXJldHVybiB2Xzt2YXIgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCwwfSxzXy5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQmJnQuc3RhdGUmJjImKG49dC5zdGF0ZSkud3JhcD8obi5oZWFkPWUsZS5kb25lPSExLDApOnZffSxzXy5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5sZW5ndGg7cmV0dXJuIHQmJnQuc3RhdGU/MCE9PShuPXQuc3RhdGUpLndyYXAmJjExIT09bi5tb2RlP3ZfOjExPT09bi5tb2RlJiZwXygxLGUsciwwKSE9PW4uY2hlY2s/LTM6SV8odCxlLHIscik/KG4ubW9kZT0zMSwtNCk6KG4uaGF2ZWRpY3Q9MSwwKTp2X30sc18uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBDXz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fTt2YXIgTl89c18sUl89d2Ysal89RmQsRF89Q18sUF89ZmQsVV89R2QsRl89ZnVuY3Rpb24oKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX0sTV89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBaXyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBaXykpcmV0dXJuIG5ldyBaXyh0KTt0aGlzLm9wdGlvbnM9Ul8uYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLDA9PT1lLndpbmRvd0JpdHMmJihlLndpbmRvd0JpdHM9LTE1KSksIShlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNil8fHQmJnQud2luZG93Qml0c3x8KGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYoMTUmZS53aW5kb3dCaXRzfHwoZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFVfLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1OXy5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYobiE9PURfLlpfT0spdGhyb3cgbmV3IEVycm9yKFBfW25dKTtpZih0aGlzLmhlYWRlcj1uZXcgRl8sTl8uaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLGUuZGljdGlvbmFyeSYmKCJzdHJpbmciPT10eXBlb2YgZS5kaWN0aW9uYXJ5P2UuZGljdGlvbmFyeT1qXy5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PU1fLmNhbGwoZS5kaWN0aW9uYXJ5KSYmKGUuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpKSxlLnJhdyYmKG49Tl8uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGUuZGljdGlvbmFyeSkpIT09RF8uWl9PSykpdGhyb3cgbmV3IEVycm9yKFBfW25dKX1mdW5jdGlvbiBKXyh0LGUpe3ZhciBuPW5ldyBaXyhlKTtpZihuLnB1c2godCwhMCksbi5lcnIpdGhyb3cgbi5tc2d8fFBfW24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9Wl8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHM9dGhpcy5zdHJtLGM9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxsPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LHU9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtyPWU9PT1+fmU/ZTohMD09PWU/RF8uWl9GSU5JU0g6RF8uWl9OT19GTFVTSCwic3RyaW5nIj09dHlwZW9mIHQ/cy5pbnB1dD1qXy5iaW5zdHJpbmcyYnVmKHQpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1NXy5jYWxsKHQpP3MuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkodCk6cy5pbnB1dD10LHMubmV4dF9pbj0wLHMuYXZhaWxfaW49cy5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXMuYXZhaWxfb3V0JiYocy5vdXRwdXQ9bmV3IFJfLkJ1ZjgoYykscy5uZXh0X291dD0wLHMuYXZhaWxfb3V0PWMpLChuPU5fLmluZmxhdGUocyxEXy5aX05PX0ZMVVNIKSk9PT1EXy5aX05FRURfRElDVCYmbCYmKG49Tl8uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGwpKSxuPT09RF8uWl9CVUZfRVJST1ImJiEwPT09dSYmKG49RF8uWl9PSyx1PSExKSxuIT09RF8uWl9TVFJFQU1fRU5EJiZuIT09RF8uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChuKSx0aGlzLmVuZGVkPSEwLCExO3MubmV4dF9vdXQmJigwIT09cy5hdmFpbF9vdXQmJm4hPT1EXy5aX1NUUkVBTV9FTkQmJigwIT09cy5hdmFpbF9pbnx8ciE9PURfLlpfRklOSVNIJiZyIT09RF8uWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhpPWpfLnV0Zjhib3JkZXIocy5vdXRwdXQscy5uZXh0X291dCksbz1zLm5leHRfb3V0LWksYT1qXy5idWYyc3RyaW5nKHMub3V0cHV0LGkpLHMubmV4dF9vdXQ9byxzLmF2YWlsX291dD1jLW8sbyYmUl8uYXJyYXlTZXQocy5vdXRwdXQscy5vdXRwdXQsaSxvLDApLHRoaXMub25EYXRhKGEpKTp0aGlzLm9uRGF0YShSXy5zaHJpbmtCdWYocy5vdXRwdXQscy5uZXh0X291dCkpKSksMD09PXMuYXZhaWxfaW4mJjA9PT1zLmF2YWlsX291dCYmKHU9ITApfXdoaWxlKChzLmF2YWlsX2luPjB8fDA9PT1zLmF2YWlsX291dCkmJm4hPT1EXy5aX1NUUkVBTV9FTkQpO3JldHVybiBuPT09RF8uWl9TVFJFQU1fRU5EJiYocj1EXy5aX0ZJTklTSCkscj09PURfLlpfRklOSVNIPyhuPU5fLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsbj09PURfLlpfT0spOnIhPT1EXy5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKERfLlpfT0spLHMuYXZhaWxfb3V0PTAsITApfSxaXy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuY2h1bmtzLnB1c2godCl9LFpfLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09RF8uWl9PSyYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVJfLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LG5fLkluZmxhdGU9Wl8sbl8uaW5mbGF0ZT1KXyxuXy5pbmZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLnJhdz0hMCxKXyh0LGUpfSxuXy51bmd6aXA9Sl87dmFyIEhfPXt9OygwLHdmLmFzc2lnbikoSF8sa2Ysbl8sQ18pO3ZhciBXXz1uKEhfKTtsZXQgS189MTtjb25zdCBHXz0iX19ydGNfdW1kX25hbWVfXyIsVl89KCk9PndpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQjtjbGFzcyBZX3tjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJzdG9yZU5hbWUiLHZvaWQgMCksdXUodGhpcywicGVuZGluZ0xpc3QiLFtdKSx0aGlzLnN0b3JlTmFtZT10LCFGdSgpJiZWXygpJiZ0aGlzLl9jaGVja0FuZENyZWF0ZVN0b3JlKHQpfWFzeW5jIF9jaGVja0FuZENyZWF0ZVN0b3JlKHQsZSl7Y29uc3Qgbj1hd2FpdCBZXy5fcHJvbWlzZUxvY2subG9jaygpO2lmKFZfKCkuZGF0YWJhc2VzKXtsZXQgdDthd2FpdCBuZXcgUHJvbWlzZSgoZT0+e2NvbnN0IG49KCk9PlZfKCkuZGF0YWJhc2VzKCkuZmluYWxseShlKTt0PXNldEludGVydmFsKG4sMTAwKSxuKCl9KSkuZmluYWxseSgoKCk9PmNsZWFySW50ZXJ2YWwodCkpKX1yZXR1cm4gbmV3IFByb21pc2UoKHI9PntZXy5kYiYmKFlfLmRiLmNsb3NlKCksZGVsZXRlIFlfLmRiKTtjb25zdCBpPWU/Vl8oKS5vcGVuKEdfLGUpOlZfKCkub3BlbihHXyk7aS5vbnVwZ3JhZGVuZWVkZWQ9KCk9PntpLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSh0KX0saS5vbmVycm9yPSgpPT57Y29uc29sZS5lcnJvcigiSW5kZXhlZERCSW50ZXJmYWNlIGVycm9yIixpLmVycm9yKX0saS5vbnN1Y2Nlc3M9KCk9Pntjb25zdCBlPWkucmVzdWx0O1lfLmRiPWU7dHJ5e1lfLmRiLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lLCJyZWFkb25seSIpLHRoaXMucGVuZGluZ0xpc3QuZm9yRWFjaCgoYXN5bmMgdD0+e2xldHt0eE1vZGU6ZSxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn09dDt0cnl7bihhd2FpdCB0aGlzLl9nZXRTdG9yZShlKSl9Y2F0Y2goaSl7cigpfX0pKSxyKCl9Y2F0Y2gobyl7cih0aGlzLl9jaGVja0FuZENyZWF0ZVN0b3JlKHQsZS52ZXJzaW9uKzEpKX1maW5hbGx5e24oKX19fSkpfWFzeW5jIF9nZXRTdG9yZSh0KXtjb25zdCBlPWF3YWl0IFlfLl9wcm9taXNlTG9jay5sb2NrKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgobixyKT0+e2lmKCFZXy5kYilyZXR1cm4gdGhpcy5wZW5kaW5nTGlzdC5wdXNoKHt0eE1vZGU6dCxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn0pLHZvaWQgZSgpO3RyeXtuKFlfLmRiLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lLHQpLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKSl9Y2F0Y2goaSl7cmV0dXJuIHZvaWQgdGhpcy5wZW5kaW5nTGlzdC5wdXNoKHt0eE1vZGU6dCxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn0pfWZpbmFsbHl7ZSgpfX0pKX1hc3luYyBwdXQyU3RyaW5nKHQsZSl7bGV0IG47dHJ5e249SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gocil7bj10fXJldHVybiBhd2FpdCB0aGlzLnB1dChuLGUpfWFzeW5jIGdldDRTdHJpbmcodCl7Y29uc3QgZT1hd2FpdCB0aGlzLmdldCh0KTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKGUpfWNhdGNoKHIpe249ZX1yZXR1cm4gbn1hc3luYyBwdXQodCxlKXtjb25zdCBuPWF3YWl0IHRoaXMuX2dldFN0b3JlKCJyZWFkd3JpdGUiKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57Y29uc3Qgbz1uLnB1dCh0LGUpO28ub25zdWNjZXNzPSgpPT57cigpfSxvLm9uZXJyb3I9dD0+e2kodCl9fSkpfWFzeW5jIGdldCh0KXtjb25zdCBlPWF3YWl0IHRoaXMuX2dldFN0b3JlKCJyZWFkb25seSIpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pntjb25zdCBpPWUuZ2V0KHQpO2kub25zdWNjZXNzPSgpPT57bihpLnJlc3VsdCl9LGkub25lcnJvcj10PT57cih0KX19KSl9YXN5bmMgZGVsKHQpe2NvbnN0IGU9YXdhaXQgdGhpcy5fZ2V0U3RvcmUoInJlYWR3cml0ZSIpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pntjb25zdCBpPWUuZGVsZXRlKHQpO2kub25zdWNjZXNzPSgpPT57bigpfSxpLm9uZXJyb3I9dD0+e3IodCl9fSkpfX11dShZXywiZGIiLHZvaWQgMCksdXUoWV8sInN0YXRlIiwiaW5pdCIpLHV1KFlfLCJfcHJvbWlzZUxvY2siLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJsb2NraW5nUHJvbWlzZSIsUHJvbWlzZS5yZXNvbHZlKCkpLHV1KHRoaXMsImxvY2tzIiwwKSx1dSh0aGlzLCJuYW1lIiwiIiksdXUodGhpcywibG9ja0lkIix2b2lkIDApLHRoaXMubG9ja0lkPUtfKyssdCYmKHRoaXMubmFtZT10KX1nZXQgaXNMb2NrZWQoKXtyZXR1cm4gdGhpcy5sb2Nrcz4wfWxvY2soKXtsZXQgdDt0aGlzLmxvY2tzKz0xO2NvbnN0IGU9bmV3IFByb21pc2UoKGU9Pnt0PSgpPT57dGhpcy5sb2Nrcy09MSxlKCl9fSkpLG49dGhpcy5sb2NraW5nUHJvbWlzZS50aGVuKCgoKT0+dCkpO3JldHVybiB0aGlzLmxvY2tpbmdQcm9taXNlPXRoaXMubG9ja2luZ1Byb21pc2UudGhlbigoKCk9PmUpKSxufX0oImlEQiIpKTt2YXIgWF89YWkuaW5jbHVkZXM7TG4oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDphKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIFhfKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHFfPUl1KCJBcnJheSIsImluY2x1ZGVzIiksJF89ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHd1KHQpJiYodm9pZCAwIT09KGU9dFtTdV0pPyEhZToiUmVnRXhwIj09PWt1KHQpKX0sUV89VHlwZUVycm9yLHRwPWZlKCJtYXRjaCIpLGVwPUxuLG5wPWZ1bmN0aW9uKHQpe2lmKCRfKHQpKXRocm93IG5ldyBRXygiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9LHJwPUcsaXA9cXIsb3A9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXsiLy4vIlt0XShlKX1jYXRjaChuKXt0cnl7cmV0dXJuIGVbdHBdPSExLCIvLi8iW3RdKGUpfWNhdGNoKHIpe319cmV0dXJuITF9LGFwPW0oIiIuaW5kZXhPZik7ZXAoe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW9wKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+YXAoaXAocnAodGhpcykpLGlwKG5wKHQpKSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHNwPUl1KCJTdHJpbmciLCJpbmNsdWRlcyIpLGNwPW90LGxwPXFfLHVwPXNwLGhwPUFycmF5LnByb3RvdHlwZSxmcD1TdHJpbmcucHJvdG90eXBlLGRwPW4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5jbHVkZXM7cmV0dXJuIHQ9PT1ocHx8Y3AoaHAsdCkmJmU9PT1ocC5pbmNsdWRlcz9scDoic3RyaW5nIj09dHlwZW9mIHR8fHQ9PT1mcHx8Y3AoZnAsdCkmJmU9PT1mcC5pbmNsdWRlcz91cDplfSkpO2Z1bmN0aW9uIF9wKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgbixyLGk9ZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybnt9O3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KWlmKHt9Lmhhc093blByb3BlcnR5LmNhbGwodCxyKSl7aWYoZHAoZSkuY2FsbChlLHIpKWNvbnRpbnVlO25bcl09dFtyXX1yZXR1cm4gbn0odCxlKTtpZihRdSl7dmFyIG89UXUodCk7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyluPW9bcl0sZHAoZSkuY2FsbChlLG4pfHx7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQsbikmJihpW25dPXRbbl0pfXJldHVybiBpfWNvbnN0IHBwPVsibWVzc2FnZSJdO3ZhciBncCxtcCx5cD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt1dSh0aGlzLCJuYW1lIiwiTG9uZ1N0cmluZ1JlcG9ydG9yIiksdXUodGhpcywiaW5CdWZmZXIiLFtdKSx1dSh0aGlzLCJvdXRCdWZmZXIiLFtdKX1wdXNoKHQpe3QubWVzc2FnZSYmdGhpcy5pbkJ1ZmZlci5wdXNoKG9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOntpZDpVdSgpLnNsaWNlKDAsMyksaW5kZXg6MCxlbmQ6ITAsbXNnOnQubWVzc2FnZX19KSl9c3BsaWNlKHQpe2NvbnN0IGU9W107bGV0IG49MDtmb3IoO3RoaXMub3V0QnVmZmVyLmxlbmd0aDspe2NvbnN0IHI9SlNPTi5zdHJpbmdpZnkodGhpcy5vdXRCdWZmZXJbMF0pLmxlbmd0aDtpZighKHI8dCkpYnJlYWs7dC09cixuKz1yLGUucHVzaCh0aGlzLm91dEJ1ZmZlci5zaGlmdCgpKX1mb3IoO3RoaXMuaW5CdWZmZXJbMF0mJnQ+MDspe2NvbnN0IHI9dGhpcy5pbkJ1ZmZlclswXSx7bWVzc2FnZTppfT1yLG89b2Yob2Yoe30sX3AocixwcCkpLHt9LHttZXNzYWdlOm9mKG9mKHt9LGkpLHt9LHttc2c6IiJ9KX0pLGE9SlNPTi5zdHJpbmdpZnkobykubGVuZ3RoLHM9dC1hLGM9b2Yoe30sbyk7aWYocz5pLm1zZy5sZW5ndGgpYy5tZXNzYWdlLm1zZz1pLm1zZyx0aGlzLmluQnVmZmVyLnNoaWZ0KCk7ZWxzZXtpZighKHM+PTEwKSlicmVhazt7Y29uc3QgdD1pLm1zZy5zbGljZSgwLHMpO2MubWVzc2FnZS5tc2c9dCxjLm1lc3NhZ2UuZW5kPSExLHRoaXMuaW5CdWZmZXJbMF0ubWVzc2FnZS5tc2c9aS5tc2cuc2xpY2UocyksdGhpcy5pbkJ1ZmZlclswXS5tZXNzYWdlLmluZGV4Kyt9fWNvbnN0IGw9SlNPTi5zdHJpbmdpZnkoYy5tZXNzYWdlKSx1PWwubGVuZ3RoO3QtPXUrYSxuKz11K2EsZS5wdXNoKG9mKG9mKHt9LGMpLHt9LHttZXNzYWdlOmx9KSl9cmV0dXJue3BheWxvYWQ6ZSxwYXlsb2FkU2l6ZTpufX11bnNoaWZ0KHQpe3RoaXMub3V0QnVmZmVyPXQuY29uY2F0KHRoaXMub3V0QnVmZmVyKX1nZXQoKXtyZXR1cm5bLi4udGhpcy5vdXRCdWZmZXIsLi4udGhpcy5pbkJ1ZmZlci5tYXAoKHQ9Pm9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOkpTT04uc3RyaW5naWZ5KHQubWVzc2FnZSl9KSkpXX1zZXQodCl7dC5mb3JFYWNoKCh0PT57IWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnJlcG9ydF9pZH0odCk/KHQubWVzc2FnZXx8KHQubWVzc2FnZT0iIiksdGhpcy5pbkJ1ZmZlci5wdXNoKG9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOkpTT04ucGFyc2UodC5tZXNzYWdlKX0pKSk6dGhpcy5vdXRCdWZmZXIucHVzaCh0KX0pKSx0aGlzLm91dEJ1ZmZlcj1bXS5jb25jYXQodGhpcy5vdXRCdWZmZXIpLHRoaXMuaW5CdWZmZXI9W10uY29uY2F0KHRoaXMuaW5CdWZmZXIpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuaW5CdWZmZXIubGVuZ3RoJiYwPT09dGhpcy5vdXRCdWZmZXIubGVuZ3RofX07Y29uc3QgdnA9NWU1LGJwPXtwcm9kdWN0X2xpbmU6InJ0YyIscmVwb3J0X3ZlcnNpb246IjUiLG9zOiJ3ZWIiLHVzZXJfYWdlbnQ6RnUoKT8iIjpudWxsPT09KGdwPW5hdmlnYXRvcil8fHZvaWQgMD09PWdwP3ZvaWQgMDpncC51c2VyQWdlbnQscGxhdGZvcm06IndlYiIscHJvZHVjdDoid2VicnRjIixhcHBfc3RhdGU6ImFjdGl2ZSJ9LHdwPSJMb2dSZXBvcnRvciIsa3A9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cubG9jYXRpb24uc2VhcmNoLmluY2x1ZGVzKCJfcnRjX2RlYnVnXyIpfHwobnVsbD09PShtcD13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09bXA/dm9pZCAwOm1wLmdldEl0ZW0oIl9ydGNfZGVidWdfIikpKTtjbGFzcyBTcHtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfYnVmZmVyIix2b2lkIDApLHRoaXMuX2J1ZmZlcj1uZXcgWV8odCl9YXN5bmMgc2V0KHQsZSl7YXdhaXQgdGhpcy5fYnVmZmVyLnB1dDJTdHJpbmcodCxlKX1hc3luYyBnZXQodCl7dmFyIGU7bGV0IG49W107dHJ5e249YXdhaXQgdGhpcy5fYnVmZmVyLmdldDRTdHJpbmcodCl9Y2F0Y2gocil7fXJldHVybiBudWxsIT09KGU9bikmJnZvaWQgMCE9PWU/ZTpbXX19dmFyIE9wPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3V1KHRoaXMsInJlcG9ydENvbW1vbiIsYnApLHV1KHRoaXMsInJlcG9ydElkcyIsbmV3IE1hcCksdXUodGhpcywiZGF0YUJ1ZmZlciIsW10pLHV1KHRoaXMsInJlcG9ydG9yTGlzdCIsW10pLHV1KHRoaXMsImRiQnVmZmVyIix2b2lkIDApLHV1KHRoaXMsInBvc3RpbmciLCExKSx1dSh0aGlzLCJzdWNTZW5kVGltZXIiLHZvaWQgMCksdXUodGhpcywicHJlU3VjVGltZSIsMCksdXUodGhpcywiZXJyU2VuZFRpbWVyIix2b2lkIDApLHV1KHRoaXMsImVyclNlbmREZWxheSIsMTAwKSx1dSh0aGlzLCJfbG9nU2VydmVyVXJsIix2b2lkIDApLHV1KHRoaXMsIl9yZXRyeUNvdW50IiwwKSx1dSh0aGlzLCJfcmVwb3J0TGltaXQiLHZwKSx1dSh0aGlzLCJfZGlzYWJsZVRpbWVvdXQiLCExKSxGdSgpfHwod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsKCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuZXJyU2VuZFRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5zdWNTZW5kVGltZXIpLHRoaXMuc2VuZCh2b2lkIDAsITApfSkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLCgoKT0+eyJ2aXNpYmxlIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLnNldENvbW1vblN0YXRzKHthcHBfc3RhdGU6ImFjdGl2ZSJ9KToiaGlkZGVuIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmdGhpcy5zZXRDb21tb25TdGF0cyh7YXBwX3N0YXRlOiJiYWNrZ3JvdW5kIn0pfSkpLGtwJiYod2luZG93Ll9fcnRjX2RlYnVnX3JlcG9ydG9yX189dGhpcykpLFl1Lm9uKCJVUExPQURfUkVQT1JUX0xJTUlUIiwodD0+e3RoaXMuc2V0UmVwb3J0TGltaXQodCl9KSksWXUub24oIkVOQUJMRV9SRVBPUlRfSURCX0JVRkZFUiIsKHQ9Pnt0JiZ0aGlzLmVuYWJsZUluZGV4ZWREQkJ1ZmZlcigpfSkpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5yZXBvcnRvckxpc3QucHVzaChDcCksdGhpcy5yZXBvcnRvckxpc3QucHVzaCh5cCl9KSl9c2V0VXJsKHQpe3RoaXMuX2xvZ1NlcnZlclVybD10fXNldENvbW1vblN0YXRzKHQpe3RoaXMucmVwb3J0Q29tbW9uPU9iamVjdC5hc3NpZ24odGhpcy5yZXBvcnRDb21tb24sdCl9Z2V0Q29tbW9uU3RhdHMoKXtyZXR1cm4gdGhpcy5yZXBvcnRDb21tb259c2V0UmVwb3J0TGltaXQodCl7dGhpcy5fcmVwb3J0TGltaXQ9TWF0aC5tYXgodCw1ZTQpLHRoaXMuX3JlcG9ydExpbWl0PU1hdGgubWluKHQsNWU1KX1nZXRSZXBvcnRJZCh0KXt2YXIgZTt0PW51bGwhPT0oZT10KSYmdm9pZCAwIT09ZT9lOiJfX2dsb2JhbF9fIix0aGlzLnJlcG9ydElkcy5oYXModCl8fHRoaXMucmVwb3J0SWRzLnNldCh0LDApO2xldCBuPXRoaXMucmVwb3J0SWRzLmdldCh0KTtyZXR1cm4gdm9pZCAwPT09biYmKFRwKCJubyByZXBvcnRJZCBpbiByZXBvcnRJZCBtYXAgd2l0aCBlbmdpbmUtc2Vzc2lvbi1pZCAiLmNvbmNhdCh0KSwwLHt9KSxuPTApLHRoaXMucmVwb3J0SWRzLnNldCh0LG4rMSksbn1wdXNoKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pdGhpcy5zZW5kKHQpO2Vsc2V7dmFyIGU7Y29uc3Qgbj1udWxsIT09KGU9dC5lbmdpbmVfc2Vzc2lvbl9pZCkmJnZvaWQgMCE9PWU/ZToiX19nbG9iYWxfXyI7dGhpcy5yZXBvcnRJZHMuaGFzKG4pfHx0aGlzLnJlcG9ydElkcy5zZXQobiwwKSx0aGlzLmRhdGFCdWZmZXIucHVzaCh0KSwhdGhpcy5wb3N0aW5nJiYhdGhpcy5lcnJTZW5kVGltZXImJkRhdGUubm93KCktdGhpcy5wcmVTdWNUaW1lPjJlMyYmKGNsZWFyVGltZW91dCh0aGlzLnN1Y1NlbmRUaW1lciksdGhpcy5zZW5kKCkpfX1lbmFibGVJbmRleGVkREJCdWZmZXIoKXt0aGlzLmRiQnVmZmVyfHwodGhpcy5kYkJ1ZmZlcj1uZXcgU3AoIlJlcG9ydG9yREJCdWZmZXIiKSx0aGlzLmRiQnVmZmVyLmdldCh3cCkudGhlbigodD0+e3QuZm9yRWFjaCgodD0+e3RoaXMucHVzaCh0KX0pKX0pKSx0aGlzLnJlcG9ydG9yTGlzdC5mb3JFYWNoKCh0PT57dmFyIGU7bnVsbD09PShlPXRoaXMuZGJCdWZmZXIpfHx2b2lkIDA9PT1lfHxlLmdldCh0Lm5hbWUpLnRoZW4oKGU9Pnt0LnNldChlKX0pKX0pKSl9YmFja3VwKCl7dHJ5e3ZhciB0O251bGw9PT0odD10aGlzLmRiQnVmZmVyKXx8dm9pZCAwPT09dHx8dC5zZXQoWy4uLnRoaXMuZGF0YUJ1ZmZlcl0sd3ApLHRoaXMucmVwb3J0b3JMaXN0LmZvckVhY2goKHQ9Pnt2YXIgZTtudWxsPT09KGU9dGhpcy5kYkJ1ZmZlcil8fHZvaWQgMD09PWV8fGUuc2V0KFsuLi50LmdldCgpXSx0Lm5hbWUpfSkpfWNhdGNoKGUpe1RwKCJFcnJvciB3aGVuIHNhdmUgbG9nIGludG8gSURCIiwtMSxlKX19dW5zaGlmdCh0KXt0aGlzLmRhdGFCdWZmZXI9dFswXS5jb25jYXQodGhpcy5kYXRhQnVmZmVyKSx0aGlzLnJlcG9ydG9yTGlzdC5mb3JFYWNoKCgoZSxuKT0+e3ZhciByO2UudW5zaGlmdChudWxsIT09KHI9dFtuKzFdKSYmdm9pZCAwIT09cj9yOltdKX0pKX1fc3BsaWNlKCl7bGV0IHQ9ZnVuY3Rpb24odCxlKXtsZXQgbj0wO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKG4rPUpTT04uc3RyaW5naWZ5KHRbcl0pLmxlbmd0aCxuPmUpcmV0dXJuIHI7cmV0dXJuIHQubGVuZ3RofSh0aGlzLmRhdGFCdWZmZXIsdGhpcy5fcmVwb3J0TGltaXQpOzA9PT10JiZ0aGlzLmRhdGFCdWZmZXIubGVuZ3RoPjAmJih0aGlzLl9yZXBvcnRMaW1pdD1KU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFCdWZmZXJbMF0pLmxlbmd0aCsxMCx0PTEsVHAoInVwZGF0ZSByZXBvcnQgbGltaXQgdG8gIi5jb25jYXQodGhpcy5fcmVwb3J0TGltaXQpLDAsbnVsbCkpO2NvbnN0IGU9dGhpcy5kYXRhQnVmZmVyLnNwbGljZSgwLHQpLG49SlNPTi5zdHJpbmdpZnkoZSkubGVuZ3RoLHI9W2VdO2xldCBpPXRoaXMuX3JlcG9ydExpbWl0LW47cmV0dXJuIHRoaXMucmVwb3J0b3JMaXN0LmZvckVhY2goKHQ9Pntjb25zdHtwYXlsb2FkOmUscGF5bG9hZFNpemU6bn09dC5zcGxpY2UoaSk7ZS5mb3JFYWNoKCh0PT57dmFyIGUsbixyO3ZvaWQgMD09PXQucmVwb3J0X2lkJiYodC5yZXBvcnRfaWQ9dGhpcy5nZXRSZXBvcnRJZCh0LmVuZ2luZV9zZXNzaW9uX2lkKSwhRnUoKSYmd2luZG93Ll9fb25SVENSZXBvcnQmJihudWxsPT09KGU9KG49d2luZG93KS5fX29uUlRDUmVwb3J0KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKG4sbnVsbCE9PShyPXQuZW5naW5lX3Nlc3Npb25faWQpJiZ2b2lkIDAhPT1yP3I6Imdsb2JhbCIsdCx0aGlzLmdldENvbW1vblN0YXRzKCkpKSl9KSksci5wdXNoKGUpLGktPW59KSkscn1hc3luYyBzZW5kKHQsZSl7dGhpcy5iYWNrdXAoKTtjb25zdCBuPXRoaXMucmVwb3J0b3JMaXN0LnJlZHVjZSgoKHQsZSk9PnQmJmUuaXNFbXB0eSgpKSwhMCk7aWYoIXQmJiF0aGlzLmRhdGFCdWZmZXIubGVuZ3RoJiZufHwhdGhpcy5fbG9nU2VydmVyVXJsKXJldHVybjt0fHwodGhpcy5wb3N0aW5nPSEwKTtsZXQgcj1bXTt0fHwocj10aGlzLl9zcGxpY2UoKSk7Y29uc3QgaT1rcCxvPXtkYXRhOnR8fGJmKHIpLmNhbGwociksaGVhZGVyOm9mKG9mKHt9LHRoaXMucmVwb3J0Q29tbW9uKSx7fSx7aHR0cF9yZXRyeV9jb3VudDp0aGlzLl9yZXRyeUNvdW50fSksZnJvbToid2ViIixvczoid2ViIix2ZXJzaW9uOiIxIn0sYT17bWV0aG9kOiJQT1NUIixib2R5Omk/SlNPTi5zdHJpbmdpZnkobyk6V18uZ3ppcChKU09OLnN0cmluZ2lmeShvKSl9O2lmKCF0aGlzLl9kaXNhYmxlVGltZW91dCl0cnl7Y29uc3QgdD1uZXcgQWJvcnRDb250cm9sbGVyO2Euc2lnbmFsPXQuc2lnbmFsLHNldFRpbWVvdXQoKCgpPT57dC5hYm9ydCgpfSksMWU0KX1jYXRjaCh1KXtjb25zb2xlLndhcm4oIkFib3J0Q29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIiksdGhpcy5fZGlzYWJsZVRpbWVvdXQ9ITB9aXx8KGEuaGVhZGVycz17IkNvbnRlbnQtRW5jb2RpbmciOiJnemlwIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04In0pO2xldCBzLGMsbD1udWxsO3RyeXtzPWF3YWl0IGZldGNoKHRoaXMuX2xvZ1NlcnZlclVybCxhKSwyMDAhPT1zLnN0YXR1cyYmMzA0IT09cy5zdGF0dXN8fChsPUpTT04ucGFyc2UoYXdhaXQgcy50ZXh0KCkpKX1jYXRjaChoKXtjPWh9dHx8KHRoaXMucG9zdGluZz0hMSksbCYmMD09PWwuU3RhdHVzQ29kZT90fHxlfHx0aGlzLnN1Y1NlbmQoKTooc2V0VGltZW91dCgoKCk9Pnt2YXIgdCxlLG47VHAoInJlcG9ydG9yIHBvc3QgZXJyb3IsIHJlc0pTT046Ii5jb25jYXQobnVsbD09PSh0PWwpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnRvU3RyaW5nKCksIiBlcnI6IikuY29uY2F0KGMpLG51bGwhPT0oZT1udWxsPT09KG49cyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc3RhdHVzKSYmdm9pZCAwIT09ZT9lOi0xLGMpfSksMCksdD90aGlzLnNlbmQodCk6KHRoaXMudW5zaGlmdChyKSxlP3RoaXMuc2VuZCgpOnRoaXMuZXJyU2VuZCgpKSl9X2dldERhdGFCdWZmZXJUb3RhbFNpemUoKXtyZXR1cm4gdGhpcy5kYXRhQnVmZmVyLnJlZHVjZSgoKHQsZSk9PnQrSlNPTi5zdHJpbmdpZnkoZSkubGVuZ3RoKSwwKX1zdWNTZW5kKCl7dGhpcy5lcnJTZW5kRGVsYXk9MTAwLHRoaXMuX3JldHJ5Q291bnQ9MCx0aGlzLnByZVN1Y1RpbWU9RGF0ZS5ub3coKTtjb25zdCB0PXRoaXMuX2dldERhdGFCdWZmZXJUb3RhbFNpemUoKT4xZTY/MWUzOjJlMzt0aGlzLnN1Y1NlbmRUaW1lcj1zZXRUaW1lb3V0KCgoKT0+dGhpcy5zZW5kKCkpLHQpfWVyclNlbmQoKXt0aGlzLmVyclNlbmRUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VuZCgpLGRlbGV0ZSB0aGlzLmVyclNlbmRUaW1lcn0pLHRoaXMuZXJyU2VuZERlbGF5KSx0aGlzLmVyclNlbmREZWxheSo9Mix0aGlzLl9yZXRyeUNvdW50Kyt9fTtjbGFzcyB4cHtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfcHJlVGltZSIsRGF0ZS5ub3coKSksdXUodGhpcywiX29uZTJvbmVOdW0iLDApLHV1KHRoaXMsIl9vbmUybWFueU51bSIsMCksdXUodGhpcywiX29uZTJvbmVNc2dDYWNoZSIsbmV3IE1hcCksdXUodGhpcywiX29uZTJtYW55TXNnQ2FjaGUiLG5ldyBNYXApLHV1KHRoaXMsInJvb21JZCIsIiIpLHV1KHRoaXMsInVzZXJJZCIsIiIpLHV1KHRoaXMsInJ0c1Nlc3Npb25JZCIsIiIpLHV1KHRoaXMsImxvZ2dlciIsdm9pZCAwKSx1dSh0aGlzLCJzZXJ2ZXJVcmwiLCJzZXJ2ZXIiKSx0aGlzLmlkPXQsdGhpcy5sb2dnZXI9bmV3IEhwKCJNZXNzYWdlUmVwb3J0b3IiLDEpfW5lZWRSZXBvcnQodCl7cmV0dXJuISF4cC5jb25maWcmJihEYXRlLm5vdygpLXRoaXMuX3ByZVRpbWU+PTM2ZTUmJih0aGlzLl9wcmVUaW1lPURhdGUubm93KCksdGhpcy5fb25lMm9uZU51bT0wLHRoaXMuX29uZTJtYW55TnVtPTApLCJvbmUyb25lIj09PXQmJnRoaXMuX29uZTJvbmVOdW08eHAuY29uZmlnLm1heF9vbmUyb25lX2ZwdF9wZXJfaG91ciYmTWF0aC5yYW5kb20oKTw9eHAuY29uZmlnLm9uZTJvbmVfZnB0X3JhdGlvLzEwMHx8Im9uZTJtYW55Ij09PXQmJnRoaXMuX29uZTJtYW55TnVtPHhwLmNvbmZpZy5tYXhfb25lMm1hbnlfZnB0X3Blcl9ob3VyJiZNYXRoLnJhbmRvbSgpPD14cC5jb25maWcub25lMm1hbnlfZnB0X3JhdGlvLzEwMCl9Y2FjaGVQMlBNc2codCl7dmFyIGU7dGhpcy5fb25lMm9uZU1zZ0NhY2hlLnNldCh0Lm1zZ19pZCxvZih7Y29uZmlnX3ZlcnNpb246KG51bGw9PT0oZT14cC5jb25maWcpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZlcnNpb24pfHwiIn0sdCkpfXVwZGF0ZVAyUE1zZyh0LGUpe2NvbnN0IG49dGhpcy5fb25lMm9uZU1zZ0NhY2hlLmdldCh0KTtuJiZ0aGlzLl9vbmUyb25lTXNnQ2FjaGUuc2V0KHQsb2Yob2Yoe30sbiksZSkpfWNhY2hlQ3VzdG9tTXNnKHQpe3ZhciBlO3RoaXMuX29uZTJtYW55TXNnQ2FjaGUuc2V0KHQubXNnX2lkLG9mKHtjb25maWdfdmVyc2lvbjoobnVsbD09PShlPXhwLmNvbmZpZyl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmVyc2lvbil8fCIifSx0KSl9dXBkYXRlT25lMk1hbnlNc2codCxlKXtjb25zdCBuPXRoaXMuX29uZTJtYW55TXNnQ2FjaGUuZ2V0KHQpO24mJnRoaXMuX29uZTJtYW55TXNnQ2FjaGUuc2V0KHQsb2Yob2Yoe30sbiksZSkpfXJlcG9ydFAyUE1zZyh0KXtjb25zdCBlPXRoaXMuX29uZTJvbmVNc2dDYWNoZS5nZXQodCk7dmFyIG47ZSYmKHRoaXMubG9nZ2VyLmluZm8oInJlcG9ydFAyUE1zZyIsZS50eXBlLEpTT04uc3RyaW5naWZ5KGUpKSxudWxsPT09KG49THAodGhpcy5pZCkpfHx2b2lkIDA9PT1ufHxuLnJlcG9ydCgicnRzX21lc3NhZ2UiLGUpKX1yZXBvcnRPbmUyTWFueU1zZyh0KXtjb25zdCBlPXRoaXMuX29uZTJtYW55TXNnQ2FjaGUuZ2V0KHQpO3ZhciBuO2UmJih0aGlzLmxvZ2dlci5pbmZvKCJyZXBvcnRPbmUyTWFueU1zZyIsZS50eXBlLEpTT04uc3RyaW5naWZ5KGUpKSxudWxsPT09KG49THAodGhpcy5pZCkpfHx2b2lkIDA9PT1ufHxuLnJlcG9ydCgicnRzX21lc3NhZ2UiLGUpKX1yZXBvcnRNc2dSZWN2KHQpe3ZhciBlLG47dC5jb25maWdfdmVyc2lvbj0obnVsbD09PShlPXhwLmNvbmZpZyl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmVyc2lvbil8fCIiLHRoaXMubG9nZ2VyLmluZm8oInJlcG9ydE1zZ1JlY3YiLHQudHlwZSxKU09OLnN0cmluZ2lmeSh0KSksbnVsbD09PShuPUxwKHRoaXMuaWQpKXx8dm9pZCAwPT09bnx8bi5yZXBvcnQoInJ0c19tZXNzYWdlIix0KX1kZXN0cm95KCl7dGhpcy5fb25lMm1hbnlOdW09MCx0aGlzLl9vbmUyb25lTnVtPTAsdGhpcy5fb25lMm1hbnlNc2dDYWNoZS5jbGVhcigpLHRoaXMuX29uZTJvbmVNc2dDYWNoZS5jbGVhcigpLHRoaXMuX3ByZVRpbWU9RGF0ZS5ub3coKSx0aGlzLnJvb21JZD0iIix0aGlzLnVzZXJJZD0iIix0aGlzLnJ0c1Nlc3Npb25JZD0iIn19dXUoeHAsImNvbmZpZyIsdm9pZCAwKTtjb25zdCBBcD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dXUodGhpcywibW9kaWZ5SWRzIix7cHJlX2Nvbm5lY3Rpb246ITF9KSx0aGlzLmlkPXR9cmVwb3J0KHQsZSxuKXtjb25zdCByPW9mKG9mKG9mKHtldmVudF9rZXk6dCxydGNfdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubW9kaWZ5SWRzKSxlKSx7fSx7cmVwb3J0X2lkOk9wLmdldFJlcG9ydElkKHRoaXMubW9kaWZ5SWRzLmVuZ2luZV9zZXNzaW9uX2lkKX0pO3ZhciBpLG87KCJvYmplY3QiPT10eXBlb2YgbiYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmNvbW1vbl9leHRyYV9pbmZvPUpTT04uc3RyaW5naWZ5KG4pKSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKCh0PT57dm9pZCAwIT09clt0XSYmIiIhPT1yW3RdfHxkZWxldGUgclt0XX0pKSwhRnUoKSYmd2luZG93Ll9fb25SVENSZXBvcnQpJiYobnVsbD09PShpPShvPXdpbmRvdykuX19vblJUQ1JlcG9ydCl8fHZvaWQgMD09PWl8fGkuY2FsbChvLHRoaXMubW9kaWZ5SWRzLmVuZ2luZV9zZXNzaW9uX2lkLHIsT3AuZ2V0Q29tbW9uU3RhdHMoKSkpOyJVVCIhPT17fS5WSVRFX1RFU1QmJk9wLnB1c2gocil9cmVwb3J0TG9nKHQpe2NvbnN0IGU9b2Yob2Yoe2V2ZW50X2tleToicnRjX2ludm9rZV9zdGF0dXMiLHNka19hcGlfbmFtZToiY29uc29sZV9sb2ciLHJ0Y190aW1lc3RhbXA6RGF0ZS5ub3coKX0sdGhpcy5tb2RpZnlJZHMpLHt9LHttZXNzYWdlOnR9KTtDcC5wdXNoKGUpfXJlcG9ydExvbmdTdHJpbmcodCxlKXtjb25zdCBuPW9mKG9mKHtldmVudF9rZXk6InJ0Y19pbnZva2Vfc3RhdHVzIixzZGtfYXBpX25hbWU6InNka19sb25nX3N0cmluZ18iLmNvbmNhdCh0KSxydGNfdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubW9kaWZ5SWRzKSx7fSx7bWVzc2FnZTplfSk7eXAucHVzaChuKX1zZXQodCl7dGhpcy5tb2RpZnlJZHM9T2JqZWN0LmFzc2lnbih0aGlzLm1vZGlmeUlkcyx0KX1kZXN0cm95KCl7fX0oImdsb2JhbCIpLFRwPSh0LGUsbik9PntBcC5yZXBvcnQoInJ0Y19lcnJvciIse21lc3NhZ2U6dCxlcnJvcl9jb2RlOmV9LG4pfTtjb25zdCBFcD1uZXcgTWFwLExwPXQ9PkVwLmdldCh0KSx6cD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmNsdWRlcygiX3J0Y191cGxvYWRfY29uc29sZV8iKTtmdW5jdGlvbiBCcCh0LGUpe3JldHVybiB0Lm1hcCgodD0+e2xldCBuPSIiO3RyeXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dClyZXR1cm4idW5kZWZpbmVkIjtpZihudWxsPT09dClyZXR1cm4ibnVsbCI7aWYodCBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtVHJhY2spcmV0dXJuIE11KHQpO2lmKHQgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbSlyZXR1cm4gbnVsbD09KGk9dCk/InVuZGVmaW5lZCB8IG51bGwiOiJzdHJpbmciPT10eXBlb2YgaT9pOkpTT04uc3RyaW5naWZ5KHtpZDppLmlkLGFjdGl2ZTppLmFjdGl2ZX0pO2lmKHQgaW5zdGFuY2VvZiBSVENSdHBTZW5kZXIpcmV0dXJuIFp1KHQpO2lmKHQgaW5zdGFuY2VvZiBSVENSdHBSZWNlaXZlcilyZXR1cm4gSnUodCk7aWYodCBpbnN0YW5jZW9mIFJUQ1J0cFRyYW5zY2VpdmVyKXJldHVybiBudWxsPT0ocj10KT8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiByP3I6SlNPTi5zdHJpbmdpZnkoe2N1cnJlbnREaXJlY3Rpb246ci5jdXJyZW50RGlyZWN0aW9uLGRpcmVjdGlvbjpyLmRpcmVjdGlvbixtaWQ6ci5taWQsc3RvcHBlZDpyLnN0b3BwZWQscmVjZWl2ZXI6SnUoci5yZWNlaXZlciksc2VuZGVyOlp1KHIuc2VuZGVyKX0pO249SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gobyl7bj10LnRvU3RyaW5nKCl9dmFyIHIsaTtyZXR1cm4gbiYmbi5sZW5ndGg+PWUmJihuPW4uc2xpY2UoMCxlKSksbn0pKS5qb2luKCIsICIpfXZhciBJcCxDcD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt1dSh0aGlzLCJuYW1lIiwiQ29uc29sZVJlcG9ydG9yIiksdXUodGhpcywiX3V1aWQiLCIiLmNvbmNhdChNYXRoLmZsb29yKDg5OSpNYXRoLnJhbmRvbSgpKSsxMDApKSx1dSh0aGlzLCJfY29uc29sZVJlcG9ydElkIiwwKSx1dSh0aGlzLCJfZW5naW5lUmVwb3J0SWRNYXAiLG5ldyBNYXApLHV1KHRoaXMsIl9lbmFibGVkIiwiTlVMTCIpLHV1KHRoaXMsIl9jb25zb2xlQ3V0TGVuZ3RoIixZdS5nZXRQYXJhbWV0ZXIoIlVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQiKSksdXUodGhpcywiYnVmZmVyIixbXSksenAmJnNldFRpbWVvdXQoKCgpPT57dGhpcy5zd2l0Y2hPbigpfSksMCksWXUub24oIlVQTE9BRF9DT05TT0xFX09OIiwodD0+e3Q/dGhpcy5zd2l0Y2hPbigpOnRoaXMudHVybk9mZigpfSkpLFl1Lm9uKCJVUExPQURfQ09OU09MRV9MRU5HVEhfQ1VUIiwodD0+e3RoaXMuX2NvbnNvbGVDdXRMZW5ndGg9dH0pKX1nZXQgZW5hYmxlZCgpe3JldHVybiJPRkYiIT09dGhpcy5fZW5hYmxlZH1zd2l0Y2hPbigpeyJOVUxMIj09PXRoaXMuX2VuYWJsZWQmJihjb25zb2xlLmxvZygiW0xvZ2dlclJlcG9ydG9yLmNvbnN0cnVjdG9yXSBjb25zb2xlIHVwbG9hZCBzd2l0Y2ggT04iKSx0aGlzLl9lbmFibGVkPSJPTiIpfXR1cm5PZmYoKXsiTlVMTCI9PT10aGlzLl9lbmFibGVkJiYoY29uc29sZS5sb2coIltMb2dnZXJSZXBvcnRvci5jb25zdHJ1Y3Rvcl0gY29uc29sZSB1cGxvYWQgc3dpdGNoIE9GRiIpLHRoaXMuX2VuYWJsZWQ9Ik9GRiIsdGhpcy5idWZmZXI9W10pfWdldEVuZ2luZUNvbnNvbGVJZCh0KXt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT10aGlzLl9lbmdpbmVSZXBvcnRJZE1hcC5nZXQodCkpJiZ2b2lkIDAhPT1lP2U6MDtyZXR1cm4gdGhpcy5fZW5naW5lUmVwb3J0SWRNYXAuc2V0KHQsbisxKSxufXJlcG9ydCh0LGUsbixyLGksbyxhLHMsYyl7aWYoIk9GRiI9PT10aGlzLl9lbmFibGVkKXJldHVybjtjb25zdCBsPUxwKGUpLHU9dGhpcy5fY29uc29sZVJlcG9ydElkKyssaD10aGlzLmdldEVuZ2luZUNvbnNvbGVJZChlKSxmPUJwKGMsdGhpcy5fY29uc29sZUN1dExlbmd0aCksZD1bLi4uY10sXz0iIi5jb25jYXQocykucmVwbGFjZSgvJW98JXMvZ2ksKCgpPT5CcChbZC5zaGlmdCgpXSx0aGlzLl9jb25zb2xlQ3V0TGVuZ3RoKSkpLHA9IlsiLmNvbmNhdCh0aGlzLl91dWlkLCItIikuY29uY2F0KHUsIl1bIikuY29uY2F0KGUsIi0iKS5jb25jYXQoaCwiXS0iKS5jb25jYXQobiwiLSIpLmNvbmNhdCh0LCJbIikuY29uY2F0KHIsIl0iKS5jb25jYXQoaSwiWyIpLmNvbmNhdChvLCIuIikuY29uY2F0KGEsIl0gIikuY29uY2F0KF8sIiAiKS5jb25jYXQoZik7dmFyIGc7bD9sLnJlcG9ydExvZyhwKTooZz1wLEFwLnJlcG9ydExvZyhnKSl9cHVzaCh0KXsiT0ZGIiE9PXRoaXMuX2VuYWJsZWQmJnRoaXMuYnVmZmVyLnB1c2godCl9c3BsaWNlKHQpe2lmKCJPTiIhPT10aGlzLl9lbmFibGVkKXJldHVybntwYXlsb2FkOltdLHBheWxvYWRTaXplOjB9O2NvbnN0e2luZGV4OmUsc2l6ZTpufT1mdW5jdGlvbih0LGUpe2xldCBuPTA7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2NvbnN0IGk9SlNPTi5zdHJpbmdpZnkodFtyXSkubGVuZ3RoO2lmKG4rPWksbj5lKXJldHVybntpbmRleDpyLHNpemU6bi1pfX1yZXR1cm57aW5kZXg6dC5sZW5ndGgsc2l6ZTpufX0odGhpcy5idWZmZXIsdCk7cmV0dXJue3BheWxvYWQ6dGhpcy5idWZmZXIuc3BsaWNlKDAsZSkscGF5bG9hZFNpemU6bn19dW5zaGlmdCh0KXt0aGlzLmJ1ZmZlcj10LmNvbmNhdCh0aGlzLmJ1ZmZlcil9Z2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyfXNldCh0KXt0aGlzLmJ1ZmZlcj10LmNvbmNhdCh0aGlzLmJ1ZmZlcil9aXNFbXB0eSgpe3JldHVybiJPRkYiPT09dGhpcy5fZW5hYmxlZHx8MD09PXRoaXMuYnVmZmVyLmxlbmd0aH19O2NvbnN0IE5wPSJbVkVSVENdIixScD0iIzAwNTBiMyIsanA9e0RFQlVHOiJyZ2JhKDAsIDAsIDAsIDApIiwiIElORk8iOiJyZ2JhKDkzLCAxNzMsIDIyNiwgMCkiLCIgV0FSTiI6InJnYmEoMjU1LCAxMTksIDAsIDAuMykiLEVSUk9SOiJyZ2JhKDI1NSwgMCwgMCwgMC4zKSIsIiBTVUNDIjoicmdiYSgwLCAxMTksIDAsIDAuMykifSxEcD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guaW5jbHVkZXMoIl9ydGNfZGVidWdfIil8fChudWxsPT09KElwPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1JcD92b2lkIDA6SXAuZ2V0SXRlbSgiX3J0Y19kZWJ1Z18iKSkpO2NvbnN0IFBwPSgpPT57Y29uc3QgdD1uZXcgRGF0ZTtyZXR1cm4iIi5jb25jYXQodC50b1RpbWVTdHJpbmcoKS5zcGxpdCgiICIpWzBdLCI6IikuY29uY2F0KHQuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCIwIikpfTt2YXIgVXAsRnAsTXAsWnAsSnAsSHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Imdsb2JhbCI7dXUodGhpcywiaW5kZW50Iix2b2lkIDApLHV1KHRoaXMsIm1vZHVsZSIsdm9pZCAwKSx1dSh0aGlzLCJfZW5naW5lSWQiLHZvaWQgMCksdGhpcy5tb2R1bGU9dCx0aGlzLmluZGVudD1lLHRoaXMuX2VuZ2luZUlkPW59X3ByaW50KHQsZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxpPTI7aTxuO2krKylyW2ktMl09YXJndW1lbnRzW2ldO2NvbnN0IG89ci5zaGlmdCgpO3RyeXtjb25zdCB0PVsuLi5yXSxuPSIiLmNvbmNhdChvKS5yZXBsYWNlKC8lby9naSwoKCk9Pntjb25zdCBlPXQuc2hpZnQoKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSk7S3Uuc2V0KCIiLmNvbmNhdChOcCwiWyIpLmNvbmNhdCh0aGlzLm1vZHVsZSwiLiIpLmNvbmNhdChlLCJdICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHQubWFwKCh0PT5KU09OLnN0cmluZ2lmeSh0KSkpLmpvaW4oIiwgIikpKX1jYXRjaChlZyl7fWxldCBhPSIiO2ZvcihsZXQgYz0wO2M8dGhpcy5pbmRlbnQ7YysrKWErPSIgICAgIjtjb25zdCBzPVBwKCk7Q3AucmVwb3J0KE5wLHRoaXMuX2VuZ2luZUlkLHMsdCxhLHRoaXMubW9kdWxlLGUsbyxyKSxEcCYmY29uc29sZS5sb2coIiVjIi5jb25jYXQocywiLSIpLmNvbmNhdChOcCwiJWNbIikuY29uY2F0KHQsIl0lYyIpLmNvbmNhdChhLCJbIikuY29uY2F0KHRoaXMubW9kdWxlLCIuIikuY29uY2F0KGUsIl0gIikuY29uY2F0KG8pLCJjb2xvcjoiLmNvbmNhdChScCwiOyIpLCJiYWNrZ3JvdW5kLWNvbG9yOiIuY29uY2F0KGpwW3RdLCI7IiksImNvbG9yOiIuY29uY2F0KFJwLCI7IiksLi4ucil9cHJpbnQodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCIgSU5GTyIsdCwuLi5uKX1kZWJ1Zyh0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShlPjE/ZS0xOjApLHI9MTtyPGU7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dGhpcy5fcHJpbnQoIkRFQlVHIix0LC4uLm4pfWluZm8odCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCIgSU5GTyIsdCwuLi5uKX13YXJuKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9wcmludCgiIFdBUk4iLHQsLi4ubil9ZXJyb3IodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCJFUlJPUiIsdCwuLi5uKX1zdWNjZXNzKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9wcmludCgiIFNVQ0MiLHQsLi4ubil9fTtuZXcgVGV4dERlY29kZXIsbmV3IFRleHRFbmNvZGVyLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmNsdWRlcygiX3J0Y19kZWJ1Z18iKXx8bnVsbCE9PShVcD13aW5kb3cubG9jYWxTdG9yYWdlKSYmdm9pZCAwIT09VXAmJlVwLmdldEl0ZW0oIl9ydGNfZGVidWdfIikpO2NvbnN0IFdwPSgpPT4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyxLcD1XcCgpPyIiOndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O2Z1bmN0aW9uIEdwKCl7bGV0IHQ9Im5vbmUiO3JldHVybiBXcCgpfHwobnVsbCE9PUtwLm1hdGNoKCJGaXJlZm94Iik/dD0ibW96aWxsYSI6bnVsbCE9PUtwLm1hdGNoKCJDaHJvbWUiKT8odD0iY2hyb21lLXN0YWJsZSIsbnVsbCE9PUtwLm1hdGNoKCJFbGVjdHJvbiIpJiYodD0iZWxlY3Ryb24iKSk6KG51bGwhPT1LcC5tYXRjaCgiU2FmYXJpIil8fG51bGwhPT1LcC5tYXRjaCgiQXBwbGVXZWJLaXQiKSkmJih0PSJzYWZhcmkiKSksdH1HcCgpO2NvbnN0IFZwPSJzYWZhcmkiPT09R3AoKTtHcCgpLCFXcCgpJiZLcC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJtb2JpbGUiKTtjb25zdCBZcD0hV3AoKSYmKG51bGw9PT0oRnA9S3AubWF0Y2goL3ZlcnNpb25cLyhcZCspL2kpKXx8dm9pZCAwPT09RnA/dm9pZCAwOkZwWzFdKTt2YXIgWHA7VnAmJllwJiYobnVsbD09PShYcD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC92ZXJzaW9uXC8oXGQrXC5cZCspL2kpKXx8dm9pZCAwPT09WHB8fFhwWzFdKTshV3AoKSYmKG51bGw9PT0oTXA9S3AubWF0Y2goL0ZpcmVmb3hcLyhcZCspL2kpKXx8dm9pZCAwPT09TXB8fE1wWzFdKSwhV3AoKSYmKG51bGw9PT0oWnA9S3AubWF0Y2goLyAoW1xkX10rKSBsaWtlIE1hYyBPUyBYL2kpKXx8dm9pZCAwPT09WnB8fG51bGw9PT0oWnA9WnBbMV0pfHx2b2lkIDA9PT1acHx8WnAuc3BsaXQoIl8iKS5tYXAoKHQ9PnBhcnNlSW50KHQpKSkpLCFXcCgpJiYobnVsbD09PShKcD1LcC5tYXRjaCgvQ2hyb21lXC8oXGQrKS9pKSl8fHZvaWQgMD09PUpwfHxKcFsxXSk7Y29uc3QgcXA9bmV3IEhwKCJKb2luUm9vbUNvbmZpZyIsMCk7Y2xhc3MgJHB7Y29uc3RydWN0b3IodCl7dXUodGhpcywiX3VzZVRjcEFmdGVySm9pblRpbWVvdXQiLCRwLkRFRkFVTFRfQ09ORi51c2VUY3BBZnRlckpvaW5UaW1lb3V0KSx1dSh0aGlzLCJfam9pbldpdGhUY3BPbmx5IiwkcC5ERUZBVUxUX0NPTkYuam9pbldpdGhUY3BPbmx5KSx1dSh0aGlzLCJfam9pbldpdGhUY3BPbmx5RGVsYXkiLCRwLkRFRkFVTFRfQ09ORi5qb2luV2l0aFRjcE9ubHlEZWxheSksdXUodGhpcywiX2JsYWNrQnJvd3NlclJlZ2V4TGlzdCIsW10pLHRoaXMuX2VuZ2luZUlkPXQsbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoIl9fcnRjX3RjcF9vbmx5X18iKT4tMSYmKHRoaXMuX2pvaW5XaXRoVGNwT25seT0hMCx0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheT0wKSx0aGlzLl9yZXBvcnQoKX1zdGF0aWMgc2V0RGVmYXVsQ29uZih0KXtsZXR7dXNlVGNwQWZ0ZXJKb2luVGltZW91dDplLGpvaW5XaXRoVGNwT25seTpuLGpvaW5XaXRoVGNwT25seURlbGF5OnJ9PXQ7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZSYmKCRwLkRFRkFVTFRfQ09ORi51c2VUY3BBZnRlckpvaW5UaW1lb3V0PWUpLCJib29sZWFuIj09dHlwZW9mIG4mJigkcC5ERUZBVUxUX0NPTkYuam9pbldpdGhUY3BPbmx5PW4pLCJudW1iZXIiPT10eXBlb2YgciYmKCRwLkRFRkFVTFRfQ09ORi5qb2luV2l0aFRjcE9ubHlEZWxheT1NYXRoLm1heCgwLHIpKSwkcC5ERUZBVUxUX0NPTkZ9Z2V0IHVzZVRjcEFmdGVySm9pblRpbWVvdXQoKXtyZXR1cm4gdGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dH1nZXQgdXNlVGNwSm9pbigpe3JldHVybiB0aGlzLl9qb2luV2l0aFRjcE9ubHl9Z2V0IHVzZVRjcEpvaW5EZWxheSgpe3JldHVybiB0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheX1pc0JsYWNrQnJvd2VyKCl7cmV0dXJuIHRoaXMuX2JsYWNrQnJvd3NlclJlZ2V4TGlzdC5maW5kKCh0PT5uZXcgUmVnRXhwKHQpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKX1zZXRTZXJ2ZXJDb25maWcodCl7dmFyIGUsbixyO2xldCBpPSExOyJib29sZWFuIj09dHlwZW9mKG51bGw9PXR8fG51bGw9PT0oZT10LnVzZV90Y3BfYWZ0ZXJfam9pbl90aW1lb3V0KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmFibGUpJiYodGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dD10LnVzZV90Y3BfYWZ0ZXJfam9pbl90aW1lb3V0LmVuYWJsZSxpPSEwKSwiYm9vbGVhbiI9PXR5cGVvZihudWxsPT10fHxudWxsPT09KG49dC5qb2luX3dpdGhfdGNwX29ubHkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuYWJsZSkmJih0aGlzLl9qb2luV2l0aFRjcE9ubHk9dC5qb2luX3dpdGhfdGNwX29ubHkuZW5hYmxlLGk9ITApLCJudW1iZXIiPT10eXBlb2YobnVsbD09dHx8bnVsbD09PShyPXQuam9pbl93aXRoX3RjcF9vbmx5KXx8dm9pZCAwPT09cj92b2lkIDA6ci5kZWxheV9tcykmJih0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheT10LmpvaW5fd2l0aF90Y3Bfb25seS5kZWxheV9tcyxpPSEwKSx0JiZBcnJheS5pc0FycmF5KHQuYmxhY2tfYnJvd3Nlcl9yZWdleF9saXN0KSYmKHRoaXMuX2JsYWNrQnJvd3NlclJlZ2V4TGlzdD10LmJsYWNrX2Jyb3dzZXJfcmVnZXhfbGlzdCxpPSEwKSxpJiZ0aGlzLl9yZXBvcnQoKX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh7dXNlX3RjcF9hZnRlcl9qb2luX3RpbWVvdXQ6dGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dCxqb2luX3dpdGhfdGNwX29ubHk6dGhpcy5fam9pbldpdGhUY3BPbmx5LGpvaW5fd2l0aF90Y3Bfb25seV9kZWxheTp0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheSxibGFja19icm93c2VyX3JlZ2V4X2xpc3Q6dGhpcy5fYmxhY2tCcm93c2VyUmVnZXhMaXN0fSl9X3JlcG9ydCgpe3FwLnByaW50KCJfcmVwb3J0Iix0aGlzLnRvU3RyaW5nKCkpLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XToiIixhPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwO251bGw9PT0ocj1McCh0KSl8fHZvaWQgMD09PXJ8fHIucmVwb3J0KCJydGNfaW52b2tlX3N0YXR1cyIse3Nka19hcGlfbmFtZTplLG1lc3NhZ2U6bixlcnJvcl9jb2RlOmksc3RyZWFtX2lkOm8sZWxhcHNlOjB9LGEpfSh0aGlzLl9lbmdpbmVJZCwid2ViX2pvaW5fcm9vbV9jb25maWciLHRoaXMudG9TdHJpbmcoKSl9fXV1KCRwLCJERUZBVUxUX0NPTkYiLHt1c2VUY3BBZnRlckpvaW5UaW1lb3V0OiEwLGpvaW5XaXRoVGNwT25seTohMSxqb2luV2l0aFRjcE9ubHlEZWxheTo1ZTN9KTt2YXIgUXA9KHQ9Pih0W3QuTk9ORT0wXT0iTk9ORSIsdCkpKFFwfHx7fSk7Y29uc3QgdGc9Il9fcnRjX2FjY2Vzc0RvbWFpbnNfXyIuc3BsaXQoIiwiKTsiX19ydGNfY29uZmlnRG9tYWluc19fIi5zcGxpdCgiLCIpO3RnLm1hcCgoZnVuY3Rpb24oKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7cmV0dXJuIHQ/KC9eaHR0cHM/OlwvXC8uKy8udGVzdCh0KXx8KHQ9Imh0dHBzOi8vIi5jb25jYXQodCkpLCIiLmNvbmNhdCh0LCIvZGlzcGF0Y2gvdjEvQWNjZXNzSW5mbz9BY3Rpb249R2V0QWNjZXNzSW5mbyIpKToiIn0pKSwkcC5ERUZBVUxUX0NPTkYsUXAuTk9ORSwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZT0+e2NvbnN0e3RyYW5zZm9ybWVyOm59PWUse3BvcnQ6cn09bi5vcHRpb25zLGk9KG89dD0+e3IucG9zdE1lc3NhZ2UodCxbdC5wYXlsb2FkLmJ1ZmZlcl0pfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm0oZSxuKXtjb25zdCByPXQuaXNIMjY1VmlkZW9GcmFtZShlKTt0LmdldE5BTFVuaXRzKG5ldyBodShlLmRhdGEpLHIpLmZvckVhY2goKHQ9PntpZih0LnNlaSl7Y29uc3QgZT12dS5kZWNvZGVTRUlCb2R5KHQuYm9keSxyKTtlJiZlLnR5cGU9PT1mdS5leHRlcm5hbCYmbyhlKX19KSksbi5lbnF1ZXVlKGUpfX0pKTt2YXIgbztuLnJlYWRhYmxlLnBpcGVUaHJvdWdoKGkpLnBpcGVUbyhlLnRyYW5zZm9ybWVyLndyaXRhYmxlKX0pKX0oKTsK",CN=typeof window<"u"&&window.Blob&&new Blob([atob(UX)],{type:"text/javascript;charset=utf-8"});function gbA(){let A;try{if(A=CN&&(vi||window.webkitURL).createObjectURL(CN),!A)throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+UX)}finally{!(typeof window<"u"&&navigator.userAgent.indexOf("Trident/")>0)&&A&&(vi||window.webkitlRL).revokeObjectURL(A)}}const kX="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fXZhciBuPXtleHBvcnRzOnt9fSxyPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PT1NYXRoJiZ0fSxvPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2YgdCYmdCl8fHIoIm9iamVjdCI9PXR5cGVvZiB0JiZ0KXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxpPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19LHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdHx8dC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksYT11LGM9RnVuY3Rpb24ucHJvdG90eXBlLHM9Yy5hcHBseSxmPWMuY2FsbCxsPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGE/Zi5iaW5kKHMpOmZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkocyxhcmd1bWVudHMpfSkseT11LHA9RnVuY3Rpb24ucHJvdG90eXBlLGg9cC5jYWxsLGc9eSYmcC5iaW5kLmJpbmQoaCxoKSxkPXk/ZzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseSh0LGFyZ3VtZW50cyl9fSxiPWQsdj1iKHt9LnRvU3RyaW5nKSxtPWIoIiIuc2xpY2UpLFM9ZnVuY3Rpb24odCl7cmV0dXJuIG0odih0KSw4LC0xKX0sdz1TLE89ZCxMPWZ1bmN0aW9uKHQpe2lmKCJGdW5jdGlvbiI9PT13KHQpKXJldHVybiBPKHQpfSxqPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxBPXZvaWQgMD09PWomJnZvaWQgMCE9PWo/ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR8fHQ9PT1qfTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH0sUD17fSxJPSFpKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLEU9dSxUPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGs9RT9ULmJpbmQoVCk6ZnVuY3Rpb24oKXtyZXR1cm4gVC5hcHBseShULGFyZ3VtZW50cyl9LHg9e30sRj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxDPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTj1DJiYhRi5jYWxsKHsxOjJ9LDEpO3guZj1OP2Z1bmN0aW9uKHQpe3ZhciBlPUModGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06Rjt2YXIgTSxSLFU9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19LEQ9aSxfPVMsRz1PYmplY3QsSD1kKCIiLnNwbGl0KSxCPUQoKGZ1bmN0aW9uKCl7cmV0dXJuIUcoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09PV8odCk/SCh0LCIiKTpHKHQpfTpHLFY9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LFc9Vix6PVR5cGVFcnJvcixLPWZ1bmN0aW9uKHQpe2lmKFcodCkpdGhyb3cgbmV3IHooIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9LHE9QixKPUssWT1mdW5jdGlvbih0KXtyZXR1cm4gcShKKHQpKX0sWD1BLCQ9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OlgodCl9LFE9e30sWj1RLHR0PW8sZXQ9QSxudD1mdW5jdGlvbih0KXtyZXR1cm4gZXQodCk/dDp2b2lkIDB9LHJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9udChaW3RdKXx8bnQodHRbdF0pOlpbdF0mJlpbdF1bZV18fHR0W3RdJiZ0dFt0XVtlXX0sb3Q9ZCh7fS5pc1Byb3RvdHlwZU9mKSxpdD1vLm5hdmlnYXRvcix1dD1pdCYmaXQudXNlckFnZW50LGF0PW8sY3Q9dXQ/U3RyaW5nKHV0KToiIixzdD1hdC5wcm9jZXNzLGZ0PWF0LkRlbm8sbHQ9c3QmJnN0LnZlcnNpb25zfHxmdCYmZnQudmVyc2lvbix5dD1sdCYmbHQudjg7eXQmJihSPShNPXl0LnNwbGl0KCIuIikpWzBdPjAmJk1bMF08ND8xOisoTVswXStNWzFdKSksIVImJmN0JiYoIShNPWN0Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8TVsxXT49NzQpJiYoTT1jdC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKFI9K01bMV0pO3ZhciBwdD1SLGh0PXB0LGd0PWksZHQ9by5TdHJpbmcsYnQ9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhZ3QoKGZ1bmN0aW9uKCl7dmFyIHQ9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIWR0KHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZodCYmaHQ8NDF9KSksdnQ9YnQmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsbXQ9cnQsU3Q9QSx3dD1vdCxPdD1PYmplY3QsTHQ9dnQ/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXt2YXIgZT1tdCgiU3ltYm9sIik7cmV0dXJuIFN0KGUpJiZ3dChlLnByb3RvdHlwZSxPdCh0KSl9LGp0PVN0cmluZyxBdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGp0KHQpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0sUHQ9QSxJdD1BdCxFdD1UeXBlRXJyb3IsVHQ9ZnVuY3Rpb24odCl7aWYoUHQodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEV0KEl0KHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX0sa3Q9VHQseHQ9VixGdD1rLEN0PUEsTnQ9JCxNdD1UeXBlRXJyb3IsUnQ9e2V4cG9ydHM6e319LFV0PW8sRHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LF90PW8sR3Q9ZnVuY3Rpb24odCxlKXt0cnl7RHQoVXQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtVdFt0XT1lfXJldHVybiBlfSxIdD0iX19jb3JlLWpzX3NoYXJlZF9fIixCdD1SdC5leHBvcnRzPV90W0h0XXx8R3QoSHQse30pOyhCdC52ZXJzaW9uc3x8KEJ0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIFZ0PVJ0LmV4cG9ydHMsV3Q9VnQsenQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gV3RbdF18fChXdFt0XT1lfHx7fSl9LEt0PUsscXQ9T2JqZWN0LEp0PWZ1bmN0aW9uKHQpe3JldHVybiBxdChLdCh0KSl9LFl0PUp0LFh0PWQoe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFh0KFl0KHQpLGUpfSxRdD1kLFp0PTAsdGU9TWF0aC5yYW5kb20oKSxlZT1RdCgxLi50b1N0cmluZyksbmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrZWUoKytadCt0ZSwzNil9LHJlPXp0LG9lPSR0LGllPW5lLHVlPWJ0LGFlPXZ0LGNlPW8uU3ltYm9sLHNlPXJlKCJ3a3MiKSxmZT1hZT9jZS5mb3J8fGNlOmNlJiZjZS53aXRob3V0U2V0dGVyfHxpZSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gb2Uoc2UsdCl8fChzZVt0XT11ZSYmb2UoY2UsdCk/Y2VbdF06ZmUoIlN5bWJvbC4iK3QpKSxzZVt0XX0seWU9ayxwZT0kLGhlPUx0LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtyZXR1cm4geHQobik/dm9pZCAwOmt0KG4pfSxkZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI7aWYoInN0cmluZyI9PT1lJiZDdChuPXQudG9TdHJpbmcpJiYhTnQocj1GdChuLHQpKSlyZXR1cm4gcjtpZihDdChuPXQudmFsdWVPZikmJiFOdChyPUZ0KG4sdCkpKXJldHVybiByO2lmKCJzdHJpbmciIT09ZSYmQ3Qobj10LnRvU3RyaW5nKSYmIU50KHI9RnQobix0KSkpcmV0dXJuIHI7dGhyb3cgbmV3IE10KCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0sYmU9VHlwZUVycm9yLHZlPWxlKCJ0b1ByaW1pdGl2ZSIpLG1lPWZ1bmN0aW9uKHQsZSl7aWYoIXBlKHQpfHxoZSh0KSlyZXR1cm4gdDt2YXIgbixyPWdlKHQsdmUpO2lmKHIpe2lmKHZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iiksbj15ZShyLHQsZSksIXBlKG4pfHxoZShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgYmUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIiksZGUodCxlKX0sU2U9THQsd2U9ZnVuY3Rpb24odCl7dmFyIGU9bWUodCwic3RyaW5nIik7cmV0dXJuIFNlKGUpP2U6ZSsiIn0sT2U9JCxMZT1vLmRvY3VtZW50LGplPU9lKExlKSYmT2UoTGUuY3JlYXRlRWxlbWVudCksQWU9ZnVuY3Rpb24odCl7cmV0dXJuIGplP0xlLmNyZWF0ZUVsZW1lbnQodCk6e319LFBlPUFlLEllPSFJJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLEVlPUksVGU9ayxrZT14LHhlPVUsRmU9WSxDZT13ZSxOZT0kdCxNZT1JZSxSZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1AuZj1FZT9SZTpmdW5jdGlvbih0LGUpe2lmKHQ9RmUodCksZT1DZShlKSxNZSl0cnl7cmV0dXJuIFJlKHQsZSl9Y2F0Y2gobil7fWlmKE5lKHQsZSkpcmV0dXJuIHhlKCFUZShrZS5mLHQsZSksdFtlXSl9O3ZhciBVZT1pLERlPUEsX2U9LyN8XC5wcm90b3R5cGVcLi8sR2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1CZVtIZSh0KV07cmV0dXJuIG49PT1XZXx8biE9PVZlJiYoRGUoZSk/VWUoZSk6ISFlKX0sSGU9R2Uubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShfZSwiLiIpLnRvTG93ZXJDYXNlKCl9LEJlPUdlLmRhdGE9e30sVmU9R2UuTkFUSVZFPSJOIixXZT1HZS5QT0xZRklMTD0iUCIsemU9R2UsS2U9VHQscWU9dSxKZT1MKEwuYmluZCksWWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gS2UodCksdm9pZCAwPT09ZT90OnFlP0plKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxYZT17fSwkZT1JJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSksUWU9JCxaZT1TdHJpbmcsdG49VHlwZUVycm9yLGVuPWZ1bmN0aW9uKHQpe2lmKFFlKHQpKXJldHVybiB0O3Rocm93IG5ldyB0bihaZSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX0sbm49SSxybj1JZSxvbj0kZSx1bj1lbixhbj13ZSxjbj1UeXBlRXJyb3Isc249T2JqZWN0LmRlZmluZVByb3BlcnR5LGZuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbG49ImVudW1lcmFibGUiLHluPSJjb25maWd1cmFibGUiLHBuPSJ3cml0YWJsZSI7WGUuZj1ubj9vbj9mdW5jdGlvbih0LGUsbil7aWYodW4odCksZT1hbihlKSx1bihuKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmInByb3RvdHlwZSI9PT1lJiYidmFsdWUiaW4gbiYmcG4gaW4gbiYmIW5bcG5dKXt2YXIgcj1mbih0LGUpO3ImJnJbcG5dJiYodFtlXT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTp5biBpbiBuP25beW5dOnJbeW5dLGVudW1lcmFibGU6bG4gaW4gbj9uW2xuXTpyW2xuXSx3cml0YWJsZTohMX0pfXJldHVybiBzbih0LGUsbil9OnNuOmZ1bmN0aW9uKHQsZSxuKXtpZih1bih0KSxlPWFuKGUpLHVuKG4pLHJuKXRyeXtyZXR1cm4gc24odCxlLG4pfWNhdGNoKHIpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBuZXcgY24oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9O3ZhciBobj1YZSxnbj1VLGRuPUk/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobi5mKHQsZSxnbigxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH0sYm49byx2bj1sLG1uPUwsU249QSx3bj1QLmYsT249emUsTG49USxqbj1ZZSxBbj1kbixQbj0kdCxJbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihuLHIsbyl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLHIpfXJldHVybiBuZXcgdChuLHIsbyl9cmV0dXJuIHZuKHQsdGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZS5wcm90b3R5cGU9dC5wcm90b3R5cGUsZX0sRW49ZnVuY3Rpb24odCxlKXt2YXIgbixyLG8saSx1LGEsYyxzLGYsbD10LnRhcmdldCx5PXQuZ2xvYmFsLHA9dC5zdGF0LGg9dC5wcm90byxnPXk/Ym46cD9ibltsXTpibltsXSYmYm5bbF0ucHJvdG90eXBlLGQ9eT9MbjpMbltsXXx8QW4oTG4sbCx7fSlbbF0sYj1kLnByb3RvdHlwZTtmb3IoaSBpbiBlKXI9IShuPU9uKHk/aTpsKyhwPyIuIjoiIyIpK2ksdC5mb3JjZWQpKSYmZyYmUG4oZyxpKSxhPWRbaV0sciYmKGM9dC5kb250Q2FsbEdldFNldD8oZj13bihnLGkpKSYmZi52YWx1ZTpnW2ldKSx1PXImJmM/YzplW2ldLChufHxofHx0eXBlb2YgYSE9dHlwZW9mIHUpJiYocz10LmJpbmQmJnI/am4odSxibik6dC53cmFwJiZyP0luKHUpOmgmJlNuKHUpP21uKHUpOnUsKHQuc2hhbXx8dSYmdS5zaGFtfHxhJiZhLnNoYW0pJiZBbihzLCJzaGFtIiwhMCksQW4oZCxpLHMpLGgmJihQbihMbixvPWwrIlByb3RvdHlwZSIpfHxBbihMbixvLHt9KSxBbihMbltvXSxpLHUpLHQucmVhbCYmYiYmKG58fCFiW2ldKSYmQW4oYixpLHUpKSl9LFRuPUVuLGtuPUkseG49WGUuZjtUbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PXhuLHNoYW06IWtufSx7ZGVmaW5lUHJvcGVydHk6eG59KTt2YXIgRm49US5PYmplY3QsQ249bi5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRm4uZGVmaW5lUHJvcGVydHkodCxlLG4pfTtGbi5kZWZpbmVQcm9wZXJ0eS5zaGFtJiYoQ24uc2hhbT0hMCk7dmFyIE5uPWUobi5leHBvcnRzKSxNbj1TLFJuPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PT1Nbih0KX0sVW49TWF0aC5jZWlsLERuPU1hdGguZmxvb3IsX249TWF0aC50cnVuY3x8ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuKGU+MD9EbjpVbikoZSl9LEduPWZ1bmN0aW9uKHQpe3ZhciBlPSt0O3JldHVybiBlIT1lfHwwPT09ZT8wOl9uKGUpfSxIbj1HbixCbj1NYXRoLm1pbixWbj1mdW5jdGlvbih0KXt2YXIgZT1Ibih0KTtyZXR1cm4gZT4wP0JuKGUsOTAwNzE5OTI1NDc0MDk5MSk6MH0sV249ZnVuY3Rpb24odCl7cmV0dXJuIFZuKHQubGVuZ3RoKX0sem49VHlwZUVycm9yLEtuPUkscW49WGUsSm49VSxZbj17fTtZbltsZSgidG9TdHJpbmdUYWciKV09InoiO3ZhciBYbj0iW29iamVjdCB6XSI9PT1TdHJpbmcoWW4pLCRuPVhuLFFuPUEsWm49Uyx0cj1sZSgidG9TdHJpbmdUYWciKSxlcj1PYmplY3QsbnI9IkFyZ3VtZW50cyI9PT1abihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLHJyPSRuP1puOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319KGU9ZXIodCksdHIpKT9uOm5yP1puKGUpOiJPYmplY3QiPT09KHI9Wm4oZSkpJiZRbihlLmNhbGxlZSk/IkFyZ3VtZW50cyI6cn0sb3I9QSxpcj1WdCx1cj1kKEZ1bmN0aW9uLnRvU3RyaW5nKTtvcihpci5pbnNwZWN0U291cmNlKXx8KGlyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHVyKHQpfSk7dmFyIGFyPWlyLmluc3BlY3RTb3VyY2UsY3I9ZCxzcj1pLGZyPUEsbHI9cnIseXI9YXIscHI9ZnVuY3Rpb24oKXt9LGhyPXJ0KCJSZWZsZWN0IiwiY29uc3RydWN0IiksZ3I9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sZHI9Y3IoZ3IuZXhlYyksYnI9IWdyLnRlc3QocHIpLHZyPWZ1bmN0aW9uKHQpe2lmKCFmcih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGhyKHByLFtdLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sbXI9ZnVuY3Rpb24odCl7aWYoIWZyKHQpKXJldHVybiExO3N3aXRjaChscih0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gYnJ8fCEhZHIoZ3IseXIodCkpfWNhdGNoKGUpe3JldHVybiEwfX07bXIuc2hhbT0hMDt2YXIgU3I9IWhyfHxzcigoZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdnIodnIuY2FsbCl8fCF2cihPYmplY3QpfHwhdnIoKGZ1bmN0aW9uKCl7dD0hMH0pKXx8dH0pKT9tcjp2cix3cj1SbixPcj1TcixMcj0kLGpyPWxlKCJzcGVjaWVzIiksQXI9QXJyYXksUHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHdyKHQpJiYoZT10LmNvbnN0cnVjdG9yLChPcihlKSYmKGU9PT1Bcnx8d3IoZS5wcm90b3R5cGUpKXx8THIoZSkmJm51bGw9PT0oZT1lW2pyXSkpJiYoZT12b2lkIDApKSx2b2lkIDA9PT1lP0FyOmV9LElyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhQcih0KSkoMD09PWU/MDplKX0sRXI9aSxUcj1wdCxrcj1sZSgic3BlY2llcyIpLHhyPUVuLEZyPWksQ3I9Um4sTnI9JCxNcj1KdCxScj1XbixVcj1mdW5jdGlvbih0KXtpZih0PjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgem4oIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiB0fSxEcj1mdW5jdGlvbih0LGUsbil7S24/cW4uZih0LGUsSm4oMCxuKSk6dFtlXT1ufSxfcj1JcixHcj1mdW5jdGlvbih0KXtyZXR1cm4gVHI+PTUxfHwhRXIoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuKGUuY29uc3RydWN0b3I9e30pW2tyXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lW3RdKEJvb2xlYW4pLmZvb30pKX0sSHI9cHQsQnI9bGUoImlzQ29uY2F0U3ByZWFkYWJsZSIpLFZyPUhyPj01MXx8IUZyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0JyXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxXcj1mdW5jdGlvbih0KXtpZighTnIodCkpcmV0dXJuITE7dmFyIGU9dFtCcl07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOkNyKHQpfTt4cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6IVZyfHwhR3IoImNvbmNhdCIpfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksdT1Ncih0aGlzKSxhPV9yKHUsMCksYz0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKFdyKGk9LTE9PT1lP3U6YXJndW1lbnRzW2VdKSlmb3Iobz1ScihpKSxVcihjK28pLG49MDtuPG87bisrLGMrKyluIGluIGkmJkRyKGEsYyxpW25dKTtlbHNlIFVyKGMrMSksRHIoYSxjKyssaSk7cmV0dXJuIGEubGVuZ3RoPWMsYX19KTt2YXIgenI9cnIsS3I9U3RyaW5nLHFyPWZ1bmN0aW9uKHQpe2lmKCJTeW1ib2wiPT09enIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gS3IodCl9LEpyPXt9LFlyPUduLFhyPU1hdGgubWF4LCRyPU1hdGgubWluLFFyPVksWnI9ZnVuY3Rpb24odCxlKXt2YXIgbj1Zcih0KTtyZXR1cm4gbjwwP1hyKG4rZSwwKTokcihuLGUpfSx0bz1Xbixlbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3ZhciBvPVFyKGUpLGk9dG8obyk7aWYoMD09PWkpcmV0dXJuIXQmJi0xO3ZhciB1LGE9WnIocixpKTtpZih0JiZuIT1uKXtmb3IoO2k+YTspaWYoKHU9b1thKytdKSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7aT5hO2ErKylpZigodHx8YSBpbiBvKSYmb1thXT09PW4pcmV0dXJuIHR8fGF8fDA7cmV0dXJuIXQmJi0xfX0sbm89e2luY2x1ZGVzOmVvKCEwKSxpbmRleE9mOmVvKCExKX0scm89e30sb289JHQsaW89WSx1bz1uby5pbmRleE9mLGFvPXJvLGNvPWQoW10ucHVzaCksc289ZnVuY3Rpb24odCxlKXt2YXIgbixyPWlvKHQpLG89MCxpPVtdO2ZvcihuIGluIHIpIW9vKGFvLG4pJiZvbyhyLG4pJiZjbyhpLG4pO2Zvcig7ZS5sZW5ndGg+bzspb28ocixuPWVbbysrXSkmJih+dW8oaSxuKXx8Y28oaSxuKSk7cmV0dXJuIGl9LGZvPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0sbG89c28seW89Zm8scG89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBsbyh0LHlvKX0saG89SSxnbz0kZSxibz1YZSx2bz1lbixtbz1ZLFNvPXBvO0pyLmY9aG8mJiFnbz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe3ZvKHQpO2Zvcih2YXIgbixyPW1vKGUpLG89U28oZSksaT1vLmxlbmd0aCx1PTA7aT51Oyliby5mKHQsbj1vW3UrK10scltuXSk7cmV0dXJuIHR9O3ZhciB3byxPbz1ydCgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKSxMbz1uZSxqbz16dCgia2V5cyIpLEFvPWZ1bmN0aW9uKHQpe3JldHVybiBqb1t0XXx8KGpvW3RdPUxvKHQpKX0sUG89ZW4sSW89SnIsRW89Zm8sVG89cm8sa289T28seG89QWUsRm89InByb3RvdHlwZSIsQ289InNjcmlwdCIsTm89QW8oIklFX1BST1RPIiksTW89ZnVuY3Rpb24oKXt9LFJvPWZ1bmN0aW9uKHQpe3JldHVybiI8IitDbysiPiIrdCsiPC8iK0NvKyI+In0sVW89ZnVuY3Rpb24odCl7dC53cml0ZShSbygiIikpLHQuY2xvc2UoKTt2YXIgZT10LnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIHQ9bnVsbCxlfSxEbz1mdW5jdGlvbigpe3RyeXt3bz1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChvKXt9dmFyIHQsZSxuO0RvPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZ3bz9Vbyh3byk6KGU9eG8oImlmcmFtZSIpLG49ImphdmEiK0NvKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGtvLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZyhuKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKFJvKCJkb2N1bWVudC5GPU9iamVjdCIpKSx0LmNsb3NlKCksdC5GKTpVbyh3byk7Zm9yKHZhciByPUVvLmxlbmd0aDtyLS07KWRlbGV0ZSBEb1tGb11bRW9bcl1dO3JldHVybiBEbygpfTtUb1tOb109ITA7dmFyIF9vPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhNb1tGb109UG8odCksbj1uZXcgTW8sTW9bRm9dPW51bGwsbltOb109dCk6bj1EbygpLHZvaWQgMD09PWU/bjpJby5mKG4sZSl9LEdvPXt9LEhvPXNvLEJvPWZvLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7R28uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIEhvKHQsQm8pfTt2YXIgVm89e30sV289ZChbXS5zbGljZSksem89UyxLbz1ZLHFvPUdvLmYsSm89V28sWW89Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtWby5mPWZ1bmN0aW9uKHQpe3JldHVybiBZbyYmIldpbmRvdyI9PT16byh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHFvKHQpfWNhdGNoKGUpe3JldHVybiBKbyhZbyl9fSh0KTpxbyhLbyh0KSl9O3ZhciBYbz17fTtYby5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyICRvPWRuLFFvPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByJiZyLmVudW1lcmFibGU/dFtlXT1uOiRvKHQsZSxuKSx0fSxabz1YZSx0aT17fSxlaT1sZTt0aS5mPWVpO3ZhciBuaSxyaSxvaSxpaT1RLHVpPSR0LGFpPXRpLGNpPVhlLmYsc2k9ZnVuY3Rpb24odCl7dmFyIGU9aWkuU3ltYm9sfHwoaWkuU3ltYm9sPXt9KTt1aShlLHQpfHxjaShlLHQse3ZhbHVlOmFpLmYodCl9KX0sZmk9ayxsaT1ydCx5aT1sZSxwaT1RbyxoaT1mdW5jdGlvbigpe3ZhciB0PWxpKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLG49ZSYmZS52YWx1ZU9mLHI9eWkoInRvUHJpbWl0aXZlIik7ZSYmIWVbcl0mJnBpKGUsciwoZnVuY3Rpb24odCl7cmV0dXJuIGZpKG4sdGhpcyl9KSx7YXJpdHk6MX0pfSxnaT1ycixkaT1Ybj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrZ2kodGhpcykrIl0ifSxiaT1Ybix2aT1YZS5mLG1pPWRuLFNpPSR0LHdpPWRpLE9pPWxlKCJ0b1N0cmluZ1RhZyIpLExpPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPW4/dDp0JiZ0LnByb3RvdHlwZTtvJiYoU2kobyxPaSl8fHZpKG8sT2kse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSksciYmIWJpJiZtaShvLCJ0b1N0cmluZyIsd2kpKX0samk9QSxBaT1vLldlYWtNYXAsUGk9amkoQWkpJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKEFpKSksSWk9byxFaT0kLFRpPWRuLGtpPSR0LHhpPVZ0LEZpPUFvLENpPXJvLE5pPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsTWk9SWkuVHlwZUVycm9yLFJpPUlpLldlYWtNYXA7aWYoUGl8fHhpLnN0YXRlKXt2YXIgVWk9eGkuc3RhdGV8fCh4aS5zdGF0ZT1uZXcgUmkpO1VpLmdldD1VaS5nZXQsVWkuaGFzPVVpLmhhcyxVaS5zZXQ9VWkuc2V0LG5pPWZ1bmN0aW9uKHQsZSl7aWYoVWkuaGFzKHQpKXRocm93IG5ldyBNaShOaSk7cmV0dXJuIGUuZmFjYWRlPXQsVWkuc2V0KHQsZSksZX0scmk9ZnVuY3Rpb24odCl7cmV0dXJuIFVpLmdldCh0KXx8e319LG9pPWZ1bmN0aW9uKHQpe3JldHVybiBVaS5oYXModCl9fWVsc2V7dmFyIERpPUZpKCJzdGF0ZSIpO0NpW0RpXT0hMCxuaT1mdW5jdGlvbih0LGUpe2lmKGtpKHQsRGkpKXRocm93IG5ldyBNaShOaSk7cmV0dXJuIGUuZmFjYWRlPXQsVGkodCxEaSxlKSxlfSxyaT1mdW5jdGlvbih0KXtyZXR1cm4ga2kodCxEaSk/dFtEaV06e319LG9pPWZ1bmN0aW9uKHQpe3JldHVybiBraSh0LERpKX19dmFyIF9pPXtzZXQ6bmksZ2V0OnJpLGhhczpvaSxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBvaSh0KT9yaSh0KTpuaSh0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighRWkoZSl8fChuPXJpKGUpKS50eXBlIT09dCl0aHJvdyBuZXcgTWkoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fSxHaT1ZZSxIaT1CLEJpPUp0LFZpPVduLFdpPUlyLHppPWQoW10ucHVzaCksS2k9ZnVuY3Rpb24odCl7dmFyIGU9MT09PXQsbj0yPT09dCxyPTM9PT10LG89ND09PXQsaT02PT09dCx1PTc9PT10LGE9NT09PXR8fGk7cmV0dXJuIGZ1bmN0aW9uKGMscyxmLGwpe2Zvcih2YXIgeSxwLGg9QmkoYyksZz1IaShoKSxkPVZpKGcpLGI9R2kocyxmKSx2PTAsbT1sfHxXaSxTPWU/bShjLGQpOm58fHU/bShjLDApOnZvaWQgMDtkPnY7disrKWlmKChhfHx2IGluIGcpJiYocD1iKHk9Z1t2XSx2LGgpLHQpKWlmKGUpU1t2XT1wO2Vsc2UgaWYocClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIHY7Y2FzZSAyOnppKFMseSl9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzp6aShTLHkpfXJldHVybiBpPy0xOnJ8fG8/bzpTfX0scWk9e2ZvckVhY2g6S2koMCksbWFwOktpKDEpLGZpbHRlcjpLaSgyKSxzb21lOktpKDMpLGV2ZXJ5OktpKDQpLGZpbmQ6S2koNSksZmluZEluZGV4OktpKDYpLGZpbHRlclJlamVjdDpLaSg3KX0sSmk9RW4sWWk9byxYaT1rLCRpPWQsUWk9SSxaaT1idCx0dT1pLGV1PSR0LG51PW90LHJ1PWVuLG91PVksaXU9d2UsdXU9cXIsYXU9VSxjdT1fbyxzdT1wbyxmdT1HbyxsdT1Wbyx5dT1YbyxwdT1QLGh1PVhlLGd1PUpyLGR1PXgsYnU9UW8sdnU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBaby5mKHQsZSxuKX0sbXU9enQsU3U9cm8sd3U9bmUsT3U9bGUsTHU9dGksanU9c2ksQXU9aGksUHU9TGksSXU9X2ksRXU9cWkuZm9yRWFjaCxUdT1BbygiaGlkZGVuIiksa3U9IlN5bWJvbCIseHU9InByb3RvdHlwZSIsRnU9SXUuc2V0LEN1PUl1LmdldHRlckZvcihrdSksTnU9T2JqZWN0W3h1XSxNdT1ZaS5TeW1ib2wsUnU9TXUmJk11W3h1XSxVdT1ZaS5SYW5nZUVycm9yLER1PVlpLlR5cGVFcnJvcixfdT1ZaS5RT2JqZWN0LEd1PXB1LmYsSHU9aHUuZixCdT1sdS5mLFZ1PWR1LmYsV3U9JGkoW10ucHVzaCksenU9bXUoInN5bWJvbHMiKSxLdT1tdSgib3Atc3ltYm9scyIpLHF1PW11KCJ3a3MiKSxKdT0hX3V8fCFfdVt4dV18fCFfdVt4dV0uZmluZENoaWxkLFl1PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1HdShOdSxlKTtyJiZkZWxldGUgTnVbZV0sSHUodCxlLG4pLHImJnQhPT1OdSYmSHUoTnUsZSxyKX0sWHU9UWkmJnR1KChmdW5jdGlvbigpe3JldHVybiA3IT09Y3UoSHUoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSHUodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP1l1Okh1LCR1PWZ1bmN0aW9uKHQsZSl7dmFyIG49enVbdF09Y3UoUnUpO3JldHVybiBGdShuLHt0eXBlOmt1LHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxRaXx8KG4uZGVzY3JpcHRpb249ZSksbn0sUXU9ZnVuY3Rpb24odCxlLG4pe3Q9PT1OdSYmUXUoS3UsZSxuKSxydSh0KTt2YXIgcj1pdShlKTtyZXR1cm4gcnUobiksZXUoenUscik/KG4uZW51bWVyYWJsZT8oZXUodCxUdSkmJnRbVHVdW3JdJiYodFtUdV1bcl09ITEpLG49Y3Uobix7ZW51bWVyYWJsZTphdSgwLCExKX0pKTooZXUodCxUdSl8fEh1KHQsVHUsYXUoMSxjdShudWxsKSkpLHRbVHVdW3JdPSEwKSxYdSh0LHIsbikpOkh1KHQscixuKX0sWnU9ZnVuY3Rpb24odCxlKXtydSh0KTt2YXIgbj1vdShlKSxyPXN1KG4pLmNvbmNhdChyYShuKSk7cmV0dXJuIEV1KHIsKGZ1bmN0aW9uKGUpe1FpJiYhWGkodGEsbixlKXx8UXUodCxlLG5bZV0pfSkpLHR9LHRhPWZ1bmN0aW9uKHQpe3ZhciBlPWl1KHQpLG49WGkoVnUsdGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1OdSYmZXUoenUsZSkmJiFldShLdSxlKSkmJighKG58fCFldSh0aGlzLGUpfHwhZXUoenUsZSl8fGV1KHRoaXMsVHUpJiZ0aGlzW1R1XVtlXSl8fG4pfSxlYT1mdW5jdGlvbih0LGUpe3ZhciBuPW91KHQpLHI9aXUoZSk7aWYobiE9PU51fHwhZXUoenUscil8fGV1KEt1LHIpKXt2YXIgbz1HdShuLHIpO3JldHVybiFvfHwhZXUoenUscil8fGV1KG4sVHUpJiZuW1R1XVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LG5hPWZ1bmN0aW9uKHQpe3ZhciBlPUJ1KG91KHQpKSxuPVtdO3JldHVybiBFdShlLChmdW5jdGlvbih0KXtldSh6dSx0KXx8ZXUoU3UsdCl8fFd1KG4sdCl9KSksbn0scmE9ZnVuY3Rpb24odCl7dmFyIGU9dD09PU51LG49QnUoZT9LdTpvdSh0KSkscj1bXTtyZXR1cm4gRXUobiwoZnVuY3Rpb24odCl7IWV1KHp1LHQpfHxlJiYhZXUoTnUsdCl8fFd1KHIsenVbdF0pfSkpLHJ9O1ppfHwoTXU9ZnVuY3Rpb24oKXtpZihudShSdSx0aGlzKSl0aHJvdyBuZXcgRHUoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT91dShhcmd1bWVudHNbMF0pOnZvaWQgMCxlPXd1KHQpLG49ZnVuY3Rpb24odCl7dmFyIHI9dm9pZCAwPT09dGhpcz9ZaTp0aGlzO3I9PT1OdSYmWGkobixLdSx0KSxldShyLFR1KSYmZXUocltUdV0sZSkmJihyW1R1XVtlXT0hMSk7dmFyIG89YXUoMSx0KTt0cnl7WHUocixlLG8pfWNhdGNoKGkpe2lmKCEoaSBpbnN0YW5jZW9mIFV1KSl0aHJvdyBpO1l1KHIsZSxvKX19O3JldHVybiBRaSYmSnUmJlh1KE51LGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLCR1KGUsdCl9LGJ1KFJ1PU11W3h1XSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBDdSh0aGlzKS50YWd9KSksYnUoTXUsIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4gJHUod3UodCksdCl9KSksZHUuZj10YSxodS5mPVF1LGd1LmY9WnUscHUuZj1lYSxmdS5mPWx1LmY9bmEseXUuZj1yYSxMdS5mPWZ1bmN0aW9uKHQpe3JldHVybiAkdShPdSh0KSx0KX0sUWkmJnZ1KFJ1LCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ3UodGhpcykuZGVzY3JpcHRpb259fSkpLEppKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IVppLHNoYW06IVppfSx7U3ltYm9sOk11fSksRXUoc3UocXUpLChmdW5jdGlvbih0KXtqdSh0KX0pKSxKaSh7dGFyZ2V0Omt1LHN0YXQ6ITAsZm9yY2VkOiFaaX0se3VzZVNldHRlcjpmdW5jdGlvbigpe0p1PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtKdT0hMX19KSxKaSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFaaSxzaGFtOiFRaX0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2N1KHQpOlp1KGN1KHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpRdSxkZWZpbmVQcm9wZXJ0aWVzOlp1LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjplYX0pLEppKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IVppfSx7Z2V0T3duUHJvcGVydHlOYW1lczpuYX0pLEF1KCksUHUoTXUsa3UpLFN1W1R1XT0hMDt2YXIgb2E9YnQmJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yLGlhPUVuLHVhPXJ0LGFhPSR0LGNhPXFyLHNhPXp0LGZhPW9hLGxhPXNhKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IikseWE9c2EoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtpYSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFmYX0se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1jYSh0KTtpZihhYShsYSxlKSlyZXR1cm4gbGFbZV07dmFyIG49dWEoIlN5bWJvbCIpKGUpO3JldHVybiBsYVtlXT1uLHlhW25dPWUsbn19KTt2YXIgcGE9RW4saGE9JHQsZ2E9THQsZGE9QXQsYmE9b2EsdmE9enQoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtwYSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFiYX0se2tleUZvcjpmdW5jdGlvbih0KXtpZighZ2EodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihkYSh0KSsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGhhKHZhLHQpKXJldHVybiB2YVt0XX19KTt2YXIgbWE9Um4sU2E9QSx3YT1TLE9hPXFyLExhPWQoW10ucHVzaCksamE9RW4sQWE9cnQsUGE9bCxJYT1rLEVhPWQsVGE9aSxrYT1BLHhhPUx0LEZhPVdvLENhPWZ1bmN0aW9uKHQpe2lmKFNhKHQpKXJldHVybiB0O2lmKG1hKHQpKXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bXSxyPTA7cjxlO3IrKyl7dmFyIG89dFtyXTsic3RyaW5nIj09dHlwZW9mIG8/TGEobixvKToibnVtYmVyIiE9dHlwZW9mIG8mJiJOdW1iZXIiIT09d2EobykmJiJTdHJpbmciIT09d2Eobyl8fExhKG4sT2EobykpfXZhciBpPW4ubGVuZ3RoLHU9ITA7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodSlyZXR1cm4gdT0hMSxlO2lmKG1hKHRoaXMpKXJldHVybiBlO2Zvcih2YXIgcj0wO3I8aTtyKyspaWYobltyXT09PXQpcmV0dXJuIGV9fX0sTmE9YnQsTWE9U3RyaW5nLFJhPUFhKCJKU09OIiwic3RyaW5naWZ5IiksVWE9RWEoLy4vLmV4ZWMpLERhPUVhKCIiLmNoYXJBdCksX2E9RWEoIiIuY2hhckNvZGVBdCksR2E9RWEoIiIucmVwbGFjZSksSGE9RWEoMS4udG9TdHJpbmcpLEJhPS9bXHVEODAwLVx1REZGRl0vZyxWYT0vXltcdUQ4MDAtXHVEQkZGXSQvLFdhPS9eW1x1REMwMC1cdURGRkZdJC8semE9IU5hfHxUYSgoZnVuY3Rpb24oKXt2YXIgdD1BYSgiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PVJhKFt0XSl8fCJ7fSIhPT1SYSh7YTp0fSl8fCJ7fSIhPT1SYShPYmplY3QodCkpfSkpLEthPVRhKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PVJhKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1SYSgiXHVkZWFkIil9KSkscWE9ZnVuY3Rpb24odCxlKXt2YXIgbj1GYShhcmd1bWVudHMpLHI9Q2EoZSk7aWYoa2Eocil8fHZvaWQgMCE9PXQmJiF4YSh0KSlyZXR1cm4gblsxXT1mdW5jdGlvbih0LGUpe2lmKGthKHIpJiYoZT1JYShyLHRoaXMsTWEodCksZSkpLCF4YShlKSlyZXR1cm4gZX0sUGEoUmEsbnVsbCxuKX0sSmE9ZnVuY3Rpb24odCxlLG4pe3ZhciByPURhKG4sZS0xKSxvPURhKG4sZSsxKTtyZXR1cm4gVWEoVmEsdCkmJiFVYShXYSxvKXx8VWEoV2EsdCkmJiFVYShWYSxyKT8iXFx1IitIYShfYSh0LDApLDE2KTp0fTtSYSYmamEoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDp6YXx8S2F9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPUZhKGFyZ3VtZW50cyksbz1QYSh6YT9xYTpSYSxudWxsLHIpO3JldHVybiBLYSYmInN0cmluZyI9PXR5cGVvZiBvP0dhKG8sQmEsSmEpOm99fSk7dmFyIFlhPVhvLFhhPUp0O0VuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWJ0fHxpKChmdW5jdGlvbigpe1lhLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7dmFyIGU9WWEuZjtyZXR1cm4gZT9lKFhhKHQpKTpbXX19KSxzaSgiYXN5bmNJdGVyYXRvciIpLHNpKCJoYXNJbnN0YW5jZSIpLHNpKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxzaSgiaXRlcmF0b3IiKSxzaSgibWF0Y2giKSxzaSgibWF0Y2hBbGwiKSxzaSgicmVwbGFjZSIpLHNpKCJzZWFyY2giKSxzaSgic3BlY2llcyIpLHNpKCJzcGxpdCIpO3ZhciAkYT1oaTtzaSgidG9QcmltaXRpdmUiKSwkYSgpO3ZhciBRYT1ydCxaYT1MaTtzaSgidG9TdHJpbmdUYWciKSxaYShRYSgiU3ltYm9sIiksIlN5bWJvbCIpLHNpKCJ1bnNjb3BhYmxlcyIpLExpKG8uSlNPTiwiSlNPTiIsITApO3ZhciB0YyxlYyxuYyxyYz1RLlN5bWJvbCxvYz17fSxpYz1JLHVjPSR0LGFjPUZ1bmN0aW9uLnByb3RvdHlwZSxjYz1pYyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzYz11YyhhYywibmFtZSIpLGZjPXtFWElTVFM6c2MsUFJPUEVSOnNjJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpzYyYmKCFpY3x8aWMmJmNjKGFjLCJuYW1lIikuY29uZmlndXJhYmxlKX0sbGM9IWkoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSkseWM9JHQscGM9QSxoYz1KdCxnYz1sYyxkYz1BbygiSUVfUFJPVE8iKSxiYz1PYmplY3QsdmM9YmMucHJvdG90eXBlLG1jPWdjP2JjLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3ZhciBlPWhjKHQpO2lmKHljKGUsZGMpKXJldHVybiBlW2RjXTt2YXIgbj1lLmNvbnN0cnVjdG9yO3JldHVybiBwYyhuKSYmZSBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIGJjP3ZjOm51bGx9LFNjPWksd2M9QSxPYz0kLExjPV9vLGpjPW1jLEFjPVFvLFBjPWxlKCJpdGVyYXRvciIpLEljPSExO1tdLmtleXMmJigibmV4dCJpbihuYz1bXS5rZXlzKCkpPyhlYz1qYyhqYyhuYykpKSE9PU9iamVjdC5wcm90b3R5cGUmJih0Yz1lYyk6SWM9ITApO3ZhciBFYz0hT2ModGMpfHxTYygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGNbUGNdLmNhbGwodCkhPT10fSkpO3djKCh0Yz1FYz97fTpMYyh0YykpW1BjXSl8fEFjKHRjLFBjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBUYz17SXRlcmF0b3JQcm90b3R5cGU6dGMsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpJY30sa2M9VGMuSXRlcmF0b3JQcm90b3R5cGUseGM9X28sRmM9VSxDYz1MaSxOYz1vYyxNYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxSYz1FbixVYz1rLERjPWZjLF9jPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPXhjKGtjLHtuZXh0OkZjKCshcixuKX0pLENjKHQsbywhMSwhMCksTmNbb109TWMsdH0sR2M9bWMsSGM9TGksQmM9UW8sVmM9b2MsV2M9VGMsemM9RGMuUFJPUEVSLEtjPVdjLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscWM9bGUoIml0ZXJhdG9yIiksSmM9ImtleXMiLFljPSJ2YWx1ZXMiLFhjPSJlbnRyaWVzIiwkYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxRYz1mdW5jdGlvbih0LGUsbixyLG8saSx1KXtfYyhuLGUscik7dmFyIGEsYyxzLGY9ZnVuY3Rpb24odCl7aWYodD09PW8mJmcpcmV0dXJuIGc7aWYoIUtjJiZ0JiZ0IGluIHApcmV0dXJuIHBbdF07c3dpdGNoKHQpe2Nhc2UgSmM6Y2FzZSBZYzpjYXNlIFhjOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxsPWUrIiBJdGVyYXRvciIseT0hMSxwPXQucHJvdG90eXBlLGg9cFtxY118fHBbIkBAaXRlcmF0b3IiXXx8byYmcFtvXSxnPSFLYyYmaHx8ZihvKSxkPSJBcnJheSI9PT1lJiZwLmVudHJpZXN8fGg7aWYoZCYmKGE9R2MoZC5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmYS5uZXh0JiYoSGMoYSxsLCEwLCEwKSxWY1tsXT0kYyksemMmJm89PT1ZYyYmaCYmaC5uYW1lIT09WWMmJih5PSEwLGc9ZnVuY3Rpb24oKXtyZXR1cm4gVWMoaCx0aGlzKX0pLG8paWYoYz17dmFsdWVzOmYoWWMpLGtleXM6aT9nOmYoSmMpLGVudHJpZXM6ZihYYyl9LHUpZm9yKHMgaW4gYykoS2N8fHl8fCEocyBpbiBwKSkmJkJjKHAscyxjW3NdKTtlbHNlIFJjKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6S2N8fHl9LGMpO3JldHVybiB1JiZwW3FjXSE9PWcmJkJjKHAscWMsZyx7bmFtZTpvfSksVmNbZV09ZyxjfSxaYz1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19LHRzPVksZXM9b2MsbnM9X2k7WGUuZjt2YXIgcnM9UWMsb3M9WmMsaXM9IkFycmF5IEl0ZXJhdG9yIix1cz1ucy5zZXQsYXM9bnMuZ2V0dGVyRm9yKGlzKTtycyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3VzKHRoaXMse3R5cGU6aXMsdGFyZ2V0OnRzKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1hcyh0aGlzKSxlPXQudGFyZ2V0LG49dC5pbmRleCsrO2lmKCFlfHxuPj1lLmxlbmd0aClyZXR1cm4gdC50YXJnZXQ9bnVsbCxvcyh2b2lkIDAsITApO3N3aXRjaCh0LmtpbmQpe2Nhc2Uia2V5cyI6cmV0dXJuIG9zKG4sITEpO2Nhc2UidmFsdWVzIjpyZXR1cm4gb3MoZVtuXSwhMSl9cmV0dXJuIG9zKFtuLGVbbl1dLCExKX0pLCJ2YWx1ZXMiKSxlcy5Bcmd1bWVudHM9ZXMuQXJyYXk7dmFyIGNzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxzcz1vLGZzPUxpLGxzPW9jO2Zvcih2YXIgeXMgaW4gY3MpZnMoc3NbeXNdLHlzKSxsc1t5c109bHMuQXJyYXk7dmFyIHBzPXJjLGhzPWxlLGdzPVhlLmYsZHM9aHMoIm1ldGFkYXRhIiksYnM9RnVuY3Rpb24ucHJvdG90eXBlO3ZvaWQgMD09PWJzW2RzXSYmZ3MoYnMsZHMse3ZhbHVlOm51bGx9KSxzaSgiYXN5bmNEaXNwb3NlIiksc2koImRpc3Bvc2UiKSxzaSgibWV0YWRhdGEiKTt2YXIgdnM9cHMsbXM9ZCxTcz1ydCgiU3ltYm9sIiksd3M9U3Mua2V5Rm9yLE9zPW1zKFNzLnByb3RvdHlwZS52YWx1ZU9mKSxMcz1Tcy5pc1JlZ2lzdGVyZWRTeW1ib2x8fGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdm9pZCAwIT09d3MoT3ModCkpfWNhdGNoKGUpe3JldHVybiExfX07RW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwfSx7aXNSZWdpc3RlcmVkU3ltYm9sOkxzfSk7Zm9yKHZhciBqcz16dCxBcz1ydCxQcz1kLElzPUx0LEVzPWxlLFRzPUFzKCJTeW1ib2wiKSxrcz1Ucy5pc1dlbGxLbm93blN5bWJvbCx4cz1BcygiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIpLEZzPVBzKFRzLnByb3RvdHlwZS52YWx1ZU9mKSxDcz1qcygid2tzIiksTnM9MCxNcz14cyhUcyksUnM9TXMubGVuZ3RoO05zPFJzO05zKyspdHJ5e3ZhciBVcz1Nc1tOc107SXMoVHNbVXNdKSYmRXMoVXMpfWNhdGNoKGJmKXt9dmFyIERzPWZ1bmN0aW9uKHQpe2lmKGtzJiZrcyh0KSlyZXR1cm4hMDt0cnl7Zm9yKHZhciBlPUZzKHQpLG49MCxyPXhzKENzKSxvPXIubGVuZ3RoO248bztuKyspaWYoQ3NbcltuXV09PWUpcmV0dXJuITB9Y2F0Y2goYmYpe31yZXR1cm4hMX07RW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLGZvcmNlZDohMH0se2lzV2VsbEtub3duU3ltYm9sOkRzfSksc2koImN1c3RvbU1hdGNoZXIiKSxzaSgib2JzZXJ2YWJsZSIpLEVuKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxuYW1lOiJpc1JlZ2lzdGVyZWRTeW1ib2wifSx7aXNSZWdpc3RlcmVkOkxzfSksRW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzV2VsbEtub3duU3ltYm9sIixmb3JjZWQ6ITB9LHtpc1dlbGxLbm93bjpEc30pLHNpKCJtYXRjaGVyIiksc2koIm1ldGFkYXRhS2V5Iiksc2koInBhdHRlcm5NYXRjaCIpLHNpKCJyZXBsYWNlQWxsIik7dmFyIF9zPWUodnMpLEdzPWQsSHM9R24sQnM9cXIsVnM9SyxXcz1HcygiIi5jaGFyQXQpLHpzPUdzKCIiLmNoYXJDb2RlQXQpLEtzPUdzKCIiLnNsaWNlKSxxcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcixvLGk9QnMoVnMoZSkpLHU9SHMobiksYT1pLmxlbmd0aDtyZXR1cm4gdTwwfHx1Pj1hP3Q/IiI6dm9pZCAwOihyPXpzKGksdSkpPDU1Mjk2fHxyPjU2MzE5fHx1KzE9PT1hfHwobz16cyhpLHUrMSkpPDU2MzIwfHxvPjU3MzQzP3Q/V3MoaSx1KTpyOnQ/S3MoaSx1LHUrMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sSnM9e2NvZGVBdDpxcyghMSksY2hhckF0OnFzKCEwKX0uY2hhckF0LFlzPXFyLFhzPV9pLCRzPVFjLFFzPVpjLFpzPSJTdHJpbmcgSXRlcmF0b3IiLHRmPVhzLnNldCxlZj1Ycy5nZXR0ZXJGb3IoWnMpOyRzKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7dGYodGhpcyx7dHlwZTpacyxzdHJpbmc6WXModCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1lZih0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/UXModm9pZCAwLCEwKToodD1KcyhuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLFFzKHQsITEpKX0pKTt2YXIgbmY9ZSh0aS5mKCJpdGVyYXRvciIpKTtmdW5jdGlvbiByZih0KXtyZXR1cm4ocmY9ImZ1bmN0aW9uIj09dHlwZW9mIF9zJiYic3ltYm9sIj09dHlwZW9mIG5mP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBfcyYmdC5jb25zdHJ1Y3Rvcj09PV9zJiZ0IT09X3MucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIG9mPWUodGkuZigidG9QcmltaXRpdmUiKSk7ZnVuY3Rpb24gdWYodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9cmYodCl8fCF0KXJldHVybiB0O3ZhciBuPXRbb2ZdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXJmKHIpKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXJmKGUpP2U6ZSsiIn1mdW5jdGlvbiBhZih0LGUsbil7cmV0dXJuKGU9dWYoZSkpaW4gdD9Obih0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1jb25zdCBjZj17Z2V0TkFMVW5pdHModCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZih0Lmxlbmd0aC10LnBvc2l0aW9uPDQpcmV0dXJuW107Y29uc3R7cG9zaXRpb246bn09dDtyZXR1cm4gMT09PXQuZ2V0SW50MzIobil8fDA9PT10LmdldEludDE2KG4pJiYxPT09dC5nZXRJbnQ4KG4rMik/Y2YuZ2V0QW5uZXhiTmFscyh0LGUpOmNmLmdldEF2Y2NOYWxzKHQsZSl9LGdldEFubmV4Yk5hbHModCxlKXtjb25zdCBuPVtdO2xldCByPWNmLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLG89ci5wb3MsaT1vO2Zvcig7bzx0Lmxlbmd0aC00Oyl7Y29uc3QgdT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShvLG8rci5oZWFkZXJMZW5ndGgpKTtyLnBvcz09PXQucG9zaXRpb24mJnQuc2tpcChyLmhlYWRlckxlbmd0aCkscj1jZi5nZXRIZWFkZXJQb3NpdGlvbkFubmV4Qih0KSxpPXIucG9zO2NvbnN0IGE9e2hlYWRlcjp1LGJvZHk6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2Uobyt1LmJ5dGVMZW5ndGgsaSkpLHR5cGU6LTF9O2U/Y2YuYW5hbHlzZUgyNjVOYWwoYSk6Y2YuYW5hbHlzZU5hbChhKSwoYS50eXBlPD05fHxlJiZhLnR5cGU8PTQwKSYmMCE9PWEudHlwZSYmbi5wdXNoKGEpLHQuc2tpcChpLXQucG9zaXRpb24pLG89aX1yZXR1cm4gbn0sZ2V0QXZjY05hbHModCxlKXtjb25zdCBuPVtdO2Zvcig7dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7Y29uc3Qgcj10LmdldEludDMyKHQucG9zaXRpb24pO2lmKCEodC5sZW5ndGgtdC5wb3NpdGlvbj49cikpYnJlYWs7e2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2UodC5wb3NpdGlvbix0LnBvc2l0aW9uKzQpKTt0LnNraXAoNCk7Y29uc3QgaT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZSh0LnBvc2l0aW9uLHQucG9zaXRpb24rcikpO3Quc2tpcChyKTtjb25zdCB1PXtoZWFkZXI6byxib2R5OmksdHlwZTotMX07ZT9jZi5hbmFseXNlSDI2NU5hbCh1KTpjZi5hbmFseXNlTmFsKHUpLHUudHlwZTw9OSYmMCE9PXUudHlwZSYmbi5wdXNoKHUpfX1yZXR1cm4gbn0sYW5hbHlzZU5hbCh0KXtjb25zdCBlPTMxJnQuYm9keVswXTtzd2l0Y2godC50eXBlPWUsZSl7Y2FzZSAxOnQubmRyPSEwO2JyZWFrO2Nhc2UgNTp0Lmlkcj0hMDticmVhaztjYXNlIDY6dC5zZWk9ITA7YnJlYWs7Y2FzZSA3OnQuc3BzPSEwO2JyZWFrO2Nhc2UgODp0LnBwcz0hMH19LGFuYWx5c2VIMjY1TmFsKHQpe2NvbnN0IGU9KDEyNiZ0LmJvZHlbMF0pPj4xO3N3aXRjaCh0LnR5cGU9ZSxlKXtjYXNlIDM5OmNhc2UgNDA6dC5zZWk9ITB9fSxnZXRIZWFkZXJQb3NpdGlvbkFubmV4Qih0KXtsZXQgZT10LnBvc2l0aW9uLG49MDtjb25zdCByPXQubGVuZ3RoO2Zvcig7MyE9PW4mJjQhPT1uJiZlPHItNDspMD09PXQuZ2V0SW50MTYoZSk/MT09PXQuZ2V0SW50MTYoZSsyKT9uPTQ6MT09PXQuZ2V0SW50OChlKzIpP249MzplKys6ZSsrO3JldHVybiBlPT09ci00JiYoMD09PXQuZ2V0SW50MTYoZSk/MT09PXQuZ2V0SW50MTYoZSsyKT9uPTQ6ZT1yOihlKyssMD09PXQuZ2V0SW50MTYoZSkmJjE9PT10LmdldEludDgoZSk/bj0zOmU9cikpLHtwb3M6ZSxoZWFkZXJMZW5ndGg6bn19LGlzSDI2NVZpZGVvRnJhbWUodCl7dmFyIGU7cmV0dXJuKChudWxsPT09KGU9dC5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PWV8fG51bGw9PT0oZT1lLmNhbGwodCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19LHNmPW5ldyBVaW50OEFycmF5KFsxMDksMTY3LDUzLDE5MCwxMDMsOTAsNzIsMSwxNzAsODksNjMsMTY0LDE5NCwxOTksMTksODVdKSxmZj1uZXcgVWludDhBcnJheShbMTA5LDE2Nyw1MywxOTAsMTAzLDkwLDcyLDEsMTcwLDg5LDYzLDE2NCwxOTQsMTk5LDE5LDg0XSksbGY9bmV3IFVpbnQ4QXJyYXkoWzMxLDIzOSwzLDUwLDI0MiwxMjAsNzYsODUsMTY5LDQyLDE2MSw5MSw3NSwxODYsMjJdKTtmdW5jdGlvbiB5Zih0KXtjb25zdCBlPVtdO2Zvcig7dD49MjU1Oyl0LT0yNTUsZS5wdXNoKDI1NSk7cmV0dXJuIGUucHVzaCh0KSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBwZih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPTA7Zm9yKDsyNTU9PT10W2VdJiZlPHQuYnl0ZUxlbmd0aDspZSsrLG4rPTI1NTtyZXR1cm4gZTx0LmJ5dGVMZW5ndGgmJihuKz10W2UrK10pLFtuLGVdfWNvbnN0IGhmPW5ldyBVaW50OEFycmF5KFs4MCwxXSk7Y2xhc3MgZ2Z7c3RhdGljIGdlbmVyYXRlU0VJKHQsZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPW5ldyBVaW50OEFycmF5KFswLDAsMCwxXSksbz1lP2hmOm5ldyBVaW50OEFycmF5KFs2XSksaT1uZXcgVWludDhBcnJheShbNV0pLHU9Z2YuX191dWlkfHwobj9zZjpmZiksYT15Zih0LmJ5dGVMZW5ndGgrdS5ieXRlTGVuZ3RoKSxjPSh0PT57Y29uc3QgZT1bXTtsZXQgbj0wO2Zvcihjb25zdCByIG9mIHQpbj49MiYmcjw9MyYmKGUucHVzaCgzKSxuPTApLDA9PT1yP24rKzpuPTAsZS5wdXNoKHIpO3JldHVybiBuZXcgVWludDhBcnJheShlKX0pKHQpO3JldHVybiBuZXcgVWludDhBcnJheShbLi4uciwuLi5vLC4uLmksLi4uYSwuLi51LC4uLmMsMTI4XSl9c3RhdGljIGRlY29kZVNFSUJvZHkodCxlKXtjb25zdCBuPSh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dPD0zJiYwPT09dFtuLTFdJiYwPT09dFtuLTJdfHxlLnB1c2godFtuXSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSkodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpO2lmKG4uYnl0ZUxlbmd0aDwyKXJldHVybjtsZXQgcj0wO2NvbnN0IG89ZT8yOjE7aWYoNSE9PW5bb10mJjEwMCE9PW5bb10pcmV0dXJuO3IrPTErbztjb25zdFtpLHVdPXBmKG4scik7cj11O2xldCBhPTI7Y29uc3QgYz1yK2k7bi5ieXRlTGVuZ3RoPj1mZi5ieXRlTGVuZ3RoJiZpPj1mZi5ieXRlTGVuZ3RoJiYobi5zbGljZShyLHIrZmYuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PWZmLnRvU3RyaW5nKCl8fG4uc2xpY2UocixyK2xmLmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCk9PT1sZi50b1N0cmluZygpKT8ocis9ZmYuYnl0ZUxlbmd0aCxhPTEpOm4uYnl0ZUxlbmd0aD49ZmYuYnl0ZUxlbmd0aCYmaT49ZmYuYnl0ZUxlbmd0aCYmbi5zbGljZShyLHIrc2YuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PXNmLnRvU3RyaW5nKCkmJihyKz1zZi5ieXRlTGVuZ3RoLGE9MCk7cmV0dXJue3R5cGU6YSxwYXlsb2FkOm4uc2xpY2UocixjKX19c3RhdGljIHBhcnNlSW50ZXJuYWxTRUkodCl7Y29uc3QgZT1uZXcgTWFwO2xldCBuPTA7aWYoMD09PXQudHlwZSl7Zm9yKDt0LnBheWxvYWQuYnl0ZUxlbmd0aC1uPj0yOyl7Y29uc3RbcixvXT1wZih0LnBheWxvYWQsbik7bj1vO2NvbnN0W2ksdV09cGYodC5wYXlsb2FkLG4pO2lmKG49dSxlLmdldChyKXx8IShpPD10LnBheWxvYWQuYnl0ZUxlbmd0aC1uKSlicmVhaztlLnNldChyLHQucGF5bG9hZC5zbGljZShuLG4raSkpLG4rPWl9cmV0dXJuIGV9fXN0YXRpYyBtYWtlSW50ZXJuYWxTZWkodCl7Y29uc3QgZT1bXTtmb3IoY29uc3RbbyxpXW9mIHQpe2NvbnN0IHQ9eWYobyksbj15ZihpLmJ5dGVMZW5ndGgpO2UucHVzaCh0LG4saSl9Y29uc3Qgbj1lLnJlZHVjZSgoKHQsZSk9PnQrZS5ieXRlTGVuZ3RoKSwwKSxyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBlLnJlZHVjZSgoKHQsZSk9PihyLnNldChlLHQpLHQrZS5ieXRlTGVuZ3RoKSksMCkscn19YWYoZ2YsIl9fdXVpZCIsdm9pZCAwKTtjbGFzcyBkZntjb25zdHJ1Y3Rvcih0KXthZih0aGlzLCJzZWlMaXN0IixbXSksYWYodGhpcywibWF4U0VJQ291bnQiLDEpLHRoaXMubWF4U0VJQ291bnQ9dC5tYXhTRUlDb3VudH1zZW5kU0VJVHJhbnNmb3JtKHQsZSl7Y29uc3R7bWF4U0VJQ291bnQ6bixzZWlMaXN0OnJ9PXRoaXM7aWYoIXRoaXMuc2VpTGlzdC5sZW5ndGgpcmV0dXJuIHZvaWQgZS5lbnF1ZXVlKHQpO2NvbnN0IG89W107bGV0IGk9MDtmb3IoY29uc3QgYyBvZiByKXtpZihvLmxlbmd0aD49bilicmVhaztjb25zdCBlPWdmLmdlbmVyYXRlU0VJKGMuY29udGVudCxjZi5pc0gyNjVWaWRlb0ZyYW1lKHQpKTtpKz1lLmJ5dGVMZW5ndGgsYy5yZXBlYXRDb3VudC0tLG8ucHVzaChlKX10aGlzLnNlaUxpc3Q9ci5maWx0ZXIoKHQ9PnQucmVwZWF0Q291bnQ+MCkpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkoaSt0LmRhdGEuYnl0ZUxlbmd0aCk7dS5zZXQobmV3IFVpbnQ4QXJyYXkodC5kYXRhKSk7bGV0IGE9dC5kYXRhLmJ5dGVMZW5ndGg7by5mb3JFYWNoKCh0PT57dS5zZXQodCxhKSxhKz10LmJ5dGVMZW5ndGh9KSksdC5kYXRhPXUuYnVmZmVyLGUuZW5xdWV1ZSh0KX1wdXNoU0VJKHQpe3RoaXMuc2VpTGlzdC5wdXNoKHQpfXJldm9rZVNFSSh0KXtjb25zdCBlPXRoaXMuc2VpTGlzdC5maW5kSW5kZXgoKGU9PmUudXVpZD09PXQpKTtyZXR1cm4tMSE9PWUmJih0aGlzLnNlaUxpc3Quc3BsaWNlKGUsMSksITApfX0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwodD0+e2NvbnN0e3RyYW5zZm9ybWVyOmV9PXQse3BvcnQ6bixtYXhTRUlDb3VudDpyfT1lLm9wdGlvbnMsbz1uZXcgZGYoe21heFNFSUNvdW50OnJ9KSxpPW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTpvLnNlbmRTRUlUcmFuc2Zvcm0uYmluZChvKX0pO24ub25tZXNzYWdlPXQ9PntsZXR7ZGF0YTplfT10O2NvbnN0e3R5cGU6cixjb250ZW50Oml9PWU7aWYoInB1c2giPT09cilvLnB1c2hTRUkoaSk7ZWxzZSBpZigicmV2b2tlIj09PXIpe2NvbnN0IHQ9by5yZXZva2VTRUkoaSk7cmV0dXJuIG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJldm9rZS1hY2siLGNvbnRlbnQ6e3V1aWQ6aSxpc05vdFNlbmQ6dH19KX19LGUucmVhZGFibGUucGlwZVRocm91Z2goaSkucGlwZVRvKGUud3JpdGFibGUpfSkpfSgpOwo=",QN=typeof window<"u"&&window.Blob&&new Blob([atob(kX)],{type:"text/javascript;charset=utf-8"});function CbA(){let A;try{if(A=QN&&(vi||window.webkitURL).createObjectURL(QN),!A)throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+kX)}finally{!(typeof window<"u"&&navigator.userAgent.indexOf("Trident/")>0)&&A&&(vi||window.webkitlRL).revokeObjectURL(A)}}const Ki={getNALUnits(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(A.length-A.position<4)return[];const{position:g}=A;return A.getInt32(g)===1||A.getInt16(g)===0&&A.getInt8(g+2)===1?Ki.getAnnexbNals(A,I):Ki.getAvccNals(A,I)},getAnnexbNals(A,I){const g=[];let C=Ki.getHeaderPositionAnnexB(A),Q=C.pos,i=Q;for(;Q=C))break;{const Q=new Uint8Array(A.buffer.slice(A.position,A.position+4));A.skip(4);const i=new Uint8Array(A.buffer.slice(A.position,A.position+C));A.skip(C);const B={header:Q,body:i,type:-1};I?Ki.analyseH265Nal(B):Ki.analyseNal(B),B.type<=9&&B.type!==0&&g.push(B)}}return g},analyseNal(A){const I=31&A.body[0];switch(A.type=I,I){case 1:A.ndr=!0;break;case 5:A.idr=!0;break;case 6:A.sei=!0;break;case 7:A.sps=!0;break;case 8:A.pps=!0}},analyseH265Nal(A){const I=(126&A.body[0])>>1;switch(A.type=I,I){case 39:case 40:A.sei=!0}},getHeaderPositionAnnexB(A){let I=A.position,g=0;const C=A.length;for(;g!==3&&g!==4&&I0&&_Q.readByte(this,C)}static readByte(I,g,C){let Q;switch(g){case 1:Q=C?I.getInt8(I.position):I.getUint8(I.position);break;case 2:Q=C?I.getInt16(I.position):I.getUint16(I.position);break;case 3:if(C)throw new Error("not supported for readByte 3");Q=I.getUint8(I.position)<<16,Q|=I.getUint8(I.position+1)<<8,Q|=I.getUint8(I.position+2);break;case 4:Q=C?I.getInt32(I.position):I.getUint32(I.position);break;case 8:if(C)throw new Error("not supported for readBody 8");Q=I.getUint32(I.position)<<32,Q|=I.getUint32(I.position+4);break;default:Q=""}return I.position+=g,Q}readUint8(){return _Q.readByte(this,1)}readUint16(){return _Q.readByte(this,2)}readUint24(){return _Q.readByte(this,3)}readUint32(){return _Q.readByte(this,4)}readUint64(){return _Q.readByte(this,8)}readInt8(){return _Q.readByte(this,1,!0)}readInt16(){return _Q.readByte(this,2,!0)}readInt32(){return _Q.readByte(this,4,!0)}writeUint32(I){return new Uint8Array([I>>>24&255,I>>>16&255,I>>>8&255,255&I])}}function YX(A){return new TransformStream({transform(I,g){const C=Ki.isH265VideoFrame(I);Ki.getNALUnits(new _Q(I.data),C).forEach(Q=>{if(Q.sei){const i=Ev.decodeSEIBody(Q.body,C);i&&(fA.SKIP_SEI_FILTER||i.type===QX.external)&&A(i)}}),g.enqueue(I)}})}typeof self<"u"&&self.constructor.name==="DedicatedWorkerGlobalScope"&&self.addEventListener("rtctransform",A=>{const{transformer:I}=A,{port:g}=I.options,C=YX(Q=>{g.postMessage(Q,[Q.payload.buffer])});I.readable.pipeThrough(C).pipeTo(A.transformer.writable)});class NX{constructor(I){l(this,"seiList",[]),l(this,"maxSEICount",1),this.maxSEICount=I.maxSEICount}sendSEITransform(I,g){const{maxSEICount:C,seiList:Q}=this;if(!this.seiList.length)return void g.enqueue(I);const i=[];let B=0;for(const t of Q){if(i.length>=C)break;const o=Ev.generateSEI(t.content,Ki.isH265VideoFrame(I));B+=o.byteLength,t.repeatCount--,i.push(o)}this.seiList=Q.filter(t=>t.repeatCount>0);const E=new Uint8Array(B+I.data.byteLength);E.set(new Uint8Array(I.data));let e=I.data.byteLength;i.forEach(t=>{E.set(t,e),e+=t.byteLength}),I.data=E.buffer,g.enqueue(I)}pushSEI(I){this.seiList.push(I)}revokeSEI(I){const g=this.seiList.findIndex(C=>C.uuid===I);return g!==-1&&(this.seiList.splice(g,1),!0)}}typeof self<"u"&&self.constructor.name==="DedicatedWorkerGlobalScope"&&self.addEventListener("rtctransform",A=>{const{transformer:I}=A,{port:g,maxSEICount:C}=I.options,Q=new NX({maxSEICount:C}),i=new TransformStream({transform:Q.sendSEITransform.bind(Q)});g.onmessage=B=>{let{data:E}=B;const{type:e,content:t}=E;if(e==="push")Q.pushSEI(t);else if(e==="revoke"){const o=Q.revokeSEI(t);return g.postMessage({type:"revoke-ack",content:{uuid:t,isNotSend:o}})}},I.readable.pipeThrough(i).pipeTo(I.writable)});class ZX extends KQ{constructor(I){super(),l(this,"isScreen",!1),l(this,"audioMid",void 0),l(this,"videoMid",void 0),l(this,"audioMLine",void 0),l(this,"videoMLine",void 0),l(this,"videoTransceiver",void 0),l(this,"audioTransceiver",void 0),l(this,"vendorHandler",void 0),l(this,"vendorCode",0),l(this,"engineId",void 0),l(this,"logger",void 0),l(this,"__seiHelper",Ev),l(this,"logName","StreamBase"),this._ctx=I,this.engineId=I.id,this.logger=new SA(this.constructor.name,2,I.id)}stopReport(I){this.statsReport.stopReport(I)}destroy(){var I,g;delete this.audioMid,delete this.videoMid,this.statsReport.destroy(),(I=this.observer)===null||I===void 0||I.reset(),delete this.videoTransceiver,delete this.audioTransceiver,(g=this.vendorHandler)===null||g===void 0||g.destroy(),this.vendorCode=0,delete this.vendorHandler}}var OC=(A=>(A[A.INIT=0]="INIT",A[A.SUB_ING=1]="SUB_ING",A[A.SUB_ED=2]="SUB_ED",A))(OC||{});class R0 extends ZX{constructor(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Ss.STREAM_INDEX_MAIN;super(I),l(this,"id",void 0),l(this,"stream",void 0),l(this,"streamId",void 0),l(this,"videoTrack",void 0),l(this,"audioTrack",void 0),l(this,"subVideoDescriptions",[]),l(this,"observer",void 0),l(this,"statsReport",void 0),l(this,"pubAudio",!1),l(this,"pubVideo",!1),l(this,"blackFrameRenderInterval",void 0),l(this,"blackFrameLifetimeInterval",void 0),l(this,"pubAttributes",void 0),l(this,"pcSessionId",void 0),l(this,"maxSeiCount",1),l(this,"preReports",{audio:{},video:{}}),l(this,"remoteSdp",void 0),l(this,"currentVideoCodec",void 0),l(this,"_changeCodecs",[]),l(this,"_videoCaps",[]),l(this,"_sendSEIHandler",void 0),l(this,"_trackMatchingTimer",void 0),l(this,"logName","LocalStream"),this.stream=new MediaStream,this.id=UC(),this.pubAttributes={localaudio:!1,localvideo:!1,videostream:!1,audiostream:!1,extvideo:!1,extaudio:!1,videoDescriptions:[],videoType:TC.NORMAL},this.isScreen=g===Ss.STREAM_INDEX_SCREEN,this.statsReport=new TDA(I,this);const C=yA("SEI_COUNT_FPS");typeof C=="number"&&C<=10&&(this.maxSeiCount=C),this._trackMatchingTimer=setInterval(this._checkTrackMatching.bind(this),5e3)}get enableSimulcast(){return!this.isScreen&&this._ctx.videoProfile.getSimulcastMode()}get videoEncodeConfig(){return this.isScreen?[this._ctx.videoProfile.getScreenEncodeConfig()]:this._ctx.videoProfile.getVideoEncodeConfig()}get audioHasCapture(){return this.pubAttributes.localaudio}get audioHasPublish(){return this.pubAttributes.audiostream}get videoHasCapture(){return this.pubAttributes.localvideo}get videoHasPublish(){return this.pubAttributes.videostream}get isEmptyStream(){return!this.audioTrack&&!this.videoTrack}get initStreamId(){return this.stream.id}async getSelectedCodec(){var I;const g=this._changeCodecs.length>0?this._changeCodecs:this._videoCaps.length>0?this._videoCaps:await Mn(),C=this._ctx.videoProfile.getPreferCodec(this.isScreen),Q=this.isScreen?this._ctx.targetScreenCodec:this._ctx.targetCodec;if(C&&C!==sr.AUTO){if(C===sr.H264&&g.includes(YI.H264))return YI.H264;if(C===sr.VP8&&g.includes(YI.VP8))return YI.VP8;if(C===sr.ByteVC1&&g.includes(YI.ByteVC1))return YI.ByteVC1}if((I=this._ctx.serverConfig)!==null&&I!==void 0&&I.videoCodec&&g.includes(this._ctx.serverConfig.videoCodec))return this._ctx.serverConfig.videoCodec;if(C===sr.AUTO&&g.length>0)return g[0];if(Q&&g.includes(Q))return Q;if(g.includes(YI.H264))return YI.H264;if(g.includes(YI.VP8))return YI.VP8;throw new Error("no available codec")}startReport(I,g){this.statsReport.setLocalStreamStatsEvtInterval(I,g)}getLocalStreamStats(){return this.statsReport.getLocalStats()}initVideoEncodedTransform(){if(yA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.videoTransceiver||!this.videoTransceiver.sender)return void this.logger.warn("initVideoEncodedTransform","no sender found when trying to bind encodedTransform");const{sender:I}=this.videoTransceiver;if(lE()){const{readable:g,writable:C}=I.createEncodedStreams(),Q=new NX({maxSEICount:this.maxSeiCount}),i=new TransformStream({transform:Q.sendSEITransform.bind(Q)});g.pipeThrough(i).pipeTo(C),this._sendSEIHandler=Q}else if(Bv()){const g=new CbA,C=new MessageChannel;this.videoTransceiver.sender.transform=new RTCRtpScriptTransform(g,{port:C.port2,maxSEICount:this.maxSeiCount},[C.port2]),this._sendSEIHandler={pushSEI:Q=>{C.port1.postMessage({type:"push",content:Q},[Q.content.buffer])},revokeSEI:async Q=>(C.port1.postMessage({type:"revoke",content:Q}),new Promise(i=>{C.port1.addEventListener("message",B=>{let{data:E}=B;const{type:e,content:t}=E,{uuid:o,isNotSend:r}=t;e==="revoke-ack"&&o===Q&&i(r)})}))}}}initAudioEncodedTransform(){if(yA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.audioTransceiver||!this.audioTransceiver.sender)return void this.logger.warn("initAudioEncodedTransform","no sender found when trying to bind encodedTransform");if(!lE())return void this.logger.warn("initAudioEncodedTransform","legacy EncodedTransform is not supported");const{sender:I}=this.audioTransceiver,{readable:g,writable:C}=I.createEncodedStreams();g.pipeThrough(new TransformStream({transform:(Q,i)=>{i.enqueue(Q)}})).pipeTo(C)}clean(){rI(this.engineId,"localstream_clean","".concat(new Error().stack),0,this.streamId||""),super.destroy(),this.subVideoDescriptions=[],clearTimeout(this.blackFrameLifetimeInterval),clearInterval(this.blackFrameRenderInterval)}switchTrackEnableState(I,g){var C;let Q;I==="audio"?Q=this.audioTrack:I==="video"&&(Q=this.videoTrack);const i=(C=Q)===null||C===void 0?void 0:C.mediaTrack;return!(!i||(i==null?void 0:i.enabled)===g)&&(i.enabled=g,!0)}resetStream(){this.stream=new MediaStream}genBlackFrame(){var I,g;this.logger.info("genBlackFrame()");const C=(I=this.videoEncodeConfig[0])!==null&&I!==void 0&&I.frameRate?QI((g=this.videoEncodeConfig[0])===null||g===void 0?void 0:g.frameRate):15,Q=Math.ceil(1e3/C),i=document.createElement("canvas"),B=i.getContext("2d");i.width=16,i.height=16;const E=e=>{e.fillRect(0,0,16,16)};return B&&(B.fillStyle="#000",E(B),this.blackFrameRenderInterval=window.setInterval(()=>{E(B)},Q),this.refreshBlackFrameLifetime()),i.captureStream(C).getVideoTracks()[0]}stopBlackFrame(){this.logger.info("stopBlackFrame()"),clearTimeout(this.blackFrameLifetimeInterval),clearInterval(this.blackFrameRenderInterval),delete this.blackFrameRenderInterval}refreshBlackFrameLifetime(){this.logger.info("refreshBlackFrameLifetime()"),this.blackFrameRenderInterval&&(clearTimeout(this.blackFrameLifetimeInterval),this.blackFrameLifetimeInterval=setTimeout(()=>{clearInterval(this.blackFrameRenderInterval),delete this.blackFrameRenderInterval,this.emit("black-frame-ended")},fA.BLACK_FRAME_LIFETIME))}setChangeCodecs(I){this._changeCodecs=I}setVideoCaps(I){if(!I)return;const g=I.split(",").map(C=>{const Q=QE(C).call(C).toUpperCase();return{H264:YI.H264,VP8:YI.VP8,BYTEVC1:YI.ByteVC1}[Q]||null}).filter(C=>C!==null);this._videoCaps=g}sendSEIMessage(I){var g;this.logger.info("sendSEIMessage"),(g=this._sendSEIHandler)===null||g===void 0||g.pushSEI(I)}async revokeSEIMessage(I){var g;return this.logger.info("revokeSEIMessage"),this._sendSEIHandler?(g=this._sendSEIHandler)===null||g===void 0?void 0:g.revokeSEI(I):(this.logger.warn("revokeSEIMessage","no sei handler found"),!1)}destroy(){clearInterval(this._trackMatchingTimer),super.removeAllListeners(),super.destroy()}_checkTrackMatching(){var I,g,C,Q;const i=(I=this.audioTrack)===null||I===void 0?void 0:I.preprocessingTrack.id,B=(g=this.videoTrack)===null||g===void 0?void 0:g.preprocessingTrack.id,E=(C=this.audioTransceiver)===null||C===void 0||(C=C.sender.track)===null||C===void 0?void 0:C.id,e=(Q=this.videoTransceiver)===null||Q===void 0||(Q=Q.sender.track)===null||Q===void 0?void 0:Q.id;var t,o;this.pubAudio&&i!==E&&(this.logger.error("_checkTrackMatching","audio track id: ".concat(i," not matching transceiver track id ").concat(E,", streamId: ").concat(this.streamId)),(t=this._ctx.monitor)===null||t===void 0||t.report("rtc_error",{message:"audio track id: ".concat(i," not matching transceiver track id ").concat(E),error_code:-1,stream_id:this.streamId})),this.pubVideo&&B!==e&&(this.logger.error("_checkTrackMatching","video track id: ".concat(B," not matching transceiver track id ").concat(e,", streamId: ").concat(this.streamId)),(o=this._ctx.monitor)===null||o===void 0||o.report("rtc_error",{message:"video track id: ".concat(B," not matching transceiver track id ").concat(e),error_code:-1,stream_id:this.streamId}))}}class L0 extends ZX{constructor(I,g,C,Q,i,B){super(I),l(this,"streamId",void 0),l(this,"userId",void 0),l(this,"isPublic",void 0),l(this,"hasVideo",void 0),l(this,"hasAudio",void 0),l(this,"_attributes",void 0),l(this,"streamState",void 0),l(this,"removeTrack",!1),l(this,"observer",void 0),l(this,"statsReport",void 0),l(this,"subVideo",void 0),l(this,"subAudio",void 0),l(this,"subMediaType",void 0),l(this,"subLayer",void 0),l(this,"_sequenceId",void 0),l(this,"stream",void 0),l(this,"videoTrack",void 0),l(this,"audioTrack",void 0),l(this,"recordedVideoFrames",void 0),l(this,"stillExist",void 0),l(this,"originalMediaType",void 0),l(this,"priority",void 0),l(this,"remoteSessionId",""),l(this,"originalStreamIndex",0),l(this,"virtual",void 0),l(this,"pcSessionId",void 0),l(this,"_virtualOccupy",void 0),l(this,"_videoStallObserver",void 0),l(this,"_audioStallObserver",void 0),l(this,"preReports",{audio:{},video:{}}),l(this,"_installInfo",void 0),this.virtual=!1,this._virtualOccupy=!1,this.userId=g,this.isScreen=Q,this.isPublic=i,this.streamId=C,this.logName="RemoteStream-".concat(C),this.hasAudio=B.audiostream&&B.localaudio,this.hasVideo=B.videostream&&B.localvideo,this._attributes=B,this.vendorCode=(B==null?void 0:B.vendorCode)||0,this.subVideo=!1,this.subAudio=!1,this._sequenceId=0,this.subMediaType=GQ.NONE,this.subLayer={spatialLayer:0,spatialSubLayer:-1},this.streamState=0,this.statsReport=new pDA(I,this),this.enableVendorMode&&(this.pcSessionId=UC())}get vendor(){return this._attributes.vendorCode}get audioHasCapture(){return this._attributes.localaudio}get audioHasPublish(){return this._attributes.audiostream}get videoHasCapture(){return this._attributes.localvideo}get videoHasPublish(){return this._attributes.videostream}get sequenceId(){return this._sequenceId||-1}set sequenceId(I){typeof I=="number"&&(this._sequenceId=I)}get enableVendorMode(){return typeof this.attributes.vendorCode=="number"&&this.attributes.vendorCode!==0}get hasSubscribed(){return this.streamState===2}get attributes(){return this._attributes}set attributes(I){this.hasVideo=I.localvideo&&I.videostream,this.hasAudio=I.localaudio&&I.audiostream,this._attributes=I,this.vendorCode=I.vendorCode||0}get virtualOccupy(){return this._virtualOccupy}set virtualOccupy(I){var g;if(this._virtualOccupy&&!I)(g=this.observer)===null||g===void 0||g.setPushTrack(!1);else if(!this._virtualOccupy&&I){var C;(C=this.observer)===null||C===void 0||C.setPushTrack(!0)}this._virtualOccupy=I}startReport(I,g){this.statsReport.setRemoteStreamStatsEvtInterval(I,g)}getRemoteStreamStats(){return this.statsReport.getRemoteStreamStats()}initVideoEncodedTransform(){if(yA("DISABLE_ENCODED_TRANSFORM"))this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");else if(this.videoTransceiver&&this.videoTransceiver.receiver){if(lE()){var I;(I=this._ctx.monitor)===null||I===void 0||I.report("rtc_invoke_status",{sdk_api_name:"initVideoEncodedTransform",message:"using legacy EncodedTransform",error_code:0,stream_id:this.streamId,elapse:0});const{receiver:C}=this.videoTransceiver,{readable:Q,writable:i}=C.createEncodedStreams();Q.pipeThrough(YX(B=>{this.safeEmit("onSEIMessage",B.payload)})).pipeTo(i)}else if(Bv()){var g;(g=this._ctx.monitor)===null||g===void 0||g.report("rtc_invoke_status",{sdk_api_name:"initVideoEncodedTransform",message:"using standard EncodedTransform",error_code:0,stream_id:this.streamId,elapse:0});const C=new gbA,Q=new MessageChannel;this.videoTransceiver.receiver.transform=new RTCRtpScriptTransform(C,{port:Q.port2},[Q.port2]),Q.port1.onmessage=i=>{this.safeEmit("onSEIMessage",i.data.payload)}}}else this.logger.warn("no receiver found when trying to bind encodedTransform")}initAudioEncodedTransform(){if(yA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.audioTransceiver||!this.audioTransceiver.receiver)return void this.logger.warn("no receiver found when trying to bind encodedTransform");if(!lE())return void this.logger.warn("legacy EncodedTransform is not supported");const{receiver:I}=this.audioTransceiver,{readable:g,writable:C}=I.createEncodedStreams();g.pipeThrough(new TransformStream({transform:(Q,i)=>{Q.data.byteLength<=1e3?i.enqueue(Q):this.logger.print("too large audio frame",Q.data.byteLength)}})).pipeTo(C)}ontrack(I){var g;try{rI(this.engineId,"Stream.ontrack",JSON.stringify({uid:this.userId,streamId:this.streamId,streams:I.streams.reduce((Q,i)=>Q+JM(i),""),transceiver:MM(I.transceiver),track:ci(I.track)}),0,this.streamId||"")}catch{}if(this.enableVendorMode||(g=I.streams)!==null&&g!==void 0&&(g=g[0])!==null&&g!==void 0&&(g=g.id)!==null&&g!==void 0&&g.includes(this.streamId)){var C;const{track:Q}=I;(Q==null?void 0:Q.kind)==="video"?this._setVideoTrack(Q):((C=I.track)===null||C===void 0?void 0:C.kind)==="audio"&&this._setAudioTrack(Q),this._setStream(I.streams[0])}this.safeEmit("ontrack",I)}startVideoStallObserve(I){this.logger.info("startVideoStallObserve","invoke",I.playerId),this._videoStallObserver||(this._videoStallObserver=new FDA(this.isScreen,this.engineId)),this._videoStallObserver.start(I)}stopVideoStallObserve(){var I;this.logger.info("stopVideoStallObserve","invoke"),(I=this._videoStallObserver)===null||I===void 0||I.stop()}updateVideoStallInfo(I,g,C){let Q;var i;if(C?(Q=(i=this._videoStallObserver)===null||i===void 0?void 0:i.getStallInfo({interval:I.stats_interval||0,bitrate:I.bitrate,frameRateDecoded:I.frame_rate_decoded,frameRateReceived:I.frame_rate_received}),this._installInfo=Q):Q=this._installInfo,Q){const E=Math.min(Q.report.stallDuration,I.stats_interval||0);if(I.play_time=Q.pts,I.stall_count=Q.report.stallCount,I.is_screen?I.stuck_length=E:I.stall_duration=E,I.pause_duration=Math.min(E,Q.pauseDuration),g.stallCount=Q.callback.stallCount,g.stallDuration=Q.callback.stallDuration,Q.stall100ms){const e=Math.min(Q.stall100ms.duration,I.stats_interval||0);I.stall_duration_100ms=e,I.stall_count_100ms=Q.stall100ms.count,g.stallDuration100MS=e,g.stallCount100MS=Q.stall100ms.count}var B;(Q.report.stallCount!==0||Q.report.stallDuration!==0)&&this.logger.print("video_stall_report",this.userId,(B=this.videoTrack)===null||B===void 0?void 0:B.observingPlayerId,JSON.stringify(Q.report),C)}}getVideoRenderInfo(){var I;return((I=this._videoStallObserver)===null||I===void 0?void 0:I.getRecentRenderInfo4Report())||{}}stopAudioStallObserve(){var I;this.logger.info("stopAudioStallObserve","invoke"),(I=this._audioStallObserver)===null||I===void 0||I.stop()}async updateAudioStallInfo(I,g,C){if(this._audioStallObserver){const Q=await this._audioStallObserver.getAudioStallInfo();return I.concealedSamples===I.interval_concealed_samples&&I.totalSamplesReceived===I.interval_samples_received?(I.stall_count=0,I.stall_duration=0,g.stallCount=0,g.stallDuration=0):(I.stall_count=Q.report.stall_count,I.stall_duration=Q.report.stall_duration,g.stallCount=Q.callback.stall_count,g.stallDuration=Q.callback.stall_duration),Q.report.stall_count===0&&Q.report.stall_duration===0||this.logger.print("audio_stall_report",this.userId,JSON.stringify(p(p({},Q.report),{},{callbackList:Q.callback.list}))),Q.extra}this._audioStallObserver=new RC(this),this._audioStallObserver.start(C.concealedSamples,C.totalSamplesReceived),this.logger.print("startAduioObserver","start")}resetStream(){var I,g;(I=this.audioTransceiver)===null||I===void 0||I.stop(),(g=this.videoTransceiver)===null||g===void 0||g.stop(),this.audioTransceiver=void 0,this.videoTransceiver=void 0}clean(){var I,g;this.logger.info("clean","exec stream.clean ".concat(this.streamId," ").concat(this.userId)),rI(this.engineId,"remotestream_clean","".concat(new Error().stack),0,this.streamId),super.destroy(),this.subAudio=!1,this.subVideo=!1,this.sequenceId=0,(I=this.videoTrack)===null||I===void 0||I.destroy(),this.videoTrack=void 0,(g=this.audioTrack)===null||g===void 0||g.destroy(),this.audioTrack=void 0,this.stream=void 0,this.recordedVideoFrames=void 0,delete this.priority}destroy(){var I,g;this.clean(),(I=this._audioStallObserver)===null||I===void 0||I.destroy(),delete this._audioStallObserver,(g=this._videoStallObserver)===null||g===void 0||g.destroy(),delete this._videoStallObserver,this.attributes={audiostream:!1,localaudio:!1,localvideo:!1,videostream:!1,extvideo:!1,extaudio:!1,videoDescriptions:[]},super.removeAllListeners()}resetHasSubscribed(){this.streamState=0}_setStream(I){this.stream=I,I.onaddtrack=g=>{g.track.kind==="video"?this._setVideoTrack(g.track):g.track.kind==="audio"&&this._setAudioTrack(g.track)}}_setAudioTrack(I){var g;if(((g=this.audioTrack)===null||g===void 0||(g=g.preprocessingTrack)===null||g===void 0?void 0:g.id)!==I.id){this.audioTrack=FX(this._ctx,I,{streamIndex:this.isPublic?MI.PUBLIC:this.virtual?MI.VIRTUAL:this.isScreen?MI.SCREEN:MI.MAIN,streamUserId:this.userId});const Q=this._ctx._remoteAudioTrackDumpConfig[this.isScreen?Ss.STREAM_INDEX_SCREEN:Ss.STREAM_INDEX_MAIN].get(this.userId);var C;Q!=null&&Q.callback&&Q!=null&&Q.frameSize&&((C=this.audioTrack)===null||C===void 0||C.setDataFetcher(Q.frameSize,i=>{var B;this.audioHasCapture&&this.audioHasPublish&&((B=Q.callback)===null||B===void 0||B.call(Q,i))})),this.emit("ontrack",this.audioTrack)}}_setVideoTrack(I){var g;((g=this.videoTrack)===null||g===void 0||(g=g.preprocessingTrack)===null||g===void 0?void 0:g.id)!==I.id&&(this.videoTrack=qDA(this._ctx,I,this,{streamIndex:this.isPublic?MI.PUBLIC:this.virtual?MI.VIRTUAL:this.isScreen?MI.SCREEN:MI.MAIN,streamUserId:this.userId}),this.emit("ontrack",this.videoTrack))}}var eA=(A=>(A.RESUBSCRIBE="resubscribe",A.STREAM_FAILED="stream_failed",A.SUBSCRIBE_PUSH_TRACK="subscribe_push_track",A.REMOVE_PUSH_TRACK="remove_push_track",A.VIDEO_FIRST_FRAME="video_first_frame",A.ON_USER_PUBLISH_STATE_CHANGE="on_user_publish_state_change",A.ON_USER_START_AUDIO_CAPTURE="on_user_start_audio_capture",A.ON_USER_STOP_AUDIO_CAPTURE="on_user_stop_audio_capture",A.ON_USER_START_VIDEO_CAPTURE="on_user_start_video_capture",A.ON_USER_STOP_VIDEO_CAPTURE="on_user_stop_video_capture",A.ON_SEI_MESSAGED_RECEIVED="on_sei_messaged_received",A.ON_PUBLISH_RESULT="on_publish_result",A.ON_SUBSCRIBE_RESULT="ON_SUBSCRIBE_RESULT",A.ON_UPDATE_TOKEN_SUCCESS="on_update_token_success",A.ON_REMOTE_STREAM_STATS="ON_REMOTE_STREAM_STATS",A.ON_LOCAL_STREAM_STATS="ON_LOCAL_STREAM_STATS",A.ON_USER_LEAVE="on_user_leave",A.ON_ROOM_ERROR="on_room_error",A.ON_NETWORK_QUALITY="on_network_quality",A.ON_SIMULCAST_SUBSCRIBE_FALLBACK="on_simulcast_subscribe_fallback",A.ON_REMOTE_VIDEO_SIZE_CHANGED="on_remote_video_size_changed",A.ON_SUBTITLE_STATE_CHANGED="ON_SUBTITLE_STATE_CHANGED",A.ON_SUBTITLE_MESSAGE_RECEIVED="ON_SUBTITLE_MESSAGE_RECEIVED",A.ON_VIDEO_STREAM_BANNED="ON_VIDEO_STREAM_BANNED",A.ON_AUDIO_STREAM_BANNED="ON_AUDIO_STREAM_BANNED",A.ON_FORWARD_STREAM_ERROR="ON_FORWARD_STREAM_ERROR",A.ON_REJOIN_WITH_TCP="ON_REJOIN_WITH_TCP",A.PUB_RETRY="PUB_RETRY",A.SUB_RETRY="SUB_RETRY",A.VIDEO_TYPE_CHANGE="VIDEO_TYPE_CHANGE",A.JOIN_SUCCESS="JOIN_SUCCESS",A.UPDATE_PUBLISH="UPDATE_PUBLISH",A))(eA||{}),Ii=(A=>(A[A.START=1]="START",A[A.START_SUCCESS=2]="START_SUCCESS",A[A.START_FAILED=3]="START_FAILED",A[A.UPDATE=4]="UPDATE",A[A.UPDATE_SUCCESS=5]="UPDATE_SUCCESS",A[A.UPDATE_FAILED=6]="UPDATE_FAILED",A[A.STOP=7]="STOP",A[A.STOP_SUCCESS=8]="STOP_SUCCESS",A[A.STOP_FAILED=9]="STOP_FAILED",A))(Ii||{}),$C=(A=>(A[A.PUB=0]="PUB",A[A.UNPUB=1]="UNPUB",A))($C||{});const iN=async(A,I,g,C)=>{try{var Q,i,B,E;let r="",s=-1;const v=I==="video"?g==null||(Q=g.videoTrack)===null||Q===void 0?void 0:Q.originTrack:g==null||(i=g.audioTrack)===null||i===void 0?void 0:i.originTrack,n=I==="video"?g==null||(B=g.videoTransceiver)===null||B===void 0?void 0:B.receiver:g==null||(E=g.audioTransceiver)===null||E===void 0?void 0:E.receiver;try{var e,t;const a=await((e=A.peerConnection)===null||e===void 0?void 0:e.getStatsWithLowFrequency(v,!0,n)),c=(a||[]).find(u=>u.type==="inbound-rtp"),P=await(n==null?void 0:n.getStats()),d=[];let h;var o;P==null||P.forEach(u=>d.push(u.type)),(a==null?void 0:a.length)===0&&d.length!==0&&(h=await((o=A.peerConnection)===null||o===void 0?void 0:o.getStatsWithLowFrequency(void 0,void 0,n))),r=JSON.stringify({type:I,reports:a.map(u=>u.type),reports2:d,pc:((t=A.peerConnection)===null||t===void 0?void 0:t.getOriginRTCPeerConnection())||null,track:(v==null?void 0:v.id)||null,bytes:c==null?void 0:c.bytesReceived,framesReceived:c==null?void 0:c.framesReceived,packetsReceived:c==null?void 0:c.packetsReceived,allReports:h})}catch(a){s=-999,r=a.mseeage||JSON.stringify(a)}C==null||C.report("rtc_invoke_status",{sdk_api_name:"first_frame_recv_timeout",error_code:s,message:r,stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:g==null?void 0:g.userId,elapse:0})}catch{}},BN=async(A,I,g,C)=>{try{var Q,i,B,E;let r="",s=-1;const v=I==="video"?g==null||(Q=g.videoTrack)===null||Q===void 0?void 0:Q.preprocessingTrack:g==null||(i=g.audioTrack)===null||i===void 0?void 0:i.preprocessingTrack,n=I==="video"?g==null||(B=g.videoTransceiver)===null||B===void 0?void 0:B.sender:g==null||(E=g.audioTransceiver)===null||E===void 0?void 0:E.sender;try{var e,t;const a=await((e=A.peerConnection)===null||e===void 0?void 0:e.getStatsWithLowFrequency(v,!0,n)),c=(a||[]).find(u=>u.type==="outbound-rtp"),P=await(n==null?void 0:n.getStats()),d=[];let h;var o;P==null||P.forEach(u=>d.push(u.type)),a.length===0&&d.length!==0&&(h=await((o=A.peerConnection)===null||o===void 0?void 0:o.getStatsWithLowFrequency(void 0,void 0,n))),r=JSON.stringify({type:I,reports:a.map(u=>u.type),reports2:d,pc:((t=A.peerConnection)===null||t===void 0?void 0:t.getOriginRTCPeerConnection())||null,track:(v==null?void 0:v.id)||null,bytes:c==null?void 0:c.bytesSent,framesSent:c==null?void 0:c.framesSent,packetsSent:c==null?void 0:c.packetsSent,allReports:h})}catch(a){s=-999,r=a.mseeage||JSON.stringify(a)}C==null||C.report("rtc_invoke_status",{sdk_api_name:"first_frame_send_timeout",error_code:s,message:r,stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:g==null?void 0:g.userId,elapse:0})}catch{}};class KX extends tB.EventEmitter{constructor(I,g){super(),l(this,"_audioEventSessionId",zn()),l(this,"_videoEventSessionId",zn()),l(this,"_stream",void 0),l(this,"_firstAudioFrameTimer",void 0),l(this,"_firstVideoFrameTimer",void 0),l(this,"_transportDelayInterval",void 0),l(this,"_transportDelay",void 0),l(this,"_firstVideoFrameInterval",void 0),l(this,"_firstAudioFrameInterval",void 0),l(this,"_isScreen",!1),l(this,"_audioFirstFrameState",0),l(this,"_videoFirstFrameState",0),l(this,"_timeout",1e4),l(this,"_currentAudioRecv",{startTime:0,eventSessionId:0,type:"login"}),l(this,"_currentVideoRecv",{startTime:0,eventSessionId:0,type:"login"}),l(this,"_login",!1),l(this,"_unMuteAudio",!1),l(this,"_enableAudio",!1),l(this,"_unMuteVideo",!1),l(this,"_enableVideo",!1),l(this,"_remoteUnmuteAudio",!1),l(this,"_remoteUnmuteVideo",!1),l(this,"_audioExternal",!1),l(this,"_pushAudio",!1),l(this,"_videoExternal",!1),l(this,"_pushVideo",!1),l(this,"_autoSubscribeVideo",!1),l(this,"_autoSubscribeAudio",!1),l(this,"_autoSubscribe",!1),l(this,"_publishVideo",!1),l(this,"_publishAudio",!1),l(this,"_subscribeAudio",!1),l(this,"_subscribeVideo",!1),l(this,"_subscribe",!1),l(this,"_pushTrack",!1),l(this,"_multiChatMode",!1),l(this,"_monitor",void 0),l(this,"logger",void 0),this._ctx=I,this._stream=g,this.getTransportDelay(),this._monitor=bI(g.engineId),this.logger=new SA("RecvFrameObserver",0,g.engineId)}async beginRecvFrame(I,g){await this.getTransportDelay();let C=this._transportDelay,Q=!0;if(["login","unmute","subscribe","push_track"].indexOf(g)>=0&&(C=0,Q=!1),I==="audio"){var i,B,E,e,t,o,r,s;Q||this._audioEventSessionId++,this._currentAudioRecv={startTime:Date.now(),eventSessionId:this._audioEventSessionId,type:g};const D={media_type:I,event_type:"begin_recv",type:g,is_screen:!((i=this._stream)===null||i===void 0||!i.isScreen),start:(B=this._currentAudioRecv)===null||B===void 0?void 0:B.startTime,event_session_id:this._audioEventSessionId,stream_user_id:(E=this._stream)===null||E===void 0?void 0:E.userId,transport_delay:C,vendor_mode:((e=this._stream)===null||e===void 0?void 0:e.vendorCode)||0,pc_session_id:((t=this._stream)===null||t===void 0?void 0:t.pcSessionId)||((o=this._ctx.peerConnection)===null||o===void 0?void 0:o.getConnectionId()),remote_rtc_session_id:(r=this._stream)===null||r===void 0?void 0:r.remoteSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstAudioFrameTimer=setTimeout(()=>{iN(this._ctx,"audio",this._stream,this._monitor),this.stopRecvFrame("audio","timeout"),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval)},this._timeout),this.logger.info("rtcFirstFrameRecv",JSON.stringify(D)),(s=this._monitor)===null||s===void 0||s.report("rtc_first_frame",D),this._watchForFirstAudioFrameRecv(),this._audioFirstFrameState=1,this._login=!0,this._unMuteAudio=!0,this._enableAudio=!0,this._remoteUnmuteAudio=!0}else if(I==="video"){var v,n,a,c,P,d,h,u;Q||this._videoEventSessionId++,this._currentVideoRecv={startTime:Date.now(),eventSessionId:this._videoEventSessionId,type:g};const D={media_type:I,event_type:"begin_recv",type:g,is_screen:!((v=this._stream)===null||v===void 0||!v.isScreen),start:(n=this._currentVideoRecv)===null||n===void 0?void 0:n.startTime,event_session_id:this._videoEventSessionId,stream_user_id:(a=this._stream)===null||a===void 0?void 0:a.userId,transport_delay:C,vendor_mode:((c=this._stream)===null||c===void 0?void 0:c.vendorCode)||0,pc_session_id:((P=this._stream)===null||P===void 0?void 0:P.pcSessionId)||((d=this._ctx.peerConnection)===null||d===void 0?void 0:d.getConnectionId()),remote_rtc_session_id:(h=this._stream)===null||h===void 0?void 0:h.remoteSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstVideoFrameTimer=setTimeout(()=>{iN(this._ctx,"video",this._stream,this._monitor),this.stopRecvFrame("video","timeout"),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval)},this._timeout),this._watchForFirstVideoFrameRecv(),this.logger.info("rtcFirstFrameRecv",JSON.stringify(D)),(u=this._monitor)===null||u===void 0||u.report("rtc_first_frame",D),this._videoFirstFrameState=1,this._login=!0,this._unMuteVideo=!0,this._enableVideo=!0,this._remoteUnmuteVideo=!0}}stopRecvFrame(I,g){if(I==="audio"){var C,Q,i,B,E,e,t,o,r;if(this._audioFirstFrameState!==1)return;const D={event_type:"recv_end",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),start:(Q=this._currentAudioRecv)===null||Q===void 0?void 0:Q.startTime,reason:g,result:!1,stream_user_id:(i=this._stream)===null||i===void 0?void 0:i.userId,event_session_id:this._audioEventSessionId,type:(B=this._currentAudioRecv)===null||B===void 0?void 0:B.type,vendor_mode:((E=this._stream)===null||E===void 0?void 0:E.vendorCode)||0,pc_session_id:((e=this._stream)===null||e===void 0?void 0:e.pcSessionId)||((t=this._ctx.peerConnection)===null||t===void 0?void 0:t.getConnectionId()),remote_rtc_session_id:(o=this._stream)===null||o===void 0?void 0:o.remoteSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),delete this._currentAudioRecv,this.logger.info("rtcFirstFrameRecv",JSON.stringify(D)),(r=this._monitor)===null||r===void 0||r.report("rtc_first_frame",D),this._audioFirstFrameState=2}else if(I==="video"){var s,v,n,a,c,P,d,h,u;if(this._videoFirstFrameState!==1)return;const D={event_type:"recv_end",media_type:I,is_screen:!((s=this._stream)===null||s===void 0||!s.isScreen),start:(v=this._currentVideoRecv)===null||v===void 0?void 0:v.startTime,reason:g,result:!1,stream_user_id:(n=this._stream)===null||n===void 0?void 0:n.userId,event_session_id:this._videoEventSessionId,type:(a=this._currentVideoRecv)===null||a===void 0?void 0:a.type,vendor_mode:((c=this._stream)===null||c===void 0?void 0:c.vendorCode)||0,pc_session_id:((P=this._stream)===null||P===void 0?void 0:P.pcSessionId)||((d=this._ctx.peerConnection)===null||d===void 0?void 0:d.getConnectionId()),remote_rtc_session_id:(h=this._stream)===null||h===void 0?void 0:h.remoteSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),delete this._currentVideoRecv,this.logger.info("rtcFirstFrameRecv",JSON.stringify(D)),(u=this._monitor)===null||u===void 0||u.report("rtc_first_frame",D),this._videoFirstFrameState=2}}async recvFrameFinish(I){await this.getTransportDelay();let g=this._transportDelay;if(I==="audio"){var C,Q,i,B,E,e,t;if(this._audioFirstFrameState!==1||!this._currentAudioRecv)return;const{type:P,startTime:d}=this._currentAudioRecv;["login","unmute","subscribe","push_track"].indexOf(P)>=0&&(g=0);const h={event_type:"recv_end",media_type:I,start:d,result:!0,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),stream_user_id:(Q=this._stream)===null||Q===void 0?void 0:Q.userId,event_session_id:this._audioEventSessionId,type:P,transport_delay:g,vendor_mode:((i=this._stream)===null||i===void 0?void 0:i.vendorCode)||0,pc_session_id:((B=this._stream)===null||B===void 0?void 0:B.pcSessionId)||((E=this._ctx.peerConnection)===null||E===void 0?void 0:E.getConnectionId()),remote_rtc_session_id:(e=this._stream)===null||e===void 0?void 0:e.remoteSessionId};delete this._currentAudioRecv,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this.logger.info("rtcFirstFrameRecv",JSON.stringify(h)),(t=this._monitor)===null||t===void 0||t.report("rtc_first_frame",h),this.emit("recvAudioFirstFrame"),this._audioFirstFrameState=3}else if(I==="video"){var o,r,s,v,n,a,c;if(this._videoFirstFrameState!==1||!this._currentVideoRecv)return;const{type:P,startTime:d}=this._currentVideoRecv;["login","unmute","subscribe","push_track"].indexOf(P)>=0&&(g=0);const h={event_type:"recv_end",media_type:I,is_screen:!((o=this._stream)===null||o===void 0||!o.isScreen),start:d,result:!0,stream_user_id:(r=this._stream)===null||r===void 0?void 0:r.userId,event_session_id:this._videoEventSessionId,type:P,transport_delay:g,vendor_mode:((s=this._stream)===null||s===void 0?void 0:s.vendorCode)||0,pc_session_id:((v=this._stream)===null||v===void 0?void 0:v.pcSessionId)||((n=this._ctx.peerConnection)===null||n===void 0?void 0:n.getConnectionId()),remote_rtc_session_id:(a=this._stream)===null||a===void 0?void 0:a.remoteSessionId};delete this._currentVideoRecv,this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this.logger.info("rtcFirstFrameRecv",JSON.stringify(h)),(c=this._monitor)===null||c===void 0||c.report("rtc_first_frame",h),this.emit("recvVideoFirstFrame"),this._videoFirstFrameState=3}}setLogin(I){var g,C,Q,i;let B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{audio:!0,video:!0};this._login!==I&&(this._login=I,I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&B.audio&&this.beginRecvFrame("audio","login"),I&&(C=this._stream)!==null&&C!==void 0&&C.hasVideo&&B.video&&this.beginRecvFrame("video","login"),!I&&(Q=this._stream)!==null&&Q!==void 0&&Q.hasAudio&&this.stopRecvFrame("audio","leave_room"),!I&&(i=this._stream)!==null&&i!==void 0&&i.hasVideo&&this.stopRecvFrame("video","leave_room"))}setUnmuteAudio(I){var g,C,Q;if(this._unMuteAudio===I)return;this._unMuteAudio=I;const i=!((g=this._stream)===null||g===void 0||!g.hasAudio);(C=this._stream)!==null&&C!==void 0&&C.audioHasCapture&&(Q=this._stream)!==null&&Q!==void 0&&Q.audioHasPublish&&(this._unMuteAudio&&i?this.beginRecvFrame("audio","unmute"):i&&this.stopRecvFrame("audio","mute"))}setRemoteUnmuteAudio(I){this._remoteUnmuteAudio!==I&&(this._remoteUnmuteAudio=I,this._remoteUnmuteAudio?this.beginRecvFrame("audio","remote_unmute"):this.stopRecvFrame("audio","remote_mute"))}setEnableAudio(I){this._enableAudio!==I&&(this._enableAudio=I,this._enableAudio?this.beginRecvFrame("audio","enable"):this.stopRecvFrame("audio","disable"))}setUnmuteVideo(I){var g,C,Q;if(this._unMuteVideo===I)return;this._unMuteVideo=I;const i=!((g=this._stream)===null||g===void 0||!g.hasVideo);(C=this._stream)!==null&&C!==void 0&&C.videoHasCapture&&(Q=this._stream)!==null&&Q!==void 0&&Q.videoHasPublish&&(this._unMuteVideo&&i?this.beginRecvFrame("video","unmute"):i&&this.stopRecvFrame("video","mute"))}setRemoteUnmuteVideo(I){this._remoteUnmuteVideo!==I&&(this._remoteUnmuteVideo=I,this._remoteUnmuteVideo?this.beginRecvFrame("video","remote_unmute"):this.stopRecvFrame("video","remote_mute"))}setEnableVideo(I){this._enableVideo!==I&&(this._enableVideo=I,this._enableVideo?this.beginRecvFrame("video","enable"):this.stopRecvFrame("video","disable"))}setExternalAudioSource(I){this._audioExternal=I}setPushAudio(I){var g;this._audioExternal&&this._pushAudio!==I&&(this._pushAudio=I),this._pushAudio&&this.beginRecvFrame("audio","push"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","stop_push")}setExternalVideoSource(I){this._videoExternal=I}setPushVideo(I){var g;this._videoExternal&&this._pushVideo!==I&&(this._pushVideo=I),this._pushVideo&&this.beginRecvFrame("video","push"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","stop_push")}setPublishVideo(I){var g;this._publishVideo!==I&&(this._publishVideo=I),this._publishVideo&&this.beginRecvFrame("video","publish"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","unpublish")}setPublishAudio(I){var g;this._publishAudio!==I&&(this._publishAudio=I),this._publishAudio&&this.beginRecvFrame("audio","publish"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","unpublish")}setAutoSubscribe(I){this._autoSubscribe=I}setAutoSubscribeVideo(I){this._autoSubscribeVideo=I}setAutoSubscribeAudio(I){this._autoSubscribeAudio=I}setSubscribeAudio(I){var g,C;this._autoSubscribeAudio||this._subscribeAudio===I||(this._subscribe=I,I&&(C=this._stream)!==null&&C!==void 0&&C.hasAudio&&this.beginRecvFrame("audio","subscribe")),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","unsubscribe")}setSubscribeVideo(I){var g,C;this._autoSubscribeVideo||this._subscribeVideo===I||(this._subscribeVideo=I,I&&(C=this._stream)!==null&&C!==void 0&&C.hasVideo&&this.beginRecvFrame("video","subscribe")),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","unsubscribe")}setPushTrack(I){var g;this._pushTrack!==I&&(this._pushTrack=I,I&&!this._isScreen&&this.beginRecvFrame("audio","push_track"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","remove_track"))}setMultiChatMode(I){this._multiChatMode=I}setTimeout(I){this._timeout=I}_watchForFirstVideoFrameRecv(){let I=-1,g=-1;this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._firstVideoFrameInterval=window.setInterval(async()=>{var C,Q,i;const B=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(B&&(i=this._stream)!==null&&i!==void 0&&(i=i.videoTrack)!==null&&i!==void 0&&i.preprocessingTrack){var E,e;const t=(E=this._stream.videoTransceiver)===null||E===void 0?void 0:E.receiver,o=(await B.getStatsWithLowFrequency((e=this._stream)===null||e===void 0||(e=e.videoTrack)===null||e===void 0?void 0:e.preprocessingTrack,!0,t)).find(r=>r.type==="inbound-rtp");if(o&&(o.framesReceived>I||o.packetsReceived>g)){if(I===-1&&g===-1)return I=o.framesReceived,void(g=o.packetsReceived);this.recvFrameFinish("video"),window.clearInterval(this._firstVideoFrameInterval)}}},200)}_watchForFirstAudioFrameRecv(){let I=-1,g=-1;this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstAudioFrameInterval=window.setInterval(async()=>{var C,Q,i;const B=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(B&&(i=this._stream)!==null&&i!==void 0&&(i=i.audioTrack)!==null&&i!==void 0&&i.originTrack){var E;const e=(await B.getStatsWithLowFrequency((E=this._stream)===null||E===void 0||(E=E.audioTrack)===null||E===void 0?void 0:E.originTrack)).find(t=>t.type==="inbound-rtp");if(e&&(e.totalSamplesReceived>I||e.packetsReceived>g)){if(I===-1&&g===-1)return I=e.totalSamplesReceived,void(g=e.packetsReceived);this.recvFrameFinish("audio"),window.clearInterval(this._firstAudioFrameInterval)}}},200)}async getTransportDelay(){await this.getTransportDelayIntl(),window.clearInterval(this._transportDelayInterval),this._transportDelayInterval=window.setInterval(async()=>{await this.getTransportDelayIntl()},2e3)}async getTransportDelayIntl(){const I=this._ctx.peerConnection;if(I){var g;const C=(g=this._stream)===null||g===void 0||(g=g.videoTransceiver)===null||g===void 0?void 0:g.receiver,Q=await I.getStatsWithLowFrequency(void 0,!0,C),i=Q.find(E=>E.type==="transport"&&E.dtlsState==="connected"),B=Q.find(E=>E.type==="candidate-pair"&&E.state==="succeeded"&&E.id===(i==null?void 0:i.selectedCandidatePairId));B&&(this._transportDelay=Math.round(1e3*B.currentRoundTripTime/2))}}setDisconnect(){this.stopRecvFrame("audio","connection_lost"),this.stopRecvFrame("video","connection_lost"),this.reset()}reset(){this._currentAudioRecv={startTime:0,eventSessionId:0,type:"login"},this._currentVideoRecv={startTime:0,eventSessionId:0,type:"login"},this._login=!1,this._unMuteAudio=!1,this._enableAudio=!1,this._unMuteVideo=!1,this._remoteUnmuteAudio=!1,this._remoteUnmuteVideo=!1,this._enableVideo=!1,this._audioExternal=!1,this._pushAudio=!1,this._videoExternal=!1,this._pushVideo=!1,this._autoSubscribeVideo=!1,this._autoSubscribeAudio=!1,this._autoSubscribe=!1,this._subscribeAudio=!1,this._subscribeVideo=!1,this._subscribe=!1,this._pushTrack=!1,this._multiChatMode=!1,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._transportDelayInterval&&window.clearInterval(this._transportDelayInterval)}get audioFirstFrameReceived(){return this._audioFirstFrameState===3}get FirstFrameReceived(){return this._audioFirstFrameState===3}}class wG{constructor(I,g){l(this,"_audioEventSessionId",zn()),l(this,"_videoEventSessionId",zn()),l(this,"_pcSessionId",void 0),l(this,"_firstAudioFrameTimer",void 0),l(this,"_firstVideoFrameTimer",void 0),l(this,"_stream",void 0),l(this,"_firstVideoFrameInterval",void 0),l(this,"_firstAudioFrameInterval",void 0),l(this,"_currentAudioSend",{startTime:0,eventSessionId:0,type:"login"}),l(this,"_currentVideoSend",{startTime:0,eventSessionId:0,type:"login"}),l(this,"_login",!1),l(this,"_publisher",!1),l(this,"_unMuteAudio",!1),l(this,"_enableAudio",!1),l(this,"_unMuteVideo",!1),l(this,"_enableVideo",!1),l(this,"_audioExternal",!1),l(this,"_pushAudio",!1),l(this,"_videoExternal",!1),l(this,"_pushVideo",!1),l(this,"_autoPublish",!1),l(this,"_publish",!1),l(this,"_timeout",1e4),l(this,"_audioFirstFrameState",0),l(this,"_videoFirstFrameState",0),l(this,"_monitor",void 0),l(this,"logger",void 0),this._ctx=I,this._stream=g,this._monitor=bI(g.engineId),this.logger=new SA("SendFrameObserver",0,g.engineId)}beginSendFrame(I,g){if(I==="audio"){var C,Q,i,B,E,e;this._audioEventSessionId++,this._currentAudioSend={startTime:Date.now(),eventSessionId:this._audioEventSessionId,type:g};const a={event_type:"begin_send",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),type:g,start:this._currentAudioSend.startTime,event_session_id:this._audioEventSessionId,vendor_mode:((Q=this._stream)===null||Q===void 0?void 0:Q.vendorCode)||0,pc_session_id:((i=this._stream)===null||i===void 0?void 0:i.pcSessionId)||((B=this._ctx.peerConnection)===null||B===void 0?void 0:B.getConnectionId()),capture_session_id:(E=this._stream)===null||E===void 0||(E=E.audioTrack)===null||E===void 0?void 0:E.captureSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstAudioFrameTimer=setTimeout(()=>{BN(this._ctx,"audio",this._stream,this._monitor),this.stopSendFrame("audio","timeout"),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval)},this._timeout),this.logger.info("rtcFirstFrameSend",JSON.stringify(a)),(e=this._monitor)===null||e===void 0||e.report("rtc_first_frame",a),this._watchForFirstAudioFrameSend(),this._audioFirstFrameState=1,this._login=!0,this._publisher=!0,this._publish=!0,this._unMuteAudio=!0,this._pushAudio||(this._enableAudio=!0)}else if(I==="video"){var t,o,r,s,v,n;this._videoEventSessionId++,this._currentVideoSend={startTime:Date.now(),eventSessionId:this._videoEventSessionId,type:g};const a={event_type:"begin_send",media_type:I,is_screen:!((t=this._stream)===null||t===void 0||!t.isScreen),type:g,start:this._currentVideoSend.startTime,event_session_id:this._videoEventSessionId,vendor_mode:((o=this._stream)===null||o===void 0?void 0:o.vendorCode)||0,pc_session_id:((r=this._stream)===null||r===void 0?void 0:r.pcSessionId)||((s=this._ctx.peerConnection)===null||s===void 0?void 0:s.getConnectionId()),capture_session_id:(v=this._stream)===null||v===void 0||(v=v.videoTrack)===null||v===void 0?void 0:v.captureSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstVideoFrameTimer=setTimeout(()=>{BN(this._ctx,"video",this._stream,this._monitor),this.stopSendFrame("video","timeout"),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval)},this._timeout),this._watchForFirstVideoFrameSend(),this.logger.info("rtcFirstFrameSend",JSON.stringify(a)),(n=this._monitor)===null||n===void 0||n.report("rtc_first_frame",a),this._videoFirstFrameState=1,this._login=!0,this._publisher=!0,this._publish=!0,this._unMuteVideo=!0,this._pushVideo||(this._enableVideo=!0)}}stopSendFrame(I,g){if(I==="audio"){var C,Q,i,B,E,e,t,o;if(this._audioFirstFrameState!==1)return;const h={event_type:"sent_end",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),start:(Q=this._currentAudioSend)===null||Q===void 0?void 0:Q.startTime,reason:g,result:!1,event_session_id:this._audioEventSessionId,type:(i=this._currentAudioSend)===null||i===void 0?void 0:i.type,vendor_mode:((B=this._stream)===null||B===void 0?void 0:B.vendorCode)||0,pc_session_id:((E=this._stream)===null||E===void 0?void 0:E.pcSessionId)||((e=this._ctx.peerConnection)===null||e===void 0?void 0:e.getConnectionId()),capture_session_id:(t=this._stream)===null||t===void 0||(t=t.audioTrack)===null||t===void 0?void 0:t.captureSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),delete this._currentAudioSend,this.logger.info("rtcFirstFrameSend",JSON.stringify(h)),(o=this._monitor)===null||o===void 0||o.report("rtc_first_frame",h),this._audioFirstFrameState=2}else if(I==="video"){var r,s,v,n,a,c,P,d;if(this._videoFirstFrameState!==1)return;const h={event_type:"sent_end",media_type:I,start:(r=this._currentVideoSend)===null||r===void 0?void 0:r.startTime,is_screen:!((s=this._stream)===null||s===void 0||!s.isScreen),reason:g,result:!1,event_session_id:this._videoEventSessionId,type:(v=this._currentVideoSend)===null||v===void 0?void 0:v.type,vendor_mode:((n=this._stream)===null||n===void 0?void 0:n.vendorCode)||0,pc_session_id:((a=this._stream)===null||a===void 0?void 0:a.pcSessionId)||((c=this._ctx.peerConnection)===null||c===void 0?void 0:c.getConnectionId()),capture_session_id:(P=this._stream)===null||P===void 0||(P=P.videoTrack)===null||P===void 0?void 0:P.captureSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),delete this._currentVideoSend,this.logger.info("rtcFirstFrameSend",JSON.stringify(h)),(d=this._monitor)===null||d===void 0||d.report("rtc_first_frame",h),this._videoFirstFrameState=2}}sendFrameFinish(I){if(I==="audio"){var g,C,Q,i,B,E;if(this._audioFirstFrameState!==1||!this._currentAudioSend)return;const{type:n,startTime:a}=this._currentAudioSend,c={event_type:"sent_end",media_type:I,is_screen:!((g=this._stream)===null||g===void 0||!g.isScreen),start:a,result:!0,event_session_id:this._audioEventSessionId,type:n,vendor_mode:((C=this._stream)===null||C===void 0?void 0:C.vendorCode)||0,pc_session_id:((Q=this._stream)===null||Q===void 0?void 0:Q.pcSessionId)||((i=this._ctx.peerConnection)===null||i===void 0?void 0:i.getConnectionId()),capture_session_id:(B=this._stream)===null||B===void 0||(B=B.audioTrack)===null||B===void 0?void 0:B.captureSessionId};delete this._currentAudioSend,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this.logger.info("rtcFirstFrameSend",JSON.stringify(c)),(E=this._monitor)===null||E===void 0||E.report("rtc_first_frame",c),this._audioFirstFrameState=3}else if(I==="video"){var e,t,o,r,s,v;if(this._videoFirstFrameState!==1||!this._currentVideoSend)return;const{type:n,startTime:a}=this._currentVideoSend,c={event_type:"sent_end",media_type:I,is_screen:!((e=this._stream)===null||e===void 0||!e.isScreen),start:a,result:!0,event_session_id:this._videoEventSessionId,type:n,vendor_mode:((t=this._stream)===null||t===void 0?void 0:t.vendorCode)||0,pc_session_id:((o=this._stream)===null||o===void 0?void 0:o.pcSessionId)||((r=this._ctx.peerConnection)===null||r===void 0?void 0:r.getConnectionId()),capture_session_id:(s=this._stream)===null||s===void 0||(s=s.videoTrack)===null||s===void 0?void 0:s.captureSessionId};delete this._currentVideoSend,this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this.logger.info("rtcFirstFrameSend",JSON.stringify(c)),(v=this._monitor)===null||v===void 0||v.report("rtc_first_frame",c),this._videoFirstFrameState=3}}setLogin(I){if(this._login!==I){var g,C;this._login=I,I&&((g=this._stream)!==null&&g!==void 0&&g.videoTrack&&this._stream.pubVideo&&this.beginSendFrame("video","login"),(C=this._stream)!==null&&C!==void 0&&C.audioTrack&&this._stream.pubAudio&&this.beginSendFrame("audio","login")),!I&&this._audioSending&&this.stopSendFrame("audio","leave_room"),!I&&this._videoSending&&this.stopSendFrame("video","leave_room")}}setPublish(I){if(this._publish!==I){var g,C;this._publish=I,I&&(!((g=this._stream)===null||g===void 0)&&g.videoTrack&&this._stream.pubVideo&&this.beginSendFrame("video","publish"),!((C=this._stream)===null||C===void 0)&&C.audioTrack&&this._stream.pubAudio&&this.beginSendFrame("audio","publish")),!I&&this._audioSending&&this.stopSendFrame("audio","unpublish"),!I&&this._videoSending&&this.stopSendFrame("video","unpublish")}}setUnmuteAudio(I){var g;this._unMuteAudio!==I&&(this._unMuteAudio=I,(g=this._stream)!==null&&g!==void 0&&g.audioHasCapture&&(I&&this.beginSendFrame("audio","unmute"),!I&&this._audioSending&&this.stopSendFrame("audio","mute")))}setEnableAudio(I){var g;this._enableAudio!==I&&(g=this._stream)!==null&&g!==void 0&&g.pubAudio&&(this._enableAudio=I,I&&this.beginSendFrame("audio","enable"),!I&&this._audioSending&&this.stopSendFrame("audio","disable"))}setUnmuteVideo(I){var g;this._unMuteVideo!==I&&(this._unMuteVideo=I,(g=this._stream)!==null&&g!==void 0&&g.videoHasCapture&&(I&&this.beginSendFrame("video","unmute"),!I&&this._videoSending&&this.stopSendFrame("video","mute")))}setEnableVideo(I){var g;this._enableVideo!==I&&(g=this._stream)!==null&&g!==void 0&&g.pubVideo&&(this._enableVideo=I,I&&this.beginSendFrame("video","enable"),!I&&this._videoSending&&this.stopSendFrame("video","disable"))}setPushAudio(I){this._pushAudio!==I&&(this._pushAudio=I,I&&this.beginSendFrame("audio","push"),!I&&this._audioSending&&this.stopSendFrame("audio","stop_push"))}setPushVideo(I){this._pushVideo!==I&&(this._pushVideo=I,I&&this.beginSendFrame("video","push"),!I&&this._videoSending&&this.stopSendFrame("video","stop_push"))}setAutoPublish(I){this._autoPublish=I}setPublisher(I){this._publisher!==I&&(this._publisher=I,!I&&this._audioSending&&this.stopSendFrame("audio","audience"),!I&&this._videoSending&&this.stopSendFrame("video","audience"))}setDisconnect(){this._audioSending&&this.stopSendFrame("audio","connection_lost"),this._videoSending&&this.stopSendFrame("video","connection_lost"),this.reset()}setTimeout(I){this._timeout=I}setPCSessionId(I){this._pcSessionId=I}async _getFirstVideoFrameStats(){var I,g,C,Q;const i=(I=this._stream)===null||I===void 0||(I=I.videoTrack)===null||I===void 0?void 0:I.preprocessingTrack,B=(g=this._stream)===null||g===void 0||(g=g.videoTransceiver)===null||g===void 0?void 0:g.sender,E=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(E&&i)return(await E.getStatsWithLowFrequency(i,!0,B)).filter(e=>e.type==="outbound-rtp")}async _getFirstAudioFrameStats(){var I,g,C,Q;const i=(I=this._stream)===null||I===void 0||(I=I.audioTrack)===null||I===void 0?void 0:I.preprocessingTrack,B=(g=this._stream)===null||g===void 0||(g=g.audioTransceiver)===null||g===void 0?void 0:g.sender,E=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(E&&i)return(await E.getStatsWithLowFrequency(i,!0,B)).find(e=>e.type==="outbound-rtp")}_watchForFirstVideoFrameSend(){let I=-1,g=-1;this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._firstVideoFrameInterval=window.setInterval(async()=>{const C=await this._getFirstVideoFrameStats();let Q=0,i=0;if(C==null||C.map(B=>{Q+=B.framesSent,i+=B.packetsSent}),C&&C.length>0&&(Q>I||i>g)){if(I===-1&&g===-1)return I=Q,void(g=i);this.sendFrameFinish("video"),window.clearInterval(this._firstVideoFrameInterval)}},100)}_watchForFirstAudioFrameSend(){let I=-1;this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstAudioFrameInterval=window.setInterval(async()=>{const g=await this._getFirstAudioFrameStats();if(g&&g.packetsSent>I){if(I===-1)return void(I=g.packetsSent);this.sendFrameFinish("audio"),window.clearInterval(this._firstAudioFrameInterval)}},100)}reset(){this._login=!1,this._publisher=!1,this._unMuteAudio=!1,this._enableAudio=!1,this._unMuteVideo=!1,this._enableVideo=!1,this._audioExternal=!1,this._pushAudio=!1,this._videoExternal=!1,this._pushVideo=!1,this._autoPublish=!1,this._publish=!1,this._audioFirstFrameState=0,this._videoFirstFrameState=0,this._currentAudioSend={startTime:0,eventSessionId:0,type:"login"},this._currentVideoSend={startTime:0,eventSessionId:0,type:"login"},window.clearTimeout(this._firstAudioFrameTimer),window.clearTimeout(this._firstVideoFrameTimer),window.clearInterval(this._firstAudioFrameInterval),window.clearInterval(this._firstVideoFrameInterval)}destroy(){this.reset(),delete this._stream}get _audioSending(){return this._audioFirstFrameState===1}get _videoSending(){return this._videoFirstFrameState===1}}const QbA={audio:{delay:1200,stallRadio:.3},video:{delay:1200,stallRadio:.6},screen_audio:{delay:1600,stallRadio:.8},screen_video:{delay:1600,stallRadio:.8}};class ibA{constructor(I){l(this,"_preUplinkStats",new Map),l(this,"_preDownlinkStats",new Map),l(this,"_timer",void 0),l(this,"_delayTimer",void 0),l(this,"reportor",void 0),this._ctx=I}updateUplinkStats(I,g){const{audioStats:C,videoStats:Q,isScreen:i}=I;if(C.sendKBitrate>0&&C.rtt){const B=i?"screen_audio":"audio",{rtt:E,_fractionLost:e,_retransmittedRate:t}=C,o=this._getQosLevel(E,e||0,t||0),r=this._preUplinkStats.get(B)||[o];this._preUplinkStats.set(B,[...r,o].slice(-2))}if(Q.sentKBitrate>0&&Q.rtt){const B=i?"screen_video":"video";let{_fractionLost:E}=Q;const{rtt:e,_sendBandWidth:t,_retransmittedRate:o}=Q;t===0&&(E=Math.max(.65,E));const r=this._getQosLevel(e,E||0,o||0),s=this._getUplinkVideoQoE(I,g),v=this._getVideoUplinkNetworkQuality(r,s),n=this._preUplinkStats.get(B)||[v];this._preUplinkStats.set(B,[...n,v].slice(-2))}this._startNetworkQualityReport()}updateDownlinkStats(I,g){if(!g)return;const{audioActive:C,videoActive:Q}=this._getStreamActiveState(g),{audioStats:i,videoStats:B,isScreen:E,userId:e}=I;let t,o,r=!0,s=!0;if(C)if(i.receivedKBitrate===0)r=!1;else{const{rtt:a,audioLossRate:c,stallDuration:P,statsInterval:d,e2eDelay:h}=i,u=P/d,D=E?"screen_audio":"audio",y=this._getQosLevel(a,c||0,B._retransmittedRate||0),b=this._getDownlinkQoE(D,u,h);t=this._getNetworkQuality(y,b)}if(Q)if(B.receivedKBitrate===0||B.rtt===0)s=!1;else{const{rtt:a,videoLossRate:c,stallDuration:P,statsInterval:d,e2eDelay:h,_retransmittedRate:u}=B,D=P/d,y=E?"screen_video":"video",b=this._getQosLevel(a,c||0,u||0),G=this._getDownlinkQoE(y,D,h);o=this._getNetworkQuality(b,G)}const v="".concat(e).concat(E?"_screen":"");if(!r&&!s)return void this._preDownlinkStats.delete(v);const n=t&&o?Math.ceil((t+o)/2):t||o;if(n){const a=this._preDownlinkStats.get(v)||[n];this._preDownlinkStats.set(v,[...a,n].slice(-2)),this._startNetworkQualityReport()}}destroy(){this._timer&&(window.clearInterval(this._timer),delete this._timer),this._delayTimer&&(window.clearTimeout(this._delayTimer),delete this._delayTimer),this._preUplinkStats.clear(),this._preDownlinkStats.clear()}_startNetworkQualityReport(){this._delayTimer||this._timer||(this._preUplinkStats.size>0||this._preDownlinkStats.size>0)&&(this._delayTimer=setTimeout(()=>{delete this._delayTimer,this._reportNetworkQuality(),this._timer=window.setInterval(()=>{this._reportNetworkQuality()},2e3)},300))}_reportNetworkQuality(){var I;let g,C;if(["connected","connecting"].includes((I=this._ctx.handler)===null||I===void 0?void 0:I.getConnectionState())){const Q=this._getBetterQualityAndRemoveOldest("audio","up"),i=this._getBetterQualityAndRemoveOldest("video","up");g=Q&&i?Math.ceil((Q+i)/2):Q||i||this._getBetterQualityAndRemoveOldest("screen_video","up")||this._getBetterQualityAndRemoveOldest("screen_audio","up")||vt.EXCELLENT;const B=Array.from(this._preDownlinkStats.keys()).map(E=>this._getBetterQualityAndRemoveOldest(E,"down")).filter(E=>E);C=Math.ceil(B.reduce((E,e)=>e+E,0)/B.length)||vt.UNKNOWN}else g=C=vt.DOWN;navigator.onLine||(g=vt.DOWN,C=vt.DOWN),typeof this.reportor=="function"&&this.reportor(g,C)}_getNetworkQuality(I,g){return g===1?Math.max(I-2,1):g===2?I:Math.min(I+1,5)}_getVideoUplinkNetworkQuality(I,g){return g===1||g===0?I:Math.min(g===2?I+1:I+2,5)}_getQosLevel(I,g,C){let Q;return Q=(!I||I<=250)&&g<=.15?1:(!I||I<=500)&&g<=.3?2:(!I||I<=750)&&g<=.45?3:(!I||I<=1e3)&&g<=.6?4:5,C>.5?Q=Math.max(Q,4):C>.35?Q=Math.max(Q,3):C>.15&&(Q=Math.max(Q,2)),Q}_getUplinkQoE(I,g){let C=0;switch(I){case"audio":case"video":C=g<.05?1:g<.1?2:3;break;case"screen_video":case"screen_audio":C=g<.04?1:g<.08?2:3}return C}_getUplinkVideoQoE(I,g){var C;const Q=(I==null||(C=I.videoStats)===null||C===void 0?void 0:C.rid)||"0";if(!g)return 0;const i=g.pubAttributes.videoDescriptions[Q],B=I.videoStats,E=B.encodedFrameWidth*B.encodedFrameHeight/(i.width*i.height),e=B.sentFrameRate/i.framerate;let t=0,o=0;return typeof E!="number"||Number.isNaN(E)||(t=E>=.9?1:E<.9&&E>=.8?2:3),typeof e!="number"||Number.isNaN(e)||(o=e>=.8?1:e<.8&&e>=.6?2:3),Math.max(0,t,o)}_getDownlinkQoE(I,g,C){const Q=QbA[I];return g>Q.stallRadio||C>Q.delay||g>Q.stallRadio/2&&C>Q.delay/2?3:(g>Q.stallRadio/2||Q.delay,2)}_getBetterQualityAndRemoveOldest(I,g){let C=vt.UNKNOWN;const Q=g==="up"?this._preUplinkStats:this._preDownlinkStats,i=Q.get(I);if(i){const B=i.filter(E=>E);B.length>0&&(C=Math.min(...B)),i.shift(),i.length===0&&Q.delete(I)}return C}_getStreamActiveState(I){let{subMediaType:g,_attributes:C,subVideo:Q,subAudio:i}=I;return{audioActive:i&&lg(g)&&C.localaudio&&C.audiostream,videoActive:Q&&vI(g)&&C.localvideo&&C.videostream}}}class BbA{constructor(I){l(this,"_timer",void 0),l(this,"_remoteVideoSizeCache",{}),l(this,"_remoteScreenSizeCache",{}),l(this,"onchange",void 0),this._room=I,this._start()}destroy(){this._timer&&(window.clearInterval(this._timer),delete this._timer),this._remoteVideoSizeCache={},this._remoteScreenSizeCache={}}_start(){this._timer||(this._timer=window.setInterval(()=>{const I={},g={};this._room.remoteStreams.forEach((C,Q)=>{C.forEach(i=>{var B;const E=(B=i.videoTrack)===null||B===void 0?void 0:B.preprocessingTrack;if(E){const o=i.isScreen?this._remoteScreenSizeCache:this._remoteVideoSizeCache,{width:r=0,height:s=0}=o[Q]||{};let v=0,n=0;if(KI){var e,t;({width:v,height:n}=(e=i==null||(t=i.videoTrack)===null||t===void 0?void 0:t.getSizeByPlayer())!==null&&e!==void 0?e:{width:0,height:0})}else{const a=E.getSettings();v=a.width||0,n=a.height||0}s===n&&r===v||typeof this.onchange=="function"&&this.onchange(Q,i.isScreen,v,n),delete o[Q],(i.isScreen?g:I)[Q]={width:v,height:n}}})}),Object.keys(this._remoteVideoSizeCache).forEach(C=>{typeof this.onchange=="function"&&this.onchange(C,!1,0,0)}),Object.keys(this._remoteScreenSizeCache).forEach(C=>{typeof this.onchange=="function"&&this.onchange(C,!0,0,0)}),this._remoteVideoSizeCache=I,this._remoteScreenSizeCache=g},1e3))}}const EbA=Array.from(new TextEncoder().encode("subt")),ebA={1:S.SUBTITLE_ERR_POSTPROCESS,2:S.SUBTITLE_ERR_CONNECTION_ERROR,3:S.SUBTITLE_ERR_PROCESS_ERROR},fl=new SA("SubtitleTool",1),tbA=A=>{if(A.extraInfo)try{const g=JSON.parse(A.extraInfo);g.source_language&&["zh","en","ja"].indexOf(g.source_language)}catch{}else{var I;const g=((I=navigator.language)===null||I===void 0?void 0:I.substring(0,2))||"";["zh","en","ja"].indexOf(g)>-1&&(A.extraInfo=JSON.stringify({source_language:g}))}};class Ih{constructor(I,g){l(this,"_taskId",void 0),l(this,"_sourceLanguage","zh"),l(this,"_updating",!1),l(this,"onEvent",void 0),l(this,"onMessage",void 0),l(this,"_preConfig",void 0),l(this,"_timer",void 0),this._ctx=I,this._roomConf=g;const{extraInfo:C}=g.userInfo;if(C)try{const Q=JSON.parse(C);Q.source_language&&(this._sourceLanguage=Q.source_language)}catch{}}async start(I){fl.info("start","Invoke config: %o",I),gI(I.mode,"mode",[VE.ASR_ONLY,VE.ASR_AND_TRANSLATION]);const g=Array.isArray(I.targetLanguage)?I.targetLanguage:[I.targetLanguage||""];if(I.mode===VE.ASR_AND_TRANSLATION&&g.findIndex(C=>rbA.indexOf(C)===-1)>-1)throw new K(S.INVALID_PARAMS,"Invalid targetLanguage.");if(this._taskId)throw new K(S.SUBTITLE_ALREADY_ON,"Already turned on subtitle");this._preConfig={targetLanguage:g,mode:I.mode},this._taskId=(Date.now().toString()+this._roomConf.roomId+this._roomConf.userId).substring(0,20),await this._sendSubtitleSignalingWithRetry(I,this._taskId)}async update(I){if(fl.info("update","Invoke config: %o",I),!this._taskId)throw new K(S.SUBTITLE_NOT_TURNED_ON,"Start subtitle first.");this._sourceLanguage=I.sourceLanguage,this._updating=!0;try{await this._ctx.signalingManager.sendSignaling("controlMessage",this._genChangeSubtitleLanguageSignaling(I,this._taskId))}catch(g){throw this._updating=!1,g}}stop(){fl.info("stop","Invoke"),this._taskId&&this._ctx.signalingManager.sendSignaling("controlMessage",{type:"subtitle",action:"stopped",appId:this._ctx.appId,roomId:this._roomConf.roomId,userId:this._roomConf.userId,taskId:this._taskId}).finally(()=>{var I;delete this._taskId,(I=this.onEvent)===null||I===void 0||I.call(this,{event:ar.STOPPED}),this._clearTimer()})}async reconnect(){this._taskId&&this._preConfig&&(await this._ctx.signalingManager.sendSignaling("controlMessage",{type:"subtitle",action:"stopped",appId:this._ctx.appId,roomId:this._roomConf.roomId,userId:this._roomConf.userId,taskId:this._taskId}),delete this._taskId,this.start(this._preConfig))}getConfig(){return this._preConfig}destroy(){fl.info("destroy","Invoke"),this.stop(),delete this._preConfig,delete this._taskId}onResult(I){const{error:g,errorMessage:C,eventType:Q}=I.body;if(g!==0){var i;const e=new K(ebA[g]||S.SUBTITLE_ERR_UNKNOWN,C||"");(i=this.onEvent)===null||i===void 0||i.call(this,{event:ar.ERROR,errorCode:e.code,errorMessage:e.message}),this._clearTimer()}else if(Q==="SubtitleStarted"){var B;(B=this.onEvent)===null||B===void 0||B.call(this,{event:ar.STARTED}),this._clearTimer()}else if(this._updating&&Q==="LanguageChanged"){var E;this._updating=!1,(E=this.onEvent)===null||E===void 0||E.call(this,{event:ar.UPDATED})}}onMessageRecv(I){if(arguments.length>1&&arguments[1]!==void 0&&arguments[1]||this._taskId&&this._preConfig){const C=obA(I);if(!C||C.length===0)return!1;if(this._taskId&&this._preConfig){const{mode:Q,targetLanguage:i}=this._preConfig,B=[];var g;C.forEach(E=>{if(Q===VE.ASR_ONLY)E.mode===Q&&B.push(E);else{const e=i.includes(E.language);(e||E.mode===VE.ASR_ONLY)&&B.push(E),E.mode===VE.ASR_ONLY&&e&&B.push(p(p({},E),{},{mode:VE.ASR_AND_TRANSLATION}))}}),B.length>0&&((g=this.onMessage)===null||g===void 0||g.call(this,B))}return!0}return!1}async _sendSubtitleSignalingWithRetry(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;await this._ctx.signalingManager.sendSignaling("controlMessage",this._genSubtitleSignaling(I,g)),this._timer=self.setTimeout(()=>{var Q;C===2?((Q=this.onEvent)===null||Q===void 0||Q.call(this,{event:ar.ERROR,errorCode:S.TIME_OUT,errorMessage:"start subtitle timeout."}),delete this._timer,this.stop()):this._sendSubtitleSignalingWithRetry(I,g,C+1)},Ih.retryIntervel)}_genSubtitleSignaling(I,g){return{taskId:g,type:"subtitle",action:"started",roomId:this._roomConf.roomId,appId:this._ctx.appId,userId:this._roomConf.userId,subtitleMeta:{subtitleConfig:{mode:I.mode,usersConfig:[{userId:this._roomConf.userId,targetLanguages:Array.isArray(I.targetLanguage)?I.targetLanguage:[I.targetLanguage||""]}]},vendorConfig:{type:0}}}}_genChangeSubtitleLanguageSignaling(I,g){return{taskId:g,type:"subtitle",action:"subtitleUpdated",roomId:this._roomConf.roomId,appId:this._ctx.appId,userId:this._roomConf.userId,subtitleMeta:{protocol:1,languageConfig:{sourceLanguages:[{userId:this._roomConf.userId,languageCode:[I.sourceLanguage]}]}}}}_clearTimer(){this._timer&&(self.clearTimeout(this._timer),delete this._timer)}}l(Ih,"retryIntervel",3e4);const obA=A=>{let{message:I}=A;if(I instanceof ArrayBuffer&&I.byteLength>8)try{const g=new DataView(I,0);let C=0;if(EbA.every(Q=>g.getUint8(C++)===Q)){const Q=g.getUint32(C);if(C+=4,Q===g.byteLength-8){const i=Pg.ab2str(I.slice(8)),{data:B,type:E}=JSON.parse(i);if(E==="subtitle")return B}}}catch{}return!1},rbA=["zh","zh-Hant","tn","vi","iu","it","id","hi","en","ho","he","es","el","uk","ur","tk","tr","ti","ty","tl","to","th","ta","te","sl","sk","ss","eo","sm","sg","st","sv","ja","tw","qu","pt","pa","no","nb","nr","my","bn","mn","mh","mk","ml","mr","ms","lu","ro","lt","lv","lo","kj","hr","kn","ki","cs","ca","nl","ko","ht","gu","ka","kl","km","lg","kg","fi","fj","fr","ru","ng","de","tt","da","ts","cv","fa","bs","pl","bi","nd","ba","bg","az","ar","af","sq","ab","os","ee","et","ay","lzh","am","ckb","cy","gl","ha","hy","ig","kmr","ln","nso","ny","om","sn","so","sr","sw","xh","yo","zu"];function sbA(A){return A.replace(/[A-Z]/g,I=>"_".concat(I.toLowerCase()))}function GG(A,I){return p(p({},A),I)}function Ts(A){const I={};return Object.keys(A).forEach(g=>{const C=A[g];try{Array.isArray(C)?I[g]=C.map(Q=>Q!==null&&typeof Q=="object"?Ts(Q):Q):I[g]=C!==null&&typeof C=="object"?Ts(C):C}catch{}}),I}function EN(A){return A===null?[]:Object.keys(A).map(I=>A[I])}const lb=new SA("Locker",2);let vbA=1;class Wi{constructor(I){l(this,"lockingPromise",Promise.resolve()),l(this,"locks",0),l(this,"name",""),l(this,"lockId",void 0),l(this,"closeReason",void 0),this.lockId=vbA++,I&&(this.name=I),lb.info("lock-".concat(this.name,"-").concat(this.lockId),"is created.")}get isLocked(){return this.locks>0}lock(){let I;this.locks+=1,lb.info("lock-".concat(this.name,"-").concat(this.lockId),"locked, current queue ".concat(this.locks,"."));const g=new Promise(Q=>{I=()=>{this.locks-=1,lb.info("lock-".concat(this.name,"-").concat(this.lockId),"unlocked, current queue ".concat(this.locks,".")),Q()}}),C=this.lockingPromise.then(()=>I);return this.lockingPromise=this.lockingPromise.then(()=>g),C}}var XE=(A=>(A[A.SEND=0]="SEND",A[A.FEEDBACK=1]="FEEDBACK",A))(XE||{}),US=(A=>(A[A.P2P=0]="P2P",A[A.SIGNAL=1]="SIGNAL",A[A.BROADCAST=2]="BROADCAST",A[A.BUSINESS_SERVER=3]="BUSINESS_SERVER",A))(US||{}),RG=(A=>(A[A.SUCCESS=0]="SUCCESS",A[A.TIMEOUT=1]="TIMEOUT",A[A.BROKEN=2]="BROKEN",A[A.NO_RECEIVER=3]="NO_RECEIVER",A[A.NO_RELAYPATH=4]="NO_RELAYPATH",A[A.EXCEED_QPS=5]="EXCEED_QPS",A[A.SEND_TO_SERVER_ERROR=17]="SEND_TO_SERVER_ERROR",A[A.SERVER_RESPONSE_ERROR=18]="SERVER_RESPONSE_ERROR",A[A.NOT_JOIN=100]="NOT_JOIN",A[A.NOT_LOGIN=105]="NOT_LOGIN",A[A.SERVER_PARAMS_NOTSET=106]="SERVER_PARAMS_NOTSET",A[A.UNKNOWN=1e3]="UNKNOWN",A))(RG||{});const abA={0:[0,"success"],1:[S.USER_MESSAGE_TIMEOUT,"timeout, failed to send."],2:[S.USER_MESSAGE_BROKEN,"dataChannel broken, failed to send."],3:[S.USER_MESSAGE_NO_RECEIVER,"cannot find the receiver."],4:[S.USER_MESSAGE_NO_RECEIVER,"cannot find relay path."],5:[S.USER_MESSAGE_EXCEED_QPS,"cannot find relay path."],17:[S.USER_MESSAGE_SEND_TO_SERVER_ERROR,"failed to send to business server."],18:[S.USER_MESSAGE_SERVER_RESPONSE_ERROR,"business server response error."],100:[S.USER_MESSAGE_NOT_JOIN,"not join room"],105:[S.USER_MESSAGE_NOT_LOGIN,"not login."],106:[S.USER_MESSAGE_SERVER_PARAMS_NOTSET,"server param is not set."],1e3:[S.USER_MESSAGE_UNKNOWN,"unknown."]},nbA=["msg"],eN=[],cbA=[IA.ENGINE_CONTROL_MESSAGE];var ht=(A=>(A[A.C2S=0]="C2S",A[A.C2C=1]="C2C",A[A.C2GW=2]="C2GW",A[A.C2CDirect=3]="C2CDirect",A[A.C2RTM=4]="C2RTM",A))(ht||{});class lbA extends tB.EventEmitter{constructor(I,g,C){super(),l(this,"_singlingCache",new Map),l(this,"_p2pCache",new Map),l(this,"_rttIds",{}),l(this,"_p2pMessageId",new s0A),l(this,"_clearDataChannelListener",void 0),l(this,"_monitor",void 0),l(this,"logger",void 0),this.id=I,this._dataChannel=g,this.connectionIds=C,this._clearDataChannelListener=this._handleHandler(),this._monitor=bI(I),this.logger=new SA("DataChannelSignaling",3,I)}destroy(){this._clearDataChannelListener(),delete this._dataChannel,this._singlingCache.forEach((I,g)=>{I.error(new K(S.OPERATION_CANCEL,"disconnect")),this._singlingCache.delete(g)}),this._singlingCache.clear(),this._p2pCache.clear(),this._rttIds={}}sendSignaling(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:6e4;return new Promise((i,B)=>{var E;const e=this._genHeader(C);e.id=fk();const t=e.id.join("-"),o=p({error_code:0,message:JSON.stringify(g),signaling_event:"call-".concat(I),signaling_type:"Send",stream_id:g.streamId,stream_user_id:g.streamUserId,direction:"up",event_session_id:t},this.connectionIds);(E=this._monitor)===null||E===void 0||E.report("rtc_signaling",o);const r=I==="customMessage";r&&Ig.samplingOne2ManyMsg(this.id,Number(e.id.join("")),g);const s=setTimeout(()=>{this._singlingCache.delete(t),B(new K(S.TIME_OUT,"".concat(I," message time out"))),r&&Ig.updateOne2ManyMsgAck(this.id,g,999)},Q);this._singlingCache.set(t,{start:dA(),signalingType:I,success:v=>{clearTimeout(s),i(v),r&&Ig.updateOne2ManyMsgAck(this.id,g,0)},error:v=>{clearTimeout(s),B(v),r&&Ig.updateOne2ManyMsgAck(this.id,g,v.code)},id:t}),this.logger.info("Signal",">>>>>> [".concat(I,"{").concat(e.functionType,"}][").concat(t,"]"),g),this._sendMessage(I,e,g)})}sendPingSignaling(){return this.sendSignaling("CheckConnectivity",{ts:Date.now()},{functionType:2})}async sendP2PMessage(I,g){let{msg:C}=I,Q=ze(I,nbA);const i=C instanceof ArrayBuffer;return this._sendP2PMessage(Ig.samplingP2PMsg(this.id,p(p({ver:1,id:this._p2pMessageId.getMessageId(),time:Date.now(),dir:XE.SEND,type:US.P2P,err:RG.SUCCESS},Q),{},{binary:i,msg:i?await Pg.ab2b64str(C):C})),g)}_sendP2PMessage(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const C=this._genHeader(p(p({needAck:!0,functionType:1},g),{},{id:fk()}));return TD(I.msg)?this._rttIds[I.id]=I.id:I.dir===XE.SEND&&this.logger.info("_sendP2PMessage [DC Signaling p2p{".concat(C.functionType,"} >>]"),JSON.stringify(I)),new Promise((Q,i)=>{if(I.dir===XE.SEND){const B=setTimeout(()=>{this._p2pCache.delete(I.id),i(new K(S.USER_MESSAGE_TIMEOUT,"P2P message timeout")),Ig.updateP2PMsgAck(this.id,I,999)},12e3);this._p2pCache.set(I.id,{success:(E,e)=>{clearTimeout(B),Q(e),Ig.updateP2PMsgAck(this.id,I,0)},error:E=>{clearTimeout(B),Ig.updateP2PMsgAck(this.id,I,E.err);const[e,t]=abA[E.err]||[S.USER_MESSAGE_UNKNOWN,"err: ".concat(E.err,", msg: ").concat(E.msg)];i({err:E.err,code:e,message:E.msg||t})}})}try{this._sendMessage("p2p",C,I)}catch(B){throw B.code===S.NOT_CONNECTED_YET&&(B.code=S.USER_MESSAGE_BROKEN),B}})}_sendMessage(I,g,C){if(!this._dataChannel||this._dataChannel.readyState!=="open")throw new K(S.NOT_CONNECTED_YET,"DataChannel not open");const Q=yA("SIGNAL_COMPRESSION")||g.zip,i=g.version+(Number(Q)<<4)+(Number(g.encrypt)<<5),B=Number(g.needAck)+(Number(g.direction)<<1)+(Number(g.functionType)<<2)+(Number(g.binary)<<6),E=Pg.str2ab(JSON.stringify([I,C])),e=ij(Uint8Array,[i,B,...g.id||[]],Q||g.zip?EG.deflate(new Uint8Array(E)):new Uint8Array(E));try{this._dataChannel.send(e.buffer)}catch(o){var t;throw(t=this._monitor)===null||t===void 0||t.report("rtc_error",{message:"datachannel send error: ".concat(o.message),error_code:iQ.DC_SEND_ERROR}),o}I==="p2p"?Ig.updateP2PMsgReq(this.id,C,e.buffer.byteLength):I==="customMessage"&&Ig.updateOne2ManyMsgReq(this.id,C,e.buffer.byteLength)}_dispartData(I){const g=new Uint8Array(I);let C=0;const Q=g[C++],i=g[C++],B={version:15&Q,zip:!(16&~Q),encrypt:!(32&~Q),needAck:!(1&~i),direction:(2&i)>>1,functionType:(60&i)>>2,binary:!(64&~i)};if(B.needAck||B.direction===1){for(;C<=6;C++)if(!B0A(g[C])){C++;break}B.id=Array.from(g.slice(2,C))}return{header:B,data:g.slice(C)}}_feedbackSignaling(I,g,C){const Q=this._genHeader({needAck:!0,direction:1,id:I.split("-").map(i=>Number(i))});eN.includes(g)||this.logger.info("Signal",">>>>>> [".concat(g,"-res][").concat(I,"]")),this._sendMessage("".concat(g,"-res"),Q,C)}async _handleMessage(I){const g=Date.now(),{byteLength:C}=I,Q=this._dispartData(I);let{data:i}=Q;const{header:B}=Q;if(B.zip){const o=new EG.Inflate;o.push(i,!0),i=o.result}const E=Pg.ab2str(i);let e=[];try{e=JSON.parse(E)}catch(o){var t;o instanceof Error&&((t=this._monitor)===null||t===void 0||t.report("rtc_signaling_msg_error",p({error_code:-1,message:o.message,reason:"message parse failed"},this.connectionIds)));return}switch(B.functionType){case 0:case 4:this.C2S(B,e,E,C,g);break;case 1:this.C2C(e,C,g);break;case 2:this.C2GW(B,e,E)}}async C2S(I,g,C,Q,i){var B;const E=((B=I.id)===null||B===void 0?void 0:B.join("-"))||"";if(I.direction===1)this._handleAckMessage(E,g[0]||{},C,I.functionType);else if(Array.isArray(g)){var e;const t=g[0];g=g[1],eN.includes(t)||this.logger.info("Signal","<<<<<< ".concat(t,"{").concat(I.functionType,"}"),g,E),cbA.includes(t)||this._feedbackSignaling(E,t,t===IA.ON_CUSTOM_MESSAGE?p(p({},g),{},{message:""}):""),g.binary&&typeof g.message=="string"&&(g.message=await Pg.b64str2ab(g.message,this._monitor));const o=Date.now();this.emit(t,p({},g)),t===IA.ON_CUSTOM_MESSAGE&&Ig.reportOne2ManyMsgRecv(this.id,g,{msg_size:Q,recv_msg_ts:i,fwd_msg_ts:o}),(e=this._monitor)===null||e===void 0||e.report("rtc_signaling",p({error_code:0,message:C,signaling_event:"on-".concat(t),signaling_type:"Recv",stream_id:g.streamId,stream_user_id:g.clientId,direction:"down"},this.connectionIds))}}async C2C(I,g,C){var Q,i,B,E;Array.isArray(I)&&(I=I[1]);const e=(Q=I)===null||Q===void 0?void 0:Q.id;switch(this._rttIds[e]||((i=I)===null||i===void 0?void 0:i.dir)===XE.FEEDBACK||TD((B=I)===null||B===void 0?void 0:B.msg)?delete this._rttIds[e]:this.logger.info("Signal","<<<<<< p2p response",I),I.dir){case XE.SEND:const t=Date.now();if(!TD((E=I)===null||E===void 0?void 0:E.msg)){const{binary:o,msg:r,room:s,to:v,from:n}=I,a=s===""?o?IA.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM:IA.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM:o?IA.USER_BINARY_MESSAGE_RECEIVED:IA.USER_MESSAGE_RECEIVED;v?this.emit(a,p(p({},I),{},{msg:o?await Pg.b64str2ab(r,this._monitor):r})):this.emit(IA.ON_CUSTOM_MESSAGE,{clientId:n,binary:o,message:o?await Pg.b64str2ab(r,this._monitor):r})}this._sendP2PMessage(p(p({},I),{},{dir:XE.FEEDBACK,msg:""})),Ig.reportP2PMsgRecv(this.id,I,{msg_size:g,recv_msg_ts:C,fwd_msg_ts:t});break;case XE.FEEDBACK:this._handleP2PMsgFeedback(I)}}C2GW(I,g,C){if(I.direction===1){var Q;const B=((Q=I.id)===null||Q===void 0?void 0:Q.join("-"))||"";this._handleAckMessage(B,g[0]||{},C,I.functionType)}else{const[B,E={}]=g;if(B==="RXMediaMsg"){var i;const{type:e,data:t}=E;switch((i=this._monitor)===null||i===void 0||i.report("rtc_signaling",p({error_code:0,message:C,signaling_event:"on-".concat(e),signaling_type:"Recv",stream_id:"",stream_user_id:"",direction:"down"},this.connectionIds)),e){case"RSCP":try{const o=JSON.parse(t);Array.isArray(o)&&this.emit(e,o)}catch{}break;case"RTT":try{const o=JSON.parse(t);o.length&&this.emit(e,o[0])}catch{}break;case"SSC":try{const o=JSON.parse(t);o.length&&(this.logger.info("Signal","<<<<<< ".concat(e),o),this.emit(e,o[0]))}catch{}}}else B==="engineControlMessage"&&this.C2S(I,g,C,0,0)}}_handleHandler(){const I=Q=>{this.logger.warn("_handleHandler","dataChannel close",Q)},g=Q=>{this.logger.error("_handleHandler","dataChannel error",Q)},C=Q=>{this._handleMessage(Q.data)};return this._dataChannel.addEventListener("close",I),this._dataChannel.addEventListener("error",g),this._dataChannel.addEventListener("message",C),()=>{const Q=this._dataChannel;Q==null||Q.removeEventListener("close",I),Q==null||Q.removeEventListener("error",g),Q==null||Q.removeEventListener("message",C)}}_genHeader(){return p({version:2,zip:!1,encrypt:!1,needAck:!0,direction:0,functionType:0,binary:!1},arguments.length>0&&arguments[0]!==void 0?arguments[0]:{})}_handleAckMessage(I,g,C,Q){var i;const B=this._singlingCache.get(I);B&&(this._singlingCache.delete(I),g.code===200?B.success(g):B.error(g),this.logger.info("Signal","<<<<<< [".concat(B.signalingType,"{").concat(Q,"}-ack] ").concat(I),g));const E=p({error_code:0,message:C,signaling_event:B==null?void 0:B.signalingType,signaling_type:"Ack",stream_id:"",stream_user_id:"",direction:"down",elapse:B?dA()-B.start:0},this.connectionIds);B!=null&&B.id&&(E.event_session_id=B.id),(i=this._monitor)===null||i===void 0||i.report("rtc_signaling",E)}_handleP2PMsgFeedback(I){const g=this._p2pCache.get(I.id);g&&(this._p2pCache.delete(I.id),I.err===RG.SUCCESS?g.success(I.id,I):g.error(I))}}class PbA{constructor(I,g){l(this,"roomId",void 0),l(this,"userInfo",void 0),l(this,"userId",void 0),l(this,"sessionId",UC()),l(this,"token",void 0),l(this,"rtcVid",void 0),l(this,"joinPromise",void 0),l(this,"startJoinTimestamp",void 0),l(this,"_liveControlMessage",void 0),l(this,"_userStreamMap",new Map),l(this,"_roomConfig",{isAutoPublish:!0,isAutoSubscribeAudio:!0,isAutoSubscribeVideo:!0,roomProfileType:LC.communication}),l(this,"_vendorConfig",{enableMultiVendor:!1,vendorCode:0}),l(this,"_roomAttr",{multiChatMode:!1,bigRoomMode:!1}),l(this,"_tokenPublishPrivilegeExpired",!1),l(this,"_tokenSubscribePrivilegeExpired",!1),l(this,"_streamQueueMap",new Map),l(this,"_monitor",void 0),this._ctx=g,this.roomId=I.roomId,this.userInfo=I.userInfo,this.userId=I.userInfo.userId,this.token=I.token,this._monitor=bI(g.id)}async checkJoinRoom(){await this.joinPromise}get vendorConfig(){return this._vendorConfig}setVendorConfig(I){this._vendorConfig=I}updateRoomAttributes(I){this._roomAttr=p(p({},this._roomAttr),I)}setLiveControlMessage(I){this._liveControlMessage=I}getLiveControlMessage(){return this._liveControlMessage}isMultiChatMode(){return this._roomAttr.multiChatMode}updateRoomConfig(I){return this._roomConfig=GG(this._roomConfig,I),this._roomConfig}get isAutoPublish(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoPublish}get isAutoSubscribeAudio(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoSubscribeAudio}get isAutoSubscribeVideo(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoSubscribeVideo}get remoteVideoConfig(){return this._roomConfig.remoteVideoConfig}get roomProfileType(){return this._roomConfig.roomProfileType||LC.communication}isRTSOnlyRoom(){return this._roomConfig.roomMode===WM.ROOM_MODE_RTS_ONLY}get rtsOnlySignalHeader(){return this.isRTSOnlyRoom()?{functionType:ht.C2RTM}:void 0}updateUserPubInfo(I){const g=this._userStreamMap.get(I.clientId)||{};I.screen?(g.screenAudio=I.attributes.audiostream,g.screenVideo=I.attributes.videostream):(g.audio=I.attributes.audiostream,g.video=I.attributes.videostream),this._userStreamMap.set(I.clientId,g)}getUserPubInfo(I){return p({audio:!1,video:!1,screenAudio:!1,screenVideo:!1},this._userStreamMap.get(I)||{})}resetUserPubInfo(){this._userStreamMap.clear()}get tokenPublishPrivilegeExpired(){return this._tokenPublishPrivilegeExpired}get tokenSubscribePrivilegeExpired(){return this._tokenSubscribePrivilegeExpired}setTokenPublishPrivilegeExpired(I){this._tokenPublishPrivilegeExpired=I}setTokenSubscribePrivilegeExpired(I){this._tokenSubscribePrivilegeExpired=I}getStayRoomDuration(){return this.startJoinTimestamp?dA()-this.startJoinTimestamp:0}getStreamQueueLock(I){let g=this._streamQueueMap.get(I);return g||(g=new Wi(I),this._streamQueueMap.set(I,g)),g}report(I,g,C){var Q;(Q=this._monitor)===null||Q===void 0||Q.report(I,p({room_id:this.roomId,user_id:this.userId,rtc_session_id:this.sessionId,rtc_vid:this.rtcVid},g),C)}}const dr=(A,I,g)=>{g.info(A,"userId: %o, subAudio: %o, subVideo: %o, audioMid: %o, videoMid: %o, sequenceId: %o",I.userId,I.subAudio,I.subVideo,I.audioMid,I.videoMid,I.sequenceId)};function LA(A,I,g){const C=g.value;return g.value=async function(){if(!this._ctx.signalingManager.isConnected())throw new K(S.NOT_CONNECTED_YET,"error in ".concat(I,": try again after connect"));try{await(this._roomConf||this.config).checkJoinRoom()}catch{throw new K(S.JOIN_ROOM_FAILED,"error in ".concat(I,": try again after joined"))}for(var Q=arguments.length,i=new Array(Q),B=0;B{for(var Q,i=hbA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&dbA(I,g,i),i};class hr extends KQ{constructor(I,g){super(),l(this,"_forwardDstRooms",new Map),l(this,"forwardStreamState","stopped"),this._ctx=I,this._roomConf=g}async startForwardStream2Rooms(I){if(this.forwardStreamState==="running"||this.forwardStreamState==="paused")throw new K(S.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke startForwardStreamToRooms in state: ".concat(this.forwardStreamState));const g=await this._sendForwardStreamSignaling("start",this._roomConf.roomId,I);this._updateDstRooms(I,g);const C=this._transformForwardStreamResult(g);return this.forwardStreamState="running",C}async updateForwardStream2Rooms(I){if(this.forwardStreamState==="stopped")throw new K(S.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke updateForwardStreamToRooms in state: ".concat(this.forwardStreamState));let g=this._mockForwardStreamResult(I);return this.forwardStreamState==="running"&&(g=await this._sendForwardStreamSignaling("update",this._roomConf.roomId,I)),this._updateDstRooms(I,g),this._transformForwardStreamResult(g)}async stopForwardStream2Rooms(){if(this.forwardStreamState==="stopped")throw new K(S.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke stopForwardStreamToRooms in state: ".concat(this.forwardStreamState));let I=this._mockForwardStreamResult([]);if(this.forwardStreamState==="running"&&(I=await this._sendForwardStreamSignaling("stop",this._roomConf.roomId)),this._updateDstRooms([],I),[...this._forwardDstRooms.keys()].length>0)throw new K(S.UNEXPECTED_ERROR,"stopforwardstream failed: ".concat(JSON.stringify(I)));const g=this._transformForwardStreamResult(I);return this.forwardStreamState="stopped",g}async pauseForwardStream2AllRooms(){if(this.forwardStreamState==="paused"||this.forwardStreamState==="stopped")throw new K(S.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke pauseForwardStreamToAllRooms in state: ".concat(this.forwardStreamState));const I=await this._sendForwardStreamSignaling("stop",this._roomConf.roomId),g=this._transformForwardStreamResult(I);return this.forwardStreamState="paused",g}async resumeForwardStream2AllRooms(){if(!(arguments.length>0&&arguments[0]!==void 0&&arguments[0])&&["running","stopped"].includes(this.forwardStreamState))throw new K(S.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke resumeForwardStreamToAllRooms in state: ".concat(this.forwardStreamState));const I=this._getDstRooms(),g=await this._sendForwardStreamSignaling("start",this._roomConf.roomId,I);this._updateDstRooms(I,g);const C=this._transformForwardStreamResult(g);return this.forwardStreamState="running",C}resumeFromReconnect(){this.forwardStreamState==="running"&&this.resumeForwardStream2AllRooms(!0).then(I=>{I.forEach(g=>{g.state===at.FORWARD_STREAM_STATE_FAILURE&&this.safeEmit(eA.ON_FORWARD_STREAM_ERROR,g)})})}onForwardDstRoomUserKick(I){const g=[{dstRoomId:I.dstRoomId,code:200,forwardStreamType:"stop"}];this._updateDstRooms([],g),this.safeEmit(eA.ON_FORWARD_STREAM_ERROR,{roomId:I.dstRoomId,state:at.FORWARD_STREAM_STATE_FAILURE,error:nr.FORWARD_STREAM_ERROR_REMOTE_KICKED})}destoy(){super.removeAllListeners(),this._forwardDstRooms.clear(),this.forwardStreamState="stopped"}_mockForwardStreamResult(I){const g=[];return this._forwardDstRooms.forEach((C,Q)=>{g.push({dstRoomId:Q,forwardStreamType:"stop",code:200})}),I.forEach(C=>{const Q=g.findIndex(i=>i.dstRoomId===C.roomId);Q===-1?g.push({dstRoomId:C.roomId,forwardStreamType:"start",code:C.roomId===this._roomConf.roomId?400:200}):g[Q].forwardStreamType="update"}),g}_transformForwardStreamResult(I){I||(I=[]);const g=[];for(const{dstRoomId:C,code:Q}of I){const i={roomId:C,state:at.FORWARD_STREAM_STATE_SUCCESS,error:nr.FORWARD_STREAM_ERROR_OK};Q===200||(Q===400?(i.state=at.FORWARD_STREAM_STATE_FAILURE,i.error=nr.FORWARD_STREAM_ERROR_REMOTE_KICKED):Q>=700&&Q<800?(i.state=at.FORWARD_STREAM_STATE_FAILURE,i.error=nr.FORWARD_STREAM_ERROR_INVALID_TOKEN):(i.state=at.FORWARD_STREAM_STATE_FAILURE,i.error=nr.FORWARD_STREAM_ERROR_RESPONSE)),g.push(i)}return g}_updateDstRooms(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];g.length===0&&this._forwardDstRooms.clear(),g.forEach(C=>{let{dstRoomId:Q,code:i,forwardStreamType:B}=C;if(i===200)if(B==="stop")this._forwardDstRooms.delete(Q);else{var E;const e=I.find(o=>o.roomId===Q);if(!e&&!this._forwardDstRooms.has(Q))throw new K(S.UNEXPECTED_ERROR,"unknow roomid ".concat(Q," in signaling return"));let t=(E=this._forwardDstRooms.get(Q))!==null&&E!==void 0?E:{token:void 0};t=Object.assign(t,e),this._forwardDstRooms.set(Q,t)}else this._forwardDstRooms.has(Q)&&this._forwardDstRooms.delete(Q)})}_getDstRooms(){const I=[];return this._forwardDstRooms.forEach((g,C)=>{I.push({roomId:C,token:g.token})}),I}async _sendForwardStreamSignaling(I,g,C){const Q="".concat(zn());if(I!=="stop"){const o=C.map(r=>r.roomId);this._roomConf.report("rtc_forward_stream",{type:"begin",dst_rooms:"{ ".concat(o.map(r=>'"'.concat(r,'"')).join(",")," }"),event_session_id:Q})}const i={forwardStreamType:I,roomId:g};(I==="start"||I==="update")&&(i.dstRoomInfos=C==null?void 0:C.map(o=>({dstRoomId:o.roomId,dstToken:Pg.token2auth(this._ctx.appId,o.roomId,this._roomConf.userId,o.token)})));const B=await this._ctx.signalingManager.sendSignaling("forwardStream",i),E=[];if((B==null?void 0:B.code)!==200)throw I!=="stop"&&(C==null||C.forEach(o=>{E.push({dst_room_id:o.roomId,result:"server error ".concat(B==null?void 0:B.code)})}),this._roomConf.report("rtc_forward_stream",{type:"end",dst_rooms:JSON.stringify(E),event_session_id:Q})),new K(S.UNEXPECTED_ERROR,"server side internal error, error code: ".concat(B));var e,t;return I!=="stop"&&((e=B.forwardStreamResults)===null||e===void 0||e.forEach(o=>{E.push({dst_room_id:o.dstRoomId,result:"dst room lost"})}),(t=B.forwardStreamResults)===null||t===void 0||t.forEach(o=>{const r=E.find(s=>s.dst_room_id===o.dstRoomId);r&&(o.code===200?o.forwardStreamType==="update"?r.result="update":r.result="success":r.result="server error ".concat(o.code))}),this._roomConf.report("rtc_forward_stream",{type:"end",dst_rooms:JSON.stringify(E),event_session_id:Q})),B.forwardStreamResults}}_v([LA],hr.prototype,"startForwardStream2Rooms"),_v([LA],hr.prototype,"updateForwardStream2Rooms"),_v([LA],hr.prototype,"stopForwardStream2Rooms"),_v([LA],hr.prototype,"pauseForwardStream2AllRooms"),_v([LA],hr.prototype,"resumeForwardStream2AllRooms");const jo=[{maxLayers:3,totalPixels:2073600},{maxLayers:3,totalPixels:921600},{maxLayers:3,totalPixels:518400},{maxLayers:2,totalPixels:230400},{maxLayers:2,totalPixels:129600},{maxLayers:1,totalPixels:57600},{maxLayers:1,totalPixels:0}],ubA=(A,I)=>{const g=jo.findIndex(i=>A*I>=i.totalPixels),C=A*I;if(g===0)return jo[g].maxLayers;const Q=jo[g-1].totalPixels;return(Q-C)/(Q-jo[g].totalPixels)<.1?jo[g-1].maxLayers:jo[g].maxLayers};function tN(A,I,g){var C;const Q=A?(C=g.find(i=>i.rid===A))===null||C===void 0?void 0:C.maxkbps:g[0].maxkbps;return Math.min(Q??Number.POSITIVE_INFINITY,I)}const oN=(A,I)=>{var g,C,Q,i;let B=0,E=-1;const{videoDescriptions:e,subVideoDescriptions:t}=(I==null?void 0:I.attributes)||{},o=Array.isArray(t)?t:e;let r=-1;const s=A.width*A.height;for(let c=0;c<(o==null?void 0:o.length);c++){var v,n;if(s>=((v=o[c])===null||v===void 0?void 0:v.width)*((n=o[c])===null||n===void 0?void 0:n.height)){r=c;break}}let a=o[0];if(r===-1)r=o.length-1,a=o[r];else if(r!==0){const c=o[r-1].width*o[r-1].height,P=(c-s)/(c-o[r].width*o[r].height);a=P<.1?o[r-1]:o[r],r=P<.1?r-1:r}return E=(g=(C=a)===null||C===void 0?void 0:C.sub_index)!==null&&g!==void 0?g:-1,B=(Q=(i=a)===null||i===void 0?void 0:i.video_index)!==null&&Q!==void 0?Q:r,{spatialLayer:B,spatialSubLayer:E}},Xo=A=>({width:QI(A.width),height:QI(A.height),frameRate:QI(A.frameRate),maxKbps:A.maxKbps}),Ho=A=>{let{width:I,height:g}=A;return QI(I)*QI(g)},rN=(A,I)=>{const g=QI(A.width)/QI(I.width)||1,C=QI(A.height)/QI(I.height)||1;Math.floor(g)===g&&Math.floor(C)===C||Ae("setLocalSimulcastMode: The resolution setting needs to be an integer multiple")};class DbA{constructor(I){l(this,"_roomId",void 0),l(this,"_constraints",{}),l(this,"_profile",void 0),l(this,"_customMaxBitrate",0),this._appId=I}setRoomId(I){this._roomId=I}setAudioProfile(I){this._profile=I,this._customMaxBitrate=0}get customMaxBitrate(){return this._customMaxBitrate}setCustomMaxBitrate(I){const{audio_encode:g}=oI.getEngineWebConfig(this._appId,this._roomId||"");this._customMaxBitrate=g!=null&&g.bitrate?0:1e3*I}getOpusConfigStr(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const{audio_encode:g}=oI.getEngineWebConfig(this._appId,this._roomId||""),{sampleRate:C,channelCount:Q}=this.getConstraints(),i=typeof C=="number"?C:C==null?void 0:C.exact,B=typeof Q=="number"?Q:Q==null?void 0:Q.exact,E={};I.split(";").forEach(r=>{const[s,v]=r.split("=");s&&v&&(E[s]=v)});const e=(g==null?void 0:g.bitrate)||this._customMaxBitrate||this._getConfigByAudioProfile().bitrate;e&&(E.maxaveragebitrate=e);const t=(g==null?void 0:g.enc_sample_rate)||i;t&&(E["sprop-maxcapturerate"]=t);const o=(g==null?void 0:g.playback_rate)||i;return o&&(E.maxplaybackrate=o),(B&&B>1||g!=null&&g.stereo)&&(E["sprop-stereo"]=1,E.stereo=1),g!=null&&g.dtx&&(E.usedtx=1),Object.keys(E).map(r=>"".concat(r,"=").concat(E[r])).join(";")}updateConstraints(I){this._constraints=p(p({},this._constraints),I)}getConstraints(){const I=p({},this._constraints),{audio_capture:g}=oI.getEngineWebConfig(this._appId,this._roomId||"");DB(g==null?void 0:g.sample_rate)||(I.sampleRate=g.sample_rate),DB(g==null?void 0:g.channel)||(I.channelCount=g.channel),DB(g==null?void 0:g.agc)||(I.autoGainControl=g.agc),DB(g==null?void 0:g.ans)||(I.noiseSuppression=g.ans),DB(g==null?void 0:g.aec)||(I.echoCancellation=g.aec);const{sampleRate:C,channel:Q}=this._getConfigByAudioProfile();return DB(I.sampleRate)&&!DB(C)&&(I.sampleRate=C),DB(I.channelCount)&&!DB(Q)&&(I.channelCount=Q),I}_getConfigByAudioProfile(){const I={};switch(this._profile){case vr.fluent:I.sampleRate=16e3,I.bitrate=24e3;break;case vr.standard:I.sampleRate=48e3,I.bitrate=48e3;break;case vr.hd:I.sampleRate=48e3,I.bitrate=128e3,I.channel=2;break;case vr.standardStereo:I.sampleRate=48e3,I.bitrate=8e4,I.channel=2;break;case vr.hdMono:I.sampleRate=48e3,I.bitrate=128e3}return I}}const bbA={start_interval:100,multiplier:2,max_interval:3e4};class WX{constructor(){l(this,"_times",0),l(this,"_config",bbA),l(this,"initTs",dA())}getRetryDelay(){return Math.min(this._config.max_interval,Math.pow(this._config.multiplier,this._times++)*this._config.start_interval)}setConfig(I){this._config=I}reset(){this._times=0}}class ybA{constructor(I){l(this,"_logger",void 0),l(this,"_monitor",void 0),this._ctx=I;const g=oI.getServerConfig(this._ctx.appId);this._logger=new SA("DecisionConfig",1,this._ctx.id),this._monitor=bI(this._ctx.id),setTimeout(()=>{this.updateConfig(g,!0)},0)}updateConfig(I,g){!g&&oI.setServerConfig(this._ctx.appId,I),I.rts_report&&Ig.setConfig(I.rts_report),this._ctx.joinRoomConfig.setServerConfig(I.web_join_room),this._setRtsConfig(I.rts_config),this._setRtsQpsConfig(I.rts_qps),this._preConnect(I),this._getServerConfigExecutor(I)}_setRtsConfig(I){I!=null&&I.rts_mode&&I.rts_mode!==this._ctx.rtsMode&&(this._logger.print("_setRtsConfig","setRtsMode to %o",I.rts_mode),this._ctx.setRTSMode(I.rts_mode===Zt.NORMAL_MODE?Zt.NORMAL_MODE:Zt.LIMIT_MODE))}_setRtsQpsConfig(I){this._logger.print("_setRtsQpsConfig",JSON.stringify(I)),this._ctx.setRtsQpsConf(I),Object.keys(this._ctx.rtsLimiter).length>0&&rI(this._ctx.id,"setRtsQpsConf",JSON.stringify(I))}_getServerConfigExecutor(I){var g,C,Q,i,B,E,e,t;const{upload_console_length_cut:o,upload_report_limit:r}=(I==null?void 0:I.web_rtc_config)||{};if(xi.setParameter("UPLOAD_CONSOLE_ON",!(I==null||(g=I.web_rtc_config)===null||g===void 0||!g.upload_console_on)),o&&xi.setParameter("UPLOAD_CONSOLE_LENGTH_CUT",o),r&&xi.setParameter("UPLOAD_REPORT_LIMIT",r),xi.setParameter("ENABLE_REPORT_IDB_BUFFER",!(I==null||(C=I.web_rtc_config)===null||C===void 0||!C.enable_report_idb_buffer)),(I==null||(Q=I.web_rtc_config)===null||Q===void 0?void 0:Q.sdk_codec_negotiation)===!1&&DQ("SDK_CODEC_NEGOTIATION",!1),(I==null||(i=I.web_rtc_config)===null||i===void 0?void 0:i.ainr_enable_dump)!==void 0&&DQ("AINR_ENABLE_DUMP",I.web_rtc_config.ainr_enable_dump),(I==null||(B=I.web_rtc_config)===null||B===void 0?void 0:B.ainr_overload_threshold)!==void 0&&DQ("AINR_OVERLOAD_THRESHOLD",I.web_rtc_config.ainr_overload_threshold),(I==null||(E=I.web_rtc_config)===null||E===void 0?void 0:E.ainr_urls)!==void 0)try{DQ("AINR_URLS",JSON.parse(I.web_rtc_config.ainr_urls))}catch(s){this._logger.warn("_getServerConfigExecutor","parse AINR_URLS error %o",s)}(I==null||(e=I.web_rtc_config)===null||e===void 0?void 0:e.ainr_cache_time)!==void 0&&DQ("AINR_CACHE_TIME",I.web_rtc_config.ainr_cache_time),(I==null||(t=I.web_rtc_config)===null||t===void 0?void 0:t.ainr_dump_time)!==void 0&&DQ("AINR_DUMP_TIME",I.web_rtc_config.ainr_dump_time)}_preConnect(I){var g;let C=yA("PRE_ICE");var Q;typeof(I==null||(g=I.web_rtc_config)===null||g===void 0?void 0:g.pre_ice)=="boolean"&&(C=I.web_rtc_config.pre_ice),C&&(this._logger.print("preConnect","start pre ice connection."),this._ctx.signalingManager.connect(),(Q=this._monitor)===null||Q===void 0||Q.set({pre_connection:!0}),this._ctx.isPreConnection=!0)}}class mbA{constructor(I){l(this,"_reconnectTimer",void 0),l(this,"_retryFunc",void 0),l(this,"_abortControllers",[]),l(this,"_monitor",void 0),l(this,"logger",void 0),l(this,"_groupConfigId",cE()),l(this,"_retryLimiter",new WX),l(this,"_timer",void 0),l(this,"_destroyed",!1),l(this,"_onlineListener",()=>{this._reconnectTimer&&this._retryFunc&&(clearTimeout(this._reconnectTimer),this._retryFunc())}),l(this,"_decisionConfig",void 0),this._ctx=I,this._monitor=bI(I.id),this.logger=new SA("ICERequest",4,I.id),this._decisionConfig=new ybA(I),window.addEventListener("online",this._onlineListener)}async getICENode(I){let g;this.logger.info("getICENode","invoke");try{if(g=await this._getAccessWithRetry(I),g.length===0)throw new Error("server return empty nodes.")}catch(C){throw this._reportRtcInvokeStatus("es.join.getNodeFailed",C),new K(S.ICE_SERVER_WRONG,"get ICE config failed: ".concat(C.message),C)}return this.logger.success("getICENode","success"),this._reportRtcInvokeStatus("es.join.getNodeSuccess",g),g}_getAccessWithRetry(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g!==0&&this.logger.info("_getAccessWithRetry()","invoke feedbackInfo: %o, 201count: %o",I,g),new Promise((C,Q)=>{this._getAccessNode(I).then(i=>{this._retryLimiter.reset(),C(i)}).catch(i=>{if(this._destroyed)return;if(Array.isArray(i)&&i.length>0){if(i.findIndex(E=>400<=E.code&&E.code<500)>-1)return this._retryLimiter.reset(),Q(new Error("HTTP request failed(4xx)"));if(i.every(E=>{var e;return E.code===201||((e=E.error)===null||e===void 0?void 0:e.code)===201})&&g++,g===3)return this._retryLimiter.reset(),Q(new Error("HTTP request failed(201)"))}const B=this._retryLimiter.getRetryDelay();this.logger.warn("_getAccessWithRetry()","_getAccessWithRetry error, will retry after ".concat(B,"ms"),i),this._retryFunc=()=>{this._getAccessWithRetry(I,g).then(C).catch(Q)},this._reconnectTimer=self.setTimeout(this._retryFunc,B)})})}async _getAccessNode(I){return new Promise((g,C)=>{const Q=oI.getAccessNode(this._ctx.appId);if(Q){const i=(Array.isArray(Q)?Q:[Q]).map(B=>(B.cache_status=!0,B));this.logger.info("getAccessNode","use cache node."),g(i),this._timer=setTimeout(()=>{this._getAccessNodeFromServer(I),this._reportRtcInvokeStatus("es.R.node.cache",Q),delete this._timer},0)}else this._getAccessNodeFromServer(I).then(g).catch(C)})}async _getAccessNodeFromServer(I){const{urls:g,needFallback:C}=this._getAccessUrls();return this.getICEConfigFromServer(g,I).then(Q=>{const{nodes:i,decisionConfig:B}=Q;return!this._ctx.useCloudProxy&&(i==null?void 0:i.length)>0&&oI.setAccessNode(this._ctx.appId,i,Q.ttl||11200),B&&this._decisionConfig.updateConfig(B,!1),Q.dispatchDomains&&!this._ctx.useCloudProxy&&oI.setAccessUrls(Q.dispatchDomains),i}).catch(Q=>{if(C)return this._reportRtcInvokeStatus("es.R.req.fallback",""),oI.clearAccessUrls(),this._getAccessNodeFromServer(I);throw Q})}_getAccessUrls(){let I=oI.getAccessUrls()||[],g=!0;return I.length!==0?this._reportRtcInvokeStatus("es.R.req.cache.urls",I):(g=!1,I=fA.ICE_CONFIG_REQUEST_URLS,I.length!==0?this._reportRtcInvokeStatus("es.R.req.external.urls",I):(I=fA.ICE_CONFIG_REQUEST_URLS_INTERNAL,this._reportRtcInvokeStatus("es.R.req.internal.urls",I))),{urls:I,needFallback:g}}async getICEConfigFromServer(I,g){const C={appID:this._ctx.appId,deviceID:oI.getDeviceId(),os:"web",sdkVersion:fA.VERSION,isOversea:fA.OVERSEA,expectedAddr:yA("EXPECTED_ADDR"),productPlatform:"VolcEngine",enableCloudProxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC,decisionKeys:["rts_report","web_join_room","web_rtc_config","rts_qps","rts_config"]};var Q;g&&(C.feedbackInfo=g,((Q=g[0])===null||Q===void 0||(Q=Q.feedbackReason)===null||Q===void 0?void 0:Q.type)!=="ICE_FAILED"&&delete C.expectedAddr),yA("AREA_CODE")==="AREA_CODE_US_OPCO"&&(C.mediaArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}]),C.accessArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}]));const i=I.map(B=>this._httpRequest(B,C));return t0A(i)}async _httpRequest(I,g){var C;const Q=cE();g.connectSessionID=Q;const i=Date.now();(C=this._monitor)===null||C===void 0||C.report("rtc_get_access",{error_code:0,message:JSON.stringify(g),elapse:0,type:"request",host:I,config_id:Q,group_config_id:this._groupConfigId});const B=new AbortController;let E;this._abortControllers.push(B);try{var e;try{E=await fetch(I,{method:"POST",headers:{"Content-Type":"application/json"},mode:"cors",body:JSON.stringify(g),signal:B.signal})}catch(s){var t;throw CvA(fetch)||(t=this._monitor)===null||t===void 0||t.report("rtc_error",{error_code:iQ.Fetch_MODIFY,message:"get access failed, possibly due to modifying the browser's Fetch API."},{origin_error:s}),s}if(this._abortControllers=this._abortControllers.filter(s=>s!==B),E.status!==200)throw{message:E.statusText,code:E.status};const r=await E.json();if(r.code!==200)throw r;return(e=this._monitor)===null||e===void 0||e.report("rtc_get_access",{error_code:200,message:JSON.stringify(r),elapse:Date.now()-i,type:"response",host:I,config_id:Q,group_config_id:this._groupConfigId}),r}catch(r){var o;throw(o=this._monitor)===null||o===void 0||o.report("rtc_get_access",{error_code:Number((r==null?void 0:r.code)||(r==null?void 0:r.server_code)),message:r==null?void 0:r.message,elapse:Date.now()-i,type:"response",host:I,config_id:Q,group_config_id:this._groupConfigId},{error:JSON.stringify(r)}),r}}destroy(){this._destroyed=!0,window.removeEventListener("online",this._onlineListener),this._abortControllers.forEach(I=>I.abort("engine destroy")),this._reconnectTimer&&(window.clearTimeout(this._reconnectTimer),delete this._reconnectTimer),this._timer&&(window.clearTimeout(this._timer),delete this._timer)}_reportRtcInvokeStatus(I,g){var C;(C=this._monitor)===null||C===void 0||C.report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:0,stream_id:"",elapse:0,group_config_id:this._groupConfigId})}}var wA={},JX={},VX={exports:{}},sN=VX.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(A){return A.encoding?"rtpmap:%d %s/%s/%s":A.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(A){return A.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(A){return A.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(A){return"extmap:%d"+(A.direction?"/%s":"%v")+(A["encrypt-uri"]?" %s":"%v")+" %s"+(A.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(A){return A.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(A){var I="candidate:%s %d %s %d %s %d typ %s";return I+=A.raddr!=null?" raddr %s rport %d":"%v%v",I+=A.tcptype!=null?" tcptype %s":"%v",A.generation!=null&&(I+=" generation %d"),I+=A["network-id"]!=null?" network-id %d":"%v",I+=A["network-cost"]!=null?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(A){var I="ssrc:%d";return A.attribute!=null&&(I+=" %s",A.value!=null&&(I+=":%s")),I}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(A){return A.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(A){return A.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(A){return"imageattr:%s %s %s"+(A.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(A){return"simulcast:%s %s"+(A.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(A){return"ts-refclk:%s"+(A.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(A){var I="mediaclk:";return I+=A.id!=null?"id=%s %s":"%v%s",I+=A.mediaClockValue!=null?"=%s":"",I+=A.rateNumerator!=null?" rate=%s":"",I+=A.rateDenominator!=null?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(sN).forEach(function(A){sN[A].forEach(function(I){I.reg||(I.reg=/(.*)/),I.format||(I.format="%s")})});var kS=VX.exports;(function(A){var I=function(B){return String(Number(B))===B?Number(B):B},g=function(B,E,e){var t=B.name&&B.names;B.push&&!E[B.push]?E[B.push]=[]:t&&!E[B.name]&&(E[B.name]={});var o=B.push?{}:t?E[B.name]:E;(function(r,s,v,n){if(n&&!v)s[n]=I(r[1]);else for(var a=0;a1&&(B[e[0]]=void 0),B};A.parseParams=function(B){return B.split(/;\s?/).reduce(i,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(B){return B.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(B){for(var E=[],e=B.split(" ").map(I),t=0;t=C)return Q;var i=g[I];switch(I+=1,Q){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},$v=function(A,I,g){var C=[A+"="+(I.format instanceof Function?I.format(I.push?g:g[I.name]):I.format)];if(I.names)for(var Q=0;QMath.floor(Math.random()*LG+1e4);function S0(A){return A>LG-18?(FbA.warn("generateAllSsrc","reset start id",A),S0(A=A-LG+1e4+18)):{audio:A,audioFec:A+1,audioRtx:A+2,video:A+3,videoFec:A+4,videoRtx:A+5,next:A+18}}const T0=function(A,I,g){return[{id:g,attribute:"cname",value:arguments.length>3&&arguments[3]!==void 0?arguments[3]:UbA},{id:g,attribute:"msid",value:"".concat(A," ").concat(A,"-").concat(I)},{id:g,attribute:"mslabel",value:"".concat(A)},{id:g,attribute:"label",value:"".concat(A,"-").concat(I)}]},SG=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const C=I.video,Q=I.videoRtx,i=I.videoFec,B=[C,Q],{cname:E,flexfec:e}=g;e&&B.push(i);const t=B.reduce((r,s)=>r.concat(T0(A,"video",s,E)),[]),o=[{semantics:"FID",ssrcs:"".concat(C," ").concat(Q)}];return e&&o.push({semantics:"FEC-FR",ssrcs:"".concat(C," ").concat(i)}),{ssrcs:t,ssrcGroups:o}};function TG(A){return A.direction="inactive",A.port=0,delete A.ext,delete A.ssrcs,delete A.ssrcGroups,delete A.simulcast,delete A.simulcast_03,delete A.rids,delete A.extmapAllowMixed,delete A.msid,delete A.bundleOnly,A}const p0=function(A,I,g){let C=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3];const Q=p(p({},A),{},{media:[]});return C&&(Q.invalid=[{value:"realx-exts:rscp"}]),I&&Q.media.push(I),g&&Q.media.push(g),delete Q.groups,delete Q.msidSemantic,wA.write(Q)};function YbA(A){const I={},{publicIPs:g,certFingerprint:C,iceParams:Q,iceConfig:i}=A;return I.fingerprint={type:"sha-256",hash:C},I.icePwd=Q.serverIcePwd,I.iceUfrag=ZbA(Q.serverIceUfrag),I.candidates=NbA(g,i),I.setup="active",I.iceOptions="renomination",I}function NbA(A,I){if(!Array.isArray(A))return[];let g=0;const C=2130706431,Q=[];return A.forEach(i=>{const B={component:1,ip:i.ip,type:"host",generation:i.generation};i.udpPorts&&!I.tcpOnly&&i.udpPorts.forEach(E=>{Q.push(p(p({},B),{},{foundation:g++,transport:"udp",port:E,priority:C}))}),i.tcpPorts&&i.tcpPorts.forEach(E=>{Q.push(p(p({},B),{},{foundation:g++,transport:"tcp",port:E,tcptype:"passive",priority:2130705431}))})}),Q}const ZbA=A=>{const I=new TextEncoder().encode("PREC"),g=a0A(A),C=new Uint8Array(4);crypto.getRandomValues(C);const Q=new Uint8Array(2);return Q[0]=0,Q[1]=1,n0A(ij(Uint8Array,I,g,C,Q))},aN=(A,I)=>{if(!Array.isArray(A.fmtp)||!Array.isArray(A.rtp))return;for(let C=0;Cg.push(C.payload)),A.payloads=g.join(" ")},F0=(A,I)=>{let g=0;if(!Array.isArray(A.fmtp)||!Array.isArray(A.rtp))return;for(const Q of A.fmtp)if(Q.config.includes("level-asymmetry-allowed=1")&&Q.config.includes("packetization-mode=1")&&Q.config.includes("profile-level-id=42e0")){g=Q.payload;break}for(let Q=0;QC.push(Q.payload)),A.payloads=C.join(" ")},KbA=A=>{const I=wA.parse(A);return I.media=I.media.map(g=>g.type==="audio"?JbA(g,I):WbA(g,["H264","VP8","ByteVC1"],I)),wA.write(I)},pB=A=>{A.media.forEach(I=>{I.type!=="audio"&&I.type!=="video"||I.rtp.forEach(g=>{I.rtcpFb||(I.rtcpFb=[]),I.rtcpFb.find(C=>C.payload===g.payload&&C.type==="rrtr")||I.rtcpFb.push({payload:g.payload,type:"rrtr"})})})},WbA=function(A,I,g){let C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{rrtr:!1};const Q={},i={};let B=-1;const E=[];return Array.isArray(A.fmtp)&&A.fmtp.forEach(e=>{let{payload:t,config:o}=e;if(o.startsWith("apt=")){const r=o.slice(4);Q[t]=r}else o.includes("42e0")&&o.includes("packetization-mode=1")&&(B=t)}),Array.isArray(A.rtp)&&(A.rtp=A.rtp.filter(e=>{const t=e.codec,o=e.payload;let r;switch(t){case"H264":return r=!1,I.map(s=>{s==="H264"&&o===B&&(i[o]=o,E.push(o),r=!0)}),r;case"rtx":return!!i[Q[o]]&&(i[o]=o,!0);case"red":case"ulpfec":case"flexfec-03":return i[o]=o,!0;default:return r=!1,I.map(s=>{s===t&&(i[o]=o,E.push(o),r=!0)}),r}})),Array.isArray(A.fmtp)&&(A.fmtp=A.fmtp.filter(e=>i[e.payload])),Array.isArray(A.rtcpFb)?A.rtcpFb=A.rtcpFb.filter(e=>i[e.payload]):A.rtcpFb=[],C.rrtr&&E.forEach(e=>{var t;(t=A.rtcpFb)===null||t===void 0||t.push({payload:e,type:"rrtr"})}),zX(A,g),Array.isArray(A.ext)&&(A.ext=A.ext.filter(e=>{if(e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/video-content-type"&&e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/video-timing"&&e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/color-space")return e})),typeof A.payloads=="string"&&(A.payloads=A.payloads.split(" ").filter(e=>i[e]).join(" ")),A},JbA=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{rrtr:!1};const C={};if(Array.isArray(A.rtp)&&(A.rtp=A.rtp.filter(Q=>{const i=Q.codec,B=Q.payload;return(i==="opus"||i==="red")&&(C[B]=B,!0)})),Array.isArray(A.rtcpFb)||(A.rtcpFb=[]),g.rrtr&&Object.keys(C).forEach(Q=>{var i;(i=A.rtcpFb)===null||i===void 0||i.push({payload:Number(Q),type:"rrtr"})}),zX(A,I),typeof A.payloads=="string"){const Q=[];A.payloads.split(" ").forEach(i=>{C[i]&&Q.push(i)}),A.payloads=Q.join(" ")}return A},zX=(A,I)=>{A.iceOptions&&delete A.iceOptions,A.icePwd&&(I.icePwd=A.icePwd,delete A.icePwd),A.iceUfrag&&(I.iceUfrag=A.iceUfrag,delete A.iceUfrag),A.fingerprint&&(I.fingerprint=A.fingerprint,delete A.fingerprint)},MX=A=>fX(A,"H265","ByteVC1"),nN=A=>fX(A,"ByteVC1","H265"),fX=(A,I,g)=>{if(A.indexOf(I)===-1)return A;const C=wA.parse(A);return C.media=C.media.map(Q=>(Q.type==="video"&&(Q.rtp=Q.rtp.map(i=>(i.codec===I&&(i.codec=g),i))),Q)),wA.write(C)},VbA=lE(),cN={iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",encodedInsertableStreams:!!VbA||void 0};var jX=(A=>(A[A.DC_ERROR=0]="DC_ERROR",A[A.DC_CLOSE=1]="DC_CLOSE",A[A.ICE_FAILED=2]="ICE_FAILED",A[A.DESTROY=3]="DESTROY",A[A.TIMEOUT=4]="TIMEOUT",A))(jX||{});let zbA=0;class U0 extends KQ{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0&&arguments[2];super(),l(this,"uuid",(zbA++).toString()),l(this,"_peerConnectionId",""),l(this,"audioTrack4ff",void 0),l(this,"_pc",void 0),l(this,"_dc",void 0),l(this,"_iceNode",void 0),l(this,"_initSctpEvents",!1),l(this,"_monitor",void 0),l(this,"_offerIce",{}),l(this,"_answerIce",{}),l(this,"_offerSession",void 0),l(this,"_answerSession",void 0),l(this,"_offerMlines",[]),l(this,"_answerMlines",[]),l(this,"_connectReject",void 0),l(this,"_logger",void 0),l(this,"_destroyed",!1),l(this,"_reportTimer",void 0),l(this,"_clearPeerListeners",void 0),l(this,"_iceStartTs",0),l(this,"_icePreStepTs",0),this._ctx=I,this._groupConnectionId=g,this._isReconnect=C,this._monitor=bI(I.id),this._logger=new SA("PeerConnection_".concat(this.uuid),4,I.id),yA("DISABLE_ENCODED_TRANSFORM")&&(cN.encodedInsertableStreams=void 0),this._pc=new RTCPeerConnection(cN),this._pc.ontrack=Q=>{var i;const B=(i=Q.streams)===null||i===void 0||(i=i[0])===null||i===void 0?void 0:i.id;this._print("pc.ontrack","".concat(Q.track.kind," ").concat(Q.track.id," ").concat(B)),B==="ff-stream"&&(this.audioTrack4ff=Q.track),this.emit("ontrack",Q)},this._pc.onconnectionstatechange=()=>{this._print("onconnectionstatechange","".concat(this._pc.connectionState,". ice -> ").concat(this._pc.iceConnectionState)),this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"&&this._pc.connectionState!=="failed"||this.emit("disconnect",bQ.ICE_FAILED)},this._pc.oniceconnectionstatechange=()=>{const Q=this._pc.iceConnectionState;this._report("rtc_pre_ice_state",{message:Q,ice_state:Q.toUpperCase()}),this.emit("ice_state",Q)}}static checkSupported(){if(!RTCPeerConnection)throw new K(S.NOT_SUPPORTED,"missing RTCPeerConnection API.");["addTransceiver","createDataChannel","createOffer","setLocalDescription","setRemoteDescription"].forEach(I=>{var g;if((g=RTCPeerConnection)===null||g===void 0||(g=g.prototype)===null||g===void 0||!g[I])throw new K(S.NOT_SUPPORTED,"missing peer.".concat(I," API."))})}getOriginRTCPeerConnection(){return this._pc}getConnectionId(){return this._peerConnectionId}getGroupConnectionId(){return this._groupConnectionId}getIceConnectionState(){return this._pc.iceConnectionState}async createOfferSdp(){let{sdp:I}=await this._pc.createOffer();return I&&(I=MX(I)),I}async startIceConnect(I){this._print("connect","invoke. %o",I),this._iceNode=I;const g=this._pc.createDataChannel("signaling",{negotiated:!0,id:100});g.binaryType="arraybuffer",this._dc=g;const{offerIce:C,answerIce:Q}=this._genIceInfo(I);this._offerIce=C,this._answerIce=Q,this._peerConnectionId=Q.iceUfrag||"",this.reportRtcPreIce("ice_start"),KI&&(this._pc.addTransceiver("audio",{direction:"recvonly"}),this._pc.addTransceiver("video",{direction:"recvonly"}));const i=await this.createOfferSdp();if(!i)throw new K(S.NOT_SUPPORTED,"create offer sdp failed.");const B=wA.parse(i),[E]=B.media;if(this._offerIce.fingerprint=B.fingerprint||E.fingerprint,KI){B.media=B.media.map(t=>{const o=p(p({},t),this._offerIce);var r,s,v,n;return o.type==="video"&&(PG?(o.ext=(r=o.ext)===null||r===void 0?void 0:r.filter(a=>a.uri.indexOf("abs-send-time")===-1),o.rtcpFb=(s=o.rtcpFb)===null||s===void 0?void 0:s.filter(a=>a.type!=="goog-remb")):(o.rtcpFb=(v=o.rtcpFb)===null||v===void 0?void 0:v.filter(a=>a.type!=="transport-cc"),o.ext=(n=o.ext)===null||n===void 0?void 0:n.filter(a=>a.uri.indexOf("transport")===-1))),o}),eE&&pB(B);const e=p({},B);e.fingerprint=this._answerIce.fingerprint,e.media=e.media.map(t=>(delete(t=p(p({},t),this._answerIce)).bundleOnly,t.port=9,t.type==="application"?t.sctpmap={sctpmapNumber:5e3,app:"webrtc-datachannel",maxMessageSize:262144}:(t.type==="audio"&&(t.msid="ff-stream ff-stream-audio"),t.direction="sendonly"),t)),eE&&pB(e),await this.setLocalDescription(wA.write(B)),await this.setRemoteDescription(wA.write(e))}else{delete B.media,this._offerSession=p({},B),this._answerSession=p({},B),this._answerSession.fingerprint&&(this._answerSession.fingerprint=this._answerIce.fingerprint);const e=0;this._offerMlines=[p(p(p({},E),this._offerIce),{},{mid:"".concat(e)})],this._answerMlines=[p(p(p({},E),this._answerIce),{},{sctpmap:{sctpmapNumber:5e3,app:"webrtc-datachannel",maxMessageSize:262144},mid:"".concat(e)})],this.setDescription()}return this._reportTransportStats(),await new Promise((e,t)=>{this._connectReject=t;const o=setTimeout(()=>{var c;this.reportRtcPreIce("timeout"),(c=this._connectReject)===null||c===void 0||c.call(this,{code:4,message:"connect timeout"}),delete this._connectReject},8e3),r=()=>{this._print("connect","dataChannel open"),this._reportRtcInvokeStatus("es.dc.open",""),this.reportRtcPreIce("datachannel_opened"),clearTimeout(o),e(""),delete this._connectReject},s=c=>{var P,d,h,u;this._report("rtc_signaling_msg_error",{error_code:c==null||(P=c.error)===null||P===void 0?void 0:P.sdpLineNumber,message:c==null||(d=c.error)===null||d===void 0?void 0:d.errorDetail,reason:"invalid data"}),this._reportRtcInvokeStatus("es.dc.error",""),(h=this._connectReject)===null||h===void 0||h.call(this,{message:"dc.onerror, ".concat((u=c.error)===null||u===void 0?void 0:u.errorDetail),code:0}),this.emit("disconnect",bQ.DC_ERROR),delete this._connectReject,clearTimeout(o)},v=()=>{var c;this._reportRtcInvokeStatus("es.dc.close",""),(c=this._connectReject)===null||c===void 0||c.call(this,{message:"dc.onclose",code:1}),this.reportRtcPreIce("datachannel_closed"),this.emit("disconnect",bQ.DC_CLOSE),delete this._connectReject,clearTimeout(o)},n=()=>{this._pc.iceConnectionState==="connected"?this.reportRtcPreIce("ice_connected"):this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"||this.reportRtcPreIce("ice_failed")},a=()=>{var c;this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"&&this._pc.connectionState!=="failed"||((c=this._connectReject)===null||c===void 0||c.call(this,{message:"pc.connectionstatechange -> ".concat(this._pc.connectionState,", ice -> ").concat(this._pc.iceConnectionState),code:2}),delete this._connectReject,clearTimeout(o))};g.addEventListener("open",r),g.addEventListener("error",s),g.addEventListener("close",v),this._pc.addEventListener("iceconnectionstatechange",n),this._pc.addEventListener("connectionstatechange",a),this._clearPeerListeners=()=>{g.removeEventListener("open",r),g.removeEventListener("error",s),g.removeEventListener("close",v),this._pc.removeEventListener("iceconnectionstatechange",n),this._pc.removeEventListener("connectionstatechange",a)}}),this._print("connect","dataChannel establish success"),g}async setDescription(I){this._print("setDescription","invoke."),this._offerSession.media=this._offerMlines,this._answerSession.media=this._answerMlines;const g=[];this._offerMlines.forEach(Q=>{Q.direction!=="inactive"&&Q.mid&&g.push(Q.mid)}),this._offerSession.groups&&this._answerSession.groups&&(this._offerSession.groups[0].mids=g.join(" "),this._answerSession.groups[0].mids=g.join(" "));const C=dA();I&&this._report("rtc_begin_create_offer",{direction:I.streamUserId==="local"?"up":"down",stream_id:I.streamId,stream_user_id:I.streamUserId,pc_session_id:this._peerConnectionId,vendor_mode:0}),await this._pc.createOffer(),I&&this._report("rtc_create_offer",{error_code:0,direction:I.streamUserId==="local"?"up":"down",stream_id:I.streamId,stream_user_id:I.streamUserId,elapse:dA()-C}),await this.setLocalDescription(wA.write(this._offerSession),I),await this.setRemoteDescription(wA.write(this._answerSession),I)}async setLocalDescription(I,g){const C=dA();try{if(I=nN(I),await this._pc.setLocalDescription({type:"offer",sdp:I}),this._report("rtc_set_description",{error_code:0,message:I,is_local:"1",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:dA()-C},{type:"offer"}),!this._initSctpEvents){var Q;this._initSctpEvents=!0;const i=(Q=this._pc)===null||Q===void 0?void 0:Q.sctp;i&&(i.onstatechange=()=>{this._reportRtcInvokeStatus("sctp","sctp state change TO: ".concat(i.state))},i.transport&&(i.transport.onstatechange=()=>{var B;this._reportRtcInvokeStatus("dtls","dtls state change TO: ".concat(i==null||(B=i.transport)===null||B===void 0?void 0:B.state))}))}}catch(i){throw console.error("setLocal",i),this._report("rtc_set_description",{error_code:-1,message:i.message+I,is_local:"1",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:"",stream_user_id:"",elapse:dA()-C},{type:"offer"}),i}}async setRemoteDescription(I,g){const C=dA();try{I=nN(I),await this._pc.setRemoteDescription({type:"answer",sdp:I}),this._report("rtc_set_description",{error_code:0,message:I,is_local:"0",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:dA()-C},{type:"answer"})}catch(Q){throw console.error("setRemote",Q),this._report("rtc_set_description",{error_code:-1,message:Q.message+I,is_local:"0",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:dA()-C},{type:"answer"}),Q}}closeIceConnect(){var I,g,C,Q;(I=this._connectReject)===null||I===void 0||I.call(this,{code:3,message:"invoke destroy()"}),delete this._connectReject,(g=this._pc)===null||g===void 0||g.close(),(C=this._dc)===null||C===void 0||C.close(),delete this._dc,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,SDA(this._pc),(Q=this._clearPeerListeners)===null||Q===void 0||Q.call(this),delete this._clearPeerListeners}reportRtcPreIce(I){var g;const C=dA();I==="ice_start"&&(this._iceStartTs=C,this._icePreStepTs=C),this._report("rtc_pre_ice",{connect_event:I,message:I,elapse:C-this._icePreStepTs,total_elapse:C-this._iceStartTs,cache_status:!((g=this._iceNode)===null||g===void 0||!g.cache_status),is_reconnect:this._isReconnect}),this._icePreStepTs=C}getStatsWithLowFrequency(I,g,C){return LDA(this._pc,I,g,C)}destroy(){this._print("destroy",this._peerConnectionId),super.removeAllListeners(),this.closeIceConnect(),this._destroyed=!0,this._reportTimer&&(clearTimeout(this._reportTimer),delete this._reportTimer),delete this._pc}_genIceInfo(I){var g,C;return{offerIce:{iceUfrag:(g=I.iceParams)===null||g===void 0?void 0:g.clientIceUfrag,icePwd:(C=I.iceParams)===null||C===void 0?void 0:C.clientIcePwd,iceOptions:"renomination"},answerIce:YbA(I)}}async _reportTransportStats(){const I=await this.getStatsWithLowFrequency(),g={};var C;if(I.forEach(Q=>{Q.type==="transport"?(g.dtls_state=Q.dtlsState,g.bytes_received=Q.bytesReceived,g.bytes_sent=Q.bytesSent,g.ice_state=Q.iceState,g.packets_received=Q.packetsReceived,g.packets_sent=Q.packetsSent,g.selected_candidate_pair_changes=Q.selectedCandidatePairChanges):Q.type==="local-candidate"||Q.type==="remote-candidate"?g.candidates_info=[...g.candidates_info||[],{id:Q.id,is_remote:Q.isRemote,port:Q.port,protocol:Q.protocol,candidate_type:Q.candidateType,priority:Q.priority,network_type:Q.networkType,candidate_ip:Q.ip}]:Q.type==="candidate-pair"&&(g.candidatePairsInfo={},g.candidatePairsInfo.candidate_state=Q.state,g.candidatePairsInfo.writable_state=Q.writable,g.candidatePairsInfo.sent_ping_requests_total=Q.requestsSent,g.candidatePairsInfo.recv_ping_requests=Q.requestsReceived,g.candidatePairsInfo.sent_ping_responses=Q.responsesSent,g.candidatePairsInfo.recv_ping_responses=Q.responsesReceived,g.candidatePairsInfo.current_rtt=Q.currentRoundTripTime,g.candidatePairsInfo.total_rtt=Q.totalRoundTripTime,["localCandidateId","remoteCandidateId","bytesSent","bytesReceived","availableOutgoingBitrate","availableIncomingBitrate","bytesDiscardedOnSend","consentRequestsSent","packetsDiscardedOnSend","lastPacketReceivedTimestamp","lastPacketSentTimestamp"].forEach(i=>{Q[i]!==void 0&&(g.candidatePairsInfo[sbA(i)]=Q[i])}))}),Object.keys(g).length>0&&((C=this._monitor)===null||C===void 0||C.report("rtc_transport_statistics",g)),!this._destroyed){const Q=this._pc.iceConnectionState==="connected"&&this._pc.connectionState==="connected";this._reportTimer=setTimeout(()=>{this._reportTransportStats()},Q?5e3:1e3)}}_print(I){for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q({ip:E.ip,tcp:E.tcpPorts,udp:E.udpPorts})))||[])}))}_reportRtcInvokeStatus(I,g){this._report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:0,stream_id:"",elapse:0})}}var bQ=(A=>(A.ICE_FAILED="ice failed",A.DC_ERROR="datachannel onerror",A.DC_CLOSE="datachannel onclose",A.NODE_CHANGE="recv nodeChange signaling",A.NOTIFY_RECONNECT="recv notifyReconnect signaling",A.JOIN_TIMEOUT="joinRoom timeout, retry with tcp only",A))(bQ||{});class MbA extends KQ{constructor(I){super(),l(this,"id",void 0),l(this,"_monitor",void 0),l(this,"logger",void 0),l(this,"_getAccessManager",void 0),l(this,"_connectionPool",new Map),l(this,"_curConnection",void 0),l(this,"_hasReportBrowerWarning",!1),l(this,"_reconnectTimer",void 0),l(this,"_connecting",!1),l(this,"_isFirstTimeConnected",!0),l(this,"_feedbackNodes",[]),l(this,"_preIceStartTime",-1),l(this,"_tcpOnlyTimer",void 0),l(this,"_destroyed",!1),this._ctx=I,this.id=I.id,this._monitor=bI(this.id),this.logger=new SA("ConnectionManager",3,this.id),this.logger.info("constructor","invoke"),this._getAccessManager=new mbA(I)}startup(){this.logger.info("connect","invoke");try{U0.checkSupported()}catch(I){this.asyncEmit("disconnected",I)}this._connecting||(this._onConnectStart(),Promise.resolve().then(()=>this.emit("__onGetIceConfigHook")),this._getAccess())}async reconnectByNodeChange(I){var g,C,Q;this.logger.info("reconnectByNodeChange","invoke %o",I);const{nodes:i,reason:B}=I;(g=this._monitor)===null||g===void 0||g.report("rtc_node_change",{error_code:0,message:JSON.stringify(I),reason:JSON.stringify(B)}),oI.clearAccessNode(this._ctx.appId),(C=this._curConnection)===null||C===void 0||C.pc.reportRtcPreIce("node_change");const E=((Q=this._curConnection)===null||Q===void 0||(Q=Q.node.publicIPs[0])===null||Q===void 0?void 0:Q.ip)||"";this._closeCurrentConnection(),this._clearConnectionPool(),this._clearReconnectTimer(),this._onConnectStart("recv nodeChange signaling"),Array.isArray(i)&&i.length>0?this._startIceConnect(i):this._getAccess([{feedbackIP:E,feedbackReason:{type:"NODE_CHANGED",reason:B}}])}async reconnect(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this.logger.info("reconnect","invoke. ".concat(g?"ICE over TCP":"")),this._closeCurrentConnection(),this._clearConnectionPool(),this._clearReconnectTimer(),this._onConnectStart(I),this._getAccess(void 0,g)}shotdown(){this.logger.info("destroy","invoke"),this._destroyed=!0,this.asyncEmit("disconnected",new K(S.OPERATION_CANCEL,"destroy")).then(()=>{super.removeAllListeners()}),this._clearReconnectTimer(),this._clearConnectionPool(),this._getAccessManager.destroy(),this._closeCurrentConnection()}_getAccess(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this._getAccessManager.getICENode(I).then(C=>{this.emit("__onGetIceSuccessHook",C),this._startIceConnect(C,g)}).catch(C=>{this.asyncEmit("disconnected",C)}).finally(()=>{this._feedbackNodes=[]})}_startIceConnect(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(this._destroyed)return;this.logger.info("_startIceConnect","invoke");const C=UC();this._preIceStartTime=dA();const Q=this._ctx.joinRoomConfig.useTcpJoin,i=this._ctx.joinRoomConfig.useTcpJoinDelay,B=async E=>{g&&((E=Ts(E)).iceConfig.tcpOnly=!0);const e={node:E};try{const t=new U0(this._ctx,C,!this._isFirstTimeConnected);e.pc=t,this._connectionPool.set(t.uuid,e);const o=await t.startIceConnect(E),r=new lbA(this.id,o,{connection_id:t.getConnectionId(),group_connection_id:C});e.signaling=r,t.reportRtcPreIce("datachannel_send_ping"),await r.sendPingSignaling(),t.reportRtcPreIce("datachannel_recv_pong"),this._onConnectSuccess({node:E,pc:t,signaling:r,dc:o}),this.safeEmit("__onConnectSuccessHook",I.length)}catch(t){this._onConnectionFailed(e,t)}};this.emit("__onIceConnectStartHook"),I.forEach(B),Q&&!g&&(this.logger.info("_startIceConnect","tcp-only will try after ".concat(i,"ms")),this._tcpOnlyTimer=setTimeout(()=>{this.emit("connectWidthTcp"),I.forEach(E=>{(E=Ts(E)).iceConfig.tcpOnly=!0,B(E)}),delete this._tcpOnlyTimer},i))}_onConnectSuccess(I){var g;this.logger.info("connect","peer_%s connect success.",I.pc.uuid),this.emit("__onIceConnectSuccessHook",I),this._curConnection?(I.pc.destroy(),I.signaling.destroy(),this._connectionPool.delete(I.pc.uuid)):(this._curConnection=I,this._addConnectionHandler(I.pc),(g=this._monitor)===null||g===void 0||g.set({connection_id:I.pc.getConnectionId()}),this._connectionPool.delete(I.pc.uuid),this._feedbackNodes.forEach(C=>this._feedbackBySignaling(C)),this._feedbackNodes=[],this._onConnectEnded(I))}_onConnectionFailed(I,g){var C,Q;this.logger.info("connect","peer_%s connect failed. %s",((C=I.pc)===null||C===void 0?void 0:C.uuid)||"",g.message),this.emit("__onIceConnectFailedHook",I),g.code!==jX.DESTROY&&g.code!==S.OPERATION_CANCEL&&(this._curConnection?this._feedbackBySignaling(I.node):this._feedbackNodes.push(I.node),this.logger.info("connect","remove cache node"),oI.deleteAccessNode(this._ctx.appId,I.node),I.pc&&(this._connectionPool.delete(I.pc.uuid),I.pc.destroy()),(Q=I.signaling)===null||Q===void 0||Q.destroy(),this._connectionPool.size!==0||this._curConnection||this._destroyed||(this.logger.error("connect","establish peerConnection failed"),this._checkBrowserUA(),dA()-this._preIceStartTime<1e3?(this._clearReconnectTimer(),this._reconnectTimer=setTimeout(()=>{delete this._reconnectTimer,this._reconnectWithIceFailed(this._feedbackNodes)},1e3)):this._reconnectWithIceFailed(this._feedbackNodes)))}_feedbackBySignaling(I){var g;(g=this._curConnection)===null||g===void 0||g.signaling.sendSignaling("scheduleMessage",{type:"feedback",body:{feedbackIP:I.publicIPs[0].ip,feedbackReason:{type:"ICE_FAILED",reason:{}}}})}async _reconnectWithIceFailed(I){this._onConnectStart("ice failed"),this.logger.warn("reconnect","because of ice failed"),this._getAccess(I.map(g=>({feedbackIP:g.publicIPs[0].ip,feedbackReason:{type:"ICE_FAILED",reason:{}}})))}_checkBrowserUA(){var I;!this._hasReportBrowerWarning&&this._ctx.joinRoomConfig.isBlackBrower()&&(this._hasReportBrowerWarning=!0,(I=this._monitor)===null||I===void 0||I.report("rtc_error",{error_code:iQ.BLACK_BROWSER,message:"failed to establish data-channel, and the current browser is on the browser blacklist."}))}_onConnectStart(I){var g;this.logger.info("_onConnectStart","invoke, reason: ".concat(I||"init")),this._connecting=!0,I?this.asyncEmit("reconnecting",I):this.asyncEmit("connecting");const C=UC();var Q;(g=this._monitor)===null||g===void 0||g.set({connect_session_id:C}),this._isFirstTimeConnected||(Q=this._monitor)===null||Q===void 0||Q.report("rtc_reconnect",{error_code:1002,message:"peerconnection reconnecting",reconnect_id:C,reconnect_type:"peerconnection"},{reason:I})}_onConnectEnded(I){var g;this.logger.info("_onConnectEnded","invoke"),this._connecting=!1,this._isFirstTimeConnected||(g=this._monitor)===null||g===void 0||g.report("rtc_reconnected",{message:"peerconnection reconnected",reconnect_type:"peerconnection"}),this._isFirstTimeConnected=!1,this.asyncEmit("connected",I),I.node.iceConfig.tcpOnly&&(this.logger.info("_onConnectEnded","use tcp only"),rI(this._ctx.id,"connected_with_tcp_only",JSON.stringify(I.node))),this._tcpOnlyTimer&&(window.clearTimeout(this._tcpOnlyTimer),delete this._tcpOnlyTimer),this._clearConnectionPool()}_addConnectionHandler(I){I.on("disconnect",g=>{this._closeCurrentConnection(),this._clearReconnectTimer(),navigator.onLine?this.reconnect(g):this._reconnectTimer=setTimeout(()=>this.reconnect(g),3e3)})}_closeCurrentConnection(){var I,g;(I=this._curConnection)===null||I===void 0||I.pc.destroy(),(g=this._curConnection)===null||g===void 0||g.signaling.destroy(),delete this._curConnection}_clearConnectionPool(){this._connectionPool.forEach((I,g)=>{var C,Q;(C=I.signaling)===null||C===void 0||C.destroy(),(Q=I.pc)===null||Q===void 0||Q.destroy(),this._connectionPool.delete(g)})}_clearReconnectTimer(){this._reconnectTimer&&(window.clearTimeout(this._reconnectTimer),delete this._reconnectTimer)}}var fbA=Av,jbA=fbA.f("asyncIterator"),XbA=jbA,HbA=XbA,xbA=HbA,ObA=xbA,qbA=ObA,_bA=qbA,$bA=_bA,AyA=nI($bA),lN=Zg,IyA=_M,gyA=Xs,CyA=wi,QyA=function(A,I,g){for(var C=IyA(I),Q=CyA.f,i=gyA.f,B=0;Bi;i++)if((E=P(A[i]))&&dN(uN,E))return E;return new v9(!1)}C=wyA(A,Q)}for(e=s?A.next:C.next;!(t=uyA(e,C)).done;){try{E=P(t.value)}catch(d){hN(C,"throw",d)}if(typeof E=="object"&&E&&dN(uN,E))return E}return new v9(!1)},LyA=rQ,SyA=function(A,I){return A===void 0?arguments.length<2?"":I:LyA(A)},TyA=TA,pyA=vC,FyA=AS,k0=FtA,UyA=QyA,xX=ac,db=vo,hb=We,kyA=EyA,YyA=dyA,NyA=ev,ZyA=SyA,KyA=mI,WyA=KyA("toStringTag"),Y0=Error,JyA=[].push,ps=function(A,I){var g,C=pyA(ub,this);k0?g=k0(new Y0,C?FyA(this):ub):(g=C?this:xX(ub),db(g,WyA,"Error")),I!==void 0&&db(g,"message",ZyA(I)),YyA(g,ps,g.stack,1),arguments.length>2&&kyA(g,arguments[2]);var Q=[];return NyA(A,JyA,{that:Q}),db(g,"errors",Q),g};k0?k0(ps,Y0):UyA(ps,Y0,{name:!0});var ub=ps.prototype=xX(Y0.prototype,{constructor:hb(1,ps),message:hb(1,""),name:hb(1,"AggregateError")});TyA({global:!0},{AggregateError:ps});var fn,xo,DN,Db,Aa=cI,VyA=Je,zyA=Ke,jl=function(A){return VyA.slice(0,A.length)===A},OX=jl("Bun/")?"BUN":jl("Cloudflare-Workers")?"CLOUDFLARE":jl("Deno/")?"DENO":jl("Node.js/")?"NODE":Aa.Bun&&typeof Bun.version=="string"?"BUN":Aa.Deno&&typeof Deno.version=="object"?"DENO":zyA(Aa.process)==="process"?"NODE":Aa.window&&Aa.document?"BROWSER":"REST",MyA=OX,YS=MyA==="NODE",fyA=$g,jyA=Md,XyA=mI,HyA=Dg,bN=XyA("species"),xyA=function(A){var I=fyA(A);HyA&&I&&!I[bN]&&jyA(I,bN,{configurable:!0,get:function(){return this}})},OyA=XL,qyA=xs,_yA=TypeError,$yA=function(A){if(OyA(A))return A;throw new _yA(qyA(A)+" is not a constructor")},yN=ZQ,AmA=$yA,ImA=oc,gmA=mI,CmA=gmA("species"),qX=function(A,I){var g,C=yN(A).constructor;return C===void 0||ImA(g=yN(C)[CmA])?I:AmA(g)},QmA=Je,_X=/(?:ipad|iphone|ipod).*applewebkit/i.test(QmA),RQ=cI,imA=Ud,BmA=DE,mN=rg,EmA=Zg,$X=sI,wN=Mz,emA=$s,GN=zL,tmA=bc,omA=_X,rmA=YS,pG=RQ.setImmediate,RN=RQ.clearImmediate,smA=RQ.process,bb=RQ.Dispatch,vmA=RQ.Function,LN=RQ.MessageChannel,amA=RQ.String,yb=0,Qn={},SN="onreadystatechange";$X(function(){fn=RQ.location});var NS=function(A){if(EmA(Qn,A)){var I=Qn[A];delete Qn[A],I()}},mb=function(A){return function(){NS(A)}},TN=function(A){NS(A.data)},pN=function(A){RQ.postMessage(amA(A),fn.protocol+"//"+fn.host)};pG&&RN||(pG=function(A){tmA(arguments.length,1);var I=mN(A)?A:vmA(A),g=emA(arguments,1);return Qn[++yb]=function(){imA(I,void 0,g)},xo(yb),yb},RN=function(A){delete Qn[A]},rmA?xo=function(A){smA.nextTick(mb(A))}:bb&&bb.now?xo=function(A){bb.now(mb(A))}:LN&&!omA?(Db=(DN=new LN).port2,DN.port1.onmessage=TN,xo=BmA(Db.postMessage,Db)):RQ.addEventListener&&mN(RQ.postMessage)&&!RQ.importScripts&&fn&&fn.protocol!=="file:"&&!$X(pN)?(xo=pN,RQ.addEventListener("message",TN,!1)):xo=SN in GN("script")?function(A){wN.appendChild(GN("script"))[SN]=function(){wN.removeChild(this),NS(A)}}:function(A){setTimeout(mb(A),0)});var A5={set:pG},I5=function(){this.head=null,this.tail=null};I5.prototype={add:function(A){var I={item:A,next:null},g=this.tail;g?g.next=I:this.head=I,this.tail=I},get:function(){var A=this.head;if(A)return(this.head=A.next)===null&&(this.tail=null),A.item}};var Oo,wb,Gb,Rb,FN,g5=I5,nmA=Je,cmA=/ipad|iphone|ipod/i.test(nmA)&&typeof Pebble<"u",lmA=Je,PmA=/web0s(?!.*chrome)/i.test(lmA),Fs=cI,dmA=iX,UN=DE,Lb=A5.set,hmA=g5,umA=_X,DmA=cmA,bmA=PmA,Sb=YS,kN=Fs.MutationObserver||Fs.WebKitMutationObserver,YN=Fs.document,NN=Fs.process,Xl=Fs.Promise,FG=dmA("queueMicrotask");if(!FG){var Hl=new hmA,xl=function(){var A,I;for(Sb&&(A=NN.domain)&&A.exit();I=Hl.get();)try{I()}catch(g){throw Hl.head&&Oo(),g}A&&A.enter()};umA||Sb||bmA||!kN||!YN?!DmA&&Xl&&Xl.resolve?((Rb=Xl.resolve(void 0)).constructor=Xl,FN=UN(Rb.then,Rb),Oo=function(){FN(xl)}):Sb?Oo=function(){NN.nextTick(xl)}:(Lb=UN(Lb,Fs),Oo=function(){Lb(xl)}):(wb=!0,Gb=YN.createTextNode(""),new kN(xl).observe(Gb,{characterData:!0}),Oo=function(){Gb.data=wb=!wb}),FG=function(A){Hl.head||Oo(),Hl.add(A)}}var ymA=FG,mmA=function(A,I){try{arguments.length===1?console.error(A):console.error(A,I)}catch{}},tv=function(A){try{return{error:!1,value:A()}}catch(I){return{error:!0,value:I}}},wmA=cI,go=wmA.Promise,GmA=cI,Bn=go,RmA=rg,LmA=Lz,SmA=Uz,TmA=mI,ZN=OX,Tb=rc,KN=Bn&&Bn.prototype,pmA=TmA("species"),C5=RmA(GmA.PromiseRejectionEvent),FmA=LmA("Promise",function(){var A=SmA(Bn),I=A!==String(Bn);if(!I&&Tb===66||!KN.catch||!KN.finally)return!0;if(!Tb||Tb<51||!/native code/.test(A)){var g=new Bn(function(Q){Q(1)}),C=function(Q){Q(function(){},function(){})};if((g.constructor={})[pmA]=C,!(g.then(function(){})instanceof C))return!0}return!(I||ZN!=="BROWSER"&&ZN!=="DENO"||C5)}),yc={CONSTRUCTOR:FmA,REJECTION_EVENT:C5},WB={},WN=yi,UmA=TypeError,kmA=function(A){var I,g;this.promise=new A(function(C,Q){if(I!==void 0||g!==void 0)throw new UmA("Bad Promise constructor");I=C,g=Q}),this.resolve=WN(I),this.reject=WN(g)};WB.f=function(A){return new kmA(A)};var YmA=TA,N0=YS,Fe=cI,mc=bg,NmA=Ve,ZmA=yE,KmA=xyA,WmA=yi,UG=rg,JmA=NC,VmA=hS,zmA=qX,Q5=A5.set,ZS=ymA,MmA=mmA,fmA=tv,jmA=g5,i5=Iv,kG=go,B5=yc,E5=WB,a9="Promise",JN=B5.CONSTRUCTOR,XmA=B5.REJECTION_EVENT,pb,VN,HmA,Fb=i5.getterFor(a9),xmA=i5.set,OmA=kG&&kG.prototype,Ia=kG,Ub=OmA,e5=Fe.TypeError,YG=Fe.document,KS=Fe.process,NG=E5.f,qmA=NG,_mA=!!(YG&&YG.createEvent&&Fe.dispatchEvent),t5="unhandledrejection",$mA="rejectionhandled",zN=0,o5=1,AwA=2,WS=1,r5=2,s5=function(A){var I;return!(!JmA(A)||!UG(I=A.then))&&I},v5=function(A,I){var g,C,Q,i=I.value,B=I.state===o5,E=B?A.ok:A.fail,e=A.resolve,t=A.reject,o=A.domain;try{E?(B||(I.rejection===r5&&gwA(I),I.rejection=WS),E===!0?g=i:(o&&o.enter(),g=E(i),o&&(o.exit(),Q=!0)),g===A.promise?t(new e5("Promise-chain cycle")):(C=s5(g))?mc(C,g,e,t):e(g)):t(i)}catch(r){o&&!Q&&o.exit(),t(r)}},a5=function(A,I){A.notified||(A.notified=!0,ZS(function(){for(var g,C=A.reactions;g=C.get();)v5(g,A);A.notified=!1,I&&!A.rejection&&IwA(A)}))},n5=function(A,I,g){var C,Q;_mA?((C=YG.createEvent("Event")).promise=I,C.reason=g,C.initEvent(A,!1,!0),Fe.dispatchEvent(C)):C={promise:I,reason:g},!XmA&&(Q=Fe["on"+A])?Q(C):A===t5&&MmA("Unhandled promise rejection",g)},IwA=function(A){mc(Q5,Fe,function(){var I,g=A.facade,C=A.value;if(MN(A)&&(I=fmA(function(){N0?KS.emit("unhandledRejection",C,g):n5(t5,g,C)}),A.rejection=N0||MN(A)?r5:WS,I.error))throw I.value})},MN=function(A){return A.rejection!==WS&&!A.parent},gwA=function(A){mc(Q5,Fe,function(){var I=A.facade;N0?KS.emit("rejectionHandled",I):n5($mA,I,A.value)})},fr=function(A,I,g){return function(C){A(I,C,g)}},os=function(A,I,g){A.done||(A.done=!0,g&&(A=g),A.value=I,A.state=AwA,a5(A,!0))},ZG=function(A,I,g){if(!A.done){A.done=!0,g&&(A=g);try{if(A.facade===I)throw new e5("Promise can't be resolved itself");var C=s5(I);C?ZS(function(){var Q={done:!1};try{mc(C,I,fr(ZG,Q,A),fr(os,Q,A))}catch(i){os(Q,i,A)}}):(A.value=I,A.state=o5,a5(A,!1))}catch(Q){os({done:!1},Q,A)}}};JN&&(Ub=(Ia=function(A){VmA(this,Ub),WmA(A),mc(pb,this);var I=Fb(this);try{A(fr(ZG,I),fr(os,I))}catch(g){os(I,g)}}).prototype,(pb=function(A){xmA(this,{type:a9,done:!1,notified:!1,parent:!1,reactions:new jmA,rejection:!1,state:zN,value:null})}).prototype=NmA(Ub,"then",function(A,I){var g=Fb(this),C=NG(zmA(this,Ia));return g.parent=!0,C.ok=!UG(A)||A,C.fail=UG(I)&&I,C.domain=N0?KS.domain:void 0,g.state===zN?g.reactions.add(C):ZS(function(){v5(C,g)}),C.promise}),VN=function(){var A=new pb,I=Fb(A);this.promise=A,this.resolve=fr(ZG,I),this.reject=fr(os,I)},E5.f=NG=function(A){return A===Ia||A===HmA?new VN(A):qmA(A)}),YmA({global:!0,wrap:!0,forced:JN},{Promise:Ia}),ZmA(Ia,a9,!1,!0),KmA(a9);var CwA=mI,c5=CwA("iterator"),l5=!1;try{var QwA=0,fN={next:function(){return{done:!!QwA++}},return:function(){l5=!0}};fN[c5]=function(){return this},Array.from(fN,function(){throw 2})}catch{}var iwA=function(A,I){try{if(!I&&!l5)return!1}catch{return!1}var g=!1;try{var C={};C[c5]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch{}return g},BwA=go,EwA=iwA,ewA=yc.CONSTRUCTOR,gh=ewA||!EwA(function(A){BwA.all(A).then(void 0,function(){})}),twA=TA,owA=bg,rwA=yi,swA=WB,vwA=tv,awA=ev,nwA=gh;twA({target:"Promise",stat:!0,forced:nwA},{all:function(A){var I=this,g=swA.f(I),C=g.resolve,Q=g.reject,i=vwA(function(){var B=rwA(I.resolve),E=[],e=0,t=1;awA(A,function(o){var r=e++,s=!1;t++,owA(B,I,o).then(function(v){s||(s=!0,E[r]=v,--t||C(E))},Q)}),--t||C(E)});return i.error&&Q(i.value),g.promise}});var cwA=TA,lwA=yc.CONSTRUCTOR;go&&go.prototype,cwA({target:"Promise",proto:!0,forced:lwA,real:!0},{catch:function(A){return this.then(void 0,A)}});var PwA=TA,dwA=bg,hwA=yi,uwA=WB,DwA=tv,bwA=ev,ywA=gh;PwA({target:"Promise",stat:!0,forced:ywA},{race:function(A){var I=this,g=uwA.f(I),C=g.reject,Q=DwA(function(){var i=hwA(I.resolve);bwA(A,function(B){dwA(i,I,B).then(g.resolve,C)})});return Q.error&&C(Q.value),g.promise}});var mwA=TA,wwA=WB,GwA=yc.CONSTRUCTOR;mwA({target:"Promise",stat:!0,forced:GwA},{reject:function(A){var I=wwA.f(this);return(0,I.reject)(A),I.promise}});var RwA=ZQ,LwA=NC,SwA=WB,P5=function(A,I){if(RwA(A),LwA(I)&&I.constructor===A)return I;var g=SwA.f(A);return(0,g.resolve)(I),g.promise},TwA=TA,pwA=$g,FwA=Gz,UwA=go,kwA=yc.CONSTRUCTOR,YwA=P5,NwA=pwA("Promise"),ZwA=!kwA;TwA({target:"Promise",stat:!0,forced:FwA},{resolve:function(A){return YwA(ZwA&&this===NwA?UwA:this,A)}});var KwA=TA,WwA=bg,JwA=yi,VwA=WB,zwA=tv,MwA=ev,fwA=gh;KwA({target:"Promise",stat:!0,forced:fwA},{allSettled:function(A){var I=this,g=VwA.f(I),C=g.resolve,Q=g.reject,i=zwA(function(){var B=JwA(I.resolve),E=[],e=0,t=1;MwA(A,function(o){var r=e++,s=!1;t++,WwA(B,I,o).then(function(v){s||(s=!0,E[r]={status:"fulfilled",value:v},--t||C(E))},function(v){s||(s=!0,E[r]={status:"rejected",reason:v},--t||C(E))})}),--t||C(E)});return i.error&&Q(i.value),g.promise}});var jwA=TA,XwA=bg,HwA=yi,xwA=$g,OwA=WB,qwA=tv,_wA=ev,$wA=gh,jN="No one promise resolved";jwA({target:"Promise",stat:!0,forced:$wA},{any:function(A){var I=this,g=xwA("AggregateError"),C=OwA.f(I),Q=C.resolve,i=C.reject,B=qwA(function(){var E=HwA(I.resolve),e=[],t=0,o=1,r=!1;_wA(A,function(s){var v=t++,n=!1;o++,XwA(E,I,s).then(function(a){n||r||(r=!0,Q(a))},function(a){n||r||(n=!0,e[v]=a,--o||i(new g(e,jN)))})}),--o||i(new g(e,jN))});return B.error&&i(B.value),C.promise}});var AGA=TA,IGA=cI,gGA=Ud,CGA=$s,QGA=WB,iGA=yi,d5=tv,kb=IGA.Promise,XN=!1,BGA=!kb||!kb.try||d5(function(){kb.try(function(A){XN=A===8},8)}).error||!XN;AGA({target:"Promise",stat:!0,forced:BGA},{try:function(A){var I=arguments.length>1?CGA(arguments,1):[],g=QGA.f(this),C=d5(function(){return gGA(iGA(A),void 0,I)});return(C.error?g.reject:g.resolve)(C.value),g.promise}});var EGA=TA,eGA=WB;EGA({target:"Promise",stat:!0},{withResolvers:function(){var A=eGA.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var tGA=TA,KG=go,oGA=sI,rGA=$g,sGA=rg,vGA=qX,HN=P5,aGA=KG&&KG.prototype,nGA=!!KG&&oGA(function(){aGA.finally.call({then:function(){}},function(){})});tGA({target:"Promise",proto:!0,real:!0,forced:nGA},{finally:function(A){var I=vGA(this,rGA("Promise")),g=sGA(A);return this.then(g?function(C){return HN(I,A()).then(function(){return C})}:A,g?function(C){return HN(I,A()).then(function(){throw C})}:A)}});var cGA=oQ,lGA=cGA.Promise,PGA=lGA,dGA=PGA,hGA=dGA,uGA=hGA,DGA=uGA,bGA=DGA,yGA=bGA,Ol=nI(yGA);function mGA(A){var I,g,C,Q=2;for(Pa!==void 0&&(g=AyA,C=FM);Q--;){if(g&&(I=A[g])!=null)return I.call(A);if(C&&(I=A[C])!=null)return new WG(I.call(A));g="@@asyncIterator",C="@@iterator"}throw new TypeError("Object is not async iterable")}function WG(A){function I(g){if(Object(g)!==g)return Ol.reject(new TypeError(g+" is not an object."));var C=g.done;return Ol.resolve(g.value).then(function(Q){return{value:Q,done:C}})}return(WG=function(g){this.s=g,this.n=g.next}).prototype={s:null,n:null,next:function(){return I(this.n.apply(this.s,arguments))},return:function(g){var C=this.s.return;return C===void 0?Ol.resolve({value:g,done:!0}):I(C.apply(this.s,arguments))},throw:function(g){var C=this.s.return;return C===void 0?Ol.reject(g):I(C.apply(this.s,arguments))}},new WG(A)}var wGA=(A=>(A[A.AUTO=0]="AUTO",A[A.MODE_L=1]="MODE_L",A[A.MODE_R=2]="MODE_R",A[A.MODE_MIX=3]="MODE_MIX",A))(wGA||{}),li=(A=>(A[A.PLAYOUT=0]="PLAYOUT",A[A.PUBLISH=1]="PUBLISH",A[A.PLAYOUT_AND_PUBLISH=2]="PLAYOUT_AND_PUBLISH",A))(li||{}),MC=(A=>(A[A.AUDIO_MIXING_STATE_PRELOADED=0]="AUDIO_MIXING_STATE_PRELOADED",A[A.AUDIO_MIXING_STATE_PLAYING=1]="AUDIO_MIXING_STATE_PLAYING",A[A.AUDIO_MIXING_STATE_PAUSED=2]="AUDIO_MIXING_STATE_PAUSED",A[A.AUDIO_MIXING_STATE_STOPPED=3]="AUDIO_MIXING_STATE_STOPPED",A[A.AUDIO_MIXING_STATE_FAILED=4]="AUDIO_MIXING_STATE_FAILED",A[A.AUDIO_MIXING_STATE_FINISHED=5]="AUDIO_MIXING_STATE_FINISHED",A[A.AUDIO_MIXING_STATE_PCM_ENABLED=6]="AUDIO_MIXING_STATE_PCM_ENABLED",A[A.AUDIO_MIXING_STATE_PCM_DISABLED=7]="AUDIO_MIXING_STATE_PCM_DISABLED",A))(MC||{});class JS extends tB.EventEmitter{constructor(I,g){super(),l(this,"_context",void 0),l(this,"peerConnectionMode",0),l(this,"id",void 0),l(this,"_monitor",void 0),l(this,"logger",void 0),l(this,"_nextSsrc",kbA()),l(this,"_aSendonlyAnswerTpl",void 0),l(this,"_vSendonlyAnswerTpl",void 0),l(this,"_enableSubFlexfec",!1),l(this,"audioTrack4ff",void 0),l(this,"setLocalDescription",void 0),l(this,"setRemoteDescription",void 0),this.peer=g,this.id=I.id,this._monitor=bI(this.id),this.logger=new SA("BasicHandler",3,I.id),this.setLocalDescription=g.setLocalDescription.bind(g),this.setRemoteDescription=g.setRemoteDescription.bind(g),this._context=I,this.peer.on("ontrack",C=>{this.emit("ontrack",C)})}destroy(){this.logger.info("destroy",this.peerConnectionId||""),super.removeAllListeners()}get _peerConnection(){return this.peer.getOriginRTCPeerConnection()}getTransceivers(){return this._peerConnection.getTransceivers()}getConnectionState(){return this._peerConnection.connectionState}internalPublish(I){const{stream:g,videoTrack:C,audioTrack:Q,pubAudio:i,pubVideo:B}=I,E={direction:"sendonly",streams:[g]},e={direction:"sendonly",streams:[g]},{sendEncodings:t,videoDescriptions:o,subVideoDescriptions:r,activeSimulcastStreams:s}=this._context.videoProfile.genVideoDescriptions(I);e.sendEncodings=t,this._context.videoProfile.activeSimStreams=s,this.logger.info("publish videoTransceiverInit videoDescriptions","",e,o);let v=Q==null?void 0:Q.preprocessingTrack;(Q==null?void 0:Q.mixType)!==li.PLAYOUT&&Q!=null&&Q.mixedAudioTrack&&(v=Q==null?void 0:Q.mixedAudioTrack),v=i&&v?v:"audio";let n=C==null?void 0:C.preprocessingTrack;n=B&&n?n:"video";try{this._reportRtcInvokeStatus("Handler.internalPublish",JSON.stringify({aTrack:ci(v),vTrack:ci(n),audioTransceiverInit:E,videoTransceiverInit:e}))}catch{}return{semantics:"unified-plan",videoDescriptions:o,subVideoDescriptions:r,audioTransceiverInit:{track:v,init:E},videoTransceiverInit:{track:n,init:e}}}async setCurrentDescription(){}createAVMlineAnswerTpl(I){const g=wA.parse(I);g.media.forEach(C=>{if(C.type==="audio"){if(C.direction==="sendonly"){const Q=C==null?void 0:C.rtp.find(i=>i.codec==="opus");if(Q&&C!=null&&C.fmtp){const i=C==null?void 0:C.fmtp.find(B=>B.payload===Q.payload);i&&this._context&&(i.config+=";stereo=1;sprop-stereo=1")}this._aSendonlyAnswerTpl=C}}else C.type==="video"&&(C.direction==="sendonly"&&(this._vSendonlyAnswerTpl=C),Array.isArray(C.rtp)&&C.rtp.forEach(Q=>{var i;(i=Q.codec)!==null&&i!==void 0&&i.includes("flexfec")&&(this._enableSubFlexfec=!0)}))}),eE&&pB(g)}get peerConnectionId(){return this.peer.getConnectionId()||""}addBitrateLimit(I,g){I==null||I.rtp.forEach(C=>{let{codec:Q,payload:i}=C;if(["vp8","h264"].includes(Q.toLocaleLowerCase())){const B=I.fmtp.find(E=>E.payload===i);B?B.config=[...B.config.split(";"),"x-google-min-bitrate=100","x-google-start-bitrate=".concat(g)].join(";"):I.fmtp.push({payload:i,config:"x-google-min-bitrate=100;x-google-start-bitrate=".concat(g)})}})}_report(I,g,C){var Q;(Q=this._monitor)===null||Q===void 0||Q.report(I,p(p({},g),{},{connection_id:this.peer.getConnectionId(),group_connection_id:this.peer.getGroupConnectionId()}),C)}_reportRtcInvokeStatus(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",i=arguments.length>4?arguments[4]:void 0;this._report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:C,stream_id:Q,elapse:0},i)}}const GGA=new SA("queue",4);var h5=(A=>(A[A.ADD=0]="ADD",A[A.CLOSE=1]="CLOSE",A))(h5||{}),hI=(A=>(A.publish="publish",A.unpublish="unpublish",A.subscribe="subscribe",A.unsubscribe="unsubscribe",A.pushtrack="pushtrack",A.removetrack="removetrack",A))(hI||{});const RGA={publish:"unpublish",subscribe:"unsubscribe",pushtrack:"removetrack"},xN={publish:0,subscribe:0,pushtrack:0,unpublish:1,unsubscribe:1,removetrack:1};class LGA extends EdA{constructor(){super(),l(this,"_queue",void 0),this._queue=[]}get queue(){return this._queue}enqueue(I){const g=this._queue.length;let C="";return this._queue=this._queue.filter(Q=>Q.streamId!==I.streamId||I.action!==RGA[Q.action]||(C=Q.streamId,GGA.info("offsetStreamId",C),!1)),this._queue.length===g&&this._queue.push(I),this.emit("start"),C}dequeue(){if(!this._queue.length)return null;let I=this._queue.length;we&&ri>=86&&ri<=92&&(I=Math.min(this._queue.length,5));const g=xN[this._queue[0].action];for(let C=1;C{this._queueBusy||this._peerConnection.signalingState!=="stable"||(this.logger.info("dequeue start"),this.dequeue())})}destroy(){super.destroy(),this._sdpQueue.destroy()}async publish(I){var g;const{stream:C,enableSimulcast:Q}=I,{videoDescriptions:i,subVideoDescriptions:B,audioTransceiverInit:E,videoTransceiverInit:e}=super.internalPublish(I),t=S0(this._nextSsrc);this._nextSsrc=t.next;const o="".concat(this._mid++),r="".concat(this._mid++),s=p(p(p({},this._aSendonlyOfferTpl),this.peer._offerIce),{},{mid:o,msid:"".concat(C.id," ").concat(C.id,"-audio"),ssrcs:T0(C.id,"audio",t.audio,vN)}),v=p(p(p({},this._vSendonlyOfferTpl),this.peer._offerIce),{},{mid:r,msid:"".concat(C.id," ").concat(C.id,"-video")});if(Q){this.logger.info("subVideoDesc","desc: %o ",B),delete v.ssrcGroups,delete v.ssrcs;const a=[];v.rids=i.map(c=>{let{rid:P}=c;return a.unshift(P),{id:P,direction:"send"}}),v.simulcast={dir1:"send",list1:a.join(";")}}else{const{ssrcs:a,ssrcGroups:c}=SG(C.id,t,{cname:vN});v.ssrcs=a,v.ssrcGroups=c}if((g=this._context.serverConfig)!==null&&g!==void 0&&g.audioRed&&Array.isArray(s.rtp)){const a=s.rtp.findIndex(P=>P.codec==="red");if(a!==-1){const[P]=s.rtp.splice(a,1);s.rtp.unshift(P)}const c=[];s.rtp.forEach(P=>c.push(P.payload)),s.payloads=c.join(" ")}Array.isArray(v.ext)&&(yA("IOS_SAFARI_ORIENTATION")||!kQ&&!no||(v.ext=v.ext.filter(a=>{var c;return!(a!=null&&(c=a.uri)!==null&&c!==void 0&&c.includes("video-orientation"))})),v.ext=v.ext.filter(a=>{var c;return!(a!=null&&(c=a.uri)!==null&&c!==void 0&&c.includes("framemarking"))}));const n=s==null?void 0:s.rtp.find(a=>a.codec==="opus");if(n&&s.fmtp){const a=s.fmtp.find(c=>c.payload===n.payload);a&&this._context.audioProfileManager&&(a.config=this._context.audioProfileManager.getOpusConfigStr(a.config))}return Q||kQ||this.addBitrateLimit(v,I.videoEncodeConfig[0].maxKbps),I.audioMLine=s,I.videoMLine=v,{partialSdp:p0(this.peer._offerSession,s,v),audioMid:o,videoMid:r,type:"incroffer",semantics:"unified-plan",videoDescriptions:i,subVideoDescriptions:B,audioTransceiverInit:E,videoTransceiverInit:e,peerConnectionMode:this.peerConnectionMode}}async subscribe(I,g){var C,Q;if(this.logger.info("subscribe"),!this._aRecvonlyOfferTpl||!this._vRecvonlyOfferTpl){const y=await this._genOfferSdp();await this.createAVMlineOfferTpl(y)}let i,B,E,e,t="",o="",r=!1,s=!1;I.audioMLine=i,I.videoMLine=B,I.virtual?(t="".concat(this._mid++),r=!0):g.multiChatMode?(t="".concat(this._mid++),o="".concat(this._mid++),s=!0):(r=!0,s=!0,t="".concat(this._mid++),o="".concat(this._mid++)),t&&(i=p(p({},Ts(this._aRecvonlyOfferTpl)),{},{mid:t})),r&&(I.audioMLine=i,E={track:"audio",init:{direction:"recvonly"}}),o&&(B=p(p({},Ts(this._vRecvonlyOfferTpl)),{},{mid:o})),s&&(I.videoMLine=B,e={track:"video",init:{direction:"recvonly"}});const v=p0(this.peer._offerSession,i,B);let n,a;if(!I.enableVendorMode&&!g.multiChatMode&&!I.virtual&&this._aSendonlyAnswerTpl&&this._vSendonlyAnswerTpl){var c;n=S0(this._nextSsrc),this._nextSsrc=n.next;const y=p(p(p({},this._aSendonlyAnswerTpl),this.peer._answerIce),{},{mid:t,msid:"".concat(I.streamId).concat(this._context.avSync?"":"-audio"," ").concat(I.streamId,"-audio"),ssrcs:T0(I.streamId,"audio",n.audio)}),b=p(p(p({},this._vSendonlyAnswerTpl),this.peer._answerIce),{},{mid:o,msid:"".concat(I.streamId).concat(this._context.avSync?"":"-video"," ").concat(I.streamId,"-video")},SG(I.streamId,n,{flexfec:this._enableSubFlexfec}));a={sdp:wA.write(p(p({},this.peer._answerSession),{},{media:[y,b]})),sequenceId:I.sequenceId?++I.sequenceId:0},(c=n)===null||c===void 0||delete c.next}const P=(C=i)===null||C===void 0?void 0:C.rtp.find(y=>y.codec==="opus");if(P&&(Q=i)!==null&&Q!==void 0&&Q.fmtp){var d;const y=(d=i)===null||d===void 0?void 0:d.fmtp.find(b=>b.payload===P.payload);y&&this._context&&(y.config+=";stereo=1;sprop-stereo=1")}if(I.isPublic&&ri>=86){var h,u;const y=(h=B)===null||h===void 0?void 0:h.rtp.filter(b=>b.codec==="H264");var D;y!=null&&y.length&&(u=B)!==null&&u!==void 0&&u.fmtp&&((D=B)===null||D===void 0||D.fmtp.forEach(b=>{y.find(G=>G.payload===b.payload)&&(b.config+=";sps-pps-idr-in-keyframe=1")}))}return{partialSdp:v,audioMid:t,videoMid:o,type:"incroffer",semantics:"unified-plan",audioTransceiverInit:E,videoTransceiverInit:e,allSsrc:n,peerConnectionMode:this.peerConnectionMode,signalingAck:a}}async handleAck(I){return this.logger.info("handleAck()","item: %o",I),this._sdpQueue.enqueue(I)}async dequeue(){this._queueBusy=!0;const I=this._sdpQueue.dequeue();if(this.logger.info("dequeue()","ret: %o",I),!I)return void(this._queueBusy=!1);const g=[];try{const{items:s,sdpStrategy:v}=I,n=[],a=[],c=[];if(v===h5.ADD){delete p({},this.peer._answerIce).candidates;var C,Q=!1,i=!1;try{for(var B,E=mGA(s);Q=!(B=await E.next()).done;Q=!1){const P=B.value;{var e;const{audioMid:d,videoMid:h,action:u,audioTransceiverInit:D,videoTransceiverInit:y,signalingAck:b,stream:G,videoCodec:L,onSuccess:m,onFail:F}=P,U=G instanceof L0;if(m&&c.push(m),F&&g.push(F),U&&b.sequenceId{var cA;return QA==null||(cA=QA.type)===null||cA===void 0?void 0:cA.localeCompare(R==null?void 0:R.type)});const X=AA.media.find(QA=>QA.type==="audio"),Y=AA.media.find(QA=>QA.type==="video");if(!X||!Y)break;const J=p(p(p({},X),this.peer._answerIce),{},{mid:d}),V=p(p(p({},Y),this.peer._answerIce),{},{mid:h}),{audioMLine:N,videoMLine:z,audioTransceiver:w,videoTransceiver:CA}=G;if(N){let QA=this.peer._offerMlines.findIndex(R=>R.mid===d);var t;if(w){if(this._reportRtcInvokeStatus("chromeHandler.updateTrack",JSON.stringify({audioStreamTrack:ci((t=G.audioTrack)===null||t===void 0?void 0:t.preprocessingTrack)})),QA===-1){this.logger.error("dequeue","audio mid not found when update sdp, %s from %o",d,this.peer._offerMlines);continue}}else D&&N&&(G.audioTransceiver=this._peerConnection.addTransceiver(D.track,D.init),this._reportRtcInvokeStatus("chromeHandler.addTrack",JSON.stringify({audioStreamTrack:ci(D.track)})),QA=this._inactiveMlineIndex.shift(),QA||(QA=this.peer._offerMlines.length),ON&&G.initAudioEncodedTransform());u===hI.publish&&yA("AUDIO_CODEC")!=="OPUS"&&(aN(N,yA("AUDIO_CODEC")),aN(J,yA("AUDIO_CODEC"))),this.peer._offerMlines[QA]=p({},N),this.peer._answerMlines[QA]=p({},J)}if(z){let QA=this.peer._offerMlines.findIndex(R=>R.mid===h);var o;if(CA){if(this._reportRtcInvokeStatus("chromeHandler.updateTrack",JSON.stringify({audioStreamTrack:ci((o=G.videoTrack)===null||o===void 0?void 0:o.preprocessingTrack)})),QA===-1){this.logger.error("dequeue","video mid not found when update sdp, %s from %o",h,this.peer._offerMlines);continue}}else y&&z&&(G.videoTransceiver=this._peerConnection.addTransceiver(y.track,y.init),this._reportRtcInvokeStatus("chromeHandler.addTrack",JSON.stringify({videoStreamTrack:ci(y.track)})),QA=this._inactiveMlineIndex.shift(),QA||(QA=this.peer._offerMlines.length),ON&&G.initVideoEncodedTransform());this.peer._offerMlines[QA]=p({},z),u===hI.publish&&L&&(F0(z,L),F0(V,L)),this.peer._answerMlines[QA]=V}n.push(G.streamId||""),a.push(U?G.userId:"local"),U&&(G.sequenceId=b.sequenceId)}}}catch(P){i=!0,C=P}finally{try{Q&&E.return!=null&&await E.return()}finally{if(i)throw C}}}else{var r;const P={};s.forEach(d=>{const{audioMid:h,videoMid:u,action:D}=d;P[h]=h,D!==hI.removetrack&&(P[u]=u),P[h]=h}),this.peer._offerMlines=this.peer._offerMlines.map((d,h)=>(d.mid&&P[d.mid]&&(d=TG(d),this._inactiveMlineIndex.push(h)),d)),ws(r=this._inactiveMlineIndex).call(r,(d,h)=>d-h),this.peer._answerMlines=this.peer._answerMlines.map(d=>(d.mid&&P[d.mid]&&(d=TG(d)),d))}try{await this.setDescription(n.length?{streamId:n.join(","),streamUserId:a.join(",")}:void 0)}catch(P){throw this._peerConnection.signalingState==="have-local-offer"&&await this._peerConnection.setLocalDescription({type:"rollback"}),P}try{c.forEach(P=>P())}catch{}this.logger.info("dequeue","loop")}catch(s){this.logger.error("dequeue","unknown error: %o",s),g.forEach(v=>v(s))}finally{this.dequeue()}}async getDefaultSdp(){const I=await this._genOfferSdp();this.createAVMlineOfferTpl(I);const g=wA.parse(I),C=[];return g.media=g.media.filter(Q=>Q.direction==="recvonly"&&(Array.isArray(Q.ext)&&(Q.ext=Q.ext.filter(i=>i.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),C.push("".concat(Q.mid)),!0)),g.groups=[{mids:C.join(" "),type:"BUNDLE"}],eE&&pB(g),{sdp:wA.write(g),semantics:"unified-plan",type:"incroffer"}}async rollback(I){let{stream:g}=I;delete g.audioMLine,delete g.videoMLine}createAVMlineOfferTpl(I){const g=wA.parse(I);g.media.forEach(C=>{C.type==="audio"?C.direction==="sendonly"?this._aSendonlyOfferTpl=C:(Array.isArray(C.ext)&&(C.ext=C.ext.filter(Q=>Q.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),this._aRecvonlyOfferTpl=C):C.type==="video"&&(C.direction==="sendonly"?this._vSendonlyOfferTpl=C:(Array.isArray(C.ext)&&(C.ext=C.ext.filter(Q=>Q.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),this._vRecvonlyOfferTpl=C))}),eE&&pB(g)}async _genOfferSdp(){let I;try{if(I=await e0A(!0),I=MX(I),!I)throw"pc.createOffer() return empty."}catch(g){const C="Get offer Error. ".concat(g.message|g);throw new K(S.NOT_SUPPORTED,C)}return I}}class u5 extends JS{constructor(I,g){super(I,g),l(this,"name","firefox"),l(this,"_aRecvonlyOfferTpl",void 0),this.logger=new SA("FirefoxHandler",3,I.id)}async publish(I){var g,C;const{videoDescriptions:Q,subVideoDescriptions:i,audioTransceiverInit:B,videoTransceiverInit:E}=super.internalPublish(I);I.audioTransceiver=this._peerConnection.addTransceiver(B.track,B.init),Array.isArray(E.init.sendEncodings)&&E.init.sendEncodings.length===1&&(E.init.sendEncodings=E.init.sendEncodings.map(a=>(delete a.rid,a))),I.videoTransceiver=this._peerConnection.addTransceiver(E.track,E.init);const e=dA();this._report("rtc_begin_create_offer",{direction:"up",stream_id:"",stream_user_id:"",pc_session_id:this.peerConnectionId,vendor_mode:0});const t=await this.peer.createOfferSdp();this._report("rtc_create_offer",{direction:"up",error_code:0,stream_id:"",stream_user_id:"",elapse:dA()-e});const o=wA.parse(t);o.media=(g=o.media)===null||g===void 0?void 0:g.map(a=>p(p({},a),this.peer._offerIce)),pB(o),await this.setLocalDescription(wA.write(o));const r=I.audioTransceiver.mid,s=I.videoTransceiver.mid;let v=null,n=null;return o.media=(C=o.media)===null||C===void 0?void 0:C.map(a=>{if("".concat(a.mid)===r){var c;v=a;const d=(c=v)===null||c===void 0?void 0:c.rtp.find(h=>h.codec==="opus");if(d&&v.fmtp){var P;const h=v.fmtp.find(u=>u.payload===d.payload);h&&(P=this._context)!==null&&P!==void 0&&P.audioProfileManager&&(h.config=this._context.audioProfileManager.getOpusConfigStr(h.config))}}else"".concat(a.mid)===s&&(n=a);return a}),this.addBitrateLimit(n,I.videoEncodeConfig[0].maxKbps),await this.setLocalDescription(wA.write(o)),I.initVideoEncodedTransform(),I.initAudioEncodedTransform(),{partialSdp:p0(o,v,n),audioMid:r,videoMid:s,type:"incroffer",semantics:"unified-plan",videoDescriptions:Q,subVideoDescriptions:i,audioTransceiverInit:B,videoTransceiverInit:E,peerConnectionMode:this.peerConnectionMode}}async _internalChangePubCodec(){const{localDescription:I}=this._peerConnection;I&&(await this.peer.createOfferSdp(),await this._peerConnection.setLocalDescription(I))}async subscribe(I,g){var C,Q,i,B;this.logger.info("subscribe()");let E,e,t="",o="",r=!1,s=!1;I.virtual?r=!0:(g.multiChatMode||(r=!0),s=!0),r&&(I.audioTransceiver=this._peerConnection.addTransceiver("audio",{direction:"recvonly"})),s&&(I.videoTransceiver=this._peerConnection.addTransceiver("video",{direction:"recvonly"}));const v=dA();this._report("rtc_begin_create_offer",{direction:"up",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:this.peerConnectionId,vendor_mode:0});const n=await this.peer.createOfferSdp();this._report("rtc_create_offer",{error_code:0,direction:"up",stream_id:I.streamId,stream_user_id:I.userId,elapse:dA()-v});const a=wA.parse(n);let c,P;if(a.media=(C=a.media)===null||C===void 0?void 0:C.map(D=>p(p({},D),this.peer._offerIce)),a.media.map(D=>{var y,b,G,L;D.type==="video"&&(PG?(D.ext=(y=D.ext)===null||y===void 0?void 0:y.filter(m=>m.uri.indexOf("abs-send-time")===-1),D.rtcpFb=(b=D.rtcpFb)===null||b===void 0?void 0:b.filter(m=>m.type!=="goog-remb")):(D.rtcpFb=(G=D.rtcpFb)===null||G===void 0?void 0:G.filter(m=>m.type!=="transport-cc"),D.ext=(L=D.ext)===null||L===void 0?void 0:L.filter(m=>m.uri.indexOf("transport")===-1)))}),eE&&pB(a),await this.setLocalDescription(wA.write(a),{streamId:I.streamId||"",streamUserId:I.userId}),t=(Q=I.audioTransceiver)===null||Q===void 0?void 0:Q.mid,o=(i=I.videoTransceiver)===null||i===void 0?void 0:i.mid,(B=a.media)===null||B===void 0||B.forEach(D=>{"".concat(D.mid)===t?E=D:"".concat(D.mid)===o&&(e=D)}),t&&E||(t="audio_".concat(o),E=p(p({},this._aRecvonlyOfferTpl),{},{mid:t})),I.audioMid=t,I.videoMid=o,!g.multiChatMode&&!I.virtual&&this._aSendonlyAnswerTpl&&this._aSendonlyAnswerTpl){var d,h,u;c=S0(this._nextSsrc),this._nextSsrc=c.next;const D=p(p(p({},this._aSendonlyAnswerTpl),this.peer._answerIce),{},{mid:t,msid:"".concat(I.streamId).concat((d=this._context)!==null&&d!==void 0&&d.avSync?"":"-audio"," ").concat(I.streamId,"-audio"),ssrcs:T0(I.streamId,"audio",c.audio)}),y=p(p(p({},this._vSendonlyAnswerTpl),this.peer._answerIce),{},{mid:o,msid:"".concat(I.streamId).concat((h=this._context)!==null&&h!==void 0&&h.avSync?"":"-video"," ").concat(I.streamId,"-video")},SG(I.streamId,c,{flexfec:this._enableSubFlexfec}));P={sdp:wA.write(p(p({},this.peer._answerSession),{},{media:[D,y]})),sequenceId:I.sequenceId?++I.sequenceId:0},(u=c)===null||u===void 0||delete u.next}return I.initVideoEncodedTransform(),I.initAudioEncodedTransform(),{partialSdp:p0(a,E,e,!1),audioMid:t,videoMid:o,type:"incroffer",semantics:"unified-plan",audioTransceiverInit:I.audioTransceiver?{track:"audio",init:{direction:"recvonly"}}:void 0,videoTransceiverInit:I.videoTransceiver?{track:"video",init:{direction:"recvonly"}}:void 0,allSsrc:c,peerConnectionMode:this.peerConnectionMode,signalingAck:P}}async handleAck(I){const{stream:g,action:C}=I;if(C===hI.removetrack)return"";if(C===hI.unpublish||C===hI.unsubscribe){try{await this.close(g),typeof I.onSuccess=="function"&&I.onSuccess()}catch(E){typeof I.onFail=="function"&&I.onFail(E)}return g.streamId||""}const{signalingAck:Q,videoCodec:i}=I,B=wA.parse(Q.sdp);try{await this._internalSetRemoteDescription(B.media,g,i),typeof I.onSuccess=="function"&&I.onSuccess()}catch(E){typeof I.onFail=="function"&&I.onFail(E)}return""}async _internalSetRemoteDescription(I,g,C){var Q,i;const B={},E=wA.parse((Q=this._peerConnection.remoteDescription)===null||Q===void 0?void 0:Q.sdp);E.media.forEach(o=>{o.mid!==void 0&&(B[o.mid]=o)}),I.forEach(o=>{if((o=p(p({},o),this.peer._answerIce)).type==="audio"&&(g.audioMid?(o.mid=g.audioMid,B[g.audioMid]=o):B[o.mid]=o),o.type==="video"){if(g instanceof R0&&P0<=87){const r={};Array.isArray(o.rtp)&&(o.rtp=o.rtp.filter(s=>s.codec!=="rtx"||(r[s.payload]=s.payload,!1))),typeof o.payloads=="string"&&(o.payloads=o.payloads.split(" ").filter(s=>!r[s]).join(" ")),Array.isArray(o.fmtp)&&(o.fmtp=o.fmtp.filter(s=>!r[s.payload])),Array.isArray(o.rtcpFb)&&(o.fmtp=o.fmtp.filter(s=>!r[s.payload]))}C&&F0(o,C),g.videoMid?(o.mid=g.videoMid,B[g.videoMid]=o):B[o.mid]=o}});const e=wA.parse((i=this._peerConnection.localDescription)===null||i===void 0?void 0:i.sdp),t=e.media.map(o=>{const r=B[o.mid];return o.direction==="inactive"?o:r});E.groups=e.groups,E.media=t,E.media.map(o=>{var r,s,v,n;o.type==="video"&&(PG?(o.ext=(r=o.ext)===null||r===void 0?void 0:r.filter(a=>a.uri.indexOf("abs-send-time")===-1),o.rtcpFb=(s=o.rtcpFb)===null||s===void 0?void 0:s.filter(a=>a.type!=="goog-remb")):(o.rtcpFb=(v=o.rtcpFb)===null||v===void 0?void 0:v.filter(a=>a.type!=="transport-cc"),o.ext=(n=o.ext)===null||n===void 0?void 0:n.filter(a=>a.uri.indexOf("transport")===-1)))}),eE&&pB(E),await this.setRemoteDescription(wA.write(E))}async getDefaultSdp(){var I,g;const C=wA.parse((I=this._peerConnection.localDescription)===null||I===void 0?void 0:I.sdp);this.createAVMlineOfferTpl((g=this._peerConnection.localDescription)===null||g===void 0?void 0:g.sdp);const Q=[];return C.media=C.media.filter(i=>i.direction==="recvonly"&&(i.mid=i.mid+1,Q.push("".concat(i.mid)),!0)),eE&&pB(C),C.groups=[{mids:Q.join(" "),type:"BUNDLE"}],{sdp:wA.write(C),semantics:"unified-plan",type:"incroffer"}}async rollback(I){let{msid:g,stream:C,audioMid:Q,videoMid:i}=I;return this.logger.warn("rollback()"),this.close(C,Q,i)}async close(I,g,C){var Q;this.logger.info("close()");const i=I.audioMid||g,B=I.videoMid||C,E={};I.audioTransceiver&&i&&(I.audioTransceiver.stop(),E[i]=i),I.videoTransceiver&&B&&(I.videoTransceiver.stop(),E[B]=B);const e=[],t=await this.peer.createOfferSdp(),o=wA.parse(t);o.media=o.media.map(v=>(E[v.mid]&&(v=TG(v)),v.direction!=="inactive"&&e.push(v.mid),p(p({},v),this.peer._offerIce)));const r=wA.parse((Q=this._peerConnection.remoteDescription)===null||Q===void 0?void 0:Q.sdp),s={};r.media.forEach(v=>{v.mid!==void 0&&(s[v.mid]=v)}),r.media=o.media.map(v=>v.direction==="inactive"?v:s[v.mid]),o.groups&&r.groups&&(o.groups[0].mids=e.join(" "),r.groups[0].mids=e.join(" ")),await this.setLocalDescription(wA.write(o)),await this.setRemoteDescription(wA.write(r))}async setCurrentDescription(){await this.peer.createOfferSdp(),this._peerConnection.localDescription&&this._peerConnection.remoteDescription&&(await this._peerConnection.setLocalDescription(this._peerConnection.localDescription),await this._peerConnection.setRemoteDescription(this._peerConnection.remoteDescription))}createAVMlineOfferTpl(I){const g=wA.parse(I);g.media.forEach(C=>{C.type==="audio"&&(this._aRecvonlyOfferTpl=C)}),eE&&pB(g)}}const TGA=(A,I)=>KI?new u5(A,I):new SGA(A,I),pGA={[bQ.ICE_FAILED]:OE.ICE_FAILED,[bQ.DC_ERROR]:OE.ICE_FAILED,[bQ.DC_CLOSE]:OE.ICE_FAILED,[bQ.NODE_CHANGE]:OE.NODE_CHANGE,[bQ.NOTIFY_RECONNECT]:OE.NOTIFY_RECONNECT,[bQ.JOIN_TIMEOUT]:OE.JOIN_TIMEOUT};class FGA extends KQ{constructor(I){super(),l(this,"_connectionManager",void 0),l(this,"_dataChannelSignal",void 0),l(this,"_state",void 0),l(this,"_connectionLostTimer",void 0),l(this,"_isReconnecting",!1),l(this,"logger",void 0),this._ctx=I,this.logger=new SA("SignalingManager",1,I.id),this.logger.info("constructor","invoke"),this._connectionManager=new MbA(I),this._addConnectorHandler()}connect(){return this.isConnected()?Promise.resolve():new Promise((I,g)=>{this._connectionManager.once("connected",()=>I()),this._connectionManager.once("disconnected",g),this._connectionManager.startup()})}reconnect(I,g){this._connectionManager.reconnect(I,g)}sendSignaling(I,g,C,Q){if(!this._dataChannelSignal)throw new K(S.NOT_CONNECTED_YET,"signaling channel is not connected");return this._dataChannelSignal.sendSignaling(I,g,C,Q)}sendP2PMessage(I,g){if(!this._dataChannelSignal)throw new K(S.NOT_CONNECTED_YET,"signaling channel is not connected");return this._dataChannelSignal.sendP2PMessage(I,g)}destroy(){var I,g;this.logger.info("destroy()"),this._clearConnectionLostTimer(),this._connectionManager.shotdown(),(I=this._ctx.handler)===null||I===void 0||I.destroy(),this._ctx.handler=void 0,(g=this._dataChannelSignal)===null||g===void 0||g.destroy(),this._state&&this._setState(CI.CONNECTION_STATE_DISCONNECTED),this.removeAllListeners()}isConnected(){return this._state===CI.CONNECTION_STATE_CONNECTED||this._state===CI.CONNECTION_STATE_RECONNECTED}isReconnecting(){return this._state===CI.CONNECTION_STATE_CONNECTING||this._state===CI.CONNECTION_STATE_RECONNECTING}_setState(I,g){if(this._state===I)return;this._state=I;const C={state:I};g&&(C.reason=pGA[g]||OE.ICE_FAILED),this.safeEmit(og.ON_CONNECTION_STATE_CHANGE,C)}_addConnectorHandler(){var I=this;this._connectionManager.on("connected",g=>{var C;this.logger.info("connectStateChange","connected"),this._clearConnectionLostTimer(),(C=this._dataChannelSignal)===null||C===void 0||C.destroy(),this._ctx.peerConnection=g.pc,this._ctx.handler=TGA(this._ctx,g.pc),this._dataChannelSignal=g.signaling,this._addSignalEventHandler(),this._setState(this._isReconnecting?CI.CONNECTION_STATE_RECONNECTED:CI.CONNECTION_STATE_CONNECTED)}),this._connectionManager.on("disconnected",g=>{this._clearConnectionLostTimer(),this._setState(CI.CONNECTION_STATE_DISCONNECTED),this.logger.error("connectStateChange","disconnected. %o",g.message),this._isReconnecting&&this.safeEmit(og.ON_RECONNECT_FAILED)}),this._connectionManager.on("connecting",()=>{this._isReconnecting=!1,this._ctx.handler=void 0,this._setState(CI.CONNECTION_STATE_CONNECTING),this.logger.info("connectStateChange","connecting")}),this._connectionManager.on("reconnecting",g=>{this._setState(CI.CONNECTION_STATE_DISCONNECTED,g),this._connectionLostTimer||(this._connectionLostTimer=setTimeout(()=>{this.safeEmit(og.ON_CONNECTION_STATE_CHANGE,{state:CI.CONNECTION_STATE_LOST})},1e4)),this._isReconnecting=!0,this._ctx.handler=void 0,this._setState(CI.CONNECTION_STATE_RECONNECTING,g),this.logger.warn("connectStateChange","reconnecting")}),this._connectionManager.on("connectWidthTcp",()=>{this.safeEmit(og.CONNECT_WITH_TCP)}),["__onGetIceConfigHook","__onIceConnectSuccessHook","__onConnectSuccessHook"].forEach(g=>{this._connectionManager.on(g,function(){for(var C=arguments.length,Q=new Array(C),i=0;i{var Q;(Q=this._dataChannelSignal)===null||Q===void 0||Q.on(C,i=>{this.safeEmit(C,i)})}),(I=this._dataChannelSignal)===null||I===void 0||I.on(IA.NODE_CHANGE,C=>{this._connectionManager.reconnectByNodeChange(C)}),(g=this._dataChannelSignal)===null||g===void 0||g.on(IA.ON_NOTIFY_RECONNECT,()=>{this._connectionManager.reconnect(bQ.NOTIFY_RECONNECT)})}}var JG=(A=>(A.NORMAL_USER="normalUser",A.SILENT_USER="silentUser",A))(JG||{});const UGA=["preferCodecName"];class kGA{constructor(I){l(this,"_captureDeviceId",void 0),l(this,"_contentHint",void 0),l(this,"_videoCaptureConf",p({},kl)),l(this,"_mainPreferCodec",void 0),l(this,"_screenPreferCodec",void 0),l(this,"_remoteVideoConfig",new Map),l(this,"_remoteSimulcastStreamType",new Map),l(this,"_simulcastMode",Be.VIDEO_ONLY_ONE),l(this,"_highVideoEncodeConf",Xo(kl)),l(this,"_midVideoEncodeConf",void 0),l(this,"_lowVideoEncodeConf",void 0),l(this,"_screenEncodeConfig",_9A),l(this,"_invalidVideoEncodeConf",void 0),l(this,"activeSimStreams",[]),l(this,"_logger",void 0),l(this,"_apiVersion",void 0),this._ctx=I,this._logger=new SA("EngineVideoProfile",1,I.id)}setCaptureDeviceId(I){this._captureDeviceId=I}setCaptureConfig(I){this._videoCaptureConf=p(p({},this._videoCaptureConf),I)}getCaptureConfig(I){I=I||this._captureDeviceId;const g=p({},this._videoCaptureConf);return I==="user"||I==="environment"||I==="left"||I==="right"?(delete g.deviceId,g.facingMode=I):I&&(!L9A||no?g.deviceId={exact:I}:delete g.deviceId),g}getContentHint(){return this._contentHint}getPreferCodec(I){return I?this._screenPreferCodec:this._mainPreferCodec}setRemoteUserVideoConfig(I,g){typeof g=="object"?this._remoteVideoConfig.set(I,g):this._remoteSimulcastStreamType.set(I,g)}getSubLayer(I,g){const C=this._remoteSimulcastStreamType.get(I.userId),Q=this._remoteVideoConfig.get(I.userId);if(C){var i,B,E,e,t,o;const{videoDescriptions:r,subVideoDescriptions:s}=I.attributes||{},v=Array.isArray(s)?s:r;let n;return v.length===1?n=0:v.length===2?n=C===Ee.VIDEO_STREAM_HIGH?0:1:v.length>=3&&(n={[Ee.VIDEO_STREAM_HIGH]:0,[Ee.VIDEO_STREAM_MID]:1,[Ee.VIDEO_STREAM_LOW]:2}[C]),{spatialLayer:(i=(B=n&&((E=v[n])===null||E===void 0?void 0:E.video_index))!==null&&B!==void 0?B:n)!==null&&i!==void 0?i:0,spatialSubLayer:(e=(t=n&&((o=v[n])===null||o===void 0?void 0:o.sub_index))!==null&&t!==void 0?t:n)!==null&&e!==void 0?e:-1}}return Q?oN(Q,I):g?oN(g,I):void 0}getSimulcastMode(){return this._simulcastMode}async setSimulcastMode(I,g){if(!mdA())throw new K(S.NOT_SUPPORTED,"Simulcast is not supported");if(this._simulcastMode!==I){if(g!=null&&g.hasPublished){var C,Q;if((C=g.localStream)!==null&&C!==void 0&&C.videoHasPublish||(Q=g.localStream)!==null&&Q!==void 0&&Q.audioHasPublish)throw new K(S.SET_SIMULCAST_FAILED,"Cannot change simulcast mode after publishing the video streams");this._logger.print("setSimulcastMode()","change simulcast mode and unpublish."),await g.unpublish()}this._simulcastMode=I,I!==Be.VIDEO_ONLY_ONE&&this._autoGenerateSubVideoEncodeConfig()}}closeSimulcast(){this._simulcastMode=Be.VIDEO_ONLY_ONE}async setVideoEncodeConfigPolyfill(I){if(Array.isArray(I)){LD(I);const[g,...C]=I;this.setVideoEncodeConfig(g),await this.setSubVideoEncodeConfig(UM(C).call(C))}else this.setVideoEncodeConfig(I)}setVideoEncodeConfig(I){LD([I]);const g=this._midVideoEncodeConf||this._lowVideoEncodeConf;g&&Ho(g)>=Ho(I)?(this._logger.warn("setVideoEncodeConfig","smaller then substream"),this._invalidVideoEncodeConf=Xo(I),I=g):delete this._invalidVideoEncodeConf;const C=p({},I),{preferCodecName:Q}=C,i=ze(C,UGA);eG(i),this._logger.print("setVideoEncodeConfig","update encode config",I),this._highVideoEncodeConf=Xo(I),this._contentHint=i.contentHint,this._mainPreferCodec=Q,this._logger.print("setVideoEncodeConfig","update capture config",i),this._videoCaptureConf=i}async setSubVideoEncodeConfig(I,g,C){if(this._logger.print("setSubVideoEncodeConfig","%o, published=%s",I,g==null?void 0:g.hasPublished),I&&I.length>0){LD(I),ws(I).call(I,(o,r)=>Ho(o)-Ho(r));const B=this._invalidVideoEncodeConf||this._highVideoEncodeConf,E=I[I.length-1];if(Ho(E)>=Ho(B))throw new K(S.SET_SIMULCAST_FAILED,"The resolution cannot exceed the mainstream");if(g!=null&&g.hasPublished&&I.length!==this._getSubLayers().length){var Q,i;if((Q=g.localStream)!==null&&Q!==void 0&&Q.videoHasPublish||(i=g.localStream)!==null&&i!==void 0&&i.audioHasPublish)throw new K(S.SET_SIMULCAST_FAILED,"Cannot change the number of substreams after publishing the video streams");await g.unpublish()}I.length>2&&(rI(this._ctx.id,"simulcast_over_limit","setLocalSimulcastMode: You can set parameters for up to 2 streams"),Ae("setLocalSimulcastMode: You can set parameters for up to 2 streams"));const[e,t]=I;e&&(rN(B,e),this._lowVideoEncodeConf=Xo(e)),t&&(rN(B,t),this._midVideoEncodeConf=Xo(t)),this._invalidVideoEncodeConf&&(this.setVideoEncodeConfig(this._invalidVideoEncodeConf),await(C==null?void 0:C.updateVideoCaptureConfig(this._ctx.videoProfile.getCaptureConfig())))}else this._autoGenerateSubVideoEncodeConfig()}genVideoDescriptions(I){var g,C;const Q=[];let i=[];const B=[],E=[];let{width:e,height:t,frameRate:o,maxKbps:r}=I.videoEncodeConfig[0];e=QI(e),t=QI(t);const s=(g=I.videoTrack)===null||g===void 0?void 0:g.preprocessingTrack,{width:v,height:n,frameRate:a}=(C=s==null?void 0:s.getSettings())!==null&&C!==void 0?C:{};v&&(e=Math.floor(v)),n&&(t=Math.floor(n)),a&&(o=Math.floor(a)),(typeof o!="number"||Number.isNaN(o))&&(o=30),Q.push({width:e,height:t,framerate:o,maxkbps:r,rid:"0"}),B.unshift({maxBitrate:1e3*r,rid:"0",maxFramerate:o});const{serverConfig:c}=this._ctx;if(!(I.isScreen||this._simulcastMode===Be.VIDEO_ONLY_ONE||KI&&(c==null?void 0:c.videoCodec)!=="VP8")){const P=ubA(e,t);if(P>1){const d=this._getSubVideoEncodeConfig(P,{width:e,height:t});this._logger.info("simulcast() ","simulcastLayers: %o",d),E.push(!0),d.forEach((h,u)=>{const D={maxBitrate:1e3*h.maxkbps,scaleResolutionDownBy:h.scaleResolutionDownBy,rid:"".concat(u+1),maxFramerate:h.frameRate};B.unshift(D),Q.push({width:h.width,height:h.height,framerate:h.frameRate,maxkbps:h.maxkbps,rid:"".concat(u+1)}),E.push(!0)}),c!=null&&c.simulcastOnDemand&&(i=Q.map((h,u)=>p(p({},h),{},{video_index:u,sub_index:u})))}}return c!=null&&c.e2eFeedback&&(i=Q.map((P,d)=>p(p({},P),{},{video_index:d,sub_index:d}))),{videoDescriptions:Q,subVideoDescriptions:i,sendEncodings:B,activeSimulcastStreams:E}}getVideoEncodeConfig(){return[this._highVideoEncodeConf,this._midVideoEncodeConf,this._lowVideoEncodeConf].filter(I=>I)}setScreenEncodeConfig(I){this._screenEncodeConfig=I}getScreenEncodeConfig(){return this._screenEncodeConfig}checkSimulcastApiVersion(I){if(this._apiVersion){if(this._apiVersion!==I){const g="mixing old and new apis, please use ".concat(this._apiVersion==="new"?"setLocalSimulcastMode/setRemoteSimulcastStreamType":"enableSimulcastMode/setRemoteVideoConfig"," instead.");throw rI(this._ctx.id,"mixingOldAndNewApis",g),new K(S.MIXING_OLD_AND_NEW_APIS,g)}}else this._apiVersion=I}destroy(){this._videoCaptureConf=kl,this._highVideoEncodeConf=Xo(kl),delete this._invalidVideoEncodeConf,this._remoteVideoConfig.clear(),this._remoteSimulcastStreamType.clear()}_autoGenerateSubVideoEncodeConfig(){this._logger.print("_autoGenerateSubVideoEncodeConfig()","generate low stream.");const I=this._highVideoEncodeConf,g=QI(I.width),C=QI(I.height),Q=Math.min(g,C)/90;this._lowVideoEncodeConf={width:Math.floor(g/Q),height:Math.floor(C/Q),maxKbps:100,frameRate:10}}_getSubLayers(){const I=[];return this._midVideoEncodeConf&&I.push(this._midVideoEncodeConf),this._lowVideoEncodeConf&&I.push(this._lowVideoEncodeConf),I}_getSubVideoEncodeConfig(I,g){return this._getSubLayers().slice(1-I).map(C=>{if(C.width>C.height&&g.widthg.height){const E=C.width;C.width=C.height,C.height=E}const Q=QI(C.width),i=QI(C.height),B=Math.max(g.width/Q,g.height/i);return{width:Math.floor(g.width/B),height:Math.floor(g.height/B),scaleResolutionDownBy:B,frameRate:QI(C.frameRate)||15,maxkbps:C.maxKbps||600}})}__autoResetVideoEncoderConfig(I){const g=q9A(this.getVideoEncodeConfig(),I);g&&(this.setVideoEncodeConfigPolyfill(g),this._logger.print("autoResetVideoEncoderConfig() result",JSON.stringify(g)),rI(this._ctx.id,"autoResetVideoEncoderConfig",JSON.stringify(g)))}}class Yb{constructor(I){l(this,"_sendTimes",[]),l(this,"_bufferSizeLimit",void 0),l(this,"_totalSizeLimitPerSecond",void 0),l(this,"_limitModeInterval",void 0),l(this,"_limitModeQPS",void 0),l(this,"_interval",void 0),l(this,"_qps",void 0),this.setLimitMode(I)}setLimitMode(I){I===Zt.LIMIT_MODE?(this._bufferSizeLimit=1,this._totalSizeLimitPerSecond=30720,this._limitModeInterval=1e3,this._limitModeQPS=60):(this._bufferSizeLimit=64,delete this._totalSizeLimitPerSecond,delete this._limitModeInterval,delete this._limitModeQPS)}setQPS(I,g){this._interval=I,this._qps=g}check(I){var g,C;const Q=Date.now(),i=V9A(I,this._bufferSizeLimit);if(typeof this._totalSizeLimitPerSecond=="number"&&this._sendTimes.reduce((e,t)=>Q-t.ts<1e3?e+t.size:e,0)+i>this._totalSizeLimitPerSecond)throw new K(S.USER_MESSAGE_EXCEED_QPS,"user message exceed total size(".concat(this._totalSizeLimitPerSecond,")"));const B=(g=this._limitModeInterval)!==null&&g!==void 0?g:this._interval,E=(C=this._limitModeQPS)!==null&&C!==void 0?C:this._qps;if(typeof B=="number"&&typeof E=="number")if(this._sendTimes.length(A.RECONNECT="ice-reconnect",A.LEAVE="leave_room",A))(D5||{});const ql=Zt.NORMAL_MODE;class YGA{constructor(I,g,C){l(this,"engineDestroyed",!1),l(this,"avSync",!0),l(this,"callId",void 0),l(this,"streamRTT",{}),l(this,"useCloudProxy",!1),l(this,"videoProfile",void 0),l(this,"audioProfileManager",void 0),l(this,"extensionManager",void 0),l(this,"userPriority",new Map),l(this,"expectedIDC",void 0),l(this,"autoPlayPolicy",void 0),l(this,"joinRoomConfig",void 0),l(this,"signalingManager",void 0),l(this,"peerConnection",void 0),l(this,"pubSubLock",new Wi("pubSubLock")),l(this,"visibility",!0),l(this,"rtsLimiter",{e2e:new Yb(ql),e2s:new Yb(ql),boradcast:new Yb(ql),conf:void 0,rtsMode:ql}),l(this,"serverConfig",void 0),l(this,"mediaParams",void 0),l(this,"subscribeFallbackOption",void 0),l(this,"joinRoomParams",void 0),l(this,"isPreConnection",!1),l(this,"_handler",void 0),l(this,"monitor",void 0),l(this,"_businessId",void 0),l(this,"_userStreamConfig",new Map),l(this,"_localAudioTrackDumpConfig",{[W.STREAM_INDEX_MAIN]:{callback:void 0,frameSize:void 0},[W.STREAM_INDEX_SCREEN]:{callback:void 0,frameSize:void 0}}),l(this,"_remoteAudioTrackDumpConfig",{[W.STREAM_INDEX_MAIN]:new Map,[W.STREAM_INDEX_SCREEN]:new Map}),l(this,"_targetCodec",void 0),l(this,"_targetScreenCodec",void 0),l(this,"earMonitorSettings",{[W.STREAM_INDEX_MAIN]:{position:GC.NONE,volume:100},[W.STREAM_INDEX_SCREEN]:{position:GC.NONE,volume:100}}),l(this,"localVideoTrack",void 0),l(this,"localAudioTrack",void 0),l(this,"publicAudioVolume",new Map),this.id=I,this.appId=g,this.monitor=bI(I),this.expectedIDC=C==null?void 0:C.expectedIDC,this.autoPlayPolicy=C==null?void 0:C.autoPlayPolicy,this.audioProfileManager=new DbA(g),this.extensionManager=new UDA(I),this.joinRoomConfig=new Qi(I),this.signalingManager=new FGA(this),this.videoProfile=new kGA(this)}set businessId(I){var g;this._businessId=I,(g=this.monitor)===null||g===void 0||g.set({rtc_business_id:I})}get businessId(){return this._businessId}set handler(I){var g;I&&this.resetPubSubLock("ice-reconnect"),(g=this._handler)===null||g===void 0||g.destroy(),this._handler=I}get handler(){return this._handler}get role(){return this.visibility?JG.NORMAL_USER:JG.SILENT_USER}set targetCodec(I){I&&[YI.H264,YI.VP8,YI.ByteVC1].forEach(g=>{I.toLowerCase()===g.toLowerCase()&&(this._targetCodec=g)})}set targetScreenCodec(I){I&&[YI.H264,YI.VP8,YI.ByteVC1].forEach(g=>{I.toLowerCase()===g.toLowerCase()&&(this._targetScreenCodec=g)})}get targetCodec(){return this._targetCodec}get targetScreenCodec(){return this._targetScreenCodec}resetPubSubLock(I){this.pubSubLock.closeReason=I,this.pubSubLock=new Wi("pubSubLock")}setUserStreamConf(I,g,C){const Q=this._userStreamConfig.get(I)||{},i=Q[g]||{};Q[g]=p(p({},i),C),this._userStreamConfig.set(I,Q)}getRemoteMirrorType(I,g){var C;return!((C=this._userStreamConfig.get(I))===null||C===void 0||(C=C[g])===null||C===void 0||!C.mirrorType)}get rtsMode(){return this.rtsLimiter.rtsMode}setRTSMode(I){this.rtsLimiter.e2e.setLimitMode(I),this.rtsLimiter.boradcast.setLimitMode(I),this.rtsLimiter.e2s.setLimitMode(I),this.rtsLimiter.rtsMode=I}setRtsQpsConf(I){this.rtsLimiter.e2e.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_e2e_qps_value),this.rtsLimiter.boradcast.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_broadcast_qps_value),this.rtsLimiter.e2s.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_e2s_qps_value),this.rtsLimiter.conf=I}destroy(){this.engineDestroyed=!0,this.signalingManager.destroy(),this.userPriority.clear(),this.avSync=!0,this._localAudioTrackDumpConfig={[W.STREAM_INDEX_MAIN]:{callback:void 0,frameSize:void 0},[W.STREAM_INDEX_SCREEN]:{callback:void 0,frameSize:void 0}},this._remoteAudioTrackDumpConfig[W.STREAM_INDEX_MAIN].clear(),this._remoteAudioTrackDumpConfig[W.STREAM_INDEX_SCREEN].clear(),this.extensionManager.destroy(),this.earMonitorSettings={[W.STREAM_INDEX_MAIN]:{position:GC.NONE,volume:100},[W.STREAM_INDEX_SCREEN]:{position:GC.NONE,volume:100}},this.publicAudioVolume.clear()}}function Oi(A,I,g){const C=g.value;return g.value=async function(){var Q;const i=await this._ctx.pubSubLock.lock();((Q=this._ctx.handler)===null||Q===void 0?void 0:Q.name)==="chrome"&&i();try{const{closeReason:o}=this._ctx.pubSubLock;if(o)throw new K(S.UNEXPECTED_ERROR,o);for(var B=arguments.length,E=new Array(B),e=0;e{this._report("rtc_ice_state",{pc_session_id:this.peerConnectionId,direction:this.direction,error_code:0,ice_state:C.toUpperCase(),message:"",peer_connection_id:this.peerConnectionId,stream_id:"",stream_user_id:""})}),g.on("disconnect",()=>{this.emit("disconnect")})}async publish(I){this._context.videoProfile.closeSimulcast(),this.stream=I;const{videoDescriptions:g,subVideoDescriptions:C,audioTransceiverInit:Q,videoTransceiverInit:i}=super.internalPublish(I);I.audioTransceiver=this._peerConnection.addTransceiver(Q.track,Q.init),I.videoTransceiver=this._peerConnection.addTransceiver(i.track,i.init),qN&&(I.initAudioEncodedTransform(),I.initVideoEncodedTransform()),this._report("rtc_begin_create_offer",{direction:"up",stream_id:"",stream_user_id:"",pc_session_id:this.peerConnectionId,vendor_mode:(I==null?void 0:I.vendorCode)||0});const B=await this.peer.createOfferSdp(),E=dA(),e=wA.parse(B);Array.isArray(e.media)&&(e.media=e.media.map(o=>{if(o.type==="video")(kQ||no)&&Array.isArray(o.ext)&&(o.ext=o.ext.filter(s=>{var v;return!(s!=null&&(v=s.uri)!==null&&v!==void 0&&v.includes("video-orientation"))})),kQ||this.addBitrateLimit(o,this._context.videoProfile.getVideoEncodeConfig()[0].maxKbps);else if(o.type==="audio"){const s=o==null?void 0:o.rtp.find(v=>v.codec==="opus");if(s&&o.fmtp){var r;const v=o.fmtp.find(n=>n.payload===s.payload);v&&(r=this._context)!==null&&r!==void 0&&r.audioProfileManager&&(v.config=this._context.audioProfileManager.getOpusConfigStr(v.config))}}return o}));const t={type:"offer",sdp:wA.write(e)};try{await this._peerConnection.setLocalDescription(t),this._report("rtc_set_description",{error_code:0,message:t.sdp||"",is_local:"1",direction:"up",stream_id:"",stream_user_id:"",elapse:dA()-E},{type:"offer"})}catch(o){throw this._report("rtc_set_description",{error_code:-1,message:o.message+t.sdp,is_local:"1",direction:"up",stream_id:"",stream_user_id:"",elapse:dA()-E},{type:"offer"}),o}return{partialSdp:t.sdp||"",audioMid:"0",videoMid:"1",type:"offer",semantics:"unified-plan",videoDescriptions:g,subVideoDescriptions:C,audioTransceiverInit:Q,videoTransceiverInit:i,peerConnectionMode:this.peerConnectionMode,peerConnectionId:this.peerConnectionId}}async subscribe(I){this.stream=I,this.direction="down",I.audioTransceiver=this._peerConnection.addTransceiver("audio",{direction:"recvonly"}),I.videoTransceiver=this._peerConnection.addTransceiver("video",{direction:"recvonly"}),qN&&(I.initAudioEncodedTransform(),I.initVideoEncodedTransform()),this._report("rtc_begin_create_offer",{direction:"down",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:this.peerConnectionId,vendor_mode:I.vendorCode||0});const g=await this.peer.createOfferSdp(),C=dA(),Q=wA.parse(g);Array.isArray(Q.media)&&(Q.media=Q.media.map(B=>{if(B.type==="audio"){const E=B==null?void 0:B.rtp.find(e=>e.codec==="opus");if(E&&B!=null&&B.fmtp){const e=B==null?void 0:B.fmtp.find(t=>t.payload===E.payload);e&&this._context&&(e.config+=";stereo=1;sprop-stereo=1")}}return B}));const i={type:"offer",sdp:wA.write(Q)};try{await this._peerConnection.setLocalDescription(i),this._report("rtc_set_description",{error_code:0,message:i.sdp||"",is_local:"1",direction:"down",stream_id:I.streamId,stream_user_id:I.userId,elapse:dA()-C},{type:"offer"})}catch(B){throw this._report("rtc_set_description",{error_code:-1,message:B.message+i.sdp,is_local:"1",direction:"down",stream_id:I.streamId,stream_user_id:I.userId,elapse:dA()-C},{type:"offer"}),B}return{partialSdp:i.sdp||"",audioMid:"0",videoMid:"1",type:"offer",semantics:"unified-plan",peerConnectionMode:this.peerConnectionMode,peerConnectionId:this.peerConnectionId}}async handleAck(I){if(I.action===hI.publish||I.action===hI.subscribe){const{signalingAck:B,videoMid:E,videoCodec:e}=I,{sdp:t}=B,o=wA.parse(t);o.media=o.media.map(v=>(v.mid===E&&e&&F0(v,e),v));const r={sdp:wA.write(o),type:"answer"},s=dA();try{var g,C;await this._peerConnection.setRemoteDescription(r),this._report("rtc_set_description",{error_code:0,message:r.sdp||"",is_local:"1",direction:"down",stream_id:((g=I.stream)===null||g===void 0?void 0:g.streamId)||"",stream_user_id:(C=I.stream)===null||C===void 0?void 0:C.userId,elapse:dA()-s},{type:"answer"})}catch(v){var Q,i;throw this._report("rtc_set_description",{error_code:-1,message:v.message+r.sdp,is_local:"1",direction:"down",stream_id:((Q=I.stream)===null||Q===void 0?void 0:Q.streamId)||"",stream_user_id:(i=I.stream)===null||i===void 0?void 0:i.userId,elapse:dA()-s},{type:"offer"}),v}typeof I.onSuccess=="function"&&I.onSuccess()}else I.action!==hI.unpublish&&I.action!==hI.unsubscribe||this.destroy();return""}destroy(){this.peer.destroy(),super.destroy()}async getDefaultSdp(){return{sdp:"",type:"offer",semantics:""}}connect(){throw new Error("Method not implemented.")}async rollback(){try{this._peerConnection.close()}catch{}}get peerConnectionId(){return this._peerConnectionId}set peerConnectionId(I){this._peerConnectionId=I}}var NGA=Object.defineProperty,ZGA=Object.getOwnPropertyDescriptor,YE=(A,I,g,C)=>{for(var Q,i=ZGA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&NGA(I,g,i),i};class _B extends KQ{constructor(I,g){super(),l(this,"_logger",void 0),l(this,"_pubBackOff",new Map),this._ctx=I,this._roomConf=g,this._logger=new SA("RoomPublisher",2,I.id)}async hasPublished(I){return!!I.audioMid&&!!I.videoMid}async publish(I){return this._publish(I)}async _publish(I){var g,C,Q,i,B,E,e,t,o,r;this._logger.info("publish()","localStream: %o",I);const{videoTrack:s}=I,{audioTrack:v}=I,n=dA();let a,{handler:c}=this._ctx;this._roomConf.vendorConfig.enableMultiVendor?[c,a]=await this._getVendorPubSdpInfo(I):a=await this._ctx.handler.publish(I),this.emit("_test_pub_sdpInfo_",a);const{audioMid:P,videoMid:d}=a;I.pubAttributes={localaudio:!!v,localvideo:!!s,videostream:I.pubVideo,audiostream:I.pubAudio,extvideo:(s==null?void 0:s.sourceType)===DI.EXTERNAL,extaudio:(v==null?void 0:v.sourceType)===DI.EXTERNAL,videoDescriptions:a.videoDescriptions,videoType:TC.NORMAL};const h={attributes:p({},I.pubAttributes),audio:!0,video:!0,screen:I.isScreen,audioMid:P,videoMid:d,sdpInfo:{msid:I.stream.id,type:a.type,sdp:a.partialSdp,semantics:a.semantics},peerConnectionMode:(g=a)===null||g===void 0?void 0:g.peerConnectionMode,supportMultiVendor:!0},u=!this._roomConf.vendorConfig.enableMultiVendor&&I.enableSimulcast&&((C=this._ctx.serverConfig)===null||C===void 0?void 0:C.simulcastOnDemand)&&((Q=a.subVideoDescriptions)===null||Q===void 0?void 0:Q.length);let D;(u||(i=this._ctx.serverConfig)!==null&&i!==void 0&&i.e2eFeedback)&&(h.attributes.subVideoDescriptions=a.subVideoDescriptions),(B=a)!==null&&B!==void 0&&B.peerConnectionId&&(h.peerConnectionId=a.peerConnectionId);try{this.emit("_test_pub_body_",h),D=await this._ctx.signalingManager.sendSignaling("publish",h)}catch(F){var y;if(F instanceof Error?this._roomConf.report("rtc_publish_stat",{result:"fail",is_screen:"0",start:n,message:"".concat(F.name,": ").concat(F.message)}):F instanceof K&&this._roomConf.report("rtc_publish_stat",{result:"fail",is_screen:"0",start:n,message:"".concat(F.code,": ").concat(F.message)}),await((y=c)===null||y===void 0?void 0:y.rollback({msid:I.stream.id,stream:I,audioMid:P,videoMid:d})),F.code>=500&&F.code<600){this.emit("_test_pub_5xx_");const U=this._getPubBackOff(I.id);if(U.retryDuration<6e4)return this._logger.info("pubRetry",I.id,U.retryDuration),await new Promise(AA=>setTimeout(AA,U.interval)),U.retryDuration+=U.interval,U.interval=U.interval>4e3?8e3:2*U.interval,I.resetStream(),this.emit(eA.PUB_RETRY,{screen:I.isScreen}),this._publish(I);this._logger.info("pubRetry","end"),this._pubBackOff.delete(I.id)}else if(F.code===403)throw new K(S.TOKEN_NO_PUBLISH_PERMISSION,F.message||"token no publish permission");throw F}var b,G;this._roomConf.report("rtc_recv_answer",{error_code:0,answer_type:(E=D)===null||E===void 0?void 0:E.relayMessage.type,sequence_id:((e=D)===null||e===void 0||(e=e.relayMessage)===null||e===void 0?void 0:e.sequenceId)||0,message:(t=D)===null||t===void 0||(t=t.relayMessage)===null||t===void 0?void 0:t.sdp,direction:"up",stream_id:"",stream_user_id:"",pc_session_id:((o=c)===null||o===void 0?void 0:o.peerConnectionId)||""}),I.isScreen?I.setVideoCaps((b=D.relayMessage.content)===null||b===void 0?void 0:b.screenCaps):I.setVideoCaps((G=D.relayMessage.content)===null||G===void 0?void 0:G.videoCaps),I.streamId=D.streamId;const L=await I.getSelectedCodec();I.currentVideoCodec=L;const m=new Promise((F,U)=>{var AA,X,Y,J,V;(AA=c)===null||AA===void 0||AA.handleAck({action:hI.publish,streamId:D.streamId,audioMid:P,videoMid:d,audioTransceiverInit:(X=a)===null||X===void 0?void 0:X.audioTransceiverInit,videoTransceiverInit:(Y=a)===null||Y===void 0?void 0:Y.videoTransceiverInit,signalingAck:{sdp:(J=D)===null||J===void 0||(J=J.relayMessage)===null||J===void 0?void 0:J.sdp,sequenceId:(V=D)===null||V===void 0||(V=V.relayMessage)===null||V===void 0?void 0:V.sequenceId},stream:I,videoCodec:L,onSuccess:()=>{this._logger.info("publish()","publish success"),F(0)},onFail:N=>{this._logger.info("publish()","publish fail"),U(N)}})});!KI&&await m,this.emit("___afterHandleAckInPub"),(u&&this._ctx.videoProfile.getSimulcastMode()===Be.VIDEO_ON_DEMAND||(r=this._ctx.serverConfig)!==null&&r!==void 0&&r.e2eFeedback)&&this.emit(EE.RSCP,[{StreamIds:[I.stream.id],Metadata:{VideoIndex:0}}],!0),I.videoMid=d,I.audioMid=P,I.subVideoDescriptions=a.subVideoDescriptions,I.remoteSdp=D.relayMessage.sdp,this._roomConf.report("rtc_publish_stat",{result:"success",is_screen:"0",start:n,message:"unknown"})}async updatePubTrack(I){this._logger.info("updatePubTrack()","localStream: %o",I);const{videoTrack:g,audioTrack:C,pubAudio:Q,pubVideo:i}=I,B=I.vendorHandler||this._ctx.handler;let E=C==null?void 0:C.preprocessingTrack;const e=g==null?void 0:g.preprocessingTrack;var t,o;if(i&&e?(I.stopBlackFrame(),await((t=I.videoTransceiver)===null||t===void 0?void 0:t.sender.replaceTrack(e)),this._updateVideoDescriptions(I)):await((o=I.videoTransceiver)===null||o===void 0?void 0:o.sender.replaceTrack(null)),Q&&E){var r;const{mixType:c,mixedAudioTrack:P}=C;P&&c!==li.PLAYOUT&&E.enabled&&(E=P),await((r=I.audioTransceiver)===null||r===void 0?void 0:r.sender.replaceTrack(E))}else{var s;await((s=I.audioTransceiver)===null||s===void 0?void 0:s.sender.replaceTrack(null)),rI(this._ctx.id,"MediaClient.updatePubTrack(audio)","null")}await this._updatePublishCodec(I),this.emit("___onAfterReplaceTrack");try{rI(this._ctx.id,"MediaClient.updatePubTrack",JSON.stringify({audioStreamTrack:ci(E),videoStreamTrack:ci(e)}))}catch{}const v={localaudio:!!C,localvideo:!!g,videostream:i,audiostream:Q,extvideo:(g==null?void 0:g.sourceType)===DI.EXTERNAL,extaudio:(C==null?void 0:C.sourceType)===DI.EXTERNAL,videoType:g?TC.NORMAL:I.pubAttributes.videoType},n={};for(const[c,P]of Object.entries(v))P!==Reflect.get(I.pubAttributes,c)&&Reflect.set(n,c,P);if(!Object.keys(n).length)return;if(I.observer){const{observer:c}=I,{audiostream:P,videostream:d,localaudio:h,localvideo:u,extaudio:D,extvideo:y}=n;u!==void 0?y!==void 0?c.setPushVideo(y):c.setEnableVideo(u):d!==void 0&&c.setUnmuteVideo(d),h!==void 0?D!==void 0?c.setPushAudio(D):c.setEnableAudio(h):P!==void 0&&c.setUnmuteAudio(P)}I.pubAttributes=p(p({},I.pubAttributes),v),I.pubAttributes.videostream||I.stopBlackFrame();const a={roomId:this._roomConf.roomId,streamId:I.streamId,attributes:n};await this._ctx.signalingManager.sendSignaling("updateStreamAttributes",a),this.emit("___onAfterUpdateSignaling"),KI&&await(B==null?void 0:B.setCurrentDescription())}async _updatePublishCodec(I){this._logger.info("updatePublishCodec()","localStream: %o",I);const{audioMid:g,videoMid:C,remoteSdp:Q,streamId:i,currentVideoCodec:B}=I,E=await I.getSelectedCodec();if(this._logger.info("updatePublishCodec()","selectedCodec: %o",E),E!==B){if(I.currentVideoCodec=E,g&&C&&i&&Q){var e;return KI&&this._ctx.handler instanceof u5&&await((e=this._ctx.handler)===null||e===void 0?void 0:e._internalChangePubCodec()),new Promise((t,o)=>{var r;(r=this._ctx.handler)===null||r===void 0||r.handleAck({action:hI.publish,streamId:i,audioMid:g,videoMid:C,signalingAck:{sdp:Q,sequenceId:-1},videoCodec:E,onSuccess:t,onFail:o,stream:I})})}{const t=["audioMid","videoMid","streamId","remoteSdp"].filter(o=>!Reflect.get(I,o));this._logger.warn("updatePublishCodec()","fast return, because params: %o",t)}}else this._logger.warn("updatePublishCodec()","selectedCodec is equal to currentVideoCodec")}async unpublish(I){this._logger.info("unpublish()","localStream: %o",I);const g={roomId:this._roomConf.roomId,initStreamId:I.initStreamId,streamId:I.streamId};this._ctx.signalingManager.sendSignaling("unpublish",g).catch(()=>{});const C=I.vendorHandler||this._ctx.handler;I.stopBlackFrame(),await(C==null?void 0:C.handleAck({action:hI.unpublish,audioMid:I.audioMid,videoMid:I.videoMid,stream:I,streamId:I.streamId}))}async updatePubBlackFrame(I){var g;const C=I.genBlackFrame();C&&((g=I.videoTransceiver)===null||g===void 0||(g=g.sender)===null||g===void 0||g.replaceTrack(C),I.pubAttributes.videoType=TC.BLACK,this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:{videoType:TC.BLACK}}),I.on("black-frame-ended",()=>{var Q;(Q=I.videoTransceiver)===null||Q===void 0||(Q=Q.sender)===null||Q===void 0||Q.replaceTrack(null),I.pubAttributes.videoType=TC.NORMAL,this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:{videoType:TC.NORMAL}})}))}async cleanStream(I){return this._logger.info("cleanStream()","localStream: %o",I),I==null?void 0:I.clean()}async destroyStream(I){return this._logger.info("destroyStream()","localStream: %o",I),I==null?void 0:I.destroy()}destroy(I){I.forEach(g=>{g&&(this.unpublish(g).catch(()=>{}),this.destroyStream(g).catch(()=>{}))}),this._pubBackOff.clear(),super.removeAllListeners()}async _updateVideoDescriptions(I){var g;const C=this._ctx.videoProfile.genVideoDescriptions(I),Q=I.pubAttributes.videoDescriptions;if(Q.length!==C.videoDescriptions.length)return;const i={};if(Q.find((e,t)=>{if(e.framerate!==C.videoDescriptions[t].framerate||e.maxkbps!==C.videoDescriptions[t].maxkbps||e.width!==C.videoDescriptions[t].width||e.height!==C.videoDescriptions[t].height)return i.videoDescriptions=C.videoDescriptions,!0}),(g=I.subVideoDescriptions)===null||g===void 0||g.find((e,t)=>{if(e.framerate!==C.subVideoDescriptions[t].framerate||e.maxkbps!==C.subVideoDescriptions[t].maxkbps||e.width!==C.subVideoDescriptions[t].width||e.height!==C.subVideoDescriptions[t].height)return i.subVideoDescriptions=C.subVideoDescriptions,!0}),Object.keys(i).length>0){var B;this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:i});const e=(B=I.videoTransceiver)===null||B===void 0||(B=B.sender)===null||B===void 0?void 0:B.getParameters();var E;rI(this._ctx.id,"sender.getParameters",JSON.stringify(e),0,I.streamId),e&&Array.isArray(e==null?void 0:e.encodings)&&(e.encodings=e.encodings.map((t,o)=>{var r;return((r=t.rid)!==null&&r!==void 0?r:e.encodings.length===1?"0":void 0)===C.sendEncodings[o].rid&&(t.maxBitrate=C.sendEncodings[o].maxBitrate,t.maxFramerate=C.sendEncodings[o].maxFramerate,t.scaleResolutionDownBy=C.sendEncodings[o].scaleResolutionDownBy),t}),this._logger.info("sender.setParameters()",JSON.stringify(e.encodings)),rI(this._ctx.id,"sender.setParameters",JSON.stringify(e),0,I.streamId),(E=I.videoTransceiver)===null||E===void 0||E.sender.setParameters(e),rI(this._ctx.id,"Handler.updateScaleResolutionDownBy",JSON.stringify(e.encodings)))}}async _getVendorPubSdpInfo(I){const g=new U0(this._ctx,"");I.vendorHandler=new b5(this._ctx,g),I.pcSessionId&&(I.vendorHandler.peerConnectionId=I.pcSessionId);const C=await I.vendorHandler.publish(I),Q=I.vendorHandler;return Q.on("ice_state",i=>{this.emit(og.ON_VENDOR_CONNECTION_STATE_CHANGE,{state:{checking:CI.CONNECTION_STATE_CONNECTING,connected:CI.CONNECTION_STATE_CONNECTED,disconnected:CI.CONNECTION_STATE_RECONNECTING}[i],userId:this._roomConf.userId})}),Q.once("disconnect",async()=>{var i;Q.removeAllListeners(),((i=this._ctx.peerConnection)===null||i===void 0?void 0:i.getIceConnectionState())==="connected"?(await this.unpublish(I),await this.publish(I),I.vendorHandler&&I.statsReport.setVar(I.vendorHandler)):this._logger.info("vendor ice failed",I.streamId)}),[Q,C]}_getPubBackOff(I){return this._pubBackOff.has(I)||this._pubBackOff.set(I,{interval:1e3,retryDuration:0}),this._pubBackOff.get(I)}}YE([pg],_B.prototype,"hasPublished"),YE([pg,Oi,LA],_B.prototype,"publish"),YE([pg,Oi,LA],_B.prototype,"updatePubTrack"),YE([pg,Oi,LA],_B.prototype,"unpublish"),YE([pg,LA],_B.prototype,"updatePubBlackFrame"),YE([pg],_B.prototype,"cleanStream"),YE([pg],_B.prototype,"destroyStream"),YE([LA],_B.prototype,"_updateVideoDescriptions");var KGA=Object.defineProperty,WGA=Object.getOwnPropertyDescriptor,XQ=(A,I,g,C)=>{for(var Q,i=WGA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&KGA(I,g,i),i};class PQ extends KQ{constructor(I,g){super(),l(this,"_logger",void 0),l(this,"_subBackOff",new Map),l(this,"_subResolves",{}),l(this,"_ontrackCallbackMap",new Map),this._ctx=I,this._roomConf=g,this._logger=new SA("RoomSubscriber",2,I.id)}async hasSubscribed(I){return I.streamState===OC.SUB_ED}async subscribe(I,g,C){if(I.streamState!==OC.SUB_ED)return this._subscribe(I,g,C);this._logger.warn("subscribe()","remoteStream ".concat(I.streamId," has been subscribed, silently return"))}async _subscribe(I,g,C){var Q,i,B,E,e,t,o,r,s,v,n,a,c,P;this._logger.info("subscribe()","mediaType: %o",g),dr("subscribe()",I,this._logger),I.streamState=OC.SUB_ING;let d=!1,h=!1;if(lg(g)&&(h=!0),vI(g)&&(d=!0),!d&&this._roomConf.isMultiChatMode())return void(I.streamState=OC.INIT);const u=dA(),D=I.subVideo,y=[];this._subResolves[I.streamId]||(this._subResolves[I.streamId]=[]),y.push(new Promise((tA,GA)=>{this._subResolves[I.streamId].push(tA);const FA=setTimeout(()=>GA(new K(S.TIME_OUT,"wait video timeout for userId: ".concat(I.userId))),6e4),WA=JI=>{JI.mediaType==="video"&&(this._logger.info("remoteStream ".concat(I.userId," received video track")),I.off("ontrack",WA),clearTimeout(FA),tA(0))};I.on("ontrack",WA)})),this._roomConf.isMultiChatMode()||y.push(new Promise((tA,GA)=>{this._subResolves[I.streamId].push(tA);const FA=setTimeout(()=>GA(new K(S.TIME_OUT,"wait audio timeout for userId: ".concat(I.userId))),6e4),WA=JI=>{JI.mediaType==="audio"&&(this._logger.info("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",WA),clearTimeout(FA),tA(0))};I.on("ontrack",WA)}));const b=tA=>{I.ontrack(tA)};(Q=this._ctx.handler)===null||Q===void 0||Q.on("ontrack",b),this._ontrackCallbackMap.set(I,b);let G,{handler:L}=this._ctx;(i=this._ctx.serverConfig)!==null&&i!==void 0&&i.forceUniHandler||!I.enableVendorMode?G=await this._ctx.handler.subscribe(I,{multiChatMode:this._roomConf.isMultiChatMode()}):[L,G]=await this._getVendorSubSdpInfo(I,b);const{audioMid:m,videoMid:F}=G;I.subVideo=d;const U={spatialLayer:(C==null?void 0:C.spatialLayer)||0,temporalLayer:0,spatialSubLayer:(C==null?void 0:C.spatialSubLayer)||-1},AA={audio:!this._roomConf.isMultiChatMode(),video:!0,data:!0,screen:I.isScreen,browser:"chrome-stable",videoMid:F,audioMid:m,sdpInfo:{sdp:(B=G)===null||B===void 0?void 0:B.partialSdp,semantics:(E=G)===null||E===void 0?void 0:E.semantics,type:(e=G)===null||e===void 0?void 0:e.type},streamUserId:I.userId,streamId:I.streamId,config:{enableMediaType:{audio:!!this._roomConf.isMultiChatMode()||h,video:d},qualityLayer:U},extra:{enableSendRTT:!0},peerConnectionMode:(t=G)===null||t===void 0?void 0:t.peerConnectionMode,supportMultiVendor:!0};(o=G)!==null&&o!==void 0&&o.peerConnectionId&&(AA.peerConnectionId=G.peerConnectionId);const{subscribeFallbackOption:X,userPriority:Y}=this._ctx;typeof X=="number"&&(AA.config.fallbackOption=X),Y.has(I.userId)&&(AA.config.priority=Y.get(I.userId)),(r=G)!==null&&r!==void 0&&r.allSsrc&&(AA.extra.subscribeSSRC=G.allSsrc);const{signalingAck:J,audioTransceiverInit:V,videoTransceiverInit:N}=G;let z;J&&(I.videoMid=F,I.audioMid=m,await new Promise((tA,GA)=>{var FA;(FA=L)===null||FA===void 0||FA.handleAck({action:hI.subscribe,streamId:I.streamId,audioMid:m,videoMid:F,audioTransceiverInit:V,videoTransceiverInit:N,signalingAck:J,stream:I,onSuccess:()=>{this._logger.info("ssrc","success"),tA(0)},onFail:WA=>{this._logger.info("ssrc","fail",WA),GA(WA)}})}));try{this.emit("_test_sub_body_",AA);const tA=this._ctx.signalingManager.sendSignaling("subscribe",AA);this.emit("_test_during_signaling_",AA),z=await tA}catch(tA){var w;if(I.streamState=OC.INIT,tA instanceof Error&&this._roomConf.report("rtc_subscribe_stat",{result:"fail",start:u,message:tA.message,stream_user_id:I.userId}),tA.code>=500&&tA.code<600){this.emit("_test_sub_5xx_");const FA=this._getSubBackOff(I.streamId);var CA;if(FA.retryDuration<6e4)return this._logger.info("subRetry",I.streamId,FA.retryDuration),await new Promise(WA=>setTimeout(WA,FA.interval)),FA.retryDuration+=FA.interval,FA.interval=FA.interval>4e3?8e3:2*FA.interval,this.emit(eA.SUB_RETRY,{screen:I.isScreen,userId:I.userId}),await((CA=L)===null||CA===void 0?void 0:CA.handleAck({action:hI.unsubscribe,streamId:I.streamId,audioMid:m,videoMid:F,stream:I})),I.resetStream(),this._subscribe(I,g,C);this._logger.info("subRetry","end",I.streamId),this._subBackOff.delete(I.streamId)}I.subVideo=D,await((w=L)===null||w===void 0?void 0:w.rollback({msid:I.streamId,stream:I}));const GA={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId};throw await this._ctx.signalingManager.sendSignaling("unsubscribe",GA).catch(()=>{}),I.streamState=OC.INIT,tA.code===403?new K(S.TOKEN_NO_SUBSCRIBE_PERMISSION,tA.message||"token no subscribe permission"):tA}if(!z.relayMessage)throw this._roomConf.report("rtc_error",{error_code:-1009,message:"relayMessage is null"}),new K(S.UNEXPECTED_ERROR,"unable to subscribe");const{audioMid:QA,videoMid:R}=(s=(v=z)===null||v===void 0?void 0:v.relayMessage)!==null&&s!==void 0?s:{},cA={[m]:QA,[F]:R};this._logger.info("sub midmap",I.userId,cA),I.videoMid=F,I.audioMid=m,I.subMediaType=g,I.streamState=OC.SUB_ED,I.subLayer=U,this._roomConf.report("rtc_recv_answer",{error_code:0,answer_type:(n=z)===null||n===void 0||(n=n.relayMessage)===null||n===void 0?void 0:n.type,sequence_id:((a=z)===null||a===void 0||(a=a.relayMessage)===null||a===void 0?void 0:a.sequenceId)||0,message:(c=z)===null||c===void 0||(c=c.relayMessage)===null||c===void 0?void 0:c.sdp,direction:"down",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:((P=L)===null||P===void 0?void 0:P.peerConnectionId)||""});try{var lA;(lA=G)!==null&&lA!==void 0&&lA.signalingAck||await new Promise((tA,GA)=>{var FA,WA,JI,zA,VI;(FA=L)===null||FA===void 0||FA.handleAck({action:hI.subscribe,streamId:I.streamId,audioMid:m,videoMid:F,audioTransceiverInit:(WA=G)===null||WA===void 0?void 0:WA.audioTransceiverInit,videoTransceiverInit:(JI=G)===null||JI===void 0?void 0:JI.videoTransceiverInit,signalingAck:{sdp:(zA=z)===null||zA===void 0||(zA=zA.relayMessage)===null||zA===void 0?void 0:zA.sdp,sequenceId:(VI=z)===null||VI===void 0||(VI=VI.relayMessage)===null||VI===void 0?void 0:VI.sequenceId},stream:I,onSuccess:()=>{this._logger.info("sub ack","success"),tA(0)},onFail:lC=>{this._logger.info("sub ack","fail",lC),GA(lC)}})}),await Promise.all(y)}catch(tA){var H;tA instanceof Error&&this._roomConf.report("rtc_subscribe_stat",{result:"fail",start:u,message:tA.message,stream_user_id:I.userId});const GA={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId};throw await this._ctx.signalingManager.sendSignaling("unsubscribe",GA).catch(()=>{}),await((H=L)===null||H===void 0?void 0:H.handleAck({action:hI.unsubscribe,streamId:I.streamId,audioMid:m,videoMid:F,stream:I})),I.streamState=OC.INIT,I.resetStream(),tA}this._roomConf.isMultiChatMode()||(I.subAudio=h),this._roomConf.report("rtc_subscribe_stat",{result:"success",start:u,message:"unknown",stream_user_id:I.userId}),I.startReport(tA=>this.emit("onRemoteStreamStats",tA),L)}async unsubscribe(I){var g,C;dr("unsubscribe()",I,this._logger);const Q={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId},i=I.vendorHandler||this._ctx.handler;this._ctx.signalingManager.sendSignaling("unsubscribe",Q).catch(()=>{}),I.streamState=OC.INIT,I.subVideo=!1,(g=I.observer)===null||g===void 0||g.setSubscribeVideo(!1),!this._roomConf.isMultiChatMode()&&((C=I.observer)===null||C===void 0||C.setSubscribeAudio(!1));const B=await(i==null?void 0:i.handleAck({action:hI.unsubscribe,streamId:I.streamId,audioMid:I.audioMid,videoMid:I.videoMid,stream:I}));this._subResolves[B]&&this._subResolves[B].forEach(E=>E(0)),this._logger.info("unsubscribe","clean unsub ".concat(I.userId)),I.clean(),I.subMediaType=GQ.NONE,this._removeOnTrackListener(I),I.statsReport.unsubscribe()}async unsubscribe4removeTrack(I,g,C){var Q,i,B,E;if(dr("unsubscribe4removeTrack()",I,this._logger),this._logger.info("unsubscribe4removeTrack()","sequenceId: ",g.sequenceId,"trackType: ",C),g.sequenceId{this.emit(og.ON_VENDOR_CONNECTION_STATE_CHANGE,{state:{checking:CI.CONNECTION_STATE_CONNECTING,connected:CI.CONNECTION_STATE_CONNECTED,disconnected:CI.CONNECTION_STATE_RECONNECTING}[B],userId:I.userId})}),Q.once("disconnect",async()=>{var B;if(Q==null||Q.removeAllListeners(),((B=this._ctx.peerConnection)===null||B===void 0?void 0:B.getIceConnectionState())!=="connected")return void this._logger.info("vendor ice failed",I.streamId);const E=I.subMediaType;await this.unsubscribe(I),await this.subscribe(I,E),I.vendorHandler&&I.statsReport.setVar(I.vendorHandler),this.emit(eA.RESUBSCRIBE,{stream:I})}),[Q,i]}async subscribe4pushTrack(I,g){var C,Q,i;this._logger.info("subscribe4pushTrack()","streamInfo: %o",g),dr("subscribe4pushTrack()",I,this._logger),I.subAudio=!0;const B=await((C=this._ctx.handler)===null||C===void 0?void 0:C.subscribe(I,{multiChatMode:this._roomConf.isMultiChatMode()}));if(!B)throw new K(S.ADD_TRANSCEIVER_FAILED,"add transceiver failed");const{audioMid:E}=B,{videoMid:e}=B,t=[];t.push(new Promise((r,s)=>{const v=setTimeout(()=>s(new K(S.TIME_OUT,"wait audio timeout for userId: ".concat(I.userId))),6e4),n=a=>{a.mediaType==="audio"&&(this._logger.success("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",n),clearTimeout(v),r(0))};I.on("ontrack",n)}));const o=r=>{I.ontrack(r)};(Q=this._ctx.handler)===null||Q===void 0||Q.on("ontrack",o),this._ontrackCallbackMap.set(I,o),await((i=this._ctx.handler)===null||i===void 0?void 0:i.handleAck({action:hI.pushtrack,streamId:I.streamId,audioMid:E,videoMid:e,stream:I,audioTransceiverInit:B==null?void 0:B.audioTransceiverInit,videoTransceiverInit:B==null?void 0:B.videoTransceiverInit,signalingAck:g==null?void 0:g.message})),await Promise.all(t),I.videoMid=e,I.audioMid=E,I.startReport(r=>this.emit("onRemoteStreamStats",r),this._ctx.handler)}async updateUserAttributes(I){this._logger.info("updateUserAttributes()","attributes: %o",I),await this._ctx.signalingManager.sendSignaling("updateUserAttributes",{roomId:this._roomConf.roomId,sessionId:this._roomConf.sessionId,attributes:I})}async updateSubTrackLayer(I,g){if(this._logger.info("updateSubTrack()","subLayer: %o",g),I.subLayer.spatialLayer===g.spatialLayer&&I.subLayer.spatialSubLayer===g.spatialSubLayer)return void this._logger.warn("updateSubTrack()","subLayer no change");const C={roomId:this._roomConf.roomId,streamList:[I.streamId],streamId:I.streamId,streamUserId:I.userId,config:{qualityLayer:g}};return await this._ctx.signalingManager.sendSignaling("updateSubscribe",C),this.emit("___afterUpdateSubscribeSend"),I.subLayer=g,I}async updateSubPriority(I,g){if(this._logger.info("updateSubPriority()","priority: %o",g),I.priority===g)return this._logger.warn("updateSubPriority()","priority no change"),I;const C={roomId:this._roomConf.roomId,streamList:[I.streamId],streamId:I.streamId,streamUserId:I.userId,config:{priority:g}};return await this._ctx.signalingManager.sendSignaling("updateSubscribe",C),I.priority=g,I}async updateSubMediaType(I,g){var C;let Q=!1,i=!1;lg(g)&&(i=!0),vI(g)&&(Q=!0);const B={roomId:this._roomConf.roomId,streamList:[I.streamId],config:{enableMediaType:{video:Q,audio:!!this._roomConf.isMultiChatMode()||i}}};var E;return await this._ctx.signalingManager.sendSignaling("updateSubscribe",B),this._roomConf.isMultiChatMode()||((E=I.observer)===null||E===void 0||E.setUnmuteAudio(i),I.subAudio=i),(C=I.observer)===null||C===void 0||C.setUnmuteVideo(Q),I.subVideo=Q,I.subMediaType=g,I}async cleanStream(I){this._logger.info("cleanStream()","stream: %o",I),I==null||I.clean()}destroyStream(I){this._logger.info("destroyStream()","stream: %o",I),I==null||I.destroy()}destroy(I){var g;this._logger.info("destroy()","remoteStream: %o",I),I.forEach(C=>{this.unsubscribe(C).catch(()=>{}),this.destroyStream(C)}),this._subBackOff.clear(),this._ontrackCallbackMap.forEach((C,Q)=>{this._removeOnTrackListener(Q),this._ontrackCallbackMap.delete(Q)}),this._subResolves={},(g=this._ctx.handler)===null||g===void 0||g.removeAllListeners("ontrack"),super.removeAllListeners()}_getSubBackOff(I){return this._subBackOff.has(I)||this._subBackOff.set(I,{interval:1e3,retryDuration:0}),this._subBackOff.get(I)}}XQ([pg],PQ.prototype,"hasSubscribed"),XQ([pg,Oi,LA],PQ.prototype,"subscribe"),XQ([pg,Oi,LA],PQ.prototype,"unsubscribe"),XQ([pg,Oi,LA],PQ.prototype,"unsubscribe4removeTrack"),XQ([LA],PQ.prototype,"handleRemoveStream"),XQ([pg,Oi,LA],PQ.prototype,"subscribe4pushTrack"),XQ([pg,LA],PQ.prototype,"updateUserAttributes"),XQ([pg,LA],PQ.prototype,"updateSubTrackLayer"),XQ([pg,LA],PQ.prototype,"updateSubPriority"),XQ([pg],PQ.prototype,"updateSubMediaType"),XQ([pg],PQ.prototype,"cleanStream"),XQ([pg],PQ.prototype,"destroyStream");const _N={[LC.communication]:[0],[LC.chat]:[0],[LC.chatRoom]:[1,"IES_chatroom"],[LC.coHost]:[1,"IES_PK"],[LC.meeting]:[16],[LC.classRoom]:[0]};class rs extends KQ{constructor(I,g){super(),l(this,"_logger",void 0),l(this,"_authorization",void 0),l(this,"_joinRoom5xxTimer",void 0),l(this,"_joinTask",void 0),l(this,"_sdpInfo",void 0),this._ctx=I,this._roomConf=g,this._logger=new SA("RoomJoin",2,I.id),this._logger.info("constructor","invoke")}join(){let I,g,C=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this._logger.info("join()");const Q=new Promise((i,B)=>{I=i,g=B,this._callJoinRoom(C).catch(E=>{const e=Array.isArray(E)&&E.length>0?E[0]:E;this._joinRoomFailed(e.message)})});return this._joinTask&&C?this._joinTask.startTime=dA():(this._joinTask={startTime:dA(),success:I,fail:g},this._roomConf.joinPromise=Q),this._reportJoinRoomStart(),Q}async updateToken(I){if(this._logger.info("updateToken()","newToken: %o",I),!this._ctx.appId||!this._roomConf.userId||!this._roomConf.roomId)return;const g={roomId:this._roomConf.roomId,userId:this._roomConf.userId,appId:this._ctx.appId,token:"Bearer ".concat(I)};try{await this._ctx.signalingManager.sendSignaling("updateToken",g)}catch{throw new K(S.UPDATE_TOKEN_WITH_INVALID_TOKEN,"invoke updateToken with an invalid token")}}async leave(){this._logger.info("leave()"),this._stopJoinRoom5xxRetry(),this._joinRoomFailed("leave_room");const I={Authorization:this._authorization,roomId:this._roomConf.roomId,sessionId:this._roomConf.sessionId};if(await this._ready2join(),!this._ctx.signalingManager.isConnected())return Promise.reject(new K(S.NOT_CONNECTED_YET,"server not connected"));await this._ctx.signalingManager.sendSignaling("leaveRoom",I,this._roomConf.rtsOnlySignalHeader)}destroy(){this._logger.info("destroy()"),this._joinRoomFailed("leave_room"),this._authorization=void 0,this._stopJoinRoom5xxRetry(),this.removeAllListeners()}async _ready2join(){var I;return await this._ctx.signalingManager.connect(),this._sdpInfo||(this._sdpInfo=await((I=this._ctx.handler)===null||I===void 0?void 0:I.getDefaultSdp())),rs.supportedCodecs||(rs.supportedCodecs=await Mn()),{sdpInfo:this._sdpInfo,supportedCodecs:rs.supportedCodecs}}async _callJoinRoom(I){var g,C;this._logger.info("_callJoinRoom","invoke"),delete this._sdpInfo;const{appId:Q,role:i,businessId:B,useCloudProxy:E,joinRoomParams:e,mediaParams:t}=this._ctx,{sdpInfo:o,supportedCodecs:r}=await this._ready2join(),s={Authorization:Pg.token2auth(Q,this._roomConf.roomId,this._roomConf.userId,this._roomConf.token),sessionId:this._roomConf.sessionId,timestamp:Date.now(),controlMessage:this._roomConf.getLiveControlMessage(),userAttributes:{extra_info:this._roomConf.userInfo.extraInfo,role:i},sdpInfo:o,params:{supportedCodecs:r,userAgent:window.navigator.userAgent,sdkVersion:fA.VERSION,deviceId:oI.getDeviceId(),appId:Q,roomId:this._roomConf.roomId,userId:this._roomConf.userId,businessId:B,enableCloudProxy:E,channelProfile:_N[this._roomConf.roomProfileType]?"".concat(_N[this._roomConf.roomProfileType][0]):"0",SDKCodecNegotiation:yA("SDK_CODEC_NEGOTIATION"),sdkType:"rtc",joinRoomMode:this._roomConf.isRTSOnlyRoom()?2:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=fA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0}};if(yA("AREA_CODE")==="AREA_CODE_US_OPCO"&&(s.params.mediaArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}])),e)for(const[u,D]of Object.entries(e))s.params[u]=D;t&&(s.mediaParams=t),yA("SIGNAL_CROP_JOINROOM")&&(C=s.sdpInfo)!==null&&C!==void 0&&C.sdp&&(s.sdpInfo.sdp=KbA(s.sdpInfo.sdp)),Promise.resolve().then(()=>this.emit("onSendingJoinMessageHook"));try{var v,n,a,c;const u=I?"reconnected":"joinRoom",D=await this._joinRoomWithRetry(u,s);this._logger.success("join","send join message success");const{engine_WEB:y,_abtest_vid:b}=D.config||{};var P,d,h;this._authorization=s.Authorization,oI.setEngineWebConfig(this._ctx.appId,this._roomConf.roomId,y),this._ctx.serverConfig={videoCodec:y==null?void 0:y.video_codec,audioRed:!(y==null||!y.pub_audio_red),muteReplaceUnsub:!((v=D.config)===null||v===void 0||!v.mute_replace_unsub),simulcastOnDemand:((n=D.config)===null||n===void 0||(n=n.engine_VPM)===null||n===void 0||(n=n.ondemand)===null||n===void 0?void 0:n.enable)!==!1,forceUniHandler:((a=D.config)===null||a===void 0||(a=a.vendor_param)===null||a===void 0?void 0:a.vendor_stream_sub_mode)===1,e2eFeedback:y==null?void 0:y.e2e_feedback},yA("SDK_CODEC_NEGOTIATION")&&(this._ctx.targetCodec=(P=D.config)===null||P===void 0?void 0:P.targetCodec,this._ctx.targetScreenCodec=(d=D.config)===null||d===void 0?void 0:d.targetScreenCodec),typeof(y==null?void 0:y.av_sync)=="boolean"&&(this._ctx.avSync=y.av_sync),this._roomConf.rtcVid=b,D.vendorConfig&&this._roomConf.setVendorConfig(D.vendorConfig),RC.setAudioStallConfig(y),(c=D.relayMessage)!==null&&c!==void 0&&c.sdp&&((h=this._ctx.handler)===null||h===void 0||h.createAVMlineAnswerTpl(D.relayMessage.sdp)),this.emit(eA.JOIN_SUCCESS,{joinRes:D,reconnect:I}),this._joinRoomSuccess(D)}catch(u){const D={461:S.ROOM_FORBIDDEN,462:S.USER_FORBIDDEN};(u==null?void 0:u.code)>=700&&(u==null?void 0:u.code)<800?this._joinRoomFailed("token_error",S.INVALID_TOKEN):D[u==null?void 0:u.code]?this._joinRoomFailed((u==null?void 0:u.message)||D[u==null?void 0:u.code],D[u==null?void 0:u.code]):(u==null?void 0:u.code)===S.TIME_OUT&&this._ctx.joinRoomConfig.useTcpAfterJoinTimeout?(this._logger.error("join",bQ.JOIN_TIMEOUT),this.safeEmit(eA.ON_REJOIN_WITH_TCP),this._ctx.signalingManager.reconnect(bQ.JOIN_TIMEOUT,!0)):u.code===S.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting()||this._joinRoomFailed((u==null?void 0:u.message)||"signaling_error")}}_joinRoomWithRetry(I,g,C){return new Promise((Q,i)=>{this._ctx.signalingManager.sendSignaling(I,g,this._roomConf.rtsOnlySignalHeader,1e4).then(B=>{this.emit("onJoinRoomAck",B),Q(B)}).catch(B=>{if(C=C||new WX,B.code>=500&&B.code<600&&dA()-C.initTs<6e4){const E=C.getRetryDelay();return this._logger.warn("_joinRoomWithRetry","joinRoom failed(code: ".concat(B.code,"), will retry after ").concat(E,"ms")),void(this._joinRoom5xxTimer=setTimeout(()=>{delete this._joinRoom5xxTimer,this._joinRoomWithRetry(I,g,C).then(Q).catch(i)},E))}i(B)})})}_stopJoinRoom5xxRetry(){this._joinRoom5xxTimer&&(clearTimeout(this._joinRoom5xxTimer),delete this._joinRoom5xxTimer)}_reportJoinRoomStart(){this._joinTask&&(this.emit("__joinRoomStartReport"),this._roomConf.report("join_room",{type:"begin",start:this._joinTask.startTime,result:!1,reason:""},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}))}_joinRoomSuccess(I){this._joinTask&&(this._joinTask.success(I),this.emit("__joinRoomSuccessReport"),this._roomConf.report("join_room",{type:"end",start:this._joinTask.startTime,result:!0,reason:""},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}),this._roomConf.report("rtc_join_room",{error_code:0,deviceModel:"web",deviceManufacturer:"web",elapse:dA()-this._joinTask.startTime}),delete this._joinTask,delete this._roomConf.joinPromise)}_joinRoomFailed(I,g){this._joinTask&&(this._joinTask.fail(new K(g||S.JOIN_ROOM_FAILED,I)),this.emit("__joinRoomFailedReport"),this._roomConf.report("join_room",{type:"end",start:this._joinTask.startTime,result:!1,reason:I},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}),delete this._joinTask,delete this._roomConf.joinPromise)}}l(rs,"supportedCodecs",void 0);var JGA=Object.defineProperty,VGA=Object.getOwnPropertyDescriptor,Nb=(A,I,g,C)=>{for(var Q,i=VGA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&JGA(I,g,i),i};class n9{constructor(I,g){l(this,"_logger",void 0),this._ctx=I,this._roomConf=g,this._logger=new SA("RoomMessage",2,I.id)}sendUserMessage(I,g){return this._ctx.signalingManager.sendP2PMessage({to:I,from:this._roomConf.userId,room:this._roomConf.roomId,app:this._ctx.appId,msg:g})}async sendRoomMessage(I,g){const C={clientId:this._roomConf.userId,binary:g,message:"",roomId:this._roomConf.roomId};return C.message=g?await Pg.ab2b64str(I):I,this._ctx.signalingManager.sendSignaling("customMessage",C,this._roomConf.rtsOnlySignalHeader)}async controlMessage(I){this._logger.info("controlMessage()","params: %o",I);const g=I;I.type==="transcode"&&(g.roomId=this._roomConf.roomId),await this._ctx.signalingManager.sendSignaling("controlMessage",g)}}Nb([LA],n9.prototype,"sendUserMessage"),Nb([LA],n9.prototype,"sendRoomMessage"),Nb([LA],n9.prototype,"controlMessage");var zGA=Object.defineProperty,MGA=Object.getOwnPropertyDescriptor,RI=(A,I,g,C)=>{for(var Q,i=MGA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&zGA(I,g,i),i};const $N={audiostream:!0,extaudio:!1,extvideo:!1,localaudio:!0,localvideo:!1,videoDescriptions:[],videostream:!1,publishTime:0};class PI extends KQ{constructor(I,g){super(),l(this,"_localStream",void 0),l(this,"_localScreenStream",void 0),l(this,"_remoteUsers",new Map),l(this,"_remoteStreams",new Map),l(this,"_remoteStreamStreamIdUserIdMap",{}),l(this,"_virtualStreams",[]),l(this,"_serverConfig",void 0),l(this,"_userDuplicateLoginTimerMap",new Map),l(this,"_networkQualityManager",void 0),l(this,"_videoSizeObserver",void 0),l(this,"_hasPublished",!1),l(this,"_subtitleTool",void 0),l(this,"_csrcUserIdMap",{}),l(this,"_publishOnDemandItem",void 0),l(this,"_onceTriggerBySignal",!1),l(this,"_pubTransceiverReady",!1),l(this,"_publishOnDemandBusy",!1),l(this,"logger",void 0),l(this,"_forwardStreamManager",void 0),l(this,"_publisher",void 0),l(this,"_subscriber",void 0),l(this,"_roomJoin",void 0),l(this,"_roomMessage",void 0),l(this,"_clearSignalListeners",void 0),this.config=I,this._ctx=g,this.logger=new SA("Room",1,g.id),this.logger.info("constructor","invoke"),this._publisher=new _B(g,I),this._addPublisherListeners(),this._subscriber=new PQ(g,I),this._addSubscriberListeners(),this._roomJoin=new rs(g,I),this._addJoinRoomHandler(),this._forwardStreamManager=new hr(g,I),this._addForwardStreamListeners(),this._roomMessage=new n9(g,I),this._networkQualityManager=new ibA(g),this._networkQualityManager.reportor=this._reportNetworkQuality.bind(this),this._videoSizeObserver=new BbA(this),this._videoSizeObserver.onchange=this._emitVideoSizeChange.bind(this),this._addSignalListeners()}get remoteUsers(){return this._remoteUsers}get remoteStreams(){return this._remoteStreams}get localStream(){return this._localStream}get localScreenStream(){return this._localScreenStream}get virtualStreams(){return this._virtualStreams}_addSignalListeners(){const I={[IA.ON_ADD_STREAM]:this._onAddStream.bind(this),[IA.ON_ADD_STREAM_LIST]:g=>{g&&Array.isArray(g.streamList)&&g.streamList.forEach(C=>this._onAddStream(C))},[IA.ON_REMOVE_STREAM]:this._onRemoveStream.bind(this),[IA.ON_REMOVE_STREAM_LIST]:g=>{g&&Array.isArray(g.streamList)&&g.streamList.forEach(C=>this._onRemoveStream(C))},[IA.USER_CONNECTION]:this._onUserConnection.bind(this),[IA.USER_CONNECTION_LIST]:g=>{g&&Array.isArray(g.userList)&&g.userList.forEach(C=>this._onUserConnection(C))},[IA.USER_DISCONNECTION]:this._onUserDisconnection.bind(this),[IA.USER_DISCONNECTION_LIST]:g=>{g&&Array.isArray(g.userList)&&g.userList.forEach(C=>this._onUserDisconnection(C))},[IA.ON_UPDATE_ROOM_ATTRIBUTES]:this._onUpdateRoomAttributes.bind(this),[IA.ON_UPDATE_USER_ATTRIBUTES]:this._onUpdateUserAttributes.bind(this),[IA.ON_UPDATE_STREAM_ATTRIBUTES]:this._onUpdateStreamAttributes.bind(this),[IA.ON_PUSH_TRACK]:this._onPushTrack.bind(this),[IA.ON_REMOVE_TRACK]:this._onRemoveTrack.bind(this),[IA.ON_CUSTOM_MESSAGE]:this._onCustomMessage.bind(this),[IA.USER_MESSAGE_RECEIVED]:this._onUserMessageReceived.bind(this),[IA.USER_BINARY_MESSAGE_RECEIVED]:this._onUserBinaryMessageReceived.bind(this),[IA.POST_PROCESSING_MESSAGE]:this._onPostProcessingMessage.bind(this),[IA.ON_USER_TOKEN_WILL_EXPIRE]:this._onUserTokenWillExpire.bind(this),[IA.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE]:this._onUserTokePublishPrivilegeWillExpire.bind(this),[IA.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED]:this._onUserTokenPublishPrivilegeDidExpire.bind(this),[IA.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE]:this._onUserTokeSubscribePrivilegeWillExpire.bind(this),[IA.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED]:this._onUserTokenSubscribePrivilegeDidExpire.bind(this),[IA.STREAM_CONTROL_MESSAGE]:this._onStreamControlMessage.bind(this),[IA.ENGINE_CONTROL_MESSAGE]:this._onEngineControlMessage.bind(this),[IA.ON_STREAM_FAILED]:this._onStreamFailed.bind(this),[EE.RTT]:this._onRTT.bind(this),[EE.SSC]:this._onSSC.bind(this),[og.ON_CONNECTION_STATE_CHANGE]:this._onConnectionStateChange.bind(this),[IA.ON_SPEAKER_CHANGE]:this._onMeetingSpeakerChange.bind(this),[IA.ON_FORWARD_DST_ROOM_USER_KICK]:this._forwardStreamManager.onForwardDstRoomUserKick.bind(this._forwardStreamManager),[EE.RSCP]:this._onRSCP.bind(this)};Object.keys(I).forEach(g=>{this._ctx.signalingManager.on(g,I[g])}),this._clearSignalListeners=()=>{Object.keys(I).forEach(g=>{this._ctx.signalingManager.off(g,I[g])})}}_addPublisherListeners(){this._publisher.on(eA.PUB_RETRY,I=>{this.emit(eA.PUB_RETRY,I)}),this._publisher.on(EE.RSCP,this._onRSCP.bind(this)),this._publisher.on(og.ON_VENDOR_CONNECTION_STATE_CHANGE,I=>this.emit(og.ON_VENDOR_CONNECTION_STATE_CHANGE,I))}_addSubscriberListeners(){this._subscriber.on(og.ON_VENDOR_CONNECTION_STATE_CHANGE,I=>this.emit(og.ON_VENDOR_CONNECTION_STATE_CHANGE,I)),this._subscriber.on("onRemoteStreamStats",I=>{this._networkQualityManager.updateDownlinkStats(I,this._findRemoteStreamByScreen(I.userId,I.isScreen)),yA("HIDDEN_STATS")||(I=xC(I)),this.emit(eA.ON_REMOTE_STREAM_STATS,I)}),this._subscriber.on(eA.RESUBSCRIBE,I=>{this.emit(eA.RESUBSCRIBE,I)}),this._subscriber.on(eA.SUB_RETRY,I=>{this.emit(eA.SUB_RETRY,I)})}_addJoinRoomHandler(){this._roomJoin.on(eA.JOIN_SUCCESS,this._onJoinSucc.bind(this)),this._roomJoin.on(eA.ON_REJOIN_WITH_TCP,()=>{this.emit(eA.ON_REJOIN_WITH_TCP)})}_addForwardStreamListeners(){this._forwardStreamManager.on(eA.ON_FORWARD_STREAM_ERROR,I=>{this.safeEmit(eA.ON_FORWARD_STREAM_ERROR,I)})}_onLocalStreamStats(I){const g=I.isScreen?this._localScreenStream:this.localStream;this._networkQualityManager.updateUplinkStats(I,g),yA("HIDDEN_STATS")||(I=xC(I)),this.emit(eA.ON_LOCAL_STREAM_STATS,I)}async join(){this.logger.info("join()"),this.config.startJoinTimestamp=dA();try{var I;const g=await this._roomJoin.join();return this._ctx.callId=g.callId,(I=g.roomAttributes)!==null&&I!==void 0&&I.multiChatMode&&this._handleFFAudioTrack(),this._initSubtitleTool(),{users:g.clients,streams:g.streams}}catch(g){if(g.code!==S.OPERATION_CANCEL)throw g}}async hasScreenPublished(){return!!this._localScreenStream&&this._publisher.hasPublished(this._localScreenStream)}async hasPublished(){return!!this._localStream&&this._publisher.hasPublished(this._localStream)}async publishScreen(I,g,C,Q){this.logger.info("publishScreen()"),this._localScreenStream||(this._localScreenStream=new R0(this._ctx,W.STREAM_INDEX_SCREEN),this.config.vendorConfig.enableMultiVendor&&(this._localScreenStream.pcSessionId=UC()),this._localScreenStream.isScreen=!0,this._localScreenStream.observer=new wG(this._ctx,this._localScreenStream));let i=!1,B=!1,E=!1,e=!1;!this._localScreenStream.videoTrack&&I?(I.sourceType===DI.EXTERNAL&&(B=!0),i=!0):this._localScreenStream.videoTrack&&!I&&(i=!1),!this._localScreenStream.audioTrack&&g?(g.sourceType===DI.EXTERNAL&&(e=!0),E=!0):this._localScreenStream.audioTrack&&!g&&(E=!1),this._localScreenStream.videoTrack=I,this._localScreenStream.audioTrack=g,C&&(lg(C)&&(this._localScreenStream.pubAudio=Q===$C.PUB),vI(C)&&(this._localScreenStream.pubVideo=Q===$C.PUB),this.logger.info("publishScreen mediaType","pubAudio: %o, pubVideo: %o",this._localScreenStream.pubAudio,this._localScreenStream.pubVideo));const t=await this._publisher.hasPublished(this._localScreenStream);if(!this._localScreenStream.pubAudio&&!this._localScreenStream.pubVideo)return t?this.unpublishScreen():void 0;if(t){var o,r,s,v;B?(o=this._localScreenStream.observer)===null||o===void 0||o.setPushVideo(i):(r=this._localScreenStream.observer)===null||r===void 0||r.setEnableVideo(i),e?(s=this._localScreenStream.observer)===null||s===void 0||s.setPushAudio(E):(v=this._localScreenStream.observer)===null||v===void 0||v.setEnableAudio(E),await this.updatePubScreenTrack()}else{var n;(n=this._localScreenStream.observer)===null||n===void 0||n.setPublish(!0),await this._publisher.publish(this._localScreenStream)}this._localScreenStream.pubAudio||this._localScreenStream.pubVideo?this._ctx.handler&&this._localScreenStream.startReport(this._onLocalStreamStats.bind(this),this._localScreenStream.vendorHandler||this._ctx.handler):this._localScreenStream.stopReport("unpublish screen")}async updatePubScreenTrack(){this.logger.info("updatePubScreenTrack","Invoke updatePubScreenTrack"),this._localScreenStream&&await this._publisher.updatePubTrack(this._localScreenStream)}async unpublishScreen(){var I;this.logger.info("unpublish","Invoke unpublishScreen"),this._localScreenStream&&((I=this._localScreenStream.observer)===null||I===void 0||I.setPublish(!1),await this._publisher.unpublish(this._localScreenStream),this._localScreenStream.stopReport("unpublish screen"),await this._publisher.cleanStream(this._localScreenStream),this._localScreenStream=void 0)}async liveControlMessage(I){var g;this.logger.info("controlMessage","Invoke controlMessage"),(g=I.transcodeMeta)===null||g===void 0||g.layout.regions.forEach(C=>{C.roomID=this.config.roomId}),this.config.setLiveControlMessage(I.action==="stopped"?void 0:I);try{await this._roomMessage.controlMessage(I)}catch(C){if(I.action!=="stopped")throw C}}async publicStreamControlMessage(I){I.action==="stopped"&&delete I.publicStreamMeta,await this._roomMessage.controlMessage(I)}getLocalStreamStats(){var I;return(I=this.localStream)===null||I===void 0?void 0:I.getLocalStreamStats()}async updateUserAttributes(){this.logger.info("updateUserAttributes","Invoke updateUserAttributes"),await this._subscriber.updateUserAttributes({role:this._ctx.role})}async publish(I,g,C,Q){let i=arguments.length>4&&arguments[4]!==void 0&&arguments[4];this.logger.info("publish","Invoke publish");let B=!1;this._localStream||(this._localStream=new R0(this._ctx),this.config.vendorConfig.enableMultiVendor&&(this._localStream.pcSessionId=UC()),this._localStream.observer=new wG(this._ctx,this._localStream),B=!0,this._localStream.vendorCode=this.config.vendorConfig.vendorCode||0),this._localStream.videoTrack=I,this._localStream.audioTrack=g;const{pubAudio:E,pubVideo:e}=this._localStream;if(C&&(lg(C)&&(this._localStream.pubAudio=Q===$C.PUB),vI(C)&&(this._localStream.pubVideo=Q===$C.PUB),this.logger.info("publish mediaType","pubAudio: %o, pubVideo: %o",this._localStream.pubAudio,this._localStream.pubVideo)),await this._publisher.hasPublished(this._localStream))try{this.emit("___onMediaServerClientPublish"),await this.updatePubTrack()}catch(P){throw this._localStream.pubAudio=E,this._localStream.pubVideo=e,P}else{if(!this._localStream.pubAudio&&!this._localStream.pubVideo)return;try{var t;if(i)(t=this._localStream.observer)===null||t===void 0||t.setLogin(!0);else if(B){var o,r;const P=!!this._localStream.videoTrack,d=!!this._localStream.audioTrack,h=((o=this._localStream.videoTrack)===null||o===void 0?void 0:o.sourceType)===DI.EXTERNAL,u=((r=this._localStream.audioTrack)===null||r===void 0?void 0:r.sourceType)===DI.EXTERNAL;if(this.config.isAutoPublish&&!this._hasPublished){var s,v,n,a;P&&(h?(s=this._localStream.observer)===null||s===void 0||s.setPushVideo(!0):(v=this._localStream.observer)===null||v===void 0||v.setEnableVideo(!0)),d&&(u?(n=this._localStream.observer)===null||n===void 0||n.setPushAudio(!0):(a=this._localStream.observer)===null||a===void 0||a.setEnableAudio(!0))}else{var c;(c=this._localStream.observer)===null||c===void 0||c.setPublish(!0)}}this.emit("___onMediaServerClientPublish"),await this._publisher.publish(this._localStream),this._hasPublished=!0,this.emit(eA.ON_PUBLISH_RESULT,{isScreen:!1,state:wB.PUBLISH_SUCC})}catch(P){throw this.emit(eA.ON_PUBLISH_RESULT,{isScreen:!1,state:wB.PUBLISH_FAIL,errorCode:P.code}),delete this._localStream,P}}this._localStream.pubAudio||this._localStream.pubVideo?this._ctx.handler&&this._localStream.startReport(this._onLocalStreamStats.bind(this),this._localStream.vendorHandler||this._ctx.handler):this._localStream.stopReport("unpublish")}async updatePubTrack(){this.logger.info("updatePubTrack","Invoke updatePubTrack"),this._localStream&&await this._publisher.updatePubTrack(this._localStream)}async unpublish(){this.logger.info("unpublish","Invoke unpublish"),this._localStream&&(await this._publisher.unpublish(this._localStream),this._localStream.stopReport("unpublish"),await this._publisher.cleanStream(this._localStream),this._localStream=void 0)}async subscribe(I,g){if(this.logger.info("subscribe","remoteStream %o",I),await this._subscriber.hasSubscribed(I)){const Q=I.subMediaType|g;return Q!==I.subMediaType?await this._subscriber.updateSubMediaType(I,Q):void 0}const C=this._ctx.videoProfile.getSubLayer(I,this.config.remoteVideoConfig);await this._subscriber.subscribe(I,g,C)}async updateSubVideoConfig(I){var g;const C=this._findRemoteStreamByScreen(I,!1);if(this.logger.info("updateSubVideoConfig","userId %s",I),!C||!await this._subscriber.hasSubscribed(C)||((g=C.attributes)===null||g===void 0||(g=g.videoDescriptions)===null||g===void 0?void 0:g.length)<=1)return;const Q=this._ctx.videoProfile.getSubLayer(C);return Q?(C.originalStreamIndex=Q.spatialLayer,this._subscriber.updateSubTrackLayer(C,Q)):void 0}async unsubscribe(I,g){var C;if(this.logger.info("unsubscribe","Invoke unsubscribe"),!await this._subscriber.hasSubscribed(I))return;const Q=I.subMediaType-(I.subMediaType&g);if(((C=this._ctx.serverConfig)===null||C===void 0||!C.muteReplaceUnsub)&&(Q===GQ.NONE||this.config.isMultiChatMode()&&Q===sA.AUDIO))return await this._subscriber.unsubscribe(I);await this._subscriber.updateSubMediaType(I,Q)}async startSubtitle(I){if(!this._subtitleTool)throw new K(S.INVOKED_BEFORE_JOIN_ROOM,"join first");await this._subtitleTool.start(I)}async updateSubtitleConfig(I){if(!this._subtitleTool)throw new K(S.INVOKED_BEFORE_JOIN_ROOM,"join first");await this._subtitleTool.update(I)}async stopSubtitle(){var I;(I=this._subtitleTool)===null||I===void 0||I.stop()}async startForwardStream2Rooms(I){return this._forwardStreamManager.startForwardStream2Rooms(I)}async updateForwardStream2Rooms(I){return this._forwardStreamManager.updateForwardStream2Rooms(I)}async stopForwardStream2Rooms(){return this._forwardStreamManager.stopForwardStream2Rooms()}async pauseForwardStream2AllRooms(){return this._forwardStreamManager.pauseForwardStream2AllRooms()}async resumeForwardStream2AllRooms(){return this._forwardStreamManager.resumeForwardStream2AllRooms()}async updateMediaParams(I){return this._ctx.signalingManager.sendSignaling("updateMediaParams",{roomId:this.config.roomId,mediaParams:I})}async leave(){var I;let g=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("leave","Invoke leave"),(I=this._subtitleTool)===null||I===void 0||I.destroy(),delete this._subtitleTool;try{for(const Q of this._remoteStreams.values())Array.isArray(Q)&&Q.forEach(i=>{var B;(B=i.observer)===null||B===void 0||B.setLogin(!1)});var C;this._localStream&&((C=this._localStream.observer)===null||C===void 0||C.setLogin(!1)),await this._roomJoin.leave().catch(()=>{}),this.destroy(),this.config.report("rtc_leave_room",{error_code:0,message:"",elapse:this.config.getStayRoomDuration()})}catch(Q){if(Q instanceof Error&&this.config.report("rtc_leave_room",{error_code:-1,message:Q.message,elapse:this.config.getStayRoomDuration()}),g)throw Q;this.destroy()}}updateRemoteUserPriority(I){var g;(g=this.remoteStreams.get(I))===null||g===void 0||g.forEach(C=>{const{userPriority:Q}=this._ctx;C.hasSubscribed&&Q.has(I)&&this._subscriber.updateSubPriority(C,Q.get(I))})}destroy(){var I,g,C;this.logger.info("destroy","Invoke destroy"),rI(this._ctx.id,"room_destroy","".concat(new Error().stack)),(I=this._subtitleTool)===null||I===void 0||I.destroy(),delete this._subtitleTool;const Q=gf(g=Array.from(this._remoteStreams.values())).call(g);this._subscriber.destroy(Q),this._subscriber.destroy(this._virtualStreams),this._publisher.destroy([this.localStream,this.localScreenStream]),this._roomJoin.destroy(),(C=this._clearSignalListeners)===null||C===void 0||C.call(this),this._remoteUsers=new Map,this._remoteStreams=new Map,this._localStream&&(this._localStream=void 0),this._localScreenStream&&(this._localScreenStream=void 0),this._userDuplicateLoginTimerMap.forEach(i=>{clearTimeout(i)}),this._userDuplicateLoginTimerMap.clear(),this._networkQualityManager.destroy(),this._videoSizeObserver.destroy(),this._csrcUserIdMap={},this._virtualStreams=[],this._remoteStreamStreamIdUserIdMap={},this._forwardStreamManager.destoy()}async updateToken(I){if(this.logger.info("updateToken","Invoke updateToken"),this.config.token=I,!this.config.isRTSOnlyRoom())try{await this._roomJoin.updateToken(I)}catch(g){throw this.safeEmit(eA.ON_ROOM_ERROR,{errorCode:S.UPDATE_TOKEN_WITH_INVALID_TOKEN}),g}}sendUserMessage(I,g){return this._ctx.rtsLimiter.e2e.check(g),this._roomMessage.sendUserMessage(I,g)}sendRoomMessage(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return this._ctx.rtsLimiter.boradcast.check(I),this._roomMessage.sendRoomMessage(I,g)}async maybeFillBackFrame2Stream(I){var g;I.refreshBlackFrameLifetime(),(g=I.videoTransceiver)!==null&&g!==void 0&&g.sender.track||this._publisher.updatePubBlackFrame(I)}_onJoinSucc(I){var g,C;let{joinRes:Q,reconnect:i}=I;this.logger.info("_onJoinSucc()","invoke. ".concat(i?"[reconnect]":"")),this.emit(eA.JOIN_SUCCESS,i),this._serverConfig=Q.config,this.config.updateRoomAttributes(Q.roomAttributes);const B=[],E=[],e=[],t=[],o=[];this.config.isRTSOnlyRoom()&&Array.isArray(Q.userInfos)&&(Q.clientsDetail=Q.userInfos.map(r=>({clientId:r.userId,clientJoinTime:r.userJoinTime}))),(g=Q.clientsDetail)===null||g===void 0||g.forEach(r=>{if(r.attributes&&(r.attributes.serverMuteVideo&&this.safeEmit(eA.ON_VIDEO_STREAM_BANNED,{uid:r.clientId,banned:r.attributes.serverMuteVideo===1}),r.attributes.serverMuteAudio&&this.safeEmit(eA.ON_AUDIO_STREAM_BANNED,{uid:r.clientId,banned:r.attributes.serverMuteAudio===1})),r.clientId===Q.clientId)return;const s=this._remoteUsers.get(r.clientId);s?s._stillExist=!0:B.push(r)});for(const r of this._remoteUsers.values())r._stillExist||E.push({clientId:r.userId}),delete r._stillExist;(C=Q.streams)===null||C===void 0||C.forEach(r=>{const s=this._findRemoteStreamByScreen(r.clientId,r.screen);this.config.updateUserPubInfo(r),s?(s.stillExist=!0,s.streamId=r.streamId,o.push(r)):t.push(r)});for(const r of this._remoteStreams.values())Array.isArray(r)&&r.forEach(s=>{s.stillExist?delete s.stillExist:e.push({clientId:s.userId,streamId:s.streamId,message:lG.clientDisconnected})});E.forEach(r=>this._onUserDisconnection(r)),B.forEach(r=>this._onUserConnection(r)),e.forEach(r=>this._onRemoveStream(r)),t.forEach(r=>this._onAddStream(r,{fromSignal:!1})),o.forEach(r=>this._onUpdateStreamAttributes(r)),this.config.resetUserPubInfo(),i&&this._handleSendOrRecvStreamAfterReconnect(),this.emit("__joinSuccess")}_handleSendOrRecvStreamAfterReconnect(){var I;this._localStream&&(this._publisher.cleanStream(this._localStream).then(()=>{var g;this._localStream&&(this._localStream.vendorCode=this.config.vendorConfig.vendorCode||0,(g=this._localStream.observer)===null||g===void 0||g.setLogin(!0))}),this._publisher.publish(this._localStream).then(()=>{var g;this._ctx.handler&&((g=this._localStream)===null||g===void 0||g.startReport(this._onLocalStreamStats.bind(this),this._localStream.vendorHandler||this._ctx.handler)),this.emit(eA.ON_PUBLISH_RESULT,{isScreen:!1,state:wB.PUBLISH_SUCC,retry:!0})}).catch(g=>{this.logger.error("failed repub error:".concat(g)),this.emit(eA.ON_PUBLISH_RESULT,{isScreen:!1,state:wB.PUBLISH_FAIL,errorCode:g.code,retry:!0})})),this._localScreenStream&&(this._publisher.cleanStream(this._localScreenStream).then(()=>{var g;this._localScreenStream&&((g=this._localScreenStream.observer)===null||g===void 0||g.setLogin(!0))}),this._publisher.publish(this._localScreenStream).then(()=>{var g;this._ctx.handler&&((g=this._localScreenStream)===null||g===void 0||g.startReport(this._onLocalStreamStats.bind(this),this._localScreenStream.vendorHandler||this._ctx.handler)),this.emit(eA.ON_PUBLISH_RESULT,{isScreen:!0,state:wB.PUBLISH_SUCC,retry:!0})}).catch(g=>{this.logger.error("failed repub screen stream error:".concat(g)),this.emit(eA.ON_PUBLISH_RESULT,{isScreen:!0,state:wB.PUBLISH_FAIL,errorCode:g.code,retry:!0})}));for(const g of this._remoteStreams.values())Array.isArray(g)&&g.forEach(async C=>{if(C.hasSubscribed){C.resetHasSubscribed();try{var Q,i;this.logger.info("start resubscribe ".concat(C.userId," with ").concat(C.subMediaType)),vI(C.subMediaType)&&((Q=C.observer)===null||Q===void 0||Q.setSubscribeVideo(!0)),lg(C.subMediaType)&&((i=C.observer)===null||i===void 0||i.setSubscribeAudio(!0)),await this._subscriber.subscribe(C,C.subMediaType),this.logger.info("success resubscribe ".concat(C.userId," with ").concat(C.subMediaType)),this.safeEmit(eA.RESUBSCRIBE,{stream:C}),this.emit(eA.ON_SUBSCRIBE_RESULT,{state:is.SUBSCRIBE_SUCC,userId:C.userId,isScreen:C.isScreen,retry:!0})}catch(B){if(this.emit(eA.ON_SUBSCRIBE_RESULT,{state:is.SUBSCRIBE_FAIL,userId:C.userId,isScreen:C.isScreen,errorCode:B.code,retry:!0}),this.logger.error("failed resubscribe ".concat(C.userId," with ").concat(C.subMediaType,", error:").concat(B)),B.code===S.NOT_CONNECTED_YET)return void(C.streamState=OC.SUB_ED);await this._subscriber.cleanStream(C),C.resetHasSubscribed()}}});(I=this._subtitleTool)===null||I===void 0||I.reconnect(),this._forwardStreamManager.resumeFromReconnect()}_handleFFAudioTrack(){var I,g;const C=(I=this._ctx.handler)===null||I===void 0?void 0:I.audioTrack4ff,Q=(g=this._ctx.handler)===null||g===void 0?void 0:g.getTransceivers();if(C&&Array.isArray(Q)){const i=Q.find(B=>{var E;return(B==null||(E=B.receiver)===null||E===void 0?void 0:E.track)===C});if(i){const B=new L0(this._ctx,"ff-stream","ff-stream",!1,!1,$N);B.virtual=!0,B.audioTransceiver=i,B.audioMid="0",B.audioTrack=FX(this._ctx,C,{streamIndex:MI.VIRTUAL}),this._virtualStreams.push(B),this.safeEmit(eA.SUBSCRIBE_PUSH_TRACK,{stream:B})}}}_findRemoteStream(I,g){const C=this._remoteStreams.get(I);return Array.isArray(C)?C.find(Q=>Q.streamId===g):null}_findRemoteStreamByScreen(I,g){const C=this._remoteStreams.get(I);return Array.isArray(C)?C.find(Q=>Q.isScreen===g):null}_onAddStream(I){let{needEmit:g=!0,fromSignal:C=!0,virtual:Q=!1}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(I.clientId===this.config.userId)return;const{isAutoSubscribeAudio:i,isAutoSubscribeVideo:B}=this.config,E=this._findRemoteStreamByScreen(I.clientId,I.screen);if(E&&E.streamId!==I.streamId){var e;const o=(e=this._remoteStreams.get(I.clientId))===null||e===void 0?void 0:e.filter(r=>r.streamId!==E.streamId);this._subscriber.cleanStream(E),this._remoteStreams.set(I.clientId,o||[])}let t=this._findRemoteStream(I.clientId,I.streamId);if(this._remoteStreamStreamIdUserIdMap[I.streamId]=I.clientId,t)t.attributes=I.attributes;else if(t=new L0(this._ctx,I.clientId,I.streamId,I.screen,!1,I.attributes),t.virtual=Q,this._initStreamListeners(t),!Q){const o=this._remoteStreams.get(I.clientId);o?o.push(t):this._remoteStreams.set(I.clientId,[t])}if(t.remoteSessionId=I.remoteSessionId||"",t.observer=new KX(this._ctx,t),!t.isScreen&&B&&(C&&t.hasVideo&&(t.attributes.extvideo?(t.observer.setExternalVideoSource(!0),t.observer.setPushVideo(!0)):(t.observer.setExternalVideoSource(!1),t.observer.setPublishVideo(!0))),C&&t.hasAudio&&i&&!this.config.isMultiChatMode()&&(t.attributes.extaudio?(t.observer.setExternalAudioSource(!0),t.observer.setPushAudio(!0)):(t.observer.setExternalAudioSource(!1),t.observer.setPublishAudio(!0))),g&&!C)){const{isAutoSubscribeAudio:o,isAutoSubscribeVideo:r}=this.config;t.observer.setLogin(!0,{audio:!!o&&!this.config.isMultiChatMode(),video:!!r})}return g&&this.safeEmit(IA.ON_ADD_STREAM,{stream:t}),t}_onUserConnection(I){var g;if(I.clientId===this.config.userId)return;const C=this._userDuplicateLoginTimerMap.get(I.clientId);if(typeof C=="number")return this._userDuplicateLoginTimerMap.delete(I.clientId),void self.clearTimeout(C);const Q={userId:I.clientId,extraInfo:(g=I.attributes)===null||g===void 0?void 0:g.extra_info};this._remoteUsers.set(I.clientId,p({},Q)),this.safeEmit(IA.USER_CONNECTION,{userInfo:Q,publishState:this.config.getUserPubInfo(Q.userId)}),I.attributes&&(I.attributes.serverMuteVideo&&this.safeEmit(eA.ON_VIDEO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteVideo===1}),I.attributes.serverMuteAudio&&this.safeEmit(eA.ON_AUDIO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteAudio===1}))}_onUserDisconnection(I){let{clientId:g,tag:C,code:Q,forbiddenTime:i}=I;if(g)if(g===this.config.userInfo.userId){let B=null;C===fE.kickedByAdmin?B=S.KICKED_OUT:C===fE.onUserTokenDidExpire?B=S.TOKEN_EXPIRED:C===fE.userDuplicateLogin&&(B=S.DUPLICATE_LOGIN),Q===Hj.roomDismissByAdmin&&(B=S.ROOM_DISMISS),B&&this.safeEmit(eA.ON_ROOM_ERROR,{errorCode:B,forbiddenTime:i})}else{let B=da.DROPPED;C===fE.userLeave?B=da.QUIT:C===fE.kickedByAdmin?B=da.KICKED_BY_ADMIN:C===fE.roleChanged&&(B=da.SWITCH_TO_INVISIBLE);const E=()=>{var e;this._remoteUsers.delete(g);const t=[];(e=this._remoteStreams.get(g))===null||e===void 0||e.forEach(o=>{t.push(this._onRemoveStream({clientId:o.userId,streamId:o.streamId,message:lG.clientDisconnected}))}),this._remoteStreams.delete(g),Promise.all(t).finally(()=>{this.safeEmit(eA.ON_USER_LEAVE,{userInfo:{userId:g},reason:B})})};if(C===fE.userDuplicateLogin){const e=this._userDuplicateLoginTimerMap.get(g);e&&self.clearTimeout(e);const t=self.setTimeout(E,5e3);this._userDuplicateLoginTimerMap.set(g,t)}else E()}}async _onRemoveStream(I){if(I.clientId===this.config.userId)return;const g=this._remoteStreams.get(I.clientId);if(!g)return;const C=g.find(E=>E.streamId===I.streamId);if(!C)return;var Q,i;C.hasVideo&&((Q=C.observer)===null||Q===void 0||Q.setPublishVideo(!1)),C.hasAudio&&!this.config.isMultiChatMode()&&((i=C.observer)===null||i===void 0||i.setPublishAudio(!1));const B=g.filter(E=>E.streamId!==I.streamId);this._remoteStreams.set(I.clientId,B);try{await this._subscriber.handleRemoveStream(C).then(()=>this._subscriber.cleanStream(C)).finally(()=>{this.safeEmit(IA.ON_REMOVE_STREAM,{stream:C,reason:I.message,callback:()=>{this._subscriber.destroyStream(C)}})})}catch(E){console.error(E)}}_onUpdateUserAttributes(I){I.attributes&&(I.attributes.serverMuteVideo&&this.safeEmit(eA.ON_VIDEO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteVideo===1}),I.attributes.serverMuteAudio&&this.safeEmit(eA.ON_AUDIO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteAudio===1}))}_onUpdateRoomAttributes(I){var g;I.roomAttributes&&(this.config.updateRoomAttributes(I.roomAttributes),this._ctx&&(this._ctx.callId=I.roomAttributes.callId)),(g=I.roomAttributes)!==null&&g!==void 0&&g.multiChatMode&&this._handleFFAudioTrack()}_onUpdateStreamAttributes(I){const{isAutoSubscribeAudio:g,isAutoSubscribeVideo:C}=this.config,{clientId:Q,streamId:i,attributes:B}=I,E=this._findRemoteStream(Q,i);if(!E)return;const e=E.attributes,t=p(p({},e),B);let o=!1;const r=t.localaudio!==e.localaudio;let s=!1,v=!1;const n=t.localvideo!==e.localvideo;let a=!1,c=GQ.NONE,P=GQ.NONE;if(t.audiostream!==e.audiostream&&(o=t.localaudio,s=!!t.audiostream,t.audiostream?c|=sA.AUDIO:P|=sA.AUDIO),t.videostream!==e.videostream&&(v=t.localvideo,a=!!t.videostream,t.videostream?c|=sA.VIDEO:P|=sA.VIDEO),c&&this.safeEmit(eA.ON_USER_PUBLISH_STATE_CHANGE,{userId:Q,mediaType:c,isScreen:E.isScreen,pubState:$C.PUB,remoteStream:E}),P&&this.safeEmit(eA.ON_USER_PUBLISH_STATE_CHANGE,{userId:Q,mediaType:P,isScreen:E.isScreen,pubState:$C.UNPUB,remoteStream:E}),E.remoteSessionId=I.remoteSessionId||"",E.attributes=t,t.localaudio!==e.localaudio)if(t.localaudio){var d,h,u,D;(g||E.subAudio)&&t.audiostream&&(t.extaudio?((d=E.observer)===null||d===void 0||d.setExternalAudioSource(!0),(h=E.observer)===null||h===void 0||h.setPushAudio(!0)):((u=E.observer)===null||u===void 0||u.setExternalAudioSource(!1),(D=E.observer)===null||D===void 0||D.setEnableAudio(!0))),this.safeEmit(eA.ON_USER_START_AUDIO_CAPTURE,{userId:Q},E)}else{var y,b,G,L;t.extaudio?((y=E.observer)===null||y===void 0||y.setExternalAudioSource(!0),(b=E.observer)===null||b===void 0||b.setPushAudio(!1)):((G=E.observer)===null||G===void 0||G.setExternalAudioSource(!1),(L=E.observer)===null||L===void 0||L.setEnableAudio(!1)),!E.isScreen&&this.safeEmit(eA.ON_USER_STOP_AUDIO_CAPTURE,{userId:Q})}if(t.localvideo!==e.localvideo)if(t.localvideo){var m,F,U,AA;(C||E.subVideo)&&t.videostream&&(t.extvideo?((m=E.observer)===null||m===void 0||m.setExternalVideoSource(!0),(F=E.observer)===null||F===void 0||F.setPushVideo(!0)):((U=E.observer)===null||U===void 0||U.setExternalVideoSource(!1),(AA=E.observer)===null||AA===void 0||AA.setEnableVideo(!0))),this.safeEmit(eA.ON_USER_START_VIDEO_CAPTURE,{userId:Q})}else{var X,Y,J,V;t.extvideo?((X=E.observer)===null||X===void 0||X.setExternalVideoSource(!0),(Y=E.observer)===null||Y===void 0||Y.setPushVideo(!1)):((J=E.observer)===null||J===void 0||J.setExternalVideoSource(!1),(V=E.observer)===null||V===void 0||V.setEnableVideo(!1)),!E.isScreen&&this.safeEmit(eA.ON_USER_STOP_VIDEO_CAPTURE,{userId:Q})}var N,z;o&&!r&&g&&((N=E.observer)===null||N===void 0||N.setRemoteUnmuteAudio(s)),v&&!n&&C&&((z=E.observer)===null||z===void 0||z.setRemoteUnmuteVideo(a)),typeof t.videoType=="number"&&t.videoType!==e.videoType&&this.safeEmit(eA.VIDEO_TYPE_CHANGE,{userId:E.userId,isScreen:E.isScreen,type:t.videoType===TC.BLACK?cG.BLACK:cG.NORMAL})}_onPushTrack(I){var g;if((g=I.streamId)===null||g===void 0||!g.startsWith("audio_mux"))return void this.config.report("rtc_error",{message:"onPushTrack, userId: ".concat(I.clientId,", ").concat(I.streamId),error_code:iQ.TRACK_ERROR});const C=this._onAddStream(p(p({},I),{},{attributes:$N}),{needEmit:!1,fromSignal:!1,virtual:!0});C&&this._subscriber.subscribe4pushTrack(C,I).then(()=>{this.safeEmit(eA.SUBSCRIBE_PUSH_TRACK,{stream:C}),this._virtualStreams.push(C)}).catch(Q=>{this.logger.error("subscribe","push track failed %o",Q)})}_onRemoveTrack(I){let{clientId:g,streamId:C,message:Q,trackType:i}=I;this.logger.info("_onRemoveTrack","remove track: %o",g);const B=this._findRemoteStream(g,C);B&&(B.removeTrack=!0,this._subscriber.unsubscribe4removeTrack(B,Q,i),this.emit(eA.REMOVE_PUSH_TRACK,{stream:B,mediaType:i+1}))}_onMeetingSpeakerChange(I){if(Array.isArray(I==null?void 0:I.speakerCsrcInfo)){const g={};I==null||I.speakerCsrcInfo.forEach(C=>{let{csrc:Q,userId:i,isScreen:B}=C;B||(g[Q]=i)}),this._csrcUserIdMap=g}Array.isArray(I.muxStreamInUse)&&this._virtualStreams.forEach(g=>{var C;(C=I.muxStreamInUse)!==null&&C!==void 0&&C.includes(g.streamId)?g.virtualOccupy=!0:g.virtualOccupy=!1})}getActiveSpeakerInMultiChatMode(){const I=[];return this._virtualStreams.forEach(g=>{var C;const Q=(C=g.audioTransceiver)===null||C===void 0?void 0:C.receiver;if(Q){const[i]=Q.getContributingSources()||[];if(i){const{audioLevel:B,source:E}=i;this._csrcUserIdMap[E]&&I.push({userId:this._csrcUserIdMap[E],audioLevel:B})}}}),I.length&&ws(I).call(I,(g,C)=>g.audioLevel-C.audioLevel),I}_onReconnecting(){var I,g;for(const C of this._remoteStreams.values())Array.isArray(C)&&C.forEach(Q=>{var i;(i=Q.observer)===null||i===void 0||i.setDisconnect(),this._subscriber.cleanStream(Q)});this._virtualStreams.forEach(C=>{var Q;this.emit(eA.REMOVE_PUSH_TRACK,{stream:C,mediaType:sA.AUDIO}),(Q=C.observer)===null||Q===void 0||Q.setDisconnect(),this._subscriber.cleanStream(C)}),this._virtualStreams=[],(I=this.localStream)===null||I===void 0||(I=I.observer)===null||I===void 0||I.setDisconnect(),this._publisher.cleanStream(this.localStream),(g=this.localScreenStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setDisconnect(),this._publisher.cleanStream(this.localScreenStream)}_onConnectionStateChange(I){I.state===CI.CONNECTION_STATE_RECONNECTING?this._onReconnecting():I.state===CI.CONNECTION_STATE_RECONNECTED&&this._roomJoin.join(!0)}_initStreamListeners(I){I.on("ontrack",g=>{g.track}),I.on("onSEIMessage",g=>{this.emit(eA.ON_SEI_MESSAGED_RECEIVED,{sei:g,remoteStreamKey:{userId:I.userId,roomId:this.config.roomId,streamIndex:I.isScreen?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN}})})}_onCustomMessage(I){var g;(g=this._subtitleTool)!==null&&g!==void 0&&g.onMessageRecv(I)||this.safeEmit(IA.ON_CUSTOM_MESSAGE,I)}_onUserMessageReceived(I){this.safeEmit(IA.USER_MESSAGE_RECEIVED,{userId:I.from,message:I.msg})}_onUserBinaryMessageReceived(I){var g;const C={userId:I.from,message:I.msg};(g=this._subtitleTool)!==null&&g!==void 0&&g.onMessageRecv(C)||this.safeEmit(IA.USER_BINARY_MESSAGE_RECEIVED,C)}_initSubtitleTool(){this._subtitleTool=new Ih(this._ctx,this.config),this._subtitleTool.onEvent=I=>{this.emit(eA.ON_SUBTITLE_STATE_CHANGED,I)},this._subtitleTool.onMessage=I=>{this.emit(eA.ON_SUBTITLE_MESSAGE_RECEIVED,I)}}_onPostProcessingMessage(I){if(!I.body)return;var g;if(I.type==="subtitleCallback")return void((g=this._subtitleTool)===null||g===void 0||g.onResult(I));const C=I.body,Q=C.error||0;let i=Ii.START;const B=["success","parameter error","subscription timeout","ffmpeg error","cdn error","publish error"];if(C.protocol==="2.0"){switch(C.eventType){case"TranscodeStarted":C.error!==0&&(i=Ii.START_FAILED);break;case"TranscodeStateChanged":i=C.error!==0?Ii.START_FAILED:Ii.START_SUCCESS;break;case"TranscodeStopped":i=C.error!==0?Ii.STOP_FAILED:Ii.STOP_SUCCESS;break;case"TranscodeUpdated":i=C.error!==0?Ii.UPDATE_FAILED:Ii.UPDATE_SUCCESS}this.safeEmit(IA.POST_PROCESSING_MESSAGE,{code:Q,protocol:C.protocol,error:C.error,eventType:i,message:B[Q]})}this.safeEmit(IA.POST_PROCESSING_MESSAGE,{code:Q,message:B[Q],type:I.type})}_onUserTokenWillExpire(){this.safeEmit(IA.ON_USER_TOKEN_WILL_EXPIRE,null)}_onUserTokePublishPrivilegeWillExpire(){this.safeEmit(IA.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE,null)}_onUserTokenPublishPrivilegeDidExpire(){this.safeEmit(IA.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED,null)}_onUserTokeSubscribePrivilegeWillExpire(){this.safeEmit(IA.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE,null)}_onUserTokenSubscribePrivilegeDidExpire(){this.safeEmit(IA.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED,null)}async _onStreamFailed(I){if(I.type==="publish"){var g,C;let Q;if(((g=this.localStream)===null||g===void 0?void 0:g.streamId)===I.streamId?Q=this.localStream:((C=this.localScreenStream)===null||C===void 0?void 0:C.streamId)===I.streamId&&(Q=this.localScreenStream),!Q)return;await this._publisher.unpublish(Q).catch(()=>{}),await this._publisher.cleanStream(Q),await this._publisher.publish(Q).catch(()=>{})}else if(I.type==="subscribe"){const Q=this._remoteStreamStreamIdUserIdMap[I.streamId],i=this._findRemoteStream(Q,I.streamId);if(i){const B=i.subMediaType,E=i.subLayer;await this._subscriber.unsubscribe(i),await this._subscriber.subscribe(i,B,E),this.safeEmit(eA.RESUBSCRIBE,{stream:i})}}}_onStreamControlMessage(I){var g,C;I.type===jj.PushLimitWarn&&((g=this._localStream)!==null&&g!==void 0&&g.pubAudio||(C=this._localStream)!==null&&C!==void 0&&C.pubVideo||this.unpublish())}async _onPublishOnDemand(){var I,g,C;if(this._publishOnDemandItem&&!this._publishOnDemandBusy&&((I=this._serverConfig)===null||I===void 0||(I=I.engine_VPM)===null||I===void 0||(I=I.ondemand)===null||I===void 0?void 0:I.enable)!==!1){if((g=this._localStream)!==null&&g!==void 0&&g.videoTransceiver){this._publishOnDemandBusy=!0;const Q=this._publishOnDemandItem;this._publishOnDemandItem=void 0;const i=[],B=this._localStream.stream.id,{sender:E}=this._localStream.videoTransceiver,e=E.getParameters();if(rI(this._ctx.id,"sender.getParameters",JSON.stringify(e),0,B),Array.isArray(e.encodings)&&Array.isArray(Q)){const t={};this.logger.info("_onPublishOnDemand exec","usedDescriptions: %o",Q),Q.forEach(r=>{var s;if((s=r.StreamIds)!==null&&s!==void 0&&s.includes(B)){var v,n,a;const d=(v=(n=r.Metadata)===null||n===void 0?void 0:n.VideoIndex)!==null&&v!==void 0?v:0;let h=0;var c,P;(a=this._ctx.serverConfig)!==null&&a!==void 0&&a.e2eFeedback&&(h=Math.max(...Object.keys((c=(P=r.Metadata)===null||P===void 0?void 0:P.VideoKbpsHist)!==null&&c!==void 0?c:{}).map(u=>Number(u)),0)),t[d]={kbps:h}}});const o=[...this._localStream.pubAttributes.videoDescriptions];e.encodings=e.encodings.map(r=>{if(r.rid){if(t[r.rid]){var s;r.active=!0;const a=(s=t[r.rid])===null||s===void 0?void 0:s.kbps;a&&(r.maxBitrate=1e3*tN(r.rid,a,o))}else r.active=!1;const n=Number(r.rid);i[n]=r.active}else{var v;const n=(v=t[0])===null||v===void 0?void 0:v.kbps;n&&(r.maxBitrate=1e3*tN(void 0,n,o))}return r}),this.config.report("rtc_invoke_status",{sdk_api_name:"onPublishOnDemand",message:JSON.stringify(e.encodings),error_code:0,stream_id:B,elapse:0}),this._ctx.videoProfile.activeSimStreams=i}this.logger.info("sender.setParameters()",JSON.stringify(e.encodings)),rI(this._ctx.id,"sender.setParameters",JSON.stringify(e),0,B),await E.setParameters(e),this._publishOnDemandBusy=!1}else if((C=this._localStream)===null||C===void 0||!C.videoTransceiver)return;this._onPublishOnDemand()}}_onRTT(I){const{StreamIds:g,Metadata:C}=I;if(g!=null&&g.length&&C){const Q=g[0];this._ctx.streamRTT[Q]={audio:C.audio_rtt,video:C.video_rtt}}}_onRSCP(I,g){I.find(C=>{var Q,i;return C==null||(Q=C.StreamIds)===null||Q===void 0?void 0:Q.includes((i=this._localStream)===null||i===void 0||(i=i.stream)===null||i===void 0?void 0:i.id)})&&(g?this._pubTransceiverReady=!0:this._onceTriggerBySignal=!0,g&&this._onceTriggerBySignal||(this._publishOnDemandItem=I),this._pubTransceiverReady&&this._onPublishOnDemand())}_onSSC(I){const{StreamIds:g,Metadata:C}=I,Q=g[0],i=this._remoteStreamStreamIdUserIdMap[Q],B=this._findRemoteStream(i,Q),E={userId:i,isScreen:!!B&&B.isScreen,beforeVideoIndex:C.ssc_items[0].prev_layer_id,afterVideoIndex:C.ssc_items[0].cur_layer_id,beforeEnable:C.ssc_items[0].prev_video_open!==0,afterEnable:C.ssc_items[0].cur_video_open!==0,reason:C.ssc_items[0].change_reason};this.emit(eA.ON_SIMULCAST_SUBSCRIBE_FALLBACK,E)}_reportNetworkQuality(I,g){this.emit(eA.ON_NETWORK_QUALITY,I,g)}_emitVideoSizeChange(I,g,C,Q){this.emit(eA.ON_REMOTE_VIDEO_SIZE_CHANGED,{roomId:this.config.roomId,userId:I,streamIndex:g?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN},{width:C,height:Q})}async setAudioEncodeMaxBitrate(I,g){const C=I===W.STREAM_INDEX_MAIN?this.localStream:this.localScreenStream;if(C!=null&&C.pubAudio){var Q;const B=(Q=C.audioTransceiver)===null||Q===void 0?void 0:Q.sender.getParameters();var i;rI(this._ctx.id,"sender.getParameters",JSON.stringify(B),0,C.streamId),B!=null&&B.encodings.length&&(B.encodings[0].maxBitrate=1e3*g,rI(this._ctx.id,"sender.setParameters",JSON.stringify(B),0,C.streamId),await((i=C.audioTransceiver)===null||i===void 0?void 0:i.sender.setParameters(B)))}}_onEngineControlMessage(I){let{type:g,body:C}=I;if(g===Xj.CHANGE_CODEC){if(!yA("SDK_CODEC_NEGOTIATION"))return void this.logger.info("_onEngineControlMessage","SDK_CODEC_NEGOTIATION is false, ignore");const{codec:E,media:e,streamId:t}=C;if(!e||e==="audio")return;const o=E.split(",").map(s=>QE(s).call(s).toUpperCase());let r;var Q,i,B;this.logger.info("_onEngineControlMessage","changeCodec to %s",E),t?(((Q=this.localStream)===null||Q===void 0?void 0:Q.streamId)===t?r=this.localStream:((i=this.localScreenStream)===null||i===void 0?void 0:i.streamId)===t&&(r=this.localScreenStream),(B=r)===null||B===void 0||B.setChangeCodecs(o)):e==="video"?(r=this.localStream,this._ctx.targetCodec=o[0]):e==="screen"&&(r=this.localScreenStream,this._ctx.targetScreenCodec=o[0]),r&&this.emit(eA.UPDATE_PUBLISH,{streamIndex:r.isScreen?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN})}}}RI([LA],PI.prototype,"publishScreen"),RI([LA],PI.prototype,"updatePubScreenTrack"),RI([LA],PI.prototype,"unpublishScreen"),RI([LA],PI.prototype,"liveControlMessage"),RI([LA],PI.prototype,"publicStreamControlMessage"),RI([LA],PI.prototype,"updateUserAttributes"),RI([LA],PI.prototype,"publish"),RI([LA],PI.prototype,"updatePubTrack"),RI([LA],PI.prototype,"unpublish"),RI([LA],PI.prototype,"subscribe"),RI([LA],PI.prototype,"updateSubVideoConfig"),RI([LA],PI.prototype,"unsubscribe"),RI([LA],PI.prototype,"startSubtitle"),RI([LA],PI.prototype,"stopSubtitle"),RI([LA],PI.prototype,"startForwardStream2Rooms"),RI([LA],PI.prototype,"updateForwardStream2Rooms"),RI([LA],PI.prototype,"stopForwardStream2Rooms"),RI([LA],PI.prototype,"pauseForwardStream2AllRooms"),RI([LA],PI.prototype,"resumeForwardStream2AllRooms"),RI([LA],PI.prototype,"updateMediaParams"),RI([LA],PI.prototype,"updateRemoteUserPriority"),RI([LA],PI.prototype,"updateToken"),RI([LA],PI.prototype,"sendUserMessage"),RI([LA],PI.prototype,"sendRoomMessage"),RI([LA],PI.prototype,"maybeFillBackFrame2Stream");const A7=async(A,I)=>{const g=new Audio(vi.createObjectURL(new Blob([A],I)));try{return g.muted=!0,await g.play(),g.pause(),!0}catch{return!1}};var fGA=Object.defineProperty,jGA=Object.getOwnPropertyDescriptor,hC=(A,I,g,C)=>{for(var Q,i=jGA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&fGA(I,g,i),i};class QC{constructor(I,g){l(this,"_sharedAudioContext",new AudioContext),l(this,"_workletReady",void 0),l(this,"_audioDestination",this._sharedAudioContext.createMediaStreamDestination()),l(this,"_localGainNode",this._sharedAudioContext.createGain()),l(this,"_bufferGainNode",this._sharedAudioContext.createGain()),l(this,"_audioBufferSource",void 0),l(this,"_localSource",void 0),l(this,"_context",void 0),l(this,"_failedAudioList",[]),l(this,"_startingIds",new Map),l(this,"_revokeURLs",new Set),l(this,"_audioFetchMap",new Map),l(this,"_audioFetchConfig",new Map),l(this,"mixingMap",new Map),l(this,"resourcesCache",new Map),l(this,"volumeConfig",new Map),l(this,"cachedBuffer",[]),l(this,"id","AudioMixingManager"),this.engineId=g,this._context=I;try{var C,Q;this._workletReady=(C=this._sharedAudioContext.audioWorklet)===null||C===void 0||(Q=C.addModule)===null||Q===void 0?void 0:Q.call(C,GX),this._workletReady.catch(()=>{this._workletReady=null})}catch{this._workletReady=null}this._localGainNode.gain.value=1}mixMediaStream(I){this._localSource&&this._localSource.disconnect(this._localGainNode),this._localSource=this._sharedAudioContext.createMediaStreamSource(I),this._localSource.connect(this._localGainNode).connect(this._audioDestination)}async startAudioMixing(I,g,C){if(this._startingIds.get(I)!==void 0)return void console.warn("AudioMixing task id: ".concat(I," is starting"));this._startingIds.set(I,I);const{playCount:Q,type:i}=C;gI(i,"mixingType",EN(li));const B=this._context.getLocalAudioTrack();if(!B)return;const E=B.preprocessingTrack;E&&this.mixMediaStream(new MediaStream([E])),B.once("needReplaceTrack",()=>{this.mixMediaStream(new MediaStream([B.preprocessingTrack]))});const e=this.mixingMap.get(I);if(e!=null&&e.audioNode){e.audioNode.pause(),this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_STOPPED,error:zC.AUDIO_MIXING_ERROR_OK});try{e.gainNode.disconnect(this._audioDestination),e.audioSource.disconnect(e.gainNode)}catch{}}let t;const o=this.resourcesCache.get(I);if(o&&o.filePath===g)t=o.getAudioNode();else{const n=await fetch(g,{mode:"cors"}).then(c=>{if(c.ok)return c.arrayBuffer();throw this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_FAILED,error:zC.AUDIO_MIXING_ERROR_START_FAILED}),this._startingIds.delete(I),this.mixingMap.delete(I),new K(S.LOAD_RESOURCES_FAILED,c.statusText)});let a;if(g.endsWith("mp3")?a={type:"audio/mpeg"}:g.endsWith("aac")&&(a={type:"audio/aac"}),!await A7(n,a))throw this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_FAILED,error:zC.AUDIO_MIXING_ERROR_START_FAILED}),this._startingIds.delete(I),this.mixingMap.delete(I),new K(S.LOAD_RESOURCES_FAILED,"invalid audio resource");t=new Audio,t.crossOrigin="anonymous",t.src=vi.createObjectURL(new Blob([n],a))}if(Q<=0)t.loop=!0;else if(Q>0){let n=Q;t.onended=()=>{--n>0?t.play():(this.mixingMap.delete(I),this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_FINISHED,error:zC.AUDIO_MIXING_ERROR_OK}))}}try{await t.play()}catch(n){console.error(n),this._failedAudioList.push(t),this._context.onAutoPlayFailed({userId:this.id,kind:"audio",streamIndex:W.STREAM_INDEX_MAIN,mediaType:sA.AUDIO})}this._startingIds.delete(I);const r=this._sharedAudioContext.createMediaElementSource(t),s=this._sharedAudioContext.createGain(),v=this.volumeConfig.get(I);if(s.gain.value=v?v/100:1,r.connect(s).connect(this._audioDestination),this.mixingMap.set(I,{audioSource:r,audioNode:t,gainNode:s,type:"file"}),i===li.PUBLISH)try{s.disconnect(this._sharedAudioContext.destination)}catch{}else s.connect(this._sharedAudioContext.destination);this._context.updateLocalAudioTrack(this._audioDestination.stream.getAudioTracks()[0],C.type),this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_PLAYING,error:zC.AUDIO_MIXING_ERROR_OK}),this.updateFetcher(I)}stopAudioMixing(I){const g=this.mixingMap.get(I);g&&g.type==="file"&&(this.mixingMap.delete(I),g.audioNode.pause(),g.audioSource.disconnect(g.gainNode),g.gainNode.disconnect(this._audioDestination),this.updateFetcher(I),this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_STOPPED,error:zC.AUDIO_MIXING_ERROR_OK}))}pauseAudioMixing(I){const g=this.mixingMap.get(I);g&&(this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_PAUSED,error:zC.AUDIO_MIXING_ERROR_OK}),g.audioNode.pause())}resumeAudioMixing(I){const g=this.mixingMap.get(I);g&&(this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_PLAYING,error:zC.AUDIO_MIXING_ERROR_OK}),g.audioNode.play())}async preloadAudioMixing(I,g){this.stopAudioMixing(I);const C=await fetch(g,{mode:"cors"}).then(i=>{if(i.ok)return i.arrayBuffer();throw new K(S.LOAD_RESOURCES_FAILED,i.statusText)}).catch(i=>{throw this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_FAILED,error:zC.AUDIO_MIXING_ERROR_PRELOAD_FAILED}),i instanceof K?i:new K(S.LOAD_RESOURCES_FAILED,"Load resources failed",i)});let Q;if(g.endsWith("mp3")?Q={type:"audio/mpeg"}:g.endsWith("aac")&&(Q={type:"audio/aac"}),!await A7(C,Q))throw this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_FAILED,error:zC.AUDIO_MIXING_ERROR_PRELOAD_FAILED}),new K(S.LOAD_RESOURCES_FAILED,"Load resources failed");this._context.emitMessage({mixId:I,state:MC.AUDIO_MIXING_STATE_PRELOADED,error:zC.AUDIO_MIXING_ERROR_OK}),this.resourcesCache.set(I,{getAudioNode:()=>{const i=vi.createObjectURL(new Blob([C],Q));return this._revokeURLs.add(i),new Audio(i)},filePath:g,duration:0}),await new Promise(i=>{const B=vi.createObjectURL(new Blob([C],Q)),E=new Audio(B);E.addEventListener("durationchange",()=>{const e=this.resourcesCache.get(I);e&&(e.duration=E.duration,this.resourcesCache.set(I,e)),vi.revokeObjectURL(B),i(null)})})}unloadAudioMixing(I){this.resourcesCache.has(I)&&this.resourcesCache.delete(I)}getAudioMixingVolume(I){const g=this.mixingMap.get(I);return g?100*g.gainNode.gain.value:0}setAudioMixingVolume(I,g){g<0?g=0:g>400&&(g=400),this.volumeConfig.set(I,g);const C=this.mixingMap.get(I);C&&(C.gainNode.gain.value=Number(g)/100)}getAudioMixingDuration(I){const g=this.mixingMap.get(I),C=this.resourcesCache.get(I);return g||C?g?1e3*g.audioNode.duration:C?1e3*C.duration:0:0}getAudioMixingCurrentPosition(I){const g=this.mixingMap.get(I);return g?1e3*g.audioNode.currentTime:0}setAudioMixingPosition(I,g){const C=this.mixingMap.get(I);C&&(C.audioNode.currentTime=g/1e3,C.audioNode.play())}setAudioFrameCallback(I,g){var C;let Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:4096;if(gI(Q,"frameSize",[256,512,1024,2048,4096,8192,16384]),Q=(C=Q)!==null&&C!==void 0?C:4096,this._workletReady===null)throw new K(S.NOT_SUPPORTED,"Not support AudioWorklet");g?this._audioFetchConfig.set(I,{callback:g,frameSize:Q}):this._audioFetchConfig.delete(I),this.updateFetcher(I)}updateFetcher(I){var g,C;const{callback:Q,frameSize:i}=(g=this._audioFetchConfig.get(I))!==null&&g!==void 0?g:{},B=(C=this.mixingMap.get(I))===null||C===void 0?void 0:C.gainNode;if(B&&Q&&i){let E=this._audioFetchMap.get(I);E?E.setFrameSize(i):E=new SS(B,i,this._sharedAudioContext,this._workletReady),E.on("data",Q),this._audioFetchMap.set(I,E)}else{const E=this._audioFetchMap.get(I);E==null||E.removeAllListeners("data"),E==null||E.destroy(),this._audioFetchMap.delete(I)}}enableAudioMixingBuffer(I){gI(I,"type",EN(li));const g=this._context.getLocalAudioTrack();if(!g)return;const C=g.preprocessingTrack;if(C&&this.mixMediaStream(new MediaStream([C])),I===li.PUBLISH)try{this._bufferGainNode.disconnect(this._sharedAudioContext.destination)}catch{}else this._bufferGainNode.connect(this._sharedAudioContext.destination);this._context.updateLocalAudioTrack(this._audioDestination.stream.getAudioTracks()[0],I),this._bufferGainNode.connect(this._audioDestination),this._context.emitMessage({mixId:-1,state:MC.AUDIO_MIXING_STATE_PCM_ENABLED,error:zC.AUDIO_MIXING_ERROR_OK})}disableAudioMixingBuffer(){if(this.cachedBuffer=[],this._audioBufferSource){try{this._audioBufferSource.onended=null,this._audioBufferSource.disconnect(this._bufferGainNode),this._bufferGainNode.disconnect(this._audioDestination),this._bufferGainNode.disconnect(this._sharedAudioContext.destination)}catch{}finally{this._audioBufferSource=void 0}this._context.updateLocalAudioTrack(),this._context.emitMessage({mixId:-1,state:MC.AUDIO_MIXING_STATE_PCM_DISABLED,error:zC.AUDIO_MIXING_ERROR_OK})}}pushAudioMixingBuffer(I){if(!(this._audioBufferSource&&(this.cachedBuffer.push(I),this.cachedBuffer.length>0))){this._audioBufferSource=this._sharedAudioContext.createBufferSource(),this._audioBufferSource.buffer=I,this._audioBufferSource.connect(this._bufferGainNode);try{this._audioBufferSource.start()}catch{this._failedAudioList.push(this._audioBufferSource)}this._audioBufferSource.onended=()=>{var g;if((g=this._audioBufferSource)===null||g===void 0||g.disconnect(this._bufferGainNode),this._audioBufferSource=void 0,this.cachedBuffer.length){const C=this.cachedBuffer.shift();C&&this.pushAudioMixingBuffer(C)}}}}stopAll(){if(this._localSource)try{this._localSource.disconnect(this._localGainNode),delete this._localSource}catch{}this.mixingMap.forEach((I,g)=>{this.stopAudioMixing(g)})}get mixTrack(){return this._audioDestination.stream.getAudioTracks()[0]}get sharedAudioContext(){return this._sharedAudioContext}async resumeLocalPlay(){const I=[];for(const g of this._failedAudioList)try{g instanceof HTMLAudioElement?(g.muted=!1,await g.play()):g.start()}catch(C){I.push(g),console.error(C),this._context.onAutoPlayFailed({userId:this.id,kind:"audio",streamIndex:W.STREAM_INDEX_MAIN,mediaType:sA.AUDIO});break}this._failedAudioList=I}destroy(){const{_sharedAudioContext:I}=this;I.state!=="closed"&&typeof I.close=="function"&&I.close(),this.cachedBuffer=[],this.mixingMap.clear(),this.resourcesCache.clear(),this.volumeConfig.clear(),this._startingIds=new Map,this._revokeURLs.forEach(g=>{vi.revokeObjectURL(g)})}}hC([f(["id","filePath","options"])],QC.prototype,"startAudioMixing"),hC([f(["id"])],QC.prototype,"stopAudioMixing"),hC([f(["id"])],QC.prototype,"pauseAudioMixing"),hC([f(["id"])],QC.prototype,"resumeAudioMixing"),hC([f(["id"])],QC.prototype,"preloadAudioMixing"),hC([f(["id"])],QC.prototype,"unloadAudioMixing"),hC([f(["id"])],QC.prototype,"getAudioMixingVolume"),hC([f(["id","volume"])],QC.prototype,"setAudioMixingVolume"),hC([f(["id"])],QC.prototype,"getAudioMixingDuration"),hC([f(["id"])],QC.prototype,"getAudioMixingCurrentPosition"),hC([f(["id","position"])],QC.prototype,"setAudioMixingPosition"),hC([f(["id","callback","frameSize"])],QC.prototype,"setAudioFrameCallback"),hC([f(["type"])],QC.prototype,"enableAudioMixingBuffer"),hC([f()],QC.prototype,"disableAudioMixingBuffer"),hC([f(["buffer"])],QC.prototype,"pushAudioMixingBuffer");class XGA extends tB.EventEmitter{constructor(I){super(),l(this,"_loginSessionId",null),l(this,"_userId",null),l(this,"_token",null),l(this,"_loginResolveCallback",void 0),l(this,"_loginRejectCallback",void 0),l(this,"_waitLoginToken",!1),l(this,"_serverParamsCache",void 0),l(this,"id",void 0),l(this,"logger",void 0),l(this,"_clearListeners",void 0),this._ctx=I,this.id=I.id,this.logger=new SA("RTSClient",1,I.id)}login(I,g){return new Promise((C,Q)=>{var i;if(this.logger.info("login","invoke login, token: %o, userId: %o",I,g),this._loginSessionId)throw new K(S.ALREADY_LOGIN,"Already logined");if(this._loginResolveCallback)throw new K(S.LOGIN_FAILED,"Is logging in, please try again later.");this._userId=g,this._token=I,(i=bI(this.id))===null||i===void 0||i.set({rtm_user_id:g}),this._loginResolveCallback=C,this._loginRejectCallback=Q,this._ctx.signalingManager.connect().then(()=>{this._addSignalEventHandler(),this._login()})})}async logout(){if(!this._loginSessionId||!this._userId)throw new K(S.NOT_LOGIN,"login first");this._checkNotInLimitMode("logout"),await this._ctx.signalingManager.sendSignaling("logout",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId},{functionType:ht.C2RTM}).catch(()=>{}),this._clearState()}async updateLoginToken(I){return this._checkNotInLimitMode("updateLoginToken"),this._token=I,new Promise((g,C)=>{this._waitLoginToken?(this._loginResolveCallback=g,this._loginRejectCallback=C,this._login()):g()})}async getPeerOnlineStatus(I){if(!this._loginSessionId||!this._userId)throw new K(S.NOT_LOGIN,"login first");this._checkNotInLimitMode("getPeerOnlineStatus");const g=await this._ctx.signalingManager.sendSignaling("getPeerOnlineStatus",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId,peerUserId:I},{functionType:ht.C2RTM});return g==null?void 0:g.status}async sendUserMessageOutsideRoom(I,g){if(!this._loginSessionId||!this._userId)throw new K(S.NOT_LOGIN,"login first");return this._checkNotInLimitMode("sendUserMessageOutsideRoom"),this._ctx.rtsLimiter.e2e.check(g),this._ctx.signalingManager.sendP2PMessage({from:this._userId,app:this._ctx.appId,to:I,room:"",msg:g})}async setRTSMessageLimit(I){I&&this._ctx.signalingManager.sendSignaling("RTSMessageLimit",{appId:this._ctx.appId,interval:I.rts_qps_interval,broadcast:I.rts_broadcast_qps_value,one2one:I.rts_e2e_qps_value,e2bs:I.rts_e2s_qps_value},{functionType:ht.C2RTM}).catch(()=>{})}async setServerParams(I,g){try{if(EI(I,"signature"),EI(g,"url"),!this._loginSessionId||!this._userId)throw new K(S.NOT_LOGIN,"login first");await this._ctx.signalingManager.sendSignaling("setServerParams",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId,signature:I,url:g},{functionType:ht.C2RTM}).catch(C=>{throw new K(S.UNEXPECTED_ERROR,C.msg)}),Ig.setServerUrl(this.id,g),this._serverParamsCache={signature:I,url:g},this.emit("onServerParamsSetResult")}catch(C){throw this.emit("onServerParamsSetResult",C),C}}async sendServerMessage(I){if(!this._loginSessionId||!this._userId)throw new K(S.NOT_LOGIN,"login first");return this._checkNotInLimitMode("sendServerMessage"),this._ctx.rtsLimiter.e2s.check(I),this._ctx.signalingManager.sendP2PMessage({from:this._userId,app:this._ctx.appId,to:"",room:"",type:US.BUSINESS_SERVER,msg:I})}destroy(){this.logger.info("destroy","invoke."),super.removeAllListeners(),this._loginResolveCallback&&this._loginRejectCallback&&(this._loginRejectCallback(new K(S.LOGIN_FAILED,"logout")),delete this._loginResolveCallback,delete this._loginRejectCallback),this._clearState(),delete this._serverParamsCache}_login(){var I;if(!this._userId)return;const g=cE();try{this._checkNotInLimitMode("login")}catch(Q){var C;(C=this._loginRejectCallback)===null||C===void 0||C.call(this,Q)}this._ctx.signalingManager.sendSignaling("login",{Token:Pg.token2auth(this._ctx.appId,null,this._userId,this._token),timestamp:Date.now(),loginSessionId:g,params:{userAgent:window.navigator.userAgent,sdkVersion:fA.VERSION,deviceId:oI.getDeviceId(),appId:this._ctx.appId,userId:this._userId,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(I=fA.MEDIA_PROCESSING_TYPE)!==null&&I!==void 0?I:0}},{functionType:ht.C2RTM}).then(()=>{typeof this._loginResolveCallback=="function"&&this._loginResolveCallback(),this._loginSessionId=g,Ig.setRtsSessionId(this.id,g),this._waitLoginToken=!1,this._serverParamsCache&&this.setServerParams(this._serverParamsCache.signature,this._serverParamsCache.url)}).catch(Q=>{const{code:i,message:B}=Q||{};let E,e;this._waitLoginToken=!1,i>=700&&i<800?i===708?(E=S.INVALID_PARAMS,e="Invalid userId"):(E=S.INVALID_TOKEN,e="Invalid token",this._waitLoginToken=!0,this._loginRejectCallback||this.emit("onRTMTokenError")):(E=S.LOGIN_FAILED,e="login failed"),typeof this._loginRejectCallback=="function"&&this._loginRejectCallback(new K(E,B||e))}).finally(()=>{delete this._loginResolveCallback,delete this._loginRejectCallback})}_addSignalEventHandler(){const I=B=>{B.state===CI.CONNECTION_STATE_RECONNECTED&&this._login()},g=()=>this._clearState(),C=B=>{this.emit("onUserMessageReceivedOutsideRoom",{userId:B.from,message:B.msg})},Q=B=>{this.emit("onUserBinaryMessageReceivedOutsideRoom",{userId:B.from,message:B.msg})},i=B=>{B.clientId!==this._userId||B.roomId||(this.emit("onUserDisconnection"),this._clearState())};this._ctx.signalingManager.on(og.ON_CONNECTION_STATE_CHANGE,I),this._ctx.signalingManager.on(og.ON_RECONNECT_FAILED,g),this._ctx.signalingManager.on(IA.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM,C),this._ctx.signalingManager.on(IA.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM,Q),this._ctx.signalingManager.on(IA.USER_DISCONNECTION,i),this._clearListeners=()=>{this._ctx.signalingManager.off(og.ON_CONNECTION_STATE_CHANGE,I),this._ctx.signalingManager.off(og.ON_RECONNECT_FAILED,g),this._ctx.signalingManager.off(IA.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM,C),this._ctx.signalingManager.off(IA.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM,Q),this._ctx.signalingManager.off(IA.USER_DISCONNECTION,i)}}_clearState(){var I;(I=this._clearListeners)===null||I===void 0||I.call(this),this._userId=null,this._token=null,this._loginSessionId=null,Ig.setRtsSessionId(this.id,"")}_checkNotInLimitMode(I){if(this._ctx.rtsMode===Zt.LIMIT_MODE)throw new K(S.NOT_ALLOWED_IN_RESTRICTED_MODE,"not allow to call ".concat(I," in rts restricted mode"))}}var jg=(A=>(A.onWTNPushStateChanged="onWTNPushStateChanged",A.onWTNPlayStateChanged="onWTNPlayStateChanged",A.onWTNRemoteAudioStateChanged="onWTNRemoteAudioStateChanged",A.onWTNRemoteVideoStateChanged="onWTNRemoteVideoStateChanged",A.onWTNRemoteVideoStats="onWTNRemoteVideoStats",A.onWTNRemoteAudioStats="onWTNRemoteAudioStats",A.onWTNFirstRemoteVideoFrameDecoded="onWTNFirstRemoteVideoFrameDecoded",A.onWTNSEIMessageReceived="onWTNSEIMessageReceived",A))(jg||{}),gi=(A=>(A[A.INIT=0]="INIT",A[A.START=1]="START",A[A.SUCCESS=2]="SUCCESS",A[A.STOP=3]="STOP",A[A.FAIL=4]="FAIL",A))(gi||{}),$B=(A=>(A[A.PUSH_SUCCESS=0]="PUSH_SUCCESS",A[A.START_PUSH=1]="START_PUSH",A[A.STOP_PUSH=2]="STOP_PUSH",A[A.IN_RETRY=3]="IN_RETRY",A[A.RETRY_FAIL=4]="RETRY_FAIL",A[A.NO_PUSH_PERMISSION=5]="NO_PUSH_PERMISSION",A[A.STREAM_PUSH_BY_OTHER=6]="STREAM_PUSH_BY_OTHER",A))($B||{}),Mg=(A=>(A[A.INIT=0]="INIT",A[A.START=1]="START",A[A.SUCCESS=2]="SUCCESS",A[A.STOP=3]="STOP",A[A.FAIL=4]="FAIL",A))(Mg||{}),fC=(A=>(A[A.PLAY_SUCCESS=0]="PLAY_SUCCESS",A[A.START_PLAY=1]="START_PLAY",A[A.STOP_PLAY=2]="STOP_PLAY",A[A.REMOTE_STOP=3]="REMOTE_STOP",A[A.REMOTE_FAILURE=4]="REMOTE_FAILURE",A[A.STREAM_BANNED=5]="STREAM_BANNED",A[A.NO_PLAY_PERMISSION=6]="NO_PLAY_PERMISSION",A[A.STREAM_NOT_EXIST=7]="STREAM_NOT_EXIST",A[A.IN_RETRY=8]="IN_RETRY",A[A.RETRY_FAIL=9]="RETRY_FAIL",A[A.INTERNAL=10]="INTERNAL",A[A.OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT=1310]="OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT",A[A.OVER_STREAM_SUBSCRIBE_USER_LIMIT=1311]="OVER_STREAM_SUBSCRIBE_USER_LIMIT",A[A.OVER_STREAM_SUBSCRIBE_REQUES_TLIMIT=1312]="OVER_STREAM_SUBSCRIBE_REQUES_TLIMIT",A))(fC||{}),FB=(A=>(A[A.STOPED=0]="STOPED",A[A.STARTING=1]="STARTING",A[A.DECODING=2]="DECODING",A[A.FROZEN=3]="FROZEN",A[A.FAILED=4]="FAILED",A))(FB||{}),Ie=(A=>(A[A.INTERNAL=0]="INTERNAL",A[A.NETWORK_CONGESTION=1]="NETWORK_CONGESTION",A[A.NETWORK_RECOVERY=2]="NETWORK_RECOVERY",A[A.UNMUTE=3]="UNMUTE",A[A.MUTE=4]="MUTE",A[A.REMOTE_START=5]="REMOTE_START",A[A.REMOTE_STOP=6]="REMOTE_STOP",A))(Ie||{}),UB=(A=>(A[A.STOPED=0]="STOPED",A[A.STARTING=1]="STARTING",A[A.DECODING=2]="DECODING",A[A.FROZEN=3]="FROZEN",A[A.FAILED=4]="FAILED",A))(UB||{}),ge=(A=>(A[A.INTERNAL=0]="INTERNAL",A[A.NETWORK_CONGESTION=1]="NETWORK_CONGESTION",A[A.NETWORK_RECOVERY=2]="NETWORK_RECOVERY",A[A.UNMUTE=3]="UNMUTE",A[A.MUTE=4]="MUTE",A[A.REMOTE_START=5]="REMOTE_START",A[A.REMOTE_STOP=6]="REMOTE_STOP",A))(ge||{});const Z0={interval:1e3,retryDuration:0};class HGA extends R0{constructor(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0&&arguments[3];super(C,Ss.STREAM_INDEX_MAIN),l(this,"_state",gi.INIT),l(this,"_stateChangeTs",dA()),l(this,"streamId",void 0),l(this,"Authorization",void 0),l(this,"_backOff",Z0),this.token=g,this.streamId=I,this.logName="WTNLocalStream-".concat(I),this.observer=new wG(this._ctx,this),this.Authorization=Pg.token2auth(C.appId,"",I,g),this._state=Q?gi.FAIL:gi.INIT}setState(I,g){const C=this._state;if(C===I)return;this.logger.print("setState",I,g),this._state=I;const Q=dA();this.safeEmit(jg.onWTNPushStateChanged,{streamId:this.streamId,oldState:C,newState:I,reason:g,elapse:Q-this._stateChangeTs}),this._stateChangeTs=Q}getPushBackOff(){return this._backOff}updatePushBackOff(){this._backOff.retryDuration+=this._backOff.interval,this._backOff.interval=this._backOff.interval>4e3?8e3:2*this._backOff.interval}resetPushBackOff(){this._backOff=Z0}}class xGA extends L0{constructor(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0&&arguments[3];super(C,I,I,!1,!0,{audiostream:!0,localaudio:!0,videostream:!0,localvideo:!0,extaudio:!1,extvideo:!1,videoDescriptions:[]}),l(this,"_state",Mg.INIT),l(this,"Authorization",void 0),l(this,"_stateChangeTs",dA()),l(this,"streamId",void 0),l(this,"_backOff",Z0),l(this,"_audioState",FB.STOPED),l(this,"_videoState",UB.STOPED),this.token=g,this.streamId=I,this.logName="WTNRemoteStream-".concat(I),this.observer=new KX(this._ctx,this),this._initObserverEvent(Q),this.Authorization=Pg.token2auth(C.appId,"",I,g),this._state=Q?Mg.FAIL:Mg.INIT}setState(I,g){const C=this._state;if(C===I)return;this.logger.print("setState",I,g),this._state=I;const Q=dA();this.safeEmit(jg.onWTNPlayStateChanged,{streamId:this.streamId,oldState:C,newState:I,reason:g,elapse:Q-this._stateChangeTs}),this._stateChangeTs=Q}get state(){return this._state}getPushBackOff(){return this._backOff}updatePushBackOff(){this._backOff.retryDuration+=this._backOff.interval,this._backOff.interval=this._backOff.interval>4e3?8e3:2*this._backOff.interval}resetPushBackOff(){this._backOff=Z0}setVideoState(I,g){this._videoState!==I&&(I===UB.DECODING&&this.setVideoState(UB.STARTING,g),this.logger.print("setVideoState",I,g),this._videoState=I,this.safeEmit(jg.onWTNRemoteVideoStateChanged,{streamId:this.streamId,state:I,reason:g}))}setAudioState(I,g){this._audioState!==I&&(I===FB.DECODING&&this.setAudioState(FB.STARTING,g),this.logger.print("setAudioState",I,g),this._audioState=I,this.safeEmit(jg.onWTNRemoteAudioStateChanged,{streamId:this.streamId,state:I,reason:g}))}muteToSubMediaType(I,g){let C=!1;const Q=lg(this.subMediaType),i=vI(this.subMediaType);return typeof I=="boolean"&&Q===I&&(this.subMediaType+=I?-sA.AUDIO:sA.AUDIO,C=!0),typeof g=="boolean"&&i===g&&(this.subMediaType+=g?-sA.VIDEO:sA.VIDEO,C=!0),C}getEnableMediaType(){return{audio:lg(this.subMediaType),video:vI(this.subMediaType)}}_initObserverEvent(I){var g,C;(g=this.observer)===null||g===void 0||g.once("recvAudioFirstFrame",()=>{this.setAudioState(FB.DECODING,I?Ie.NETWORK_RECOVERY:Ie.REMOTE_START)}),(C=this.observer)===null||C===void 0||C.once("recvVideoFirstFrame",()=>{this.setVideoState(UB.DECODING,I?ge.NETWORK_RECOVERY:ge.REMOTE_START)})}}const OGA=["rid"];var qGA=Object.defineProperty,_GA=Object.getOwnPropertyDescriptor,uC=(A,I,g,C)=>{for(var Q,i=_GA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&qGA(I,g,i),i};class iC extends KQ{constructor(I){super(),l(this,"_reportName","WTNStream"),l(this,"_localStreams",new Map),l(this,"_remoteStreams",new Map),l(this,"_logger",void 0),l(this,"_monitor",void 0),l(this,"_ontrackCallbackMap",new Map),l(this,"_pushTaskMap",new Map),l(this,"_playTaskMap",new Map),l(this,"engineId",void 0),l(this,"_publicVideoPlayerConfig",new Map),l(this,"__onSEIMessageReceived",void 0),l(this,"__onRemoteStreamStats",void 0),l(this,"__onResubscribe",void 0),l(this,"__onPlayerEvents",void 0),l(this,"_clearSignalListeners",void 0),this._ctx=I,this._monitor=bI(I.id),this._logger=new SA("WTNStream",1,I.id),this.engineId=I.id,this._addSignalListeners()}async startPushWTN(I,g,C,Q){let i=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(C=!!C,Q=!!Q,this._logger.print("startPushWTN",I,g,C,Q),An(g),!si(I)&&EI(I,"token"),this._localStreams.get(g))return;const B=new HGA(g,I,this._ctx,i);this._addLocalStreamEventHandler(B),B.setState(gi.START,$B.START_PUSH),this._localStreams.set(g,B),await this._ctx.signalingManager.connect(),B.videoTrack=this._ctx.localVideoTrack,B.audioTrack=this._ctx.localAudioTrack,B.pubAudio=!Q,B.pubVideo=!C,await new Promise((E,e)=>{i||this._pushTaskMap.set(g,{resolve:()=>{E(),B.startReport(()=>{},this._ctx.handler)},reject:e}),this._sendStartPushStreamSignal(B).catch(t=>e(t))})}async stopPushWTN(I){this._logger.print("stopPushWTN",I);const g=this._localStreams.get(I);g&&(g.setState(gi.STOP,$B.STOP_PUSH),this._ctx.signalingManager.sendSignaling("stopPushStream",{appId:this._ctx.appId,streamId:I}).catch(()=>{}),await this._stopLocalStream(g))}async muteWTNLocalAudio(I,g){this._logger.print("muteWTNLocalAudio",I,g);const C=this._localStreams.get(I);if(!C)throw new K(S.INVALID_PARAMS,"streamId not found");this._assertNotConnect(),C.pubAudio=!g,await this._updatePushStream(C)}async muteWTNLocalVideo(I,g){this._logger.print("muteWTNLocalVideo",I,g);const C=this._localStreams.get(I);if(!C)throw new K(S.INVALID_PARAMS,"streamId not found");this._assertNotConnect(),C.pubVideo=!g,await this._updatePushStream(C)}sendWTNSEIMessage(I,g,C){this._logger.info("sendWTNSEIMessage()","streamId: %o, sei: %o, repeatCount: %o",I,g,C);const Q=this._localStreams.get(I);if(!Q||!Q.pubVideo&&!Q.pubAudio)return;if(!lE()&&!Bv())return Ae("Your browser does not support sending SEI"),!1;Tt(C,"repeatCount",0,30);const i=typeof g=="string"?new Uint8Array(Pg.str2ab(g)):g;if(!g.length)return this._logger.warn("sei message must not be empty"),!1;if(i.byteLength>4096)return void this._logger.warn("sei size must not bigger than 4KB");kB||this._maybeFillBackFrame2Stream(Q);const B=cE();Q.sendSEIMessage({content:i,uuid:B,repeatCount:C+1}),setTimeout(async()=>{if(Q){var E;await Q.revokeSEIMessage(B)&&(console.error("[RTC WebSDK] sei timeout for message: %o",g),(E=this._monitor)===null||E===void 0||E.report("rtc_sdk_callback",{sdk_callback_name:"sendSEIMessage",message:"timeout for message: ".concat(g),error_code:400}))}},yA("SEI_TIME_OUT"))}async startPlayWTN(I,g,C,Q){var i;let B=arguments.length>4&&arguments[4]!==void 0&&arguments[4];C=!!C,Q=!!Q,this._logger.print("startPlayWTN",I,g,C,Q),An(g),!si(I)&&EI(I,"token");let E=this._remoteStreams.get(g);if(E){if(E.state===Mg.START||E.state===Mg.SUCCESS)throw new K(S.REPEAT_PLAY,"repeat play public media stream");await this.stopPlayWTN(E.streamId)}E=new xGA(g,I,this._ctx,B),this._addRemoteStreamEventHandler(E),E.setState(Mg.START,fC.START_PLAY),E.muteToSubMediaType(Q,C),this._remoteStreams.set(g,E),(i=E.observer)===null||i===void 0||i.setLogin(!0,E.getEnableMediaType());try{await this._ctx.signalingManager.connect(),await new Promise((e,t)=>{B||this._playTaskMap.set(g,{resolve:e,reject:t}),this._sendStartPullStreamSignal(E).catch(o=>t(o))})}catch(e){throw this._remoteStreams.delete(g),e}}async stopPlayWTN(I){var g,C;this._logger.print("stopPlayWTN",I);const Q=this._remoteStreams.get(I);if(Q)return Q.setState(Mg.STOP,fC.STOP_PLAY),Q.setAudioState(FB.STOPED,Ie.MUTE),Q.setVideoState(UB.STOPED,ge.MUTE),(g=Q.observer)===null||g===void 0||g.setLogin(!1),Q==null||(C=Q.audioTrack)===null||C===void 0||C.stop(),this._remoteStreams.delete(I),await this._ctx.signalingManager.connect(),this._unsubscribePublicStream(Q)}async muteWTNRemoteAudio(I,g){this._logger.print("muteWTNRemoteAudio",I,g),this._assertNotConnect();const C=this._remoteStreams.get(I);if(!C)throw new K(S.INVALID_PARAMS,"streamId not found");var Q;C.muteToSubMediaType(g,null)&&((Q=C.observer)===null||Q===void 0||Q.setUnmuteAudio(!g),await this._updatePullStream(I,C),C.setAudioState(g?FB.STOPED:FB.DECODING,g?Ie.MUTE:Ie.UNMUTE))}async muteWTNRemoteVideo(I,g){this._logger.print("muteWTNRemoteVideo",I,g),this._assertNotConnect();const C=this._remoteStreams.get(I);if(!C)throw new K(S.INVALID_PARAMS,"streamId not found");var Q;C.muteToSubMediaType(null,g)&&((Q=C.observer)===null||Q===void 0||Q.setUnmuteVideo(!g),await this._updatePullStream(I,C),C.setVideoState(g?UB.STOPED:UB.DECODING,g?ge.MUTE:ge.UNMUTE))}setWTNRemoteVideoPlayer(I,g){var C;if(this._logger.print("setWTNRemoteVideoPlayer()","streamId: %o, videoPlayerOption: %o",I,g),(C=this._publicVideoPlayerConfig.get(I))===null||C===void 0||(C=C.player)===null||C===void 0||C.destroy(),!g.renderDom)return void this._publicVideoPlayerConfig.delete(I);const Q=new jE(this._ctx.id,ei,p(p({},g),{},{isLocal:!1,userId:I})),i=p(p({},g),{},{player:Q});return this._publicVideoPlayerConfig.set(I,i),this._updateVideoPlayerState(I),Q.domElement}setWTNRemoteAudioPlaybackVolume(I,g){var C;EI(I,"publicStreamId"),g=Q9(g,"volume",0,400),this._ctx.publicAudioVolume.set(I,g),(C=this._remoteStreams.get(I))===null||C===void 0||(C=C.audioTrack)===null||C===void 0||C.setVolume(g)}__getRemoteStreams(){return this._remoteStreams}__getPublicStreamTrack(I,g){const C=this._remoteStreams.get(I);if(C)return g==="video"?C.videoTrack:C.audioTrack}async _updatePushTrack(){this._localStreams.size!==0&&(this._logger.info("_updatePushTrack()"),await this._ctx.signalingManager.connect(),this._localStreams.forEach(async I=>{I.videoTrack=this._ctx.localVideoTrack,I.audioTrack=this._ctx.localAudioTrack,await this._updatePushStream(I)}))}destroy(){var I;this._remoteStreams.forEach(g=>{g.destroy()}),this._remoteStreams=new Map,this.removeAllListeners(),this._ontrackCallbackMap.clear(),this._publicVideoPlayerConfig.forEach(g=>{g.player.destroy()}),this._publicVideoPlayerConfig.clear(),(I=this._clearSignalListeners)===null||I===void 0||I.call(this)}async _sendStartPushStreamSignal(I){var g,C,Q,i;this._logger.print("_sendStartPushStreamSignal()","streamId: %s",I.streamId);const{streamId:B,Authorization:E,pubAudio:e,pubVideo:t}=I,{handler:o}=this._ctx;await(o==null?void 0:o.getDefaultSdp());const r=await o.publish(I),s=await Mn(),{appId:v,businessId:n,useCloudProxy:a}=this._ctx,c={appId:v,streamId:B,Authorization:E,sdpInfo:{msid:I.stream.id,type:r.type,sdp:r.partialSdp,semantics:r.semantics},timestamp:Date.now(),params:{appId:v,businessId:n,userAgent:window.navigator.userAgent,sdkVersion:fA.VERSION,deviceId:oI.getDeviceId(),enableCloudProxy:a,channelProfile:"0",SDKCodecNegotiation:!0,supportedCodecs:s,sdkType:"rtc",joinRoomMode:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=fA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0,enableStreamStatusCallback:!0},attributes:{localaudio:!!I.audioTrack,localvideo:!!I.videoTrack,videostream:t,audiostream:e,extvideo:((C=I.videoTrack)===null||C===void 0?void 0:C.sourceType)===DI.EXTERNAL,extaudio:((Q=I.audioTrack)===null||Q===void 0?void 0:Q.sourceType)===DI.EXTERNAL,videoDescriptions:r.videoDescriptions.map(u=>ze(u,OGA)),videoType:TC.NORMAL},video:t,audio:e,screen:I.isScreen};let P;try{this.emit("__onSendingPushStreamMessageHook"),P=await this._ctx.signalingManager.sendSignaling("startPushStream",c)}catch(u){if(await(o==null?void 0:o.rollback({msid:I.stream.id,stream:I,audioMid:r.audioMid,videoMid:r.videoMid})),u.code>=500&&u.code<600){const D=I.getPushBackOff();if(D.retryDuration<6e4)return this._logger.info("pushRetry","start msid: %s, retryDuration: %s",I.id,D.retryDuration),await new Promise(y=>setTimeout(y,D.interval)),I.updatePushBackOff(),I.resetStream(),I.setState(gi.START,$B.IN_RETRY),this._sendStartPushStreamSignal(I);throw this._logger.info("pushRetry","end"),I.setState(gi.FAIL,$B.RETRY_FAIL),await this._stopLocalStream(I),I.resetPushBackOff(),new K(S.WTN_PUSH_FAILED,u.message||"server error")}if(u.code===401)throw I.setState(gi.FAIL,$B.NO_PUSH_PERMISSION),await this._stopLocalStream(I),new K(S.WTN_PUSH_FAILED,u.message||"token error");if(u.code===S.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting())return;throw new K(S.WTN_PUSH_FAILED,u.message||"push error")}I.pubAttributes=c.attributes;const d=await I.getSelectedCodec();I.currentVideoCodec=d;const h=new Promise((u,D)=>{var y,b;o==null||o.handleAck({action:hI.publish,streamId:B,audioMid:r.audioMid,videoMid:r.videoMid,audioTransceiverInit:r==null?void 0:r.audioTransceiverInit,videoTransceiverInit:r==null?void 0:r.videoTransceiverInit,signalingAck:{sdp:(y=P)===null||y===void 0||(y=y.relayMessage)===null||y===void 0?void 0:y.sdp,sequenceId:(b=P)===null||b===void 0||(b=b.relayMessage)===null||b===void 0?void 0:b.sequenceId},stream:I,videoCodec:d,onSuccess:()=>{this._logger.info("pushStream()","pushStream success"),I.setState(gi.SUCCESS,$B.PUSH_SUCCESS),u(0)},onFail:G=>{this._logger.info("pushStream()","pushStream fail"),D(G)}})});!KI&&await h,(i=this._pushTaskMap.get(B))===null||i===void 0||i.resolve(),this._pushTaskMap.delete(B)}async _stopLocalStream(I){var g;I.stopBlackFrame(),await((g=this._ctx.handler)===null||g===void 0?void 0:g.handleAck({action:hI.unpublish,audioMid:I.audioMid,videoMid:I.videoMid,stream:I,streamId:I.streamId})),I.destroy(),this._localStreams.delete(I.streamId)}async _updatePushStream(I){var g,C,Q,i;const{videoTrack:B,audioTrack:E,pubAudio:e,pubVideo:t}=I;let o=(g=I.audioTrack)===null||g===void 0?void 0:g.preprocessingTrack;const r=(C=I.videoTrack)===null||C===void 0?void 0:C.preprocessingTrack;var s,v;if(t&&r?(I.stopBlackFrame(),await((s=I.videoTransceiver)===null||s===void 0?void 0:s.sender.replaceTrack(r))):await((v=I.videoTransceiver)===null||v===void 0?void 0:v.sender.replaceTrack(null)),e&&o){var n;const{mixType:h,mixedAudioTrack:u}=I.audioTrack;u&&h!==li.PLAYOUT&&o.enabled&&(o=u),await((n=I.audioTransceiver)===null||n===void 0?void 0:n.sender.replaceTrack(o))}else{var a;await((a=I.audioTransceiver)===null||a===void 0?void 0:a.sender.replaceTrack(null))}const c={localaudio:!!E,localvideo:!!B,videostream:t,audiostream:e,extvideo:(B==null?void 0:B.sourceType)===DI.EXTERNAL,extaudio:(E==null?void 0:E.sourceType)===DI.EXTERNAL,videoType:B?TC.NORMAL:I.pubAttributes.videoType},P={};for(const[h,u]of Object.entries(c))u!==Reflect.get(I.pubAttributes,h)&&Reflect.set(P,h,u);var d;Object.keys(P).length&&(I.pubAudio=(Q=c.audiostream)!==null&&Q!==void 0?Q:I.pubAudio,I.pubVideo=(i=c.videostream)!==null&&i!==void 0?i:I.pubVideo,I.pubAttributes=p(p({},I.pubAttributes),c),I.pubAttributes.videostream||I.stopBlackFrame(),await this._ctx.signalingManager.sendSignaling("updatePushStream",{appId:this._ctx.appId,streamId:I.streamId,attributes:c}),KI&&await((d=this._ctx.handler)===null||d===void 0?void 0:d.setCurrentDescription()))}async _sendStartPullStreamSignal(I){var g,C,Q,i,B;this._logger.print("startPullStream()","streamId:",I.streamId);const{streamId:E,Authorization:e}=I,{handler:t}=this._ctx,o=await(t==null?void 0:t.subscribe(I,{multiChatMode:!1}));if(!o)throw new K(S.ADD_TRANSCEIVER_FAILED,"add transceiver failed");const r=dA(),{audioMid:s,videoMid:v}=o,{appId:n,businessId:a,useCloudProxy:c}=this._ctx,P=await Mn(),d={appId:n,streamId:E,Authorization:e,audio:!0,video:!0,screen:!1,timestamp:Date.now(),sdpInfo:{sdp:o.partialSdp,semantics:o.semantics,type:o.type},params:{appId:n,businessId:a,userAgent:window.navigator.userAgent,sdkVersion:fA.VERSION,deviceId:oI.getDeviceId(),enableCloudProxy:c,channelProfile:"0",SDKCodecNegotiation:!0,supportedCodecs:P,sdkType:"rtc",joinRoomMode:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=fA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0,enableStreamStatusCallback:!0},config:{enableMediaType:I.getEnableMediaType(),qualityLayer:{spatialLayer:0,temporalLayer:0}}};let h;try{this.emit("__onSendingPullStreamMessageHook"),h=await this._ctx.signalingManager.sendSignaling("startPullStream",d)}catch(G){if(await(t==null?void 0:t.rollback({msid:E,stream:I})),G.code===401)throw I.setState(Mg.FAIL,fC.NO_PLAY_PERMISSION),new K(S.WTN_PLAY_FAILED,G.message||"token error");if(G.code===433)throw I.setState(Mg.FAIL,fC.OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT),new K(S.WTN_PLAY_FAILED,G.message||"over client subscribe stream limit");if(G.code===434)throw I.setState(Mg.FAIL,fC.OVER_STREAM_SUBSCRIBE_USER_LIMIT),new K(S.WTN_PLAY_FAILED,G.message||"over stream subscribe user limit");if(G.code===S.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting())return;throw I.setState(Mg.FAIL,fC.INTERNAL),new K(S.WTN_PLAY_FAILED,G.message||"play wtn error")}const u=[];u.push(new Promise((G,L)=>{const m=setTimeout(()=>L(new K(S.WTN_PLAY_FAILED,"wait video timeout for streamId: ".concat(E))),6e4),F=U=>{U.mediaType==="video"&&(this._logger.success("remoteStream ".concat(I.userId," received video track")),I.off("ontrack",F),clearTimeout(m),G(0))};I.on("ontrack",F)})),u.push(new Promise((G,L)=>{const m=setTimeout(()=>L(new K(S.WTN_PLAY_FAILED,"wait audio timeout for streamId: ".concat(E))),6e4),F=U=>{U.mediaType==="audio"&&(this._logger.success("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",F),clearTimeout(m),G(0))};I.on("ontrack",F)}));const D=G=>{I.ontrack(G)};(C=this._ctx.handler)===null||C===void 0||C.on("ontrack",D),this._ontrackCallbackMap.set(I,D);const{sequenceId:y,sdp:b}=h.relayMessage;I.videoMid=v,I.audioMid=s,I.sequenceId=y,I.streamState=OC.SUB_ED,await((Q=this._ctx.handler)===null||Q===void 0?void 0:Q.handleAck({action:hI.subscribe,streamId:E,audioMid:s,videoMid:v,audioTransceiverInit:o.audioTransceiverInit,videoTransceiverInit:o.videoTransceiverInit,signalingAck:{sdp:b,sequenceId:y},stream:I})),await Promise.all(u),(i=this._monitor)===null||i===void 0||i.report("rtc_subscribe_stat",{result:"success",start:r,message:"unknown",stream_user_id:I.userId}),I.startReport(G=>{var L;G.publicStreamId=G.userId,delete G.userId,delete G.isScreen;const m=xC(G);m.audioStats&&this.safeEmit(jg.onWTNRemoteAudioStats,{streamId:I.streamId,audioStats:m.audioStats}),m.videoStats&&this.safeEmit(jg.onWTNRemoteVideoStats,{streamId:I.streamId,videoStats:m.videoStats}),(L=this.__onRemoteStreamStats)===null||L===void 0||L.call(this,m)},this._ctx.handler),this._updateVideoPlayerState(E),this._initAudioPlayer(E),I.subVideo=I.getEnableMediaType().video,I.subAudio=I.getEnableMediaType().audio,(B=this._playTaskMap.get(E))===null||B===void 0||B.resolve(),this._playTaskMap.delete(E)}async _unsubscribePublicStream(I){var g;dr("_unsubscribePublicStream()",I,this._logger);const C={appId:this._ctx.appId,streamId:I.streamId};try{await this._ctx.signalingManager.sendSignaling("stopPullStream",C)}catch{}I.streamState=OC.INIT,await((g=this._ctx.handler)===null||g===void 0?void 0:g.handleAck({action:hI.unsubscribe,streamId:I.streamId,audioMid:I.audioMid,videoMid:I.videoMid,stream:I})),I.subMediaType=GQ.NONE,this._removeOnTrackListener(I),I.statsReport.unsubscribe(),I.destroy()}async _updatePullStream(I,g){const C=g.getEnableMediaType();await this._ctx.signalingManager.sendSignaling("updatePullStream",{appId:this._ctx.appId,streamId:I,config:{enableMediaType:C}}),g.subVideo=C.video,g.subAudio=C.audio}_removeOnTrackListener(I){const g=this._ontrackCallbackMap.get(I);if(g){const C=I.vendorHandler||this._ctx.handler;C==null||C.off("ontrack",g),this._ontrackCallbackMap.delete(I)}}_addSignalListeners(){const I={[og.ON_CONNECTION_STATE_CHANGE]:g=>{g.state===CI.CONNECTION_STATE_RECONNECTED?(Array.from(this._remoteStreams.values()).forEach(C=>{const{streamId:Q,token:i}=C,{audio:B,video:E}=C.getEnableMediaType();C.destroy(),this._remoteStreams.delete(Q),this.startPlayWTN(i,Q,!E,!B,!0).then(()=>{var e;(e=this.__onResubscribe)===null||e===void 0||e.call(this,{stream:C})})}),Array.from(this._localStreams.values()).forEach(C=>{const{token:Q,pubAudio:i,pubVideo:B}=C;C.destroy(),this._localStreams.delete(C.streamId),this.startPushWTN(Q,C.streamId,!B,!i,!0)})):g.state===CI.CONNECTION_STATE_DISCONNECTED&&(this._remoteStreams.forEach(C=>{C.setState(Mg.FAIL,fC.IN_RETRY),C.setAudioState(FB.FROZEN,Ie.NETWORK_CONGESTION),C.setVideoState(UB.FROZEN,ge.NETWORK_CONGESTION)}),this._localStreams.forEach(C=>{C.setState(gi.FAIL,$B.IN_RETRY)}))},[IA.ON_STREAM_PUSHED_BY_OTHER]:g=>{const C=this._localStreams.get(g.streamId);this._logger.print("_addSignalListeners","onStreamPushedByOther",g.streamId),C&&(C.setState(gi.FAIL,$B.STREAM_PUSH_BY_OTHER),this._stopLocalStream(C))},[IA.ON_STREAM_PULL_STATE_CHANGED]:async g=>{const C=this._remoteStreams.get(g.streamId);if(this._logger.print("_addSignalListeners","onStreamPullStateChanged",g),C)switch(g.code){case 0:C.setState(Mg.SUCCESS,fC.PLAY_SUCCESS);break;case 1:case 2:case 3:const i={1:fC.STREAM_NOT_EXIST,2:fC.REMOTE_STOP,3:fC.REMOTE_FAILURE}[g.code];C.setAudioState(FB.STOPED,Ie.REMOTE_STOP),C.setVideoState(UB.STOPED,ge.REMOTE_STOP),C.setState(Mg.FAIL,i);break;case 4:const B=C.getPushBackOff();var Q;B.retryDuration<6e4?(this._logger.info("subRetry",C.streamId,B.retryDuration),C.setState(Mg.START,fC.IN_RETRY),await new Promise(E=>setTimeout(E,B.interval)),C.updatePushBackOff(),await((Q=this._ctx)===null||Q===void 0||(Q=Q.handler)===null||Q===void 0?void 0:Q.handleAck({action:hI.unsubscribe,streamId:C.streamId,audioMid:C.audioMid,videoMid:C.videoMid,stream:C})),C.clean(),await this._sendStartPullStreamSignal(C)):(C.setState(Mg.FAIL,fC.RETRY_FAIL),this._logger.info("subRetry","end",C.streamId),C.resetPushBackOff())}}};Object.keys(I).forEach(g=>{this._ctx.signalingManager.on(g,I[g])}),this._clearSignalListeners=()=>{Object.keys(I).forEach(g=>{this._ctx.signalingManager.off(g,I[g])})}}_addLocalStreamEventHandler(I){I.on(jg.onWTNPushStateChanged,g=>{this.safeEmit(jg.onWTNPushStateChanged,g)})}_addRemoteStreamEventHandler(I){I.on(jg.onWTNPlayStateChanged,g=>{this.safeEmit(jg.onWTNPlayStateChanged,g)}),I.on(jg.onWTNRemoteAudioStateChanged,g=>{this.safeEmit(jg.onWTNRemoteAudioStateChanged,g)}),I.on(jg.onWTNRemoteVideoStateChanged,g=>{this.safeEmit(jg.onWTNRemoteVideoStateChanged,g)}),I.on("onSEIMessage",g=>{if(g instanceof Uint8Array){const Q=o0A(g);for(let i=0;i1&&arguments[1]!==void 0&&arguments[1],Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:W.STREAM_INDEX_MAIN;(g=this.__onPlayerEvents)===null||g===void 0||g.call(this,I,C,Q),I.on("playback_event",i=>{const B=this._remoteStreams.get(I.userId);if(i.eventName==="loadeddata"){const E=()=>{B&&i.type==="video"&&this.safeEmit(jg.onWTNFirstRemoteVideoFrameDecoded,{streamId:B.streamId})};B==null||!B.observer||B.observer.audioFirstFrameReceived?E():B.observer.once("recvVideoFirstFrame",E)}})}async _maybeFillBackFrame2Stream(I){var g;if(I.refreshBlackFrameLifetime(),(g=I.videoTransceiver)===null||g===void 0||!g.sender.track){var C;const Q=I.genBlackFrame();if(!Q)return;(C=I.videoTransceiver)===null||C===void 0||(C=C.sender)===null||C===void 0||C.replaceTrack(Q),I.pubAttributes.videoType=TC.BLACK,this._ctx.signalingManager.sendSignaling("updatePushStream",{streamId:I.streamId,appId:this._ctx.appId,attributes:{videoType:TC.BLACK}}),I.on("black-frame-ended",()=>{var i;(i=I.videoTransceiver)===null||i===void 0||(i=i.sender)===null||i===void 0||i.replaceTrack(null),I.pubAttributes.videoType=TC.NORMAL,this._ctx.signalingManager.sendSignaling("updatePushStream",{streamId:I.streamId,appId:this._ctx.appId,attributes:{videoType:TC.NORMAL}})})}}safeEmit(I){for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q3&&arguments[3]!==void 0?arguments[3]:3e4;if(!window.MediaRecorder)throw new K(S.NOT_SUPPORTED,"Your browser does not support MediaRecorder.");if(this._isAudioDeviceRecordTesting||this._isAudioPlaybackDeviceTesting)throw new K(S.REPEAT_DEVICE_TEST,"device test cannot be called repeatedly at the same time.");this._isAudioDeviceRecordTesting=!0,Eg.info("startAudioDeviceRecordTest()","Invoke"),this._recoderTimer=setTimeout(()=>{Eg.info("startAudioDeviceRecordTest()","".concat(Q,'ms automatic call method "stopAudioDeviceRecordAndPlayTest"')),this._stopAudioCaptureAndRecoder()},Q);try{this._onAutoplayFailed=g,await this._startAudioCaptureAndRecoder(I,C??100)}catch(i){throw this._isAudioDeviceRecordTesting=!1,delete this._onAutoplayFailed,i}delete this._audioCaptureAndRecoderResolve}stopAudioDeviceRecordAndPlayTest(){Eg.info("stopAudioDeviceRecordAndPlayTest()","Invoke"),this._recoderTimer!==void 0&&(clearTimeout(this._recoderTimer),delete this._recoderTimer),this._stopAudioCaptureAndRecoder()}stopAudioDevicePlayTest(){this._isAudioDeviceRecordTesting&&(Eg.info("stopAudioDevicePlayTest()","Invoke"),this._isAudioDeviceRecordTesting=!1,this._mediaRecorder&&(this._mediaRecorder.ondataavailable=null),this.stopAudioDeviceRecordAndPlayTest(),this._stopEmitAudioPlaybackDeviceTestVolume(),this._destroyAudioElement()),delete this._onAutoplayFailed}getRecordTrack(){return this._audioTrack}async setSinkId(I){if(Eg.info("setSinkId()","Invoke"),HTMLAudioElement.prototype.setSinkId===void 0)throw new K(S.NOT_SUPPORTED,"setSinkId not supported by current browser");const g=await oC.getAudioPlaybackDeviceById(I);if(!g)throw new K(S.INVALID_DEVICE_ID,"audio playback device id ".concat(I," is invalid"));return this._audioPlaybackDeviceId=I,this._setAudioCtxSinkId(),g}getSinkId(){return this._audioPlaybackDeviceId}destroy(){Eg.info("destroy()","Invoke"),super.removeAllListeners(),this.stopAudioPlaybackDeviceTest(),this.stopAudioDevicePlayTest()}async _playAudioFile(I,g){return Eg.info("_playAudioFile()","Invoke url=".concat(I,"; loop=").concat(g.loop)),new Promise((C,Q)=>{const i=TS("audio",{attributes:{src:I,crossOrigin:"anonymous"}});this._audioElement=i,i.loop=g.loop,this._audioLevelFetcher=new LS(i),i.onplaying=()=>{i.onplaying=null,Eg.info("_playAudioFile()","onplaying"),C()},i.onerror=async B=>{var E;Eg.error("_playAudioFile()","onerror",B);const e=B.message||(i==null||(E=i.error)===null||E===void 0?void 0:E.message);Q(new K(S.LOAD_RESOURCES_FAILED,"Failed to play recorded audio".concat(e?", reason: ".concat(e):".")))},this._setAudioCtxSinkId().then(()=>{var B,E;return(B=i.play())===null||B===void 0||(E=B.catch)===null||E===void 0?void 0:E.call(B,e=>{Eg.warn("_playAudioFile()","autoplay error",e);const t="Failed to play recorded audio, ".concat(e.name,": ").concat(e.message);e.name==="NotAllowedError"&&this._onAutoplayFailed?this._onAutoplayFailed(()=>{var o;return Promise.all([(o=this._audioLevelFetcher)===null||o===void 0?void 0:o.resume(),i.play()])}):Q(new K(S.LOAD_RESOURCES_FAILED,t))})})})}_destroyAudioElement(){this._audioElement&&(Eg.info("_destroyAudioElement()","Invoke"),this._audioElement.onplaying=null,this._audioElement.onerror=null,this._audioElement.src="",delete this._audioElement,typeof this._audioCaptureAndRecoderResolve=="function"&&this._audioCaptureAndRecoderResolve())}_startEmitAudioPlaybackDeviceTestVolume(I){I=Math.max(I,100),this._audioElement&&(Eg.info("_startEmitAudioPlaybackDeviceTestVolume()","start timer(".concat(I,"ms)")),this._playbackDeviceTestTimer=self.setInterval(()=>{this._audioLevelFetcher&&this.emit("onAudioPlaybackDeviceTestVolume",this._audioLevelFetcher.getAudioLevel())},I))}_stopEmitAudioPlaybackDeviceTestVolume(){var I;this._playbackDeviceTestTimer!==void 0&&(Eg.info("_stopEmitAudioPlaybackDeviceTestVolume()","stop timer"),self.clearInterval(this._playbackDeviceTestTimer),delete this._playbackDeviceTestTimer),(I=this._audioLevelFetcher)===null||I===void 0||I.destroy(),delete this._audioLevelFetcher}async _startAudioCaptureAndRecoder(I,g){this._audioTrack=await mG(this._ctx,this._ctx.audioProfileManager.getConstraints()),this._audioTrack.setVolume(g+.01);const C=new MediaStream([this._audioTrack.preprocessingTrack]);return Eg.info("startAudioDeviceRecordTest()","create microphone track success!"),new Promise((Q,i)=>{let B;typeof MediaRecorder.isTypeSupported=="function"&&(B=["audio/webm","audio/mp4"].find(e=>MediaRecorder.isTypeSupported(e)),Eg.info("startAudioDeviceRecordTest()","use mimeType: ".concat(B))),this._mediaRecorder=new MediaRecorder(C,B?{mimeType:B}:void 0);const E=this._mediaRecorder.mimeType;this._mediaRecorder.ondataavailable=async e=>{if(this._isAudioDeviceRecordTesting){var t;Eg.info("startAudioDeviceRecordTest()","get recorded file(mimeType: ".concat(E,")."));const o=new Blob([e.data],{type:E});try{await this._playAudioFile(vi.createObjectURL(o),{loop:!1})}catch(r){return i(r)}this._startEmitAudioPlaybackDeviceTestVolume(I),(t=this._audioElement)===null||t===void 0||t.addEventListener("ended",()=>{this.stopAudioDevicePlayTest(),Q()}),this._audioCaptureAndRecoderResolve=Q}else Q()},this._mediaRecorder.onerror=e=>{i(new K(S.AUDIO_DEVICE_TEST_FAILED,e.message||"mediaRecorder error"))},this._audioCaptureAndRecoderResolve=Q,this._mediaRecorder.start()})}_stopAudioCaptureAndRecoder(){var I;this._mediaRecorder&&(this._mediaRecorder.state==="recording"&&this._mediaRecorder.stop(),delete this._mediaRecorder),(I=this._audioTrack)===null||I===void 0||I.destroy(),delete this._audioTrack}async _setAudioCtxSinkId(){let I=this._audioPlaybackDeviceId;if(I){I==="default"&&(I="");try{var g,C;(g=ui.getAudioContextInstance())===null||g===void 0||(C=g.setSinkId)===null||C===void 0||C.call(g,I),Eg.info("setSinkId","ctx.sinkId=".concat(I))}catch(Q){Eg.error("setSinkId","failed, ".concat(Q.name," - ").concat(Q.message))}}}}const y5=()=>({url:"",video:{codec:KM.H264,width:640,height:360,fps:15,gop:2,kBitRate:m5(640,360,15)},audio:{codec:"AAC",kBitRate:64,sampleRate:48e3,channels:2,AACProfile:Ha.LC},layout:{regions:[],appData:"",backgroundColor:"#000000"}});function m5(A,I,g){return A*I<=288e3?g<=15?800:1200:A*I<=864e3?g<=15?1200:1800:A*I<=1152e3?g<=15?1600:2400:A*I<=2592e3?g<=15?2500:3750:g<=15?3300:5e3}function w5(A){if(typeof A!="string"||!/^rtmps?:\/\//.test(A))throw new K(S.INVALID_PARAMS,"Invalid rtmp address")}function G5(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(A==null||!A.length)throw new K(S.INVALID_PARAMS,"regions should not be empty.");for(const I of A){if(typeof I.userId!="string")throw new K(S.INVALID_PARAMS,"region.userId(".concat(I.userId,") should be a string."));if(XC(I.userId),typeof I.isScreenStream!="boolean")throw new K(S.INVALID_PARAMS,"region.isScreenStream(".concat(I.isScreenStream,") should be a boolean."))}}function R5(A,I){var g,C;const Q=(r,s)=>{const v=r.reduce((a,c)=>a==null?void 0:a[c],I),n=r.reduce((a,c)=>a==null?void 0:a[c],y5());return v&&s(v)?v:n},i=r=>r%2==0?r:r+1,B=i(Q(["video","width"],r=>r>=2&&r<=1920)),E=i(Q(["video","height"],r=>r>=2&&r<=1920)),e=Q(["video","fps"],r=>r>=1&&r<=60),t=((g=I.video)===null||g===void 0?void 0:g.kBitRate)||0,o=Q(["audio","sampleRate"],r=>!![32e3,44100,48e3].find(s=>s===r||s/1e3===r));return{type:"transcode",action:A,transcodeMeta:{transcode:{url:I.url},control:{protocol:"2.0"},audio:{codec:Q(["audio","codec"],r=>r==="AAC"),bitRate:1e3*Q(["audio","kBitRate"],r=>r>=32&&r<=192),sampleRate:o<100?1e3*o:o,channels:Q(["audio","channels"],r=>[1,2].includes(r)),profile:Q(["audio","AACProfile"],r=>[Ha.LC,Ha.HEv1,Ha.HEv2].includes(r))},video:{codec:Q(["video","codec"],r=>["H264","H265"].includes(r)),fps:e,gop:Q(["video","gop"],r=>r>=1&&r<=5)*e,bitRate:1e3*(t>=16&&t<=1e4?t:m5(B,E,e)),width:B,height:E},layout:{canvas:{bgnd:Q(["layout","backgroundColor"],r=>/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(r))},regions:((C=I.layout)===null||C===void 0||(C=C.regions)===null||C===void 0?void 0:C.map(r=>({alpha:!r.alpha||Number(r.alpha)>1||Number(r.alpha)<=0?1:Number(r.alpha),uid:r.userId,zorder:!r.zorder||Number(r.zorder)<0||Number(r.zorder)>100?0:Number(r.zorder),x:!r.x||Number(r.x)>=1||Number(r.x)<0?0:Number(r.x),y:!r.y||Number(r.y)>=1||Number(r.y)<0?0:Number(r.y),w:!r.w||Number(r.w)>1||Number(r.w)<=0?1:Number(r.w),h:!r.h||Number(r.h)>1||Number(r.h)<=0?1:Number(r.h),renderMode:r.renderMode&&[1,2,3].includes(r.renderMode)?r.renderMode:1,contentControl:r.contentControl&&[0,1,2].includes(r.contentControl)?r.contentControl:0,screen:!!r.isScreenStream})))||[],app_data:Q(["layout","appData"],r=>typeof r=="string")}}}}function ARA(A){var I;w5(A.url),G5((I=A.layout)===null||I===void 0?void 0:I.regions)}function IRA(A){var I;A.url&&w5(A.url),G5((I=A.layout)===null||I===void 0?void 0:I.regions)}function gRA(A){return R5("started",A)}function CRA(A){return R5("layoutChanged",A)}const qo={getDefaultValue:y5,checkStartParams:ARA,checkUpdateParams:IRA,getStartParams:gRA,getUpdateParams:CRA};let Zb;const QRA=A=>{Zb&&clearTimeout(Zb),Zb=setTimeout(()=>{for(const[I,g]of A)I!=null&&I.startsWith("mux")&&g.forEach(C=>{var Q;(Q=C.audioTrack)===null||Q===void 0||Q.pause()});for(const[I,g]of A)I!=null&&I.startsWith("mux")&&g.forEach(C=>{var Q;(Q=C.audioTrack)===null||Q===void 0||Q.play()})},2e3)};var iRA=TA,BRA=ev,ERA=Zd;iRA({target:"Object",stat:!0},{fromEntries:function(A){var I={};return BRA(A,function(g,C){ERA(I,g,C)},{AS_ENTRIES:!0}),I}});var eRA=oQ,tRA=eRA.Object.fromEntries,oRA=tRA,rRA=oRA,sRA=rRA,vRA=sRA,aRA=vRA,nRA=aRA,cRA=nRA,lRA=cRA,Kt=nI(lRA);const PRA=["ele","fakeEle"],dRA=["orgTrack","mediaTrack","preprocessingTrack"],hRA=["orgTrack","mediaTrack","preprocessingTrack"],I7=["currentTime","duration","ended","error","muted","networkState","paused","readyState","seekable","sinkId","src","volume"],uRA=["currentTime","sampleRate","state","baseLatency","outputLatency","sinkId"],c9=["contentHint","enabled","id","kind","label","muted","readyState"],DRA=["currentDirection","direction","mid","stopped"];let Ui;async function bRA(A){const I=Date.now();let g=[];A._ctx.handler&&A._ctx.handler._peerConnection&&(g=await A._ctx.handler._peerConnection.getStats());const C=[];return g.forEach(Q=>{C.push(Q)}),{timestamp:I,stats:C}}function g7(A){const I={};if(A instanceof MediaStream){I.id=A.id,I.active=A.active;const g=A.getTracks();I.tracks=g.map(C=>Kt(c9.map(Q=>[Q,C[Q]])))}return I}async function yRA(A){const I=Date.now(),g=[];var C;A._videoPlayer&&g.push({userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,ele:A._videoPlayer._videoDom}),A._screenPlayer&&g.push({userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,ele:A._screenPlayer._videoDom}),A._remoteVideoPlayer&&A._remoteVideoPlayer.forEach((i,B)=>{g.push({userId:B,mediaType:"video",isScreen:!1,isPublic:!1,ele:i?i._videoDom:void 0})}),A._remoteScreenPlayer&&((C=A._remoteScreenPlayer)===null||C===void 0||C.forEach((i,B)=>{g.push({userId:B,mediaType:"video",isScreen:!0,isPublic:!1,ele:i?i._videoDom:void 0})})),A._remoteAudioPlayer&&A._remoteAudioPlayer.forEach((i,B)=>{g.push({userId:B,mediaType:"audio",isScreen:!1,isPublic:!1,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}),A._remoteScreenAudioPlayer&&A._remoteScreenAudioPlayer.forEach((i,B)=>{g.push({userId:B,mediaType:"audio",isScreen:!0,isPublic:!1,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}),A._publicStreamVideoPlayer&&A._publicStreamVideoPlayer.forEach((i,B)=>{g.push({userId:B,mediaType:"video",isScreen:!1,isPublic:!0,ele:i?i._videoDom:void 0})}),A._publicStreamAudioPlayer&&A._publicStreamAudioPlayer.forEach((i,B)=>{g.push({userId:B,mediaType:"audio",isScreen:!1,isPublic:!0,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}),A._localVideoTrack&&A._localVideoTrack.videoPlayers&&A._localVideoTrack.videoPlayers.forEach((i,B)=>{g.push({playerId:B.toString(),userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,ele:i._videoDom})}),A._localScreenTrack&&A._localScreenTrack.videoPlayers&&A._localScreenTrack.videoPlayers.forEach((i,B)=>{g.push({playerId:B.toString(),userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,ele:i._videoDom})}),A._room&&A._room._remoteStreams&&A._room._remoteStreams.forEach((i,B)=>{i.forEach(E=>{if(E.audioTrack){const e=E.audioTrack._audioPlayer;g.push({userId:B,mediaType:"audio",isScreen:E.isScreen,isPublic:!1,ele:e?e._audioDom:void 0,fakeEle:e?e._fakeAudioDom:void 0})}E.videoTrack&&E.videoTrack.videoPlayers&&E.videoTrack.videoPlayers.forEach((e,t)=>{g.push({playerId:t.toString(),userId:B,mediaType:"video",isScreen:E.isScreen,isPublic:!1,ele:e?e._videoDom:void 0})})})});let Q=A._publicStreamManager;return Q||(Q=A._outsideRoom),Q&&Q.remoteStreams&&Q.remoteStreams.forEach((i,B)=>{if(i.audioTrack){const E=i.audioTrack._audioPlayer;g.push({userId:B,mediaType:"audio",isScreen:!1,isPublic:!0,ele:E?E._audioDom:void 0,fakeEle:E?E._fakeAudioDom:void 0})}i.videoTrack&&i.videoTrack.videoPlayers&&i.videoTrack.videoPlayers.forEach((E,e)=>{g.push({playerId:e.toString(),userId:B,mediaType:"video",isScreen:!1,isPublic:!0,ele:E?E._videoDom:void 0})})}),A&&A._room&&A._room._virtualStreams&&A._room._virtualStreams.forEach((i,B)=>{if(i.audioTrack){const E=i.audioTrack._audioPlayer;g.push({userId:"virtualStream-".concat(B),mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!0,ele:E?E._audioDom:void 0,fakeEle:E?E._fakeAudioDom:void 0})}}),{timestamp:I,elementStats:g.map(i=>{let{ele:B,fakeEle:E}=i,e=ze(i,PRA);const t=p({ele:p({srcObject:B?g7(B.srcObject):void 0},Kt(I7.map(o=>[o,B[o]])))},e);return E&&(t.fakeEle=p({srcObject:g7(E.srcObject)},Kt(I7.map(o=>[o,E[o]])))),t})}}function L5(A){const I=[];let g=[];A&&A._room&&A._room._remoteStreams&&(g=A._room._remoteStreams.values());for(const C of g)C.forEach(Q=>{Q.audioTrack&&I.push(Q.audioTrack)});A._localAudioTrack&&I.push(A._localAudioTrack),A._localScreenAudioTrack&&I.push(A._localScreenAudioTrack);for(const C of I){if(C._audioLevelFetcher&&C._audioLevelFetcher._ctx)return C._audioLevelFetcher._ctx;if(C._ac)return C._ac;if(C._audioFetchMap&&Array.from(C._audioFetchMap.values()).length)return Array.from(C._audioFetchMap.values())[0]._ctx;if(C._ap&&C._ap._ac)return C._ap._ac}return null}async function mRA(A){const I=Date.now(),g=L5(A),C={};return g?(uRA.forEach(Q=>{C[Q]=g[Q]}),{timestamp:I,acState:C}):{timestamp:I,acState:void 0}}function S5(A){const I=[];A._localAudioTrack&&I.push({userId:"__local__",mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!1,orgTrack:A._localAudioTrack._originTrack,mediaTrack:A._localAudioTrack._mediaTrack,preprocessingTrack:A._localAudioTrack._preProcessingTrack}),A._localScreenAudioTrack&&I.push({userId:"__local__",mediaType:"audio",isScreen:!0,isPublic:!1,isVirtual:!1,orgTrack:A._localScreenAudioTrack._originTrack,mediaTrack:A._localScreenAudioTrack._mediaTrack,preprocessingTrack:A._localScreenAudioTrack._preProcessingTrack}),A._localVideoTrack&&I.push({userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,isVirtual:!1,orgTrack:A._localVideoTrack._originTrack,mediaTrack:A._localVideoTrack._mediaTrack,preprocessingTrack:A._localVideoTrack._preProcessingTrack}),A._localScreenVideoTrack&&I.push({userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,isVirtual:!1,orgTrack:A._localScreenVideoTrack._originTrack,mediaTrack:A._localScreenVideoTrack._mediaTrack,preprocessingTrack:A._localScreenVideoTrack._preProcessingTrack}),A._room&&A._room._remoteStreams&&A._room._remoteStreams.forEach((C,Q)=>{C.forEach(i=>{i.audioTrack&&I.push({userId:Q,mediaType:"audio",isScreen:i.isScreen,isPublic:!1,isVirtual:!1,orgTrack:i.audioTrack._originTrack,mediaTrack:i.audioTrack._mediaTrack}),i.videoTrack&&I.push({userId:Q,mediaType:"video",isScreen:i.isScreen,isPublic:!1,isVirtual:!1,orgTrack:i.videoTrack._originTrack,mediaTrack:i.videoTrack._mediaTrack})})});let g=A._publicStreamManager;return g||(g=A._outsideRoom),g&&g.remoteStreams&&g.remoteStreams.forEach((C,Q)=>{C.audioTrack&&I.push({userId:Q,mediaType:"audio",isScreen:C.isScreen,isPublic:!0,isVirtual:!1,orgTrack:C.audioTrack._originTrack,mediaTrack:C.audioTrack._mediaTrack}),C.videoTrack&&I.push({userId:Q,mediaType:"video",isScreen:C.isScreen,isPublic:!0,isVirtual:!1,orgTrack:C.videoTrack._originTrack,mediaTrack:C.videoTrack._mediaTrack})}),A&&A._room&&A._room._virtualStreams&&A._room._virtualStreams.forEach((C,Q)=>{C.audioTrack&&I.push({userId:"virtualStream-".concat(Q),mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!0,orgTrack:C.audioTrack._originTrack,mediaTrack:C.audioTrack._mediaTrack}),C.videoTrack&&I.push({userId:"virtualStream-".concat(Q),mediaType:"video",isScreen:!1,isPublic:!1,isVirtual:!0,orgTrack:C.videoTrack._originTrack,mediaTrack:C.videoTrack._mediaTrack})}),I}async function Kb(A,I){if(!A)return;const g=new MediaStream;g.addTrack(A);const C=I.createMediaStreamSource(g),Q=I.createAnalyser();C.connect(Q),I.state==="suspended"&&(console.warn(I.state),I.resume());const i=new Uint8Array(2048);Q.getByteTimeDomainData(i),await new Promise(t=>{setTimeout(t,50)}),Q.getByteTimeDomainData(i),await new Promise(t=>{setTimeout(t,50)});let B=0;i.forEach(t=>B=Math.max(B,Math.abs(t-128)));const E=B/128*256,e=E>2?E:0;return C.disconnect(),Q.disconnect(),e}async function wRA(A){const I=Date.now();if(Ui||(Ui=new AudioContext),Ui.state==="suspended"&&await new Promise(Q=>{const i=setTimeout(()=>{console.warn("[RTC_AMBULANCE] AudioContext resume failed, try to find one in RTCEngine"),Ui=L5(A),Ui&&console.warn("[RTC_AMBULANCE] find AudioContext in RTCEngine success"),Q()},1e3);Ui.resume().then(()=>{clearTimeout(i),Q()},()=>{clearTimeout(i),Ui=null,Q()})}),!Ui)return void console.error("[RTC_AMBULANCE] get volume is not supported");const g=S5(A),C=[];return await Promise.all(g.filter(Q=>Q.mediaType==="audio").map(async Q=>{let{orgTrack:i,mediaTrack:B,preprocessingTrack:E}=Q;const e=p({},ze(Q,dRA));await Promise.all([Kb(i,Ui).then(t=>{e.orgTrackVolume=t}),Kb(B,Ui).then(t=>{e.mediaTrackVolume=t}),Kb(E,Ui).then(t=>{e.preprocessingTrackVolume=t})]),C.push(e)})),{timestamp:I,trackVolumes:C}}async function GRA(A){return{timestamp:Date.now(),trackStates:S5(A).map(I=>{let{orgTrack:g,mediaTrack:C,preprocessingTrack:Q}=I,i=ze(I,hRA);return p({orgTrack:g?Kt(c9.map(B=>[B,g[B]])):void 0,mediaTrack:C?Kt(c9.map(B=>[B,C[B]])):void 0,preprocessingTrack:Q?Kt(c9.map(B=>[B,Q[B]])):void 0},i)})}}function C7(A){if(!A)return;const I={track:A.track?A.track.id:void 0,transport:{state:A.transport?A.transport.state:void 0}};return A.transport&&A.transport.iceTransport&&(I.iceTransport={state:A.transport.iceTransport.state,role:A.transport.iceTransport.role,gatheringState:A.transport.iceTransport.gatheringState,component:A.transport.iceTransport.component}),I}async function RRA(A){const I=Date.now();let g=[];A._ctx._handler&&A._ctx._handler._peerConnection&&(g=A._ctx._handler._peerConnection.getTransceivers());const C=[];return g.forEach(Q=>{const i=p({sender:C7(Q.sender),receiver:C7(Q.receiver)},Kt(DRA.map(B=>[B,Q[B]])));C.push(i)}),{timestamp:I,tranceiverStates:C}}async function LRA(A){const I={stats:[],mediaElementStates:[],audioContextStates:[],volumes:[],trackStates:[],tranceiverStates:[]},g=[];return await new Promise(C=>{let Q,i=0;const B=()=>{g.push(bRA(A).then(E=>{I.stats.push(E)}),yRA(A).then(E=>{I.mediaElementStates.push(E)}),mRA(A).then(E=>{I.audioContextStates.push(E)}),wRA(A).then(E=>{I.volumes.push(E)}),GRA(A).then(E=>{I.trackStates.push(E)}),RRA(A).then(E=>{I.tranceiverStates.push(E)})),i++,i>=10?Promise.all(g).then(()=>{C()}):(clearTimeout(Q),Q=setTimeout(B,500))};Q=setTimeout(B,500)}),console.log("RTC_AMBULANCE",I),I}class SRA{constructor(){l(this,"containers",new WeakSet)}getContainerById(I){return document.getElementById(I)}registerContainer(I){var g;return typeof I=="string"&&(I=(g=this.getContainerById(I))!==null&&g!==void 0?g:void 0),!(!I||this.containers.has(I))&&(this.containers.add(I),!0)}unregisterContainer(I){var g;return typeof I=="string"&&(I=(g=this.getContainerById(I))!==null&&g!==void 0?g:void 0),!!I&&(this.containers.delete(I),!0)}}const TRA=["videoStats","audioStats"];var Wb,pRA=Object.defineProperty,FRA=Object.getOwnPropertyDescriptor,$=(A,I,g,C)=>{for(var Q,i=FRA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&pRA(I,g,i),i};const VG=(Wb=class extends KQ{constructor(A,I,g){var C;super(),C=this,l(this,"monitor",void 0),l(this,"logger",void 0),l(this,"_room",void 0),l(this,"_wtnStreamManager",void 0),l(this,"_appId",void 0),l(this,"_localImgVideoTrack",void 0),l(this,"_localImgScreenTrack",void 0),l(this,"_localScreenVideoTrack",void 0),l(this,"_localScreenAudioTrack",void 0),l(this,"_tempMixingAudioTrack",void 0),l(this,"_localAudioVolume",100),l(this,"_localScreenAudioVolume",100),l(this,"_remoteAudioVolume",new Map),l(this,"_remoteScreenAudioVolume",new Map),l(this,"_localVideoPlayerConfig",{[W.STREAM_INDEX_MAIN]:new Map,[W.STREAM_INDEX_SCREEN]:new Map}),l(this,"_remoteVideoPlayerConfig",{[W.STREAM_INDEX_MAIN]:new Map,[W.STREAM_INDEX_SCREEN]:new Map}),l(this,"_publicStreamIds",new Map),l(this,"_dummyMainImage",void 0),l(this,"_dummyScreenImage",void 0),l(this,"_trackSourceType",void 0),l(this,"_liveTranscodeConfig",void 0),l(this,"_startCloudProxyTimestamp",void 0),l(this,"_pauseAllSubscribeState",{audio:void 0,video:void 0,resumeAudioStreamIds:{},resumeVideoStreamIds:{}}),l(this,"_audioVolumeIndicationTimer",void 0),l(this,"_dummyMainTimer",void 0),l(this,"_dummyScreenTimer",void 0),l(this,"_audioPropertiesReportTimer",null),l(this,"_mirrorType",Ci.MIRROR_TYPE_RENDER),l(this,"_audioMixingManager",void 0),l(this,"_pubLock",void 0),l(this,"_subLocks",void 0),l(this,"_audioCaptureLock",void 0),l(this,"_videoCaptureLock",void 0),l(this,"_screenCaptureLock",void 0),l(this,"_subScreenLocks",void 0),l(this,"_rtmClient",void 0),l(this,"_messageStatisticsObserver",void 0),l(this,"_waitForNewToken",!1),l(this,"_originIceConfigRequestUrls",void 0),l(this,"_originConfigServerUrls",void 0),l(this,"_originLogServerUrl",void 0),l(this,"_audioDeviceManager",void 0),l(this,"_config",void 0),l(this,"_needClosePreTrack",!1),l(this,"_containerCollisionDetector",new SRA),l(this,"_ctx",void 0),l(this,"_removeDeviceEventHandler",void 0),l(this,"_updateMixAudioTrack",async function(Q){var i;let B=arguments.length>1&&arguments[1]!==void 0?arguments[1]:li.PLAYOUT_AND_PUBLISH;if(C.logger.info("_updateMixAudioTrack()"),!C._localAudioTrack)return void(Q&&(C._tempMixingAudioTrack={track:Q,type:B}));Q?(C._localAudioTrack.mixType=B,C._localAudioTrack.mixedAudioTrack=Q):(delete C._localAudioTrack.mixType,delete C._localAudioTrack.mixedAudioTrack),await((i=C._room)===null||i===void 0?void 0:i.hasPublished())&&await C._updatePublish(),C._wtnStreamManager._updatePushTrack()}),l(this,"_onVideoDeviceStateChange",Q=>{this.safeEmit(q.onVideoDeviceStateChanged,Q)}),l(this,"_onAudioDeviceStateChange",Q=>{this.safeEmit(q.onAudioDeviceStateChanged,Q)}),l(this,"_onAudioMixingMessage",Q=>{this.safeEmit(q.onAudioMixingStateChanged,Q)}),l(this,"_onAudioMixingAutoplayFailed",Q=>{this.safeEmit(q.onAutoplayFailed,Q)}),this.id=I,this._appId=A,this.monitor=bI(I),this._ctx=new YGA(I,A,g),this._pubLock=new Wi("pubLock"),this._subLocks=new Map,this._subScreenLocks=new Map,this._audioCaptureLock=new Wi("audioCap"),this._videoCaptureLock=new Wi("videoCap"),this._screenCaptureLock=new Wi("screenCap"),this._addDeviceEventHandler(),this._audioDeviceManager=new $GA(this._ctx),this._addSignalingEventHandler(),this._wtnStreamManager=new iC(this._ctx),this._addWTNStreamEventHandler(),qd&&(window.__rtc_engine__=this,window["__rtc_engine__".concat(Math.floor(100*Math.random()+1))]=this),this._trackSourceType={video:BC.VIDEO_SOURCE_TYPE_INTERNAL,screenVideo:BC.VIDEO_SOURCE_TYPE_INTERNAL,audio:lQ.AUDIO_SOURCE_TYPE_INTERNAL,screenAudio:lQ.AUDIO_SOURCE_TYPE_INTERNAL},this._config=g,this._rtmClient=new XGA(this._ctx),this._handleRTMClient(this._rtmClient),this._handleAudioDeviceManager(),this._messageStatisticsObserver=new v9A(I),this.logger=new SA("Engine",0,I),Ig.createRTSMsgReportor(this.id),VG.hasReportNativeDetector||(this.monitor.reportLongString("NativeDetector",JSON.stringify(_d)),VG.hasReportNativeDetector=!0)}get appId(){return this._appId}set appId(A){this._appId=A}async updateToken(A){if(this.logger.info("updateToken()","token: %s",A),EI(A,"token"),this._room&&this._waitForNewToken)return this._waitForNewToken=!1,this._room.config.token=A,await this._join(this._room);if(!this._room)throw new K(S.UPDATE_TOKEN_BEFORE_JOIN,"update token before join room");await this._room.updateToken(A);const I=[];if(this._room.config.tokenPublishPrivilegeExpired&&this._room.config.isAutoPublish&&this._ctx.visibility&&I.push(this._updatePublish({mediaType:sA.AUDIO_AND_VIDEO})),this._room.config.tokenSubscribePrivilegeExpired){const{isAutoSubscribeAudio:g,isAutoSubscribeVideo:C}=this._room.config,Q=(g?sA.AUDIO:0)|(C?sA.VIDEO:0);Q&&I.push(this._triedResumeAllRemoteStreams(Q,!0))}await Promise.allSettled(I)}async setVideoCaptureDevice(A){if(this.logger.info("setVideoCaptureDevice()","deviceId: %s",A),EI(A,"deviceId"),!this._localVideoTrack)return void this._ctx.videoProfile.setCaptureDeviceId(A);if(nS&&kB&&this._localVideoTrack.originTrack.getSettings().deviceId===A)return;const I=this._ctx.videoProfile.getCaptureConfig(A);var g;kB&&we&&ri>=85&&ri<=91&&((g=this.localVideoTrack)===null||g===void 0||g.removePlayerTrack()),this._needClosePreTrack=this._needClosePreTrack||ydA,this._needClosePreTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),delete this._localVideoTrack),this.logger.info("setVideoCaptureDevice()","start createCameraVideoTrack...");const C=await Ml(this._ctx,I).catch(i=>{if(this._localVideoTrack&&!this._localVideoTrack.dummy)return this.logger.warn("setVideoCaptureDevice()","createCameraVideoTrack failed, stop pre VideoTrack."),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),delete this._localVideoTrack,Ml(this._ctx,I).then(B=>(this._needClosePreTrack=!0,B)).catch(async()=>{this.logger.error("setVideoCaptureDevice()","createCameraVideoTrack failed, rollback.");const B=await Ml(this._ctx);throw this._switchTrack(B),i});throw i});this.logger.success("setVideoCaptureDevice()","createCameraVideoTrack success."),this._ctx.videoProfile.setCaptureDeviceId(A),this._localVideoTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy());const Q=this._ctx.videoProfile.getContentHint();Q&&C.setContentHint(Q),await this._switchTrack(C)}async setAudioCaptureDevice(A){var I;if(this.logger.info("setAudioCaptureDevice()","deviceId: %s",A),EI(A,"deviceId"),this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:A}}),!this._localAudioTrack)return;this._localAudioTrack.destroy(),this._removeLocalTrackEvents(this._localAudioTrack);const g=await mG(this._ctx,this._ctx.audioProfileManager.getConstraints());this._initLocalTrackEvents(g),this._localAudioTrack=g,this._localAudioTrack.setVolume(this._localAudioVolume),this._wtnStreamManager._updatePushTrack(),this._room&&(I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio&&await this._updatePublish()}_addDeviceEventHandler(){oC.on(q.onVideoDeviceStateChanged,this._onVideoDeviceStateChange),oC.on(q.onAudioDeviceStateChanged,this._onAudioDeviceStateChange),this._removeDeviceEventHandler=()=>{oC.off(q.onVideoDeviceStateChanged,this._onVideoDeviceStateChange),oC.off(q.onAudioDeviceStateChanged,this._onAudioDeviceStateChange)}}_addSignalingEventHandler(){const A=this._ctx.signalingManager;A.on(og.ON_CONNECTION_STATE_CHANGE,this._onConnectionStateChange.bind(this)),A.on(og.ON_RECONNECT_FAILED,()=>{this.safeEmit(q.onError,{errorCode:S.RECONNECT_FAILED})}),A.on(og.CONNECT_WITH_TCP,()=>{this.safeEmit(q.onIceConnectWithTcp)})}_addWTNStreamEventHandler(){this._wtnStreamManager.__onResubscribe=A=>{const I=A.stream;I&&(I.audioTrack&&this._updateAudioPlayerState(I),I.videoTrack&&this._updateVideoPlayerState(I))},this._wtnStreamManager.__onRemoteStreamStats=A=>{this.safeEmit(q.onPublicStreamStats,A)},this._wtnStreamManager.__onSEIMessageReceived=A=>{this.safeEmit(q.onPublicStreamSEIMessageReceived,A)},this._wtnStreamManager.__onPlayerEvents=(A,I,g)=>{this._initPlayerEvents(A,I,g)}}_addHandlerEventHandler(){var A,I,g,C,Q,i,B,E,e,t,o,r,s,v,n,a,c,P,d,h,u,D,y,b,G,L,m,F,U,AA,X,Y,J,V,N,z,w,CA,QA,R,cA,lA;(A=this._room)===null||A===void 0||A.on(IA.ON_ADD_STREAM,this._onAddStream.bind(this)),(I=this._room)===null||I===void 0||I.on(IA.ON_REMOVE_STREAM,this._onRemoveStream.bind(this)),(g=this._room)===null||g===void 0||g.on(IA.USER_CONNECTION,this._onUserConnection.bind(this)),(C=this._room)===null||C===void 0||C.on(eA.ON_USER_LEAVE,this._onUserLeave.bind(this)),(Q=this._room)===null||Q===void 0||Q.on(eA.ON_ROOM_ERROR,this._onRoomError.bind(this)),(i=this._room)===null||i===void 0||i.on(eA.ON_NETWORK_QUALITY,this._onNetworkQuality.bind(this)),(B=this._room)===null||B===void 0||B.on(IA.ON_CUSTOM_MESSAGE,this._onCustomMessage.bind(this)),(E=this._room)===null||E===void 0||E.on(IA.USER_MESSAGE_RECEIVED,this._onUserMessageReceived.bind(this)),(e=this._room)===null||e===void 0||e.on(IA.USER_BINARY_MESSAGE_RECEIVED,this._onUserBinaryMessageReceived.bind(this)),(t=this._room)===null||t===void 0||t.on(IA.ON_USER_TOKEN_WILL_EXPIRE,this._onUserTokenWillExpire.bind(this)),(o=this._room)===null||o===void 0||o.on(IA.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE,this._onUserTokenPublishPrivilegeWillExpire.bind(this)),(r=this._room)===null||r===void 0||r.on(IA.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED,this._onUserTokenPublishPrivilegeDidExpired.bind(this)),(s=this._room)===null||s===void 0||s.on(IA.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE,this._onUserTokenSubscribePrivilegeWillExpire.bind(this)),(v=this._room)===null||v===void 0||v.on(IA.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED,this._onUserTokenSubscribePrivilegeDidExpired.bind(this)),(n=this._room)===null||n===void 0||n.on(IA.POST_PROCESSING_MESSAGE,H=>{var tA;((tA=H)==null?void 0:tA.protocol)==="2.0"?this._onStreamMixingEvent({error:H.error,event:H.eventType,message:H.message}):H.type==="publicStreamCallback"?this._onPushPublicStreamResult(H):H.type==="transcodeStatusCallback"&&this._onLiveTranscodingResult(H)}),(a=this._room)===null||a===void 0||a.on(og.ON_VENDOR_CONNECTION_STATE_CHANGE,H=>this.safeEmit(q.onVendorConnectionStateChanged,H)),(c=this._room)===null||c===void 0||c.on(eA.RESUBSCRIBE,this._onResubscribe.bind(this)),(P=this._room)===null||P===void 0||P.on(eA.SUBSCRIBE_PUSH_TRACK,this._onSubscribePushTrack.bind(this)),(d=this._room)===null||d===void 0||d.on(eA.REMOVE_PUSH_TRACK,this._onRemovePushTrack.bind(this)),(h=this._room)===null||h===void 0||h.on(eA.ON_PUBLISH_RESULT,H=>{var tA,GA,FA;H.state===wB.PUBLISH_SUCC&&((GA=this._room)===null||GA===void 0||GA.config.setTokenPublishPrivilegeExpired(!1)),H.state===wB.PUBLISH_FAIL&&H.errorCode===S.TOKEN_NO_PUBLISH_PERMISSION&&((FA=this._room)===null||FA===void 0||FA.config.setTokenPublishPrivilegeExpired(!0));const WA=!(H.retry||(tA=this._room)===null||tA===void 0||!tA.config.isAutoPublish);WA&&this.safeEmit(q.onAutoPublishResult,H),this.safeEmit(q.onPublishResult,{isScreen:H.isScreen,isAutoPublish:WA,errorCode:H.errorCode})}),(u=this._room)===null||u===void 0||u.on(eA.ON_SUBSCRIBE_RESULT,H=>{var tA;H.state===is.SUBSCRIBE_SUCC&&((tA=this._room)===null||tA===void 0||tA.config.setTokenSubscribePrivilegeExpired(!1)),H.state===is.SUBSCRIBE_FAIL&&H.errorCode===S.TOKEN_NO_SUBSCRIBE_PERMISSION&&this._handleLoseSubscribePrivilege(),this.safeEmit(q.onSubscribeResult,{userId:H.userId,isScreen:H.isScreen,isAutoSubscribe:!1,errorCode:H.errorCode})}),(D=this._room)===null||D===void 0||D.on(eA.ON_REMOTE_STREAM_STATS,H=>{this.safeEmit(q.onRemoteStreamStats,H)}),(y=this._room)===null||y===void 0||y.on(eA.ON_LOCAL_STREAM_STATS,H=>{this.safeEmit(q.onLocalStreamStats,H)}),(b=this._room)===null||b===void 0||b.on(eA.ON_SUBTITLE_STATE_CHANGED,H=>{this.safeEmit(q.onSubtitleStateChanged,H)}),(G=this._room)===null||G===void 0||G.on(eA.ON_SUBTITLE_MESSAGE_RECEIVED,H=>{this.safeEmit(q.onSubtitleMessageReceived,H)}),(L=this._room)===null||L===void 0||L.on(eA.ON_USER_PUBLISH_STATE_CHANGE,this._onUserPublishStateChange.bind(this)),(m=this._room)===null||m===void 0||m.on(eA.ON_USER_START_AUDIO_CAPTURE,(H,tA)=>{let{userId:GA}=H;this._updateAudioPlayerState(tA),this.safeEmit(q.onUserStartAudioCapture,{userId:GA})}),(F=this._room)===null||F===void 0||F.on(eA.ON_USER_STOP_AUDIO_CAPTURE,H=>{let{userId:tA}=H;this.safeEmit(q.onUserStopAudioCapture,{userId:tA})}),(U=this._room)===null||U===void 0||U.on(eA.ON_USER_START_VIDEO_CAPTURE,H=>{let{userId:tA}=H;this.safeEmit(q.onUserStartVideoCapture,{userId:tA})}),(AA=this._room)===null||AA===void 0||AA.on(eA.ON_USER_STOP_VIDEO_CAPTURE,H=>{let{userId:tA}=H;this.safeEmit(q.onUserStopVideoCapture,{userId:tA})}),(X=this._room)===null||X===void 0||X.on(eA.ON_SEI_MESSAGED_RECEIVED,H=>{this.safeEmit(q.onSEIMessageReceived,H)}),(Y=this._room)===null||Y===void 0||Y.on(eA.ON_REMOTE_VIDEO_SIZE_CHANGED,(H,tA)=>{this.safeEmit(q.onRemoteVideoSizeChanged,H,tA)}),(J=this._room)===null||J===void 0||J.on(eA.ON_SIMULCAST_SUBSCRIBE_FALLBACK,H=>this.safeEmit(q.onSimulcastSubscribeFallback,H)),(V=this._room)===null||V===void 0||V.on(eA.ON_VIDEO_STREAM_BANNED,H=>{this.safeEmit(q.onVideoStreamBanned,{uid:H.uid,banned:H.banned})}),(N=this._room)===null||N===void 0||N.on(eA.ON_AUDIO_STREAM_BANNED,H=>{this.safeEmit(q.onAudioStreamBanned,{uid:H.uid,banned:H.banned})}),(z=this._room)===null||z===void 0||z.on(eA.ON_FORWARD_STREAM_ERROR,H=>{this.safeEmit(q.onForwardStreamError,H)}),(w=this._room)===null||w===void 0||w.on(eA.ON_REJOIN_WITH_TCP,()=>{this.safeEmit(q.onRejoinWithTcp)}),(CA=this._room)===null||CA===void 0||CA.on(eA.PUB_RETRY,H=>{this.safeEmit(q.onPublishRetry,H)}),(QA=this._room)===null||QA===void 0||QA.on(eA.SUB_RETRY,H=>{this.safeEmit(q.onSubscribeRetry,H)}),(R=this._room)===null||R===void 0||R.on(eA.VIDEO_TYPE_CHANGE,H=>{this.safeEmit(q.onSEIStreamUpdate,H)}),(cA=this._room)===null||cA===void 0||cA.on(eA.JOIN_SUCCESS,H=>{this._ctx.isPreConnection||this.safeEmit(q.onConnectionStateChanged,{state:H?CI.CONNECTION_STATE_RECONNECTED:CI.CONNECTION_STATE_CONNECTED})}),(lA=this._room)===null||lA===void 0||lA.on(eA.UPDATE_PUBLISH,H=>{let{streamIndex:tA}=H;tA===W.STREAM_INDEX_MAIN?this._updatePublish():tA===W.STREAM_INDEX_SCREEN&&this._updateScreenPublish()})}safeEmit(A){for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;C{this.logger.error("_join","_updatePublish failed",C)}):(this.safeEmit(q.onAutoPublishResult,{isScreen:!1,state:wB.PUBLISH_FAIL}),this.safeEmit(q.onPublishResult,{isScreen:!1,isAutoPublish:!0,errorCode:S.NO_PUBLISH_PERMISSION}))),this.monitor.set({rtc_vid:A.config.rtcVid}),Ig.setRoomId(this.id,A.config.roomId),Ig.setUserId(this.id,A.config.userId),g}catch(g){throw g.code===S.INVALID_TOKEN?this._waitForNewToken=!0:(A.destroy(),this._room===A&&delete this._room),g}}async leaveRoom(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("leaveRoom()");const I=this._room;delete this._room,this._ctx.resetPubSubLock(D5.LEAVE),this._ctx.callId=void 0,A?await(I==null?void 0:I.leave(A)):I==null||I.leave(A).catch(),this._removeHandlerEventHandler(),this._subLocks=new Map,this._subScreenLocks=new Map,this._ctx.audioProfileManager.setRoomId(),this._liveTranscodeConfig&&this.stopLiveTranscoding(),I==null||I.destroy(),this._remoteVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(g=>{g.forEach(C=>{const{player:Q,renderDom:i}=C;Q==null||Q.destroy(),this._containerCollisionDetector.unregisterContainer(i)})}),this._remoteVideoPlayerConfig[W.STREAM_INDEX_MAIN].clear(),this._remoteVideoPlayerConfig[W.STREAM_INDEX_SCREEN].forEach(g=>{g.forEach(C=>{const{player:Q,renderDom:i}=C;Q==null||Q.destroy(),this._containerCollisionDetector.unregisterContainer(i)})}),this._remoteVideoPlayerConfig[W.STREAM_INDEX_SCREEN].clear(),this._publicStreamIds=new Map,Ig.setRoomId(this.id,""),Ig.setUserId(this.id,""),this.monitor.set({rtc_session_id:"",rtc_vid:""})}_destroyLocalTrack(){this._localAudioTrack&&(this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy(),this._localAudioTrack=void 0),this._localVideoTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),this._localVideoTrack=void 0),this._localScreenAudioTrack&&(this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy(),this._localScreenAudioTrack=void 0),this._localScreenVideoTrack&&(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy(),this._localScreenVideoTrack=void 0),this._localImgVideoTrack&&(this._localImgVideoTrack.stop(),this._localImgVideoTrack=void 0),this._localImgScreenTrack&&(this._localImgScreenTrack.stop(),this._localImgScreenTrack=void 0)}destroy(){var A,I,g;this.logger.info("destroy()"),this.removeAllListeners(),this._removeHandlerEventHandler(),(A=this._removeDeviceEventHandler)===null||A===void 0||A.call(this),(I=this._room)===null||I===void 0||I.destroy(),this._room=void 0,this._subLocks=new Map,this._subScreenLocks=new Map,this._audioCaptureLock=new Wi("audioCap"),this._videoCaptureLock=new Wi("videoCap"),this._screenCaptureLock=new Wi("screenCap"),this._pauseAllSubscribeState={audio:void 0,video:void 0,resumeVideoStreamIds:{},resumeAudioStreamIds:{}},this._messageStatisticsObserver.destroy(),this.monitor.destroy(),Ig.destroyRTSMsgReportor(this.id),clearInterval(this._audioVolumeIndicationTimer),clearInterval(this._dummyMainTimer),clearInterval(this._dummyScreenTimer),this._audioVolumeIndicationTimer=void 0,this._stopAudioPropertiesReport(),this._destroyLocalTrack(),(g=this._audioMixingManager)===null||g===void 0||g.destroy(),this._rtmClient.destroy(),this._wtnStreamManager.destroy(),this._publicStreamIds=new Map,this._audioDeviceManager.destroy(),this._ctx.destroy(),this._localAudioVolume=100,this._localScreenAudioVolume=100,this._remoteAudioVolume.clear(),this._remoteScreenAudioVolume.clear(),this._localVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(C=>{C.player.destroy()}),this._localVideoPlayerConfig[W.STREAM_INDEX_MAIN].clear(),this._localVideoPlayerConfig[W.STREAM_INDEX_SCREEN].forEach(C=>{C.player.destroy()}),this._localVideoPlayerConfig[W.STREAM_INDEX_SCREEN].clear(),this._remoteVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(C=>{C.forEach(Q=>{Q.player.destroy()})}),this._remoteVideoPlayerConfig[W.STREAM_INDEX_MAIN].clear(),this._remoteVideoPlayerConfig[W.STREAM_INDEX_SCREEN].forEach(C=>{C.forEach(Q=>{Q.player.destroy()})}),this._remoteVideoPlayerConfig[W.STREAM_INDEX_SCREEN].clear()}async publishStream(A){this.logger.info("publishStream()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),vI(A)&&!this._localVideoTrack&&this._localImgVideoTrack&&(this._localVideoTrack=await XDA(this._ctx,this._localImgVideoTrack)),await this._updatePublish({mediaType:A},!0)}async unpublishStream(A,I){var g;if(this.logger.info("unpublishStream()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),I)return(g=this._room)===null||g===void 0?void 0:g.unpublish();await this._updatePublish({mediaType:A,pubState:$C.UNPUB},!0)}async publishScreen(A){this.logger.info("publishScreen()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom();try{vI(A)&&!this._localScreenVideoTrack&&this._localImgScreenTrack&&(this._localScreenVideoTrack=await HDA(this._ctx,this._localImgScreenTrack)),await this._updateScreenPublish({mediaType:A,pubState:$C.PUB})}catch(I){throw I instanceof K?I:new K(S.UNEXPECTED_ERROR,"unexpected error",I)}}async unpublishScreen(A){this.logger.info("unpublishScreen()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),await this._updateScreenPublish({mediaType:A,pubState:$C.UNPUB})}async subscribeStream(A,I){return this.logger.info("subscribeStream()","userId: %o, mediaType: %o",A,I),this._subscribe(!1,A,I)}async _subscribe(A,I,g){var C;const Q=g;if(g===sA.AUDIO&&(C=this._room)!==null&&C!==void 0&&C.config.isMultiChatMode())return void this.logger.warn("subscribeStream()","due to multiChatMode return");const i=this._room.remoteStreams.get(I),B=i==null?void 0:i.find(a=>a.isScreen===A);if(!B)throw new K(S.STREAM_NOT_EXIST,"stream not exist");const E=this._pauseAllSubscribeState.audio,e=this._pauseAllSubscribeState.video;this._pauseAllSubscribeState.audio&&(g-=g&sA.AUDIO),this._pauseAllSubscribeState.video&&(g-=g&sA.VIDEO),this.logger.warn("subscribeStream()","due to pauseAll mediaType: %o",g);const{hasSubscribed:t}=B;B.originalMediaType=g;try{var o;await this._room.subscribe(B,g),lg(g)&&this._updateAudioPlayerState(B),vI(g)&&this._updateVideoPlayerState(B);let a=0,c=0;if(E!==this._pauseAllSubscribeState.audio&&(this._pauseAllSubscribeState.audio?a|=sA.AUDIO:c|=sA.AUDIO),e!==this._pauseAllSubscribeState.video&&(this._pauseAllSubscribeState.video?a|=sA.VIDEO:c|=sA.VIDEO),a&&this.pauseAllSubscribedStream(a),c&&this.resumeAllSubscribedStream(c),lg(Q)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[B.streamId]=B.streamId),vI(Q)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[B.streamId]=B.streamId),B.audioTrack||B.videoTrack){var r,s;const P=!(A||!((r=this._room)!==null&&r!==void 0&&r.config.isAutoSubscribeAudio||(s=this._room)!==null&&s!==void 0&&s.config.isAutoSubscribeVideo)),d={userId:I,isScreen:!1,state:is.SUBSCRIBE_SUCC};P&&this.safeEmit(q.onAutoSubscribeResult,d),this.safeEmit(q.onSubscribeResult,{userId:I,isScreen:A,isAutoSubscribe:P})}var v,n;((o=this._room)===null||o===void 0||!o.config.isMultiChatMode())&&!t&&lg(g)&&B.hasAudio&&((v=B.observer)===null||v===void 0||v.setSubscribeAudio(!0)),!t&&vI(g)&&B.hasVideo&&((n=B.observer)===null||n===void 0||n.setSubscribeVideo(!0))}catch(a){throw a instanceof K&&a.code===S.TOKEN_NO_SUBSCRIBE_PERMISSION&&this._handleLoseSubscribePrivilege(),a}}async _handleLoseSubscribePrivilege(){var A;(A=this._room)===null||A===void 0||A.config.setTokenSubscribePrivilegeExpired(!0);try{await this._unSubscribeAllRemoteStreams()}catch{}}async unsubscribeStream(A,I){return this.logger.info("unsubscribeStream()","userId: %o, mediaType: %o",A,I),this._unsubscribe(!1,A,I)}async subscribeScreen(A,I){return this.logger.info("subscribeScreen() userId: %o, mediaType: %o",A,I),this._subscribe(!0,A,I)}async unsubscribeScreen(A,I){return this.logger.info("unsubscribeScreen() userId: %o, mediaType: %o",A,I),this._unsubscribe(!0,A,I)}_unsubscribe(A,I,g,C){var Q;if(g===sA.AUDIO&&(Q=this._room)!==null&&Q!==void 0&&Q.config.isMultiChatMode())return void this.logger.warn("subscribeStream()","due to multiChatMode return");const i=this._room.remoteStreams.get(I),B=i==null?void 0:i.find(e=>e.isScreen===A);if(!B)throw new K(S.STREAM_NOT_EXIST,"stream not exist");var E;return kB&&ri&&ri>=85&&ri<=91&&g!==sA.AUDIO&&((E=B.videoTrack)===null||E===void 0||E.stopAll()),this._room.unsubscribe(B,g).then(()=>{C||(lg(g)&&delete this._pauseAllSubscribeState.resumeAudioStreamIds[B.streamId],vI(g)&&delete this._pauseAllSubscribeState.resumeVideoStreamIds[B.streamId])})}async setRemoteVideoConfig(A,I){var g;return this.logger.info("setRemoteVideoConfig() userId: %o, remoteVideoConfig: %o",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("old"),XC(A),M9A(I),this._ctx.videoProfile.setRemoteUserVideoConfig(A,I),(g=this._room)===null||g===void 0?void 0:g.updateSubVideoConfig(A).then(()=>{})}async setRemoteSimulcastStreamType(A,I){var g;this.logger.info("setRemoteSimulcastStreamType()","userId: %s, streamType: %s",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("new"),XC(A),gI(I,"SimulcastStreamType",[Ee.VIDEO_STREAM_HIGH,Ee.VIDEO_STREAM_MID,Ee.VIDEO_STREAM_LOW]),this._ctx.videoProfile.setRemoteUserVideoConfig(A,I),await((g=this._room)===null||g===void 0?void 0:g.updateSubVideoConfig(A))}async startVideoCapture(A){var I,g;if(this.logger.info("startVideoCapture()","deviceId: %s",A),si(A)||EI(A,"deviceId"),A&&this._ctx.videoProfile.setCaptureDeviceId(A),this._trackSourceType.video===BC.VIDEO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy)throw new K(S.REPEAT_CAPTURE,"Has already capture");let C={};const Q=await Ml(this._ctx),i=this._ctx.videoProfile.getContentHint();i&&Q.setContentHint(i),this._initLocalTrackEvents(Q),this._localVideoTrack=Q,this._localVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(e=>{var t,o;(t=this._localVideoTrack)===null||t===void 0||t.setPlayer(e,this._mirrorType,(o=this._config)===null||o===void 0?void 0:o.autoPlayPolicy,this._initPlayerEvents.bind(this))}),C=Q.originTrack.getSettings();const B={width:C.width,height:C.height};if(this._localVideoTrack.resolution=B,this._ctx.videoProfile.__autoResetVideoEncoderConfig(C),setTimeout(()=>this.safeEmit(q.onLocalVideoSizeChanged,{streamIndex:W.STREAM_INDEX_MAIN,info:B})),this._ctx.engineDestroyed)return this._destroyLocalTrack(),C;if(this._wtnStreamManager._updatePushTrack(),!this._room)return C;const{isAutoPublish:E}=this._room.config;return((I=this._room.localStream)!==null&&I!==void 0&&I.pubVideo||E)&&this._ctx.visibility&&this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableVideo(!0),C}async getLocalStreamStats(){var A;return await((A=this._room)===null||A===void 0?void 0:A.getLocalStreamStats())}async stopVideoCapture(){var A,I;if(this.logger.info("stopVideoCapture()"),this._trackSourceType.video===BC.VIDEO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy){const g=this._ctx.extensionManager.getPluginByName(ts.PRE_PROCESSING,"RTCBeautyExtension");g&&g.emit("stop"),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),this._localImgVideoTrack?this._localVideoTrack.setTrack(this._localImgVideoTrack,{isDummy:!0}):this._localVideoTrack=void 0}this._wtnStreamManager._updatePushTrack(),this._room&&((A=this._room.localStream)!==null&&A!==void 0&&A.pubVideo&&await this._updatePublish(),(I=this._room.localStream)===null||I===void 0||(I=I.observer)===null||I===void 0||I.setEnableVideo(!1))}async startAudioCapture(A){var I,g;if(this.logger.info("startAudioCapture()","deviceId: $o",A),si(A)||EI(A,"deviceId"),A&&this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:A}}),this._trackSourceType.audio===lQ.AUDIO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");if(this._localAudioTrack)throw new K(S.REPEAT_CAPTURE,"Has already capture");let C={};const Q=await mG(this._ctx,this._ctx.audioProfileManager.getConstraints());C=Q.originTrack.getSettings(),this._initLocalTrackEvents(Q),this._localAudioTrack=Q,this._localAudioTrack.setVolume(this._localAudioVolume);const{frameSize:i,callback:B}=this._ctx._localAudioTrackDumpConfig[W.STREAM_INDEX_MAIN];i&&B&&this._localAudioTrack.setDataFetcher(i,B);const{position:E,volume:e}=this._ctx.earMonitorSettings[W.STREAM_INDEX_MAIN];if(E!==GC.NONE&&(this._localAudioTrack.play(E),this._localAudioTrack.setPlaybackVolume(e)),this._tempMixingAudioTrack&&(this._localAudioTrack.mixType=this._tempMixingAudioTrack.type,this._localAudioTrack.mixedAudioTrack=this._tempMixingAudioTrack.track,delete this._tempMixingAudioTrack),this._ctx.engineDestroyed)return this._destroyLocalTrack(),C;if(this._wtnStreamManager._updatePushTrack(),!this._room)return C;const{isAutoPublish:t}=this._room.config;return((I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio||t)&&this._ctx.visibility&&this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableAudio(!0),C}async stopAudioCapture(){var A,I,g;if(this.logger.info("stopAudioCapture()"),this._trackSourceType.audio===lQ.AUDIO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");this._localAudioTrack&&(this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy()),this._localAudioTrack=void 0,(A=this._audioMixingManager)===null||A===void 0||A.stopAll(),this._wtnStreamManager._updatePushTrack(),this._room&&((I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio&&await this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableAudio(!1))}async startAudioAndVideoCapture(A,I){var g,C,Q,i;this.logger.print("startAudioAndVideoCapture","optionsOrAudioDeviceId: $o",A,"videoDeviceId: $o",I);const{audioDeviceId:B,videoDeviceId:E}=f9A(A,I);if(B&&this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:B}}),this._trackSourceType.video===BC.VIDEO_SOURCE_TYPE_EXTERNAL||this._trackSourceType.audio===lQ.AUDIO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,this._trackSourceType.video===BC.VIDEO_SOURCE_TYPE_EXTERNAL?"setVideoSourceType as internal first":"setAudioSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy)throw new K(S.REPEAT_CAPTURE,"video has already capture");if(this._localAudioTrack)throw new K(S.REPEAT_CAPTURE,"audio has already capture");const e=this._ctx.videoProfile.getCaptureConfig(E);let t={},o={};const{audioTrack:r,videoTrack:s}=await xDA(this._ctx,this._ctx.audioProfileManager.getConstraints(),e),v=this._ctx.videoProfile.getContentHint();v&&s.setContentHint(v),E&&this._ctx.videoProfile.setCaptureDeviceId(E),this._initLocalTrackEvents(s),this._localVideoTrack=s,this._localVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(h=>{var u,D;(u=this._localVideoTrack)===null||u===void 0||u.setPlayer(h,this._mirrorType,(D=this._config)===null||D===void 0?void 0:D.autoPlayPolicy,this._initPlayerEvents.bind(this))}),this._initLocalTrackEvents(r),this._localAudioTrack=r,this._localAudioTrack.setVolume(this._localAudioVolume);const{frameSize:n,callback:a}=this._ctx._localAudioTrackDumpConfig[W.STREAM_INDEX_MAIN];n&&a&&this._localAudioTrack.setDataFetcher(n,a),this._tempMixingAudioTrack&&(this._localAudioTrack.mixType=this._tempMixingAudioTrack.type,this._localAudioTrack.mixedAudioTrack=this._tempMixingAudioTrack.track,delete this._tempMixingAudioTrack);let c=s.originTrack;t=c.getSettings();const P={width:t.width||0,height:t.height||0};if(this._localVideoTrack.resolution=P,this._ctx.videoProfile.__autoResetVideoEncoderConfig(t),setTimeout(()=>this.safeEmit(q.onLocalVideoSizeChanged,{streamIndex:W.STREAM_INDEX_MAIN,info:P})),c=r.originTrack,o=c.getSettings(),this._ctx.engineDestroyed)return this._destroyLocalTrack(),{audioTrackSettings:o,videoTrackSettings:t};if(this._wtnStreamManager._updatePushTrack(),!this._room)return{audioTrackSettings:o,videoTrackSettings:t};const{isAutoPublish:d}=this._room.config;return((g=this._room.localStream)!==null&&g!==void 0&&g.pubVideo||(C=this._room.localStream)!==null&&C!==void 0&&C.pubAudio||d)&&this._ctx.visibility&&this._updatePublish(),(Q=this._room.localStream)===null||Q===void 0||(Q=Q.observer)===null||Q===void 0||Q.setEnableVideo(!0),(i=this._room.localStream)===null||i===void 0||(i=i.observer)===null||i===void 0||i.setEnableAudio(!0),{audioTrackSettings:o,videoTrackSettings:t}}async startVideoAndAudioCapture(A,I){return this.startAudioAndVideoCapture(I,A)}getAudioMixingManager(){return this.logger.info("getAudioMixingManager()","invoke"),this._audioMixingManager||(this._audioMixingManager=new QC({getLocalAudioTrack:()=>this._localAudioTrack,updateLocalAudioTrack:this._updateMixAudioTrack,emitMessage:this._onAudioMixingMessage,onAutoPlayFailed:this._onAudioMixingAutoplayFailed},this.id)),this._audioMixingManager}getWTNStreamManager(){return this._wtnStreamManager}getCallId(){var A;return(A=this._ctx)===null||A===void 0?void 0:A.callId}async startScreenCapture(){var A,I,g;let C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.logger.info("startScreenCapture()","config: %o",C),this._trackSourceType.screenVideo===BC.VIDEO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._trackSourceType.screenAudio===lQ.AUDIO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");const[Q,i]=await ODA(this._ctx,C);i==null||i.setVolume(this._localScreenAudioVolume),this._localScreenVideoTrack&&!this._localScreenVideoTrack.dummy&&(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy()),(A=this._localScreenAudioTrack)===null||A===void 0||A.destroy(),delete this._localScreenAudioTrack,this._localScreenVideoTrack=Q;const{contentHint:B}=this._ctx.videoProfile.getScreenEncodeConfig();B&&Q.setContentHint(B);const E=Q.originTrack;setTimeout(()=>{const e=E.getSettings(),t={width:e.width,height:e.height};Q.resolution=t,this.safeEmit(q.onLocalVideoSizeChanged,{streamIndex:W.STREAM_INDEX_SCREEN,info:{width:e.width,height:e.height}})},500),i&&(this._localScreenAudioTrack=i,this._initLocalTrackEvents(i)),this._localVideoPlayerConfig[W.STREAM_INDEX_SCREEN].forEach(e=>{var t,o;(t=this._localScreenVideoTrack)===null||t===void 0||t.setPlayer(e,Ci.MIRROR_TYPE_NONE,(o=this._config)===null||o===void 0?void 0:o.autoPlayPolicy,this._initPlayerEvents.bind(this))}),this._initLocalTrackEvents(this._localScreenVideoTrack,!0),((I=this._room)!==null&&I!==void 0&&(I=I.localScreenStream)!==null&&I!==void 0&&I.pubAudio||(g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubVideo)&&await this._updateScreenPublish()}async stopScreenCapture(){var A,I,g,C;this.logger.info("stopScreenCapture()"),(A=this._localScreenVideoTrack)===null||A===void 0||A.stopAll(),this._localScreenVideoTrack&&(this._localScreenVideoTrack.dummy||(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy(),this._localImgScreenTrack&&this._localScreenVideoTrack.setTrack(this._localImgScreenTrack,{isDummy:!0}))),this._localScreenAudioTrack&&(this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy()),this._localScreenAudioTrack=void 0,(I=this._localScreenVideoTrack)!==null&&I!==void 0&&I.dummy||(this._localScreenVideoTrack=void 0),((g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubAudio||(C=this._room)!==null&&C!==void 0&&(C=C.localScreenStream)!==null&&C!==void 0&&C.pubVideo)&&await this._updateScreenPublish()}setLocalVideoPlayer(A,I){var g;this.logger.info("setLocalVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]);const C=A===W.STREAM_INDEX_MAIN?this._localVideoTrack:this._localScreenVideoTrack,Q=(g=I==null?void 0:I.playerId)!==null&&g!==void 0?g:ei;if(I==null||!I.renderDom){var i,B;(i=this._localVideoPlayerConfig[A].get(Q))===null||i===void 0||(i=i.player)===null||i===void 0||i.destroy();const r=(B=this._localVideoPlayerConfig[A].get(Q))===null||B===void 0?void 0:B.renderDom;return this._containerCollisionDetector.unregisterContainer(r),void this._localVideoPlayerConfig[A].delete(Q)}Vk(I);const E=this._localVideoPlayerConfig[A].get(Q);if(!E){var e,t,o;const{renderDom:r}=I;if(!this._containerCollisionDetector.registerContainer(r))return this.monitor.report("rtc_error",{message:"RenderDom is not empty",error_code:iQ.DUPLICATE_DOM}),void Ae("renderDom is not empty");const s=new jE(this._ctx.id,Q,p(p({},I),{},{isLocal:!0,isScreen:A===W.STREAM_INDEX_SCREEN,userId:(e=I.userId)!==null&&e!==void 0?e:"_local_"})),v=p(p({},I),{},{player:s});return this._localVideoPlayerConfig[A].set(Q,v),C==null||C.setPlayer(v,A===W.STREAM_INDEX_MAIN?this._mirrorType:Ci.MIRROR_TYPE_NONE,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this)),(o=v.player)===null||o===void 0?void 0:o.domElement}I.renderMode!==void 0&&(C==null||C.setRenderMode(Q,I.renderMode),E.renderMode=I.renderMode)}async startLiveTranscoding(A){var I;this.logger.info("startLiveTranscoding()","transcode: %o",A),qo.checkStartParams(A),this._liveTranscodeConfig=A;const g=(I=this._room)===null||I===void 0?void 0:I.config;if(g&&g.roomId.length+g.userId.length>126)throw new K(S.INVALID_PARAMS,"The roomId+userId must be within 126 bytes");try{this.safeEmit(q.onStreamMixingEvent,{event:Ii.START,error:0,message:""}),this._room&&this._ctx.signalingManager.isConnected()&&await this._room.liveControlMessage(qo.getStartParams(this._liveTranscodeConfig))}catch(C){throw C instanceof K?C:new K(S.UNEXPECTED_ERROR,"unexpected error",C)}}async updateLiveTranscoding(A){var I,g;if(this.logger.info("updateLiveTranscoding()","transcode: %o",A),!this._liveTranscodeConfig)return;const C=GG({},A);delete C.audio,(I=C.video)===null||I===void 0||delete I.codec,(g=C.video)===null||g===void 0||delete g.gop,qo.checkUpdateParams(C),this._liveTranscodeConfig=GG(this._liveTranscodeConfig,C);try{var Q;this.safeEmit(q.onStreamMixingEvent,{event:Ii.UPDATE,error:0,message:""}),await((Q=this._room)===null||Q===void 0?void 0:Q.liveControlMessage(qo.getUpdateParams(this._liveTranscodeConfig)))}catch(i){throw i instanceof K?i:new K(S.UNEXPECTED_ERROR,"unexpected error",i)}}async stopLiveTranscoding(){if(this.logger.info("stopLiveTranscoding()"),this._liveTranscodeConfig){delete this._liveTranscodeConfig;try{var A;this.safeEmit(q.onStreamMixingEvent,{event:Ii.STOP,error:0,message:""}),await((A=this._room)===null||A===void 0?void 0:A.liveControlMessage({action:"stopped",type:"transcode"}))}catch(I){throw I instanceof K?I:new K(S.UNEXPECTED_ERROR,"unexpected error",I)}}}async startSubtitle(A){var I;this.logger.info("startSubtitle()","config: %o",A),this._assertNotInRoom(),await((I=this._room)===null||I===void 0?void 0:I.startSubtitle(A))}async updateSubtitleConfig(A){var I;this.logger.info("updateSubtitleConfig()","config: %o",A),this._assertNotInRoom(),await((I=this._room)===null||I===void 0?void 0:I.updateSubtitleConfig(A))}stopSubtitle(){var A;this.logger.info("stopSubtitle()","invoke"),(A=this._room)===null||A===void 0||A.stopSubtitle()}setBusinessId(A){return this.logger.info("setBusinessId()","businessId: %s",A),!K9A(A)&&!this._room&&(this._ctx.businessId=A,!0)}async setUserVisibility(A){var I;if(this.logger.info("setUserVisibility()","enable: %o",A),A=!!A,this._ctx.visibility!==A)if(this._room){var g;if(this._assertNotInRoom(),this._room.localStream&&((g=this._room.localStream.observer)===null||g===void 0||g.setPublisher(A)),!A){const C=await this._pubLock.lock();try{this._room.unpublish(),this._room.unpublishScreen()}finally{C()}}this._ctx.visibility=A;try{await this._room.updateUserAttributes()}catch(C){throw this._ctx.visibility=!A,C}A&&(I=this._room)!==null&&I!==void 0&&I.config.isAutoPublish&&this._updatePublish({mediaType:sA.AUDIO_AND_VIDEO})}else this._ctx.visibility=A}_initPlayerEvents(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];const g=(arguments.length>2&&arguments[2]!==void 0?arguments[2]:W.STREAM_INDEX_MAIN)===W.STREAM_INDEX_SCREEN;A.on("playback_event",C=>{switch(C.eventName){case"timeupdate":return;case"loadeddata":if(C.type==="audio"){var Q;const E=A.userId.replace("_screen",""),e=(Q=this._room)===null||Q===void 0||(Q=Q.remoteStreams.get(E))===null||Q===void 0?void 0:Q.find(o=>o.isScreen===g),t=()=>{I?this.safeEmit(q.onFirstPublicStreamAudioFrameDecoded,{publicStreamId:E}):(this.safeEmit(q.onAudioFirstFrameDecoded,{userId:E,isScreen:g}),this.safeEmit(q.onRemoteAudioFirstFrame,{userId:E,isScreen:g})),this.monitor.report("first_remote_audio_render",{stream_id:"",stream_user_id:E||""},{isScreen:g})};e==null||!e.observer||e.observer.audioFirstFrameReceived?t():e.observer.once("recvAudioFirstFrame",t)}else{var i,B;const E={userId:A.userId,height:((i=A.domElement)===null||i===void 0?void 0:i.videoHeight)||0,width:((B=A.domElement)===null||B===void 0?void 0:B.videoWidth)||0,isScreen:g,playerId:A.playerId};I?(E.publicStreamId=E.userId,delete E.userId,delete E.isScreen,this.safeEmit(q.onFirstPublicStreamVideoFrameRendered,E),this.safeEmit(q.onFirstPublicStreamVideoFrameDecoded,E)):A.isLocal||(this.safeEmit(q.onVideoFirstFrameRendered,E),this.safeEmit(q.onVideoFirstFrameDecoded,E),this.safeEmit(q.onRemoteVideoFirstFrame,E)),this.monitor.report("first_remote_video_render",{stream_id:"",stream_user_id:C.userId||""},{isScreen:g})}break;case"autoplay-error":{I&&(C.publicStreamId=C.userId),rI(this.id,"autoplay-error",A instanceof jE?"video":"audio",0,C.userId||"");const E={userId:C.userId,kind:A instanceof jE?"video":"audio",mediaType:A instanceof jE?sA.VIDEO:sA.AUDIO,streamIndex:A.isScreen?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN};return A instanceof jE&&(E.playerId=A.playerId===ei?void 0:A.playerId),void this.safeEmit(q.onAutoplayFailed,E)}}A instanceof jE&&(C.playerId=A.playerId===ei?void 0:A.playerId),this.safeEmit(q.onPlayerEvent,C)})}_initLocalTrackEvents(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];["track-ended","track-mute","track-unmute"].forEach(g=>{A.on(g,async C=>{this.monitor.report("rtc_error",{message:"track-".concat(g," mediaType: ").concat(C.originTrack.kind),error_code:iQ.TRACK_ERROR,capture_session_id:C.captureSessionId,media_type:g,reason:g});let Q=!1;C!==this._localScreenAudioTrack&&C!==this._localScreenVideoTrack||(Q=!0);const{kind:i}=C.originTrack;this.safeEmit({"track-ended":q.onTrackEnded,"track-mute":q.onTrackMute,"track-unmute":q.onTrackUnmute}[g],{kind:i,isScreen:Q}),(no||l0)&&(g==="track-mute"&&(RB.emit(fi.ON_IOS_LOCAL_TRACK_MUTE,i),i==="audio"&&(await this.stopAudioCapture(),this.startAudioCapture())),g==="track-unmute"&&RB.emit(fi.ON_IOS_LOCAL_TRACK_UNMUTE,i))})}),A.on("resolution-change",g=>{this._ctx.extensionManager.getPluginsByType(ts.PRE_PROCESSING).forEach(C=>{var Q;C==null||(Q=C.applyConstraints)===null||Q===void 0||Q.call(C,I?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN,g)}),this.safeEmit(q.onLocalVideoSizeChanged,{streamIndex:I?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN,info:g})}),A.on("needReplaceTrack",()=>{if(A instanceof Io){var g,C;A.stopDataFetcher();const B=this._ctx._localAudioTrackDumpConfig[(g=A.streamIndex)!==null&&g!==void 0?g:W.STREAM_INDEX_MAIN];B!=null&&B.frameSize&&B!=null&&B.callback&&A.setDataFetcher(B.frameSize,B.callback);const{position:E,volume:e}=this._ctx.earMonitorSettings[(C=A.streamIndex)!==null&&C!==void 0?C:W.STREAM_INDEX_MAIN];if(E!==GC.NONE&&(A.play(E),A.setPlaybackVolume(e)),this._room){const{streamIndex:t}=A;var Q,i;t===W.STREAM_INDEX_MAIN?(Q=this._room.localStream)!==null&&Q!==void 0&&Q.pubAudio&&this._ctx.visibility&&this._updatePublish():(i=this._room.localStream)!==null&&i!==void 0&&i.pubAudio&&this._ctx.visibility&&this._updateScreenPublish()}}}),A.on("autoplay-error",g=>{this.safeEmit(q.onAutoplayFailed,g)})}_removeLocalTrackEvents(A){A.removeAllListeners("track-ended"),A.removeAllListeners("track-mute"),A.removeAllListeners("track-unmute"),A.removeAllListeners("resolution-change")}setRemoteVideoPlayer(A,I){var g,C,Q,i,B,E;this.logger.info("setRemoteVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),Vk(I);const{userId:e}=I,t=A===W.STREAM_INDEX_SCREEN,o=(g=this._room)===null||g===void 0||(g=g.remoteStreams.get(e))===null||g===void 0?void 0:g.find(d=>d.isScreen===t),r=o==null?void 0:o.videoTrack,s=(C=I.playerId)!==null&&C!==void 0?C:ei;(Q=this._getRemoteVideoPlayerConfig(A,e,s))===null||Q===void 0||(Q=Q.player)===null||Q===void 0||Q.destroy();const v=(i=this._getRemoteVideoPlayerConfig(A,e,s))===null||i===void 0?void 0:i.renderDom;var n;if(this._containerCollisionDetector.unregisterContainer(v),!I.renderDom)return void((n=this._remoteVideoPlayerConfig[A].get(e))===null||n===void 0||n.delete(s));const{renderDom:a}=I;if(!this._containerCollisionDetector.registerContainer(a))return this.monitor.report("rtc_error",{message:"RenderDom is not empty",error_code:iQ.DUPLICATE_DOM}),void Ae("renderDom is not empty");const c=new jE(this.id,s,p(p({},I),{},{isLocal:!1,isScreen:t,userId:e})),P=p(p({},I),{},{player:c});return this._setRemoteVideoPlayerConfig(A,e,s,P),r==null||r.setPlayer(this.id,P,(B=this._config)===null||B===void 0?void 0:B.autoPlayPolicy,this._initPlayerEvents.bind(this)),o&&this._updateVideoPlayerState(o),(E=P.player)===null||E===void 0?void 0:E.domElement}setLocalVideoMirrorType(A){var I;this.logger.info("setLocalVideoMirrorType()","mirrorType: %o",A),gI(A,"mirrorType",[Ci.MIRROR_TYPE_NONE,Ci.MIRROR_TYPE_RENDER]),this._mirrorType=A,(I=this.localVideoTrack)===null||I===void 0||I.mirror(!!A)}setRemoteVideoMirrorType(A,I,g){var C;this.logger.info("setRemoteVideoMirrorType()","userId: %s, streamIndex: %o, mirrorType: %o",A,I,g),XC(A),gI(I,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),gI(g,"mirrorType",[Ci.MIRROR_TYPE_NONE,Ci.MIRROR_TYPE_RENDER]),this._ctx.setUserStreamConf(A,I,{mirrorType:g}),(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(A))===null||C===void 0||(C=C.find(Q=>Q.isScreen===(I===W.STREAM_INDEX_SCREEN)))===null||C===void 0||(C=C.videoTrack)===null||C===void 0||C.mirror(!!g)}async setAudioPlaybackDevice(A){var I;this.logger.info("setAudioPlaybackDevice()","deviceId: %s",A),EI(A,"deviceId");const g=await this._audioDeviceManager.setSinkId(A);(I=this._room)===null||I===void 0||I.remoteStreams.forEach(C=>{C.forEach(Q=>{var i;(i=Q.audioTrack)===null||i===void 0||i.setPlaybackDevice(A)})}),this.safeEmit(q.onAudioPlaybackDeviceChanged,g),this.monitor.report("rtc_audio_device",{audio_event:"playout_device_switch",message:JSON.stringify(g),error_code:0})}async play(A){var I;let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:sA.AUDIO_AND_VIDEO,C=arguments.length>2?arguments[2]:void 0,Q=arguments.length>3?arguments[3]:void 0;this.logger.info("play()","userId: %s, mediaType: %s, streamIndex: %s",A,g,C);const i=Q??ei,B=!A||A===this._getUserId()||A==="local_user",E=C===void 0||C===W.STREAM_INDEX_MAIN,e=C===void 0||C===W.STREAM_INDEX_SCREEN,t=g!==sA.VIDEO,o=g!==sA.AUDIO,r=[];if(B&&o){if(E&&this._localVideoTrack){this._localVideoTrack.mirror(!!this._mirrorType);const a=this._localVideoTrack.play(i);a&&r.push(a)}if(e&&this._localScreenVideoTrack){var s;!((s=this._localScreenVideoTrack)===null||s===void 0)&&s.manuallyPlay(i)&&r.push()}}this._audioMixingManager&&A===this._audioMixingManager.id&&r.push(this._audioMixingManager.resumeLocalPlay());let v=[];var n;return(I=this._room)===null||I===void 0||I.remoteStreams.forEach((a,c)=>{A&&A!==c||a.forEach(P=>{P.audioTrack&&v.push(P.audioTrack),P.videoTrack&&v.push(P.videoTrack)})}),this._wtnStreamManager.__getRemoteStreams().forEach((a,c)=>{A&&A!==c||(a.audioTrack&&v.push(a.audioTrack),a.videoTrack&&v.push(a.videoTrack))}),E||(v=v.filter(a=>!!a.isScreen)),e||(v=v.filter(a=>!a.isScreen)),t||(v=v.filter(a=>a.mediaType!=="audio")),o||(v=v.filter(a=>a.mediaType!=="video")),t&&((n=this._room)===null||n===void 0||n.virtualStreams.forEach(a=>{a.audioTrack&&v.push(a.audioTrack)})),v.forEach(a=>{const c=a.manuallyPlay(i);c&&r.push(c)}),Promise.all(r).then(()=>{})}async stop(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:sA.AUDIO_AND_VIDEO,g=arguments.length>2?arguments[2]:void 0,C=arguments.length>3?arguments[3]:void 0;this.logger.info("stop()","userId: %s, mediaType: %s, streamIndex: %s, playerId: %s",A,I,g,C);const Q=C??ei,i=!A||A===this._getUserId()||A==="local_user",B=g===void 0||g===W.STREAM_INDEX_MAIN,E=g===void 0||g===W.STREAM_INDEX_SCREEN,e=I!==sA.VIDEO,t=I!==sA.AUDIO;if(i&&t&&(B&&this._localVideoTrack&&this._localVideoTrack.pause(Q),E&&this._localScreenVideoTrack&&this._localScreenVideoTrack.pause(Q)),A){var o;let r=[];(o=this._room)===null||o===void 0||(o=o.remoteStreams.get(A))===null||o===void 0||o.forEach(n=>{n.audioTrack&&r.push(n.audioTrack),n.videoTrack&&r.push(n.videoTrack)});const s=this._wtnStreamManager.__getPublicStreamTrack(A,"audio"),v=this._wtnStreamManager.__getPublicStreamTrack(A,"video");s&&r.push(s),v&&r.push(v),B||(r=r.filter(n=>!!n.isScreen)),E||(r=r.filter(n=>!n.isScreen)),e||(r=r.filter(n=>n.mediaType!=="audio")),t||(r=r.filter(n=>n.mediaType!=="video")),r.forEach(n=>{n.pause(Q)})}}getAudioVolume(A,I){gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]);let g=0;if(I){var C;const Q=(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(I))===null||C===void 0||(C=C.find(i=>i.isScreen===(A===W.STREAM_INDEX_SCREEN)))===null||C===void 0?void 0:C.audioTrack;Q&&(g=Q.getAudioLevel())}else{const Q=A===W.STREAM_INDEX_MAIN?this._localAudioTrack:this._localScreenAudioTrack;Q&&(g=Q.getAudioLevel())}return{linearVolume:g,nonlinearVolume:Xv(g)}}setAudioFrameCallback(A,I,g){var C;let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:4096;if(this.logger.info("setAudioFrameCallback()","streamIndex: %s, userId: %s, callback: %s, frameSize: %s",A,I,g?"true":"false",Q),gI(Q,"frameSize",[256,512,1024,2048,4096,8192,16384]),ui.isWorkletReady===void 0&&ui.getAudioContextInstance(),ui.isWorkletReady===null)throw this.logger.error("setAudioFrameCallback()","Not support AudioWorklet"),new K(S.NOT_SUPPORTED,"Not support AudioWorklet");I?g?this._ctx._remoteAudioTrackDumpConfig[A].set(I,{callback:g,frameSize:Q}):this._ctx._remoteAudioTrackDumpConfig[A].delete(I):this._ctx._localAudioTrackDumpConfig[A]={callback:g,frameSize:g?Q:void 0};const i=I?(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(I))===null||C===void 0||(C=C.find(B=>B.isScreen===(A===W.STREAM_INDEX_SCREEN)))===null||C===void 0?void 0:C.audioTrack:A===W.STREAM_INDEX_MAIN?this._localAudioTrack:this._localScreenAudioTrack;i?g?i.setDataFetcher(Q,g):i.stopDataFetcher():this.logger.warn("setAudioFrameCallback()","track not found")}async pauseAllSubscribedStream(A){return this.logger.info("pauseAllSubscribedStream()","mediaType: %o",A),this._checkMediaType(A),lg(A)&&(this._pauseAllSubscribeState.audio=!0),vI(A)&&(this._pauseAllSubscribeState.video=!0),this._room?this._pauseAllRemoteStreams(A):Promise.resolve()}async _pauseAllRemoteStreams(A){if(!this._room)return Promise.resolve();const I=[];return this._room.remoteStreams.forEach(g=>{Array.isArray(g)&&g.forEach(C=>{if(C.hasSubscribed){C.attributes.audiostream&&lg(A)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[C.streamId]=C.streamId),C.attributes.videostream&&vI(A)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[C.streamId]=C.streamId);const Q=this._unsubscribe(C.isScreen,C.userId,A,!0);Q&&I.push(Q)}})}),Promise.all(I).then(()=>{})}async resumeAllSubscribedStream(A){if(this.logger.info("resumeAllSubscribedStream()","mediaType: %o",A),this._checkMediaType(A),lg(A)&&(this._pauseAllSubscribeState.audio=!1),vI(A)&&(this._pauseAllSubscribeState.video=!1),!this._room)return Promise.resolve();await this._triedResumeAllRemoteStreams(A,!1)}async _triedResumeAllRemoteStreams(A,I){if(!this._room||this._pauseAllSubscribeState.audio&&A===sA.AUDIO||this._pauseAllSubscribeState.video&&A===sA.VIDEO||this._pauseAllSubscribeState.video&&this._pauseAllSubscribeState.audio&&A===sA.AUDIO_AND_VIDEO)return Promise.resolve();const g=[],C=[...Object.keys(this._pauseAllSubscribeState.resumeAudioStreamIds)],Q=[...Object.keys(this._pauseAllSubscribeState.resumeVideoStreamIds)];return this._room.remoteStreams.forEach(i=>{Array.isArray(i)&&i.forEach(B=>{if(I&&B.isScreen)return;const E=this._pauseAllSubscribeState.resumeAudioStreamIds[B.streamId],e=this._pauseAllSubscribeState.resumeVideoStreamIds[B.streamId];if(E&&lg(A)||e&&vI(A)){const t=this._subscribe(B.isScreen,B.userId,A).then(()=>{E&&lg(A)&&delete this._pauseAllSubscribeState.resumeAudioStreamIds[B.streamId],e&&vI(A)&&delete this._pauseAllSubscribeState.resumeVideoStreamIds[B.streamId]});t&&g.push(t)}})}),Promise.all(g).then(()=>{var i;return(i=this._room)===null||i===void 0||i.remoteStreams.forEach(B=>{Array.isArray(B)&&B.forEach(E=>{this._updateAudioPlayerState(E),this._updateVideoPlayerState(E)})}),Promise.resolve()}).finally(()=>{var i;return(i=this._room)!==null&&i!==void 0&&i.config.tokenSubscribePrivilegeExpired&&(C.forEach(B=>{this._pauseAllSubscribeState.resumeAudioStreamIds[B]=B}),Q.forEach(B=>{this._pauseAllSubscribeState.resumeVideoStreamIds[B]=B})),Promise.resolve()})}async sendUserMessage(A,I){var g;XC(A),this._assertNotInRoom();const C=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendUserMessage(A,I))===null||g===void 0?void 0:g.then(Q=>(this._messageStatisticsObserver.countP2PMessage(!0,A,!1,C,Q),Q.id)).catch(Q=>{throw this._messageStatisticsObserver.countP2PMessage(!1,A,!1,C,Q),Q})}async sendUserBinaryMessage(A,I){var g;XC(A),GD(I,"message"),this._assertNotInRoom();const C=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendUserMessage(A,I))===null||g===void 0?void 0:g.then(Q=>(this._messageStatisticsObserver.countP2PMessage(!0,A,!0,C,Q),Q.id)).catch(Q=>{throw this._messageStatisticsObserver.countP2PMessage(!1,A,!0,C,Q),Q})}async sendRoomMessage(A){var I,g;this._assertNotInRoom();const C=(I=this._room)===null||I===void 0?void 0:I.config.roomId,Q=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendRoomMessage(A))===null||g===void 0?void 0:g.then(i=>(this._messageStatisticsObserver.countRoomMessage(!0,C,!1,Q),i)).catch(i=>{throw this._messageStatisticsObserver.countRoomMessage(!1,C,!1,Q),i})}async sendRoomBinaryMessage(A){var I,g;this._assertNotInRoom();const C=(I=this._room)===null||I===void 0?void 0:I.config.roomId,Q=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendRoomMessage(A,!0))===null||g===void 0?void 0:g.then(i=>(this._messageStatisticsObserver.countRoomMessage(!0,C,!0,Q),i)).catch(i=>{throw this._messageStatisticsObserver.countRoomMessage(!1,C,!0,Q),i})}async setAudioCaptureConfig(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger.info("setAudioCaptureConfig()","config: %o",A),delete A.deviceId,eG(A),await this._shouldUpdateAudioConf("setAudioCaptureConfig")&&this._ctx.audioProfileManager.updateConstraints(A)}async setVideoCaptureConfig(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return this.logger.info("setVideoCaptureConfig()","config: %o",A),this._setVideoCaptureConfig(A)}async _setVideoCaptureConfig(){var A;let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};delete I.deviceId,eG(I);const g=p(p({},this._ctx.videoProfile.getCaptureConfig()),I);return this._localVideoTrack&&await this._localVideoTrack.updateVideoCaptureConfig(g),this._ctx.videoProfile.setCaptureConfig(g),((A=this._localVideoTrack)===null||A===void 0?void 0:A.originTrack.getSettings())||{}}enableSimulcastMode(A){this.logger.info("enableSimulcastMode()","enabled: %o",A),this._ctx.videoProfile.checkSimulcastApiVersion("old");try{return this._ctx.videoProfile.setSimulcastMode(A?Be.VIDEO_ON_DEMAND:Be.VIDEO_ONLY_ONE,this._room),!0}catch{return!1}}async setLocalSimulcastMode(A,I){var g;this.logger.info("setLocalSimulcastMode()","mode: %o, config: %o",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("new"),await this._ctx.videoProfile.setSimulcastMode(A,this._room),await this._ctx.videoProfile.setSubVideoEncodeConfig(I,this._room,this._localVideoTrack),await((g=this._room)===null||g===void 0?void 0:g.hasPublished())&&this._updatePublish()}async setVideoEncoderConfig(A){var I;if(this.logger.info("setVideoEncoderConfig()","descriptions: %o",A),await this._ctx.videoProfile.setVideoEncodeConfigPolyfill(A),this._localVideoTrack){const g=this._ctx.videoProfile.getContentHint();g&&this._localVideoTrack.setContentHint(g),await this._localVideoTrack.updateVideoCaptureConfig(this._ctx.videoProfile.getCaptureConfig())}this._updateDummyCaptureImage(W.STREAM_INDEX_MAIN),await((I=this._room)===null||I===void 0?void 0:I.hasPublished())&&this._updatePublish()}setVideoEncoderAutoConfigList(A){if(Array.isArray(A))return ws(A).call(A,(I,g)=>I.maxKbps-g.maxKbps),Qj(A)}async setScreenEncoderConfig(A){var I;this.logger.info("setScreenEncoderConfig()","description: %o",A),this._ctx.videoProfile.setScreenEncodeConfig(A),this._localScreenVideoTrack&&(_f!=="16.1"&&await this._localScreenVideoTrack.updateVideoCaptureConfig(A),A.contentHint&&this._localScreenVideoTrack.setContentHint(A.contentHint)),this._updateDummyCaptureImage(W.STREAM_INDEX_SCREEN),await((I=this._room)===null||I===void 0?void 0:I.hasScreenPublished())&&this._updateScreenPublish()}sendSEIMessage(A,I,g){if(this.logger.info("sendSEIMessage()","streamIdex: %o, message: %o, repeatCount: %o",A,I,g),!lE()&&!Bv())return Ae("Your browser does not support sending SEI"),!1;gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),Tt(g,"repeatCount",0,30);const C=typeof I=="string"?new Uint8Array(Pg.str2ab(I)):I;if(!I.length)return this.logger.warn("sei message must not be empty"),!1;let Q;if(A===W.STREAM_INDEX_MAIN){var i,B;if(!((i=this._room)!==null&&i!==void 0&&(i=i.localStream)!==null&&i!==void 0&&i.pubAudio||(B=this._room)!==null&&B!==void 0&&(B=B.localStream)!==null&&B!==void 0&&B.pubVideo))return;Q=this._room.localStream}else{var E,e;if(!((E=this._room)!==null&&E!==void 0&&(E=E.localScreenStream)!==null&&E!==void 0&&E.pubAudio||(e=this._room)!==null&&e!==void 0&&(e=e.localScreenStream)!==null&&e!==void 0&&e.pubVideo))return;Q=this._room.localScreenStream}if(C.byteLength>4096)return void this.logger.warn("sei size must not bigger than 4KB");var t;kB||(t=this._room)===null||t===void 0||t.maybeFillBackFrame2Stream(Q);const o=cE();return Q.sendSEIMessage({content:C,uuid:o,repeatCount:g+1}),setTimeout(async()=>{if(Q&&await Q.revokeSEIMessage(o)){const r="timeout for sei message(id: ".concat(o,")");console.error("[RTC WebSDK] ".concat(r)),this.monitor.report("rtc_sdk_callback",{sdk_callback_name:"sendSEIMessageTimeout",message:r,error_code:400})}},yA("SEI_TIME_OUT")),o}setAudioVolumeIndicationInterval(A){this.logger.info("setAudioVolumeIndicationInterval()","interval %o: ",A),(typeof A!="number"||A<200)&&(A=200);let I=[];this._audioVolumeIndicationTimer&&clearInterval(this._audioVolumeIndicationTimer),this._audioVolumeIndicationTimer=setInterval(()=>{var g,C;I=[],(g=this._room)===null||g===void 0||g.remoteStreams.forEach((i,B)=>{var E;if(i.length===0)return;const e=i.find(o=>!o.isScreen),t=e==null||(E=e.audioTrack)===null||E===void 0?void 0:E.getAudioLevel();I.push({userId:B,volume:t||0})});const Q=(C=this._localAudioTrack)===null||C===void 0?void 0:C.getAudioLevel();I.push({userId:this._getUserId(),volume:Q||0}),this.safeEmit(q.onAudioVolumeIndication,{speakers:I})},A)}_sendActiveSpeaker(A,I){if(this._room&&this._room.remoteUsers.size>=1){const g=A[0],C=I.reduce((i,B)=>i&&i.audioPropertiesInfo.nonlinearVolume>B.audioPropertiesInfo.nonlinearVolume?i:B,void 0);let Q;if(Q=g?C?g.audioPropertiesInfo.nonlinearVolume>C.audioPropertiesInfo.nonlinearVolume?g:C:g:C,Q&&Q.audioPropertiesInfo.nonlinearVolume>-35){let i;i=Q.streamKey?this._room.remoteUsers.get(Q.streamKey.userId):this._room.config.userInfo,i&&this.safeEmit(q.onActiveSpeaker,{userId:i.userId,extraInfo:i.extraInfo})}}}enableAudioPropertiesReport(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger.info("enableAudioPropertiesReport()","config %o: ",A);const{enableInBackground:I=!0,localMainReportMode:g=ha.NORMAL,audioReportMode:C=s0.MICROPHONE}=A;let{interval:Q=100}=A;this._stopAudioPropertiesReport(),Q<=0||(Q=Math.max(100,Q),this._audioPropertiesReportTimer=self.setInterval(()=>{if(!I&&document.visibilityState==="hidden")return;const i=[],B=this._audioDeviceManager.getRecordTrack()||this._localAudioTrack;if(B){var E;const e=(E=this._room)===null||E===void 0||(E=E.localStream)===null||E===void 0?void 0:E.audioHasPublish,t=!!this._audioDeviceManager.getRecordTrack(),o=B.getAudioLevel(C),r=Xv(o),s={streamIndex:W.STREAM_INDEX_MAIN,audioPropertiesInfo:{linearVolume:o,nonlinearVolume:r}};if(e||t)i.push(s);else switch(g){case ha.DISCONNECT:break;case ha.RESET:s.audioPropertiesInfo.linearVolume=0,s.audioPropertiesInfo.nonlinearVolume=-127,i.push(s);break;case ha.NORMAL:i.push(s);break;default:throw new K(S.INVALID_PARAMS,"invalid localMainReportMode: ".concat(g," in config"))}}if(this._localScreenAudioTrack){const e=this._localScreenAudioTrack.getAudioLevel();i.push({streamIndex:W.STREAM_INDEX_SCREEN,audioPropertiesInfo:{linearVolume:e,nonlinearVolume:Xv(e)}})}if(this.safeEmit(q.onLocalAudioPropertiesReport,i),this._room){const e=[];this._room.config.isMultiChatMode()?this._room.getActiveSpeakerInMultiChatMode().forEach(t=>{var o,r;const s=255*t.audioLevel;e.push({streamKey:{userId:t.userId,streamIndex:W.STREAM_INDEX_MAIN,roomId:(o=(r=this._room)===null||r===void 0?void 0:r.config.roomId)!==null&&o!==void 0?o:""},audioPropertiesInfo:{linearVolume:s,nonlinearVolume:Xv(s)}})}):this._room.remoteStreams.forEach((t,o)=>{t.forEach(r=>{if(r.audioTrack){var s,v;const n=r.audioTrack.getAudioLevel();e.push({streamKey:{userId:o,streamIndex:r.isScreen?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN,roomId:(s=(v=this._room)===null||v===void 0?void 0:v.config.roomId)!==null&&s!==void 0?s:""},audioPropertiesInfo:{linearVolume:n,nonlinearVolume:Xv(n)}})}})}),this.safeEmit(q.onRemoteAudioPropertiesReport,e),this._sendActiveSpeaker(i,e.filter(t=>t.streamKey.streamIndex!==W.STREAM_INDEX_SCREEN))}},Q))}async setVideoSourceType(A,I){this.logger.print("setVideoSourceType()","index: %o, videoSourceType: %o",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),gI(I,"VideoSourceType",[BC.VIDEO_SOURCE_TYPE_EXTERNAL,BC.VIDEO_SOURCE_TYPE_INTERNAL]);const g=A===W.STREAM_INDEX_MAIN?"video":"screenVideo";if(this._trackSourceType[g]!==I){if(this._trackSourceType[g]=I,this.logger.print("setVideoSourceType","set ".concat(g," source type to ").concat(I)),this._localVideoTrack&&A===W.STREAM_INDEX_MAIN){var C,Q,i;let s=!1;if(I===BC.VIDEO_SOURCE_TYPE_EXTERNAL){s=!0;const n=this._ctx.extensionManager.getPluginByName(ts.PRE_PROCESSING,"RTCBeautyExtension");n&&n.emit("stop"),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy()}(C=this._localVideoTrack)===null||C===void 0||C.destroy(),this._localVideoTrack=void 0;const v=(Q=this._room)===null||Q===void 0?void 0:Q.config.isAutoPublish;var B,E;s?(B=this._room)===null||B===void 0||(B=B.localStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setEnableVideo(!1):(E=this._room)===null||E===void 0||(E=E.localStream)===null||E===void 0||(E=E.observer)===null||E===void 0||E.setPushVideo(!1),((i=this._room)!==null&&i!==void 0&&(i=i.localStream)!==null&&i!==void 0&&i.pubVideo||v)&&await this._updatePublish()}if(this._localScreenVideoTrack&&A===W.STREAM_INDEX_SCREEN){var e,t;let s=!1;var o,r;I===BC.VIDEO_SOURCE_TYPE_EXTERNAL&&(s=!0,this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy()),(e=this._localScreenVideoTrack)===null||e===void 0||e.destroy(),this._localScreenVideoTrack=void 0,s?(o=this._room)===null||o===void 0||(o=o.localScreenStream)===null||o===void 0||(o=o.observer)===null||o===void 0||o.setEnableVideo(!1):(r=this._room)===null||r===void 0||(r=r.localScreenStream)===null||r===void 0||(r=r.observer)===null||r===void 0||r.setPushVideo(!1),(t=this._room)!==null&&t!==void 0&&(t=t.localScreenStream)!==null&&t!==void 0&&t.pubVideo&&await this._updateScreenPublish()}}}async setExternalVideoTrack(A,I){if(this.logger.print("setExternalVideoTrack()","index: %o, track: %o",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),Jk(I),A===W.STREAM_INDEX_MAIN){var g,C;if(this._trackSourceType.video!==BC.VIDEO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as external first");this._localVideoTrack=await _DA(this._ctx,I);const B=this._ctx.videoProfile.getContentHint();!I.contentHint&&B&&this._localVideoTrack.setContentHint(B),this._initLocalTrackEvents(this._localVideoTrack),this._localVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(e=>{var t,o;(t=this._localVideoTrack)===null||t===void 0||t.setPlayer(e,this._mirrorType,(o=this._config)===null||o===void 0?void 0:o.autoPlayPolicy,this._initPlayerEvents.bind(this))});const E=(g=this._room)===null||g===void 0?void 0:g.config.isAutoPublish;((C=this._room)!==null&&C!==void 0&&(C=C.localStream)!==null&&C!==void 0&&C.pubVideo||E)&&await this._updatePublish()}if(A===W.STREAM_INDEX_SCREEN){var Q,i;if(this._trackSourceType.screenVideo!==BC.VIDEO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as external first");this._localScreenVideoTrack=await AbA(this._ctx,I),this._initLocalTrackEvents(this._localScreenVideoTrack,!0),this._localVideoPlayerConfig[W.STREAM_INDEX_SCREEN].forEach(B=>{var E,e;(E=this._localScreenVideoTrack)===null||E===void 0||E.setPlayer(B,this._mirrorType,(e=this._config)===null||e===void 0?void 0:e.autoPlayPolicy,this._initPlayerEvents.bind(this))}),(Q=this._room)===null||Q===void 0||(Q=Q.localScreenStream)===null||Q===void 0||(Q=Q.observer)===null||Q===void 0||Q.setPushVideo(!0),(i=this._room)!==null&&i!==void 0&&(i=i.localScreenStream)!==null&&i!==void 0&&i.pubVideo&&await this._updateScreenPublish()}}async setAudioSourceType(A,I){this.logger.print("setAudioSourceType()","index: %o, audioSourceType: %o",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),gI(I,"audioSourceType",[lQ.AUDIO_SOURCE_TYPE_EXTERNAL,lQ.AUDIO_SOURCE_TYPE_INTERNAL]);const g=A===W.STREAM_INDEX_MAIN?"audio":"screenAudio";if(this._trackSourceType[g]!==I){if(this._trackSourceType[g]=I,this.logger.print("setVideoSourceType","set ".concat(g," source type to ").concat(I)),this._localAudioTrack&&A===W.STREAM_INDEX_MAIN){var C,Q;let o=!1;this._trackSourceType.audio===lQ.AUDIO_SOURCE_TYPE_EXTERNAL&&(o=!0,this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy()),this._localAudioTrack=void 0;const r=(C=this._room)===null||C===void 0?void 0:C.config.isAutoPublish;var i,B;o?(i=this._room)===null||i===void 0||(i=i.localStream)===null||i===void 0||(i=i.observer)===null||i===void 0||i.setEnableAudio(!1):(B=this._room)===null||B===void 0||(B=B.localStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setPushAudio(!1),((Q=this._room)!==null&&Q!==void 0&&(Q=Q.localStream)!==null&&Q!==void 0&&Q.pubAudio||r)&&await this._updatePublish()}if(this._localScreenAudioTrack&&A===W.STREAM_INDEX_SCREEN){var E;let o=!1;var e,t;this._trackSourceType.audio===lQ.AUDIO_SOURCE_TYPE_EXTERNAL&&(o=!0,this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy()),this._localScreenAudioTrack=void 0,o?(e=this._room)===null||e===void 0||(e=e.localScreenStream)===null||e===void 0||(e=e.observer)===null||e===void 0||e.setEnableAudio(!1):(t=this._room)===null||t===void 0||(t=t.localScreenStream)===null||t===void 0||(t=t.observer)===null||t===void 0||t.setPushAudio(!1),(E=this._room)!==null&&E!==void 0&&(E=E.localScreenStream)!==null&&E!==void 0&&E.pubAudio&&await this._updateScreenPublish()}}}async setExternalAudioTrack(A,I){if(this.logger.print("setExternalAudioTrack()","index: %o, track: %o",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),Jk(I),A===W.STREAM_INDEX_MAIN){var g,C,Q;if(this._trackSourceType.audio!==lQ.AUDIO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as external first");this._localAudioTrack=await $DA(this._ctx,I),this._localAudioTrack.setVolume(this._localAudioVolume),this._initLocalTrackEvents(this._localAudioTrack);const E=this._ctx._localAudioTrackDumpConfig[W.STREAM_INDEX_MAIN];E.frameSize&&E.callback&&this._localAudioTrack.setDataFetcher(E.frameSize,E.callback);const{position:e,volume:t}=this._ctx.earMonitorSettings[W.STREAM_INDEX_MAIN];e!==GC.NONE&&(this.setEarMonitorMode(W.STREAM_INDEX_MAIN,e),this.setEarMonitorVolume(W.STREAM_INDEX_MAIN,t));const o=(g=this._room)===null||g===void 0?void 0:g.config.isAutoPublish;(C=this._room)===null||C===void 0||(C=C.localStream)===null||C===void 0||(C=C.observer)===null||C===void 0||C.setPushAudio(!0),((Q=this._room)!==null&&Q!==void 0&&(Q=Q.localStream)!==null&&Q!==void 0&&Q.pubAudio||o)&&await this._updatePublish()}if(A===W.STREAM_INDEX_SCREEN){var i,B;if(this._trackSourceType.screenAudio!==lQ.AUDIO_SOURCE_TYPE_EXTERNAL)throw new K(S.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as external first");this._localScreenAudioTrack=await IbA(this._ctx,I),this._localScreenAudioTrack.setVolume(this._localScreenAudioVolume),this._initLocalTrackEvents(this._localScreenAudioTrack);const E=this._ctx._localAudioTrackDumpConfig[W.STREAM_INDEX_SCREEN];E.frameSize&&E.callback&&this._localScreenAudioTrack.setDataFetcher(E.frameSize,E.callback);const{position:e,volume:t}=this._ctx.earMonitorSettings[W.STREAM_INDEX_SCREEN];e!==GC.NONE&&(this.setEarMonitorMode(W.STREAM_INDEX_SCREEN,e),this.setEarMonitorVolume(W.STREAM_INDEX_SCREEN,t)),(i=this._room)===null||i===void 0||(i=i.localScreenStream)===null||i===void 0||(i=i.observer)===null||i===void 0||i.setPushAudio(!0),(B=this._room)!==null&&B!==void 0&&(B=B.localScreenStream)!==null&&B!==void 0&&B.pubAudio&&await this._updateScreenPublish()}}async login(A,I){return this.logger.info("login()","token: %o, userInfo: %o",A,I),si(A)||EI(A,"token"),XC(I),this._rtmClient.login(A,I)}async logout(){return this.logger.info("logout()"),this._rtmClient.logout()}async updateLoginToken(A){return this.logger.info("updateLoginToken()","token: %o",A),si(A)||EI(A,"token"),this._rtmClient.updateLoginToken(A)}async getPeerOnlineStatus(A){return this.logger.info("getPeerOnlineStatus()","userId: %o",A),XC(A),this._rtmClient.getPeerOnlineStatus(A)}async sendUserMessageOutsideRoom(A,I){XC(A);const g=Date.now();return this._rtmClient.sendUserMessageOutsideRoom(A,I).then(C=>(this._messageStatisticsObserver.countUserMessageOutsideRoom(!0,A,!1,g,C),C.id)).catch(C=>{throw this._messageStatisticsObserver.countUserMessageOutsideRoom(!1,A,!1,g,C),C})}async sendUserBinaryMessageOutsideRoom(A,I){XC(A),GD(I,"message");const g=Date.now();return this._rtmClient.sendUserMessageOutsideRoom(A,I).then(C=>(this._messageStatisticsObserver.countUserMessageOutsideRoom(!0,A,!0,g,C),C.id)).catch(C=>{throw this._messageStatisticsObserver.countUserMessageOutsideRoom(!1,A,!0,g,C),C})}async setServerParams(A,I){return this.logger.info("setServerParams()","signature: %o, url: %0",A,I),this._rtmClient.setServerParams(A,I)}async sendServerMessage(A){EI(A,"message");const I=Date.now();return this._rtmClient.sendServerMessage(A).then(g=>{this._messageStatisticsObserver.countServerMessage(!0,!1,I,g)}).catch(g=>{throw this._messageStatisticsObserver.countServerMessage(!1,!1,I,g),g})}async sendServerBinaryMessage(A){GD(A,"message");const I=Date.now();return this._rtmClient.sendServerMessage(A).then(g=>{this._messageStatisticsObserver.countServerMessage(!0,!0,I,g)}).catch(g=>{throw this._messageStatisticsObserver.countServerMessage(!1,!0,I,g),g})}startCloudProxy(A){if(this._room)throw new K(S.START_CLOUD_PROXY_AFTER_JOIN,"[startCloudProxy] should be invoke before join room ");if(this.logger.info("startCloudProxy()",A),EI(A.logProxy,"logProxy"),Array.isArray(A.accessProxy))for(const I of A.accessProxy)EI(I,"accessProxy");else EI(A.accessProxy,"accessProxy");EI(A.configProxy,"configProxy"),this._originIceConfigRequestUrls=yA("ICE_CONFIG_REQUEST_URLS"),this._originLogServerUrl=yA("LOG_SERVER_URL"),this._originConfigServerUrls=yA("CONFIG_REQUEST_DOMAINS"),DQ("ICE_CONFIG_REQUEST_URLS",A.accessProxy),DQ("LOG_SERVER_URL",X9A(A.logProxy)),DQ("CONFIG_REQUEST_DOMAINS",[A.configProxy]),oI.clearAccessNode(this._appId),oI.clearAccessUrls(),this._ctx.useCloudProxy=!0}stopCloudProxy(){var A,I,g;if(this._room)throw new K(S.STOP_CLOUD_PROXY_BEFORE_LEAVE,"[stopCloudProxy] should be invoke after leave room ");this.logger.info("stopCloudProxy()");const C=(A=this._originIceConfigRequestUrls)===null||A===void 0?void 0:A.map(Q=>Q.replace("https://","").replace("/dispatch/v1/AccessInfo?Action=GetAccessInfo",""));DQ("ICE_CONFIG_REQUEST_URLS",C??[]),DQ("LOG_SERVER_URL",(I=this._originLogServerUrl)!==null&&I!==void 0?I:""),DQ("CONFIG_REQUEST_DOMAINS",(g=this._originConfigServerUrls)!==null&&g!==void 0?g:[]),oI.clearAccessNode(this._appId),oI.clearAccessUrls(),this._ctx.useCloudProxy=!1,this._startCloudProxyTimestamp=void 0}async startPushPublicStream(A,I){var g,C;if(this.logger.print("startPushPublicStream()","publicStreamId: %o, publicStreamParam: %o",A,I),An(A),this._assertNotInRoom(),this._publicStreamIds.get(A))throw new K(S.REPEAT_PUSH,"repeat push public media stream");this._room&&((C=I.layout)===null||C===void 0||(C=C.regions)===null||C===void 0||C.map(i=>{var B;i.roomId=(B=this._room)===null||B===void 0?void 0:B.config.roomId}));const Q=zk(A,"started",I);return(g=this._room)===null||g===void 0||(g=g.publicStreamControlMessage(Q))===null||g===void 0?void 0:g.then(()=>{this._publicStreamIds.set(A,A)})}async updatePublicStreamParam(A,I){var g;this.logger.print("startPushPublicStream()","publicStreamId: %o, publicStreamParam: %o",A,I),An(A),this._assertNotInRoom();const C=zk(A,"layoutChanged",I);return(g=this._room)===null||g===void 0?void 0:g.publicStreamControlMessage(C)}async stopPushPublicStream(A){var I;return this.logger.print("startPushPublicStream()","publicStreamId: %o",A),An(A),this._assertNotInRoom(),(I=this._room)===null||I===void 0?void 0:I.publicStreamControlMessage({type:"publicstream",action:"stopped",publicStreamID:A}).then(()=>{this._publicStreamIds.delete(A)})}async startPlayPublicStream(A){await this._wtnStreamManager.startPlayWTN(null,A,!1,!1)}async stopPlayPublicStream(A){await this._wtnStreamManager.stopPlayWTN(A)}async setAudioProfile(A){this.logger.info("setAudioProfile()","profile: %o",A),await this._shouldUpdateAudioConf("setAudioProfile")&&this._ctx.audioProfileManager.setAudioProfile(A)}async setAudioEncodeMaxBitrate(A){if(this.logger.print("setAudioEncodeMaxBitrate()",A),Tt(A,"maxBitrate",6,256),this._ctx.audioProfileManager.setCustomMaxBitrate(A),this._ctx.audioProfileManager.customMaxBitrate){var I,g,C,Q;if(KI&&((I=this._room)!==null&&I!==void 0&&(I=I.localStream)!==null&&I!==void 0&&I.pubAudio||(g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubAudio))throw new K(S.NOT_SUPPORTED,"Your browser does not support set audio encode maxBitrate dynamically.");await((C=this._room)===null||C===void 0?void 0:C.setAudioEncodeMaxBitrate(W.STREAM_INDEX_MAIN,A)),await((Q=this._room)===null||Q===void 0?void 0:Q.setAudioEncodeMaxBitrate(W.STREAM_INDEX_SCREEN,A))}}setPublicStreamVideoPlayer(A,I){return this._wtnStreamManager.setWTNRemoteVideoPlayer(A,I)}async setDummyCaptureImagePath(A,I){return new Promise((g,C)=>{EI(I,"filePath");const Q=new Image;Q.crossOrigin="anonymous",Q.src=I,Q.onload=()=>{A===W.STREAM_INDEX_MAIN?this._dummyMainImage=Q:this._dummyScreenImage=Q;try{this._updateDummyCaptureImage(A),g()}catch(i){C(new K(S.UNEXPECTED_ERROR,i.message))}},Q.onerror=()=>{C(new K(S.UNEXPECTED_ERROR,"Load image error"))}})}_updateDummyCaptureImage(A){let I,g;if(A===W.STREAM_INDEX_MAIN?(I=this._dummyMainImage,g=this._ctx.videoProfile.getVideoEncodeConfig()[0]):(I=this._dummyScreenImage,g=this._ctx.videoProfile.getScreenEncodeConfig()),!I)return;const C=document.createElement("canvas"),Q=C.getContext("2d"),i=QI(g.width),B=QI(g.height);if(!Q)throw new K(S.UNEXPECTED_ERROR,"Not support canvas");let E,e;!i||!B||I.width<=i&&I.height<=B?(E=I.width,e=I.height):(E=Math.min(i,I.width*B/I.height),e=Math.min(B,I.height*i/I.width)),C.width=E,C.height=e,Q.drawImage(I,0,0,I.width,I.height,0,0,E,e);const t=window.setInterval(()=>{I&&Q.drawImage(I,0,0,I.width,I.height,0,0,E,e)},200);A===W.STREAM_INDEX_MAIN?(clearInterval(this._dummyMainTimer),this._dummyMainTimer=t):(clearInterval(this._dummyScreenTimer),this._dummyScreenTimer=t);const o=C.captureStream(5).getVideoTracks()[0];var r,s;A===W.STREAM_INDEX_MAIN?(this._localImgVideoTrack=o,(r=this._localVideoTrack)!==null&&r!==void 0&&r.dummy&&this._localVideoTrack.setTrack(this._localImgVideoTrack)):(this._localImgScreenTrack=o,(s=this._localScreenVideoTrack)!==null&&s!==void 0&&s.dummy&&this._localScreenVideoTrack.setTrack(this._localImgScreenTrack))}_addListenExtensionEvent(A){A.on("re-capture-audio",()=>{this._localAudioTrack&&this.stopAudioCapture().then(()=>{this.startAudioCapture()})}),A.on("re-capture-video",()=>{this._localVideoTrack&&!this._localVideoTrack.dummy&&this.stopVideoCapture().then(()=>{this.startVideoCapture()})}),A.on("reset-video-effect",async(I,g)=>{if(this._localVideoTrack&&!this._localVideoTrack.dummy){var C;this._localVideoTrack&&this._removeLocalTrackEvents(this._localVideoTrack);try{await this._localVideoTrack.generatePreProcessingTrack()}catch(Q){g(Q)}this._initLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.stopAll(),this._localVideoTrack.playAll(),this.safeEmit(q.onLocalStreamTrackChangedByExtension,{streamIndex:W.STREAM_INDEX_MAIN,type:"video"}),I(),(C=this._room)!==null&&C!==void 0&&(C=C.localStream)!==null&&C!==void 0&&C.pubVideo&&await this._updatePublish(),this._wtnStreamManager._updatePushTrack()}I()})}async registerExtension(A){var I,g,C;A.monitor=this.monitor,A.logger=new SA(A.name,0,this.id);try{if(!await A.isSupported())throw new Error("This extension is not supported.")}catch{throw new Error("This extension is not supported.")}yA("VERSION")!==A.version&&(Ae("This extension version is ".concat(A.version,", but the sdk version is ").concat(yA("VERSION"),".")),this.monitor.report("rtc_error",{message:"This extension version is ".concat(A.version,", but the sdk version is ").concat(yA("VERSION"),"."),error_code:-1}));let Q={};A.name==="RTCAIAnsExtension"&&(Q={overloadThreshold:yA("AINR_OVERLOAD_THRESHOLD"),enableCache:yA("AINR_ENABLE_DUMP"),urls:yA("AINR_URLS"),cacheTime:yA("AINR_CACHE_TIME"),dumpTime:yA("AINR_DUMP_TIME")}),Q=v0A(Q),await A.init(Q),this._ctx.extensionManager.register(A),this._addListenExtensionEvent(A),(I=this._localAudioTrack)===null||I===void 0||I.generatePreProcessingTrack(),(g=this._localVideoTrack)===null||g===void 0||g.generatePreProcessingTrack(),(C=this._localScreenAudioTrack)===null||C===void 0||C.generatePreProcessingTrack()}defaultTranscoding(){return JSON.parse(JSON.stringify(qo.getDefaultValue()))}async _updatePublish(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(this.logger.info("_updatePublish()","config: %o",A),A=p(p({},{mediaType:void 0,invokeByJoinRoom:!1,pubState:$C.PUB}),A),!this._ctx.visibility)throw new K(S.NO_PUBLISH_PERMISSION,"no publish permission");const g=await this._pubLock.lock();if(this._room&&this._ctx.signalingManager.isConnected())try{await this._room.publish(this._localVideoTrack,this._localAudioTrack,A.mediaType,A.pubState,A.invokeByJoinRoom)}catch(C){throw C instanceof K?(C.code===S.TOKEN_NO_PUBLISH_PERMISSION&&this._room.config.setTokenPublishPrivilegeExpired(!0),C):new K(S.UNEXPECTED_ERROR,"unexpected error",C)}finally{g()}else if(g(),I)throw new K(S.NOT_CONNECTED_YET,"not connected")}async startAudioPlaybackDeviceTest(A,I){return this.logger.print("startAudioPlaybackDeviceTest()","filePath: %o, indicationInterval: %o",A,I),EI(A,"filePath"),Tt(I,"indicationInterval"),await this._audioDeviceManager.startAudioPlaybackDeviceTest(A,I)}stopAudioPlaybackDeviceTest(){this.logger.info("stopAudioPlaybackDeviceTest()"),this._audioDeviceManager.stopAudioPlaybackDeviceTest()}async startAudioDeviceRecordTest(A,I){this.logger.print("startAudioDeviceRecordTest()","indicationInterval: %o",A),Tt(A,"indicationInterval"),await this._audioDeviceManager.startAudioDeviceRecordTest(A,I,this._localAudioVolume)}stopAudioDeviceRecordAndPlayTest(){this.logger.info("stopAudioDeviceRecordAndPlayTest()"),this._audioDeviceManager.stopAudioDeviceRecordAndPlayTest()}stopAudioDevicePlayTest(){this.logger.info("stopAudioDevicePlayTest()"),this._audioDeviceManager.stopAudioDevicePlayTest()}setRemoteUserPriority(A,I){var g;this.logger.print("setRemoteUserPriority()","userId: %o, priority: %o",A,I);try{XC(A),gI(I,"priority",[OP.HIGH,OP.MEDIUM,OP.LOW])}catch(C){return console.warn(C),!1}return this._ctx.userPriority.set(A,I),(g=this._room)===null||g===void 0||g.updateRemoteUserPriority(A),!0}async takeLocalSnapshot(A){this.logger.print("takeLocalSnapshot()","streamIndex: %o",A),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]);const I=A===W.STREAM_INDEX_MAIN?this.localVideoTrack:this.localScreenVideoTrack;if(!I)throw new K(S.INVOKED_BEFORE_CAPTURE,"capture first");return I.snapshot()}async takeRemoteSnapshot(A,I){var g;this.logger.print("takeRemoteSnapshot()","id: %o, streamIndex: %o",A,I),EI(A,"id"),gI(I,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]);const C=((g=this._room)===null||g===void 0||(g=g.remoteStreams.get(A))===null||g===void 0||(g=g.find(Q=>Q.isScreen===(I===W.STREAM_INDEX_SCREEN)))===null||g===void 0?void 0:g.videoTrack)||this._wtnStreamManager.__getPublicStreamTrack(A,"video");if(!C)throw new K(S.STREAM_NOT_EXIST,"stream not exist");return C.snapshot()}setSubscribeFallbackOption(A){this.logger.info("setSubscribeFallbackOption()","option: %o",A);try{gI(A,"option",[xP.DISABLE,xP.VIDEO_STREAM_LOW,xP.AUDIO_ONLY])}catch(I){return console.warn(I),!1}return!this._room&&(this._ctx.subscribeFallbackOption=A,!0)}getLocalStreamTrack(A,I){let g,C;if(A===W.STREAM_INDEX_MAIN?(g=I==="video"?this.localVideoTrack:this.localAudioTrack,C=()=>{var B;return(B=this._room)===null||B===void 0?void 0:B.localStream}):(g=I==="video"?this.localScreenVideoTrack:this.localScreenAudioTrack,C=()=>{var B;return(B=this._room)===null||B===void 0?void 0:B.localScreenStream}),!g)return;const Q=g instanceof Io&&g.mixedAudioTrack?g.mixedAudioTrack:g.preprocessingTrack;if(!Q)return;const i=C();return this._reportMsTrackEvent(Q,(i==null?void 0:i.stream.id)||"local"),Q}getRemoteStreamTrack(A,I,g){var C;let Q;const i=((C=this._room)===null||C===void 0?void 0:C.remoteStreams.get(A))||[];if(i==null||!i.length)return;let B;var E,e,t,o;if(I===W.STREAM_INDEX_MAIN?(B=i.find(v=>!v.isScreen),Q=g==="video"?(E=B)===null||E===void 0?void 0:E.videoTrack:(e=B)===null||e===void 0?void 0:e.audioTrack):(B=i.find(v=>v.isScreen),Q=g==="video"?(t=B)===null||t===void 0?void 0:t.videoTrack:(o=B)===null||o===void 0?void 0:o.audioTrack),!Q)return;const r=Q.preprocessingTrack;if(!r||!B)return;const{streamId:s}=B;return this._reportMsTrackEvent(r,s),r}getPublicStreamTrack(A,I){const g=this._wtnStreamManager.__getPublicStreamTrack(A,I),C=g==null?void 0:g.preprocessingTrack;if(C)return C?(this._reportMsTrackEvent(C,A),C):void 0}setRemoteStreamRenderSync(A){return!this._room&&(this._ctx.avSync=!!A,!0)}setJoinRoomParams(A){A&&(this._ctx.joinRoomParams=A)}async setAudioSelectionConfig(A){gI(A,"audioSelectionPriority",[qP.DEFAULT,qP.HIGH]),this._ctx.mediaParams||(this._ctx.mediaParams={}),this._ctx.mediaParams.audioSelectionConfig={isHighPriority:A===qP.HIGH},this._room&&await this._room.updateMediaParams(this._ctx.mediaParams)}setCaptureVolume(A,I){gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),I=Q9(I,"volume",0,400);var g,C,Q,i,B;A===W.STREAM_INDEX_SCREEN?((g=this._localScreenAudioTrack)===null||g===void 0||g.once("needReplaceTrack",()=>{var E;(E=this._room)===null||E===void 0||E.updatePubScreenTrack()}),(C=this._localScreenAudioTrack)===null||C===void 0||C.setVolume(I),this._localScreenAudioVolume=I):((Q=this._localAudioTrack)===null||Q===void 0||Q.once("needReplaceTrack",()=>{var E;(E=this._room)===null||E===void 0||E.updatePubTrack()}),(i=this._localAudioTrack)===null||i===void 0||i.setVolume(I),(B=this._audioDeviceManager.audioTrack)===null||B===void 0||B.setVolume(I),this._localAudioVolume=I)}setPlaybackVolume(A,I,g){var C,Q,i;if(XC(A),gI(I,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),g=Q9(g,"volume",0,400),(C=this._room)!==null&&C!==void 0&&C.config.isMultiChatMode())return void Ae("setPlaybackVolume is not supported in Conference mode");const B=I===W.STREAM_INDEX_SCREEN;B?this._remoteScreenAudioVolume.set(A,g):this._remoteAudioVolume.set(A,g);const E=(Q=this._room)===null||Q===void 0||(Q=Q.remoteStreams.get(A))===null||Q===void 0?void 0:Q.find(e=>e.isScreen===B);E==null||(i=E.audioTrack)===null||i===void 0||i.setVolume(g)}setPublicStreamVolume(A,I){this._wtnStreamManager.setWTNRemoteAudioPlaybackVolume(A,I)}async startForwardStreamToRooms(A){return A.forEach(I=>{Ul(I.roomId)}),this._assertNotInRoom(),await this._room.startForwardStream2Rooms(A)}async updateForwardStreamToRooms(A){return A.forEach(I=>{Ul(I.roomId)}),this._assertNotInRoom(),await this._room.updateForwardStream2Rooms(A)}async stopForwardStreamToRooms(){return this._assertNotInRoom(),await this._room.stopForwardStream2Rooms()}async pauseForwardStreamToAllRooms(){return this._assertNotInRoom(),await this._room.pauseForwardStream2AllRooms()}async resumeForwardStreamToAllRooms(){return this._assertNotInRoom(),await this._room.resumeForwardStream2AllRooms()}async ambulance(){const A=await LRA(this),I=JSON.stringify(A);return this.monitor.reportLongString("ambulance",I),A}async setEarMonitorMode(A,I){this.logger.info("setEarMonitorMode()","streamIndex: %s, position: %s",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),gI(I,"position",[GC.NONE,GC.AFTER_CAPTURE,GC.AFTER_PROCESS]),this._ctx.earMonitorSettings[A].position=I;const g=A===W.STREAM_INDEX_MAIN?this.localAudioTrack:A===W.STREAM_INDEX_SCREEN?this.localScreenAudioTrack:void 0;if(g)return I!==GC.NONE?g.play(I):g.stop();this.logger.warn("setEarMonitorMode()","local audio track not exist")}setEarMonitorVolume(A,I){this.logger.info("setEarMonitorVolume()","streamIndex: %s, volume: %s",A,I),gI(A,"streamIndex",[W.STREAM_INDEX_MAIN,W.STREAM_INDEX_SCREEN]),I=Q9(I,"volume",0,400),this._ctx.earMonitorSettings[A].volume=I;const g=A===W.STREAM_INDEX_MAIN?this.localAudioTrack:A===W.STREAM_INDEX_SCREEN?this.localScreenAudioTrack:void 0;if(g)return g.setPlaybackVolume(I);this.logger.warn("setEarMonitorVolume()","local audio track not exist")}setUserInfo(A,I){Ul(A),XC(I),this.monitor.set({room_id:A,user_id:I})}_reportMsTrackEvent(A,I){if(!A.hookStop){A.hookStop=!0;const g=A.stop;A.stop=()=>{rI(this.id,"stop",I,0,I),g.call(A)}}}async _updateScreenPublish(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.logger.info("_updateScreenPublish()"),A=p(p({},{mediaType:void 0,pubState:$C.PUB}),A),!this._ctx.visibility)throw new K(S.NO_PUBLISH_PERMISSION,"no publish permission");const I=await this._pubLock.lock();if(this._room&&this._ctx.signalingManager.isConnected())try{await this._room.publishScreen(this._localScreenVideoTrack,this._localScreenAudioTrack,A.mediaType,A.pubState)}catch(g){throw g instanceof K?g:new K(S.UNEXPECTED_ERROR,"unexpected error",g)}finally{I()}else I()}_updateAudioPlayerState(A){this.logger.info("_updateAudioPlayerState()");const{userId:I,isScreen:g,isPublic:C}=A;if(A.audioTrack&&A.attributes.audiostream&&A.subAudio){var Q,i,B;if(!A.audioTrack.havePlayer()){var E,e;const v=new pS(this.id,I,{muted:((E=this._config)===null||E===void 0?void 0:E.autoPlayPolicy)===Te.VIDEO_ONLY||((e=this._config)===null||e===void 0?void 0:e.autoPlayPolicy)===Te.PLAY_MANUALLY,isScreen:!C&&g});A.audioTrack.setPlayer(v),A.audioTrack.bindPlayerEvent(this._initPlayerEvents.bind(this));const n=this._audioDeviceManager.getSinkId();n&&A.audioTrack.setPlaybackDevice(n)}A.audioTrack.play();const s=C?(Q=this._ctx.publicAudioVolume.get(I))!==null&&Q!==void 0?Q:100:g?(i=this._remoteScreenAudioVolume.get(I))!==null&&i!==void 0?i:100:(B=this._remoteAudioVolume.get(I))!==null&&B!==void 0?B:100;if(A.audioTrack.setVolume(s),kQ&&l0){var t,o;const v=(t=(o=this._room)===null||o===void 0?void 0:o.remoteStreams)!==null&&t!==void 0?t:new Map;QRA(v)}}else{var r;(r=A.audioTrack)===null||r===void 0||r.stop()}}_updateVideoPlayerState(A){if(this.logger.info("_updateVideoPlayerState()"),A.videoTrack){const g=A.isPublic?this._wtnStreamManager._publicVideoPlayerConfig:this._remoteVideoPlayerConfig[A.isScreen?W.STREAM_INDEX_SCREEN:W.STREAM_INDEX_MAIN].get(A.userId);if(g)for(const[,C]of g){var I;A.videoTrack.setPlayer(this.id,C,(I=this._config)===null||I===void 0?void 0:I.autoPlayPolicy,this._initPlayerEvents.bind(this))}}}get _localVideoTrack(){return this._ctx.localVideoTrack}get _localAudioTrack(){return this._ctx.localAudioTrack}set _localVideoTrack(A){this._ctx.localVideoTrack=A}set _localAudioTrack(A){this._ctx.localAudioTrack=A}async _onAddStream(A){const I=A.stream,{localaudio:g,audiostream:C,localvideo:Q,videostream:i}=I.attributes;let B=GQ.NONE;C&&(B|=sA.AUDIO),i&&(B|=sA.VIDEO),B&&(await new Promise(E=>setTimeout(E)),I.isScreen?this.safeEmit(q.onUserPublishScreen,{userId:I.userId,mediaType:B}):(this.safeEmit(q.onUserPublishStream,{userId:I.userId,mediaType:B,videoStreamDescriptions:I.attributes.videoDescriptions}),this._handleAutoSubscribe(I,!0)),this.safeEmit("onAddStream",{userId:I.userId,mediaType:B,isScreen:!!I.isScreen}),I.isScreen||(g&&this.safeEmit(q.onUserStartAudioCapture,{userId:I.userId}),Q&&this.safeEmit(q.onUserStartVideoCapture,{userId:I.userId})))}_handleAutoSubscribe(A,I){var g,C;let Q=GQ.NONE;if((g=this._room)!==null&&g!==void 0&&g.config.isAutoSubscribeAudio&&(Q|=sA.AUDIO),(C=this._room)!==null&&C!==void 0&&C.config.isAutoSubscribeVideo&&(Q|=sA.VIDEO),Q){var i,B,E;I&&lg(Q)&&((B=A.observer)===null||B===void 0||B.setAutoSubscribeAudio(!0)),I&&vI(Q)&&((E=A.observer)===null||E===void 0||E.setAutoSubscribeVideo(!0)),(i=this._room)!==null&&i!==void 0&&i.config.tokenSubscribePrivilegeExpired?(lg(Q)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[A.streamId]=A.streamId),vI(Q)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[A.streamId]=A.streamId)):this._subscribe(!1,A.userId,Q)}}_onRemoveStream(A){var I;const g=A.stream,C=(I=URA[A.reason])!==null&&I!==void 0?I:GB.STREAM_REMOVE_REASON_OTHER,Q=g.isScreen?q.onUserUnpublishScreen:q.onUserUnpublishStream;let i=GQ.NONE;g.attributes.audiostream&&(i|=sA.AUDIO),g.attributes.videostream&&(i|=sA.VIDEO),i!==GQ.NONE&&(this.safeEmit(Q,{userId:g.userId,mediaType:i,reason:C}),this.safeEmit("onRemoveStream",{userId:g.userId,isScreen:g.isScreen})),delete this._pauseAllSubscribeState.resumeAudioStreamIds[g.streamId],delete this._pauseAllSubscribeState.resumeVideoStreamIds[g.streamId],typeof A.callback=="function"&&A.callback()}_onUserConnection(A){setTimeout(()=>this.safeEmit(q.onUserJoined,A))}_onUserLeave(A){this.safeEmit(q.onUserLeave,A)}_onRoomError(A){var I;this.safeEmit(q.onError,A),(I=this._room)===null||I===void 0||I.destroy(),this._room=void 0}_onNetworkQuality(){for(var A=arguments.length,I=new Array(A),g=0;g{var B;return(B=i.audioTrack)===null||B===void 0?void 0:B.stop()})}else A.state===CI.CONNECTION_STATE_CONNECTED&&this._rtmClient.setRTSMessageLimit(this._ctx.rtsLimiter.conf)}_stopAudioPropertiesReport(){this._audioPropertiesReportTimer!==null&&(clearInterval(this._audioPropertiesReportTimer),this._audioPropertiesReportTimer=null)}_onResubscribe(A){var I,g;A.stream&&((I=A.stream.videoTrack)===null||I===void 0||I.stopAll(),(g=A.stream.audioTrack)===null||g===void 0||g.stop(),this._updateAudioPlayerState(A.stream),this._updateVideoPlayerState(A.stream))}_onSubscribePushTrack(A){A.stream&&this._updateAudioPlayerState(A.stream)}_onRemovePushTrack(A){A.stream&&this._updateAudioPlayerState(A.stream)}_onUserPublishStateChange(A){let{userId:I,isScreen:g,mediaType:C,pubState:Q,remoteStream:i}=A;const B={userId:I,mediaType:C};C&sA.AUDIO&&setTimeout(()=>{this._updateAudioPlayerState(i)}),g?Q===$C.PUB?this.safeEmit(q.onUserPublishScreen,B):this.safeEmit(q.onUserUnpublishScreen,p(p({},B),{},{reason:GB.STREAM_REMOVE_REASON_UNPUBLISH})):Q===$C.PUB?(B.videoStreamDescriptions=i.attributes.videoDescriptions,this.safeEmit(q.onUserPublishStream,B),this._handleAutoSubscribe(i,!0)):this.safeEmit(q.onUserUnpublishStream,p(p({},B),{},{reason:GB.STREAM_REMOVE_REASON_UNPUBLISH}))}_onCustomMessage(A){const{message:I}=A;A.binary?this.safeEmit(q.onRoomBinaryMessageReceived,{userId:A.clientId,message:I}):this.safeEmit(q.onRoomMessageReceived,{userId:A.clientId,message:I})}_onUserMessageReceived(A){this._messageStatisticsObserver.recvP2PMessage(A.userId),this.safeEmit(q.onUserMessageReceived,A)}_onUserBinaryMessageReceived(A){this._messageStatisticsObserver.recvP2PMessage(A.userId),this.safeEmit(q.onUserBinaryMessageReceived,A)}_onLiveTranscodingResult(A){this.safeEmit(q.onLiveTranscodingResult,A)}_onStreamMixingEvent(A){this.safeEmit(q.onStreamMixingEvent,A)}_onUserTokenWillExpire(){this.safeEmit(q.onTokenWillExpire)}_onUserTokenPublishPrivilegeWillExpire(){this.safeEmit(q.onTokenPublishPrivilegeWillExpire)}async _onUserTokenPublishPrivilegeDidExpired(){var A,I,g;await((A=this._room)===null||A===void 0?void 0:A.unpublish()),await((I=this._room)===null||I===void 0?void 0:I.unpublishScreen()),(g=this._room)===null||g===void 0||g.config.setTokenPublishPrivilegeExpired(!0),this.safeEmit(q.onTokenPublishPrivilegeDidExpired,{errorCode:S.TOKEN_NO_PUBLISH_PERMISSION,message:"Token no longer has publish privilege"})}_onUserTokenSubscribePrivilegeWillExpire(){this.safeEmit(q.onTokenSubscribePrivilegeWillExpire)}async _onUserTokenSubscribePrivilegeDidExpired(){this._handleLoseSubscribePrivilege(),this.safeEmit(q.onTokenSubscribePrivilegeDidExpired,{errorCode:S.TOKEN_NO_SUBSCRIBE_PERMISSION,message:"Token no longer has subscribe privilege"})}async _unSubscribeAllRemoteStreams(){return this._room?this._pauseAllRemoteStreams(sA.AUDIO_AND_VIDEO):Promise.resolve()}_onPushPublicStreamResult(A){this.safeEmit(q.onPushPublicStreamResult,A)}_handleRTMClient(A){A.on("onUserMessageReceivedOutsideRoom",I=>{this._messageStatisticsObserver.recvP2POutRoomMessage(I.userId),this.safeEmit(q.onUserMessageReceivedOutsideRoom,I)}),A.on("onUserBinaryMessageReceivedOutsideRoom",I=>{this._messageStatisticsObserver.recvP2POutRoomMessage(I.userId),this.safeEmit(q.onUserBinaryMessageReceivedOutsideRoom,I)}),A.on("onUserDisconnection",()=>{this.safeEmit(q.onError,{errorCode:S.RTM_DUPLICATE_LOGIN})}),A.on("onRTMTokenError",()=>{this.safeEmit(q.onError,{errorCode:S.RTM_TOKEN_ERROR})}),A.on("onServerParamsSetResult",I=>{this.safeEmit(q.onServerParamsSetResult,I==null?void 0:I.code)})}getSubLock(A,I){const g=A?this._subScreenLocks:this._subLocks;let C=g.get(I);return C||(C=new Wi("sub_".concat(A?1:0,"_").concat(I)),g.set(I,C)),C}get localAudioTrack(){return this._localAudioTrack}get localVideoTrack(){return this._localVideoTrack}get localScreenAudioTrack(){return this._localScreenAudioTrack}get localScreenVideoTrack(){return this._localScreenVideoTrack}get remoteStreams(){var A;const I=[];return(A=this._room)!==null&&A!==void 0&&A.remoteStreams&&this._room.remoteStreams.forEach(g=>{Array.isArray(g)&&g.forEach(C=>{I.push({userId:C.userId,isScreen:C.isScreen,hasVideo:C.hasVideo,hasAudio:C.hasAudio,videoStreamDescriptions:C.attributes.videoDescriptions})})}),I}get iceState(){var A;return(A=this._ctx.peerConnection)===null||A===void 0?void 0:A.getIceConnectionState()}get remoteUsers(){var A;const I=[];return(A=this._room)!==null&&A!==void 0&&A.remoteUsers&&this._room.remoteUsers.forEach(g=>{I.push({userId:g.userId})}),I}get multiChatMode(){var A;return!((A=this._room)===null||A===void 0||!A.config.isMultiChatMode())}get checkMediaType(){return this._checkMediaType}get assertNotInRoom(){return this._assertNotInRoom}get peerConnection(){var A;return(A=this._ctx.peerConnection)===null||A===void 0?void 0:A.getOriginRTCPeerConnection()}_handleAudioDeviceManager(){this._audioDeviceManager.on("onAudioPlaybackDeviceTestVolume",A=>{this.safeEmit(q.onAudioPlaybackDeviceTestVolume,A)})}_assertNotInRoom(){if(!this._room||!this._ctx.signalingManager.isConnected())throw new K(S.NOT_CONNECTED_YET,"server not connected")}_checkMediaType(A){gI(A,"mediaType",[sA.AUDIO,sA.VIDEO,sA.AUDIO_AND_VIDEO])}_getUserId(){var A;return((A=this._room)===null||A===void 0?void 0:A.config.userInfo.userId)||"local_user"}async _switchTrack(A){var I;this._initLocalTrackEvents(A),this._localVideoTrack=A,this._localVideoPlayerConfig[W.STREAM_INDEX_MAIN].forEach(g=>{var C;A.setPlayer(g,this._mirrorType,(C=this._config)===null||C===void 0?void 0:C.autoPlayPolicy,this._initPlayerEvents.bind(this))}),(I=this._room)!==null&&I!==void 0&&(I=I.localStream)!==null&&I!==void 0&&I.pubVideo&&await this._updatePublish(),this._wtnStreamManager._updatePushTrack()}async _shouldUpdateAudioConf(A){var I,g;const C=await((I=this._room)===null||I===void 0?void 0:I.hasPublished())||((g=this._room)===null||g===void 0||(g=g.localStream)===null||g===void 0?void 0:g.pubAudio)||this._localAudioTrack&&this._localAudioTrack.sourceType===DI.INTERNAL;if(C){const Q="engine.".concat(A," should be called before publishing or capturing.");console.warn("[RTC WebSDK]: ".concat(Q)),rI(this.id,A,Q)}return!C}_getRemoteVideoPlayerConfig(A,I,g){var C;return(C=this._remoteVideoPlayerConfig[A].get(I))===null||C===void 0?void 0:C.get(g)}_setRemoteVideoPlayerConfig(A,I,g,C){const Q=this._remoteVideoPlayerConfig[A].get(I)||new Map;Q.set(g,C),this._remoteVideoPlayerConfig[A].set(I,Q)}getRemoteVideoStats(){var A;const I=(A=this._room)===null||A===void 0?void 0:A.remoteStreams;if(!I||I.size===0)return{};const g={};return I.forEach((C,Q)=>{var i,B,E;let e,t;(i=C[0])!==null&&i!==void 0&&i.isScreen?(t=C[0],e=C[1]):(t=C[1],e=C[0]);const o={mainVideoStats:xC(((B=e)===null||B===void 0?void 0:B.getRemoteStreamStats().videoStats)||{}),screenVideoStats:xC(((E=t)===null||E===void 0?void 0:E.getRemoteStreamStats().videoStats)||{})};g[Q]=o}),g}getRemoteAudioStats(){var A;const I=(A=this._room)===null||A===void 0?void 0:A.remoteStreams;if(!I||I.size===0)return{};const g={};return I.forEach((C,Q)=>{var i,B,E;let e,t;(i=C[0])!==null&&i!==void 0&&i.isScreen?(t=C[0],e=C[1]):(t=C[1],e=C[0]);const o={mainAudioStats:xC(((B=e)===null||B===void 0?void 0:B.getRemoteStreamStats().audioStats)||{}),screenAudioStats:xC(((E=t)===null||E===void 0?void 0:E.getRemoteStreamStats().audioStats)||{})};g[Q]=o}),g}getLocalVideoStats(){var A,I;return{mainVideoStats:xC(((A=this._room)===null||A===void 0||(A=A.localStream)===null||A===void 0?void 0:A.getLocalStreamStats().videoStats)||{}),screenVideoStats:xC(((I=this._room)===null||I===void 0||(I=I.localScreenStream)===null||I===void 0?void 0:I.getLocalStreamStats().videoStats)||{})}}getLocalAudioStats(){var A,I;return{mainAudioStats:xC(((A=this._room)===null||A===void 0||(A=A.localStream)===null||A===void 0?void 0:A.getLocalStreamStats().audioStats)||{}),screenAudioStats:xC(((I=this._room)===null||I===void 0||(I=I.localScreenStream)===null||I===void 0?void 0:I.getLocalStreamStats().audioStats)||{})}}getPublicVideoStats(){const A=this._wtnStreamManager.__getRemoteStreams();if(!A||A.size===0)return{};const I={};return A.forEach((g,C)=>{const Q=xC(g.getRemoteStreamStats().videoStats||{});delete Q.isScreen,I[C]=Q}),I}getPublicAudioStats(){const A=this._wtnStreamManager.__getRemoteStreams();if(!A||A.size===0)return{};const I={};return A.forEach((g,C)=>{const Q=xC(g.getRemoteStreamStats().audioStats||{});delete Q.isScreen,I[C]=Q}),I}},l(Wb,"hasReportNativeDetector",!1),Wb);let _=VG;$([f()],_.prototype,"updateToken"),$([f(),it("video")],_.prototype,"setVideoCaptureDevice"),$([f(),it("audio")],_.prototype,"setAudioCaptureDevice"),$([f()],_.prototype,"connect"),$([r0A,f()],_.prototype,"joinRoom"),$([f()],_.prototype,"leaveRoom"),$([f()],_.prototype,"destroy"),$([f(),FI],_.prototype,"publishStream"),$([f(),FI],_.prototype,"unpublishStream"),$([f(),FI],_.prototype,"publishScreen"),$([f(),FI],_.prototype,"unpublishScreen"),$([f(),FI],_.prototype,"subscribeStream"),$([Q7],_.prototype,"_subscribe"),$([f(),FI],_.prototype,"unsubscribeStream"),$([f(),FI],_.prototype,"subscribeScreen"),$([f(),FI],_.prototype,"unsubscribeScreen"),$([Q7],_.prototype,"_unsubscribe"),$([f(),i7],_.prototype,"setRemoteVideoConfig"),$([f()],_.prototype,"setRemoteSimulcastStreamType"),$([f(),it("video")],_.prototype,"startVideoCapture"),$([f(),it("video")],_.prototype,"stopVideoCapture"),$([f(),it("audio")],_.prototype,"startAudioCapture"),$([f(),it("audio")],_.prototype,"stopAudioCapture"),$([f(),it("all")],_.prototype,"startAudioAndVideoCapture"),$([f()],_.prototype,"startVideoAndAudioCapture"),$([f()],_.prototype,"getAudioMixingManager"),$([f()],_.prototype,"getWTNStreamManager"),$([f()],_.prototype,"getCallId"),$([f(),B7],_.prototype,"startScreenCapture"),$([f(),B7],_.prototype,"stopScreenCapture"),$([f()],_.prototype,"setLocalVideoPlayer"),$([f(),FI],_.prototype,"startLiveTranscoding"),$([f(),FI],_.prototype,"updateLiveTranscoding"),$([f(),FI],_.prototype,"stopLiveTranscoding"),$([f(),FI],_.prototype,"startSubtitle"),$([f(),FI],_.prototype,"updateSubtitleConfig"),$([f(),FI],_.prototype,"stopSubtitle"),$([f()],_.prototype,"setBusinessId"),$([f(),FI],_.prototype,"setUserVisibility"),$([f()],_.prototype,"setRemoteVideoPlayer"),$([f()],_.prototype,"setLocalVideoMirrorType"),$([f()],_.prototype,"setRemoteVideoMirrorType"),$([f()],_.prototype,"setAudioPlaybackDevice"),$([f()],_.prototype,"play"),$([f()],_.prototype,"stop"),$([f()],_.prototype,"getAudioVolume"),$([f()],_.prototype,"setAudioFrameCallback"),$([f(),FI],_.prototype,"pauseAllSubscribedStream"),$([f(),FI],_.prototype,"resumeAllSubscribedStream"),$([f()],_.prototype,"sendUserMessage"),$([f()],_.prototype,"sendUserBinaryMessage"),$([f()],_.prototype,"sendRoomMessage"),$([f()],_.prototype,"sendRoomBinaryMessage"),$([f()],_.prototype,"setAudioCaptureConfig"),$([jk("4.51"),f()],_.prototype,"setVideoCaptureConfig"),$([f()],_.prototype,"enableSimulcastMode"),$([f()],_.prototype,"setLocalSimulcastMode"),$([f()],_.prototype,"setVideoEncoderConfig"),$([f()],_.prototype,"setScreenEncoderConfig"),$([f(),FI],_.prototype,"sendSEIMessage"),$([jk("4.42"),f()],_.prototype,"setAudioVolumeIndicationInterval"),$([f()],_.prototype,"enableAudioPropertiesReport"),$([f()],_.prototype,"setVideoSourceType"),$([f()],_.prototype,"setExternalVideoTrack"),$([f()],_.prototype,"setAudioSourceType"),$([f()],_.prototype,"setExternalAudioTrack"),$([f()],_.prototype,"login"),$([f()],_.prototype,"logout"),$([f()],_.prototype,"updateLoginToken"),$([f()],_.prototype,"getPeerOnlineStatus"),$([f()],_.prototype,"sendUserMessageOutsideRoom"),$([f()],_.prototype,"sendUserBinaryMessageOutsideRoom"),$([f()],_.prototype,"setServerParams"),$([f()],_.prototype,"sendServerMessage"),$([f()],_.prototype,"sendServerBinaryMessage"),$([f()],_.prototype,"startCloudProxy"),$([f()],_.prototype,"stopCloudProxy"),$([f()],_.prototype,"startPushPublicStream"),$([f()],_.prototype,"updatePublicStreamParam"),$([f()],_.prototype,"stopPushPublicStream"),$([f(["streamId"])],_.prototype,"startPlayPublicStream"),$([f(["streamId"])],_.prototype,"stopPlayPublicStream"),$([f()],_.prototype,"setAudioProfile"),$([f()],_.prototype,"setAudioEncodeMaxBitrate"),$([f()],_.prototype,"setPublicStreamVideoPlayer"),$([f()],_.prototype,"setDummyCaptureImagePath"),$([f()],_.prototype,"registerExtension"),$([f()],_.prototype,"startAudioPlaybackDeviceTest"),$([f()],_.prototype,"stopAudioPlaybackDeviceTest"),$([f()],_.prototype,"startAudioDeviceRecordTest"),$([f()],_.prototype,"stopAudioDeviceRecordAndPlayTest"),$([f()],_.prototype,"stopAudioDevicePlayTest"),$([f(),i7],_.prototype,"setRemoteUserPriority"),$([f()],_.prototype,"takeLocalSnapshot"),$([f()],_.prototype,"takeRemoteSnapshot"),$([f()],_.prototype,"setSubscribeFallbackOption"),$([f()],_.prototype,"getLocalStreamTrack"),$([f()],_.prototype,"getRemoteStreamTrack"),$([f()],_.prototype,"getPublicStreamTrack"),$([f()],_.prototype,"setRemoteStreamRenderSync"),$([f()],_.prototype,"setJoinRoomParams"),$([f(),FI],_.prototype,"setAudioSelectionConfig"),$([f(),FI],_.prototype,"startForwardStreamToRooms"),$([f(),FI],_.prototype,"updateForwardStreamToRooms"),$([f(),FI],_.prototype,"stopForwardStreamToRooms"),$([f(),FI],_.prototype,"pauseForwardStreamToAllRooms"),$([f(),FI],_.prototype,"resumeForwardStreamToAllRooms"),$([f()],_.prototype,"setEarMonitorMode"),$([f([],{debounce:2e3,debounceTag:function(A){return"".concat(A)}})],_.prototype,"setEarMonitorVolume"),$([f()],_.prototype,"setUserInfo");const URA={"client unpublished":GB.STREAM_REMOVE_REASON_UNPUBLISH,"publish failed":GB.STREAM_REMOVE_REASON_PUBLISH_FAILED,"stream removed":GB.STREAM_REMOVE_REASON_KEEP_LIVE_FAILED,"client disconnected":GB.STREAM_REMOVE_REASON_CLIENT_DISCONNECTED,"client republish":GB.STREAM_REMOVE_REASON_REPUBLISH,"token publish privilege expired":GB.STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED};function Q7(A,I,g){const C=g.value;return g.value=async function(){for(var Q=arguments.length,i=new Array(Q),B=0;Bo())}},C}}function B7(A,I,g){const C=g.value;return g.value=async function(){const Q=await this._screenCaptureLock.lock();try{for(var i=arguments.length,B=new Array(i),E=0;E{for(var Q,i=YRA(I,g),B=A.length-1;B>=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&kRA(I,g,i),i};class ur extends _{constructor(I,g,C){super(I,g,C),l(this,"singleStreamRenderMode",!1),this.id=g,this.logger=new SA("BLWEngine",0,g),Qj([{width:192,height:108,frameRate:15,maxKbps:100},{width:320,height:180,frameRate:15,maxKbps:140},{width:640,height:360,frameRate:15,maxKbps:400},{width:1280,height:720,frameRate:15,maxKbps:1e3},{width:1920,height:1080,frameRate:15,maxKbps:2e3}]),this._handleEngineEvents()}async subscribeStream(I,g){return this.logger.print("subscribeStream()","userId: %o, mediaType: %o",I,g),this.singleStreamRenderMode&&vI(g)&&super.subscribeScreen(I,sA.VIDEO).catch(C=>{this.logger.error("singleStreamRenderMode subscribeScreen()",C)}),super.subscribeStream(I,g)}async unsubscribeStream(I,g){return this.logger.print("unsubscribeStream()","userId: %o, mediaType: %o",I,g),this.singleStreamRenderMode&&vI(g)&&super.unsubscribeScreen(I,sA.VIDEO).catch(C=>{this.logger.error("singleStreamRenderMode unsubscribeScreen()",C)}),super.unsubscribeStream(I,g)}setRemoteScreenVideoStreamIndex(I){return this.logger.print("setRemoteScreenVideoStreamIndex()","streamIndex: %o",I),!this._room&&(this.singleStreamRenderMode=I===W.STREAM_INDEX_MAIN,!0)}setRemoteVideoPlayer(I,g){if(this.logger.print("setRemoteVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",I,g),g==null||delete g.playerId,!this.singleStreamRenderMode||I!==W.STREAM_INDEX_SCREEN)return super.setRemoteVideoPlayer(I,g)}destroy(){this.singleStreamRenderMode=!1,super.destroy()}_updateVideoPlayerState(I){var g,C,Q,i;if(!this.singleStreamRenderMode)return super._updateVideoPlayerState(I);const{userId:B}=I,E=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(B);let e,t;Array.isArray(E)&&E.forEach(d=>{d.isScreen?e=d:t=d});let o=(C=t)===null||C===void 0||(C=C.videoTrack)===null||C===void 0?void 0:C.dangerousGetPlayer(ei);if(!o){var r;const d=(r=this._remoteVideoPlayerConfig[W.STREAM_INDEX_MAIN].get(B))===null||r===void 0?void 0:r.get(ei);if(!d)return;var s,v,n;(s=t)===null||s===void 0||(s=s.videoTrack)===null||s===void 0||s.setPlayer(this.id,d,(v=this._config)===null||v===void 0?void 0:v.autoPlayPolicy,this._initPlayerEvents.bind(this)),o=(n=t)===null||n===void 0||(n=n.videoTrack)===null||n===void 0?void 0:n.dangerousGetPlayer(ei)}var a,c,P;if(!I.isScreen&&(Q=e)!==null&&Q!==void 0&&Q.videoTrack&&e.videoHasPublish)return this.logger.print("_updateVideoPlayerState","prevent play main stream"),void((a=o)===null||a===void 0||a.playVideo(e.videoTrack));I.videoTrack?((c=this._config)===null||c===void 0?void 0:c.autoPlayPolicy)!==Te.PLAY_MANUALLY&&((P=o)===null||P===void 0||P.playVideo(I.videoTrack)):(i=o)!==null&&i!==void 0&&i.played&&o.stop()}_handleEngineEvents(){this.on(q.onUserPublishScreen,I=>{if(this.singleStreamRenderMode&&vI(I.mediaType)){var g,C;const Q=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(I.userId),i=Q==null?void 0:Q.find(E=>!E.isScreen),B=Q==null?void 0:Q.find(E=>E.isScreen);B!=null&&B.hasSubscribed?(this.logger.info("onUserPublishScreen","singleStreamRenderMode screen hasSubscribed"),this._updateVideoPlayerState(B)):((C=this._room)!==null&&C!==void 0&&C.config.isAutoSubscribeVideo||i!=null&&i.hasSubscribed&&vI(i.subMediaType))&&(this.logger.info("onUserPublishScreen","singleStreamRenderMode subscribeScreen"),this.subscribeScreen(I.userId,sA.VIDEO))}}),this.on(q.onUserUnpublishScreen,I=>{if(this.singleStreamRenderMode&&vI(I.mediaType)){var g;const C=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(I.userId),Q=C==null?void 0:C.find(i=>!i.isScreen);Q&&setTimeout(()=>{this._updateVideoPlayerState(Q)})}})}}ga([f()],ur.prototype,"subscribeStream"),ga([f()],ur.prototype,"unsubscribeStream"),ga([f()],ur.prototype,"setRemoteScreenVideoStreamIndex"),ga([f()],ur.prototype,"setRemoteVideoPlayer"),ga([f()],ur.prototype,"destroy");const VS=new SA("VERTC",0);ys.storeKey="".concat(Date.now(),"-").concat(oI.getDeviceId()),$a({rtc_sdk_version:fA.VERSION,device_id:oI.getDeviceId(),log_cache_key:ys.storeKey}),Xf(fA.LOG_SERVER_URL);let T5=1;const NRA=(A,I)=>{VS.info("createEngine","Invoke VERTC.createEngine"),EI(A,"appId");const g=(T5++).toString();return xf(g,{rtc_app_id:A,auto_play_policy:I==null?void 0:I.autoPlayPolicy}),new _(A,g,I)},ZRA=(A,I)=>{VS.print("createBLWEngine","Invoke VERTC.createBLWEngine"),EI(A,"appId");const g=(T5++).toString();return xf(g,{rtc_app_id:A,auto_play_policy:I==null?void 0:I.autoPlayPolicy}),new ur(A,g,I)},KRA=A=>{if(VS.info("destroyEngine","Invoke VERTC.destroyEngine"),!(A instanceof _))throw new K(S.INVALID_ENGINE,"Invalid engine object");A.destroy(),n9A(A.monitor)},WRA=async()=>oC.enumerateDevices(),JRA=async function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{video:!0,audio:!0};const{video:I,audio:g}=A,C={video:!1,audio:!1},Q=[];return I&&Q.push(oC.getPermissions({video:!0,force:!0}).then(i=>{C.video=i.video,i.video||(C.videoExceptionError=i.reason)})),g&&Q.push(oC.getPermissions({audio:!0,force:!0}).then(i=>{C.audio=i.audio,i.audio||(C.audioExceptionError=i.reason)})),await Promise.allSettled(Q),C},VRA=async()=>oC.enumerateAudioCaptureDevices(),zRA=async()=>oC.enumerateVideoCaptureDevices(),MRA=async()=>oC.enumerateAudioPlaybackDevices(),fRA=()=>fA.VERSION,jRA=()=>PdA(),XRA=()=>ddA(),HRA=A=>{let{logLevel:I,LogfileSize:g}=A;I&&(ys.logLevel=I),g&&(ys.LogfileSize=g)},xRA=A=>{ys.download(A)};function Jb(){for(var A=arguments.length,I=new Array(A),g=0;gC instanceof _?"[ENGINE]":C))}function VC(A,I){return function(){Hf(I,0,Jb(...arguments));const g=A(...arguments);return typeof(g==null?void 0:g.then)=="function"?g.then(C=>(nD(I,0,Jb(C)),C)).catch(C=>{throw nD(I,C.code,C.message),C}):(nD(I,0,Jb(g)),g)}}class ORA{constructor(){l(this,"getSdkVersion",VC(fRA,"getSdkVersion")),l(this,"createEngine",VC(NRA,"createEngine")),l(this,"createBLWEngine",VC(ZRA,"createBLWEngine")),l(this,"destroyEngine",VC(KRA,"destroyEngine")),l(this,"enumerateDevices",VC(WRA,"enumerateDevices")),l(this,"enableDevices",VC(JRA,"enableDevices")),l(this,"enumerateAudioCaptureDevices",VC(VRA,"enumerateAudioCaptureDevices")),l(this,"enumerateVideoCaptureDevices",VC(zRA,"enumerateVideoCaptureDevices")),l(this,"enumerateAudioPlaybackDevices",VC(MRA,"enumerateAudioPlaybackDevices")),l(this,"getParameter",yA),l(this,"setParameter",DQ),l(this,"isSupported",VC(jRA,"isSupported")),l(this,"getSupportedCodecs",VC(XRA,"getSupportedCodecs")),l(this,"getElectronScreenSources",VC(pX,"getElectronScreenSources")),l(this,"events",q),l(this,"ErrorCode",S),l(this,"platform","VolcEngine"),l(this,"commitInfo","HEAD<3383712*>"),l(this,"downloadLog",VC(xRA,"downloadLog")),l(this,"setLogConfig",VC(HRA,"setLogConfig"))}}var kI=new ORA,_l=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function KA(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var Ca=function(A){return A&&A.Math===Math&&A},wI=Ca(typeof globalThis=="object"&&globalThis)||Ca(typeof window=="object"&&window)||Ca(typeof self=="object"&&self)||Ca(typeof _l=="object"&&_l)||Ca(typeof _l=="object"&&_l)||function(){return this}()||Function("return this")(),_A=function(A){try{return!!A()}catch{return!0}},qRA=_A,wc=!qRA(function(){var A=(function(){}).bind();return typeof A!="function"||A.hasOwnProperty("prototype")}),_RA=wc,p5=Function.prototype,E7=p5.apply,e7=p5.call,ov=typeof Reflect=="object"&&Reflect.apply||(_RA?e7.bind(E7):function(){return e7.apply(E7,arguments)}),F5=wc,U5=Function.prototype,zG=U5.call,$RA=F5&&U5.bind.bind(zG,zG),BI=F5?$RA:function(A){return function(){return zG.apply(A,arguments)}},k5=BI,ALA=k5({}.toString),ILA=k5("".slice),wE=function(A){return ILA(ALA(A),8,-1)},gLA=wE,CLA=BI,K0=function(A){if(gLA(A)==="Function")return CLA(A)},Vb=typeof document=="object"&&document.all,xI=Vb===void 0&&Vb!==void 0?function(A){return typeof A=="function"||A===Vb}:function(A){return typeof A=="function"},rv={},QLA=_A,OI=!QLA(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),iLA=wc,$l=Function.prototype.call,ig=iLA?$l.bind($l):function(){return $l.apply($l,arguments)},Ch={},Y5={}.propertyIsEnumerable,N5=Object.getOwnPropertyDescriptor,BLA=N5&&!Y5.call({1:2},1);Ch.f=BLA?function(A){var I=N5(this,A);return!!I&&I.enumerable}:Y5;var NE,l9,Me=function(A,I){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:I}},ELA=BI,eLA=_A,tLA=wE,zb=Object,oLA=ELA("".split),zS=eLA(function(){return!zb("z").propertyIsEnumerable(0)})?function(A){return tLA(A)==="String"?oLA(A,""):zb(A)}:zb,sv=function(A){return A==null},rLA=sv,sLA=TypeError,ho=function(A){if(rLA(A))throw new sLA("Can't call method on "+A);return A},vLA=zS,aLA=ho,JB=function(A){return vLA(aLA(A))},nLA=xI,yg=function(A){return typeof A=="object"?A!==null:nLA(A)},sg={},Mb=sg,fb=wI,cLA=xI,t7=function(A){return cLA(A)?A:void 0},Lg=function(A,I){return arguments.length<2?t7(Mb[A])||t7(fb[A]):Mb[A]&&Mb[A][I]||fb[A]&&fb[A][I]},lLA=BI,WQ=lLA({}.isPrototypeOf),PLA=wI,o7=PLA.navigator,r7=o7&&o7.userAgent,Gc=r7?String(r7):"",Z5=wI,jb=Gc,s7=Z5.process,v7=Z5.Deno,a7=s7&&s7.versions||v7&&v7.version,n7=a7&&a7.v8;n7&&(l9=(NE=n7.split("."))[0]>0&&NE[0]<4?1:+(NE[0]+NE[1])),!l9&&jb&&(!(NE=jb.match(/Edge\/(\d+)/))||NE[1]>=74)&&(NE=jb.match(/Chrome\/(\d+)/))&&(l9=+NE[1]);var Qh=l9,c7=Qh,dLA=_A,hLA=wI,uLA=hLA.String,vv=!!Object.getOwnPropertySymbols&&!dLA(function(){var A=Symbol("symbol detection");return!uLA(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&c7&&c7<41}),DLA=vv,K5=DLA&&!Symbol.sham&&typeof Symbol.iterator=="symbol",bLA=Lg,yLA=xI,mLA=WQ,wLA=K5,GLA=Object,Rc=wLA?function(A){return typeof A=="symbol"}:function(A){var I=bLA("Symbol");return yLA(I)&&mLA(I.prototype,GLA(A))},RLA=String,av=function(A){try{return RLA(A)}catch{return"Object"}},LLA=xI,SLA=av,TLA=TypeError,Kg=function(A){if(LLA(A))return A;throw new TLA(SLA(A)+" is not a function")},pLA=Kg,FLA=sv,MS=function(A,I){var g=A[I];return FLA(g)?void 0:pLA(g)},Xb=ig,Hb=xI,xb=yg,ULA=TypeError,kLA=function(A,I){var g,C;if(I==="string"&&Hb(g=A.toString)&&!xb(C=Xb(g,A))||Hb(g=A.valueOf)&&!xb(C=Xb(g,A))||I!=="string"&&Hb(g=A.toString)&&!xb(C=Xb(g,A)))return C;throw new ULA("Can't convert object to primitive value")},W5={exports:{}},fS=!0,l7=wI,YLA=Object.defineProperty,NLA=function(A,I){try{YLA(l7,A,{value:I,configurable:!0,writable:!0})}catch{l7[A]=I}return I},ZLA=wI,KLA=NLA,P7="__core-js_shared__",d7=W5.exports=ZLA[P7]||KLA(P7,{});(d7.versions||(d7.versions=[])).push({version:"3.39.0",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"});var jS=W5.exports,h7=jS,nv=function(A,I){return h7[A]||(h7[A]=I||{})},WLA=ho,JLA=Object,Ri=function(A){return JLA(WLA(A))},VLA=BI,zLA=Ri,MLA=VLA({}.hasOwnProperty),Sg=Object.hasOwn||function(A,I){return MLA(zLA(A),I)},fLA=BI,jLA=0,XLA=Math.random(),HLA=fLA(1 .toString),ih=function(A){return"Symbol("+(A===void 0?"":A)+")_"+HLA(++jLA+XLA,36)},xLA=wI,OLA=nv,u7=Sg,qLA=ih,_LA=vv,$LA=K5,jr=xLA.Symbol,Ob=OLA("wks"),ASA=$LA?jr.for||jr:jr&&jr.withoutSetter||qLA,WI=function(A){return u7(Ob,A)||(Ob[A]=_LA&&u7(jr,A)?jr[A]:ASA("Symbol."+A)),Ob[A]},ISA=ig,D7=yg,b7=Rc,gSA=MS,CSA=kLA,QSA=WI,iSA=TypeError,BSA=QSA("toPrimitive"),J5=function(A,I){if(!D7(A)||b7(A))return A;var g,C=gSA(A,BSA);if(C){if(I===void 0&&(I="default"),g=ISA(C,A,I),!D7(g)||b7(g))return g;throw new iSA("Can't convert object to primitive value")}return I===void 0&&(I="number"),CSA(A,I)},ESA=J5,eSA=Rc,XS=function(A){var I=ESA(A,"string");return eSA(I)?I:I+""},tSA=wI,y7=yg,MG=tSA.document,oSA=y7(MG)&&y7(MG.createElement),HS=function(A){return oSA?MG.createElement(A):{}},rSA=OI,sSA=_A,vSA=HS,V5=!rSA&&!sSA(function(){return Object.defineProperty(vSA("div"),"a",{get:function(){return 7}}).a!==7}),aSA=OI,nSA=ig,cSA=Ch,lSA=Me,PSA=JB,dSA=XS,hSA=Sg,uSA=V5,m7=Object.getOwnPropertyDescriptor;rv.f=aSA?m7:function(A,I){if(A=PSA(A),I=dSA(I),uSA)try{return m7(A,I)}catch{}if(hSA(A,I))return lSA(!nSA(cSA.f,A,I),A[I])};var DSA=_A,bSA=xI,ySA=/#|\.prototype\./,Lc=function(A,I){var g=wSA[mSA(A)];return g===RSA||g!==GSA&&(bSA(I)?DSA(I):!!I)},mSA=Lc.normalize=function(A){return String(A).replace(ySA,".").toLowerCase()},wSA=Lc.data={},GSA=Lc.NATIVE="N",RSA=Lc.POLYFILL="P",z5=Lc,LSA=Kg,SSA=wc,TSA=K0(K0.bind),AC=function(A,I){return LSA(A),I===void 0?A:SSA?TSA(A,I):function(){return A.apply(I,arguments)}},sQ={},pSA=OI,FSA=_A,M5=pSA&&FSA(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),USA=yg,kSA=String,YSA=TypeError,aC=function(A){if(USA(A))return A;throw new YSA(kSA(A)+" is not an object")},NSA=OI,ZSA=V5,KSA=M5,AP=aC,w7=XS,WSA=TypeError,qb=Object.defineProperty,JSA=Object.getOwnPropertyDescriptor,_b="enumerable",$b="configurable",Ay="writable";sQ.f=NSA?KSA?function(A,I,g){if(AP(A),I=w7(I),AP(g),typeof A=="function"&&I==="prototype"&&"value"in g&&Ay in g&&!g[Ay]){var C=JSA(A,I);C&&C[Ay]&&(A[I]=g.value,g={configurable:$b in g?g[$b]:C[$b],enumerable:_b in g?g[_b]:C[_b],writable:!1})}return qb(A,I,g)}:qb:function(A,I,g){if(AP(A),I=w7(I),AP(g),ZSA)try{return qb(A,I,g)}catch{}if("get"in g||"set"in g)throw new WSA("Accessors not supported");return"value"in g&&(A[I]=g.value),A};var VSA=OI,zSA=sQ,MSA=Me,fe=VSA?function(A,I,g){return zSA.f(A,I,MSA(1,g))}:function(A,I,g){return A[I]=g,A},Qa=wI,fSA=ov,jSA=K0,XSA=xI,HSA=rv.f,xSA=z5,_o=sg,OSA=AC,$o=fe,G7=Sg,qSA=function(A){var I=function(g,C,Q){if(this instanceof I){switch(arguments.length){case 0:return new A;case 1:return new A(g);case 2:return new A(g,C)}return new A(g,C,Q)}return fSA(A,this,arguments)};return I.prototype=A.prototype,I},rA=function(A,I){var g,C,Q,i,B,E,e,t,o,r=A.target,s=A.global,v=A.stat,n=A.proto,a=s?Qa:v?Qa[r]:Qa[r]&&Qa[r].prototype,c=s?_o:_o[r]||$o(_o,r,{})[r],P=c.prototype;for(i in I)C=!(g=xSA(s?i:r+(v?".":"#")+i,A.forced))&&a&&G7(a,i),E=c[i],C&&(e=A.dontCallGetSet?(o=HSA(a,i))&&o.value:a[i]),B=C&&e?e:I[i],(g||n||typeof E!=typeof B)&&(t=A.bind&&C?OSA(B,Qa):A.wrap&&C?qSA(B):n&&XSA(B)?jSA(B):B,(A.sham||B&&B.sham||E&&E.sham)&&$o(t,"sham",!0),$o(c,i,t),n&&(G7(_o,Q=r+"Prototype")||$o(_o,Q,{}),$o(_o[Q],i,B),A.real&&P&&(g||!P[i])&&$o(P,i,B)))},_SA=BI,je=_SA([].slice),f5=BI,$SA=Kg,A2A=yg,I2A=Sg,R7=je,g2A=wc,j5=Function,C2A=f5([].concat),Q2A=f5([].join),Iy={},i2A=function(A,I,g){if(!I2A(Iy,I)){for(var C=[],Q=0;Q0?L2A:R2A)(I)},T2A=S2A,eh=function(A){var I=+A;return I!=I||I===0?0:T2A(I)},p2A=eh,F2A=Math.max,U2A=Math.min,qS=function(A,I){var g=p2A(A);return g<0?F2A(g+I,0):U2A(g,I)},k2A=eh,Y2A=Math.min,I3=function(A){var I=k2A(A);return I>0?Y2A(I,9007199254740991):0},N2A=I3,uo=function(A){return N2A(A.length)},Z2A=JB,K2A=qS,W2A=uo,J2A=function(A){return function(I,g,C){var Q=Z2A(I),i=W2A(Q);if(i===0)return!A&&-1;var B,E=K2A(C,i);if(A&&g!=g){for(;i>E;)if((B=Q[E++])!=B)return!0}else for(;i>E;E++)if((A||E in Q)&&Q[E]===g)return A||E||0;return!A&&-1}},g3={indexOf:J2A(!1)},Sc={},V2A=BI,gy=Sg,z2A=JB,M2A=g3.indexOf,f2A=Sc,L7=V2A([].push),C3=function(A,I){var g,C=z2A(A),Q=0,i=[];for(g in C)!gy(f2A,g)&&gy(C,g)&&L7(i,g);for(;I.length>Q;)gy(C,g=I[Q++])&&(~M2A(i,g)||L7(i,g));return i},_S=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],j2A=C3,X2A=_S,th=Object.keys||function(A){return j2A(A,X2A)},H2A=OI,x2A=M5,O2A=sQ,q2A=aC,_2A=JB,$2A=th;Eh.f=H2A&&!x2A?Object.defineProperties:function(A,I){q2A(A);for(var g,C=_2A(I),Q=$2A(I),i=Q.length,B=0;i>B;)O2A.f(A,g=Q[B++],C[g]);return A};var IP,ATA=Lg,Q3=ATA("document","documentElement"),ITA=nv,gTA=ih,S7=ITA("keys"),oh=function(A){return S7[A]||(S7[A]=gTA(A))},CTA=aC,QTA=Eh,T7=_S,iTA=Sc,BTA=Q3,ETA=HS,eTA=oh,p7=">",F7="<",jG="prototype",XG="script",i3=eTA("IE_PROTO"),Cy=function(){},B3=function(A){return F7+XG+p7+A+F7+"/"+XG+p7},U7=function(A){A.write(B3("")),A.close();var I=A.parentWindow.Object;return A=null,I},tTA=function(){var A,I=ETA("iframe"),g="java"+XG+":";return I.style.display="none",BTA.appendChild(I),I.src=String(g),(A=I.contentWindow.document).open(),A.write(B3("document.F=Object")),A.close(),A.F},d9=function(){try{IP=new ActiveXObject("htmlfile")}catch{}d9=typeof document<"u"?document.domain&&IP?U7(IP):tTA():U7(IP);for(var A=T7.length;A--;)delete d9[jG][T7[A]];return d9()};iTA[i3]=!0;var Xe=Object.create||function(A,I){var g;return A!==null?(Cy[jG]=CTA(A),g=new Cy,Cy[jG]=null,g[i3]=A):g=d9(),I===void 0?g:QTA.f(g,I)},oTA=rA,rTA=Lg,Qy=ov,sTA=X5,k7=A3,vTA=aC,Y7=yg,aTA=Xe,E3=_A,$S=rTA("Reflect","construct"),nTA=Object.prototype,cTA=[].push,e3=E3(function(){function A(){}return!($S(function(){},[],A)instanceof A)}),t3=!E3(function(){$S(function(){})}),N7=e3||t3;oTA({target:"Reflect",stat:!0,forced:N7,sham:N7},{construct:function(A,I){k7(A),vTA(I);var g=arguments.length<3?A:k7(arguments[2]);if(t3&&!e3)return $S(A,I,g);if(A===g){switch(I.length){case 0:return new A;case 1:return new A(I[0]);case 2:return new A(I[0],I[1]);case 3:return new A(I[0],I[1],I[2]);case 4:return new A(I[0],I[1],I[2],I[3])}var C=[null];return Qy(cTA,C,I),new(Qy(sTA,A,C))}var Q=g.prototype,i=aTA(Y7(Q)?Q:nTA),B=Qy(A,i,I);return Y7(B)?B:i}});var lTA=sg,PTA=lTA.Reflect.construct,dTA=PTA,hTA=dTA,uTA=hTA,DTA=uTA,bTA=DTA,yTA=bTA,o3=yTA,mTA=KA(o3),wTA=o3,A2=KA(wTA),GTA=wE,Do=Array.isArray||function(A){return GTA(A)==="Array"},RTA=rA,LTA=Do;RTA({target:"Array",stat:!0},{isArray:LTA});var STA=sg,TTA=STA.Array.isArray,pTA=TTA,FTA=pTA,UTA=FTA,kTA=UTA,YTA=kTA,NTA=YTA,ZTA=NTA,KTA=KA(ZTA);function WTA(A){if(KTA(A))return A}var JTA=TypeError,VTA=9007199254740991,r3=function(A){if(A>VTA)throw JTA("Maximum allowed index exceeded");return A},zTA=OI,MTA=sQ,fTA=Me,rh=function(A,I,g){zTA?MTA.f(A,I,fTA(0,g)):A[I]=g},Z7=Do,jTA=Bh,XTA=yg,HTA=WI,xTA=HTA("species"),K7=Array,OTA=function(A){var I;return Z7(A)&&(I=A.constructor,(jTA(I)&&(I===K7||Z7(I.prototype))||XTA(I)&&(I=I[xTA])===null)&&(I=void 0)),I===void 0?K7:I},qTA=OTA,s3=function(A,I){return new(qTA(A))(I===0?0:I)},_TA=_A,$TA=WI,ApA=Qh,IpA=$TA("species"),I2=function(A){return ApA>=51||!_TA(function(){var I=[];return(I.constructor={})[IpA]=function(){return{foo:1}},I[A](Boolean).foo!==1})},gpA=rA,CpA=_A,QpA=Do,ipA=yg,BpA=Ri,EpA=uo,W7=r3,J7=rh,epA=s3,tpA=I2,opA=WI,rpA=Qh,v3=opA("isConcatSpreadable"),spA=rpA>=51||!CpA(function(){var A=[];return A[v3]=!1,A.concat()[0]!==A}),vpA=function(A){if(!ipA(A))return!1;var I=A[v3];return I!==void 0?!!I:QpA(A)},apA=!spA||!tpA("concat");gpA({target:"Array",proto:!0,forced:apA},{concat:function(A){var I,g,C,Q,i,B=BpA(this),E=epA(B,0),e=0;for(I=-1,C=arguments.length;Id;d++)if((E||d in a)&&(v=P(s=a[d],d,n),A))if(I)u[d]=v;else if(v)switch(A){case 3:return!0;case 5:return s;case 6:return d;case 2:j7(u,s)}else switch(A){case 4:return!1;case 7:j7(u,s)}return i?-1:C||Q?Q:u}},sh={forEach:X7(0),filter:X7(2)},gP=rA,kc=wI,C2=ig,BFA=BI,ss=OI,Ir=vv,EFA=_A,kg=Sg,eFA=WQ,xG=aC,vh=JB,Q2=XS,tFA=Li,OG=Me,Us=Xe,P3=th,oFA=Tc,d3=g2,rFA=pc,h3=rv,u3=sQ,sFA=Eh,D3=Ch,H7=He,vFA=Fc,i2=nv,aFA=oh,b3=Sc,x7=ih,nFA=WI,cFA=Uc,lFA=qI,PFA=c3,dFA=VB,y3=xe,ah=sh.forEach,gQ=aFA("hidden"),V0="Symbol",Xn="prototype",hFA=y3.set,O7=y3.getterFor(V0),qi=Object[Xn],Xr=kc.Symbol,h9=Xr&&Xr[Xn],uFA=kc.RangeError,DFA=kc.TypeError,Ey=kc.QObject,m3=h3.f,Wt=u3.f,w3=d3.f,bFA=D3.f,G3=BFA([].push),PE=i2("symbols"),Yc=i2("op-symbols"),yFA=i2("wks"),ey=!Ey||!Ey[Xn]||!Ey[Xn].findChild,R3=function(A,I,g){var C=m3(qi,I);C&&delete qi[I],Wt(A,I,g),C&&A!==qi&&Wt(qi,I,C)},qG=ss&&EFA(function(){return Us(Wt({},"a",{get:function(){return Wt(this,"a",{value:7}).a}})).a!==7})?R3:Wt,ty=function(A,I){var g=PE[A]=Us(h9);return hFA(g,{type:V0,tag:A,description:I}),ss||(g.description=I),g},z0=function(A,I,g){A===qi&&z0(Yc,I,g),xG(A);var C=Q2(I);return xG(g),kg(PE,C)?(g.enumerable?(kg(A,gQ)&&A[gQ][C]&&(A[gQ][C]=!1),g=Us(g,{enumerable:OG(0,!1)})):(kg(A,gQ)||Wt(A,gQ,OG(1,Us(null))),A[gQ][C]=!0),qG(A,C,g)):Wt(A,C,g)},_G=function(A,I){xG(A);var g=vh(I),C=P3(g).concat(S3(g));return ah(C,function(Q){ss&&!C2(L3,g,Q)||z0(A,Q,g[Q])}),A},mFA=function(A,I){return I===void 0?Us(A):_G(Us(A),I)},L3=function(A){var I=Q2(A),g=C2(bFA,this,I);return!(this===qi&&kg(PE,I)&&!kg(Yc,I))&&(!(g||!kg(this,I)||!kg(PE,I)||kg(this,gQ)&&this[gQ][I])||g)},q7=function(A,I){var g=vh(A),C=Q2(I);if(g!==qi||!kg(PE,C)||kg(Yc,C)){var Q=m3(g,C);return!Q||!kg(PE,C)||kg(g,gQ)&&g[gQ][C]||(Q.enumerable=!0),Q}},_7=function(A){var I=w3(vh(A)),g=[];return ah(I,function(C){kg(PE,C)||kg(b3,C)||G3(g,C)}),g},S3=function(A){var I=A===qi,g=w3(I?Yc:vh(A)),C=[];return ah(g,function(Q){!kg(PE,Q)||I&&!kg(qi,Q)||G3(C,PE[Q])}),C};Ir||(H7(h9=(Xr=function(){if(eFA(h9,this))throw new DFA("Symbol is not a constructor");var A=arguments.length&&arguments[0]!==void 0?tFA(arguments[0]):void 0,I=x7(A),g=function(C){var Q=this===void 0?kc:this;Q===qi&&C2(g,Yc,C),kg(Q,gQ)&&kg(Q[gQ],I)&&(Q[gQ][I]=!1);var i=OG(1,C);try{qG(Q,I,i)}catch(B){if(!(B instanceof uFA))throw B;R3(Q,I,i)}};return ss&&ey&&qG(qi,I,{configurable:!0,set:g}),ty(I,A)})[Xn],"toString",function(){return O7(this).tag}),H7(Xr,"withoutSetter",function(A){return ty(x7(A),A)}),D3.f=L3,u3.f=z0,sFA.f=_G,h3.f=q7,oFA.f=d3.f=_7,rFA.f=S3,cFA.f=function(A){return ty(nFA(A),A)},ss&&vFA(h9,"description",{configurable:!0,get:function(){return O7(this).description}})),gP({global:!0,wrap:!0,forced:!Ir,sham:!Ir},{Symbol:Xr}),ah(P3(yFA),function(A){lFA(A)}),gP({target:V0,stat:!0,forced:!Ir},{useSetter:function(){ey=!0},useSimple:function(){ey=!1}}),gP({target:"Object",stat:!0,forced:!Ir,sham:!ss},{create:mFA,defineProperty:z0,defineProperties:_G,getOwnPropertyDescriptor:q7}),gP({target:"Object",stat:!0,forced:!Ir},{getOwnPropertyNames:_7}),PFA(),dFA(Xr,V0),b3[gQ]=!0;var wFA=vv,T3=wFA&&!!Symbol.for&&!!Symbol.keyFor,GFA=rA,RFA=Lg,LFA=Sg,SFA=Li,p3=nv,TFA=T3,oy=p3("string-to-symbol-registry"),pFA=p3("symbol-to-string-registry");GFA({target:"Symbol",stat:!0,forced:!TFA},{for:function(A){var I=SFA(A);if(LFA(oy,I))return oy[I];var g=RFA("Symbol")(I);return oy[I]=g,pFA[g]=I,g}});var FFA=rA,UFA=Sg,kFA=Rc,YFA=av,NFA=nv,ZFA=T3,$7=NFA("symbol-to-string-registry");FFA({target:"Symbol",stat:!0,forced:!ZFA},{keyFor:function(A){if(!kFA(A))throw new TypeError(YFA(A)+" is not a symbol");if(UFA($7,A))return $7[A]}});var KFA=BI,AZ=Do,WFA=xI,IZ=wE,JFA=Li,gZ=KFA([].push),VFA=function(A){if(WFA(A))return A;if(AZ(A)){for(var I=A.length,g=[],C=0;C=I.length)return A.target=null,BP(void 0,!0);switch(A.kind){case"keys":return BP(g,!1);case"values":return BP(I[g],!1)}return BP([g,I[g]],!1)},"values"),PZ.Arguments=PZ.Array;var DkA={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},bkA=DkA,ykA=wI,mkA=VB,dZ=lv;for(var sy in bkA)mkA(ykA[sy],sy),dZ[sy]=dZ.Array;var wkA=yUA,GkA=wkA,RkA=WI,LkA=sQ.f,hZ=RkA("metadata"),uZ=Function.prototype;uZ[hZ]===void 0&&LkA(uZ,hZ,{value:null});var SkA=qI;SkA("asyncDispose");var TkA=qI;TkA("dispose");var pkA=qI;pkA("metadata");var FkA=GkA,UkA=FkA,kkA=Lg,YkA=BI,E2=kkA("Symbol"),NkA=E2.keyFor,ZkA=YkA(E2.prototype.valueOf),X3=E2.isRegisteredSymbol||function(A){try{return NkA(ZkA(A))!==void 0}catch{return!1}},KkA=rA,WkA=X3;KkA({target:"Symbol",stat:!0},{isRegisteredSymbol:WkA});for(var JkA=nv,DZ=Lg,VkA=BI,zkA=Rc,MkA=WI,EP=DZ("Symbol"),bZ=EP.isWellKnownSymbol,H3=DZ("Object","getOwnPropertyNames"),fkA=VkA(EP.prototype.valueOf),yZ=JkA("wks"),vy=0,mZ=H3(EP),jkA=mZ.length;vy=E?A?"":void 0:(C=GZ(i,B))<55296||C>56319||B+1===E||(Q=GZ(i,B+1))<56320||Q>57343?A?rYA(i,B):C:A?sYA(i,B,B+2):Q-56320+(C-55296<<10)+65536}},O3={codeAt:RZ(!1),charAt:RZ(!0)},vYA=O3.charAt,aYA=Li,q3=xe,nYA=B2,LZ=ch,_3="String Iterator",cYA=q3.set,lYA=q3.getterFor(_3);nYA(String,"String",function(A){cYA(this,{type:_3,string:aYA(A),index:0})},function(){var A,I=lYA(this),g=I.string,C=I.index;return C>=g.length?LZ(void 0,!0):(A=vYA(g,C),I.index+=A.length,LZ(A,!1))});var PYA=cv,SZ=MS,dYA=sv,hYA=lv,uYA=WI,DYA=uYA("iterator"),Zc=function(A){if(!dYA(A))return SZ(A,DYA)||SZ(A,"@@iterator")||hYA[PYA(A)]},bYA=Zc,yYA=bYA,mYA=yYA,wYA=mYA,GYA=wYA,RYA=GYA,LYA=RYA,SYA=LYA,TYA=SYA,pYA=KA(TYA),FYA=OI,UYA=Do,kYA=TypeError,YYA=Object.getOwnPropertyDescriptor,NYA=FYA&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(A){return A instanceof TypeError}}(),ZYA=NYA?function(A,I){if(UYA(A)&&!YYA(A,"length").writable)throw new kYA("Cannot set read only .length");return A.length=I}:function(A,I){return A.length=I},KYA=rA,WYA=Ri,JYA=uo,VYA=ZYA,zYA=r3,MYA=_A,fYA=MYA(function(){return[].push.call({length:4294967296},1)!==4294967297}),jYA=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(A){return A instanceof TypeError}},XYA=fYA||!jYA();KYA({target:"Array",proto:!0,forced:XYA},{push:function(A){var I=WYA(this),g=JYA(I),C=arguments.length;zYA(g+C);for(var Q=0;Q1?arguments[1]:void 0,i=Q!==void 0;i&&(Q=XNA(Q,C>2?arguments[2]:void 0));var B,E,e,t,o,r,s=I7A(I),v=0;if(!s||this===kZ&&qNA(s))for(B=$NA(I),E=g?new this(B):kZ(B);B>v;v++)r=i?Q(I[v],v):I[v],UZ(E,v,r);else for(E=g?new this:[],o=(t=A7A(I,s)).next;!(e=HNA(o,t)).done;v++)r=i?ONA(t,Q,[e.value,v],!0):e.value,UZ(E,v,r);return E.length=v,E},g7A=WI,QH=g7A("iterator"),iH=!1;try{var C7A=0,YZ={next:function(){return{done:!!C7A++}},return:function(){iH=!0}};YZ[QH]=function(){return this},Array.from(YZ,function(){throw 2})}catch{}var BH=function(A,I){try{if(!I&&!iH)return!1}catch{return!1}var g=!1;try{var C={};C[QH]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch{}return g},Q7A=rA,i7A=CH,B7A=BH,E7A=!B7A(function(A){Array.from(A)});Q7A({target:"Array",stat:!0,forced:E7A},{from:i7A});var e7A=sg,t7A=e7A.Array.from,o7A=t7A,r7A=o7A,s7A=r7A,v7A=s7A,a7A=v7A,n7A=a7A,c7A=n7A,l7A=KA(c7A);function NZ(A,I){(I==null||I>A.length)&&(I=A.length);for(var g=0,C=Array(I);g1?arguments[1]:void 0)},PZA=rA;PZA({target:"Array",proto:!0,forced:[].forEach!==KZ},{forEach:KZ});var dZA=Oe,hZA=dZA("Array","forEach"),uZA=hZA,DZA=uZA,bZA=cv,yZA=Sg,mZA=WQ,wZA=DZA,ly=Array.prototype,GZA={DOMTokenList:!0,NodeList:!0},RZA=function(A){var I=A.forEach;return A===ly||mZA(ly,A)&&I===ly.forEach||yZA(GZA,bZA(A))?wZA:I},LZA=RZA,SZA=LZA,TZA=SZA,pZA=TZA,vH=pZA,en=KA(vH),FZA=rA,UZA=M3;FZA({target:"Object",stat:!0},{setPrototypeOf:UZA});var kZA=sg,YZA=kZA.Object.setPrototypeOf,NZA=YZA,ZZA=NZA,KZA=ZZA,WZA=KZA,JZA=WZA,VZA=JZA,zZA=VZA,Hn=KA(zZA),MZA=Lg,fZA=BI,jZA=Tc,XZA=pc,HZA=aC,xZA=fZA([].concat),aH=MZA("Reflect","ownKeys")||function(A){var I=jZA.f(HZA(A)),g=XZA.f;return g?xZA(I,g(A)):I},WZ=Sg,OZA=aH,qZA=rv,_ZA=sQ,$ZA=function(A,I,g){for(var C=OZA(I),Q=_ZA.f,i=qZA.f,B=0;Bi;i++)if((E=P(A[i]))&&VZ(MZ,E))return E;return new D9(!1)}C=uKA(A,Q)}for(e=s?A.next:C.next;!(t=cKA(e,C)).done;){try{E=P(t.value)}catch(d){zZ(C,"throw",d)}if(typeof E=="object"&&E&&VZ(MZ,E))return E}return new D9(!1)},yKA=Li,mKA=function(A,I){return A===void 0?arguments.length<2?"":I:yKA(A)},wKA=rA,GKA=WQ,RKA=nh,f0=M3,LKA=$ZA,lH=Xe,Py=fe,dy=Me,SKA=gKA,TKA=aKA,pKA=oB,FKA=mKA,UKA=WI,kKA=UKA("toStringTag"),j0=Error,YKA=[].push,ks=function(A,I){var g,C=GKA(hy,this);f0?g=f0(new j0,C?RKA(this):hy):(g=C?this:lH(hy),Py(g,kKA,"Error")),I!==void 0&&Py(g,"message",FKA(I)),TKA(g,ks,g.stack,1),arguments.length>2&&SKA(g,arguments[2]);var Q=[];return pKA(A,YKA,{that:Q}),Py(g,"errors",Q),g};f0?f0(ks,j0):LKA(ks,j0,{name:!0});var hy=ks.prototype=lH(j0.prototype,{constructor:dy(1,ks),message:dy(1,""),name:dy(1,"AggregateError")});wKA({global:!0},{AggregateError:ks});var xn,gr,fZ,uy,Ba=wI,NKA=Gc,ZKA=wE,eP=function(A){return NKA.slice(0,A.length)===A},PH=eP("Bun/")?"BUN":eP("Cloudflare-Workers")?"CLOUDFLARE":eP("Deno/")?"DENO":eP("Node.js/")?"NODE":Ba.Bun&&typeof Bun.version=="string"?"BUN":Ba.Deno&&typeof Deno.version=="object"?"DENO":ZKA(Ba.process)==="process"?"NODE":Ba.window&&Ba.document?"BROWSER":"REST",KKA=PH,o2=KKA==="NODE",WKA=Lg,JKA=Fc,VKA=WI,zKA=OI,jZ=VKA("species"),dH=function(A){var I=WKA(A);zKA&&I&&!I[jZ]&&JKA(I,jZ,{configurable:!0,get:function(){return this}})},MKA=WQ,fKA=TypeError,Kc=function(A,I){if(MKA(I,A))return A;throw new fKA("Incorrect invocation")},XZ=aC,jKA=A3,XKA=sv,HKA=WI,xKA=HKA("species"),hH=function(A,I){var g,C=XZ(A).constructor;return C===void 0||XKA(g=XZ(C)[xKA])?I:jKA(g)},OKA=TypeError,Wc=function(A,I){if(A1?xWA(arguments,1):[],g=OWA.f(this),C=JH(function(){return HWA(qWA(A),void 0,I)});return(C.error?g.reject:g.resolve)(C.value),g.promise}});var $WA=rA,AJA=zB;$WA({target:"Promise",stat:!0},{withResolvers:function(){var A=AJA.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var IJA=rA,tR=io,gJA=_A,CJA=Lg,QJA=xI,iJA=hH,lK=WH,BJA=tR&&tR.prototype,EJA=!!tR&&gJA(function(){BJA.finally.call({then:function(){}},function(){})});IJA({target:"Promise",proto:!0,real:!0,forced:EJA},{finally:function(A){var I=iJA(this,CJA("Promise")),g=QJA(A);return this.then(g?function(C){return lK(I,A()).then(function(){return C})}:A,g?function(C){return lK(I,A()).then(function(){throw C})}:A)}});var eJA=sg,tJA=eJA.Promise,oJA=tJA,rJA=oJA,sJA=rJA,vJA=sJA,aJA=vJA,nJA=aJA,VH=nJA,n2=KA(VH),cJA=rA,lJA=BI,PJA=Do,dJA=lJA([].reverse),PK=[1,2];cJA({target:"Array",proto:!0,forced:String(PK)===String(PK.reverse())},{reverse:function(){return PJA(this)&&(this.length=this.length),dJA(this)}});var hJA=Oe,uJA=hJA("Array","reverse"),DJA=WQ,bJA=uJA,ky=Array.prototype,yJA=function(A){var I=A.reverse;return A===ky||DJA(ky,A)&&I===ky.reverse?bJA:I},mJA=yJA,wJA=mJA,GJA=wJA,RJA=GJA,LJA=RJA,SJA=LJA,TJA=SJA,pJA=KA(TJA);function Ji(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */Ji=function(){return I};var A,I={},g=Object.prototype,C=g.hasOwnProperty,Q=Qo||function(Y,J,V){Y[J]=V.value},i=typeof pt=="function"?pt:{},B=i.iterator||"@@iterator",E=i.asyncIterator||"@@asyncIterator",e=i.toStringTag||"@@toStringTag";function t(Y,J,V){return Qo(Y,J,{value:V,enumerable:!0,configurable:!0,writable:!0}),Y[J]}try{t({},"")}catch{t=function(J,V,N){return J[V]=N}}function o(Y,J,V,N){var z=J&&J.prototype instanceof P?J:P,w=u9(z.prototype),CA=new AA(N||[]);return Q(w,"_invoke",{value:L(Y,V,CA)}),w}function r(Y,J,V){try{return{type:"normal",arg:Y.call(J,V)}}catch(N){return{type:"throw",arg:N}}}I.wrap=o;var s="suspendedStart",v="suspendedYield",n="executing",a="completed",c={};function P(){}function d(){}function h(){}var u={};t(u,B,function(){return this});var D=En&&En(En(X([])));D&&D!==g&&C.call(D,B)&&(u=D);var y=h.prototype=P.prototype=u9(u);function b(Y){var J;en(J=["next","throw","return"]).call(J,function(V){t(Y,V,function(N){return this._invoke(V,N)})})}function G(Y,J){function V(z,w,CA,QA){var R=r(Y[z],Y,w);if(R.type!=="throw"){var cA=R.arg,lA=cA.value;return lA&&Co(lA)=="object"&&C.call(lA,"__await")?J.resolve(lA.__await).then(function(H){V("next",H,CA,QA)},function(H){V("throw",H,CA,QA)}):J.resolve(lA).then(function(H){cA.value=H,CA(cA)},function(H){return V("throw",H,CA,QA)})}QA(R.arg)}var N;Q(this,"_invoke",{value:function(z,w){function CA(){return new J(function(QA,R){V(z,w,QA,R)})}return N=N?N.then(CA,CA):CA()}})}function L(Y,J,V){var N=s;return function(z,w){if(N===n)throw Error("Generator is already running");if(N===a){if(z==="throw")throw w;return{value:A,done:!0}}for(V.method=z,V.arg=w;;){var CA=V.delegate;if(CA){var QA=m(CA,V);if(QA){if(QA===c)continue;return QA}}if(V.method==="next")V.sent=V._sent=V.arg;else if(V.method==="throw"){if(N===s)throw N=a,V.arg;V.dispatchException(V.arg)}else V.method==="return"&&V.abrupt("return",V.arg);N=n;var R=r(Y,J,V);if(R.type==="normal"){if(N=V.done?a:v,R.arg===c)continue;return{value:R.arg,done:V.done}}R.type==="throw"&&(N=a,V.method="throw",V.arg=R.arg)}}}function m(Y,J){var V=J.method,N=Y.iterator[V];if(N===A)return J.delegate=null,V==="throw"&&Y.iterator.return&&(J.method="return",J.arg=A,m(Y,J),J.method==="throw")||V!=="return"&&(J.method="throw",J.arg=new TypeError("The iterator does not provide a '"+V+"' method")),c;var z=r(N,Y.iterator,J.arg);if(z.type==="throw")return J.method="throw",J.arg=z.arg,J.delegate=null,c;var w=z.arg;return w?w.done?(J[Y.resultName]=w.value,J.next=Y.nextLoc,J.method!=="return"&&(J.method="next",J.arg=A),J.delegate=null,c):w:(J.method="throw",J.arg=new TypeError("iterator result is not an object"),J.delegate=null,c)}function F(Y){var J,V={tryLoc:Y[0]};1 in Y&&(V.catchLoc=Y[1]),2 in Y&&(V.finallyLoc=Y[2],V.afterLoc=Y[3]),M0(J=this.tryEntries).call(J,V)}function U(Y){var J=Y.completion||{};J.type="normal",delete J.arg,Y.completion=J}function AA(Y){this.tryEntries=[{tryLoc:"root"}],en(Y).call(Y,F,this),this.reset(!0)}function X(Y){if(Y||Y===""){var J=Y[B];if(J)return J.call(Y);if(typeof Y.next=="function")return Y;if(!isNaN(Y.length)){var V=-1,N=function z(){for(;++V=0;--N){var z=this.tryEntries[N],w=z.completion;if(z.tryLoc==="root")return V("end");if(z.tryLoc<=this.prev){var CA=C.call(z,"catchLoc"),QA=C.call(z,"finallyLoc");if(CA&&QA){if(this.prev=0;--V){var N=this.tryEntries[V];if(N.tryLoc<=this.prev&&C.call(N,"finallyLoc")&&this.prev=0;--J){var V=this.tryEntries[J];if(V.finallyLoc===Y)return this.complete(V.completion,V.afterLoc),U(V),c}},catch:function(Y){for(var J=this.tryEntries.length-1;J>=0;--J){var V=this.tryEntries[J];if(V.tryLoc===Y){var N=V.completion;if(N.type==="throw"){var z=N.arg;U(V)}return z}}throw Error("illegal catch attempt")},delegateYield:function(Y,J,V){return this.delegate={iterator:X(Y),resultName:J,nextLoc:V},this.method==="next"&&(this.arg=A),c}},I}function dK(A,I,g,C,Q,i,B){try{var E=A[i](B),e=E.value}catch(t){return void g(t)}E.done?I(e):n2.resolve(e).then(C,Q)}function Sa(A){return function(){var I=this,g=arguments;return new n2(function(C,Q){var i=A.apply(I,g);function B(e){dK(i,C,Q,B,E,"next",e)}function E(e){dK(i,C,Q,B,E,"throw",e)}B(void 0)})}}var FJA=rA,UJA=Ri,zH=th,kJA=_A,YJA=kJA(function(){zH(1)});FJA({target:"Object",stat:!0,forced:YJA},{keys:function(A){return zH(UJA(A))}});var NJA=sg,ZJA=NJA.Object.keys,KJA=ZJA,WJA=KJA,JJA=WJA,VJA=JJA,zJA=VJA,MJA=zJA,MH=MJA,fJA=KA(MH),jJA=sg,XJA=jJA.Object.getOwnPropertySymbols,HJA=XJA,xJA=HJA,OJA=xJA,qJA=OJA,_JA=qJA,$JA=_JA,fH=$JA,hK=KA(fH),A1A=rA,I1A=sh.filter,g1A=I2,C1A=g1A("filter");A1A({target:"Array",proto:!0,forced:!C1A},{filter:function(A){return I1A(this,A,arguments.length>1?arguments[1]:void 0)}});var Q1A=Oe,i1A=Q1A("Array","filter"),B1A=WQ,E1A=i1A,Yy=Array.prototype,e1A=function(A){var I=A.filter;return A===Yy||B1A(Yy,A)&&I===Yy.filter?E1A:I},t1A=e1A,o1A=t1A,r1A=o1A,s1A=r1A,v1A=s1A,a1A=v1A,n1A=a1A,c1A=KA(n1A),jH={exports:{}},l1A=rA,P1A=_A,d1A=JB,XH=rv.f,HH=OI,h1A=!HH||P1A(function(){XH(1)});l1A({target:"Object",stat:!0,forced:h1A,sham:!HH},{getOwnPropertyDescriptor:function(A,I){return XH(d1A(A),I)}});var u1A=sg,xH=u1A.Object,D1A=jH.exports=function(A,I){return xH.getOwnPropertyDescriptor(A,I)};xH.getOwnPropertyDescriptor.sham&&(D1A.sham=!0);var b1A=jH.exports,y1A=b1A,m1A=y1A,w1A=m1A,G1A=w1A,R1A=G1A,L1A=R1A,OH=L1A,qH=KA(OH),S1A=rA,T1A=OI,p1A=aH,F1A=JB,U1A=rv,k1A=rh;S1A({target:"Object",stat:!0,sham:!T1A},{getOwnPropertyDescriptors:function(A){for(var I,g,C=F1A(A),Q=U1A.f,i=p1A(C),B={},E=0;i.length>E;)(g=Q(C,I=i[E++]))!==void 0&&k1A(B,I,g);return B}});var Y1A=sg,N1A=Y1A.Object.getOwnPropertyDescriptors,Z1A=N1A,K1A=Z1A,W1A=K1A,J1A=W1A,V1A=J1A,z1A=V1A,M1A=z1A,uK=KA(M1A),_H={exports:{}},f1A=rA,j1A=OI,DK=Eh.f;f1A({target:"Object",stat:!0,forced:Object.defineProperties!==DK,sham:!j1A},{defineProperties:DK});var X1A=sg,$H=X1A.Object,H1A=_H.exports=function(A,I){return $H.defineProperties(A,I)};$H.defineProperties.sham&&(H1A.sham=!0);var x1A=_H.exports,O1A=x1A,q1A=O1A,_1A=q1A,$1A=_1A,AVA=$1A,IVA=AVA,gVA=IVA,CVA=KA(gVA),QVA=Uc,iVA=QVA.f("toPrimitive"),BVA=iVA,EVA=BVA,eVA=EVA,tVA=eVA,oVA=tVA,rVA=oVA,sVA=rVA,vVA=KA(sVA);function aVA(A,I){if(Co(A)!="object"||!A)return A;var g=A[vVA];if(g!==void 0){var C=g.call(A,I);if(Co(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(I==="string"?String:Number)(A)}function A4(A){var I=aVA(A,"string");return Co(I)=="symbol"?I:I+""}function Xg(A,I,g){return(I=A4(I))in A?Qo(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}function bK(A,I){var g=fJA(A);if(hK){var C=hK(A);I&&(C=c1A(C).call(C,function(Q){return qH(A,Q).enumerable})),M0(g).apply(g,C)}return g}function Qr(A){for(var I=1;I1?arguments[1]:void 0);o=o?o.next:r.first;)for(s(o.value,o.key,this);o&&o.removed;)o=o.previous},has:function(t){return!!e(this,t)}}),RK(i,g?{get:function(t){var o=e(this,t);return o&&o.value},set:function(t,o){return E(this,t===0?0:t,o)}}:{add:function(t){return E(this,t=t===0?0:t,t)}}),ea&&hzA(i,"size",{configurable:!0,get:function(){return B(this).size}}),Q},setStrong:function(A,I,g){var C=I+" Iterator",Q=Zy(I),i=Zy(C);mzA(A,I,function(B,E){TK(this,{type:C,target:B,state:Q(B),kind:E,last:null})},function(){for(var B=i(this),E=B.kind,e=B.last;e&&e.removed;)e=e.previous;return B.target&&(B.last=e=e?e.next:B.state.first)?LK(E==="keys"?e.key:E==="values"?e.value:[e.key,e.value],!1):(B.target=null,LK(void 0,!0))},g?"entries":"values",!g,!0),wzA(I)}},RzA=PzA,LzA=GzA;RzA("Map",function(A){return function(){return A(this,arguments.length?arguments[0]:void 0)}},LzA);var SzA=function(A,I){return I===1?function(g,C){return g[A](C)}:function(g,C,Q){return g[A](C,Q)}},TzA=Lg,sP=SzA,pK=TzA("Map"),JQ={Map:pK,set:sP("set",2),get:sP("get",1),has:sP("has",1),remove:sP("delete",1),proto:pK.prototype},pzA=rA,FzA=BI,UzA=Kg,kzA=ho,YzA=oB,dh=JQ,NzA=fS,ZzA=dh.Map,KzA=dh.has,WzA=dh.get,JzA=dh.set,VzA=FzA([].push);pzA({target:"Map",stat:!0,forced:NzA},{groupBy:function(A,I){kzA(A),UzA(I);var g=new ZzA,C=0;return YzA(A,function(Q){var i=I(Q,C++);KzA(g,i)?VzA(WzA(g,i),Q):JzA(g,i,[Q])}),g}});var zzA=sg,MzA=zzA.Map,fzA=MzA,jzA=fzA,XzA=jzA,HzA=XzA,xzA=AC,OzA=aC,qzA=Ri,_zA=oB,$zA=function(A,I,g){return function(C){var Q=qzA(C),i=arguments.length,B=i>1?arguments[1]:void 0,E=B!==void 0,e=E?xzA(B,i>2?arguments[2]:void 0):void 0,t=new A,o=0;return _zA(Q,function(r){var s=E?e(r,o++):r;g?I(t,OzA(s)[0],s[1]):I(t,s)}),t}},AMA=rA,FK=JQ,IMA=$zA;AMA({target:"Map",stat:!0,forced:!0},{from:IMA(FK.Map,FK.set,!0)});var gMA=aC,CMA=function(A,I,g){return function(){for(var C=new A,Q=arguments.length,i=0;i1?arguments[1]:void 0);return wMA(I,function(C,Q){if(!g(C,Q,I))return!1},!0)!==!1}});var GMA=rA,RMA=AC,LMA=nC,o4=JQ,SMA=MB,TMA=o4.Map,pMA=o4.set;GMA({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(A){var I=LMA(this),g=RMA(A,arguments.length>1?arguments[1]:void 0),C=new TMA;return SMA(I,function(Q,i){g(Q,i,I)&&pMA(C,i,Q)}),C}});var FMA=rA,UMA=AC,kMA=nC,YMA=MB;FMA({target:"Map",proto:!0,real:!0,forced:!0},{find:function(A){var I=kMA(this),g=UMA(A,arguments.length>1?arguments[1]:void 0),C=YMA(I,function(Q,i){if(g(Q,i,I))return{value:Q}},!0);return C&&C.value}});var NMA=rA,ZMA=AC,KMA=nC,WMA=MB;NMA({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(A){var I=KMA(this),g=ZMA(A,arguments.length>1?arguments[1]:void 0),C=WMA(I,function(Q,i){if(g(Q,i,I))return{key:i}},!0);return C&&C.key}});var JMA=function(A,I){return A===I||A!=A&&I!=I},VMA=rA,zMA=JMA,MMA=nC,fMA=MB;VMA({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(A){return fMA(MMA(this),function(I){if(zMA(I,A))return!0},!0)===!0}});var jMA=rA,XMA=nC,y2=JQ,HMA=y2.get,xMA=y2.has,OMA=y2.set;jMA({target:"Map",proto:!0,real:!0,forced:!0},{getOrInsert:function(A,I){return xMA(XMA(this),A)?HMA(this,A):(OMA(this,A,I),I)}});var qMA=rA,_MA=Kg,$MA=nC,m2=JQ,AfA=m2.get,IfA=m2.has,gfA=m2.set;qMA({target:"Map",proto:!0,real:!0,forced:!0},{getOrInsertComputed:function(A,I){if($MA(this),_MA(I),IfA(this,A))return AfA(this,A);A===0&&1/A==-1/0&&(A=0);var g=I(A);return gfA(this,A,g),g}});var CfA=rA,QfA=nC,ifA=MB;CfA({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(A){var I=ifA(QfA(this),function(g,C){if(g===A)return{key:C}},!0);return I&&I.key}});var BfA=rA,EfA=AC,efA=nC,r4=JQ,tfA=MB,ofA=r4.Map,rfA=r4.set;BfA({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(A){var I=efA(this),g=EfA(A,arguments.length>1?arguments[1]:void 0),C=new ofA;return tfA(I,function(Q,i){rfA(C,g(Q,i,I),Q)}),C}});var sfA=rA,vfA=AC,afA=nC,s4=JQ,nfA=MB,cfA=s4.Map,lfA=s4.set;sfA({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(A){var I=afA(this),g=vfA(A,arguments.length>1?arguments[1]:void 0),C=new cfA;return nfA(I,function(Q,i){lfA(C,i,g(Q,i,I))}),C}});var PfA=rA,dfA=nC,hfA=oB,ufA=JQ.set;PfA({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(A){for(var I=dfA(this),g=arguments.length,C=0;C1?arguments[1]:void 0);return SfA(I,function(C,Q){if(g(C,Q,I))return!0},!0)===!0}});var TfA=rA,NK=Kg,pfA=nC,w2=JQ,FfA=TypeError,UfA=w2.get,kfA=w2.has,YfA=w2.set;TfA({target:"Map",proto:!0,real:!0,forced:!0},{update:function(A,I){var g=pfA(this),C=arguments.length;NK(I);var Q=kfA(g,A);if(!Q&&C<3)throw new FfA("Updating absent value");var i=Q?UfA(g,A):NK(C>2?arguments[2]:void 0)(A,g);return YfA(g,A,I(i,A,g)),g}});var vP=ig,Ky=Kg,aP=xI,NfA=aC,ZfA=TypeError,v4=function(A,I){var g,C=NfA(this),Q=Ky(C.get),i=Ky(C.has),B=Ky(C.set),E=arguments.length>2?arguments[2]:void 0;if(!aP(I)&&!aP(E))throw new ZfA("At least one callback required");return vP(i,C,A)?(g=vP(Q,C,A),aP(I)&&(g=I(g),vP(B,C,A,g))):aP(E)&&(g=E(),vP(B,C,A,g)),g},KfA=rA,WfA=v4;KfA({target:"Map",proto:!0,real:!0,forced:!0},{upsert:WfA});var JfA=rA,VfA=v4;JfA({target:"Map",proto:!0,real:!0,forced:!0},{updateOrInsert:VfA});var zfA=HzA,MfA=zfA,ffA=MfA,jfA=ffA,Wy=KA(jfA),XfA=Oe,HfA=XfA("Array","concat"),xfA=WQ,OfA=HfA,Jy=Array.prototype,qfA=function(A){var I=A.concat;return A===Jy||xfA(Jy,A)&&I===Jy.concat?OfA:I},_fA=qfA,$fA=_fA,AjA=$fA,IjA=AjA,gjA=IjA,CjA=gjA,QjA=CjA,ijA=QjA,qC=KA(ijA),BjA=vH,Ta=KA(BjA),EjA=VH,ejA=KA(EjA),tjA=MH,ojA=KA(tjA),rjA=I4,sjA=KA(rjA),vjA=eh,ajA=Li,njA=ho,cjA=RangeError,ljA=function(A){var I=ajA(njA(this)),g="",C=vjA(A);if(C<0||C===1/0)throw new cjA("Wrong number of repetitions");for(;C>0;(C>>>=1)&&(I+=I))1&C&&(g+=I);return g},a4=BI,PjA=I3,ZK=Li,djA=ljA,hjA=ho,ujA=a4(djA),DjA=a4("".slice),bjA=Math.ceil,yjA=function(A){return function(I,g,C){var Q,i,B=ZK(hjA(I)),E=PjA(g),e=B.length,t=C===void 0?" ":ZK(C);return E<=e||t===""?B:((i=ujA(t,bjA((Q=E-e)/t.length))).length>Q&&(i=DjA(i,0,Q)),A?B+i:i+B)}},mjA={start:yjA(!1)},qe=BI,KK=_A,Bt=mjA.start,wjA=RangeError,GjA=isFinite,RjA=Math.abs,GE=Date.prototype,Vy=GE.toISOString,LjA=qe(GE.getTime),SjA=qe(GE.getUTCDate),TjA=qe(GE.getUTCFullYear),pjA=qe(GE.getUTCHours),FjA=qe(GE.getUTCMilliseconds),UjA=qe(GE.getUTCMinutes),kjA=qe(GE.getUTCMonth),YjA=qe(GE.getUTCSeconds),NjA=KK(function(){return Vy.call(new Date(-50000000000001))!=="0385-07-25T07:06:39.999Z"})||!KK(function(){Vy.call(new Date(NaN))})?function(){if(!GjA(LjA(this)))throw new wjA("Invalid time value");var A=this,I=TjA(A),g=FjA(A),C=I<0?"-":I>9999?"+":"";return C+Bt(RjA(I),C?6:4,0)+"-"+Bt(kjA(A)+1,2,0)+"-"+Bt(SjA(A),2,0)+"T"+Bt(pjA(A),2,0)+":"+Bt(UjA(A),2,0)+":"+Bt(YjA(A),2,0)+"."+Bt(g,3,0)+"Z"}:Vy,ZjA=rA,n4=ig,KjA=Ri,WjA=J5,JjA=NjA,VjA=wE,zjA=_A,MjA=zjA(function(){return new Date(NaN).toJSON()!==null||n4(Date.prototype.toJSON,{toISOString:function(){return 1}})!==1});ZjA({target:"Date",proto:!0,forced:MjA},{toJSON:function(A){var I=KjA(this),g=WjA(I,"number");return typeof g!="number"||isFinite(g)?"toISOString"in I||VjA(I)!=="Date"?I.toISOString():n4(JjA,I):null}});var oR=sg,fjA=ov;oR.JSON||(oR.JSON={stringify:JSON.stringify});var jjA=function(A,I,g){return fjA(oR.JSON.stringify,null,arguments)},XjA=jjA,HjA=XjA,xjA=HjA,OjA=xjA,qjA=OjA,_jA=qjA,$jA=_jA,AXA=$jA,rR=KA(AXA),IXA=rA,gXA=BI,CXA=qS,QXA=RangeError,WK=String.fromCharCode,JK=String.fromCodePoint,iXA=gXA([].join),BXA=!!JK&&JK.length!==1;IXA({target:"String",stat:!0,forced:BXA},{fromCodePoint:function(A){for(var I,g=[],C=arguments.length,Q=0;C>Q;){if(I=+arguments[Q++],CXA(I,1114111)!==I)throw new QXA(I+" is not a valid code point");g[Q]=I<65536?WK(I):WK(55296+((I-=65536)>>10),I%1024+56320)}return iXA(g,"")}});var EXA=_A,eXA=WI,tXA=OI,VK=fS,oXA=eXA("iterator"),hh=!EXA(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),I=A.searchParams,g=new URLSearchParams("a=1&a=2&b=3"),C="";return A.pathname="c%20d",I.forEach(function(Q,i){I.delete("b"),C+=i+Q}),g.delete("a",2),g.delete("b",void 0),VK&&(!A.toJSON||!g.has("a",1)||g.has("a",2)||!g.has("a",void 0)||g.has("b"))||!I.size&&(VK||!tXA)||!I.sort||A.href!=="https://a/c%20d?a=1&c=3"||I.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!I[oXA]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||C!=="a1c3"||new URL("https://x",void 0).host!=="x"}),zK=je,rXA=Math.floor,sR=function(A,I){var g=A.length;if(g<8)for(var C,Q,i=1;i0;)A[Q]=A[--Q];Q!==i++&&(A[Q]=C)}else for(var B=rXA(g/2),E=sR(zK(A,0,B),I),e=sR(zK(A,B),I),t=E.length,o=e.length,r=0,s=0;r0&&A&g;g>>=1)I++;return I},ZXA=function(A){var I=null;switch(A.length){case 1:I=A[0];break;case 2:I=(31&A[0])<<6|63&A[1];break;case 3:I=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:I=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return I>1114111?null:I},A8=function(A){for(var I=(A=u4(A,kXA," ")).length,g="",C=0;CI){g+="%",C++;continue}var i=$K(A,C+1);if(i!=i){g+=Q,C++;continue}C+=2;var B=NXA(i);if(B===0)Q=SXA(i);else{if(B===1||B>4){g+=jy,C++;continue}for(var E=[i],e=1;eI||m9(A,C)!=="%");){var t=$K(A,C+1);if(t!=t){C+=3;break}if(t>191||t<128)break;ve(E,t),C+=2,e++}if(E.length!==B){g+=jy;continue}var o=ZXA(E);o===null?g+=jy:Q=TXA(o)}}g+=Q,C++}return g},KXA=/[!'()~]|%20/g,WXA={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},JXA=function(A){return WXA[A]},I8=function(A){return u4(LXA(A),KXA,JXA)},Xy=lXA(function(A,I){h4(this,{type:d4,target:$Q(A).entries,index:0,kind:I})},Ns,function(){var A=GXA(this),I=A.target,g=A.index++;if(!I||g>=I.length)return A.target=null,cP(void 0,!0);var C=I[g];switch(A.kind){case"keys":return cP(C.key,!1);case"values":return cP(C.value,!1)}return cP([C.key,C.value],!1)},!0),b4=function(A){this.entries=[],this.url=null,A!==void 0&&(P4(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?m9(A,0)==="?"?D4(A,1):A:mC(A)))};b4.prototype={type:Ns,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var I,g,C,Q,i,B,E,e=this.entries,t=bXA(A);if(t)for(g=(I=XK(A,t)).next;!(C=nP(g,I)).done;){if(i=(Q=XK(uXA(C.value))).next,(B=nP(i,Q)).done||(E=nP(i,Q)).done||!nP(i,Q).done)throw new RXA("Expected sequence with length 2");ve(e,{key:mC(B.value),value:mC(E.value)})}else for(var o in A)PXA(A,o)&&ve(e,{key:o,value:mC(A[o])})},parseQuery:function(A){if(A)for(var I,g,C=this.entries,Q=_K(A,"&"),i=0;i0?arguments[0]:void 0));pa||(this.size=A.entries.length)},Dr=x0.prototype;if(nXA(Dr,{append:function(A,I){var g=$Q(this);ir(arguments.length,2),ve(g.entries,{key:mC(A),value:mC(I)}),pa||this.length++,g.updateURL()},delete:function(A){for(var I=$Q(this),g=ir(arguments.length,1),C=I.entries,Q=mC(A),i=g<2?void 0:arguments[1],B=i===void 0?i:mC(i),E=0;Eg.key?1:-1}),A.updateURL()},forEach:function(A){for(var I,g=$Q(this).entries,C=dXA(A,arguments.length>1?arguments[1]:void 0),Q=0;Q1?g8(arguments[1]):{})}}),My(H0)){var Hy=function(A){return l4(this,fy),new H0(A,arguments.length>1?g8(arguments[1]):{})};fy.constructor=Hy,Hy.prototype=fy,zy({global:!0,dontCallGetSet:!0,forced:!0},{Request:Hy})}}var HQ,MXA={URLSearchParams:x0,getState:$Q},C8=OI,fXA=BI,jXA=ig,XXA=_A,xy=th,HXA=pc,xXA=Ch,OXA=Ri,qXA=zS,Br=Object.assign,Q8=Object.defineProperty,_XA=fXA([].concat),$XA=!Br||XXA(function(){if(C8&&Br({b:1},Br(Q8({},"a",{enumerable:!0,get:function(){Q8(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},I={},g=Symbol("assign detection"),C="abcdefghijklmnopqrst";return A[g]=7,C.split("").forEach(function(Q){I[Q]=Q}),Br({},A)[g]!==7||xy(Br({},I)).join("")!==C})?function(A,I){for(var g=OXA(A),C=arguments.length,Q=1,i=HXA.f,B=xXA.f;C>Q;)for(var E,e=qXA(arguments[Q++]),t=i?_XA(xy(e),i(e)):xy(e),o=t.length,r=0;o>r;)E=t[r++],C8&&!jXA(B,e,E)||(g[E]=e[E]);return g}:Br,bo=BI,Oy=2147483647,sn=36,y4=1,vR=26,A5A=38,I5A=700,g5A=72,C5A=128,Q5A="-",i5A=/[^\0-\u007E]/,m4=/[.\u3002\uFF0E\uFF61]/g,i8="Overflow: input needs wider integers to process",qy=sn-y4,B8=RangeError,B5A=bo(m4.exec),xr=Math.floor,_y=String.fromCharCode,E8=bo("".charCodeAt),w4=bo([].join),ae=bo([].push),E5A=bo("".replace),e5A=bo("".split),t5A=bo("".toLowerCase),o5A=function(A){for(var I=[],g=0,C=A.length;g=55296&&Q<=56319&&g>1,A+=xr(A/I);A>qy*vR>>1;)A=xr(A/qy),C+=sn;return xr(C+(qy+1)*A/(A+A5A))},s5A=function(A){var I,g,C=[],Q=(A=o5A(A)).length,i=C5A,B=0,E=g5A;for(I=0;I=i&&gxr((Oy-B)/r))throw new B8(i8);for(B+=(o-i)*r,i=o,I=0;IOy)throw new B8(i8);if(g===i){for(var s=B,v=sn;;){var n=v<=E?y4:v>=E+vR?vR:v-E;if(s?@[\\\]^|]/,Y5A=/[\0\t\n\r #/:<>?@[\\\]^|]/,N5A=/^[\u0000-\u0020]+/,Z5A=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,K5A=/[\t\n\r]/g,W5A=function(A){var I,g,C,Q,i,B,E,e=R5A(A,".");if(e.length&&e[e.length-1]===""&&e.length--,(I=e.length)>4)return A;for(g=[],C=0;C1&&ti(Q,0)==="0"&&(i=Xi(p5A,Q)?16:8,Q=vn(Q,i===8?1:2)),Q==="")B=0;else{if(!Xi(i===10?U5A:i===8?F5A:S4,Q))return A;B=q0(Q,i)}br(g,B)}for(C=0;C=o8(256,5-I))return null}else if(B>255)return null;for(E=w5A(g),C=0;C6))return;for(C=0;s();){if(Q=null,C>0){if(!(s()==="."&&C<4))return;r++}if(!Xi(cR,s()))return;for(;Xi(cR,s());){if(i=q0(s(),10),Q===null)Q=i;else{if(Q===0)return;Q=10*Q+i}if(Q>255)return;r++}e[t]=256*e[t]+Q,++C!==2&&C!==4||t++}if(C!==4)return;break}if(s()===":"){if(r++,!s())return}else if(s())return;e[t++]=I}else{if(o!==null)return;r++,o=++t}}if(o!==null)for(B=t-o,t=7;t!==0&&B>0;)E=e[t],e[t--]=e[o+B-1],e[o+--B]=E;else if(t!==8)return;return e},V5A=function(A){for(var I=null,g=1,C=null,Q=0,i=0;i<8;i++)A[i]!==0?(Q>g&&(I=C,g=Q),C=null,Q=0):(C===null&&(C=i),++Q);return Q>g?C:I},oa=function(A){var I,g,C,Q;if(typeof A=="number"){for(I=[],g=0;g<4;g++)L5A(I,A%256),A=y5A(A/256);return Fa(I,".")}if(typeof A=="object"){for(I="",C=V5A(A),g=0;g<8;g++)Q&&A[g]===0||(Q&&(Q=!1),C===g?(I+=g?":":"::",Q=!0):(I+=m5A(A[g],16),g<7&&(I+=":")));return"["+I+"]"}return A},w9={},T4=T2({},w9,{" ":1,'"':1,"<":1,">":1,"`":1}),p4=T2({},T4,{"#":1,"?":1,"{":1,"}":1}),Im=T2({},p4,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ZE=function(A,I){var g=l5A(A,0);return g>32&&g<127&&!aR(I,A)?A:encodeURIComponent(A)},PP={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Ua=function(A,I){var g;return A.length===2&&Xi(L4,ti(A,0))&&((g=ti(A,1))===":"||!I&&g==="|")},s8=function(A){var I;return A.length>1&&Ua(vn(A,0,2))&&(A.length===2||(I=ti(A,2))==="/"||I==="\\"||I==="?"||I==="#")},z5A=function(A){return A==="."||_0(A)==="%2e"},M5A=function(A){return(A=_0(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},gm={},v8={},Cm={},a8={},n8={},Qm={},c8={},l8={},dP={},hP={},im={},Bm={},Em={},em={},P8={},tm={},er={},hB={},d8={},et={},OB={},p2=function(A,I,g){var C,Q,i,B=AE(A);if(I){if(Q=this.parse(B))throw new nR(Q);this.searchParams=null}else{if(g!==void 0&&(C=new p2(g,!0)),Q=this.parse(B,null,C))throw new nR(Q);(i=b5A(new D5A)).bindURL(this),this.searchParams=i}};p2.prototype={type:"URL",parse:function(A,I,g){var C,Q,i,B,E=this,e=I||gm,t=0,o="",r=!1,s=!1,v=!1;for(A=AE(A),I||(E.scheme="",E.username="",E.password="",E.host=null,E.port=null,E.path=[],E.query=null,E.fragment=null,E.cannotBeABaseURL=!1,A=$y(A,N5A,""),A=$y(A,Z5A,"$1")),A=$y(A,K5A,""),C=Er(A);t<=C.length;){switch(Q=C[t],e){case gm:if(!Q||!Xi(L4,Q)){if(I)return Am;e=Cm;continue}o+=_0(Q),e=v8;break;case v8:if(Q&&(Xi(T5A,Q)||Q==="+"||Q==="-"||Q==="."))o+=_0(Q);else{if(Q!==":"){if(I)return Am;o="",e=Cm,t=0;continue}if(I&&(E.isSpecial()!==aR(PP,o)||o==="file"&&(E.includesCredentials()||E.port!==null)||E.scheme==="file"&&!E.host))return;if(E.scheme=o,I)return void(E.isSpecial()&&PP[E.scheme]===E.port&&(E.port=null));o="",E.scheme==="file"?e=em:E.isSpecial()&&g&&g.scheme===E.scheme?e=a8:E.isSpecial()?e=l8:C[t+1]==="/"?(e=n8,t++):(E.cannotBeABaseURL=!0,br(E.path,""),e=d8)}break;case Cm:if(!g||g.cannotBeABaseURL&&Q!=="#")return Am;if(g.cannotBeABaseURL&&Q==="#"){E.scheme=g.scheme,E.path=ki(g.path),E.query=g.query,E.fragment="",E.cannotBeABaseURL=!0,e=OB;break}e=g.scheme==="file"?em:Qm;continue;case a8:if(Q!=="/"||C[t+1]!=="/"){e=Qm;continue}e=dP,t++;break;case n8:if(Q==="/"){e=hP;break}e=hB;continue;case Qm:if(E.scheme=g.scheme,Q===HQ)E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=ki(g.path),E.query=g.query;else if(Q==="/"||Q==="\\"&&E.isSpecial())e=c8;else if(Q==="?")E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=ki(g.path),E.query="",e=et;else{if(Q!=="#"){E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=ki(g.path),E.path.length--,e=hB;continue}E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,E.path=ki(g.path),E.query=g.query,E.fragment="",e=OB}break;case c8:if(!E.isSpecial()||Q!=="/"&&Q!=="\\"){if(Q!=="/"){E.username=g.username,E.password=g.password,E.host=g.host,E.port=g.port,e=hB;continue}e=hP}else e=dP;break;case l8:if(e=dP,Q!=="/"||ti(o,t+1)!=="/")continue;t++;break;case dP:if(Q!=="/"&&Q!=="\\"){e=hP;continue}break;case hP:if(Q==="@"){r&&(o="%40"+o),r=!0,i=Er(o);for(var n=0;n65535)return r8;E.port=E.isSpecial()&&P===PP[E.scheme]?null:P,o=""}if(I)return;e=er;continue}return r8}o+=Q;break;case em:if(E.scheme="file",Q==="/"||Q==="\\")e=P8;else{if(!g||g.scheme!=="file"){e=hB;continue}switch(Q){case HQ:E.host=g.host,E.path=ki(g.path),E.query=g.query;break;case"?":E.host=g.host,E.path=ki(g.path),E.query="",e=et;break;case"#":E.host=g.host,E.path=ki(g.path),E.query=g.query,E.fragment="",e=OB;break;default:s8(Fa(ki(C,t),""))||(E.host=g.host,E.path=ki(g.path),E.shortenPath()),e=hB;continue}}break;case P8:if(Q==="/"||Q==="\\"){e=tm;break}g&&g.scheme==="file"&&!s8(Fa(ki(C,t),""))&&(Ua(g.path[0],!0)?br(E.path,g.path[0]):E.host=g.host),e=hB;continue;case tm:if(Q===HQ||Q==="/"||Q==="\\"||Q==="?"||Q==="#"){if(!I&&Ua(o))e=hB;else if(o===""){if(E.host="",I)return;e=er}else{if(B=E.parseHost(o))return B;if(E.host==="localhost"&&(E.host=""),I)return;o="",e=er}continue}o+=Q;break;case er:if(E.isSpecial()){if(e=hB,Q!=="/"&&Q!=="\\")continue}else if(I||Q!=="?")if(I||Q!=="#"){if(Q!==HQ&&(e=hB,Q!=="/"))continue}else E.fragment="",e=OB;else E.query="",e=et;break;case hB:if(Q===HQ||Q==="/"||Q==="\\"&&E.isSpecial()||!I&&(Q==="?"||Q==="#")){if(M5A(o)?(E.shortenPath(),Q==="/"||Q==="\\"&&E.isSpecial()||br(E.path,"")):z5A(o)?Q==="/"||Q==="\\"&&E.isSpecial()||br(E.path,""):(E.scheme==="file"&&!E.path.length&&Ua(o)&&(E.host&&(E.host=""),o=ti(o,0)+":"),br(E.path,o)),o="",E.scheme==="file"&&(Q===HQ||Q==="?"||Q==="#"))for(;E.path.length>1&&E.path[0]==="";)G5A(E.path);Q==="?"?(E.query="",e=et):Q==="#"&&(E.fragment="",e=OB)}else o+=ZE(Q,p4);break;case d8:Q==="?"?(E.query="",e=et):Q==="#"?(E.fragment="",e=OB):Q!==HQ&&(E.path[0]+=ZE(Q,w9));break;case et:I||Q!=="#"?Q!==HQ&&(Q==="'"&&E.isSpecial()?E.query+="%27":E.query+=Q==="#"?"%23":ZE(Q,w9)):(E.fragment="",e=OB);break;case OB:Q!==HQ&&(E.fragment+=ZE(Q,T4))}t++}},parseHost:function(A){var I,g,C;if(ti(A,0)==="["){if(ti(A,A.length-1)!=="]"||!(I=J5A(vn(A,1,-1))))return Et;this.host=I}else if(this.isSpecial()){if(A=P5A(A),Xi(k5A,A)||(I=W5A(A))===null)return Et;this.host=I}else{if(Xi(Y5A,A))return Et;for(I="",g=Er(A),C=0;C1?arguments[1]:void 0,C=u5A(I,new p2(A,!1,g));L2||(I.href=C.serialize(),I.origin=C.getOrigin(),I.protocol=C.getProtocol(),I.username=C.getUsername(),I.password=C.getPassword(),I.host=C.getHost(),I.hostname=C.getHostname(),I.port=C.getPort(),I.pathname=C.getPathname(),I.search=C.getSearch(),I.searchParams=C.getSearchParams(),I.hash=C.getHash())},bC=Zs.prototype,OQ=function(A,I){return{get:function(){return O0(this)[A]()},set:I&&function(g){return O0(this)[I](g)},configurable:!0,enumerable:!0}};if(L2&&(xQ(bC,"href",OQ("serialize","setHref")),xQ(bC,"origin",OQ("getOrigin")),xQ(bC,"protocol",OQ("getProtocol","setProtocol")),xQ(bC,"username",OQ("getUsername","setUsername")),xQ(bC,"password",OQ("getPassword","setPassword")),xQ(bC,"host",OQ("getHost","setHost")),xQ(bC,"hostname",OQ("getHostname","setHostname")),xQ(bC,"port",OQ("getPort","setPort")),xQ(bC,"pathname",OQ("getPathname","setPathname")),xQ(bC,"search",OQ("getSearch","setSearch")),xQ(bC,"searchParams",OQ("getSearchParams")),xQ(bC,"hash",OQ("getHash","setHash"))),lP(bC,"toJSON",function(){return O0(this).serialize()},{enumerable:!0}),lP(bC,"toString",function(){return O0(this).serialize()},{enumerable:!0}),ta){var h8=ta.createObjectURL,u8=ta.revokeObjectURL;h8&&lP(Zs,"createObjectURL",t8(h8,ta)),u8&&lP(Zs,"revokeObjectURL",t8(u8,ta))}d5A(Zs,"URL"),a5A({global:!0,forced:!n5A,sham:!L2},{URL:Zs});var f5A=rA,j5A=Lg,F4=_A,X5A=Wc,D8=Li,H5A=hh,F2=j5A("URL"),x5A=H5A&&F4(function(){F2.canParse()}),O5A=F4(function(){return F2.canParse.length!==1});f5A({target:"URL",stat:!0,forced:!x5A||O5A},{canParse:function(A){var I=X5A(arguments.length,1),g=D8(A),C=I<2||arguments[1]===void 0?void 0:D8(arguments[1]);try{return!!new F2(g,C)}catch{return!1}}});var q5A=rA,_5A=Lg,$5A=Wc,b8=Li,A3A=hh,I3A=_5A("URL");q5A({target:"URL",stat:!0,forced:!A3A},{parse:function(A){var I=$5A(arguments.length,1),g=b8(A),C=I<2||arguments[1]===void 0?void 0:b8(arguments[1]);try{return new I3A(g,C)}catch{return null}}});var g3A=sg,C3A=g3A.URL,Q3A=C3A,i3A=Q3A,B3A=i3A,E3A=B3A,e3A=E3A,t3A=e3A,o3A=t3A,r3A=o3A,y8=KA(r3A),s3A=rA,v3A=K0,a3A=g3.indexOf,n3A=sH,lR=v3A([].indexOf),U4=!!lR&&1/lR([1],1,-0)<0,c3A=U4||!n3A("indexOf");s3A({target:"Array",proto:!0,forced:c3A},{indexOf:function(A){var I=arguments.length>1?arguments[1]:void 0;return U4?lR(this,A,I)||0:a3A(this,A,I)}});var l3A=Oe,P3A=l3A("Array","indexOf"),d3A=WQ,h3A=P3A,om=Array.prototype,u3A=function(A){var I=A.indexOf;return A===om||d3A(om,A)&&I===om.indexOf?h3A:I},D3A=u3A,b3A=D3A,y3A=b3A,m3A=y3A,w3A=m3A,G3A=w3A,R3A=G3A,L3A=R3A,S3A=KA(L3A),k4="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fXZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PT1NYXRoJiZ0fSxuPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2YgdCYmdCl8fHIoIm9iamVjdCI9PXR5cGVvZiB0JiZ0KXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19LGk9IW8oKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdHx8dC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksYT1pLHU9RnVuY3Rpb24ucHJvdG90eXBlLGM9dS5hcHBseSxzPXUuY2FsbCxmPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGE/cy5iaW5kKGMpOmZ1bmN0aW9uKCl7cmV0dXJuIHMuYXBwbHkoYyxhcmd1bWVudHMpfSksbD1pLGg9RnVuY3Rpb24ucHJvdG90eXBlLHA9aC5jYWxsLHY9bCYmaC5iaW5kLmJpbmQocCxwKSxkPWw/djpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0LGFyZ3VtZW50cyl9fSx5PWQsZz15KHt9LnRvU3RyaW5nKSxtPXkoIiIuc2xpY2UpLGI9ZnVuY3Rpb24odCl7cmV0dXJuIG0oZyh0KSw4LC0xKX0sdz1iLE89ZCxTPWZ1bmN0aW9uKHQpe2lmKCJGdW5jdGlvbiI9PT13KHQpKXJldHVybiBPKHQpfSxFPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxUPXZvaWQgMD09PUUmJnZvaWQgMCE9PUU/ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR8fHQ9PT1FfTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH0seD17fSxqPSFvKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLE09aSxrPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLEE9TT9rLmJpbmQoayk6ZnVuY3Rpb24oKXtyZXR1cm4gay5hcHBseShrLGFyZ3VtZW50cyl9LFA9e30sTD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxSPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTj1SJiYhTC5jYWxsKHsxOjJ9LDEpO1AuZj1OP2Z1bmN0aW9uKHQpe3ZhciBlPVIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06TDt2YXIgXyxDLEY9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19LEk9byxEPWIsVT1PYmplY3Qsej1kKCIiLnNwbGl0KSxCPUkoKGZ1bmN0aW9uKCl7cmV0dXJuIVUoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09PUQodCk/eih0LCIiKTpVKHQpfTpVLEc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LEg9RyxXPVR5cGVFcnJvcixKPWZ1bmN0aW9uKHQpe2lmKEgodCkpdGhyb3cgbmV3IFcoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9LEs9QixWPUoscT1mdW5jdGlvbih0KXtyZXR1cm4gSyhWKHQpKX0sWT1ULFg9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OlkodCl9LFo9e30sJD1aLFE9bix0dD1ULGV0PWZ1bmN0aW9uKHQpe3JldHVybiB0dCh0KT90OnZvaWQgMH0scnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2V0KCRbdF0pfHxldChRW3RdKTokW3RdJiYkW3RdW2VdfHxRW3RdJiZRW3RdW2VdfSxudD1kKHt9LmlzUHJvdG90eXBlT2YpLG90PW4ubmF2aWdhdG9yLGl0PW90JiZvdC51c2VyQWdlbnQsYXQ9aXQ/U3RyaW5nKGl0KToiIix1dD1uLGN0PWF0LHN0PXV0LnByb2Nlc3MsZnQ9dXQuRGVubyxsdD1zdCYmc3QudmVyc2lvbnN8fGZ0JiZmdC52ZXJzaW9uLGh0PWx0JiZsdC52ODtodCYmKEM9KF89aHQuc3BsaXQoIi4iKSlbMF0+MCYmX1swXTw0PzE6KyhfWzBdK19bMV0pKSwhQyYmY3QmJighKF89Y3QubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxfWzFdPj03NCkmJihfPWN0Lm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoQz0rX1sxXSk7dmFyIHB0PUMsdnQ9cHQsZHQ9byx5dD1uLlN0cmluZyxndD0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFkdCgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4heXQodCl8fCEoT2JqZWN0KHQpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJnZ0JiZ2dDw0MX0pKSxtdD1ndCYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcixidD1ydCx3dD1ULE90PW50LFN0PU9iamVjdCxFdD1tdD9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPWJ0KCJTeW1ib2wiKTtyZXR1cm4gd3QoZSkmJk90KGUucHJvdG90eXBlLFN0KHQpKX0sVHQ9U3RyaW5nLHh0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gVHQodCl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fSxqdD1ULE10PXh0LGt0PVR5cGVFcnJvcixBdD1mdW5jdGlvbih0KXtpZihqdCh0KSlyZXR1cm4gdDt0aHJvdyBuZXcga3QoTXQodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfSxQdD1BdCxMdD1HLFJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlXTtyZXR1cm4gTHQocik/dm9pZCAwOlB0KHIpfSxOdD1BLF90PVQsQ3Q9WCxGdD1UeXBlRXJyb3IsSXQ9e2V4cG9ydHM6e319LER0PW4sVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LHp0PW4sQnQ9ZnVuY3Rpb24odCxlKXt0cnl7VXQoRHQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtEdFt0XT1lfXJldHVybiBlfSxHdD0iX19jb3JlLWpzX3NoYXJlZF9fIixIdD1JdC5leHBvcnRzPXp0W0d0XXx8QnQoR3Qse30pOyhIdC52ZXJzaW9uc3x8KEh0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIFd0PUl0LmV4cG9ydHMsSnQ9V3QsS3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSnRbdF18fChKdFt0XT1lfHx7fSl9LFZ0PUoscXQ9T2JqZWN0LFl0PWZ1bmN0aW9uKHQpe3JldHVybiBxdChWdCh0KSl9LFh0PVl0LFp0PWQoe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFp0KFh0KHQpLGUpfSxRdD1kLHRlPTAsZWU9TWF0aC5yYW5kb20oKSxyZT1RdCgxLi50b1N0cmluZyksbmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrcmUoKyt0ZStlZSwzNil9LG9lPUt0LGllPSR0LGFlPW5lLHVlPWd0LGNlPW10LHNlPW4uU3ltYm9sLGZlPW9lKCJ3a3MiKSxsZT1jZT9zZS5mb3J8fHNlOnNlJiZzZS53aXRob3V0U2V0dGVyfHxhZSxoZT1mdW5jdGlvbih0KXtyZXR1cm4gaWUoZmUsdCl8fChmZVt0XT11ZSYmaWUoc2UsdCk/c2VbdF06bGUoIlN5bWJvbC4iK3QpKSxmZVt0XX0scGU9QSx2ZT1YLGRlPUV0LHllPVJ0LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIj09PWUmJl90KHI9dC50b1N0cmluZykmJiFDdChuPU50KHIsdCkpKXJldHVybiBuO2lmKF90KHI9dC52YWx1ZU9mKSYmIUN0KG49TnQocix0KSkpcmV0dXJuIG47aWYoInN0cmluZyIhPT1lJiZfdChyPXQudG9TdHJpbmcpJiYhQ3Qobj1OdChyLHQpKSlyZXR1cm4gbjt0aHJvdyBuZXcgRnQoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfSxtZT1UeXBlRXJyb3IsYmU9aGUoInRvUHJpbWl0aXZlIiksd2U9ZnVuY3Rpb24odCxlKXtpZighdmUodCl8fGRlKHQpKXJldHVybiB0O3ZhciByLG49eWUodCxiZSk7aWYobil7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPXBlKG4sdCxlKSwhdmUocil8fGRlKHIpKXJldHVybiByO3Rocm93IG5ldyBtZSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PWUmJihlPSJudW1iZXIiKSxnZSh0LGUpfSxPZT13ZSxTZT1FdCxFZT1mdW5jdGlvbih0KXt2YXIgZT1PZSh0LCJzdHJpbmciKTtyZXR1cm4gU2UoZSk/ZTplKyIifSxUZT1YLHhlPW4uZG9jdW1lbnQsamU9VGUoeGUpJiZUZSh4ZS5jcmVhdGVFbGVtZW50KSxNZT1mdW5jdGlvbih0KXtyZXR1cm4gamU/eGUuY3JlYXRlRWxlbWVudCh0KTp7fX0sa2U9TWUsQWU9IWomJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGtlKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSksUGU9aixMZT1BLFJlPVAsTmU9RixfZT1xLENlPUVlLEZlPSR0LEllPUFlLERlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7eC5mPVBlP0RlOmZ1bmN0aW9uKHQsZSl7aWYodD1fZSh0KSxlPUNlKGUpLEllKXRyeXtyZXR1cm4gRGUodCxlKX1jYXRjaChyKXt9aWYoRmUodCxlKSlyZXR1cm4gTmUoIUxlKFJlLmYsdCxlKSx0W2VdKX07dmFyIFVlPW8semU9VCxCZT0vI3xcLnByb3RvdHlwZVwuLyxHZT1mdW5jdGlvbih0LGUpe3ZhciByPVdlW0hlKHQpXTtyZXR1cm4gcj09PUtlfHxyIT09SmUmJih6ZShlKT9VZShlKTohIWUpfSxIZT1HZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKEJlLCIuIikudG9Mb3dlckNhc2UoKX0sV2U9R2UuZGF0YT17fSxKZT1HZS5OQVRJVkU9Ik4iLEtlPUdlLlBPTFlGSUxMPSJQIixWZT1HZSxxZT1BdCxZZT1pLFhlPVMoUy5iaW5kKSxaZT1mdW5jdGlvbih0LGUpe3JldHVybiBxZSh0KSx2b2lkIDA9PT1lP3Q6WWU/WGUodCxlKTpmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19LCRlPXt9LFFlPWomJm8oKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT09T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKSx0cj1YLGVyPVN0cmluZyxycj1UeXBlRXJyb3IsbnI9ZnVuY3Rpb24odCl7aWYodHIodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IHJyKGVyKHQpKyIgaXMgbm90IGFuIG9iamVjdCIpfSxvcj1qLGlyPUFlLGFyPVFlLHVyPW5yLGNyPUVlLHNyPVR5cGVFcnJvcixmcj1PYmplY3QuZGVmaW5lUHJvcGVydHksbHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixocj0iZW51bWVyYWJsZSIscHI9ImNvbmZpZ3VyYWJsZSIsdnI9IndyaXRhYmxlIjskZS5mPW9yP2FyP2Z1bmN0aW9uKHQsZSxyKXtpZih1cih0KSxlPWNyKGUpLHVyKHIpLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYicHJvdG90eXBlIj09PWUmJiJ2YWx1ZSJpbiByJiZ2ciBpbiByJiYhclt2cl0pe3ZhciBuPWxyKHQsZSk7biYmblt2cl0mJih0W2VdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOnByIGluIHI/cltwcl06bltwcl0sZW51bWVyYWJsZTpociBpbiByP3JbaHJdOm5baHJdLHdyaXRhYmxlOiExfSl9cmV0dXJuIGZyKHQsZSxyKX06ZnI6ZnVuY3Rpb24odCxlLHIpe2lmKHVyKHQpLGU9Y3IoZSksdXIociksaXIpdHJ5e3JldHVybiBmcih0LGUscil9Y2F0Y2gobil7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IG5ldyBzcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKHRbZV09ci52YWx1ZSksdH07dmFyIGRyPSRlLHlyPUYsZ3I9aj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGRyLmYodCxlLHlyKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fSxtcj1uLGJyPWYsd3I9UyxPcj1ULFNyPXguZixFcj1WZSxUcj1aLHhyPVplLGpyPWdyLE1yPSR0LGtyPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHIsbixvKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChyKTtjYXNlIDI6cmV0dXJuIG5ldyB0KHIsbil9cmV0dXJuIG5ldyB0KHIsbixvKX1yZXR1cm4gYnIodCx0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlLnByb3RvdHlwZT10LnByb3RvdHlwZSxlfSxBcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sbyxpLGEsdSxjLHMsZixsPXQudGFyZ2V0LGg9dC5nbG9iYWwscD10LnN0YXQsdj10LnByb3RvLGQ9aD9tcjpwP21yW2xdOm1yW2xdJiZtcltsXS5wcm90b3R5cGUseT1oP1RyOlRyW2xdfHxqcihUcixsLHt9KVtsXSxnPXkucHJvdG90eXBlO2ZvcihpIGluIGUpbj0hKHI9RXIoaD9pOmwrKHA/Ii4iOiIjIikraSx0LmZvcmNlZCkpJiZkJiZNcihkLGkpLHU9eVtpXSxuJiYoYz10LmRvbnRDYWxsR2V0U2V0PyhmPVNyKGQsaSkpJiZmLnZhbHVlOmRbaV0pLGE9biYmYz9jOmVbaV0sKHJ8fHZ8fHR5cGVvZiB1IT10eXBlb2YgYSkmJihzPXQuYmluZCYmbj94cihhLG1yKTp0LndyYXAmJm4/a3IoYSk6diYmT3IoYSk/d3IoYSk6YSwodC5zaGFtfHxhJiZhLnNoYW18fHUmJnUuc2hhbSkmJmpyKHMsInNoYW0iLCEwKSxqcih5LGkscyksdiYmKE1yKFRyLG89bCsiUHJvdG90eXBlIil8fGpyKFRyLG8se30pLGpyKFRyW29dLGksYSksdC5yZWFsJiZnJiYocnx8IWdbaV0pJiZqcihnLGksYSkpKX0sUHI9e307UHJbaGUoInRvU3RyaW5nVGFnIildPSJ6Ijt2YXIgTHI9IltvYmplY3Qgel0iPT09U3RyaW5nKFByKSxScj1McixOcj1ULF9yPWIsQ3I9aGUoInRvU3RyaW5nVGFnIiksRnI9T2JqZWN0LElyPSJBcmd1bWVudHMiPT09X3IoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxEcj1Scj9fcjpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaChyKXt9fShlPUZyKHQpLENyKSk/cjpJcj9fcihlKToiT2JqZWN0Ij09PShuPV9yKGUpKSYmTnIoZS5jYWxsZWUpPyJBcmd1bWVudHMiOm59LFVyPURyLHpyPVN0cmluZyxCcj1mdW5jdGlvbih0KXtpZigiU3ltYm9sIj09PVVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIHpyKHQpfSxHcj17fSxIcj1NYXRoLmNlaWwsV3I9TWF0aC5mbG9vcixKcj1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgZT0rdDtyZXR1cm4oZT4wP1dyOkhyKShlKX0sS3I9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6SnIoZSl9LFZyPUtyLHFyPU1hdGgubWF4LFlyPU1hdGgubWluLFhyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9VnIodCk7cmV0dXJuIHI8MD9xcihyK2UsMCk6WXIocixlKX0sWnI9S3IsJHI9TWF0aC5taW4sUXI9ZnVuY3Rpb24odCl7dmFyIGU9WnIodCk7cmV0dXJuIGU+MD8kcihlLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHRuPVFyLGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0bih0Lmxlbmd0aCl9LHJuPXEsbm49WHIsb249ZW4sYW49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgbz1ybihlKSxpPW9uKG8pO2lmKDA9PT1pKXJldHVybiF0JiYtMTt2YXIgYSx1PW5uKG4saSk7aWYodCYmciE9cil7Zm9yKDtpPnU7KWlmKChhPW9bdSsrXSkhPWEpcmV0dXJuITB9ZWxzZSBmb3IoO2k+dTt1KyspaWYoKHR8fHUgaW4gbykmJm9bdV09PT1yKXJldHVybiB0fHx1fHwwO3JldHVybiF0JiYtMX19LHVuPXtpbmNsdWRlczphbighMCksaW5kZXhPZjphbighMSl9LGNuPXt9LHNuPSR0LGZuPXEsbG49dW4uaW5kZXhPZixobj1jbixwbj1kKFtdLnB1c2gpLHZuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1mbih0KSxvPTAsaT1bXTtmb3IociBpbiBuKSFzbihobixyKSYmc24obixyKSYmcG4oaSxyKTtmb3IoO2UubGVuZ3RoPm87KXNuKG4scj1lW28rK10pJiYofmxuKGkscil8fHBuKGkscikpO3JldHVybiBpfSxkbj1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdLHluPXZuLGduPWRuLG1uPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4geW4odCxnbil9LGJuPWosd249UWUsT249JGUsU249bnIsRW49cSxUbj1tbjtHci5mPWJuJiYhd24/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtTbih0KTtmb3IodmFyIHIsbj1FbihlKSxvPVRuKGUpLGk9by5sZW5ndGgsYT0wO2k+YTspT24uZih0LHI9b1thKytdLG5bcl0pO3JldHVybiB0fTt2YXIgeG4sam49cnQoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiksTW49bmUsa249S3QoImtleXMiKSxBbj1mdW5jdGlvbih0KXtyZXR1cm4ga25bdF18fChrblt0XT1Nbih0KSl9LFBuPW5yLExuPUdyLFJuPWRuLE5uPWNuLF9uPWpuLENuPU1lLEZuPSJwcm90b3R5cGUiLEluPSJzY3JpcHQiLERuPUFuKCJJRV9QUk9UTyIpLFVuPWZ1bmN0aW9uKCl7fSx6bj1mdW5jdGlvbih0KXtyZXR1cm4iPCIrSW4rIj4iK3QrIjwvIitJbisiPiJ9LEJuPWZ1bmN0aW9uKHQpe3Qud3JpdGUoem4oIiIpKSx0LmNsb3NlKCk7dmFyIGU9dC5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiB0PW51bGwsZX0sR249ZnVuY3Rpb24oKXt0cnl7eG49bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2gobyl7fXZhciB0LGUscjtHbj0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmeG4/Qm4oeG4pOihlPUNuKCJpZnJhbWUiKSxyPSJqYXZhIitJbisiOiIsZS5zdHlsZS5kaXNwbGF5PSJub25lIixfbi5hcHBlbmRDaGlsZChlKSxlLnNyYz1TdHJpbmcociksKHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksdC53cml0ZSh6bigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6Qm4oeG4pO2Zvcih2YXIgbj1Sbi5sZW5ndGg7bi0tOylkZWxldGUgR25bRm5dW1JuW25dXTtyZXR1cm4gR24oKX07Tm5bRG5dPSEwO3ZhciBIbj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8oVW5bRm5dPVBuKHQpLHI9bmV3IFVuLFVuW0ZuXT1udWxsLHJbRG5dPXQpOnI9R24oKSx2b2lkIDA9PT1lP3I6TG4uZihyLGUpfSxXbj17fSxKbj12bixLbj1kbi5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO1duLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiBKbih0LEtuKX07dmFyIFZuPXt9LHFuPWQoW10uc2xpY2UpLFluPWIsWG49cSxabj1Xbi5mLCRuPXFuLFFuPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Vm4uZj1mdW5jdGlvbih0KXtyZXR1cm4gUW4mJiJXaW5kb3ciPT09WW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBabih0KX1jYXRjaChlKXtyZXR1cm4gJG4oUW4pfX0odCk6Wm4oWG4odCkpfTt2YXIgdG89e307dG8uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO3ZhciBlbz1ncixybz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbiYmbi5lbnVtZXJhYmxlP3RbZV09cjplbyh0LGUsciksdH0sbm89JGUsb289ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuby5mKHQsZSxyKX0saW89e30sYW89aGU7aW8uZj1hbzt2YXIgdW8sY28sc28sZm89Wixsbz0kdCxobz1pbyxwbz0kZS5mLHZvPWZ1bmN0aW9uKHQpe3ZhciBlPWZvLlN5bWJvbHx8KGZvLlN5bWJvbD17fSk7bG8oZSx0KXx8cG8oZSx0LHt2YWx1ZTpoby5mKHQpfSl9LHlvPUEsZ289cnQsbW89aGUsYm89cm8sd289ZnVuY3Rpb24oKXt2YXIgdD1nbygiU3ltYm9sIiksZT10JiZ0LnByb3RvdHlwZSxyPWUmJmUudmFsdWVPZixuPW1vKCJ0b1ByaW1pdGl2ZSIpO2UmJiFlW25dJiZibyhlLG4sKGZ1bmN0aW9uKHQpe3JldHVybiB5byhyLHRoaXMpfSkse2FyaXR5OjF9KX0sT289RHIsU289THI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK09vKHRoaXMpKyJdIn0sRW89THIsVG89JGUuZix4bz1ncixqbz0kdCxNbz1Tbyxrbz1oZSgidG9TdHJpbmdUYWciKSxBbz1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1yP3Q6dCYmdC5wcm90b3R5cGU7byYmKGpvKG8sa28pfHxUbyhvLGtvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pLG4mJiFFbyYmeG8obywidG9TdHJpbmciLE1vKSl9LFBvPVQsTG89bi5XZWFrTWFwLFJvPVBvKExvKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhMbykpLE5vPW4sX289WCxDbz1ncixGbz0kdCxJbz1XdCxEbz1BbixVbz1jbix6bz0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLEJvPU5vLlR5cGVFcnJvcixHbz1Oby5XZWFrTWFwO2lmKFJvfHxJby5zdGF0ZSl7dmFyIEhvPUlvLnN0YXRlfHwoSW8uc3RhdGU9bmV3IEdvKTtIby5nZXQ9SG8uZ2V0LEhvLmhhcz1Iby5oYXMsSG8uc2V0PUhvLnNldCx1bz1mdW5jdGlvbih0LGUpe2lmKEhvLmhhcyh0KSl0aHJvdyBuZXcgQm8oem8pO3JldHVybiBlLmZhY2FkZT10LEhvLnNldCh0LGUpLGV9LGNvPWZ1bmN0aW9uKHQpe3JldHVybiBIby5nZXQodCl8fHt9fSxzbz1mdW5jdGlvbih0KXtyZXR1cm4gSG8uaGFzKHQpfX1lbHNle3ZhciBXbz1Ebygic3RhdGUiKTtVb1tXb109ITAsdW89ZnVuY3Rpb24odCxlKXtpZihGbyh0LFdvKSl0aHJvdyBuZXcgQm8oem8pO3JldHVybiBlLmZhY2FkZT10LENvKHQsV28sZSksZX0sY289ZnVuY3Rpb24odCl7cmV0dXJuIEZvKHQsV28pP3RbV29dOnt9fSxzbz1mdW5jdGlvbih0KXtyZXR1cm4gRm8odCxXbyl9fXZhciBKbz17c2V0OnVvLGdldDpjbyxoYXM6c28sZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gc28odCk/Y28odCk6dW8odCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI7aWYoIV9vKGUpfHwocj1jbyhlKSkudHlwZSE9PXQpdGhyb3cgbmV3IEJvKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX0sS289YixWbz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iQXJyYXkiPT09S28odCl9LHFvPVQsWW89V3QsWG89ZChGdW5jdGlvbi50b1N0cmluZyk7cW8oWW8uaW5zcGVjdFNvdXJjZSl8fChZby5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBYbyh0KX0pO3ZhciBabz1Zby5pbnNwZWN0U291cmNlLCRvPWQsUW89byx0aT1ULGVpPURyLHJpPVpvLG5pPWZ1bmN0aW9uKCl7fSxvaT1ydCgiUmVmbGVjdCIsImNvbnN0cnVjdCIpLGlpPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGFpPSRvKGlpLmV4ZWMpLHVpPSFpaS50ZXN0KG5pKSxjaT1mdW5jdGlvbih0KXtpZighdGkodCkpcmV0dXJuITE7dHJ5e3JldHVybiBvaShuaSxbXSx0KSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LHNpPWZ1bmN0aW9uKHQpe2lmKCF0aSh0KSlyZXR1cm4hMTtzd2l0Y2goZWkodCkpe2Nhc2UiQXN5bmNGdW5jdGlvbiI6Y2FzZSJHZW5lcmF0b3JGdW5jdGlvbiI6Y2FzZSJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIjpyZXR1cm4hMX10cnl7cmV0dXJuIHVpfHwhIWFpKGlpLHJpKHQpKX1jYXRjaChlKXtyZXR1cm4hMH19O3NpLnNoYW09ITA7dmFyIGZpPSFvaXx8UW8oKGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGNpKGNpLmNhbGwpfHwhY2koT2JqZWN0KXx8IWNpKChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/c2k6Y2ksbGk9Vm8saGk9ZmkscGk9WCx2aT1oZSgic3BlY2llcyIpLGRpPUFycmF5LHlpPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBsaSh0KSYmKGU9dC5jb25zdHJ1Y3RvciwoaGkoZSkmJihlPT09ZGl8fGxpKGUucHJvdG90eXBlKSl8fHBpKGUpJiZudWxsPT09KGU9ZVt2aV0pKSYmKGU9dm9pZCAwKSksdm9pZCAwPT09ZT9kaTplfSxnaT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcoeWkodCkpKDA9PT1lPzA6ZSl9LG1pPVplLGJpPUIsd2k9WXQsT2k9ZW4sU2k9Z2ksRWk9ZChbXS5wdXNoKSxUaT1mdW5jdGlvbih0KXt2YXIgZT0xPT09dCxyPTI9PT10LG49Mz09PXQsbz00PT09dCxpPTY9PT10LGE9Nz09PXQsdT01PT09dHx8aTtyZXR1cm4gZnVuY3Rpb24oYyxzLGYsbCl7Zm9yKHZhciBoLHAsdj13aShjKSxkPWJpKHYpLHk9T2koZCksZz1taShzLGYpLG09MCxiPWx8fFNpLHc9ZT9iKGMseSk6cnx8YT9iKGMsMCk6dm9pZCAwO3k+bTttKyspaWYoKHV8fG0gaW4gZCkmJihwPWcoaD1kW21dLG0sdiksdCkpaWYoZSl3W21dPXA7ZWxzZSBpZihwKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gbTtjYXNlIDI6RWkodyxoKX1lbHNlIHN3aXRjaCh0KXtjYXNlIDQ6cmV0dXJuITE7Y2FzZSA3OkVpKHcsaCl9cmV0dXJuIGk/LTE6bnx8bz9vOnd9fSx4aT17Zm9yRWFjaDpUaSgwKSxtYXA6VGkoMSksZmlsdGVyOlRpKDIpLHNvbWU6VGkoMyksZXZlcnk6VGkoNCksZmluZDpUaSg1KSxmaW5kSW5kZXg6VGkoNiksZmlsdGVyUmVqZWN0OlRpKDcpfSxqaT1BcixNaT1uLGtpPUEsQWk9ZCxQaT1qLExpPWd0LFJpPW8sTmk9JHQsX2k9bnQsQ2k9bnIsRmk9cSxJaT1FZSxEaT1CcixVaT1GLHppPUhuLEJpPW1uLEdpPVduLEhpPVZuLFdpPXRvLEppPXgsS2k9JGUsVmk9R3IscWk9UCxZaT1ybyxYaT1vbyxaaT1LdCwkaT1jbixRaT1uZSx0YT1oZSxlYT1pbyxyYT12byxuYT13byxvYT1BbyxpYT1KbyxhYT14aS5mb3JFYWNoLHVhPUFuKCJoaWRkZW4iKSxjYT0iU3ltYm9sIixzYT0icHJvdG90eXBlIixmYT1pYS5zZXQsbGE9aWEuZ2V0dGVyRm9yKGNhKSxoYT1PYmplY3Rbc2FdLHBhPU1pLlN5bWJvbCx2YT1wYSYmcGFbc2FdLGRhPU1pLlJhbmdlRXJyb3IseWE9TWkuVHlwZUVycm9yLGdhPU1pLlFPYmplY3QsbWE9SmkuZixiYT1LaS5mLHdhPUhpLmYsT2E9cWkuZixTYT1BaShbXS5wdXNoKSxFYT1aaSgic3ltYm9scyIpLFRhPVppKCJvcC1zeW1ib2xzIikseGE9WmkoIndrcyIpLGphPSFnYXx8IWdhW3NhXXx8IWdhW3NhXS5maW5kQ2hpbGQsTWE9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW1hKGhhLGUpO24mJmRlbGV0ZSBoYVtlXSxiYSh0LGUsciksbiYmdCE9PWhhJiZiYShoYSxlLG4pfSxrYT1QaSYmUmkoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT16aShiYSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBiYSh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/TWE6YmEsQWE9ZnVuY3Rpb24odCxlKXt2YXIgcj1FYVt0XT16aSh2YSk7cmV0dXJuIGZhKHIse3R5cGU6Y2EsdGFnOnQsZGVzY3JpcHRpb246ZX0pLFBpfHwoci5kZXNjcmlwdGlvbj1lKSxyfSxQYT1mdW5jdGlvbih0LGUscil7dD09PWhhJiZQYShUYSxlLHIpLENpKHQpO3ZhciBuPUlpKGUpO3JldHVybiBDaShyKSxOaShFYSxuKT8oci5lbnVtZXJhYmxlPyhOaSh0LHVhKSYmdFt1YV1bbl0mJih0W3VhXVtuXT0hMSkscj16aShyLHtlbnVtZXJhYmxlOlVpKDAsITEpfSkpOihOaSh0LHVhKXx8YmEodCx1YSxVaSgxLHppKG51bGwpKSksdFt1YV1bbl09ITApLGthKHQsbixyKSk6YmEodCxuLHIpfSxMYT1mdW5jdGlvbih0LGUpe0NpKHQpO3ZhciByPUZpKGUpLG49QmkocikuY29uY2F0KENhKHIpKTtyZXR1cm4gYWEobiwoZnVuY3Rpb24oZSl7UGkmJiFraShSYSxyLGUpfHxQYSh0LGUscltlXSl9KSksdH0sUmE9ZnVuY3Rpb24odCl7dmFyIGU9SWkodCkscj1raShPYSx0aGlzLGUpO3JldHVybiEodGhpcz09PWhhJiZOaShFYSxlKSYmIU5pKFRhLGUpKSYmKCEocnx8IU5pKHRoaXMsZSl8fCFOaShFYSxlKXx8TmkodGhpcyx1YSkmJnRoaXNbdWFdW2VdKXx8cil9LE5hPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RmkodCksbj1JaShlKTtpZihyIT09aGF8fCFOaShFYSxuKXx8TmkoVGEsbikpe3ZhciBvPW1hKHIsbik7cmV0dXJuIW98fCFOaShFYSxuKXx8Tmkocix1YSkmJnJbdWFdW25dfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sX2E9ZnVuY3Rpb24odCl7dmFyIGU9d2EoRmkodCkpLHI9W107cmV0dXJuIGFhKGUsKGZ1bmN0aW9uKHQpe05pKEVhLHQpfHxOaSgkaSx0KXx8U2Eocix0KX0pKSxyfSxDYT1mdW5jdGlvbih0KXt2YXIgZT10PT09aGEscj13YShlP1RhOkZpKHQpKSxuPVtdO3JldHVybiBhYShyLChmdW5jdGlvbih0KXshTmkoRWEsdCl8fGUmJiFOaShoYSx0KXx8U2EobixFYVt0XSl9KSksbn07TGl8fChwYT1mdW5jdGlvbigpe2lmKF9pKHZhLHRoaXMpKXRocm93IG5ldyB5YSgiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP0RpKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9UWkodCkscj1mdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10aGlzP01pOnRoaXM7bj09PWhhJiZraShyLFRhLHQpLE5pKG4sdWEpJiZOaShuW3VhXSxlKSYmKG5bdWFdW2VdPSExKTt2YXIgbz1VaSgxLHQpO3RyeXtrYShuLGUsbyl9Y2F0Y2goaSl7aWYoIShpIGluc3RhbmNlb2YgZGEpKXRocm93IGk7TWEobixlLG8pfX07cmV0dXJuIFBpJiZqYSYma2EoaGEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpyfSksQWEoZSx0KX0sWWkodmE9cGFbc2FdLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxhKHRoaXMpLnRhZ30pKSxZaShwYSwid2l0aG91dFNldHRlciIsKGZ1bmN0aW9uKHQpe3JldHVybiBBYShRaSh0KSx0KX0pKSxxaS5mPVJhLEtpLmY9UGEsVmkuZj1MYSxKaS5mPU5hLEdpLmY9SGkuZj1fYSxXaS5mPUNhLGVhLmY9ZnVuY3Rpb24odCl7cmV0dXJuIEFhKHRhKHQpLHQpfSxQaSYmWGkodmEsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsYSh0aGlzKS5kZXNjcmlwdGlvbn19KSksamkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLGZvcmNlZDohTGksc2hhbTohTGl9LHtTeW1ib2w6cGF9KSxhYShCaSh4YSksKGZ1bmN0aW9uKHQpe3JhKHQpfSkpLGppKHt0YXJnZXQ6Y2Esc3RhdDohMCxmb3JjZWQ6IUxpfSx7dXNlU2V0dGVyOmZ1bmN0aW9uKCl7amE9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe2phPSExfX0pLGppKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUxpLHNoYW06IVBpfSx7Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/emkodCk6TGEoemkodCksZSl9LGRlZmluZVByb3BlcnR5OlBhLGRlZmluZVByb3BlcnRpZXM6TGEsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOk5hfSksamkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohTGl9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOl9hfSksbmEoKSxvYShwYSxjYSksJGlbdWFdPSEwO3ZhciBGYT1ndCYmISFTeW1ib2wuZm9yJiYhIVN5bWJvbC5rZXlGb3IsSWE9QXIsRGE9cnQsVWE9JHQsemE9QnIsQmE9S3QsR2E9RmEsSGE9QmEoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSxXYT1CYSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO0lhKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IUdhfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXphKHQpO2lmKFVhKEhhLGUpKXJldHVybiBIYVtlXTt2YXIgcj1EYSgiU3ltYm9sIikoZSk7cmV0dXJuIEhhW2VdPXIsV2Fbcl09ZSxyfX0pO3ZhciBKYT1BcixLYT0kdCxWYT1FdCxxYT14dCxZYT1GYSxYYT1LdCgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO0phKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IVlhfSx7a2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFWYSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHFhKHQpKyIgaXMgbm90IGEgc3ltYm9sIik7aWYoS2EoWGEsdCkpcmV0dXJuIFhhW3RdfX0pO3ZhciBaYT1WbywkYT1ULFFhPWIsdHU9QnIsZXU9ZChbXS5wdXNoKSxydT1BcixudT1ydCxvdT1mLGl1PUEsYXU9ZCx1dT1vLGN1PVQsc3U9RXQsZnU9cW4sbHU9ZnVuY3Rpb24odCl7aWYoJGEodCkpcmV0dXJuIHQ7aWYoWmEodCkpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLG49MDtuPGU7bisrKXt2YXIgbz10W25dOyJzdHJpbmciPT10eXBlb2Ygbz9ldShyLG8pOiJudW1iZXIiIT10eXBlb2YgbyYmIk51bWJlciIhPT1RYShvKSYmIlN0cmluZyIhPT1RYShvKXx8ZXUocix0dShvKSl9dmFyIGk9ci5sZW5ndGgsYT0hMDtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihhKXJldHVybiBhPSExLGU7aWYoWmEodGhpcykpcmV0dXJuIGU7Zm9yKHZhciBuPTA7bjxpO24rKylpZihyW25dPT09dClyZXR1cm4gZX19fSxodT1ndCxwdT1TdHJpbmcsdnU9bnUoIkpTT04iLCJzdHJpbmdpZnkiKSxkdT1hdSgvLi8uZXhlYykseXU9YXUoIiIuY2hhckF0KSxndT1hdSgiIi5jaGFyQ29kZUF0KSxtdT1hdSgiIi5yZXBsYWNlKSxidT1hdSgxLi50b1N0cmluZyksd3U9L1tcdUQ4MDAtXHVERkZGXS9nLE91PS9eW1x1RDgwMC1cdURCRkZdJC8sU3U9L15bXHVEQzAwLVx1REZGRl0kLyxFdT0haHV8fHV1KChmdW5jdGlvbigpe3ZhciB0PW51KCJTeW1ib2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3JldHVybiJbbnVsbF0iIT09dnUoW3RdKXx8Int9IiE9PXZ1KHthOnR9KXx8Int9IiE9PXZ1KE9iamVjdCh0KSl9KSksVHU9dXUoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09dnUoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PXZ1KCJcdWRlYWQiKX0pKSx4dT1mdW5jdGlvbih0LGUpe3ZhciByPWZ1KGFyZ3VtZW50cyksbj1sdShlKTtpZihjdShuKXx8dm9pZCAwIT09dCYmIXN1KHQpKXJldHVybiByWzFdPWZ1bmN0aW9uKHQsZSl7aWYoY3UobikmJihlPWl1KG4sdGhpcyxwdSh0KSxlKSksIXN1KGUpKXJldHVybiBlfSxvdSh2dSxudWxsLHIpfSxqdT1mdW5jdGlvbih0LGUscil7dmFyIG49eXUocixlLTEpLG89eXUocixlKzEpO3JldHVybiBkdShPdSx0KSYmIWR1KFN1LG8pfHxkdShTdSx0KSYmIWR1KE91LG4pPyJcXHUiK2J1KGd1KHQsMCksMTYpOnR9O3Z1JiZydSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOkV1fHxUdX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnUoYXJndW1lbnRzKSxvPW91KEV1P3h1OnZ1LG51bGwsbik7cmV0dXJuIFR1JiYic3RyaW5nIj09dHlwZW9mIG8/bXUobyx3dSxqdSk6b319KTt2YXIgTXU9dG8sa3U9WXQ7QXIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohZ3R8fG8oKGZ1bmN0aW9uKCl7TXUuZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbih0KXt2YXIgZT1NdS5mO3JldHVybiBlP2Uoa3UodCkpOltdfX0pO3ZhciBBdT1lKFouT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyksUHU9dW4uaW5jbHVkZXM7QXIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIFB1KHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIEx1PW4sUnU9WixOdT1mdW5jdGlvbih0LGUpe3ZhciByPVJ1W3QrIlByb3RvdHlwZSJdLG49ciYmcltlXTtpZihuKXJldHVybiBuO3ZhciBvPUx1W3RdLGk9byYmby5wcm90b3R5cGU7cmV0dXJuIGkmJmlbZV19LF91PU51KCJBcnJheSIsImluY2x1ZGVzIiksQ3U9WCxGdT1iLEl1PWhlKCJtYXRjaCIpLER1PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBDdSh0KSYmKHZvaWQgMCE9PShlPXRbSXVdKT8hIWU6IlJlZ0V4cCI9PT1GdSh0KSl9LFV1PVR5cGVFcnJvcix6dT1oZSgibWF0Y2giKSxCdT1BcixHdT1mdW5jdGlvbih0KXtpZihEdSh0KSl0aHJvdyBuZXcgVXUoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiB0fSxIdT1KLFd1PUJyLEp1PWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7Ii8uLyJbdF0oZSl9Y2F0Y2gocil7dHJ5e3JldHVybiBlW3p1XT0hMSwiLy4vIlt0XShlKX1jYXRjaChuKXt9fXJldHVybiExfSxLdT1kKCIiLmluZGV4T2YpO0J1KHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiFKdSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhfkt1KFd1KEh1KHRoaXMpKSxXdShHdSh0KSksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pO3ZhciBWdT1OdSgiU3RyaW5nIiwiaW5jbHVkZXMiKSxxdT1udCxZdT1fdSxYdT1WdSxadT1BcnJheS5wcm90b3R5cGUsJHU9U3RyaW5nLnByb3RvdHlwZSxRdT1lKChmdW5jdGlvbih0KXt2YXIgZT10LmluY2x1ZGVzO3JldHVybiB0PT09WnV8fHF1KFp1LHQpJiZlPT09WnUuaW5jbHVkZXM/WXU6InN0cmluZyI9PXR5cGVvZiB0fHx0PT09JHV8fHF1KCR1LHQpJiZlPT09JHUuaW5jbHVkZXM/WHU6ZX0pKTtmdW5jdGlvbiB0Yyh0LGUpe2lmKG51bGw9PXQpcmV0dXJue307dmFyIHIsbixvPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClpZih7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikpe2lmKFF1KGUpLmNhbGwoZSxuKSljb250aW51ZTtyW25dPXRbbl19cmV0dXJuIHJ9KHQsZSk7aWYoQXUpe3ZhciBpPUF1KHQpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspcj1pW25dLFF1KGUpLmNhbGwoZSxyKXx8e30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHIpJiYob1tyXT10W3JdKX1yZXR1cm4gb312YXIgZWM9VHlwZUVycm9yLHJjPWZ1bmN0aW9uKHQpe2lmKHQ+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBlYygiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHR9LG5jPWosb2M9JGUsaWM9RixhYz1mdW5jdGlvbih0LGUscil7bmM/b2MuZih0LGUsaWMoMCxyKSk6dFtlXT1yfSx1Yz1vLGNjPXB0LHNjPWhlKCJzcGVjaWVzIiksZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGNjPj01MXx8IXVjKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVtzY109ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9LGxjPUFyLGhjPW8scGM9Vm8sdmM9WCxkYz1ZdCx5Yz1lbixnYz1yYyxtYz1hYyxiYz1naSx3Yz1mYyxPYz1wdCxTYz1oZSgiaXNDb25jYXRTcHJlYWRhYmxlIiksRWM9T2M+PTUxfHwhaGMoKGZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRbU2NdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLFRjPWZ1bmN0aW9uKHQpe2lmKCF2Yyh0KSlyZXR1cm4hMTt2YXIgZT10W1NjXTtyZXR1cm4gdm9pZCAwIT09ZT8hIWU6cGModCl9O2xjKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDohRWN8fCF3YygiY29uY2F0Iil9LHtjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIGUscixuLG8saSxhPWRjKHRoaXMpLHU9YmMoYSwwKSxjPTA7Zm9yKGU9LTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspaWYoVGMoaT0tMT09PWU/YTphcmd1bWVudHNbZV0pKWZvcihvPXljKGkpLGdjKGMrbykscj0wO3I8bztyKyssYysrKXIgaW4gaSYmbWModSxjLGlbcl0pO2Vsc2UgZ2MoYysxKSxtYyh1LGMrKyxpKTtyZXR1cm4gdS5sZW5ndGg9Yyx1fX0pLHZvKCJhc3luY0l0ZXJhdG9yIiksdm8oImhhc0luc3RhbmNlIiksdm8oImlzQ29uY2F0U3ByZWFkYWJsZSIpLHZvKCJpdGVyYXRvciIpLHZvKCJtYXRjaCIpLHZvKCJtYXRjaEFsbCIpLHZvKCJyZXBsYWNlIiksdm8oInNlYXJjaCIpLHZvKCJzcGVjaWVzIiksdm8oInNwbGl0Iik7dmFyIHhjPXdvO3ZvKCJ0b1ByaW1pdGl2ZSIpLHhjKCk7dmFyIGpjPXJ0LE1jPUFvO3ZvKCJ0b1N0cmluZ1RhZyIpLE1jKGpjKCJTeW1ib2wiKSwiU3ltYm9sIiksdm8oInVuc2NvcGFibGVzIiksQW8obi5KU09OLCJKU09OIiwhMCk7dmFyIGtjLEFjLFBjLExjPVouU3ltYm9sLFJjPXt9LE5jPWosX2M9JHQsQ2M9RnVuY3Rpb24ucHJvdG90eXBlLEZjPU5jJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEljPV9jKENjLCJuYW1lIiksRGM9e0VYSVNUUzpJYyxQUk9QRVI6SWMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsQ09ORklHVVJBQkxFOkljJiYoIU5jfHxOYyYmRmMoQ2MsIm5hbWUiKS5jb25maWd1cmFibGUpfSxVYz0hbygoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKSx6Yz0kdCxCYz1ULEdjPVl0LEhjPVVjLFdjPUFuKCJJRV9QUk9UTyIpLEpjPU9iamVjdCxLYz1KYy5wcm90b3R5cGUsVmM9SGM/SmMuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7dmFyIGU9R2ModCk7aWYoemMoZSxXYykpcmV0dXJuIGVbV2NdO3ZhciByPWUuY29uc3RydWN0b3I7cmV0dXJuIEJjKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgSmM/S2M6bnVsbH0scWM9byxZYz1ULFhjPVgsWmM9SG4sJGM9VmMsUWM9cm8sdHM9aGUoIml0ZXJhdG9yIiksZXM9ITE7W10ua2V5cyYmKCJuZXh0ImluKFBjPVtdLmtleXMoKSk/KEFjPSRjKCRjKFBjKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKGtjPUFjKTplcz0hMCk7dmFyIHJzPSFYYyhrYyl8fHFjKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiBrY1t0c10uY2FsbCh0KSE9PXR9KSk7WWMoKGtjPXJzP3t9OlpjKGtjKSlbdHNdKXx8UWMoa2MsdHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG5zPXtJdGVyYXRvclByb3RvdHlwZTprYyxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmVzfSxvcz1ucy5JdGVyYXRvclByb3RvdHlwZSxpcz1Ibixhcz1GLHVzPUFvLGNzPVJjLHNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGZzPWQsbHM9QXQsaHM9WCxwcz1mdW5jdGlvbih0KXtyZXR1cm4gaHModCl8fG51bGw9PT10fSx2cz1TdHJpbmcsZHM9VHlwZUVycm9yLHlzPWZ1bmN0aW9uKHQsZSxyKXt0cnl7cmV0dXJuIGZzKGxzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKVtyXSkpfWNhdGNoKG4pe319LGdzPVgsbXM9Sixicz1mdW5jdGlvbih0KXtpZihwcyh0KSlyZXR1cm4gdDt0aHJvdyBuZXcgZHMoIkNhbid0IHNldCAiK3ZzKHQpKyIgYXMgYSBwcm90b3R5cGUiKX0sd3M9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxyPXt9O3RyeXsodD15cyhPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkocixbXSksZT1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2gobil7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBtcyhyKSxicyhuKSxncyhyKT8oZT90KHIsbik6ci5fX3Byb3RvX189bixyKTpyfX0oKTp2b2lkIDApLE9zPUFyLFNzPUEsRXM9RGMsVHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ZSsiIEl0ZXJhdG9yIjtyZXR1cm4gdC5wcm90b3R5cGU9aXMob3Mse25leHQ6YXMoKyFuLHIpfSksdXModCxvLCExLCEwKSxjc1tvXT1zcyx0fSx4cz1WYyxqcz1BbyxNcz1ybyxrcz1SYyxBcz1ucyxQcz1Fcy5QUk9QRVIsTHM9QXMuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxScz1oZSgiaXRlcmF0b3IiKSxOcz0ia2V5cyIsX3M9InZhbHVlcyIsQ3M9ImVudHJpZXMiLEZzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LElzPWZ1bmN0aW9uKHQsZSxyLG4sbyxpLGEpe1RzKHIsZSxuKTt2YXIgdSxjLHMsZj1mdW5jdGlvbih0KXtpZih0PT09byYmZClyZXR1cm4gZDtpZighTHMmJnQmJnQgaW4gcClyZXR1cm4gcFt0XTtzd2l0Y2godCl7Y2FzZSBOczpjYXNlIF9zOmNhc2UgQ3M6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LGw9ZSsiIEl0ZXJhdG9yIixoPSExLHA9dC5wcm90b3R5cGUsdj1wW1JzXXx8cFsiQEBpdGVyYXRvciJdfHxvJiZwW29dLGQ9IUxzJiZ2fHxmKG8pLHk9IkFycmF5Ij09PWUmJnAuZW50cmllc3x8djtpZih5JiYodT14cyh5LmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZ1Lm5leHQmJihqcyh1LGwsITAsITApLGtzW2xdPUZzKSxQcyYmbz09PV9zJiZ2JiZ2Lm5hbWUhPT1fcyYmKGg9ITAsZD1mdW5jdGlvbigpe3JldHVybiBTcyh2LHRoaXMpfSksbylpZihjPXt2YWx1ZXM6Zihfcyksa2V5czppP2Q6ZihOcyksZW50cmllczpmKENzKX0sYSlmb3IocyBpbiBjKShMc3x8aHx8IShzIGluIHApKSYmTXMocCxzLGNbc10pO2Vsc2UgT3Moe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDpMc3x8aH0sYyk7cmV0dXJuIGEmJnBbUnNdIT09ZCYmTXMocCxScyxkLHtuYW1lOm99KSxrc1tlXT1kLGN9LERzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX0sVXM9cSx6cz1SYyxCcz1KbzskZS5mO3ZhciBHcz1JcyxIcz1EcyxXcz0iQXJyYXkgSXRlcmF0b3IiLEpzPUJzLnNldCxLcz1Ccy5nZXR0ZXJGb3IoV3MpO0dzKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7SnModGhpcyx7dHlwZTpXcyx0YXJnZXQ6VXModCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PUtzKHRoaXMpLGU9dC50YXJnZXQscj10LmluZGV4Kys7aWYoIWV8fHI+PWUubGVuZ3RoKXJldHVybiB0LnRhcmdldD1udWxsLEhzKHZvaWQgMCwhMCk7c3dpdGNoKHQua2luZCl7Y2FzZSJrZXlzIjpyZXR1cm4gSHMociwhMSk7Y2FzZSJ2YWx1ZXMiOnJldHVybiBIcyhlW3JdLCExKX1yZXR1cm4gSHMoW3IsZVtyXV0sITEpfSksInZhbHVlcyIpLHpzLkFyZ3VtZW50cz16cy5BcnJheTt2YXIgVnM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9LHFzPW4sWXM9QW8sWHM9UmM7Zm9yKHZhciBacyBpbiBWcylZcyhxc1tac10sWnMpLFhzW1pzXT1Ycy5BcnJheTt2YXIgJHM9TGMsUXM9aGUsdGY9JGUuZixlZj1RcygibWV0YWRhdGEiKSxyZj1GdW5jdGlvbi5wcm90b3R5cGU7dm9pZCAwPT09cmZbZWZdJiZ0ZihyZixlZix7dmFsdWU6bnVsbH0pLHZvKCJhc3luY0Rpc3Bvc2UiKSx2bygiZGlzcG9zZSIpLHZvKCJtZXRhZGF0YSIpO3ZhciBuZj0kcyxvZj1kLGFmPXJ0KCJTeW1ib2wiKSx1Zj1hZi5rZXlGb3IsY2Y9b2YoYWYucHJvdG90eXBlLnZhbHVlT2YpLHNmPWFmLmlzUmVnaXN0ZXJlZFN5bWJvbHx8ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB2b2lkIDAhPT11ZihjZih0KSl9Y2F0Y2goZSl7cmV0dXJuITF9fTtBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITB9LHtpc1JlZ2lzdGVyZWRTeW1ib2w6c2Z9KTtmb3IodmFyIGZmPUt0LGxmPXJ0LGhmPWQscGY9RXQsdmY9aGUsZGY9bGYoIlN5bWJvbCIpLHlmPWRmLmlzV2VsbEtub3duU3ltYm9sLGdmPWxmKCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiksbWY9aGYoZGYucHJvdG90eXBlLnZhbHVlT2YpLGJmPWZmKCJ3a3MiKSx3Zj0wLE9mPWdmKGRmKSxTZj1PZi5sZW5ndGg7d2Y8U2Y7d2YrKyl0cnl7dmFyIEVmPU9mW3dmXTtwZihkZltFZl0pJiZ2ZihFZil9Y2F0Y2goa1Mpe312YXIgVGY9ZnVuY3Rpb24odCl7aWYoeWYmJnlmKHQpKXJldHVybiEwO3RyeXtmb3IodmFyIGU9bWYodCkscj0wLG49Z2YoYmYpLG89bi5sZW5ndGg7cjxvO3IrKylpZihiZltuW3JdXT09ZSlyZXR1cm4hMH1jYXRjaChrUyl7fXJldHVybiExfTtBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7aXNXZWxsS25vd25TeW1ib2w6VGZ9KSx2bygiY3VzdG9tTWF0Y2hlciIpLHZvKCJvYnNlcnZhYmxlIiksQXIoe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzUmVnaXN0ZXJlZFN5bWJvbCJ9LHtpc1JlZ2lzdGVyZWQ6c2Z9KSxBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsbmFtZToiaXNXZWxsS25vd25TeW1ib2wiLGZvcmNlZDohMH0se2lzV2VsbEtub3duOlRmfSksdm8oIm1hdGNoZXIiKSx2bygibWV0YWRhdGFLZXkiKSx2bygicGF0dGVybk1hdGNoIiksdm8oInJlcGxhY2VBbGwiKTt2YXIgeGY9ZShuZiksamY9ZCxNZj1LcixrZj1CcixBZj1KLFBmPWpmKCIiLmNoYXJBdCksTGY9amYoIiIuY2hhckNvZGVBdCksUmY9amYoIiIuc2xpY2UpLE5mPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuLG8saT1rZihBZihlKSksYT1NZihyKSx1PWkubGVuZ3RoO3JldHVybiBhPDB8fGE+PXU/dD8iIjp2b2lkIDA6KG49TGYoaSxhKSk8NTUyOTZ8fG4+NTYzMTl8fGErMT09PXV8fChvPUxmKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/dD9QZihpLGEpOm46dD9SZihpLGEsYSsyKTpvLTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzZ9fSxfZj17Y29kZUF0Ok5mKCExKSxjaGFyQXQ6TmYoITApfS5jaGFyQXQsQ2Y9QnIsRmY9Sm8sSWY9SXMsRGY9RHMsVWY9IlN0cmluZyBJdGVyYXRvciIsemY9RmYuc2V0LEJmPUZmLmdldHRlckZvcihVZik7SWYoU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbih0KXt6Zih0aGlzLHt0eXBlOlVmLHN0cmluZzpDZih0KSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPUJmKHRoaXMpLHI9ZS5zdHJpbmcsbj1lLmluZGV4O3JldHVybiBuPj1yLmxlbmd0aD9EZih2b2lkIDAsITApOih0PV9mKHIsbiksZS5pbmRleCs9dC5sZW5ndGgsRGYodCwhMSkpfSkpO3ZhciBHZj1lKGlvLmYoIml0ZXJhdG9yIikpO2Z1bmN0aW9uIEhmKHQpe3JldHVybihIZj0iZnVuY3Rpb24iPT10eXBlb2YgeGYmJiJzeW1ib2wiPT10eXBlb2YgR2Y/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHhmJiZ0LmNvbnN0cnVjdG9yPT09eGYmJnQhPT14Zi5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgV2Y9e2V4cG9ydHM6e319LEpmPUFyLEtmPWosVmY9JGUuZjtKZih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PVZmLHNoYW06IUtmfSx7ZGVmaW5lUHJvcGVydHk6VmZ9KTt2YXIgcWY9Wi5PYmplY3QsWWY9V2YuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHFmLmRlZmluZVByb3BlcnR5KHQsZSxyKX07cWYuZGVmaW5lUHJvcGVydHkuc2hhbSYmKFlmLnNoYW09ITApO3ZhciBYZj1lKFdmLmV4cG9ydHMpO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFqfSx7Y3JlYXRlOkhufSk7dmFyIFpmPVouT2JqZWN0LCRmPWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFpmLmNyZWF0ZSh0LGUpfSkpLFFmPVl0LHRsPVZjLGVsPVVjO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXt0bCgxKX0pKSxzaGFtOiFlbH0se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0bChRZih0KSl9fSk7dmFyIHJsPWUoWi5PYmplY3QuZ2V0UHJvdG90eXBlT2YpLG5sPW8sb2w9eGkuZm9yRWFjaCxpbD1mdW5jdGlvbih0LGUpe3ZhciByPVtdW3RdO3JldHVybiEhciYmbmwoKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsZXx8ZnVuY3Rpb24oKXtyZXR1cm4gMX0sMSl9KSl9KCJmb3JFYWNoIik/W10uZm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gb2wodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX07QXIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpbXS5mb3JFYWNoIT09aWx9LHtmb3JFYWNoOmlsfSk7dmFyIGFsPU51KCJBcnJheSIsImZvckVhY2giKSx1bD1EcixjbD0kdCxzbD1udCxmbD1hbCxsbD1BcnJheS5wcm90b3R5cGUsaGw9e0RPTVRva2VuTGlzdDohMCxOb2RlTGlzdDohMH0scGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5mb3JFYWNoO3JldHVybiB0PT09bGx8fHNsKGxsLHQpJiZlPT09bGwuZm9yRWFjaHx8Y2woaGwsdWwodCkpP2ZsOmV9LHZsPWUocGwpLGRsPWoseWw9Vm8sZ2w9VHlwZUVycm9yLG1sPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYmw9ZGwmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChrUyl7cmV0dXJuIGtTIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKSx3bD1ZdCxPbD1lbixTbD1ibD9mdW5jdGlvbih0LGUpe2lmKHlsKHQpJiYhbWwodCwibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbmV3IGdsKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIHQubGVuZ3RoPWV9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPWV9LEVsPXJjO0FyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKGtTKXtyZXR1cm4ga1MgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbih0KXt2YXIgZT13bCh0aGlzKSxyPU9sKGUpLG49YXJndW1lbnRzLmxlbmd0aDtFbChyK24pO2Zvcih2YXIgbz0wO288bjtvKyspZVtyXT1hcmd1bWVudHNbb10scisrO3JldHVybiBTbChlLHIpLHJ9fSk7dmFyIFRsPU51KCJBcnJheSIsInB1c2giKSx4bD1udCxqbD1UbCxNbD1BcnJheS5wcm90b3R5cGUsa2w9ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5wdXNoO3JldHVybiB0PT09TWx8fHhsKE1sLHQpJiZlPT09TWwucHVzaD9qbDplfSkpO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOndzfSk7dmFyIEFsPWUoWi5PYmplY3Quc2V0UHJvdG90eXBlT2YpLFBsPXJ0LExsPVduLFJsPXRvLE5sPW5yLF9sPWQoW10uY29uY2F0KSxDbD1QbCgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24odCl7dmFyIGU9TGwuZihObCh0KSkscj1SbC5mO3JldHVybiByP19sKGUscih0KSk6ZX0sRmw9JHQsSWw9Q2wsRGw9eCxVbD0kZSx6bD1YLEJsPWdyLEdsPUVycm9yLEhsPWQoIiIucmVwbGFjZSksV2w9U3RyaW5nKG5ldyBHbCgienhjYXNkIikuc3RhY2spLEpsPS9cblxzKmF0IFteOl0qOlteXG5dKi8sS2w9SmwudGVzdChXbCksVmw9RixxbD0hbygoZnVuY3Rpb24oKXt2YXIgdD1uZXcgRXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiB0KXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGFjayIsVmwoMSw3KSksNyE9PXQuc3RhY2spfSkpLFlsPWdyLFhsPWZ1bmN0aW9uKHQsZSl7aWYoS2wmJiJzdHJpbmciPT10eXBlb2YgdCYmIUdsLnByZXBhcmVTdGFja1RyYWNlKWZvcig7ZS0tOyl0PUhsKHQsSmwsIiIpO3JldHVybiB0fSxabD1xbCwkbD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSxRbD1SYyx0aD1oZSgiaXRlcmF0b3IiKSxlaD1BcnJheS5wcm90b3R5cGUscmg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihRbC5BcnJheT09PXR8fGVoW3RoXT09PXQpfSxuaD1EcixvaD1SdCxpaD1HLGFoPVJjLHVoPWhlKCJpdGVyYXRvciIpLGNoPWZ1bmN0aW9uKHQpe2lmKCFpaCh0KSlyZXR1cm4gb2godCx1aCl8fG9oKHQsIkBAaXRlcmF0b3IiKXx8YWhbbmgodCldfSxzaD1BLGZoPUF0LGxoPW5yLGhoPXh0LHBoPWNoLHZoPVR5cGVFcnJvcixkaD1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9waCh0KTplO2lmKGZoKHIpKXJldHVybiBsaChzaChyLHQpKTt0aHJvdyBuZXcgdmgoaGgodCkrIiBpcyBub3QgaXRlcmFibGUiKX0seWg9QSxnaD1ucixtaD1SdCxiaD1mdW5jdGlvbih0LGUscil7dmFyIG4sbztnaCh0KTt0cnl7aWYoIShuPW1oKHQsInJldHVybiIpKSl7aWYoInRocm93Ij09PWUpdGhyb3cgcjtyZXR1cm4gcn1uPXloKG4sdCl9Y2F0Y2goa1Mpe289ITAsbj1rU31pZigidGhyb3ciPT09ZSl0aHJvdyByO2lmKG8pdGhyb3cgbjtyZXR1cm4gZ2gobikscn0sd2g9WmUsT2g9QSxTaD1ucixFaD14dCxUaD1yaCx4aD1lbixqaD1udCxNaD1kaCxraD1jaCxBaD1iaCxQaD1UeXBlRXJyb3IsTGg9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSxSaD1MaC5wcm90b3R5cGUsTmg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLG8saSxhLHUsYyxzLGY9ciYmci50aGF0LGw9ISghcnx8IXIuQVNfRU5UUklFUyksaD0hKCFyfHwhci5JU19SRUNPUkQpLHA9ISghcnx8IXIuSVNfSVRFUkFUT1IpLHY9ISghcnx8IXIuSU5URVJSVVBURUQpLGQ9d2goZSxmKSx5PWZ1bmN0aW9uKHQpe3JldHVybiBuJiZBaChuLCJub3JtYWwiLHQpLG5ldyBMaCghMCx0KX0sZz1mdW5jdGlvbih0KXtyZXR1cm4gbD8oU2godCksdj9kKHRbMF0sdFsxXSx5KTpkKHRbMF0sdFsxXSkpOnY/ZCh0LHkpOmQodCl9O2lmKGgpbj10Lml0ZXJhdG9yO2Vsc2UgaWYocCluPXQ7ZWxzZXtpZighKG89a2godCkpKXRocm93IG5ldyBQaChFaCh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKFRoKG8pKXtmb3IoaT0wLGE9eGgodCk7YT5pO2krKylpZigodT1nKHRbaV0pKSYmamgoUmgsdSkpcmV0dXJuIHU7cmV0dXJuIG5ldyBMaCghMSl9bj1NaCh0LG8pfWZvcihjPWg/dC5uZXh0Om4ubmV4dDshKHM9T2goYyxuKSkuZG9uZTspe3RyeXt1PWcocy52YWx1ZSl9Y2F0Y2goa1Mpe0FoKG4sInRocm93IixrUyl9aWYoIm9iamVjdCI9PXR5cGVvZiB1JiZ1JiZqaChSaCx1KSlyZXR1cm4gdX1yZXR1cm4gbmV3IExoKCExKX0sX2g9QnIsQ2g9QXIsRmg9bnQsSWg9VmMsRGg9d3MsVWg9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1JbChlKSxvPVVsLmYsaT1EbC5mLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHU9blthXTtGbCh0LHUpfHxyJiZGbChyLHUpfHxvKHQsdSxpKGUsdSkpfX0semg9SG4sQmg9Z3IsR2g9RixIaD1mdW5jdGlvbih0LGUpe3psKGUpJiYiY2F1c2UiaW4gZSYmQmwodCwiY2F1c2UiLGUuY2F1c2UpfSxXaD1mdW5jdGlvbih0LGUscixuKXtabCYmKCRsPyRsKHQsZSk6WWwodCwic3RhY2siLFhsKHIsbikpKX0sSmg9TmgsS2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dD9hcmd1bWVudHMubGVuZ3RoPDI/IiI6ZTpfaCh0KX0sVmg9aGUoInRvU3RyaW5nVGFnIikscWg9RXJyb3IsWWg9W10ucHVzaCxYaD1mdW5jdGlvbih0LGUpe3ZhciByLG49RmgoWmgsdGhpcyk7RGg/cj1EaChuZXcgcWgsbj9JaCh0aGlzKTpaaCk6KHI9bj90aGlzOnpoKFpoKSxCaChyLFZoLCJFcnJvciIpKSx2b2lkIDAhPT1lJiZCaChyLCJtZXNzYWdlIixLaChlKSksV2gocixYaCxyLnN0YWNrLDEpLGFyZ3VtZW50cy5sZW5ndGg+MiYmSGgocixhcmd1bWVudHNbMl0pO3ZhciBvPVtdO3JldHVybiBKaCh0LFloLHt0aGF0Om99KSxCaChyLCJlcnJvcnMiLG8pLHJ9O0RoP0RoKFhoLHFoKTpVaChYaCxxaCx7bmFtZTohMH0pO3ZhciBaaD1YaC5wcm90b3R5cGU9emgocWgucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpHaCgxLFhoKSxtZXNzYWdlOkdoKDEsIiIpLG5hbWU6R2goMSwiQWdncmVnYXRlRXJyb3IiKX0pO0NoKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6Mn0se0FnZ3JlZ2F0ZUVycm9yOlhofSk7dmFyICRoLFFoLHRwLGVwLHJwPW4sbnA9YXQsb3A9YixpcD1mdW5jdGlvbih0KXtyZXR1cm4gbnAuc2xpY2UoMCx0Lmxlbmd0aCk9PT10fSxhcD1pcCgiQnVuLyIpPyJCVU4iOmlwKCJDbG91ZGZsYXJlLVdvcmtlcnMiKT8iQ0xPVURGTEFSRSI6aXAoIkRlbm8vIik/IkRFTk8iOmlwKCJOb2RlLmpzLyIpPyJOT0RFIjpycC5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6cnAuRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb24/IkRFTk8iOiJwcm9jZXNzIj09PW9wKHJwLnByb2Nlc3MpPyJOT0RFIjpycC53aW5kb3cmJnJwLmRvY3VtZW50PyJCUk9XU0VSIjoiUkVTVCIsdXA9Ik5PREUiPT09YXAsY3A9cnQsc3A9b28sZnA9aixscD1oZSgic3BlY2llcyIpLGhwPWZ1bmN0aW9uKHQpe3ZhciBlPWNwKHQpO2ZwJiZlJiYhZVtscF0mJnNwKGUsbHAse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0scHA9bnQsdnA9VHlwZUVycm9yLGRwPWZ1bmN0aW9uKHQsZSl7aWYocHAoZSx0KSlyZXR1cm4gdDt0aHJvdyBuZXcgdnAoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LHlwPWZpLGdwPXh0LG1wPVR5cGVFcnJvcixicD1ucix3cD1mdW5jdGlvbih0KXtpZih5cCh0KSlyZXR1cm4gdDt0aHJvdyBuZXcgbXAoZ3AodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciIpfSxPcD1HLFNwPWhlKCJzcGVjaWVzIiksRXA9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWJwKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1ufHxPcChyPWJwKG4pW1NwXSk/ZTp3cChyKX0sVHA9VHlwZUVycm9yLHhwPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KGF0KSxqcD1uLE1wPWYsa3A9WmUsQXA9VCxQcD0kdCxMcD1vLFJwPWpuLE5wPXFuLF9wPU1lLENwPWZ1bmN0aW9uKHQsZSl7aWYodDxlKXRocm93IG5ldyBUcCgiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4gdH0sRnA9eHAsSXA9dXAsRHA9anAuc2V0SW1tZWRpYXRlLFVwPWpwLmNsZWFySW1tZWRpYXRlLHpwPWpwLnByb2Nlc3MsQnA9anAuRGlzcGF0Y2gsR3A9anAuRnVuY3Rpb24sSHA9anAuTWVzc2FnZUNoYW5uZWwsV3A9anAuU3RyaW5nLEpwPTAsS3A9e30sVnA9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7THAoKGZ1bmN0aW9uKCl7JGg9anAubG9jYXRpb259KSk7dmFyIHFwPWZ1bmN0aW9uKHQpe2lmKFBwKEtwLHQpKXt2YXIgZT1LcFt0XTtkZWxldGUgS3BbdF0sZSgpfX0sWXA9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cXAodCl9fSxYcD1mdW5jdGlvbih0KXtxcCh0LmRhdGEpfSxacD1mdW5jdGlvbih0KXtqcC5wb3N0TWVzc2FnZShXcCh0KSwkaC5wcm90b2NvbCsiLy8iKyRoLmhvc3QpfTtEcCYmVXB8fChEcD1mdW5jdGlvbih0KXtDcChhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBlPUFwKHQpP3Q6R3AodCkscj1OcChhcmd1bWVudHMsMSk7cmV0dXJuIEtwWysrSnBdPWZ1bmN0aW9uKCl7TXAoZSx2b2lkIDAscil9LFFoKEpwKSxKcH0sVXA9ZnVuY3Rpb24odCl7ZGVsZXRlIEtwW3RdfSxJcD9RaD1mdW5jdGlvbih0KXt6cC5uZXh0VGljayhZcCh0KSl9OkJwJiZCcC5ub3c/UWg9ZnVuY3Rpb24odCl7QnAubm93KFlwKHQpKX06SHAmJiFGcD8oZXA9KHRwPW5ldyBIcCkucG9ydDIsdHAucG9ydDEub25tZXNzYWdlPVhwLFFoPWtwKGVwLnBvc3RNZXNzYWdlLGVwKSk6anAuYWRkRXZlbnRMaXN0ZW5lciYmQXAoanAucG9zdE1lc3NhZ2UpJiYhanAuaW1wb3J0U2NyaXB0cyYmJGgmJiJmaWxlOiIhPT0kaC5wcm90b2NvbCYmIUxwKFpwKT8oUWg9WnAsanAuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsWHAsITEpKTpRaD1WcCBpbiBfcCgic2NyaXB0Iik/ZnVuY3Rpb24odCl7UnAuYXBwZW5kQ2hpbGQoX3AoInNjcmlwdCIpKVtWcF09ZnVuY3Rpb24oKXtScC5yZW1vdmVDaGlsZCh0aGlzKSxxcCh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoWXAodCksMCl9KTt2YXIgJHA9e3NldDpEcCxjbGVhcjpVcH0sUXA9bix0dj1qLGV2PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IscnY9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbH07cnYucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dmFyIGU9e2l0ZW06dCxuZXh0Om51bGx9LHI9dGhpcy50YWlsO3I/ci5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWV9LGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVhZDtpZih0KXJldHVybiBudWxsPT09KHRoaXMuaGVhZD10Lm5leHQpJiYodGhpcy50YWlsPW51bGwpLHQuaXRlbX19O3ZhciBudixvdixpdixhdix1dixjdj1ydixzdj0vaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QoYXQpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFBlYmJsZSxmdj0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KGF0KSxsdj1uLGh2PWZ1bmN0aW9uKHQpe2lmKCF0dilyZXR1cm4gUXBbdF07dmFyIGU9ZXYoUXAsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHB2PVplLHZ2PSRwLnNldCxkdj1jdix5dj14cCxndj1zdixtdj1mdixidj11cCx3dj1sdi5NdXRhdGlvbk9ic2VydmVyfHxsdi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLE92PWx2LmRvY3VtZW50LFN2PWx2LnByb2Nlc3MsRXY9bHYuUHJvbWlzZSxUdj1odigicXVldWVNaWNyb3Rhc2siKTtpZighVHYpe3ZhciB4dj1uZXcgZHYsanY9ZnVuY3Rpb24oKXt2YXIgdCxlO2ZvcihidiYmKHQ9U3YuZG9tYWluKSYmdC5leGl0KCk7ZT14di5nZXQoKTspdHJ5e2UoKX1jYXRjaChrUyl7dGhyb3cgeHYuaGVhZCYmbnYoKSxrU310JiZ0LmVudGVyKCl9O3l2fHxidnx8bXZ8fCF3dnx8IU92PyFndiYmRXYmJkV2LnJlc29sdmU/KChhdj1Fdi5yZXNvbHZlKHZvaWQgMCkpLmNvbnN0cnVjdG9yPUV2LHV2PXB2KGF2LnRoZW4sYXYpLG52PWZ1bmN0aW9uKCl7dXYoanYpfSk6YnY/bnY9ZnVuY3Rpb24oKXtTdi5uZXh0VGljayhqdil9Oih2dj1wdih2dixsdiksbnY9ZnVuY3Rpb24oKXt2dihqdil9KToob3Y9ITAsaXY9T3YuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyB3dihqdikub2JzZXJ2ZShpdix7Y2hhcmFjdGVyRGF0YTohMH0pLG52PWZ1bmN0aW9uKCl7aXYuZGF0YT1vdj0hb3Z9KSxUdj1mdW5jdGlvbih0KXt4di5oZWFkfHxudigpLHh2LmFkZCh0KX19dmFyIE12PVR2LGt2PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaChrUyl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmtTfX19LEF2PW4uUHJvbWlzZSxQdj1uLEx2PUF2LFJ2PVQsTnY9VmUsX3Y9Wm8sQ3Y9aGUsRnY9YXAsSXY9cHQsRHY9THYmJkx2LnByb3RvdHlwZSxVdj1Ddigic3BlY2llcyIpLHp2PSExLEJ2PVJ2KFB2LlByb21pc2VSZWplY3Rpb25FdmVudCksR3Y9e0NPTlNUUlVDVE9SOk52KCJQcm9taXNlIiwoZnVuY3Rpb24oKXt2YXIgdD1fdihMdiksZT10IT09U3RyaW5nKEx2KTtpZighZSYmNjY9PT1JdilyZXR1cm4hMDtpZighRHYuY2F0Y2h8fCFEdi5maW5hbGx5KXJldHVybiEwO2lmKCFJdnx8SXY8NTF8fCEvbmF0aXZlIGNvZGUvLnRlc3QodCkpe3ZhciByPW5ldyBMdigoZnVuY3Rpb24odCl7dCgxKX0pKSxuPWZ1bmN0aW9uKHQpe3QoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtpZigoci5jb25zdHJ1Y3Rvcj17fSlbVXZdPW4sISh6dj1yLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBuKSlyZXR1cm4hMH1yZXR1cm4hKGV8fCJCUk9XU0VSIiE9PUZ2JiYiREVOTyIhPT1Gdnx8QnYpfSkpLFJFSkVDVElPTl9FVkVOVDpCdixTVUJDTEFTU0lORzp6dn0sSHY9e30sV3Y9QXQsSnY9VHlwZUVycm9yLEt2PWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PXIpdGhyb3cgbmV3IEp2KCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxyPW59KSksdGhpcy5yZXNvbHZlPVd2KGUpLHRoaXMucmVqZWN0PVd2KHIpfTtIdi5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS3YodCl9O3ZhciBWdixxdixZdj1BcixYdj11cCxadj1uLCR2PUEsUXY9cm8sdGQ9QW8sZWQ9aHAscmQ9QXQsbmQ9VCxvZD1YLGlkPWRwLGFkPUVwLHVkPSRwLnNldCxjZD1NdixzZD1mdW5jdGlvbih0LGUpe3RyeXsxPT09YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmVycm9yKHQpOmNvbnNvbGUuZXJyb3IodCxlKX1jYXRjaChrUyl7fX0sZmQ9a3YsbGQ9Y3YsaGQ9Sm8scGQ9QXYsdmQ9R3YsZGQ9SHYseWQ9IlByb21pc2UiLGdkPXZkLkNPTlNUUlVDVE9SLG1kPXZkLlJFSkVDVElPTl9FVkVOVCxiZD1oZC5nZXR0ZXJGb3IoeWQpLHdkPWhkLnNldCxPZD1wZCYmcGQucHJvdG90eXBlLFNkPXBkLEVkPU9kLFRkPVp2LlR5cGVFcnJvcix4ZD1adi5kb2N1bWVudCxqZD1adi5wcm9jZXNzLE1kPWRkLmYsa2Q9TWQsQWQ9ISEoeGQmJnhkLmNyZWF0ZUV2ZW50JiZadi5kaXNwYXRjaEV2ZW50KSxQZD0idW5oYW5kbGVkcmVqZWN0aW9uIixMZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFvZCh0KXx8IW5kKGU9dC50aGVuKSkmJmV9LFJkPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLGk9ZS52YWx1ZSxhPTE9PT1lLnN0YXRlLHU9YT90Lm9rOnQuZmFpbCxjPXQucmVzb2x2ZSxzPXQucmVqZWN0LGY9dC5kb21haW47dHJ5e3U/KGF8fCgyPT09ZS5yZWplY3Rpb24mJklkKGUpLGUucmVqZWN0aW9uPTEpLCEwPT09dT9yPWk6KGYmJmYuZW50ZXIoKSxyPXUoaSksZiYmKGYuZXhpdCgpLG89ITApKSxyPT09dC5wcm9taXNlP3MobmV3IFRkKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihuPUxkKHIpKT8kdihuLHIsYyxzKTpjKHIpKTpzKGkpfWNhdGNoKGtTKXtmJiYhbyYmZi5leGl0KCkscyhrUyl9fSxOZD1mdW5jdGlvbih0LGUpe3Qubm90aWZpZWR8fCh0Lm5vdGlmaWVkPSEwLGNkKChmdW5jdGlvbigpe2Zvcih2YXIgcixuPXQucmVhY3Rpb25zO3I9bi5nZXQoKTspUmQocix0KTt0Lm5vdGlmaWVkPSExLGUmJiF0LnJlamVjdGlvbiYmQ2QodCl9KSkpfSxfZD1mdW5jdGlvbih0LGUscil7dmFyIG4sbztBZD8oKG49eGQuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxuLnJlYXNvbj1yLG4uaW5pdEV2ZW50KHQsITEsITApLFp2LmRpc3BhdGNoRXZlbnQobikpOm49e3Byb21pc2U6ZSxyZWFzb246cn0sIW1kJiYobz1adlsib24iK3RdKT9vKG4pOnQ9PT1QZCYmc2QoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIscil9LENkPWZ1bmN0aW9uKHQpeyR2KHVkLFp2LChmdW5jdGlvbigpe3ZhciBlLHI9dC5mYWNhZGUsbj10LnZhbHVlO2lmKEZkKHQpJiYoZT1mZCgoZnVuY3Rpb24oKXtYdj9qZC5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLG4scik6X2QoUGQscixuKX0pKSx0LnJlamVjdGlvbj1Ydnx8RmQodCk/MjoxLGUuZXJyb3IpKXRocm93IGUudmFsdWV9KSl9LEZkPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sSWQ9ZnVuY3Rpb24odCl7JHYodWQsWnYsKGZ1bmN0aW9uKCl7dmFyIGU9dC5mYWNhZGU7WHY/amQuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsZSk6X2QoInJlamVjdGlvbmhhbmRsZWQiLGUsdC52YWx1ZSl9KSl9LERkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dChlLG4scil9fSxVZD1mdW5jdGlvbih0LGUscil7dC5kb25lfHwodC5kb25lPSEwLHImJih0PXIpLHQudmFsdWU9ZSx0LnN0YXRlPTIsTmQodCwhMCkpfSx6ZD1mdW5jdGlvbih0LGUscil7aWYoIXQuZG9uZSl7dC5kb25lPSEwLHImJih0PXIpO3RyeXtpZih0LmZhY2FkZT09PWUpdGhyb3cgbmV3IFRkKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBuPUxkKGUpO24/Y2QoKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXskdihuLGUsRGQoemQscix0KSxEZChVZCxyLHQpKX1jYXRjaChrUyl7VWQocixrUyx0KX19KSk6KHQudmFsdWU9ZSx0LnN0YXRlPTEsTmQodCwhMSkpfWNhdGNoKGtTKXtVZCh7ZG9uZTohMX0sa1MsdCl9fX07Z2QmJihFZD0oU2Q9ZnVuY3Rpb24odCl7aWQodGhpcyxFZCkscmQodCksJHYoVnYsdGhpcyk7dmFyIGU9YmQodGhpcyk7dHJ5e3QoRGQoemQsZSksRGQoVWQsZSkpfWNhdGNoKGtTKXtVZChlLGtTKX19KS5wcm90b3R5cGUsKFZ2PWZ1bmN0aW9uKHQpe3dkKHRoaXMse3R5cGU6eWQsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOm5ldyBsZCxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTpudWxsfSl9KS5wcm90b3R5cGU9UXYoRWQsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciByPWJkKHRoaXMpLG49TWQoYWQodGhpcyxTZCkpO3JldHVybiByLnBhcmVudD0hMCxuLm9rPSFuZCh0KXx8dCxuLmZhaWw9bmQoZSkmJmUsbi5kb21haW49WHY/amQuZG9tYWluOnZvaWQgMCwwPT09ci5zdGF0ZT9yLnJlYWN0aW9ucy5hZGQobik6Y2QoKGZ1bmN0aW9uKCl7UmQobixyKX0pKSxuLnByb21pc2V9KSkscXY9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVnYsZT1iZCh0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9RGQoemQsZSksdGhpcy5yZWplY3Q9RGQoVWQsZSl9LGRkLmY9TWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TZHx8dW5kZWZpbmVkPT09dD9uZXcgcXYodCk6a2QodCl9KSxZdih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOmdkfSx7UHJvbWlzZTpTZH0pLHRkKFNkLHlkLCExLCEwKSxlZCh5ZCk7dmFyIEJkPWhlKCJpdGVyYXRvciIpLEdkPSExO3RyeXt2YXIgSGQ9MCxXZD17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhSGQrK319LHJldHVybjpmdW5jdGlvbigpe0dkPSEwfX07V2RbQmRdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oV2QsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChrUyl7fXZhciBKZD1mdW5jdGlvbih0LGUpe3RyeXtpZighZSYmIUdkKXJldHVybiExfWNhdGNoKGtTKXtyZXR1cm4hMX12YXIgcj0hMTt0cnl7dmFyIG49e307bltCZF09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fX19LHQobil9Y2F0Y2goa1Mpe31yZXR1cm4gcn0sS2Q9QXYsVmQ9R3YuQ09OU1RSVUNUT1J8fCFKZCgoZnVuY3Rpb24odCl7S2QuYWxsKHQpLnRoZW4odm9pZCAwLChmdW5jdGlvbigpe30pKX0pKSxxZD1BLFlkPUF0LFhkPUh2LFpkPWt2LCRkPU5oO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1YZC5mKGUpLG49ci5yZXNvbHZlLG89ci5yZWplY3QsaT1aZCgoZnVuY3Rpb24oKXt2YXIgcj1ZZChlLnJlc29sdmUpLGk9W10sYT0wLHU9MTskZCh0LChmdW5jdGlvbih0KXt2YXIgYz1hKysscz0hMTt1KysscWQocixlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3N8fChzPSEwLGlbY109dCwtLXV8fG4oaSkpfSksbyl9KSksLS11fHxuKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgUWQ9QXIsdHk9R3YuQ09OU1RSVUNUT1I7QXYmJkF2LnByb3RvdHlwZSxRZCh7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxmb3JjZWQ6dHkscmVhbDohMH0se2NhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pO3ZhciBleT1BLHJ5PUF0LG55PUh2LG95PWt2LGl5PU5oO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7cmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9bnkuZihlKSxuPXIucmVqZWN0LG89b3koKGZ1bmN0aW9uKCl7dmFyIG89cnkoZS5yZXNvbHZlKTtpeSh0LChmdW5jdGlvbih0KXtleShvLGUsdCkudGhlbihyLnJlc29sdmUsbil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJm4oby52YWx1ZSksci5wcm9taXNlfX0pO3ZhciBheT1IdjtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpHdi5DT05TVFJVQ1RPUn0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1heS5mKHRoaXMpO3JldHVybigwLGUucmVqZWN0KSh0KSxlLnByb21pc2V9fSk7dmFyIHV5PW5yLGN5PVgsc3k9SHYsZnk9ZnVuY3Rpb24odCxlKXtpZih1eSh0KSxjeShlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIHI9c3kuZih0KTtyZXR1cm4oMCxyLnJlc29sdmUpKGUpLHIucHJvbWlzZX0sbHk9QXIsaHk9QXYscHk9R3YuQ09OU1RSVUNUT1Isdnk9ZnksZHk9cnQoIlByb21pc2UiKSx5eT0hcHk7bHkoe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6dHJ1ZX0se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHl5JiZ0aGlzPT09ZHk/aHk6dGhpcyx0KX19KTt2YXIgZ3k9QSxteT1BdCxieT1Idix3eT1rdixPeT1OaDtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpWZH0se2FsbFNldHRsZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWJ5LmYoZSksbj1yLnJlc29sdmUsbz1yLnJlamVjdCxpPXd5KChmdW5jdGlvbigpe3ZhciByPW15KGUucmVzb2x2ZSksbz1bXSxpPTAsYT0xO095KHQsKGZ1bmN0aW9uKHQpe3ZhciB1PWkrKyxjPSExO2ErKyxneShyLGUsdCkudGhlbigoZnVuY3Rpb24odCl7Y3x8KGM9ITAsb1t1XT17c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnR9LC0tYXx8bihvKSl9KSwoZnVuY3Rpb24odCl7Y3x8KGM9ITAsb1t1XT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOnR9LC0tYXx8bihvKSl9KSl9KSksLS1hfHxuKG8pfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgU3k9QSxFeT1BdCxUeT1ydCx4eT1IdixqeT1rdixNeT1OaCxreT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7YW55OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1UeSgiQWdncmVnYXRlRXJyb3IiKSxuPXh5LmYoZSksbz1uLnJlc29sdmUsaT1uLnJlamVjdCxhPWp5KChmdW5jdGlvbigpe3ZhciBuPUV5KGUucmVzb2x2ZSksYT1bXSx1PTAsYz0xLHM9ITE7TXkodCwoZnVuY3Rpb24odCl7dmFyIGY9dSsrLGw9ITE7YysrLFN5KG4sZSx0KS50aGVuKChmdW5jdGlvbih0KXtsfHxzfHwocz0hMCxvKHQpKX0pLChmdW5jdGlvbih0KXtsfHxzfHwobD0hMCxhW2ZdPXQsLS1jfHxpKG5ldyByKGEsa3kpKSl9KSl9KSksLS1jfHxpKG5ldyByKGEsa3kpKX0pKTtyZXR1cm4gYS5lcnJvciYmaShhLnZhbHVlKSxuLnByb21pc2V9fSk7dmFyIEF5PUFyLFB5PWYsTHk9cW4sUnk9SHYsTnk9QXQsX3k9a3YsQ3k9bi5Qcm9taXNlLEZ5PSExO0F5KHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOiFDeXx8IUN5LnRyeXx8X3koKGZ1bmN0aW9uKCl7Q3kudHJ5KChmdW5jdGlvbih0KXtGeT04PT09dH0pLDgpfSkpLmVycm9yfHwhRnl9LHt0cnk6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP0x5KGFyZ3VtZW50cywxKTpbXSxyPVJ5LmYodGhpcyksbj1feSgoZnVuY3Rpb24oKXtyZXR1cm4gUHkoTnkodCksdm9pZCAwLGUpfSkpO3JldHVybihuLmVycm9yP3IucmVqZWN0OnIucmVzb2x2ZSkobi52YWx1ZSksci5wcm9taXNlfX0pO3ZhciBJeT1IdjtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7d2l0aFJlc29sdmVyczpmdW5jdGlvbigpe3ZhciB0PUl5LmYodGhpcyk7cmV0dXJue3Byb21pc2U6dC5wcm9taXNlLHJlc29sdmU6dC5yZXNvbHZlLHJlamVjdDp0LnJlamVjdH19fSk7dmFyIER5PUFyLFV5PUF2LHp5PW8sQnk9cnQsR3k9VCxIeT1FcCxXeT1meSxKeT1VeSYmVXkucHJvdG90eXBlO0R5KHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhVXkmJnp5KChmdW5jdGlvbigpe0p5LmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9SHkodGhpcyxCeSgiUHJvbWlzZSIpKSxyPUd5KHQpO3JldHVybiB0aGlzLnRoZW4ocj9mdW5jdGlvbihyKXtyZXR1cm4gV3koZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9OnQscj9mdW5jdGlvbihyKXtyZXR1cm4gV3koZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06dCl9fSk7dmFyIEt5PVouUHJvbWlzZSxWeT1lKEt5KSxxeT1BcixZeT1WbyxYeT1kKFtdLnJldmVyc2UpLFp5PVsxLDJdO3F5KHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKFp5KT09PVN0cmluZyhaeS5yZXZlcnNlKCkpfSx7cmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBZeSh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxYeSh0aGlzKX19KTt2YXIgJHk9TnUoIkFycmF5IiwicmV2ZXJzZSIpLFF5PW50LHRnPSR5LGVnPUFycmF5LnByb3RvdHlwZSxyZz1lKChmdW5jdGlvbih0KXt2YXIgZT10LnJldmVyc2U7cmV0dXJuIHQ9PT1lZ3x8UXkoZWcsdCkmJmU9PT1lZy5yZXZlcnNlP3RnOmV9KSksbmc9QXIsb2c9Vm8saWc9ZmksYWc9WCx1Zz1YcixjZz1lbixzZz1xLGZnPWFjLGxnPWhlLGhnPXFuLHBnPWZjKCJzbGljZSIpLHZnPWxnKCJzcGVjaWVzIiksZGc9QXJyYXkseWc9TWF0aC5tYXg7bmcoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohcGd9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciByLG4sbyxpPXNnKHRoaXMpLGE9Y2coaSksdT11Zyh0LGEpLGM9dWcodm9pZCAwPT09ZT9hOmUsYSk7aWYob2coaSkmJihyPWkuY29uc3RydWN0b3IsKGlnKHIpJiYocj09PWRnfHxvZyhyLnByb3RvdHlwZSkpfHxhZyhyKSYmbnVsbD09PShyPXJbdmddKSkmJihyPXZvaWQgMCkscj09PWRnfHx2b2lkIDA9PT1yKSlyZXR1cm4gaGcoaSx1LGMpO2ZvcihuPW5ldyh2b2lkIDA9PT1yP2RnOnIpKHlnKGMtdSwwKSksbz0wO3U8Yzt1KyssbysrKXUgaW4gaSYmZmcobixvLGlbdV0pO3JldHVybiBuLmxlbmd0aD1vLG59fSk7dmFyIGdnPU51KCJBcnJheSIsInNsaWNlIiksbWc9bnQsYmc9Z2csd2c9QXJyYXkucHJvdG90eXBlLE9nPWUoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2U7cmV0dXJuIHQ9PT13Z3x8bWcod2csdCkmJmU9PT13Zy5zbGljZT9iZzplfSkpO2Z1bmN0aW9uIFNnKCl7U2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHQsZT17fSxyPU9iamVjdC5wcm90b3R5cGUsbj1yLmhhc093blByb3BlcnR5LG89WGZ8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIHhmP3hmOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHU9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gWGYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2goTCl7cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGc/ZTpnLGE9JGYoaS5wcm90b3R5cGUpLHU9bmV3IEEobnx8W10pO3JldHVybiBvKGEsIl9pbnZva2UiLHt2YWx1ZTp4KHQscix1KX0pLGF9ZnVuY3Rpb24gbCh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2gobil7cmV0dXJue3R5cGU6InRocm93Iixhcmc6bn19fWUud3JhcD1mO3ZhciBoPSJzdXNwZW5kZWRTdGFydCIscD0ic3VzcGVuZGVkWWllbGQiLHY9ImV4ZWN1dGluZyIsZD0iY29tcGxldGVkIix5PXt9O2Z1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBiKCl7fXZhciB3PXt9O3ModyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBPPXJsJiZybChybChQKFtdKSkpO08mJk8hPT1yJiZuLmNhbGwoTyxhKSYmKHc9Tyk7dmFyIFM9Yi5wcm90b3R5cGU9Zy5wcm90b3R5cGU9JGYodyk7ZnVuY3Rpb24gRSh0KXt2YXIgZTt2bChlPVsibmV4dCIsInRocm93IiwicmV0dXJuIl0pLmNhbGwoZSwoZnVuY3Rpb24oZSl7cyh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBUKHQsZSl7ZnVuY3Rpb24gcihvLGksYSx1KXt2YXIgYz1sKHRbb10sdCxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgcz1jLmFyZyxmPXMudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1IZihmKSYmbi5jYWxsKGYsIl9fYXdhaXQiKT9lLnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtyKCJuZXh0Iix0LGEsdSl9KSwoZnVuY3Rpb24odCl7cigidGhyb3ciLHQsYSx1KX0pKTplLnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24odCl7cy52YWx1ZT10LGEocyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHIoInRocm93Iix0LGEsdSl9KSl9dShjLmFyZyl9dmFyIGk7byh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe3IodCxuLGUsbyl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fSl9ZnVuY3Rpb24geChlLHIsbil7dmFyIG89aDtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZihvPT09dil0aHJvdyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKG89PT1kKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp0LGRvbmU6ITB9fWZvcihuLm1ldGhvZD1pLG4uYXJnPWE7Oyl7dmFyIHU9bi5kZWxlZ2F0ZTtpZih1KXt2YXIgYz1qKHUsbik7aWYoYyl7aWYoYz09PXkpY29udGludWU7cmV0dXJuIGN9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZihvPT09aCl0aHJvdyBvPWQsbi5hcmc7bi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4uYWJydXB0KCJyZXR1cm4iLG4uYXJnKTtvPXY7dmFyIHM9bChlLHIsbik7aWYoIm5vcm1hbCI9PT1zLnR5cGUpe2lmKG89bi5kb25lP2Q6cCxzLmFyZz09PXkpY29udGludWU7cmV0dXJue3ZhbHVlOnMuYXJnLGRvbmU6bi5kb25lfX0idGhyb3ciPT09cy50eXBlJiYobz1kLG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9cy5hcmcpfX19ZnVuY3Rpb24gaihlLHIpe3ZhciBuPXIubWV0aG9kLG89ZS5pdGVyYXRvcltuXTtpZihvPT09dClyZXR1cm4gci5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uJiZlLml0ZXJhdG9yLnJldHVybiYmKHIubWV0aG9kPSJyZXR1cm4iLHIuYXJnPXQsaihlLHIpLCJ0aHJvdyI9PT1yLm1ldGhvZCl8fCJyZXR1cm4iIT09biYmKHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIituKyInIG1ldGhvZCIpKSx5O3ZhciBpPWwobyxlLml0ZXJhdG9yLHIuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiByLm1ldGhvZD0idGhyb3ciLHIuYXJnPWkuYXJnLHIuZGVsZWdhdGU9bnVsbCx5O3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8ocltlLnJlc3VsdE5hbWVdPWEudmFsdWUsci5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXIubWV0aG9kJiYoci5tZXRob2Q9Im5leHQiLHIuYXJnPXQpLHIuZGVsZWdhdGU9bnVsbCx5KTphOihyLm1ldGhvZD0idGhyb3ciLHIuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksci5kZWxlZ2F0ZT1udWxsLHkpfWZ1bmN0aW9uIE0odCl7dmFyIGUscj17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKHIuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoci5maW5hbGx5TG9jPXRbMl0sci5hZnRlckxvYz10WzNdKSxrbChlPXRoaXMudHJ5RW50cmllcykuY2FsbChlLHIpfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIEEodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHZsKHQpLmNhbGwodCxNLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZXx8IiI9PT1lKXt2YXIgcj1lW2FdO2lmKHIpcmV0dXJuIHIuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBvPS0xLGk9ZnVuY3Rpb24gcigpe2Zvcig7KytvPGUubGVuZ3RoOylpZihuLmNhbGwoZSxvKSlyZXR1cm4gci52YWx1ZT1lW29dLHIuZG9uZT0hMSxyO3JldHVybiByLnZhbHVlPXQsci5kb25lPSEwLHJ9O3JldHVybiBpLm5leHQ9aX19dGhyb3cgbmV3IFR5cGVFcnJvcihIZihlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfXJldHVybiBtLnByb3RvdHlwZT1iLG8oUywiY29uc3RydWN0b3IiLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMH0pLG8oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTptLGNvbmZpZ3VyYWJsZTohMH0pLG0uZGlzcGxheU5hbWU9cyhiLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1tfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIEFsP0FsKHQsYik6KHQuX19wcm90b19fPWIscyh0LGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPSRmKFMpLHR9LGUuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LEUoVC5wcm90b3R5cGUpLHMoVC5wcm90b3R5cGUsdSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9VCxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLG8saSl7dm9pZCAwPT09aSYmKGk9VnkpO3ZhciBhPW5ldyBUKGYodCxyLG4sbyksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0sRShTKSxzKFMsYywiR2VuZXJhdG9yIikscyhTLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhTLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKWtsKHIpLmNhbGwocixuKTtyZXR1cm4gcmcocikuY2FsbChyKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sZS52YWx1ZXM9UCxBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QSxyZXNldDpmdW5jdGlvbihlKXt2YXIgcjtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdmwocj10aGlzLnRyeUVudHJpZXMpLmNhbGwocixrKSwhZSlmb3IodmFyIG8gaW4gdGhpcykidCI9PT1vLmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMsbykmJiFpc05hTigrT2cobykuY2FsbChvLDEpKSYmKHRoaXNbb109dCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgcj10aGlzO2Z1bmN0aW9uIG8obixvKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5hcmc9ZSxyLm5leHQ9bixvJiYoci5tZXRob2Q9Im5leHQiLHIuYXJnPXQpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sdT1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBjPW4uY2FsbChhLCJjYXRjaExvYyIpLHM9bi5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihjJiZzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihjKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFzKXRocm93IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG89dGhpcy50cnlFbnRyaWVzW3JdO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJm4uY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPXQsYS5hcmc9ZSxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyx5KTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLHl9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksayhyKSx5fX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBvPW4uYXJnO2socil9cmV0dXJuIG99fXRocm93IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTpyLG5leHRMb2M6bn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz10KSx5fX0sZX1mdW5jdGlvbiBFZyh0LGUscixuLG8saSxhKXt0cnl7dmFyIHU9dFtpXShhKSxjPXUudmFsdWV9Y2F0Y2gocyl7cmV0dXJuIHZvaWQgcihzKX11LmRvbmU/ZShjKTpWeS5yZXNvbHZlKGMpLnRoZW4obixvKX1mdW5jdGlvbiBUZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgVnkoKGZ1bmN0aW9uKG4sbyl7dmFyIGk9dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7RWcoaSxuLG8sYSx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe0VnKGksbixvLGEsdSwidGhyb3ciLHQpfWEodm9pZCAwKX0pKX19ZnVuY3Rpb24geGcodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgamc9ZShpby5mKCJ0b1ByaW1pdGl2ZSIpKTtmdW5jdGlvbiBNZyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT1IZih0KXx8IXQpcmV0dXJuIHQ7dmFyIHI9dFtqZ107aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9SGYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1lP1N0cmluZzpOdW1iZXIpKHQpfSh0LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09SGYoZSk/ZTplKyIifWZ1bmN0aW9uIGtnKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxYZih0LE1nKG4ua2V5KSxuKX19ZnVuY3Rpb24gQWcodCxlLHIpe3JldHVybiBlJiZrZyh0LnByb3RvdHlwZSxlKSxyJiZrZyh0LHIpLFhmKHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBQZyh0LGUscil7cmV0dXJuKGU9TWcoZSkpaW4gdD9YZih0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH12YXIgTGc9e2V4cG9ydHM6e319LFJnPW8oKGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyKXt2YXIgdD1uZXcgQXJyYXlCdWZmZXIoOCk7T2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImEiLHt2YWx1ZTo4fSl9fSkpLE5nPW8sX2c9WCxDZz1iLEZnPVJnLElnPU9iamVjdC5pc0V4dGVuc2libGUsRGc9TmcoKGZ1bmN0aW9uKCl7SWcoMSl9KSl8fEZnP2Z1bmN0aW9uKHQpe3JldHVybiEhX2codCkmJigoIUZnfHwiQXJyYXlCdWZmZXIiIT09Q2codCkpJiYoIUlnfHxJZyh0KSkpfTpJZyxVZz0hbygoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSx6Zz1BcixCZz1kLEdnPWNuLEhnPVgsV2c9JHQsSmc9JGUuZixLZz1XbixWZz1WbixxZz1EZyxZZz1VZyxYZz0hMSxaZz1uZSgibWV0YSIpLCRnPTAsUWc9ZnVuY3Rpb24odCl7SmcodCxaZyx7dmFsdWU6e29iamVjdElEOiJPIiskZysrLHdlYWtEYXRhOnt9fX0pfSx0bT1MZy5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXt0bS5lbmFibGU9ZnVuY3Rpb24oKXt9LFhnPSEwO3ZhciB0PUtnLmYsZT1CZyhbXS5zcGxpY2UpLHI9e307cltaZ109MSx0KHIpLmxlbmd0aCYmKEtnLmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksbz0wLGk9bi5sZW5ndGg7bzxpO28rKylpZihuW29dPT09Wmcpe2UobixvLDEpO2JyZWFrfXJldHVybiBufSx6Zyh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7Z2V0T3duUHJvcGVydHlOYW1lczpWZy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIUhnKHQpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgdD90Oigic3RyaW5nIj09dHlwZW9mIHQ/IlMiOiJQIikrdDtpZighV2codCxaZykpe2lmKCFxZyh0KSlyZXR1cm4iRiI7aWYoIWUpcmV0dXJuIkUiO1FnKHQpfXJldHVybiB0W1pnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighV2codCxaZykpe2lmKCFxZyh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtRZyh0KX1yZXR1cm4gdFtaZ10ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBZZyYmWGcmJnFnKHQpJiYhV2codCxaZykmJlFnKHQpLHR9fTtHZ1taZ109ITA7dmFyIGVtPUxnLmV4cG9ydHMscm09QXIsbm09bixvbT1lbSxpbT1vLGFtPWdyLHVtPU5oLGNtPWRwLHNtPVQsZm09WCxsbT1HLGhtPUFvLHBtPSRlLmYsdm09eGkuZm9yRWFjaCxkbT1qLHltPUpvLnNldCxnbT1Kby5nZXR0ZXJGb3IsbW09cm8sYm09SG4sd209b28sT209ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiBlKXImJnIudW5zYWZlJiZ0W25dP3Rbbl09ZVtuXTptbSh0LG4sZVtuXSxyKTtyZXR1cm4gdH0sU209WmUsRW09ZHAsVG09Ryx4bT1OaCxqbT1JcyxNbT1EcyxrbT1ocCxBbT1qLFBtPWVtLmZhc3RLZXksTG09Sm8uc2V0LFJtPUpvLmdldHRlckZvcixObT17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89dCgoZnVuY3Rpb24odCxvKXtFbSh0LGkpLExtKHQse3R5cGU6ZSxpbmRleDpibShudWxsKSxmaXJzdDpudWxsLGxhc3Q6bnVsbCxzaXplOjB9KSxBbXx8KHQuc2l6ZT0wKSxUbShvKXx8eG0obyx0W25dLHt0aGF0OnQsQVNfRU5UUklFUzpyfSl9KSksaT1vLnByb3RvdHlwZSxhPVJtKGUpLHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLG8saT1hKHQpLHU9Yyh0LGUpO3JldHVybiB1P3UudmFsdWU9cjooaS5sYXN0PXU9e2luZGV4Om89UG0oZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWkubGFzdCxuZXh0Om51bGwscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9dSksbiYmKG4ubmV4dD11KSxBbT9pLnNpemUrKzp0LnNpemUrKywiRiIhPT1vJiYoaS5pbmRleFtvXT11KSksdH0sYz1mdW5jdGlvbih0LGUpe3ZhciByLG49YSh0KSxvPVBtKGUpO2lmKCJGIiE9PW8pcmV0dXJuIG4uaW5kZXhbb107Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT09ZSlyZXR1cm4gcn07cmV0dXJuIE9tKGkse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWEodGhpcyksZT10LmZpcnN0O2U7KWUucmVtb3ZlZD0hMCxlLnByZXZpb3VzJiYoZS5wcmV2aW91cz1lLnByZXZpb3VzLm5leHQ9bnVsbCksZT1lLm5leHQ7dC5maXJzdD10Lmxhc3Q9bnVsbCx0LmluZGV4PWJtKG51bGwpLEFtP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWEoZSksbj1jKGUsdCk7aWYobil7dmFyIG89bi5uZXh0LGk9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxyLmZpcnN0PT09biYmKHIuZmlyc3Q9byksci5sYXN0PT09biYmKHIubGFzdD1pKSxBbT9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9YSh0aGlzKSxuPVNtKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO2U9ZT9lLm5leHQ6ci5maXJzdDspZm9yKG4oZS52YWx1ZSxlLmtleSx0aGlzKTtlJiZlLnJlbW92ZWQ7KWU9ZS5wcmV2aW91c30saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhYyh0aGlzLHQpfX0pLE9tKGkscj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWModGhpcyx0KTtyZXR1cm4gZSYmZS52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodGhpcywwPT09dD8wOnQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiB1KHRoaXMsdD0wPT09dD8wOnQsdCl9fSksQW0mJndtKGksInNpemUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuc2l6ZX19KSxvfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUrIiBJdGVyYXRvciIsbz1SbShlKSxpPVJtKG4pO2ptKHQsZSwoZnVuY3Rpb24odCxlKXtMbSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6byh0KSxraW5kOmUsbGFzdDpudWxsfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSh0aGlzKSxlPXQua2luZCxyPXQubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gdC50YXJnZXQmJih0Lmxhc3Q9cj1yP3IubmV4dDp0LnN0YXRlLmZpcnN0KT9NbSgia2V5cyI9PT1lP3Iua2V5OiJ2YWx1ZXMiPT09ZT9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KHQudGFyZ2V0PW51bGwsTW0odm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksa20oZSl9fTsoZnVuY3Rpb24odCxlLHIpe3ZhciBuLG89LTEhPT10LmluZGV4T2YoIk1hcCIpLGk9LTEhPT10LmluZGV4T2YoIldlYWsiKSxhPW8/InNldCI6ImFkZCIsdT1ubVt0XSxjPXUmJnUucHJvdG90eXBlLHM9e307aWYoZG0mJnNtKHUpJiYoaXx8Yy5mb3JFYWNoJiYhaW0oKGZ1bmN0aW9uKCl7KG5ldyB1KS5lbnRyaWVzKCkubmV4dCgpfSkpKSl7dmFyIGY9KG49ZSgoZnVuY3Rpb24oZSxyKXt5bShjbShlLGYpLHt0eXBlOnQsY29sbGVjdGlvbjpuZXcgdX0pLGxtKHIpfHx1bShyLGVbYV0se3RoYXQ6ZSxBU19FTlRSSUVTOm99KX0pKSkucHJvdG90eXBlLGw9Z20odCk7dm0oWyJhZGQiLCJjbGVhciIsImRlbGV0ZSIsImZvckVhY2giLCJnZXQiLCJoYXMiLCJzZXQiLCJrZXlzIiwidmFsdWVzIiwiZW50cmllcyJdLChmdW5jdGlvbih0KXt2YXIgZT0iYWRkIj09PXR8fCJzZXQiPT09dDshKHQgaW4gYyl8fGkmJiJjbGVhciI9PT10fHxhbShmLHQsKGZ1bmN0aW9uKHIsbil7dmFyIG89bCh0aGlzKS5jb2xsZWN0aW9uO2lmKCFlJiZpJiYhZm0ocikpcmV0dXJuImdldCI9PT10JiZ2b2lkIDA7dmFyIGE9b1t0XSgwPT09cj8wOnIsbik7cmV0dXJuIGU/dGhpczphfSkpfSkpLGl8fHBtKGYsInNpemUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcykuY29sbGVjdGlvbi5zaXplfX0pfWVsc2Ugbj1yLmdldENvbnN0cnVjdG9yKGUsdCxvLGEpLG9tLmVuYWJsZSgpO2htKG4sdCwhMSwhMCksc1t0XT1uLHJtKHtnbG9iYWw6ITAsZm9yY2VkOiEwfSxzKSxpfHxyLnNldFN0cm9uZyhuLHQsbyl9KSgiTWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLE5tKTt2YXIgX209ZnVuY3Rpb24odCxlKXtyZXR1cm4gMT09PWU/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVt0XShyKX06ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlW3RdKHIsbil9fSxDbT1ydCgiTWFwIiksRm09e01hcDpDbSxzZXQ6X20oInNldCIsMiksZ2V0Ol9tKCJnZXQiLDEpLGhhczpfbSgiaGFzIiwxKSxyZW1vdmU6X20oImRlbGV0ZSIsMSkscHJvdG86Q20ucHJvdG90eXBlfSxJbT1BcixEbT1BdCxVbT1KLHptPU5oLEJtPUZtLk1hcCxHbT1GbS5oYXMsSG09Rm0uZ2V0LFdtPUZtLnNldCxKbT1kKFtdLnB1c2gpO0ltKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMCxmb3JjZWQ6dHJ1ZX0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXtVbSh0KSxEbShlKTt2YXIgcj1uZXcgQm0sbj0wO3JldHVybiB6bSh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQsbisrKTtHbShyLG8pP0ptKEhtKHIsbyksdCk6V20ocixvLFt0XSl9KSkscn19KTt2YXIgS209Wi5NYXAsVm09WmUscW09bnIsWW09WXQsWG09TmgsWm09ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbz1ZbShuKSxpPWFyZ3VtZW50cy5sZW5ndGgsYT1pPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx1PXZvaWQgMCE9PWEsYz11P1ZtKGEsaT4yP2FyZ3VtZW50c1syXTp2b2lkIDApOnZvaWQgMCxzPW5ldyB0LGY9MDtyZXR1cm4gWG0obywoZnVuY3Rpb24odCl7dmFyIG49dT9jKHQsZisrKTp0O3I/ZShzLHFtKG4pWzBdLG5bMV0pOmUocyxuKX0pKSxzfX07QXIoe3RhcmdldDoiTWFwIixzdGF0OiEwLGZvcmNlZDohMH0se2Zyb206Wm0oRm0uTWFwLEZtLnNldCwhMCl9KTt2YXIgJG09bnIsUW09ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgdCxvPWFyZ3VtZW50cy5sZW5ndGgsaT0wO2k8bztpKyspe3ZhciBhPWFyZ3VtZW50c1tpXTtyP2UobiwkbShhKVswXSxhWzFdKTplKG4sYSl9cmV0dXJuIG59fTtBcih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7b2Y6UW0oRm0uTWFwLEZtLnNldCwhMCl9KTt2YXIgdGI9QSxlYj1OaCxyYj1ULG5iPUF0LG9iPUZtLk1hcDtBcih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7a2V5Qnk6ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcocmIodGhpcyk/dGhpczpvYik7bmIoZSk7dmFyIG49bmIoci5zZXQpO3JldHVybiBlYih0LChmdW5jdGlvbih0KXt0YihuLHIsZSh0KSx0KX0pKSxyfX0pO3ZhciBpYj14dCxhYj1UeXBlRXJyb3IsdWI9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYic2l6ZSJpbiB0JiYiaGFzImluIHQmJiJnZXQiaW4gdCYmInNldCJpbiB0JiYiZGVsZXRlImluIHQmJiJlbnRyaWVzImluIHQpcmV0dXJuIHQ7dGhyb3cgbmV3IGFiKGliKHQpKyIgaXMgbm90IGEgbWFwIil9LGNiPXViLHNiPUZtLnJlbW92ZTtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9Y2IodGhpcykscj0hMCxuPTAsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspdD1zYihlLGFyZ3VtZW50c1tuXSkscj1yJiZ0O3JldHVybiEhcn19KTt2YXIgZmI9dWIsbGI9Rm0uZ2V0LGhiPUZtLmhhcyxwYj1GbS5zZXQ7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2VtcGxhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89ZmIodGhpcyk7cmV0dXJuIGhiKG8sdCk/KHI9bGIobyx0KSwidXBkYXRlImluIGUmJihyPWUudXBkYXRlKHIsdCxvKSxwYihvLHQscikpLHIpOihuPWUuaW5zZXJ0KHQsbykscGIobyx0LG4pLG4pfX0pO3ZhciB2Yj1BLGRiPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4sbyxpPXI/dDp0Lml0ZXJhdG9yLGE9dC5uZXh0OyEobj12YihhLGkpKS5kb25lOylpZih2b2lkIDAhPT0obz1lKG4udmFsdWUpKSlyZXR1cm4gb30seWI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByP2RiKHQuZW50cmllcygpLChmdW5jdGlvbih0KXtyZXR1cm4gZSh0WzFdLHRbMF0pfSksITApOnQuZm9yRWFjaChlKX0sZ2I9WmUsbWI9dWIsYmI9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW1iKHRoaXMpLHI9Z2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuITEhPT1iYihlLChmdW5jdGlvbih0LG4pe2lmKCFyKHQsbixlKSlyZXR1cm4hMX0pLCEwKX19KTt2YXIgd2I9WmUsT2I9dWIsU2I9eWIsRWI9Rm0uTWFwLFRiPUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPU9iKHRoaXMpLHI9d2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1uZXcgRWI7cmV0dXJuIFNiKGUsKGZ1bmN0aW9uKHQsbyl7cih0LG8sZSkmJlRiKG4sbyx0KX0pKSxufX0pO3ZhciB4Yj1aZSxqYj11YixNYj15YjtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1qYih0aGlzKSxyPXhiKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLG49TWIoZSwoZnVuY3Rpb24odCxuKXtpZihyKHQsbixlKSlyZXR1cm57dmFsdWU6dH19KSwhMCk7cmV0dXJuIG4mJm4udmFsdWV9fSk7dmFyIGtiPVplLEFiPXViLFBiPXliO0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtmaW5kS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPUFiKHRoaXMpLHI9a2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1QYihlLChmdW5jdGlvbih0LG4pe2lmKHIodCxuLGUpKXJldHVybntrZXk6bn19KSwhMCk7cmV0dXJuIG4mJm4ua2V5fX0pO3ZhciBMYj1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX0sUmI9dWIsTmI9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09TmIoUmIodGhpcyksKGZ1bmN0aW9uKGUpe2lmKExiKGUsdCkpcmV0dXJuITB9KSwhMCl9fSk7dmFyIF9iPXViLENiPUZtLmdldCxGYj1GbS5oYXMsSWI9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtnZXRPckluc2VydDpmdW5jdGlvbih0LGUpe3JldHVybiBGYihfYih0aGlzKSx0KT9DYih0aGlzLHQpOihJYih0aGlzLHQsZSksZSl9fSk7dmFyIERiPUF0LFViPXViLHpiPUZtLmdldCxCYj1GbS5oYXMsR2I9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtnZXRPckluc2VydENvbXB1dGVkOmZ1bmN0aW9uKHQsZSl7aWYoVWIodGhpcyksRGIoZSksQmIodGhpcyx0KSlyZXR1cm4gemIodGhpcyx0KTswPT09dCYmMS90PT0tMS8wJiYodD0wKTt2YXIgcj1lKHQpO3JldHVybiBHYih0aGlzLHQscikscn19KTt2YXIgSGI9dWIsV2I9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2tleU9mOmZ1bmN0aW9uKHQpe3ZhciBlPVdiKEhiKHRoaXMpLChmdW5jdGlvbihlLHIpe2lmKGU9PT10KXJldHVybntrZXk6cn19KSwhMCk7cmV0dXJuIGUmJmUua2V5fX0pO3ZhciBKYj1aZSxLYj11YixWYj15YixxYj1GbS5NYXAsWWI9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHttYXBLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPUtiKHRoaXMpLHI9SmIodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1uZXcgcWI7cmV0dXJuIFZiKGUsKGZ1bmN0aW9uKHQsbyl7WWIobixyKHQsbyxlKSx0KX0pKSxufX0pO3ZhciBYYj1aZSxaYj11YiwkYj15YixRYj1GbS5NYXAsdHc9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9WmIodGhpcykscj1YYih0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxuPW5ldyBRYjtyZXR1cm4gJGIoZSwoZnVuY3Rpb24odCxvKXt0dyhuLG8scih0LG8sZSkpfSkpLG59fSk7dmFyIGV3PXViLHJ3PU5oLG53PUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsYXJpdHk6MSxmb3JjZWQ6ITB9LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9ZXcodGhpcykscj1hcmd1bWVudHMubGVuZ3RoLG49MDtuPHI7KXJ3KGFyZ3VtZW50c1tuKytdLChmdW5jdGlvbih0LHIpe253KGUsdCxyKX0pLHtBU19FTlRSSUVTOiEwfSk7cmV0dXJuIGV9fSk7dmFyIG93PUF0LGl3PXViLGF3PXliLHV3PVR5cGVFcnJvcjtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWl3KHRoaXMpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG49cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG93KHQpLGF3KGUsKGZ1bmN0aW9uKG8saSl7cj8ocj0hMSxuPW8pOm49dChuLG8saSxlKX0pKSxyKXRocm93IG5ldyB1dygiUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gbn19KTt2YXIgY3c9WmUsc3c9dWIsZnc9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9c3codGhpcykscj1jdyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4hMD09PWZ3KGUsKGZ1bmN0aW9uKHQsbil7aWYocih0LG4sZSkpcmV0dXJuITB9KSwhMCl9fSk7dmFyIGx3PUF0LGh3PXViLHB3PVR5cGVFcnJvcix2dz1GbS5nZXQsZHc9Rm0uaGFzLHl3PUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7dXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9aHcodGhpcyksbj1hcmd1bWVudHMubGVuZ3RoO2x3KGUpO3ZhciBvPWR3KHIsdCk7aWYoIW8mJm48Myl0aHJvdyBuZXcgcHcoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBpPW8/dncocix0KTpsdyhuPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxyKTtyZXR1cm4geXcocix0LGUoaSx0LHIpKSxyfX0pO3ZhciBndz1BLG13PUF0LGJ3PVQsd3c9bnIsT3c9VHlwZUVycm9yLFN3PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj13dyh0aGlzKSxvPW13KG4uZ2V0KSxpPW13KG4uaGFzKSxhPW13KG4uc2V0KSx1PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCFidyhlKSYmIWJ3KHUpKXRocm93IG5ldyBPdygiQXQgbGVhc3Qgb25lIGNhbGxiYWNrIHJlcXVpcmVkIik7cmV0dXJuIGd3KGksbix0KT8ocj1ndyhvLG4sdCksYncoZSkmJihyPWUociksZ3coYSxuLHQscikpKTpidyh1KSYmKHI9dSgpLGd3KGEsbix0LHIpKSxyfTtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7dXBzZXJ0OlN3fSksQXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLG5hbWU6InVwc2VydCIsZm9yY2VkOiEwfSx7dXBkYXRlT3JJbnNlcnQ6U3d9KTt2YXIgRXc9ZShLbSksVHc9ZCx4dz1BdCxqdz1YLE13PSR0LGt3PXFuLEF3PWksUHc9RnVuY3Rpb24sTHc9VHcoW10uY29uY2F0KSxSdz1UdyhbXS5qb2luKSxOdz17fSxfdz1Bdz9Qdy5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXh3KHRoaXMpLHI9ZS5wcm90b3R5cGUsbj1rdyhhcmd1bWVudHMsMSksbz1mdW5jdGlvbigpe3ZhciByPUx3KG4sa3coYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvP2Z1bmN0aW9uKHQsZSxyKXtpZighTXcoTncsZSkpe2Zvcih2YXIgbj1bXSxvPTA7bzxlO28rKyluW29dPSJhWyIrbysiXSI7TndbZV09UHcoIkMsYSIsInJldHVybiBuZXcgQygiK1J3KG4sIiwiKSsiKSIpfXJldHVybiBOd1tlXSh0LHIpfShlLHIubGVuZ3RoLHIpOmUuYXBwbHkodCxyKX07cmV0dXJuIGp3KHIpJiYoby5wcm90b3R5cGU9ciksb30sQ3c9X3c7QXIoe3RhcmdldDoiRnVuY3Rpb24iLHByb3RvOiEwLGZvcmNlZDpGdW5jdGlvbi5iaW5kIT09Q3d9LHtiaW5kOkN3fSk7dmFyIEZ3PU51KCJGdW5jdGlvbiIsImJpbmQiKSxJdz1udCxEdz1GdyxVdz1GdW5jdGlvbi5wcm90b3R5cGUsenc9ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5iaW5kO3JldHVybiB0PT09VXd8fEl3KFV3LHQpJiZlPT09VXcuYmluZD9EdzplfSkpLEJ3PWUoS3kpLEd3PU51KCJBcnJheSIsImNvbmNhdCIpLEh3PW50LFd3PUd3LEp3PUFycmF5LnByb3RvdHlwZSxLdz1lKChmdW5jdGlvbih0KXt2YXIgZT10LmNvbmNhdDtyZXR1cm4gdD09PUp3fHxIdyhKdyx0KSYmZT09PUp3LmNvbmNhdD9XdzplfSkpLFZ3PXhpLm1hcDtBcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFmYygibWFwIil9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIFZ3KHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHF3PU51KCJBcnJheSIsIm1hcCIpLFl3PW50LFh3PXF3LFp3PUFycmF5LnByb3RvdHlwZSwkdz1lKChmdW5jdGlvbih0KXt2YXIgZT10Lm1hcDtyZXR1cm4gdD09PVp3fHxZdyhadyx0KSYmZT09PVp3Lm1hcD9YdzplfSkpLFF3PWUocGwpLHRPPVl0LGVPPVhyLHJPPWVuLG5PPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Tyh0aGlzKSxyPXJPKGUpLG49YXJndW1lbnRzLmxlbmd0aCxvPWVPKG4+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpLGk9bj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsYT12b2lkIDA9PT1pP3I6ZU8oaSxyKTthPm87KWVbbysrXT10O3JldHVybiBlfTtBcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmaWxsOm5PfSk7dmFyIG9PPU51KCJBcnJheSIsImZpbGwiKSxpTz1udCxhTz1vTyx1Tz1BcnJheS5wcm90b3R5cGUsY089ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5maWxsO3JldHVybiB0PT09dU98fGlPKHVPLHQpJiZlPT09dU8uZmlsbD9hTzplfSkpLHNPPU5oLGZPPWFjO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBzTyh0LChmdW5jdGlvbih0LHIpe2ZPKGUsdCxyKX0pLHtBU19FTlRSSUVTOiEwfSksZX19KTt2YXIgbE89ZShaLk9iamVjdC5mcm9tRW50cmllcyksaE89bnIscE89Ymgsdk89WmUsZE89QSx5Tz1ZdCxnTz1mdW5jdGlvbih0LGUscixuKXt0cnl7cmV0dXJuIG4/ZShoTyhyKVswXSxyWzFdKTplKHIpfWNhdGNoKGtTKXtwTyh0LCJ0aHJvdyIsa1MpfX0sbU89cmgsYk89Zmksd089ZW4sT089YWMsU089ZGgsRU89Y2gsVE89QXJyYXkseE89ZnVuY3Rpb24odCl7dmFyIGU9eU8odCkscj1iTyh0aGlzKSxuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxpPXZvaWQgMCE9PW87aSYmKG89dk8obyxuPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkpO3ZhciBhLHUsYyxzLGYsbCxoPUVPKGUpLHA9MDtpZighaHx8dGhpcz09PVRPJiZtTyhoKSlmb3IoYT13TyhlKSx1PXI/bmV3IHRoaXMoYSk6VE8oYSk7YT5wO3ArKylsPWk/byhlW3BdLHApOmVbcF0sT08odSxwLGwpO2Vsc2UgZm9yKHU9cj9uZXcgdGhpczpbXSxmPShzPVNPKGUsaCkpLm5leHQ7IShjPWRPKGYscykpLmRvbmU7cCsrKWw9aT9nTyhzLG8sW2MudmFsdWUscF0sITApOmMudmFsdWUsT08odSxwLGwpO3JldHVybiB1Lmxlbmd0aD1wLHV9O0FyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohSmQoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOnhPfSk7dmFyIGpPPWUoWi5BcnJheS5mcm9tKSxNTz1OdSgiQXJyYXkiLCJ2YWx1ZXMiKSxrTz1EcixBTz0kdCxQTz1udCxMTz1NTyxSTz1BcnJheS5wcm90b3R5cGUsTk89e0RPTVRva2VuTGlzdDohMCxOb2RlTGlzdDohMH0sX089ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZXM7cmV0dXJuIHQ9PT1ST3x8UE8oUk8sdCkmJmU9PT1STy52YWx1ZXN8fEFPKE5PLGtPKHQpKT9MTzplfSkpLENPPUtyLEZPPUJyLElPPUosRE89UmFuZ2VFcnJvcixVTz1kLHpPPVFyLEJPPUJyLEdPPUosSE89VU8oKGZ1bmN0aW9uKHQpe3ZhciBlPUZPKElPKHRoaXMpKSxyPSIiLG49Q08odCk7aWYobjwwfHxuPT09MS8wKXRocm93IG5ldyBETygiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtuPjA7KG4+Pj49MSkmJihlKz1lKSkxJm4mJihyKz1lKTtyZXR1cm4gcn0pKSxXTz1VTygiIi5zbGljZSksSk89TWF0aC5jZWlsLEtPPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7dmFyIG8saSxhPUJPKEdPKGUpKSx1PXpPKHIpLGM9YS5sZW5ndGgscz12b2lkIDA9PT1uPyIgIjpCTyhuKTtyZXR1cm4gdTw9Y3x8IiI9PT1zP2E6KChpPUhPKHMsSk8oKG89dS1jKS9zLmxlbmd0aCkpKS5sZW5ndGg+byYmKGk9V08oaSwwLG8pKSx0P2EraTppK2EpfX0sVk89ZCxxTz1vLFlPPXtzdGFydDpLTyghMSksZW5kOktPKCEwKX0uc3RhcnQsWE89UmFuZ2VFcnJvcixaTz1pc0Zpbml0ZSwkTz1NYXRoLmFicyxRTz1EYXRlLnByb3RvdHlwZSx0Uz1RTy50b0lTT1N0cmluZyxlUz1WTyhRTy5nZXRUaW1lKSxyUz1WTyhRTy5nZXRVVENEYXRlKSxuUz1WTyhRTy5nZXRVVENGdWxsWWVhciksb1M9Vk8oUU8uZ2V0VVRDSG91cnMpLGlTPVZPKFFPLmdldFVUQ01pbGxpc2Vjb25kcyksYVM9Vk8oUU8uZ2V0VVRDTWludXRlcyksdVM9Vk8oUU8uZ2V0VVRDTW9udGgpLGNTPVZPKFFPLmdldFVUQ1NlY29uZHMpLHNTPXFPKChmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT09dFMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXFPKChmdW5jdGlvbigpe3RTLmNhbGwobmV3IERhdGUoTmFOKSl9KSk/ZnVuY3Rpb24oKXtpZighWk8oZVModGhpcykpKXRocm93IG5ldyBYTygiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPW5TKHQpLHI9aVModCksbj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIG4rWU8oJE8oZSksbj82OjQsMCkrIi0iK1lPKHVTKHQpKzEsMiwwKSsiLSIrWU8oclModCksMiwwKSsiVCIrWU8ob1ModCksMiwwKSsiOiIrWU8oYVModCksMiwwKSsiOiIrWU8oY1ModCksMiwwKSsiLiIrWU8ociwzLDApKyJaIn06dFMsZlM9QSxsUz1ZdCxoUz13ZSxwUz1zUyx2Uz1iO0FyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PWZTKERhdGUucHJvdG90eXBlLnRvSlNPTix7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pKX0se3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1sUyh0aGlzKSxyPWhTKGUsIm51bWJlciIpO3JldHVybiJudW1iZXIiIT10eXBlb2Ygcnx8aXNGaW5pdGUocik/InRvSVNPU3RyaW5nImluIGV8fCJEYXRlIiE9PXZTKGUpP2UudG9JU09TdHJpbmcoKTpmUyhwUyxlKTpudWxsfX0pO3ZhciBkUz1aLHlTPWY7ZFMuSlNPTnx8KGRTLkpTT049e3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeX0pO3ZhciBnUz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHlTKGRTLkpTT04uc3RyaW5naWZ5LG51bGwsYXJndW1lbnRzKX0sbVM9ZShnUyksYlM9ZnVuY3Rpb24oKXtyZXR1cm4gQWcoKGZ1bmN0aW9uIHQoZSl7eGcodGhpcyx0KSxQZyh0aGlzLCJfY2FjaGUiLHZvaWQgMCksUGcodGhpcywiX2NhY2hlSGVhZCIsMCksdGhpcy5fY2FjaGU9bmV3IEZsb2F0MzJBcnJheShlKX0pLFt7a2V5OiJjYWNoZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7aWYodC5sZW5ndGgrdGhpcy5fY2FjaGVIZWFkPnRoaXMuX2NhY2hlLmxlbmd0aCYmKGU9dC5zdWJhcnJheSh0aGlzLl9jYWNoZS5sZW5ndGgtdGhpcy5fY2FjaGVIZWFkKSx0PXQuc3ViYXJyYXkoMCx0aGlzLl9jYWNoZS5sZW5ndGgtdGhpcy5fY2FjaGVIZWFkKSksdGhpcy5fY2FjaGUuc2V0KHQsdGhpcy5fY2FjaGVIZWFkKSx0aGlzLl9jYWNoZUhlYWQrPXQubGVuZ3RoLHRoaXMuX2NhY2hlSGVhZD09PXRoaXMuX2NhY2hlLmxlbmd0aCYmKHRoaXMuX2NhY2hlSGVhZD0wKSxlKXJldHVybiB0aGlzLmNhY2hlKGUpfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSh0aGlzLl9jYWNoZS5sZW5ndGgpO3JldHVybiB0LnNldCh0aGlzLl9jYWNoZS5zdWJhcnJheSh0aGlzLl9jYWNoZUhlYWQpKSx0LnNldCh0aGlzLl9jYWNoZS5zdWJhcnJheSgwLHRoaXMuX2NhY2hlSGVhZCksdGhpcy5fY2FjaGUubGVuZ3RoLXRoaXMuX2NhY2hlSGVhZCksdH19XSl9KCk7ZnVuY3Rpb24gd1ModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtyZXR1cm4gZS5sZW5ndGgrcj50Lmxlbmd0aCYmKGU9ZS5zdWJhcnJheSgwLHQubGVuZ3RoLXIpKSx0LnNldChlLHIpLHIrZS5sZW5ndGh9dmFyIE9TPVsiZXZlbnQiXSxTUz00OGUzLEVTPWZ1bmN0aW9uKCl7cmV0dXJuIEFnKChmdW5jdGlvbiB0KGUpe3ZhciByO3hnKHRoaXMsdCksUGcodGhpcywiY2FjaGVNYW5hZ2VyTWFwIixuZXcgRXcpLFBnKHRoaXMsImR1bXBNYXAiLHZvaWQgMCksUGcodGhpcywiZHVtcEhlYWQiLDApLFBnKHRoaXMsImR1bXBMZW5ndGgiLDApLFBnKHRoaXMsImNhY2hlTGVuZ3RoIiwwKSxQZyh0aGlzLCJvdmVybG9hZFRocmVzaG9sZCIsdm9pZCAwKSxQZyh0aGlzLCJpc09uIix2b2lkIDApLFBnKHRoaXMsImd1bHBVcmwiLHZvaWQgMCksUGcodGhpcywid2FzbVVybCIsdm9pZCAwKSxQZyh0aGlzLCJ0eXBlNU1vZGVsVXJsIix2b2lkIDApLFBnKHRoaXMsInR5cGU2TW9kZWxVcmwiLHZvaWQgMCksUGcodGhpcywiYW5zTGV2ZWwiLHZvaWQgMCksUGcodGhpcywiaXNFbmhhbmNlTW9kZSIsdm9pZCAwKSxQZyh0aGlzLCJhaW5yVHlwZSIsdm9pZCAwKSxQZyh0aGlzLCJpc01vZHVsZVJlYWR5IiwhMSksUGcodGhpcywiaXNFbmdpbmVSZWFkeSIsITEpLFBnKHRoaXMsImN1cnJlbnRDaGFubmVsIix2b2lkIDApLFBnKHRoaXMsImN1cnJlbnRTYW1wbGVSYXRlIix2b2lkIDApLFBnKHRoaXMsIkFJTlIiLHZvaWQgMCksUGcodGhpcywibnJFbmdpbmVMaXN0IixbXSk7dmFyIG49ZS5lbmFibGVDYWNoZSxvPWUuY2FjaGVUaW1lLGk9ZS5vdmVybG9hZFRocmVzaG9sZCxhPWUuaXNPbix1PWUudXJscyxjPWUuYW5zTGV2ZWwscz1lLmlzRW5oYW5jZU1vZGUsZj1lLmFpbnJUeXBlLGw9dS5ndWxwVXJsLGg9dS53YXNtVXJsLHA9dS50eXBlNU1vZGVsVXJsLHY9dS50eXBlNk1vZGVsVXJsO24mJih0aGlzLmNhY2hlTGVuZ3RoPW8qU1MpLHRoaXMub3ZlcmxvYWRUaHJlc2hvbGQ9aSx0aGlzLmlzT249YSx0aGlzLmd1bHBVcmw9bCx0aGlzLndhc21Vcmw9aCx0aGlzLnR5cGU1TW9kZWxVcmw9cCx0aGlzLnR5cGU2TW9kZWxVcmw9dix0aGlzLmFuc0xldmVsPWMsdGhpcy5pc0VuaGFuY2VNb2RlPXMsdGhpcy5haW5yVHlwZT1mLHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsencocj10aGlzLmhhbmRsZU1lc3NhZ2UpLmNhbGwocix0aGlzKSksdGhpcy5pbml0V29ya2VyKCl9KSxbe2tleToiaW5pdFdvcmtlciIsdmFsdWU6KG49VGcoU2coKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscixuLG89dGhpcztyZXR1cm4gU2coKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gZT10aGlzLmd1bHBVcmwscj10aGlzLndhc21VcmwsdC5wcmV2PTEsdC5uZXh0PTQsaW1wb3J0KGUpO2Nhc2UgNDpyZXR1cm4gbj10LnNlbnQuZGVmYXVsdCx0Lm5leHQ9NyxuZXcgQncoKGZ1bmN0aW9uKHQpe28uQUlOUj17d2FzbUJpbmFyeUZpbGU6cixvblJ1bnRpbWVJbml0aWFsaXplZDpmdW5jdGlvbigpe3QoKX19LG4oby5BSU5SKX0pKTtjYXNlIDc6dGhpcy5pc01vZHVsZVJlYWR5PSEwLHQubmV4dD0xNDticmVhaztjYXNlIDEwOnQucHJldj0xMCx0LnQwPXQuY2F0Y2goMSksVFMoImVycm9yIiwiaW5pdFdvcmtlciBlcnJvciAiLmNvbmNhdCh0LnQwKSksdGhpcy5pc01vZHVsZVJlYWR5PSExO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxLDEwXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJpbml0RW5naW5lIix2YWx1ZToocj1UZyhTZygpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbixvLGksYSx1LGMscyxmO3JldHVybiBTZygpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHRoaXMuQUlOUil7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIFRTKCJlcnJvciIsIkFJTlIgbW9kdWxlIG5vdCByZWFkeSIpLHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6bz10aGlzLnR5cGU2TW9kZWxVcmwsaT10aGlzLnR5cGU1TW9kZWxVcmwsYT10aGlzLmFuc0xldmVsLHU9dGhpcy5pc0VuaGFuY2VNb2RlLGM9dGhpcy5haW5yVHlwZSxUUygiaW5mbyIsS3cobj0iaW50ZXJBdWRpb05yIHNhbXBsZVJhdGU6ICIuY29uY2F0KGUsIiwgY2hhbm5lbDogIikpLmNhbGwobixyKSk7Y2FzZSA1OmlmKCFyLS0pe3QubmV4dD0yMjticmVha31pZihzPW5ldyB0aGlzLkFJTlIuQXVkaW9OckVuZ2luZShlLDEsNiksZj0iIiw1IT09Yyl7dC5uZXh0PTE0O2JyZWFrfXJldHVybiB0Lm5leHQ9MTEseFMoaSk7Y2FzZSAxMTpmPXQuc2VudCx0Lm5leHQ9MTg7YnJlYWs7Y2FzZSAxNDppZig2IT09Yyl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0Lm5leHQ9MTcseFMobyk7Y2FzZSAxNzpmPXQuc2VudDtjYXNlIDE4OnMuaW5pdEF1ZGlvTnIoZixjLHUsYSksdGhpcy5uckVuZ2luZUxpc3QucHVzaChzKSx0Lm5leHQ9NTticmVhaztjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24odCxlKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2V0TW9kZSIsdmFsdWU6KGU9VGcoU2coKS5tYXJrKChmdW5jdGlvbiB0KGUscixuKXt2YXIgbyxpLGEsdSxjLHM7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYodGhpcy5hbnNMZXZlbD1lLHRoaXMuaXNFbmhhbmNlTW9kZT1yLHRoaXMuYWluclR5cGU9bix1PXRoaXMudHlwZTVNb2RlbFVybCxjPXRoaXMudHlwZTZNb2RlbFVybCxUUygiaW5mbyIsS3cobz1LdyhpPSJzZXRNb2RlIGFuc0xldmVsOiAiLmNvbmNhdChlLCIsIGlzRW5oYW5jZU1vZGU6ICIpKS5jYWxsKGksciwiLCBhaW5yVHlwZTogIikpLmNhbGwobyxuKSkscz0iIiw1IT09bil7dC5uZXh0PTEyO2JyZWFrfXJldHVybiB0Lm5leHQ9OSx4Uyh1KTtjYXNlIDk6cz10LnNlbnQsdC5uZXh0PTE2O2JyZWFrO2Nhc2UgMTI6aWYoNiE9PW4pe3QubmV4dD0xNjticmVha31yZXR1cm4gdC5uZXh0PTE1LHhTKGMpO2Nhc2UgMTU6cz10LnNlbnQ7Y2FzZSAxNjpyZXR1cm4gdC5uZXh0PTE4LEJ3LmFsbCgkdyhhPXRoaXMubnJFbmdpbmVMaXN0KS5jYWxsKGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZ2luZVNldENvbmZpZyhzLG4scixlKX0pKSk7Y2FzZSAxODpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7aWYoISh0aGlzLmNhY2hlTGVuZ3RoPD0wKSl7dmFyIHI9dCpTUyxuPW5ldyBFdyxvPTA7UXcoZT10aGlzLmNhY2hlTWFuYWdlck1hcCkuY2FsbChlLChmdW5jdGlvbih0LGUpe3ZhciBpPXQuZ2V0Q2FjaGUoKSxhPW5ldyBGbG9hdDMyQXJyYXkocik7bz13UyhhLGkpLG4uc2V0KGUsYSl9KSksdGhpcy5kdW1wTWFwPW4sdGhpcy5kdW1wSGVhZD1vLHRoaXMuZHVtcExlbmd0aD1yLHRoaXMuY2hlY2tGb3JEdW1wKG4scixvKX19fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOih0PVRnKFNnKCkubWFyaygoZnVuY3Rpb24gdChlLHIpe3ZhciBuLG8saSxhLHUsYyxzLGYsbCxoLHAsdixkLHksZyxtLGIsdyxPLFMsRSxULHgsaixNLGs7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoaT10aGlzLmlzT24sYT10aGlzLmlzRW5naW5lUmVhZHksdT10aGlzLmlzTW9kdWxlUmVhZHksYz10aGlzLmN1cnJlbnRTYW1wbGVSYXRlLHM9dGhpcy5jdXJyZW50Q2hhbm5lbCxmPXRoaXMub3ZlcmxvYWRUaHJlc2hvbGQsbD10aGlzLm5yRW5naW5lTGlzdCxoPXRoaXMuY2FjaGVMZW5ndGgscD10aGlzLmR1bXBNYXAsdj10aGlzLmR1bXBIZWFkLGQ9dGhpcy5kdW1wTGVuZ3RoLHk9ZS5mb3JtYXQsZz1lLm51bWJlck9mQ2hhbm5lbHMsbT1lLm51bWJlck9mRnJhbWVzLGI9ZS5zYW1wbGVSYXRlLHc9ZS50aW1lc3RhbXAsaSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHIuZW5xdWV1ZShlKSx0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA1OmlmKHUpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA3OmlmKE89YiE9PWN8fGchPT1zLGI9PT1TUyl7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBUUygiZXJyb3IiLCJVbnN1cHBvcnRlZCBzYW1wbGVSYXRlOiAiLmNvbmNhdChiLCIsIHNpbGVudCB0dXJuIG9mZiIpKSx0aGlzLmlzT249ITEsdGhpcy5lbWl0KCJvblVuc3VwcG9ydGVkIix7ZXZlbnQ6Im9uVW5zdXBwb3J0ZWQiLG1lc3NhZ2U6IlVuc3VwcG9ydGVkIHNhbXBsZVJhdGUifSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6aWYoYSYmIU8pe3QubmV4dD0yNjticmVha31yZXR1cm4gdC5wcmV2PTE0LHRoaXMuaXNFbmdpbmVSZWFkeT0hMCx0aGlzLmN1cnJlbnRDaGFubmVsPWcsdGhpcy5jdXJyZW50U2FtcGxlUmF0ZT1iLHQubmV4dD0yMCx0aGlzLmluaXRFbmdpbmUoYixnKTtjYXNlIDIwOnQubmV4dD0yNjticmVhaztjYXNlIDIyOnJldHVybiB0LnByZXY9MjIsdC50MD10LmNhdGNoKDE0KSxUUygiZXJyb3IiLCJpbml0RW5naW5lIGZhaWxlZCwgZXJyb3I6ICIuY29uY2F0KHQudDAsIiAiKSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjY6aWYodm9pZCAwIT09KFM9TVMoeSkpKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIFRTKCJlcnJvciIsIlVua25vd24gZm9ybWF0OiAiLmNvbmNhdCh5KSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzA6RT1wZXJmb3JtYW5jZS5ub3coKSxUPSR3KG49Y08obz1uZXcgQXJyYXkoZykpLmNhbGwobywwKSkuY2FsbChuLChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG0pfSkpLFF3KFQpLmNhbGwoVCwoZnVuY3Rpb24odCxyKXtlLmNvcHlUbyh0LHtwbGFuZUluZGV4OnIsZm9ybWF0Onl9KX0pKSx4PVtdLFF3KFQpLmNhbGwoVCwoZnVuY3Rpb24odCxlKXt2YXIgcj1sW2VdO3IuZ2V0SW5wdXREYXRhQnVmZmVyKCkuc2V0KHQpO3ZhciBuPXIucHJvY2Vzc0ZyYW1lKFMsMSk7eC5wdXNoKG4pfSkpLGg+MCYmKHRoaXMuY2FjaGUoVCwiaW5wdXQiKSx0aGlzLmNhY2hlKHgsIm91dHB1dCIpLHAmJih0aGlzLmNhY2hlVG9EdW1wKFQscCx2LCJpbnB1dCIpLGo9dGhpcy5jYWNoZVRvRHVtcCh4LHAsdiwib3V0cHV0IiksdGhpcy5jaGVja0ZvckR1bXAocCxkLGopKSksTT1uZXcgRmxvYXQzMkFycmF5KG0qZyksUXcoeCkuY2FsbCh4LChmdW5jdGlvbih0LGUpe00uc2V0KHQsZSptKX0pKSxyLmVucXVldWUobmV3IEF1ZGlvRGF0YSh7Zm9ybWF0Onksc2FtcGxlUmF0ZTpiLG51bWJlck9mRnJhbWVzOm0sbnVtYmVyT2ZDaGFubmVsczpnLHRpbWVzdGFtcDp3LGRhdGE6TX0pKSwoaz1wZXJmb3JtYW5jZS5ub3coKSktRT5mJiZ0aGlzLmVtaXQoIm9uT3ZlcmxvYWQiLHtldmVudDoib25PdmVybG9hZCIsZWxhcHNlZFRpbWU6ay1FfSk7Y2FzZSA0MTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyxbWzE0LDIyXV0pfSkpKSxmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYWNoZU1hbmFnZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2FjaGVNYW5hZ2VyTWFwLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGJTKHRoaXMuY2FjaGVMZW5ndGgpLHRoaXMuY2FjaGVNYW5hZ2VyTWFwLnNldCh0LGUpKSxlfX0se2tleToiY2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztRdyh0KS5jYWxsKHQsKGZ1bmN0aW9uKHQsbil7dmFyIG8saT1LdyhvPSIiLmNvbmNhdChlLCItIikpLmNhbGwobyxuKTtyLmdldENhY2hlTWFuYWdlcihpKS5jYWNoZSh0KX0pKX19LHtrZXk6ImNhY2hlVG9EdW1wIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgbz0wO3JldHVybiBRdyh0KS5jYWxsKHQsKGZ1bmN0aW9uKHQsaSl7dmFyIGEsdT1LdyhhPSIiLmNvbmNhdChuLCItIikpLmNhbGwoYSxpKSxjPWUuZ2V0KHUpO2MmJihvPXdTKGMsdCxyKSl9KSksb319LHtrZXk6ImNoZWNrRm9yRHVtcCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe2lmKHQmJnI+PWUpe3ZhciBuLG89bE8odCksaT0kdyhuPWpPKF9PKHQpLmNhbGwodCkpKS5jYWxsKG4sKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1ZmZlcn0pKTt0aGlzLmVtaXQoIm9uRHVtcCIse2V2ZW50OiJvbkR1bXAiLGR1bXBNYXA6b30saSksdGhpcy5kdW1wTWFwPXZvaWQgMH10aGlzLmR1bXBIZWFkPXJ9fSx7a2V5OiJlbWl0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOnQsZGF0YTplfSx7dHJhbnNmZXI6cn0pfX0se2tleToiaGFuZGxlTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10LmRhdGEsbj1yLmV2ZW50LG89dGMocixPUyk7aWYoVFMoImluZm8iLEt3KGU9IiIuY29uY2F0KG4sIiAiKSkuY2FsbChlLG1TKG8pKSksImNyZWF0ZVByb2Nlc3MiPT09bil7dmFyIGksYT1vLnNvdXJjZSx1PW8uc2luayxjPW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTp6dyhpPXRoaXMudHJhbnNmb3JtKS5jYWxsKGksdGhpcyl9KTthLnBpcGVUaHJvdWdoKGMpLnBpcGVUbyh1KX1lbHNlIGlmKCJzd2l0Y2hPbiI9PT1uKXt2YXIgcz1vLmlzT247dGhpcy5pc09uPXN9ZWxzZSBpZigic2V0TW9kZSI9PT1uKXt2YXIgZj1vLmFuc0xldmVsLGw9by5pc0VuaGFuY2VNb2RlLGg9by5haW5yVHlwZTt0aGlzLnNldE1vZGUoZixsLGgpfWVsc2UgaWYoImR1bXAiPT09bil7dmFyIHA9by50b3RhbFRpbWU7dGhpcy5kdW1wKHApfX19XSk7dmFyIHQsZSxyLG59KCk7ZnVuY3Rpb24gVFModCxlKXtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJsb2ciLGRhdGE6e3R5cGU6dCxtZXNzYWdlOmV9fSl9ZnVuY3Rpb24geFModCl7cmV0dXJuIGpTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqUygpe3JldHVybihqUz1UZyhTZygpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGZldGNoKGUpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5uZXh0PTUsci5hcnJheUJ1ZmZlcigpO2Nhc2UgNTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNUyh0KXtyZXR1cm4iZjMyLXBsYW5hciI9PT10PzA6InMzMi1wbGFuYXIiPT09dD8xOiJzMTYtcGxhbmFyIj09PXQ/MjoidTgtcGxhbmFyIj09PXQ/Mzp2b2lkIDB9c2VsZi5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKCJpbml0Ij09PWUuZXZlbnQpe3ZhciByPWUuY29uZmlnO25ldyBFUyhyKX19fSgpOwo=",m8=typeof window<"u"&&window.Blob&&new Blob([atob(k4)],{type:"text/javascript;charset=utf-8"});function T3A(){var A;try{if(!(A=m8&&(y8||window.webkitURL).createObjectURL(m8)))throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+k4)}finally{var I;!(typeof window<"u"&&S3A(I=navigator.userAgent).call(I,"Trident/")>0)&&A&&(y8||window.webkitlRL).revokeObjectURL(A)}}var p3A=oH,w8=KA(p3A),F3A=$3,U3A=KA(F3A),k3A=fH,G8=KA(k3A),Y4={exports:{}};(function(A){var I=Object.prototype.hasOwnProperty,g="~";function C(){}function Q(e,t,o){this.fn=e,this.context=t,this.once=o||!1}function i(e,t,o,r,s){if(typeof o!="function")throw new TypeError("The listener must be a function");var v=new Q(o,r||e,s),n=g?g+t:t;return e._events[n]?e._events[n].fn?e._events[n]=[e._events[n],v]:e._events[n].push(v):(e._events[n]=v,e._eventsCount++),e}function B(e,t){--e._eventsCount==0?e._events=new C:delete e._events[t]}function E(){this._events=new C,this._eventsCount=0}w8&&(C.prototype=w8(null),new C().__proto__||(g=!1)),E.prototype.eventNames=function(){var e,t,o=[];if(this._eventsCount===0)return o;for(t in e=this._events)I.call(e,t)&&o.push(g?U3A(t).call(t,1):t);return G8?qC(o).call(o,G8(e)):o},E.prototype.listeners=function(e){var t=g?g+e:e,o=this._events[t];if(!o)return[];if(o.fn)return[o.fn];for(var r=0,s=o.length,v=new Array(s);r")}}]);var I}(),N4=function(A){return A[A.CAPTURE=0]="CAPTURE",A[A.PRE_PROCESSING=1]="PRE_PROCESSING",A[A.ENCODE=2]="ENCODE",A[A.TRANSFER=3]="TRANSFER",A[A.POST_PROCESSING=4]="POST_PROCESSING",A[A.DECODE=5]="DECODE",A[A.RENDERING=6]="RENDERING",A}(N4||{}),ka=function(A){return A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A}(ka||{}),Z4=function(A){return A[A.EXTERNAL=0]="EXTERNAL",A[A.INTERNAL=1]="INTERNAL",A}(Z4||{});function K3A(A,I,g){return I=Bo(I),P2(A,Ph()?A2(I,g||[],Bo(A).constructor):I.apply(A,g))}var W3A=function(){function A(){var I,g;c2(this,A);for(var C=arguments.length,Q=new Array(C),i=0;i=0;B--)(Q=A[B])&&(i=Q(I,g,i)||i);return i&&X3A(I,g,i),i},x3A={overloadThreshold:20,enableCache:!1,cacheTime:30,dumpTime:90,ansMode:Or.AUTO,resample:!0,urls:{gulpUrl:J3A,wasmUrl:V3A,type5ModelUrl:z3A,type6ModelUrl:M3A}},DP=Xg(Xg(Xg(Xg({},Or.AUTO,{ansLevel:3,isEnhanceMode:!1,ainrType:6}),Or.LOW,{ansLevel:3,isEnhanceMode:!1,ainrType:0}),Or.MEDIUM,{ansLevel:3,isEnhanceMode:!0,ainrType:0}),Or.HIGH,{ansLevel:3,isEnhanceMode:!1,ainrType:5}),ct=function(){function A(i){var B,E;return c2(this,A),Xg(E=j3A(this,A),"name","RTCAIAnsExtension"),Xg(E,"version","4.66.5"),Xg(E,"_config",void 0),Xg(E,"_workerMap",new Wy),Xg(E,"_enableMap",new Wy),Xg(E,"_context",void 0),Xg(E,"_contextNodes",new Wy),E._config=Qr(Qr({},x3A),i),E._enableMap.set(qC(B="".concat(ka.STREAM_INDEX_MAIN,"-")).call(B,nt.AUDIO_SOURCE_TYPE_INTERNAL),!0),E._config.resample&&typeof AudioContext<"u"&&(E._context=new AudioContext({sampleRate:48e3})),E}return d2(A,W3A),l2(A,[{key:"applyConstraints",value:function(i,B){}},{key:"init",value:(Q=Sa(Ji().mark(function i(B){return Ji().wrap(function(E){for(;;)switch(E.prev=E.next){case 0:this._config=Qr(Qr({},this._config),B),this._initWorker(ka.STREAM_INDEX_MAIN,nt.AUDIO_SOURCE_TYPE_INTERNAL);case 2:case"end":return E.stop()}},i,this)})),function(i){return Q.apply(this,arguments)})},{key:"effect",value:(C=Sa(Ji().mark(function i(B,E){var e,t,o,r,s,v,n,a,c,P,d,h,u;return Ji().wrap(function(D){for(;;)switch(D.prev=D.next){case 0:if(e=E||B.mediaTrack,t=B.mediaType,o=B.sourceType,r=B.streamIndex,o!==void 0&&r!==void 0){D.next=5;break}return(s=this.logger)===null||s===void 0||s.warn(qC(v="[AINR] track sourceType or streamIndex is undefined, sourceType: ".concat(o,", streamIndex: ")).call(v,r)),D.abrupt("return",e);case 5:if(t!=="audio"){D.next=16;break}return this._destroyWorker(r),n=this._initWorker(r,o===Z4.INTERNAL?nt.AUDIO_SOURCE_TYPE_INTERNAL:nt.AUDIO_SOURCE_TYPE_EXTERNAL),a=n.worker,c=B.mediaTrack,this._config.resample&&(c=this.resample(r,c)),P=new MediaStreamTrackProcessor(c),d=new MediaStreamTrackGenerator("audio"),h=P.readable,u=d.writable,a.postMessage({event:"createProcess",source:h,sink:u},[h,u]),D.abrupt("return",d||e);case 16:return D.abrupt("return",e);case 17:case"end":return D.stop()}},i,this)})),function(i,B){return C.apply(this,arguments)})},{key:"enable",value:function(){var i,B,E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{streamIndex:ka.STREAM_INDEX_MAIN,sourceType:nt.AUDIO_SOURCE_TYPE_INTERNAL},e=E.streamIndex,t=E.sourceType;this._enableMap.set(qC(i="".concat(e,"-")).call(i,t),!0);var o=(B=this._workerMap.get(e))!==null&&B!==void 0?B:this._initWorker(e,t),r=o.worker;o.sourceType===t&&r.postMessage({event:"switchOn",isOn:!0})}},{key:"disable",value:function(){var i,B,E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{streamIndex:ka.STREAM_INDEX_MAIN,sourceType:nt.AUDIO_SOURCE_TYPE_INTERNAL},e=E.streamIndex,t=E.sourceType;this._enableMap.set(qC(i="".concat(e,"-")).call(i,t),!1);var o=(B=this._workerMap.get(e))!==null&&B!==void 0?B:{},r=o.worker,s=o.sourceType;r&&s===t&&r.postMessage({event:"switchOn",isOn:!1})}},{key:"isSupported",value:function(){return q3A()}},{key:"isOpen",value:function(i){var B,E=i.streamIndex,e=i.sourceType;return this._enableMap.get(qC(B="".concat(E,"-")).call(B,e))||!1}},{key:"setAnsMode",value:(g=Sa(Ji().mark(function i(B){var E,e,t,o,r;return Ji().wrap(function(s){for(;;)switch(s.prev=s.next){case 0:this._config.ansMode=B,e=DP[B],t=e.ansLevel,o=e.isEnhanceMode,r=e.ainrType,Ta(E=this._workerMap).call(E,function(v){v.worker.postMessage({event:"setMode",ansLevel:t,isEnhanceMode:o,ainrType:r})});case 3:case"end":return s.stop()}},i,this)})),function(i){return g.apply(this,arguments)})},{key:"dump",value:(I=Sa(Ji().mark(function i(B){var E,e,t=this;return Ji().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(e=(E=this._workerMap.get(B))===null||E===void 0?void 0:E.worker){o.next=3;break}throw new Error("worker not found");case 3:return e.postMessage({event:"dump",totalTime:this._config.dumpTime}),o.abrupt("return",new ejA(function(r){t.once("onDump",function(s){var v,n,a,c=s.dumpMap,P=[],d=[];Ta(v=ojA(c)).call(v,function(b){var G=c[b],L=h7A(b.split("-"),2),m=L[0];L[1],m==="input"?P.push(G):m==="output"&&d.push(G)});var h=qC(n="".concat(Ya.BEFORE_PROCESS,"_")).call(n,B,"_",48e3,".wav"),u=qC(a="".concat(Ya.AFTER_PROCESS,"_")).call(a,B,"_",48e3,".wav"),D=R8(P,48e3,h),y=R8(d,48e3,u);r(Xg(Xg({},Ya.BEFORE_PROCESS,{file:D,name:h}),Ya.AFTER_PROCESS,{file:y,name:u}))})}));case 5:case"end":return o.stop()}},i,this)})),function(i){return I.apply(this,arguments)})},{key:"_initWorker",value:function(i,B){var E,e,t=Qr(Qr({},this._config),{},{isOn:this._enableMap.get(qC(E="".concat(i,"-")).call(E,B))||!1,ansLevel:DP[this._config.ansMode].ansLevel,isEnhanceMode:DP[this._config.ansMode].isEnhanceMode,ainrType:DP[this._config.ansMode].ainrType}),o=new T3A;return o.postMessage({event:"init",config:t}),o.addEventListener("message",sjA(e=this._handleWorkerMessage).call(e,this)),this._workerMap.set(i,{worker:o,sourceType:B}),{worker:o,sourceType:B}}},{key:"_handleWorkerMessage",value:function(i){var B,E,e,t,o=i.data,r=o.type,s=o.data;if(r!=="log")if(r!=="onDump"){if((B=this.logger)===null||B===void 0||B.info("_handleWorkerMessage",qC(E="type ".concat(r,", data ")).call(E,s)),r==="onOverload")this.emit(PR.onOverload,{elapsedTime:s.elapsedTime});else{if(r!=="onUnsupported")return;this.emit(PR.onUnsupported,{message:s.message})}(e=this.monitor)===null||e===void 0||e.report("rtc_sdk_callback",{sdk_callback_name:qC(t="".concat(this.name,".")).call(t,r),error_code:0,message:rR(s||{})})}else this.emit("onDump",s);else{var v,n=s.type,a=s.message;(v=this.logger)===null||v===void 0||v[n]("worker",a)}}},{key:"_destroyWorker",value:function(i){var B,E=(B=this._workerMap.get(i))===null||B===void 0?void 0:B.worker;E&&(E.terminate(),this._workerMap.delete(i))}},{key:"resample",value:function(i,B){var E=this._context;if(!E)return B;var e=B.id,t=this._contextNodes.get(i);t&&t.id!==e&&(t.source.disconnect(),t.dest.disconnect());var o=new MediaStreamAudioSourceNode(E,{mediaStream:new MediaStream([B])}),r=new MediaStreamAudioDestinationNode(E);return o.connect(r),this._contextNodes.set(i,{id:e,source:o,dest:r}),r.stream.getAudioTracks()[0]}},{key:"destroy",value:function(){var i,B,E,e=this;Ta(i=this._workerMap).call(i,function(t,o){e._destroyWorker(o)}),Ta(B=this._contextNodes).call(B,function(t){var o=t.source,r=t.dest;o.disconnect(),r.disconnect()}),this._workerMap.clear(),this._contextNodes.clear(),(E=this._context)===null||E===void 0||E.close()}}]);var I,g,C,Q}();function O3A(){var A,I,g={ie:null,firefox:null,chrome:null,opera:null,safari:null,edge:null},C=navigator.userAgent.toLowerCase();for(var Q in(A=C.match(/msie ([\d.]+)/))?g.ie=A[1]:(A=C.match(/firefox\/([\d.]+)/))?g.firefox=A[1]:(A=C.match(/edg\/([\d.]+)/))?g.edge=A[1]:(A=C.match(/chrome\/([\d.]+)/))?g.chrome=A[1]:(A=C.match(/opera.([\d.]+)/))?g.opera=A[1]:(A=C.match(/version\/([\d.]+).*safari/))&&(g.safari=A[1]),g)g[Q]!==null&&(A=Q,I=g[Q].split(".")[0]);return{browser:A,version:I}}function q3A(){var A=O3A(),I=A.browser,g=A.version,C={chrome:94,edge:94,opera:80};return C[I]&&g>=C[I]&&!!window.MediaStreamTrackProcessor&&!!window.MediaStreamTrackGenerator&&!!window.TransformStream}or([tr],ct.prototype,"init"),or([tr],ct.prototype,"enable"),or([tr],ct.prototype,"disable"),or([tr],ct.prototype,"isSupported"),or([tr],ct.prototype,"setAnsMode"),or([tr],ct.prototype,"dump");var Vt={};Vt.d=function(A,I){for(var g in I)Vt.o(I,g)&&!Vt.o(A,g)&&Object.defineProperty(A,g,{enumerable:!0,get:I[g]})};Vt.o=function(A,I){return Object.prototype.hasOwnProperty.call(A,I)};Vt.r=function(A){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var K4={};Vt.r(K4);Vt.d(K4,{checkDevicePermission:()=>AHA,checkPermission:()=>$3A,getAudioDevices:()=>Na,isScreenShareDevice:()=>U2,isScreenShareSupported:()=>W4,sleep:()=>_3A});const _3A=A=>{if(A<0)throw new Error("Sleep duration must be non-negative");return new Promise(I=>setTimeout(I,A))},$3A=async function(){let{audio:A=!0,video:I=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};try{return(await kI.enableDevices({audio:A,video:I})).audio}catch(g){return console.error("Failed to check device permissions:",g),!1}},AHA=async function(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return await kI.enableDevices({audio:!0,video:A})},Na=async function(){let{video:A=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=[];return A?(I=await kI.enumerateDevices(),W4()&&I.push({deviceId:"screenShare",kind:"videoinput",label:"Screen Share",groupId:"screenShare"})):I=await[...await kI.enumerateAudioCaptureDevices(),...await kI.enumerateAudioPlaybackDevices()],I!=null&&I.length?{audioInputs:I.filter(g=>g.deviceId&&g.kind==="audioinput"),audioOutputs:I.filter(g=>g.deviceId&&g.kind==="audiooutput"),videoInputs:I.filter(g=>g.deviceId&&g.kind==="videoinput")}:{audioInputs:[],audioOutputs:[],videoInputs:[]}},U2=A=>A==="screenShare";function W4(){var A,I;return!!(!((I=navigator)===null||I===void 0||(A=I.mediaDevices)===null||A===void 0)&&A.getDisplayMedia)}var J4=function(A){return A.ALL="realtime.event",A.ALL_CLIENT="client.*",A.ALL_SERVER="server.*",A.CONNECTED="client.connected",A.CONNECTING="client.connecting",A.INTERRUPTED="client.interrupted",A.DISCONNECTED="client.disconnected",A.AUDIO_UNMUTED="client.audio.unmuted",A.AUDIO_MUTED="client.audio.muted",A.VIDEO_ON="client.video.on",A.VIDEO_OFF="client.video.off",A.PLAYER_EVENT="client.video.event",A.ERROR="client.error",A.SUPPRESS_STATIONARY_NOISE="client.suppress.stationary.noise",A.SUPPRESS_NON_STATIONARY_NOISE="client.suppress.non.stationary.noise",A.AUDIO_INPUT_DEVICE_CHANGED="client.input.device.changed",A.AUDIO_OUTPUT_DEVICE_CHANGED="client.output.device.changed",A.VIDEO_INPUT_DEVICE_CHANGED="client.video.input.device.changed",A.NETWORK_QUALITY="client.network.quality",A.BOT_JOIN="server.bot.join",A.BOT_LEAVE="server.bot.leave",A.AUDIO_AGENT_SPEECH_STARTED="server.audio.agent.speech_started",A.AUDIO_AGENT_SPEECH_STOPPED="server.audio.agent.speech_stopped",A.SERVER_ERROR="server.error",A.AUDIO_USER_SPEECH_STARTED="server.audio.user.speech_started",A.AUDIO_USER_SPEECH_STOPPED="server.audio.user.speech_stopped",A.SESSION_CREATED="server.session.created",A.SESSION_UPDATE="server.session.update",A}(J4||{});const OA=J4;var Ni=function(A){return A.DEVICE_ACCESS_ERROR="DEVICE_ACCESS_ERROR",A.STREAM_CREATION_ERROR="STREAM_CREATION_ERROR",A.CONNECTION_ERROR="CONNECTION_ERROR",A.DISCONNECTION_ERROR="DISCONNECTION_ERROR",A.INTERRUPT_ERROR="INTERRUPT_ERROR",A.EVENT_HANDLER_ERROR="EVENT_HANDLER_ERROR",A.PERMISSION_DENIED="PERMISSION_DENIED",A.NETWORK_ERROR="NETWORK_ERROR",A.INVALID_STATE="INVALID_STATE",A.CREATE_ROOM_ERROR="CREATE_ROOM_ERROR",A.PARSE_MESSAGE_ERROR="PARSE_MESSAGE_ERROR",A.HANDLER_MESSAGE_ERROR="HANDLER_MESSAGE_ERROR",A}({});class yB extends Error{constructor(I,g,C){super(`[${I}] ${g}`),this.name="RealtimeAPIError",this.code=I,this.error=C}}class V4{clearEventHandlers(){this.eventHandlers={}}on(I,g){return this._log(`on ${I} event`),this.eventHandlers[I]=this.eventHandlers[I]||[],this.eventHandlers[I].push(g),g}off(I,g){this._log(`off ${I} event`);const C=this.eventHandlers[I]||[];if(g){const Q=C.indexOf(g);if(Q===-1){console.warn(`Could not turn off specified event listener for "${I}": not found as a listener`);return}C.splice(Q,1)}else delete this.eventHandlers[I]}_dispatchToHandlers(I,g,C,Q){for(const i of C)if(!Q||I.startsWith(Q))try{i(I,g)}catch{throw new yB(Ni.HANDLER_MESSAGE_ERROR,`Failed to handle message: ${I}`)}}dispatch(I,g){(!(arguments.length>2)||arguments[2]===void 0||arguments[2])&&this._log(`dispatch ${I} event`,g);const Q=(this.eventHandlers[I]||[]).slice();this._dispatchToHandlers(I,g,Q);const i=(this.eventHandlers[OA.ALL]||[]).slice();this._dispatchToHandlers(I,g,i);const B=(this.eventHandlers[OA.ALL_CLIENT]||[]).slice();this._dispatchToHandlers(I,g,B,"client.");const E=(this.eventHandlers[OA.ALL_SERVER]||[]).slice();this._dispatchToHandlers(I,g,E,"server.")}_log(I,g){this._debug&&console.log(`[RealtimeClient] ${I}`,g)}constructor(I=!1){this.eventHandlers={},this._debug=I}}class IHA extends V4{bindEngineEvents(){this.engine.on(kI.events.onUserMessageReceived,this.handleMessage),this.engine.on(kI.events.onUserJoined,this.handleUserJoin),this.engine.on(kI.events.onUserLeave,this.handleUserLeave),this.engine.on(kI.events.onError,this.handleEventError),this.engine.on(kI.events.onNetworkQuality,this.handleNetworkQuality),this._isSupportVideo&&this.engine.on(kI.events.onPlayerEvent,this.handlePlayerEvent),this._debug&&(this.engine.on(kI.events.onLocalAudioPropertiesReport,this.handleLocalAudioPropertiesReport),this.engine.on(kI.events.onRemoteAudioPropertiesReport,this.handleRemoteAudioPropertiesReport))}removeEventListener(){this.engine.off(kI.events.onUserMessageReceived,this.handleMessage),this.engine.off(kI.events.onUserJoined,this.handleUserJoin),this.engine.off(kI.events.onUserLeave,this.handleUserLeave),this.engine.off(kI.events.onError,this.handleEventError),this.engine.off(kI.events.onNetworkQuality,this.handleNetworkQuality),this._isSupportVideo&&this.engine.off(kI.events.onPlayerEvent,this.handlePlayerEvent),this._debug&&(this.engine.off(kI.events.onLocalAudioPropertiesReport,this.handleLocalAudioPropertiesReport),this.engine.off(kI.events.onRemoteAudioPropertiesReport,this.handleRemoteAudioPropertiesReport))}_parseMessage(I){try{return JSON.parse(I.message)}catch(g){throw new yB(Ni.PARSE_MESSAGE_ERROR,(g==null?void 0:g.message)||"Unknown error")}}handleMessage(I){try{const g=this._parseMessage(I);this.dispatch(`server.${g.event_type}`,g)}catch(g){g instanceof yB?g.code===Ni.PARSE_MESSAGE_ERROR?this.dispatch(OA.ERROR,{message:`Failed to parse message: ${I.message}`,error:g}):g.code===Ni.HANDLER_MESSAGE_ERROR&&this.dispatch(OA.ERROR,{message:`Failed to handle message: ${I.message}`,error:g}):this.dispatch(OA.ERROR,g)}}handleEventError(I){this.dispatch(OA.ERROR,I)}handleUserJoin(I){this.joinUserId=I.userInfo.userId,this.dispatch(OA.BOT_JOIN,I)}handleUserLeave(I){this.dispatch(OA.BOT_LEAVE,I)}handlePlayerEvent(I){this.dispatch(OA.PLAYER_EVENT,I)}handleNetworkQuality(I,g){this.dispatch(OA.NETWORK_QUALITY,{uplinkNetworkQuality:I,downlinkNetworkQuality:g})}async joinRoom(I){const{token:g,roomId:C,uid:Q,audioMutedDefault:i,videoOnDefault:B,isAutoSubscribeAudio:E}=I;try{await this.engine.joinRoom(g,C,{userId:Q},{isAutoPublish:!i,isAutoSubscribeAudio:E,isAutoSubscribeVideo:this._isSupportVideo&&B})}catch(e){if(e instanceof Error)throw new yB(Ni.CONNECTION_ERROR,e.message)}}async setAudioInputDevice(I){if((await Na()).audioInputs.findIndex(C=>C.deviceId===I)===-1)throw new yB(Ni.DEVICE_ACCESS_ERROR,`Audio input device not found: ${I}`);this.engine.stopAudioCapture(),await this.engine.startAudioCapture(I)}async setAudioOutputDevice(I){if((await Na({video:!1})).audioOutputs.findIndex(C=>C.deviceId===I)===-1)throw new yB(Ni.DEVICE_ACCESS_ERROR,`Audio output device not found: ${I}`);await this.engine.setAudioPlaybackDevice(I)}async setVideoInputDevice(I){let g=!(arguments.length>1)||arguments[1]===void 0||arguments[1];var C;if((await Na({video:!0})).videoInputs.findIndex(B=>B.deviceId===I)===-1)throw new yB(Ni.DEVICE_ACCESS_ERROR,`Video input device not found: ${I}`);if(await this.changeVideoState(!1),U2(I)){if(this._streamIndex===W.STREAM_INDEX_MAIN&&this.engine.setLocalVideoPlayer(W.STREAM_INDEX_MAIN),g){var i;this.engine.setVideoSourceType(W.STREAM_INDEX_SCREEN,BC.VIDEO_SOURCE_TYPE_INTERNAL),await this.engine.startScreenCapture((i=this._videoConfig)===null||i===void 0?void 0:i.screenConfig),await this.engine.publishScreen(sA.VIDEO)}this._streamIndex=W.STREAM_INDEX_SCREEN}else this._streamIndex===W.STREAM_INDEX_SCREEN&&this.engine.setLocalVideoPlayer(W.STREAM_INDEX_SCREEN),g&&await this.engine.startVideoCapture(I),this._streamIndex=W.STREAM_INDEX_MAIN;this.engine.setLocalVideoPlayer(this._streamIndex,{renderDom:((C=this._videoConfig)===null||C===void 0?void 0:C.renderDom)||"local-player",userId:this._roomUserId})}async createLocalStream(I,g){this._roomUserId=I;const C=await Na({video:this._isSupportVideo});if(!C.audioInputs.length)throw new yB(Ni.DEVICE_ACCESS_ERROR,"Failed to get audio devices");if(this._isSupportVideo&&!C.videoInputs.length)throw new yB(Ni.DEVICE_ACCESS_ERROR,"Failed to get video devices");await this.engine.startAudioCapture(C.audioInputs[0].deviceId),this._isSupportVideo&&this.setVideoInputDevice((g==null?void 0:g.videoInputDeviceId)||C.videoInputs[0].deviceId,g==null?void 0:g.videoOnDefault)}async disconnect(){try{await this.engine.leaveRoom(),this.removeEventListener(),this.clearEventHandlers(),kI.destroyEngine(this.engine)}catch(I){throw this.dispatch(OA.ERROR,I),I}}async changeAudioState(I){try{I?await this.engine.publishStream(sA.AUDIO):await this.engine.unpublishStream(sA.AUDIO)}catch(g){throw this.dispatch(OA.ERROR,g),g}}async changeVideoState(I){try{if(I)if(this._streamIndex===W.STREAM_INDEX_MAIN)await this.engine.startVideoCapture();else{var g;this.engine.setVideoSourceType(W.STREAM_INDEX_SCREEN,BC.VIDEO_SOURCE_TYPE_INTERNAL),await this.engine.startScreenCapture((g=this._videoConfig)===null||g===void 0?void 0:g.screenConfig),await this.engine.publishScreen(sA.VIDEO)}else this._streamIndex===W.STREAM_INDEX_MAIN?await this.engine.stopVideoCapture():(await this.engine.stopScreenCapture(),await this.engine.unpublishScreen(sA.VIDEO))}catch(C){throw this.dispatch(OA.ERROR,C),C}}async stop(){try{const I=await this.engine.sendUserMessage(this.joinUserId,JSON.stringify({id:"event_1",event_type:"conversation.chat.cancel",data:{}}));this._log(`interrupt ${this.joinUserId} ${I}`)}catch(I){throw this.dispatch(OA.ERROR,I),I}}async sendMessage(I){try{const g=await this.engine.sendUserMessage(this.joinUserId,JSON.stringify(I));this._log(`sendMessage ${this.joinUserId} ${JSON.stringify(I)} ${g}`)}catch(g){throw this.dispatch(OA.ERROR,g),g}}enableAudioPropertiesReport(I){this.engine.enableAudioPropertiesReport(I)}handleLocalAudioPropertiesReport(I){var g,C;this._debug&&((C=I[0])===null||C===void 0||(g=C.audioPropertiesInfo)===null||g===void 0?void 0:g.linearVolume)>0&&console.log("handleLocalAudioPropertiesReport",I)}handleRemoteAudioPropertiesReport(I){this._debug&&console.log("handleRemoteAudioPropertiesReport",I)}async enableAudioNoiseReduction(){var I;await((I=this.engine)===null||I===void 0?void 0:I.setAudioCaptureConfig({noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0}))}async initAIAnsExtension(){const I=new ct;await this.engine.registerExtension(I),this._AIAnsExtension=I}changeAIAnsExtension(I){if(I){var g;(g=this._AIAnsExtension)===null||g===void 0||g.enable()}else{var C;(C=this._AIAnsExtension)===null||C===void 0||C.disable()}}async startAudioPlaybackDeviceTest(){try{await this.engine.startAudioPlaybackDeviceTest("audio-test.wav",200)}catch(I){throw this.dispatch(OA.ERROR,I),I}}stopAudioPlaybackDeviceTest(){try{this.engine.stopAudioPlaybackDeviceTest()}catch(I){throw this.dispatch(OA.ERROR,I),I}}getRtcEngine(){return this.engine}constructor(I,g=!1,C=!1,Q=!1,i){super(g),this.joinUserId="",this._AIAnsExtension=null,this._isSupportVideo=!1,C&&kI.setParameter("ICE_CONFIG_REQUEST_URLS",["rtc-test.bytedance.com"]),this.engine=kI.createEngine(I),this.handleMessage=this.handleMessage.bind(this),this.handleUserJoin=this.handleUserJoin.bind(this),this.handleUserLeave=this.handleUserLeave.bind(this),this.handleEventError=this.handleEventError.bind(this),this.handlePlayerEvent=this.handlePlayerEvent.bind(this),this.handleNetworkQuality=this.handleNetworkQuality.bind(this),this.handleLocalAudioPropertiesReport=this.handleLocalAudioPropertiesReport.bind(this),this.handleRemoteAudioPropertiesReport=this.handleRemoteAudioPropertiesReport.bind(this),this._isSupportVideo=Q,this._videoConfig=i}}const gHA="6705332c79516e015e3e5f0c";class EAI extends V4{async connect(){var I;const{botId:g,conversationId:C,voiceId:Q,getRoomInfo:i}=this._config;this.dispatch(OA.CONNECTING,{});let B;try{if(i)B=await i();else{let o;this._config.videoConfig&&(o=U2(this._config.videoConfig.videoInputDeviceId)?{video_config:{stream_video_type:"screen"}}:{video_config:{stream_video_type:"main"}}),B=await this._api.audio.rooms.create({bot_id:g,conversation_id:C||void 0,voice_id:Q&&Q.length>0?Q:void 0,connector_id:this._config.connectorId,uid:this._config.userId||void 0,workflow_id:this._config.workflowId||void 0,config:o})}}catch(o){throw this.dispatch(OA.ERROR,o),new yB(Ni.CREATE_ROOM_ERROR,o instanceof Error?o.message:"Unknown error",o)}if(this._isTestEnv=gHA===B.app_id,this._client=new IHA(B.app_id,this._config.debug,this._isTestEnv,this._isSupportVideo,this._config.videoConfig),this._client.bindEngineEvents(),this._client.on(OA.ALL,(o,r)=>{this.dispatch(o,r,!1)}),this._config.suppressStationaryNoise&&(await this._client.enableAudioNoiseReduction(),this.dispatch(OA.SUPPRESS_STATIONARY_NOISE,{})),this._config.suppressNonStationaryNoise)try{await this._client.initAIAnsExtension(),this._client.changeAIAnsExtension(!0),this.dispatch(OA.SUPPRESS_NON_STATIONARY_NOISE,{})}catch(o){console.warn("Config suppressNonStationaryNoise is not supported",o)}var E,e,t;await this._client.joinRoom({token:B.token,roomId:B.room_id,uid:B.uid,audioMutedDefault:(E=this._config.audioMutedDefault)!==null&&E!==void 0&&E,videoOnDefault:(e=(I=this._config.videoConfig)===null||I===void 0?void 0:I.videoOnDefault)===null||e===void 0||e,isAutoSubscribeAudio:(t=this._config.isAutoSubscribeAudio)===null||t===void 0||t}),await this._client.createLocalStream(B.uid,this._config.videoConfig),this.isConnected=!0,this.dispatch(OA.CONNECTED,{roomId:B.room_id,uid:B.uid,token:B.token,appId:B.app_id})}async interrupt(){var I;await((I=this._client)===null||I===void 0?void 0:I.stop()),this.dispatch(OA.INTERRUPTED,{})}async disconnect(){var I;await((I=this._client)===null||I===void 0?void 0:I.disconnect()),this.isConnected=!1,this._client=null,this.dispatch(OA.DISCONNECTED,{})}async sendMessage(I){var g;await((g=this._client)===null||g===void 0?void 0:g.sendMessage(I));const C=typeof I.event_type=="string"?I.event_type:"unknown_event";this.dispatch(`client.${C}`,I)}async setAudioEnable(I){var g;await((g=this._client)===null||g===void 0?void 0:g.changeAudioState(I)),I?this.dispatch(OA.AUDIO_UNMUTED,{}):this.dispatch(OA.AUDIO_MUTED,{})}async setVideoEnable(I){var g;await((g=this._client)===null||g===void 0?void 0:g.changeVideoState(I)),I?this.dispatch(OA.VIDEO_ON,{}):this.dispatch(OA.VIDEO_OFF,{})}enableAudioPropertiesReport(I){if(this._config.debug){var g;return(g=this._client)===null||g===void 0||g.enableAudioPropertiesReport(I),!0}return console.warn("enableAudioPropertiesReport is not supported in non-debug mode"),!1}async startAudioPlaybackDeviceTest(){if(this._config.debug){var I;await((I=this._client)===null||I===void 0?void 0:I.startAudioPlaybackDeviceTest())}else console.warn("startAudioPlaybackDeviceTest is not supported in non-debug mode")}stopAudioPlaybackDeviceTest(){if(this._config.debug){var I;(I=this._client)===null||I===void 0||I.stopAudioPlaybackDeviceTest()}else console.warn("stopAudioPlaybackDeviceTest is not supported in non-debug mode")}async setAudioInputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setAudioInputDevice(I)),this.dispatch(OA.AUDIO_INPUT_DEVICE_CHANGED,{deviceId:I})}async setAudioOutputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setAudioOutputDevice(I)),this.dispatch(OA.AUDIO_OUTPUT_DEVICE_CHANGED,{deviceId:I})}async setVideoInputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setVideoInputDevice(I)),this.dispatch(OA.VIDEO_INPUT_DEVICE_CHANGED,{deviceId:I})}getRtcEngine(){var I;return(I=this._client)===null||I===void 0?void 0:I.getRtcEngine()}constructor(I){super(I.debug),this._client=null,this.isConnected=!1,this._isTestEnv=!1,this._isSupportVideo=!1,this._config=I;var g;const C=(g=this._config.baseURL)!==null&&g!==void 0?g:"https://api.coze.cn";this._config.baseURL=C,this._api=new XgA({token:this._config.accessToken,baseURL:C,allowPersonalAccessTokenInBrowser:this._config.allowPersonalAccessTokenInBrowser}),this._isSupportVideo=!!I.videoConfig}}function CHA(A,I){const g={};return(A[A.length-1]===""?[...A,""]:A).join((g.padRight?" ":"")+","+(g.padLeft===!1?"":" ")).trim()}const QHA=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,iHA=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,BHA={};function L8(A,I){return(BHA.jsx?iHA:QHA).test(A)}const EHA=/[ \t\n\f\r]/g;function eHA(A){return typeof A=="object"?A.type==="text"?S8(A.value):!1:S8(A)}function S8(A){return A.replace(EHA,"")===""}class zc{constructor(I,g,C){this.normal=g,this.property=I,C&&(this.space=C)}}zc.prototype.normal={};zc.prototype.property={};zc.prototype.space=void 0;function z4(A,I){const g={},C={};for(const Q of A)Object.assign(g,Q.property),Object.assign(C,Q.normal);return new zc(g,C,I)}function dR(A){return A.toLowerCase()}class vQ{constructor(I,g){this.attribute=g,this.property=I}}vQ.prototype.attribute="";vQ.prototype.booleanish=!1;vQ.prototype.boolean=!1;vQ.prototype.commaOrSpaceSeparated=!1;vQ.prototype.commaSeparated=!1;vQ.prototype.defined=!1;vQ.prototype.mustUseProperty=!1;vQ.prototype.number=!1;vQ.prototype.overloadedBoolean=!1;vQ.prototype.property="";vQ.prototype.spaceSeparated=!1;vQ.prototype.space=void 0;let tHA=0;const UA=yo(),ng=yo(),M4=yo(),EA=yo(),dI=yo(),as=yo(),dQ=yo();function yo(){return 2**++tHA}const hR=Object.freeze(Object.defineProperty({__proto__:null,boolean:UA,booleanish:ng,commaOrSpaceSeparated:dQ,commaSeparated:as,number:EA,overloadedBoolean:M4,spaceSeparated:dI},Symbol.toStringTag,{value:"Module"})),rm=Object.keys(hR);class k2 extends vQ{constructor(I,g,C,Q){let i=-1;if(super(I,g),T8(this,"space",Q),typeof C=="number")for(;++i4&&g.slice(0,4)==="data"&&aHA.test(I)){if(I.charAt(4)==="-"){const i=I.slice(5).replace(p8,lHA);C="data"+i.charAt(0).toUpperCase()+i.slice(1)}else{const i=I.slice(4);if(!p8.test(i)){let B=i.replace(vHA,cHA);B.charAt(0)!=="-"&&(B="-"+B),I="data"+B}}Q=k2}return new Q(C,I)}function cHA(A){return"-"+A.toLowerCase()}function lHA(A){return A.charAt(1).toUpperCase()}const PHA=z4([f4,oHA,H4,x4,O4],"html"),Y2=z4([f4,rHA,H4,x4,O4],"svg");function dHA(A){return A.join(" ").trim()}var N2={},F8=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,hHA=/\n/g,uHA=/^\s*/,DHA=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,bHA=/^:\s*/,yHA=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,mHA=/^[;\s]*/,wHA=/^\s+|\s+$/g,GHA=` +`,U8="/",k8="*",ut="",RHA="comment",LHA="declaration",SHA=function(A,I){if(typeof A!="string")throw new TypeError("First argument must be a string");if(!A)return[];I=I||{};var g=1,C=1;function Q(n){var a=n.match(hHA);a&&(g+=a.length);var c=n.lastIndexOf(GHA);C=~c?n.length-c:C+n.length}function i(){var n={line:g,column:C};return function(a){return a.position=new B(n),t(),a}}function B(n){this.start=n,this.end={line:g,column:C},this.source=I.source}B.prototype.content=A;function E(n){var a=new Error(I.source+":"+g+":"+C+": "+n);if(a.reason=n,a.filename=I.source,a.line=g,a.column=C,a.source=A,!I.silent)throw a}function e(n){var a=n.exec(A);if(a){var c=a[0];return Q(c),A=A.slice(c.length),a}}function t(){e(uHA)}function o(n){var a;for(n=n||[];a=r();)a!==!1&&n.push(a);return n}function r(){var n=i();if(!(U8!=A.charAt(0)||k8!=A.charAt(1))){for(var a=2;ut!=A.charAt(a)&&(k8!=A.charAt(a)||U8!=A.charAt(a+1));)++a;if(a+=2,ut===A.charAt(a-1))return E("End of comment missing");var c=A.slice(2,a-2);return C+=2,Q(c),A=A.slice(a),C+=2,n({type:RHA,comment:c})}}function s(){var n=i(),a=e(DHA);if(a){if(r(),!e(bHA))return E("property missing ':'");var c=e(yHA),P=n({type:LHA,property:Y8(a[0].replace(F8,ut)),value:c?Y8(c[0].replace(F8,ut)):ut});return e(mHA),P}}function v(){var n=[];o(n);for(var a;a=s();)a!==!1&&(n.push(a),o(n));return n}return t(),v()};function Y8(A){return A?A.replace(wHA,ut):ut}var THA=L9&&L9.__importDefault||function(A){return A&&A.__esModule?A:{default:A}};Object.defineProperty(N2,"__esModule",{value:!0});N2.default=FHA;var pHA=THA(SHA);function FHA(A,I){var g=null;if(!A||typeof A!="string")return g;var C=(0,pHA.default)(A),Q=typeof I=="function";return C.forEach(function(i){if(i.type==="declaration"){var B=i.property,E=i.value;Q?I(B,E,i):E&&(g=g||{},g[B]=E)}}),g}var uh={};Object.defineProperty(uh,"__esModule",{value:!0});uh.camelCase=void 0;var UHA=/^--[a-zA-Z0-9_-]+$/,kHA=/-([a-z])/g,YHA=/^[^-]+$/,NHA=/^-(webkit|moz|ms|o|khtml)-/,ZHA=/^-(ms)-/,KHA=function(A){return!A||YHA.test(A)||UHA.test(A)},WHA=function(A,I){return I.toUpperCase()},N8=function(A,I){return"".concat(I,"-")},JHA=function(A,I){return I===void 0&&(I={}),KHA(A)?A:(A=A.toLowerCase(),I.reactCompat?A=A.replace(ZHA,N8):A=A.replace(NHA,N8),A.replace(kHA,WHA))};uh.camelCase=JHA;var VHA=L9&&L9.__importDefault||function(A){return A&&A.__esModule?A:{default:A}},zHA=VHA(N2),MHA=uh;function uR(A,I){var g={};return!A||typeof A!="string"||(0,zHA.default)(A,function(C,Q){C&&Q&&(g[(0,MHA.camelCase)(C,I)]=Q)}),g}uR.default=uR;var fHA=uR;const jHA=Qd(fHA),q4=_4("end"),Z2=_4("start");function _4(A){return I;function I(g){const C=g&&g.position&&g.position[A]||{};if(typeof C.line=="number"&&C.line>0&&typeof C.column=="number"&&C.column>0)return{line:C.line,column:C.column,offset:typeof C.offset=="number"&&C.offset>-1?C.offset:void 0}}}function XHA(A){const I=Z2(A),g=q4(A);if(I&&g)return{start:I,end:g}}function an(A){return!A||typeof A!="object"?"":"position"in A||"type"in A?Z8(A.position):"start"in A||"end"in A?Z8(A):"line"in A||"column"in A?DR(A):""}function DR(A){return K8(A&&A.line)+":"+K8(A&&A.column)}function Z8(A){return DR(A&&A.start)+"-"+DR(A&&A.end)}function K8(A){return A&&typeof A=="number"?A:1}class cC extends Error{constructor(I,g,C){super(),typeof g=="string"&&(C=g,g=void 0);let Q="",i={},B=!1;if(g&&("line"in g&&"column"in g?i={place:g}:"start"in g&&"end"in g?i={place:g}:"type"in g?i={ancestors:[g],place:g.position}:i={...g}),typeof I=="string"?Q=I:!i.cause&&I&&(B=!0,Q=I.message,i.cause=I),!i.ruleId&&!i.source&&typeof C=="string"){const e=C.indexOf(":");e===-1?i.ruleId=C:(i.source=C.slice(0,e),i.ruleId=C.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){const e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}const E=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=E?E.column:void 0,this.fatal=void 0,this.file,this.message=Q,this.line=E?E.line:void 0,this.name=an(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=B&&i.cause&&typeof i.cause.stack=="string"?i.cause.stack:"",this.actual,this.expected,this.note,this.url}}cC.prototype.file="";cC.prototype.name="";cC.prototype.reason="";cC.prototype.message="";cC.prototype.stack="";cC.prototype.column=void 0;cC.prototype.line=void 0;cC.prototype.ancestors=void 0;cC.prototype.cause=void 0;cC.prototype.fatal=void 0;cC.prototype.place=void 0;cC.prototype.ruleId=void 0;cC.prototype.source=void 0;const K2={}.hasOwnProperty,HHA=new Map,xHA=/[A-Z]/g,OHA=new Set(["table","tbody","thead","tfoot","tr"]),qHA=new Set(["td","th"]),$4="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function _HA(A,I){if(!I||I.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const g=I.filePath||void 0;let C;if(I.development){if(typeof I.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");C=B4A(g,I.jsxDEV)}else{if(typeof I.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof I.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");C=i4A(g,I.jsx,I.jsxs)}const Q={Fragment:I.Fragment,ancestors:[],components:I.components||{},create:C,elementAttributeNameCase:I.elementAttributeNameCase||"react",evaluater:I.createEvaluater?I.createEvaluater():void 0,filePath:g,ignoreInvalidStyle:I.ignoreInvalidStyle||!1,passKeys:I.passKeys!==!1,passNode:I.passNode||!1,schema:I.space==="svg"?Y2:PHA,stylePropertyNameCase:I.stylePropertyNameCase||"dom",tableCellAlignToStyle:I.tableCellAlignToStyle!==!1},i=Ax(Q,A,void 0);return i&&typeof i!="string"?i:Q.create(A,Q.Fragment,{children:i||void 0},void 0)}function Ax(A,I,g){if(I.type==="element")return $HA(A,I,g);if(I.type==="mdxFlowExpression"||I.type==="mdxTextExpression")return A4A(A,I);if(I.type==="mdxJsxFlowElement"||I.type==="mdxJsxTextElement")return g4A(A,I,g);if(I.type==="mdxjsEsm")return I4A(A,I);if(I.type==="root")return C4A(A,I,g);if(I.type==="text")return Q4A(A,I)}function $HA(A,I,g){const C=A.schema;let Q=C;I.tagName.toLowerCase()==="svg"&&C.space==="html"&&(Q=Y2,A.schema=Q),A.ancestors.push(I);const i=gx(A,I.tagName,!1),B=E4A(A,I);let E=J2(A,I);return OHA.has(I.tagName)&&(E=E.filter(function(e){return typeof e=="string"?!eHA(e):!0})),Ix(A,B,i,I),W2(B,E),A.ancestors.pop(),A.schema=C,A.create(I,i,B,g)}function A4A(A,I){if(I.data&&I.data.estree&&A.evaluater){const C=I.data.estree.body[0];return C.type,A.evaluater.evaluateExpression(C.expression)}On(A,I.position)}function I4A(A,I){if(I.data&&I.data.estree&&A.evaluater)return A.evaluater.evaluateProgram(I.data.estree);On(A,I.position)}function g4A(A,I,g){const C=A.schema;let Q=C;I.name==="svg"&&C.space==="html"&&(Q=Y2,A.schema=Q),A.ancestors.push(I);const i=I.name===null?A.Fragment:gx(A,I.name,!0),B=e4A(A,I),E=J2(A,I);return Ix(A,B,i,I),W2(B,E),A.ancestors.pop(),A.schema=C,A.create(I,i,B,g)}function C4A(A,I,g){const C={};return W2(C,J2(A,I)),A.create(I,A.Fragment,C,g)}function Q4A(A,I){return I.value}function Ix(A,I,g,C){typeof g!="string"&&g!==A.Fragment&&A.passNode&&(I.node=C)}function W2(A,I){if(I.length>0){const g=I.length>1?I:I[0];g&&(A.children=g)}}function i4A(A,I,g){return C;function C(Q,i,B,E){const t=Array.isArray(B.children)?g:I;return E?t(i,B,E):t(i,B)}}function B4A(A,I){return g;function g(C,Q,i,B){const E=Array.isArray(i.children),e=Z2(C);return I(Q,i,B,E,{columnNumber:e?e.column-1:void 0,fileName:A,lineNumber:e?e.line:void 0},void 0)}}function E4A(A,I){const g={};let C,Q;for(Q in I.properties)if(Q!=="children"&&K2.call(I.properties,Q)){const i=t4A(A,Q,I.properties[Q]);if(i){const[B,E]=i;A.tableCellAlignToStyle&&B==="align"&&typeof E=="string"&&qHA.has(I.tagName)?C=E:g[B]=E}}if(C){const i=g.style||(g.style={});i[A.stylePropertyNameCase==="css"?"text-align":"textAlign"]=C}return g}function e4A(A,I){const g={};for(const C of I.attributes)if(C.type==="mdxJsxExpressionAttribute")if(C.data&&C.data.estree&&A.evaluater){const i=C.data.estree.body[0];i.type;const B=i.expression;B.type;const E=B.properties[0];E.type,Object.assign(g,A.evaluater.evaluateExpression(E.argument))}else On(A,I.position);else{const Q=C.name;let i;if(C.value&&typeof C.value=="object")if(C.value.data&&C.value.data.estree&&A.evaluater){const E=C.value.data.estree.body[0];E.type,i=A.evaluater.evaluateExpression(E.expression)}else On(A,I.position);else i=C.value===null?!0:C.value;g[Q]=i}return g}function J2(A,I){const g=[];let C=-1;const Q=A.passKeys?new Map:HHA;for(;++CQ?0:Q+I:I=I>Q?Q:I,g=g>0?g:0,C.length<1e4)B=Array.from(C),B.unshift(I,g),A.splice(...B);else for(g&&A.splice(I,g);i0?(FQ(A,A.length,0,I),A):I}const V8={}.hasOwnProperty;function Qx(A){const I={};let g=-1;for(;++g13&&g<32||g>126&&g<160||g>55295&&g<57344||g>64975&&g<65008||(g&65535)===65535||(g&65535)===65534||g>1114111?"�":String.fromCodePoint(g)}function gB(A){return A.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const pC=_e(/[A-Za-z]/),rC=_e(/[\dA-Za-z]/),P4A=_e(/[#-'*+\--9=?A-Z^-~]/);function $0(A){return A!==null&&(A<32||A===127)}const bR=_e(/\d/),d4A=_e(/[\dA-Fa-f]/),h4A=_e(/[!-/:-@[-`{-~]/);function bA(A){return A!==null&&A<-2}function aI(A){return A!==null&&(A<0||A===32)}function JA(A){return A===-2||A===-1||A===32}const Dh=_e(new RegExp("\\p{P}|\\p{S}","u")),Eo=_e(/\s/);function _e(A){return I;function I(g){return g!==null&&g>-1&&A.test(String.fromCharCode(g))}}function hv(A){const I=[];let g=-1,C=0,Q=0;for(;++g55295&&i<57344){const E=A.charCodeAt(g+1);i<56320&&E>56319&&E<57344?(B=String.fromCharCode(i,E),Q=1):B="�"}else B=String.fromCharCode(i);B&&(I.push(A.slice(C,g),encodeURIComponent(B)),C=g+Q+1,B=""),Q&&(g+=Q,Q=0)}return I.join("")+A.slice(C)}function xA(A,I,g,C){const Q=C?C-1:Number.POSITIVE_INFINITY;let i=0;return B;function B(e){return JA(e)?(A.enter(g),E(e)):I(e)}function E(e){return JA(e)&&i++B))return;const b=I.events.length;let G=b,L,m;for(;G--;)if(I.events[G][0]==="exit"&&I.events[G][1].type==="chunkFlow"){if(L){m=I.events[G][1].end;break}L=!0}for(P(C),y=b;yh;){const D=g[u];I.containerState=D[1],D[0].exit.call(I,A)}g.length=h}function d(){Q.write([null]),i=void 0,Q=void 0,I.containerState._closeFlow=void 0}}function m4A(A,I,g){return xA(A,A.attempt(this.parser.constructs.document,I,g),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ks(A){if(A===null||aI(A)||Eo(A))return 1;if(Dh(A))return 2}function bh(A,I,g){const C=[];let Q=-1;for(;++Q1&&A[g][1].end.offset-A[g][1].start.offset>1?2:1;const r={...A[C][1].end},s={...A[g][1].start};M8(r,-e),M8(s,e),B={type:e>1?"strongSequence":"emphasisSequence",start:r,end:{...A[C][1].end}},E={type:e>1?"strongSequence":"emphasisSequence",start:{...A[g][1].start},end:s},i={type:e>1?"strongText":"emphasisText",start:{...A[C][1].end},end:{...A[g][1].start}},Q={type:e>1?"strong":"emphasis",start:{...B.start},end:{...E.end}},A[C][1].end={...B.start},A[g][1].start={...E.end},t=[],A[C][1].end.offset-A[C][1].start.offset&&(t=oi(t,[["enter",A[C][1],I],["exit",A[C][1],I]])),t=oi(t,[["enter",Q,I],["enter",B,I],["exit",B,I],["enter",i,I]]),t=oi(t,bh(I.parser.constructs.insideSpan.null,A.slice(C+1,g),I)),t=oi(t,[["exit",i,I],["enter",E,I],["exit",E,I],["exit",Q,I]]),A[g][1].end.offset-A[g][1].start.offset?(o=2,t=oi(t,[["enter",A[g][1],I],["exit",A[g][1],I]])):o=0,FQ(A,C-1,g-C+3,t),g=C+t.length-o-2;break}}for(g=-1;++g0&&JA(y)?xA(A,d,"linePrefix",i+1)(y):d(y)}function d(y){return y===null||bA(y)?A.check(f8,a,u)(y):(A.enter("codeFlowValue"),h(y))}function h(y){return y===null||bA(y)?(A.exit("codeFlowValue"),d(y)):(A.consume(y),h)}function u(y){return A.exit("codeFenced"),I(y)}function D(y,b,G){let L=0;return m;function m(Y){return y.enter("lineEnding"),y.consume(Y),y.exit("lineEnding"),F}function F(Y){return y.enter("codeFencedFence"),JA(Y)?xA(y,U,"linePrefix",C.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(Y):U(Y)}function U(Y){return Y===E?(y.enter("codeFencedFenceSequence"),AA(Y)):G(Y)}function AA(Y){return Y===E?(L++,y.consume(Y),AA):L>=B?(y.exit("codeFencedFenceSequence"),JA(Y)?xA(y,X,"whitespace")(Y):X(Y)):G(Y)}function X(Y){return Y===null||bA(Y)?(y.exit("codeFencedFence"),b(Y)):G(Y)}}}function N4A(A,I,g){const C=this;return Q;function Q(B){return B===null?g(B):(A.enter("lineEnding"),A.consume(B),A.exit("lineEnding"),i)}function i(B){return C.parser.lazy[C.now().line]?g(B):I(B)}}const vm={name:"codeIndented",tokenize:K4A},Z4A={partial:!0,tokenize:W4A};function K4A(A,I,g){const C=this;return Q;function Q(t){return A.enter("codeIndented"),xA(A,i,"linePrefix",5)(t)}function i(t){const o=C.events[C.events.length-1];return o&&o[1].type==="linePrefix"&&o[2].sliceSerialize(o[1],!0).length>=4?B(t):g(t)}function B(t){return t===null?e(t):bA(t)?A.attempt(Z4A,B,e)(t):(A.enter("codeFlowValue"),E(t))}function E(t){return t===null||bA(t)?(A.exit("codeFlowValue"),B(t)):(A.consume(t),E)}function e(t){return A.exit("codeIndented"),I(t)}}function W4A(A,I,g){const C=this;return Q;function Q(B){return C.parser.lazy[C.now().line]?g(B):bA(B)?(A.enter("lineEnding"),A.consume(B),A.exit("lineEnding"),Q):xA(A,i,"linePrefix",5)(B)}function i(B){const E=C.events[C.events.length-1];return E&&E[1].type==="linePrefix"&&E[2].sliceSerialize(E[1],!0).length>=4?I(B):bA(B)?Q(B):g(B)}}const J4A={name:"codeText",previous:z4A,resolve:V4A,tokenize:M4A};function V4A(A){let I=A.length-4,g=3,C,Q;if((A[g][1].type==="lineEnding"||A[g][1].type==="space")&&(A[I][1].type==="lineEnding"||A[I][1].type==="space")){for(C=g;++C=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+I+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return Ithis.left.length?this.right.slice(this.right.length-C+this.left.length,this.right.length-I+this.left.length).reverse():this.left.slice(I).concat(this.right.slice(this.right.length-C+this.left.length).reverse())}splice(I,g,C){const Q=g||0;this.setCursor(Math.trunc(I));const i=this.right.splice(this.right.length-Q,Number.POSITIVE_INFINITY);return C&&ra(this.left,C),i.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(I){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(I)}pushMany(I){this.setCursor(Number.POSITIVE_INFINITY),ra(this.left,I)}unshift(I){this.setCursor(0),this.right.push(I)}unshiftMany(I){this.setCursor(0),ra(this.right,I.reverse())}setCursor(I){if(!(I===this.left.length||I>this.left.length&&this.right.length===0||I<0&&this.left.length===0))if(I=4?I(B):A.interrupt(C.parser.constructs.flow,g,I)(B)}}function ox(A,I,g,C,Q,i,B,E,e){const t=e||Number.POSITIVE_INFINITY;let o=0;return r;function r(P){return P===60?(A.enter(C),A.enter(Q),A.enter(i),A.consume(P),A.exit(i),s):P===null||P===32||P===41||$0(P)?g(P):(A.enter(C),A.enter(B),A.enter(E),A.enter("chunkString",{contentType:"string"}),a(P))}function s(P){return P===62?(A.enter(i),A.consume(P),A.exit(i),A.exit(Q),A.exit(C),I):(A.enter(E),A.enter("chunkString",{contentType:"string"}),v(P))}function v(P){return P===62?(A.exit("chunkString"),A.exit(E),s(P)):P===null||P===60||bA(P)?g(P):(A.consume(P),P===92?n:v)}function n(P){return P===60||P===62||P===92?(A.consume(P),v):v(P)}function a(P){return!o&&(P===null||P===41||aI(P))?(A.exit("chunkString"),A.exit(E),A.exit(B),A.exit(C),I(P)):o999||v===null||v===91||v===93&&!e||v===94&&!E&&"_hiddenFootnoteSupport"in B.parser.constructs?g(v):v===93?(A.exit(i),A.enter(Q),A.consume(v),A.exit(Q),A.exit(C),I):bA(v)?(A.enter("lineEnding"),A.consume(v),A.exit("lineEnding"),o):(A.enter("chunkString",{contentType:"string"}),r(v))}function r(v){return v===null||v===91||v===93||bA(v)||E++>999?(A.exit("chunkString"),o(v)):(A.consume(v),e||(e=!JA(v)),v===92?s:r)}function s(v){return v===91||v===92||v===93?(A.consume(v),E++,r):r(v)}}function sx(A,I,g,C,Q,i){let B;return E;function E(s){return s===34||s===39||s===40?(A.enter(C),A.enter(Q),A.consume(s),A.exit(Q),B=s===40?41:s,e):g(s)}function e(s){return s===B?(A.enter(Q),A.consume(s),A.exit(Q),A.exit(C),I):(A.enter(i),t(s))}function t(s){return s===B?(A.exit(i),e(B)):s===null?g(s):bA(s)?(A.enter("lineEnding"),A.consume(s),A.exit("lineEnding"),xA(A,t,"linePrefix")):(A.enter("chunkString",{contentType:"string"}),o(s))}function o(s){return s===B||s===null||bA(s)?(A.exit("chunkString"),t(s)):(A.consume(s),s===92?r:o)}function r(s){return s===B||s===92?(A.consume(s),o):o(s)}}function nn(A,I){let g;return C;function C(Q){return bA(Q)?(A.enter("lineEnding"),A.consume(Q),A.exit("lineEnding"),g=!0,C):JA(Q)?xA(A,C,g?"linePrefix":"lineSuffix")(Q):I(Q)}}const _4A={name:"definition",tokenize:AxA},$4A={partial:!0,tokenize:IxA};function AxA(A,I,g){const C=this;let Q;return i;function i(v){return A.enter("definition"),B(v)}function B(v){return rx.call(C,A,E,g,"definitionLabel","definitionLabelMarker","definitionLabelString")(v)}function E(v){return Q=gB(C.sliceSerialize(C.events[C.events.length-1][1]).slice(1,-1)),v===58?(A.enter("definitionMarker"),A.consume(v),A.exit("definitionMarker"),e):g(v)}function e(v){return aI(v)?nn(A,t)(v):t(v)}function t(v){return ox(A,o,g,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(v)}function o(v){return A.attempt($4A,r,r)(v)}function r(v){return JA(v)?xA(A,s,"whitespace")(v):s(v)}function s(v){return v===null||bA(v)?(A.exit("definition"),C.parser.defined.push(Q),I(v)):g(v)}}function IxA(A,I,g){return C;function C(E){return aI(E)?nn(A,Q)(E):g(E)}function Q(E){return sx(A,i,g,"definitionTitle","definitionTitleMarker","definitionTitleString")(E)}function i(E){return JA(E)?xA(A,B,"whitespace")(E):B(E)}function B(E){return E===null||bA(E)?I(E):g(E)}}const gxA={name:"hardBreakEscape",tokenize:CxA};function CxA(A,I,g){return C;function C(i){return A.enter("hardBreakEscape"),A.consume(i),Q}function Q(i){return bA(i)?(A.exit("hardBreakEscape"),I(i)):g(i)}}const QxA={name:"headingAtx",resolve:ixA,tokenize:BxA};function ixA(A,I){let g=A.length-2,C=3,Q,i;return A[C][1].type==="whitespace"&&(C+=2),g-2>C&&A[g][1].type==="whitespace"&&(g-=2),A[g][1].type==="atxHeadingSequence"&&(C===g-1||g-4>C&&A[g-2][1].type==="whitespace")&&(g-=C+1===g?2:4),g>C&&(Q={type:"atxHeadingText",start:A[C][1].start,end:A[g][1].end},i={type:"chunkText",start:A[C][1].start,end:A[g][1].end,contentType:"text"},FQ(A,C,g-C+1,[["enter",Q,I],["enter",i,I],["exit",i,I],["exit",Q,I]])),A}function BxA(A,I,g){let C=0;return Q;function Q(o){return A.enter("atxHeading"),i(o)}function i(o){return A.enter("atxHeadingSequence"),B(o)}function B(o){return o===35&&C++<6?(A.consume(o),B):o===null||aI(o)?(A.exit("atxHeadingSequence"),E(o)):g(o)}function E(o){return o===35?(A.enter("atxHeadingSequence"),e(o)):o===null||bA(o)?(A.exit("atxHeading"),I(o)):JA(o)?xA(A,E,"whitespace")(o):(A.enter("atxHeadingText"),t(o))}function e(o){return o===35?(A.consume(o),e):(A.exit("atxHeadingSequence"),E(o))}function t(o){return o===null||o===35||aI(o)?(A.exit("atxHeadingText"),E(o)):(A.consume(o),t)}}const ExA=["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"],X8=["pre","script","style","textarea"],exA={concrete:!0,name:"htmlFlow",resolveTo:rxA,tokenize:sxA},txA={partial:!0,tokenize:axA},oxA={partial:!0,tokenize:vxA};function rxA(A){let I=A.length;for(;I--&&!(A[I][0]==="enter"&&A[I][1].type==="htmlFlow"););return I>1&&A[I-2][1].type==="linePrefix"&&(A[I][1].start=A[I-2][1].start,A[I+1][1].start=A[I-2][1].start,A.splice(I-2,2)),A}function sxA(A,I,g){const C=this;let Q,i,B,E,e;return t;function t(R){return o(R)}function o(R){return A.enter("htmlFlow"),A.enter("htmlFlowData"),A.consume(R),r}function r(R){return R===33?(A.consume(R),s):R===47?(A.consume(R),i=!0,a):R===63?(A.consume(R),Q=3,C.interrupt?I:w):pC(R)?(A.consume(R),B=String.fromCharCode(R),c):g(R)}function s(R){return R===45?(A.consume(R),Q=2,v):R===91?(A.consume(R),Q=5,E=0,n):pC(R)?(A.consume(R),Q=4,C.interrupt?I:w):g(R)}function v(R){return R===45?(A.consume(R),C.interrupt?I:w):g(R)}function n(R){const cA="CDATA[";return R===cA.charCodeAt(E++)?(A.consume(R),E===cA.length?C.interrupt?I:U:n):g(R)}function a(R){return pC(R)?(A.consume(R),B=String.fromCharCode(R),c):g(R)}function c(R){if(R===null||R===47||R===62||aI(R)){const cA=R===47,lA=B.toLowerCase();return!cA&&!i&&X8.includes(lA)?(Q=1,C.interrupt?I(R):U(R)):ExA.includes(B.toLowerCase())?(Q=6,cA?(A.consume(R),P):C.interrupt?I(R):U(R)):(Q=7,C.interrupt&&!C.parser.lazy[C.now().line]?g(R):i?d(R):h(R))}return R===45||rC(R)?(A.consume(R),B+=String.fromCharCode(R),c):g(R)}function P(R){return R===62?(A.consume(R),C.interrupt?I:U):g(R)}function d(R){return JA(R)?(A.consume(R),d):m(R)}function h(R){return R===47?(A.consume(R),m):R===58||R===95||pC(R)?(A.consume(R),u):JA(R)?(A.consume(R),h):m(R)}function u(R){return R===45||R===46||R===58||R===95||rC(R)?(A.consume(R),u):D(R)}function D(R){return R===61?(A.consume(R),y):JA(R)?(A.consume(R),D):h(R)}function y(R){return R===null||R===60||R===61||R===62||R===96?g(R):R===34||R===39?(A.consume(R),e=R,b):JA(R)?(A.consume(R),y):G(R)}function b(R){return R===e?(A.consume(R),e=null,L):R===null||bA(R)?g(R):(A.consume(R),b)}function G(R){return R===null||R===34||R===39||R===47||R===60||R===61||R===62||R===96||aI(R)?D(R):(A.consume(R),G)}function L(R){return R===47||R===62||JA(R)?h(R):g(R)}function m(R){return R===62?(A.consume(R),F):g(R)}function F(R){return R===null||bA(R)?U(R):JA(R)?(A.consume(R),F):g(R)}function U(R){return R===45&&Q===2?(A.consume(R),J):R===60&&Q===1?(A.consume(R),V):R===62&&Q===4?(A.consume(R),CA):R===63&&Q===3?(A.consume(R),w):R===93&&Q===5?(A.consume(R),z):bA(R)&&(Q===6||Q===7)?(A.exit("htmlFlowData"),A.check(txA,QA,AA)(R)):R===null||bA(R)?(A.exit("htmlFlowData"),AA(R)):(A.consume(R),U)}function AA(R){return A.check(oxA,X,QA)(R)}function X(R){return A.enter("lineEnding"),A.consume(R),A.exit("lineEnding"),Y}function Y(R){return R===null||bA(R)?AA(R):(A.enter("htmlFlowData"),U(R))}function J(R){return R===45?(A.consume(R),w):U(R)}function V(R){return R===47?(A.consume(R),B="",N):U(R)}function N(R){if(R===62){const cA=B.toLowerCase();return X8.includes(cA)?(A.consume(R),CA):U(R)}return pC(R)&&B.length<8?(A.consume(R),B+=String.fromCharCode(R),N):U(R)}function z(R){return R===93?(A.consume(R),w):U(R)}function w(R){return R===62?(A.consume(R),CA):R===45&&Q===2?(A.consume(R),w):U(R)}function CA(R){return R===null||bA(R)?(A.exit("htmlFlowData"),QA(R)):(A.consume(R),CA)}function QA(R){return A.exit("htmlFlow"),I(R)}}function vxA(A,I,g){const C=this;return Q;function Q(B){return bA(B)?(A.enter("lineEnding"),A.consume(B),A.exit("lineEnding"),i):g(B)}function i(B){return C.parser.lazy[C.now().line]?g(B):I(B)}}function axA(A,I,g){return C;function C(Q){return A.enter("lineEnding"),A.consume(Q),A.exit("lineEnding"),A.attempt(Mc,I,g)}}const nxA={name:"htmlText",tokenize:cxA};function cxA(A,I,g){const C=this;let Q,i,B;return E;function E(w){return A.enter("htmlText"),A.enter("htmlTextData"),A.consume(w),e}function e(w){return w===33?(A.consume(w),t):w===47?(A.consume(w),D):w===63?(A.consume(w),h):pC(w)?(A.consume(w),G):g(w)}function t(w){return w===45?(A.consume(w),o):w===91?(A.consume(w),i=0,n):pC(w)?(A.consume(w),d):g(w)}function o(w){return w===45?(A.consume(w),v):g(w)}function r(w){return w===null?g(w):w===45?(A.consume(w),s):bA(w)?(B=r,V(w)):(A.consume(w),r)}function s(w){return w===45?(A.consume(w),v):r(w)}function v(w){return w===62?J(w):w===45?s(w):r(w)}function n(w){const CA="CDATA[";return w===CA.charCodeAt(i++)?(A.consume(w),i===CA.length?a:n):g(w)}function a(w){return w===null?g(w):w===93?(A.consume(w),c):bA(w)?(B=a,V(w)):(A.consume(w),a)}function c(w){return w===93?(A.consume(w),P):a(w)}function P(w){return w===62?J(w):w===93?(A.consume(w),P):a(w)}function d(w){return w===null||w===62?J(w):bA(w)?(B=d,V(w)):(A.consume(w),d)}function h(w){return w===null?g(w):w===63?(A.consume(w),u):bA(w)?(B=h,V(w)):(A.consume(w),h)}function u(w){return w===62?J(w):h(w)}function D(w){return pC(w)?(A.consume(w),y):g(w)}function y(w){return w===45||rC(w)?(A.consume(w),y):b(w)}function b(w){return bA(w)?(B=b,V(w)):JA(w)?(A.consume(w),b):J(w)}function G(w){return w===45||rC(w)?(A.consume(w),G):w===47||w===62||aI(w)?L(w):g(w)}function L(w){return w===47?(A.consume(w),J):w===58||w===95||pC(w)?(A.consume(w),m):bA(w)?(B=L,V(w)):JA(w)?(A.consume(w),L):J(w)}function m(w){return w===45||w===46||w===58||w===95||rC(w)?(A.consume(w),m):F(w)}function F(w){return w===61?(A.consume(w),U):bA(w)?(B=F,V(w)):JA(w)?(A.consume(w),F):L(w)}function U(w){return w===null||w===60||w===61||w===62||w===96?g(w):w===34||w===39?(A.consume(w),Q=w,AA):bA(w)?(B=U,V(w)):JA(w)?(A.consume(w),U):(A.consume(w),X)}function AA(w){return w===Q?(A.consume(w),Q=void 0,Y):w===null?g(w):bA(w)?(B=AA,V(w)):(A.consume(w),AA)}function X(w){return w===null||w===34||w===39||w===60||w===61||w===96?g(w):w===47||w===62||aI(w)?L(w):(A.consume(w),X)}function Y(w){return w===47||w===62||aI(w)?L(w):g(w)}function J(w){return w===62?(A.consume(w),A.exit("htmlTextData"),A.exit("htmlText"),I):g(w)}function V(w){return A.exit("htmlTextData"),A.enter("lineEnding"),A.consume(w),A.exit("lineEnding"),N}function N(w){return JA(w)?xA(A,z,"linePrefix",C.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(w):z(w)}function z(w){return A.enter("htmlTextData"),B(w)}}const M2={name:"labelEnd",resolveAll:hxA,resolveTo:uxA,tokenize:DxA},lxA={tokenize:bxA},PxA={tokenize:yxA},dxA={tokenize:mxA};function hxA(A){let I=-1;const g=[];for(;++I=3&&(t===null||bA(t))?(A.exit("thematicBreak"),I(t)):g(t)}function e(t){return t===Q?(A.consume(t),C++,e):(A.exit("thematicBreakSequence"),JA(t)?xA(A,E,"whitespace")(t):E(t))}}const jC={continuation:{tokenize:kxA},exit:NxA,name:"list",tokenize:UxA},pxA={partial:!0,tokenize:ZxA},FxA={partial:!0,tokenize:YxA};function UxA(A,I,g){const C=this,Q=C.events[C.events.length-1];let i=Q&&Q[1].type==="linePrefix"?Q[2].sliceSerialize(Q[1],!0).length:0,B=0;return E;function E(v){const n=C.containerState.type||(v===42||v===43||v===45?"listUnordered":"listOrdered");if(n==="listUnordered"?!C.containerState.marker||v===C.containerState.marker:bR(v)){if(C.containerState.type||(C.containerState.type=n,A.enter(n,{_container:!0})),n==="listUnordered")return A.enter("listItemPrefix"),v===42||v===45?A.check(G9,g,t)(v):t(v);if(!C.interrupt||v===49)return A.enter("listItemPrefix"),A.enter("listItemValue"),e(v)}return g(v)}function e(v){return bR(v)&&++B<10?(A.consume(v),e):(!C.interrupt||B<2)&&(C.containerState.marker?v===C.containerState.marker:v===41||v===46)?(A.exit("listItemValue"),t(v)):g(v)}function t(v){return A.enter("listItemMarker"),A.consume(v),A.exit("listItemMarker"),C.containerState.marker=C.containerState.marker||v,A.check(Mc,C.interrupt?g:o,A.attempt(pxA,s,r))}function o(v){return C.containerState.initialBlankLine=!0,i++,s(v)}function r(v){return JA(v)?(A.enter("listItemPrefixWhitespace"),A.consume(v),A.exit("listItemPrefixWhitespace"),s):g(v)}function s(v){return C.containerState.size=i+C.sliceSerialize(A.exit("listItemPrefix"),!0).length,I(v)}}function kxA(A,I,g){const C=this;return C.containerState._closeFlow=void 0,A.check(Mc,Q,i);function Q(E){return C.containerState.furtherBlankLines=C.containerState.furtherBlankLines||C.containerState.initialBlankLine,xA(A,I,"listItemIndent",C.containerState.size+1)(E)}function i(E){return C.containerState.furtherBlankLines||!JA(E)?(C.containerState.furtherBlankLines=void 0,C.containerState.initialBlankLine=void 0,B(E)):(C.containerState.furtherBlankLines=void 0,C.containerState.initialBlankLine=void 0,A.attempt(FxA,I,B)(E))}function B(E){return C.containerState._closeFlow=!0,C.interrupt=void 0,xA(A,A.attempt(jC,I,g),"linePrefix",C.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E)}}function YxA(A,I,g){const C=this;return xA(A,Q,"listItemIndent",C.containerState.size+1);function Q(i){const B=C.events[C.events.length-1];return B&&B[1].type==="listItemIndent"&&B[2].sliceSerialize(B[1],!0).length===C.containerState.size?I(i):g(i)}}function NxA(A){A.exit(this.containerState.type)}function ZxA(A,I,g){const C=this;return xA(A,Q,"listItemPrefixWhitespace",C.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function Q(i){const B=C.events[C.events.length-1];return!JA(i)&&B&&B[1].type==="listItemPrefixWhitespace"?I(i):g(i)}}const H8={name:"setextUnderline",resolveTo:KxA,tokenize:WxA};function KxA(A,I){let g=A.length,C,Q,i;for(;g--;)if(A[g][0]==="enter"){if(A[g][1].type==="content"){C=g;break}A[g][1].type==="paragraph"&&(Q=g)}else A[g][1].type==="content"&&A.splice(g,1),!i&&A[g][1].type==="definition"&&(i=g);const B={type:"setextHeading",start:{...A[C][1].start},end:{...A[A.length-1][1].end}};return A[Q][1].type="setextHeadingText",i?(A.splice(Q,0,["enter",B,I]),A.splice(i+1,0,["exit",A[C][1],I]),A[C][1].end={...A[i][1].end}):A[C][1]=B,A.push(["exit",B,I]),A}function WxA(A,I,g){const C=this;let Q;return i;function i(t){let o=C.events.length,r;for(;o--;)if(C.events[o][1].type!=="lineEnding"&&C.events[o][1].type!=="linePrefix"&&C.events[o][1].type!=="content"){r=C.events[o][1].type==="paragraph";break}return!C.parser.lazy[C.now().line]&&(C.interrupt||r)?(A.enter("setextHeadingLine"),Q=t,B(t)):g(t)}function B(t){return A.enter("setextHeadingLineSequence"),E(t)}function E(t){return t===Q?(A.consume(t),E):(A.exit("setextHeadingLineSequence"),JA(t)?xA(A,e,"lineSuffix")(t):e(t))}function e(t){return t===null||bA(t)?(A.exit("setextHeadingLine"),I(t)):g(t)}}const JxA={tokenize:VxA};function VxA(A){const I=this,g=A.attempt(Mc,C,A.attempt(this.parser.constructs.flowInitial,Q,xA(A,A.attempt(this.parser.constructs.flow,Q,A.attempt(X4A,Q)),"linePrefix")));return g;function C(i){if(i===null){A.consume(i);return}return A.enter("lineEndingBlank"),A.consume(i),A.exit("lineEndingBlank"),I.currentConstruct=void 0,g}function Q(i){if(i===null){A.consume(i);return}return A.enter("lineEnding"),A.consume(i),A.exit("lineEnding"),I.currentConstruct=void 0,g}}const zxA={resolveAll:ax()},MxA=vx("string"),fxA=vx("text");function vx(A){return{resolveAll:ax(A==="text"?jxA:void 0),tokenize:I};function I(g){const C=this,Q=this.parser.constructs[A],i=g.attempt(Q,B,E);return B;function B(o){return t(o)?i(o):E(o)}function E(o){if(o===null){g.consume(o);return}return g.enter("data"),g.consume(o),e}function e(o){return t(o)?(g.exit("data"),i(o)):(g.consume(o),e)}function t(o){if(o===null)return!0;const r=Q[o];let s=-1;if(r)for(;++s-1){const E=B[0];typeof E=="string"?B[0]=E.slice(C):B.shift()}i>0&&B.push(A[Q].slice(0,i))}return B}function iOA(A,I){let g=-1;const C=[];let Q;for(;++g0){const Bg=uA.tokenStack[uA.tokenStack.length-1];(Bg[1]||O8).call(uA,void 0,Bg[0])}for(iA.position={start:KE(x.length>0?x[0][1].start:{line:1,column:1,offset:0}),end:KE(x.length>0?x[x.length-2][1].end:{line:1,column:1,offset:0})},XA=-1;++XA1?"-"+E:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(B)}]};A.patch(I,e);const t={type:"element",tagName:"sup",properties:{},children:[e]};return A.patch(I,t),A.applyData(I,t)}function DOA(A,I){const g={type:"element",tagName:"h"+I.depth,properties:{},children:A.all(I)};return A.patch(I,g),A.applyData(I,g)}function bOA(A,I){if(A.options.allowDangerousHtml){const g={type:"raw",value:I.value};return A.patch(I,g),A.applyData(I,g)}}function lx(A,I){const g=I.referenceType;let C="]";if(g==="collapsed"?C+="[]":g==="full"&&(C+="["+(I.label||I.identifier)+"]"),I.type==="imageReference")return[{type:"text",value:"!["+I.alt+C}];const Q=A.all(I),i=Q[0];i&&i.type==="text"?i.value="["+i.value:Q.unshift({type:"text",value:"["});const B=Q[Q.length-1];return B&&B.type==="text"?B.value+=C:Q.push({type:"text",value:C}),Q}function yOA(A,I){const g=String(I.identifier).toUpperCase(),C=A.definitionById.get(g);if(!C)return lx(A,I);const Q={src:hv(C.url||""),alt:I.alt};C.title!==null&&C.title!==void 0&&(Q.title=C.title);const i={type:"element",tagName:"img",properties:Q,children:[]};return A.patch(I,i),A.applyData(I,i)}function mOA(A,I){const g={src:hv(I.url)};I.alt!==null&&I.alt!==void 0&&(g.alt=I.alt),I.title!==null&&I.title!==void 0&&(g.title=I.title);const C={type:"element",tagName:"img",properties:g,children:[]};return A.patch(I,C),A.applyData(I,C)}function wOA(A,I){const g={type:"text",value:I.value.replace(/\r?\n|\r/g," ")};A.patch(I,g);const C={type:"element",tagName:"code",properties:{},children:[g]};return A.patch(I,C),A.applyData(I,C)}function GOA(A,I){const g=String(I.identifier).toUpperCase(),C=A.definitionById.get(g);if(!C)return lx(A,I);const Q={href:hv(C.url||"")};C.title!==null&&C.title!==void 0&&(Q.title=C.title);const i={type:"element",tagName:"a",properties:Q,children:A.all(I)};return A.patch(I,i),A.applyData(I,i)}function ROA(A,I){const g={href:hv(I.url)};I.title!==null&&I.title!==void 0&&(g.title=I.title);const C={type:"element",tagName:"a",properties:g,children:A.all(I)};return A.patch(I,C),A.applyData(I,C)}function LOA(A,I,g){const C=A.all(I),Q=g?SOA(g):Px(I),i={},B=[];if(typeof I.checked=="boolean"){const o=C[0];let r;o&&o.type==="element"&&o.tagName==="p"?r=o:(r={type:"element",tagName:"p",properties:{},children:[]},C.unshift(r)),r.children.length>0&&r.children.unshift({type:"text",value:" "}),r.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:I.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let E=-1;for(;++E1}function TOA(A,I){const g={},C=A.all(I);let Q=-1;for(typeof I.start=="number"&&I.start!==1&&(g.start=I.start);++Q0){const B={type:"element",tagName:"tbody",properties:{},children:A.wrap(g,!0)},E=Z2(I.children[1]),e=q4(I.children[I.children.length-1]);E&&e&&(B.position={start:E,end:e}),Q.push(B)}const i={type:"element",tagName:"table",properties:{},children:A.wrap(Q,!0)};return A.patch(I,i),A.applyData(I,i)}function YOA(A,I,g){const C=g?g.children:void 0,i=(C?C.indexOf(I):1)===0?"th":"td",B=g&&g.type==="table"?g.align:void 0,E=B?B.length:I.children.length;let e=-1;const t=[];for(;++e0,!0),C[0]),Q=C.index+C[0].length,C=g.exec(I);return i.push($8(I.slice(Q),Q>0,!1)),i.join("")}function $8(A,I,g){let C=0,Q=A.length;if(I){let i=A.codePointAt(C);for(;i===q8||i===_8;)C++,i=A.codePointAt(C)}if(g){let i=A.codePointAt(Q-1);for(;i===q8||i===_8;)Q--,i=A.codePointAt(Q-1)}return Q>C?A.slice(C,Q):""}function KOA(A,I){const g={type:"text",value:ZOA(String(I.value))};return A.patch(I,g),A.applyData(I,g)}function WOA(A,I){const g={type:"element",tagName:"hr",properties:{},children:[]};return A.patch(I,g),A.applyData(I,g)}const JOA={blockquote:cOA,break:lOA,code:POA,delete:dOA,emphasis:hOA,footnoteReference:uOA,heading:DOA,html:bOA,imageReference:yOA,image:mOA,inlineCode:wOA,linkReference:GOA,link:ROA,listItem:LOA,list:TOA,paragraph:pOA,root:FOA,strong:UOA,table:kOA,tableCell:NOA,tableRow:YOA,text:KOA,thematicBreak:WOA,toml:bP,yaml:bP,definition:bP,footnoteDefinition:bP};function bP(){}const dx=-1,yh=0,cn=1,Ad=2,f2=3,j2=4,X2=5,H2=6,hx=7,ux=8,AW=typeof self=="object"?self:globalThis,VOA=(A,I)=>{const g=(Q,i)=>(A.set(i,Q),Q),C=Q=>{if(A.has(Q))return A.get(Q);const[i,B]=I[Q];switch(i){case yh:case dx:return g(B,Q);case cn:{const E=g([],Q);for(const e of B)E.push(C(e));return E}case Ad:{const E=g({},Q);for(const[e,t]of B)E[C(e)]=C(t);return E}case f2:return g(new Date(B),Q);case j2:{const{source:E,flags:e}=B;return g(new RegExp(E,e),Q)}case X2:{const E=g(new Map,Q);for(const[e,t]of B)E.set(C(e),C(t));return E}case H2:{const E=g(new Set,Q);for(const e of B)E.add(C(e));return E}case hx:{const{name:E,message:e}=B;return g(new AW[E](e),Q)}case ux:return g(BigInt(B),Q);case"BigInt":return g(Object(BigInt(B)),Q);case"ArrayBuffer":return g(new Uint8Array(B).buffer,B);case"DataView":{const{buffer:E}=new Uint8Array(B);return g(new DataView(E),B)}}return g(new AW[i](B),Q)};return C},IW=A=>VOA(new Map,A)(0),rr="",{toString:zOA}={},{keys:MOA}=Object,sa=A=>{const I=typeof A;if(I!=="object"||!A)return[yh,I];const g=zOA.call(A).slice(8,-1);switch(g){case"Array":return[cn,rr];case"Object":return[Ad,rr];case"Date":return[f2,rr];case"RegExp":return[j2,rr];case"Map":return[X2,rr];case"Set":return[H2,rr];case"DataView":return[cn,g]}return g.includes("Array")?[cn,g]:g.includes("Error")?[hx,g]:[Ad,g]},yP=([A,I])=>A===yh&&(I==="function"||I==="symbol"),fOA=(A,I,g,C)=>{const Q=(B,E)=>{const e=C.push(B)-1;return g.set(E,e),e},i=B=>{if(g.has(B))return g.get(B);let[E,e]=sa(B);switch(E){case yh:{let o=B;switch(e){case"bigint":E=ux,o=B.toString();break;case"function":case"symbol":if(A)throw new TypeError("unable to serialize "+e);o=null;break;case"undefined":return Q([dx],B)}return Q([E,o],B)}case cn:{if(e){let s=B;return e==="DataView"?s=new Uint8Array(B.buffer):e==="ArrayBuffer"&&(s=new Uint8Array(B)),Q([e,[...s]],B)}const o=[],r=Q([E,o],B);for(const s of B)o.push(i(s));return r}case Ad:{if(e)switch(e){case"BigInt":return Q([e,B.toString()],B);case"Boolean":case"Number":case"String":return Q([e,B.valueOf()],B)}if(I&&"toJSON"in B)return i(B.toJSON());const o=[],r=Q([E,o],B);for(const s of MOA(B))(A||!yP(sa(B[s])))&&o.push([i(s),i(B[s])]);return r}case f2:return Q([E,B.toISOString()],B);case j2:{const{source:o,flags:r}=B;return Q([E,{source:o,flags:r}],B)}case X2:{const o=[],r=Q([E,o],B);for(const[s,v]of B)(A||!(yP(sa(s))||yP(sa(v))))&&o.push([i(s),i(v)]);return r}case H2:{const o=[],r=Q([E,o],B);for(const s of B)(A||!yP(sa(s)))&&o.push(i(s));return r}}const{message:t}=B;return Q([E,{name:e,message:t}],B)};return i},gW=(A,{json:I,lossy:g}={})=>{const C=[];return fOA(!(I||g),!!I,new Map,C)(A),C},Id=typeof structuredClone=="function"?(A,I)=>I&&("json"in I||"lossy"in I)?IW(gW(A,I)):structuredClone(A):(A,I)=>IW(gW(A,I));function jOA(A,I){const g=[{type:"text",value:"↩"}];return I>1&&g.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(I)}]}),g}function XOA(A,I){return"Back to reference "+(A+1)+(I>1?"-"+I:"")}function HOA(A){const I=typeof A.options.clobberPrefix=="string"?A.options.clobberPrefix:"user-content-",g=A.options.footnoteBackContent||jOA,C=A.options.footnoteBackLabel||XOA,Q=A.options.footnoteLabel||"Footnotes",i=A.options.footnoteLabelTagName||"h2",B=A.options.footnoteLabelProperties||{className:["sr-only"]},E=[];let e=-1;for(;++e0&&n.push({type:"text",value:" "});let d=typeof g=="string"?g:g(e,v);typeof d=="string"&&(d={type:"text",value:d}),n.push({type:"element",tagName:"a",properties:{href:"#"+I+"fnref-"+s+(v>1?"-"+v:""),dataFootnoteBackref:"",ariaLabel:typeof C=="string"?C:C(e,v),className:["data-footnote-backref"]},children:Array.isArray(d)?d:[d]})}const c=o[o.length-1];if(c&&c.type==="element"&&c.tagName==="p"){const d=c.children[c.children.length-1];d&&d.type==="text"?d.value+=" ":c.children.push({type:"text",value:" "}),c.children.push(...n)}else o.push(...n);const P={type:"element",tagName:"li",properties:{id:I+"fn-"+s},children:A.wrap(o,!0)};A.patch(t,P),E.push(P)}if(E.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...Id(B),id:"footnote-label"},children:[{type:"text",value:Q}]},{type:"text",value:` +`},{type:"element",tagName:"ol",properties:{},children:A.wrap(E,!0)},{type:"text",value:` +`}]}}const mh=function(A){if(A==null)return _OA;if(typeof A=="function")return wh(A);if(typeof A=="object")return Array.isArray(A)?xOA(A):OOA(A);if(typeof A=="string")return qOA(A);throw new Error("Expected function, string, or object as test")};function xOA(A){const I=[];let g=-1;for(;++g":""))+")"})}return s;function s(){let v=Dx,n,a,c;if((!I||i(e,t,o[o.length-1]||void 0))&&(v=gqA(g(e,o)),v[0]===mR))return v;if("children"in e&&e.children){const P=e;if(P.children&&v[0]!==IqA)for(a=(C?P.children.length:-1)+B,c=o.concat(P);a>-1&&a0&&g.push({type:"text",value:` +`}),g}function CW(A){let I=0,g=A.charCodeAt(I);for(;g===9||g===32;)I++,g=A.charCodeAt(I);return A.slice(I)}function QW(A,I){const g=QqA(A,I),C=g.one(A,void 0),Q=HOA(g),i=Array.isArray(C)?{type:"root",children:C}:C||{type:"root",children:[]};return Q&&i.children.push({type:"text",value:` +`},Q),i}function tqA(A,I){return A&&"run"in A?async function(g,C){const Q=QW(g,{file:C,...I});await A.run(Q,C)}:function(g,C){return QW(g,{file:C,...A||I})}}function iW(A){if(A)throw A}var R9=Object.prototype.hasOwnProperty,yx=Object.prototype.toString,BW=Object.defineProperty,EW=Object.getOwnPropertyDescriptor,eW=function(I){return typeof Array.isArray=="function"?Array.isArray(I):yx.call(I)==="[object Array]"},tW=function(I){if(!I||yx.call(I)!=="[object Object]")return!1;var g=R9.call(I,"constructor"),C=I.constructor&&I.constructor.prototype&&R9.call(I.constructor.prototype,"isPrototypeOf");if(I.constructor&&!g&&!C)return!1;var Q;for(Q in I);return typeof Q>"u"||R9.call(I,Q)},oW=function(I,g){BW&&g.name==="__proto__"?BW(I,g.name,{enumerable:!0,configurable:!0,value:g.newValue,writable:!0}):I[g.name]=g.newValue},rW=function(I,g){if(g==="__proto__")if(R9.call(I,g)){if(EW)return EW(I,g).value}else return;return I[g]},oqA=function A(){var I,g,C,Q,i,B,E=arguments[0],e=1,t=arguments.length,o=!1;for(typeof E=="boolean"&&(o=E,E=arguments[1]||{},e=2),(E==null||typeof E!="object"&&typeof E!="function")&&(E={});eB.length;let e;E&&B.push(Q);try{e=A.apply(this,B)}catch(t){const o=t;if(E&&g)throw o;return Q(o)}E||(e&&e.then&&typeof e.then=="function"?e.then(i,Q):e instanceof Error?Q(e):i(e))}function Q(B,...E){g||(g=!0,I(B,...E))}function i(B){Q(null,B)}}const mB={basename:vqA,dirname:aqA,extname:nqA,join:cqA,sep:"/"};function vqA(A,I){if(I!==void 0&&typeof I!="string")throw new TypeError('"ext" argument must be a string');fc(A);let g=0,C=-1,Q=A.length,i;if(I===void 0||I.length===0||I.length>A.length){for(;Q--;)if(A.codePointAt(Q)===47){if(i){g=Q+1;break}}else C<0&&(i=!0,C=Q+1);return C<0?"":A.slice(g,C)}if(I===A)return"";let B=-1,E=I.length-1;for(;Q--;)if(A.codePointAt(Q)===47){if(i){g=Q+1;break}}else B<0&&(i=!0,B=Q+1),E>-1&&(A.codePointAt(Q)===I.codePointAt(E--)?E<0&&(C=Q):(E=-1,C=B));return g===C?C=B:C<0&&(C=A.length),A.slice(g,C)}function aqA(A){if(fc(A),A.length===0)return".";let I=-1,g=A.length,C;for(;--g;)if(A.codePointAt(g)===47){if(C){I=g;break}}else C||(C=!0);return I<0?A.codePointAt(0)===47?"/":".":I===1&&A.codePointAt(0)===47?"//":A.slice(0,I)}function nqA(A){fc(A);let I=A.length,g=-1,C=0,Q=-1,i=0,B;for(;I--;){const E=A.codePointAt(I);if(E===47){if(B){C=I+1;break}continue}g<0&&(B=!0,g=I+1),E===46?Q<0?Q=I:i!==1&&(i=1):Q>-1&&(i=-1)}return Q<0||g<0||i===0||i===1&&Q===g-1&&Q===C+1?"":A.slice(Q,g)}function cqA(...A){let I=-1,g;for(;++I0&&A.codePointAt(A.length-1)===47&&(g+="/"),I?"/"+g:g}function PqA(A,I){let g="",C=0,Q=-1,i=0,B=-1,E,e;for(;++B<=A.length;){if(B2){if(e=g.lastIndexOf("/"),e!==g.length-1){e<0?(g="",C=0):(g=g.slice(0,e),C=g.length-1-g.lastIndexOf("/")),Q=B,i=0;continue}}else if(g.length>0){g="",C=0,Q=B,i=0;continue}}I&&(g=g.length>0?g+"/..":"..",C=2)}else g.length>0?g+="/"+A.slice(Q+1,B):g=A.slice(Q+1,B),C=B-Q-1;Q=B,i=0}else E===46&&i>-1?i++:i=-1}return g}function fc(A){if(typeof A!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(A))}const dqA={cwd:hqA};function hqA(){return"/"}function RR(A){return!!(A!==null&&typeof A=="object"&&"href"in A&&A.href&&"protocol"in A&&A.protocol&&A.auth===void 0)}function uqA(A){if(typeof A=="string")A=new URL(A);else if(!RR(A)){const I=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+A+"`");throw I.code="ERR_INVALID_ARG_TYPE",I}if(A.protocol!=="file:"){const I=new TypeError("The URL must be of scheme file");throw I.code="ERR_INVALID_URL_SCHEME",I}return DqA(A)}function DqA(A){if(A.hostname!==""){const C=new TypeError('File URL host must be "localhost" or empty on darwin');throw C.code="ERR_INVALID_FILE_URL_HOST",C}const I=A.pathname;let g=-1;for(;++g0){let[v,...n]=o;const a=C[s][1];GR(a)&&GR(v)&&(v=nm(!0,a,v)),C[s]=[t,v,...n]}}}}const wqA=new O2().freeze();function dm(A,I){if(typeof I!="function")throw new TypeError("Cannot `"+A+"` without `parser`")}function hm(A,I){if(typeof I!="function")throw new TypeError("Cannot `"+A+"` without `compiler`")}function um(A,I){if(I)throw new Error("Cannot call `"+A+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function vW(A){if(!GR(A)||typeof A.type!="string")throw new TypeError("Expected node, got `"+A+"`")}function aW(A,I,g){if(!g)throw new Error("`"+A+"` finished async. Use `"+I+"` instead")}function mP(A){return GqA(A)?A:new mx(A)}function GqA(A){return!!(A&&typeof A=="object"&&"message"in A&&"messages"in A)}function RqA(A){return typeof A=="string"||LqA(A)}function LqA(A){return!!(A&&typeof A=="object"&&"byteLength"in A&&"byteOffset"in A)}const SqA="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",nW=[],cW={allowDangerousHtml:!0},TqA=/^(https?|ircs?|mailto|xmpp)$/i,pqA=[{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 eAI(A){const I=FqA(A),g=UqA(A);return kqA(I.runSync(I.parse(g),g),A)}function FqA(A){const I=A.rehypePlugins||nW,g=A.remarkPlugins||nW,C=A.remarkRehypeOptions?{...A.remarkRehypeOptions,...cW}:cW;return wqA().use(nOA).use(g).use(tqA,C).use(I)}function UqA(A){const I=A.children||"",g=new mx;return typeof I=="string"&&(g.value=I),g}function kqA(A,I){const g=I.allowedElements,C=I.allowElement,Q=I.components,i=I.disallowedElements,B=I.skipHtml,E=I.unwrapDisallowed,e=I.urlTransform||YqA;for(const o of pqA)Object.hasOwn(I,o.from)&&(""+o.from+(o.to?"use `"+o.to+"` instead":"remove it")+SqA+o.id,void 0);return x2(A,t),_HA(A,{Fragment:YA.Fragment,components:Q,ignoreInvalidStyle:!0,jsx:YA.jsx,jsxs:YA.jsxs,passKeys:!0,passNode:!0});function t(o,r,s){if(o.type==="raw"&&s&&typeof r=="number")return B?s.children.splice(r,1):s.children[r]={type:"text",value:o.value},r;if(o.type==="element"){let v;for(v in sm)if(Object.hasOwn(sm,v)&&Object.hasOwn(o.properties,v)){const n=o.properties[v],a=sm[v];(a===null||a.includes(o.tagName))&&(o.properties[v]=e(String(n||""),v,o))}}if(o.type==="element"){let v=g?!g.includes(o.tagName):i?i.includes(o.tagName):!1;if(!v&&C&&typeof r=="number"&&(v=!C(o,r,s)),v&&s&&typeof r=="number")return E&&o.children?s.children.splice(r,1,...o.children):s.children.splice(r,1),r}}}function YqA(A){const I=A.indexOf(":"),g=A.indexOf("?"),C=A.indexOf("#"),Q=A.indexOf("/");return I===-1||Q!==-1&&I>Q||g!==-1&&I>g||C!==-1&&I>C||TqA.test(A.slice(0,I))?A:""}function lW(A,I){const g=String(A);if(typeof I!="string")throw new TypeError("Expected character");let C=0,Q=g.indexOf(I);for(;Q!==-1;)C++,Q=g.indexOf(I,Q+I.length);return C}function NqA(A){if(typeof A!="string")throw new TypeError("Expected a string");return A.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function ZqA(A,I,g){const Q=mh((g||{}).ignore||[]),i=KqA(I);let B=-1;for(;++B0?{type:"text",value:y}:void 0),y===!1?s.lastIndex=u+1:(n!==u&&d.push({type:"text",value:t.value.slice(n,u)}),Array.isArray(y)?d.push(...y):y&&d.push(y),n=u+h[0].length,P=!0),!s.global)break;h=s.exec(t.value)}return P?(n?\]}]+$/.exec(A);if(!I)return[A,void 0];A=A.slice(0,I.index);let g=I[0],C=g.indexOf(")");const Q=lW(A,"(");let i=lW(A,")");for(;C!==-1&&Q>i;)A+=g.slice(0,C+1),g=g.slice(C+1),C=g.indexOf(")"),i++;return[A,g]}function wx(A,I){const g=A.input.charCodeAt(A.index-1);return(A.index===0||Eo(g)||Dh(g))&&(!I||g!==47)}Gx.peek=e6A;function A6A(){this.buffer()}function I6A(A){this.enter({type:"footnoteReference",identifier:"",label:""},A)}function g6A(){this.buffer()}function C6A(A){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},A)}function Q6A(A){const I=this.resume(),g=this.stack[this.stack.length-1];g.type,g.identifier=gB(this.sliceSerialize(A)).toLowerCase(),g.label=I}function i6A(A){this.exit(A)}function B6A(A){const I=this.resume(),g=this.stack[this.stack.length-1];g.type,g.identifier=gB(this.sliceSerialize(A)).toLowerCase(),g.label=I}function E6A(A){this.exit(A)}function e6A(){return"["}function Gx(A,I,g,C){const Q=g.createTracker(C);let i=Q.move("[^");const B=g.enter("footnoteReference"),E=g.enter("reference");return i+=Q.move(g.safe(g.associationId(A),{after:"]",before:i})),E(),B(),i+=Q.move("]"),i}function t6A(){return{enter:{gfmFootnoteCallString:A6A,gfmFootnoteCall:I6A,gfmFootnoteDefinitionLabelString:g6A,gfmFootnoteDefinition:C6A},exit:{gfmFootnoteCallString:Q6A,gfmFootnoteCall:i6A,gfmFootnoteDefinitionLabelString:B6A,gfmFootnoteDefinition:E6A}}}function o6A(A){let I=!1;return A&&A.firstLineBlank&&(I=!0),{handlers:{footnoteDefinition:g,footnoteReference:Gx},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function g(C,Q,i,B){const E=i.createTracker(B);let e=E.move("[^");const t=i.enter("footnoteDefinition"),o=i.enter("label");return e+=E.move(i.safe(i.associationId(C),{before:e,after:"]"})),o(),e+=E.move("]:"),C.children&&C.children.length>0&&(E.shift(4),e+=E.move((I?` +`:" ")+i.indentLines(i.containerFlow(C,E.current()),I?Rx:r6A))),t(),e}}function r6A(A,I,g){return I===0?A:Rx(A,I,g)}function Rx(A,I,g){return(g?"":" ")+A}const s6A=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Lx.peek=l6A;function v6A(){return{canContainEols:["delete"],enter:{strikethrough:n6A},exit:{strikethrough:c6A}}}function a6A(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:s6A}],handlers:{delete:Lx}}}function n6A(A){this.enter({type:"delete",children:[]},A)}function c6A(A){this.exit(A)}function Lx(A,I,g,C){const Q=g.createTracker(C),i=g.enter("strikethrough");let B=Q.move("~~");return B+=g.containerPhrasing(A,{...Q.current(),before:B,after:"~"}),B+=Q.move("~~"),i(),B}function l6A(){return"~"}function P6A(A){return A.length}function d6A(A,I){const g=I||{},C=(g.align||[]).concat(),Q=g.stringLength||P6A,i=[],B=[],E=[],e=[];let t=0,o=-1;for(;++ot&&(t=A[o].length);++Pe[P])&&(e[P]=h)}a.push(d)}B[o]=a,E[o]=c}let r=-1;if(typeof C=="object"&&"length"in C)for(;++re[r]&&(e[r]=d),v[r]=d),s[r]=h}B.splice(1,0,s),E.splice(1,0,v),o=-1;const n=[];for(;++o "),i.shift(2);const B=g.indentLines(g.containerFlow(A,i.current()),D6A);return Q(),B}function D6A(A,I,g){return">"+(g?"":" ")+A}function b6A(A,I){return dW(A,I.inConstruct,!0)&&!dW(A,I.notInConstruct,!1)}function dW(A,I,g){if(typeof I=="string"&&(I=[I]),!I||I.length===0)return g;let C=-1;for(;++CB&&(B=i):i=1,Q=C+I.length,C=g.indexOf(I,Q);return B}function m6A(A,I){return!!(I.options.fences===!1&&A.value&&!A.lang&&/[^ \r\n]/.test(A.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(A.value))}function w6A(A){const I=A.options.fence||"`";if(I!=="`"&&I!=="~")throw new Error("Cannot serialize code with `"+I+"` for `options.fence`, expected `` ` `` or `~`");return I}function G6A(A,I,g,C){const Q=w6A(g),i=A.value||"",B=Q==="`"?"GraveAccent":"Tilde";if(m6A(A,g)){const r=g.enter("codeIndented"),s=g.indentLines(i,R6A);return r(),s}const E=g.createTracker(C),e=Q.repeat(Math.max(y6A(i,Q)+1,3)),t=g.enter("codeFenced");let o=E.move(e);if(A.lang){const r=g.enter(`codeFencedLang${B}`);o+=E.move(g.safe(A.lang,{before:o,after:" ",encode:["`"],...E.current()})),r()}if(A.lang&&A.meta){const r=g.enter(`codeFencedMeta${B}`);o+=E.move(" "),o+=E.move(g.safe(A.meta,{before:o,after:` +`,encode:["`"],...E.current()})),r()}return o+=E.move(` +`),i&&(o+=E.move(i+` +`)),o+=E.move(e),t(),o}function R6A(A,I,g){return(g?"":" ")+A}function q2(A){const I=A.options.quote||'"';if(I!=='"'&&I!=="'")throw new Error("Cannot serialize title with `"+I+"` for `options.quote`, expected `\"`, or `'`");return I}function L6A(A,I,g,C){const Q=q2(g),i=Q==='"'?"Quote":"Apostrophe",B=g.enter("definition");let E=g.enter("label");const e=g.createTracker(C);let t=e.move("[");return t+=e.move(g.safe(g.associationId(A),{before:t,after:"]",...e.current()})),t+=e.move("]: "),E(),!A.url||/[\0- \u007F]/.test(A.url)?(E=g.enter("destinationLiteral"),t+=e.move("<"),t+=e.move(g.safe(A.url,{before:t,after:">",...e.current()})),t+=e.move(">")):(E=g.enter("destinationRaw"),t+=e.move(g.safe(A.url,{before:t,after:A.title?" ":` +`,...e.current()}))),E(),A.title&&(E=g.enter(`title${i}`),t+=e.move(" "+Q),t+=e.move(g.safe(A.title,{before:t,after:Q,...e.current()})),t+=e.move(Q),E()),B(),t}function S6A(A){const I=A.options.emphasis||"*";if(I!=="*"&&I!=="_")throw new Error("Cannot serialize emphasis with `"+I+"` for `options.emphasis`, expected `*`, or `_`");return I}function qn(A){return"&#x"+A.toString(16).toUpperCase()+";"}function gd(A,I,g){const C=Ks(A),Q=Ks(I);return C===void 0?Q===void 0?g==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:Q===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:C===1?Q===void 0?{inside:!1,outside:!1}:Q===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:Q===void 0?{inside:!1,outside:!1}:Q===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}Sx.peek=T6A;function Sx(A,I,g,C){const Q=S6A(g),i=g.enter("emphasis"),B=g.createTracker(C),E=B.move(Q);let e=B.move(g.containerPhrasing(A,{after:Q,before:E,...B.current()}));const t=e.charCodeAt(0),o=gd(C.before.charCodeAt(C.before.length-1),t,Q);o.inside&&(e=qn(t)+e.slice(1));const r=e.charCodeAt(e.length-1),s=gd(C.after.charCodeAt(0),r,Q);s.inside&&(e=e.slice(0,-1)+qn(r));const v=B.move(Q);return i(),g.attentionEncodeSurroundingInfo={after:s.outside,before:o.outside},E+e+v}function T6A(A,I,g){return g.options.emphasis||"*"}function p6A(A,I){let g=!1;return x2(A,function(C){if("value"in C&&/\r?\n|\r/.test(C.value)||C.type==="break")return g=!0,mR}),!!((!A.depth||A.depth<3)&&V2(A)&&(I.options.setext||g))}function F6A(A,I,g,C){const Q=Math.max(Math.min(6,A.depth||1),1),i=g.createTracker(C);if(p6A(A,g)){const o=g.enter("headingSetext"),r=g.enter("phrasing"),s=g.containerPhrasing(A,{...i.current(),before:` +`,after:` +`});return r(),o(),s+` +`+(Q===1?"=":"-").repeat(s.length-(Math.max(s.lastIndexOf("\r"),s.lastIndexOf(` +`))+1))}const B="#".repeat(Q),E=g.enter("headingAtx"),e=g.enter("phrasing");i.move(B+" ");let t=g.containerPhrasing(A,{before:"# ",after:` +`,...i.current()});return/^[\t ]/.test(t)&&(t=qn(t.charCodeAt(0))+t.slice(1)),t=t?B+" "+t:B,g.options.closeAtx&&(t+=" "+B),e(),E(),t}Tx.peek=U6A;function Tx(A){return A.value||""}function U6A(){return"<"}px.peek=k6A;function px(A,I,g,C){const Q=q2(g),i=Q==='"'?"Quote":"Apostrophe",B=g.enter("image");let E=g.enter("label");const e=g.createTracker(C);let t=e.move("![");return t+=e.move(g.safe(A.alt,{before:t,after:"]",...e.current()})),t+=e.move("]("),E(),!A.url&&A.title||/[\0- \u007F]/.test(A.url)?(E=g.enter("destinationLiteral"),t+=e.move("<"),t+=e.move(g.safe(A.url,{before:t,after:">",...e.current()})),t+=e.move(">")):(E=g.enter("destinationRaw"),t+=e.move(g.safe(A.url,{before:t,after:A.title?" ":")",...e.current()}))),E(),A.title&&(E=g.enter(`title${i}`),t+=e.move(" "+Q),t+=e.move(g.safe(A.title,{before:t,after:Q,...e.current()})),t+=e.move(Q),E()),t+=e.move(")"),B(),t}function k6A(){return"!"}Fx.peek=Y6A;function Fx(A,I,g,C){const Q=A.referenceType,i=g.enter("imageReference");let B=g.enter("label");const E=g.createTracker(C);let e=E.move("![");const t=g.safe(A.alt,{before:e,after:"]",...E.current()});e+=E.move(t+"]["),B();const o=g.stack;g.stack=[],B=g.enter("reference");const r=g.safe(g.associationId(A),{before:e,after:"]",...E.current()});return B(),g.stack=o,i(),Q==="full"||!t||t!==r?e+=E.move(r+"]"):Q==="shortcut"?e=e.slice(0,-1):e+=E.move("]"),e}function Y6A(){return"!"}Ux.peek=N6A;function Ux(A,I,g){let C=A.value||"",Q="`",i=-1;for(;new RegExp("(^|[^`])"+Q+"([^`]|$)").test(C);)Q+="`";for(/[^ \r\n]/.test(C)&&(/^[ \r\n]/.test(C)&&/[ \r\n]$/.test(C)||/^`|`$/.test(C))&&(C=" "+C+" ");++i\u007F]/.test(A.url))}Yx.peek=Z6A;function Yx(A,I,g,C){const Q=q2(g),i=Q==='"'?"Quote":"Apostrophe",B=g.createTracker(C);let E,e;if(kx(A,g)){const o=g.stack;g.stack=[],E=g.enter("autolink");let r=B.move("<");return r+=B.move(g.containerPhrasing(A,{before:r,after:">",...B.current()})),r+=B.move(">"),E(),g.stack=o,r}E=g.enter("link"),e=g.enter("label");let t=B.move("[");return t+=B.move(g.containerPhrasing(A,{before:t,after:"](",...B.current()})),t+=B.move("]("),e(),!A.url&&A.title||/[\0- \u007F]/.test(A.url)?(e=g.enter("destinationLiteral"),t+=B.move("<"),t+=B.move(g.safe(A.url,{before:t,after:">",...B.current()})),t+=B.move(">")):(e=g.enter("destinationRaw"),t+=B.move(g.safe(A.url,{before:t,after:A.title?" ":")",...B.current()}))),e(),A.title&&(e=g.enter(`title${i}`),t+=B.move(" "+Q),t+=B.move(g.safe(A.title,{before:t,after:Q,...B.current()})),t+=B.move(Q),e()),t+=B.move(")"),E(),t}function Z6A(A,I,g){return kx(A,g)?"<":"["}Nx.peek=K6A;function Nx(A,I,g,C){const Q=A.referenceType,i=g.enter("linkReference");let B=g.enter("label");const E=g.createTracker(C);let e=E.move("[");const t=g.containerPhrasing(A,{before:e,after:"]",...E.current()});e+=E.move(t+"]["),B();const o=g.stack;g.stack=[],B=g.enter("reference");const r=g.safe(g.associationId(A),{before:e,after:"]",...E.current()});return B(),g.stack=o,i(),Q==="full"||!t||t!==r?e+=E.move(r+"]"):Q==="shortcut"?e=e.slice(0,-1):e+=E.move("]"),e}function K6A(){return"["}function _2(A){const I=A.options.bullet||"*";if(I!=="*"&&I!=="+"&&I!=="-")throw new Error("Cannot serialize items with `"+I+"` for `options.bullet`, expected `*`, `+`, or `-`");return I}function W6A(A){const I=_2(A),g=A.options.bulletOther;if(!g)return I==="*"?"-":"*";if(g!=="*"&&g!=="+"&&g!=="-")throw new Error("Cannot serialize items with `"+g+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(g===I)throw new Error("Expected `bullet` (`"+I+"`) and `bulletOther` (`"+g+"`) to be different");return g}function J6A(A){const I=A.options.bulletOrdered||".";if(I!=="."&&I!==")")throw new Error("Cannot serialize items with `"+I+"` for `options.bulletOrdered`, expected `.` or `)`");return I}function Zx(A){const I=A.options.rule||"*";if(I!=="*"&&I!=="-"&&I!=="_")throw new Error("Cannot serialize rules with `"+I+"` for `options.rule`, expected `*`, `-`, or `_`");return I}function V6A(A,I,g,C){const Q=g.enter("list"),i=g.bulletCurrent;let B=A.ordered?J6A(g):_2(g);const E=A.ordered?B==="."?")":".":W6A(g);let e=I&&g.bulletLastUsed?B===g.bulletLastUsed:!1;if(!A.ordered){const o=A.children?A.children[0]:void 0;if((B==="*"||B==="-")&&o&&(!o.children||!o.children[0])&&g.stack[g.stack.length-1]==="list"&&g.stack[g.stack.length-2]==="listItem"&&g.stack[g.stack.length-3]==="list"&&g.stack[g.stack.length-4]==="listItem"&&g.indexStack[g.indexStack.length-1]===0&&g.indexStack[g.indexStack.length-2]===0&&g.indexStack[g.indexStack.length-3]===0&&(e=!0),Zx(g)===B&&o){let r=-1;for(;++r-1?I.start:1)+(g.options.incrementListMarker===!1?0:I.children.indexOf(A))+i);let B=i.length+1;(Q==="tab"||Q==="mixed"&&(I&&I.type==="list"&&I.spread||A.spread))&&(B=Math.ceil(B/4)*4);const E=g.createTracker(C);E.move(i+" ".repeat(B-i.length)),E.shift(B);const e=g.enter("listItem"),t=g.indentLines(g.containerFlow(A,E.current()),o);return e(),t;function o(r,s,v){return s?(v?"":" ".repeat(B))+r:(v?i:i+" ".repeat(B-i.length))+r}}function f6A(A,I,g,C){const Q=g.enter("paragraph"),i=g.enter("phrasing"),B=g.containerPhrasing(A,C);return i(),Q(),B}const j6A=mh(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function X6A(A,I,g,C){return(A.children.some(function(B){return j6A(B)})?g.containerPhrasing:g.containerFlow).call(g,A,C)}function H6A(A){const I=A.options.strong||"*";if(I!=="*"&&I!=="_")throw new Error("Cannot serialize strong with `"+I+"` for `options.strong`, expected `*`, or `_`");return I}Kx.peek=x6A;function Kx(A,I,g,C){const Q=H6A(g),i=g.enter("strong"),B=g.createTracker(C),E=B.move(Q+Q);let e=B.move(g.containerPhrasing(A,{after:Q,before:E,...B.current()}));const t=e.charCodeAt(0),o=gd(C.before.charCodeAt(C.before.length-1),t,Q);o.inside&&(e=qn(t)+e.slice(1));const r=e.charCodeAt(e.length-1),s=gd(C.after.charCodeAt(0),r,Q);s.inside&&(e=e.slice(0,-1)+qn(r));const v=B.move(Q+Q);return i(),g.attentionEncodeSurroundingInfo={after:s.outside,before:o.outside},E+e+v}function x6A(A,I,g){return g.options.strong||"*"}function O6A(A,I,g,C){return g.safe(A.value,C)}function q6A(A){const I=A.options.ruleRepetition||3;if(I<3)throw new Error("Cannot serialize rules with repetition `"+I+"` for `options.ruleRepetition`, expected `3` or more");return I}function _6A(A,I,g){const C=(Zx(g)+(g.options.ruleSpaces?" ":"")).repeat(q6A(g));return g.options.ruleSpaces?C.slice(0,-1):C}const Wx={blockquote:u6A,break:hW,code:G6A,definition:L6A,emphasis:Sx,hardBreak:hW,heading:F6A,html:Tx,image:px,imageReference:Fx,inlineCode:Ux,link:Yx,linkReference:Nx,list:V6A,listItem:M6A,paragraph:f6A,root:X6A,strong:Kx,text:O6A,thematicBreak:_6A};function $6A(){return{enter:{table:A_A,tableData:uW,tableHeader:uW,tableRow:g_A},exit:{codeText:C_A,table:I_A,tableData:mm,tableHeader:mm,tableRow:mm}}}function A_A(A){const I=A._align;this.enter({type:"table",align:I.map(function(g){return g==="none"?null:g}),children:[]},A),this.data.inTable=!0}function I_A(A){this.exit(A),this.data.inTable=void 0}function g_A(A){this.enter({type:"tableRow",children:[]},A)}function mm(A){this.exit(A)}function uW(A){this.enter({type:"tableCell",children:[]},A)}function C_A(A){let I=this.resume();this.data.inTable&&(I=I.replace(/\\([\\|])/g,Q_A));const g=this.stack[this.stack.length-1];g.type,g.value=I,this.exit(A)}function Q_A(A,I){return I==="|"?I:A}function i_A(A){const I=A||{},g=I.tableCellPadding,C=I.tablePipeAlign,Q=I.stringLength,i=g?" ":"|";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:s,table:B,tableCell:e,tableRow:E}};function B(v,n,a,c){return t(o(v,a,c),v.align)}function E(v,n,a,c){const P=r(v,a,c),d=t([P]);return d.slice(0,d.indexOf(` +`))}function e(v,n,a,c){const P=a.enter("tableCell"),d=a.enter("phrasing"),h=a.containerPhrasing(v,{...c,before:i,after:i});return d(),P(),h}function t(v,n){return d6A(v,{align:n,alignDelimiters:C,padding:g,stringLength:Q})}function o(v,n,a){const c=v.children;let P=-1;const d=[],h=n.enter("table");for(;++P0&&!g&&(A[A.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),g}const b_A={tokenize:T_A,partial:!0};function y_A(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:R_A,continuation:{tokenize:L_A},exit:S_A}},text:{91:{name:"gfmFootnoteCall",tokenize:G_A},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:m_A,resolveTo:w_A}}}}function m_A(A,I,g){const C=this;let Q=C.events.length;const i=C.parser.gfmFootnotes||(C.parser.gfmFootnotes=[]);let B;for(;Q--;){const e=C.events[Q][1];if(e.type==="labelImage"){B=e;break}if(e.type==="gfmFootnoteCall"||e.type==="labelLink"||e.type==="label"||e.type==="image"||e.type==="link")break}return E;function E(e){if(!B||!B._balanced)return g(e);const t=gB(C.sliceSerialize({start:B.end,end:C.now()}));return t.codePointAt(0)!==94||!i.includes(t.slice(1))?g(e):(A.enter("gfmFootnoteCallLabelMarker"),A.consume(e),A.exit("gfmFootnoteCallLabelMarker"),I(e))}}function w_A(A,I){let g=A.length;for(;g--;)if(A[g][1].type==="labelImage"&&A[g][0]==="enter"){A[g][1];break}A[g+1][1].type="data",A[g+3][1].type="gfmFootnoteCallLabelMarker";const C={type:"gfmFootnoteCall",start:Object.assign({},A[g+3][1].start),end:Object.assign({},A[A.length-1][1].end)},Q={type:"gfmFootnoteCallMarker",start:Object.assign({},A[g+3][1].end),end:Object.assign({},A[g+3][1].end)};Q.end.column++,Q.end.offset++,Q.end._bufferIndex++;const i={type:"gfmFootnoteCallString",start:Object.assign({},Q.end),end:Object.assign({},A[A.length-1][1].start)},B={type:"chunkString",contentType:"string",start:Object.assign({},i.start),end:Object.assign({},i.end)},E=[A[g+1],A[g+2],["enter",C,I],A[g+3],A[g+4],["enter",Q,I],["exit",Q,I],["enter",i,I],["enter",B,I],["exit",B,I],["exit",i,I],A[A.length-2],A[A.length-1],["exit",C,I]];return A.splice(g,A.length-g+1,...E),A}function G_A(A,I,g){const C=this,Q=C.parser.gfmFootnotes||(C.parser.gfmFootnotes=[]);let i=0,B;return E;function E(r){return A.enter("gfmFootnoteCall"),A.enter("gfmFootnoteCallLabelMarker"),A.consume(r),A.exit("gfmFootnoteCallLabelMarker"),e}function e(r){return r!==94?g(r):(A.enter("gfmFootnoteCallMarker"),A.consume(r),A.exit("gfmFootnoteCallMarker"),A.enter("gfmFootnoteCallString"),A.enter("chunkString").contentType="string",t)}function t(r){if(i>999||r===93&&!B||r===null||r===91||aI(r))return g(r);if(r===93){A.exit("chunkString");const s=A.exit("gfmFootnoteCallString");return Q.includes(gB(C.sliceSerialize(s)))?(A.enter("gfmFootnoteCallLabelMarker"),A.consume(r),A.exit("gfmFootnoteCallLabelMarker"),A.exit("gfmFootnoteCall"),I):g(r)}return aI(r)||(B=!0),i++,A.consume(r),r===92?o:t}function o(r){return r===91||r===92||r===93?(A.consume(r),i++,t):t(r)}}function R_A(A,I,g){const C=this,Q=C.parser.gfmFootnotes||(C.parser.gfmFootnotes=[]);let i,B=0,E;return e;function e(n){return A.enter("gfmFootnoteDefinition")._container=!0,A.enter("gfmFootnoteDefinitionLabel"),A.enter("gfmFootnoteDefinitionLabelMarker"),A.consume(n),A.exit("gfmFootnoteDefinitionLabelMarker"),t}function t(n){return n===94?(A.enter("gfmFootnoteDefinitionMarker"),A.consume(n),A.exit("gfmFootnoteDefinitionMarker"),A.enter("gfmFootnoteDefinitionLabelString"),A.enter("chunkString").contentType="string",o):g(n)}function o(n){if(B>999||n===93&&!E||n===null||n===91||aI(n))return g(n);if(n===93){A.exit("chunkString");const a=A.exit("gfmFootnoteDefinitionLabelString");return i=gB(C.sliceSerialize(a)),A.enter("gfmFootnoteDefinitionLabelMarker"),A.consume(n),A.exit("gfmFootnoteDefinitionLabelMarker"),A.exit("gfmFootnoteDefinitionLabel"),s}return aI(n)||(E=!0),B++,A.consume(n),n===92?r:o}function r(n){return n===91||n===92||n===93?(A.consume(n),B++,o):o(n)}function s(n){return n===58?(A.enter("definitionMarker"),A.consume(n),A.exit("definitionMarker"),Q.includes(i)||Q.push(i),xA(A,v,"gfmFootnoteDefinitionWhitespace")):g(n)}function v(n){return I(n)}}function L_A(A,I,g){return A.check(Mc,I,A.attempt(b_A,I,g))}function S_A(A){A.exit("gfmFootnoteDefinition")}function T_A(A,I,g){const C=this;return xA(A,Q,"gfmFootnoteDefinitionIndent",5);function Q(i){const B=C.events[C.events.length-1];return B&&B[1].type==="gfmFootnoteDefinitionIndent"&&B[2].sliceSerialize(B[1],!0).length===4?I(i):g(i)}}function p_A(A){let g=(A||{}).singleTilde;const C={name:"strikethrough",tokenize:i,resolveAll:Q};return g==null&&(g=!0),{text:{126:C},insideSpan:{null:[C]},attentionMarkers:{null:[126]}};function Q(B,E){let e=-1;for(;++e1?e(n):(B.consume(n),r++,v);if(r<2&&!g)return e(n);const c=B.exit("strikethroughSequenceTemporary"),P=Ks(n);return c._open=!P||P===2&&!!a,c._close=!a||a===2&&!!P,E(n)}}}class F_A{constructor(){this.map=[]}add(I,g,C){U_A(this,I,g,C)}consume(I){if(this.map.sort(function(i,B){return i[0]-B[0]}),this.map.length===0)return;let g=this.map.length;const C=[];for(;g>0;)g-=1,C.push(I.slice(this.map[g][0]+this.map[g][1]),this.map[g][2]),I.length=this.map[g][0];C.push(I.slice()),I.length=0;let Q=C.pop();for(;Q;){for(const i of Q)I.push(i);Q=C.pop()}this.map.length=0}}function U_A(A,I,g,C){let Q=0;if(!(g===0&&C.length===0)){for(;Q-1;){const X=C.events[F][1].type;if(X==="lineEnding"||X==="linePrefix")F--;else break}const U=F>-1?C.events[F][1].type:null,AA=U==="tableHead"||U==="tableRow"?y:e;return AA===y&&C.parser.lazy[C.now().line]?g(m):AA(m)}function e(m){return A.enter("tableHead"),A.enter("tableRow"),t(m)}function t(m){return m===124||(B=!0,i+=1),o(m)}function o(m){return m===null?g(m):bA(m)?i>1?(i=0,C.interrupt=!0,A.exit("tableRow"),A.enter("lineEnding"),A.consume(m),A.exit("lineEnding"),v):g(m):JA(m)?xA(A,o,"whitespace")(m):(i+=1,B&&(B=!1,Q+=1),m===124?(A.enter("tableCellDivider"),A.consume(m),A.exit("tableCellDivider"),B=!0,o):(A.enter("data"),r(m)))}function r(m){return m===null||m===124||aI(m)?(A.exit("data"),o(m)):(A.consume(m),m===92?s:r)}function s(m){return m===92||m===124?(A.consume(m),r):r(m)}function v(m){return C.interrupt=!1,C.parser.lazy[C.now().line]?g(m):(A.enter("tableDelimiterRow"),B=!1,JA(m)?xA(A,n,"linePrefix",C.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(m):n(m))}function n(m){return m===45||m===58?c(m):m===124?(B=!0,A.enter("tableCellDivider"),A.consume(m),A.exit("tableCellDivider"),a):D(m)}function a(m){return JA(m)?xA(A,c,"whitespace")(m):c(m)}function c(m){return m===58?(i+=1,B=!0,A.enter("tableDelimiterMarker"),A.consume(m),A.exit("tableDelimiterMarker"),P):m===45?(i+=1,P(m)):m===null||bA(m)?u(m):D(m)}function P(m){return m===45?(A.enter("tableDelimiterFiller"),d(m)):D(m)}function d(m){return m===45?(A.consume(m),d):m===58?(B=!0,A.exit("tableDelimiterFiller"),A.enter("tableDelimiterMarker"),A.consume(m),A.exit("tableDelimiterMarker"),h):(A.exit("tableDelimiterFiller"),h(m))}function h(m){return JA(m)?xA(A,u,"whitespace")(m):u(m)}function u(m){return m===124?n(m):m===null||bA(m)?!B||Q!==i?D(m):(A.exit("tableDelimiterRow"),A.exit("tableHead"),I(m)):D(m)}function D(m){return g(m)}function y(m){return A.enter("tableRow"),b(m)}function b(m){return m===124?(A.enter("tableCellDivider"),A.consume(m),A.exit("tableCellDivider"),b):m===null||bA(m)?(A.exit("tableRow"),I(m)):JA(m)?xA(A,b,"whitespace")(m):(A.enter("data"),G(m))}function G(m){return m===null||m===124||aI(m)?(A.exit("data"),b(m)):(A.consume(m),m===92?L:G)}function L(m){return m===92||m===124?(A.consume(m),G):G(m)}}function Z_A(A,I){let g=-1,C=!0,Q=0,i=[0,0,0,0],B=[0,0,0,0],E=!1,e=0,t,o,r;const s=new F_A;for(;++gg[2]+1){const n=g[2]+1,a=g[3]-g[2]-1;A.add(n,a,[])}}A.add(g[3]+1,0,[["exit",r,I]])}return Q!==void 0&&(i.end=Object.assign({},yr(I.events,Q)),A.add(Q,0,[["exit",i,I]]),i=void 0),i}function bW(A,I,g,C,Q){const i=[],B=yr(I.events,g);Q&&(Q.end=Object.assign({},B),i.push(["exit",Q,I])),C.end=Object.assign({},B),i.push(["exit",C,I]),A.add(g+1,0,i)}function yr(A,I){const g=A[I],C=g[0]==="enter"?"start":"end";return g[1][C]}const K_A={name:"tasklistCheck",tokenize:J_A};function W_A(){return{text:{91:K_A}}}function J_A(A,I,g){const C=this;return Q;function Q(e){return C.previous!==null||!C._gfmTasklistFirstContentOfListItem?g(e):(A.enter("taskListCheck"),A.enter("taskListCheckMarker"),A.consume(e),A.exit("taskListCheckMarker"),i)}function i(e){return aI(e)?(A.enter("taskListCheckValueUnchecked"),A.consume(e),A.exit("taskListCheckValueUnchecked"),B):e===88||e===120?(A.enter("taskListCheckValueChecked"),A.consume(e),A.exit("taskListCheckValueChecked"),B):g(e)}function B(e){return e===93?(A.enter("taskListCheckMarker"),A.consume(e),A.exit("taskListCheckMarker"),A.exit("taskListCheck"),E):g(e)}function E(e){return bA(e)?I(e):JA(e)?A.check({tokenize:V_A},I,g)(e):g(e)}}function V_A(A,I,g){return xA(A,C,"whitespace");function C(Q){return Q===null?g(Q):I(Q)}}function z_A(A){return Qx([a_A(),y_A(),p_A(A),Y_A(),W_A()])}const M_A={};function tAI(A){const I=this,g=A||M_A,C=I.data(),Q=C.micromarkExtensions||(C.micromarkExtensions=[]),i=C.fromMarkdownExtensions||(C.fromMarkdownExtensions=[]),B=C.toMarkdownExtensions||(C.toMarkdownExtensions=[]);Q.push(z_A(g)),i.push(o_A()),B.push(r_A(g))}class zt extends Error{constructor(I,g){const C=new.target.prototype;super(`${I}: Status code '${g}'`),this.statusCode=g,this.__proto__=C}}class AT extends Error{constructor(I="A timeout occurred."){const g=new.target.prototype;super(I),this.__proto__=g}}class _i extends Error{constructor(I="An abort occurred."){const g=new.target.prototype;super(I),this.__proto__=g}}class f_A extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="UnsupportedTransportError",this.__proto__=C}}class j_A extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="DisabledTransportError",this.__proto__=C}}class X_A extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="FailedToStartTransportError",this.__proto__=C}}class yW extends Error{constructor(I){const g=new.target.prototype;super(I),this.errorType="FailedToNegotiateWithServerError",this.__proto__=g}}class H_A extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.innerErrors=g,this.__proto__=C}}class xx{constructor(I,g,C){this.statusCode=I,this.statusText=g,this.content=C}}class Gh{get(I,g){return this.send({...g,method:"GET",url:I})}post(I,g){return this.send({...g,method:"POST",url:I})}delete(I,g){return this.send({...g,method:"DELETE",url:I})}getCookieString(I){return""}}var O;(function(A){A[A.Trace=0]="Trace",A[A.Debug=1]="Debug",A[A.Information=2]="Information",A[A.Warning=3]="Warning",A[A.Error=4]="Error",A[A.Critical=5]="Critical",A[A.None=6]="None"})(O||(O={}));class _n{constructor(){}log(I,g){}}_n.instance=new _n;const x_A="8.0.7";class dg{static isRequired(I,g){if(I==null)throw new Error(`The '${g}' argument is required.`)}static isNotEmpty(I,g){if(!I||I.match(/^\s*$/))throw new Error(`The '${g}' argument should not be empty.`)}static isIn(I,g,C){if(!(I in g))throw new Error(`Unknown ${C} value: ${I}.`)}}class fI{static get isBrowser(){return!fI.isNode&&typeof window=="object"&&typeof window.document=="object"}static get isWebWorker(){return!fI.isNode&&typeof self=="object"&&"importScripts"in self}static get isReactNative(){return!fI.isNode&&typeof window=="object"&&typeof window.document>"u"}static get isNode(){return typeof process<"u"&&process.release&&process.release.name==="node"}}function $n(A,I){let g="";return eo(A)?(g=`Binary data of length ${A.byteLength}`,I&&(g+=`. Content: '${O_A(A)}'`)):typeof A=="string"&&(g=`String data of length ${A.length}`,I&&(g+=`. Content: '${A}'`)),g}function O_A(A){const I=new Uint8Array(A);let g="";return I.forEach(C=>{const Q=C<16?"0":"";g+=`0x${Q}${C.toString(16)} `}),g.substr(0,g.length-1)}function eo(A){return A&&typeof ArrayBuffer<"u"&&(A instanceof ArrayBuffer||A.constructor&&A.constructor.name==="ArrayBuffer")}async function Ox(A,I,g,C,Q,i){const B={},[E,e]=Ws();B[E]=e,A.log(O.Trace,`(${I} transport) sending data. ${$n(Q,i.logMessageContent)}.`);const t=eo(Q)?"arraybuffer":"text",o=await g.post(C,{content:Q,headers:{...B,...i.headers},responseType:t,timeout:i.timeout,withCredentials:i.withCredentials});A.log(O.Trace,`(${I} transport) request complete. Response status: ${o.statusCode}.`)}function q_A(A){return A===void 0?new Cd(O.Information):A===null?_n.instance:A.log!==void 0?A:new Cd(A)}class __A{constructor(I,g){this._subject=I,this._observer=g}dispose(){const I=this._subject.observers.indexOf(this._observer);I>-1&&this._subject.observers.splice(I,1),this._subject.observers.length===0&&this._subject.cancelCallback&&this._subject.cancelCallback().catch(g=>{})}}class Cd{constructor(I){this._minLevel=I,this.out=console}log(I,g){if(I>=this._minLevel){const C=`[${new Date().toISOString()}] ${O[I]}: ${g}`;switch(I){case O.Critical:case O.Error:this.out.error(C);break;case O.Warning:this.out.warn(C);break;case O.Information:this.out.info(C);break;default:this.out.log(C);break}}}}function Ws(){let A="X-SignalR-User-Agent";return fI.isNode&&(A="User-Agent"),[A,$_A(x_A,A$A(),g$A(),I$A())]}function $_A(A,I,g,C){let Q="Microsoft SignalR/";const i=A.split(".");return Q+=`${i[0]}.${i[1]}`,Q+=` (${A}; `,I&&I!==""?Q+=`${I}; `:Q+="Unknown OS; ",Q+=`${g}`,C?Q+=`; ${C}`:Q+="; Unknown Runtime Version",Q+=")",Q}function A$A(){if(fI.isNode)switch(process.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return process.platform}else return""}function I$A(){if(fI.isNode)return process.versions.node}function g$A(){return fI.isNode?"NodeJS":"Browser"}function wm(A){return A.stack?A.stack:A.message?A.message:`${A}`}function C$A(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("could not find global")}class Q$A extends Gh{constructor(I){if(super(),this._logger=I,typeof fetch>"u"||fI.isNode){const g=typeof __webpack_require__=="function"?__non_webpack_require__:require;this._jar=new(g("tough-cookie")).CookieJar,typeof fetch>"u"?this._fetchType=g("node-fetch"):this._fetchType=fetch,this._fetchType=g("fetch-cookie")(this._fetchType,this._jar)}else this._fetchType=fetch.bind(C$A());if(typeof AbortController>"u"){const g=typeof __webpack_require__=="function"?__non_webpack_require__:require;this._abortControllerType=g("abort-controller")}else this._abortControllerType=AbortController}async send(I){if(I.abortSignal&&I.abortSignal.aborted)throw new _i;if(!I.method)throw new Error("No method defined.");if(!I.url)throw new Error("No url defined.");const g=new this._abortControllerType;let C;I.abortSignal&&(I.abortSignal.onabort=()=>{g.abort(),C=new _i});let Q=null;if(I.timeout){const e=I.timeout;Q=setTimeout(()=>{g.abort(),this._logger.log(O.Warning,"Timeout from HTTP request."),C=new AT},e)}I.content===""&&(I.content=void 0),I.content&&(I.headers=I.headers||{},eo(I.content)?I.headers["Content-Type"]="application/octet-stream":I.headers["Content-Type"]="text/plain;charset=UTF-8");let i;try{i=await this._fetchType(I.url,{body:I.content,cache:"no-cache",credentials:I.withCredentials===!0?"include":"same-origin",headers:{"X-Requested-With":"XMLHttpRequest",...I.headers},method:I.method,mode:"cors",redirect:"follow",signal:g.signal})}catch(e){throw C||(this._logger.log(O.Warning,`Error from HTTP request. ${e}.`),e)}finally{Q&&clearTimeout(Q),I.abortSignal&&(I.abortSignal.onabort=null)}if(!i.ok){const e=await mW(i,"text");throw new zt(e||i.statusText,i.status)}const E=await mW(i,I.responseType);return new xx(i.status,i.statusText,E)}getCookieString(I){let g="";return fI.isNode&&this._jar&&this._jar.getCookies(I,(C,Q)=>g=Q.join("; ")),g}}function mW(A,I){let g;switch(I){case"arraybuffer":g=A.arrayBuffer();break;case"text":g=A.text();break;case"blob":case"document":case"json":throw new Error(`${I} is not supported.`);default:g=A.text();break}return g}class i$A extends Gh{constructor(I){super(),this._logger=I}send(I){return I.abortSignal&&I.abortSignal.aborted?Promise.reject(new _i):I.method?I.url?new Promise((g,C)=>{const Q=new XMLHttpRequest;Q.open(I.method,I.url,!0),Q.withCredentials=I.withCredentials===void 0?!0:I.withCredentials,Q.setRequestHeader("X-Requested-With","XMLHttpRequest"),I.content===""&&(I.content=void 0),I.content&&(eo(I.content)?Q.setRequestHeader("Content-Type","application/octet-stream"):Q.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));const i=I.headers;i&&Object.keys(i).forEach(B=>{Q.setRequestHeader(B,i[B])}),I.responseType&&(Q.responseType=I.responseType),I.abortSignal&&(I.abortSignal.onabort=()=>{Q.abort(),C(new _i)}),I.timeout&&(Q.timeout=I.timeout),Q.onload=()=>{I.abortSignal&&(I.abortSignal.onabort=null),Q.status>=200&&Q.status<300?g(new xx(Q.status,Q.statusText,Q.response||Q.responseText)):C(new zt(Q.response||Q.responseText||Q.statusText,Q.status))},Q.onerror=()=>{this._logger.log(O.Warning,`Error from HTTP request. ${Q.status}: ${Q.statusText}.`),C(new zt(Q.statusText,Q.status))},Q.ontimeout=()=>{this._logger.log(O.Warning,"Timeout from HTTP request."),C(new AT)},Q.send(I.content)}):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}}class B$A extends Gh{constructor(I){if(super(),typeof fetch<"u"||fI.isNode)this._httpClient=new Q$A(I);else if(typeof XMLHttpRequest<"u")this._httpClient=new i$A(I);else throw new Error("No usable HttpClient found.")}send(I){return I.abortSignal&&I.abortSignal.aborted?Promise.reject(new _i):I.method?I.url?this._httpClient.send(I):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}getCookieString(I){return this._httpClient.getCookieString(I)}}class SQ{static write(I){return`${I}${SQ.RecordSeparator}`}static parse(I){if(I[I.length-1]!==SQ.RecordSeparator)throw new Error("Message is incomplete.");const g=I.split(SQ.RecordSeparator);return g.pop(),g}}SQ.RecordSeparatorCode=30;SQ.RecordSeparator=String.fromCharCode(SQ.RecordSeparatorCode);class E$A{writeHandshakeRequest(I){return SQ.write(JSON.stringify(I))}parseHandshakeResponse(I){let g,C;if(eo(I)){const E=new Uint8Array(I),e=E.indexOf(SQ.RecordSeparatorCode);if(e===-1)throw new Error("Message is incomplete.");const t=e+1;g=String.fromCharCode.apply(null,Array.prototype.slice.call(E.slice(0,t))),C=E.byteLength>t?E.slice(t).buffer:null}else{const E=I,e=E.indexOf(SQ.RecordSeparator);if(e===-1)throw new Error("Message is incomplete.");const t=e+1;g=E.substring(0,t),C=E.length>t?E.substring(t):null}const Q=SQ.parse(g),i=JSON.parse(Q[0]);if(i.type)throw new Error("Expected a handshake response from the server.");return[C,i]}}var pA;(function(A){A[A.Invocation=1]="Invocation",A[A.StreamItem=2]="StreamItem",A[A.Completion=3]="Completion",A[A.StreamInvocation=4]="StreamInvocation",A[A.CancelInvocation=5]="CancelInvocation",A[A.Ping=6]="Ping",A[A.Close=7]="Close",A[A.Ack=8]="Ack",A[A.Sequence=9]="Sequence"})(pA||(pA={}));class e$A{constructor(){this.observers=[]}next(I){for(const g of this.observers)g.next(I)}error(I){for(const g of this.observers)g.error&&g.error(I)}complete(){for(const I of this.observers)I.complete&&I.complete()}subscribe(I){return this.observers.push(I),new __A(this,I)}}class t$A{constructor(I,g,C){this._bufferSize=1e5,this._messages=[],this._totalMessageCount=0,this._waitForSequenceMessage=!1,this._nextReceivingSequenceId=1,this._latestReceivedSequenceId=0,this._bufferedByteCount=0,this._reconnectInProgress=!1,this._protocol=I,this._connection=g,this._bufferSize=C}async _send(I){const g=this._protocol.writeMessage(I);let C=Promise.resolve();if(this._isInvocationMessage(I)){this._totalMessageCount++;let Q=()=>{},i=()=>{};eo(g)?this._bufferedByteCount+=g.byteLength:this._bufferedByteCount+=g.length,this._bufferedByteCount>=this._bufferSize&&(C=new Promise((B,E)=>{Q=B,i=E})),this._messages.push(new o$A(g,this._totalMessageCount,Q,i))}try{this._reconnectInProgress||await this._connection.send(g)}catch{this._disconnected()}await C}_ack(I){let g=-1;for(let C=0;Cthis._nextReceivingSequenceId){this._connection.stop(new Error("Sequence ID greater than amount of messages we've received."));return}this._nextReceivingSequenceId=I.sequenceId}_disconnected(){this._reconnectInProgress=!0,this._waitForSequenceMessage=!0}async _resend(){const I=this._messages.length!==0?this._messages[0]._id:this._totalMessageCount+1;await this._connection.send(this._protocol.writeMessage({type:pA.Sequence,sequenceId:I}));const g=this._messages;for(const C of g)await this._connection.send(C._message);this._reconnectInProgress=!1}_dispose(I){I??(I=new Error("Unable to reconnect to server."));for(const g of this._messages)g._rejector(I)}_isInvocationMessage(I){switch(I.type){case pA.Invocation:case pA.StreamItem:case pA.Completion:case pA.StreamInvocation:case pA.CancelInvocation:return!0;case pA.Close:case pA.Sequence:case pA.Ping:case pA.Ack:return!1}}_ackTimer(){this._ackTimerHandle===void 0&&(this._ackTimerHandle=setTimeout(async()=>{try{this._reconnectInProgress||await this._connection.send(this._protocol.writeMessage({type:pA.Ack,sequenceId:this._latestReceivedSequenceId}))}catch{}clearTimeout(this._ackTimerHandle),this._ackTimerHandle=void 0},1e3))}}class o$A{constructor(I,g,C,Q){this._message=I,this._id=g,this._resolver=C,this._rejector=Q}}const r$A=30*1e3,s$A=15*1e3,v$A=1e5;var UI;(function(A){A.Disconnected="Disconnected",A.Connecting="Connecting",A.Connected="Connected",A.Disconnecting="Disconnecting",A.Reconnecting="Reconnecting"})(UI||(UI={}));class IT{static create(I,g,C,Q,i,B,E){return new IT(I,g,C,Q,i,B,E)}constructor(I,g,C,Q,i,B,E){this._nextKeepAlive=0,this._freezeEventListener=()=>{this._logger.log(O.Warning,"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep")},dg.isRequired(I,"connection"),dg.isRequired(g,"logger"),dg.isRequired(C,"protocol"),this.serverTimeoutInMilliseconds=i??r$A,this.keepAliveIntervalInMilliseconds=B??s$A,this._statefulReconnectBufferSize=E??v$A,this._logger=g,this._protocol=C,this.connection=I,this._reconnectPolicy=Q,this._handshakeProtocol=new E$A,this.connection.onreceive=e=>this._processIncomingData(e),this.connection.onclose=e=>this._connectionClosed(e),this._callbacks={},this._methods={},this._closedCallbacks=[],this._reconnectingCallbacks=[],this._reconnectedCallbacks=[],this._invocationId=0,this._receivedHandshakeResponse=!1,this._connectionState=UI.Disconnected,this._connectionStarted=!1,this._cachedPingMessage=this._protocol.writeMessage({type:pA.Ping})}get state(){return this._connectionState}get connectionId(){return this.connection&&this.connection.connectionId||null}get baseUrl(){return this.connection.baseUrl||""}set baseUrl(I){if(this._connectionState!==UI.Disconnected&&this._connectionState!==UI.Reconnecting)throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");if(!I)throw new Error("The HubConnection url must be a valid url.");this.connection.baseUrl=I}start(){return this._startPromise=this._startWithStateTransitions(),this._startPromise}async _startWithStateTransitions(){if(this._connectionState!==UI.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=UI.Connecting,this._logger.log(O.Debug,"Starting HubConnection.");try{await this._startInternal(),fI.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=UI.Connected,this._connectionStarted=!0,this._logger.log(O.Debug,"HubConnection connected successfully.")}catch(I){return this._connectionState=UI.Disconnected,this._logger.log(O.Debug,`HubConnection failed to start successfully because of error '${I}'.`),Promise.reject(I)}}async _startInternal(){this._stopDuringStartError=void 0,this._receivedHandshakeResponse=!1;const I=new Promise((g,C)=>{this._handshakeResolver=g,this._handshakeRejecter=C});await this.connection.start(this._protocol.transferFormat);try{let g=this._protocol.version;this.connection.features.reconnect||(g=1);const C={protocol:this._protocol.name,version:g};if(this._logger.log(O.Debug,"Sending handshake request."),await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(C)),this._logger.log(O.Information,`Using HubProtocol '${this._protocol.name}'.`),this._cleanupTimeout(),this._resetTimeoutPeriod(),this._resetKeepAliveInterval(),await I,this._stopDuringStartError)throw this._stopDuringStartError;(this.connection.features.reconnect||!1)&&(this._messageBuffer=new t$A(this._protocol,this.connection,this._statefulReconnectBufferSize),this.connection.features.disconnected=this._messageBuffer._disconnected.bind(this._messageBuffer),this.connection.features.resend=()=>{if(this._messageBuffer)return this._messageBuffer._resend()}),this.connection.features.inherentKeepAlive||await this._sendMessage(this._cachedPingMessage)}catch(g){throw this._logger.log(O.Debug,`Hub handshake failed with error '${g}' during start(). Stopping HubConnection.`),this._cleanupTimeout(),this._cleanupPingTimer(),await this.connection.stop(g),g}}async stop(){const I=this._startPromise;this.connection.features.reconnect=!1,this._stopPromise=this._stopInternal(),await this._stopPromise;try{await I}catch{}}_stopInternal(I){if(this._connectionState===UI.Disconnected)return this._logger.log(O.Debug,`Call to HubConnection.stop(${I}) ignored because it is already in the disconnected state.`),Promise.resolve();if(this._connectionState===UI.Disconnecting)return this._logger.log(O.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;const g=this._connectionState;return this._connectionState=UI.Disconnecting,this._logger.log(O.Debug,"Stopping HubConnection."),this._reconnectDelayHandle?(this._logger.log(O.Debug,"Connection stopped during reconnect delay. Done reconnecting."),clearTimeout(this._reconnectDelayHandle),this._reconnectDelayHandle=void 0,this._completeClose(),Promise.resolve()):(g===UI.Connected&&this._sendCloseMessage(),this._cleanupTimeout(),this._cleanupPingTimer(),this._stopDuringStartError=I||new _i("The connection was stopped before the hub handshake could complete."),this.connection.stop(I))}async _sendCloseMessage(){try{await this._sendWithProtocol(this._createCloseMessage())}catch{}}stream(I,...g){const[C,Q]=this._replaceStreamingParams(g),i=this._createStreamInvocation(I,g,Q);let B;const E=new e$A;return E.cancelCallback=()=>{const e=this._createCancelInvocation(i.invocationId);return delete this._callbacks[i.invocationId],B.then(()=>this._sendWithProtocol(e))},this._callbacks[i.invocationId]=(e,t)=>{if(t){E.error(t);return}else e&&(e.type===pA.Completion?e.error?E.error(new Error(e.error)):E.complete():E.next(e.item))},B=this._sendWithProtocol(i).catch(e=>{E.error(e),delete this._callbacks[i.invocationId]}),this._launchStreams(C,B),E}_sendMessage(I){return this._resetKeepAliveInterval(),this.connection.send(I)}_sendWithProtocol(I){return this._messageBuffer?this._messageBuffer._send(I):this._sendMessage(this._protocol.writeMessage(I))}send(I,...g){const[C,Q]=this._replaceStreamingParams(g),i=this._sendWithProtocol(this._createInvocation(I,g,!0,Q));return this._launchStreams(C,i),i}invoke(I,...g){const[C,Q]=this._replaceStreamingParams(g),i=this._createInvocation(I,g,!1,Q);return new Promise((E,e)=>{this._callbacks[i.invocationId]=(o,r)=>{if(r){e(r);return}else o&&(o.type===pA.Completion?o.error?e(new Error(o.error)):E(o.result):e(new Error(`Unexpected message type: ${o.type}`)))};const t=this._sendWithProtocol(i).catch(o=>{e(o),delete this._callbacks[i.invocationId]});this._launchStreams(C,t)})}on(I,g){!I||!g||(I=I.toLowerCase(),this._methods[I]||(this._methods[I]=[]),this._methods[I].indexOf(g)===-1&&this._methods[I].push(g))}off(I,g){if(!I)return;I=I.toLowerCase();const C=this._methods[I];if(C)if(g){const Q=C.indexOf(g);Q!==-1&&(C.splice(Q,1),C.length===0&&delete this._methods[I])}else delete this._methods[I]}onclose(I){I&&this._closedCallbacks.push(I)}onreconnecting(I){I&&this._reconnectingCallbacks.push(I)}onreconnected(I){I&&this._reconnectedCallbacks.push(I)}_processIncomingData(I){if(this._cleanupTimeout(),this._receivedHandshakeResponse||(I=this._processHandshakeResponse(I),this._receivedHandshakeResponse=!0),I){const g=this._protocol.parseMessages(I,this._logger);for(const C of g)if(!(this._messageBuffer&&!this._messageBuffer._shouldProcessMessage(C)))switch(C.type){case pA.Invocation:this._invokeClientMethod(C).catch(Q=>{this._logger.log(O.Error,`Invoke client method threw error: ${wm(Q)}`)});break;case pA.StreamItem:case pA.Completion:{const Q=this._callbacks[C.invocationId];if(Q){C.type===pA.Completion&&delete this._callbacks[C.invocationId];try{Q(C)}catch(i){this._logger.log(O.Error,`Stream callback threw error: ${wm(i)}`)}}break}case pA.Ping:break;case pA.Close:{this._logger.log(O.Information,"Close message received from server.");const Q=C.error?new Error("Server returned an error on close: "+C.error):void 0;C.allowReconnect===!0?this.connection.stop(Q):this._stopPromise=this._stopInternal(Q);break}case pA.Ack:this._messageBuffer&&this._messageBuffer._ack(C);break;case pA.Sequence:this._messageBuffer&&this._messageBuffer._resetSequence(C);break;default:this._logger.log(O.Warning,`Invalid message type: ${C.type}.`);break}}this._resetTimeoutPeriod()}_processHandshakeResponse(I){let g,C;try{[C,g]=this._handshakeProtocol.parseHandshakeResponse(I)}catch(Q){const i="Error parsing handshake response: "+Q;this._logger.log(O.Error,i);const B=new Error(i);throw this._handshakeRejecter(B),B}if(g.error){const Q="Server returned handshake error: "+g.error;this._logger.log(O.Error,Q);const i=new Error(Q);throw this._handshakeRejecter(i),i}else this._logger.log(O.Debug,"Server handshake complete.");return this._handshakeResolver(),C}_resetKeepAliveInterval(){this.connection.features.inherentKeepAlive||(this._nextKeepAlive=new Date().getTime()+this.keepAliveIntervalInMilliseconds,this._cleanupPingTimer())}_resetTimeoutPeriod(){if((!this.connection.features||!this.connection.features.inherentKeepAlive)&&(this._timeoutHandle=setTimeout(()=>this.serverTimeout(),this.serverTimeoutInMilliseconds),this._pingServerHandle===void 0)){let I=this._nextKeepAlive-new Date().getTime();I<0&&(I=0),this._pingServerHandle=setTimeout(async()=>{if(this._connectionState===UI.Connected)try{await this._sendMessage(this._cachedPingMessage)}catch{this._cleanupPingTimer()}},I)}}serverTimeout(){this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server."))}async _invokeClientMethod(I){const g=I.target.toLowerCase(),C=this._methods[g];if(!C){this._logger.log(O.Warning,`No client method with the name '${g}' found.`),I.invocationId&&(this._logger.log(O.Warning,`No result given for '${g}' method and invocation ID '${I.invocationId}'.`),await this._sendWithProtocol(this._createCompletionMessage(I.invocationId,"Client didn't provide a result.",null)));return}const Q=C.slice(),i=!!I.invocationId;let B,E,e;for(const t of Q)try{const o=B;B=await t.apply(this,I.arguments),i&&B&&o&&(this._logger.log(O.Error,`Multiple results provided for '${g}'. Sending error to server.`),e=this._createCompletionMessage(I.invocationId,"Client provided multiple results.",null)),E=void 0}catch(o){E=o,this._logger.log(O.Error,`A callback for the method '${g}' threw error '${o}'.`)}e?await this._sendWithProtocol(e):i?(E?e=this._createCompletionMessage(I.invocationId,`${E}`,null):B!==void 0?e=this._createCompletionMessage(I.invocationId,null,B):(this._logger.log(O.Warning,`No result given for '${g}' method and invocation ID '${I.invocationId}'.`),e=this._createCompletionMessage(I.invocationId,"Client didn't provide a result.",null)),await this._sendWithProtocol(e)):B&&this._logger.log(O.Error,`Result given for '${g}' method but server is not expecting a result.`)}_connectionClosed(I){this._logger.log(O.Debug,`HubConnection.connectionClosed(${I}) called while in state ${this._connectionState}.`),this._stopDuringStartError=this._stopDuringStartError||I||new _i("The underlying connection was closed before the hub handshake could complete."),this._handshakeResolver&&this._handshakeResolver(),this._cancelCallbacksWithError(I||new Error("Invocation canceled due to the underlying connection being closed.")),this._cleanupTimeout(),this._cleanupPingTimer(),this._connectionState===UI.Disconnecting?this._completeClose(I):this._connectionState===UI.Connected&&this._reconnectPolicy?this._reconnect(I):this._connectionState===UI.Connected&&this._completeClose(I)}_completeClose(I){if(this._connectionStarted){this._connectionState=UI.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(I??new Error("Connection closed.")),this._messageBuffer=void 0),fI.isBrowser&&window.document.removeEventListener("freeze",this._freezeEventListener);try{this._closedCallbacks.forEach(g=>g.apply(this,[I]))}catch(g){this._logger.log(O.Error,`An onclose callback called with error '${I}' threw error '${g}'.`)}}}async _reconnect(I){const g=Date.now();let C=0,Q=I!==void 0?I:new Error("Attempting to reconnect due to a unknown error."),i=this._getNextRetryDelay(C++,0,Q);if(i===null){this._logger.log(O.Debug,"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt."),this._completeClose(I);return}if(this._connectionState=UI.Reconnecting,I?this._logger.log(O.Information,`Connection reconnecting because of error '${I}'.`):this._logger.log(O.Information,"Connection reconnecting."),this._reconnectingCallbacks.length!==0){try{this._reconnectingCallbacks.forEach(B=>B.apply(this,[I]))}catch(B){this._logger.log(O.Error,`An onreconnecting callback called with error '${I}' threw error '${B}'.`)}if(this._connectionState!==UI.Reconnecting){this._logger.log(O.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.");return}}for(;i!==null;){if(this._logger.log(O.Information,`Reconnect attempt number ${C} will start in ${i} ms.`),await new Promise(B=>{this._reconnectDelayHandle=setTimeout(B,i)}),this._reconnectDelayHandle=void 0,this._connectionState!==UI.Reconnecting){this._logger.log(O.Debug,"Connection left the reconnecting state during reconnect delay. Done reconnecting.");return}try{if(await this._startInternal(),this._connectionState=UI.Connected,this._logger.log(O.Information,"HubConnection reconnected successfully."),this._reconnectedCallbacks.length!==0)try{this._reconnectedCallbacks.forEach(B=>B.apply(this,[this.connection.connectionId]))}catch(B){this._logger.log(O.Error,`An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${B}'.`)}return}catch(B){if(this._logger.log(O.Information,`Reconnect attempt failed because of error '${B}'.`),this._connectionState!==UI.Reconnecting){this._logger.log(O.Debug,`Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`),this._connectionState===UI.Disconnecting&&this._completeClose();return}Q=B instanceof Error?B:new Error(B.toString()),i=this._getNextRetryDelay(C++,Date.now()-g,Q)}}this._logger.log(O.Information,`Reconnect retries have been exhausted after ${Date.now()-g} ms and ${C} failed attempts. Connection disconnecting.`),this._completeClose()}_getNextRetryDelay(I,g,C){try{return this._reconnectPolicy.nextRetryDelayInMilliseconds({elapsedMilliseconds:g,previousRetryCount:I,retryReason:C})}catch(Q){return this._logger.log(O.Error,`IRetryPolicy.nextRetryDelayInMilliseconds(${I}, ${g}) threw error '${Q}'.`),null}}_cancelCallbacksWithError(I){const g=this._callbacks;this._callbacks={},Object.keys(g).forEach(C=>{const Q=g[C];try{Q(null,I)}catch(i){this._logger.log(O.Error,`Stream 'error' callback called with '${I}' threw error: ${wm(i)}`)}})}_cleanupPingTimer(){this._pingServerHandle&&(clearTimeout(this._pingServerHandle),this._pingServerHandle=void 0)}_cleanupTimeout(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}_createInvocation(I,g,C,Q){if(C)return Q.length!==0?{arguments:g,streamIds:Q,target:I,type:pA.Invocation}:{arguments:g,target:I,type:pA.Invocation};{const i=this._invocationId;return this._invocationId++,Q.length!==0?{arguments:g,invocationId:i.toString(),streamIds:Q,target:I,type:pA.Invocation}:{arguments:g,invocationId:i.toString(),target:I,type:pA.Invocation}}}_launchStreams(I,g){if(I.length!==0){g||(g=Promise.resolve());for(const C in I)I[C].subscribe({complete:()=>{g=g.then(()=>this._sendWithProtocol(this._createCompletionMessage(C)))},error:Q=>{let i;Q instanceof Error?i=Q.message:Q&&Q.toString?i=Q.toString():i="Unknown error",g=g.then(()=>this._sendWithProtocol(this._createCompletionMessage(C,i)))},next:Q=>{g=g.then(()=>this._sendWithProtocol(this._createStreamItemMessage(C,Q)))}})}}_replaceStreamingParams(I){const g=[],C=[];for(let Q=0;Q0)&&(g=!1,this._accessToken=await this._accessTokenFactory()),this._setAuthorizationHeader(I);const C=await this._innerClient.send(I);return g&&C.statusCode===401&&this._accessTokenFactory?(this._accessToken=await this._accessTokenFactory(),this._setAuthorizationHeader(I),await this._innerClient.send(I)):C}_setAuthorizationHeader(I){I.headers||(I.headers={}),this._accessToken?I.headers[Mt.Authorization]=`Bearer ${this._accessToken}`:this._accessTokenFactory&&I.headers[Mt.Authorization]&&delete I.headers[Mt.Authorization]}getCookieString(I){return this._innerClient.getCookieString(I)}}var wg;(function(A){A[A.None=0]="None",A[A.WebSockets=1]="WebSockets",A[A.ServerSentEvents=2]="ServerSentEvents",A[A.LongPolling=4]="LongPolling"})(wg||(wg={}));var eC;(function(A){A[A.Text=1]="Text",A[A.Binary=2]="Binary"})(eC||(eC={}));let c$A=class{constructor(){this._isAborted=!1,this.onabort=null}abort(){this._isAborted||(this._isAborted=!0,this.onabort&&this.onabort())}get signal(){return this}get aborted(){return this._isAborted}};class GW{get pollAborted(){return this._pollAbort.aborted}constructor(I,g,C){this._httpClient=I,this._logger=g,this._pollAbort=new c$A,this._options=C,this._running=!1,this.onreceive=null,this.onclose=null}async connect(I,g){if(dg.isRequired(I,"url"),dg.isRequired(g,"transferFormat"),dg.isIn(g,eC,"transferFormat"),this._url=I,this._logger.log(O.Trace,"(LongPolling transport) Connecting."),g===eC.Binary&&typeof XMLHttpRequest<"u"&&typeof new XMLHttpRequest().responseType!="string")throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");const[C,Q]=Ws(),i={[C]:Q,...this._options.headers},B={abortSignal:this._pollAbort.signal,headers:i,timeout:1e5,withCredentials:this._options.withCredentials};g===eC.Binary&&(B.responseType="arraybuffer");const E=`${I}&_=${Date.now()}`;this._logger.log(O.Trace,`(LongPolling transport) polling: ${E}.`);const e=await this._httpClient.get(E,B);e.statusCode!==200?(this._logger.log(O.Error,`(LongPolling transport) Unexpected response code: ${e.statusCode}.`),this._closeError=new zt(e.statusText||"",e.statusCode),this._running=!1):this._running=!0,this._receiving=this._poll(this._url,B)}async _poll(I,g){try{for(;this._running;)try{const C=`${I}&_=${Date.now()}`;this._logger.log(O.Trace,`(LongPolling transport) polling: ${C}.`);const Q=await this._httpClient.get(C,g);Q.statusCode===204?(this._logger.log(O.Information,"(LongPolling transport) Poll terminated by server."),this._running=!1):Q.statusCode!==200?(this._logger.log(O.Error,`(LongPolling transport) Unexpected response code: ${Q.statusCode}.`),this._closeError=new zt(Q.statusText||"",Q.statusCode),this._running=!1):Q.content?(this._logger.log(O.Trace,`(LongPolling transport) data received. ${$n(Q.content,this._options.logMessageContent)}.`),this.onreceive&&this.onreceive(Q.content)):this._logger.log(O.Trace,"(LongPolling transport) Poll timed out, reissuing.")}catch(C){this._running?C instanceof AT?this._logger.log(O.Trace,"(LongPolling transport) Poll timed out, reissuing."):(this._closeError=C,this._running=!1):this._logger.log(O.Trace,`(LongPolling transport) Poll errored after shutdown: ${C.message}`)}}finally{this._logger.log(O.Trace,"(LongPolling transport) Polling complete."),this.pollAborted||this._raiseOnClose()}}async send(I){return this._running?Ox(this._logger,"LongPolling",this._httpClient,this._url,I,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}async stop(){this._logger.log(O.Trace,"(LongPolling transport) Stopping polling."),this._running=!1,this._pollAbort.abort();try{await this._receiving,this._logger.log(O.Trace,`(LongPolling transport) sending DELETE request to ${this._url}.`);const I={},[g,C]=Ws();I[g]=C;const Q={headers:{...I,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials};let i;try{await this._httpClient.delete(this._url,Q)}catch(B){i=B}i?i instanceof zt&&(i.statusCode===404?this._logger.log(O.Trace,"(LongPolling transport) A 404 response was returned from sending a DELETE request."):this._logger.log(O.Trace,`(LongPolling transport) Error sending a DELETE request: ${i}`)):this._logger.log(O.Trace,"(LongPolling transport) DELETE request accepted.")}finally{this._logger.log(O.Trace,"(LongPolling transport) Stop finished."),this._raiseOnClose()}}_raiseOnClose(){if(this.onclose){let I="(LongPolling transport) Firing onclose event.";this._closeError&&(I+=" Error: "+this._closeError),this._logger.log(O.Trace,I),this.onclose(this._closeError)}}}class l$A{constructor(I,g,C,Q){this._httpClient=I,this._accessToken=g,this._logger=C,this._options=Q,this.onreceive=null,this.onclose=null}async connect(I,g){return dg.isRequired(I,"url"),dg.isRequired(g,"transferFormat"),dg.isIn(g,eC,"transferFormat"),this._logger.log(O.Trace,"(SSE transport) Connecting."),this._url=I,this._accessToken&&(I+=(I.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(this._accessToken)}`),new Promise((C,Q)=>{let i=!1;if(g!==eC.Text){Q(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"));return}let B;if(fI.isBrowser||fI.isWebWorker)B=new this._options.EventSource(I,{withCredentials:this._options.withCredentials});else{const E=this._httpClient.getCookieString(I),e={};e.Cookie=E;const[t,o]=Ws();e[t]=o,B=new this._options.EventSource(I,{withCredentials:this._options.withCredentials,headers:{...e,...this._options.headers}})}try{B.onmessage=E=>{if(this.onreceive)try{this._logger.log(O.Trace,`(SSE transport) data received. ${$n(E.data,this._options.logMessageContent)}.`),this.onreceive(E.data)}catch(e){this._close(e);return}},B.onerror=E=>{i?this._close():Q(new Error("EventSource failed to connect. The connection could not be found on the server, either the connection ID is not present on the server, or a proxy is refusing/buffering the connection. If you have multiple servers check that sticky sessions are enabled."))},B.onopen=()=>{this._logger.log(O.Information,`SSE connected to ${this._url}`),this._eventSource=B,i=!0,C()}}catch(E){Q(E);return}})}async send(I){return this._eventSource?Ox(this._logger,"SSE",this._httpClient,this._url,I,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}stop(){return this._close(),Promise.resolve()}_close(I){this._eventSource&&(this._eventSource.close(),this._eventSource=void 0,this.onclose&&this.onclose(I))}}class P$A{constructor(I,g,C,Q,i,B){this._logger=C,this._accessTokenFactory=g,this._logMessageContent=Q,this._webSocketConstructor=i,this._httpClient=I,this.onreceive=null,this.onclose=null,this._headers=B}async connect(I,g){dg.isRequired(I,"url"),dg.isRequired(g,"transferFormat"),dg.isIn(g,eC,"transferFormat"),this._logger.log(O.Trace,"(WebSockets transport) Connecting.");let C;return this._accessTokenFactory&&(C=await this._accessTokenFactory()),new Promise((Q,i)=>{I=I.replace(/^http/,"ws");let B;const E=this._httpClient.getCookieString(I);let e=!1;if(fI.isNode||fI.isReactNative){const t={},[o,r]=Ws();t[o]=r,C&&(t[Mt.Authorization]=`Bearer ${C}`),E&&(t[Mt.Cookie]=E),B=new this._webSocketConstructor(I,void 0,{headers:{...t,...this._headers}})}else C&&(I+=(I.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(C)}`);B||(B=new this._webSocketConstructor(I)),g===eC.Binary&&(B.binaryType="arraybuffer"),B.onopen=t=>{this._logger.log(O.Information,`WebSocket connected to ${I}.`),this._webSocket=B,e=!0,Q()},B.onerror=t=>{let o=null;typeof ErrorEvent<"u"&&t instanceof ErrorEvent?o=t.error:o="There was an error with the transport",this._logger.log(O.Information,`(WebSockets transport) ${o}.`)},B.onmessage=t=>{if(this._logger.log(O.Trace,`(WebSockets transport) data received. ${$n(t.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(t.data)}catch(o){this._close(o);return}},B.onclose=t=>{if(e)this._close(t);else{let o=null;typeof ErrorEvent<"u"&&t instanceof ErrorEvent?o=t.error:o="WebSocket failed to connect. The connection could not be found on the server, either the endpoint may not be a SignalR endpoint, the connection ID is not present on the server, or there is a proxy blocking WebSockets. If you have multiple servers check that sticky sessions are enabled.",i(new Error(o))}}})}send(I){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(O.Trace,`(WebSockets transport) sending data. ${$n(I,this._logMessageContent)}.`),this._webSocket.send(I),Promise.resolve()):Promise.reject("WebSocket is not in the OPEN state")}stop(){return this._webSocket&&this._close(void 0),Promise.resolve()}_close(I){this._webSocket&&(this._webSocket.onclose=()=>{},this._webSocket.onmessage=()=>{},this._webSocket.onerror=()=>{},this._webSocket.close(),this._webSocket=void 0),this._logger.log(O.Trace,"(WebSockets transport) socket closed."),this.onclose&&(this._isCloseEvent(I)&&(I.wasClean===!1||I.code!==1e3)?this.onclose(new Error(`WebSocket closed with status code: ${I.code} (${I.reason||"no reason given"}).`)):I instanceof Error?this.onclose(I):this.onclose())}_isCloseEvent(I){return I&&typeof I.wasClean=="boolean"&&typeof I.code=="number"}}const RW=100;class d$A{constructor(I,g={}){if(this._stopPromiseResolver=()=>{},this.features={},this._negotiateVersion=1,dg.isRequired(I,"url"),this._logger=q_A(g.logger),this.baseUrl=this._resolveUrl(I),g=g||{},g.logMessageContent=g.logMessageContent===void 0?!1:g.logMessageContent,typeof g.withCredentials=="boolean"||g.withCredentials===void 0)g.withCredentials=g.withCredentials===void 0?!0:g.withCredentials;else throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");g.timeout=g.timeout===void 0?100*1e3:g.timeout;let C=null,Q=null;if(fI.isNode&&typeof require<"u"){const i=typeof __webpack_require__=="function"?__non_webpack_require__:require;C=i("ws"),Q=i("eventsource")}!fI.isNode&&typeof WebSocket<"u"&&!g.WebSocket?g.WebSocket=WebSocket:fI.isNode&&!g.WebSocket&&C&&(g.WebSocket=C),!fI.isNode&&typeof EventSource<"u"&&!g.EventSource?g.EventSource=EventSource:fI.isNode&&!g.EventSource&&typeof Q<"u"&&(g.EventSource=Q),this._httpClient=new n$A(g.httpClient||new B$A(this._logger),g.accessTokenFactory),this._connectionState="Disconnected",this._connectionStarted=!1,this._options=g,this.onreceive=null,this.onclose=null}async start(I){if(I=I||eC.Binary,dg.isIn(I,eC,"transferFormat"),this._logger.log(O.Debug,`Starting connection with transfer format '${eC[I]}'.`),this._connectionState!=="Disconnected")return Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state."));if(this._connectionState="Connecting",this._startInternalPromise=this._startInternal(I),await this._startInternalPromise,this._connectionState==="Disconnecting"){const g="Failed to start the HttpConnection before stop() was called.";return this._logger.log(O.Error,g),await this._stopPromise,Promise.reject(new _i(g))}else if(this._connectionState!=="Connected"){const g="HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";return this._logger.log(O.Error,g),Promise.reject(new _i(g))}this._connectionStarted=!0}send(I){return this._connectionState!=="Connected"?Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State.")):(this._sendQueue||(this._sendQueue=new gT(this.transport)),this._sendQueue.send(I))}async stop(I){if(this._connectionState==="Disconnected")return this._logger.log(O.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnected state.`),Promise.resolve();if(this._connectionState==="Disconnecting")return this._logger.log(O.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;this._connectionState="Disconnecting",this._stopPromise=new Promise(g=>{this._stopPromiseResolver=g}),await this._stopInternal(I),await this._stopPromise}async _stopInternal(I){this._stopError=I;try{await this._startInternalPromise}catch{}if(this.transport){try{await this.transport.stop()}catch(g){this._logger.log(O.Error,`HttpConnection.transport.stop() threw error '${g}'.`),this._stopConnection()}this.transport=void 0}else this._logger.log(O.Debug,"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.")}async _startInternal(I){let g=this.baseUrl;this._accessTokenFactory=this._options.accessTokenFactory,this._httpClient._accessTokenFactory=this._accessTokenFactory;try{if(this._options.skipNegotiation)if(this._options.transport===wg.WebSockets)this.transport=this._constructTransport(wg.WebSockets),await this._startTransport(g,I);else throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");else{let C=null,Q=0;do{if(C=await this._getNegotiationResponse(g),this._connectionState==="Disconnecting"||this._connectionState==="Disconnected")throw new _i("The connection was stopped during negotiation.");if(C.error)throw new Error(C.error);if(C.ProtocolVersion)throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");if(C.url&&(g=C.url),C.accessToken){const i=C.accessToken;this._accessTokenFactory=()=>i,this._httpClient._accessToken=i,this._httpClient._accessTokenFactory=void 0}Q++}while(C.url&&Q0?Promise.reject(new H_A(`Unable to connect to the server with any of the available transports. ${B.join(" ")}`,B)):Promise.reject(new Error("None of the transports supported by the client are supported by the server."))}_constructTransport(I){switch(I){case wg.WebSockets:if(!this._options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new P$A(this._httpClient,this._accessTokenFactory,this._logger,this._options.logMessageContent,this._options.WebSocket,this._options.headers||{});case wg.ServerSentEvents:if(!this._options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new l$A(this._httpClient,this._httpClient._accessToken,this._logger,this._options);case wg.LongPolling:return new GW(this._httpClient,this._logger,this._options);default:throw new Error(`Unknown transport: ${I}.`)}}_startTransport(I,g){return this.transport.onreceive=this.onreceive,this.features.reconnect?this.transport.onclose=async C=>{let Q=!1;if(this.features.reconnect)try{this.features.disconnected(),await this.transport.connect(I,g),await this.features.resend()}catch{Q=!0}else{this._stopConnection(C);return}Q&&this._stopConnection(C)}:this.transport.onclose=C=>this._stopConnection(C),this.transport.connect(I,g)}_resolveTransportOrError(I,g,C,Q){const i=wg[I.transport];if(i==null)return this._logger.log(O.Debug,`Skipping transport '${I.transport}' because it is not supported by this client.`),new Error(`Skipping transport '${I.transport}' because it is not supported by this client.`);if(h$A(g,i))if(I.transferFormats.map(E=>eC[E]).indexOf(C)>=0){if(i===wg.WebSockets&&!this._options.WebSocket||i===wg.ServerSentEvents&&!this._options.EventSource)return this._logger.log(O.Debug,`Skipping transport '${wg[i]}' because it is not supported in your environment.'`),new f_A(`'${wg[i]}' is not supported in your environment.`,i);this._logger.log(O.Debug,`Selecting transport '${wg[i]}'.`);try{return this.features.reconnect=i===wg.WebSockets?Q:void 0,this._constructTransport(i)}catch(E){return E}}else return this._logger.log(O.Debug,`Skipping transport '${wg[i]}' because it does not support the requested transfer format '${eC[C]}'.`),new Error(`'${wg[i]}' does not support ${eC[C]}.`);else return this._logger.log(O.Debug,`Skipping transport '${wg[i]}' because it was disabled by the client.`),new j_A(`'${wg[i]}' is disabled by the client.`,i)}_isITransport(I){return I&&typeof I=="object"&&"connect"in I}_stopConnection(I){if(this._logger.log(O.Debug,`HttpConnection.stopConnection(${I}) called while in state ${this._connectionState}.`),this.transport=void 0,I=this._stopError||I,this._stopError=void 0,this._connectionState==="Disconnected"){this._logger.log(O.Debug,`Call to HttpConnection.stopConnection(${I}) was ignored because the connection is already in the disconnected state.`);return}if(this._connectionState==="Connecting")throw this._logger.log(O.Warning,`Call to HttpConnection.stopConnection(${I}) was ignored because the connection is still in the connecting state.`),new Error(`HttpConnection.stopConnection(${I}) was called while the connection is still in the connecting state.`);if(this._connectionState==="Disconnecting"&&this._stopPromiseResolver(),I?this._logger.log(O.Error,`Connection disconnected with error '${I}'.`):this._logger.log(O.Information,"Connection disconnected."),this._sendQueue&&(this._sendQueue.stop().catch(g=>{this._logger.log(O.Error,`TransportSendQueue.stop() threw error '${g}'.`)}),this._sendQueue=void 0),this.connectionId=void 0,this._connectionState="Disconnected",this._connectionStarted){this._connectionStarted=!1;try{this.onclose&&this.onclose(I)}catch(g){this._logger.log(O.Error,`HttpConnection.onclose(${I}) threw error '${g}'.`)}}}_resolveUrl(I){if(I.lastIndexOf("https://",0)===0||I.lastIndexOf("http://",0)===0)return I;if(!fI.isBrowser)throw new Error(`Cannot resolve '${I}'.`);const g=window.document.createElement("a");return g.href=I,this._logger.log(O.Information,`Normalizing '${I}' to '${g.href}'.`),g.href}_resolveNegotiateUrl(I){const g=new URL(I);g.pathname.endsWith("/")?g.pathname+="negotiate":g.pathname+="/negotiate";const C=new URLSearchParams(g.searchParams);return C.has("negotiateVersion")||C.append("negotiateVersion",this._negotiateVersion.toString()),C.has("useStatefulReconnect")?C.get("useStatefulReconnect")==="true"&&(this._options._useStatefulReconnect=!0):this._options._useStatefulReconnect===!0&&C.append("useStatefulReconnect","true"),g.search=C.toString(),g.toString()}}function h$A(A,I){return!A||(I&A)!==0}class gT{constructor(I){this._transport=I,this._buffer=[],this._executing=!0,this._sendBufferedData=new GP,this._transportResult=new GP,this._sendLoopPromise=this._sendLoop()}send(I){return this._bufferData(I),this._transportResult||(this._transportResult=new GP),this._transportResult.promise}stop(){return this._executing=!1,this._sendBufferedData.resolve(),this._sendLoopPromise}_bufferData(I){if(this._buffer.length&&typeof this._buffer[0]!=typeof I)throw new Error(`Expected data to be of type ${typeof this._buffer} but was of type ${typeof I}`);this._buffer.push(I),this._sendBufferedData.resolve()}async _sendLoop(){for(;;){if(await this._sendBufferedData.promise,!this._executing){this._transportResult&&this._transportResult.reject("Connection stopped.");break}this._sendBufferedData=new GP;const I=this._transportResult;this._transportResult=void 0;const g=typeof this._buffer[0]=="string"?this._buffer.join(""):gT._concatBuffers(this._buffer);this._buffer.length=0;try{await this._transport.send(g),I.resolve()}catch(C){I.reject(C)}}}static _concatBuffers(I){const g=I.map(i=>i.byteLength).reduce((i,B)=>i+B),C=new Uint8Array(g);let Q=0;for(const i of I)C.set(new Uint8Array(i),Q),Q+=i.byteLength;return C.buffer}}class GP{constructor(){this.promise=new Promise((I,g)=>[this._resolver,this._rejecter]=[I,g])}resolve(){this._resolver()}reject(I){this._rejecter(I)}}const u$A="json";class D$A{constructor(){this.name=u$A,this.version=2,this.transferFormat=eC.Text}parseMessages(I,g){if(typeof I!="string")throw new Error("Invalid input for JSON hub protocol. Expected a string.");if(!I)return[];g===null&&(g=_n.instance);const C=SQ.parse(I),Q=[];for(const i of C){const B=JSON.parse(i);if(typeof B.type!="number")throw new Error("Invalid payload.");switch(B.type){case pA.Invocation:this._isInvocationMessage(B);break;case pA.StreamItem:this._isStreamItemMessage(B);break;case pA.Completion:this._isCompletionMessage(B);break;case pA.Ping:break;case pA.Close:break;case pA.Ack:this._isAckMessage(B);break;case pA.Sequence:this._isSequenceMessage(B);break;default:g.log(O.Information,"Unknown message type '"+B.type+"' ignored.");continue}Q.push(B)}return Q}writeMessage(I){return SQ.write(JSON.stringify(I))}_isInvocationMessage(I){this._assertNotEmptyString(I.target,"Invalid payload for Invocation message."),I.invocationId!==void 0&&this._assertNotEmptyString(I.invocationId,"Invalid payload for Invocation message.")}_isStreamItemMessage(I){if(this._assertNotEmptyString(I.invocationId,"Invalid payload for StreamItem message."),I.item===void 0)throw new Error("Invalid payload for StreamItem message.")}_isCompletionMessage(I){if(I.result&&I.error)throw new Error("Invalid payload for Completion message.");!I.result&&I.error&&this._assertNotEmptyString(I.error,"Invalid payload for Completion message."),this._assertNotEmptyString(I.invocationId,"Invalid payload for Completion message.")}_isAckMessage(I){if(typeof I.sequenceId!="number")throw new Error("Invalid SequenceId for Ack message.")}_isSequenceMessage(I){if(typeof I.sequenceId!="number")throw new Error("Invalid SequenceId for Sequence message.")}_assertNotEmptyString(I,g){if(typeof I!="string"||I==="")throw new Error(g)}}const b$A={trace:O.Trace,debug:O.Debug,info:O.Information,information:O.Information,warn:O.Warning,warning:O.Warning,error:O.Error,critical:O.Critical,none:O.None};function y$A(A){const I=b$A[A.toLowerCase()];if(typeof I<"u")return I;throw new Error(`Unknown log level: ${A}`)}class rAI{configureLogging(I){if(dg.isRequired(I,"logging"),m$A(I))this.logger=I;else if(typeof I=="string"){const g=y$A(I);this.logger=new Cd(g)}else this.logger=new Cd(I);return this}withUrl(I,g){return dg.isRequired(I,"url"),dg.isNotEmpty(I,"url"),this.url=I,typeof g=="object"?this.httpConnectionOptions={...this.httpConnectionOptions,...g}:this.httpConnectionOptions={...this.httpConnectionOptions,transport:g},this}withHubProtocol(I){return dg.isRequired(I,"protocol"),this.protocol=I,this}withAutomaticReconnect(I){if(this.reconnectPolicy)throw new Error("A reconnectPolicy has already been set.");return I?Array.isArray(I)?this.reconnectPolicy=new wW(I):this.reconnectPolicy=I:this.reconnectPolicy=new wW,this}withServerTimeout(I){return dg.isRequired(I,"milliseconds"),this._serverTimeoutInMilliseconds=I,this}withKeepAliveInterval(I){return dg.isRequired(I,"milliseconds"),this._keepAliveIntervalInMilliseconds=I,this}withStatefulReconnect(I){return this.httpConnectionOptions===void 0&&(this.httpConnectionOptions={}),this.httpConnectionOptions._useStatefulReconnect=!0,this._statefulReconnectBufferSize=I==null?void 0:I.bufferSize,this}build(){const I=this.httpConnectionOptions||{};if(I.logger===void 0&&(I.logger=this.logger),!this.url)throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection.");const g=new d$A(this.url,I);return IT.create(g,this.logger||_n.instance,this.protocol||new D$A,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}function m$A(A){return A.log!==void 0}export{N$A as A,Z$A as C,Y$A as D,rAI as H,O as L,eAI as M,w$A as O,p$A as P,R$A as R,k$A as T,F$A as V,m6 as a,$_ as b,G$A as c,U$A as d,K$A as e,W$A as f,OA as g,yB as h,Ni as i,YA as j,EAI as k,vgA as l,iAI as m,tAI as n,L$A as o,k as r,S$A as t,K4 as u}; diff --git a/build/assets/App-BkgWMpGx.js b/build/assets/App-BkgWMpGx.js new file mode 100644 index 0000000..832fab8 --- /dev/null +++ b/build/assets/App-BkgWMpGx.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-CR5a_mms.js","assets/.pnpm-CAIuqsZ0.js","assets/use-toast-DO4tfD4I.js","assets/index-PFueeGmc.css"])))=>i.map(i=>d[i]); +import{_ as t}from"./index-DOYUXUr3.js";import{j as r,r as a}from"./.pnpm-CAIuqsZ0.js";const o=a.lazy(()=>t(()=>import("./index-CR5a_mms.js"),__vite__mapDeps([0,1,2,3])));function i(){return r.jsx("div",{className:"h-full bg-[#F4F6FA]",children:r.jsx(o,{})})}export{i as default}; diff --git a/build/assets/App-Dh3vQfIK.js b/build/assets/App-Dh3vQfIK.js deleted file mode 100644 index a043477..0000000 --- a/build/assets/App-Dh3vQfIK.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DQMJjaAj.js","assets/.pnpm-BDdfG1pO.js","assets/index-PFueeGmc.css"])))=>i.map(i=>d[i]); -import{_ as t}from"./index-j0VtgfAk.js";import{j as r,r as a}from"./.pnpm-BDdfG1pO.js";const o=a.lazy(()=>t(()=>import("./index-DQMJjaAj.js"),__vite__mapDeps([0,1,2])));function i(){return r.jsx("div",{className:"h-full bg-[#F4F6FA]",children:r.jsx(o,{})})}export{i as default}; diff --git a/build/assets/MainLayout-BMCWJnk-.js b/build/assets/MainLayout-BMCWJnk-.js new file mode 100644 index 0000000..a994669 --- /dev/null +++ b/build/assets/MainLayout-BMCWJnk-.js @@ -0,0 +1 @@ +import{t as b,b as j,P as y,r as o,j as e,d,e as N,T as n,D as c,C as u,f as T,V as l,A as p,O as R}from"./.pnpm-CAIuqsZ0.js";import{u as V}from"./use-toast-DO4tfD4I.js";function r(...t){return b(j(t))}const C=y,f=o.forwardRef(({className:t,...a},s)=>e.jsx(l,{ref:s,className:r("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",t),...a}));f.displayName=l.displayName;const k=N("group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),m=o.forwardRef(({className:t,variant:a,...s},i)=>e.jsx(d,{ref:i,className:r(k({variant:a}),t),...s}));m.displayName=d.displayName;const A=o.forwardRef(({className:t,...a},s)=>e.jsx(p,{ref:s,className:r("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",t),...a}));A.displayName=p.displayName;const x=o.forwardRef(({className:t,...a},s)=>e.jsx(u,{ref:s,className:r("absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",t),"toast-close":"",...a,children:e.jsx(T,{className:"h-4 w-4"})}));x.displayName=u.displayName;const v=o.forwardRef(({className:t,...a},s)=>e.jsx(n,{ref:s,className:r("text-sm font-semibold [&+div]:text-xs",t),...a}));v.displayName=n.displayName;const g=o.forwardRef(({className:t,...a},s)=>e.jsx(c,{ref:s,className:r("text-sm opacity-90",t),...a}));g.displayName=c.displayName;function D(){const{toasts:t}=V();return e.jsxs(C,{children:[t.map(function({id:a,title:s,description:i,action:h,...w}){return e.jsxs(m,{...w,children:[e.jsxs("div",{className:"grid gap-1",children:[s&&e.jsx(v,{children:s}),i&&e.jsx(g,{children:i})]}),h,e.jsx(x,{})]},a)}),e.jsx(f,{})]})}function L(){return e.jsx(e.Fragment,{children:e.jsxs("div",{className:r("h-screen bg-background font-sans antialiased"),children:[e.jsx(R,{}),e.jsx(D,{})]})})}export{L as default}; diff --git a/build/assets/MainLayout-BWiadrJR.js b/build/assets/MainLayout-BWiadrJR.js deleted file mode 100644 index 35b35d6..0000000 --- a/build/assets/MainLayout-BWiadrJR.js +++ /dev/null @@ -1 +0,0 @@ -import{t as s,b as n,j as t,O as e}from"./.pnpm-BDdfG1pO.js";function r(...a){return s(n(a))}function c(){return t.jsx(t.Fragment,{children:t.jsx("div",{className:r("h-dvh bg-background font-sans antialiased"),children:t.jsx(e,{})})})}export{c as default}; diff --git a/build/assets/index-CR5a_mms.js b/build/assets/index-CR5a_mms.js new file mode 100644 index 0000000..438ef27 --- /dev/null +++ b/build/assets/index-CR5a_mms.js @@ -0,0 +1 @@ +import{r,g as I,j as e,h as Y,i as O,u as P,k as X,l as A,m as S,M as ee,n as te,H as se,L as ne,o as M}from"./.pnpm-CAIuqsZ0.js";import{u as W}from"./use-toast-DO4tfD4I.js";const R=r.createContext({client:null,isConnecting:!1,isConnected:!1,audioEnabled:!0,isSupportVideo:!1,messageList:[],isAiTalking:!1,roomInfo:null,initClient:()=>{},handleConnect:()=>Promise.resolve(),handleInterrupt:()=>{},handleDisconnect:()=>{},toggleMicrophone:()=>{}}),re=()=>{const t=r.useContext(R);if(t===void 0)throw new Error("useRealtimeClient必须在RealtimeClientProvider内部使用");return{...t}},oe=({children:t})=>{const s="pat_NhhZGW7sxkuyP4mJrPrVyZx20b3m6lymg0y2Ln9EyM0CV9q2f9t3rlGbtzppLQua",o="7456409430717480998",c="7426720361733144585",l="1024",n=r.useRef(null),[d,m]=r.useState([]),[x,v]=r.useState(!1),[w,N]=r.useState(!1),[g,h]=r.useState(!0),[f]=r.useState(!1),[j,y]=r.useState(!1),[L,q]=r.useState(null),{toast:G}=W(),H=async u=>{const a=await P.checkDevicePermission(!1),i=await P.getAudioDevices();if(!a.audio)throw G({title:"连接错误",description:"需要麦克风访问权限"}),new Error("需要麦克风访问权限");if(i.audioInputs.length===0)throw G({title:"连接错误",description:"没有麦克风设备"}),new Error("没有麦克风设备");const k=new X({accessToken:s,botId:o,voiceId:c,connectorId:l,allowPersonalAccessTokenInBrowser:!0});n.current=k,K(k),Z(k,u??""),J(k,u)},U=async u=>{var a;try{n.current||await H(u),await((a=n.current)==null?void 0:a.connect()),await B()}catch(i){if(console.error(i),i instanceof Y)switch(i.code){case O.CREATE_ROOM_ERROR:console.error(`创建房间失败: ${i.message}`);break;case O.CONNECTION_ERROR:console.error(`加入房间失败: ${i.message}`);break;case O.DEVICE_ACCESS_ERROR:console.error(`获取设备失败: ${i.message}`);break;default:console.error(`连接错误: ${i.message}`)}else console.error("连接错误:"+i)}},z=()=>{var u;try{(u=n.current)==null||u.interrupt()}catch(a){console.error("打断失败:"+a)}},F=async()=>{var u,a,i;try{y(!1),m([]),await((u=n.current)==null?void 0:u.setAudioEnable(!1)),h(!1),(a=n.current)==null||a.disconnect(),(i=n.current)==null||i.clearEventHandlers(),n.current=null,N(!1)}catch(k){console.error("断开失败:"+k)}},B=async()=>{var u;try{await((u=n.current)==null?void 0:u.setAudioEnable(!g)),h(!g)}catch(a){console.error("切换麦克风状态失败:"+a)}},J=r.useCallback((u,a)=>{u.on(I.ALL_SERVER,async(i,k)=>{var p;console.log("发信息",i,k),i==="server.session.created"&&(await u.sendMessage({id:"",event_type:"session.update",data:{chat_config:{allow_voice_interrupt:!1}}}),console.log("初始化信息",a,L)),i==="server.bot.join"&&a&&await((p=n.current)==null?void 0:p.sendMessage({id:"",event_type:"conversation.message.create",data:{role:"user",content_type:"text",content:a}}))})},[n.current]),Z=(u,a)=>{let i;u.on(I.ALL,(k,p)=>{if(p.event_type!==A.CONVERSATION_MESSAGE_DELTA&&p.event_type!==A.CONVERSATION_MESSAGE_COMPLETED&&p.event_type!=="conversation.created")return;const T=p.data.content;m(C=>(i==null?void 0:i.event_type)===A.CONVERSATION_MESSAGE_DELTA&&(p.data.type==="answer"||p.data.type==="question")?[...C.slice(0,-1),{content:C[C.length-1].content+T,role:C[C.length-1].role}]:a===""&&p.event_type==="conversation.created"?[...C,{content:p.data.prologue,role:S.Assistant}]:T!==""&&p.event_type===A.CONVERSATION_MESSAGE_DELTA||p.event_type===A.CONVERSATION_MESSAGE_COMPLETED&&(p.data.type==="answer"||p.data.type==="question")&&p.data.role!==S.Assistant?[...C,{content:T,role:p.data.role}]:C),i=p})},K=r.useCallback(u=>{u.on(I.AUDIO_AGENT_SPEECH_STARTED,async()=>{var a;y(!0),await((a=n.current)==null?void 0:a.setAudioEnable(!1)),h(!1)}),u.on(I.AUDIO_AGENT_SPEECH_STOPPED,async()=>{var a;y(!1),await((a=n.current)==null?void 0:a.setAudioEnable(!0)),h(!0)}),u.on(I.CONNECTING,()=>{v(!0),N(!1)}),u.on(I.CONNECTED,(a,i)=>{q(i),v(!1),N(!0)})},[n.current]);return e.jsx(R.Provider,{value:{client:n.current,isConnecting:x,isConnected:w,audioEnabled:g,isSupportVideo:f,messageList:d,isAiTalking:j,roomInfo:L,initClient:H,handleConnect:U,handleInterrupt:z,handleDisconnect:F,toggleMicrophone:B},children:t})};function ce(){const{messageList:t}=r.useContext(R),s=r.useRef(null),o=()=>{var c;(c=s.current)==null||c.scrollIntoView({behavior:"smooth"})};return r.useEffect(()=>{o()},[t]),e.jsxs("div",{className:"flex-1 flex flex-col overflow-y-auto",children:[e.jsx("div",{className:"w-full min-h-[120px] h-[120px]",children:e.jsxs("div",{className:"relative h-full",children:[e.jsx("img",{src:"/icons/hello.gif",alt:"",className:"absolute top-0 h-[97px] left-[50%] translate-x-[-50%]"}),e.jsx("img",{src:"/icons/conversation-bg.png",alt:"background",className:"w-[222px] h-[49px] absolute bottom-0 left-[50%] translate-x-[-50%]"}),e.jsx("div",{className:"text-black text-[14px] absolute bottom-[22px] left-[50%] translate-x-[-50%] z-[10]",children:"Hey,我是您的六纬AI填报师"})]})}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[t.map((c,l)=>e.jsx("div",{className:`flex ${c.role===S.Assistant?"justify-start":"justify-end"}`,children:e.jsx("div",{className:`max-w-3/4 p-3 rounded-lg ${c.role===S.Assistant?"bg-white text-black rounded-tl-none":"bg-blue-500 text-white rounded-tr-none"}`,children:e.jsx(ee,{remarkPlugins:[te],children:c.content})})},l)),e.jsx("div",{ref:s})]})]})}const ae="_talkWrapper_5jmgu_23",ie="_listenerDot_5jmgu_53",le="_isTalking_5jmgu_93",ue="_microphoneWrapper_5jmgu_157",b={talkWrapper:ae,listenerDot:ie,isTalking:le,microphoneWrapper:ue},de="/icons/lockmicrophone.png",pe="/icons/microphone.png",ge="/icons/handoff.png",he=t=>{const s=r.useRef(null),{handleDisconnect:o}=re(),{toast:c}=W(),l=r.useRef(null);return r.useEffect(()=>{if(!t.access_token||!t.roomId)return;const n=new se().withServerTimeout(3e4).withAutomaticReconnect().withUrl(`https://api.v3.ycymedu.com/hubs/weminpro?access_token=${t.access_token}&roomId=${t.roomId}`).configureLogging(ne.Information).build();return s.current=n,n.on("ForceOffline",function(d){c({variant:"destructive",title:"下线提醒",description:d}),o()}),n.on("SendWarn",function(d){console.warn(`下线提醒:${d}"`),c({variant:"destructive",title:"下线提醒",description:d})}),n.start().then(()=>{console.log("SignalR连接已建立"),l.current=setInterval(()=>{n.invoke("Ping")},5e3)}).catch(d=>{console.error("SignalR连接失败:",d)}),()=>{s.current&&s.current.stop().then(()=>{clearInterval(l.current),console.log("SignalR连接已关闭")}).catch(d=>{console.error("关闭SignalR连接失败:",d)})}},[t.access_token,t.roomId]),s.current};function me({className:t,...s}){const{handleDisconnect:o,toggleMicrophone:c,audioEnabled:l,isAiTalking:n,handleInterrupt:d,roomInfo:m}=r.useContext(R),[x]=M();return he({access_token:x.get("token")||"",roomId:(m==null?void 0:m.roomId)||""}),e.jsxs("div",{className:"flex items-center justify-center bg-white pb-[20px] pt-[10px] gap-[10px]",...s,children:[e.jsxs("div",{className:`${b.microphoneWrapper}`,onClick:o,children:[e.jsx("img",{src:ge,alt:"handoff"}),e.jsx("div",{children:"挂断"})]}),e.jsxs("div",{className:`${b.microphoneWrapper}`,onClick:c,children:[e.jsx("img",{src:l?pe:de,alt:"lock"}),e.jsx("div",{children:l?"关麦":"开麦"})]}),e.jsxs("div",{className:`${b.talkWrapper}`,onClick:d,children:[e.jsxs("div",{className:`${n?b.isTalking:""} ${b.listenerDot}`,children:[e.jsx("span",{style:{"--d":"2"}}),e.jsx("span",{style:{"--d":"1"}}),e.jsx("span",{style:{"--d":"0"}}),e.jsx("span",{style:{"--d":"1"}}),e.jsx("span",{style:{"--d":"2"}})]}),e.jsx("div",{children:n?"点击打断":"正在听"})]})]})}function fe(){return e.jsxs("div",{className:"flex flex-col max-h-full h-full",children:[e.jsx(ce,{}),e.jsx(me,{})]})}const xe="/icons/hello.gif",_e="/icons/whatsThing.png",je="/icons/circle.png",ye="/icons/right.png",Ee="_headerWrapper_lrk2k_1",ke="_wrapper_lrk2k_15",ve="_img_lrk2k_37",Ce="_text_lrk2k_81",Ne="_main_lrk2k_101",Re="_thing_lrk2k_135",we="_circle_lrk2k_153",Ie="_rightIcon_lrk2k_179",Ae="_change_lrk2k_189",be="_tip_lrk2k_197",Se="_rotating_lrk2k_223",_={headerWrapper:Ee,wrapper:ke,img:ve,text:Ce,"main-wrapper":"_main-wrapper_lrk2k_101",main:Ne,thing:Re,circle:we,rightIcon:Ie,change:Ae,tip:be,rotating:Se},Te=t=>async(s,o,c={})=>{const l={method:t,...c};if(t!=="GET"&&o)l.body=JSON.stringify(o);else if(t==="GET"&&o){const m=[];for(const[x,v]of Object.entries(o))m.push(`${x}=${v}`);s+=`?${m.join("&")}`}const n=await fetch(`${s}`,l),d=await n.json();return n.ok?d:{error:d.message||"Request failed",code:n.status}},D=Te("GET"),Oe=async({options:t})=>{const s=await D("https://api.v3.ycymedu.com/api/zhiYuan/aigcquestionswords?",{},t);return s.code===200?{result:s.result}:{result:[],message:s.message}};function V(){const t=r.useRef(null),s=()=>(t.current||(t.current=new AbortController),t.current.signal),o=()=>{t.current&&(t.current.abort(),t.current=null)},c=()=>(o(),t.current=new AbortController,t.current.signal);return r.useEffect(()=>()=>{o()},[]),{getSignal:s,abortAll:o,recreate:c}}function $e({toRoom:t}){const[s,o]=r.useState(!1),[c,l]=r.useState([]),[n,d]=r.useState([]),{getSignal:m}=V(),x=()=>{const g=Array.from(n),h=[],f=Math.min(4,g.length);for(let j=0;j{const{result:g,message:h}=await Oe({options:{signal:m()}});h?console.log(h):d(g)};r.useEffect(()=>{l(x())},[n]),r.useEffect(()=>{v()},[]);const w=()=>{o(!0),l(x()),setTimeout(()=>{o(!1)},1e3)},N=async g=>{t(g)};return e.jsxs("div",{className:_.headerWrapper,children:[e.jsxs("div",{className:_.wrapper,children:[e.jsx("img",{className:_.img,src:xe,alt:"hello"}),e.jsx("div",{className:_.text,children:"Hey,我是您的六纬AI小助手"})]}),e.jsxs("div",{className:_["main-wrapper"],children:[e.jsxs("div",{className:_.main,onClick:w,children:[e.jsx("img",{className:_.thing,src:_e,alt:"whatsThing"}),e.jsxs("div",{className:_.circle,children:[e.jsx("img",{src:je,className:s?_.rotating:"",alt:"circle"}),e.jsx("div",{className:_.change,children:"换一批"})]})]}),c.map((g,h)=>e.jsxs("div",{className:_.tip,onClick:()=>N(g),children:[e.jsx("div",{children:g}),e.jsx("img",{src:ye,alt:"right-icon",className:_.rightIcon})]},h))]})]})}const Pe="_wrapper_e1j90_1",Me="_text_e1j90_75",We="_call_e1j90_87",$={wrapper:Pe,text:Me,call:We},De="/icons/call.png";function Le(t){const{disable:s,loading:o,className:c,...l}=t,{isConnecting:n}=r.useContext(R);return e.jsxs("div",{className:`${$.wrapper} ${c}`,...l,children:[e.jsx("img",{className:$.call,src:De,alt:"call"}),e.jsx("div",{className:$.text,children:s?"暂不可用":n?"连接中":"发起通话"})]})}const Ge="/icons/myInput.png",He="/icons/rightBlue.png",Be="_scoreWrapper_1g8jt_1",Ve="_innerWrapper_1g8jt_13",Qe="_detail_1g8jt_37",qe="_right_1g8jt_53",Ue="_imgIcon_1g8jt_65",ze="_rightBlue_1g8jt_75",E={scoreWrapper:Be,innerWrapper:Ve,detail:Qe,right:qe,imgIcon:Ue,rightBlue:ze};function Fe({toRoom:t}){const[s]=M(),o=s.get("provinceName")||"山东省",c=s.get("subjectGroup")||"物/化/史",l=s.get("expectedScore")||500,n=async()=>{t(`我的高考地点在${o},我选择的科目是${c},我的高考分数为${l}分。我适合哪些学校和专业`)};return e.jsx("div",{className:E.scoreWrapper,children:e.jsxs("div",{className:E.innerWrapper,children:[e.jsxs("div",{className:E.left,children:[e.jsx("img",{src:Ge,className:E.imgIcon,alt:"input-ico"}),e.jsxs("div",{className:E.detail,children:[e.jsx("div",{className:E.city,children:o}),e.jsx("div",{className:E.subject,children:c.split(",").join("/")}),e.jsxs("div",{className:E.score,children:[l,"分"]})]})]}),e.jsxs("div",{className:E.right,onClick:n,children:[e.jsx("span",{children:"智能分析"}),e.jsx("img",{src:He,alt:"right",className:E.rightBlue})]})]})})}const Je=async({options:t})=>{const s=await D("https://api.v3.ycymedu.com/api/sysOnlineUser/hasitexpired",{},t);return s.code===200?{result:s.result}:{result:[],message:s.message}},Ze=async({params:t,options:s})=>{const o=await D("https://api.v3.ycymedu.com/api/busScale/GetBusAIReportKeyWord",t,s);return o.code===200?{result:o.result}:{result:[],message:o.message}},Q=r.createContext({hasHandledReport:!1,setHasHandledReport:()=>{}}),Ke=({children:t})=>{const[s,o]=r.useState(!1);return e.jsx(Q.Provider,{value:{hasHandledReport:s,setHasHandledReport:o},children:t})};function Ye(){const{handleConnect:t}=r.useContext(R),{setHasHandledReport:s,hasHandledReport:o}=r.useContext(Q),[c]=M(),[l,n]=r.useState(!0),d=c.get("token")||"",m=c.get("reportId")||"",x=c.get("reportType")||"",{toast:v}=W(),{getSignal:w}=V(),N=async()=>{try{const{result:f,message:j}=await Je({options:{signal:w(),headers:{Authorization:`Bearer ${d}`}}});if(j)console.log(j);else{const y=f;n(!y.isExpired),!y.isExpired&&y.msg&&v({title:y.msg,description:"请重新登录"})}}catch(f){f.name!=="AbortError"&&console.error("获取用户令牌失败:",f)}},g=async()=>{try{const{result:f,message:j}=await Ze({params:{Type:x,Id:m},options:{signal:w(),headers:{Authorization:`Bearer ${d}`}}});j?console.log(j):(t(f),s(!0))}catch(f){f.name!=="AbortError"&&console.error("获取报告失败:",f)}};r.useEffect(()=>{N()},[d]),r.useEffect(()=>{m&&x&&!o&&g()},[m,x,o]);const h=f=>{l||t(f)};return e.jsxs("div",{className:"flex flex-col items-center h-full",children:[e.jsx($e,{toRoom:h}),e.jsx(Fe,{toRoom:h}),e.jsx(Le,{disable:l,onClick:()=>h()})]})}function Xe(){const{isConnected:t}=r.useContext(R),s=async()=>{await P.checkDevicePermission(!1)};return r.useEffect(()=>{s()},[]),e.jsx(Ke,{children:t?e.jsx(fe,{}):e.jsx(Ye,{})})}function st(){return e.jsx(oe,{children:e.jsx(Xe,{})})}export{st as default}; diff --git a/build/assets/index-ChXXIJVe.css b/build/assets/index-ChXXIJVe.css deleted file mode 100644 index 41234e5..0000000 --- a/build/assets/index-ChXXIJVe.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 222.2 47.4% 11.2%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 222.2 84% 4.9%;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%;--radius: .5rem }*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.right-1{right:.25rem}.top-0{top:0}.top-1{top:.25rem}.z-\[100\]{z-index:100}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-4{height:1rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-screen{max-height:100vh}.w-10{width:2.5rem}.w-4{width:1rem}.w-full{width:100%}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-\[10px\]{gap:10px}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.border{border-width:1px}.border-destructive{border-color:hsl(var(--destructive))}.border-input{border-color:hsl(var(--input))}.bg-\[\#F4F6FA\]{--tw-bg-opacity: 1;background-color:rgb(244 246 250 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pb-\[20px\]{padding-bottom:20px}.pr-6{padding-right:1.5rem}.pt-\[10px\]{padding-top:10px}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-sm{font-size:.875rem;line-height:1.25rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:underline:hover{text-decoration-line:underline}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}@media (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:flex-col{flex-direction:column}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media (min-width: 768px){.md\:max-w-\[420px\]{max-width:420px}}.\[\&\+div\]\:text-xs+div{font-size:.75rem;line-height:1rem} diff --git a/build/assets/index-j0VtgfAk.js b/build/assets/index-DOYUXUr3.js similarity index 69% rename from build/assets/index-j0VtgfAk.js rename to build/assets/index-DOYUXUr3.js index 8da5c7e..c489286 100644 --- a/build/assets/index-j0VtgfAk.js +++ b/build/assets/index-DOYUXUr3.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/App-Dh3vQfIK.js","assets/.pnpm-BDdfG1pO.js","assets/MainLayout-BWiadrJR.js"])))=>i.map(i=>d[i]); -var v=Object.defineProperty;var x=(s,t,n)=>t in s?v(s,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[t]=n;var m=(s,t,n)=>x(s,typeof t!="symbol"?t+"":t,n);import{r as d,c as P,j as a,a as _,R as L}from"./.pnpm-BDdfG1pO.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))f(e);new MutationObserver(e=>{for(const o of e)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&f(r)}).observe(document,{childList:!0,subtree:!0});function n(e){const o={};return e.integrity&&(o.integrity=e.integrity),e.referrerPolicy&&(o.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?o.credentials="include":e.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function f(e){if(e.ep)return;e.ep=!0;const o=n(e);fetch(e.href,o)}})();const j="modulepreload",O=function(s){return"/"+s},h={},p=function(t,n,f){let e=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),i=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));e=Promise.allSettled(n.map(c=>{if(c=O(c),c in h)return;h[c]=!0;const u=c.endsWith(".css"),E=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${E}`))return;const l=document.createElement("link");if(l.rel=u?"stylesheet":j,u||(l.as="script"),l.crossOrigin="",l.href=c,i&&l.setAttribute("nonce",i),document.head.appendChild(l),u)return new Promise((y,g)=>{l.addEventListener("load",y),l.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(r){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=r,window.dispatchEvent(i),!i.defaultPrevented)throw r}return e.then(r=>{for(const i of r||[])i.status==="rejected"&&o(i.reason);return t().catch(o)})},R=d.lazy(()=>p(()=>import("./App-Dh3vQfIK.js"),__vite__mapDeps([0,1]))),S=d.lazy(()=>p(()=>import("./MainLayout-BWiadrJR.js"),__vite__mapDeps([2,1])));class w extends d.Component{constructor(){super(...arguments);m(this,"state",{hasError:!1})}static getDerivedStateFromError(n){return{hasError:!0}}render(){return this.state.hasError?a.jsx("h1",{children:"出错了,请稍后再试。"}):this.props.children}}const b=P([{path:"/",element:a.jsx(S,{}),errorElement:a.jsx(w,{children:a.jsx("div",{className:"flex-auto flex flex-col p-6",children:"出错了,请稍后再试。"})}),children:[{path:"/",element:a.jsx(R,{})}]}]);_(document.getElementById("root")).render(a.jsx(d.StrictMode,{children:a.jsx(L,{router:b})}));export{p as _}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/App-BkgWMpGx.js","assets/.pnpm-CAIuqsZ0.js","assets/MainLayout-BMCWJnk-.js","assets/use-toast-DO4tfD4I.js"])))=>i.map(i=>d[i]); +var v=Object.defineProperty;var x=(s,t,n)=>t in s?v(s,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):s[t]=n;var m=(s,t,n)=>x(s,typeof t!="symbol"?t+"":t,n);import{r as d,c as P,j as a,a as _,R as L}from"./.pnpm-CAIuqsZ0.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))f(e);new MutationObserver(e=>{for(const o of e)if(o.type==="childList")for(const r of o.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&f(r)}).observe(document,{childList:!0,subtree:!0});function n(e){const o={};return e.integrity&&(o.integrity=e.integrity),e.referrerPolicy&&(o.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?o.credentials="include":e.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function f(e){if(e.ep)return;e.ep=!0;const o=n(e);fetch(e.href,o)}})();const j="modulepreload",O=function(s){return"/"+s},h={},p=function(t,n,f){let e=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),i=(r==null?void 0:r.nonce)||(r==null?void 0:r.getAttribute("nonce"));e=Promise.allSettled(n.map(c=>{if(c=O(c),c in h)return;h[c]=!0;const u=c.endsWith(".css"),E=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${E}`))return;const l=document.createElement("link");if(l.rel=u?"stylesheet":j,u||(l.as="script"),l.crossOrigin="",l.href=c,i&&l.setAttribute("nonce",i),document.head.appendChild(l),u)return new Promise((y,g)=>{l.addEventListener("load",y),l.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(r){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=r,window.dispatchEvent(i),!i.defaultPrevented)throw r}return e.then(r=>{for(const i of r||[])i.status==="rejected"&&o(i.reason);return t().catch(o)})},R=d.lazy(()=>p(()=>import("./App-BkgWMpGx.js"),__vite__mapDeps([0,1]))),S=d.lazy(()=>p(()=>import("./MainLayout-BMCWJnk-.js"),__vite__mapDeps([2,1,3])));class w extends d.Component{constructor(){super(...arguments);m(this,"state",{hasError:!1})}static getDerivedStateFromError(n){return{hasError:!0}}render(){return this.state.hasError?a.jsx("h1",{children:"出错了,请稍后再试。"}):this.props.children}}const b=P([{path:"/",element:a.jsx(S,{}),errorElement:a.jsx(w,{children:a.jsx("div",{className:"flex-auto flex flex-col p-6",children:"出错了,请稍后再试。"})}),children:[{path:"/",element:a.jsx(R,{})}]}]);_(document.getElementById("root")).render(a.jsx(d.StrictMode,{children:a.jsx(L,{router:b})}));export{p as _}; diff --git a/build/assets/index-DPqYJA2j.css b/build/assets/index-DPqYJA2j.css new file mode 100644 index 0000000..905f1c5 --- /dev/null +++ b/build/assets/index-DPqYJA2j.css @@ -0,0 +1 @@ +*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 222.2 84% 4.9%;--card: 0 0% 100%;--card-foreground: 222.2 84% 4.9%;--popover: 0 0% 100%;--popover-foreground: 222.2 84% 4.9%;--primary: 222.2 47.4% 11.2%;--primary-foreground: 210 40% 98%;--secondary: 210 40% 96.1%;--secondary-foreground: 222.2 47.4% 11.2%;--muted: 210 40% 96.1%;--muted-foreground: 215.4 16.3% 46.9%;--accent: 210 40% 96.1%;--accent-foreground: 222.2 47.4% 11.2%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 210 40% 98%;--border: 214.3 31.8% 91.4%;--input: 214.3 31.8% 91.4%;--ring: 222.2 84% 4.9%;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%;--radius: .5rem }*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-auto{pointer-events:auto}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-\[22px\]{bottom:22px}.left-\[50\%\]{left:50%}.right-1{right:.25rem}.top-0{top:0}.top-1{top:.25rem}.z-\[100\]{z-index:100}.z-\[10\]{z-index:10}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-4{height:1rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[120px\]{height:120px}.h-\[49px\]{height:49px}.h-\[97px\]{height:97px}.h-full{height:100%}.h-screen{height:100vh}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-\[120px\]{min-height:120px}.w-10{width:2.5rem}.w-4{width:1rem}.w-\[222px\]{width:222px}.w-full{width:100%}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-\[10px\]{gap:10px}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.border{border-width:1px}.border-destructive{border-color:hsl(var(--destructive))}.border-input{border-color:hsl(var(--input))}.bg-\[\#F4F6FA\]{--tw-bg-opacity: 1;background-color:rgb(244 246 250 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pb-\[20px\]{padding-bottom:20px}.pr-6{padding-right:1.5rem}.pt-\[10px\]{padding-top:10px}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-\[14px\]{font-size:14px}.text-sm{font-size:.875rem;line-height:1.25rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-90{opacity:.9}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:underline:hover{text-decoration-line:underline}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}@media (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:flex-col{flex-direction:column}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media (min-width: 768px){.md\:max-w-\[420px\]{max-width:420px}}.\[\&\+div\]\:text-xs+div{font-size:.75rem;line-height:1rem} diff --git a/build/assets/index-DQMJjaAj.js b/build/assets/index-DQMJjaAj.js deleted file mode 100644 index afc03ec..0000000 --- a/build/assets/index-DQMJjaAj.js +++ /dev/null @@ -1 +0,0 @@ -import{r,e as T,d as N,f as b,j as e,g as re,h as $,u as ce,i as ie,H as ae,L as le,k as G}from"./.pnpm-BDdfG1pO.js";const ue=1,de=1e6;let W=0;function pe(){return W=(W+1)%Number.MAX_SAFE_INTEGER,W.toString()}const L=new Map,U=t=>{if(L.has(t))return;const s=setTimeout(()=>{L.delete(t),v({type:"REMOVE_TOAST",toastId:t})},de);L.set(t,s)},ge=(t,s)=>{switch(s.type){case"ADD_TOAST":return{...t,toasts:[s.toast,...t.toasts].slice(0,ue)};case"UPDATE_TOAST":return{...t,toasts:t.toasts.map(n=>n.id===s.toast.id?{...n,...s.toast}:n)};case"DISMISS_TOAST":{const{toastId:n}=s;return n?U(n):t.toasts.forEach(c=>{U(c.id)}),{...t,toasts:t.toasts.map(c=>c.id===n||n===void 0?{...c,open:!1}:c)}}case"REMOVE_TOAST":return s.toastId===void 0?{...t,toasts:[]}:{...t,toasts:t.toasts.filter(n=>n.id!==s.toastId)}}},O=[];let M={toasts:[]};function v(t){M=ge(M,t),O.forEach(s=>{s(M)})}function he({...t}){const s=pe(),n=i=>v({type:"UPDATE_TOAST",toast:{...i,id:s}}),c=()=>v({type:"DISMISS_TOAST",toastId:s});return v({type:"ADD_TOAST",toast:{...t,id:s,open:!0,onOpenChange:i=>{i||c()}}}),{id:s,dismiss:c,update:n}}function H(){const[t,s]=r.useState(M);return r.useEffect(()=>(O.push(s),()=>{const n=O.indexOf(s);n>-1&&O.splice(n,1)}),[t]),{...t,toast:he,dismiss:n=>v({type:"DISMISS_TOAST",toastId:n})}}const E=r.createContext({client:null,isConnecting:!1,isConnected:!1,audioEnabled:!0,isSupportVideo:!1,messageList:[],isAiTalking:!1,roomInfo:null,initClient:()=>{},handleConnect:()=>{},handleInterrupt:()=>{},handleDisconnect:()=>{},toggleMicrophone:()=>{},sendUserMessageWithText:()=>{},setInitMessage:()=>{}}),me=()=>{const t=r.useContext(E);if(t===void 0)throw new Error("useRealtimeClient必须在RealtimeClientProvider内部使用");return{...t}},_e=({children:t})=>{const s="pat_NhhZGW7sxkuyP4mJrPrVyZx20b3m6lymg0y2Ln9EyM0CV9q2f9t3rlGbtzppLQua",n="7456409430717480998",c="7426720361733144585",i="1024",o=r.useRef(null),[g,d]=r.useState([]),[h,x]=r.useState(!1),[R,C]=r.useState(!1),[u,m]=r.useState(!1),[I]=r.useState(!1),[w,S]=r.useState(!1),[k,z]=r.useState(""),[F,V]=r.useState(!1),[J,Y]=r.useState(null),{toast:Z}=H(),Q=async()=>{if((await ce.checkDevicePermission(!1)).audio){const a=new ie({accessToken:s,botId:n,voiceId:c,connectorId:i,allowPersonalAccessTokenInBrowser:!0});o.current=a,oe(a),V(!0)}else throw Z({title:"连接错误",description:"需要麦克风访问权限"}),new Error("需要麦克风访问权限")};r.useEffect(()=>{o.current&&(ne(o.current),k&&se(o.current))},[k,F]);const X=async()=>{var l;try{o.current||await Q(),await((l=o.current)==null?void 0:l.connect())}catch(a){if(console.error(a),a instanceof re)switch(a.code){case $.CREATE_ROOM_ERROR:console.error(`创建房间失败: ${a.message}`);break;case $.CONNECTION_ERROR:console.error(`加入房间失败: ${a.message}`);break;case $.DEVICE_ACCESS_ERROR:console.error(`获取设备失败: ${a.message}`);break;default:console.error(`连接错误: ${a.message}`)}else console.error("连接错误:"+a)}},K=()=>{var l;try{(l=o.current)==null||l.interrupt()}catch(a){console.error("打断失败:"+a)}},ee=()=>{var l,a;try{S(!1),V(!1),d([]),(l=o.current)==null||l.disconnect(),(a=o.current)==null||a.clearEventHandlers(),o.current=null,C(!1)}catch(y){console.error("断开失败:"+y)}},te=async()=>{var l;try{await((l=o.current)==null?void 0:l.setAudioEnable(!u)),m(!u)}catch(a){console.error("切换麦克风状态失败:"+a)}},se=l=>{l.on(T.ALL_SERVER,(a,y)=>{a==="server.session.created"&&B(k)})},ne=l=>{let a;l.on(T.ALL,(y,p)=>{if(p.event_type!==N.CONVERSATION_MESSAGE_DELTA&&p.event_type!==N.CONVERSATION_MESSAGE_COMPLETED&&p.event_type!=="conversation.created")return;const D=p.data.content;d(j=>(a==null?void 0:a.event_type)===N.CONVERSATION_MESSAGE_DELTA&&(p.data.type==="answer"||p.data.type==="question")?[...j.slice(0,-1),{content:j[j.length-1].content+D,role:j[j.length-1].role}]:k===""&&p.event_type==="conversation.created"?[...j,{content:p.data.prologue,role:b.Assistant}]:D!==""&&p.event_type===N.CONVERSATION_MESSAGE_DELTA||p.event_type===N.CONVERSATION_MESSAGE_COMPLETED&&(p.data.type==="answer"||p.data.type==="question")&&p.data.role!==b.Assistant?[...j,{content:D,role:p.data.role}]:j),a=p})},oe=r.useCallback(l=>{l.on(T.AUDIO_AGENT_SPEECH_STARTED,()=>{S(!0),m(!1)}),l.on(T.AUDIO_AGENT_SPEECH_STOPPED,()=>{S(!1),m(!0)}),l.on(T.CONNECTING,()=>{x(!0),C(!1)}),l.on(T.CONNECTED,(a,y)=>{Y(y),x(!1),C(!0)})},[o.current,k]),B=async l=>{var a;try{await((a=o.current)==null?void 0:a.sendMessage({id:"",event_type:"conversation.message.create",data:{role:"user",content_type:"text",content:l}}))}catch(y){console.error("发送消息失败:"+y)}};return e.jsx(E.Provider,{value:{client:o.current,isConnecting:h,isConnected:R,audioEnabled:u,isSupportVideo:I,messageList:g,isAiTalking:w,roomInfo:J,initClient:Q,handleConnect:X,handleInterrupt:K,handleDisconnect:ee,toggleMicrophone:te,sendUserMessageWithText:B,setInitMessage:z},children:t})};function fe(){const{messageList:t}=r.useContext(E),s=r.useRef(null),n=()=>{var c;(c=s.current)==null||c.scrollIntoView({behavior:"smooth"})};return r.useEffect(()=>{n()},[t]),e.jsx("div",{className:"flex-1 flex flex-col h-full",children:e.jsxs("div",{className:"flex-1 overflow-y-auto p-4 space-y-4",children:[t.map((c,i)=>e.jsx("div",{className:`flex ${c.role===b.Assistant?"justify-start":"justify-end"}`,children:e.jsx("div",{className:`max-w-3/4 p-3 rounded-lg ${c.role===b.Assistant?"bg-white text-black rounded-tl-none":"bg-blue-500 text-white rounded-tr-none"}`,children:c.content})},i)),e.jsx("div",{ref:s})]})})}const xe="_talkWrapper_5jmgu_23",Ee="_listenerDot_5jmgu_53",je="_isTalking_5jmgu_93",ye="_microphoneWrapper_5jmgu_157",A={talkWrapper:xe,listenerDot:Ee,isTalking:je,microphoneWrapper:ye},Ie="/icons/lockmicrophone.png",Te="/icons/microphone.png",Ce="/icons/handoff.png",Se=t=>{const s=r.useRef(null),{handleDisconnect:n}=me(),{toast:c}=H();return r.useEffect(()=>{if(!t.access_token||!t.roomId)return;const i=new ae().withServerTimeout(3e4).withAutomaticReconnect().withUrl(`https://api.v3.ycymedu.com/hubs/weminpro?access_token=${t.access_token}&roomId=${t.roomId}`).configureLogging(le.Information).build();return s.current=i,i.on("ForceOffline",function(o){c({variant:"destructive",title:"下线提醒",description:o}),n()}),i.on("SendWarn",function(o){console.warn(`下线提醒:${o}"`),c({variant:"destructive",title:"下线提醒",description:o})}),i.start().then(()=>{console.log("SignalR连接已建立"),setInterval(()=>{i.invoke("Ping")},5e3)}).catch(o=>{console.error("SignalR连接失败:",o)}),()=>{s.current&&s.current.stop().then(()=>{console.log("SignalR连接已关闭")}).catch(o=>{console.error("关闭SignalR连接失败:",o)})}},[t.access_token,t.roomId]),s.current};function ke({className:t,...s}){const{handleDisconnect:n,toggleMicrophone:c,audioEnabled:i,isAiTalking:o,handleInterrupt:g,roomInfo:d}=r.useContext(E),[h]=G();return Se({access_token:h.get("token")||"",roomId:(d==null?void 0:d.roomId)||""}),e.jsxs("div",{className:`${t} flex items-center justify-center bg-white pb-[20px] pt-[10px] gap-[10px]`,...s,children:[e.jsxs("div",{className:`${A.microphoneWrapper}`,onClick:n,children:[e.jsx("img",{src:Ce,alt:"handoff"}),e.jsx("div",{children:"挂断"})]}),e.jsxs("div",{className:`${A.microphoneWrapper}`,onClick:c,children:[e.jsx("img",{src:i?Te:Ie,alt:"lock"}),e.jsx("div",{children:i?"关麦":"开麦"})]}),e.jsxs("div",{className:`${A.talkWrapper}`,onClick:g,children:[e.jsxs("div",{className:`${o?A.isTalking:""} ${A.listenerDot}`,children:[e.jsx("span",{style:{"--d":"2"}}),e.jsx("span",{style:{"--d":"1"}}),e.jsx("span",{style:{"--d":"0"}}),e.jsx("span",{style:{"--d":"1"}}),e.jsx("span",{style:{"--d":"2"}})]}),e.jsx("div",{children:o?"点击打断":"正在听"})]})]})}function Ne(){return e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsx(fe,{}),e.jsx(ke,{})]})}const Ae="/icons/hello.gif",ve="/icons/whatsThing.png",Re="/icons/circle.png",we="/icons/right.png",Oe="_headerWrapper_lrk2k_1",Me="_wrapper_lrk2k_15",be="_img_lrk2k_37",De="_text_lrk2k_81",$e="_main_lrk2k_101",We="_thing_lrk2k_135",Le="_circle_lrk2k_153",Pe="_rightIcon_lrk2k_179",Ge="_change_lrk2k_189",Ve="_tip_lrk2k_197",Qe="_rotating_lrk2k_223",_={headerWrapper:Oe,wrapper:Me,img:be,text:De,"main-wrapper":"_main-wrapper_lrk2k_101",main:$e,thing:We,circle:Le,rightIcon:Pe,change:Ge,tip:Ve,rotating:Qe},Be=t=>async(s,n,c={})=>{const i={method:t,...c};if(t!=="GET"&&n)i.body=JSON.stringify(n);else if(t==="GET"&&n){const d=[];for(const[h,x]of Object.entries(n))d.push(`${h}=${x}`);s+=`?${d.join("&")}`}const o=await fetch(`${s}`,i),g=await o.json();return o.ok?g:{error:g.message||"Request failed",code:o.status}},q=Be("GET"),Ue=async({options:t})=>{const s=await q("https://api.v3.ycymedu.com/api/zhiYuan/aigcquestionswords?",{},t);return s.code===200?{result:s.result}:{result:[],message:s.message}};function He({toRoom:t}){const[s,n]=r.useState(!1),[c,i]=r.useState([]),[o,g]=r.useState([]),{setInitMessage:d}=r.useContext(E),h=()=>{const u=Array.from(o),m=[],I=Math.min(4,u.length);for(let w=0;w{const{result:m,message:I}=await Ue({options:{signal:u}});I?console.log(I):g(m)};r.useEffect(()=>{i(h())},[o]),r.useEffect(()=>{const u=new AbortController,{signal:m}=u;x({signal:m})},[]);const R=()=>{n(!0),i(h()),setTimeout(()=>{n(!1)},1e3)},C=async u=>{d(u),await t()};return e.jsxs("div",{className:_.headerWrapper,children:[e.jsxs("div",{className:_.wrapper,children:[e.jsx("img",{className:_.img,src:Ae,alt:"hello"}),e.jsx("div",{className:_.text,children:"Hey,我是您的六纬AI小助手"})]}),e.jsxs("div",{className:_["main-wrapper"],children:[e.jsxs("div",{className:_.main,onClick:R,children:[e.jsx("img",{className:_.thing,src:ve,alt:"whatsThing"}),e.jsxs("div",{className:_.circle,children:[e.jsx("img",{src:Re,className:s?_.rotating:"",alt:"circle"}),e.jsx("div",{className:_.change,children:"换一批"})]})]}),c.map((u,m)=>e.jsxs("div",{className:_.tip,onClick:()=>C(u),children:[e.jsx("div",{children:u}),e.jsx("img",{src:we,alt:"right-icon",className:_.rightIcon})]},m))]})]})}const qe="_wrapper_e1j90_1",ze="_text_e1j90_75",Fe="_call_e1j90_87",P={wrapper:qe,text:ze,call:Fe},Je="/icons/call.png";function Ye(t){const{disable:s,loading:n,className:c,...i}=t,{isConnecting:o}=r.useContext(E);return e.jsxs("div",{className:`${P.wrapper} ${c}`,...i,children:[e.jsx("img",{className:P.call,src:Je,alt:"call"}),e.jsx("div",{className:P.text,children:s?"暂不可用":o?"连接中":"发起通话"})]})}const Ze="/icons/myInput.png",Xe="/icons/rightBlue.png",Ke="_scoreWrapper_1g8jt_1",et="_innerWrapper_1g8jt_13",tt="_detail_1g8jt_37",st="_right_1g8jt_53",nt="_imgIcon_1g8jt_65",ot="_rightBlue_1g8jt_75",f={scoreWrapper:Ke,innerWrapper:et,detail:tt,right:st,imgIcon:nt,rightBlue:ot};function rt({toRoom:t}){const[s]=G(),n=s.get("provinceName")||"山东省",c=s.get("subjectGroup")||"物/化/史",i=s.get("expectedScore")||500,{setInitMessage:o}=r.useContext(E),g=async()=>{t(),o(`我的高考地点在${n},我选择的科目是${c},我的高考分数为${i}分。我适合哪些学校和专业`)};return e.jsx("div",{className:f.scoreWrapper,children:e.jsxs("div",{className:f.innerWrapper,children:[e.jsxs("div",{className:f.left,children:[e.jsx("img",{src:Ze,className:f.imgIcon,alt:"input-ico"}),e.jsxs("div",{className:f.detail,children:[e.jsx("div",{className:f.city,children:n}),e.jsx("div",{className:f.subject,children:c.split(",").join("/")}),e.jsxs("div",{className:f.score,children:[i,"分"]})]})]}),e.jsxs("div",{className:f.right,onClick:g,children:[e.jsx("span",{children:"智能分析"}),e.jsx("img",{src:Xe,alt:"right",className:f.rightBlue})]})]})})}const ct=async({options:t})=>{const s=await q("https://api.v3.ycymedu.com/api/sysOnlineUser/hasitexpired",{},t);return s.code===200?{result:s.result}:{result:[],message:s.message}};function it(){const{handleConnect:t}=r.useContext(E),[s]=G(),[n,c]=r.useState(!0),i=s.get("token")||"",o=async({signal:d})=>{const{result:h,message:x}=await ct({options:{signal:d,headers:{Authorization:`Bearer ${i}`}}});x?console.log(x):c(!h.isExpired)};r.useEffect(()=>{const d=new AbortController,{signal:h}=d;o({signal:h})},[i]);const g=()=>{t()};return e.jsxs("div",{className:"flex flex-col items-center h-full",children:[e.jsx(He,{toRoom:g}),e.jsx(rt,{toRoom:g}),e.jsx(Ye,{disable:n,onClick:g})]})}function at(){const{isConnected:t}=r.useContext(E);return t?e.jsx(Ne,{}):e.jsx(it,{})}function ut(){return e.jsx(_e,{children:e.jsx(at,{})})}export{ut as default}; diff --git a/build/assets/use-toast-DO4tfD4I.js b/build/assets/use-toast-DO4tfD4I.js new file mode 100644 index 0000000..f6d05d3 --- /dev/null +++ b/build/assets/use-toast-DO4tfD4I.js @@ -0,0 +1 @@ +import{r as c}from"./.pnpm-CAIuqsZ0.js";const d=1,p=1e6;let i=0;function A(){return i=(i+1)%Number.MAX_SAFE_INTEGER,i.toString()}const a=new Map,S=t=>{if(a.has(t))return;const s=setTimeout(()=>{a.delete(t),n({type:"REMOVE_TOAST",toastId:t})},p);a.set(t,s)},f=(t,s)=>{switch(s.type){case"ADD_TOAST":return{...t,toasts:[s.toast,...t.toasts].slice(0,d)};case"UPDATE_TOAST":return{...t,toasts:t.toasts.map(e=>e.id===s.toast.id?{...e,...s.toast}:e)};case"DISMISS_TOAST":{const{toastId:e}=s;return e?S(e):t.toasts.forEach(o=>{S(o.id)}),{...t,toasts:t.toasts.map(o=>o.id===e||e===void 0?{...o,open:!1}:o)}}case"REMOVE_TOAST":return s.toastId===void 0?{...t,toasts:[]}:{...t,toasts:t.toasts.filter(e=>e.id!==s.toastId)}}},r=[];let T={toasts:[]};function n(t){T=f(T,t),r.forEach(s=>{s(T)})}function E({...t}){const s=A(),e=u=>n({type:"UPDATE_TOAST",toast:{...u,id:s}}),o=()=>n({type:"DISMISS_TOAST",toastId:s});return n({type:"ADD_TOAST",toast:{...t,id:s,open:!0,onOpenChange:u=>{u||o()}}}),{id:s,dismiss:o,update:e}}function _(){const[t,s]=c.useState(T);return c.useEffect(()=>(r.push(s),()=>{const e=r.indexOf(s);e>-1&&r.splice(e,1)}),[t]),{...t,toast:E,dismiss:e=>n({type:"DISMISS_TOAST",toastId:e})}}export{_ as u}; diff --git a/build/icons/conversation-bg.png b/build/icons/conversation-bg.png new file mode 100644 index 0000000..60c7e1a Binary files /dev/null and b/build/icons/conversation-bg.png differ diff --git a/build/index.html b/build/index.html index 07197b5..ee35c4b 100644 --- a/build/index.html +++ b/build/index.html @@ -18,14 +18,14 @@ - - - - + + + +
diff --git a/package.json b/package.json index 9d8f58a..a1f3d3f 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,11 @@ "lucide-react": "^0.437.0", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-markdown": "^10.1.0", "react-router-dom": "^6.26.1", "react-sortablejs": "^6.1.4", + "react-syntax-highlighter": "^15.6.1", + "remark-gfm": "^4.0.1", "sortablejs": "^1.15.3", "tailwind-merge": "^2.5.2", "tailwindcss-animate": "^1.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e8609ca..e9d4589 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,12 +47,21 @@ importers: react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-markdown: + specifier: ^10.1.0 + version: 10.1.0(@types/react@18.3.20)(react@18.3.1) react-router-dom: specifier: ^6.26.1 version: 6.30.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-sortablejs: specifier: ^6.1.4 version: 6.1.4(@types/sortablejs@1.15.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sortablejs@1.15.6) + react-syntax-highlighter: + specifier: ^15.6.1 + version: 15.6.1(react@18.3.1) + remark-gfm: + specifier: ^4.0.1 + version: 4.0.1 sortablejs: specifier: ^1.15.3 version: 1.15.6 @@ -936,12 +945,30 @@ packages: '@swc/types@0.1.21': resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/estree-jsx@1.0.5': + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/hast@2.3.10': + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@22.14.1': resolution: {integrity: sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==} @@ -959,6 +986,12 @@ packages: '@types/sortablejs@1.15.8': resolution: {integrity: sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@typescript-eslint/eslint-plugin@8.30.1': resolution: {integrity: sha512-v+VWphxMjn+1t48/jO4t950D6KR8JaJuNXzi33Ve6P8sEmPr5k6CEXjdGwT6+LodVnEa91EQCtwjWNUCPweo+Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1006,6 +1039,9 @@ packages: resolution: {integrity: sha512-aEhgas7aJ6vZnNFC7K4/vMGDGyOiqWcYZPpIWrTKuTAlsvDNKy2GFDqh9smL+iq069ZvR0YzEeq0B8NJlLzjFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vitejs/plugin-react-swc@3.9.0': resolution: {integrity: sha512-jYFUSXhwMCYsh/aQTgSGLIN3Foz5wMbH9ahb0Zva//UzwZYbMiZd7oT3AU9jHT9DLswYDswsRwPU9jVF3yA48Q==} peerDependencies: @@ -1091,6 +1127,9 @@ packages: axios@1.8.4: resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1134,10 +1173,34 @@ packages: caniuse-lite@1.0.30001714: resolution: {integrity: sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1169,6 +1232,12 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -1200,6 +1269,9 @@ packages: supports-color: optional: true + decode-named-character-reference@1.1.0: + resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1207,9 +1279,16 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -1277,6 +1356,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + eslint-plugin-react-hooks@5.2.0: resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} @@ -1326,6 +1409,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -1341,6 +1427,9 @@ packages: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1357,6 +1446,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -1400,6 +1492,10 @@ packages: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -1470,6 +1566,27 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + + hast-util-to-jsx-runtime@2.3.6: + resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + + highlightjs-vue@1.0.0: + resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} + + html-url-attributes@3.0.1: + resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1482,6 +1599,21 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} + + is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -1490,6 +1622,12 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -1502,10 +1640,20 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1584,10 +1732,16 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1596,14 +1750,146 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdast-util-find-and-replace@3.0.2: + resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + + mdast-util-gfm-footnote@2.1.0: + resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + + mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + + mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + + mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + + mdast-util-gfm@3.1.0: + resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + + mdast-util-mdx-jsx@3.2.0: + resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + + mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + + mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + + mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-core-commonmark@2.0.3: + resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + + micromark-extension-gfm-table@2.1.1: + resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + + micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + + micromark-factory-destination@2.0.1: + resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + + micromark-factory-label@2.0.1: + resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + + micromark-factory-space@2.0.1: + resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + + micromark-factory-title@2.0.1: + resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + + micromark-factory-whitespace@2.0.1: + resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-chunked@2.0.1: + resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + + micromark-util-classify-character@2.0.1: + resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + + micromark-util-combine-extensions@2.0.1: + resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + + micromark-util-decode-string@2.0.1: + resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-html-tag-name@2.0.1: + resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + + micromark-util-normalize-identifier@2.0.1: + resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + + micromark-util-resolve-all@2.0.1: + resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-subtokenize@2.1.0: + resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + + micromark@4.0.2: + resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -1695,6 +1981,12 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + + parse-entities@4.0.2: + resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1770,6 +2062,20 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + + property-information@7.0.0: + resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -1791,6 +2097,12 @@ packages: peerDependencies: react: ^18.3.1 + react-markdown@10.1.0: + resolution: {integrity: sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==} + peerDependencies: + '@types/react': '>=18' + react: '>=18' + react-remove-scroll-bar@2.3.8: resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} engines: {node: '>=10'} @@ -1852,6 +2164,11 @@ packages: '@types/react': optional: true + react-syntax-highlighter@15.6.1: + resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==} + peerDependencies: + react: '>= 0.14.0' + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} @@ -1866,9 +2183,24 @@ packages: reconnecting-websocket@4.4.0: resolution: {integrity: sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==} + refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + remark-gfm@4.0.1: + resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} + + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + + remark-rehype@11.1.2: + resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} + + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -1936,6 +2268,12 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1944,6 +2282,9 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1956,6 +2297,12 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + style-to-js@1.1.16: + resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + + style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -2008,6 +2355,12 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -2043,6 +2396,24 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -2097,6 +2468,12 @@ packages: react: ^16.8 || ^17.0 || ^18.0 react-dom: ^16.8 || ^17.0 || ^18.0 + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite@5.4.18: resolution: {integrity: sha512-1oDcnEp3lVyHCuQ2YFelM4Alm2o91xNoMncRm1U7S+JdYfYOvbiGZ3/CxGttrOu2M/KcGz7cRC2DoNUA6urmMA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -2183,6 +2560,10 @@ packages: utf-8-validate: optional: true + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + yaml@2.7.1: resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} engines: {node: '>= 14'} @@ -2207,6 +2588,9 @@ packages: react: optional: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: '@agora-js/media@4.23.2': @@ -2901,10 +3285,32 @@ snapshots: dependencies: '@swc/counter': 0.1.3 + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/estree-jsx@1.0.5': + dependencies: + '@types/estree': 1.0.7 + '@types/estree@1.0.7': {} + '@types/hast@2.3.10': + dependencies: + '@types/unist': 2.0.11 + + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/ms@2.1.0': {} + '@types/node@22.14.1': dependencies: undici-types: 6.21.0 @@ -2922,6 +3328,10 @@ snapshots: '@types/sortablejs@1.15.8': {} + '@types/unist@2.0.11': {} + + '@types/unist@3.0.3': {} + '@typescript-eslint/eslint-plugin@8.30.1(@typescript-eslint/parser@8.30.1(eslint@9.24.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.24.0(jiti@1.21.7))(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -2999,6 +3409,8 @@ snapshots: '@typescript-eslint/types': 8.30.1 eslint-visitor-keys: 4.2.0 + '@ungap/structured-clone@1.3.0': {} + '@vitejs/plugin-react-swc@3.9.0(vite@5.4.18(@types/node@22.14.1)(terser@5.39.0))': dependencies: '@swc/core': 1.11.21 @@ -3100,6 +3512,8 @@ snapshots: transitivePeerDependencies: - debug + bail@2.0.2: {} + balanced-match@1.0.2: {} binary-extensions@2.3.0: {} @@ -3140,11 +3554,27 @@ snapshots: caniuse-lite@1.0.30001714: {} + ccount@2.0.1: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + character-entities-html4@2.1.0: {} + + character-entities-legacy@1.1.4: {} + + character-entities-legacy@3.0.0: {} + + character-entities@1.2.4: {} + + character-entities@2.0.2: {} + + character-reference-invalid@1.1.4: {} + + character-reference-invalid@2.0.1: {} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -3185,6 +3615,10 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@1.0.8: {} + + comma-separated-tokens@2.0.3: {} + commander@2.20.3: optional: true @@ -3206,12 +3640,22 @@ snapshots: dependencies: ms: 2.1.3 + decode-named-character-reference@1.1.0: + dependencies: + character-entities: 2.0.2 + deep-is@0.1.4: {} delayed-stream@1.0.0: {} + dequal@2.0.3: {} + detect-node-es@1.1.0: {} + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + didyoumean@1.2.2: {} dlv@1.1.3: {} @@ -3291,6 +3735,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-plugin-react-hooks@5.2.0(eslint@9.24.0(jiti@1.21.7)): dependencies: eslint: 9.24.0(jiti@1.21.7) @@ -3366,6 +3812,8 @@ snapshots: estraverse@5.3.0: {} + estree-util-is-identifier-name@3.0.0: {} + esutils@2.0.3: {} event-target-shim@5.0.1: {} @@ -3374,6 +3822,8 @@ snapshots: eventsource@2.0.2: {} + extend@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -3392,6 +3842,10 @@ snapshots: dependencies: reusify: 1.1.0 + fault@1.0.4: + dependencies: + format: 0.2.2 + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 @@ -3436,6 +3890,8 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + format@0.2.2: {} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -3504,6 +3960,46 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-parse-selector@2.2.5: {} + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + '@types/estree': 1.0.7 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.0.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.16 + unist-util-position: 5.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hastscript@6.0.0: + dependencies: + '@types/hast': 2.3.10 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + + highlight.js@10.7.3: {} + + highlightjs-vue@1.0.0: {} + + html-url-attributes@3.0.1: {} + ignore@5.3.2: {} import-fresh@3.3.1: @@ -3513,6 +4009,22 @@ snapshots: imurmurhash@0.1.4: {} + inline-style-parser@0.2.4: {} + + is-alphabetical@1.0.4: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@1.0.4: + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -3521,6 +4033,10 @@ snapshots: dependencies: hasown: 2.0.2 + is-decimal@1.0.4: {} + + is-decimal@2.0.1: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -3529,8 +4045,14 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hexadecimal@1.0.4: {} + + is-hexadecimal@2.0.1: {} + is-number@7.0.0: {} + is-plain-obj@4.1.0: {} + isexe@2.0.0: {} jackspeak@3.4.3: @@ -3610,20 +4132,373 @@ snapshots: lodash.once@4.1.1: {} + longest-streak@3.1.0: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 + lowlight@1.20.0: + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + lru-cache@10.4.3: {} lucide-react@0.437.0(react@18.3.1): dependencies: react: 18.3.1 + markdown-table@3.0.4: {} + math-intrinsics@1.1.0: {} + mdast-util-find-and-replace@3.0.2: + dependencies: + '@types/mdast': 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + mdast-util-from-markdown@2.0.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + '@types/mdast': 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + '@types/mdast': 4.0.4 + unist-util-is: 6.0.0 + + mdast-util-to-hast@13.2.0: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + '@types/mdast': 4.0.4 + merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + '@types/debug': 4.1.12 + debug: 4.4.0 + decode-named-character-reference: 1.1.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -3698,6 +4573,25 @@ snapshots: dependencies: callsites: 3.1.0 + parse-entities@2.0.0: + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + + parse-entities@4.0.2: + dependencies: + '@types/unist': 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.1.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + path-exists@4.0.0: {} path-key@3.1.1: {} @@ -3756,6 +4650,16 @@ snapshots: prelude-ls@1.2.1: {} + prismjs@1.27.0: {} + + prismjs@1.30.0: {} + + property-information@5.6.0: + dependencies: + xtend: 4.0.2 + + property-information@7.0.0: {} + proxy-from-env@1.1.0: {} psl@1.15.0: @@ -3774,6 +4678,24 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-markdown@10.1.0(@types/react@18.3.20)(react@18.3.1): + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@types/react': 18.3.20 + devlop: 1.1.0 + hast-util-to-jsx-runtime: 2.3.6 + html-url-attributes: 3.0.1 + mdast-util-to-hast: 13.2.0 + react: 18.3.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + unified: 11.0.5 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + react-remove-scroll-bar@2.3.8(@types/react@18.3.20)(react@18.3.1): dependencies: react: 18.3.1 @@ -3833,6 +4755,16 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 + react-syntax-highlighter@15.6.1(react@18.3.1): + dependencies: + '@babel/runtime': 7.27.0 + highlight.js: 10.7.3 + highlightjs-vue: 1.0.0 + lowlight: 1.20.0 + prismjs: 1.30.0 + react: 18.3.1 + refractor: 3.6.0 + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -3847,8 +4779,48 @@ snapshots: reconnecting-websocket@4.4.0: {} + refractor@3.6.0: + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + regenerator-runtime@0.14.1: {} + remark-gfm@4.0.1: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 + + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + requires-port@1.0.0: {} resolve-from@4.0.0: {} @@ -3924,6 +4896,10 @@ snapshots: source-map@0.6.1: optional: true + space-separated-tokens@1.1.5: {} + + space-separated-tokens@2.0.2: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -3936,6 +4912,11 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3946,6 +4927,14 @@ snapshots: strip-json-comments@3.1.1: {} + style-to-js@1.1.16: + dependencies: + style-to-object: 1.0.8 + + style-to-object@1.0.8: + dependencies: + inline-style-parser: 0.2.4 + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -4026,6 +5015,10 @@ snapshots: tr46@0.0.3: {} + trim-lines@3.0.1: {} + + trough@2.2.0: {} + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: typescript: 5.8.3 @@ -4054,6 +5047,39 @@ snapshots: undici-types@6.21.0: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + universalify@0.2.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): @@ -4103,6 +5129,16 @@ snapshots: - '@types/react' - '@types/react-dom' + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + vite@5.4.18(@types/node@22.14.1)(terser@5.39.0): dependencies: esbuild: 0.21.5 @@ -4148,6 +5184,8 @@ snapshots: ws@8.18.1: {} + xtend@4.0.2: {} + yaml@2.7.1: {} yocto-queue@0.1.0: {} @@ -4158,3 +5196,5 @@ snapshots: optionalDependencies: '@types/react': 18.3.20 react: 18.3.1 + + zwitch@2.0.4: {} diff --git a/public/icons/conversation-bg.png b/public/icons/conversation-bg.png new file mode 100644 index 0000000..60c7e1a Binary files /dev/null and b/public/icons/conversation-bg.png differ diff --git a/src/apis/user.ts b/src/apis/user.ts index d8296c0..1c03253 100644 --- a/src/apis/user.ts +++ b/src/apis/user.ts @@ -1,19 +1,39 @@ import { getRequest } from "@/lib/customFetch"; export const fetchUserToken = async ({ - options, - }: { - options?: { signal?: AbortSignal,headers?:Record }; - }) => { - const response = await getRequest( - "https://api.v3.ycymedu.com/api/sysOnlineUser/hasitexpired", - {}, - options - ); - - if(response.code === 200){ - return {result:response.result} - }else{ - return {result:[],message:response.message} - } - }; \ No newline at end of file + options, +}: { + options?: { signal?: AbortSignal; headers?: Record }; +}) => { + const response = await getRequest( + "https://api.v3.ycymedu.com/api/sysOnlineUser/hasitexpired", + {}, + options + ); + + if (response.code === 200) { + return { result: response.result }; + } else { + return { result: [], message: response.message }; + } +}; + +export const fetchReport = async ({ + params, + options, +}: { + params: { Type: string; Id: string }; + options?: { signal?: AbortSignal; headers?: Record }; +}) => { + const response = await getRequest( + "https://api.v3.ycymedu.com/api/busScale/GetBusAIReportKeyWord", + params, + options + ); + + if (response.code === 200) { + return { result: response.result }; + } else { + return { result: [], message: response.message }; + } +}; diff --git a/src/app/MainArea/Antechamber/index.tsx b/src/app/MainArea/Antechamber/index.tsx index ddf2980..40ffb9b 100644 --- a/src/app/MainArea/Antechamber/index.tsx +++ b/src/app/MainArea/Antechamber/index.tsx @@ -5,44 +5,96 @@ import AntechamberScore from "@/components/AntechamberScore"; import { useContext, useEffect, useState } from "react"; import { RealtimeClientContext } from "@/components/Provider/RealtimeClientProvider"; import { useSearchParams } from "react-router-dom"; -import { fetchUserToken } from "@/apis/user"; +import { fetchReport, fetchUserToken } from "@/apis/user"; +import { useToast } from "@/hooks/use-toast"; +import { useAbortController } from "@/hooks/useAbortController"; +import { ReportContext } from "@/components/Provider/ReportResolveProvider"; export default function Antechamber() { const { handleConnect } = useContext(RealtimeClientContext); + const { setHasHandledReport,hasHandledReport } = useContext(ReportContext); const [searchParams] = useSearchParams(); const [disable,setDisable] = useState(true); const token = searchParams.get("token") || ''; + const reportId = searchParams.get("reportId") || ''; + const reportType = searchParams.get("reportType") || ''; + + const { toast } = useToast(); + const { getSignal } = useAbortController(); - const getUserToken = async ({ signal }: { signal: AbortSignal }) => { - const { result, message } = await fetchUserToken({ options: { signal,headers:{"Authorization":`Bearer ${token}`} } }); - if (message) { - console.log(message); - } else { - const _result = result as {isExpired:boolean}; - setDisable(!_result.isExpired); + const getUserToken = async () => { + try { + const { result, message } = await fetchUserToken({ + options: { + signal: getSignal(), + headers: {"Authorization":`Bearer ${token}`} + } + }); + if (message) { + console.log(message); + } else { + const _result = result as {isExpired:boolean;msg:string}; + setDisable(!_result.isExpired); + if(!_result.isExpired &&_result.msg){ + toast({ + title: _result.msg, + description: "请重新登录", + }); + } + } + } catch (error: any) { + if (error.name !== 'AbortError') { + console.error('获取用户令牌失败:', error); + } } }; - - useEffect(()=>{ - const controller = new AbortController(); - const { signal } = controller; - getUserToken({ signal }); - },[token]) - const toRoom = () => { - // if(disable){ - // return; - // } - handleConnect(); + const getReport = async () => { + try { + const { result, message } = await fetchReport({ + params:{Type:reportType,Id:reportId}, + options: { + signal: getSignal(), + headers: {"Authorization":`Bearer ${token}`} + } + }); + if (message) { + console.log(message); + } else { + handleConnect(result as string); + setHasHandledReport(true) + } + } catch (error: any) { + if (error.name !== 'AbortError') { + console.error('获取报告失败:', error); + } + } + } + + useEffect(() => { + getUserToken(); + }, [token]); + + useEffect(() => { + if(reportId && reportType && !hasHandledReport){ + getReport(); + } + }, [reportId, reportType,hasHandledReport]); + + const toRoom = (initMessage?:string) => { + if(disable){ + return; + } + handleConnect(initMessage); }; return (
- + toRoom()} />
); } diff --git a/src/app/MainArea/Room/index.tsx b/src/app/MainArea/Room/index.tsx index 464670f..131c5ff 100644 --- a/src/app/MainArea/Room/index.tsx +++ b/src/app/MainArea/Room/index.tsx @@ -3,7 +3,7 @@ import RoomController from "@/components/RoomController"; export default function Room() { return ( -
+
diff --git a/src/app/MainArea/index.tsx b/src/app/MainArea/index.tsx index 10e5aaa..194a577 100644 --- a/src/app/MainArea/index.tsx +++ b/src/app/MainArea/index.tsx @@ -1,14 +1,32 @@ import Room from "./Room"; import Antechamber from "./Antechamber"; -import { useContext } from "react"; +import { useContext, useEffect } from "react"; import { RealtimeClientContext, RealtimeClientProvider, } from "@/components/Provider/RealtimeClientProvider"; +import { ReportProvider } from "@/components/Provider/ReportResolveProvider"; +import { RealtimeUtils } from "@coze/realtime-api"; + + function MainContent() { const { isConnected } = useContext(RealtimeClientContext); - return isConnected ? : ; + + const handlePromise = async() => { + await RealtimeUtils.checkDevicePermission(false); + } + + useEffect(() => { + handlePromise(); + }, []); + + return ( + + {isConnected ? : } + + + ); } export default function MainArea() { diff --git a/src/app/MainLayout.tsx b/src/app/MainLayout.tsx index 570da1c..947b1db 100644 --- a/src/app/MainLayout.tsx +++ b/src/app/MainLayout.tsx @@ -3,12 +3,14 @@ import { cn } from "@/lib/utils"; import { Outlet } from "react-router-dom"; +import { Toaster } from "@/components/ui/toaster" export default function LocaleLayout() { return ( <> -
+
+
); diff --git a/src/components/AntechamberHeader/index.tsx b/src/components/AntechamberHeader/index.tsx index 7798c80..10c9686 100644 --- a/src/components/AntechamberHeader/index.tsx +++ b/src/components/AntechamberHeader/index.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useContext } from "react"; +import { useState, useEffect } from "react"; import HelloGIF from "/icons/hello.gif"; import WhatsThing from "/icons/whatsThing.png"; @@ -6,10 +6,10 @@ import CircleIcon from "/icons/circle.png"; import RightIcon from "/icons/right.png"; import styles from "./index.module.css"; import { fetchQuestions } from "@/apis/questions"; -import { RealtimeClientContext } from "../Provider/RealtimeClientProvider"; +import { useAbortController } from "@/hooks/useAbortController"; type Props = { - toRoom: () =>void; + toRoom: (initMessage?:string) =>void; }; export default function HeaderGroup({ toRoom }: Props) { @@ -17,7 +17,7 @@ export default function HeaderGroup({ toRoom }: Props) { const [displayQuestions, setDisplayQuestions] = useState([]); const [allQuestions, setAllQuestions] = useState([]); - const { setInitMessage } = useContext(RealtimeClientContext); + const { getSignal } = useAbortController(); // 随机获取4个问题的函数 const getRandomQuestions = () => { @@ -33,8 +33,8 @@ export default function HeaderGroup({ toRoom }: Props) { return result; }; - const getQuestion = async ({ signal }: { signal: AbortSignal }) => { - const { result, message } = await fetchQuestions({ options: { signal } }); + const getQuestion = async () => { + const { result, message } = await fetchQuestions({ options: { signal:getSignal() } }); if (message) { console.log(message); } else { @@ -48,9 +48,7 @@ export default function HeaderGroup({ toRoom }: Props) { // 组件初始化时获取随机问题 useEffect(() => { - const controller = new AbortController(); - const { signal } = controller; - getQuestion({ signal }); + getQuestion(); }, []); const handleClick = () => { @@ -66,8 +64,7 @@ export default function HeaderGroup({ toRoom }: Props) { }; const handleQuestion = async (question: string) => { - setInitMessage(question); - await toRoom(); + toRoom(question); }; return ( diff --git a/src/components/AntechamberScore/index.tsx b/src/components/AntechamberScore/index.tsx index 30f9081..9a37500 100644 --- a/src/components/AntechamberScore/index.tsx +++ b/src/components/AntechamberScore/index.tsx @@ -4,11 +4,9 @@ import { useSearchParams } from 'react-router-dom'; import MyInputIcon from '/icons/myInput.png'; import RightBlueIcon from '/icons/rightBlue.png'; import style from './index.module.css'; -import { RealtimeClientContext } from '../Provider/RealtimeClientProvider'; -import { useContext } from 'react'; type Props = { - toRoom: () => void; + toRoom: (initMessage?:string) => void; }; export default function MyInput({ toRoom }: Props) { @@ -19,11 +17,9 @@ export default function MyInput({ toRoom }: Props) { const subjectGroup = searchParams.get('subjectGroup') || '物/化/史' const expectedScore = searchParams.get('expectedScore') || 500 - const {setInitMessage} = useContext(RealtimeClientContext) const handleQuestion = async () => { - toRoom(); - setInitMessage(`我的高考地点在${provinceName},我选择的科目是${subjectGroup},我的高考分数为${expectedScore}分。我适合哪些学校和专业`); + toRoom(`我的高考地点在${provinceName},我选择的科目是${subjectGroup},我的高考分数为${expectedScore}分。我适合哪些学校和专业`); }; return ( diff --git a/src/components/Provider/RealtimeClientProvider.tsx b/src/components/Provider/RealtimeClientProvider.tsx index 1b0f579..e8cd754 100644 --- a/src/components/Provider/RealtimeClientProvider.tsx +++ b/src/components/Provider/RealtimeClientProvider.tsx @@ -11,7 +11,6 @@ import { ReactNode, useCallback, useContext, - useEffect, useRef, useState, } from "react"; @@ -33,13 +32,12 @@ export const RealtimeClientContext = createContext<{ messageList: { content: string; role: RoleType }[]; isAiTalking: boolean; roomInfo: RoomInfo | null; - initClient: () => void; - handleConnect: () => void; + initClient: (initMessage?:string) => void; + handleConnect: (initMessage?:string) => Promise; handleInterrupt: () => void; handleDisconnect: () => void; toggleMicrophone: () => void; - sendUserMessageWithText: (message: string) => void; - setInitMessage: (message: string) => void; + }>({ client: null, isConnecting: false, @@ -50,12 +48,11 @@ export const RealtimeClientContext = createContext<{ isAiTalking: false, roomInfo: null, initClient: () => {}, - handleConnect: () => {}, + handleConnect: () => Promise.resolve(), handleInterrupt: () => {}, handleDisconnect: () => {}, toggleMicrophone: () => {}, - sendUserMessageWithText: () => {}, - setInitMessage: () => {}, + }); // 添加自定义hook @@ -89,57 +86,62 @@ export const RealtimeClientProvider = ({ // 是否已连接 const [isConnected, setIsConnected] = useState(false); // 是否开启麦克风 - const [audioEnabled, setAudioEnabled] = useState(false); + const [audioEnabled, setAudioEnabled] = useState(true); // 是否支持视频 const [isSupportVideo] = useState(false); // 是否正在说话 const [isAiTalking, setIsAiTalking] = useState(false); - const [initMessage, setInitMessage] = useState(""); - const [isClientInitialized, setIsClientInitialized] = useState(false); + + const [roomInfo, setRoomInfo] = useState(null); const { toast } = useToast(); - const initClient = async () => { + const initClient = async (_initMessage?:string) => { const permission = await RealtimeUtils.checkDevicePermission(false); + const device = await RealtimeUtils.getAudioDevices(); + if (!permission.audio) { toast({ title: "连接错误", description: "需要麦克风访问权限", }); throw new Error("需要麦克风访问权限"); - }else{ - const client = new RealtimeClient({ - accessToken: token, - botId: botId, - voiceId: voiceId, - connectorId: connectorId, - allowPersonalAccessTokenInBrowser: true, // 可选:允许在浏览器中使用个人访问令牌 - }); - - clientRef.current = client; - setupEventListeners(client); - setIsClientInitialized(true); } + + if (device.audioInputs.length === 0) { + toast({ + title: "连接错误", + description: "没有麦克风设备", + }); + throw new Error("没有麦克风设备"); + } + + const client = new RealtimeClient({ + accessToken: token, + botId: botId, + voiceId: voiceId, + connectorId: connectorId, + allowPersonalAccessTokenInBrowser: true, // 可选:允许在浏览器中使用个人访问令牌 + }); + + clientRef.current = client; + + + setupEventListeners(client); + setupMessageEventListeners(client,_initMessage ?? ''); + setupInitMessageEventListener(client,_initMessage) }; - useEffect(() => { - if (clientRef.current) { - setupMessageEventListeners(clientRef.current); - if (initMessage) { - setupInitMessageEventListener(clientRef.current); - } - } - }, [initMessage, isClientInitialized]); - const handleConnect = async () => { + const handleConnect = async (initMessage?:string) => { try { if (!clientRef.current) { - await initClient(); + await initClient(initMessage); } - await clientRef.current?.connect(); + await toggleMicrophone(); } catch (error) { console.error(error); if (error instanceof RealtimeAPIError) { @@ -170,12 +172,13 @@ export const RealtimeClientProvider = ({ } }; - const handleDisconnect = () => { + const handleDisconnect = async() => { try { // 关闭客户的时候清除一些信息 setIsAiTalking(false); - setIsClientInitialized(false); setMessageList([]); + await clientRef.current?.setAudioEnable(false); + setAudioEnabled(false); clientRef.current?.disconnect(); clientRef.current?.clearEventHandlers(); @@ -195,16 +198,36 @@ export const RealtimeClientProvider = ({ } }; - const setupInitMessageEventListener = (client: RealtimeClient) => { - client.on(EventNames.ALL_SERVER, (eventName, _event: any) => { + + const setupInitMessageEventListener = useCallback((client: RealtimeClient,_initMessage?:string) => { + client.on(EventNames.ALL_SERVER, async(eventName, _event: any) => { if (eventName === "server.session.created") { + await client.sendMessage({ + id:'', + "event_type":"session.update", + data:{ + chat_config:{ + allow_voice_interrupt:false + } + } + }) + } + if(eventName === "server.bot.join" && _initMessage){ // 这里需要加个 server. 前缀 - sendUserMessageWithText(initMessage); + await clientRef.current?.sendMessage({ + id: "", + event_type: "conversation.message.create", + data: { + role: "user", + content_type: "text", + content: _initMessage, + }, + }); } }); - }; + },[clientRef.current]); - const setupMessageEventListeners = (client: RealtimeClient) => { + const setupMessageEventListeners = (client: RealtimeClient,_initMessage:string) => { let lastEvent: any; client.on(EventNames.ALL, (_eventName, event: any) => { // AI智能体设置 @@ -233,7 +256,7 @@ export const RealtimeClientProvider = ({ } // 添加AI的欢迎语 - if (initMessage === "" && event.event_type === "conversation.created") { + if (_initMessage === "" && event.event_type === "conversation.created") { return [ ...prev, { content: event.data.prologue, role: RoleType.Assistant }, @@ -260,16 +283,18 @@ export const RealtimeClientProvider = ({ const setupEventListeners = useCallback( (client: RealtimeClient) => { // 监听 AI 开始说话事件 - client.on(EventNames.AUDIO_AGENT_SPEECH_STARTED, () => { + client.on(EventNames.AUDIO_AGENT_SPEECH_STARTED, async() => { // console.log("AI开始说话"); setIsAiTalking(true); + await clientRef.current?.setAudioEnable(false); setAudioEnabled(false); }); // 监听 AI 结束说话事件 - client.on(EventNames.AUDIO_AGENT_SPEECH_STOPPED, () => { + client.on(EventNames.AUDIO_AGENT_SPEECH_STOPPED, async() => { // console.log("AI结束说话"); setIsAiTalking(false); + await clientRef.current?.setAudioEnable(true); setAudioEnabled(true); }); @@ -286,25 +311,25 @@ export const RealtimeClientProvider = ({ setIsConnected(true); }); }, - [clientRef.current, initMessage] + [clientRef.current] ); // 发送信息 - const sendUserMessageWithText = async (message: string) => { - try { - await clientRef.current?.sendMessage({ - id: "", - event_type: "conversation.message.create", - data: { - role: "user", - content_type: "text", - content: message, - }, - }); - } catch (error) { - console.error("发送消息失败:" + error); - } - }; + // const sendUserMessageWithText = async (message: string) => { + // try { + // await clientRef.current?.sendMessage({ + // id: "", + // event_type: "conversation.message.create", + // data: { + // role: "user", + // content_type: "text", + // content: message, + // }, + // }); + // } catch (error) { + // console.error("发送消息失败:" + error); + // } + // }; return ( {children} diff --git a/src/components/Provider/ReportResolveProvider.tsx b/src/components/Provider/ReportResolveProvider.tsx new file mode 100644 index 0000000..d42ffe6 --- /dev/null +++ b/src/components/Provider/ReportResolveProvider.tsx @@ -0,0 +1,20 @@ +import { createContext, useState } from "react"; + +export const ReportContext = createContext<{ + hasHandledReport: boolean; + setHasHandledReport: (value: boolean) => void; + }>({ + hasHandledReport: false, + setHasHandledReport: () => {}, + }); + + +export const ReportProvider = ({ children }: { children: React.ReactNode }) => { + const [hasHandledReport, setHasHandledReport] = useState(false); + + return ( + + {children} + + ); +}; diff --git a/src/components/RoomController/index.tsx b/src/components/RoomController/index.tsx index 55ac853..186b319 100644 --- a/src/components/RoomController/index.tsx +++ b/src/components/RoomController/index.tsx @@ -28,7 +28,7 @@ function AudioController({className, ...rest}: React.HTMLAttributes +
handoff
挂断
diff --git a/src/components/RoomConversation/index.tsx b/src/components/RoomConversation/index.tsx index 4532666..c7180a2 100644 --- a/src/components/RoomConversation/index.tsx +++ b/src/components/RoomConversation/index.tsx @@ -1,5 +1,7 @@ import { useRef, useEffect, useContext } from "react"; import { RealtimeClientContext } from "../Provider/RealtimeClientProvider"; +import ReactMarkdown from 'react-markdown' +import gfm from 'remark-gfm' import { RoleType } from "@coze/api"; export default function RoomConversation() { @@ -16,7 +18,14 @@ export default function RoomConversation() { }, [messageList]); return ( -
+
+
+
+ + background +
Hey,我是您的六纬AI填报师
+
+
{messageList.map((message: any, index: number) => (
- {message.content} + {message.content}
))} diff --git a/src/hooks/useAbortController.ts b/src/hooks/useAbortController.ts new file mode 100644 index 0000000..d4f2bd3 --- /dev/null +++ b/src/hooks/useAbortController.ts @@ -0,0 +1,41 @@ +import { useEffect, useRef } from 'react'; + +export function useAbortController() { + const controllerRef = useRef(null); + + // 获取AbortSignal实例 + const getSignal = () => { + if (!controllerRef.current) { + controllerRef.current = new AbortController(); + } + return controllerRef.current.signal; + }; + + // 中止所有请求 + const abortAll = () => { + if (controllerRef.current) { + controllerRef.current.abort(); + controllerRef.current = null; + } + }; + + // 创建新的Controller,并中止之前的请求 + const recreate = () => { + abortAll(); + controllerRef.current = new AbortController(); + return controllerRef.current.signal; + }; + + // 组件卸载时自动中止所有请求 + useEffect(() => { + return () => { + abortAll(); + }; + }, []); + + return { + getSignal, + abortAll, + recreate + }; +} \ No newline at end of file diff --git a/src/hooks/useMicrosoftSignal.ts b/src/hooks/useMicrosoftSignal.ts index a5ab1b1..d1e5a0b 100644 --- a/src/hooks/useMicrosoftSignal.ts +++ b/src/hooks/useMicrosoftSignal.ts @@ -10,6 +10,7 @@ export const useSignalRConnection = (params: { const connectionRef = useRef(null); const { handleDisconnect } = useRealtimeClient(); const { toast } = useToast(); + const timerRef = useRef(null); useEffect(() => { if (!params.access_token || !params.roomId) { @@ -51,7 +52,7 @@ export const useSignalRConnection = (params: { .start() .then(() => { console.log("SignalR连接已建立"); - setInterval(() => { + timerRef.current = setInterval(() => { connection.invoke("Ping"); }, 5000); }) @@ -64,6 +65,7 @@ export const useSignalRConnection = (params: { connectionRef.current .stop() .then(() => { + clearInterval(timerRef.current as NodeJS.Timeout); console.log("SignalR连接已关闭"); }) .catch((err) => { diff --git a/src/hooks/useRealtimeClient.ts b/src/hooks/useRealtimeClient.ts new file mode 100644 index 0000000..e69de29