{"version":3,"sources":["../node_modules/react/jsx-runtime.js","../../../src/ILogger.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/regenerator/index.js","../node_modules/react/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../src/buttplug_ffi.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createSuper.js","../../../src/Utils.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../modules/createNameContext.js","../../modules/HistoryContext.js","../../modules/RouterContext.js","../../modules/Router.js","../../modules/MemoryRouter.js","../../modules/Lifecycle.js","../../modules/generatePath.js","../../modules/Redirect.js","../../modules/matchPath.js","../../modules/Route.js","../../modules/StaticRouter.js","../../modules/Switch.js","../../modules/hooks.js","../../modules/BrowserRouter.js","../../modules/HashRouter.js","../../modules/utils/locationUtils.js","../../modules/Link.js","../../modules/NavLink.js","../../../src/ffi.ts","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/resolve-pathname/esm/resolve-pathname.js","../node_modules/value-equal/esm/value-equal.js","../node_modules/history/esm/history.js","../node_modules/axios/index.js","../node_modules/axios/lib/utils.js","../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../src/Loggers.ts","../../../src/TextMessageFormat.ts","../node_modules/protobufjs/src/util/minimal.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/prop-types/index.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/axios/lib/defaults.js","../node_modules/axios/lib/cancel/Cancel.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/events/events.js","../../../src/Errors.ts","../../../src/HttpClient.ts","../../../src/FetchHttpClient.ts","../../../src/IHubProtocol.ts","../../../src/XhrHttpClient.ts","../../../src/DefaultHttpClient.ts","../../../src/Subject.ts","../../../src/HubConnection.ts","../../../src/ITransport.ts","../../../src/DefaultReconnectPolicy.ts","../../../src/AbortController.ts","../../../src/LongPollingTransport.ts","../../../src/ServerSentEventsTransport.ts","../../../src/WebSocketTransport.ts","../../../src/HttpConnection.ts","../../../src/JsonHubProtocol.ts","../../../src/HubConnectionBuilder.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/webpack/buildin/global.js","../node_modules/path-to-regexp/index.js","../../../src/connectors.ts","../node_modules/gsap/gsap-core.js","../node_modules/gsap/CSSPlugin.js","../node_modules/gsap/index.js","../node_modules/object-assign/index.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/process/browser.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/env/data.js","../node_modules/react-is/index.js","../node_modules/buffer/index.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/reader.js","../node_modules/react-dom/index.js","../node_modules/gsap/ScrollTrigger.js","../node_modules/mini-create-react-context/dist/esm/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/@uriopass/nosleep.js/src/index.js","../../../src/HandshakeProtocol.ts","../node_modules/react/cjs/react.production.min.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/scheduler/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/path-to-regexp/node_modules/isarray/index.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@uriopass/nosleep.js/src/media.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/isarray/index.js","../node_modules/protobufjs/minimal.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/roots.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/construct.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../../../src/errors.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../../../src/sorter.ts","../../../src/device.ts","../node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../../../src/client.ts"],"names":["module","exports","require","LogLevel","_assertThisInitialized","self","ReferenceError","_classCallCheck","instance","Constructor","TypeError","values","valuesById","ClientMessage","i","decode","message","DeviceMessage","VibrateComponent","prototype","object","j","writer","$Writer","create","this","constructor","toObject","$protobuf","util","toJSONOptions","reader","$Reader","endpoint","RawSubscribeCmd","options","defaults","_defineProperties","target","props","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","_inherits","subClass","superClass","value","_typeof","obj","Symbol","iterator","_possibleConstructorReturn","call","assertThisInitialized","_createSuper","Derived","hasNativeReflectConstruct","isNativeReflectConstruct","result","Super","getPrototypeOf","NewTarget","Reflect","construct","arguments","apply","isRequired","val","name","undefined","Error","isNotEmpty","match","isIn","window","isBrowser","isWebWorker","data","includeContent","detail","isArrayBuffer","byteLength","view","Uint8Array","str","forEach","num","toString","substr","formatArrayBuffer","ArrayBuffer","logger","transportName","httpClient","url","accessTokenFactory","content","logMessageContent","withCredentials","defaultHeaders","headers","token","getUserAgentHeader","log","Trace","getDataDetail","responseType","post","response","statusCode","ConsoleLogger","Information","subject","observer","dispose","index","observers","indexOf","splice","cancelCallback","catch","_","minimumLogLevel","outputConsole","console","logLevel","Critical","error","Date","toISOString","Warning","warn","info","userAgentHeaderName","Platform","isNode","constructUserAgent","getOsName","getRuntime","getRuntimeVersion","version","os","runtime","runtimeVersion","userAgent","majorAndMinor","split","process","platform","versions","node","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","done","Promise","then","_asyncToGenerator","fn","args","err","createNamedContext","context","createContext","historyContext","Router","location","computeRootMatch","path","params","isExact","pathname","componentDidMount","_pendingLocation","componentWillUnmount","render","RouterContext","history","state","staticContext","HistoryContext","children","React","Component","Lifecycle","onMount","componentDidUpdate","onUpdate","prevProps","onUnmount","cache","cacheCount","generatePath","generator","pathToRegexp","compilePath","pretty","Redirect","computedMatch","to","push","method","createLocation","prevLocation","locationsAreEqual","matchPath","Array","exact","strict","sensitive","concat","matched","cacheKey","pathCache","keys","regexp","end","memo","Route","component","isEmptyChildren","addLeadingSlash","stripBasename","basename","base","createURL","createPath","staticHandler","methodName","invariant","noop","BrowserRouter","createHistory","resolveToLocation","currentLocation","normalizeToLocation","forwardRefShim","C","forwardRef","LinkAnchor","innerRef","navigate","onClick","rest","event","ex","isModifiedEvent","forwardedRef","Link","replace","href","isDuplicateNavigation","ariaCurrent","activeClassName","activeStyle","classNameProp","className","isActiveProp","isActive","locationProp","styleProp","style","toLocation","escapedPath","classnames","joinClassnames","id","_extends","assign","source","hasOwnProperty","_defineProperty","isAbsolute","charAt","spliceOne","list","k","n","pop","resolvePathname","from","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","last","up","part","unshift","join","valueOf","valueEqual","a","b","isArray","every","item","aValue","bValue","stripLeadingSlash","prefix","toLowerCase","hasBasename","stripTrailingSlash","slice","search","hash","hashIndex","searchIndex","parsePath","decodeURI","e","URIError","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","action","getUserConfirmation","callback","appendListener","listener","filter","notifyListeners","_len","_key","canUseDOM","document","createElement","getConfirmation","confirm","PopStateEvent","HashChangeEvent","getHistoryState","createBrowserHistory","globalHistory","canUseHistory","ua","navigator","supportsHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","getDOMLocation","historyState","_ref","_window$location","createKey","Math","random","transitionManager","setState","nextState","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","ok","fromLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","addEventListener","removeEventListener","isBlocked","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","block","unblock","listen","unlisten","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","stripHash","getHashPath","substring","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","encodedPath","allPaths","lastIndexOf","baseTag","querySelector","getAttribute","pushHashPath","nextPaths","clamp","lowerBound","upperBound","min","max","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","entries","map","entry","nextIndex","nextEntries","canGo","bind","isUndefined","isObject","isPlainObject","isFunction","l","isBuffer","isFormData","FormData","isArrayBufferView","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","product","merge","assignValue","extend","thisArg","trim","stripBOM","charCodeAt","condition","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_inheritsLoose","_logLevel","_message","NullLogger","write","output","TextMessageFormat","RecordSeparator","parse","input","messages","RecordSeparatorCode","String","fromCharCode","dst","src","ifNotSet","newError","CustomError","properties","get","captureStackTrace","stack","asPromise","base64","EventEmitter","float","inquire","utf8","pool","LongBits","Boolean","global","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","floor","isset","isSet","prop","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","Long","dcodeIO","key2Re","key32Re","key64Re","longToHash","toHash","zeroHash","longFromHash","unsigned","bits","fromHash","fromBits","lo","hi","toNumber","lcFirst","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","longs","enums","bytes","json","_configure","encoding","allocUnsafe","size","_objectWithoutPropertiesLoose","excluded","sourceKeys","_unsupportedIterableToArray","minLen","test","_getPrototypeOf","_arrayLikeToArray","arr","len","arr2","utils","normalizeHeaderName","enhanceError","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","transitional","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","adapter","XMLHttpRequest","getDefaultAdapter","transformRequest","rawValue","parser","encoder","JSON","stringify","stringifySafely","transformResponse","strictJSONParsing","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","status","common","Cancel","__CANCEL__","_isNativeReflectConstruct","sham","Proxy","ReflectOwnKeys","R","ReflectApply","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","init","once","emitter","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","on","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","that","_addListener","type","prepend","m","events","existing","warning","newListener","emit","warned","w","count","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","copy","wrapListener","set","RangeError","setMaxListeners","getMaxListeners","doError","er","addListener","prependListener","prependOnceListener","position","originalListener","shift","off","removeAllListeners","rawListeners","eventNames","errorMessage","trueProto","statusText","send","delete","getCookieString","fetch","requireFunc","jar","fetchType","abortControllerType","AbortController","request","abortSignal","aborted","AbortError","abortController","onabort","abort","timeoutId","msTimeout","setTimeout","TimeoutError","body","credentials","mode","redirect","signal","clearTimeout","HttpError","arrayBuffer","text","deserializeContent","payload","HttpResponse","cookies","getCookies","c","HttpClient","MessageType","xhr","open","setRequestHeader","header","onload","responseText","onerror","ontimeout","HubConnectionState","next","complete","subscribe","HttpTransportType","TransferFormat","connection","protocol","reconnectPolicy","nextKeepAlive","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","handshakeProtocol","HandshakeProtocol","onreceive","processIncomingData","onclose","connectionClosed","callbacks","methods","closedCallbacks","reconnectingCallbacks","reconnectedCallbacks","invocationId","receivedHandshakeResponse","connectionState","Disconnected","connectionStarted","cachedPingMessage","writeMessage","Ping","HubConnection","connectionId","baseUrl","Reconnecting","start","startPromise","startWithStateTransitions","Connecting","Debug","startInternal","Connected","stopDuringStartError","handshakePromise","handshakeResolver","handshakeRejecter","transferFormat","handshakeRequest","sendMessage","writeHandshakeRequest","cleanupTimeout","resetTimeoutPeriod","resetKeepAliveInterval","cleanupPingTimer","stop","stopPromise","stopInternal","Disconnecting","reconnectDelayHandle","completeClose","stream","promiseQueue","streams","streamIds","invocationDescriptor","createStreamInvocation","cancelInvocation","createCancelInvocation","sendWithProtocol","invocationEvent","Completion","launchStreams","sendPromise","createInvocation","invoke","newMethod","handlers","removeIdx","onreconnecting","onreconnected","processHandshakeResponse","parseMessages","Invocation","invokeClientMethod","StreamItem","Close","allowReconnect","responseMessage","remainingData","features","inherentKeepAlive","getTime","timeoutHandle","pingServerHandle","nextPing","serverTimeout","invocationMessage","cancelCallbacksWithError","reconnect","reconnectStartTime","now","previousReconnectAttempts","retryError","nextRetryDelay","getNextRetryDelay","previousRetryCount","elapsedMilliseconds","retryReason","nextRetryDelayInMilliseconds","nonblocking","streamId","createCompletionMessage","createStreamItemMessage","replaceStreamingParams","argument","isObservable","StreamInvocation","CancelInvocation","DEFAULT_RETRY_DELAYS_IN_MILLISECONDS","retryDelays","retryContext","isAborted","pollAbort","running","connect","Binary","pollOptions","getAccessToken","updateHeaderToken","pollUrl","closeError","receiving","poll","pollAborted","raiseOnClose","deleteOptions","logMessage","eventSourceConstructor","encodeURIComponent","opened","Text","eventSource","Cookie","onmessage","close","onopen","webSocketConstructor","webSocket","binaryType","_event","ErrorEvent","readyState","OPEN","isCloseEvent","wasClean","code","reason","stopPromiseResolver","negotiateVersion","resolveUrl","webSocketModule","eventSourceModule","WebSocket","EventSource","startInternalPromise","sendQueue","TransportSendQueue","transport","stopError","stopConnection","skipNegotiation","WebSockets","constructTransport","startTransport","negotiateResponse","redirects","getNegotiationResponse","ProtocolVersion","accessToken","createTransport","negotiateUrl","resolveNegotiateUrl","connectionToken","createConnectUrl","requestedTransport","requestedTransferFormat","connectUrl","isITransport","transportExceptions","transports","availableTransports","negotiate","transportOrError","resolveTransportOrError","ServerSentEvents","LongPolling","actualTransport","transportMatches","transferFormats","s","aTag","executing","sendBufferedData","PromiseSource","transportResult","sendLoopPromise","sendLoop","bufferData","promise","concatBuffers","arrayBuffers","totalLength","reduce","offset","rejecter","hubMessages","parsedMessage","isInvocationMessage","isStreamItemMessage","isCompletionMessage","assertNotEmptyString","LogLevelNameMapping","trace","debug","information","critical","none","None","configureLogging","logging","mapping","parseLogLevel","withUrl","transportTypeOrOptions","httpConnectionOptions","withHubProtocol","withAutomaticReconnect","retryDelaysOrReconnectPolicy","DefaultReconnectPolicy","build","_toConsumableArray","arrayLikeToArray","iter","unsupportedIterableToArray","g","isarray","compile","tokensToFunction","tokensToRegExp","PATH_REGEXP","RegExp","res","tokens","defaultDelimiter","delimiter","exec","escaped","capture","group","modifier","asterisk","partial","repeat","optional","pattern","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","encode","segment","attachKeys","re","route","endsWithDelimiter","groups","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","ButtplugEmbeddedConnectorOptions","_suppressOverwrites","_globalTimeline","_win","_coreInitted","_doc","_coreReady","_lastRenderedFrame","_quickTween","_tickerActive","_config","autoSleep","force3D","nullTargetWarn","units","lineHeight","_defaults","duration","overwrite","delay","_bigNum","_tinyNum","_2PI","PI","_HALF_PI","_gsID","_sqrt","sqrt","_cos","cos","_sin","sin","_isString","_isFunction","_isNumber","_isUndefined","_isObject","_isNotFalse","_windowExists","_isFuncOrString","_isTypedArray","_isArray","_strictNumExp","_numExp","_numWithUnitExp","_complexStringNumExp","_relExp","_delimitedValueExp","_unitExp","_globals","_installScope","_install","scope","_merge","gsap","_missingPlugin","property","_warn","suppress","_addGlobal","_emptyFunc","_reservedProps","_lazyTweens","_lazyLookup","_plugins","_effects","_nextGCFrame","_harnessPlugins","_callbackNames","_harness","targets","harnessPlugin","_gsap","harness","targetTest","GSCache","_getCache","toArray","_getProperty","v","_forEachName","names","func","_round","round","_roundPrecise","_arrayContainsAny","toSearch","toFind","_lazyRender","tween","_lazy","_lazySafeRender","animation","time","suppressEvents","force","_numericIfPossible","parseFloat","_passThrough","_setDefaults","_setKeyframeDefaults","toMerge","_mergeDeep","_copyExcluding","excluding","_inheritDefaults","vars","parent","keyframes","inherit","_dp","_removeLinkedListItem","child","firstProp","lastProp","prev","_prev","_removeFromParent","onlyIfParentHasAutoRemove","autoRemoveChildren","remove","_act","_uncache","_end","_dur","_start","_dirty","_recacheAncestors","totalDuration","_hasNoPausedAncestors","_ts","_elapsedCycleDuration","_repeat","_animationCycle","_tTime","_rDelay","tTime","cycleDuration","whole","_parentToChildTotalTime","parentTime","_tDur","_setEnd","abs","_rts","_alignPlayhead","totalTime","smoothChildTiming","_time","_postAddChecks","timeline","t","_initted","rawTime","_clamp","_zTime","_addToTimeline","skipChecks","_parsePosition","_delay","timeScale","sortBy","_addLinkedListItem","_sort","_isFromOrFromStart","_recent","_scrollTrigger","trigger","ScrollTrigger","_attemptInitTween","_initTween","_pt","lazy","_ticker","frame","_parentPlayheadIsBeforeStart","_lock","_ref2","_setDuration","skipUncache","leavePlayhead","dur","totalProgress","_onUpdateTotalDuration","Timeline","_zeroPosition","endTime","percentAnimation","isPercent","labels","recent","clippedDuration","_createTweenType","irVars","isLegacy","varsIndex","immediateRender","runBackwards","startAt","Tween","_conditionalReturn","getUnit","_slice","_isArrayLike","nonEmpty","nodeType","_flatten","ar","leaveStrings","accumulator","_accumulator","_wake","querySelectorAll","shuffle","sort","distribute","each","ease","_parseEase","isDecimal","ratios","axis","ratioX","ratioY","center","edges","originX","originY","x","y","d","wrapAt","distances","grid","getBoundingClientRect","left","amount","u","_invertEase","_roundModifier","pow","raw","snap","snapTo","radius","is2D","increment","dx","dy","closest","roundingIncrement","returnFunction","_wrapArray","wrapper","_replaceRandom","nums","mapRange","inMin","inMax","outMin","outMax","inRange","outRange","_getLabelInDirection","fromTime","backward","distance","label","_callback","executeLazyFirst","callbackScope","_interrupt","scrollTrigger","kill","progress","_createPlugin","config","isFunc","Plugin","instanceDefaults","_renderPropTweens","add","_addPropTween","_killPropTweensOf","_addPluginModifier","rawVars","statics","getSetter","_getSetter","aliases","register","PropTween","_255","_colorLookup","aqua","lime","silver","black","maroon","teal","blue","navy","white","olive","yellow","orange","gray","purple","green","red","pink","cyan","transparent","_hue","h","m1","m2","splitColor","toHSL","forceAlpha","r","wasHSL","parseInt","_colorOrderData","_colorExp","_formatColors","orderMatchData","shell","colors","color","_hslExp","_colorStringFilter","combined","lastIndex","_id","_req","_raf","_self","_delta","_i","_getTime","_lagThreshold","_adjustedLag","_startTime","_lastUpdate","_gap","_nextTime","_tick","overlap","dispatch","elapsed","manual","tick","deltaRatio","fps","wake","gsapVersions","GreenSockGlobals","requestAnimationFrame","sleep","f","cancelAnimationFrame","lagSmoothing","threshold","adjustedLag","_fps","_easeMap","_customEaseExp","_quotesExp","_parseObjectInString","parsedVal","_propagateYoyoEase","isYoyo","_first","yoyoEase","_yoyo","_ease","_yEase","defaultEase","nested","_valueInParentheses","_CE","_configEaseFromString","_insertEase","easeIn","easeOut","easeInOut","lowercaseName","_easeInOutFromOut","_configElastic","amplitude","period","p1","p2","p3","asin","_configBack","overshoot","power","Linear","easeNone","n1","SteppedEase","steps","immediateStart","Animation","Infinity","repeatDelay","yoyo","_proto","startTime","_totalTime","_ptLookup","_pTime","ratio","iteration","_ps","paused","includeRepeats","wrapRepeats","globalTime","seek","restart","includeDelay","play","reversed","reverse","pause","atTime","resume","invalidate","eventCallback","_onUpdate","onFulfilled","_resolve","_then","_prom","_Animation","_this","sortChildren","_proto2","fromTo","fromVars","toVars","delayedCall","staggerTo","stagger","onCompleteAll","onCompleteAllParams","onComplete","onCompleteParams","staggerFrom","staggerFromTo","prevPaused","pauseTween","prevStart","prevIteration","prevTime","tDur","crossingStart","rewinding","doesWrap","repeatRefresh","onRepeat","_hasPause","_forcing","_last","_findNextPauseTween","adjustedTime","_this2","addLabel","getChildren","tweens","timelines","ignoreBeforeTime","getById","animations","removeLabel","killTweensOf","_totalTime2","addPause","removePause","onlyActive","getTweensOf","_overwritingTween","parsedTargets","isGlobalTime","_targets","tweenTo","initted","tl","_vars","_onStart","onStart","onStartParams","tweenFromTo","fromPosition","toPosition","nextLabel","afterTime","previousLabel","beforeTime","currentLabel","shiftChildren","adjustLabels","clear","includeLabels","updateRoot","_addComplexStringPropTween","setter","stringFilter","funcParam","startNums","endNum","chunk","startNum","hasRandom","pt","_renderComplexString","matchIndex","fp","currentValue","parsedStart","_setterFuncWithParam","_setterFunc","_setterPlain","_renderBoolean","_renderPlain","_checkPlugin","plugin","ptLookup","_parseFuncOrString","_processVars","priority","cleanVars","hasPriority","gsData","harnessVars","overwritten","onUpdateParams","autoRevert","prevStartAt","_startAt","fullTargets","autoOverwrite","_overwrite","_from","_op","_sortPropTweensByPriority","_onInit","_staggerTweenProps","_staggerPropsToSkip","_Animation2","skipInherit","_this3","curTarget","staggerFunc","staggerVarsToMerge","_this3$vars","_proto3","prevRatio","_renderZeroDurationTween","overwrittenProps","curLookup","curOverwriteProps","killingTargets","propTweenLookup","firstPT","a1","a2","_arraysMatch","propertyAliases","_addAliasesToVars","onReverseComplete","onReverseCompleteParams","_setterAttribute","setAttribute","hasNonDependentRemaining","op","dep","_setterWithModifier","mSet","mt","pt2","first","pr","change","renderer","TweenMax","TweenLite","TimelineLite","TimelineMax","registerPlugin","_len2","_key2","getProperty","unit","uncache","getter","format","quickSetter","setters","isTweening","registerEffect","_ref3","effect","plugins","extendTimeline","pluginName","registerEase","parseEase","exportRoot","includeDelayedCalls","wrap","range","wrapYoyo","total","normalize","selector","el","current","nativeElement","functions","unitize","interpolate","mutate","interpolators","il","master","install","effects","ticker","globalTimeline","core","globals","getCache","suppressOverwrites","_getPluginPropTween","_buildModifierPlugin","temp","modifiers","_addModifiers","Power0","Power1","Power2","Power3","Power4","Quad","Cubic","Quart","Quint","Strong","Elastic","Back","Bounce","Sine","Expo","Circ","_docElement","_pluginInitted","_tempDiv","_recentSetterPlugin","_supports3D","_transformProps","_RAD2DEG","_DEG2RAD","_atan2","atan2","_capsExp","_horizontalExp","_complexExp","_propertyAliases","autoAlpha","scale","alpha","_renderCSSProp","_renderPropWithEnd","_renderCSSPropWithBeginning","_renderRoundedCSSProp","_renderNonTweeningValue","_renderNonTweeningValueOnlyAtEnd","_setterCSSStyle","_setterCSSProp","setProperty","_setterTransform","_setterScale","scaleX","scaleY","_setterScaleWithRender","renderTransform","_setterTransformWithRender","_transformProp","_transformOriginProp","_createElement","ns","createElementNS","_getComputedProperty","skipPrefixFallback","cs","getComputedStyle","getPropertyValue","_checkPropPrefix","_prefixes","element","preferPrefix","_initCore","documentElement","cssText","_getBBoxHack","swapIfPossible","bbox","svg","ownerSVGElement","oldParent","parentNode","oldSibling","nextSibling","oldCSS","appendChild","display","getBBox","_gsapBBox","insertBefore","removeChild","_getAttributeFallbacks","attributesArray","hasAttribute","_getBBox","bounds","width","height","_isSVG","getCTM","_removeProperty","removeProperty","removeAttribute","_addNonTweeningPT","beginning","onlySetAtEnd","_nonConvertibleUnits","deg","rad","turn","_convertToUnit","px","isSVG","curValue","curUnit","horizontal","isRootSVG","tagName","measureProperty","toPixels","toPercent","_get","_parseTransform","origin","_firstTwoOnly","zOrigin","_specialProps","_tweenComplexCSSString","startValues","startValue","endValue","endUnit","startUnit","relative","_keywordToPercent","top","bottom","right","_convertKeywordsToPercentages","_renderClearProps","clearTransforms","clearProps","_identity2DMatrix","_rotationalProperties","_isNullTransform","_getComputedTransformMatrixAsArray","matrixString","_getMatrix","force2D","addedToDOM","matrix","transform","baseVal","consolidate","offsetParent","_applySVGOrigin","originIsAbsolute","smooth","matrixArray","pluginToAddPropTweensTo","determinant","xOriginOld","xOrigin","yOriginOld","yOrigin","xOffsetOld","xOffset","yOffsetOld","yOffset","tx","ty","originSplit","z","rotation","rotationX","rotationY","skewX","skewY","perspective","angle","a12","a22","t1","t2","t3","a13","a23","a33","a42","a43","a32","invertedScaleX","forceCSS","xPercent","offsetWidth","yPercent","offsetHeight","transformPerspective","_renderSVGTransforms","_renderCSSTransforms","_renderNon3DTransforms","_addPxTranslate","_zeroDeg","_zeroPx","_endParenthesis","transforms","use3D","a11","a21","tan","_addRotationalPropTween","direction","cap","finalValue","_assign","_addRawTransformPTs","endCache","startCache","side","CSSPlugin","specialProp","isTransformRelated","transformPropTween","parseTransform","smoothOrigin","autoRound","checkPrefix","positionAndScale","others","all","gsapWithCSS","propIsEnumerable","propertyIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","paramsSerializer","serializedParams","hashmarkIndex","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","array","nextTick","title","browser","env","argv","binding","cwd","chdir","dir","umask","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","onCanceled","requestData","requestHeaders","cancelToken","unsubscribe","auth","username","password","unescape","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","onreadystatechange","responseURL","timeoutErrorMessage","xsrfValue","read","onDownloadProgress","onUploadProgress","upload","cancel","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","byteOffset","fromArrayLike","fromArrayBuffer","string","isEncoding","actual","fromString","checked","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","fill","allocUnsafeSlow","_isBuffer","compare","pos","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","out","toHex","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","Writer","BufferWriter","Op","State","head","tail","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","uint32","int32","fromNumber","sint32","uint64","int64","sint64","zzEncode","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","fork","reset","ldelim","finish","BufferWriter_","Reader","BufferReader","indexOutOfRange","writeLength","create_array","readLongVarint","readFixed32_end","readFixed64","skip","skipType","wireType","BufferReader_","zzDecode","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","_docEl","_body","_root","_resizeDelay","_request","_toArray","_time2","_syncInterval","_refreshing","_pointerIsDown","_prevWidth","_prevHeight","_autoRefresh","_ignoreResize","_limitCallbacks","_creatingMedia","_lastMediaTick","_refreshingAll","_startup","_proxies","_scrollers","_time1","_lastScrollTime","_enabled","_getTarget","_getGSAP","_isViewport","_getProxyProp","_getScrollFunc","sc","_vertical","_getBoundsFunc","_winOffsets","innerWidth","innerHeight","_getBounds","_maxScroll","d2","_iterateAutoRefresh","_callIfFunc","_combineFunc","f1","f2","result1","result2","_endAnimation","callbackAnimation","_abs","_scrollLeft","_scrollTop","_left","_top","_right","_bottom","_width","_height","_Right","_Left","_Top","_Bottom","_padding","_margin","_Width","_Height","_px","_horizontal","os2","scrollTo","pageXOffset","pageYOffset","_getComputedStyle","withoutTransforms","_getSize","_ref4","_getLabelRatioArray","_snapDirectional","snapIncrementOrArray","snapped","_multiListener","types","passive","_removeListener","_markerDefaults","startColor","endColor","indent","fontSize","fontWeight","toggleActions","anticipatePin","_keywords","_offsetToPx","eqIndex","_createMarker","container","_ref5","matchWidthEl","containerAnimation","useFixedPosition","isScroller","isStart","css","_isStart","innerText","_offset","_positionMarker","flipped","oppositeSide","_isFlipped","_triggers","_ids","_sync","_updateAll","_onScroll","_dispatch","_onResize","fullscreenElement","_emptyArray","_media","_onMediaChange","_revertAll","matchMedia","_revertRecorded","_refreshAll","_softRefresh","_savedStyles","media","revert","_clearScrollMemory","rec","skipRevert","refreshInits","refresh","_lastScroll","_direction","recordVelocity","scroll","update","_propNamesToCopy","_stateProps","_swapPinIn","pin","spacer","spacerState","spacerStyle","pinStyle","overflow","boxSizing","_setState","_getState","scrollerSize","markerScroller","scrollerBounds","borderWidth","scrollerMax","localOffset","globalOffset","offsets","_caScrollDist","_prefixExp","_reparent","_stOrig","_getTweenCreator","scroller","lastScroll1","lastScroll2","getScroll","getTween","initialValue","change1","change2","pinCache","snapFunc","scroll1","scroll2","markerStart","markerEnd","markerStartTrigger","markerEndTrigger","markerVars","pinOriginalState","pinActiveState","pinState","pinGetter","pinSetter","pinStart","pinChange","spacingStart","markerStartSetter","markerEndSetter","snap1","snap2","scrubTween","scrubSmooth","snapDurClamp","snapDelayedCall","prevProgress","prevScroll","prevAnimProgress","caMarkerSetter","toggleClass","onToggle","onRefresh","scrub","pinSpacing","invalidateOnRefresh","onScrubComplete","onSnapComplete","pinReparent","pinSpacer","fastScrollEnd","preventOverlaps","isToggle","scrollerCache","isViewport","pinType","onEnter","onLeave","onEnterBack","onLeaveBack","markers","onRefreshInit","getScrollerSize","_getSizeFunc","getScrollerOffsets","_getOffsetsFunc","lastSnap","scrollFunc","tweenScroll","scrollBehavior","_getClosestLabel","st","directional","getVelocity","velocity","naturalEnd","inertia","endScroll","_snap","_onInterrupt","onInterrupt","_onComplete","spacerIsNative","classList","_makePositionable","oldOnUpdate","oldParams","previous","enabled","prevRefreshing","isReverted","_swapPinOut","soft","isVertical","override","curTrigger","curPin","oppositeScroll","revertedPins","otherPinOffset","parsedEnd","parsedEndTrigger","endTrigger","pinnedContainer","triggerIndex","_pinPush","ceil","omitOffsets","_copyState","_pinOffset","endAnimation","getTrailing","forceFake","toggleState","stateChanged","toggled","isAtMax","isTakingAction","clipped","enable","disable","allowAnimation","bodyStyle","border","borderTopStyle","setInterval","hidden","limitCallbacks","ms","syncInterval","clearInterval","autoRefreshEvents","scrollerProxy","mq","clearMatchMedia","query","isInViewport","positionInViewport","referencePoint","saveStyles","safe","clearScrollMemory","maxScroll","getScrollFunc","getAll","isScrolling","snapDirectional","batch","varsCopy","interval","batchMax","proxyCallback","elements","triggers","refreshPriority","MAX_SIGNED_31_BIT_INT","commonjsGlobal","globalThis","createEventEmitter","newValue","changedBits","defaultValue","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","getUniqueId","Provider","_Component","getChildContext","componentWillReceiveProps","nextProps","oldValue","childContextTypes","PropTypes","Consumer","_Component2","getValue","observedBits","contextTypes","reactIs","REACT_STATICS","contextType","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","webm","mp4","oldIOS","MSStream","nativeWakeLock","NoSleep","_wakeLock","handleVisibilityChange","visibilityState","noSleepTimer","noSleepVideo","_addSourceToVideo","append","currentTime","dataURI","wakeLock","release","parseHandshakeResponse","messageData","binaryData","separatorIndex","responseLength","textData","for","q","A","B","D","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","E","F","refs","updater","G","H","isReactComponent","forceUpdate","I","isPureReactComponent","J","K","L","ref","__self","__source","M","$$typeof","_owner","O","P","Q","keyPrefix","S","T","U","V","escape","W","aa","X","N","Y","Z","ba","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","ReactCurrentOwner","IsSomeRendererActing","Children","only","Fragment","Profiler","PureComponent","StrictMode","Suspense","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","cloneElement","_calculateChangedBits","_currentValue","_currentValue2","_threadCount","_context","createFactory","createRef","isValidElement","_ctor","_status","_result","useCallback","useContext","useDebugValue","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","onError","da","ea","fa","ha","ia","ja","la","ma","na","oa","currentTarget","ka","pa","qa","ra","sa","extractEvents","eventTypes","ta","phasedRegistrationNames","registrationName","va","wa","dependencies","xa","ya","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","Ua","Va","xlinkHref","Wa","Xa","Sa","Ta","Ra","setAttributeNS","Ya","Za","$a","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","pb","qb","tag","_debugOwner","_debugSource","return","rb","sb","nodeName","xb","_valueTracker","setValue","stopTracking","tb","yb","zb","defaultChecked","_wrapperState","initialChecked","Ab","controlled","Bb","Cb","Db","Eb","ownerDocument","activeElement","Gb","Fb","Hb","selected","defaultSelected","disabled","Ib","dangerouslySetInnerHTML","Jb","Kb","Lb","textContent","Mb","Nb","Ob","Pb","Qb","namespaceURI","innerHTML","firstChild","MSApp","execUnsafeLocalFunction","Rb","lastChild","nodeValue","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","transition","Xb","Yb","Zb","$b","ac","bc","WeakMap","Map","cc","dc","alternate","effectTag","ec","memoizedState","dehydrated","fc","hc","sibling","gc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","mc","nc","srcElement","correspondingUseElement","oc","pc","qc","topLevelType","nativeEvent","targetInst","ancestors","rc","eventSystemFlags","containerInfo","tc","uc","has","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","Lc","pointerId","Mc","Nc","Pc","unstable_runWithPriority","hydrate","Qc","Rc","Sc","Tc","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","hd","Oc","jd","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","lineClamp","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","kd","ld","md","nd","menuitem","area","br","col","embed","hr","img","keygen","link","meta","param","track","wbr","od","pd","is","qd","rd","sd","td","ud","vd","wd","contains","compareDocumentPosition","xd","HTMLIFrameElement","contentWindow","yd","contentEditable","Bd","Cd","Dd","Ed","Fd","autoFocus","Gd","__html","Hd","Id","Jd","Kd","previousSibling","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Interface","isDefaultPrevented","defaultPrevented","returnValue","ee","eventPool","fe","destructor","de","getPooled","preventDefault","stopPropagation","cancelBubble","persist","eventPhase","bubbles","cancelable","timeStamp","isTrusted","ge","he","ie","je","ke","documentMode","le","me","ne","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","keyCode","se","ve","locale","which","te","ctrlKey","altKey","metaKey","char","ue","we","date","datetime","email","month","tel","week","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","detachEvent","He","Ie","attachEvent","Je","Ke","Le","Me","_isInputEventSupported","Ne","Oe","Alt","Control","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","clientX","clientY","pageX","pageY","shiftKey","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","We","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","defaultView","parentWindow","$e","af","bf","cf","df","select","ef","ff","gf","hf","jf","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","kf","onSelect","lf","animationName","elapsedTime","pseudoElement","mf","clipboardData","nf","of","charCode","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","rf","sf","dataTransfer","tf","touches","targetTouches","changedTouches","uf","vf","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","Af","Bf","Cf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Df","Ef","Ff","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","responders","tg","ug","updateQueue","baseState","baseQueue","shared","pending","vg","wg","suspenseConfig","xg","yg","zg","ca","Ag","Bg","Cg","Dg","Eg","Fg","Jg","_reactInternalFiber","Gg","Hg","Ig","Kg","shouldComponentUpdate","Lg","Mg","UNSAFE_componentWillReceiveProps","Ng","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","Og","Pg","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","elementType","Ug","implementation","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","memoizedProps","revealOrder","ih","responder","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","lastRenderedReducer","eagerReducer","eagerState","lastRenderedState","xh","yh","zh","Ah","destroy","deps","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","gi","pendingContext","ni","pi","qi","ii","retryTime","ji","fallback","unstable_avoidThisFallback","ki","li","isBackwards","rendering","renderingStartTime","tailExpiration","tailMode","mi","ri","si","wasMultiple","multiple","onclick","createTextNode","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","WeakSet","Set","Ci","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","focus","Ki","Li","Di","Mi","Ni","Oi","Pi","Qi","Ri","_reactRootContainer","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","cj","dj","fj","gj","kj","lj","mj","nj","oj","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","vb","Uj","Vj","Wj","default","ob","Xj","unstable_observedBits","Zj","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hk","jk","kk","unmount","form","Lj","lk","Events","findFiberByHostInstance","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","rendererPackageName","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","MessageChannel","unstable_forceFrameRate","performance","port2","port1","postMessage","sortIndex","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_wrapCallback","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","awrap","async","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Axios","mergeConfig","axios","createInstance","defaultConfig","instanceConfig","CancelToken","isCancel","VERSION","promises","spread","InterceptorManager","dispatchRequest","validator","validators","interceptors","assertOptions","boolean","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","fulfilled","rejected","responseInterceptorChain","chain","newConfig","onRejected","getUri","use","eject","transformData","throwIfCancellationRequested","throwIfRequested","fns","normalizedName","expires","domain","secure","cookie","toGMTString","decodeURIComponent","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","line","originURL","msie","urlParsingNode","resolveURL","host","hostname","port","requestURL","thing","deprecatedWarnings","formatMessage","opt","desc","schema","allowUnknown","executor","resolvePromise","onfulfilled","jsx","jsxs","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","propName","componentName","propFullName","secret","getShim","ReactPropTypes","symbol","any","arrayOf","instanceOf","objectOf","oneOf","oneOfType","shape","checkPropTypes","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Lazy","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","maxChunkLength","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","protobuf","configure","rpc","roots","ctx","s64","invalidEncoding","evt","factory","Float32Array","f32","f8b","writeFloat_f32_cpy","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloat_ieee754","writeUint","sign","exponent","readFloat_ieee754","readUint","uint","mantissa","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDouble_ieee754","off0","off1","readDouble_ieee754","moduleName","mod","eval","c1","c2","SIZE","MAX","slab","zero","low","high","toLong","mask","part0","part1","part2","writeStringBuffer","writeBytesBuffer","Service","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","endedByRPC","Parent","Class","_cache","Wrapper","_slicedToArray","_n","_d","_e","_s","allowArrayLike","it","normalCompletion","didErr","step","_e2"],"mappings":"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","file":"static/js/2.60944115.chunk.js","sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\n// These values are designed to match the ASP.NET Log Levels since that's the pattern we're emulating here.\r\n/** Indicates the severity of a log message.\r\n *\r\n * Log Levels are ordered in increasing severity. So `Debug` is more severe than `Trace`, etc.\r\n */\r\nexport enum LogLevel {\r\n /** Log level for very low severity diagnostic messages. */\r\n Trace = 0,\r\n /** Log level for low severity diagnostic messages. */\r\n Debug = 1,\r\n /** Log level for informational diagnostic messages. */\r\n Information = 2,\r\n /** Log level for diagnostic messages that indicate a non-fatal problem. */\r\n Warning = 3,\r\n /** Log level for diagnostic messages that indicate a failure in the current operation. */\r\n Error = 4,\r\n /** Log level for diagnostic messages that indicate a failure that will terminate the entire application. */\r\n Critical = 5,\r\n /** The highest possible log level. Used when configuring logging to indicate that no log messages should be emitted. */\r\n None = 6,\r\n}\r\n\r\n/** An abstraction that provides a sink for diagnostic messages. */\r\nexport interface ILogger {\r\n /** Called by the framework to emit a diagnostic message.\r\n *\r\n * @param {LogLevel} logLevel The severity level of the message.\r\n * @param {string} message The message.\r\n */\r\n log(logLevel: LogLevel, message: string): void;\r\n}\r\n","module.exports = require(\"regenerator-runtime\");\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\r\n\"use strict\";\r\nvar $protobuf = require(\"protobufjs/minimal\");\r\n// Common aliases\r\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\r\n// Exported root namespace\r\nvar $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\r\n$root.Buttplug = (function () {\r\n /**\r\n * Namespace Buttplug.\r\n * @exports Buttplug\r\n * @namespace\r\n */\r\n var Buttplug = {};\r\n /**\r\n * Endpoint enum.\r\n * @name Buttplug.Endpoint\r\n * @enum {number}\r\n * @property {number} Command=0 Command value\r\n * @property {number} Firmware=1 Firmware value\r\n * @property {number} Rx=2 Rx value\r\n * @property {number} RxAccel=3 RxAccel value\r\n * @property {number} RxBLEBattery=4 RxBLEBattery value\r\n * @property {number} RxPressure=5 RxPressure value\r\n * @property {number} RxTouch=6 RxTouch value\r\n * @property {number} Tx=7 Tx value\r\n * @property {number} TxMode=8 TxMode value\r\n * @property {number} TxShock=9 TxShock value\r\n * @property {number} TxVibrate=10 TxVibrate value\r\n * @property {number} TxVendorControl=11 TxVendorControl value\r\n * @property {number} Whitelist=12 Whitelist value\r\n * @property {number} Generic0=13 Generic0 value\r\n * @property {number} Generic1=14 Generic1 value\r\n * @property {number} Generic2=15 Generic2 value\r\n * @property {number} Generic3=16 Generic3 value\r\n * @property {number} Generic4=17 Generic4 value\r\n * @property {number} Generic5=18 Generic5 value\r\n * @property {number} Generic6=19 Generic6 value\r\n * @property {number} Generic7=20 Generic7 value\r\n * @property {number} Generic8=21 Generic8 value\r\n * @property {number} Generic9=22 Generic9 value\r\n * @property {number} Generic10=23 Generic10 value\r\n * @property {number} Generic11=24 Generic11 value\r\n * @property {number} Generic12=25 Generic12 value\r\n * @property {number} Generic13=26 Generic13 value\r\n * @property {number} Generic14=27 Generic14 value\r\n * @property {number} Generic15=28 Generic15 value\r\n * @property {number} Generic16=29 Generic16 value\r\n * @property {number} Generic17=30 Generic17 value\r\n * @property {number} Generic18=31 Generic18 value\r\n * @property {number} Generic19=32 Generic19 value\r\n * @property {number} Generic20=33 Generic20 value\r\n * @property {number} Generic21=34 Generic21 value\r\n * @property {number} Generic22=35 Generic22 value\r\n * @property {number} Generic23=36 Generic23 value\r\n * @property {number} Generic24=37 Generic24 value\r\n * @property {number} Generic25=38 Generic25 value\r\n * @property {number} Generic26=39 Generic26 value\r\n * @property {number} Generic27=40 Generic27 value\r\n * @property {number} Generic28=41 Generic28 value\r\n * @property {number} Generic29=42 Generic29 value\r\n * @property {number} Generic30=43 Generic30 value\r\n * @property {number} Generic31=44 Generic31 value\r\n */\r\n Buttplug.Endpoint = (function () {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"Command\"] = 0;\r\n values[valuesById[1] = \"Firmware\"] = 1;\r\n values[valuesById[2] = \"Rx\"] = 2;\r\n values[valuesById[3] = \"RxAccel\"] = 3;\r\n values[valuesById[4] = \"RxBLEBattery\"] = 4;\r\n values[valuesById[5] = \"RxPressure\"] = 5;\r\n values[valuesById[6] = \"RxTouch\"] = 6;\r\n values[valuesById[7] = \"Tx\"] = 7;\r\n values[valuesById[8] = \"TxMode\"] = 8;\r\n values[valuesById[9] = \"TxShock\"] = 9;\r\n values[valuesById[10] = \"TxVibrate\"] = 10;\r\n values[valuesById[11] = \"TxVendorControl\"] = 11;\r\n values[valuesById[12] = \"Whitelist\"] = 12;\r\n values[valuesById[13] = \"Generic0\"] = 13;\r\n values[valuesById[14] = \"Generic1\"] = 14;\r\n values[valuesById[15] = \"Generic2\"] = 15;\r\n values[valuesById[16] = \"Generic3\"] = 16;\r\n values[valuesById[17] = \"Generic4\"] = 17;\r\n values[valuesById[18] = \"Generic5\"] = 18;\r\n values[valuesById[19] = \"Generic6\"] = 19;\r\n values[valuesById[20] = \"Generic7\"] = 20;\r\n values[valuesById[21] = \"Generic8\"] = 21;\r\n values[valuesById[22] = \"Generic9\"] = 22;\r\n values[valuesById[23] = \"Generic10\"] = 23;\r\n values[valuesById[24] = \"Generic11\"] = 24;\r\n values[valuesById[25] = \"Generic12\"] = 25;\r\n values[valuesById[26] = \"Generic13\"] = 26;\r\n values[valuesById[27] = \"Generic14\"] = 27;\r\n values[valuesById[28] = \"Generic15\"] = 28;\r\n values[valuesById[29] = \"Generic16\"] = 29;\r\n values[valuesById[30] = \"Generic17\"] = 30;\r\n values[valuesById[31] = \"Generic18\"] = 31;\r\n values[valuesById[32] = \"Generic19\"] = 32;\r\n values[valuesById[33] = \"Generic20\"] = 33;\r\n values[valuesById[34] = \"Generic21\"] = 34;\r\n values[valuesById[35] = \"Generic22\"] = 35;\r\n values[valuesById[36] = \"Generic23\"] = 36;\r\n values[valuesById[37] = \"Generic24\"] = 37;\r\n values[valuesById[38] = \"Generic25\"] = 38;\r\n values[valuesById[39] = \"Generic26\"] = 39;\r\n values[valuesById[40] = \"Generic27\"] = 40;\r\n values[valuesById[41] = \"Generic28\"] = 41;\r\n values[valuesById[42] = \"Generic29\"] = 42;\r\n values[valuesById[43] = \"Generic30\"] = 43;\r\n values[valuesById[44] = \"Generic31\"] = 44;\r\n return values;\r\n })();\r\n Buttplug.ClientMessage = (function () {\r\n /**\r\n * Properties of a ClientMessage.\r\n * @memberof Buttplug\r\n * @interface IClientMessage\r\n * @property {number|null} [id] ClientMessage id\r\n * @property {Buttplug.ClientMessage.IFFIMessage|null} [message] ClientMessage message\r\n */\r\n /**\r\n * Constructs a new ClientMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a ClientMessage.\r\n * @implements IClientMessage\r\n * @constructor\r\n * @param {Buttplug.IClientMessage=} [properties] Properties to set\r\n */\r\n function ClientMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * ClientMessage id.\r\n * @member {number} id\r\n * @memberof Buttplug.ClientMessage\r\n * @instance\r\n */\r\n ClientMessage.prototype.id = 0;\r\n /**\r\n * ClientMessage message.\r\n * @member {Buttplug.ClientMessage.IFFIMessage|null|undefined} message\r\n * @memberof Buttplug.ClientMessage\r\n * @instance\r\n */\r\n ClientMessage.prototype.message = null;\r\n /**\r\n * Creates a new ClientMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.IClientMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage} ClientMessage instance\r\n */\r\n ClientMessage.create = function create(properties) {\r\n return new ClientMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified ClientMessage message. Does not implicitly {@link Buttplug.ClientMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.IClientMessage} message ClientMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ClientMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.id != null && Object.hasOwnProperty.call(message, \"id\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.id);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n $root.Buttplug.ClientMessage.FFIMessage.encode(message.message, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified ClientMessage message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.IClientMessage} message ClientMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ClientMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a ClientMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage} ClientMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ClientMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.id = reader.uint32();\r\n break;\r\n case 2:\r\n message.message = $root.Buttplug.ClientMessage.FFIMessage.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a ClientMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage} ClientMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ClientMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a ClientMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ClientMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n if (!$util.isInteger(message.id))\r\n return \"id: integer expected\";\r\n if (message.message != null && message.hasOwnProperty(\"message\")) {\r\n var error = $root.Buttplug.ClientMessage.FFIMessage.verify(message.message);\r\n if (error)\r\n return \"message.\" + error;\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a ClientMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage} ClientMessage\r\n */\r\n ClientMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage)\r\n return object;\r\n var message = new $root.Buttplug.ClientMessage();\r\n if (object.id != null)\r\n message.id = object.id >>> 0;\r\n if (object.message != null) {\r\n if (typeof object.message !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.message: object expected\");\r\n message.message = $root.Buttplug.ClientMessage.FFIMessage.fromObject(object.message);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a ClientMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage} message ClientMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n ClientMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.id = 0;\r\n object.message = null;\r\n }\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n object.id = message.id;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = $root.Buttplug.ClientMessage.FFIMessage.toObject(message.message, options);\r\n return object;\r\n };\r\n /**\r\n * Converts this ClientMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n ClientMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n /**\r\n * DeviceCommunicationManagerTypes enum.\r\n * @name Buttplug.ClientMessage.DeviceCommunicationManagerTypes\r\n * @enum {number}\r\n * @property {number} All=0 All value\r\n * @property {number} Btleplug=1 Btleplug value\r\n * @property {number} XInput=2 XInput value\r\n * @property {number} SerialPort=4 SerialPort value\r\n * @property {number} LovenseHIDDongle=8 LovenseHIDDongle value\r\n * @property {number} LovenseSerialDongle=16 LovenseSerialDongle value\r\n */\r\n ClientMessage.DeviceCommunicationManagerTypes = (function () {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"All\"] = 0;\r\n values[valuesById[1] = \"Btleplug\"] = 1;\r\n values[valuesById[2] = \"XInput\"] = 2;\r\n values[valuesById[4] = \"SerialPort\"] = 4;\r\n values[valuesById[8] = \"LovenseHIDDongle\"] = 8;\r\n values[valuesById[16] = \"LovenseSerialDongle\"] = 16;\r\n return values;\r\n })();\r\n ClientMessage.ConnectLocal = (function () {\r\n /**\r\n * Properties of a ConnectLocal.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IConnectLocal\r\n * @property {string|null} [serverName] ConnectLocal serverName\r\n * @property {number|null} [maxPingTime] ConnectLocal maxPingTime\r\n * @property {boolean|null} [allowRawMessages] ConnectLocal allowRawMessages\r\n * @property {string|null} [deviceConfigurationJson] ConnectLocal deviceConfigurationJson\r\n * @property {string|null} [userDeviceConfigurationJson] ConnectLocal userDeviceConfigurationJson\r\n * @property {number|null} [commManagerTypes] ConnectLocal commManagerTypes\r\n */\r\n /**\r\n * Constructs a new ConnectLocal.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a ConnectLocal.\r\n * @implements IConnectLocal\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IConnectLocal=} [properties] Properties to set\r\n */\r\n function ConnectLocal(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * ConnectLocal serverName.\r\n * @member {string} serverName\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.serverName = \"\";\r\n /**\r\n * ConnectLocal maxPingTime.\r\n * @member {number} maxPingTime\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.maxPingTime = 0;\r\n /**\r\n * ConnectLocal allowRawMessages.\r\n * @member {boolean} allowRawMessages\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.allowRawMessages = false;\r\n /**\r\n * ConnectLocal deviceConfigurationJson.\r\n * @member {string} deviceConfigurationJson\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.deviceConfigurationJson = \"\";\r\n /**\r\n * ConnectLocal userDeviceConfigurationJson.\r\n * @member {string} userDeviceConfigurationJson\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.userDeviceConfigurationJson = \"\";\r\n /**\r\n * ConnectLocal commManagerTypes.\r\n * @member {number} commManagerTypes\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n */\r\n ConnectLocal.prototype.commManagerTypes = 0;\r\n /**\r\n * Creates a new ConnectLocal instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectLocal=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal instance\r\n */\r\n ConnectLocal.create = function create(properties) {\r\n return new ConnectLocal(properties);\r\n };\r\n /**\r\n * Encodes the specified ConnectLocal message. Does not implicitly {@link Buttplug.ClientMessage.ConnectLocal.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectLocal} message ConnectLocal message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectLocal.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.serverName != null && Object.hasOwnProperty.call(message, \"serverName\"))\r\n writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.serverName);\r\n if (message.maxPingTime != null && Object.hasOwnProperty.call(message, \"maxPingTime\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).uint32(message.maxPingTime);\r\n if (message.allowRawMessages != null && Object.hasOwnProperty.call(message, \"allowRawMessages\"))\r\n writer.uint32(/* id 3, wireType 0 =*/ 24).bool(message.allowRawMessages);\r\n if (message.deviceConfigurationJson != null && Object.hasOwnProperty.call(message, \"deviceConfigurationJson\"))\r\n writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.deviceConfigurationJson);\r\n if (message.userDeviceConfigurationJson != null && Object.hasOwnProperty.call(message, \"userDeviceConfigurationJson\"))\r\n writer.uint32(/* id 5, wireType 2 =*/ 42).string(message.userDeviceConfigurationJson);\r\n if (message.commManagerTypes != null && Object.hasOwnProperty.call(message, \"commManagerTypes\"))\r\n writer.uint32(/* id 6, wireType 0 =*/ 48).uint32(message.commManagerTypes);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified ConnectLocal message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.ConnectLocal.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectLocal} message ConnectLocal message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectLocal.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a ConnectLocal message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectLocal.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.ConnectLocal();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.serverName = reader.string();\r\n break;\r\n case 2:\r\n message.maxPingTime = reader.uint32();\r\n break;\r\n case 3:\r\n message.allowRawMessages = reader.bool();\r\n break;\r\n case 4:\r\n message.deviceConfigurationJson = reader.string();\r\n break;\r\n case 5:\r\n message.userDeviceConfigurationJson = reader.string();\r\n break;\r\n case 6:\r\n message.commManagerTypes = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a ConnectLocal message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectLocal.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a ConnectLocal message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ConnectLocal.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.serverName != null && message.hasOwnProperty(\"serverName\"))\r\n if (!$util.isString(message.serverName))\r\n return \"serverName: string expected\";\r\n if (message.maxPingTime != null && message.hasOwnProperty(\"maxPingTime\"))\r\n if (!$util.isInteger(message.maxPingTime))\r\n return \"maxPingTime: integer expected\";\r\n if (message.allowRawMessages != null && message.hasOwnProperty(\"allowRawMessages\"))\r\n if (typeof message.allowRawMessages !== \"boolean\")\r\n return \"allowRawMessages: boolean expected\";\r\n if (message.deviceConfigurationJson != null && message.hasOwnProperty(\"deviceConfigurationJson\"))\r\n if (!$util.isString(message.deviceConfigurationJson))\r\n return \"deviceConfigurationJson: string expected\";\r\n if (message.userDeviceConfigurationJson != null && message.hasOwnProperty(\"userDeviceConfigurationJson\"))\r\n if (!$util.isString(message.userDeviceConfigurationJson))\r\n return \"userDeviceConfigurationJson: string expected\";\r\n if (message.commManagerTypes != null && message.hasOwnProperty(\"commManagerTypes\"))\r\n if (!$util.isInteger(message.commManagerTypes))\r\n return \"commManagerTypes: integer expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a ConnectLocal message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.ConnectLocal} ConnectLocal\r\n */\r\n ConnectLocal.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.ConnectLocal)\r\n return object;\r\n var message = new $root.Buttplug.ClientMessage.ConnectLocal();\r\n if (object.serverName != null)\r\n message.serverName = String(object.serverName);\r\n if (object.maxPingTime != null)\r\n message.maxPingTime = object.maxPingTime >>> 0;\r\n if (object.allowRawMessages != null)\r\n message.allowRawMessages = Boolean(object.allowRawMessages);\r\n if (object.deviceConfigurationJson != null)\r\n message.deviceConfigurationJson = String(object.deviceConfigurationJson);\r\n if (object.userDeviceConfigurationJson != null)\r\n message.userDeviceConfigurationJson = String(object.userDeviceConfigurationJson);\r\n if (object.commManagerTypes != null)\r\n message.commManagerTypes = object.commManagerTypes >>> 0;\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a ConnectLocal message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @static\r\n * @param {Buttplug.ClientMessage.ConnectLocal} message ConnectLocal\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n ConnectLocal.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.serverName = \"\";\r\n object.maxPingTime = 0;\r\n object.allowRawMessages = false;\r\n object.deviceConfigurationJson = \"\";\r\n object.userDeviceConfigurationJson = \"\";\r\n object.commManagerTypes = 0;\r\n }\r\n if (message.serverName != null && message.hasOwnProperty(\"serverName\"))\r\n object.serverName = message.serverName;\r\n if (message.maxPingTime != null && message.hasOwnProperty(\"maxPingTime\"))\r\n object.maxPingTime = message.maxPingTime;\r\n if (message.allowRawMessages != null && message.hasOwnProperty(\"allowRawMessages\"))\r\n object.allowRawMessages = message.allowRawMessages;\r\n if (message.deviceConfigurationJson != null && message.hasOwnProperty(\"deviceConfigurationJson\"))\r\n object.deviceConfigurationJson = message.deviceConfigurationJson;\r\n if (message.userDeviceConfigurationJson != null && message.hasOwnProperty(\"userDeviceConfigurationJson\"))\r\n object.userDeviceConfigurationJson = message.userDeviceConfigurationJson;\r\n if (message.commManagerTypes != null && message.hasOwnProperty(\"commManagerTypes\"))\r\n object.commManagerTypes = message.commManagerTypes;\r\n return object;\r\n };\r\n /**\r\n * Converts this ConnectLocal to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.ConnectLocal\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n ConnectLocal.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return ConnectLocal;\r\n })();\r\n ClientMessage.ConnectWebsocket = (function () {\r\n /**\r\n * Properties of a ConnectWebsocket.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IConnectWebsocket\r\n * @property {string|null} [address] ConnectWebsocket address\r\n * @property {boolean|null} [bypassCertVerification] ConnectWebsocket bypassCertVerification\r\n */\r\n /**\r\n * Constructs a new ConnectWebsocket.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a ConnectWebsocket.\r\n * @implements IConnectWebsocket\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket=} [properties] Properties to set\r\n */\r\n function ConnectWebsocket(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * ConnectWebsocket address.\r\n * @member {string} address\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @instance\r\n */\r\n ConnectWebsocket.prototype.address = \"\";\r\n /**\r\n * ConnectWebsocket bypassCertVerification.\r\n * @member {boolean} bypassCertVerification\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @instance\r\n */\r\n ConnectWebsocket.prototype.bypassCertVerification = false;\r\n /**\r\n * Creates a new ConnectWebsocket instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket instance\r\n */\r\n ConnectWebsocket.create = function create(properties) {\r\n return new ConnectWebsocket(properties);\r\n };\r\n /**\r\n * Encodes the specified ConnectWebsocket message. Does not implicitly {@link Buttplug.ClientMessage.ConnectWebsocket.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket} message ConnectWebsocket message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectWebsocket.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.address != null && Object.hasOwnProperty.call(message, \"address\"))\r\n writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.address);\r\n if (message.bypassCertVerification != null && Object.hasOwnProperty.call(message, \"bypassCertVerification\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).bool(message.bypassCertVerification);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified ConnectWebsocket message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.ConnectWebsocket.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.IConnectWebsocket} message ConnectWebsocket message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ConnectWebsocket.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a ConnectWebsocket message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectWebsocket.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.ConnectWebsocket();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.address = reader.string();\r\n break;\r\n case 2:\r\n message.bypassCertVerification = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a ConnectWebsocket message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ConnectWebsocket.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a ConnectWebsocket message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ConnectWebsocket.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.address != null && message.hasOwnProperty(\"address\"))\r\n if (!$util.isString(message.address))\r\n return \"address: string expected\";\r\n if (message.bypassCertVerification != null && message.hasOwnProperty(\"bypassCertVerification\"))\r\n if (typeof message.bypassCertVerification !== \"boolean\")\r\n return \"bypassCertVerification: boolean expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a ConnectWebsocket message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.ConnectWebsocket} ConnectWebsocket\r\n */\r\n ConnectWebsocket.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.ConnectWebsocket)\r\n return object;\r\n var message = new $root.Buttplug.ClientMessage.ConnectWebsocket();\r\n if (object.address != null)\r\n message.address = String(object.address);\r\n if (object.bypassCertVerification != null)\r\n message.bypassCertVerification = Boolean(object.bypassCertVerification);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a ConnectWebsocket message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @static\r\n * @param {Buttplug.ClientMessage.ConnectWebsocket} message ConnectWebsocket\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n ConnectWebsocket.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.address = \"\";\r\n object.bypassCertVerification = false;\r\n }\r\n if (message.address != null && message.hasOwnProperty(\"address\"))\r\n object.address = message.address;\r\n if (message.bypassCertVerification != null && message.hasOwnProperty(\"bypassCertVerification\"))\r\n object.bypassCertVerification = message.bypassCertVerification;\r\n return object;\r\n };\r\n /**\r\n * Converts this ConnectWebsocket to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.ConnectWebsocket\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n ConnectWebsocket.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return ConnectWebsocket;\r\n })();\r\n ClientMessage.StartScanning = (function () {\r\n /**\r\n * Properties of a StartScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IStartScanning\r\n */\r\n /**\r\n * Constructs a new StartScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a StartScanning.\r\n * @implements IStartScanning\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IStartScanning=} [properties] Properties to set\r\n */\r\n function StartScanning(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new StartScanning instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStartScanning=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning instance\r\n */\r\n StartScanning.create = function create(properties) {\r\n return new StartScanning(properties);\r\n };\r\n /**\r\n * Encodes the specified StartScanning message. Does not implicitly {@link Buttplug.ClientMessage.StartScanning.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStartScanning} message StartScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StartScanning.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified StartScanning message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.StartScanning.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStartScanning} message StartScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StartScanning.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a StartScanning message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StartScanning.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.StartScanning();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a StartScanning message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StartScanning.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a StartScanning message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StartScanning.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a StartScanning message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.StartScanning} StartScanning\r\n */\r\n StartScanning.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.StartScanning)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.StartScanning();\r\n };\r\n /**\r\n * Creates a plain object from a StartScanning message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.StartScanning} message StartScanning\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n StartScanning.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this StartScanning to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.StartScanning\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n StartScanning.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return StartScanning;\r\n })();\r\n ClientMessage.StopScanning = (function () {\r\n /**\r\n * Properties of a StopScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IStopScanning\r\n */\r\n /**\r\n * Constructs a new StopScanning.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a StopScanning.\r\n * @implements IStopScanning\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IStopScanning=} [properties] Properties to set\r\n */\r\n function StopScanning(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new StopScanning instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopScanning=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning instance\r\n */\r\n StopScanning.create = function create(properties) {\r\n return new StopScanning(properties);\r\n };\r\n /**\r\n * Encodes the specified StopScanning message. Does not implicitly {@link Buttplug.ClientMessage.StopScanning.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopScanning} message StopScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopScanning.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified StopScanning message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.StopScanning.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopScanning} message StopScanning message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopScanning.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a StopScanning message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopScanning.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.StopScanning();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a StopScanning message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopScanning.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a StopScanning message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StopScanning.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a StopScanning message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.StopScanning} StopScanning\r\n */\r\n StopScanning.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.StopScanning)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.StopScanning();\r\n };\r\n /**\r\n * Creates a plain object from a StopScanning message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @static\r\n * @param {Buttplug.ClientMessage.StopScanning} message StopScanning\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n StopScanning.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this StopScanning to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.StopScanning\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n StopScanning.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return StopScanning;\r\n })();\r\n ClientMessage.StopAllDevices = (function () {\r\n /**\r\n * Properties of a StopAllDevices.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IStopAllDevices\r\n */\r\n /**\r\n * Constructs a new StopAllDevices.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a StopAllDevices.\r\n * @implements IStopAllDevices\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IStopAllDevices=} [properties] Properties to set\r\n */\r\n function StopAllDevices(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new StopAllDevices instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopAllDevices=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices instance\r\n */\r\n StopAllDevices.create = function create(properties) {\r\n return new StopAllDevices(properties);\r\n };\r\n /**\r\n * Encodes the specified StopAllDevices message. Does not implicitly {@link Buttplug.ClientMessage.StopAllDevices.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopAllDevices} message StopAllDevices message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopAllDevices.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified StopAllDevices message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.StopAllDevices.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.IStopAllDevices} message StopAllDevices message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopAllDevices.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a StopAllDevices message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopAllDevices.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.StopAllDevices();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a StopAllDevices message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopAllDevices.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a StopAllDevices message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StopAllDevices.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a StopAllDevices message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.StopAllDevices} StopAllDevices\r\n */\r\n StopAllDevices.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.StopAllDevices)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.StopAllDevices();\r\n };\r\n /**\r\n * Creates a plain object from a StopAllDevices message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @static\r\n * @param {Buttplug.ClientMessage.StopAllDevices} message StopAllDevices\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n StopAllDevices.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this StopAllDevices to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.StopAllDevices\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n StopAllDevices.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return StopAllDevices;\r\n })();\r\n ClientMessage.Disconnect = (function () {\r\n /**\r\n * Properties of a Disconnect.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IDisconnect\r\n */\r\n /**\r\n * Constructs a new Disconnect.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a Disconnect.\r\n * @implements IDisconnect\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IDisconnect=} [properties] Properties to set\r\n */\r\n function Disconnect(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new Disconnect instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.IDisconnect=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect instance\r\n */\r\n Disconnect.create = function create(properties) {\r\n return new Disconnect(properties);\r\n };\r\n /**\r\n * Encodes the specified Disconnect message. Does not implicitly {@link Buttplug.ClientMessage.Disconnect.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified Disconnect message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.Disconnect.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.Disconnect();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a Disconnect message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Disconnect.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a Disconnect message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.Disconnect} Disconnect\r\n */\r\n Disconnect.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.Disconnect)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.Disconnect();\r\n };\r\n /**\r\n * Creates a plain object from a Disconnect message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ClientMessage.Disconnect} message Disconnect\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n Disconnect.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this Disconnect to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.Disconnect\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n Disconnect.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return Disconnect;\r\n })();\r\n ClientMessage.Ping = (function () {\r\n /**\r\n * Properties of a Ping.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IPing\r\n */\r\n /**\r\n * Constructs a new Ping.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a Ping.\r\n * @implements IPing\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IPing=} [properties] Properties to set\r\n */\r\n function Ping(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new Ping instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.IPing=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.Ping} Ping instance\r\n */\r\n Ping.create = function create(properties) {\r\n return new Ping(properties);\r\n };\r\n /**\r\n * Encodes the specified Ping message. Does not implicitly {@link Buttplug.ClientMessage.Ping.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.IPing} message Ping message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ping.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified Ping message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.Ping.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.IPing} message Ping message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ping.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a Ping message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.Ping} Ping\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ping.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.Ping();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a Ping message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.Ping} Ping\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ping.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a Ping message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Ping.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a Ping message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.Ping} Ping\r\n */\r\n Ping.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.Ping)\r\n return object;\r\n return new $root.Buttplug.ClientMessage.Ping();\r\n };\r\n /**\r\n * Creates a plain object from a Ping message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @static\r\n * @param {Buttplug.ClientMessage.Ping} message Ping\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n Ping.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this Ping to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.Ping\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n Ping.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return Ping;\r\n })();\r\n ClientMessage.FFIMessage = (function () {\r\n /**\r\n * Properties of a FFIMessage.\r\n * @memberof Buttplug.ClientMessage\r\n * @interface IFFIMessage\r\n * @property {Buttplug.ClientMessage.IConnectLocal|null} [connectLocal] FFIMessage connectLocal\r\n * @property {Buttplug.ClientMessage.IConnectWebsocket|null} [connectWebsocket] FFIMessage connectWebsocket\r\n * @property {Buttplug.ClientMessage.IStartScanning|null} [startScanning] FFIMessage startScanning\r\n * @property {Buttplug.ClientMessage.IStopScanning|null} [stopScanning] FFIMessage stopScanning\r\n * @property {Buttplug.ClientMessage.IStopAllDevices|null} [stopAllDevices] FFIMessage stopAllDevices\r\n * @property {Buttplug.ClientMessage.IDisconnect|null} [disconnect] FFIMessage disconnect\r\n * @property {Buttplug.ClientMessage.IPing|null} [ping] FFIMessage ping\r\n */\r\n /**\r\n * Constructs a new FFIMessage.\r\n * @memberof Buttplug.ClientMessage\r\n * @classdesc Represents a FFIMessage.\r\n * @implements IFFIMessage\r\n * @constructor\r\n * @param {Buttplug.ClientMessage.IFFIMessage=} [properties] Properties to set\r\n */\r\n function FFIMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * FFIMessage connectLocal.\r\n * @member {Buttplug.ClientMessage.IConnectLocal|null|undefined} connectLocal\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.connectLocal = null;\r\n /**\r\n * FFIMessage connectWebsocket.\r\n * @member {Buttplug.ClientMessage.IConnectWebsocket|null|undefined} connectWebsocket\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.connectWebsocket = null;\r\n /**\r\n * FFIMessage startScanning.\r\n * @member {Buttplug.ClientMessage.IStartScanning|null|undefined} startScanning\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.startScanning = null;\r\n /**\r\n * FFIMessage stopScanning.\r\n * @member {Buttplug.ClientMessage.IStopScanning|null|undefined} stopScanning\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.stopScanning = null;\r\n /**\r\n * FFIMessage stopAllDevices.\r\n * @member {Buttplug.ClientMessage.IStopAllDevices|null|undefined} stopAllDevices\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.stopAllDevices = null;\r\n /**\r\n * FFIMessage disconnect.\r\n * @member {Buttplug.ClientMessage.IDisconnect|null|undefined} disconnect\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.disconnect = null;\r\n /**\r\n * FFIMessage ping.\r\n * @member {Buttplug.ClientMessage.IPing|null|undefined} ping\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.ping = null;\r\n // OneOf field names bound to virtual getters and setters\r\n var $oneOfFields;\r\n /**\r\n * FFIMessage msg.\r\n * @member {\"connectLocal\"|\"connectWebsocket\"|\"startScanning\"|\"stopScanning\"|\"stopAllDevices\"|\"disconnect\"|\"ping\"|undefined} msg\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n */\r\n Object.defineProperty(FFIMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"connectLocal\", \"connectWebsocket\", \"startScanning\", \"stopScanning\", \"stopAllDevices\", \"disconnect\", \"ping\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n /**\r\n * Creates a new FFIMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.IFFIMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage instance\r\n */\r\n FFIMessage.create = function create(properties) {\r\n return new FFIMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified FFIMessage message. Does not implicitly {@link Buttplug.ClientMessage.FFIMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.connectLocal != null && Object.hasOwnProperty.call(message, \"connectLocal\"))\r\n $root.Buttplug.ClientMessage.ConnectLocal.encode(message.connectLocal, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n if (message.connectWebsocket != null && Object.hasOwnProperty.call(message, \"connectWebsocket\"))\r\n $root.Buttplug.ClientMessage.ConnectWebsocket.encode(message.connectWebsocket, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n if (message.startScanning != null && Object.hasOwnProperty.call(message, \"startScanning\"))\r\n $root.Buttplug.ClientMessage.StartScanning.encode(message.startScanning, writer.uint32(/* id 3, wireType 2 =*/ 26).fork()).ldelim();\r\n if (message.stopScanning != null && Object.hasOwnProperty.call(message, \"stopScanning\"))\r\n $root.Buttplug.ClientMessage.StopScanning.encode(message.stopScanning, writer.uint32(/* id 4, wireType 2 =*/ 34).fork()).ldelim();\r\n if (message.stopAllDevices != null && Object.hasOwnProperty.call(message, \"stopAllDevices\"))\r\n $root.Buttplug.ClientMessage.StopAllDevices.encode(message.stopAllDevices, writer.uint32(/* id 5, wireType 2 =*/ 42).fork()).ldelim();\r\n if (message.disconnect != null && Object.hasOwnProperty.call(message, \"disconnect\"))\r\n $root.Buttplug.ClientMessage.Disconnect.encode(message.disconnect, writer.uint32(/* id 6, wireType 2 =*/ 50).fork()).ldelim();\r\n if (message.ping != null && Object.hasOwnProperty.call(message, \"ping\"))\r\n $root.Buttplug.ClientMessage.Ping.encode(message.ping, writer.uint32(/* id 7, wireType 2 =*/ 58).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified FFIMessage message, length delimited. Does not implicitly {@link Buttplug.ClientMessage.FFIMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ClientMessage.FFIMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.connectLocal = $root.Buttplug.ClientMessage.ConnectLocal.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.connectWebsocket = $root.Buttplug.ClientMessage.ConnectWebsocket.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.startScanning = $root.Buttplug.ClientMessage.StartScanning.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.stopScanning = $root.Buttplug.ClientMessage.StopScanning.decode(reader, reader.uint32());\r\n break;\r\n case 5:\r\n message.stopAllDevices = $root.Buttplug.ClientMessage.StopAllDevices.decode(reader, reader.uint32());\r\n break;\r\n case 6:\r\n message.disconnect = $root.Buttplug.ClientMessage.Disconnect.decode(reader, reader.uint32());\r\n break;\r\n case 7:\r\n message.ping = $root.Buttplug.ClientMessage.Ping.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a FFIMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n FFIMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n var properties = {};\r\n if (message.connectLocal != null && message.hasOwnProperty(\"connectLocal\")) {\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.ConnectLocal.verify(message.connectLocal);\r\n if (error)\r\n return \"connectLocal.\" + error;\r\n }\r\n }\r\n if (message.connectWebsocket != null && message.hasOwnProperty(\"connectWebsocket\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.ConnectWebsocket.verify(message.connectWebsocket);\r\n if (error)\r\n return \"connectWebsocket.\" + error;\r\n }\r\n }\r\n if (message.startScanning != null && message.hasOwnProperty(\"startScanning\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.StartScanning.verify(message.startScanning);\r\n if (error)\r\n return \"startScanning.\" + error;\r\n }\r\n }\r\n if (message.stopScanning != null && message.hasOwnProperty(\"stopScanning\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.StopScanning.verify(message.stopScanning);\r\n if (error)\r\n return \"stopScanning.\" + error;\r\n }\r\n }\r\n if (message.stopAllDevices != null && message.hasOwnProperty(\"stopAllDevices\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.StopAllDevices.verify(message.stopAllDevices);\r\n if (error)\r\n return \"stopAllDevices.\" + error;\r\n }\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.Disconnect.verify(message.disconnect);\r\n if (error)\r\n return \"disconnect.\" + error;\r\n }\r\n }\r\n if (message.ping != null && message.hasOwnProperty(\"ping\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ClientMessage.Ping.verify(message.ping);\r\n if (error)\r\n return \"ping.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a FFIMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ClientMessage.FFIMessage} FFIMessage\r\n */\r\n FFIMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ClientMessage.FFIMessage)\r\n return object;\r\n var message = new $root.Buttplug.ClientMessage.FFIMessage();\r\n if (object.connectLocal != null) {\r\n if (typeof object.connectLocal !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.connectLocal: object expected\");\r\n message.connectLocal = $root.Buttplug.ClientMessage.ConnectLocal.fromObject(object.connectLocal);\r\n }\r\n if (object.connectWebsocket != null) {\r\n if (typeof object.connectWebsocket !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.connectWebsocket: object expected\");\r\n message.connectWebsocket = $root.Buttplug.ClientMessage.ConnectWebsocket.fromObject(object.connectWebsocket);\r\n }\r\n if (object.startScanning != null) {\r\n if (typeof object.startScanning !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.startScanning: object expected\");\r\n message.startScanning = $root.Buttplug.ClientMessage.StartScanning.fromObject(object.startScanning);\r\n }\r\n if (object.stopScanning != null) {\r\n if (typeof object.stopScanning !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.stopScanning: object expected\");\r\n message.stopScanning = $root.Buttplug.ClientMessage.StopScanning.fromObject(object.stopScanning);\r\n }\r\n if (object.stopAllDevices != null) {\r\n if (typeof object.stopAllDevices !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.stopAllDevices: object expected\");\r\n message.stopAllDevices = $root.Buttplug.ClientMessage.StopAllDevices.fromObject(object.stopAllDevices);\r\n }\r\n if (object.disconnect != null) {\r\n if (typeof object.disconnect !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.disconnect: object expected\");\r\n message.disconnect = $root.Buttplug.ClientMessage.Disconnect.fromObject(object.disconnect);\r\n }\r\n if (object.ping != null) {\r\n if (typeof object.ping !== \"object\")\r\n throw TypeError(\".Buttplug.ClientMessage.FFIMessage.ping: object expected\");\r\n message.ping = $root.Buttplug.ClientMessage.Ping.fromObject(object.ping);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a FFIMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ClientMessage.FFIMessage} message FFIMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n FFIMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (message.connectLocal != null && message.hasOwnProperty(\"connectLocal\")) {\r\n object.connectLocal = $root.Buttplug.ClientMessage.ConnectLocal.toObject(message.connectLocal, options);\r\n if (options.oneofs)\r\n object.msg = \"connectLocal\";\r\n }\r\n if (message.connectWebsocket != null && message.hasOwnProperty(\"connectWebsocket\")) {\r\n object.connectWebsocket = $root.Buttplug.ClientMessage.ConnectWebsocket.toObject(message.connectWebsocket, options);\r\n if (options.oneofs)\r\n object.msg = \"connectWebsocket\";\r\n }\r\n if (message.startScanning != null && message.hasOwnProperty(\"startScanning\")) {\r\n object.startScanning = $root.Buttplug.ClientMessage.StartScanning.toObject(message.startScanning, options);\r\n if (options.oneofs)\r\n object.msg = \"startScanning\";\r\n }\r\n if (message.stopScanning != null && message.hasOwnProperty(\"stopScanning\")) {\r\n object.stopScanning = $root.Buttplug.ClientMessage.StopScanning.toObject(message.stopScanning, options);\r\n if (options.oneofs)\r\n object.msg = \"stopScanning\";\r\n }\r\n if (message.stopAllDevices != null && message.hasOwnProperty(\"stopAllDevices\")) {\r\n object.stopAllDevices = $root.Buttplug.ClientMessage.StopAllDevices.toObject(message.stopAllDevices, options);\r\n if (options.oneofs)\r\n object.msg = \"stopAllDevices\";\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n object.disconnect = $root.Buttplug.ClientMessage.Disconnect.toObject(message.disconnect, options);\r\n if (options.oneofs)\r\n object.msg = \"disconnect\";\r\n }\r\n if (message.ping != null && message.hasOwnProperty(\"ping\")) {\r\n object.ping = $root.Buttplug.ClientMessage.Ping.toObject(message.ping, options);\r\n if (options.oneofs)\r\n object.msg = \"ping\";\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this FFIMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ClientMessage.FFIMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n FFIMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return FFIMessage;\r\n })();\r\n return ClientMessage;\r\n })();\r\n Buttplug.DeviceMessage = (function () {\r\n /**\r\n * Properties of a DeviceMessage.\r\n * @memberof Buttplug\r\n * @interface IDeviceMessage\r\n * @property {number|null} [id] DeviceMessage id\r\n * @property {number|null} [index] DeviceMessage index\r\n * @property {Buttplug.DeviceMessage.IFFIMessage|null} [message] DeviceMessage message\r\n */\r\n /**\r\n * Constructs a new DeviceMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a DeviceMessage.\r\n * @implements IDeviceMessage\r\n * @constructor\r\n * @param {Buttplug.IDeviceMessage=} [properties] Properties to set\r\n */\r\n function DeviceMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * DeviceMessage id.\r\n * @member {number} id\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n */\r\n DeviceMessage.prototype.id = 0;\r\n /**\r\n * DeviceMessage index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n */\r\n DeviceMessage.prototype.index = 0;\r\n /**\r\n * DeviceMessage message.\r\n * @member {Buttplug.DeviceMessage.IFFIMessage|null|undefined} message\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n */\r\n DeviceMessage.prototype.message = null;\r\n /**\r\n * Creates a new DeviceMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.IDeviceMessage=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage instance\r\n */\r\n DeviceMessage.create = function create(properties) {\r\n return new DeviceMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified DeviceMessage message. Does not implicitly {@link Buttplug.DeviceMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.IDeviceMessage} message DeviceMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.id != null && Object.hasOwnProperty.call(message, \"id\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.id);\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).uint32(message.index);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n $root.Buttplug.DeviceMessage.FFIMessage.encode(message.message, writer.uint32(/* id 3, wireType 2 =*/ 26).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified DeviceMessage message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.IDeviceMessage} message DeviceMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a DeviceMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.id = reader.uint32();\r\n break;\r\n case 2:\r\n message.index = reader.uint32();\r\n break;\r\n case 3:\r\n message.message = $root.Buttplug.DeviceMessage.FFIMessage.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a DeviceMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a DeviceMessage message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n if (!$util.isInteger(message.id))\r\n return \"id: integer expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.message != null && message.hasOwnProperty(\"message\")) {\r\n var error = $root.Buttplug.DeviceMessage.FFIMessage.verify(message.message);\r\n if (error)\r\n return \"message.\" + error;\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a DeviceMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage} DeviceMessage\r\n */\r\n DeviceMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage();\r\n if (object.id != null)\r\n message.id = object.id >>> 0;\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.message != null) {\r\n if (typeof object.message !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.message: object expected\");\r\n message.message = $root.Buttplug.DeviceMessage.FFIMessage.fromObject(object.message);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a DeviceMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage} message DeviceMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n DeviceMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.id = 0;\r\n object.index = 0;\r\n object.message = null;\r\n }\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n object.id = message.id;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = $root.Buttplug.DeviceMessage.FFIMessage.toObject(message.message, options);\r\n return object;\r\n };\r\n /**\r\n * Converts this DeviceMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n DeviceMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n DeviceMessage.VibrateComponent = (function () {\r\n /**\r\n * Properties of a VibrateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IVibrateComponent\r\n * @property {number|null} [index] VibrateComponent index\r\n * @property {number|null} [speed] VibrateComponent speed\r\n */\r\n /**\r\n * Constructs a new VibrateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a VibrateComponent.\r\n * @implements IVibrateComponent\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent=} [properties] Properties to set\r\n */\r\n function VibrateComponent(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * VibrateComponent index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @instance\r\n */\r\n VibrateComponent.prototype.index = 0;\r\n /**\r\n * VibrateComponent speed.\r\n * @member {number} speed\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @instance\r\n */\r\n VibrateComponent.prototype.speed = 0;\r\n /**\r\n * Creates a new VibrateComponent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent instance\r\n */\r\n VibrateComponent.create = function create(properties) {\r\n return new VibrateComponent(properties);\r\n };\r\n /**\r\n * Encodes the specified VibrateComponent message. Does not implicitly {@link Buttplug.DeviceMessage.VibrateComponent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent} message VibrateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateComponent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n if (message.speed != null && Object.hasOwnProperty.call(message, \"speed\"))\r\n writer.uint32(/* id 2, wireType 1 =*/ 17).double(message.speed);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified VibrateComponent message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.VibrateComponent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateComponent} message VibrateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateComponent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a VibrateComponent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateComponent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.VibrateComponent();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.speed = reader.double();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a VibrateComponent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateComponent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a VibrateComponent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n VibrateComponent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n if (typeof message.speed !== \"number\")\r\n return \"speed: number expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a VibrateComponent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.VibrateComponent} VibrateComponent\r\n */\r\n VibrateComponent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.VibrateComponent)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.VibrateComponent();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.speed != null)\r\n message.speed = Number(object.speed);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a VibrateComponent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.VibrateComponent} message VibrateComponent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n VibrateComponent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.speed = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n object.speed = options.json && !isFinite(message.speed) ? String(message.speed) : message.speed;\r\n return object;\r\n };\r\n /**\r\n * Converts this VibrateComponent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.VibrateComponent\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n VibrateComponent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return VibrateComponent;\r\n })();\r\n DeviceMessage.VibrateCmd = (function () {\r\n /**\r\n * Properties of a VibrateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IVibrateCmd\r\n * @property {Array.|null} [speeds] VibrateCmd speeds\r\n */\r\n /**\r\n * Constructs a new VibrateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a VibrateCmd.\r\n * @implements IVibrateCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd=} [properties] Properties to set\r\n */\r\n function VibrateCmd(properties) {\r\n this.speeds = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * VibrateCmd speeds.\r\n * @member {Array.} speeds\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @instance\r\n */\r\n VibrateCmd.prototype.speeds = $util.emptyArray;\r\n /**\r\n * Creates a new VibrateCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd instance\r\n */\r\n VibrateCmd.create = function create(properties) {\r\n return new VibrateCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified VibrateCmd message. Does not implicitly {@link Buttplug.DeviceMessage.VibrateCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd} message VibrateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.speeds != null && message.speeds.length)\r\n for (var i = 0; i < message.speeds.length; ++i)\r\n $root.Buttplug.DeviceMessage.VibrateComponent.encode(message.speeds[i], writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified VibrateCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.VibrateCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IVibrateCmd} message VibrateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n VibrateCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a VibrateCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.VibrateCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n if (!(message.speeds && message.speeds.length))\r\n message.speeds = [];\r\n message.speeds.push($root.Buttplug.DeviceMessage.VibrateComponent.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a VibrateCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n VibrateCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a VibrateCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n VibrateCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.speeds != null && message.hasOwnProperty(\"speeds\")) {\r\n if (!Array.isArray(message.speeds))\r\n return \"speeds: array expected\";\r\n for (var i = 0; i < message.speeds.length; ++i) {\r\n var error = $root.Buttplug.DeviceMessage.VibrateComponent.verify(message.speeds[i]);\r\n if (error)\r\n return \"speeds.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a VibrateCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.VibrateCmd} VibrateCmd\r\n */\r\n VibrateCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.VibrateCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.VibrateCmd();\r\n if (object.speeds) {\r\n if (!Array.isArray(object.speeds))\r\n throw TypeError(\".Buttplug.DeviceMessage.VibrateCmd.speeds: array expected\");\r\n message.speeds = [];\r\n for (var i = 0; i < object.speeds.length; ++i) {\r\n if (typeof object.speeds[i] !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.VibrateCmd.speeds: object expected\");\r\n message.speeds[i] = $root.Buttplug.DeviceMessage.VibrateComponent.fromObject(object.speeds[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a VibrateCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.VibrateCmd} message VibrateCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n VibrateCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.speeds = [];\r\n if (message.speeds && message.speeds.length) {\r\n object.speeds = [];\r\n for (var j = 0; j < message.speeds.length; ++j)\r\n object.speeds[j] = $root.Buttplug.DeviceMessage.VibrateComponent.toObject(message.speeds[j], options);\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this VibrateCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.VibrateCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n VibrateCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return VibrateCmd;\r\n })();\r\n DeviceMessage.RotateComponent = (function () {\r\n /**\r\n * Properties of a RotateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRotateComponent\r\n * @property {number|null} [index] RotateComponent index\r\n * @property {number|null} [speed] RotateComponent speed\r\n * @property {boolean|null} [clockwise] RotateComponent clockwise\r\n */\r\n /**\r\n * Constructs a new RotateComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RotateComponent.\r\n * @implements IRotateComponent\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRotateComponent=} [properties] Properties to set\r\n */\r\n function RotateComponent(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RotateComponent index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n */\r\n RotateComponent.prototype.index = 0;\r\n /**\r\n * RotateComponent speed.\r\n * @member {number} speed\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n */\r\n RotateComponent.prototype.speed = 0;\r\n /**\r\n * RotateComponent clockwise.\r\n * @member {boolean} clockwise\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n */\r\n RotateComponent.prototype.clockwise = false;\r\n /**\r\n * Creates a new RotateComponent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateComponent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent instance\r\n */\r\n RotateComponent.create = function create(properties) {\r\n return new RotateComponent(properties);\r\n };\r\n /**\r\n * Encodes the specified RotateComponent message. Does not implicitly {@link Buttplug.DeviceMessage.RotateComponent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateComponent} message RotateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateComponent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n if (message.speed != null && Object.hasOwnProperty.call(message, \"speed\"))\r\n writer.uint32(/* id 2, wireType 1 =*/ 17).double(message.speed);\r\n if (message.clockwise != null && Object.hasOwnProperty.call(message, \"clockwise\"))\r\n writer.uint32(/* id 3, wireType 0 =*/ 24).bool(message.clockwise);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RotateComponent message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RotateComponent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateComponent} message RotateComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateComponent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RotateComponent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateComponent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RotateComponent();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.speed = reader.double();\r\n break;\r\n case 3:\r\n message.clockwise = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RotateComponent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateComponent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RotateComponent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RotateComponent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n if (typeof message.speed !== \"number\")\r\n return \"speed: number expected\";\r\n if (message.clockwise != null && message.hasOwnProperty(\"clockwise\"))\r\n if (typeof message.clockwise !== \"boolean\")\r\n return \"clockwise: boolean expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a RotateComponent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RotateComponent} RotateComponent\r\n */\r\n RotateComponent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RotateComponent)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.RotateComponent();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.speed != null)\r\n message.speed = Number(object.speed);\r\n if (object.clockwise != null)\r\n message.clockwise = Boolean(object.clockwise);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RotateComponent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RotateComponent} message RotateComponent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RotateComponent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.speed = 0;\r\n object.clockwise = false;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.speed != null && message.hasOwnProperty(\"speed\"))\r\n object.speed = options.json && !isFinite(message.speed) ? String(message.speed) : message.speed;\r\n if (message.clockwise != null && message.hasOwnProperty(\"clockwise\"))\r\n object.clockwise = message.clockwise;\r\n return object;\r\n };\r\n /**\r\n * Converts this RotateComponent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RotateComponent\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RotateComponent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RotateComponent;\r\n })();\r\n DeviceMessage.RotateCmd = (function () {\r\n /**\r\n * Properties of a RotateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRotateCmd\r\n * @property {Array.|null} [rotations] RotateCmd rotations\r\n */\r\n /**\r\n * Constructs a new RotateCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RotateCmd.\r\n * @implements IRotateCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRotateCmd=} [properties] Properties to set\r\n */\r\n function RotateCmd(properties) {\r\n this.rotations = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RotateCmd rotations.\r\n * @member {Array.} rotations\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @instance\r\n */\r\n RotateCmd.prototype.rotations = $util.emptyArray;\r\n /**\r\n * Creates a new RotateCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd instance\r\n */\r\n RotateCmd.create = function create(properties) {\r\n return new RotateCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified RotateCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RotateCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateCmd} message RotateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.rotations != null && message.rotations.length)\r\n for (var i = 0; i < message.rotations.length; ++i)\r\n $root.Buttplug.DeviceMessage.RotateComponent.encode(message.rotations[i], writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RotateCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RotateCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRotateCmd} message RotateCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RotateCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RotateCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RotateCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n if (!(message.rotations && message.rotations.length))\r\n message.rotations = [];\r\n message.rotations.push($root.Buttplug.DeviceMessage.RotateComponent.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RotateCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RotateCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RotateCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RotateCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.rotations != null && message.hasOwnProperty(\"rotations\")) {\r\n if (!Array.isArray(message.rotations))\r\n return \"rotations: array expected\";\r\n for (var i = 0; i < message.rotations.length; ++i) {\r\n var error = $root.Buttplug.DeviceMessage.RotateComponent.verify(message.rotations[i]);\r\n if (error)\r\n return \"rotations.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a RotateCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RotateCmd} RotateCmd\r\n */\r\n RotateCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RotateCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.RotateCmd();\r\n if (object.rotations) {\r\n if (!Array.isArray(object.rotations))\r\n throw TypeError(\".Buttplug.DeviceMessage.RotateCmd.rotations: array expected\");\r\n message.rotations = [];\r\n for (var i = 0; i < object.rotations.length; ++i) {\r\n if (typeof object.rotations[i] !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.RotateCmd.rotations: object expected\");\r\n message.rotations[i] = $root.Buttplug.DeviceMessage.RotateComponent.fromObject(object.rotations[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RotateCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RotateCmd} message RotateCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RotateCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.rotations = [];\r\n if (message.rotations && message.rotations.length) {\r\n object.rotations = [];\r\n for (var j = 0; j < message.rotations.length; ++j)\r\n object.rotations[j] = $root.Buttplug.DeviceMessage.RotateComponent.toObject(message.rotations[j], options);\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this RotateCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RotateCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RotateCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RotateCmd;\r\n })();\r\n DeviceMessage.LinearComponent = (function () {\r\n /**\r\n * Properties of a LinearComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface ILinearComponent\r\n * @property {number|null} [index] LinearComponent index\r\n * @property {number|null} [duration] LinearComponent duration\r\n * @property {number|null} [position] LinearComponent position\r\n */\r\n /**\r\n * Constructs a new LinearComponent.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a LinearComponent.\r\n * @implements ILinearComponent\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.ILinearComponent=} [properties] Properties to set\r\n */\r\n function LinearComponent(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * LinearComponent index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n */\r\n LinearComponent.prototype.index = 0;\r\n /**\r\n * LinearComponent duration.\r\n * @member {number} duration\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n */\r\n LinearComponent.prototype.duration = 0;\r\n /**\r\n * LinearComponent position.\r\n * @member {number} position\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n */\r\n LinearComponent.prototype.position = 0;\r\n /**\r\n * Creates a new LinearComponent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearComponent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent instance\r\n */\r\n LinearComponent.create = function create(properties) {\r\n return new LinearComponent(properties);\r\n };\r\n /**\r\n * Encodes the specified LinearComponent message. Does not implicitly {@link Buttplug.DeviceMessage.LinearComponent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearComponent} message LinearComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearComponent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n if (message.duration != null && Object.hasOwnProperty.call(message, \"duration\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).uint32(message.duration);\r\n if (message.position != null && Object.hasOwnProperty.call(message, \"position\"))\r\n writer.uint32(/* id 3, wireType 1 =*/ 25).double(message.position);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified LinearComponent message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.LinearComponent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearComponent} message LinearComponent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearComponent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a LinearComponent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearComponent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.LinearComponent();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.duration = reader.uint32();\r\n break;\r\n case 3:\r\n message.position = reader.double();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a LinearComponent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearComponent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a LinearComponent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n LinearComponent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.duration != null && message.hasOwnProperty(\"duration\"))\r\n if (!$util.isInteger(message.duration))\r\n return \"duration: integer expected\";\r\n if (message.position != null && message.hasOwnProperty(\"position\"))\r\n if (typeof message.position !== \"number\")\r\n return \"position: number expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a LinearComponent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.LinearComponent} LinearComponent\r\n */\r\n LinearComponent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.LinearComponent)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.LinearComponent();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.duration != null)\r\n message.duration = object.duration >>> 0;\r\n if (object.position != null)\r\n message.position = Number(object.position);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a LinearComponent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @static\r\n * @param {Buttplug.DeviceMessage.LinearComponent} message LinearComponent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n LinearComponent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.duration = 0;\r\n object.position = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.duration != null && message.hasOwnProperty(\"duration\"))\r\n object.duration = message.duration;\r\n if (message.position != null && message.hasOwnProperty(\"position\"))\r\n object.position = options.json && !isFinite(message.position) ? String(message.position) : message.position;\r\n return object;\r\n };\r\n /**\r\n * Converts this LinearComponent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.LinearComponent\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n LinearComponent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return LinearComponent;\r\n })();\r\n DeviceMessage.LinearCmd = (function () {\r\n /**\r\n * Properties of a LinearCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface ILinearCmd\r\n * @property {Array.|null} [movements] LinearCmd movements\r\n */\r\n /**\r\n * Constructs a new LinearCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a LinearCmd.\r\n * @implements ILinearCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.ILinearCmd=} [properties] Properties to set\r\n */\r\n function LinearCmd(properties) {\r\n this.movements = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * LinearCmd movements.\r\n * @member {Array.} movements\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @instance\r\n */\r\n LinearCmd.prototype.movements = $util.emptyArray;\r\n /**\r\n * Creates a new LinearCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd instance\r\n */\r\n LinearCmd.create = function create(properties) {\r\n return new LinearCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified LinearCmd message. Does not implicitly {@link Buttplug.DeviceMessage.LinearCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearCmd} message LinearCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.movements != null && message.movements.length)\r\n for (var i = 0; i < message.movements.length; ++i)\r\n $root.Buttplug.DeviceMessage.LinearComponent.encode(message.movements[i], writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified LinearCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.LinearCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.ILinearCmd} message LinearCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n LinearCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a LinearCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.LinearCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n if (!(message.movements && message.movements.length))\r\n message.movements = [];\r\n message.movements.push($root.Buttplug.DeviceMessage.LinearComponent.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a LinearCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n LinearCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a LinearCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n LinearCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.movements != null && message.hasOwnProperty(\"movements\")) {\r\n if (!Array.isArray(message.movements))\r\n return \"movements: array expected\";\r\n for (var i = 0; i < message.movements.length; ++i) {\r\n var error = $root.Buttplug.DeviceMessage.LinearComponent.verify(message.movements[i]);\r\n if (error)\r\n return \"movements.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a LinearCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.LinearCmd} LinearCmd\r\n */\r\n LinearCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.LinearCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.LinearCmd();\r\n if (object.movements) {\r\n if (!Array.isArray(object.movements))\r\n throw TypeError(\".Buttplug.DeviceMessage.LinearCmd.movements: array expected\");\r\n message.movements = [];\r\n for (var i = 0; i < object.movements.length; ++i) {\r\n if (typeof object.movements[i] !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.LinearCmd.movements: object expected\");\r\n message.movements[i] = $root.Buttplug.DeviceMessage.LinearComponent.fromObject(object.movements[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a LinearCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.LinearCmd} message LinearCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n LinearCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.movements = [];\r\n if (message.movements && message.movements.length) {\r\n object.movements = [];\r\n for (var j = 0; j < message.movements.length; ++j)\r\n object.movements[j] = $root.Buttplug.DeviceMessage.LinearComponent.toObject(message.movements[j], options);\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this LinearCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.LinearCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n LinearCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return LinearCmd;\r\n })();\r\n DeviceMessage.StopDeviceCmd = (function () {\r\n /**\r\n * Properties of a StopDeviceCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IStopDeviceCmd\r\n */\r\n /**\r\n * Constructs a new StopDeviceCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a StopDeviceCmd.\r\n * @implements IStopDeviceCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd=} [properties] Properties to set\r\n */\r\n function StopDeviceCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new StopDeviceCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd instance\r\n */\r\n StopDeviceCmd.create = function create(properties) {\r\n return new StopDeviceCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified StopDeviceCmd message. Does not implicitly {@link Buttplug.DeviceMessage.StopDeviceCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd} message StopDeviceCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopDeviceCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified StopDeviceCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.StopDeviceCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IStopDeviceCmd} message StopDeviceCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n StopDeviceCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a StopDeviceCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopDeviceCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.StopDeviceCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a StopDeviceCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n StopDeviceCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a StopDeviceCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n StopDeviceCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a StopDeviceCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.StopDeviceCmd} StopDeviceCmd\r\n */\r\n StopDeviceCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.StopDeviceCmd)\r\n return object;\r\n return new $root.Buttplug.DeviceMessage.StopDeviceCmd();\r\n };\r\n /**\r\n * Creates a plain object from a StopDeviceCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.StopDeviceCmd} message StopDeviceCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n StopDeviceCmd.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this StopDeviceCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.StopDeviceCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n StopDeviceCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return StopDeviceCmd;\r\n })();\r\n DeviceMessage.RawReadCmd = (function () {\r\n /**\r\n * Properties of a RawReadCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawReadCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawReadCmd endpoint\r\n * @property {Uint8Array|null} [data] RawReadCmd data\r\n * @property {number|null} [expectedLength] RawReadCmd expectedLength\r\n * @property {number|null} [timeout] RawReadCmd timeout\r\n */\r\n /**\r\n * Constructs a new RawReadCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawReadCmd.\r\n * @implements IRawReadCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd=} [properties] Properties to set\r\n */\r\n function RawReadCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RawReadCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.endpoint = 0;\r\n /**\r\n * RawReadCmd data.\r\n * @member {Uint8Array} data\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.data = $util.newBuffer([]);\r\n /**\r\n * RawReadCmd expectedLength.\r\n * @member {number} expectedLength\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.expectedLength = 0;\r\n /**\r\n * RawReadCmd timeout.\r\n * @member {number} timeout\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n */\r\n RawReadCmd.prototype.timeout = 0;\r\n /**\r\n * Creates a new RawReadCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd instance\r\n */\r\n RawReadCmd.create = function create(properties) {\r\n return new RawReadCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified RawReadCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawReadCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd} message RawReadCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReadCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.endpoint);\r\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\r\n writer.uint32(/* id 2, wireType 2 =*/ 18).bytes(message.data);\r\n if (message.expectedLength != null && Object.hasOwnProperty.call(message, \"expectedLength\"))\r\n writer.uint32(/* id 3, wireType 0 =*/ 24).uint32(message.expectedLength);\r\n if (message.timeout != null && Object.hasOwnProperty.call(message, \"timeout\"))\r\n writer.uint32(/* id 4, wireType 0 =*/ 32).uint32(message.timeout);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RawReadCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawReadCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawReadCmd} message RawReadCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReadCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RawReadCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReadCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawReadCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n case 2:\r\n message.data = reader.bytes();\r\n break;\r\n case 3:\r\n message.expectedLength = reader.uint32();\r\n break;\r\n case 4:\r\n message.timeout = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RawReadCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReadCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RawReadCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawReadCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n break;\r\n }\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\r\n return \"data: buffer expected\";\r\n if (message.expectedLength != null && message.hasOwnProperty(\"expectedLength\"))\r\n if (!$util.isInteger(message.expectedLength))\r\n return \"expectedLength: integer expected\";\r\n if (message.timeout != null && message.hasOwnProperty(\"timeout\"))\r\n if (!$util.isInteger(message.timeout))\r\n return \"timeout: integer expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a RawReadCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawReadCmd} RawReadCmd\r\n */\r\n RawReadCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawReadCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.RawReadCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n }\r\n if (object.data != null)\r\n if (typeof object.data === \"string\")\r\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\r\n else if (object.data.length)\r\n message.data = object.data;\r\n if (object.expectedLength != null)\r\n message.expectedLength = object.expectedLength >>> 0;\r\n if (object.timeout != null)\r\n message.timeout = object.timeout >>> 0;\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RawReadCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawReadCmd} message RawReadCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RawReadCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (options.bytes === String)\r\n object.data = \"\";\r\n else {\r\n object.data = [];\r\n if (options.bytes !== Array)\r\n object.data = $util.newBuffer(object.data);\r\n }\r\n object.expectedLength = 0;\r\n object.timeout = 0;\r\n }\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\r\n if (message.expectedLength != null && message.hasOwnProperty(\"expectedLength\"))\r\n object.expectedLength = message.expectedLength;\r\n if (message.timeout != null && message.hasOwnProperty(\"timeout\"))\r\n object.timeout = message.timeout;\r\n return object;\r\n };\r\n /**\r\n * Converts this RawReadCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawReadCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RawReadCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RawReadCmd;\r\n })();\r\n DeviceMessage.RawWriteCmd = (function () {\r\n /**\r\n * Properties of a RawWriteCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawWriteCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawWriteCmd endpoint\r\n * @property {Uint8Array|null} [data] RawWriteCmd data\r\n * @property {boolean|null} [writeWithResponse] RawWriteCmd writeWithResponse\r\n */\r\n /**\r\n * Constructs a new RawWriteCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawWriteCmd.\r\n * @implements IRawWriteCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd=} [properties] Properties to set\r\n */\r\n function RawWriteCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RawWriteCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n */\r\n RawWriteCmd.prototype.endpoint = 0;\r\n /**\r\n * RawWriteCmd data.\r\n * @member {Uint8Array} data\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n */\r\n RawWriteCmd.prototype.data = $util.newBuffer([]);\r\n /**\r\n * RawWriteCmd writeWithResponse.\r\n * @member {boolean} writeWithResponse\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n */\r\n RawWriteCmd.prototype.writeWithResponse = false;\r\n /**\r\n * Creates a new RawWriteCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd instance\r\n */\r\n RawWriteCmd.create = function create(properties) {\r\n return new RawWriteCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified RawWriteCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawWriteCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd} message RawWriteCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawWriteCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.endpoint);\r\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\r\n writer.uint32(/* id 2, wireType 2 =*/ 18).bytes(message.data);\r\n if (message.writeWithResponse != null && Object.hasOwnProperty.call(message, \"writeWithResponse\"))\r\n writer.uint32(/* id 3, wireType 0 =*/ 24).bool(message.writeWithResponse);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RawWriteCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawWriteCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawWriteCmd} message RawWriteCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawWriteCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RawWriteCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawWriteCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawWriteCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n case 2:\r\n message.data = reader.bytes();\r\n break;\r\n case 3:\r\n message.writeWithResponse = reader.bool();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RawWriteCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawWriteCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RawWriteCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawWriteCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n break;\r\n }\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\r\n return \"data: buffer expected\";\r\n if (message.writeWithResponse != null && message.hasOwnProperty(\"writeWithResponse\"))\r\n if (typeof message.writeWithResponse !== \"boolean\")\r\n return \"writeWithResponse: boolean expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a RawWriteCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawWriteCmd} RawWriteCmd\r\n */\r\n RawWriteCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawWriteCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.RawWriteCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n }\r\n if (object.data != null)\r\n if (typeof object.data === \"string\")\r\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\r\n else if (object.data.length)\r\n message.data = object.data;\r\n if (object.writeWithResponse != null)\r\n message.writeWithResponse = Boolean(object.writeWithResponse);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RawWriteCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawWriteCmd} message RawWriteCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RawWriteCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (options.bytes === String)\r\n object.data = \"\";\r\n else {\r\n object.data = [];\r\n if (options.bytes !== Array)\r\n object.data = $util.newBuffer(object.data);\r\n }\r\n object.writeWithResponse = false;\r\n }\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\r\n if (message.writeWithResponse != null && message.hasOwnProperty(\"writeWithResponse\"))\r\n object.writeWithResponse = message.writeWithResponse;\r\n return object;\r\n };\r\n /**\r\n * Converts this RawWriteCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawWriteCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RawWriteCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RawWriteCmd;\r\n })();\r\n DeviceMessage.RawSubscribeCmd = (function () {\r\n /**\r\n * Properties of a RawSubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawSubscribeCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawSubscribeCmd endpoint\r\n */\r\n /**\r\n * Constructs a new RawSubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawSubscribeCmd.\r\n * @implements IRawSubscribeCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd=} [properties] Properties to set\r\n */\r\n function RawSubscribeCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RawSubscribeCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @instance\r\n */\r\n RawSubscribeCmd.prototype.endpoint = 0;\r\n /**\r\n * Creates a new RawSubscribeCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd instance\r\n */\r\n RawSubscribeCmd.create = function create(properties) {\r\n return new RawSubscribeCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified RawSubscribeCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawSubscribeCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd} message RawSubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawSubscribeCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.endpoint);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RawSubscribeCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawSubscribeCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawSubscribeCmd} message RawSubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawSubscribeCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RawSubscribeCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawSubscribeCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawSubscribeCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RawSubscribeCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawSubscribeCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RawSubscribeCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawSubscribeCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n break;\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a RawSubscribeCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawSubscribeCmd} RawSubscribeCmd\r\n */\r\n RawSubscribeCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawSubscribeCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.RawSubscribeCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RawSubscribeCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawSubscribeCmd} message RawSubscribeCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RawSubscribeCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n return object;\r\n };\r\n /**\r\n * Converts this RawSubscribeCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawSubscribeCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RawSubscribeCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RawSubscribeCmd;\r\n })();\r\n DeviceMessage.RawUnsubscribeCmd = (function () {\r\n /**\r\n * Properties of a RawUnsubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRawUnsubscribeCmd\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawUnsubscribeCmd endpoint\r\n */\r\n /**\r\n * Constructs a new RawUnsubscribeCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RawUnsubscribeCmd.\r\n * @implements IRawUnsubscribeCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd=} [properties] Properties to set\r\n */\r\n function RawUnsubscribeCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RawUnsubscribeCmd endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @instance\r\n */\r\n RawUnsubscribeCmd.prototype.endpoint = 0;\r\n /**\r\n * Creates a new RawUnsubscribeCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd instance\r\n */\r\n RawUnsubscribeCmd.create = function create(properties) {\r\n return new RawUnsubscribeCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified RawUnsubscribeCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RawUnsubscribeCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd} message RawUnsubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawUnsubscribeCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.endpoint);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RawUnsubscribeCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RawUnsubscribeCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRawUnsubscribeCmd} message RawUnsubscribeCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawUnsubscribeCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RawUnsubscribeCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawUnsubscribeCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RawUnsubscribeCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.endpoint = reader.int32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RawUnsubscribeCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawUnsubscribeCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RawUnsubscribeCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawUnsubscribeCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n break;\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a RawUnsubscribeCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RawUnsubscribeCmd} RawUnsubscribeCmd\r\n */\r\n RawUnsubscribeCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RawUnsubscribeCmd)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.RawUnsubscribeCmd();\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RawUnsubscribeCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RawUnsubscribeCmd} message RawUnsubscribeCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RawUnsubscribeCmd.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n return object;\r\n };\r\n /**\r\n * Converts this RawUnsubscribeCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RawUnsubscribeCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RawUnsubscribeCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RawUnsubscribeCmd;\r\n })();\r\n DeviceMessage.BatteryLevelCmd = (function () {\r\n /**\r\n * Properties of a BatteryLevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IBatteryLevelCmd\r\n */\r\n /**\r\n * Constructs a new BatteryLevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a BatteryLevelCmd.\r\n * @implements IBatteryLevelCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd=} [properties] Properties to set\r\n */\r\n function BatteryLevelCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new BatteryLevelCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd instance\r\n */\r\n BatteryLevelCmd.create = function create(properties) {\r\n return new BatteryLevelCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified BatteryLevelCmd message. Does not implicitly {@link Buttplug.DeviceMessage.BatteryLevelCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd} message BatteryLevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified BatteryLevelCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.BatteryLevelCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IBatteryLevelCmd} message BatteryLevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a BatteryLevelCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.BatteryLevelCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a BatteryLevelCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a BatteryLevelCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n BatteryLevelCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a BatteryLevelCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.BatteryLevelCmd} BatteryLevelCmd\r\n */\r\n BatteryLevelCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.BatteryLevelCmd)\r\n return object;\r\n return new $root.Buttplug.DeviceMessage.BatteryLevelCmd();\r\n };\r\n /**\r\n * Creates a plain object from a BatteryLevelCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.BatteryLevelCmd} message BatteryLevelCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n BatteryLevelCmd.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this BatteryLevelCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.BatteryLevelCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n BatteryLevelCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return BatteryLevelCmd;\r\n })();\r\n DeviceMessage.RSSILevelCmd = (function () {\r\n /**\r\n * Properties of a RSSILevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IRSSILevelCmd\r\n */\r\n /**\r\n * Constructs a new RSSILevelCmd.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a RSSILevelCmd.\r\n * @implements IRSSILevelCmd\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd=} [properties] Properties to set\r\n */\r\n function RSSILevelCmd(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new RSSILevelCmd instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd instance\r\n */\r\n RSSILevelCmd.create = function create(properties) {\r\n return new RSSILevelCmd(properties);\r\n };\r\n /**\r\n * Encodes the specified RSSILevelCmd message. Does not implicitly {@link Buttplug.DeviceMessage.RSSILevelCmd.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd} message RSSILevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelCmd.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RSSILevelCmd message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.RSSILevelCmd.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IRSSILevelCmd} message RSSILevelCmd message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelCmd.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RSSILevelCmd message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelCmd.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.RSSILevelCmd();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RSSILevelCmd message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelCmd.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RSSILevelCmd message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RSSILevelCmd.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a RSSILevelCmd message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.RSSILevelCmd} RSSILevelCmd\r\n */\r\n RSSILevelCmd.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.RSSILevelCmd)\r\n return object;\r\n return new $root.Buttplug.DeviceMessage.RSSILevelCmd();\r\n };\r\n /**\r\n * Creates a plain object from a RSSILevelCmd message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @static\r\n * @param {Buttplug.DeviceMessage.RSSILevelCmd} message RSSILevelCmd\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RSSILevelCmd.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this RSSILevelCmd to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.RSSILevelCmd\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RSSILevelCmd.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RSSILevelCmd;\r\n })();\r\n DeviceMessage.FFIMessage = (function () {\r\n /**\r\n * Properties of a FFIMessage.\r\n * @memberof Buttplug.DeviceMessage\r\n * @interface IFFIMessage\r\n * @property {Buttplug.DeviceMessage.IVibrateCmd|null} [vibrateCmd] FFIMessage vibrateCmd\r\n * @property {Buttplug.DeviceMessage.IRotateCmd|null} [rotateCmd] FFIMessage rotateCmd\r\n * @property {Buttplug.DeviceMessage.ILinearCmd|null} [linearCmd] FFIMessage linearCmd\r\n * @property {Buttplug.DeviceMessage.IStopDeviceCmd|null} [stopDeviceCmd] FFIMessage stopDeviceCmd\r\n * @property {Buttplug.DeviceMessage.IRawReadCmd|null} [rawReadCmd] FFIMessage rawReadCmd\r\n * @property {Buttplug.DeviceMessage.IRawWriteCmd|null} [rawWriteCmd] FFIMessage rawWriteCmd\r\n * @property {Buttplug.DeviceMessage.IRawSubscribeCmd|null} [rawSubscribeCmd] FFIMessage rawSubscribeCmd\r\n * @property {Buttplug.DeviceMessage.IRawUnsubscribeCmd|null} [rawUnsubscribeCmd] FFIMessage rawUnsubscribeCmd\r\n * @property {Buttplug.DeviceMessage.IBatteryLevelCmd|null} [batteryLevelCmd] FFIMessage batteryLevelCmd\r\n * @property {Buttplug.DeviceMessage.IRSSILevelCmd|null} [rssiLevelCmd] FFIMessage rssiLevelCmd\r\n */\r\n /**\r\n * Constructs a new FFIMessage.\r\n * @memberof Buttplug.DeviceMessage\r\n * @classdesc Represents a FFIMessage.\r\n * @implements IFFIMessage\r\n * @constructor\r\n * @param {Buttplug.DeviceMessage.IFFIMessage=} [properties] Properties to set\r\n */\r\n function FFIMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * FFIMessage vibrateCmd.\r\n * @member {Buttplug.DeviceMessage.IVibrateCmd|null|undefined} vibrateCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.vibrateCmd = null;\r\n /**\r\n * FFIMessage rotateCmd.\r\n * @member {Buttplug.DeviceMessage.IRotateCmd|null|undefined} rotateCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rotateCmd = null;\r\n /**\r\n * FFIMessage linearCmd.\r\n * @member {Buttplug.DeviceMessage.ILinearCmd|null|undefined} linearCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.linearCmd = null;\r\n /**\r\n * FFIMessage stopDeviceCmd.\r\n * @member {Buttplug.DeviceMessage.IStopDeviceCmd|null|undefined} stopDeviceCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.stopDeviceCmd = null;\r\n /**\r\n * FFIMessage rawReadCmd.\r\n * @member {Buttplug.DeviceMessage.IRawReadCmd|null|undefined} rawReadCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawReadCmd = null;\r\n /**\r\n * FFIMessage rawWriteCmd.\r\n * @member {Buttplug.DeviceMessage.IRawWriteCmd|null|undefined} rawWriteCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawWriteCmd = null;\r\n /**\r\n * FFIMessage rawSubscribeCmd.\r\n * @member {Buttplug.DeviceMessage.IRawSubscribeCmd|null|undefined} rawSubscribeCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawSubscribeCmd = null;\r\n /**\r\n * FFIMessage rawUnsubscribeCmd.\r\n * @member {Buttplug.DeviceMessage.IRawUnsubscribeCmd|null|undefined} rawUnsubscribeCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rawUnsubscribeCmd = null;\r\n /**\r\n * FFIMessage batteryLevelCmd.\r\n * @member {Buttplug.DeviceMessage.IBatteryLevelCmd|null|undefined} batteryLevelCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.batteryLevelCmd = null;\r\n /**\r\n * FFIMessage rssiLevelCmd.\r\n * @member {Buttplug.DeviceMessage.IRSSILevelCmd|null|undefined} rssiLevelCmd\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.rssiLevelCmd = null;\r\n // OneOf field names bound to virtual getters and setters\r\n var $oneOfFields;\r\n /**\r\n * FFIMessage msg.\r\n * @member {\"vibrateCmd\"|\"rotateCmd\"|\"linearCmd\"|\"stopDeviceCmd\"|\"rawReadCmd\"|\"rawWriteCmd\"|\"rawSubscribeCmd\"|\"rawUnsubscribeCmd\"|\"batteryLevelCmd\"|\"rssiLevelCmd\"|undefined} msg\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n */\r\n Object.defineProperty(FFIMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"vibrateCmd\", \"rotateCmd\", \"linearCmd\", \"stopDeviceCmd\", \"rawReadCmd\", \"rawWriteCmd\", \"rawSubscribeCmd\", \"rawUnsubscribeCmd\", \"batteryLevelCmd\", \"rssiLevelCmd\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n /**\r\n * Creates a new FFIMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IFFIMessage=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage instance\r\n */\r\n FFIMessage.create = function create(properties) {\r\n return new FFIMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified FFIMessage message. Does not implicitly {@link Buttplug.DeviceMessage.FFIMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.vibrateCmd != null && Object.hasOwnProperty.call(message, \"vibrateCmd\"))\r\n $root.Buttplug.DeviceMessage.VibrateCmd.encode(message.vibrateCmd, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n if (message.rotateCmd != null && Object.hasOwnProperty.call(message, \"rotateCmd\"))\r\n $root.Buttplug.DeviceMessage.RotateCmd.encode(message.rotateCmd, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n if (message.linearCmd != null && Object.hasOwnProperty.call(message, \"linearCmd\"))\r\n $root.Buttplug.DeviceMessage.LinearCmd.encode(message.linearCmd, writer.uint32(/* id 3, wireType 2 =*/ 26).fork()).ldelim();\r\n if (message.stopDeviceCmd != null && Object.hasOwnProperty.call(message, \"stopDeviceCmd\"))\r\n $root.Buttplug.DeviceMessage.StopDeviceCmd.encode(message.stopDeviceCmd, writer.uint32(/* id 4, wireType 2 =*/ 34).fork()).ldelim();\r\n if (message.rawReadCmd != null && Object.hasOwnProperty.call(message, \"rawReadCmd\"))\r\n $root.Buttplug.DeviceMessage.RawReadCmd.encode(message.rawReadCmd, writer.uint32(/* id 5, wireType 2 =*/ 42).fork()).ldelim();\r\n if (message.rawWriteCmd != null && Object.hasOwnProperty.call(message, \"rawWriteCmd\"))\r\n $root.Buttplug.DeviceMessage.RawWriteCmd.encode(message.rawWriteCmd, writer.uint32(/* id 6, wireType 2 =*/ 50).fork()).ldelim();\r\n if (message.rawSubscribeCmd != null && Object.hasOwnProperty.call(message, \"rawSubscribeCmd\"))\r\n $root.Buttplug.DeviceMessage.RawSubscribeCmd.encode(message.rawSubscribeCmd, writer.uint32(/* id 7, wireType 2 =*/ 58).fork()).ldelim();\r\n if (message.rawUnsubscribeCmd != null && Object.hasOwnProperty.call(message, \"rawUnsubscribeCmd\"))\r\n $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.encode(message.rawUnsubscribeCmd, writer.uint32(/* id 8, wireType 2 =*/ 66).fork()).ldelim();\r\n if (message.batteryLevelCmd != null && Object.hasOwnProperty.call(message, \"batteryLevelCmd\"))\r\n $root.Buttplug.DeviceMessage.BatteryLevelCmd.encode(message.batteryLevelCmd, writer.uint32(/* id 9, wireType 2 =*/ 74).fork()).ldelim();\r\n if (message.rssiLevelCmd != null && Object.hasOwnProperty.call(message, \"rssiLevelCmd\"))\r\n $root.Buttplug.DeviceMessage.RSSILevelCmd.encode(message.rssiLevelCmd, writer.uint32(/* id 10, wireType 2 =*/ 82).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified FFIMessage message, length delimited. Does not implicitly {@link Buttplug.DeviceMessage.FFIMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceMessage.FFIMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.vibrateCmd = $root.Buttplug.DeviceMessage.VibrateCmd.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.rotateCmd = $root.Buttplug.DeviceMessage.RotateCmd.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.linearCmd = $root.Buttplug.DeviceMessage.LinearCmd.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.stopDeviceCmd = $root.Buttplug.DeviceMessage.StopDeviceCmd.decode(reader, reader.uint32());\r\n break;\r\n case 5:\r\n message.rawReadCmd = $root.Buttplug.DeviceMessage.RawReadCmd.decode(reader, reader.uint32());\r\n break;\r\n case 6:\r\n message.rawWriteCmd = $root.Buttplug.DeviceMessage.RawWriteCmd.decode(reader, reader.uint32());\r\n break;\r\n case 7:\r\n message.rawSubscribeCmd = $root.Buttplug.DeviceMessage.RawSubscribeCmd.decode(reader, reader.uint32());\r\n break;\r\n case 8:\r\n message.rawUnsubscribeCmd = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.decode(reader, reader.uint32());\r\n break;\r\n case 9:\r\n message.batteryLevelCmd = $root.Buttplug.DeviceMessage.BatteryLevelCmd.decode(reader, reader.uint32());\r\n break;\r\n case 10:\r\n message.rssiLevelCmd = $root.Buttplug.DeviceMessage.RSSILevelCmd.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a FFIMessage message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n FFIMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n var properties = {};\r\n if (message.vibrateCmd != null && message.hasOwnProperty(\"vibrateCmd\")) {\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.VibrateCmd.verify(message.vibrateCmd);\r\n if (error)\r\n return \"vibrateCmd.\" + error;\r\n }\r\n }\r\n if (message.rotateCmd != null && message.hasOwnProperty(\"rotateCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.RotateCmd.verify(message.rotateCmd);\r\n if (error)\r\n return \"rotateCmd.\" + error;\r\n }\r\n }\r\n if (message.linearCmd != null && message.hasOwnProperty(\"linearCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.LinearCmd.verify(message.linearCmd);\r\n if (error)\r\n return \"linearCmd.\" + error;\r\n }\r\n }\r\n if (message.stopDeviceCmd != null && message.hasOwnProperty(\"stopDeviceCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.StopDeviceCmd.verify(message.stopDeviceCmd);\r\n if (error)\r\n return \"stopDeviceCmd.\" + error;\r\n }\r\n }\r\n if (message.rawReadCmd != null && message.hasOwnProperty(\"rawReadCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.RawReadCmd.verify(message.rawReadCmd);\r\n if (error)\r\n return \"rawReadCmd.\" + error;\r\n }\r\n }\r\n if (message.rawWriteCmd != null && message.hasOwnProperty(\"rawWriteCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.RawWriteCmd.verify(message.rawWriteCmd);\r\n if (error)\r\n return \"rawWriteCmd.\" + error;\r\n }\r\n }\r\n if (message.rawSubscribeCmd != null && message.hasOwnProperty(\"rawSubscribeCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.RawSubscribeCmd.verify(message.rawSubscribeCmd);\r\n if (error)\r\n return \"rawSubscribeCmd.\" + error;\r\n }\r\n }\r\n if (message.rawUnsubscribeCmd != null && message.hasOwnProperty(\"rawUnsubscribeCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.verify(message.rawUnsubscribeCmd);\r\n if (error)\r\n return \"rawUnsubscribeCmd.\" + error;\r\n }\r\n }\r\n if (message.batteryLevelCmd != null && message.hasOwnProperty(\"batteryLevelCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.BatteryLevelCmd.verify(message.batteryLevelCmd);\r\n if (error)\r\n return \"batteryLevelCmd.\" + error;\r\n }\r\n }\r\n if (message.rssiLevelCmd != null && message.hasOwnProperty(\"rssiLevelCmd\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceMessage.RSSILevelCmd.verify(message.rssiLevelCmd);\r\n if (error)\r\n return \"rssiLevelCmd.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a FFIMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceMessage.FFIMessage} FFIMessage\r\n */\r\n FFIMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceMessage.FFIMessage)\r\n return object;\r\n var message = new $root.Buttplug.DeviceMessage.FFIMessage();\r\n if (object.vibrateCmd != null) {\r\n if (typeof object.vibrateCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.vibrateCmd: object expected\");\r\n message.vibrateCmd = $root.Buttplug.DeviceMessage.VibrateCmd.fromObject(object.vibrateCmd);\r\n }\r\n if (object.rotateCmd != null) {\r\n if (typeof object.rotateCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rotateCmd: object expected\");\r\n message.rotateCmd = $root.Buttplug.DeviceMessage.RotateCmd.fromObject(object.rotateCmd);\r\n }\r\n if (object.linearCmd != null) {\r\n if (typeof object.linearCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.linearCmd: object expected\");\r\n message.linearCmd = $root.Buttplug.DeviceMessage.LinearCmd.fromObject(object.linearCmd);\r\n }\r\n if (object.stopDeviceCmd != null) {\r\n if (typeof object.stopDeviceCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.stopDeviceCmd: object expected\");\r\n message.stopDeviceCmd = $root.Buttplug.DeviceMessage.StopDeviceCmd.fromObject(object.stopDeviceCmd);\r\n }\r\n if (object.rawReadCmd != null) {\r\n if (typeof object.rawReadCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawReadCmd: object expected\");\r\n message.rawReadCmd = $root.Buttplug.DeviceMessage.RawReadCmd.fromObject(object.rawReadCmd);\r\n }\r\n if (object.rawWriteCmd != null) {\r\n if (typeof object.rawWriteCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawWriteCmd: object expected\");\r\n message.rawWriteCmd = $root.Buttplug.DeviceMessage.RawWriteCmd.fromObject(object.rawWriteCmd);\r\n }\r\n if (object.rawSubscribeCmd != null) {\r\n if (typeof object.rawSubscribeCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawSubscribeCmd: object expected\");\r\n message.rawSubscribeCmd = $root.Buttplug.DeviceMessage.RawSubscribeCmd.fromObject(object.rawSubscribeCmd);\r\n }\r\n if (object.rawUnsubscribeCmd != null) {\r\n if (typeof object.rawUnsubscribeCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rawUnsubscribeCmd: object expected\");\r\n message.rawUnsubscribeCmd = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.fromObject(object.rawUnsubscribeCmd);\r\n }\r\n if (object.batteryLevelCmd != null) {\r\n if (typeof object.batteryLevelCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.batteryLevelCmd: object expected\");\r\n message.batteryLevelCmd = $root.Buttplug.DeviceMessage.BatteryLevelCmd.fromObject(object.batteryLevelCmd);\r\n }\r\n if (object.rssiLevelCmd != null) {\r\n if (typeof object.rssiLevelCmd !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceMessage.FFIMessage.rssiLevelCmd: object expected\");\r\n message.rssiLevelCmd = $root.Buttplug.DeviceMessage.RSSILevelCmd.fromObject(object.rssiLevelCmd);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a FFIMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.DeviceMessage.FFIMessage} message FFIMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n FFIMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (message.vibrateCmd != null && message.hasOwnProperty(\"vibrateCmd\")) {\r\n object.vibrateCmd = $root.Buttplug.DeviceMessage.VibrateCmd.toObject(message.vibrateCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"vibrateCmd\";\r\n }\r\n if (message.rotateCmd != null && message.hasOwnProperty(\"rotateCmd\")) {\r\n object.rotateCmd = $root.Buttplug.DeviceMessage.RotateCmd.toObject(message.rotateCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rotateCmd\";\r\n }\r\n if (message.linearCmd != null && message.hasOwnProperty(\"linearCmd\")) {\r\n object.linearCmd = $root.Buttplug.DeviceMessage.LinearCmd.toObject(message.linearCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"linearCmd\";\r\n }\r\n if (message.stopDeviceCmd != null && message.hasOwnProperty(\"stopDeviceCmd\")) {\r\n object.stopDeviceCmd = $root.Buttplug.DeviceMessage.StopDeviceCmd.toObject(message.stopDeviceCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"stopDeviceCmd\";\r\n }\r\n if (message.rawReadCmd != null && message.hasOwnProperty(\"rawReadCmd\")) {\r\n object.rawReadCmd = $root.Buttplug.DeviceMessage.RawReadCmd.toObject(message.rawReadCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawReadCmd\";\r\n }\r\n if (message.rawWriteCmd != null && message.hasOwnProperty(\"rawWriteCmd\")) {\r\n object.rawWriteCmd = $root.Buttplug.DeviceMessage.RawWriteCmd.toObject(message.rawWriteCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawWriteCmd\";\r\n }\r\n if (message.rawSubscribeCmd != null && message.hasOwnProperty(\"rawSubscribeCmd\")) {\r\n object.rawSubscribeCmd = $root.Buttplug.DeviceMessage.RawSubscribeCmd.toObject(message.rawSubscribeCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawSubscribeCmd\";\r\n }\r\n if (message.rawUnsubscribeCmd != null && message.hasOwnProperty(\"rawUnsubscribeCmd\")) {\r\n object.rawUnsubscribeCmd = $root.Buttplug.DeviceMessage.RawUnsubscribeCmd.toObject(message.rawUnsubscribeCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rawUnsubscribeCmd\";\r\n }\r\n if (message.batteryLevelCmd != null && message.hasOwnProperty(\"batteryLevelCmd\")) {\r\n object.batteryLevelCmd = $root.Buttplug.DeviceMessage.BatteryLevelCmd.toObject(message.batteryLevelCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"batteryLevelCmd\";\r\n }\r\n if (message.rssiLevelCmd != null && message.hasOwnProperty(\"rssiLevelCmd\")) {\r\n object.rssiLevelCmd = $root.Buttplug.DeviceMessage.RSSILevelCmd.toObject(message.rssiLevelCmd, options);\r\n if (options.oneofs)\r\n object.msg = \"rssiLevelCmd\";\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this FFIMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceMessage.FFIMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n FFIMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return FFIMessage;\r\n })();\r\n return DeviceMessage;\r\n })();\r\n Buttplug.ServerMessage = (function () {\r\n /**\r\n * Properties of a ServerMessage.\r\n * @memberof Buttplug\r\n * @interface IServerMessage\r\n * @property {Buttplug.ServerMessage.IOk|null} [ok] ServerMessage ok\r\n * @property {Buttplug.ServerMessage.IError|null} [error] ServerMessage error\r\n * @property {Buttplug.ServerMessage.IScanningFinished|null} [scanningFinished] ServerMessage scanningFinished\r\n * @property {Buttplug.ServerMessage.IDeviceAdded|null} [deviceAdded] ServerMessage deviceAdded\r\n * @property {Buttplug.ServerMessage.IDeviceRemoved|null} [deviceRemoved] ServerMessage deviceRemoved\r\n * @property {Buttplug.ServerMessage.IDisconnect|null} [disconnect] ServerMessage disconnect\r\n */\r\n /**\r\n * Constructs a new ServerMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a ServerMessage.\r\n * @implements IServerMessage\r\n * @constructor\r\n * @param {Buttplug.IServerMessage=} [properties] Properties to set\r\n */\r\n function ServerMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * ServerMessage ok.\r\n * @member {Buttplug.ServerMessage.IOk|null|undefined} ok\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.ok = null;\r\n /**\r\n * ServerMessage error.\r\n * @member {Buttplug.ServerMessage.IError|null|undefined} error\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.error = null;\r\n /**\r\n * ServerMessage scanningFinished.\r\n * @member {Buttplug.ServerMessage.IScanningFinished|null|undefined} scanningFinished\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.scanningFinished = null;\r\n /**\r\n * ServerMessage deviceAdded.\r\n * @member {Buttplug.ServerMessage.IDeviceAdded|null|undefined} deviceAdded\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.deviceAdded = null;\r\n /**\r\n * ServerMessage deviceRemoved.\r\n * @member {Buttplug.ServerMessage.IDeviceRemoved|null|undefined} deviceRemoved\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.deviceRemoved = null;\r\n /**\r\n * ServerMessage disconnect.\r\n * @member {Buttplug.ServerMessage.IDisconnect|null|undefined} disconnect\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n ServerMessage.prototype.disconnect = null;\r\n // OneOf field names bound to virtual getters and setters\r\n var $oneOfFields;\r\n /**\r\n * ServerMessage msg.\r\n * @member {\"ok\"|\"error\"|\"scanningFinished\"|\"deviceAdded\"|\"deviceRemoved\"|\"disconnect\"|undefined} msg\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n */\r\n Object.defineProperty(ServerMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"ok\", \"error\", \"scanningFinished\", \"deviceAdded\", \"deviceRemoved\", \"disconnect\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n /**\r\n * Creates a new ServerMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.IServerMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage} ServerMessage instance\r\n */\r\n ServerMessage.create = function create(properties) {\r\n return new ServerMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified ServerMessage message. Does not implicitly {@link Buttplug.ServerMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.IServerMessage} message ServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ServerMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.ok != null && Object.hasOwnProperty.call(message, \"ok\"))\r\n $root.Buttplug.ServerMessage.Ok.encode(message.ok, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n if (message.error != null && Object.hasOwnProperty.call(message, \"error\"))\r\n $root.Buttplug.ServerMessage.Error.encode(message.error, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n if (message.scanningFinished != null && Object.hasOwnProperty.call(message, \"scanningFinished\"))\r\n $root.Buttplug.ServerMessage.ScanningFinished.encode(message.scanningFinished, writer.uint32(/* id 3, wireType 2 =*/ 26).fork()).ldelim();\r\n if (message.deviceAdded != null && Object.hasOwnProperty.call(message, \"deviceAdded\"))\r\n $root.Buttplug.ServerMessage.DeviceAdded.encode(message.deviceAdded, writer.uint32(/* id 4, wireType 2 =*/ 34).fork()).ldelim();\r\n if (message.deviceRemoved != null && Object.hasOwnProperty.call(message, \"deviceRemoved\"))\r\n $root.Buttplug.ServerMessage.DeviceRemoved.encode(message.deviceRemoved, writer.uint32(/* id 5, wireType 2 =*/ 42).fork()).ldelim();\r\n if (message.disconnect != null && Object.hasOwnProperty.call(message, \"disconnect\"))\r\n $root.Buttplug.ServerMessage.Disconnect.encode(message.disconnect, writer.uint32(/* id 6, wireType 2 =*/ 50).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified ServerMessage message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.IServerMessage} message ServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ServerMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a ServerMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage} ServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ServerMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.ok = $root.Buttplug.ServerMessage.Ok.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.error = $root.Buttplug.ServerMessage.Error.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.scanningFinished = $root.Buttplug.ServerMessage.ScanningFinished.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.deviceAdded = $root.Buttplug.ServerMessage.DeviceAdded.decode(reader, reader.uint32());\r\n break;\r\n case 5:\r\n message.deviceRemoved = $root.Buttplug.ServerMessage.DeviceRemoved.decode(reader, reader.uint32());\r\n break;\r\n case 6:\r\n message.disconnect = $root.Buttplug.ServerMessage.Disconnect.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a ServerMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage} ServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ServerMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a ServerMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ServerMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n var properties = {};\r\n if (message.ok != null && message.hasOwnProperty(\"ok\")) {\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.Ok.verify(message.ok);\r\n if (error)\r\n return \"ok.\" + error;\r\n }\r\n }\r\n if (message.error != null && message.hasOwnProperty(\"error\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.Error.verify(message.error);\r\n if (error)\r\n return \"error.\" + error;\r\n }\r\n }\r\n if (message.scanningFinished != null && message.hasOwnProperty(\"scanningFinished\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.ScanningFinished.verify(message.scanningFinished);\r\n if (error)\r\n return \"scanningFinished.\" + error;\r\n }\r\n }\r\n if (message.deviceAdded != null && message.hasOwnProperty(\"deviceAdded\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.DeviceAdded.verify(message.deviceAdded);\r\n if (error)\r\n return \"deviceAdded.\" + error;\r\n }\r\n }\r\n if (message.deviceRemoved != null && message.hasOwnProperty(\"deviceRemoved\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.DeviceRemoved.verify(message.deviceRemoved);\r\n if (error)\r\n return \"deviceRemoved.\" + error;\r\n }\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.Disconnect.verify(message.disconnect);\r\n if (error)\r\n return \"disconnect.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a ServerMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage} ServerMessage\r\n */\r\n ServerMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage)\r\n return object;\r\n var message = new $root.Buttplug.ServerMessage();\r\n if (object.ok != null) {\r\n if (typeof object.ok !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.ok: object expected\");\r\n message.ok = $root.Buttplug.ServerMessage.Ok.fromObject(object.ok);\r\n }\r\n if (object.error != null) {\r\n if (typeof object.error !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.error: object expected\");\r\n message.error = $root.Buttplug.ServerMessage.Error.fromObject(object.error);\r\n }\r\n if (object.scanningFinished != null) {\r\n if (typeof object.scanningFinished !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.scanningFinished: object expected\");\r\n message.scanningFinished = $root.Buttplug.ServerMessage.ScanningFinished.fromObject(object.scanningFinished);\r\n }\r\n if (object.deviceAdded != null) {\r\n if (typeof object.deviceAdded !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.deviceAdded: object expected\");\r\n message.deviceAdded = $root.Buttplug.ServerMessage.DeviceAdded.fromObject(object.deviceAdded);\r\n }\r\n if (object.deviceRemoved != null) {\r\n if (typeof object.deviceRemoved !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.deviceRemoved: object expected\");\r\n message.deviceRemoved = $root.Buttplug.ServerMessage.DeviceRemoved.fromObject(object.deviceRemoved);\r\n }\r\n if (object.disconnect != null) {\r\n if (typeof object.disconnect !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.disconnect: object expected\");\r\n message.disconnect = $root.Buttplug.ServerMessage.Disconnect.fromObject(object.disconnect);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a ServerMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage\r\n * @static\r\n * @param {Buttplug.ServerMessage} message ServerMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n ServerMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (message.ok != null && message.hasOwnProperty(\"ok\")) {\r\n object.ok = $root.Buttplug.ServerMessage.Ok.toObject(message.ok, options);\r\n if (options.oneofs)\r\n object.msg = \"ok\";\r\n }\r\n if (message.error != null && message.hasOwnProperty(\"error\")) {\r\n object.error = $root.Buttplug.ServerMessage.Error.toObject(message.error, options);\r\n if (options.oneofs)\r\n object.msg = \"error\";\r\n }\r\n if (message.scanningFinished != null && message.hasOwnProperty(\"scanningFinished\")) {\r\n object.scanningFinished = $root.Buttplug.ServerMessage.ScanningFinished.toObject(message.scanningFinished, options);\r\n if (options.oneofs)\r\n object.msg = \"scanningFinished\";\r\n }\r\n if (message.deviceAdded != null && message.hasOwnProperty(\"deviceAdded\")) {\r\n object.deviceAdded = $root.Buttplug.ServerMessage.DeviceAdded.toObject(message.deviceAdded, options);\r\n if (options.oneofs)\r\n object.msg = \"deviceAdded\";\r\n }\r\n if (message.deviceRemoved != null && message.hasOwnProperty(\"deviceRemoved\")) {\r\n object.deviceRemoved = $root.Buttplug.ServerMessage.DeviceRemoved.toObject(message.deviceRemoved, options);\r\n if (options.oneofs)\r\n object.msg = \"deviceRemoved\";\r\n }\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n object.disconnect = $root.Buttplug.ServerMessage.Disconnect.toObject(message.disconnect, options);\r\n if (options.oneofs)\r\n object.msg = \"disconnect\";\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this ServerMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n ServerMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n /**\r\n * ButtplugErrorType enum.\r\n * @name Buttplug.ServerMessage.ButtplugErrorType\r\n * @enum {number}\r\n * @property {number} ButtplugConnectorError=0 ButtplugConnectorError value\r\n * @property {number} ButtplugHandshakeError=1 ButtplugHandshakeError value\r\n * @property {number} ButtplugDeviceError=2 ButtplugDeviceError value\r\n * @property {number} ButtplugPingError=3 ButtplugPingError value\r\n * @property {number} ButtplugMessageError=4 ButtplugMessageError value\r\n * @property {number} ButtplugUnknownError=5 ButtplugUnknownError value\r\n */\r\n ServerMessage.ButtplugErrorType = (function () {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"ButtplugConnectorError\"] = 0;\r\n values[valuesById[1] = \"ButtplugHandshakeError\"] = 1;\r\n values[valuesById[2] = \"ButtplugDeviceError\"] = 2;\r\n values[valuesById[3] = \"ButtplugPingError\"] = 3;\r\n values[valuesById[4] = \"ButtplugMessageError\"] = 4;\r\n values[valuesById[5] = \"ButtplugUnknownError\"] = 5;\r\n return values;\r\n })();\r\n /**\r\n * MessageAttributeType enum.\r\n * @name Buttplug.ServerMessage.MessageAttributeType\r\n * @enum {number}\r\n * @property {number} VibrateCmd=0 VibrateCmd value\r\n * @property {number} RotateCmd=1 RotateCmd value\r\n * @property {number} LinearCmd=2 LinearCmd value\r\n * @property {number} StopDeviceCmd=3 StopDeviceCmd value\r\n * @property {number} RawReadCmd=4 RawReadCmd value\r\n * @property {number} RawWriteCmd=5 RawWriteCmd value\r\n * @property {number} RawSubscribeCmd=6 RawSubscribeCmd value\r\n * @property {number} RawUnsubscribeCmd=7 RawUnsubscribeCmd value\r\n * @property {number} BatteryLevelCmd=8 BatteryLevelCmd value\r\n * @property {number} RSSILevelCmd=9 RSSILevelCmd value\r\n */\r\n ServerMessage.MessageAttributeType = (function () {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"VibrateCmd\"] = 0;\r\n values[valuesById[1] = \"RotateCmd\"] = 1;\r\n values[valuesById[2] = \"LinearCmd\"] = 2;\r\n values[valuesById[3] = \"StopDeviceCmd\"] = 3;\r\n values[valuesById[4] = \"RawReadCmd\"] = 4;\r\n values[valuesById[5] = \"RawWriteCmd\"] = 5;\r\n values[valuesById[6] = \"RawSubscribeCmd\"] = 6;\r\n values[valuesById[7] = \"RawUnsubscribeCmd\"] = 7;\r\n values[valuesById[8] = \"BatteryLevelCmd\"] = 8;\r\n values[valuesById[9] = \"RSSILevelCmd\"] = 9;\r\n return values;\r\n })();\r\n ServerMessage.MessageAttributes = (function () {\r\n /**\r\n * Properties of a MessageAttributes.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IMessageAttributes\r\n * @property {Buttplug.ServerMessage.MessageAttributeType|null} [messageType] MessageAttributes messageType\r\n * @property {number|null} [featureCount] MessageAttributes featureCount\r\n * @property {Array.|null} [stepCount] MessageAttributes stepCount\r\n * @property {Array.|null} [endpoints] MessageAttributes endpoints\r\n * @property {Array.|null} [maxDuration] MessageAttributes maxDuration\r\n */\r\n /**\r\n * Constructs a new MessageAttributes.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a MessageAttributes.\r\n * @implements IMessageAttributes\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IMessageAttributes=} [properties] Properties to set\r\n */\r\n function MessageAttributes(properties) {\r\n this.stepCount = [];\r\n this.endpoints = [];\r\n this.maxDuration = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * MessageAttributes messageType.\r\n * @member {Buttplug.ServerMessage.MessageAttributeType} messageType\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.messageType = 0;\r\n /**\r\n * MessageAttributes featureCount.\r\n * @member {number} featureCount\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.featureCount = 0;\r\n /**\r\n * MessageAttributes stepCount.\r\n * @member {Array.} stepCount\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.stepCount = $util.emptyArray;\r\n /**\r\n * MessageAttributes endpoints.\r\n * @member {Array.} endpoints\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.endpoints = $util.emptyArray;\r\n /**\r\n * MessageAttributes maxDuration.\r\n * @member {Array.} maxDuration\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n */\r\n MessageAttributes.prototype.maxDuration = $util.emptyArray;\r\n /**\r\n * Creates a new MessageAttributes instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.IMessageAttributes=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes instance\r\n */\r\n MessageAttributes.create = function create(properties) {\r\n return new MessageAttributes(properties);\r\n };\r\n /**\r\n * Encodes the specified MessageAttributes message. Does not implicitly {@link Buttplug.ServerMessage.MessageAttributes.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.IMessageAttributes} message MessageAttributes message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n MessageAttributes.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.messageType != null && Object.hasOwnProperty.call(message, \"messageType\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.messageType);\r\n if (message.featureCount != null && Object.hasOwnProperty.call(message, \"featureCount\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).uint32(message.featureCount);\r\n if (message.stepCount != null && message.stepCount.length) {\r\n writer.uint32(/* id 3, wireType 2 =*/ 26).fork();\r\n for (var i = 0; i < message.stepCount.length; ++i)\r\n writer.uint32(message.stepCount[i]);\r\n writer.ldelim();\r\n }\r\n if (message.endpoints != null && message.endpoints.length) {\r\n writer.uint32(/* id 4, wireType 2 =*/ 34).fork();\r\n for (var i = 0; i < message.endpoints.length; ++i)\r\n writer.int32(message.endpoints[i]);\r\n writer.ldelim();\r\n }\r\n if (message.maxDuration != null && message.maxDuration.length) {\r\n writer.uint32(/* id 5, wireType 2 =*/ 42).fork();\r\n for (var i = 0; i < message.maxDuration.length; ++i)\r\n writer.uint32(message.maxDuration[i]);\r\n writer.ldelim();\r\n }\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified MessageAttributes message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.MessageAttributes.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.IMessageAttributes} message MessageAttributes message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n MessageAttributes.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a MessageAttributes message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n MessageAttributes.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.MessageAttributes();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.messageType = reader.int32();\r\n break;\r\n case 2:\r\n message.featureCount = reader.uint32();\r\n break;\r\n case 3:\r\n if (!(message.stepCount && message.stepCount.length))\r\n message.stepCount = [];\r\n if ((tag & 7) === 2) {\r\n var end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.stepCount.push(reader.uint32());\r\n }\r\n else\r\n message.stepCount.push(reader.uint32());\r\n break;\r\n case 4:\r\n if (!(message.endpoints && message.endpoints.length))\r\n message.endpoints = [];\r\n if ((tag & 7) === 2) {\r\n var end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.endpoints.push(reader.int32());\r\n }\r\n else\r\n message.endpoints.push(reader.int32());\r\n break;\r\n case 5:\r\n if (!(message.maxDuration && message.maxDuration.length))\r\n message.maxDuration = [];\r\n if ((tag & 7) === 2) {\r\n var end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.maxDuration.push(reader.uint32());\r\n }\r\n else\r\n message.maxDuration.push(reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a MessageAttributes message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n MessageAttributes.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a MessageAttributes message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n MessageAttributes.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.messageType != null && message.hasOwnProperty(\"messageType\"))\r\n switch (message.messageType) {\r\n default:\r\n return \"messageType: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n break;\r\n }\r\n if (message.featureCount != null && message.hasOwnProperty(\"featureCount\"))\r\n if (!$util.isInteger(message.featureCount))\r\n return \"featureCount: integer expected\";\r\n if (message.stepCount != null && message.hasOwnProperty(\"stepCount\")) {\r\n if (!Array.isArray(message.stepCount))\r\n return \"stepCount: array expected\";\r\n for (var i = 0; i < message.stepCount.length; ++i)\r\n if (!$util.isInteger(message.stepCount[i]))\r\n return \"stepCount: integer[] expected\";\r\n }\r\n if (message.endpoints != null && message.hasOwnProperty(\"endpoints\")) {\r\n if (!Array.isArray(message.endpoints))\r\n return \"endpoints: array expected\";\r\n for (var i = 0; i < message.endpoints.length; ++i)\r\n switch (message.endpoints[i]) {\r\n default:\r\n return \"endpoints: enum value[] expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n break;\r\n }\r\n }\r\n if (message.maxDuration != null && message.hasOwnProperty(\"maxDuration\")) {\r\n if (!Array.isArray(message.maxDuration))\r\n return \"maxDuration: array expected\";\r\n for (var i = 0; i < message.maxDuration.length; ++i)\r\n if (!$util.isInteger(message.maxDuration[i]))\r\n return \"maxDuration: integer[] expected\";\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a MessageAttributes message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.MessageAttributes} MessageAttributes\r\n */\r\n MessageAttributes.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.MessageAttributes)\r\n return object;\r\n var message = new $root.Buttplug.ServerMessage.MessageAttributes();\r\n switch (object.messageType) {\r\n case \"VibrateCmd\":\r\n case 0:\r\n message.messageType = 0;\r\n break;\r\n case \"RotateCmd\":\r\n case 1:\r\n message.messageType = 1;\r\n break;\r\n case \"LinearCmd\":\r\n case 2:\r\n message.messageType = 2;\r\n break;\r\n case \"StopDeviceCmd\":\r\n case 3:\r\n message.messageType = 3;\r\n break;\r\n case \"RawReadCmd\":\r\n case 4:\r\n message.messageType = 4;\r\n break;\r\n case \"RawWriteCmd\":\r\n case 5:\r\n message.messageType = 5;\r\n break;\r\n case \"RawSubscribeCmd\":\r\n case 6:\r\n message.messageType = 6;\r\n break;\r\n case \"RawUnsubscribeCmd\":\r\n case 7:\r\n message.messageType = 7;\r\n break;\r\n case \"BatteryLevelCmd\":\r\n case 8:\r\n message.messageType = 8;\r\n break;\r\n case \"RSSILevelCmd\":\r\n case 9:\r\n message.messageType = 9;\r\n break;\r\n }\r\n if (object.featureCount != null)\r\n message.featureCount = object.featureCount >>> 0;\r\n if (object.stepCount) {\r\n if (!Array.isArray(object.stepCount))\r\n throw TypeError(\".Buttplug.ServerMessage.MessageAttributes.stepCount: array expected\");\r\n message.stepCount = [];\r\n for (var i = 0; i < object.stepCount.length; ++i)\r\n message.stepCount[i] = object.stepCount[i] >>> 0;\r\n }\r\n if (object.endpoints) {\r\n if (!Array.isArray(object.endpoints))\r\n throw TypeError(\".Buttplug.ServerMessage.MessageAttributes.endpoints: array expected\");\r\n message.endpoints = [];\r\n for (var i = 0; i < object.endpoints.length; ++i)\r\n switch (object.endpoints[i]) {\r\n default:\r\n case \"Command\":\r\n case 0:\r\n message.endpoints[i] = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoints[i] = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoints[i] = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoints[i] = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoints[i] = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoints[i] = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoints[i] = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoints[i] = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoints[i] = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoints[i] = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoints[i] = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoints[i] = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoints[i] = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoints[i] = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoints[i] = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoints[i] = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoints[i] = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoints[i] = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoints[i] = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoints[i] = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoints[i] = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoints[i] = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoints[i] = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoints[i] = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoints[i] = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoints[i] = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoints[i] = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoints[i] = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoints[i] = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoints[i] = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoints[i] = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoints[i] = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoints[i] = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoints[i] = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoints[i] = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoints[i] = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoints[i] = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoints[i] = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoints[i] = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoints[i] = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoints[i] = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoints[i] = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoints[i] = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoints[i] = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoints[i] = 44;\r\n break;\r\n }\r\n }\r\n if (object.maxDuration) {\r\n if (!Array.isArray(object.maxDuration))\r\n throw TypeError(\".Buttplug.ServerMessage.MessageAttributes.maxDuration: array expected\");\r\n message.maxDuration = [];\r\n for (var i = 0; i < object.maxDuration.length; ++i)\r\n message.maxDuration[i] = object.maxDuration[i] >>> 0;\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a MessageAttributes message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @static\r\n * @param {Buttplug.ServerMessage.MessageAttributes} message MessageAttributes\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n MessageAttributes.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults) {\r\n object.stepCount = [];\r\n object.endpoints = [];\r\n object.maxDuration = [];\r\n }\r\n if (options.defaults) {\r\n object.messageType = options.enums === String ? \"VibrateCmd\" : 0;\r\n object.featureCount = 0;\r\n }\r\n if (message.messageType != null && message.hasOwnProperty(\"messageType\"))\r\n object.messageType = options.enums === String ? $root.Buttplug.ServerMessage.MessageAttributeType[message.messageType] : message.messageType;\r\n if (message.featureCount != null && message.hasOwnProperty(\"featureCount\"))\r\n object.featureCount = message.featureCount;\r\n if (message.stepCount && message.stepCount.length) {\r\n object.stepCount = [];\r\n for (var j = 0; j < message.stepCount.length; ++j)\r\n object.stepCount[j] = message.stepCount[j];\r\n }\r\n if (message.endpoints && message.endpoints.length) {\r\n object.endpoints = [];\r\n for (var j = 0; j < message.endpoints.length; ++j)\r\n object.endpoints[j] = options.enums === String ? $root.Buttplug.Endpoint[message.endpoints[j]] : message.endpoints[j];\r\n }\r\n if (message.maxDuration && message.maxDuration.length) {\r\n object.maxDuration = [];\r\n for (var j = 0; j < message.maxDuration.length; ++j)\r\n object.maxDuration[j] = message.maxDuration[j];\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this MessageAttributes to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.MessageAttributes\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n MessageAttributes.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return MessageAttributes;\r\n })();\r\n ServerMessage.Ok = (function () {\r\n /**\r\n * Properties of an Ok.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IOk\r\n */\r\n /**\r\n * Constructs a new Ok.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents an Ok.\r\n * @implements IOk\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IOk=} [properties] Properties to set\r\n */\r\n function Ok(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new Ok instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.IOk=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.Ok} Ok instance\r\n */\r\n Ok.create = function create(properties) {\r\n return new Ok(properties);\r\n };\r\n /**\r\n * Encodes the specified Ok message. Does not implicitly {@link Buttplug.ServerMessage.Ok.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.IOk} message Ok message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ok.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified Ok message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.Ok.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.IOk} message Ok message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Ok.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes an Ok message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.Ok} Ok\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ok.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.Ok();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes an Ok message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.Ok} Ok\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Ok.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies an Ok message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Ok.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates an Ok message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.Ok} Ok\r\n */\r\n Ok.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.Ok)\r\n return object;\r\n return new $root.Buttplug.ServerMessage.Ok();\r\n };\r\n /**\r\n * Creates a plain object from an Ok message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @static\r\n * @param {Buttplug.ServerMessage.Ok} message Ok\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n Ok.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this Ok to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.Ok\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n Ok.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return Ok;\r\n })();\r\n ServerMessage.Error = (function () {\r\n /**\r\n * Properties of an Error.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IError\r\n * @property {Buttplug.ServerMessage.ButtplugErrorType|null} [errorType] Error errorType\r\n * @property {string|null} [message] Error message\r\n * @property {string|null} [backtrace] Error backtrace\r\n */\r\n /**\r\n * Constructs a new Error.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents an Error.\r\n * @implements IError\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IError=} [properties] Properties to set\r\n */\r\n function Error(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Error errorType.\r\n * @member {Buttplug.ServerMessage.ButtplugErrorType} errorType\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n */\r\n Error.prototype.errorType = 0;\r\n /**\r\n * Error message.\r\n * @member {string} message\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n */\r\n Error.prototype.message = \"\";\r\n /**\r\n * Error backtrace.\r\n * @member {string} backtrace\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n */\r\n Error.prototype.backtrace = \"\";\r\n /**\r\n * Creates a new Error instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.IError=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.Error} Error instance\r\n */\r\n Error.create = function create(properties) {\r\n return new Error(properties);\r\n };\r\n /**\r\n * Encodes the specified Error message. Does not implicitly {@link Buttplug.ServerMessage.Error.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.IError} message Error message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Error.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.errorType != null && Object.hasOwnProperty.call(message, \"errorType\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).int32(message.errorType);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n writer.uint32(/* id 2, wireType 2 =*/ 18).string(message.message);\r\n if (message.backtrace != null && Object.hasOwnProperty.call(message, \"backtrace\"))\r\n writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.backtrace);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified Error message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.Error.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.IError} message Error message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Error.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes an Error message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.Error} Error\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Error.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.Error();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.errorType = reader.int32();\r\n break;\r\n case 2:\r\n message.message = reader.string();\r\n break;\r\n case 3:\r\n message.backtrace = reader.string();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes an Error message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.Error} Error\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Error.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies an Error message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Error.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.errorType != null && message.hasOwnProperty(\"errorType\"))\r\n switch (message.errorType) {\r\n default:\r\n return \"errorType: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n break;\r\n }\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n if (!$util.isString(message.message))\r\n return \"message: string expected\";\r\n if (message.backtrace != null && message.hasOwnProperty(\"backtrace\"))\r\n if (!$util.isString(message.backtrace))\r\n return \"backtrace: string expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates an Error message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.Error} Error\r\n */\r\n Error.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.Error)\r\n return object;\r\n var message = new $root.Buttplug.ServerMessage.Error();\r\n switch (object.errorType) {\r\n case \"ButtplugConnectorError\":\r\n case 0:\r\n message.errorType = 0;\r\n break;\r\n case \"ButtplugHandshakeError\":\r\n case 1:\r\n message.errorType = 1;\r\n break;\r\n case \"ButtplugDeviceError\":\r\n case 2:\r\n message.errorType = 2;\r\n break;\r\n case \"ButtplugPingError\":\r\n case 3:\r\n message.errorType = 3;\r\n break;\r\n case \"ButtplugMessageError\":\r\n case 4:\r\n message.errorType = 4;\r\n break;\r\n case \"ButtplugUnknownError\":\r\n case 5:\r\n message.errorType = 5;\r\n break;\r\n }\r\n if (object.message != null)\r\n message.message = String(object.message);\r\n if (object.backtrace != null)\r\n message.backtrace = String(object.backtrace);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from an Error message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @static\r\n * @param {Buttplug.ServerMessage.Error} message Error\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n Error.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.errorType = options.enums === String ? \"ButtplugConnectorError\" : 0;\r\n object.message = \"\";\r\n object.backtrace = \"\";\r\n }\r\n if (message.errorType != null && message.hasOwnProperty(\"errorType\"))\r\n object.errorType = options.enums === String ? $root.Buttplug.ServerMessage.ButtplugErrorType[message.errorType] : message.errorType;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = message.message;\r\n if (message.backtrace != null && message.hasOwnProperty(\"backtrace\"))\r\n object.backtrace = message.backtrace;\r\n return object;\r\n };\r\n /**\r\n * Converts this Error to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.Error\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n Error.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return Error;\r\n })();\r\n ServerMessage.ScanningFinished = (function () {\r\n /**\r\n * Properties of a ScanningFinished.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IScanningFinished\r\n */\r\n /**\r\n * Constructs a new ScanningFinished.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a ScanningFinished.\r\n * @implements IScanningFinished\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IScanningFinished=} [properties] Properties to set\r\n */\r\n function ScanningFinished(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new ScanningFinished instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.IScanningFinished=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished instance\r\n */\r\n ScanningFinished.create = function create(properties) {\r\n return new ScanningFinished(properties);\r\n };\r\n /**\r\n * Encodes the specified ScanningFinished message. Does not implicitly {@link Buttplug.ServerMessage.ScanningFinished.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.IScanningFinished} message ScanningFinished message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ScanningFinished.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified ScanningFinished message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.ScanningFinished.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.IScanningFinished} message ScanningFinished message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ScanningFinished.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a ScanningFinished message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ScanningFinished.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.ScanningFinished();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a ScanningFinished message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ScanningFinished.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a ScanningFinished message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ScanningFinished.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a ScanningFinished message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.ScanningFinished} ScanningFinished\r\n */\r\n ScanningFinished.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.ScanningFinished)\r\n return object;\r\n return new $root.Buttplug.ServerMessage.ScanningFinished();\r\n };\r\n /**\r\n * Creates a plain object from a ScanningFinished message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @static\r\n * @param {Buttplug.ServerMessage.ScanningFinished} message ScanningFinished\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n ScanningFinished.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this ScanningFinished to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.ScanningFinished\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n ScanningFinished.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return ScanningFinished;\r\n })();\r\n ServerMessage.DeviceAdded = (function () {\r\n /**\r\n * Properties of a DeviceAdded.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IDeviceAdded\r\n * @property {string|null} [name] DeviceAdded name\r\n * @property {number|null} [index] DeviceAdded index\r\n * @property {Array.|null} [messageAttributes] DeviceAdded messageAttributes\r\n */\r\n /**\r\n * Constructs a new DeviceAdded.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a DeviceAdded.\r\n * @implements IDeviceAdded\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IDeviceAdded=} [properties] Properties to set\r\n */\r\n function DeviceAdded(properties) {\r\n this.messageAttributes = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * DeviceAdded name.\r\n * @member {string} name\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n */\r\n DeviceAdded.prototype.name = \"\";\r\n /**\r\n * DeviceAdded index.\r\n * @member {number} index\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n */\r\n DeviceAdded.prototype.index = 0;\r\n /**\r\n * DeviceAdded messageAttributes.\r\n * @member {Array.} messageAttributes\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n */\r\n DeviceAdded.prototype.messageAttributes = $util.emptyArray;\r\n /**\r\n * Creates a new DeviceAdded instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceAdded=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded instance\r\n */\r\n DeviceAdded.create = function create(properties) {\r\n return new DeviceAdded(properties);\r\n };\r\n /**\r\n * Encodes the specified DeviceAdded message. Does not implicitly {@link Buttplug.ServerMessage.DeviceAdded.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceAdded} message DeviceAdded message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceAdded.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.name != null && Object.hasOwnProperty.call(message, \"name\"))\r\n writer.uint32(/* id 1, wireType 2 =*/ 10).string(message.name);\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).uint32(message.index);\r\n if (message.messageAttributes != null && message.messageAttributes.length)\r\n for (var i = 0; i < message.messageAttributes.length; ++i)\r\n $root.Buttplug.ServerMessage.MessageAttributes.encode(message.messageAttributes[i], writer.uint32(/* id 3, wireType 2 =*/ 26).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified DeviceAdded message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.DeviceAdded.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceAdded} message DeviceAdded message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceAdded.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a DeviceAdded message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceAdded.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.DeviceAdded();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.name = reader.string();\r\n break;\r\n case 2:\r\n message.index = reader.uint32();\r\n break;\r\n case 3:\r\n if (!(message.messageAttributes && message.messageAttributes.length))\r\n message.messageAttributes = [];\r\n message.messageAttributes.push($root.Buttplug.ServerMessage.MessageAttributes.decode(reader, reader.uint32()));\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a DeviceAdded message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceAdded.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a DeviceAdded message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceAdded.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n if (!$util.isString(message.name))\r\n return \"name: string expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.messageAttributes != null && message.hasOwnProperty(\"messageAttributes\")) {\r\n if (!Array.isArray(message.messageAttributes))\r\n return \"messageAttributes: array expected\";\r\n for (var i = 0; i < message.messageAttributes.length; ++i) {\r\n var error = $root.Buttplug.ServerMessage.MessageAttributes.verify(message.messageAttributes[i]);\r\n if (error)\r\n return \"messageAttributes.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a DeviceAdded message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.DeviceAdded} DeviceAdded\r\n */\r\n DeviceAdded.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.DeviceAdded)\r\n return object;\r\n var message = new $root.Buttplug.ServerMessage.DeviceAdded();\r\n if (object.name != null)\r\n message.name = String(object.name);\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.messageAttributes) {\r\n if (!Array.isArray(object.messageAttributes))\r\n throw TypeError(\".Buttplug.ServerMessage.DeviceAdded.messageAttributes: array expected\");\r\n message.messageAttributes = [];\r\n for (var i = 0; i < object.messageAttributes.length; ++i) {\r\n if (typeof object.messageAttributes[i] !== \"object\")\r\n throw TypeError(\".Buttplug.ServerMessage.DeviceAdded.messageAttributes: object expected\");\r\n message.messageAttributes[i] = $root.Buttplug.ServerMessage.MessageAttributes.fromObject(object.messageAttributes[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a DeviceAdded message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @static\r\n * @param {Buttplug.ServerMessage.DeviceAdded} message DeviceAdded\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n DeviceAdded.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.messageAttributes = [];\r\n if (options.defaults) {\r\n object.name = \"\";\r\n object.index = 0;\r\n }\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n object.name = message.name;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.messageAttributes && message.messageAttributes.length) {\r\n object.messageAttributes = [];\r\n for (var j = 0; j < message.messageAttributes.length; ++j)\r\n object.messageAttributes[j] = $root.Buttplug.ServerMessage.MessageAttributes.toObject(message.messageAttributes[j], options);\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this DeviceAdded to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.DeviceAdded\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n DeviceAdded.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return DeviceAdded;\r\n })();\r\n ServerMessage.DeviceRemoved = (function () {\r\n /**\r\n * Properties of a DeviceRemoved.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IDeviceRemoved\r\n * @property {number|null} [index] DeviceRemoved index\r\n */\r\n /**\r\n * Constructs a new DeviceRemoved.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a DeviceRemoved.\r\n * @implements IDeviceRemoved\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved=} [properties] Properties to set\r\n */\r\n function DeviceRemoved(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * DeviceRemoved index.\r\n * @member {number} index\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @instance\r\n */\r\n DeviceRemoved.prototype.index = 0;\r\n /**\r\n * Creates a new DeviceRemoved instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved instance\r\n */\r\n DeviceRemoved.create = function create(properties) {\r\n return new DeviceRemoved(properties);\r\n };\r\n /**\r\n * Encodes the specified DeviceRemoved message. Does not implicitly {@link Buttplug.ServerMessage.DeviceRemoved.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved} message DeviceRemoved message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceRemoved.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified DeviceRemoved message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.DeviceRemoved.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDeviceRemoved} message DeviceRemoved message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceRemoved.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a DeviceRemoved message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceRemoved.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.DeviceRemoved();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a DeviceRemoved message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceRemoved.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a DeviceRemoved message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceRemoved.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a DeviceRemoved message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.DeviceRemoved} DeviceRemoved\r\n */\r\n DeviceRemoved.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.DeviceRemoved)\r\n return object;\r\n var message = new $root.Buttplug.ServerMessage.DeviceRemoved();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a DeviceRemoved message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @static\r\n * @param {Buttplug.ServerMessage.DeviceRemoved} message DeviceRemoved\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n DeviceRemoved.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.index = 0;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n return object;\r\n };\r\n /**\r\n * Converts this DeviceRemoved to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.DeviceRemoved\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n DeviceRemoved.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return DeviceRemoved;\r\n })();\r\n ServerMessage.Disconnect = (function () {\r\n /**\r\n * Properties of a Disconnect.\r\n * @memberof Buttplug.ServerMessage\r\n * @interface IDisconnect\r\n */\r\n /**\r\n * Constructs a new Disconnect.\r\n * @memberof Buttplug.ServerMessage\r\n * @classdesc Represents a Disconnect.\r\n * @implements IDisconnect\r\n * @constructor\r\n * @param {Buttplug.ServerMessage.IDisconnect=} [properties] Properties to set\r\n */\r\n function Disconnect(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Creates a new Disconnect instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDisconnect=} [properties] Properties to set\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect instance\r\n */\r\n Disconnect.create = function create(properties) {\r\n return new Disconnect(properties);\r\n };\r\n /**\r\n * Encodes the specified Disconnect message. Does not implicitly {@link Buttplug.ServerMessage.Disconnect.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified Disconnect message, length delimited. Does not implicitly {@link Buttplug.ServerMessage.Disconnect.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ServerMessage.Disconnect();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a Disconnect message.\r\n * @function verify\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Disconnect.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a Disconnect message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ServerMessage.Disconnect} Disconnect\r\n */\r\n Disconnect.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ServerMessage.Disconnect)\r\n return object;\r\n return new $root.Buttplug.ServerMessage.Disconnect();\r\n };\r\n /**\r\n * Creates a plain object from a Disconnect message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @static\r\n * @param {Buttplug.ServerMessage.Disconnect} message Disconnect\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n Disconnect.toObject = function toObject() {\r\n return {};\r\n };\r\n /**\r\n * Converts this Disconnect to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ServerMessage.Disconnect\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n Disconnect.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return Disconnect;\r\n })();\r\n return ServerMessage;\r\n })();\r\n Buttplug.DeviceEvent = (function () {\r\n /**\r\n * Properties of a DeviceEvent.\r\n * @memberof Buttplug\r\n * @interface IDeviceEvent\r\n * @property {Buttplug.DeviceEvent.IDisconnect|null} [disconnect] DeviceEvent disconnect\r\n * @property {Buttplug.DeviceEvent.IBatteryLevelReading|null} [batteryLevelReading] DeviceEvent batteryLevelReading\r\n * @property {Buttplug.DeviceEvent.IRSSILevelReading|null} [rssiLevelReading] DeviceEvent rssiLevelReading\r\n * @property {Buttplug.DeviceEvent.IRawReading|null} [rawReading] DeviceEvent rawReading\r\n */\r\n /**\r\n * Constructs a new DeviceEvent.\r\n * @memberof Buttplug\r\n * @classdesc Represents a DeviceEvent.\r\n * @implements IDeviceEvent\r\n * @constructor\r\n * @param {Buttplug.IDeviceEvent=} [properties] Properties to set\r\n */\r\n function DeviceEvent(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * DeviceEvent disconnect.\r\n * @member {Buttplug.DeviceEvent.IDisconnect|null|undefined} disconnect\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.disconnect = null;\r\n /**\r\n * DeviceEvent batteryLevelReading.\r\n * @member {Buttplug.DeviceEvent.IBatteryLevelReading|null|undefined} batteryLevelReading\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.batteryLevelReading = null;\r\n /**\r\n * DeviceEvent rssiLevelReading.\r\n * @member {Buttplug.DeviceEvent.IRSSILevelReading|null|undefined} rssiLevelReading\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.rssiLevelReading = null;\r\n /**\r\n * DeviceEvent rawReading.\r\n * @member {Buttplug.DeviceEvent.IRawReading|null|undefined} rawReading\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n DeviceEvent.prototype.rawReading = null;\r\n // OneOf field names bound to virtual getters and setters\r\n var $oneOfFields;\r\n /**\r\n * DeviceEvent msg.\r\n * @member {\"disconnect\"|\"batteryLevelReading\"|\"rssiLevelReading\"|\"rawReading\"|undefined} msg\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n */\r\n Object.defineProperty(DeviceEvent.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"disconnect\", \"batteryLevelReading\", \"rssiLevelReading\", \"rawReading\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n /**\r\n * Creates a new DeviceEvent instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.IDeviceEvent=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent instance\r\n */\r\n DeviceEvent.create = function create(properties) {\r\n return new DeviceEvent(properties);\r\n };\r\n /**\r\n * Encodes the specified DeviceEvent message. Does not implicitly {@link Buttplug.DeviceEvent.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.IDeviceEvent} message DeviceEvent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceEvent.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.disconnect != null && Object.hasOwnProperty.call(message, \"disconnect\"))\r\n $root.Buttplug.DeviceEvent.Disconnect.encode(message.disconnect, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n if (message.batteryLevelReading != null && Object.hasOwnProperty.call(message, \"batteryLevelReading\"))\r\n $root.Buttplug.DeviceEvent.BatteryLevelReading.encode(message.batteryLevelReading, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n if (message.rssiLevelReading != null && Object.hasOwnProperty.call(message, \"rssiLevelReading\"))\r\n $root.Buttplug.DeviceEvent.RSSILevelReading.encode(message.rssiLevelReading, writer.uint32(/* id 3, wireType 2 =*/ 26).fork()).ldelim();\r\n if (message.rawReading != null && Object.hasOwnProperty.call(message, \"rawReading\"))\r\n $root.Buttplug.DeviceEvent.RawReading.encode(message.rawReading, writer.uint32(/* id 4, wireType 2 =*/ 34).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified DeviceEvent message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.IDeviceEvent} message DeviceEvent message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n DeviceEvent.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a DeviceEvent message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceEvent.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.disconnect = $root.Buttplug.DeviceEvent.Disconnect.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.batteryLevelReading = $root.Buttplug.DeviceEvent.BatteryLevelReading.decode(reader, reader.uint32());\r\n break;\r\n case 3:\r\n message.rssiLevelReading = $root.Buttplug.DeviceEvent.RSSILevelReading.decode(reader, reader.uint32());\r\n break;\r\n case 4:\r\n message.rawReading = $root.Buttplug.DeviceEvent.RawReading.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a DeviceEvent message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n DeviceEvent.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a DeviceEvent message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n DeviceEvent.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n var properties = {};\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceEvent.Disconnect.verify(message.disconnect);\r\n if (error)\r\n return \"disconnect.\" + error;\r\n }\r\n }\r\n if (message.batteryLevelReading != null && message.hasOwnProperty(\"batteryLevelReading\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceEvent.BatteryLevelReading.verify(message.batteryLevelReading);\r\n if (error)\r\n return \"batteryLevelReading.\" + error;\r\n }\r\n }\r\n if (message.rssiLevelReading != null && message.hasOwnProperty(\"rssiLevelReading\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceEvent.RSSILevelReading.verify(message.rssiLevelReading);\r\n if (error)\r\n return \"rssiLevelReading.\" + error;\r\n }\r\n }\r\n if (message.rawReading != null && message.hasOwnProperty(\"rawReading\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceEvent.RawReading.verify(message.rawReading);\r\n if (error)\r\n return \"rawReading.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a DeviceEvent message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceEvent} DeviceEvent\r\n */\r\n DeviceEvent.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent)\r\n return object;\r\n var message = new $root.Buttplug.DeviceEvent();\r\n if (object.disconnect != null) {\r\n if (typeof object.disconnect !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.disconnect: object expected\");\r\n message.disconnect = $root.Buttplug.DeviceEvent.Disconnect.fromObject(object.disconnect);\r\n }\r\n if (object.batteryLevelReading != null) {\r\n if (typeof object.batteryLevelReading !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.batteryLevelReading: object expected\");\r\n message.batteryLevelReading = $root.Buttplug.DeviceEvent.BatteryLevelReading.fromObject(object.batteryLevelReading);\r\n }\r\n if (object.rssiLevelReading != null) {\r\n if (typeof object.rssiLevelReading !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.rssiLevelReading: object expected\");\r\n message.rssiLevelReading = $root.Buttplug.DeviceEvent.RSSILevelReading.fromObject(object.rssiLevelReading);\r\n }\r\n if (object.rawReading != null) {\r\n if (typeof object.rawReading !== \"object\")\r\n throw TypeError(\".Buttplug.DeviceEvent.rawReading: object expected\");\r\n message.rawReading = $root.Buttplug.DeviceEvent.RawReading.fromObject(object.rawReading);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a DeviceEvent message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent\r\n * @static\r\n * @param {Buttplug.DeviceEvent} message DeviceEvent\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n DeviceEvent.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (message.disconnect != null && message.hasOwnProperty(\"disconnect\")) {\r\n object.disconnect = $root.Buttplug.DeviceEvent.Disconnect.toObject(message.disconnect, options);\r\n if (options.oneofs)\r\n object.msg = \"disconnect\";\r\n }\r\n if (message.batteryLevelReading != null && message.hasOwnProperty(\"batteryLevelReading\")) {\r\n object.batteryLevelReading = $root.Buttplug.DeviceEvent.BatteryLevelReading.toObject(message.batteryLevelReading, options);\r\n if (options.oneofs)\r\n object.msg = \"batteryLevelReading\";\r\n }\r\n if (message.rssiLevelReading != null && message.hasOwnProperty(\"rssiLevelReading\")) {\r\n object.rssiLevelReading = $root.Buttplug.DeviceEvent.RSSILevelReading.toObject(message.rssiLevelReading, options);\r\n if (options.oneofs)\r\n object.msg = \"rssiLevelReading\";\r\n }\r\n if (message.rawReading != null && message.hasOwnProperty(\"rawReading\")) {\r\n object.rawReading = $root.Buttplug.DeviceEvent.RawReading.toObject(message.rawReading, options);\r\n if (options.oneofs)\r\n object.msg = \"rawReading\";\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this DeviceEvent to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n DeviceEvent.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n DeviceEvent.Disconnect = (function () {\r\n /**\r\n * Properties of a Disconnect.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IDisconnect\r\n * @property {number|null} [index] Disconnect index\r\n */\r\n /**\r\n * Constructs a new Disconnect.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a Disconnect.\r\n * @implements IDisconnect\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IDisconnect=} [properties] Properties to set\r\n */\r\n function Disconnect(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * Disconnect index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @instance\r\n */\r\n Disconnect.prototype.index = 0;\r\n /**\r\n * Creates a new Disconnect instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IDisconnect=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect instance\r\n */\r\n Disconnect.create = function create(properties) {\r\n return new Disconnect(properties);\r\n };\r\n /**\r\n * Encodes the specified Disconnect message. Does not implicitly {@link Buttplug.DeviceEvent.Disconnect.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified Disconnect message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.Disconnect.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IDisconnect} message Disconnect message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n Disconnect.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.Disconnect();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a Disconnect message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n Disconnect.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a Disconnect message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n Disconnect.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a Disconnect message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceEvent.Disconnect} Disconnect\r\n */\r\n Disconnect.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.Disconnect)\r\n return object;\r\n var message = new $root.Buttplug.DeviceEvent.Disconnect();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a Disconnect message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @static\r\n * @param {Buttplug.DeviceEvent.Disconnect} message Disconnect\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n Disconnect.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.index = 0;\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n return object;\r\n };\r\n /**\r\n * Converts this Disconnect to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.Disconnect\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n Disconnect.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return Disconnect;\r\n })();\r\n DeviceEvent.RawReading = (function () {\r\n /**\r\n * Properties of a RawReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IRawReading\r\n * @property {number|null} [index] RawReading index\r\n * @property {Buttplug.Endpoint|null} [endpoint] RawReading endpoint\r\n * @property {Uint8Array|null} [data] RawReading data\r\n */\r\n /**\r\n * Constructs a new RawReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a RawReading.\r\n * @implements IRawReading\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IRawReading=} [properties] Properties to set\r\n */\r\n function RawReading(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RawReading index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n */\r\n RawReading.prototype.index = 0;\r\n /**\r\n * RawReading endpoint.\r\n * @member {Buttplug.Endpoint} endpoint\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n */\r\n RawReading.prototype.endpoint = 0;\r\n /**\r\n * RawReading data.\r\n * @member {Uint8Array} data\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n */\r\n RawReading.prototype.data = $util.newBuffer([]);\r\n /**\r\n * Creates a new RawReading instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRawReading=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading instance\r\n */\r\n RawReading.create = function create(properties) {\r\n return new RawReading(properties);\r\n };\r\n /**\r\n * Encodes the specified RawReading message. Does not implicitly {@link Buttplug.DeviceEvent.RawReading.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRawReading} message RawReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReading.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n if (message.endpoint != null && Object.hasOwnProperty.call(message, \"endpoint\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).int32(message.endpoint);\r\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\r\n writer.uint32(/* id 3, wireType 2 =*/ 26).bytes(message.data);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RawReading message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.RawReading.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRawReading} message RawReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RawReading.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RawReading message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReading.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.RawReading();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.endpoint = reader.int32();\r\n break;\r\n case 3:\r\n message.data = reader.bytes();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RawReading message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RawReading.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RawReading message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RawReading.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n switch (message.endpoint) {\r\n default:\r\n return \"endpoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n case 9:\r\n case 10:\r\n case 11:\r\n case 12:\r\n case 13:\r\n case 14:\r\n case 15:\r\n case 16:\r\n case 17:\r\n case 18:\r\n case 19:\r\n case 20:\r\n case 21:\r\n case 22:\r\n case 23:\r\n case 24:\r\n case 25:\r\n case 26:\r\n case 27:\r\n case 28:\r\n case 29:\r\n case 30:\r\n case 31:\r\n case 32:\r\n case 33:\r\n case 34:\r\n case 35:\r\n case 36:\r\n case 37:\r\n case 38:\r\n case 39:\r\n case 40:\r\n case 41:\r\n case 42:\r\n case 43:\r\n case 44:\r\n break;\r\n }\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\r\n return \"data: buffer expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a RawReading message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceEvent.RawReading} RawReading\r\n */\r\n RawReading.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.RawReading)\r\n return object;\r\n var message = new $root.Buttplug.DeviceEvent.RawReading();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n switch (object.endpoint) {\r\n case \"Command\":\r\n case 0:\r\n message.endpoint = 0;\r\n break;\r\n case \"Firmware\":\r\n case 1:\r\n message.endpoint = 1;\r\n break;\r\n case \"Rx\":\r\n case 2:\r\n message.endpoint = 2;\r\n break;\r\n case \"RxAccel\":\r\n case 3:\r\n message.endpoint = 3;\r\n break;\r\n case \"RxBLEBattery\":\r\n case 4:\r\n message.endpoint = 4;\r\n break;\r\n case \"RxPressure\":\r\n case 5:\r\n message.endpoint = 5;\r\n break;\r\n case \"RxTouch\":\r\n case 6:\r\n message.endpoint = 6;\r\n break;\r\n case \"Tx\":\r\n case 7:\r\n message.endpoint = 7;\r\n break;\r\n case \"TxMode\":\r\n case 8:\r\n message.endpoint = 8;\r\n break;\r\n case \"TxShock\":\r\n case 9:\r\n message.endpoint = 9;\r\n break;\r\n case \"TxVibrate\":\r\n case 10:\r\n message.endpoint = 10;\r\n break;\r\n case \"TxVendorControl\":\r\n case 11:\r\n message.endpoint = 11;\r\n break;\r\n case \"Whitelist\":\r\n case 12:\r\n message.endpoint = 12;\r\n break;\r\n case \"Generic0\":\r\n case 13:\r\n message.endpoint = 13;\r\n break;\r\n case \"Generic1\":\r\n case 14:\r\n message.endpoint = 14;\r\n break;\r\n case \"Generic2\":\r\n case 15:\r\n message.endpoint = 15;\r\n break;\r\n case \"Generic3\":\r\n case 16:\r\n message.endpoint = 16;\r\n break;\r\n case \"Generic4\":\r\n case 17:\r\n message.endpoint = 17;\r\n break;\r\n case \"Generic5\":\r\n case 18:\r\n message.endpoint = 18;\r\n break;\r\n case \"Generic6\":\r\n case 19:\r\n message.endpoint = 19;\r\n break;\r\n case \"Generic7\":\r\n case 20:\r\n message.endpoint = 20;\r\n break;\r\n case \"Generic8\":\r\n case 21:\r\n message.endpoint = 21;\r\n break;\r\n case \"Generic9\":\r\n case 22:\r\n message.endpoint = 22;\r\n break;\r\n case \"Generic10\":\r\n case 23:\r\n message.endpoint = 23;\r\n break;\r\n case \"Generic11\":\r\n case 24:\r\n message.endpoint = 24;\r\n break;\r\n case \"Generic12\":\r\n case 25:\r\n message.endpoint = 25;\r\n break;\r\n case \"Generic13\":\r\n case 26:\r\n message.endpoint = 26;\r\n break;\r\n case \"Generic14\":\r\n case 27:\r\n message.endpoint = 27;\r\n break;\r\n case \"Generic15\":\r\n case 28:\r\n message.endpoint = 28;\r\n break;\r\n case \"Generic16\":\r\n case 29:\r\n message.endpoint = 29;\r\n break;\r\n case \"Generic17\":\r\n case 30:\r\n message.endpoint = 30;\r\n break;\r\n case \"Generic18\":\r\n case 31:\r\n message.endpoint = 31;\r\n break;\r\n case \"Generic19\":\r\n case 32:\r\n message.endpoint = 32;\r\n break;\r\n case \"Generic20\":\r\n case 33:\r\n message.endpoint = 33;\r\n break;\r\n case \"Generic21\":\r\n case 34:\r\n message.endpoint = 34;\r\n break;\r\n case \"Generic22\":\r\n case 35:\r\n message.endpoint = 35;\r\n break;\r\n case \"Generic23\":\r\n case 36:\r\n message.endpoint = 36;\r\n break;\r\n case \"Generic24\":\r\n case 37:\r\n message.endpoint = 37;\r\n break;\r\n case \"Generic25\":\r\n case 38:\r\n message.endpoint = 38;\r\n break;\r\n case \"Generic26\":\r\n case 39:\r\n message.endpoint = 39;\r\n break;\r\n case \"Generic27\":\r\n case 40:\r\n message.endpoint = 40;\r\n break;\r\n case \"Generic28\":\r\n case 41:\r\n message.endpoint = 41;\r\n break;\r\n case \"Generic29\":\r\n case 42:\r\n message.endpoint = 42;\r\n break;\r\n case \"Generic30\":\r\n case 43:\r\n message.endpoint = 43;\r\n break;\r\n case \"Generic31\":\r\n case 44:\r\n message.endpoint = 44;\r\n break;\r\n }\r\n if (object.data != null)\r\n if (typeof object.data === \"string\")\r\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\r\n else if (object.data.length)\r\n message.data = object.data;\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RawReading message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.RawReading} message RawReading\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RawReading.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.endpoint = options.enums === String ? \"Command\" : 0;\r\n if (options.bytes === String)\r\n object.data = \"\";\r\n else {\r\n object.data = [];\r\n if (options.bytes !== Array)\r\n object.data = $util.newBuffer(object.data);\r\n }\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.endpoint != null && message.hasOwnProperty(\"endpoint\"))\r\n object.endpoint = options.enums === String ? $root.Buttplug.Endpoint[message.endpoint] : message.endpoint;\r\n if (message.data != null && message.hasOwnProperty(\"data\"))\r\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\r\n return object;\r\n };\r\n /**\r\n * Converts this RawReading to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.RawReading\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RawReading.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RawReading;\r\n })();\r\n DeviceEvent.BatteryLevelReading = (function () {\r\n /**\r\n * Properties of a BatteryLevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IBatteryLevelReading\r\n * @property {number|null} [index] BatteryLevelReading index\r\n * @property {number|null} [reading] BatteryLevelReading reading\r\n */\r\n /**\r\n * Constructs a new BatteryLevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a BatteryLevelReading.\r\n * @implements IBatteryLevelReading\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading=} [properties] Properties to set\r\n */\r\n function BatteryLevelReading(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * BatteryLevelReading index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @instance\r\n */\r\n BatteryLevelReading.prototype.index = 0;\r\n /**\r\n * BatteryLevelReading reading.\r\n * @member {number} reading\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @instance\r\n */\r\n BatteryLevelReading.prototype.reading = 0;\r\n /**\r\n * Creates a new BatteryLevelReading instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading instance\r\n */\r\n BatteryLevelReading.create = function create(properties) {\r\n return new BatteryLevelReading(properties);\r\n };\r\n /**\r\n * Encodes the specified BatteryLevelReading message. Does not implicitly {@link Buttplug.DeviceEvent.BatteryLevelReading.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading} message BatteryLevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelReading.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n if (message.reading != null && Object.hasOwnProperty.call(message, \"reading\"))\r\n writer.uint32(/* id 2, wireType 1 =*/ 17).double(message.reading);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified BatteryLevelReading message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.BatteryLevelReading.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IBatteryLevelReading} message BatteryLevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n BatteryLevelReading.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a BatteryLevelReading message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelReading.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.BatteryLevelReading();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.reading = reader.double();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a BatteryLevelReading message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n BatteryLevelReading.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a BatteryLevelReading message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n BatteryLevelReading.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n if (typeof message.reading !== \"number\")\r\n return \"reading: number expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a BatteryLevelReading message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceEvent.BatteryLevelReading} BatteryLevelReading\r\n */\r\n BatteryLevelReading.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.BatteryLevelReading)\r\n return object;\r\n var message = new $root.Buttplug.DeviceEvent.BatteryLevelReading();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.reading != null)\r\n message.reading = Number(object.reading);\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a BatteryLevelReading message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.BatteryLevelReading} message BatteryLevelReading\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n BatteryLevelReading.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.reading = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n object.reading = options.json && !isFinite(message.reading) ? String(message.reading) : message.reading;\r\n return object;\r\n };\r\n /**\r\n * Converts this BatteryLevelReading to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.BatteryLevelReading\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n BatteryLevelReading.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return BatteryLevelReading;\r\n })();\r\n DeviceEvent.RSSILevelReading = (function () {\r\n /**\r\n * Properties of a RSSILevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @interface IRSSILevelReading\r\n * @property {number|null} [index] RSSILevelReading index\r\n * @property {number|null} [reading] RSSILevelReading reading\r\n */\r\n /**\r\n * Constructs a new RSSILevelReading.\r\n * @memberof Buttplug.DeviceEvent\r\n * @classdesc Represents a RSSILevelReading.\r\n * @implements IRSSILevelReading\r\n * @constructor\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading=} [properties] Properties to set\r\n */\r\n function RSSILevelReading(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * RSSILevelReading index.\r\n * @member {number} index\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @instance\r\n */\r\n RSSILevelReading.prototype.index = 0;\r\n /**\r\n * RSSILevelReading reading.\r\n * @member {number} reading\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @instance\r\n */\r\n RSSILevelReading.prototype.reading = 0;\r\n /**\r\n * Creates a new RSSILevelReading instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading=} [properties] Properties to set\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading instance\r\n */\r\n RSSILevelReading.create = function create(properties) {\r\n return new RSSILevelReading(properties);\r\n };\r\n /**\r\n * Encodes the specified RSSILevelReading message. Does not implicitly {@link Buttplug.DeviceEvent.RSSILevelReading.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading} message RSSILevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelReading.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.index);\r\n if (message.reading != null && Object.hasOwnProperty.call(message, \"reading\"))\r\n writer.uint32(/* id 2, wireType 0 =*/ 16).int32(message.reading);\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified RSSILevelReading message, length delimited. Does not implicitly {@link Buttplug.DeviceEvent.RSSILevelReading.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.IRSSILevelReading} message RSSILevelReading message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n RSSILevelReading.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a RSSILevelReading message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelReading.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.DeviceEvent.RSSILevelReading();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.index = reader.uint32();\r\n break;\r\n case 2:\r\n message.reading = reader.int32();\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a RSSILevelReading message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n RSSILevelReading.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a RSSILevelReading message.\r\n * @function verify\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n RSSILevelReading.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n if (!$util.isInteger(message.index))\r\n return \"index: integer expected\";\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n if (!$util.isInteger(message.reading))\r\n return \"reading: integer expected\";\r\n return null;\r\n };\r\n /**\r\n * Creates a RSSILevelReading message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.DeviceEvent.RSSILevelReading} RSSILevelReading\r\n */\r\n RSSILevelReading.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.DeviceEvent.RSSILevelReading)\r\n return object;\r\n var message = new $root.Buttplug.DeviceEvent.RSSILevelReading();\r\n if (object.index != null)\r\n message.index = object.index >>> 0;\r\n if (object.reading != null)\r\n message.reading = object.reading | 0;\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a RSSILevelReading message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @static\r\n * @param {Buttplug.DeviceEvent.RSSILevelReading} message RSSILevelReading\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n RSSILevelReading.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.index = 0;\r\n object.reading = 0;\r\n }\r\n if (message.index != null && message.hasOwnProperty(\"index\"))\r\n object.index = message.index;\r\n if (message.reading != null && message.hasOwnProperty(\"reading\"))\r\n object.reading = message.reading;\r\n return object;\r\n };\r\n /**\r\n * Converts this RSSILevelReading to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.DeviceEvent.RSSILevelReading\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n RSSILevelReading.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return RSSILevelReading;\r\n })();\r\n return DeviceEvent;\r\n })();\r\n Buttplug.ButtplugFFIServerMessage = (function () {\r\n /**\r\n * Properties of a ButtplugFFIServerMessage.\r\n * @memberof Buttplug\r\n * @interface IButtplugFFIServerMessage\r\n * @property {number|null} [id] ButtplugFFIServerMessage id\r\n * @property {Buttplug.ButtplugFFIServerMessage.IFFIMessage|null} [message] ButtplugFFIServerMessage message\r\n */\r\n /**\r\n * Constructs a new ButtplugFFIServerMessage.\r\n * @memberof Buttplug\r\n * @classdesc Represents a ButtplugFFIServerMessage.\r\n * @implements IButtplugFFIServerMessage\r\n * @constructor\r\n * @param {Buttplug.IButtplugFFIServerMessage=} [properties] Properties to set\r\n */\r\n function ButtplugFFIServerMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * ButtplugFFIServerMessage id.\r\n * @member {number} id\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @instance\r\n */\r\n ButtplugFFIServerMessage.prototype.id = 0;\r\n /**\r\n * ButtplugFFIServerMessage message.\r\n * @member {Buttplug.ButtplugFFIServerMessage.IFFIMessage|null|undefined} message\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @instance\r\n */\r\n ButtplugFFIServerMessage.prototype.message = null;\r\n /**\r\n * Creates a new ButtplugFFIServerMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.IButtplugFFIServerMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage instance\r\n */\r\n ButtplugFFIServerMessage.create = function create(properties) {\r\n return new ButtplugFFIServerMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified ButtplugFFIServerMessage message. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.IButtplugFFIServerMessage} message ButtplugFFIServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ButtplugFFIServerMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.id != null && Object.hasOwnProperty.call(message, \"id\"))\r\n writer.uint32(/* id 1, wireType 0 =*/ 8).uint32(message.id);\r\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\r\n $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.encode(message.message, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified ButtplugFFIServerMessage message, length delimited. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.IButtplugFFIServerMessage} message ButtplugFFIServerMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n ButtplugFFIServerMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a ButtplugFFIServerMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ButtplugFFIServerMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ButtplugFFIServerMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.id = reader.uint32();\r\n break;\r\n case 2:\r\n message.message = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a ButtplugFFIServerMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n ButtplugFFIServerMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a ButtplugFFIServerMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n ButtplugFFIServerMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n if (!$util.isInteger(message.id))\r\n return \"id: integer expected\";\r\n if (message.message != null && message.hasOwnProperty(\"message\")) {\r\n var error = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.verify(message.message);\r\n if (error)\r\n return \"message.\" + error;\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a ButtplugFFIServerMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ButtplugFFIServerMessage} ButtplugFFIServerMessage\r\n */\r\n ButtplugFFIServerMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ButtplugFFIServerMessage)\r\n return object;\r\n var message = new $root.Buttplug.ButtplugFFIServerMessage();\r\n if (object.id != null)\r\n message.id = object.id >>> 0;\r\n if (object.message != null) {\r\n if (typeof object.message !== \"object\")\r\n throw TypeError(\".Buttplug.ButtplugFFIServerMessage.message: object expected\");\r\n message.message = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.fromObject(object.message);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a ButtplugFFIServerMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage} message ButtplugFFIServerMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n ButtplugFFIServerMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.id = 0;\r\n object.message = null;\r\n }\r\n if (message.id != null && message.hasOwnProperty(\"id\"))\r\n object.id = message.id;\r\n if (message.message != null && message.hasOwnProperty(\"message\"))\r\n object.message = $root.Buttplug.ButtplugFFIServerMessage.FFIMessage.toObject(message.message, options);\r\n return object;\r\n };\r\n /**\r\n * Converts this ButtplugFFIServerMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n ButtplugFFIServerMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n ButtplugFFIServerMessage.FFIMessage = (function () {\r\n /**\r\n * Properties of a FFIMessage.\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @interface IFFIMessage\r\n * @property {Buttplug.IServerMessage|null} [serverMessage] FFIMessage serverMessage\r\n * @property {Buttplug.IDeviceEvent|null} [deviceEvent] FFIMessage deviceEvent\r\n */\r\n /**\r\n * Constructs a new FFIMessage.\r\n * @memberof Buttplug.ButtplugFFIServerMessage\r\n * @classdesc Represents a FFIMessage.\r\n * @implements IFFIMessage\r\n * @constructor\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage=} [properties] Properties to set\r\n */\r\n function FFIMessage(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n /**\r\n * FFIMessage serverMessage.\r\n * @member {Buttplug.IServerMessage|null|undefined} serverMessage\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.serverMessage = null;\r\n /**\r\n * FFIMessage deviceEvent.\r\n * @member {Buttplug.IDeviceEvent|null|undefined} deviceEvent\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n */\r\n FFIMessage.prototype.deviceEvent = null;\r\n // OneOf field names bound to virtual getters and setters\r\n var $oneOfFields;\r\n /**\r\n * FFIMessage msg.\r\n * @member {\"serverMessage\"|\"deviceEvent\"|undefined} msg\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n */\r\n Object.defineProperty(FFIMessage.prototype, \"msg\", {\r\n get: $util.oneOfGetter($oneOfFields = [\"serverMessage\", \"deviceEvent\"]),\r\n set: $util.oneOfSetter($oneOfFields)\r\n });\r\n /**\r\n * Creates a new FFIMessage instance using the specified properties.\r\n * @function create\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage=} [properties] Properties to set\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage instance\r\n */\r\n FFIMessage.create = function create(properties) {\r\n return new FFIMessage(properties);\r\n };\r\n /**\r\n * Encodes the specified FFIMessage message. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.FFIMessage.verify|verify} messages.\r\n * @function encode\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encode = function encode(message, writer) {\r\n if (!writer)\r\n writer = $Writer.create();\r\n if (message.serverMessage != null && Object.hasOwnProperty.call(message, \"serverMessage\"))\r\n $root.Buttplug.ServerMessage.encode(message.serverMessage, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();\r\n if (message.deviceEvent != null && Object.hasOwnProperty.call(message, \"deviceEvent\"))\r\n $root.Buttplug.DeviceEvent.encode(message.deviceEvent, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();\r\n return writer;\r\n };\r\n /**\r\n * Encodes the specified FFIMessage message, length delimited. Does not implicitly {@link Buttplug.ButtplugFFIServerMessage.FFIMessage.verify|verify} messages.\r\n * @function encodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.IFFIMessage} message FFIMessage message or plain object to encode\r\n * @param {$protobuf.Writer} [writer] Writer to encode to\r\n * @returns {$protobuf.Writer} Writer\r\n */\r\n FFIMessage.encodeDelimited = function encodeDelimited(message, writer) {\r\n return this.encode(message, writer).ldelim();\r\n };\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer.\r\n * @function decode\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @param {number} [length] Message length if known beforehand\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Buttplug.ButtplugFFIServerMessage.FFIMessage();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1:\r\n message.serverMessage = $root.Buttplug.ServerMessage.decode(reader, reader.uint32());\r\n break;\r\n case 2:\r\n message.deviceEvent = $root.Buttplug.DeviceEvent.decode(reader, reader.uint32());\r\n break;\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n /**\r\n * Decodes a FFIMessage message from the specified reader or buffer, length delimited.\r\n * @function decodeDelimited\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage\r\n * @throws {Error} If the payload is not a reader or valid buffer\r\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\r\n */\r\n FFIMessage.decodeDelimited = function decodeDelimited(reader) {\r\n if (!(reader instanceof $Reader))\r\n reader = new $Reader(reader);\r\n return this.decode(reader, reader.uint32());\r\n };\r\n /**\r\n * Verifies a FFIMessage message.\r\n * @function verify\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Object.} message Plain object to verify\r\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\r\n */\r\n FFIMessage.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n var properties = {};\r\n if (message.serverMessage != null && message.hasOwnProperty(\"serverMessage\")) {\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.ServerMessage.verify(message.serverMessage);\r\n if (error)\r\n return \"serverMessage.\" + error;\r\n }\r\n }\r\n if (message.deviceEvent != null && message.hasOwnProperty(\"deviceEvent\")) {\r\n if (properties.msg === 1)\r\n return \"msg: multiple values\";\r\n properties.msg = 1;\r\n {\r\n var error = $root.Buttplug.DeviceEvent.verify(message.deviceEvent);\r\n if (error)\r\n return \"deviceEvent.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Creates a FFIMessage message from a plain object. Also converts values to their respective internal types.\r\n * @function fromObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Object.} object Plain object\r\n * @returns {Buttplug.ButtplugFFIServerMessage.FFIMessage} FFIMessage\r\n */\r\n FFIMessage.fromObject = function fromObject(object) {\r\n if (object instanceof $root.Buttplug.ButtplugFFIServerMessage.FFIMessage)\r\n return object;\r\n var message = new $root.Buttplug.ButtplugFFIServerMessage.FFIMessage();\r\n if (object.serverMessage != null) {\r\n if (typeof object.serverMessage !== \"object\")\r\n throw TypeError(\".Buttplug.ButtplugFFIServerMessage.FFIMessage.serverMessage: object expected\");\r\n message.serverMessage = $root.Buttplug.ServerMessage.fromObject(object.serverMessage);\r\n }\r\n if (object.deviceEvent != null) {\r\n if (typeof object.deviceEvent !== \"object\")\r\n throw TypeError(\".Buttplug.ButtplugFFIServerMessage.FFIMessage.deviceEvent: object expected\");\r\n message.deviceEvent = $root.Buttplug.DeviceEvent.fromObject(object.deviceEvent);\r\n }\r\n return message;\r\n };\r\n /**\r\n * Creates a plain object from a FFIMessage message. Also converts values to other types if specified.\r\n * @function toObject\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @static\r\n * @param {Buttplug.ButtplugFFIServerMessage.FFIMessage} message FFIMessage\r\n * @param {$protobuf.IConversionOptions} [options] Conversion options\r\n * @returns {Object.} Plain object\r\n */\r\n FFIMessage.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (message.serverMessage != null && message.hasOwnProperty(\"serverMessage\")) {\r\n object.serverMessage = $root.Buttplug.ServerMessage.toObject(message.serverMessage, options);\r\n if (options.oneofs)\r\n object.msg = \"serverMessage\";\r\n }\r\n if (message.deviceEvent != null && message.hasOwnProperty(\"deviceEvent\")) {\r\n object.deviceEvent = $root.Buttplug.DeviceEvent.toObject(message.deviceEvent, options);\r\n if (options.oneofs)\r\n object.msg = \"deviceEvent\";\r\n }\r\n return object;\r\n };\r\n /**\r\n * Converts this FFIMessage to JSON.\r\n * @function toJSON\r\n * @memberof Buttplug.ButtplugFFIServerMessage.FFIMessage\r\n * @instance\r\n * @returns {Object.} JSON object\r\n */\r\n FFIMessage.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n return FFIMessage;\r\n })();\r\n return ButtplugFFIServerMessage;\r\n })();\r\n return Buttplug;\r\n})();\r\nmodule.exports = $root;\r\n//# sourceMappingURL=buttplug_ffi.js.map","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"@babel/runtime/helpers/esm/possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n var hasNativeReflectConstruct = isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return possibleConstructorReturn(this, result);\n };\n}","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\n\r\n// Version token that will be replaced by the prepack command\r\n/** The version of the SignalR client. */\r\nexport const VERSION: string = \"0.0.0-DEV_BUILD\";\r\n\r\n/** @private */\r\nexport class Arg {\r\n public static isRequired(val: any, name: string): void {\r\n if (val === null || val === undefined) {\r\n throw new Error(`The '${name}' argument is required.`);\r\n }\r\n }\r\n public static isNotEmpty(val: string, name: string): void {\r\n if (!val || val.match(/^\\s*$/)) {\r\n throw new Error(`The '${name}' argument should not be empty.`);\r\n }\r\n }\r\n\r\n public static isIn(val: any, values: any, name: string): void {\r\n // TypeScript enums have keys for **both** the name and the value of each enum member on the type itself.\r\n if (!(val in values)) {\r\n throw new Error(`Unknown ${name} value: ${val}.`);\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class Platform {\r\n public static get isBrowser(): boolean {\r\n return typeof window === \"object\";\r\n }\r\n\r\n public static get isWebWorker(): boolean {\r\n return typeof self === \"object\" && \"importScripts\" in self;\r\n }\r\n\r\n public static get isNode(): boolean {\r\n return !this.isBrowser && !this.isWebWorker;\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getDataDetail(data: any, includeContent: boolean): string {\r\n let detail = \"\";\r\n if (isArrayBuffer(data)) {\r\n detail = `Binary data of length ${data.byteLength}`;\r\n if (includeContent) {\r\n detail += `. Content: '${formatArrayBuffer(data)}'`;\r\n }\r\n } else if (typeof data === \"string\") {\r\n detail = `String data of length ${data.length}`;\r\n if (includeContent) {\r\n detail += `. Content: '${data}'`;\r\n }\r\n }\r\n return detail;\r\n}\r\n\r\n/** @private */\r\nexport function formatArrayBuffer(data: ArrayBuffer): string {\r\n const view = new Uint8Array(data);\r\n\r\n // Uint8Array.map only supports returning another Uint8Array?\r\n let str = \"\";\r\n view.forEach((num) => {\r\n const pad = num < 16 ? \"0\" : \"\";\r\n str += `0x${pad}${num.toString(16)} `;\r\n });\r\n\r\n // Trim of trailing space.\r\n return str.substr(0, str.length - 1);\r\n}\r\n\r\n// Also in signalr-protocol-msgpack/Utils.ts\r\n/** @private */\r\nexport function isArrayBuffer(val: any): val is ArrayBuffer {\r\n return val && typeof ArrayBuffer !== \"undefined\" &&\r\n (val instanceof ArrayBuffer ||\r\n // Sometimes we get an ArrayBuffer that doesn't satisfy instanceof\r\n (val.constructor && val.constructor.name === \"ArrayBuffer\"));\r\n}\r\n\r\n/** @private */\r\nexport async function sendMessage(logger: ILogger, transportName: string, httpClient: HttpClient, url: string, accessTokenFactory: (() => string | Promise) | undefined,\r\n content: string | ArrayBuffer, logMessageContent: boolean, withCredentials: boolean, defaultHeaders: MessageHeaders): Promise {\r\n let headers = {};\r\n if (accessTokenFactory) {\r\n const token = await accessTokenFactory();\r\n if (token) {\r\n headers = {\r\n [\"Authorization\"]: `Bearer ${token}`,\r\n };\r\n }\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) sending data. ${getDataDetail(content, logMessageContent)}.`);\r\n\r\n const responseType = isArrayBuffer(content) ? \"arraybuffer\" : \"text\";\r\n const response = await httpClient.post(url, {\r\n content,\r\n headers: { ...headers, ...defaultHeaders},\r\n responseType,\r\n withCredentials,\r\n });\r\n\r\n logger.log(LogLevel.Trace, `(${transportName} transport) request complete. Response status: ${response.statusCode}.`);\r\n}\r\n\r\n/** @private */\r\nexport function createLogger(logger?: ILogger | LogLevel) {\r\n if (logger === undefined) {\r\n return new ConsoleLogger(LogLevel.Information);\r\n }\r\n\r\n if (logger === null) {\r\n return NullLogger.instance;\r\n }\r\n\r\n if ((logger as ILogger).log) {\r\n return logger as ILogger;\r\n }\r\n\r\n return new ConsoleLogger(logger as LogLevel);\r\n}\r\n\r\n/** @private */\r\nexport class SubjectSubscription implements ISubscription {\r\n private subject: Subject;\r\n private observer: IStreamSubscriber;\r\n\r\n constructor(subject: Subject, observer: IStreamSubscriber) {\r\n this.subject = subject;\r\n this.observer = observer;\r\n }\r\n\r\n public dispose(): void {\r\n const index: number = this.subject.observers.indexOf(this.observer);\r\n if (index > -1) {\r\n this.subject.observers.splice(index, 1);\r\n }\r\n\r\n if (this.subject.observers.length === 0 && this.subject.cancelCallback) {\r\n this.subject.cancelCallback().catch((_) => { });\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport class ConsoleLogger implements ILogger {\r\n private readonly minimumLogLevel: LogLevel;\r\n\r\n // Public for testing purposes.\r\n public outputConsole: {\r\n error(message: any): void,\r\n warn(message: any): void,\r\n info(message: any): void,\r\n log(message: any): void,\r\n };\r\n\r\n constructor(minimumLogLevel: LogLevel) {\r\n this.minimumLogLevel = minimumLogLevel;\r\n this.outputConsole = console;\r\n }\r\n\r\n public log(logLevel: LogLevel, message: string): void {\r\n if (logLevel >= this.minimumLogLevel) {\r\n switch (logLevel) {\r\n case LogLevel.Critical:\r\n case LogLevel.Error:\r\n this.outputConsole.error(`[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`);\r\n break;\r\n case LogLevel.Warning:\r\n this.outputConsole.warn(`[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`);\r\n break;\r\n case LogLevel.Information:\r\n this.outputConsole.info(`[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`);\r\n break;\r\n default:\r\n // console.debug only goes to attached debuggers in Node, so we use console.log for Trace and Debug\r\n this.outputConsole.log(`[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`);\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @private */\r\nexport function getUserAgentHeader(): [string, string] {\r\n let userAgentHeaderName = \"X-SignalR-User-Agent\";\r\n if (Platform.isNode) {\r\n userAgentHeaderName = \"User-Agent\";\r\n }\r\n return [ userAgentHeaderName, constructUserAgent(VERSION, getOsName(), getRuntime(), getRuntimeVersion()) ];\r\n}\r\n\r\n/** @private */\r\nexport function constructUserAgent(version: string, os: string, runtime: string, runtimeVersion: string | undefined): string {\r\n // Microsoft SignalR/[Version] ([Detailed Version]; [Operating System]; [Runtime]; [Runtime Version])\r\n let userAgent: string = \"Microsoft SignalR/\";\r\n\r\n const majorAndMinor = version.split(\".\");\r\n userAgent += `${majorAndMinor[0]}.${majorAndMinor[1]}`;\r\n userAgent += ` (${version}; `;\r\n\r\n if (os && os !== \"\") {\r\n userAgent += `${os}; `;\r\n } else {\r\n userAgent += \"Unknown OS; \";\r\n }\r\n\r\n userAgent += `${runtime}`;\r\n\r\n if (runtimeVersion) {\r\n userAgent += `; ${runtimeVersion}`;\r\n } else {\r\n userAgent += \"; Unknown Runtime Version\";\r\n }\r\n\r\n userAgent += \")\";\r\n return userAgent;\r\n}\r\n\r\nfunction getOsName(): string {\r\n if (Platform.isNode) {\r\n switch (process.platform) {\r\n case \"win32\":\r\n return \"Windows NT\";\r\n case \"darwin\":\r\n return \"macOS\";\r\n case \"linux\":\r\n return \"Linux\";\r\n default:\r\n return process.platform;\r\n }\r\n } else {\r\n return \"\";\r\n }\r\n}\r\n\r\nfunction getRuntimeVersion(): string | undefined {\r\n if (Platform.isNode) {\r\n return process.versions.node;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction getRuntime(): string {\r\n if (Platform.isNode) {\r\n return \"NodeJS\";\r\n } else {\r\n return \"Browser\";\r\n }\r\n}\r\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nexport default createNamedContext;\n","import createNamedContext from \"./createNameContext\";\n\nconst historyContext = /*#__PURE__*/ createNamedContext(\"Router-History\");\nexport default historyContext;\n","import createNamedContext from \"./createNameContext\";\n\nconst context = /*#__PURE__*/ createNamedContext(\"Router\");\nexport default context;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nimport HistoryContext from \"./HistoryContext.js\";\nimport RouterContext from \"./RouterContext.js\";\n\n/**\n * The public API for putting history on context.\n */\nclass Router extends React.Component {\n static computeRootMatch(pathname) {\n return { path: \"/\", url: \"/\", params: {}, isExact: pathname === \"/\" };\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n location: props.history.location\n };\n\n // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the is mounted.\n this._isMounted = false;\n this._pendingLocation = null;\n\n if (!props.staticContext) {\n this.unlisten = props.history.listen(location => {\n if (this._isMounted) {\n this.setState({ location });\n } else {\n this._pendingLocation = location;\n }\n });\n }\n }\n\n componentDidMount() {\n this._isMounted = true;\n\n if (this._pendingLocation) {\n this.setState({ location: this._pendingLocation });\n }\n }\n\n componentWillUnmount() {\n if (this.unlisten) {\n this.unlisten();\n this._isMounted = false;\n this._pendingLocation = null;\n }\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\nif (__DEV__) {\n Router.propTypes = {\n children: PropTypes.node,\n history: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n };\n\n Router.prototype.componentDidUpdate = function(prevProps) {\n warning(\n prevProps.history === this.props.history,\n \"You cannot change \"\n );\n };\n}\n\nexport default Router;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createMemoryHistory as createHistory } from \"history\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\n/**\n * The public API for a that stores location in memory.\n */\nclass MemoryRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n MemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n };\n\n MemoryRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\"\n );\n };\n}\n\nexport default MemoryRouter;\n","import React from \"react\";\n\nclass Lifecycle extends React.Component {\n componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n }\n\n componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n }\n\n render() {\n return null;\n }\n}\n\nexport default Lifecycle;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path) {\n if (cache[path]) return cache[path];\n\n const generator = pathToRegexp.compile(path);\n\n if (cacheCount < cacheLimit) {\n cache[path] = generator;\n cacheCount++;\n }\n\n return generator;\n}\n\n/**\n * Public API for generating a URL pathname from a path and parameters.\n */\nfunction generatePath(path = \"/\", params = {}) {\n return path === \"/\" ? path : compilePath(path)(params, { pretty: true });\n}\n\nexport default generatePath;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport invariant from \"tiny-invariant\";\n\nimport Lifecycle from \"./Lifecycle.js\";\nimport RouterContext from \"./RouterContext.js\";\nimport generatePath from \"./generatePath.js\";\n\n/**\n * The public API for navigating programmatically with a component.\n */\nfunction Redirect({ computedMatch, to, push = false }) {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const { history, staticContext } = context;\n\n const method = push ? history.push : history.replace;\n const location = createLocation(\n computedMatch\n ? typeof to === \"string\"\n ? generatePath(to, computedMatch.params)\n : {\n ...to,\n pathname: generatePath(to.pathname, computedMatch.params)\n }\n : to\n );\n\n // When rendering in a static context,\n // set the new location immediately.\n if (staticContext) {\n method(location);\n return null;\n }\n\n return (\n {\n method(location);\n }}\n onUpdate={(self, prevProps) => {\n const prevLocation = createLocation(prevProps.to);\n if (\n !locationsAreEqual(prevLocation, {\n ...location,\n key: prevLocation.key\n })\n ) {\n method(location);\n }\n }}\n to={to}\n />\n );\n }}\n \n );\n}\n\nif (__DEV__) {\n Redirect.propTypes = {\n push: PropTypes.bool,\n from: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n };\n}\n\nexport default Redirect;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path, options) {\n const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n const pathCache = cache[cacheKey] || (cache[cacheKey] = {});\n\n if (pathCache[path]) return pathCache[path];\n\n const keys = [];\n const regexp = pathToRegexp(path, keys, options);\n const result = { regexp, keys };\n\n if (cacheCount < cacheLimit) {\n pathCache[path] = result;\n cacheCount++;\n }\n\n return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPath(pathname, options = {}) {\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = { path: options };\n }\n\n const { path, exact = false, strict = false, sensitive = false } = options;\n\n const paths = [].concat(path);\n\n return paths.reduce((matched, path) => {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n const { regexp, keys } = compilePath(path, {\n end: exact,\n strict,\n sensitive\n });\n const match = regexp.exec(pathname);\n\n if (!match) return null;\n\n const [url, ...values] = match;\n const isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path, // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact, // whether or not we matched exactly\n params: keys.reduce((memo, key, index) => {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nexport default matchPath;\n","import React from \"react\";\nimport { isValidElementType } from \"react-is\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n const value = children(props);\n\n warning(\n value !== undefined,\n \"You returned `undefined` from the `children` function of \" +\n `, but you ` +\n \"should have returned a React element or `null`\"\n );\n\n return value || null;\n}\n\n/**\n * The public API for matching a single path and rendering.\n */\nclass Route extends React.Component {\n render() {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const location = this.props.location || context.location;\n const match = this.props.computedMatch\n ? this.props.computedMatch // already computed the match for us\n : this.props.path\n ? matchPath(location.pathname, this.props)\n : context.match;\n\n const props = { ...context, location, match };\n\n let { children, component, render } = this.props;\n\n // Preact uses an empty array as children by\n // default, so use null if that's the case.\n if (Array.isArray(children) && isEmptyChildren(children)) {\n children = null;\n }\n\n return (\n \n {props.match\n ? children\n ? typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : children\n : component\n ? React.createElement(component, props)\n : render\n ? render(props)\n : null\n : typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : null}\n \n );\n }}\n \n );\n }\n}\n\nif (__DEV__) {\n Route.propTypes = {\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n component: (props, propName) => {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\n `Invalid prop 'component' supplied to 'Route': the prop is not a valid React component`\n );\n }\n },\n exact: PropTypes.bool,\n location: PropTypes.object,\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n render: PropTypes.func,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool\n };\n\n Route.prototype.componentDidMount = function() {\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.component\n ),\n \"You should not use and in the same route; will be ignored\"\n );\n\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.render\n ),\n \"You should not use and in the same route; will be ignored\"\n );\n\n warning(\n !(this.props.component && this.props.render),\n \"You should not use and in the same route; will be ignored\"\n );\n };\n\n Route.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Route;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, createPath } from \"history\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router.js\";\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n\n return {\n ...location,\n pathname: addLeadingSlash(basename) + location.pathname\n };\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n\n const base = addLeadingSlash(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return {\n ...location,\n pathname: location.pathname.substr(base.length)\n };\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return () => {\n invariant(false, \"You cannot %s with \", methodName);\n };\n}\n\nfunction noop() {}\n\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\nclass StaticRouter extends React.Component {\n navigateTo(location, action) {\n const { basename = \"\", context = {} } = this.props;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }\n\n handlePush = location => this.navigateTo(location, \"PUSH\");\n handleReplace = location => this.navigateTo(location, \"REPLACE\");\n handleListen = () => noop;\n handleBlock = () => noop;\n\n render() {\n const { basename = \"\", context = {}, location = \"/\", ...rest } = this.props;\n\n const history = {\n createHref: path => addLeadingSlash(basename + createURL(path)),\n action: \"POP\",\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return ;\n }\n}\n\nif (__DEV__) {\n StaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n };\n\n StaticRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { StaticRouter as Router }`.\"\n );\n };\n}\n\nexport default StaticRouter;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\n/**\n * The public API for rendering the first that matches.\n */\nclass Switch extends React.Component {\n render() {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const location = this.props.location || context.location;\n\n let element, match;\n\n // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two s that render the same\n // component at different URLs.\n React.Children.forEach(this.props.children, child => {\n if (match == null && React.isValidElement(child)) {\n element = child;\n\n const path = child.props.path || child.props.from;\n\n match = path\n ? matchPath(location.pathname, { ...child.props, path })\n : context.match;\n }\n });\n\n return match\n ? React.cloneElement(element, { location, computedMatch: match })\n : null;\n }}\n \n );\n }\n}\n\nif (__DEV__) {\n Switch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n };\n\n Switch.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Switch;\n","import React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport RouterContext from \"./RouterContext.js\";\nimport HistoryContext from \"./HistoryContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nconst useContext = React.useContext;\n\nexport function useHistory() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useHistory()\"\n );\n }\n\n return useContext(HistoryContext);\n}\n\nexport function useLocation() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useLocation()\"\n );\n }\n\n return useContext(RouterContext).location;\n}\n\nexport function useParams() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useParams()\"\n );\n }\n\n const match = useContext(RouterContext).match;\n return match ? match.params : {};\n}\n\nexport function useRouteMatch(path) {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useRouteMatch()\"\n );\n }\n\n const location = useLocation();\n const match = useContext(RouterContext).match;\n return path ? matchPath(location.pathname, path) : match;\n}\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses HTML5 history.\n */\nclass BrowserRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n BrowserRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number\n };\n\n BrowserRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\"\n );\n };\n}\n\nexport default BrowserRouter;\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createHashHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses window.location.hash.\n */\nclass HashRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n HashRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { HashRouter as Router }`.\"\n );\n };\n}\n\nexport default HashRouter;\n","import { createLocation } from \"history\";\n\nexport const resolveToLocation = (to, currentLocation) =>\n typeof to === \"function\" ? to(currentLocation) : to;\n\nexport const normalizeToLocation = (to, currentLocation) => {\n return typeof to === \"string\"\n ? createLocation(to, null, null, currentLocation)\n : to;\n};\n","import React from \"react\";\nimport { __RouterContext as RouterContext } from \"react-router\";\nimport { createPath } from 'history';\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport {\n resolveToLocation,\n normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nconst LinkAnchor = forwardRef(\n (\n {\n innerRef, // TODO: deprecate\n navigate,\n onClick,\n ...rest\n },\n forwardedRef\n ) => {\n const { target } = rest;\n\n let props = {\n ...rest,\n onClick: event => {\n try {\n if (onClick) onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (\n !event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore everything but left clicks\n (!target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n\n /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n return ;\n }\n);\n\nif (__DEV__) {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nconst Link = forwardRef(\n (\n {\n component = LinkAnchor,\n replace,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const { history } = context;\n\n const location = normalizeToLocation(\n resolveToLocation(to, context.location),\n context.location\n );\n\n const href = location ? history.createHref(location) : \"\";\n const props = {\n ...rest,\n href,\n navigate() {\n const location = resolveToLocation(to, context.location);\n const isDuplicateNavigation = createPath(context.location) === createPath(normalizeToLocation(location));\n const method = (replace || isDuplicateNavigation) ? history.replace : history.push;\n\n method(location);\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return React.createElement(component, props);\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n const toType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object,\n PropTypes.func\n ]);\n const refType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.shape({ current: PropTypes.any })\n ]);\n\n Link.displayName = \"Link\";\n\n Link.propTypes = {\n innerRef: refType,\n onClick: PropTypes.func,\n replace: PropTypes.bool,\n target: PropTypes.string,\n to: toType.isRequired\n };\n}\n\nexport default Link;\n","import React from \"react\";\nimport { __RouterContext as RouterContext, matchPath } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport Link from \"./Link.js\";\nimport {\n resolveToLocation,\n normalizeToLocation\n} from \"./utils/locationUtils.js\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction joinClassnames(...classnames) {\n return classnames.filter(i => i).join(\" \");\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = forwardRef(\n (\n {\n \"aria-current\": ariaCurrent = \"page\",\n activeClassName = \"active\", // TODO: deprecate\n activeStyle, // TODO: deprecate\n className: classNameProp,\n exact,\n isActive: isActiveProp,\n location: locationProp,\n sensitive,\n strict,\n style: styleProp,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const currentLocation = locationProp || context.location;\n const toLocation = normalizeToLocation(\n resolveToLocation(to, currentLocation),\n currentLocation\n );\n const { pathname: path } = toLocation;\n // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n const escapedPath =\n path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n\n const match = escapedPath\n ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact,\n sensitive,\n strict\n })\n : null;\n const isActive = !!(isActiveProp\n ? isActiveProp(match, currentLocation)\n : match);\n\n let className =\n typeof classNameProp === \"function\"\n ? classNameProp(isActive)\n : classNameProp;\n\n let style =\n typeof styleProp === \"function\" ? styleProp(isActive) : styleProp;\n\n if (isActive) {\n className = joinClassnames(className, activeClassName);\n style = { ...style, ...activeStyle };\n }\n\n const props = {\n \"aria-current\": (isActive && ariaCurrent) || null,\n className,\n style,\n to: toLocation,\n ...rest\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return ;\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n\n const ariaCurrentType = PropTypes.oneOf([\n \"page\",\n \"step\",\n \"location\",\n \"date\",\n \"time\",\n \"true\",\n \"false\"\n ]);\n\n NavLink.propTypes = {\n ...Link.propTypes,\n \"aria-current\": ariaCurrentType,\n activeClassName: PropTypes.string,\n activeStyle: PropTypes.object,\n className: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n exact: PropTypes.bool,\n isActive: PropTypes.func,\n location: PropTypes.object,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool,\n style: PropTypes.oneOfType([PropTypes.object, PropTypes.func])\n };\n}\n\nexport default NavLink;\n","import { Buttplug } from \"./buttplug_ffi\";\r\nfunction must_run_init_1(a) {\r\n throw new Error(\"Must run buttplugInit() async before calling any Buttplug methods!\");\r\n}\r\nfunction must_run_init_2(a, b) {\r\n throw new Error(\"Must run buttplugInit() async before calling any Buttplug methods!\");\r\n}\r\n// import { buttplug_create_client, buttplug_free_client, buttplug_parse_client_message, buttplug_activate_env_logger, buttplug_free_device, buttplug_create_device, buttplug_parse_device_message } from \"./buttplug-rs-ffi/buttplug_rs_ffi\";\r\nlet buttplug_create_client = must_run_init_2;\r\nlet buttplug_free_client = must_run_init_1;\r\nlet buttplug_parse_client_message = must_run_init_2;\r\nlet buttplug_activate_env_logger = must_run_init_1;\r\nlet buttplug_free_device = must_run_init_1;\r\nlet buttplug_create_device = must_run_init_2;\r\nlet buttplug_parse_device_message = must_run_init_2;\r\nlet buttplug_has_init_run = false;\r\nexport async function buttplugInit() {\r\n if (buttplug_has_init_run) {\r\n console.log(\"buttplugInit function has already run successfully. This only needs to be run once, but doesn't affect anything (other than printing this message) if called again.\");\r\n return;\r\n }\r\n let index = await import(/* webpackPrefetch: 1 */ \"./buttplug-rs-ffi/buttplug_rs_ffi\").catch((e) => {\r\n console.log(e);\r\n return Promise.reject(e);\r\n });\r\n console.log(index);\r\n buttplug_create_client = index.buttplug_create_client;\r\n buttplug_free_client = index.buttplug_free_client;\r\n buttplug_parse_client_message = index.buttplug_parse_client_message;\r\n buttplug_activate_env_logger = index.buttplug_activate_env_logger;\r\n buttplug_free_device = index.buttplug_free_device;\r\n buttplug_create_device = index.buttplug_create_device;\r\n buttplug_parse_device_message = index.buttplug_parse_device_message;\r\n buttplug_has_init_run = true;\r\n}\r\nfunction sendClientMessage(sorter, clientPtr, message) {\r\n let promise = sorter.PrepareOutgoingMessage(message);\r\n let buffer = Buffer.from(Buttplug.ClientMessage.encode(message).finish());\r\n buttplug_parse_client_message(clientPtr, buffer);\r\n return promise;\r\n}\r\nexport function connectEmbedded(sorter, clientPtr, options) {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n connectLocal: Buttplug.ClientMessage.ConnectLocal.create({\r\n serverName: options.ServerName,\r\n allowRawMessages: options.AllowRawMessages,\r\n deviceConfigurationJson: options.DeviceConfigJSON,\r\n userDeviceConfigurationJson: options.UserDeviceConfigJSON,\r\n commManagerTypes: options.DeviceCommunicationManagerTypes,\r\n maxPingTime: options.MaxPingTime\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg);\r\n}\r\nexport function connectWebsocket(sorter, clientPtr, options) {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n connectWebsocket: Buttplug.ClientMessage.ConnectWebsocket.create({\r\n address: options.Address\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg);\r\n}\r\nexport function disconnect(sorter, clientPtr) {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n disconnect: Buttplug.ClientMessage.Disconnect.create({})\r\n })\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg);\r\n}\r\nexport function startScanning(sorter, clientPtr) {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n startScanning: Buttplug.ClientMessage.StartScanning.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg);\r\n}\r\nexport function stopScanning(sorter, clientPtr) {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n stopScanning: Buttplug.ClientMessage.StopScanning.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg);\r\n}\r\nexport function stopAllDevices(sorter, clientPtr) {\r\n let msg = Buttplug.ClientMessage.create({\r\n message: Buttplug.ClientMessage.FFIMessage.create({\r\n stopAllDevices: Buttplug.ClientMessage.StopAllDevices.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendClientMessage(sorter, clientPtr, msg);\r\n}\r\nfunction sendDeviceMessage(sorter, devicePtr, message) {\r\n let promise = sorter.PrepareOutgoingMessage(message);\r\n let buffer = Buffer.from(Buttplug.DeviceMessage.encode(message).finish());\r\n buttplug_parse_device_message(devicePtr, buffer);\r\n return promise;\r\n}\r\nexport function vibrate(sorter, devicePtr, speeds) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n vibrateCmd: Buttplug.DeviceMessage.VibrateCmd.create({\r\n speeds: speeds\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function rotate(sorter, devicePtr, rotations) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rotateCmd: Buttplug.DeviceMessage.RotateCmd.create({\r\n rotations: rotations\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function linear(sorter, devicePtr, vectors) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n linearCmd: Buttplug.DeviceMessage.LinearCmd.create({\r\n movements: vectors\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function stopDevice(sorter, devicePtr) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n stopDeviceCmd: Buttplug.DeviceMessage.StopDeviceCmd.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function batteryLevel(sorter, devicePtr) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n batteryLevelCmd: Buttplug.DeviceMessage.BatteryLevelCmd.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function rssiLevel(sorter, devicePtr) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rssiLevelCmd: Buttplug.DeviceMessage.RSSILevelCmd.create({})\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function rawRead(sorter, devicePtr, endpoint, expectedLength, timeout) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawReadCmd: Buttplug.DeviceMessage.RawReadCmd.create({\r\n endpoint: endpoint,\r\n expectedLength: expectedLength,\r\n timeout: timeout\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function rawWrite(sorter, devicePtr, endpoint, data, writeWithResponse) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawWriteCmd: Buttplug.DeviceMessage.RawWriteCmd.create({\r\n endpoint: endpoint,\r\n data: data,\r\n writeWithResponse: writeWithResponse\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function rawSubscribe(sorter, devicePtr, endpoint) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawSubscribeCmd: Buttplug.DeviceMessage.RawSubscribeCmd.create({\r\n endpoint: endpoint\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function rawUnsubscribe(sorter, devicePtr, endpoint) {\r\n let msg = Buttplug.DeviceMessage.create({\r\n message: Buttplug.DeviceMessage.FFIMessage.create({\r\n rawUnsubscribeCmd: Buttplug.DeviceMessage.RawUnsubscribeCmd.create({\r\n endpoint: endpoint\r\n })\r\n }),\r\n id: 1\r\n });\r\n return sendDeviceMessage(sorter, devicePtr, msg);\r\n}\r\nexport function createClientPtr(eventCallback, clientName) {\r\n return buttplug_create_client(eventCallback, clientName);\r\n}\r\nexport function createDevicePtr(clientPtr, deviceIndex) {\r\n return buttplug_create_device(clientPtr, deviceIndex);\r\n}\r\nexport function freeClientPtr(clientPtr) {\r\n buttplug_free_client(clientPtr);\r\n}\r\nexport function freeDevicePtr(devicePtr) {\r\n buttplug_free_device(devicePtr);\r\n}\r\nexport function activateConsoleLogger(logLevel) {\r\n buttplug_activate_env_logger(logLevel);\r\n}\r\n/*\r\nexport function addLogHandler(logCallback: Function, logLevel: \"error\" | \"warn\" | \"info\" | \"debug\" | \"trace\", useJSON: boolean) {\r\n buttplug_add_log_handler(logCallback, logLevel, useJSON);\r\n}\r\n*/ \r\n//# sourceMappingURL=ffi.js.map","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","function valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true;\n\n // Otherwise, if either of them == null they are not equal.\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every(function(item, index) {\n return valueEqual(item, b[index]);\n })\n );\n }\n\n if (typeof a === 'object' || typeof b === 'object') {\n var aValue = valueOf(a);\n var bValue = valueOf(b);\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n return Object.keys(Object.assign({}, a, b)).every(function(key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\nexport default valueEqual;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","module.exports = require('./lib/axios');","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\n/** A logger that does nothing when log messages are sent to it. */\r\nexport class NullLogger implements ILogger {\r\n /** The singleton instance of the {@link @microsoft/signalr.NullLogger}. */\r\n public static instance: ILogger = new NullLogger();\r\n\r\n private constructor() {}\r\n\r\n /** @inheritDoc */\r\n // tslint:disable-next-line\r\n public log(_logLevel: LogLevel, _message: string): void {\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\n// Not exported from index\r\n/** @private */\r\nexport class TextMessageFormat {\r\n public static RecordSeparatorCode = 0x1e;\r\n public static RecordSeparator = String.fromCharCode(TextMessageFormat.RecordSeparatorCode);\r\n\r\n public static write(output: string): string {\r\n return `${output}${TextMessageFormat.RecordSeparator}`;\r\n }\r\n\r\n public static parse(input: string): string[] {\r\n if (input[input.length - 1] !== TextMessageFormat.RecordSeparator) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n const messages = input.split(TextMessageFormat.RecordSeparator);\r\n messages.pop();\r\n return messages;\r\n }\r\n}\r\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar enhanceError = require('./core/enhanceError');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw enhanceError(e, this, 'E_JSON_PARSE');\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\n/** Error thrown when an HTTP request fails. */\r\nexport class HttpError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // tslint:disable-next-line:variable-name\r\n private __proto__: Error;\r\n\r\n /** The HTTP status code represented by this error. */\r\n public statusCode: number;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n * @param {number} statusCode The HTTP status code represented by this error.\r\n */\r\n constructor(errorMessage: string, statusCode: number) {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n this.statusCode = statusCode;\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when a timeout elapses. */\r\nexport class TimeoutError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // tslint:disable-next-line:variable-name\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.TimeoutError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"A timeout occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n\r\n/** Error thrown when an action is aborted. */\r\nexport class AbortError extends Error {\r\n // @ts-ignore: Intentionally unused.\r\n // tslint:disable-next-line:variable-name\r\n private __proto__: Error;\r\n\r\n /** Constructs a new instance of {@link AbortError}.\r\n *\r\n * @param {string} errorMessage A descriptive error message.\r\n */\r\n constructor(errorMessage: string = \"An abort occurred.\") {\r\n const trueProto = new.target.prototype;\r\n super(errorMessage);\r\n\r\n // Workaround issue in Typescript compiler\r\n // https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\r\n this.__proto__ = trueProto;\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { AbortSignal } from \"./AbortController\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\n\r\n/** Represents an HTTP request. */\r\nexport interface HttpRequest {\r\n /** The HTTP method to use for the request. */\r\n method?: string;\r\n\r\n /** The URL for the request. */\r\n url?: string;\r\n\r\n /** The body content for the request. May be a string or an ArrayBuffer (for binary data). */\r\n content?: string | ArrayBuffer;\r\n\r\n /** An object describing headers to apply to the request. */\r\n headers?: MessageHeaders;\r\n\r\n /** The XMLHttpRequestResponseType to apply to the request. */\r\n responseType?: XMLHttpRequestResponseType;\r\n\r\n /** An AbortSignal that can be monitored for cancellation. */\r\n abortSignal?: AbortSignal;\r\n\r\n /** The time to wait for the request to complete before throwing a TimeoutError. Measured in milliseconds. */\r\n timeout?: number;\r\n\r\n /** This controls whether credentials such as cookies are sent in cross-site requests. */\r\n withCredentials?: boolean;\r\n}\r\n\r\n/** Represents an HTTP response. */\r\nexport class HttpResponse {\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n */\r\n constructor(statusCode: number);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code and message.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n */\r\n constructor(statusCode: number, statusText: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and string content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: ArrayBuffer);\r\n\r\n /** Constructs a new instance of {@link @microsoft/signalr.HttpResponse} with the specified status code, message and binary content.\r\n *\r\n * @param {number} statusCode The status code of the response.\r\n * @param {string} statusText The status message of the response.\r\n * @param {string | ArrayBuffer} content The content of the response.\r\n */\r\n constructor(statusCode: number, statusText: string, content: string | ArrayBuffer);\r\n constructor(\r\n public readonly statusCode: number,\r\n public readonly statusText?: string,\r\n public readonly content?: string | ArrayBuffer) {\r\n }\r\n}\r\n\r\n/** Abstraction over an HTTP client.\r\n *\r\n * This class provides an abstraction over an HTTP client so that a different implementation can be provided on different platforms.\r\n */\r\nexport abstract class HttpClient {\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string): Promise;\r\n\r\n /** Issues an HTTP GET request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public get(url: string, options: HttpRequest): Promise;\r\n public get(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"GET\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string): Promise;\r\n\r\n /** Issues an HTTP POST request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public post(url: string, options: HttpRequest): Promise;\r\n public post(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"POST\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string): Promise;\r\n\r\n /** Issues an HTTP DELETE request to the specified URL, returning a Promise that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {string} url The URL for the request.\r\n * @param {HttpRequest} options Additional options to configure the request. The 'url' field in this object will be overridden by the url parameter.\r\n * @returns {Promise} A Promise that resolves with an {@link @microsoft/signalr.HttpResponse} describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public delete(url: string, options: HttpRequest): Promise;\r\n public delete(url: string, options?: HttpRequest): Promise {\r\n return this.send({\r\n ...options,\r\n method: \"DELETE\",\r\n url,\r\n });\r\n }\r\n\r\n /** Issues an HTTP request to the specified URL, returning a {@link Promise} that resolves with an {@link @microsoft/signalr.HttpResponse} representing the result.\r\n *\r\n * @param {HttpRequest} request An {@link @microsoft/signalr.HttpRequest} describing the request to send.\r\n * @returns {Promise} A Promise that resolves with an HttpResponse describing the response, or rejects with an Error indicating a failure.\r\n */\r\n public abstract send(request: HttpRequest): Promise;\r\n\r\n /** Gets all cookies that apply to the specified URL.\r\n *\r\n * @param url The URL that the cookies are valid for.\r\n * @returns {string} A string containing all the key-value cookie pairs for the specified URL.\r\n */\r\n // @ts-ignore\r\n public getCookieString(url: string): string {\r\n return \"\";\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\n// @ts-ignore: This will be removed from built files and is here to make the types available during dev work\r\nimport * as tough from \"@types/tough-cookie\";\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\n\r\nexport class FetchHttpClient extends HttpClient {\r\n private readonly abortControllerType: { prototype: AbortController, new(): AbortController };\r\n private readonly fetchType: (input: RequestInfo, init?: RequestInit) => Promise;\r\n private readonly jar?: tough.CookieJar;\r\n\r\n private readonly logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this.logger = logger;\r\n\r\n if (typeof fetch === \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n\r\n // Cookies aren't automatically handled in Node so we need to add a CookieJar to preserve cookies across requests\r\n this.jar = new (requireFunc(\"tough-cookie\")).CookieJar();\r\n this.fetchType = requireFunc(\"node-fetch\");\r\n\r\n // node-fetch doesn't have a nice API for getting and setting cookies\r\n // fetch-cookie will wrap a fetch implementation with a default CookieJar or a provided one\r\n this.fetchType = requireFunc(\"fetch-cookie\")(this.fetchType, this.jar);\r\n\r\n // Node needs EventListener methods on AbortController which our custom polyfill doesn't provide\r\n this.abortControllerType = requireFunc(\"abort-controller\");\r\n } else {\r\n this.fetchType = fetch.bind(self);\r\n this.abortControllerType = AbortController;\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public async send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n throw new AbortError();\r\n }\r\n\r\n if (!request.method) {\r\n throw new Error(\"No method defined.\");\r\n }\r\n if (!request.url) {\r\n throw new Error(\"No url defined.\");\r\n }\r\n\r\n const abortController = new this.abortControllerType();\r\n\r\n let error: any;\r\n // Hook our abortSignal into the abort controller\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n abortController.abort();\r\n error = new AbortError();\r\n };\r\n }\r\n\r\n // If a timeout has been passed in, setup a timeout to call abort\r\n // Type needs to be any to fit window.setTimeout and NodeJS.setTimeout\r\n let timeoutId: any = null;\r\n if (request.timeout) {\r\n const msTimeout = request.timeout!;\r\n timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n this.logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n error = new TimeoutError();\r\n }, msTimeout);\r\n }\r\n\r\n let response: Response;\r\n try {\r\n response = await this.fetchType(request.url!, {\r\n body: request.content!,\r\n cache: \"no-cache\",\r\n credentials: request.withCredentials === true ? \"include\" : \"same-origin\",\r\n headers: {\r\n \"Content-Type\": \"text/plain;charset=UTF-8\",\r\n \"X-Requested-With\": \"XMLHttpRequest\",\r\n ...request.headers,\r\n },\r\n method: request.method!,\r\n mode: \"cors\",\r\n redirect: \"manual\",\r\n signal: abortController.signal,\r\n });\r\n } catch (e) {\r\n if (error) {\r\n throw error;\r\n }\r\n this.logger.log(\r\n LogLevel.Warning,\r\n `Error from HTTP request. ${e}.`,\r\n );\r\n throw e;\r\n } finally {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n }\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n throw new HttpError(response.statusText, response.status);\r\n }\r\n\r\n const content = deserializeContent(response, request.responseType);\r\n const payload = await content;\r\n\r\n return new HttpResponse(\r\n response.status,\r\n response.statusText,\r\n payload,\r\n );\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n let cookies: string = \"\";\r\n if (Platform.isNode && this.jar) {\r\n // @ts-ignore: unused variable\r\n this.jar.getCookies(url, (e, c) => cookies = c.join(\"; \"));\r\n }\r\n return cookies;\r\n }\r\n}\r\n\r\nfunction deserializeContent(response: Response, responseType?: XMLHttpRequestResponseType): Promise {\r\n let content;\r\n switch (responseType) {\r\n case \"arraybuffer\":\r\n content = response.arrayBuffer();\r\n break;\r\n case \"text\":\r\n content = response.text();\r\n break;\r\n case \"blob\":\r\n case \"document\":\r\n case \"json\":\r\n throw new Error(`${responseType} is not supported.`);\r\n default:\r\n content = response.text();\r\n break;\r\n }\r\n\r\n return content;\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { ILogger } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\n\r\n/** Defines the type of a Hub Message. */\r\nexport enum MessageType {\r\n /** Indicates the message is an Invocation message and implements the {@link @microsoft/signalr.InvocationMessage} interface. */\r\n Invocation = 1,\r\n /** Indicates the message is a StreamItem message and implements the {@link @microsoft/signalr.StreamItemMessage} interface. */\r\n StreamItem = 2,\r\n /** Indicates the message is a Completion message and implements the {@link @microsoft/signalr.CompletionMessage} interface. */\r\n Completion = 3,\r\n /** Indicates the message is a Stream Invocation message and implements the {@link @microsoft/signalr.StreamInvocationMessage} interface. */\r\n StreamInvocation = 4,\r\n /** Indicates the message is a Cancel Invocation message and implements the {@link @microsoft/signalr.CancelInvocationMessage} interface. */\r\n CancelInvocation = 5,\r\n /** Indicates the message is a Ping message and implements the {@link @microsoft/signalr.PingMessage} interface. */\r\n Ping = 6,\r\n /** Indicates the message is a Close message and implements the {@link @microsoft/signalr.CloseMessage} interface. */\r\n Close = 7,\r\n}\r\n\r\n/** Defines a dictionary of string keys and string values representing headers attached to a Hub message. */\r\nexport interface MessageHeaders {\r\n /** Gets or sets the header with the specified key. */\r\n [key: string]: string;\r\n}\r\n\r\n/** Union type of all known Hub messages. */\r\nexport type HubMessage =\r\n InvocationMessage |\r\n StreamInvocationMessage |\r\n StreamItemMessage |\r\n CompletionMessage |\r\n CancelInvocationMessage |\r\n PingMessage |\r\n CloseMessage;\r\n\r\n/** Defines properties common to all Hub messages. */\r\nexport interface HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageType} value indicating the type of this message. */\r\n readonly type: MessageType;\r\n}\r\n\r\n/** Defines properties common to all Hub messages relating to a specific invocation. */\r\nexport interface HubInvocationMessage extends HubMessageBase {\r\n /** A {@link @microsoft/signalr.MessageHeaders} dictionary containing headers attached to the message. */\r\n readonly headers?: MessageHeaders;\r\n /** The ID of the invocation relating to this message.\r\n *\r\n * This is expected to be present for {@link @microsoft/signalr.StreamInvocationMessage} and {@link @microsoft/signalr.CompletionMessage}. It may\r\n * be 'undefined' for an {@link @microsoft/signalr.InvocationMessage} if the sender does not expect a response.\r\n */\r\n readonly invocationId?: string;\r\n}\r\n\r\n/** A hub message representing a non-streaming invocation. */\r\nexport interface InvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Invocation;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a streaming invocation. */\r\nexport interface StreamInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamInvocation;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The target method name. */\r\n readonly target: string;\r\n /** The target method arguments. */\r\n readonly arguments: any[];\r\n /** The target methods stream IDs. */\r\n readonly streamIds?: string[];\r\n}\r\n\r\n/** A hub message representing a single item produced as part of a result stream. */\r\nexport interface StreamItemMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.StreamItem;\r\n\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n\r\n /** The item produced by the server. */\r\n readonly item?: any;\r\n}\r\n\r\n/** A hub message representing the result of an invocation. */\r\nexport interface CompletionMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Completion;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n /** The error produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly error?: string;\r\n /** The result produced by the invocation, if any.\r\n *\r\n * Either {@link @microsoft/signalr.CompletionMessage.error} or {@link @microsoft/signalr.CompletionMessage.result} must be defined, but not both.\r\n */\r\n readonly result?: any;\r\n}\r\n\r\n/** A hub message indicating that the sender is still active. */\r\nexport interface PingMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Ping;\r\n}\r\n\r\n/** A hub message indicating that the sender is closing the connection.\r\n *\r\n * If {@link @microsoft/signalr.CloseMessage.error} is defined, the sender is closing the connection due to an error.\r\n */\r\nexport interface CloseMessage extends HubMessageBase {\r\n /** @inheritDoc */\r\n readonly type: MessageType.Close;\r\n /** The error that triggered the close, if any.\r\n *\r\n * If this property is undefined, the connection was closed normally and without error.\r\n */\r\n readonly error?: string;\r\n\r\n /** If true, clients with automatic reconnects enabled should attempt to reconnect after receiving the CloseMessage. Otherwise, they should not. */\r\n readonly allowReconnect?: boolean;\r\n}\r\n\r\n/** A hub message sent to request that a streaming invocation be canceled. */\r\nexport interface CancelInvocationMessage extends HubInvocationMessage {\r\n /** @inheritDoc */\r\n readonly type: MessageType.CancelInvocation;\r\n /** The invocation ID. */\r\n readonly invocationId: string;\r\n}\r\n\r\n/** A protocol abstraction for communicating with SignalR Hubs. */\r\nexport interface IHubProtocol {\r\n /** The name of the protocol. This is used by SignalR to resolve the protocol between the client and server. */\r\n readonly name: string;\r\n /** The version of the protocol. */\r\n readonly version: number;\r\n /** The {@link @microsoft/signalr.TransferFormat} of the protocol. */\r\n readonly transferFormat: TransferFormat;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the `input` parameter must be a string, otherwise it must be an ArrayBuffer.\r\n *\r\n * @param {string | ArrayBuffer | Buffer} input A string, ArrayBuffer, or Buffer containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n parseMessages(input: string | ArrayBuffer | Buffer, logger: ILogger): HubMessage[];\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string or ArrayBuffer and returns it.\r\n *\r\n * If {@link @microsoft/signalr.IHubProtocol.transferFormat} is 'Text', the result of this method will be a string, otherwise it will be an ArrayBuffer.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string | ArrayBuffer} A string or ArrayBuffer containing the serialized representation of the message.\r\n */\r\n writeMessage(message: HubMessage): string | ArrayBuffer;\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { AbortError, HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\n\r\nexport class XhrHttpClient extends HttpClient {\r\n private readonly logger: ILogger;\r\n\r\n public constructor(logger: ILogger) {\r\n super();\r\n this.logger = logger;\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n\r\n xhr.open(request.method!, request.url!, true);\r\n xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n // Explicitly setting the Content-Type header for React Native on Android platform.\r\n xhr.setRequestHeader(\"Content-Type\", \"text/plain;charset=UTF-8\");\r\n\r\n const headers = request.headers;\r\n if (headers) {\r\n Object.keys(headers)\r\n .forEach((header) => {\r\n xhr.setRequestHeader(header, headers[header]);\r\n });\r\n }\r\n\r\n if (request.responseType) {\r\n xhr.responseType = request.responseType;\r\n }\r\n\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = () => {\r\n xhr.abort();\r\n reject(new AbortError());\r\n };\r\n }\r\n\r\n if (request.timeout) {\r\n xhr.timeout = request.timeout;\r\n }\r\n\r\n xhr.onload = () => {\r\n if (request.abortSignal) {\r\n request.abortSignal.onabort = null;\r\n }\r\n\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n resolve(new HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));\r\n } else {\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n }\r\n };\r\n\r\n xhr.onerror = () => {\r\n this.logger.log(LogLevel.Warning, `Error from HTTP request. ${xhr.status}: ${xhr.statusText}.`);\r\n reject(new HttpError(xhr.statusText, xhr.status));\r\n };\r\n\r\n xhr.ontimeout = () => {\r\n this.logger.log(LogLevel.Warning, `Timeout from HTTP request.`);\r\n reject(new TimeoutError());\r\n };\r\n\r\n xhr.send(request.content || \"\");\r\n });\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { AbortError } from \"./Errors\";\r\nimport { FetchHttpClient } from \"./FetchHttpClient\";\r\nimport { HttpClient, HttpRequest, HttpResponse } from \"./HttpClient\";\r\nimport { ILogger } from \"./ILogger\";\r\nimport { Platform } from \"./Utils\";\r\nimport { XhrHttpClient } from \"./XhrHttpClient\";\r\n\r\n/** Default implementation of {@link @microsoft/signalr.HttpClient}. */\r\nexport class DefaultHttpClient extends HttpClient {\r\n private readonly httpClient: HttpClient;\r\n\r\n /** Creates a new instance of the {@link @microsoft/signalr.DefaultHttpClient}, using the provided {@link @microsoft/signalr.ILogger} to log messages. */\r\n public constructor(logger: ILogger) {\r\n super();\r\n\r\n if (typeof fetch !== \"undefined\" || Platform.isNode) {\r\n this.httpClient = new FetchHttpClient(logger);\r\n } else if (typeof XMLHttpRequest !== \"undefined\") {\r\n this.httpClient = new XhrHttpClient(logger);\r\n } else {\r\n throw new Error(\"No usable HttpClient found.\");\r\n }\r\n }\r\n\r\n /** @inheritDoc */\r\n public send(request: HttpRequest): Promise {\r\n // Check that abort was not signaled before calling send\r\n if (request.abortSignal && request.abortSignal.aborted) {\r\n return Promise.reject(new AbortError());\r\n }\r\n\r\n if (!request.method) {\r\n return Promise.reject(new Error(\"No method defined.\"));\r\n }\r\n if (!request.url) {\r\n return Promise.reject(new Error(\"No url defined.\"));\r\n }\r\n\r\n return this.httpClient.send(request);\r\n }\r\n\r\n public getCookieString(url: string): string {\r\n return this.httpClient.getCookieString(url);\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { IStreamResult, IStreamSubscriber, ISubscription } from \"./Stream\";\r\nimport { SubjectSubscription } from \"./Utils\";\r\n\r\n/** Stream implementation to stream items to the server. */\r\nexport class Subject implements IStreamResult {\r\n /** @internal */\r\n public observers: Array>;\r\n\r\n /** @internal */\r\n public cancelCallback?: () => Promise;\r\n\r\n constructor() {\r\n this.observers = [];\r\n }\r\n\r\n public next(item: T): void {\r\n for (const observer of this.observers) {\r\n observer.next(item);\r\n }\r\n }\r\n\r\n public error(err: any): void {\r\n for (const observer of this.observers) {\r\n if (observer.error) {\r\n observer.error(err);\r\n }\r\n }\r\n }\r\n\r\n public complete(): void {\r\n for (const observer of this.observers) {\r\n if (observer.complete) {\r\n observer.complete();\r\n }\r\n }\r\n }\r\n\r\n public subscribe(observer: IStreamSubscriber): ISubscription {\r\n this.observers.push(observer);\r\n return new SubjectSubscription(this, observer);\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { HandshakeProtocol, HandshakeRequestMessage, HandshakeResponseMessage } from \"./HandshakeProtocol\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { CancelInvocationMessage, CompletionMessage, IHubProtocol, InvocationMessage, MessageType, StreamInvocationMessage, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { IStreamResult } from \"./Stream\";\r\nimport { Subject } from \"./Subject\";\r\nimport { Arg } from \"./Utils\";\r\n\r\nconst DEFAULT_TIMEOUT_IN_MS: number = 30 * 1000;\r\nconst DEFAULT_PING_INTERVAL_IN_MS: number = 15 * 1000;\r\n\r\n/** Describes the current state of the {@link HubConnection} to the server. */\r\nexport enum HubConnectionState {\r\n /** The hub connection is disconnected. */\r\n Disconnected = \"Disconnected\",\r\n /** The hub connection is connecting. */\r\n Connecting = \"Connecting\",\r\n /** The hub connection is connected. */\r\n Connected = \"Connected\",\r\n /** The hub connection is disconnecting. */\r\n Disconnecting = \"Disconnecting\",\r\n /** The hub connection is reconnecting. */\r\n Reconnecting = \"Reconnecting\",\r\n}\r\n\r\n/** Represents a connection to a SignalR Hub. */\r\nexport class HubConnection {\r\n private readonly cachedPingMessage: string | ArrayBuffer;\r\n private readonly connection: IConnection;\r\n private readonly logger: ILogger;\r\n private readonly reconnectPolicy?: IRetryPolicy;\r\n private protocol: IHubProtocol;\r\n private handshakeProtocol: HandshakeProtocol;\r\n private callbacks: { [invocationId: string]: (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => void };\r\n private methods: { [name: string]: Array<(...args: any[]) => void> };\r\n private invocationId: number;\r\n\r\n private closedCallbacks: Array<(error?: Error) => void>;\r\n private reconnectingCallbacks: Array<(error?: Error) => void>;\r\n private reconnectedCallbacks: Array<(connectionId?: string) => void>;\r\n\r\n private receivedHandshakeResponse: boolean;\r\n private handshakeResolver!: (value?: PromiseLike<{}>) => void;\r\n private handshakeRejecter!: (reason?: any) => void;\r\n private stopDuringStartError?: Error;\r\n\r\n private connectionState: HubConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private connectionStarted: boolean;\r\n private startPromise?: Promise;\r\n private stopPromise?: Promise;\r\n private nextKeepAlive: number = 0;\r\n\r\n // The type of these a) doesn't matter and b) varies when building in browser and node contexts\r\n // Since we're building the WebPack bundle directly from the TypeScript, this matters (previously\r\n // we built the bundle from the compiled JavaScript).\r\n private reconnectDelayHandle?: any;\r\n private timeoutHandle?: any;\r\n private pingServerHandle?: any;\r\n\r\n /** The server timeout in milliseconds.\r\n *\r\n * If this timeout elapses without receiving any messages from the server, the connection will be terminated with an error.\r\n * The default timeout value is 30,000 milliseconds (30 seconds).\r\n */\r\n public serverTimeoutInMilliseconds: number;\r\n\r\n /** Default interval at which to ping the server.\r\n *\r\n * The default value is 15,000 milliseconds (15 seconds).\r\n * Allows the server to detect hard disconnects (like when a client unplugs their computer).\r\n * The ping will happen at most as often as the server pings.\r\n * If the server pings every 5 seconds, a value lower than 5 will ping every 5 seconds.\r\n */\r\n public keepAliveIntervalInMilliseconds: number;\r\n\r\n /** @internal */\r\n // Using a public static factory method means we can have a private constructor and an _internal_\r\n // create method that can be used by HubConnectionBuilder. An \"internal\" constructor would just\r\n // be stripped away and the '.d.ts' file would have no constructor, which is interpreted as a\r\n // public parameter-less constructor.\r\n public static create(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IRetryPolicy): HubConnection {\r\n return new HubConnection(connection, logger, protocol, reconnectPolicy);\r\n }\r\n\r\n private constructor(connection: IConnection, logger: ILogger, protocol: IHubProtocol, reconnectPolicy?: IRetryPolicy) {\r\n Arg.isRequired(connection, \"connection\");\r\n Arg.isRequired(logger, \"logger\");\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.serverTimeoutInMilliseconds = DEFAULT_TIMEOUT_IN_MS;\r\n this.keepAliveIntervalInMilliseconds = DEFAULT_PING_INTERVAL_IN_MS;\r\n\r\n this.logger = logger;\r\n this.protocol = protocol;\r\n this.connection = connection;\r\n this.reconnectPolicy = reconnectPolicy;\r\n this.handshakeProtocol = new HandshakeProtocol();\r\n\r\n this.connection.onreceive = (data: any) => this.processIncomingData(data);\r\n this.connection.onclose = (error?: Error) => this.connectionClosed(error);\r\n\r\n this.callbacks = {};\r\n this.methods = {};\r\n this.closedCallbacks = [];\r\n this.reconnectingCallbacks = [];\r\n this.reconnectedCallbacks = [];\r\n this.invocationId = 0;\r\n this.receivedHandshakeResponse = false;\r\n this.connectionState = HubConnectionState.Disconnected;\r\n this.connectionStarted = false;\r\n\r\n this.cachedPingMessage = this.protocol.writeMessage({ type: MessageType.Ping });\r\n }\r\n\r\n /** Indicates the state of the {@link HubConnection} to the server. */\r\n get state(): HubConnectionState {\r\n return this.connectionState;\r\n }\r\n\r\n /** Represents the connection id of the {@link HubConnection} on the server. The connection id will be null when the connection is either\r\n * in the disconnected state or if the negotiation step was skipped.\r\n */\r\n get connectionId(): string | null {\r\n return this.connection ? (this.connection.connectionId || null) : null;\r\n }\r\n\r\n /** Indicates the url of the {@link HubConnection} to the server. */\r\n get baseUrl(): string {\r\n return this.connection.baseUrl || \"\";\r\n }\r\n\r\n /**\r\n * Sets a new url for the HubConnection. Note that the url can only be changed when the connection is in either the Disconnected or\r\n * Reconnecting states.\r\n * @param {string} url The url to connect to.\r\n */\r\n set baseUrl(url: string) {\r\n if (this.connectionState !== HubConnectionState.Disconnected && this.connectionState !== HubConnectionState.Reconnecting) {\r\n throw new Error(\"The HubConnection must be in the Disconnected or Reconnecting state to change the url.\");\r\n }\r\n\r\n if (!url) {\r\n throw new Error(\"The HubConnection url must be a valid url.\");\r\n }\r\n\r\n this.connection.baseUrl = url;\r\n }\r\n\r\n /** Starts the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully established, or rejects with an error.\r\n */\r\n public start(): Promise {\r\n this.startPromise = this.startWithStateTransitions();\r\n return this.startPromise;\r\n }\r\n\r\n private async startWithStateTransitions(): Promise {\r\n if (this.connectionState !== HubConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start a HubConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this.connectionState = HubConnectionState.Connecting;\r\n this.logger.log(LogLevel.Debug, \"Starting HubConnection.\");\r\n\r\n try {\r\n await this.startInternal();\r\n\r\n this.connectionState = HubConnectionState.Connected;\r\n this.connectionStarted = true;\r\n this.logger.log(LogLevel.Debug, \"HubConnection connected successfully.\");\r\n } catch (e) {\r\n this.connectionState = HubConnectionState.Disconnected;\r\n this.logger.log(LogLevel.Debug, `HubConnection failed to start successfully because of error '${e}'.`);\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async startInternal() {\r\n this.stopDuringStartError = undefined;\r\n this.receivedHandshakeResponse = false;\r\n // Set up the promise before any connection is (re)started otherwise it could race with received messages\r\n const handshakePromise = new Promise((resolve, reject) => {\r\n this.handshakeResolver = resolve;\r\n this.handshakeRejecter = reject;\r\n });\r\n\r\n await this.connection.start(this.protocol.transferFormat);\r\n\r\n try {\r\n const handshakeRequest: HandshakeRequestMessage = {\r\n protocol: this.protocol.name,\r\n version: this.protocol.version,\r\n };\r\n\r\n this.logger.log(LogLevel.Debug, \"Sending handshake request.\");\r\n\r\n await this.sendMessage(this.handshakeProtocol.writeHandshakeRequest(handshakeRequest));\r\n\r\n this.logger.log(LogLevel.Information, `Using HubProtocol '${this.protocol.name}'.`);\r\n\r\n // defensively cleanup timeout in case we receive a message from the server before we finish start\r\n this.cleanupTimeout();\r\n this.resetTimeoutPeriod();\r\n this.resetKeepAliveInterval();\r\n\r\n await handshakePromise;\r\n\r\n // It's important to check the stopDuringStartError instead of just relying on the handshakePromise\r\n // being rejected on close, because this continuation can run after both the handshake completed successfully\r\n // and the connection was closed.\r\n if (this.stopDuringStartError) {\r\n // It's important to throw instead of returning a rejected promise, because we don't want to allow any state\r\n // transitions to occur between now and the calling code observing the exceptions. Returning a rejected promise\r\n // will cause the calling continuation to get scheduled to run later.\r\n throw this.stopDuringStartError;\r\n }\r\n } catch (e) {\r\n this.logger.log(LogLevel.Debug, `Hub handshake failed with error '${e}' during start(). Stopping HubConnection.`);\r\n\r\n this.cleanupTimeout();\r\n this.cleanupPingTimer();\r\n\r\n // HttpConnection.stop() should not complete until after the onclose callback is invoked.\r\n // This will transition the HubConnection to the disconnected state before HttpConnection.stop() completes.\r\n await this.connection.stop(e);\r\n throw e;\r\n }\r\n }\r\n\r\n /** Stops the connection.\r\n *\r\n * @returns {Promise} A Promise that resolves when the connection has been successfully terminated, or rejects with an error.\r\n */\r\n public async stop(): Promise {\r\n // Capture the start promise before the connection might be restarted in an onclose callback.\r\n const startPromise = this.startPromise;\r\n\r\n this.stopPromise = this.stopInternal();\r\n await this.stopPromise;\r\n\r\n try {\r\n // Awaiting undefined continues immediately\r\n await startPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n }\r\n\r\n private stopInternal(error?: Error): Promise {\r\n if (this.connectionState === HubConnectionState.Disconnected) {\r\n this.logger.log(LogLevel.Debug, `Call to HubConnection.stop(${error}) ignored because it is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.connectionState === HubConnectionState.Disconnecting) {\r\n this.logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this.stopPromise!;\r\n }\r\n\r\n this.connectionState = HubConnectionState.Disconnecting;\r\n\r\n this.logger.log(LogLevel.Debug, \"Stopping HubConnection.\");\r\n\r\n if (this.reconnectDelayHandle) {\r\n // We're in a reconnect delay which means the underlying connection is currently already stopped.\r\n // Just clear the handle to stop the reconnect loop (which no one is waiting on thankfully) and\r\n // fire the onclose callbacks.\r\n this.logger.log(LogLevel.Debug, \"Connection stopped during reconnect delay. Done reconnecting.\");\r\n\r\n clearTimeout(this.reconnectDelayHandle);\r\n this.reconnectDelayHandle = undefined;\r\n\r\n this.completeClose();\r\n return Promise.resolve();\r\n }\r\n\r\n this.cleanupTimeout();\r\n this.cleanupPingTimer();\r\n this.stopDuringStartError = error || new Error(\"The connection was stopped before the hub handshake could complete.\");\r\n\r\n // HttpConnection.stop() should not complete until after either HttpConnection.start() fails\r\n // or the onclose callback is invoked. The onclose callback will transition the HubConnection\r\n // to the disconnected state if need be before HttpConnection.stop() completes.\r\n return this.connection.stop(error);\r\n }\r\n\r\n /** Invokes a streaming hub method on the server using the specified name and arguments.\r\n *\r\n * @typeparam T The type of the items returned by the server.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {IStreamResult} An object that yields results from the server as they are received.\r\n */\r\n public stream(methodName: string, ...args: any[]): IStreamResult {\r\n const [streams, streamIds] = this.replaceStreamingParams(args);\r\n const invocationDescriptor = this.createStreamInvocation(methodName, args, streamIds);\r\n\r\n let promiseQueue: Promise;\r\n const subject = new Subject();\r\n subject.cancelCallback = () => {\r\n const cancelInvocation: CancelInvocationMessage = this.createCancelInvocation(invocationDescriptor.invocationId);\r\n\r\n delete this.callbacks[invocationDescriptor.invocationId];\r\n\r\n return promiseQueue.then(() => {\r\n return this.sendWithProtocol(cancelInvocation);\r\n });\r\n };\r\n\r\n this.callbacks[invocationDescriptor.invocationId] = (invocationEvent: CompletionMessage | StreamItemMessage | null, error?: Error) => {\r\n if (error) {\r\n subject.error(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n subject.error(new Error(invocationEvent.error));\r\n } else {\r\n subject.complete();\r\n }\r\n } else {\r\n subject.next((invocationEvent.item) as T);\r\n }\r\n }\r\n };\r\n\r\n promiseQueue = this.sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n subject.error(e);\r\n delete this.callbacks[invocationDescriptor.invocationId];\r\n });\r\n\r\n this.launchStreams(streams, promiseQueue);\r\n\r\n return subject;\r\n }\r\n\r\n private sendMessage(message: any) {\r\n this.resetKeepAliveInterval();\r\n return this.connection.send(message);\r\n }\r\n\r\n /**\r\n * Sends a js object to the server.\r\n * @param message The js object to serialize and send.\r\n */\r\n private sendWithProtocol(message: any) {\r\n return this.sendMessage(this.protocol.writeMessage(message));\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments. Does not wait for a response from the receiver.\r\n *\r\n * The Promise returned by this method resolves when the client has sent the invocation to the server. The server may still\r\n * be processing the invocation.\r\n *\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves when the invocation has been successfully sent, or rejects with an error.\r\n */\r\n public send(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this.replaceStreamingParams(args);\r\n const sendPromise = this.sendWithProtocol(this.createInvocation(methodName, args, true, streamIds));\r\n\r\n this.launchStreams(streams, sendPromise);\r\n\r\n return sendPromise;\r\n }\r\n\r\n /** Invokes a hub method on the server using the specified name and arguments.\r\n *\r\n * The Promise returned by this method resolves when the server indicates it has finished invoking the method. When the promise\r\n * resolves, the server has finished invoking the method. If the server method returns a result, it is produced as the result of\r\n * resolving the Promise.\r\n *\r\n * @typeparam T The expected return type.\r\n * @param {string} methodName The name of the server method to invoke.\r\n * @param {any[]} args The arguments used to invoke the server method.\r\n * @returns {Promise} A Promise that resolves with the result of the server method (if any), or rejects with an error.\r\n */\r\n public invoke(methodName: string, ...args: any[]): Promise {\r\n const [streams, streamIds] = this.replaceStreamingParams(args);\r\n const invocationDescriptor = this.createInvocation(methodName, args, false, streamIds);\r\n\r\n const p = new Promise((resolve, reject) => {\r\n // invocationId will always have a value for a non-blocking invocation\r\n this.callbacks[invocationDescriptor.invocationId!] = (invocationEvent: StreamItemMessage | CompletionMessage | null, error?: Error) => {\r\n if (error) {\r\n reject(error);\r\n return;\r\n } else if (invocationEvent) {\r\n // invocationEvent will not be null when an error is not passed to the callback\r\n if (invocationEvent.type === MessageType.Completion) {\r\n if (invocationEvent.error) {\r\n reject(new Error(invocationEvent.error));\r\n } else {\r\n resolve(invocationEvent.result);\r\n }\r\n } else {\r\n reject(new Error(`Unexpected message type: ${invocationEvent.type}`));\r\n }\r\n }\r\n };\r\n\r\n const promiseQueue = this.sendWithProtocol(invocationDescriptor)\r\n .catch((e) => {\r\n reject(e);\r\n // invocationId will always have a value for a non-blocking invocation\r\n delete this.callbacks[invocationDescriptor.invocationId!];\r\n });\r\n\r\n this.launchStreams(streams, promiseQueue);\r\n });\r\n\r\n return p;\r\n }\r\n\r\n /** Registers a handler that will be invoked when the hub method with the specified method name is invoked.\r\n *\r\n * @param {string} methodName The name of the hub method to define.\r\n * @param {Function} newMethod The handler that will be raised when the hub method is invoked.\r\n */\r\n public on(methodName: string, newMethod: (...args: any[]) => void) {\r\n if (!methodName || !newMethod) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n if (!this.methods[methodName]) {\r\n this.methods[methodName] = [];\r\n }\r\n\r\n // Preventing adding the same handler multiple times.\r\n if (this.methods[methodName].indexOf(newMethod) !== -1) {\r\n return;\r\n }\r\n\r\n this.methods[methodName].push(newMethod);\r\n }\r\n\r\n /** Removes all handlers for the specified hub method.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n */\r\n public off(methodName: string): void;\r\n\r\n /** Removes the specified handler for the specified hub method.\r\n *\r\n * You must pass the exact same Function instance as was previously passed to {@link @microsoft/signalr.HubConnection.on}. Passing a different instance (even if the function\r\n * body is the same) will not remove the handler.\r\n *\r\n * @param {string} methodName The name of the method to remove handlers for.\r\n * @param {Function} method The handler to remove. This must be the same Function instance as the one passed to {@link @microsoft/signalr.HubConnection.on}.\r\n */\r\n public off(methodName: string, method: (...args: any[]) => void): void;\r\n public off(methodName: string, method?: (...args: any[]) => void): void {\r\n if (!methodName) {\r\n return;\r\n }\r\n\r\n methodName = methodName.toLowerCase();\r\n const handlers = this.methods[methodName];\r\n if (!handlers) {\r\n return;\r\n }\r\n if (method) {\r\n const removeIdx = handlers.indexOf(method);\r\n if (removeIdx !== -1) {\r\n handlers.splice(removeIdx, 1);\r\n if (handlers.length === 0) {\r\n delete this.methods[methodName];\r\n }\r\n }\r\n } else {\r\n delete this.methods[methodName];\r\n }\r\n\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection is closed.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection is closed. Optionally receives a single argument containing the error that caused the connection to close (if any).\r\n */\r\n public onclose(callback: (error?: Error) => void) {\r\n if (callback) {\r\n this.closedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection starts reconnecting.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection starts reconnecting. Optionally receives a single argument containing the error that caused the connection to start reconnecting (if any).\r\n */\r\n public onreconnecting(callback: (error?: Error) => void) {\r\n if (callback) {\r\n this.reconnectingCallbacks.push(callback);\r\n }\r\n }\r\n\r\n /** Registers a handler that will be invoked when the connection successfully reconnects.\r\n *\r\n * @param {Function} callback The handler that will be invoked when the connection successfully reconnects.\r\n */\r\n public onreconnected(callback: (connectionId?: string) => void) {\r\n if (callback) {\r\n this.reconnectedCallbacks.push(callback);\r\n }\r\n }\r\n\r\n private processIncomingData(data: any) {\r\n this.cleanupTimeout();\r\n\r\n if (!this.receivedHandshakeResponse) {\r\n data = this.processHandshakeResponse(data);\r\n this.receivedHandshakeResponse = true;\r\n }\r\n\r\n // Data may have all been read when processing handshake response\r\n if (data) {\r\n // Parse the messages\r\n const messages = this.protocol.parseMessages(data, this.logger);\r\n\r\n for (const message of messages) {\r\n switch (message.type) {\r\n case MessageType.Invocation:\r\n this.invokeClientMethod(message);\r\n break;\r\n case MessageType.StreamItem:\r\n case MessageType.Completion:\r\n const callback = this.callbacks[message.invocationId];\r\n if (callback) {\r\n if (message.type === MessageType.Completion) {\r\n delete this.callbacks[message.invocationId];\r\n }\r\n callback(message);\r\n }\r\n break;\r\n case MessageType.Ping:\r\n // Don't care about pings\r\n break;\r\n case MessageType.Close:\r\n this.logger.log(LogLevel.Information, \"Close message received from server.\");\r\n\r\n const error = message.error ? new Error(\"Server returned an error on close: \" + message.error) : undefined;\r\n\r\n if (message.allowReconnect === true) {\r\n // It feels wrong not to await connection.stop() here, but processIncomingData is called as part of an onreceive callback which is not async,\r\n // this is already the behavior for serverTimeout(), and HttpConnection.Stop() should catch and log all possible exceptions.\r\n\r\n // tslint:disable-next-line:no-floating-promises\r\n this.connection.stop(error);\r\n } else {\r\n // We cannot await stopInternal() here, but subsequent calls to stop() will await this if stopInternal() is still ongoing.\r\n this.stopPromise = this.stopInternal(error);\r\n }\r\n\r\n break;\r\n default:\r\n this.logger.log(LogLevel.Warning, `Invalid message type: ${message.type}.`);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.resetTimeoutPeriod();\r\n }\r\n\r\n private processHandshakeResponse(data: any): any {\r\n let responseMessage: HandshakeResponseMessage;\r\n let remainingData: any;\r\n\r\n try {\r\n [remainingData, responseMessage] = this.handshakeProtocol.parseHandshakeResponse(data);\r\n } catch (e) {\r\n const message = \"Error parsing handshake response: \" + e;\r\n this.logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this.handshakeRejecter(error);\r\n throw error;\r\n }\r\n if (responseMessage.error) {\r\n const message = \"Server returned handshake error: \" + responseMessage.error;\r\n this.logger.log(LogLevel.Error, message);\r\n\r\n const error = new Error(message);\r\n this.handshakeRejecter(error);\r\n throw error;\r\n } else {\r\n this.logger.log(LogLevel.Debug, \"Server handshake complete.\");\r\n }\r\n\r\n this.handshakeResolver();\r\n return remainingData;\r\n }\r\n\r\n private resetKeepAliveInterval() {\r\n if (this.connection.features.inherentKeepAlive) {\r\n return;\r\n }\r\n\r\n // Set the time we want the next keep alive to be sent\r\n // Timer will be setup on next message receive\r\n this.nextKeepAlive = new Date().getTime() + this.keepAliveIntervalInMilliseconds;\r\n\r\n this.cleanupPingTimer();\r\n }\r\n\r\n private resetTimeoutPeriod() {\r\n if (!this.connection.features || !this.connection.features.inherentKeepAlive) {\r\n // Set the timeout timer\r\n this.timeoutHandle = setTimeout(() => this.serverTimeout(), this.serverTimeoutInMilliseconds);\r\n\r\n // Set keepAlive timer if there isn't one\r\n if (this.pingServerHandle === undefined) {\r\n let nextPing = this.nextKeepAlive - new Date().getTime();\r\n if (nextPing < 0) {\r\n nextPing = 0;\r\n }\r\n\r\n // The timer needs to be set from a networking callback to avoid Chrome timer throttling from causing timers to run once a minute\r\n this.pingServerHandle = setTimeout(async () => {\r\n if (this.connectionState === HubConnectionState.Connected) {\r\n try {\r\n await this.sendMessage(this.cachedPingMessage);\r\n } catch {\r\n // We don't care about the error. It should be seen elsewhere in the client.\r\n // The connection is probably in a bad or closed state now, cleanup the timer so it stops triggering\r\n this.cleanupPingTimer();\r\n }\r\n }\r\n }, nextPing);\r\n }\r\n }\r\n }\r\n\r\n private serverTimeout() {\r\n // The server hasn't talked to us in a while. It doesn't like us anymore ... :(\r\n // Terminate the connection, but we don't need to wait on the promise. This could trigger reconnecting.\r\n // tslint:disable-next-line:no-floating-promises\r\n this.connection.stop(new Error(\"Server timeout elapsed without receiving a message from the server.\"));\r\n }\r\n\r\n private invokeClientMethod(invocationMessage: InvocationMessage) {\r\n const methods = this.methods[invocationMessage.target.toLowerCase()];\r\n if (methods) {\r\n try {\r\n methods.forEach((m) => m.apply(this, invocationMessage.arguments));\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `A callback for the method ${invocationMessage.target.toLowerCase()} threw error '${e}'.`);\r\n }\r\n\r\n if (invocationMessage.invocationId) {\r\n // This is not supported in v1. So we return an error to avoid blocking the server waiting for the response.\r\n const message = \"Server requested a response, which is not supported in this version of the client.\";\r\n this.logger.log(LogLevel.Error, message);\r\n\r\n // We don't want to wait on the stop itself.\r\n this.stopPromise = this.stopInternal(new Error(message));\r\n }\r\n } else {\r\n this.logger.log(LogLevel.Warning, `No client method with the name '${invocationMessage.target}' found.`);\r\n }\r\n }\r\n\r\n private connectionClosed(error?: Error) {\r\n this.logger.log(LogLevel.Debug, `HubConnection.connectionClosed(${error}) called while in state ${this.connectionState}.`);\r\n\r\n // Triggering this.handshakeRejecter is insufficient because it could already be resolved without the continuation having run yet.\r\n this.stopDuringStartError = this.stopDuringStartError || error || new Error(\"The underlying connection was closed before the hub handshake could complete.\");\r\n\r\n // If the handshake is in progress, start will be waiting for the handshake promise, so we complete it.\r\n // If it has already completed, this should just noop.\r\n if (this.handshakeResolver) {\r\n this.handshakeResolver();\r\n }\r\n\r\n this.cancelCallbacksWithError(error || new Error(\"Invocation canceled due to the underlying connection being closed.\"));\r\n\r\n this.cleanupTimeout();\r\n this.cleanupPingTimer();\r\n\r\n if (this.connectionState === HubConnectionState.Disconnecting) {\r\n this.completeClose(error);\r\n } else if (this.connectionState === HubConnectionState.Connected && this.reconnectPolicy) {\r\n // tslint:disable-next-line:no-floating-promises\r\n this.reconnect(error);\r\n } else if (this.connectionState === HubConnectionState.Connected) {\r\n this.completeClose(error);\r\n }\r\n\r\n // If none of the above if conditions were true were called the HubConnection must be in either:\r\n // 1. The Connecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail it.\r\n // 2. The Reconnecting state in which case the handshakeResolver will complete it and stopDuringStartError will fail the current reconnect attempt\r\n // and potentially continue the reconnect() loop.\r\n // 3. The Disconnected state in which case we're already done.\r\n }\r\n\r\n private completeClose(error?: Error) {\r\n if (this.connectionStarted) {\r\n this.connectionState = HubConnectionState.Disconnected;\r\n this.connectionStarted = false;\r\n\r\n try {\r\n this.closedCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `An onclose callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private async reconnect(error?: Error) {\r\n const reconnectStartTime = Date.now();\r\n let previousReconnectAttempts = 0;\r\n let retryError = error !== undefined ? error : new Error(\"Attempting to reconnect due to a unknown error.\");\r\n\r\n let nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, 0, retryError);\r\n\r\n if (nextRetryDelay === null) {\r\n this.logger.log(LogLevel.Debug, \"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt.\");\r\n this.completeClose(error);\r\n return;\r\n }\r\n\r\n this.connectionState = HubConnectionState.Reconnecting;\r\n\r\n if (error) {\r\n this.logger.log(LogLevel.Information, `Connection reconnecting because of error '${error}'.`);\r\n } else {\r\n this.logger.log(LogLevel.Information, \"Connection reconnecting.\");\r\n }\r\n\r\n if (this.onreconnecting) {\r\n try {\r\n this.reconnectingCallbacks.forEach((c) => c.apply(this, [error]));\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `An onreconnecting callback called with error '${error}' threw error '${e}'.`);\r\n }\r\n\r\n // Exit early if an onreconnecting callback called connection.stop().\r\n if (this.connectionState !== HubConnectionState.Reconnecting) {\r\n this.logger.log(LogLevel.Debug, \"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.\");\r\n return;\r\n }\r\n }\r\n\r\n while (nextRetryDelay !== null) {\r\n this.logger.log(LogLevel.Information, `Reconnect attempt number ${previousReconnectAttempts} will start in ${nextRetryDelay} ms.`);\r\n\r\n await new Promise((resolve) => {\r\n this.reconnectDelayHandle = setTimeout(resolve, nextRetryDelay!);\r\n });\r\n this.reconnectDelayHandle = undefined;\r\n\r\n if (this.connectionState !== HubConnectionState.Reconnecting) {\r\n this.logger.log(LogLevel.Debug, \"Connection left the reconnecting state during reconnect delay. Done reconnecting.\");\r\n return;\r\n }\r\n\r\n try {\r\n await this.startInternal();\r\n\r\n this.connectionState = HubConnectionState.Connected;\r\n this.logger.log(LogLevel.Information, \"HubConnection reconnected successfully.\");\r\n\r\n if (this.onreconnected) {\r\n try {\r\n this.reconnectedCallbacks.forEach((c) => c.apply(this, [this.connection.connectionId]));\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${e}'.`);\r\n }\r\n }\r\n\r\n return;\r\n } catch (e) {\r\n this.logger.log(LogLevel.Information, `Reconnect attempt failed because of error '${e}'.`);\r\n\r\n if (this.connectionState !== HubConnectionState.Reconnecting) {\r\n this.logger.log(LogLevel.Debug, `Connection moved to the '${this.connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`);\r\n // The TypeScript compiler thinks that connectionState must be Connected here. The TypeScript compiler is wrong.\r\n if (this.connectionState as any === HubConnectionState.Disconnecting) {\r\n this.completeClose();\r\n }\r\n return;\r\n }\r\n\r\n retryError = e instanceof Error ? e : new Error(e.toString());\r\n nextRetryDelay = this.getNextRetryDelay(previousReconnectAttempts++, Date.now() - reconnectStartTime, retryError);\r\n }\r\n }\r\n\r\n this.logger.log(LogLevel.Information, `Reconnect retries have been exhausted after ${Date.now() - reconnectStartTime} ms and ${previousReconnectAttempts} failed attempts. Connection disconnecting.`);\r\n\r\n this.completeClose();\r\n }\r\n\r\n private getNextRetryDelay(previousRetryCount: number, elapsedMilliseconds: number, retryReason: Error) {\r\n try {\r\n return this.reconnectPolicy!.nextRetryDelayInMilliseconds({\r\n elapsedMilliseconds,\r\n previousRetryCount,\r\n retryReason,\r\n });\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `IRetryPolicy.nextRetryDelayInMilliseconds(${previousRetryCount}, ${elapsedMilliseconds}) threw error '${e}'.`);\r\n return null;\r\n }\r\n }\r\n\r\n private cancelCallbacksWithError(error: Error) {\r\n const callbacks = this.callbacks;\r\n this.callbacks = {};\r\n\r\n Object.keys(callbacks)\r\n .forEach((key) => {\r\n const callback = callbacks[key];\r\n callback(null, error);\r\n });\r\n }\r\n\r\n private cleanupPingTimer(): void {\r\n if (this.pingServerHandle) {\r\n clearTimeout(this.pingServerHandle);\r\n this.pingServerHandle = undefined;\r\n }\r\n }\r\n\r\n private cleanupTimeout(): void {\r\n if (this.timeoutHandle) {\r\n clearTimeout(this.timeoutHandle);\r\n }\r\n }\r\n\r\n private createInvocation(methodName: string, args: any[], nonblocking: boolean, streamIds: string[]): InvocationMessage {\r\n if (nonblocking) {\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n arguments: args,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n } else {\r\n const invocationId = this.invocationId;\r\n this.invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n } else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.Invocation,\r\n };\r\n }\r\n }\r\n }\r\n\r\n private launchStreams(streams: Array>, promiseQueue: Promise): void {\r\n if (streams.length === 0) {\r\n return;\r\n }\r\n\r\n // Synchronize stream data so they arrive in-order on the server\r\n if (!promiseQueue) {\r\n promiseQueue = Promise.resolve();\r\n }\r\n\r\n // We want to iterate over the keys, since the keys are the stream ids\r\n // tslint:disable-next-line:forin\r\n for (const streamId in streams) {\r\n streams[streamId].subscribe({\r\n complete: () => {\r\n promiseQueue = promiseQueue.then(() => this.sendWithProtocol(this.createCompletionMessage(streamId)));\r\n },\r\n error: (err) => {\r\n let message: string;\r\n if (err instanceof Error) {\r\n message = err.message;\r\n } else if (err && err.toString) {\r\n message = err.toString();\r\n } else {\r\n message = \"Unknown error\";\r\n }\r\n\r\n promiseQueue = promiseQueue.then(() => this.sendWithProtocol(this.createCompletionMessage(streamId, message)));\r\n },\r\n next: (item) => {\r\n promiseQueue = promiseQueue.then(() => this.sendWithProtocol(this.createStreamItemMessage(streamId, item)));\r\n },\r\n });\r\n }\r\n }\r\n\r\n private replaceStreamingParams(args: any[]): [Array>, string[]] {\r\n const streams: Array> = [];\r\n const streamIds: string[] = [];\r\n for (let i = 0; i < args.length; i++) {\r\n const argument = args[i];\r\n if (this.isObservable(argument)) {\r\n const streamId = this.invocationId;\r\n this.invocationId++;\r\n // Store the stream for later use\r\n streams[streamId] = argument;\r\n streamIds.push(streamId.toString());\r\n\r\n // remove stream from args\r\n args.splice(i, 1);\r\n }\r\n }\r\n\r\n return [streams, streamIds];\r\n }\r\n\r\n private isObservable(arg: any): arg is IStreamResult {\r\n // This allows other stream implementations to just work (like rxjs)\r\n return arg && arg.subscribe && typeof arg.subscribe === \"function\";\r\n }\r\n\r\n private createStreamInvocation(methodName: string, args: any[], streamIds: string[]): StreamInvocationMessage {\r\n const invocationId = this.invocationId;\r\n this.invocationId++;\r\n\r\n if (streamIds.length !== 0) {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n streamIds,\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n } else {\r\n return {\r\n arguments: args,\r\n invocationId: invocationId.toString(),\r\n target: methodName,\r\n type: MessageType.StreamInvocation,\r\n };\r\n }\r\n }\r\n\r\n private createCancelInvocation(id: string): CancelInvocationMessage {\r\n return {\r\n invocationId: id,\r\n type: MessageType.CancelInvocation,\r\n };\r\n }\r\n\r\n private createStreamItemMessage(id: string, item: any): StreamItemMessage {\r\n return {\r\n invocationId: id,\r\n item,\r\n type: MessageType.StreamItem,\r\n };\r\n }\r\n\r\n private createCompletionMessage(id: string, error?: any, result?: any): CompletionMessage {\r\n if (error) {\r\n return {\r\n error,\r\n invocationId: id,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n\r\n return {\r\n invocationId: id,\r\n result,\r\n type: MessageType.Completion,\r\n };\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\n// This will be treated as a bit flag in the future, so we keep it using power-of-two values.\r\n/** Specifies a specific HTTP transport type. */\r\nexport enum HttpTransportType {\r\n /** Specifies no transport preference. */\r\n None = 0,\r\n /** Specifies the WebSockets transport. */\r\n WebSockets = 1,\r\n /** Specifies the Server-Sent Events transport. */\r\n ServerSentEvents = 2,\r\n /** Specifies the Long Polling transport. */\r\n LongPolling = 4,\r\n}\r\n\r\n/** Specifies the transfer format for a connection. */\r\nexport enum TransferFormat {\r\n /** Specifies that only text data will be transmitted over the connection. */\r\n Text = 1,\r\n /** Specifies that binary data will be transmitted over the connection. */\r\n Binary = 2,\r\n}\r\n\r\n/** An abstraction over the behavior of transports. This is designed to support the framework and not intended for use by applications. */\r\nexport interface ITransport {\r\n connect(url: string, transferFormat: TransferFormat): Promise;\r\n send(data: any): Promise;\r\n stop(): Promise;\r\n onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n onclose: ((error?: Error) => void) | null;\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { IRetryPolicy, RetryContext } from \"./IRetryPolicy\";\r\n\r\n// 0, 2, 10, 30 second delays before reconnect attempts.\r\nconst DEFAULT_RETRY_DELAYS_IN_MILLISECONDS = [0, 2000, 10000, 30000, null];\r\n\r\n/** @private */\r\nexport class DefaultReconnectPolicy implements IRetryPolicy {\r\n private readonly retryDelays: Array;\r\n\r\n constructor(retryDelays?: number[]) {\r\n this.retryDelays = retryDelays !== undefined ? [...retryDelays, null] : DEFAULT_RETRY_DELAYS_IN_MILLISECONDS;\r\n }\r\n\r\n public nextRetryDelayInMilliseconds(retryContext: RetryContext): number | null {\r\n return this.retryDelays[retryContext.previousRetryCount];\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\n// Rough polyfill of https://developer.mozilla.org/en-US/docs/Web/API/AbortController\r\n// We don't actually ever use the API being polyfilled, we always use the polyfill because\r\n// it's a very new API right now.\r\n\r\n// Not exported from index.\r\n/** @private */\r\nexport class AbortController implements AbortSignal {\r\n private isAborted: boolean = false;\r\n public onabort: (() => void) | null = null;\r\n\r\n public abort() {\r\n if (!this.isAborted) {\r\n this.isAborted = true;\r\n if (this.onabort) {\r\n this.onabort();\r\n }\r\n }\r\n }\r\n\r\n get signal(): AbortSignal {\r\n return this;\r\n }\r\n\r\n get aborted(): boolean {\r\n return this.isAborted;\r\n }\r\n}\r\n\r\n/** Represents a signal that can be monitored to determine if a request has been aborted. */\r\nexport interface AbortSignal {\r\n /** Indicates if the request has been aborted. */\r\n aborted: boolean;\r\n /** Set this to a handler that will be invoked when the request is aborted. */\r\n onabort: (() => void) | null;\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { AbortController } from \"./AbortController\";\r\nimport { HttpError, TimeoutError } from \"./Errors\";\r\nimport { HttpClient, HttpRequest } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, sendMessage } from \"./Utils\";\r\n\r\n// Not exported from 'index', this type is internal.\r\n/** @private */\r\nexport class LongPollingTransport implements ITransport {\r\n private readonly httpClient: HttpClient;\r\n private readonly accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly logger: ILogger;\r\n private readonly logMessageContent: boolean;\r\n private readonly withCredentials: boolean;\r\n private readonly pollAbort: AbortController;\r\n private readonly headers: MessageHeaders;\r\n\r\n private url?: string;\r\n private running: boolean;\r\n private receiving?: Promise;\r\n private closeError?: Error;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n // This is an internal type, not exported from 'index' so this is really just internal.\r\n public get pollAborted() {\r\n return this.pollAbort.aborted;\r\n }\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger, logMessageContent: boolean, withCredentials: boolean, headers: MessageHeaders) {\r\n this.httpClient = httpClient;\r\n this.accessTokenFactory = accessTokenFactory;\r\n this.logger = logger;\r\n this.pollAbort = new AbortController();\r\n this.logMessageContent = logMessageContent;\r\n this.withCredentials = withCredentials;\r\n this.headers = headers;\r\n\r\n this.running = false;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this.url = url;\r\n\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Connecting.\");\r\n\r\n // Allow binary format on Node and Browsers that support binary content (indicated by the presence of responseType property)\r\n if (transferFormat === TransferFormat.Binary &&\r\n (typeof XMLHttpRequest !== \"undefined\" && typeof new XMLHttpRequest().responseType !== \"string\")) {\r\n throw new Error(\"Binary protocols over XmlHttpRequest not implementing advanced features are not supported.\");\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n const headers = { [name]: value, ...this.headers };\r\n\r\n const pollOptions: HttpRequest = {\r\n abortSignal: this.pollAbort.signal,\r\n headers,\r\n timeout: 100000,\r\n withCredentials: this.withCredentials,\r\n };\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n pollOptions.responseType = \"arraybuffer\";\r\n }\r\n\r\n const token = await this.getAccessToken();\r\n this.updateHeaderToken(pollOptions, token);\r\n\r\n // Make initial long polling request\r\n // Server uses first long polling request to finish initializing connection and it returns without data\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this.logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this.httpClient.get(pollUrl, pollOptions);\r\n if (response.statusCode !== 200) {\r\n this.logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Mark running as false so that the poll immediately ends and runs the close logic\r\n this.closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this.running = false;\r\n } else {\r\n this.running = true;\r\n }\r\n\r\n this.receiving = this.poll(this.url, pollOptions);\r\n }\r\n\r\n private async getAccessToken(): Promise {\r\n if (this.accessTokenFactory) {\r\n return await this.accessTokenFactory();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private updateHeaderToken(request: HttpRequest, token: string | null) {\r\n if (!request.headers) {\r\n request.headers = {};\r\n }\r\n if (token) {\r\n // tslint:disable-next-line:no-string-literal\r\n request.headers[\"Authorization\"] = `Bearer ${token}`;\r\n return;\r\n }\r\n // tslint:disable-next-line:no-string-literal\r\n if (request.headers[\"Authorization\"]) {\r\n // tslint:disable-next-line:no-string-literal\r\n delete request.headers[\"Authorization\"];\r\n }\r\n }\r\n\r\n private async poll(url: string, pollOptions: HttpRequest): Promise {\r\n try {\r\n while (this.running) {\r\n // We have to get the access token on each poll, in case it changes\r\n const token = await this.getAccessToken();\r\n this.updateHeaderToken(pollOptions, token);\r\n\r\n try {\r\n const pollUrl = `${url}&_=${Date.now()}`;\r\n this.logger.log(LogLevel.Trace, `(LongPolling transport) polling: ${pollUrl}.`);\r\n const response = await this.httpClient.get(pollUrl, pollOptions);\r\n\r\n if (response.statusCode === 204) {\r\n this.logger.log(LogLevel.Information, \"(LongPolling transport) Poll terminated by server.\");\r\n\r\n this.running = false;\r\n } else if (response.statusCode !== 200) {\r\n this.logger.log(LogLevel.Error, `(LongPolling transport) Unexpected response code: ${response.statusCode}.`);\r\n\r\n // Unexpected status code\r\n this.closeError = new HttpError(response.statusText || \"\", response.statusCode);\r\n this.running = false;\r\n } else {\r\n // Process the response\r\n if (response.content) {\r\n this.logger.log(LogLevel.Trace, `(LongPolling transport) data received. ${getDataDetail(response.content, this.logMessageContent)}.`);\r\n if (this.onreceive) {\r\n this.onreceive(response.content);\r\n }\r\n } else {\r\n // This is another way timeout manifest.\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n }\r\n }\r\n } catch (e) {\r\n if (!this.running) {\r\n // Log but disregard errors that occur after stopping\r\n this.logger.log(LogLevel.Trace, `(LongPolling transport) Poll errored after shutdown: ${e.message}`);\r\n } else {\r\n if (e instanceof TimeoutError) {\r\n // Ignore timeouts and reissue the poll.\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Poll timed out, reissuing.\");\r\n } else {\r\n // Close the connection with the error as the result.\r\n this.closeError = e;\r\n this.running = false;\r\n }\r\n }\r\n }\r\n }\r\n } finally {\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Polling complete.\");\r\n\r\n // We will reach here with pollAborted==false when the server returned a response causing the transport to stop.\r\n // If pollAborted==true then client initiated the stop and the stop method will raise the close event after DELETE is sent.\r\n if (!this.pollAborted) {\r\n this.raiseOnClose();\r\n }\r\n }\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this.running) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this.logger, \"LongPolling\", this.httpClient, this.url!, this.accessTokenFactory, data, this.logMessageContent, this.withCredentials, this.headers);\r\n }\r\n\r\n public async stop(): Promise {\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Stopping polling.\");\r\n\r\n // Tell receiving loop to stop, abort any current request, and then wait for it to finish\r\n this.running = false;\r\n this.pollAbort.abort();\r\n\r\n try {\r\n await this.receiving;\r\n\r\n // Send DELETE to clean up long polling on the server\r\n this.logger.log(LogLevel.Trace, `(LongPolling transport) sending DELETE request to ${this.url}.`);\r\n\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const deleteOptions: HttpRequest = {\r\n headers: { ...headers, ...this.headers },\r\n withCredentials: this.withCredentials,\r\n };\r\n const token = await this.getAccessToken();\r\n this.updateHeaderToken(deleteOptions, token);\r\n await this.httpClient.delete(this.url!, deleteOptions);\r\n\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) DELETE request sent.\");\r\n } finally {\r\n this.logger.log(LogLevel.Trace, \"(LongPolling transport) Stop finished.\");\r\n\r\n // Raise close event here instead of in polling\r\n // It needs to happen after the DELETE request is sent\r\n this.raiseOnClose();\r\n }\r\n }\r\n\r\n private raiseOnClose() {\r\n if (this.onclose) {\r\n let logMessage = \"(LongPolling transport) Firing onclose event.\";\r\n if (this.closeError) {\r\n logMessage += \" Error: \" + this.closeError;\r\n }\r\n this.logger.log(LogLevel.Trace, logMessage);\r\n this.onclose(this.closeError);\r\n }\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { EventSourceConstructor } from \"./Polyfills\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform, sendMessage } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class ServerSentEventsTransport implements ITransport {\r\n private readonly httpClient: HttpClient;\r\n private readonly accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly logger: ILogger;\r\n private readonly logMessageContent: boolean;\r\n private readonly withCredentials: boolean;\r\n private readonly eventSourceConstructor: EventSourceConstructor;\r\n private eventSource?: EventSource;\r\n private url?: string;\r\n private headers: MessageHeaders;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger,\r\n logMessageContent: boolean, eventSourceConstructor: EventSourceConstructor, withCredentials: boolean, headers: MessageHeaders) {\r\n this.httpClient = httpClient;\r\n this.accessTokenFactory = accessTokenFactory;\r\n this.logger = logger;\r\n this.logMessageContent = logMessageContent;\r\n this.withCredentials = withCredentials;\r\n this.eventSourceConstructor = eventSourceConstructor;\r\n this.headers = headers;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this.logger.log(LogLevel.Trace, \"(SSE transport) Connecting.\");\r\n\r\n // set url before accessTokenFactory because this.url is only for send and we set the auth header instead of the query string for send\r\n this.url = url;\r\n\r\n if (this.accessTokenFactory) {\r\n const token = await this.accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n let opened = false;\r\n if (transferFormat !== TransferFormat.Text) {\r\n reject(new Error(\"The Server-Sent Events transport only supports the 'Text' transfer format\"));\r\n return;\r\n }\r\n\r\n let eventSource: EventSource;\r\n if (Platform.isBrowser || Platform.isWebWorker) {\r\n eventSource = new this.eventSourceConstructor(url, { withCredentials: this.withCredentials });\r\n } else {\r\n // Non-browser passes cookies via the dictionary\r\n const cookies = this.httpClient.getCookieString(url);\r\n const headers: MessageHeaders = {};\r\n headers.Cookie = cookies;\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n eventSource = new this.eventSourceConstructor(url, { withCredentials: this.withCredentials, headers: { ...headers, ...this.headers} } as EventSourceInit);\r\n }\r\n\r\n try {\r\n eventSource.onmessage = (e: MessageEvent) => {\r\n if (this.onreceive) {\r\n try {\r\n this.logger.log(LogLevel.Trace, `(SSE transport) data received. ${getDataDetail(e.data, this.logMessageContent)}.`);\r\n this.onreceive(e.data);\r\n } catch (error) {\r\n this.close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n eventSource.onerror = (e: MessageEvent) => {\r\n const error = new Error(e.data || \"Error occurred\");\r\n if (opened) {\r\n this.close(error);\r\n } else {\r\n reject(error);\r\n }\r\n };\r\n\r\n eventSource.onopen = () => {\r\n this.logger.log(LogLevel.Information, `SSE connected to ${this.url}`);\r\n this.eventSource = eventSource;\r\n opened = true;\r\n resolve();\r\n };\r\n } catch (e) {\r\n reject(e);\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public async send(data: any): Promise {\r\n if (!this.eventSource) {\r\n return Promise.reject(new Error(\"Cannot send until the transport is connected\"));\r\n }\r\n return sendMessage(this.logger, \"SSE\", this.httpClient, this.url!, this.accessTokenFactory, data, this.logMessageContent, this.withCredentials, this.headers);\r\n }\r\n\r\n public stop(): Promise {\r\n this.close();\r\n return Promise.resolve();\r\n }\r\n\r\n private close(e?: Error) {\r\n if (this.eventSource) {\r\n this.eventSource.close();\r\n this.eventSource = undefined;\r\n\r\n if (this.onclose) {\r\n this.onclose(e);\r\n }\r\n }\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { MessageHeaders } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { ITransport, TransferFormat } from \"./ITransport\";\r\nimport { WebSocketConstructor } from \"./Polyfills\";\r\nimport { Arg, getDataDetail, getUserAgentHeader, Platform } from \"./Utils\";\r\n\r\n/** @private */\r\nexport class WebSocketTransport implements ITransport {\r\n private readonly logger: ILogger;\r\n private readonly accessTokenFactory: (() => string | Promise) | undefined;\r\n private readonly logMessageContent: boolean;\r\n private readonly webSocketConstructor: WebSocketConstructor;\r\n private readonly httpClient: HttpClient;\r\n private webSocket?: WebSocket;\r\n private headers: MessageHeaders;\r\n\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((error?: Error) => void) | null;\r\n\r\n constructor(httpClient: HttpClient, accessTokenFactory: (() => string | Promise) | undefined, logger: ILogger,\r\n logMessageContent: boolean, webSocketConstructor: WebSocketConstructor, headers: MessageHeaders) {\r\n this.logger = logger;\r\n this.accessTokenFactory = accessTokenFactory;\r\n this.logMessageContent = logMessageContent;\r\n this.webSocketConstructor = webSocketConstructor;\r\n this.httpClient = httpClient;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n this.headers = headers;\r\n }\r\n\r\n public async connect(url: string, transferFormat: TransferFormat): Promise {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isRequired(transferFormat, \"transferFormat\");\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n this.logger.log(LogLevel.Trace, \"(WebSockets transport) Connecting.\");\r\n\r\n if (this.accessTokenFactory) {\r\n const token = await this.accessTokenFactory();\r\n if (token) {\r\n url += (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + `access_token=${encodeURIComponent(token)}`;\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n url = url.replace(/^http/, \"ws\");\r\n let webSocket: WebSocket | undefined;\r\n const cookies = this.httpClient.getCookieString(url);\r\n let opened = false;\r\n\r\n if (Platform.isNode) {\r\n const headers = {};\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n if (cookies) {\r\n headers[`Cookie`] = `${cookies}`;\r\n }\r\n\r\n // Only pass headers when in non-browser environments\r\n webSocket = new this.webSocketConstructor(url, undefined, {\r\n headers: { ...headers, ...this.headers },\r\n });\r\n }\r\n\r\n if (!webSocket) {\r\n // Chrome is not happy with passing 'undefined' as protocol\r\n webSocket = new this.webSocketConstructor(url);\r\n }\r\n\r\n if (transferFormat === TransferFormat.Binary) {\r\n webSocket.binaryType = \"arraybuffer\";\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n webSocket.onopen = (_event: Event) => {\r\n this.logger.log(LogLevel.Information, `WebSocket connected to ${url}.`);\r\n this.webSocket = webSocket;\r\n opened = true;\r\n resolve();\r\n };\r\n\r\n webSocket.onerror = (event: Event) => {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = new Error(\"There was an error with the transport.\");\r\n }\r\n\r\n reject(error);\r\n };\r\n\r\n webSocket.onmessage = (message: MessageEvent) => {\r\n this.logger.log(LogLevel.Trace, `(WebSockets transport) data received. ${getDataDetail(message.data, this.logMessageContent)}.`);\r\n if (this.onreceive) {\r\n try {\r\n this.onreceive(message.data);\r\n } catch (error) {\r\n this.close(error);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n webSocket.onclose = (event: CloseEvent) => {\r\n // Don't call close handler if connection was never established\r\n // We'll reject the connect call instead\r\n if (opened) {\r\n this.close(event);\r\n } else {\r\n let error: any = null;\r\n // ErrorEvent is a browser only type we need to check if the type exists before using it\r\n if (typeof ErrorEvent !== \"undefined\" && event instanceof ErrorEvent) {\r\n error = event.error;\r\n } else {\r\n error = new Error(\"There was an error with the transport.\");\r\n }\r\n\r\n reject(error);\r\n }\r\n };\r\n });\r\n }\r\n\r\n public send(data: any): Promise {\r\n if (this.webSocket && this.webSocket.readyState === this.webSocketConstructor.OPEN) {\r\n this.logger.log(LogLevel.Trace, `(WebSockets transport) sending data. ${getDataDetail(data, this.logMessageContent)}.`);\r\n this.webSocket.send(data);\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.reject(\"WebSocket is not in the OPEN state\");\r\n }\r\n\r\n public stop(): Promise {\r\n if (this.webSocket) {\r\n // Manually invoke onclose callback inline so we know the HttpConnection was closed properly before returning\r\n // This also solves an issue where websocket.onclose could take 18+ seconds to trigger during network disconnects\r\n this.close(undefined);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n private close(event?: CloseEvent | Error): void {\r\n // webSocket will be null if the transport did not start successfully\r\n if (this.webSocket) {\r\n // Clear websocket handlers because we are considering the socket closed now\r\n this.webSocket.onclose = () => {};\r\n this.webSocket.onmessage = () => {};\r\n this.webSocket.onerror = () => {};\r\n this.webSocket.close();\r\n this.webSocket = undefined;\r\n }\r\n\r\n this.logger.log(LogLevel.Trace, \"(WebSockets transport) socket closed.\");\r\n if (this.onclose) {\r\n if (this.isCloseEvent(event) && (event.wasClean === false || event.code !== 1000)) {\r\n this.onclose(new Error(`WebSocket closed with status code: ${event.code} (${event.reason}).`));\r\n } else if (event instanceof Error) {\r\n this.onclose(event);\r\n } else {\r\n this.onclose();\r\n }\r\n }\r\n }\r\n\r\n private isCloseEvent(event?: any): event is CloseEvent {\r\n return event && typeof event.wasClean === \"boolean\" && typeof event.code === \"number\";\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { DefaultHttpClient } from \"./DefaultHttpClient\";\r\nimport { HttpClient } from \"./HttpClient\";\r\nimport { IConnection } from \"./IConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { HttpTransportType, ITransport, TransferFormat } from \"./ITransport\";\r\nimport { LongPollingTransport } from \"./LongPollingTransport\";\r\nimport { ServerSentEventsTransport } from \"./ServerSentEventsTransport\";\r\nimport { Arg, createLogger, getUserAgentHeader, Platform } from \"./Utils\";\r\nimport { WebSocketTransport } from \"./WebSocketTransport\";\r\n\r\n/** @private */\r\nconst enum ConnectionState {\r\n Connecting = \"Connecting\",\r\n Connected = \"Connected\",\r\n Disconnected = \"Disconnected\",\r\n Disconnecting = \"Disconnecting\",\r\n}\r\n\r\n/** @private */\r\nexport interface INegotiateResponse {\r\n connectionId?: string;\r\n connectionToken?: string;\r\n negotiateVersion?: number;\r\n availableTransports?: IAvailableTransport[];\r\n url?: string;\r\n accessToken?: string;\r\n error?: string;\r\n}\r\n\r\n/** @private */\r\nexport interface IAvailableTransport {\r\n transport: keyof typeof HttpTransportType;\r\n transferFormats: Array;\r\n}\r\n\r\nconst MAX_REDIRECTS = 100;\r\n\r\n/** @private */\r\nexport class HttpConnection implements IConnection {\r\n private connectionState: ConnectionState;\r\n // connectionStarted is tracked independently from connectionState, so we can check if the\r\n // connection ever did successfully transition from connecting to connected before disconnecting.\r\n private connectionStarted: boolean;\r\n private readonly httpClient: HttpClient;\r\n private readonly logger: ILogger;\r\n private readonly options: IHttpConnectionOptions;\r\n private transport?: ITransport;\r\n private startInternalPromise?: Promise;\r\n private stopPromise?: Promise;\r\n private stopPromiseResolver: (value?: PromiseLike) => void = () => {};\r\n private stopError?: Error;\r\n private accessTokenFactory?: () => string | Promise;\r\n private sendQueue?: TransportSendQueue;\r\n\r\n public readonly features: any = {};\r\n public baseUrl: string;\r\n public connectionId?: string;\r\n public onreceive: ((data: string | ArrayBuffer) => void) | null;\r\n public onclose: ((e?: Error) => void) | null;\r\n\r\n private readonly negotiateVersion: number = 1;\r\n\r\n constructor(url: string, options: IHttpConnectionOptions = {}) {\r\n Arg.isRequired(url, \"url\");\r\n\r\n this.logger = createLogger(options.logger);\r\n this.baseUrl = this.resolveUrl(url);\r\n\r\n options = options || {};\r\n options.logMessageContent = options.logMessageContent === undefined ? false : options.logMessageContent;\r\n if (typeof options.withCredentials === \"boolean\" || options.withCredentials === undefined) {\r\n options.withCredentials = options.withCredentials === undefined ? true : options.withCredentials;\r\n } else {\r\n throw new Error(\"withCredentials option was not a 'boolean' or 'undefined' value\");\r\n }\r\n\r\n let webSocketModule: any = null;\r\n let eventSourceModule: any = null;\r\n\r\n if (Platform.isNode && typeof require !== \"undefined\") {\r\n // In order to ignore the dynamic require in webpack builds we need to do this magic\r\n // @ts-ignore: TS doesn't know about these names\r\n const requireFunc = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : require;\r\n webSocketModule = requireFunc(\"ws\");\r\n eventSourceModule = requireFunc(\"eventsource\");\r\n }\r\n\r\n if (!Platform.isNode && typeof WebSocket !== \"undefined\" && !options.WebSocket) {\r\n options.WebSocket = WebSocket;\r\n } else if (Platform.isNode && !options.WebSocket) {\r\n if (webSocketModule) {\r\n options.WebSocket = webSocketModule;\r\n }\r\n }\r\n\r\n if (!Platform.isNode && typeof EventSource !== \"undefined\" && !options.EventSource) {\r\n options.EventSource = EventSource;\r\n } else if (Platform.isNode && !options.EventSource) {\r\n if (typeof eventSourceModule !== \"undefined\") {\r\n options.EventSource = eventSourceModule;\r\n }\r\n }\r\n\r\n this.httpClient = options.httpClient || new DefaultHttpClient(this.logger);\r\n this.connectionState = ConnectionState.Disconnected;\r\n this.connectionStarted = false;\r\n this.options = options;\r\n\r\n this.onreceive = null;\r\n this.onclose = null;\r\n }\r\n\r\n public start(): Promise;\r\n public start(transferFormat: TransferFormat): Promise;\r\n public async start(transferFormat?: TransferFormat): Promise {\r\n transferFormat = transferFormat || TransferFormat.Binary;\r\n\r\n Arg.isIn(transferFormat, TransferFormat, \"transferFormat\");\r\n\r\n this.logger.log(LogLevel.Debug, `Starting connection with transfer format '${TransferFormat[transferFormat]}'.`);\r\n\r\n if (this.connectionState !== ConnectionState.Disconnected) {\r\n return Promise.reject(new Error(\"Cannot start an HttpConnection that is not in the 'Disconnected' state.\"));\r\n }\r\n\r\n this.connectionState = ConnectionState.Connecting;\r\n\r\n this.startInternalPromise = this.startInternal(transferFormat);\r\n await this.startInternalPromise;\r\n\r\n // The TypeScript compiler thinks that connectionState must be Connecting here. The TypeScript compiler is wrong.\r\n if (this.connectionState as any === ConnectionState.Disconnecting) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"Failed to start the HttpConnection before stop() was called.\";\r\n this.logger.log(LogLevel.Error, message);\r\n\r\n // We cannot await stopPromise inside startInternal since stopInternal awaits the startInternalPromise.\r\n await this.stopPromise;\r\n\r\n return Promise.reject(new Error(message));\r\n } else if (this.connectionState as any !== ConnectionState.Connected) {\r\n // stop() was called and transitioned the client into the Disconnecting state.\r\n const message = \"HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!\";\r\n this.logger.log(LogLevel.Error, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n\r\n this.connectionStarted = true;\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n if (this.connectionState !== ConnectionState.Connected) {\r\n return Promise.reject(new Error(\"Cannot send data if the connection is not in the 'Connected' State.\"));\r\n }\r\n\r\n if (!this.sendQueue) {\r\n this.sendQueue = new TransportSendQueue(this.transport!);\r\n }\r\n\r\n // Transport will not be null if state is connected\r\n return this.sendQueue.send(data);\r\n }\r\n\r\n public async stop(error?: Error): Promise {\r\n if (this.connectionState === ConnectionState.Disconnected) {\r\n this.logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnected state.`);\r\n return Promise.resolve();\r\n }\r\n\r\n if (this.connectionState === ConnectionState.Disconnecting) {\r\n this.logger.log(LogLevel.Debug, `Call to HttpConnection.stop(${error}) ignored because the connection is already in the disconnecting state.`);\r\n return this.stopPromise;\r\n }\r\n\r\n this.connectionState = ConnectionState.Disconnecting;\r\n\r\n this.stopPromise = new Promise((resolve) => {\r\n // Don't complete stop() until stopConnection() completes.\r\n this.stopPromiseResolver = resolve;\r\n });\r\n\r\n // stopInternal should never throw so just observe it.\r\n await this.stopInternal(error);\r\n await this.stopPromise;\r\n }\r\n\r\n private async stopInternal(error?: Error): Promise {\r\n // Set error as soon as possible otherwise there is a race between\r\n // the transport closing and providing an error and the error from a close message\r\n // We would prefer the close message error.\r\n this.stopError = error;\r\n\r\n try {\r\n await this.startInternalPromise;\r\n } catch (e) {\r\n // This exception is returned to the user as a rejected Promise from the start method.\r\n }\r\n\r\n // The transport's onclose will trigger stopConnection which will run our onclose event.\r\n // The transport should always be set if currently connected. If it wasn't set, it's likely because\r\n // stop was called during start() and start() failed.\r\n if (this.transport) {\r\n try {\r\n await this.transport.stop();\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `HttpConnection.transport.stop() threw error '${e}'.`);\r\n this.stopConnection();\r\n }\r\n\r\n this.transport = undefined;\r\n } else {\r\n this.logger.log(LogLevel.Debug, \"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.\");\r\n }\r\n }\r\n\r\n private async startInternal(transferFormat: TransferFormat): Promise {\r\n // Store the original base url and the access token factory since they may change\r\n // as part of negotiating\r\n let url = this.baseUrl;\r\n this.accessTokenFactory = this.options.accessTokenFactory;\r\n\r\n try {\r\n if (this.options.skipNegotiation) {\r\n if (this.options.transport === HttpTransportType.WebSockets) {\r\n // No need to add a connection ID in this case\r\n this.transport = this.constructTransport(HttpTransportType.WebSockets);\r\n // We should just call connect directly in this case.\r\n // No fallback or negotiate in this case.\r\n await this.startTransport(url, transferFormat);\r\n } else {\r\n throw new Error(\"Negotiation can only be skipped when using the WebSocket transport directly.\");\r\n }\r\n } else {\r\n let negotiateResponse: INegotiateResponse | null = null;\r\n let redirects = 0;\r\n\r\n do {\r\n negotiateResponse = await this.getNegotiationResponse(url);\r\n // the user tries to stop the connection when it is being started\r\n if (this.connectionState === ConnectionState.Disconnecting || this.connectionState === ConnectionState.Disconnected) {\r\n throw new Error(\"The connection was stopped during negotiation.\");\r\n }\r\n\r\n if (negotiateResponse.error) {\r\n throw new Error(negotiateResponse.error);\r\n }\r\n\r\n if ((negotiateResponse as any).ProtocolVersion) {\r\n 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.\");\r\n }\r\n\r\n if (negotiateResponse.url) {\r\n url = negotiateResponse.url;\r\n }\r\n\r\n if (negotiateResponse.accessToken) {\r\n // Replace the current access token factory with one that uses\r\n // the returned access token\r\n const accessToken = negotiateResponse.accessToken;\r\n this.accessTokenFactory = () => accessToken;\r\n }\r\n\r\n redirects++;\r\n }\r\n while (negotiateResponse.url && redirects < MAX_REDIRECTS);\r\n\r\n if (redirects === MAX_REDIRECTS && negotiateResponse.url) {\r\n throw new Error(\"Negotiate redirection limit exceeded.\");\r\n }\r\n\r\n await this.createTransport(url, this.options.transport, negotiateResponse, transferFormat);\r\n }\r\n\r\n if (this.transport instanceof LongPollingTransport) {\r\n this.features.inherentKeepAlive = true;\r\n }\r\n\r\n if (this.connectionState === ConnectionState.Connecting) {\r\n // Ensure the connection transitions to the connected state prior to completing this.startInternalPromise.\r\n // start() will handle the case when stop was called and startInternal exits still in the disconnecting state.\r\n this.logger.log(LogLevel.Debug, \"The HttpConnection connected successfully.\");\r\n this.connectionState = ConnectionState.Connected;\r\n }\r\n\r\n // stop() is waiting on us via this.startInternalPromise so keep this.transport around so it can clean up.\r\n // This is the only case startInternal can exit in neither the connected nor disconnected state because stopConnection()\r\n // will transition to the disconnected state. start() will wait for the transition using the stopPromise.\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, \"Failed to start the connection: \" + e);\r\n this.connectionState = ConnectionState.Disconnected;\r\n this.transport = undefined;\r\n\r\n // if start fails, any active calls to stop assume that start will complete the stop promise\r\n this.stopPromiseResolver();\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private async getNegotiationResponse(url: string): Promise {\r\n const headers = {};\r\n if (this.accessTokenFactory) {\r\n const token = await this.accessTokenFactory();\r\n if (token) {\r\n headers[`Authorization`] = `Bearer ${token}`;\r\n }\r\n }\r\n\r\n const [name, value] = getUserAgentHeader();\r\n headers[name] = value;\r\n\r\n const negotiateUrl = this.resolveNegotiateUrl(url);\r\n this.logger.log(LogLevel.Debug, `Sending negotiation request: ${negotiateUrl}.`);\r\n try {\r\n const response = await this.httpClient.post(negotiateUrl, {\r\n content: \"\",\r\n headers: { ...headers, ...this.options.headers },\r\n withCredentials: this.options.withCredentials,\r\n });\r\n\r\n if (response.statusCode !== 200) {\r\n return Promise.reject(new Error(`Unexpected status code returned from negotiate '${response.statusCode}'`));\r\n }\r\n\r\n const negotiateResponse = JSON.parse(response.content as string) as INegotiateResponse;\r\n if (!negotiateResponse.negotiateVersion || negotiateResponse.negotiateVersion < 1) {\r\n // Negotiate version 0 doesn't use connectionToken\r\n // So we set it equal to connectionId so all our logic can use connectionToken without being aware of the negotiate version\r\n negotiateResponse.connectionToken = negotiateResponse.connectionId;\r\n }\r\n return negotiateResponse;\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, \"Failed to complete negotiation with the server: \" + e);\r\n return Promise.reject(e);\r\n }\r\n }\r\n\r\n private createConnectUrl(url: string, connectionToken: string | null | undefined) {\r\n if (!connectionToken) {\r\n return url;\r\n }\r\n\r\n return url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + `id=${connectionToken}`;\r\n }\r\n\r\n private async createTransport(url: string, requestedTransport: HttpTransportType | ITransport | undefined, negotiateResponse: INegotiateResponse, requestedTransferFormat: TransferFormat): Promise {\r\n let connectUrl = this.createConnectUrl(url, negotiateResponse.connectionToken);\r\n if (this.isITransport(requestedTransport)) {\r\n this.logger.log(LogLevel.Debug, \"Connection was provided an instance of ITransport, using that directly.\");\r\n this.transport = requestedTransport;\r\n await this.startTransport(connectUrl, requestedTransferFormat);\r\n\r\n this.connectionId = negotiateResponse.connectionId;\r\n return;\r\n }\r\n\r\n const transportExceptions: any[] = [];\r\n const transports = negotiateResponse.availableTransports || [];\r\n let negotiate: INegotiateResponse | undefined = negotiateResponse;\r\n for (const endpoint of transports) {\r\n const transportOrError = this.resolveTransportOrError(endpoint, requestedTransport, requestedTransferFormat);\r\n if (transportOrError instanceof Error) {\r\n // Store the error and continue, we don't want to cause a re-negotiate in these cases\r\n transportExceptions.push(`${endpoint.transport} failed: ${transportOrError}`);\r\n } else if (this.isITransport(transportOrError)) {\r\n this.transport = transportOrError;\r\n if (!negotiate) {\r\n try {\r\n negotiate = await this.getNegotiationResponse(url);\r\n } catch (ex) {\r\n return Promise.reject(ex);\r\n }\r\n connectUrl = this.createConnectUrl(url, negotiate.connectionToken);\r\n }\r\n try {\r\n await this.startTransport(connectUrl, requestedTransferFormat);\r\n this.connectionId = negotiate.connectionId;\r\n return;\r\n } catch (ex) {\r\n this.logger.log(LogLevel.Error, `Failed to start the transport '${endpoint.transport}': ${ex}`);\r\n negotiate = undefined;\r\n transportExceptions.push(`${endpoint.transport} failed: ${ex}`);\r\n\r\n if (this.connectionState !== ConnectionState.Connecting) {\r\n const message = \"Failed to select transport before stop() was called.\";\r\n this.logger.log(LogLevel.Debug, message);\r\n return Promise.reject(new Error(message));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (transportExceptions.length > 0) {\r\n return Promise.reject(new Error(`Unable to connect to the server with any of the available transports. ${transportExceptions.join(\" \")}`));\r\n }\r\n return Promise.reject(new Error(\"None of the transports supported by the client are supported by the server.\"));\r\n }\r\n\r\n private constructTransport(transport: HttpTransportType): ITransport {\r\n switch (transport) {\r\n case HttpTransportType.WebSockets:\r\n if (!this.options.WebSocket) {\r\n throw new Error(\"'WebSocket' is not supported in your environment.\");\r\n }\r\n return new WebSocketTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.WebSocket, this.options.headers || {});\r\n case HttpTransportType.ServerSentEvents:\r\n if (!this.options.EventSource) {\r\n throw new Error(\"'EventSource' is not supported in your environment.\");\r\n }\r\n return new ServerSentEventsTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.EventSource, this.options.withCredentials!, this.options.headers || {});\r\n case HttpTransportType.LongPolling:\r\n return new LongPollingTransport(this.httpClient, this.accessTokenFactory, this.logger, this.options.logMessageContent || false, this.options.withCredentials!, this.options.headers || {});\r\n default:\r\n throw new Error(`Unknown transport: ${transport}.`);\r\n }\r\n }\r\n\r\n private startTransport(url: string, transferFormat: TransferFormat): Promise {\r\n this.transport!.onreceive = this.onreceive;\r\n this.transport!.onclose = (e) => this.stopConnection(e);\r\n return this.transport!.connect(url, transferFormat);\r\n }\r\n\r\n private resolveTransportOrError(endpoint: IAvailableTransport, requestedTransport: HttpTransportType | undefined, requestedTransferFormat: TransferFormat): ITransport | Error {\r\n const transport = HttpTransportType[endpoint.transport];\r\n if (transport === null || transport === undefined) {\r\n this.logger.log(LogLevel.Debug, `Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n return new Error(`Skipping transport '${endpoint.transport}' because it is not supported by this client.`);\r\n } else {\r\n if (transportMatches(requestedTransport, transport)) {\r\n const transferFormats = endpoint.transferFormats.map((s) => TransferFormat[s]);\r\n if (transferFormats.indexOf(requestedTransferFormat) >= 0) {\r\n if ((transport === HttpTransportType.WebSockets && !this.options.WebSocket) ||\r\n (transport === HttpTransportType.ServerSentEvents && !this.options.EventSource)) {\r\n this.logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it is not supported in your environment.'`);\r\n return new Error(`'${HttpTransportType[transport]}' is not supported in your environment.`);\r\n } else {\r\n this.logger.log(LogLevel.Debug, `Selecting transport '${HttpTransportType[transport]}'.`);\r\n try {\r\n return this.constructTransport(transport);\r\n } catch (ex) {\r\n return ex;\r\n }\r\n }\r\n } else {\r\n this.logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it does not support the requested transfer format '${TransferFormat[requestedTransferFormat]}'.`);\r\n return new Error(`'${HttpTransportType[transport]}' does not support ${TransferFormat[requestedTransferFormat]}.`);\r\n }\r\n } else {\r\n this.logger.log(LogLevel.Debug, `Skipping transport '${HttpTransportType[transport]}' because it was disabled by the client.`);\r\n return new Error(`'${HttpTransportType[transport]}' is disabled by the client.`);\r\n }\r\n }\r\n }\r\n\r\n private isITransport(transport: any): transport is ITransport {\r\n return transport && typeof (transport) === \"object\" && \"connect\" in transport;\r\n }\r\n\r\n private stopConnection(error?: Error): void {\r\n this.logger.log(LogLevel.Debug, `HttpConnection.stopConnection(${error}) called while in state ${this.connectionState}.`);\r\n\r\n this.transport = undefined;\r\n\r\n // If we have a stopError, it takes precedence over the error from the transport\r\n error = this.stopError || error;\r\n this.stopError = undefined;\r\n\r\n if (this.connectionState === ConnectionState.Disconnected) {\r\n this.logger.log(LogLevel.Debug, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is already in the disconnected state.`);\r\n return;\r\n }\r\n\r\n if (this.connectionState === ConnectionState.Connecting) {\r\n this.logger.log(LogLevel.Warning, `Call to HttpConnection.stopConnection(${error}) was ignored because the connection is still in the connecting state.`);\r\n throw new Error(`HttpConnection.stopConnection(${error}) was called while the connection is still in the connecting state.`);\r\n }\r\n\r\n if (this.connectionState === ConnectionState.Disconnecting) {\r\n // A call to stop() induced this call to stopConnection and needs to be completed.\r\n // Any stop() awaiters will be scheduled to continue after the onclose callback fires.\r\n this.stopPromiseResolver();\r\n }\r\n\r\n if (error) {\r\n this.logger.log(LogLevel.Error, `Connection disconnected with error '${error}'.`);\r\n } else {\r\n this.logger.log(LogLevel.Information, \"Connection disconnected.\");\r\n }\r\n\r\n if (this.sendQueue) {\r\n this.sendQueue.stop().catch((e) => {\r\n this.logger.log(LogLevel.Error, `TransportSendQueue.stop() threw error '${e}'.`);\r\n });\r\n this.sendQueue = undefined;\r\n }\r\n\r\n this.connectionId = undefined;\r\n this.connectionState = ConnectionState.Disconnected;\r\n\r\n if (this.connectionStarted) {\r\n this.connectionStarted = false;\r\n try {\r\n if (this.onclose) {\r\n this.onclose(error);\r\n }\r\n } catch (e) {\r\n this.logger.log(LogLevel.Error, `HttpConnection.onclose(${error}) threw error '${e}'.`);\r\n }\r\n }\r\n }\r\n\r\n private resolveUrl(url: string): string {\r\n // startsWith is not supported in IE\r\n if (url.lastIndexOf(\"https://\", 0) === 0 || url.lastIndexOf(\"http://\", 0) === 0) {\r\n return url;\r\n }\r\n\r\n if (!Platform.isBrowser || !window.document) {\r\n throw new Error(`Cannot resolve '${url}'.`);\r\n }\r\n\r\n // Setting the url to the href propery of an anchor tag handles normalization\r\n // for us. There are 3 main cases.\r\n // 1. Relative path normalization e.g \"b\" -> \"http://localhost:5000/a/b\"\r\n // 2. Absolute path normalization e.g \"/a/b\" -> \"http://localhost:5000/a/b\"\r\n // 3. Networkpath reference normalization e.g \"//localhost:5000/a/b\" -> \"http://localhost:5000/a/b\"\r\n const aTag = window.document.createElement(\"a\");\r\n aTag.href = url;\r\n\r\n this.logger.log(LogLevel.Information, `Normalizing '${url}' to '${aTag.href}'.`);\r\n return aTag.href;\r\n }\r\n\r\n private resolveNegotiateUrl(url: string): string {\r\n const index = url.indexOf(\"?\");\r\n let negotiateUrl = url.substring(0, index === -1 ? url.length : index);\r\n if (negotiateUrl[negotiateUrl.length - 1] !== \"/\") {\r\n negotiateUrl += \"/\";\r\n }\r\n negotiateUrl += \"negotiate\";\r\n negotiateUrl += index === -1 ? \"\" : url.substring(index);\r\n\r\n if (negotiateUrl.indexOf(\"negotiateVersion\") === -1) {\r\n negotiateUrl += index === -1 ? \"?\" : \"&\";\r\n negotiateUrl += \"negotiateVersion=\" + this.negotiateVersion;\r\n }\r\n return negotiateUrl;\r\n }\r\n}\r\n\r\nfunction transportMatches(requestedTransport: HttpTransportType | undefined, actualTransport: HttpTransportType) {\r\n return !requestedTransport || ((actualTransport & requestedTransport) !== 0);\r\n}\r\n\r\n/** @private */\r\nexport class TransportSendQueue {\r\n private buffer: any[] = [];\r\n private sendBufferedData: PromiseSource;\r\n private executing: boolean = true;\r\n private transportResult?: PromiseSource;\r\n private sendLoopPromise: Promise;\r\n\r\n constructor(private readonly transport: ITransport) {\r\n this.sendBufferedData = new PromiseSource();\r\n this.transportResult = new PromiseSource();\r\n\r\n this.sendLoopPromise = this.sendLoop();\r\n }\r\n\r\n public send(data: string | ArrayBuffer): Promise {\r\n this.bufferData(data);\r\n if (!this.transportResult) {\r\n this.transportResult = new PromiseSource();\r\n }\r\n return this.transportResult.promise;\r\n }\r\n\r\n public stop(): Promise {\r\n this.executing = false;\r\n this.sendBufferedData.resolve();\r\n return this.sendLoopPromise;\r\n }\r\n\r\n private bufferData(data: string | ArrayBuffer): void {\r\n if (this.buffer.length && typeof(this.buffer[0]) !== typeof(data)) {\r\n throw new Error(`Expected data to be of type ${typeof(this.buffer)} but was of type ${typeof(data)}`);\r\n }\r\n\r\n this.buffer.push(data);\r\n this.sendBufferedData.resolve();\r\n }\r\n\r\n private async sendLoop(): Promise {\r\n while (true) {\r\n await this.sendBufferedData.promise;\r\n\r\n if (!this.executing) {\r\n if (this.transportResult) {\r\n this.transportResult.reject(\"Connection stopped.\");\r\n }\r\n\r\n break;\r\n }\r\n\r\n this.sendBufferedData = new PromiseSource();\r\n\r\n const transportResult = this.transportResult!;\r\n this.transportResult = undefined;\r\n\r\n const data = typeof(this.buffer[0]) === \"string\" ?\r\n this.buffer.join(\"\") :\r\n TransportSendQueue.concatBuffers(this.buffer);\r\n\r\n this.buffer.length = 0;\r\n\r\n try {\r\n await this.transport.send(data);\r\n transportResult.resolve();\r\n } catch (error) {\r\n transportResult.reject(error);\r\n }\r\n }\r\n }\r\n\r\n private static concatBuffers(arrayBuffers: ArrayBuffer[]): ArrayBuffer {\r\n const totalLength = arrayBuffers.map((b) => b.byteLength).reduce((a, b) => a + b);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const item of arrayBuffers) {\r\n result.set(new Uint8Array(item), offset);\r\n offset += item.byteLength;\r\n }\r\n\r\n return result.buffer;\r\n }\r\n}\r\n\r\nclass PromiseSource {\r\n private resolver?: () => void;\r\n private rejecter!: (reason?: any) => void;\r\n public promise: Promise;\r\n\r\n constructor() {\r\n this.promise = new Promise((resolve, reject) => [this.resolver, this.rejecter] = [resolve, reject]);\r\n }\r\n\r\n public resolve(): void {\r\n this.resolver!();\r\n }\r\n\r\n public reject(reason?: any): void {\r\n this.rejecter!(reason);\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { CompletionMessage, HubMessage, IHubProtocol, InvocationMessage, MessageType, StreamItemMessage } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { TransferFormat } from \"./ITransport\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\n\r\nconst JSON_HUB_PROTOCOL_NAME: string = \"json\";\r\n\r\n/** Implements the JSON Hub Protocol. */\r\nexport class JsonHubProtocol implements IHubProtocol {\r\n\r\n /** @inheritDoc */\r\n public readonly name: string = JSON_HUB_PROTOCOL_NAME;\r\n /** @inheritDoc */\r\n public readonly version: number = 1;\r\n\r\n /** @inheritDoc */\r\n public readonly transferFormat: TransferFormat = TransferFormat.Text;\r\n\r\n /** Creates an array of {@link @microsoft/signalr.HubMessage} objects from the specified serialized representation.\r\n *\r\n * @param {string} input A string containing the serialized representation.\r\n * @param {ILogger} logger A logger that will be used to log messages that occur during parsing.\r\n */\r\n public parseMessages(input: string, logger: ILogger): HubMessage[] {\r\n // The interface does allow \"ArrayBuffer\" to be passed in, but this implementation does not. So let's throw a useful error.\r\n if (typeof input !== \"string\") {\r\n throw new Error(\"Invalid input for JSON hub protocol. Expected a string.\");\r\n }\r\n\r\n if (!input) {\r\n return [];\r\n }\r\n\r\n if (logger === null) {\r\n logger = NullLogger.instance;\r\n }\r\n\r\n // Parse the messages\r\n const messages = TextMessageFormat.parse(input);\r\n\r\n const hubMessages = [];\r\n for (const message of messages) {\r\n const parsedMessage = JSON.parse(message) as HubMessage;\r\n if (typeof parsedMessage.type !== \"number\") {\r\n throw new Error(\"Invalid payload.\");\r\n }\r\n switch (parsedMessage.type) {\r\n case MessageType.Invocation:\r\n this.isInvocationMessage(parsedMessage);\r\n break;\r\n case MessageType.StreamItem:\r\n this.isStreamItemMessage(parsedMessage);\r\n break;\r\n case MessageType.Completion:\r\n this.isCompletionMessage(parsedMessage);\r\n break;\r\n case MessageType.Ping:\r\n // Single value, no need to validate\r\n break;\r\n case MessageType.Close:\r\n // All optional values, no need to validate\r\n break;\r\n default:\r\n // Future protocol changes can add message types, old clients can ignore them\r\n logger.log(LogLevel.Information, \"Unknown message type '\" + parsedMessage.type + \"' ignored.\");\r\n continue;\r\n }\r\n hubMessages.push(parsedMessage);\r\n }\r\n\r\n return hubMessages;\r\n }\r\n\r\n /** Writes the specified {@link @microsoft/signalr.HubMessage} to a string and returns it.\r\n *\r\n * @param {HubMessage} message The message to write.\r\n * @returns {string} A string containing the serialized representation of the message.\r\n */\r\n public writeMessage(message: HubMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(message));\r\n }\r\n\r\n private isInvocationMessage(message: InvocationMessage): void {\r\n this.assertNotEmptyString(message.target, \"Invalid payload for Invocation message.\");\r\n\r\n if (message.invocationId !== undefined) {\r\n this.assertNotEmptyString(message.invocationId, \"Invalid payload for Invocation message.\");\r\n }\r\n }\r\n\r\n private isStreamItemMessage(message: StreamItemMessage): void {\r\n this.assertNotEmptyString(message.invocationId, \"Invalid payload for StreamItem message.\");\r\n\r\n if (message.item === undefined) {\r\n throw new Error(\"Invalid payload for StreamItem message.\");\r\n }\r\n }\r\n\r\n private isCompletionMessage(message: CompletionMessage): void {\r\n if (message.result && message.error) {\r\n throw new Error(\"Invalid payload for Completion message.\");\r\n }\r\n\r\n if (!message.result && message.error) {\r\n this.assertNotEmptyString(message.error, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n this.assertNotEmptyString(message.invocationId, \"Invalid payload for Completion message.\");\r\n }\r\n\r\n private assertNotEmptyString(value: any, errorMessage: string): void {\r\n if (typeof value !== \"string\" || value === \"\") {\r\n throw new Error(errorMessage);\r\n }\r\n }\r\n}\r\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { DefaultReconnectPolicy } from \"./DefaultReconnectPolicy\";\r\nimport { HttpConnection } from \"./HttpConnection\";\r\nimport { HubConnection } from \"./HubConnection\";\r\nimport { IHttpConnectionOptions } from \"./IHttpConnectionOptions\";\r\nimport { IHubProtocol } from \"./IHubProtocol\";\r\nimport { ILogger, LogLevel } from \"./ILogger\";\r\nimport { IRetryPolicy } from \"./IRetryPolicy\";\r\nimport { HttpTransportType } from \"./ITransport\";\r\nimport { JsonHubProtocol } from \"./JsonHubProtocol\";\r\nimport { NullLogger } from \"./Loggers\";\r\nimport { Arg, ConsoleLogger } from \"./Utils\";\r\n\r\n// tslint:disable:object-literal-sort-keys\r\nconst LogLevelNameMapping = {\r\n trace: LogLevel.Trace,\r\n debug: LogLevel.Debug,\r\n info: LogLevel.Information,\r\n information: LogLevel.Information,\r\n warn: LogLevel.Warning,\r\n warning: LogLevel.Warning,\r\n error: LogLevel.Error,\r\n critical: LogLevel.Critical,\r\n none: LogLevel.None,\r\n};\r\n\r\nfunction parseLogLevel(name: string): LogLevel {\r\n // Case-insensitive matching via lower-casing\r\n // Yes, I know case-folding is a complicated problem in Unicode, but we only support\r\n // the ASCII strings defined in LogLevelNameMapping anyway, so it's fine -anurse.\r\n const mapping = LogLevelNameMapping[name.toLowerCase()];\r\n if (typeof mapping !== \"undefined\") {\r\n return mapping;\r\n } else {\r\n throw new Error(`Unknown log level: ${name}`);\r\n }\r\n}\r\n\r\n/** A builder for configuring {@link @microsoft/signalr.HubConnection} instances. */\r\nexport class HubConnectionBuilder {\r\n /** @internal */\r\n public protocol?: IHubProtocol;\r\n /** @internal */\r\n public httpConnectionOptions?: IHttpConnectionOptions;\r\n /** @internal */\r\n public url?: string;\r\n /** @internal */\r\n public logger?: ILogger;\r\n\r\n /** If defined, this indicates the client should automatically attempt to reconnect if the connection is lost. */\r\n /** @internal */\r\n public reconnectPolicy?: IRetryPolicy;\r\n\r\n /** Configures console logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel} logLevel The minimum level of messages to log. Anything at this level, or a more severe level, will be logged.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logLevel: LogLevel): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {ILogger} logger An object implementing the {@link @microsoft/signalr.ILogger} interface, which will be used to write all log messages.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logger: ILogger): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {string} logLevel A string representing a LogLevel setting a minimum level of messages to log.\r\n * See {@link https://docs.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n */\r\n public configureLogging(logLevel: string): HubConnectionBuilder;\r\n\r\n /** Configures custom logging for the {@link @microsoft/signalr.HubConnection}.\r\n *\r\n * @param {LogLevel | string | ILogger} logging A {@link @microsoft/signalr.LogLevel}, a string representing a LogLevel, or an object implementing the {@link @microsoft/signalr.ILogger} interface.\r\n * See {@link https://docs.microsoft.com/aspnet/core/signalr/configuration#configure-logging|the documentation for client logging configuration} for more details.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder;\r\n public configureLogging(logging: LogLevel | string | ILogger): HubConnectionBuilder {\r\n Arg.isRequired(logging, \"logging\");\r\n\r\n if (isLogger(logging)) {\r\n this.logger = logging;\r\n } else if (typeof logging === \"string\") {\r\n const logLevel = parseLogLevel(logging);\r\n this.logger = new ConsoleLogger(logLevel);\r\n } else {\r\n this.logger = new ConsoleLogger(logging);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * The transport will be selected automatically based on what the server and client support.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified HTTP-based transport to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {HttpTransportType} transportType The specific transport to use.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, transportType: HttpTransportType): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use HTTP-based transports to connect to the specified URL.\r\n *\r\n * @param {string} url The URL the connection will use.\r\n * @param {IHttpConnectionOptions} options An options object used to configure the connection.\r\n * @returns The {@link @microsoft/signalr.HubConnectionBuilder} instance, for chaining.\r\n */\r\n public withUrl(url: string, options: IHttpConnectionOptions): HubConnectionBuilder;\r\n public withUrl(url: string, transportTypeOrOptions?: IHttpConnectionOptions | HttpTransportType): HubConnectionBuilder {\r\n Arg.isRequired(url, \"url\");\r\n Arg.isNotEmpty(url, \"url\");\r\n\r\n this.url = url;\r\n\r\n // Flow-typing knows where it's at. Since HttpTransportType is a number and IHttpConnectionOptions is guaranteed\r\n // to be an object, we know (as does TypeScript) this comparison is all we need to figure out which overload was called.\r\n if (typeof transportTypeOrOptions === \"object\") {\r\n this.httpConnectionOptions = { ...this.httpConnectionOptions, ...transportTypeOrOptions };\r\n } else {\r\n this.httpConnectionOptions = {\r\n ...this.httpConnectionOptions,\r\n transport: transportTypeOrOptions,\r\n };\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to use the specified Hub Protocol.\r\n *\r\n * @param {IHubProtocol} protocol The {@link @microsoft/signalr.IHubProtocol} implementation to use.\r\n */\r\n public withHubProtocol(protocol: IHubProtocol): HubConnectionBuilder {\r\n Arg.isRequired(protocol, \"protocol\");\r\n\r\n this.protocol = protocol;\r\n return this;\r\n }\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n * By default, the client will wait 0, 2, 10 and 30 seconds respectively before trying up to 4 reconnect attempts.\r\n */\r\n public withAutomaticReconnect(): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {number[]} retryDelays An array containing the delays in milliseconds before trying each reconnect attempt.\r\n * The length of the array represents how many failed reconnect attempts it takes before the client will stop attempting to reconnect.\r\n */\r\n public withAutomaticReconnect(retryDelays: number[]): HubConnectionBuilder;\r\n\r\n /** Configures the {@link @microsoft/signalr.HubConnection} to automatically attempt to reconnect if the connection is lost.\r\n *\r\n * @param {IRetryPolicy} reconnectPolicy An {@link @microsoft/signalR.IRetryPolicy} that controls the timing and number of reconnect attempts.\r\n */\r\n public withAutomaticReconnect(reconnectPolicy: IRetryPolicy): HubConnectionBuilder;\r\n public withAutomaticReconnect(retryDelaysOrReconnectPolicy?: number[] | IRetryPolicy): HubConnectionBuilder {\r\n if (this.reconnectPolicy) {\r\n throw new Error(\"A reconnectPolicy has already been set.\");\r\n }\r\n\r\n if (!retryDelaysOrReconnectPolicy) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy();\r\n } else if (Array.isArray(retryDelaysOrReconnectPolicy)) {\r\n this.reconnectPolicy = new DefaultReconnectPolicy(retryDelaysOrReconnectPolicy);\r\n } else {\r\n this.reconnectPolicy = retryDelaysOrReconnectPolicy;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /** Creates a {@link @microsoft/signalr.HubConnection} from the configuration options specified in this builder.\r\n *\r\n * @returns {HubConnection} The configured {@link @microsoft/signalr.HubConnection}.\r\n */\r\n public build(): HubConnection {\r\n // If httpConnectionOptions has a logger, use it. Otherwise, override it with the one\r\n // provided to configureLogger\r\n const httpConnectionOptions = this.httpConnectionOptions || {};\r\n\r\n // If it's 'null', the user **explicitly** asked for null, don't mess with it.\r\n if (httpConnectionOptions.logger === undefined) {\r\n // If our logger is undefined or null, that's OK, the HttpConnection constructor will handle it.\r\n httpConnectionOptions.logger = this.logger;\r\n }\r\n\r\n // Now create the connection\r\n if (!this.url) {\r\n throw new Error(\"The 'HubConnectionBuilder.withUrl' method must be called before building the connection.\");\r\n }\r\n const connection = new HttpConnection(this.url, httpConnectionOptions);\r\n\r\n return HubConnection.create(\r\n connection,\r\n this.logger || NullLogger.instance,\r\n this.protocol || new JsonHubProtocol(),\r\n this.reconnectPolicy);\r\n }\r\n}\r\n\r\nfunction isLogger(logger: any): logger is ILogger {\r\n return logger.log !== undefined;\r\n}\r\n","import arrayWithoutHoles from \"@babel/runtime/helpers/esm/arrayWithoutHoles\";\nimport iterableToArray from \"@babel/runtime/helpers/esm/iterableToArray\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableSpread from \"@babel/runtime/helpers/esm/nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"@babel/runtime/helpers/esm/arrayLikeToArray\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","export class ButtplugEmbeddedConnectorOptions {\r\n constructor() {\r\n this.ServerName = \"Buttplug WASM Embedded Server\";\r\n // Empty string means ignore.\r\n this.DeviceConfigJSON = \"\";\r\n // Empty string means ignore.\r\n this.UserDeviceConfigJSON = \"\";\r\n // 0 here means all device.\r\n this.DeviceCommunicationManagerTypes = 0;\r\n // Require opt-in on raw messages.\r\n this.AllowRawMessages = false;\r\n this.MaxPingTime = 0;\r\n }\r\n}\r\nexport class ButtplugWebsocketConnectorOptions {\r\n constructor() {\r\n // Default to the insecure port.\r\n this.Address = \"ws://127.0.0.1:12345\";\r\n }\r\n}\r\n//# sourceMappingURL=connectors.js.map","function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*!\n * GSAP 3.8.0\n * https://greensock.com\n *\n * @license Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar _config = {\n autoSleep: 120,\n force3D: \"auto\",\n nullTargetWarn: 1,\n units: {\n lineHeight: \"\"\n }\n},\n _defaults = {\n duration: .5,\n overwrite: false,\n delay: 0\n},\n _suppressOverwrites,\n _bigNum = 1e8,\n _tinyNum = 1 / _bigNum,\n _2PI = Math.PI * 2,\n _HALF_PI = _2PI / 4,\n _gsID = 0,\n _sqrt = Math.sqrt,\n _cos = Math.cos,\n _sin = Math.sin,\n _isString = function _isString(value) {\n return typeof value === \"string\";\n},\n _isFunction = function _isFunction(value) {\n return typeof value === \"function\";\n},\n _isNumber = function _isNumber(value) {\n return typeof value === \"number\";\n},\n _isUndefined = function _isUndefined(value) {\n return typeof value === \"undefined\";\n},\n _isObject = function _isObject(value) {\n return typeof value === \"object\";\n},\n _isNotFalse = function _isNotFalse(value) {\n return value !== false;\n},\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n},\n _isFuncOrString = function _isFuncOrString(value) {\n return _isFunction(value) || _isString(value);\n},\n _isTypedArray = typeof ArrayBuffer === \"function\" && ArrayBuffer.isView || function () {},\n // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\n_isArray = Array.isArray,\n _strictNumExp = /(?:-?\\.?\\d|\\.)+/gi,\n //only numbers (including negatives and decimals) but NOT relative values.\n_numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,\n //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\n_numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\n _complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,\n //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\n_relExp = /[+-]=-?[.\\d]+/,\n _delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi,\n // previously /[#\\-+.]*\\b[a-z\\d\\-=+%.]+/gi but didn't catch special characters.\n_unitExp = /[\\d.+\\-=]+(?:e[-+]\\d*)*/i,\n _globalTimeline,\n _win,\n _coreInitted,\n _doc,\n _globals = {},\n _installScope = {},\n _coreReady,\n _install = function _install(scope) {\n return (_installScope = _merge(scope, _globals)) && gsap;\n},\n _missingPlugin = function _missingPlugin(property, value) {\n return console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\");\n},\n _warn = function _warn(message, suppress) {\n return !suppress && console.warn(message);\n},\n _addGlobal = function _addGlobal(name, obj) {\n return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\n},\n _emptyFunc = function _emptyFunc() {\n return 0;\n},\n _reservedProps = {},\n _lazyTweens = [],\n _lazyLookup = {},\n _lastRenderedFrame,\n _plugins = {},\n _effects = {},\n _nextGCFrame = 30,\n _harnessPlugins = [],\n _callbackNames = \"\",\n _harness = function _harness(targets) {\n var target = targets[0],\n harnessPlugin,\n i;\n _isObject(target) || _isFunction(target) || (targets = [targets]);\n\n if (!(harnessPlugin = (target._gsap || {}).harness)) {\n // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)\n i = _harnessPlugins.length;\n\n while (i-- && !_harnessPlugins[i].targetTest(target)) {}\n\n harnessPlugin = _harnessPlugins[i];\n }\n\n i = targets.length;\n\n while (i--) {\n targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\n }\n\n return targets;\n},\n _getCache = function _getCache(target) {\n return target._gsap || _harness(toArray(target))[0]._gsap;\n},\n _getProperty = function _getProperty(target, property, v) {\n return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\n},\n _forEachName = function _forEachName(names, func) {\n return (names = names.split(\",\")).forEach(func) || names;\n},\n //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).\n_round = function _round(value) {\n return Math.round(value * 100000) / 100000 || 0;\n},\n _roundPrecise = function _roundPrecise(value) {\n return Math.round(value * 10000000) / 10000000 || 0;\n},\n // increased precision mostly for timing values.\n_arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\n //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.\n var l = toFind.length,\n i = 0;\n\n for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\n\n return i < l;\n},\n _lazyRender = function _lazyRender() {\n var l = _lazyTweens.length,\n a = _lazyTweens.slice(0),\n i,\n tween;\n\n _lazyLookup = {};\n _lazyTweens.length = 0;\n\n for (i = 0; i < l; i++) {\n tween = a[i];\n tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\n }\n},\n _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\n _lazyTweens.length && _lazyRender();\n animation.render(time, suppressEvents, force);\n _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n},\n _numericIfPossible = function _numericIfPossible(value) {\n var n = parseFloat(value);\n return (n || n === 0) && (value + \"\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\n},\n _passThrough = function _passThrough(p) {\n return p;\n},\n _setDefaults = function _setDefaults(obj, defaults) {\n for (var p in defaults) {\n p in obj || (obj[p] = defaults[p]);\n }\n\n return obj;\n},\n _setKeyframeDefaults = function _setKeyframeDefaults(obj, defaults) {\n for (var p in defaults) {\n p in obj || p === \"duration\" || p === \"ease\" || (obj[p] = defaults[p]);\n }\n},\n _merge = function _merge(base, toMerge) {\n for (var p in toMerge) {\n base[p] = toMerge[p];\n }\n\n return base;\n},\n _mergeDeep = function _mergeDeep(base, toMerge) {\n for (var p in toMerge) {\n p !== \"__proto__\" && p !== \"constructor\" && p !== \"prototype\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\n }\n\n return base;\n},\n _copyExcluding = function _copyExcluding(obj, excluding) {\n var copy = {},\n p;\n\n for (p in obj) {\n p in excluding || (copy[p] = obj[p]);\n }\n\n return copy;\n},\n _inheritDefaults = function _inheritDefaults(vars) {\n var parent = vars.parent || _globalTimeline,\n func = vars.keyframes ? _setKeyframeDefaults : _setDefaults;\n\n if (_isNotFalse(vars.inherit)) {\n while (parent) {\n func(vars, parent.vars.defaults);\n parent = parent.parent || parent._dp;\n }\n }\n\n return vars;\n},\n _arraysMatch = function _arraysMatch(a1, a2) {\n var i = a1.length,\n match = i === a2.length;\n\n while (match && i-- && a1[i] === a2[i]) {}\n\n return i < 0;\n},\n _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\n if (firstProp === void 0) {\n firstProp = \"_first\";\n }\n\n if (lastProp === void 0) {\n lastProp = \"_last\";\n }\n\n var prev = parent[lastProp],\n t;\n\n if (sortBy) {\n t = child[sortBy];\n\n while (prev && prev[sortBy] > t) {\n prev = prev._prev;\n }\n }\n\n if (prev) {\n child._next = prev._next;\n prev._next = child;\n } else {\n child._next = parent[firstProp];\n parent[firstProp] = child;\n }\n\n if (child._next) {\n child._next._prev = child;\n } else {\n parent[lastProp] = child;\n }\n\n child._prev = prev;\n child.parent = child._dp = parent;\n return child;\n},\n _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\n if (firstProp === void 0) {\n firstProp = \"_first\";\n }\n\n if (lastProp === void 0) {\n lastProp = \"_last\";\n }\n\n var prev = child._prev,\n next = child._next;\n\n if (prev) {\n prev._next = next;\n } else if (parent[firstProp] === child) {\n parent[firstProp] = next;\n }\n\n if (next) {\n next._prev = prev;\n } else if (parent[lastProp] === child) {\n parent[lastProp] = prev;\n }\n\n child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.\n},\n _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\n child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove(child);\n child._act = 0;\n},\n _uncache = function _uncache(animation, child) {\n if (animation && (!child || child._end > animation._dur || child._start < 0)) {\n // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)\n var a = animation;\n\n while (a) {\n a._dirty = 1;\n a = a.parent;\n }\n }\n\n return animation;\n},\n _recacheAncestors = function _recacheAncestors(animation) {\n var parent = animation.parent;\n\n while (parent && parent.parent) {\n //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n parent._dirty = 1;\n parent.totalDuration();\n parent = parent.parent;\n }\n\n return animation;\n},\n _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\n return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\n},\n _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\n return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\n},\n // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.\n_animationCycle = function _animationCycle(tTime, cycleDuration) {\n var whole = Math.floor(tTime /= cycleDuration);\n return tTime && whole === tTime ? whole - 1 : whole;\n},\n _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\n return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\n},\n _setEnd = function _setEnd(animation) {\n return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\n},\n _alignPlayhead = function _alignPlayhead(animation, totalTime) {\n // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.\n var parent = animation._dp;\n\n if (parent && parent.smoothChildTiming && animation._ts) {\n animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\n\n _setEnd(animation);\n\n parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n }\n\n return animation;\n},\n\n/*\n_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {\n\tlet cycleDuration = duration + repeatDelay,\n\t\ttime = _round(clampedTotalTime % cycleDuration);\n\tif (time > duration) {\n\t\ttime = duration;\n\t}\n\treturn (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;\n},\n*/\n_postAddChecks = function _postAddChecks(timeline, child) {\n var t;\n\n if (child._time || child._initted && !child._dur) {\n //in case, for example, the _start is moved on a tween that has already rendered. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning.\n t = _parentToChildTotalTime(timeline.rawTime(), child);\n\n if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\n child.render(t, true);\n }\n } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\n\n if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\n //in case any of the ancestors had completed but should now be enabled...\n if (timeline._dur < timeline.duration()) {\n t = timeline;\n\n while (t._dp) {\n t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.\n\n t = t._dp;\n }\n }\n\n timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.\n }\n},\n _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\n child.parent && _removeFromParent(child);\n child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\n child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\n\n _addLinkedListItem(timeline, child, \"_first\", \"_last\", timeline._sort ? \"_start\" : 0);\n\n _isFromOrFromStart(child) || (timeline._recent = child);\n skipChecks || _postAddChecks(timeline, child);\n return timeline;\n},\n _scrollTrigger = function _scrollTrigger(animation, trigger) {\n return (_globals.ScrollTrigger || _missingPlugin(\"scrollTrigger\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\n},\n _attemptInitTween = function _attemptInitTween(tween, totalTime, force, suppressEvents) {\n _initTween(tween, totalTime);\n\n if (!tween._initted) {\n return 1;\n }\n\n if (!force && tween._pt && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\n _lazyTweens.push(tween);\n\n tween._lazy = [totalTime, suppressEvents];\n return 1;\n }\n},\n _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\n var parent = _ref.parent;\n return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\n},\n // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0\n_isFromOrFromStart = function _isFromOrFromStart(_ref2) {\n var data = _ref2.data;\n return data === \"isFromStart\" || data === \"isStart\";\n},\n _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\n var prevRatio = tween.ratio,\n ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\n // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the \"startAt\" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any \"from\" and \"fromTo\" startAt tweens are rendered the first time at a ratio of 1.\n repeatDelay = tween._rDelay,\n tTime = 0,\n pt,\n iteration,\n prevIteration;\n\n if (repeatDelay && tween._repeat) {\n // in case there's a zero-duration tween that has a repeat with a repeatDelay\n tTime = _clamp(0, tween._tDur, totalTime);\n iteration = _animationCycle(tTime, repeatDelay);\n prevIteration = _animationCycle(tween._tTime, repeatDelay);\n tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\n\n if (iteration !== prevIteration) {\n prevRatio = 1 - ratio;\n tween.vars.repeatRefresh && tween._initted && tween.invalidate();\n }\n }\n\n if (ratio !== prevRatio || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\n if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents)) {\n // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n return;\n }\n\n prevIteration = tween._zTime;\n tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.\n\n tween.ratio = ratio;\n tween._from && (ratio = 1 - ratio);\n tween._time = 0;\n tween._tTime = tTime;\n pt = tween._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n\n tween._startAt && totalTime < 0 && tween._startAt.render(totalTime, true, true);\n tween._onUpdate && !suppressEvents && _callback(tween, \"onUpdate\");\n tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \"onRepeat\");\n\n if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\n ratio && _removeFromParent(tween, 1);\n\n if (!suppressEvents) {\n _callback(tween, ratio ? \"onComplete\" : \"onReverseComplete\", true);\n\n tween._prom && tween._prom();\n }\n }\n } else if (!tween._zTime) {\n tween._zTime = totalTime;\n }\n},\n _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\n var child;\n\n if (time > prevTime) {\n child = animation._first;\n\n while (child && child._start <= time) {\n if (!child._dur && child.data === \"isPause\" && child._start > prevTime) {\n return child;\n }\n\n child = child._next;\n }\n } else {\n child = animation._last;\n\n while (child && child._start >= time) {\n if (!child._dur && child.data === \"isPause\" && child._start < prevTime) {\n return child;\n }\n\n child = child._prev;\n }\n }\n},\n _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\n var repeat = animation._repeat,\n dur = _roundPrecise(duration) || 0,\n totalProgress = animation._tTime / animation._tDur;\n totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\n animation._dur = dur;\n animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\n totalProgress && !leavePlayhead ? _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress) : animation.parent && _setEnd(animation);\n skipUncache || _uncache(animation.parent, animation);\n return animation;\n},\n _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\n return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\n},\n _zeroPosition = {\n _start: 0,\n endTime: _emptyFunc,\n totalDuration: _emptyFunc\n},\n _parsePosition = function _parsePosition(animation, position, percentAnimation) {\n var labels = animation.labels,\n recent = animation._recent || _zeroPosition,\n clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\n //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\n i,\n offset,\n isPercent;\n\n if (_isString(position) && (isNaN(position) || position in labels)) {\n //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n offset = position.charAt(0);\n isPercent = position.substr(-1) === \"%\";\n i = position.indexOf(\"=\");\n\n if (offset === \"<\" || offset === \">\") {\n i >= 0 && (position = position.replace(/=/, \"\"));\n return (offset === \"<\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\n }\n\n if (i < 0) {\n position in labels || (labels[position] = clippedDuration);\n return labels[position];\n }\n\n offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\n\n if (isPercent && percentAnimation) {\n offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\n }\n\n return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\n }\n\n return position == null ? clippedDuration : +position;\n},\n _createTweenType = function _createTweenType(type, params, timeline) {\n var isLegacy = _isNumber(params[1]),\n varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\n vars = params[varsIndex],\n irVars,\n parent;\n\n isLegacy && (vars.duration = params[1]);\n vars.parent = timeline;\n\n if (type) {\n irVars = vars;\n parent = timeline;\n\n while (parent && !(\"immediateRender\" in irVars)) {\n // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.\n irVars = parent.vars.defaults || {};\n parent = _isNotFalse(parent.vars.inherit) && parent.parent;\n }\n\n vars.immediateRender = _isNotFalse(irVars.immediateRender);\n type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // \"from\" vars\n }\n\n return new Tween(params[0], vars, params[varsIndex + 1]);\n},\n _conditionalReturn = function _conditionalReturn(value, func) {\n return value || value === 0 ? func(value) : func;\n},\n _clamp = function _clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n},\n getUnit = function getUnit(value) {\n if (typeof value !== \"string\") {\n return \"\";\n }\n\n var v = _unitExp.exec(value);\n\n return v ? value.substr(v.index + v[0].length) : \"\";\n},\n // note: protect against padded numbers as strings, like \"100.100\". That shouldn't return \"00\" as the unit. If it's numeric, return no unit.\nclamp = function clamp(min, max, value) {\n return _conditionalReturn(value, function (v) {\n return _clamp(min, max, v);\n });\n},\n _slice = [].slice,\n _isArrayLike = function _isArrayLike(value, nonEmpty) {\n return value && _isObject(value) && \"length\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\n},\n _flatten = function _flatten(ar, leaveStrings, accumulator) {\n if (accumulator === void 0) {\n accumulator = [];\n }\n\n return ar.forEach(function (value) {\n var _accumulator;\n\n return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\n }) || accumulator;\n},\n //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.\ntoArray = function toArray(value, scope, leaveStrings) {\n return _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\n},\n selector = function selector(value) {\n value = toArray(value)[0] || _warn(\"Invalid scope\") || {};\n return function (v) {\n var el = value.current || value.nativeElement || value;\n return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\"Invalid scope\") || _doc.createElement(\"div\") : value);\n };\n},\n shuffle = function shuffle(a) {\n return a.sort(function () {\n return .5 - Math.random();\n });\n},\n // alternative that's a bit faster and more reliably diverse but bigger: for (let j, v, i = a.length; i; j = Math.floor(Math.random() * i), v = a[--i], a[i] = a[j], a[j] = v); return a;\n//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\ndistribute = function distribute(v) {\n if (_isFunction(v)) {\n return v;\n }\n\n var vars = _isObject(v) ? v : {\n each: v\n },\n //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\n ease = _parseEase(vars.ease),\n from = vars.from || 0,\n base = parseFloat(vars.base) || 0,\n cache = {},\n isDecimal = from > 0 && from < 1,\n ratios = isNaN(from) || isDecimal,\n axis = vars.axis,\n ratioX = from,\n ratioY = from;\n\n if (_isString(from)) {\n ratioX = ratioY = {\n center: .5,\n edges: .5,\n end: 1\n }[from] || 0;\n } else if (!isDecimal && ratios) {\n ratioX = from[0];\n ratioY = from[1];\n }\n\n return function (i, target, a) {\n var l = (a || vars).length,\n distances = cache[l],\n originX,\n originY,\n x,\n y,\n d,\n j,\n max,\n min,\n wrapAt;\n\n if (!distances) {\n wrapAt = vars.grid === \"auto\" ? 0 : (vars.grid || [1, _bigNum])[1];\n\n if (!wrapAt) {\n max = -_bigNum;\n\n while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\n\n wrapAt--;\n }\n\n distances = cache[l] = [];\n originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\n originY = ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\n max = 0;\n min = _bigNum;\n\n for (j = 0; j < l; j++) {\n x = j % wrapAt - originX;\n y = originY - (j / wrapAt | 0);\n distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \"y\" ? y : x);\n d > max && (max = d);\n d < min && (min = d);\n }\n\n from === \"random\" && shuffle(distances);\n distances.max = max - min;\n distances.min = min;\n distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \"y\" ? l / wrapAt : wrapAt) || 0) * (from === \"edges\" ? -1 : 1);\n distances.b = l < 0 ? base - l : base;\n distances.u = getUnit(vars.amount || vars.each) || 0; //unit\n\n ease = ease && l < 0 ? _invertEase(ease) : ease;\n }\n\n l = (distances[i] - distances.min) / distances.max || 0;\n return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors\n };\n},\n _roundModifier = function _roundModifier(v) {\n //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\n var p = Math.pow(10, ((v + \"\").split(\".\")[1] || \"\").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())\n\n return function (raw) {\n var n = Math.round(parseFloat(raw) / v) * v * p;\n return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!\n };\n},\n snap = function snap(snapTo, value) {\n var isArray = _isArray(snapTo),\n radius,\n is2D;\n\n if (!isArray && _isObject(snapTo)) {\n radius = isArray = snapTo.radius || _bigNum;\n\n if (snapTo.values) {\n snapTo = toArray(snapTo.values);\n\n if (is2D = !_isNumber(snapTo[0])) {\n radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.\n }\n } else {\n snapTo = _roundModifier(snapTo.increment);\n }\n }\n\n return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\n is2D = snapTo(raw);\n return Math.abs(is2D - raw) <= radius ? is2D : raw;\n } : function (raw) {\n var x = parseFloat(is2D ? raw.x : raw),\n y = parseFloat(is2D ? raw.y : 0),\n min = _bigNum,\n closest = 0,\n i = snapTo.length,\n dx,\n dy;\n\n while (i--) {\n if (is2D) {\n dx = snapTo[i].x - x;\n dy = snapTo[i].y - y;\n dx = dx * dx + dy * dy;\n } else {\n dx = Math.abs(snapTo[i] - x);\n }\n\n if (dx < min) {\n min = dx;\n closest = i;\n }\n }\n\n closest = !radius || min <= radius ? snapTo[closest] : raw;\n return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\n });\n},\n random = function random(min, max, roundingIncrement, returnFunction) {\n return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\n return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \"\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\n });\n},\n pipe = function pipe() {\n for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\n functions[_key] = arguments[_key];\n }\n\n return function (value) {\n return functions.reduce(function (v, f) {\n return f(v);\n }, value);\n };\n},\n unitize = function unitize(func, unit) {\n return function (value) {\n return func(parseFloat(value)) + (unit || getUnit(value));\n };\n},\n normalize = function normalize(min, max, value) {\n return mapRange(min, max, 0, 1, value);\n},\n _wrapArray = function _wrapArray(a, wrapper, value) {\n return _conditionalReturn(value, function (index) {\n return a[~~wrapper(index)];\n });\n},\n wrap = function wrap(min, max, value) {\n // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).\n var range = max - min;\n return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\n return (range + (value - min) % range) % range + min;\n });\n},\n wrapYoyo = function wrapYoyo(min, max, value) {\n var range = max - min,\n total = range * 2;\n return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\n value = (total + (value - min) % total) % total || 0;\n return min + (value > range ? total - value : value);\n });\n},\n _replaceRandom = function _replaceRandom(value) {\n //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])\n var prev = 0,\n s = \"\",\n i,\n nums,\n end,\n isArray;\n\n while (~(i = value.indexOf(\"random(\", prev))) {\n end = value.indexOf(\")\", i);\n isArray = value.charAt(i + 7) === \"[\";\n nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\n s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\n prev = end + 1;\n }\n\n return s + value.substr(prev, value.length - prev);\n},\n mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\n var inRange = inMax - inMin,\n outRange = outMax - outMin;\n return _conditionalReturn(value, function (value) {\n return outMin + ((value - inMin) / inRange * outRange || 0);\n });\n},\n interpolate = function interpolate(start, end, progress, mutate) {\n var func = isNaN(start + end) ? 0 : function (p) {\n return (1 - p) * start + p * end;\n };\n\n if (!func) {\n var isString = _isString(start),\n master = {},\n p,\n i,\n interpolators,\n l,\n il;\n\n progress === true && (mutate = 1) && (progress = null);\n\n if (isString) {\n start = {\n p: start\n };\n end = {\n p: end\n };\n } else if (_isArray(start) && !_isArray(end)) {\n interpolators = [];\n l = start.length;\n il = l - 2;\n\n for (i = 1; i < l; i++) {\n interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.\n }\n\n l--;\n\n func = function func(p) {\n p *= l;\n var i = Math.min(il, ~~p);\n return interpolators[i](p - i);\n };\n\n progress = end;\n } else if (!mutate) {\n start = _merge(_isArray(start) ? [] : {}, start);\n }\n\n if (!interpolators) {\n for (p in end) {\n _addPropTween.call(master, start, p, \"get\", end[p]);\n }\n\n func = function func(p) {\n return _renderPropTweens(p, master) || (isString ? start.p : start);\n };\n }\n }\n\n return _conditionalReturn(progress, func);\n},\n _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\n //used for nextLabel() and previousLabel()\n var labels = timeline.labels,\n min = _bigNum,\n p,\n distance,\n label;\n\n for (p in labels) {\n distance = labels[p] - fromTime;\n\n if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\n label = p;\n min = distance;\n }\n }\n\n return label;\n},\n _callback = function _callback(animation, type, executeLazyFirst) {\n var v = animation.vars,\n callback = v[type],\n params,\n scope;\n\n if (!callback) {\n return;\n }\n\n params = v[type + \"Params\"];\n scope = v.callbackScope || animation;\n executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\n return params ? callback.apply(scope, params) : callback.call(scope);\n},\n _interrupt = function _interrupt(animation) {\n _removeFromParent(animation);\n\n animation.scrollTrigger && animation.scrollTrigger.kill(false);\n animation.progress() < 1 && _callback(animation, \"onInterrupt\");\n return animation;\n},\n _quickTween,\n _createPlugin = function _createPlugin(config) {\n config = !config.name && config[\"default\"] || config; //UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.\n\n var name = config.name,\n isFunc = _isFunction(config),\n Plugin = name && !isFunc && config.init ? function () {\n this._props = [];\n } : config,\n //in case someone passes in an object that's not a plugin, like CustomEase\n instanceDefaults = {\n init: _emptyFunc,\n render: _renderPropTweens,\n add: _addPropTween,\n kill: _killPropTweensOf,\n modifier: _addPluginModifier,\n rawVars: 0\n },\n statics = {\n targetTest: 0,\n get: 0,\n getSetter: _getSetter,\n aliases: {},\n register: 0\n };\n\n _wake();\n\n if (config !== Plugin) {\n if (_plugins[name]) {\n return;\n }\n\n _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods\n\n\n _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods\n\n\n _plugins[Plugin.prop = name] = Plugin;\n\n if (config.targetTest) {\n _harnessPlugins.push(Plugin);\n\n _reservedProps[name] = 1;\n }\n\n name = (name === \"css\" ? \"CSS\" : name.charAt(0).toUpperCase() + name.substr(1)) + \"Plugin\"; //for the global name. \"motionPath\" should become MotionPathPlugin\n }\n\n _addGlobal(name, Plugin);\n\n config.register && config.register(gsap, Plugin, PropTween);\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * COLORS\n * --------------------------------------------------------------------------------------\n */\n_255 = 255,\n _colorLookup = {\n aqua: [0, _255, _255],\n lime: [0, _255, 0],\n silver: [192, 192, 192],\n black: [0, 0, 0],\n maroon: [128, 0, 0],\n teal: [0, 128, 128],\n blue: [0, 0, _255],\n navy: [0, 0, 128],\n white: [_255, _255, _255],\n olive: [128, 128, 0],\n yellow: [_255, _255, 0],\n orange: [_255, 165, 0],\n gray: [128, 128, 128],\n purple: [128, 0, 128],\n green: [0, 128, 0],\n red: [_255, 0, 0],\n pink: [_255, 192, 203],\n cyan: [0, _255, _255],\n transparent: [_255, _255, _255, 0]\n},\n _hue = function _hue(h, m1, m2) {\n h = h < 0 ? h + 1 : h > 1 ? h - 1 : h;\n return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\n},\n splitColor = function splitColor(v, toHSL, forceAlpha) {\n var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\n r,\n g,\n b,\n h,\n s,\n l,\n max,\n min,\n d,\n wasHSL;\n\n if (!a) {\n if (v.substr(-1) === \",\") {\n //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n v = v.substr(0, v.length - 1);\n }\n\n if (_colorLookup[v]) {\n a = _colorLookup[v];\n } else if (v.charAt(0) === \"#\") {\n if (v.length < 6) {\n //for shorthand like #9F0 or #9F0F (could have alpha)\n r = v.charAt(1);\n g = v.charAt(2);\n b = v.charAt(3);\n v = \"#\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \"\");\n }\n\n if (v.length === 9) {\n // hex with alpha, like #fd5e53ff\n a = parseInt(v.substr(1, 6), 16);\n return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\n }\n\n v = parseInt(v.substr(1), 16);\n a = [v >> 16, v >> 8 & _255, v & _255];\n } else if (v.substr(0, 3) === \"hsl\") {\n a = wasHSL = v.match(_strictNumExp);\n\n if (!toHSL) {\n h = +a[0] % 360 / 360;\n s = +a[1] / 100;\n l = +a[2] / 100;\n g = l <= .5 ? l * (s + 1) : l + s - l * s;\n r = l * 2 - g;\n a.length > 3 && (a[3] *= 1); //cast as number\n\n a[0] = _hue(h + 1 / 3, r, g);\n a[1] = _hue(h, r, g);\n a[2] = _hue(h - 1 / 3, r, g);\n } else if (~v.indexOf(\"=\")) {\n //if relative values are found, just return the raw strings with the relative prefixes in place.\n a = v.match(_numExp);\n forceAlpha && a.length < 4 && (a[3] = 1);\n return a;\n }\n } else {\n a = v.match(_strictNumExp) || _colorLookup.transparent;\n }\n\n a = a.map(Number);\n }\n\n if (toHSL && !wasHSL) {\n r = a[0] / _255;\n g = a[1] / _255;\n b = a[2] / _255;\n max = Math.max(r, g, b);\n min = Math.min(r, g, b);\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n h *= 60;\n }\n\n a[0] = ~~(h + .5);\n a[1] = ~~(s * 100 + .5);\n a[2] = ~~(l * 100 + .5);\n }\n\n forceAlpha && a.length < 4 && (a[3] = 1);\n return a;\n},\n _colorOrderData = function _colorOrderData(v) {\n // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a \"c\" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()\n var values = [],\n c = [],\n i = -1;\n v.split(_colorExp).forEach(function (v) {\n var a = v.match(_numWithUnitExp) || [];\n values.push.apply(values, a);\n c.push(i += a.length + 1);\n });\n values.c = c;\n return values;\n},\n _formatColors = function _formatColors(s, toHSL, orderMatchData) {\n var result = \"\",\n colors = (s + result).match(_colorExp),\n type = toHSL ? \"hsla(\" : \"rgba(\",\n i = 0,\n c,\n shell,\n d,\n l;\n\n if (!colors) {\n return s;\n }\n\n colors = colors.map(function (color) {\n return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : color.join(\",\")) + \")\";\n });\n\n if (orderMatchData) {\n d = _colorOrderData(s);\n c = orderMatchData.c;\n\n if (c.join(result) !== d.c.join(result)) {\n shell = s.replace(_colorExp, \"1\").split(_numWithUnitExp);\n l = shell.length - 1;\n\n for (; i < l; i++) {\n result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \"0,0,0,0)\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\n }\n }\n }\n\n if (!shell) {\n shell = s.split(_colorExp);\n l = shell.length - 1;\n\n for (; i < l; i++) {\n result += shell[i] + colors[i];\n }\n }\n\n return result + shell[l];\n},\n _colorExp = function () {\n var s = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",\n //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,\n p;\n\n for (p in _colorLookup) {\n s += \"|\" + p + \"\\\\b\";\n }\n\n return new RegExp(s + \")\", \"gi\");\n}(),\n _hslExp = /hsl[a]?\\(/,\n _colorStringFilter = function _colorStringFilter(a) {\n var combined = a.join(\" \"),\n toHSL;\n _colorExp.lastIndex = 0;\n\n if (_colorExp.test(combined)) {\n toHSL = _hslExp.test(combined);\n a[1] = _formatColors(a[1], toHSL);\n a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.\n\n return true;\n }\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TICKER\n * --------------------------------------------------------------------------------------\n */\n_tickerActive,\n _ticker = function () {\n var _getTime = Date.now,\n _lagThreshold = 500,\n _adjustedLag = 33,\n _startTime = _getTime(),\n _lastUpdate = _startTime,\n _gap = 1000 / 240,\n _nextTime = _gap,\n _listeners = [],\n _id,\n _req,\n _raf,\n _self,\n _delta,\n _i,\n _tick = function _tick(v) {\n var elapsed = _getTime() - _lastUpdate,\n manual = v === true,\n overlap,\n dispatch,\n time,\n frame;\n\n elapsed > _lagThreshold && (_startTime += elapsed - _adjustedLag);\n _lastUpdate += elapsed;\n time = _lastUpdate - _startTime;\n overlap = time - _nextTime;\n\n if (overlap > 0 || manual) {\n frame = ++_self.frame;\n _delta = time - _self.time * 1000;\n _self.time = time = time / 1000;\n _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\n dispatch = 1;\n }\n\n manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\n if (dispatch) {\n for (_i = 0; _i < _listeners.length; _i++) {\n // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.\n _listeners[_i](time, _delta, frame, v);\n }\n }\n };\n\n _self = {\n time: 0,\n frame: 0,\n tick: function tick() {\n _tick(true);\n },\n deltaRatio: function deltaRatio(fps) {\n return _delta / (1000 / (fps || 60));\n },\n wake: function wake() {\n if (_coreReady) {\n if (!_coreInitted && _windowExists()) {\n _win = _coreInitted = window;\n _doc = _win.document || {};\n _globals.gsap = gsap;\n (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\n\n _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\n\n _raf = _win.requestAnimationFrame;\n }\n\n _id && _self.sleep();\n\n _req = _raf || function (f) {\n return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\n };\n\n _tickerActive = 1;\n\n _tick(2);\n }\n },\n sleep: function sleep() {\n (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id);\n _tickerActive = 0;\n _req = _emptyFunc;\n },\n lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\n _lagThreshold = threshold || 1 / _tinyNum; //zero should be interpreted as basically unlimited\n\n _adjustedLag = Math.min(adjustedLag, _lagThreshold, 0);\n },\n fps: function fps(_fps) {\n _gap = 1000 / (_fps || 240);\n _nextTime = _self.time * 1000 + _gap;\n },\n add: function add(callback) {\n _listeners.indexOf(callback) < 0 && _listeners.push(callback);\n\n _wake();\n },\n remove: function remove(callback) {\n var i;\n ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\n },\n _listeners: _listeners\n };\n return _self;\n}(),\n _wake = function _wake() {\n return !_tickerActive && _ticker.wake();\n},\n //also ensures the core classes are initialized.\n\n/*\n* -------------------------------------------------\n* EASING\n* -------------------------------------------------\n*/\n_easeMap = {},\n _customEaseExp = /^[\\d.\\-M][\\d.\\-,\\s]/,\n _quotesExp = /[\"']/g,\n _parseObjectInString = function _parseObjectInString(value) {\n //takes a string like \"{wiggles:10, type:anticipate})\" and turns it into a real object. Notice it ends in \")\" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.\n var obj = {},\n split = value.substr(1, value.length - 3).split(\":\"),\n key = split[0],\n i = 1,\n l = split.length,\n index,\n val,\n parsedVal;\n\n for (; i < l; i++) {\n val = split[i];\n index = i !== l - 1 ? val.lastIndexOf(\",\") : val.length;\n parsedVal = val.substr(0, index);\n obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \"\").trim() : +parsedVal;\n key = val.substr(index + 1).trim();\n }\n\n return obj;\n},\n _valueInParentheses = function _valueInParentheses(value) {\n var open = value.indexOf(\"(\") + 1,\n close = value.indexOf(\")\"),\n nested = value.indexOf(\"(\", open);\n return value.substring(open, ~nested && nested < close ? value.indexOf(\")\", close + 1) : close);\n},\n _configEaseFromString = function _configEaseFromString(name) {\n //name can be a string like \"elastic.out(1,0.5)\", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).\n var split = (name + \"\").split(\"(\"),\n ease = _easeMap[split[0]];\n return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\"{\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\",\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\"\", name) : ease;\n},\n _invertEase = function _invertEase(ease) {\n return function (p) {\n return 1 - ease(1 - p);\n };\n},\n // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.\n_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\n var child = timeline._first,\n ease;\n\n while (child) {\n if (child instanceof Timeline) {\n _propagateYoyoEase(child, isYoyo);\n } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\n if (child.timeline) {\n _propagateYoyoEase(child.timeline, isYoyo);\n } else {\n ease = child._ease;\n child._ease = child._yEase;\n child._yEase = ease;\n child._yoyo = isYoyo;\n }\n }\n\n child = child._next;\n }\n},\n _parseEase = function _parseEase(ease, defaultEase) {\n return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\n},\n _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\n if (easeOut === void 0) {\n easeOut = function easeOut(p) {\n return 1 - easeIn(1 - p);\n };\n }\n\n if (easeInOut === void 0) {\n easeInOut = function easeInOut(p) {\n return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\n };\n }\n\n var ease = {\n easeIn: easeIn,\n easeOut: easeOut,\n easeInOut: easeInOut\n },\n lowercaseName;\n\n _forEachName(names, function (name) {\n _easeMap[name] = _globals[name] = ease;\n _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\n\n for (var p in ease) {\n _easeMap[lowercaseName + (p === \"easeIn\" ? \".in\" : p === \"easeOut\" ? \".out\" : \".inOut\")] = _easeMap[name + \".\" + p] = ease[p];\n }\n });\n\n return ease;\n},\n _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\n return function (p) {\n return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\n };\n},\n _configElastic = function _configElastic(type, amplitude, period) {\n var p1 = amplitude >= 1 ? amplitude : 1,\n //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\n p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\n easeOut = function easeOut(p) {\n return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\n },\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n return 1 - easeOut(1 - p);\n } : _easeInOutFromOut(easeOut);\n\n p2 = _2PI / p2; //precalculate to optimize\n\n ease.config = function (amplitude, period) {\n return _configElastic(type, amplitude, period);\n };\n\n return ease;\n},\n _configBack = function _configBack(type, overshoot) {\n if (overshoot === void 0) {\n overshoot = 1.70158;\n }\n\n var easeOut = function easeOut(p) {\n return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\n },\n ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n return 1 - easeOut(1 - p);\n } : _easeInOutFromOut(easeOut);\n\n ease.config = function (overshoot) {\n return _configBack(type, overshoot);\n };\n\n return ease;\n}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEase = ratio => {\n// \tlet y = 0.5 + ratio / 2;\n// \treturn p => (2 * (1 - p) * p * y + p * p);\n// },\n// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEaseStrong = ratio => {\n// \tratio = .5 + ratio / 2;\n// \tlet o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),\n// \t\tb = ratio - o,\n// \t\tc = ratio + o;\n// \treturn p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;\n// };\n\n\n_forEachName(\"Linear,Quad,Cubic,Quart,Quint,Strong\", function (name, i) {\n var power = i < 5 ? i + 1 : i;\n\n _insertEase(name + \",Power\" + (power - 1), i ? function (p) {\n return Math.pow(p, power);\n } : function (p) {\n return p;\n }, function (p) {\n return 1 - Math.pow(1 - p, power);\n }, function (p) {\n return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\n });\n});\n\n_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\n\n_insertEase(\"Elastic\", _configElastic(\"in\"), _configElastic(\"out\"), _configElastic());\n\n(function (n, c) {\n var n1 = 1 / c,\n n2 = 2 * n1,\n n3 = 2.5 * n1,\n easeOut = function easeOut(p) {\n return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\n };\n\n _insertEase(\"Bounce\", function (p) {\n return 1 - easeOut(1 - p);\n }, easeOut);\n})(7.5625, 2.75);\n\n_insertEase(\"Expo\", function (p) {\n return p ? Math.pow(2, 10 * (p - 1)) : 0;\n});\n\n_insertEase(\"Circ\", function (p) {\n return -(_sqrt(1 - p * p) - 1);\n});\n\n_insertEase(\"Sine\", function (p) {\n return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\n});\n\n_insertEase(\"Back\", _configBack(\"in\"), _configBack(\"out\"), _configBack());\n\n_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\n config: function config(steps, immediateStart) {\n if (steps === void 0) {\n steps = 1;\n }\n\n var p1 = 1 / steps,\n p2 = steps + (immediateStart ? 0 : 1),\n p3 = immediateStart ? 1 : 0,\n max = 1 - _tinyNum;\n return function (p) {\n return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\n };\n }\n};\n_defaults.ease = _easeMap[\"quad.out\"];\n\n_forEachName(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\", function (name) {\n return _callbackNames += name + \",\" + name + \"Params,\";\n});\n/*\n * --------------------------------------------------------------------------------------\n * CACHE\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var GSCache = function GSCache(target, harness) {\n this.id = _gsID++;\n target._gsap = this;\n this.target = target;\n this.harness = harness;\n this.get = harness ? harness.get : _getProperty;\n this.set = harness ? harness.getSetter : _getSetter;\n};\n/*\n * --------------------------------------------------------------------------------------\n * ANIMATION\n * --------------------------------------------------------------------------------------\n */\n\nexport var Animation = /*#__PURE__*/function () {\n function Animation(vars) {\n this.vars = vars;\n this._delay = +vars.delay || 0;\n\n if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\n // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.\n this._rDelay = vars.repeatDelay || 0;\n this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\n }\n\n this._ts = 1;\n\n _setDuration(this, +vars.duration, 1, 1);\n\n this.data = vars.data;\n _tickerActive || _ticker.wake();\n }\n\n var _proto = Animation.prototype;\n\n _proto.delay = function delay(value) {\n if (value || value === 0) {\n this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\n this._delay = value;\n return this;\n }\n\n return this._delay;\n };\n\n _proto.duration = function duration(value) {\n return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\n };\n\n _proto.totalDuration = function totalDuration(value) {\n if (!arguments.length) {\n return this._tDur;\n }\n\n this._dirty = 0;\n return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\n };\n\n _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\n _wake();\n\n if (!arguments.length) {\n return this._tTime;\n }\n\n var parent = this._dp;\n\n if (parent && parent.smoothChildTiming && this._ts) {\n _alignPlayhead(this, _totalTime);\n\n !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.\n //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.\n\n while (parent && parent.parent) {\n if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\n parent.totalTime(parent._tTime, true);\n }\n\n parent = parent.parent;\n }\n\n if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\n //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.\n _addToTimeline(this._dp, this, this._start - this._delay);\n }\n }\n\n if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\n // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)\n this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause\n //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)\n // this._lock = 1;\n\n _lazySafeRender(this, _totalTime, suppressEvents); // this._lock = 0;\n //}\n\n }\n\n return this;\n };\n\n _proto.time = function time(value, suppressEvents) {\n return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!\n };\n\n _proto.totalProgress = function totalProgress(value, suppressEvents) {\n return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.ratio;\n };\n\n _proto.progress = function progress(value, suppressEvents) {\n return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.ratio;\n };\n\n _proto.iteration = function iteration(value, suppressEvents) {\n var cycleDuration = this.duration() + this._rDelay;\n\n return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\n } // potential future addition:\n // isPlayingBackwards() {\n // \tlet animation = this,\n // \t\torientation = 1; // 1 = forward, -1 = backward\n // \twhile (animation) {\n // \t\torientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;\n // \t\tanimation = animation.parent;\n // \t}\n // \treturn orientation < 0;\n // }\n ;\n\n _proto.timeScale = function timeScale(value) {\n if (!arguments.length) {\n return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.\n }\n\n if (this._rts === value) {\n return this;\n }\n\n var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.\n // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.\n //(+value < 0 && this._rts >= 0) && _callback(this, \"onReverse\", true);\n // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.\n\n this._rts = +value || 0;\n this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.\n\n _recacheAncestors(this.totalTime(_clamp(-this._delay, this._tDur, tTime), true));\n\n _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.\n\n\n return this;\n };\n\n _proto.paused = function paused(value) {\n if (!arguments.length) {\n return this._ps;\n }\n\n if (this._ps !== value) {\n this._ps = value;\n\n if (value) {\n this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.\n\n this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the \"real\" timeScale as _rts (recorded time scale)\n } else {\n _wake();\n\n this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.\n\n this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.\n }\n }\n\n return this;\n };\n\n _proto.startTime = function startTime(value) {\n if (arguments.length) {\n this._start = value;\n var parent = this.parent || this._dp;\n parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\n return this;\n }\n\n return this._start;\n };\n\n _proto.endTime = function endTime(includeRepeats) {\n return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\n };\n\n _proto.rawTime = function rawTime(wrapRepeats) {\n var parent = this.parent || this._dp; // _dp = detached parent\n\n return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\n };\n\n _proto.globalTime = function globalTime(rawTime) {\n var animation = this,\n time = arguments.length ? rawTime : animation.rawTime();\n\n while (animation) {\n time = animation._start + time / (animation._ts || 1);\n animation = animation._dp;\n }\n\n return time;\n };\n\n _proto.repeat = function repeat(value) {\n if (arguments.length) {\n this._repeat = value === Infinity ? -2 : value;\n return _onUpdateTotalDuration(this);\n }\n\n return this._repeat === -2 ? Infinity : this._repeat;\n };\n\n _proto.repeatDelay = function repeatDelay(value) {\n if (arguments.length) {\n var time = this._time;\n this._rDelay = value;\n\n _onUpdateTotalDuration(this);\n\n return time ? this.time(time) : this;\n }\n\n return this._rDelay;\n };\n\n _proto.yoyo = function yoyo(value) {\n if (arguments.length) {\n this._yoyo = value;\n return this;\n }\n\n return this._yoyo;\n };\n\n _proto.seek = function seek(position, suppressEvents) {\n return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\n };\n\n _proto.restart = function restart(includeDelay, suppressEvents) {\n return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\n };\n\n _proto.play = function play(from, suppressEvents) {\n from != null && this.seek(from, suppressEvents);\n return this.reversed(false).paused(false);\n };\n\n _proto.reverse = function reverse(from, suppressEvents) {\n from != null && this.seek(from || this.totalDuration(), suppressEvents);\n return this.reversed(true).paused(false);\n };\n\n _proto.pause = function pause(atTime, suppressEvents) {\n atTime != null && this.seek(atTime, suppressEvents);\n return this.paused(true);\n };\n\n _proto.resume = function resume() {\n return this.paused(false);\n };\n\n _proto.reversed = function reversed(value) {\n if (arguments.length) {\n !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.\n\n return this;\n }\n\n return this._rts < 0;\n };\n\n _proto.invalidate = function invalidate() {\n this._initted = this._act = 0;\n this._zTime = -_tinyNum;\n return this;\n };\n\n _proto.isActive = function isActive() {\n var parent = this.parent || this._dp,\n start = this._start,\n rawTime;\n return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\n };\n\n _proto.eventCallback = function eventCallback(type, callback, params) {\n var vars = this.vars;\n\n if (arguments.length > 1) {\n if (!callback) {\n delete vars[type];\n } else {\n vars[type] = callback;\n params && (vars[type + \"Params\"] = params);\n type === \"onUpdate\" && (this._onUpdate = callback);\n }\n\n return this;\n }\n\n return vars[type];\n };\n\n _proto.then = function then(onFulfilled) {\n var self = this;\n return new Promise(function (resolve) {\n var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\n _resolve = function _resolve() {\n var _then = self.then;\n self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)\n\n _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\n resolve(f);\n self.then = _then;\n };\n\n if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\n _resolve();\n } else {\n self._prom = _resolve;\n }\n });\n };\n\n _proto.kill = function kill() {\n _interrupt(this);\n };\n\n return Animation;\n}();\n\n_setDefaults(Animation.prototype, {\n _time: 0,\n _start: 0,\n _end: 0,\n _tTime: 0,\n _tDur: 0,\n _dirty: 0,\n _repeat: 0,\n _yoyo: false,\n parent: null,\n _initted: false,\n _rDelay: 0,\n _ts: 1,\n _dp: 0,\n ratio: 0,\n _zTime: -_tinyNum,\n _prom: 0,\n _ps: false,\n _rts: 1\n});\n/*\n * -------------------------------------------------\n * TIMELINE\n * -------------------------------------------------\n */\n\n\nexport var Timeline = /*#__PURE__*/function (_Animation) {\n _inheritsLoose(Timeline, _Animation);\n\n function Timeline(vars, position) {\n var _this;\n\n if (vars === void 0) {\n vars = {};\n }\n\n _this = _Animation.call(this, vars) || this;\n _this.labels = {};\n _this.smoothChildTiming = !!vars.smoothChildTiming;\n _this.autoRemoveChildren = !!vars.autoRemoveChildren;\n _this._sort = _isNotFalse(vars.sortChildren);\n _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\n vars.reversed && _this.reverse();\n vars.paused && _this.paused(true);\n vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\n return _this;\n }\n\n var _proto2 = Timeline.prototype;\n\n _proto2.to = function to(targets, vars, position) {\n _createTweenType(0, arguments, this);\n\n return this;\n };\n\n _proto2.from = function from(targets, vars, position) {\n _createTweenType(1, arguments, this);\n\n return this;\n };\n\n _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\n _createTweenType(2, arguments, this);\n\n return this;\n };\n\n _proto2.set = function set(targets, vars, position) {\n vars.duration = 0;\n vars.parent = this;\n _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\n vars.immediateRender = !!vars.immediateRender;\n new Tween(targets, vars, _parsePosition(this, position), 1);\n return this;\n };\n\n _proto2.call = function call(callback, params, position) {\n return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\n } //ONLY for backward compatibility! Maybe delete?\n ;\n\n _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n vars.duration = duration;\n vars.stagger = vars.stagger || stagger;\n vars.onComplete = onCompleteAll;\n vars.onCompleteParams = onCompleteAllParams;\n vars.parent = this;\n new Tween(targets, vars, _parsePosition(this, position));\n return this;\n };\n\n _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n vars.runBackwards = 1;\n _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\n return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\n };\n\n _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\n toVars.startAt = fromVars;\n _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\n return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\n };\n\n _proto2.render = function render(totalTime, suppressEvents, force) {\n var prevTime = this._time,\n tDur = this._dirty ? this.totalDuration() : this._tDur,\n dur = this._dur,\n tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\n // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.\n crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\n time,\n child,\n next,\n iteration,\n cycleDuration,\n prevPaused,\n pauseTween,\n timeScale,\n prevStart,\n prevIteration,\n yoyo,\n isYoyo;\n this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\n\n if (tTime !== this._tTime || force || crossingStart) {\n if (prevTime !== this._time && dur) {\n //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n tTime += this._time - prevTime;\n totalTime += this._time - prevTime;\n }\n\n time = tTime;\n prevStart = this._start;\n timeScale = this._ts;\n prevPaused = !timeScale;\n\n if (crossingStart) {\n dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n (totalTime || !suppressEvents) && (this._zTime = totalTime);\n }\n\n if (this._repeat) {\n //adjust the time for repeats and yoyos\n yoyo = this._yoyo;\n cycleDuration = dur + this._rDelay;\n\n if (this._repeat < -1 && totalTime < 0) {\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n }\n\n time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n if (tTime === tDur) {\n // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n iteration = this._repeat;\n time = dur;\n } else {\n iteration = ~~(tTime / cycleDuration);\n\n if (iteration && iteration === tTime / cycleDuration) {\n time = dur;\n iteration--;\n }\n\n time > dur && (time = dur);\n }\n\n prevIteration = _animationCycle(this._tTime, cycleDuration);\n !prevTime && this._tTime && prevIteration !== iteration && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://greensock.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005\n\n if (yoyo && iteration & 1) {\n time = dur - time;\n isYoyo = 1;\n }\n /*\n make sure children at the end/beginning of the timeline are rendered properly. If, for example,\n a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n ensure that zero-duration tweens at the very beginning or end of the Timeline work.\n */\n\n\n if (iteration !== prevIteration && !this._lock) {\n var rewinding = yoyo && prevIteration & 1,\n doesWrap = rewinding === (yoyo && iteration & 1);\n iteration < prevIteration && (rewinding = !rewinding);\n prevTime = rewinding ? 0 : dur;\n this._lock = 1;\n this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\n this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.\n\n !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\n\n if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\n // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.\n return this;\n }\n\n dur = this._dur; // in case the duration changed in the onRepeat\n\n tDur = this._tDur;\n\n if (doesWrap) {\n this._lock = 2;\n prevTime = rewinding ? dur : -0.0001;\n this.render(prevTime, true);\n this.vars.repeatRefresh && !isYoyo && this.invalidate();\n }\n\n this._lock = 0;\n\n if (!this._ts && !prevPaused) {\n return this;\n } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.\n\n\n _propagateYoyoEase(this, isYoyo);\n }\n }\n\n if (this._hasPause && !this._forcing && this._lock < 2) {\n pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\n\n if (pauseTween) {\n tTime -= time - (time = pauseTween._start);\n }\n }\n\n this._tTime = tTime;\n this._time = time;\n this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n if (!this._initted) {\n this._onUpdate = this.vars.onUpdate;\n this._initted = 1;\n this._zTime = totalTime;\n prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).\n }\n\n if (!prevTime && time && !suppressEvents) {\n _callback(this, \"onStart\");\n\n if (this._tTime !== tTime) {\n // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n return this;\n }\n }\n\n if (time >= prevTime && totalTime >= 0) {\n child = this._first;\n\n while (child) {\n next = child._next;\n\n if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\n if (child.parent !== this) {\n // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n return this.render(totalTime, suppressEvents, force);\n }\n\n child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\n\n if (time !== this._time || !this._ts && !prevPaused) {\n //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n pauseTween = 0;\n next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n break;\n }\n }\n\n child = next;\n }\n } else {\n child = this._last;\n var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.\n\n while (child) {\n next = child._prev;\n\n if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\n if (child.parent !== this) {\n // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n return this.render(totalTime, suppressEvents, force);\n }\n\n child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force);\n\n if (time !== this._time || !this._ts && !prevPaused) {\n //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n pauseTween = 0;\n next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n break;\n }\n }\n\n child = next;\n }\n }\n\n if (pauseTween && !suppressEvents) {\n this.pause();\n pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\n\n if (this._ts) {\n //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).\n this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.\n\n _setEnd(this);\n\n return this.render(totalTime, suppressEvents, force);\n }\n }\n\n this._onUpdate && !suppressEvents && _callback(this, \"onUpdate\", true);\n if (tTime === tDur && tDur >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\n (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\n _callback(this, tTime === tDur && totalTime >= 0 ? \"onComplete\" : \"onReverseComplete\", true);\n\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n }\n }\n }\n\n return this;\n };\n\n _proto2.add = function add(child, position) {\n var _this2 = this;\n\n _isNumber(position) || (position = _parsePosition(this, position, child));\n\n if (!(child instanceof Animation)) {\n if (_isArray(child)) {\n child.forEach(function (obj) {\n return _this2.add(obj, position);\n });\n return this;\n }\n\n if (_isString(child)) {\n return this.addLabel(child, position);\n }\n\n if (_isFunction(child)) {\n child = Tween.delayedCall(0, child);\n } else {\n return this;\n }\n }\n\n return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!\n };\n\n _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\n if (nested === void 0) {\n nested = true;\n }\n\n if (tweens === void 0) {\n tweens = true;\n }\n\n if (timelines === void 0) {\n timelines = true;\n }\n\n if (ignoreBeforeTime === void 0) {\n ignoreBeforeTime = -_bigNum;\n }\n\n var a = [],\n child = this._first;\n\n while (child) {\n if (child._start >= ignoreBeforeTime) {\n if (child instanceof Tween) {\n tweens && a.push(child);\n } else {\n timelines && a.push(child);\n nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\n }\n }\n\n child = child._next;\n }\n\n return a;\n };\n\n _proto2.getById = function getById(id) {\n var animations = this.getChildren(1, 1, 1),\n i = animations.length;\n\n while (i--) {\n if (animations[i].vars.id === id) {\n return animations[i];\n }\n }\n };\n\n _proto2.remove = function remove(child) {\n if (_isString(child)) {\n return this.removeLabel(child);\n }\n\n if (_isFunction(child)) {\n return this.killTweensOf(child);\n }\n\n _removeLinkedListItem(this, child);\n\n if (child === this._recent) {\n this._recent = this._last;\n }\n\n return _uncache(this);\n };\n\n _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\n if (!arguments.length) {\n return this._tTime;\n }\n\n this._forcing = 1;\n\n if (!this._dp && this._ts) {\n //special case for the global timeline (or any other that has no parent or detached parent).\n this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\n }\n\n _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\n\n this._forcing = 0;\n return this;\n };\n\n _proto2.addLabel = function addLabel(label, position) {\n this.labels[label] = _parsePosition(this, position);\n return this;\n };\n\n _proto2.removeLabel = function removeLabel(label) {\n delete this.labels[label];\n return this;\n };\n\n _proto2.addPause = function addPause(position, callback, params) {\n var t = Tween.delayedCall(0, callback || _emptyFunc, params);\n t.data = \"isPause\";\n this._hasPause = 1;\n return _addToTimeline(this, t, _parsePosition(this, position));\n };\n\n _proto2.removePause = function removePause(position) {\n var child = this._first;\n position = _parsePosition(this, position);\n\n while (child) {\n if (child._start === position && child.data === \"isPause\") {\n _removeFromParent(child);\n }\n\n child = child._next;\n }\n };\n\n _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n var tweens = this.getTweensOf(targets, onlyActive),\n i = tweens.length;\n\n while (i--) {\n _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\n }\n\n return this;\n };\n\n _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\n var a = [],\n parsedTargets = toArray(targets),\n child = this._first,\n isGlobalTime = _isNumber(onlyActive),\n // a number is interpreted as a global time. If the animation spans\n children;\n\n while (child) {\n if (child instanceof Tween) {\n if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\n // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.\n a.push(child);\n }\n } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\n a.push.apply(a, children);\n }\n\n child = child._next;\n }\n\n return a;\n } // potential future feature - targets() on timelines\n // targets() {\n // \tlet result = [];\n // \tthis.getChildren(true, true, false).forEach(t => result.push(...t.targets()));\n // \treturn result.filter((v, i) => result.indexOf(v) === i);\n // }\n ;\n\n _proto2.tweenTo = function tweenTo(position, vars) {\n vars = vars || {};\n\n var tl = this,\n endTime = _parsePosition(tl, position),\n _vars = vars,\n startAt = _vars.startAt,\n _onStart = _vars.onStart,\n onStartParams = _vars.onStartParams,\n immediateRender = _vars.immediateRender,\n initted,\n tween = Tween.to(tl, _setDefaults({\n ease: vars.ease || \"none\",\n lazy: false,\n immediateRender: false,\n time: endTime,\n overwrite: \"auto\",\n duration: vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\n onStart: function onStart() {\n tl.pause();\n\n if (!initted) {\n var duration = vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\n tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\n initted = 1;\n }\n\n _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.\n }\n }, vars));\n\n return immediateRender ? tween.render(0) : tween;\n };\n\n _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\n return this.tweenTo(toPosition, _setDefaults({\n startAt: {\n time: _parsePosition(this, fromPosition)\n }\n }, vars));\n };\n\n _proto2.recent = function recent() {\n return this._recent;\n };\n\n _proto2.nextLabel = function nextLabel(afterTime) {\n if (afterTime === void 0) {\n afterTime = this._time;\n }\n\n return _getLabelInDirection(this, _parsePosition(this, afterTime));\n };\n\n _proto2.previousLabel = function previousLabel(beforeTime) {\n if (beforeTime === void 0) {\n beforeTime = this._time;\n }\n\n return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\n };\n\n _proto2.currentLabel = function currentLabel(value) {\n return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\n };\n\n _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\n if (ignoreBeforeTime === void 0) {\n ignoreBeforeTime = 0;\n }\n\n var child = this._first,\n labels = this.labels,\n p;\n\n while (child) {\n if (child._start >= ignoreBeforeTime) {\n child._start += amount;\n child._end += amount;\n }\n\n child = child._next;\n }\n\n if (adjustLabels) {\n for (p in labels) {\n if (labels[p] >= ignoreBeforeTime) {\n labels[p] += amount;\n }\n }\n }\n\n return _uncache(this);\n };\n\n _proto2.invalidate = function invalidate() {\n var child = this._first;\n this._lock = 0;\n\n while (child) {\n child.invalidate();\n child = child._next;\n }\n\n return _Animation.prototype.invalidate.call(this);\n };\n\n _proto2.clear = function clear(includeLabels) {\n if (includeLabels === void 0) {\n includeLabels = true;\n }\n\n var child = this._first,\n next;\n\n while (child) {\n next = child._next;\n this.remove(child);\n child = next;\n }\n\n this._dp && (this._time = this._tTime = this._pTime = 0);\n includeLabels && (this.labels = {});\n return _uncache(this);\n };\n\n _proto2.totalDuration = function totalDuration(value) {\n var max = 0,\n self = this,\n child = self._last,\n prevStart = _bigNum,\n prev,\n start,\n parent;\n\n if (arguments.length) {\n return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\n }\n\n if (self._dirty) {\n parent = self.parent;\n\n while (child) {\n prev = child._prev; //record it here in case the tween changes position in the sequence...\n\n child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.\n\n start = child._start;\n\n if (start > prevStart && self._sort && child._ts && !self._lock) {\n //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().\n\n _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\n } else {\n prevStart = start;\n }\n\n if (start < 0 && child._ts) {\n //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n max -= start;\n\n if (!parent && !self._dp || parent && parent.smoothChildTiming) {\n self._start += start / self._ts;\n self._time -= start;\n self._tTime -= start;\n }\n\n self.shiftChildren(-start, false, -1e999);\n prevStart = 0;\n }\n\n child._end > max && child._ts && (max = child._end);\n child = prev;\n }\n\n _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\n\n self._dirty = 0;\n }\n\n return self._tDur;\n };\n\n Timeline.updateRoot = function updateRoot(time) {\n if (_globalTimeline._ts) {\n _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\n\n _lastRenderedFrame = _ticker.frame;\n }\n\n if (_ticker.frame >= _nextGCFrame) {\n _nextGCFrame += _config.autoSleep || 120;\n var child = _globalTimeline._first;\n if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\n while (child && !child._ts) {\n child = child._next;\n }\n\n child || _ticker.sleep();\n }\n }\n };\n\n return Timeline;\n}(Animation);\n\n_setDefaults(Timeline.prototype, {\n _lock: 0,\n _hasPause: 0,\n _forcing: 0\n});\n\nvar _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\n //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\n index = 0,\n matchIndex = 0,\n result,\n startNums,\n color,\n endNum,\n chunk,\n startNum,\n hasRandom,\n a;\n pt.b = start;\n pt.e = end;\n start += \"\"; //ensure values are strings\n\n end += \"\";\n\n if (hasRandom = ~end.indexOf(\"random(\")) {\n end = _replaceRandom(end);\n }\n\n if (stringFilter) {\n a = [start, end];\n stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\n start = a[0];\n end = a[1];\n }\n\n startNums = start.match(_complexStringNumExp) || [];\n\n while (result = _complexStringNumExp.exec(end)) {\n endNum = result[0];\n chunk = end.substring(index, result.index);\n\n if (color) {\n color = (color + 1) % 5;\n } else if (chunk.substr(-5) === \"rgba(\") {\n color = 1;\n }\n\n if (endNum !== startNums[matchIndex++]) {\n startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n pt._pt = {\n _next: pt._pt,\n p: chunk || matchIndex === 1 ? chunk : \",\",\n //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n s: startNum,\n c: endNum.charAt(1) === \"=\" ? parseFloat(endNum.substr(2)) * (endNum.charAt(0) === \"-\" ? -1 : 1) : parseFloat(endNum) - startNum,\n m: color && color < 4 ? Math.round : 0\n };\n index = _complexStringNumExp.lastIndex;\n }\n }\n\n pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n\n pt.fp = funcParam;\n\n if (_relExp.test(end) || hasRandom) {\n pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n }\n\n this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n\n return pt;\n},\n _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam) {\n _isFunction(end) && (end = end(index || 0, target, targets));\n var currentValue = target[prop],\n parsedStart = start !== \"get\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\"set\") || !_isFunction(target[\"get\" + prop.substr(3)]) ? prop : \"get\" + prop.substr(3)](funcParam) : target[prop](),\n setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\n pt;\n\n if (_isString(end)) {\n if (~end.indexOf(\"random(\")) {\n end = _replaceRandom(end);\n }\n\n if (end.charAt(1) === \"=\") {\n pt = parseFloat(parsedStart) + parseFloat(end.substr(2)) * (end.charAt(0) === \"-\" ? -1 : 1) + (getUnit(parsedStart) || 0);\n\n if (pt || pt === 0) {\n // to avoid isNaN, like if someone passes in a value like \"!= whatever\"\n end = pt;\n }\n }\n }\n\n if (parsedStart !== end) {\n if (!isNaN(parsedStart * end) && end !== \"\") {\n // fun fact: any number multiplied by \"\" is evaluated as the number 0!\n pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \"boolean\" ? _renderBoolean : _renderPlain, 0, setter);\n funcParam && (pt.fp = funcParam);\n modifier && pt.modifier(modifier, this, target);\n return this._pt = pt;\n }\n\n !currentValue && !(prop in target) && _missingPlugin(prop, end);\n return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\n }\n},\n //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with \"random()\" in them. It does NOT process relative values.\n_processVars = function _processVars(vars, index, target, targets, tween) {\n _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\n\n if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\n return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\n }\n\n var copy = {},\n p;\n\n for (p in vars) {\n copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\n }\n\n return copy;\n},\n _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\n var plugin, pt, ptLookup, i;\n\n if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\n tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n if (tween !== _quickTween) {\n ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.\n\n i = plugin._props.length;\n\n while (i--) {\n ptLookup[plugin._props[i]] = pt;\n }\n }\n }\n\n return plugin;\n},\n _overwritingTween,\n //store a reference temporarily so we can avoid overwriting itself.\n_initTween = function _initTween(tween, time) {\n var vars = tween.vars,\n ease = vars.ease,\n startAt = vars.startAt,\n immediateRender = vars.immediateRender,\n lazy = vars.lazy,\n onUpdate = vars.onUpdate,\n onUpdateParams = vars.onUpdateParams,\n callbackScope = vars.callbackScope,\n runBackwards = vars.runBackwards,\n yoyoEase = vars.yoyoEase,\n keyframes = vars.keyframes,\n autoRevert = vars.autoRevert,\n dur = tween._dur,\n prevStartAt = tween._startAt,\n targets = tween._targets,\n parent = tween.parent,\n fullTargets = parent && parent.data === \"nested\" ? parent.parent._targets : targets,\n autoOverwrite = tween._overwrite === \"auto\" && !_suppressOverwrites,\n tl = tween.timeline,\n cleanVars,\n i,\n p,\n pt,\n target,\n hasPriority,\n gsData,\n harness,\n plugin,\n ptLookup,\n index,\n harnessVars,\n overwritten;\n tl && (!keyframes || !ease) && (ease = \"none\");\n tween._ease = _parseEase(ease, _defaults.ease);\n tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\n\n if (yoyoEase && tween._yoyo && !tween._repeat) {\n //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.\n yoyoEase = tween._yEase;\n tween._yEase = tween._ease;\n tween._ease = yoyoEase;\n }\n\n tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.\n\n if (!tl) {\n //if there's an internal timeline, skip all the parsing because we passed that task down the chain.\n harness = targets[0] ? _getCache(targets[0]).harness : 0;\n harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an \"x\" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.\n\n cleanVars = _copyExcluding(vars, _reservedProps);\n prevStartAt && prevStartAt.render(-1, true).kill();\n\n if (startAt) {\n _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\n data: \"isStart\",\n overwrite: false,\n parent: parent,\n immediateRender: true,\n lazy: _isNotFalse(lazy),\n startAt: null,\n delay: 0,\n onUpdate: onUpdate,\n onUpdateParams: onUpdateParams,\n callbackScope: callbackScope,\n stagger: 0\n }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);\n\n\n time < 0 && !immediateRender && !autoRevert && tween._startAt.render(-1, true); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.\n\n if (immediateRender) {\n time > 0 && !autoRevert && (tween._startAt = 0); //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in Timeline instances where immediateRender was false or when autoRevert is explicitly set to true.\n\n if (dur && time <= 0) {\n time && (tween._zTime = time);\n return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n } // if (time > 0) {\n // \tautoRevert || (tween._startAt = 0); //tweens that render immediately (like most from() and fromTo() tweens) shouldn't revert when their parent timeline's playhead goes backward past the startTime because the initial render could have happened anytime and it shouldn't be directly correlated to this tween's startTime. Imagine setting up a complex animation where the beginning states of various objects are rendered immediately but the tween doesn't happen for quite some time - if we revert to the starting values as soon as the playhead goes backward past the tween's startTime, it will throw things off visually. Reversion should only happen in Timeline instances where immediateRender was false or when autoRevert is explicitly set to true.\n // } else if (dur && !(time < 0 && prevStartAt)) {\n // \ttime && (tween._zTime = time);\n // \treturn; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n // }\n\n } else if (autoRevert === false) {\n tween._startAt = 0;\n }\n } else if (runBackwards && dur) {\n //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n if (prevStartAt) {\n !autoRevert && (tween._startAt = 0);\n } else {\n time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\n p = _setDefaults({\n overwrite: false,\n data: \"isFromStart\",\n //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n lazy: immediateRender && _isNotFalse(lazy),\n immediateRender: immediateRender,\n //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n stagger: 0,\n parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(\".class\", {y:gsap.utils.wrap([-100,100])})\n\n }, cleanVars);\n harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})\n\n _removeFromParent(tween._startAt = Tween.set(targets, p));\n\n time < 0 && tween._startAt.render(-1, true); // rare edge case, like if a render is forced in the negative direction of a non-initted from() tween.\n\n if (!immediateRender) {\n _initTween(tween._startAt, _tinyNum); //ensures that the initial values are recorded\n\n } else if (!time) {\n return;\n }\n }\n }\n\n tween._pt = 0;\n lazy = dur && _isNotFalse(lazy) || lazy && !dur;\n\n for (i = 0; i < targets.length; i++) {\n target = targets[i];\n gsData = target._gsap || _harness(targets)[i]._gsap;\n tween._ptLookup[i] = ptLookup = {};\n _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\n index = fullTargets === targets ? i : fullTargets.indexOf(target);\n\n if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\n tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n plugin._props.forEach(function (name) {\n ptLookup[name] = pt;\n });\n\n plugin.priority && (hasPriority = 1);\n }\n\n if (!harness || harnessVars) {\n for (p in cleanVars) {\n if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\n plugin.priority && (hasPriority = 1);\n } else {\n ptLookup[p] = pt = _addPropTween.call(tween, target, p, \"get\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\n }\n }\n }\n\n tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\n\n if (autoOverwrite && tween._pt) {\n _overwritingTween = tween;\n\n _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!\n\n\n overwritten = !tween.parent;\n _overwritingTween = 0;\n }\n\n tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\n }\n\n hasPriority && _sortPropTweensByPriority(tween);\n tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.\n }\n\n tween._onUpdate = onUpdate;\n tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.\n},\n _addAliasesToVars = function _addAliasesToVars(targets, vars) {\n var harness = targets[0] ? _getCache(targets[0]).harness : 0,\n propertyAliases = harness && harness.aliases,\n copy,\n p,\n i,\n aliases;\n\n if (!propertyAliases) {\n return vars;\n }\n\n copy = _merge({}, vars);\n\n for (p in propertyAliases) {\n if (p in copy) {\n aliases = propertyAliases[p].split(\",\");\n i = aliases.length;\n\n while (i--) {\n copy[aliases[i]] = copy[p];\n }\n }\n }\n\n return copy;\n},\n _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\n return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\"random(\") ? _replaceRandom(value) : value;\n},\n _staggerTweenProps = _callbackNames + \"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase\",\n _staggerPropsToSkip = (_staggerTweenProps + \",id,stagger,delay,duration,paused,scrollTrigger\").split(\",\");\n/*\n * --------------------------------------------------------------------------------------\n * TWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var Tween = /*#__PURE__*/function (_Animation2) {\n _inheritsLoose(Tween, _Animation2);\n\n function Tween(targets, vars, position, skipInherit) {\n var _this3;\n\n if (typeof vars === \"number\") {\n position.duration = vars;\n vars = position;\n position = null;\n }\n\n _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\n var _this3$vars = _this3.vars,\n duration = _this3$vars.duration,\n delay = _this3$vars.delay,\n immediateRender = _this3$vars.immediateRender,\n stagger = _this3$vars.stagger,\n overwrite = _this3$vars.overwrite,\n keyframes = _this3$vars.keyframes,\n defaults = _this3$vars.defaults,\n scrollTrigger = _this3$vars.scrollTrigger,\n yoyoEase = _this3$vars.yoyoEase,\n parent = vars.parent || _globalTimeline,\n parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \"length\" in vars) ? [targets] : toArray(targets),\n tl,\n i,\n copy,\n l,\n p,\n curTarget,\n staggerFunc,\n staggerVarsToMerge;\n _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\"GSAP target \" + targets + \" not found. https://greensock.com\", !_config.nullTargetWarn) || [];\n _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property\n\n _this3._overwrite = overwrite;\n\n if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n vars = _this3.vars;\n tl = _this3.timeline = new Timeline({\n data: \"nested\",\n defaults: defaults || {}\n });\n tl.kill();\n tl.parent = tl._dp = _assertThisInitialized(_this3);\n tl._start = 0;\n\n if (keyframes) {\n _inheritDefaults(_setDefaults(tl.vars.defaults, {\n ease: \"none\"\n }));\n\n stagger ? parsedTargets.forEach(function (t, i) {\n return keyframes.forEach(function (frame, j) {\n return tl.to(t, frame, j ? \">\" : i * stagger);\n });\n }) : keyframes.forEach(function (frame) {\n return tl.to(parsedTargets, frame, \">\");\n });\n } else {\n l = parsedTargets.length;\n staggerFunc = stagger ? distribute(stagger) : _emptyFunc;\n\n if (_isObject(stagger)) {\n //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.\n for (p in stagger) {\n if (~_staggerTweenProps.indexOf(p)) {\n staggerVarsToMerge || (staggerVarsToMerge = {});\n staggerVarsToMerge[p] = stagger[p];\n }\n }\n }\n\n for (i = 0; i < l; i++) {\n copy = {};\n\n for (p in vars) {\n if (_staggerPropsToSkip.indexOf(p) < 0) {\n copy[p] = vars[p];\n }\n }\n\n copy.stagger = 0;\n yoyoEase && (copy.yoyoEase = yoyoEase);\n staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\n curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.\n\n copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\n copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\n\n if (!stagger && l === 1 && copy.delay) {\n // if someone does delay:\"random(1, 5)\", repeat:-1, for example, the delay shouldn't be inside the repeat.\n _this3._delay = delay = copy.delay;\n _this3._start += delay;\n copy.delay = 0;\n }\n\n tl.to(curTarget, copy, staggerFunc(i, curTarget, parsedTargets));\n }\n\n tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!\n }\n\n duration || _this3.duration(duration = tl.duration());\n } else {\n _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)\n }\n\n if (overwrite === true && !_suppressOverwrites) {\n _overwritingTween = _assertThisInitialized(_this3);\n\n _globalTimeline.killTweensOf(parsedTargets);\n\n _overwritingTween = 0;\n }\n\n _addToTimeline(parent, _assertThisInitialized(_this3), position);\n\n vars.reversed && _this3.reverse();\n vars.paused && _this3.paused(true);\n\n if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \"nested\") {\n _this3._tTime = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\n _this3.render(Math.max(0, -delay)); //in case delay is negative\n\n }\n\n scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\n return _this3;\n }\n\n var _proto3 = Tween.prototype;\n\n _proto3.render = function render(totalTime, suppressEvents, force) {\n var prevTime = this._time,\n tDur = this._tDur,\n dur = this._dur,\n tTime = totalTime > tDur - _tinyNum && totalTime >= 0 ? tDur : totalTime < _tinyNum ? 0 : totalTime,\n time,\n pt,\n iteration,\n cycleDuration,\n prevIteration,\n isYoyo,\n ratio,\n timeline,\n yoyoEase;\n\n if (!dur) {\n _renderZeroDurationTween(this, totalTime, suppressEvents, force);\n } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== totalTime < 0) {\n //this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)\n time = tTime;\n timeline = this.timeline;\n\n if (this._repeat) {\n //adjust the time for repeats and yoyos\n cycleDuration = dur + this._rDelay;\n\n if (this._repeat < -1 && totalTime < 0) {\n return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n }\n\n time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n if (tTime === tDur) {\n // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n iteration = this._repeat;\n time = dur;\n } else {\n iteration = ~~(tTime / cycleDuration);\n\n if (iteration && iteration === tTime / cycleDuration) {\n time = dur;\n iteration--;\n }\n\n time > dur && (time = dur);\n }\n\n isYoyo = this._yoyo && iteration & 1;\n\n if (isYoyo) {\n yoyoEase = this._yEase;\n time = dur - time;\n }\n\n prevIteration = _animationCycle(this._tTime, cycleDuration);\n\n if (time === prevTime && !force && this._initted) {\n //could be during the repeatDelay part. No need to render and fire callbacks.\n return this;\n }\n\n if (iteration !== prevIteration) {\n timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality\n\n if (this.vars.repeatRefresh && !isYoyo && !this._lock) {\n this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.\n\n this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\n }\n }\n }\n\n if (!this._initted) {\n if (_attemptInitTween(this, totalTime < 0 ? totalTime : time, force, suppressEvents)) {\n this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.\n\n return this;\n }\n\n if (dur !== this._dur) {\n // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.\n return this.render(totalTime, suppressEvents, force);\n }\n }\n\n this._tTime = tTime;\n this._time = time;\n\n if (!this._act && this._ts) {\n this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n this._lazy = 0;\n }\n\n this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\n\n if (this._from) {\n this.ratio = ratio = 1 - ratio;\n }\n\n if (time && !prevTime && !suppressEvents) {\n _callback(this, \"onStart\");\n\n if (this._tTime !== tTime) {\n // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n return this;\n }\n }\n\n pt = this._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n\n timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * ratio, suppressEvents, force) || this._startAt && (this._zTime = totalTime);\n\n if (this._onUpdate && !suppressEvents) {\n totalTime < 0 && this._startAt && this._startAt.render(totalTime, true, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\n _callback(this, \"onUpdate\");\n }\n\n this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n\n if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\n totalTime < 0 && this._startAt && !this._onUpdate && this._startAt.render(totalTime, true, true);\n (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime)) {\n // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();\n _callback(this, tTime === tDur ? \"onComplete\" : \"onReverseComplete\", true);\n\n this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n }\n }\n }\n\n return this;\n };\n\n _proto3.targets = function targets() {\n return this._targets;\n };\n\n _proto3.invalidate = function invalidate() {\n this._pt = this._op = this._startAt = this._onUpdate = this._lazy = this.ratio = 0;\n this._ptLookup = [];\n this.timeline && this.timeline.invalidate();\n return _Animation2.prototype.invalidate.call(this);\n };\n\n _proto3.kill = function kill(targets, vars) {\n if (vars === void 0) {\n vars = \"all\";\n }\n\n if (!targets && (!vars || vars === \"all\")) {\n this._lazy = this._pt = 0;\n return this.parent ? _interrupt(this) : this;\n }\n\n if (this.timeline) {\n var tDur = this.timeline.totalDuration();\n this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.\n\n this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.\n\n return this;\n }\n\n var parsedTargets = this._targets,\n killingTargets = targets ? toArray(targets) : parsedTargets,\n propTweenLookup = this._ptLookup,\n firstPT = this._pt,\n overwrittenProps,\n curLookup,\n curOverwriteProps,\n props,\n p,\n pt,\n i;\n\n if ((!vars || vars === \"all\") && _arraysMatch(parsedTargets, killingTargets)) {\n vars === \"all\" && (this._pt = 0);\n return _interrupt(this);\n }\n\n overwrittenProps = this._op = this._op || [];\n\n if (vars !== \"all\") {\n //so people can pass in a comma-delimited list of property names\n if (_isString(vars)) {\n p = {};\n\n _forEachName(vars, function (name) {\n return p[name] = 1;\n });\n\n vars = p;\n }\n\n vars = _addAliasesToVars(parsedTargets, vars);\n }\n\n i = parsedTargets.length;\n\n while (i--) {\n if (~killingTargets.indexOf(parsedTargets[i])) {\n curLookup = propTweenLookup[i];\n\n if (vars === \"all\") {\n overwrittenProps[i] = vars;\n props = curLookup;\n curOverwriteProps = {};\n } else {\n curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\n props = vars;\n }\n\n for (p in props) {\n pt = curLookup && curLookup[p];\n\n if (pt) {\n if (!(\"kill\" in pt.d) || pt.d.kill(p) === true) {\n _removeLinkedListItem(this, pt, \"_pt\");\n }\n\n delete curLookup[p];\n }\n\n if (curOverwriteProps !== \"all\") {\n curOverwriteProps[p] = 1;\n }\n }\n }\n }\n\n this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\n return this;\n };\n\n Tween.to = function to(targets, vars) {\n return new Tween(targets, vars, arguments[2]);\n };\n\n Tween.from = function from(targets, vars) {\n return _createTweenType(1, arguments);\n };\n\n Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\n return new Tween(callback, 0, {\n immediateRender: false,\n lazy: false,\n overwrite: false,\n delay: delay,\n onComplete: callback,\n onReverseComplete: callback,\n onCompleteParams: params,\n onReverseCompleteParams: params,\n callbackScope: scope\n });\n };\n\n Tween.fromTo = function fromTo(targets, fromVars, toVars) {\n return _createTweenType(2, arguments);\n };\n\n Tween.set = function set(targets, vars) {\n vars.duration = 0;\n vars.repeatDelay || (vars.repeat = 0);\n return new Tween(targets, vars);\n };\n\n Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n return _globalTimeline.killTweensOf(targets, props, onlyActive);\n };\n\n return Tween;\n}(Animation);\n\n_setDefaults(Tween.prototype, {\n _targets: [],\n _lazy: 0,\n _startAt: 0,\n _op: 0,\n _onInit: 0\n}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)\n// _forEachName(\"to,from,fromTo,set,call,add,addLabel,addPause\", name => {\n// \tTween.prototype[name] = function() {\n// \t\tlet tl = new Timeline();\n// \t\treturn _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));\n// \t}\n// });\n//for backward compatibility. Leverage the timeline calls.\n\n\n_forEachName(\"staggerTo,staggerFrom,staggerFromTo\", function (name) {\n Tween[name] = function () {\n var tl = new Timeline(),\n params = _slice.call(arguments, 0);\n\n params.splice(name === \"staggerFromTo\" ? 5 : 4, 0, 0);\n return tl[name].apply(tl, params);\n };\n});\n/*\n * --------------------------------------------------------------------------------------\n * PROPTWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _setterPlain = function _setterPlain(target, property, value) {\n return target[property] = value;\n},\n _setterFunc = function _setterFunc(target, property, value) {\n return target[property](value);\n},\n _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\n return target[property](data.fp, value);\n},\n _setterAttribute = function _setterAttribute(target, property, value) {\n return target.setAttribute(property, value);\n},\n _getSetter = function _getSetter(target, property) {\n return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\n},\n _renderPlain = function _renderPlain(ratio, data) {\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\n},\n _renderBoolean = function _renderBoolean(ratio, data) {\n return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\n},\n _renderComplexString = function _renderComplexString(ratio, data) {\n var pt = data._pt,\n s = \"\";\n\n if (!ratio && data.b) {\n //b = beginning string\n s = data.b;\n } else if (ratio === 1 && data.e) {\n //e = ending string\n s = data.e;\n } else {\n while (pt) {\n s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the \"p\" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.\n\n pt = pt._next;\n }\n\n s += data.c; //we use the \"c\" of the PropTween to store the final chunk of non-numeric text.\n }\n\n data.set(data.t, data.p, s, data);\n},\n _renderPropTweens = function _renderPropTweens(ratio, data) {\n var pt = data._pt;\n\n while (pt) {\n pt.r(ratio, pt.d);\n pt = pt._next;\n }\n},\n _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\n var pt = this._pt,\n next;\n\n while (pt) {\n next = pt._next;\n pt.p === property && pt.modifier(modifier, tween, target);\n pt = next;\n }\n},\n _killPropTweensOf = function _killPropTweensOf(property) {\n var pt = this._pt,\n hasNonDependentRemaining,\n next;\n\n while (pt) {\n next = pt._next;\n\n if (pt.p === property && !pt.op || pt.op === property) {\n _removeLinkedListItem(this, pt, \"_pt\");\n } else if (!pt.dep) {\n hasNonDependentRemaining = 1;\n }\n\n pt = next;\n }\n\n return !hasNonDependentRemaining;\n},\n _setterWithModifier = function _setterWithModifier(target, property, value, data) {\n data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\n},\n _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\n var pt = parent._pt,\n next,\n pt2,\n first,\n last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)\n\n while (pt) {\n next = pt._next;\n pt2 = first;\n\n while (pt2 && pt2.pr > pt.pr) {\n pt2 = pt2._next;\n }\n\n if (pt._prev = pt2 ? pt2._prev : last) {\n pt._prev._next = pt;\n } else {\n first = pt;\n }\n\n if (pt._next = pt2) {\n pt2._prev = pt;\n } else {\n last = pt;\n }\n\n pt = next;\n }\n\n parent._pt = first;\n}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)\n\n\nexport var PropTween = /*#__PURE__*/function () {\n function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\n this.t = target;\n this.s = start;\n this.c = change;\n this.p = prop;\n this.r = renderer || _renderPlain;\n this.d = data || this;\n this.set = setter || _setterPlain;\n this.pr = priority || 0;\n this._next = next;\n\n if (next) {\n next._prev = this;\n }\n }\n\n var _proto4 = PropTween.prototype;\n\n _proto4.modifier = function modifier(func, tween, target) {\n this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)\n\n this.set = _setterWithModifier;\n this.m = func;\n this.mt = target; //modifier target\n\n this.tween = tween;\n };\n\n return PropTween;\n}(); //Initialization tasks\n\n_forEachName(_callbackNames + \"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\", function (name) {\n return _reservedProps[name] = 1;\n});\n\n_globals.TweenMax = _globals.TweenLite = Tween;\n_globals.TimelineLite = _globals.TimelineMax = Timeline;\n_globalTimeline = new Timeline({\n sortChildren: false,\n defaults: _defaults,\n autoRemoveChildren: true,\n id: \"root\",\n smoothChildTiming: true\n});\n_config.stringFilter = _colorStringFilter;\n/*\n * --------------------------------------------------------------------------------------\n * GSAP\n * --------------------------------------------------------------------------------------\n */\n\nvar _gsap = {\n registerPlugin: function registerPlugin() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n args.forEach(function (config) {\n return _createPlugin(config);\n });\n },\n timeline: function timeline(vars) {\n return new Timeline(vars);\n },\n getTweensOf: function getTweensOf(targets, onlyActive) {\n return _globalTimeline.getTweensOf(targets, onlyActive);\n },\n getProperty: function getProperty(target, property, unit, uncache) {\n _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in\n\n var getter = _getCache(target || {}).get,\n format = unit ? _passThrough : _numericIfPossible;\n\n unit === \"native\" && (unit = \"\");\n return !target ? target : !property ? function (property, unit, uncache) {\n return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n },\n quickSetter: function quickSetter(target, property, unit) {\n target = toArray(target);\n\n if (target.length > 1) {\n var setters = target.map(function (t) {\n return gsap.quickSetter(t, property, unit);\n }),\n l = setters.length;\n return function (value) {\n var i = l;\n\n while (i--) {\n setters[i](value);\n }\n };\n }\n\n target = target[0] || {};\n\n var Plugin = _plugins[property],\n cache = _getCache(target),\n p = cache.harness && (cache.harness.aliases || {})[property] || property,\n // in case it's an alias, like \"rotate\" for \"rotation\".\n setter = Plugin ? function (value) {\n var p = new Plugin();\n _quickTween._pt = 0;\n p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\n p.render(1, p);\n _quickTween._pt && _renderPropTweens(1, _quickTween);\n } : cache.set(target, p);\n\n return Plugin ? setter : function (value) {\n return setter(target, p, unit ? value + unit : value, cache, 1);\n };\n },\n isTweening: function isTweening(targets) {\n return _globalTimeline.getTweensOf(targets, true).length > 0;\n },\n defaults: function defaults(value) {\n value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\n return _mergeDeep(_defaults, value || {});\n },\n config: function config(value) {\n return _mergeDeep(_config, value || {});\n },\n registerEffect: function registerEffect(_ref3) {\n var name = _ref3.name,\n effect = _ref3.effect,\n plugins = _ref3.plugins,\n defaults = _ref3.defaults,\n extendTimeline = _ref3.extendTimeline;\n (plugins || \"\").split(\",\").forEach(function (pluginName) {\n return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \" effect requires \" + pluginName + \" plugin.\");\n });\n\n _effects[name] = function (targets, vars, tl) {\n return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\n };\n\n if (extendTimeline) {\n Timeline.prototype[name] = function (targets, vars, position) {\n return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\n };\n }\n },\n registerEase: function registerEase(name, ease) {\n _easeMap[name] = _parseEase(ease);\n },\n parseEase: function parseEase(ease, defaultEase) {\n return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\n },\n getById: function getById(id) {\n return _globalTimeline.getById(id);\n },\n exportRoot: function exportRoot(vars, includeDelayedCalls) {\n if (vars === void 0) {\n vars = {};\n }\n\n var tl = new Timeline(vars),\n child,\n next;\n tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\n\n _globalTimeline.remove(tl);\n\n tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).\n\n tl._time = tl._tTime = _globalTimeline._time;\n child = _globalTimeline._first;\n\n while (child) {\n next = child._next;\n\n if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\n _addToTimeline(tl, child, child._start - child._delay);\n }\n\n child = next;\n }\n\n _addToTimeline(_globalTimeline, tl, 0);\n\n return tl;\n },\n utils: {\n wrap: wrap,\n wrapYoyo: wrapYoyo,\n distribute: distribute,\n random: random,\n snap: snap,\n normalize: normalize,\n getUnit: getUnit,\n clamp: clamp,\n splitColor: splitColor,\n toArray: toArray,\n selector: selector,\n mapRange: mapRange,\n pipe: pipe,\n unitize: unitize,\n interpolate: interpolate,\n shuffle: shuffle\n },\n install: _install,\n effects: _effects,\n ticker: _ticker,\n updateRoot: Timeline.updateRoot,\n plugins: _plugins,\n globalTimeline: _globalTimeline,\n core: {\n PropTween: PropTween,\n globals: _addGlobal,\n Tween: Tween,\n Timeline: Timeline,\n Animation: Animation,\n getCache: _getCache,\n _removeLinkedListItem: _removeLinkedListItem,\n suppressOverwrites: function suppressOverwrites(value) {\n return _suppressOverwrites = value;\n }\n }\n};\n\n_forEachName(\"to,from,fromTo,delayedCall,set,killTweensOf\", function (name) {\n return _gsap[name] = Tween[name];\n});\n\n_ticker.add(Timeline.updateRoot);\n\n_quickTween = _gsap.to({}, {\n duration: 0\n}); // ---- EXTRA PLUGINS --------------------------------------------------------\n\nvar _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\n var pt = plugin._pt;\n\n while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\n pt = pt._next;\n }\n\n return pt;\n},\n _addModifiers = function _addModifiers(tween, modifiers) {\n var targets = tween._targets,\n p,\n i,\n pt;\n\n for (p in modifiers) {\n i = targets.length;\n\n while (i--) {\n pt = tween._ptLookup[i][p];\n\n if (pt && (pt = pt.d)) {\n if (pt._pt) {\n // is a plugin\n pt = _getPluginPropTween(pt, p);\n }\n\n pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\n }\n }\n }\n},\n _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\n return {\n name: name,\n rawVars: 1,\n //don't pre-process function-based values or \"random()\" strings.\n init: function init(target, vars, tween) {\n tween._onInit = function (tween) {\n var temp, p;\n\n if (_isString(vars)) {\n temp = {};\n\n _forEachName(vars, function (name) {\n return temp[name] = 1;\n }); //if the user passes in a comma-delimited list of property names to roundProps, like \"x,y\", we round to whole numbers.\n\n\n vars = temp;\n }\n\n if (modifier) {\n temp = {};\n\n for (p in vars) {\n temp[p] = modifier(vars[p]);\n }\n\n vars = temp;\n }\n\n _addModifiers(tween, vars);\n };\n }\n };\n}; //register core plugins\n\n\nexport var gsap = _gsap.registerPlugin({\n name: \"attr\",\n init: function init(target, vars, tween, index, targets) {\n var p, pt;\n\n for (p in vars) {\n pt = this.add(target, \"setAttribute\", (target.getAttribute(p) || 0) + \"\", vars[p], index, targets, 0, 0, p);\n pt && (pt.op = p);\n\n this._props.push(p);\n }\n }\n}, {\n name: \"endArray\",\n init: function init(target, value) {\n var i = value.length;\n\n while (i--) {\n this.add(target, i, target[i] || 0, value[i]);\n }\n }\n}, _buildModifierPlugin(\"roundProps\", _roundModifier), _buildModifierPlugin(\"modifiers\"), _buildModifierPlugin(\"snap\", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.\n\nTween.version = Timeline.version = gsap.version = \"3.8.0\";\n_coreReady = 1;\n_windowExists() && _wake();\nvar Power0 = _easeMap.Power0,\n Power1 = _easeMap.Power1,\n Power2 = _easeMap.Power2,\n Power3 = _easeMap.Power3,\n Power4 = _easeMap.Power4,\n Linear = _easeMap.Linear,\n Quad = _easeMap.Quad,\n Cubic = _easeMap.Cubic,\n Quart = _easeMap.Quart,\n Quint = _easeMap.Quint,\n Strong = _easeMap.Strong,\n Elastic = _easeMap.Elastic,\n Back = _easeMap.Back,\n SteppedEase = _easeMap.SteppedEase,\n Bounce = _easeMap.Bounce,\n Sine = _easeMap.Sine,\n Expo = _easeMap.Expo,\n Circ = _easeMap.Circ;\nexport { Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };\nexport { Tween as TweenMax, Tween as TweenLite, Timeline as TimelineMax, Timeline as TimelineLite, gsap as default, wrap, wrapYoyo, distribute, random, snap, normalize, getUnit, clamp, splitColor, toArray, selector, mapRange, pipe, unitize, interpolate, shuffle }; //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.\n\nexport { _getProperty, _numExp, _numWithUnitExp, _isString, _isUndefined, _renderComplexString, _relExp, _setDefaults, _removeLinkedListItem, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _replaceRandom, _checkPlugin, _plugins, _ticker, _config, _roundModifier, _round, _missingPlugin, _getSetter, _getCache, _colorExp };","/*!\n * CSSPlugin 3.8.0\n * https://greensock.com\n *\n * Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { gsap, _getProperty, _numExp, _numWithUnitExp, getUnit, _isString, _isUndefined, _renderComplexString, _relExp, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _checkPlugin, _replaceRandom, _plugins, GSCache, PropTween, _config, _ticker, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _setDefaults, _removeLinkedListItem //for the commented-out className feature.\n} from \"./gsap-core.js\";\n\nvar _win,\n _doc,\n _docElement,\n _pluginInitted,\n _tempDiv,\n _tempDivStyler,\n _recentSetterPlugin,\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n},\n _transformProps = {},\n _RAD2DEG = 180 / Math.PI,\n _DEG2RAD = Math.PI / 180,\n _atan2 = Math.atan2,\n _bigNum = 1e8,\n _capsExp = /([A-Z])/g,\n _horizontalExp = /(?:left|right|width|margin|padding|x)/i,\n _complexExp = /[\\s,\\(]\\S/,\n _propertyAliases = {\n autoAlpha: \"opacity,visibility\",\n scale: \"scaleX,scaleY\",\n alpha: \"opacity\"\n},\n _renderCSSProp = function _renderCSSProp(ratio, data) {\n return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\n return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\n return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\n},\n //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)\n_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\n var value = data.s + data.c * ratio;\n data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\n},\n _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\n return data.set(data.t, data.p, ratio ? data.e : data.b, data);\n},\n _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\n return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\n},\n _setterCSSStyle = function _setterCSSStyle(target, property, value) {\n return target.style[property] = value;\n},\n _setterCSSProp = function _setterCSSProp(target, property, value) {\n return target.style.setProperty(property, value);\n},\n _setterTransform = function _setterTransform(target, property, value) {\n return target._gsap[property] = value;\n},\n _setterScale = function _setterScale(target, property, value) {\n return target._gsap.scaleX = target._gsap.scaleY = value;\n},\n _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\n var cache = target._gsap;\n cache.scaleX = cache.scaleY = value;\n cache.renderTransform(ratio, cache);\n},\n _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\n var cache = target._gsap;\n cache[property] = value;\n cache.renderTransform(ratio, cache);\n},\n _transformProp = \"transform\",\n _transformOriginProp = _transformProp + \"Origin\",\n _supports3D,\n _createElement = function _createElement(type, ns) {\n var e = _doc.createElementNS ? _doc.createElementNS((ns || \"http://www.w3.org/1999/xhtml\").replace(/^https/, \"http\"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making \"style\" inaccessible.\n\n return e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://greensock.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\n},\n _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\n var cs = getComputedStyle(target);\n return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \"-$1\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \"\"; //css variables may not need caps swapped out for dashes and lowercase.\n},\n _prefixes = \"O,Moz,ms,Ms,Webkit\".split(\",\"),\n _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\n var e = element || _tempDiv,\n s = e.style,\n i = 5;\n\n if (property in s && !preferPrefix) {\n return property;\n }\n\n property = property.charAt(0).toUpperCase() + property.substr(1);\n\n while (i-- && !(_prefixes[i] + property in s)) {}\n\n return i < 0 ? null : (i === 3 ? \"ms\" : i >= 0 ? _prefixes[i] : \"\") + property;\n},\n _initCore = function _initCore() {\n if (_windowExists() && window.document) {\n _win = window;\n _doc = _win.document;\n _docElement = _doc.documentElement;\n _tempDiv = _createElement(\"div\") || {\n style: {}\n };\n _tempDivStyler = _createElement(\"div\");\n _transformProp = _checkPropPrefix(_transformProp);\n _transformOriginProp = _transformProp + \"Origin\";\n _tempDiv.style.cssText = \"border-width:0;line-height:0;position:absolute;padding:0\"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.\n\n _supports3D = !!_checkPropPrefix(\"perspective\");\n _pluginInitted = 1;\n }\n},\n _getBBoxHack = function _getBBoxHack(swapIfPossible) {\n //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a element and/or . We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\n var svg = _createElement(\"svg\", this.ownerSVGElement && this.ownerSVGElement.getAttribute(\"xmlns\") || \"http://www.w3.org/2000/svg\"),\n oldParent = this.parentNode,\n oldSibling = this.nextSibling,\n oldCSS = this.style.cssText,\n bbox;\n\n _docElement.appendChild(svg);\n\n svg.appendChild(this);\n this.style.display = \"block\";\n\n if (swapIfPossible) {\n try {\n bbox = this.getBBox();\n this._gsapBBox = this.getBBox; //store the original\n\n this.getBBox = _getBBoxHack;\n } catch (e) {}\n } else if (this._gsapBBox) {\n bbox = this._gsapBBox();\n }\n\n if (oldParent) {\n if (oldSibling) {\n oldParent.insertBefore(this, oldSibling);\n } else {\n oldParent.appendChild(this);\n }\n }\n\n _docElement.removeChild(svg);\n\n this.style.cssText = oldCSS;\n return bbox;\n},\n _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\n var i = attributesArray.length;\n\n while (i--) {\n if (target.hasAttribute(attributesArray[i])) {\n return target.getAttribute(attributesArray[i]);\n }\n }\n},\n _getBBox = function _getBBox(target) {\n var bounds;\n\n try {\n bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a or ). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n } catch (error) {\n bounds = _getBBoxHack.call(target, true);\n }\n\n bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\n\n return bounds && !bounds.width && !bounds.x && !bounds.y ? {\n x: +_getAttributeFallbacks(target, [\"x\", \"cx\", \"x1\"]) || 0,\n y: +_getAttributeFallbacks(target, [\"y\", \"cy\", \"y1\"]) || 0,\n width: 0,\n height: 0\n } : bounds;\n},\n _isSVG = function _isSVG(e) {\n return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n},\n //reports if the element is an SVG on which getBBox() actually works\n_removeProperty = function _removeProperty(target, property) {\n if (property) {\n var style = target.style;\n\n if (property in _transformProps && property !== _transformOriginProp) {\n property = _transformProp;\n }\n\n if (style.removeProperty) {\n if (property.substr(0, 2) === \"ms\" || property.substr(0, 6) === \"webkit\") {\n //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n property = \"-\" + property;\n }\n\n style.removeProperty(property.replace(_capsExp, \"-$1\").toLowerCase());\n } else {\n //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n style.removeAttribute(property);\n }\n }\n},\n _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\n var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\n plugin._pt = pt;\n pt.b = beginning;\n pt.e = end;\n\n plugin._props.push(property);\n\n return pt;\n},\n _nonConvertibleUnits = {\n deg: 1,\n rad: 1,\n turn: 1\n},\n //takes a single value like 20px and converts it to the unit specified, like \"%\", returning only the numeric amount.\n_convertToUnit = function _convertToUnit(target, property, value, unit) {\n var curValue = parseFloat(value) || 0,\n curUnit = (value + \"\").trim().substr((curValue + \"\").length) || \"px\",\n // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()\n style = _tempDiv.style,\n horizontal = _horizontalExp.test(property),\n isRootSVG = target.tagName.toLowerCase() === \"svg\",\n measureProperty = (isRootSVG ? \"client\" : \"offset\") + (horizontal ? \"Width\" : \"Height\"),\n amount = 100,\n toPixels = unit === \"px\",\n toPercent = unit === \"%\",\n px,\n parent,\n cache,\n isSVG;\n\n if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\n return curValue;\n }\n\n curUnit !== \"px\" && !toPixels && (curValue = _convertToUnit(target, property, value, \"px\"));\n isSVG = target.getCTM && _isSVG(target);\n\n if ((toPercent || curUnit === \"%\") && (_transformProps[property] || ~property.indexOf(\"adius\"))) {\n px = isSVG ? target.getBBox()[horizontal ? \"width\" : \"height\"] : target[measureProperty];\n return _round(toPercent ? curValue / px * amount : curValue / 100 * px);\n }\n\n style[horizontal ? \"width\" : \"height\"] = amount + (toPixels ? curUnit : unit);\n parent = ~property.indexOf(\"adius\") || unit === \"em\" && target.appendChild && !isRootSVG ? target : target.parentNode;\n\n if (isSVG) {\n parent = (target.ownerSVGElement || {}).parentNode;\n }\n\n if (!parent || parent === _doc || !parent.appendChild) {\n parent = _doc.body;\n }\n\n cache = parent._gsap;\n\n if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time) {\n return _round(curValue / cache.width * amount);\n } else {\n (toPercent || curUnit === \"%\") && (style.position = _getComputedProperty(target, \"position\"));\n parent === target && (style.position = \"static\"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.\n\n parent.appendChild(_tempDiv);\n px = _tempDiv[measureProperty];\n parent.removeChild(_tempDiv);\n style.position = \"absolute\";\n\n if (horizontal && toPercent) {\n cache = _getCache(parent);\n cache.time = _ticker.time;\n cache.width = parent[measureProperty];\n }\n }\n\n return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\n},\n _get = function _get(target, property, unit, uncache) {\n var value;\n _pluginInitted || _initCore();\n\n if (property in _propertyAliases && property !== \"transform\") {\n property = _propertyAliases[property];\n\n if (~property.indexOf(\",\")) {\n property = property.split(\",\")[0];\n }\n }\n\n if (_transformProps[property] && property !== \"transform\") {\n value = _parseTransform(target, uncache);\n value = property !== \"transformOrigin\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \" \" + value.zOrigin + \"px\";\n } else {\n value = target.style[property];\n\n if (!value || value === \"auto\" || uncache || ~(value + \"\").indexOf(\"calc(\")) {\n value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === \"opacity\" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like borderTopLeftRadius\n }\n }\n\n return unit && !~(value + \"\").trim().indexOf(\" \") ? _convertToUnit(target, property, value, unit) + unit : value;\n},\n _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\n //note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n if (!start || start === \"none\") {\n // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style (\"clipPath\" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as \"none\" whereas WebkitClipPath reports accurately like \"ellipse(100% 0% at 50% 0%)\", so in this case we must SWITCH to using the prefixed property instead. See https://greensock.com/forums/topic/18310-clippath-doesnt-work-on-ios/\n var p = _checkPropPrefix(prop, target, 1),\n s = p && _getComputedProperty(target, p, 1);\n\n if (s && s !== start) {\n prop = p;\n start = s;\n } else if (prop === \"borderColor\") {\n start = _getComputedProperty(target, \"borderTopColor\"); // Firefox bug: always reports \"borderColor\" as \"\", so we must fall back to borderTopColor. See https://greensock.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/\n }\n }\n\n var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),\n index = 0,\n matchIndex = 0,\n a,\n result,\n startValues,\n startNum,\n color,\n startValue,\n endValue,\n endNum,\n chunk,\n endUnit,\n startUnit,\n relative,\n endValues;\n pt.b = start;\n pt.e = end;\n start += \"\"; //ensure values are strings\n\n end += \"\";\n\n if (end === \"auto\") {\n target.style[prop] = end;\n end = _getComputedProperty(target, prop) || end;\n target.style[prop] = start;\n }\n\n a = [start, end];\n\n _colorStringFilter(a); //pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().\n\n\n start = a[0];\n end = a[1];\n startValues = start.match(_numWithUnitExp) || [];\n endValues = end.match(_numWithUnitExp) || [];\n\n if (endValues.length) {\n while (result = _numWithUnitExp.exec(end)) {\n endValue = result[0];\n chunk = end.substring(index, result.index);\n\n if (color) {\n color = (color + 1) % 5;\n } else if (chunk.substr(-5) === \"rgba(\" || chunk.substr(-5) === \"hsla(\") {\n color = 1;\n }\n\n if (endValue !== (startValue = startValues[matchIndex++] || \"\")) {\n startNum = parseFloat(startValue) || 0;\n startUnit = startValue.substr((startNum + \"\").length);\n relative = endValue.charAt(1) === \"=\" ? +(endValue.charAt(0) + \"1\") : 0;\n\n if (relative) {\n endValue = endValue.substr(2);\n }\n\n endNum = parseFloat(endValue);\n endUnit = endValue.substr((endNum + \"\").length);\n index = _numWithUnitExp.lastIndex - endUnit.length;\n\n if (!endUnit) {\n //if something like \"perspective:300\" is passed in and we must add a unit to the end\n endUnit = endUnit || _config.units[prop] || startUnit;\n\n if (index === end.length) {\n end += endUnit;\n pt.e += endUnit;\n }\n }\n\n if (startUnit !== endUnit) {\n startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\n } //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n\n pt._pt = {\n _next: pt._pt,\n p: chunk || matchIndex === 1 ? chunk : \",\",\n //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n s: startNum,\n c: relative ? relative * endNum : endNum - startNum,\n m: color && color < 4 || prop === \"zIndex\" ? Math.round : 0\n };\n }\n }\n\n pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n } else {\n pt.r = prop === \"display\" && end === \"none\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\n }\n\n _relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\n this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus \"this\" would refer to the plugin.\n\n return pt;\n},\n _keywordToPercent = {\n top: \"0%\",\n bottom: \"100%\",\n left: \"0%\",\n right: \"100%\",\n center: \"50%\"\n},\n _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\n var split = value.split(\" \"),\n x = split[0],\n y = split[1] || \"50%\";\n\n if (x === \"top\" || x === \"bottom\" || y === \"left\" || y === \"right\") {\n //the user provided them in the wrong order, so flip them\n value = x;\n x = y;\n y = value;\n }\n\n split[0] = _keywordToPercent[x] || x;\n split[1] = _keywordToPercent[y] || y;\n return split.join(\" \");\n},\n _renderClearProps = function _renderClearProps(ratio, data) {\n if (data.tween && data.tween._time === data.tween._dur) {\n var target = data.t,\n style = target.style,\n props = data.u,\n cache = target._gsap,\n prop,\n clearTransforms,\n i;\n\n if (props === \"all\" || props === true) {\n style.cssText = \"\";\n clearTransforms = 1;\n } else {\n props = props.split(\",\");\n i = props.length;\n\n while (--i > -1) {\n prop = props[i];\n\n if (_transformProps[prop]) {\n clearTransforms = 1;\n prop = prop === \"transformOrigin\" ? _transformOriginProp : _transformProp;\n }\n\n _removeProperty(target, prop);\n }\n }\n\n if (clearTransforms) {\n _removeProperty(target, _transformProp);\n\n if (cache) {\n cache.svg && target.removeAttribute(\"transform\");\n\n _parseTransform(target, 1); // force all the cached values back to \"normal\"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.\n\n\n cache.uncache = 1;\n }\n }\n }\n},\n // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.\n_specialProps = {\n clearProps: function clearProps(plugin, target, property, endValue, tween) {\n if (tween.data !== \"isFromStart\") {\n var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\n pt.u = endValue;\n pt.pr = -10;\n pt.tween = tween;\n\n plugin._props.push(property);\n\n return 1;\n }\n }\n /* className feature (about 0.4kb gzipped).\n , className(plugin, target, property, endValue, tween) {\n \tlet _renderClassName = (ratio, data) => {\n \t\t\tdata.css.render(ratio, data.css);\n \t\t\tif (!ratio || ratio === 1) {\n \t\t\t\tlet inline = data.rmv,\n \t\t\t\t\ttarget = data.t,\n \t\t\t\t\tp;\n \t\t\t\ttarget.setAttribute(\"class\", ratio ? data.e : data.b);\n \t\t\t\tfor (p in inline) {\n \t\t\t\t\t_removeProperty(target, p);\n \t\t\t\t}\n \t\t\t}\n \t\t},\n \t\t_getAllStyles = (target) => {\n \t\t\tlet styles = {},\n \t\t\t\tcomputed = getComputedStyle(target),\n \t\t\t\tp;\n \t\t\tfor (p in computed) {\n \t\t\t\tif (isNaN(p) && p !== \"cssText\" && p !== \"length\") {\n \t\t\t\t\tstyles[p] = computed[p];\n \t\t\t\t}\n \t\t\t}\n \t\t\t_setDefaults(styles, _parseTransform(target, 1));\n \t\t\treturn styles;\n \t\t},\n \t\tstartClassList = target.getAttribute(\"class\"),\n \t\tstyle = target.style,\n \t\tcssText = style.cssText,\n \t\tcache = target._gsap,\n \t\tclassPT = cache.classPT,\n \t\tinlineToRemoveAtEnd = {},\n \t\tdata = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== \"=\") ? endValue : startClassList.replace(new RegExp(\"(?:\\\\s|^)\" + endValue.substr(2) + \"(?![\\\\w-])\"), \"\") + ((endValue.charAt(0) === \"+\") ? \" \" + endValue.substr(2) : \"\")},\n \t\tchangingVars = {},\n \t\tstartVars = _getAllStyles(target),\n \t\ttransformRelated = /(transform|perspective)/i,\n \t\tendVars, p;\n \tif (classPT) {\n \t\tclassPT.r(1, classPT.d);\n \t\t_removeLinkedListItem(classPT.d.plugin, classPT, \"_pt\");\n \t}\n \ttarget.setAttribute(\"class\", data.e);\n \tendVars = _getAllStyles(target, true);\n \ttarget.setAttribute(\"class\", startClassList);\n \tfor (p in endVars) {\n \t\tif (endVars[p] !== startVars[p] && !transformRelated.test(p)) {\n \t\t\tchangingVars[p] = endVars[p];\n \t\t\tif (!style[p] && style[p] !== \"0\") {\n \t\t\t\tinlineToRemoveAtEnd[p] = 1;\n \t\t\t}\n \t\t}\n \t}\n \tcache.classPT = plugin._pt = new PropTween(plugin._pt, target, \"className\", 0, 0, _renderClassName, data, 0, -11);\n \tif (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://greensock.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\n \t\tstyle.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n \t}\n \t_parseTransform(target, true); //to clear the caching of transforms\n \tdata.css = new gsap.plugins.css();\n \tdata.css.init(target, changingVars, tween);\n \tplugin._props.push(...data.css._props);\n \treturn 1;\n }\n */\n\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TRANSFORMS\n * --------------------------------------------------------------------------------------\n */\n_identity2DMatrix = [1, 0, 0, 1, 0, 0],\n _rotationalProperties = {},\n _isNullTransform = function _isNullTransform(value) {\n return value === \"matrix(1, 0, 0, 1, 0, 0)\" || value === \"none\" || !value;\n},\n _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\n var matrixString = _getComputedProperty(target, _transformProp);\n\n return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);\n},\n _getMatrix = function _getMatrix(target, force2D) {\n var cache = target._gsap || _getCache(target),\n style = target.style,\n matrix = _getComputedTransformMatrixAsArray(target),\n parent,\n nextSibling,\n temp,\n addedToDOM;\n\n if (cache.svg && target.getAttribute(\"transform\")) {\n temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like \"translate(50,60) rotate(135,0,0)\" are parsed because it mashes it into a matrix.\n\n matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\n return matrix.join(\",\") === \"1,0,0,1,0,0\" ? _identity2DMatrix : matrix;\n } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\n //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\n temp = style.display;\n style.display = \"block\";\n parent = target.parentNode;\n\n if (!parent || !target.offsetParent) {\n // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375\n addedToDOM = 1; //flag\n\n nextSibling = target.nextSibling;\n\n _docElement.appendChild(target); //we must add it to the DOM in order to get values properly\n\n }\n\n matrix = _getComputedTransformMatrixAsArray(target);\n temp ? style.display = temp : _removeProperty(target, \"display\");\n\n if (addedToDOM) {\n nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\n }\n }\n\n return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\n},\n _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\n var cache = target._gsap,\n matrix = matrixArray || _getMatrix(target, true),\n xOriginOld = cache.xOrigin || 0,\n yOriginOld = cache.yOrigin || 0,\n xOffsetOld = cache.xOffset || 0,\n yOffsetOld = cache.yOffset || 0,\n a = matrix[0],\n b = matrix[1],\n c = matrix[2],\n d = matrix[3],\n tx = matrix[4],\n ty = matrix[5],\n originSplit = origin.split(\" \"),\n xOrigin = parseFloat(originSplit[0]) || 0,\n yOrigin = parseFloat(originSplit[1]) || 0,\n bounds,\n determinant,\n x,\n y;\n\n if (!originIsAbsolute) {\n bounds = _getBBox(target);\n xOrigin = bounds.x + (~originSplit[0].indexOf(\"%\") ? xOrigin / 100 * bounds.width : xOrigin);\n yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\"%\") ? yOrigin / 100 * bounds.height : yOrigin);\n } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\n //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\n x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\n y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\n xOrigin = x;\n yOrigin = y;\n }\n\n if (smooth || smooth !== false && cache.smooth) {\n tx = xOrigin - xOriginOld;\n ty = yOrigin - yOriginOld;\n cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\n cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\n } else {\n cache.xOffset = cache.yOffset = 0;\n }\n\n cache.xOrigin = xOrigin;\n cache.yOrigin = yOrigin;\n cache.smooth = !!smooth;\n cache.origin = origin;\n cache.originIsAbsolute = !!originIsAbsolute;\n target.style[_transformOriginProp] = \"0px 0px\"; //otherwise, if someone sets an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).\n\n if (pluginToAddPropTweensTo) {\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOrigin\", xOriginOld, xOrigin);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOrigin\", yOriginOld, yOrigin);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOffset\", xOffsetOld, cache.xOffset);\n\n _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOffset\", yOffsetOld, cache.yOffset);\n }\n\n target.setAttribute(\"data-svg-origin\", xOrigin + \" \" + yOrigin);\n},\n _parseTransform = function _parseTransform(target, uncache) {\n var cache = target._gsap || new GSCache(target);\n\n if (\"x\" in cache && !uncache && !cache.uncache) {\n return cache;\n }\n\n var style = target.style,\n invertedScaleX = cache.scaleX < 0,\n px = \"px\",\n deg = \"deg\",\n origin = _getComputedProperty(target, _transformOriginProp) || \"0\",\n x,\n y,\n z,\n scaleX,\n scaleY,\n rotation,\n rotationX,\n rotationY,\n skewX,\n skewY,\n perspective,\n xOrigin,\n yOrigin,\n matrix,\n angle,\n cos,\n sin,\n a,\n b,\n c,\n d,\n a12,\n a22,\n t1,\n t2,\n t3,\n a13,\n a23,\n a33,\n a42,\n a43,\n a32;\n x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\n scaleX = scaleY = 1;\n cache.svg = !!(target.getCTM && _isSVG(target));\n matrix = _getMatrix(target, cache.svg);\n\n if (cache.svg) {\n t1 = (!cache.uncache || origin === \"0px 0px\") && !uncache && target.getAttribute(\"data-svg-origin\"); // if origin is 0,0 and cache.uncache is true, let the recorded data-svg-origin stay. Otherwise, whenever we set cache.uncache to true, we'd need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + \"px \" + (cache.yOrigin - bbox.y) + \"px\". Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.\n\n _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\n }\n\n xOrigin = cache.xOrigin || 0;\n yOrigin = cache.yOrigin || 0;\n\n if (matrix !== _identity2DMatrix) {\n a = matrix[0]; //a11\n\n b = matrix[1]; //a21\n\n c = matrix[2]; //a31\n\n d = matrix[3]; //a41\n\n x = a12 = matrix[4];\n y = a22 = matrix[5]; //2D matrix\n\n if (matrix.length === 6) {\n scaleX = Math.sqrt(a * a + b * b);\n scaleY = Math.sqrt(d * d + c * c);\n rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\n skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\n skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\n\n if (cache.svg) {\n x -= xOrigin - (xOrigin * a + yOrigin * c);\n y -= yOrigin - (xOrigin * b + yOrigin * d);\n } //3D matrix\n\n } else {\n a32 = matrix[6];\n a42 = matrix[7];\n a13 = matrix[8];\n a23 = matrix[9];\n a33 = matrix[10];\n a43 = matrix[11];\n x = matrix[12];\n y = matrix[13];\n z = matrix[14];\n angle = _atan2(a32, a33);\n rotationX = angle * _RAD2DEG; //rotationX\n\n if (angle) {\n cos = Math.cos(-angle);\n sin = Math.sin(-angle);\n t1 = a12 * cos + a13 * sin;\n t2 = a22 * cos + a23 * sin;\n t3 = a32 * cos + a33 * sin;\n a13 = a12 * -sin + a13 * cos;\n a23 = a22 * -sin + a23 * cos;\n a33 = a32 * -sin + a33 * cos;\n a43 = a42 * -sin + a43 * cos;\n a12 = t1;\n a22 = t2;\n a32 = t3;\n } //rotationY\n\n\n angle = _atan2(-c, a33);\n rotationY = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(-angle);\n sin = Math.sin(-angle);\n t1 = a * cos - a13 * sin;\n t2 = b * cos - a23 * sin;\n t3 = c * cos - a33 * sin;\n a43 = d * sin + a43 * cos;\n a = t1;\n b = t2;\n c = t3;\n } //rotationZ\n\n\n angle = _atan2(b, a);\n rotation = angle * _RAD2DEG;\n\n if (angle) {\n cos = Math.cos(angle);\n sin = Math.sin(angle);\n t1 = a * cos + b * sin;\n t2 = a12 * cos + a22 * sin;\n b = b * cos - a * sin;\n a22 = a22 * cos - a12 * sin;\n a = t1;\n a12 = t2;\n }\n\n if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\n //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n rotationX = rotation = 0;\n rotationY = 180 - rotationY;\n }\n\n scaleX = _round(Math.sqrt(a * a + b * b + c * c));\n scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));\n angle = _atan2(a12, a22);\n skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\n perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\n }\n\n if (cache.svg) {\n //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).\n t1 = target.getAttribute(\"transform\");\n cache.forceCSS = target.setAttribute(\"transform\", \"\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\n t1 && target.setAttribute(\"transform\", t1);\n }\n }\n\n if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n if (invertedScaleX) {\n scaleX *= -1;\n skewX += rotation <= 0 ? 180 : -180;\n rotation += rotation <= 0 ? 180 : -180;\n } else {\n scaleY *= -1;\n skewX += skewX <= 0 ? 180 : -180;\n }\n }\n\n cache.x = x - ((cache.xPercent = x && (cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\n cache.y = y - ((cache.yPercent = y && (cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\n cache.z = z + px;\n cache.scaleX = _round(scaleX);\n cache.scaleY = _round(scaleY);\n cache.rotation = _round(rotation) + deg;\n cache.rotationX = _round(rotationX) + deg;\n cache.rotationY = _round(rotationY) + deg;\n cache.skewX = skewX + deg;\n cache.skewY = skewY + deg;\n cache.transformPerspective = perspective + px;\n\n if (cache.zOrigin = parseFloat(origin.split(\" \")[2]) || 0) {\n style[_transformOriginProp] = _firstTwoOnly(origin);\n }\n\n cache.xOffset = cache.yOffset = 0;\n cache.force3D = _config.force3D;\n cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\n cache.uncache = 0;\n return cache;\n},\n _firstTwoOnly = function _firstTwoOnly(value) {\n return (value = value.split(\" \"))[0] + \" \" + value[1];\n},\n //for handling transformOrigin values, stripping out the 3rd dimension\n_addPxTranslate = function _addPxTranslate(target, start, value) {\n var unit = getUnit(start);\n return _round(parseFloat(start) + parseFloat(_convertToUnit(target, \"x\", value + \"px\", unit))) + unit;\n},\n _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\n cache.z = \"0px\";\n cache.rotationY = cache.rotationX = \"0deg\";\n cache.force3D = 0;\n\n _renderCSSTransforms(ratio, cache);\n},\n _zeroDeg = \"0deg\",\n _zeroPx = \"0px\",\n _endParenthesis = \") \",\n _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\n var _ref = cache || this,\n xPercent = _ref.xPercent,\n yPercent = _ref.yPercent,\n x = _ref.x,\n y = _ref.y,\n z = _ref.z,\n rotation = _ref.rotation,\n rotationY = _ref.rotationY,\n rotationX = _ref.rotationX,\n skewX = _ref.skewX,\n skewY = _ref.skewY,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n transformPerspective = _ref.transformPerspective,\n force3D = _ref.force3D,\n target = _ref.target,\n zOrigin = _ref.zOrigin,\n transforms = \"\",\n use3D = force3D === \"auto\" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)\n\n\n if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\n var angle = parseFloat(rotationY) * _DEG2RAD,\n a13 = Math.sin(angle),\n a33 = Math.cos(angle),\n cos;\n\n angle = parseFloat(rotationX) * _DEG2RAD;\n cos = Math.cos(angle);\n x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\n y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\n z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\n }\n\n if (transformPerspective !== _zeroPx) {\n transforms += \"perspective(\" + transformPerspective + _endParenthesis;\n }\n\n if (xPercent || yPercent) {\n transforms += \"translate(\" + xPercent + \"%, \" + yPercent + \"%) \";\n }\n\n if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\n transforms += z !== _zeroPx || use3D ? \"translate3d(\" + x + \", \" + y + \", \" + z + \") \" : \"translate(\" + x + \", \" + y + _endParenthesis;\n }\n\n if (rotation !== _zeroDeg) {\n transforms += \"rotate(\" + rotation + _endParenthesis;\n }\n\n if (rotationY !== _zeroDeg) {\n transforms += \"rotateY(\" + rotationY + _endParenthesis;\n }\n\n if (rotationX !== _zeroDeg) {\n transforms += \"rotateX(\" + rotationX + _endParenthesis;\n }\n\n if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\n transforms += \"skew(\" + skewX + \", \" + skewY + _endParenthesis;\n }\n\n if (scaleX !== 1 || scaleY !== 1) {\n transforms += \"scale(\" + scaleX + \", \" + scaleY + _endParenthesis;\n }\n\n target.style[_transformProp] = transforms || \"translate(0, 0)\";\n},\n _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\n var _ref2 = cache || this,\n xPercent = _ref2.xPercent,\n yPercent = _ref2.yPercent,\n x = _ref2.x,\n y = _ref2.y,\n rotation = _ref2.rotation,\n skewX = _ref2.skewX,\n skewY = _ref2.skewY,\n scaleX = _ref2.scaleX,\n scaleY = _ref2.scaleY,\n target = _ref2.target,\n xOrigin = _ref2.xOrigin,\n yOrigin = _ref2.yOrigin,\n xOffset = _ref2.xOffset,\n yOffset = _ref2.yOffset,\n forceCSS = _ref2.forceCSS,\n tx = parseFloat(x),\n ty = parseFloat(y),\n a11,\n a21,\n a12,\n a22,\n temp;\n\n rotation = parseFloat(rotation);\n skewX = parseFloat(skewX);\n skewY = parseFloat(skewY);\n\n if (skewY) {\n //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\n skewY = parseFloat(skewY);\n skewX += skewY;\n rotation += skewY;\n }\n\n if (rotation || skewX) {\n rotation *= _DEG2RAD;\n skewX *= _DEG2RAD;\n a11 = Math.cos(rotation) * scaleX;\n a21 = Math.sin(rotation) * scaleX;\n a12 = Math.sin(rotation - skewX) * -scaleY;\n a22 = Math.cos(rotation - skewX) * scaleY;\n\n if (skewX) {\n skewY *= _DEG2RAD;\n temp = Math.tan(skewX - skewY);\n temp = Math.sqrt(1 + temp * temp);\n a12 *= temp;\n a22 *= temp;\n\n if (skewY) {\n temp = Math.tan(skewY);\n temp = Math.sqrt(1 + temp * temp);\n a11 *= temp;\n a21 *= temp;\n }\n }\n\n a11 = _round(a11);\n a21 = _round(a21);\n a12 = _round(a12);\n a22 = _round(a22);\n } else {\n a11 = scaleX;\n a22 = scaleY;\n a21 = a12 = 0;\n }\n\n if (tx && !~(x + \"\").indexOf(\"px\") || ty && !~(y + \"\").indexOf(\"px\")) {\n tx = _convertToUnit(target, \"x\", x, \"px\");\n ty = _convertToUnit(target, \"y\", y, \"px\");\n }\n\n if (xOrigin || yOrigin || xOffset || yOffset) {\n tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\n ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\n }\n\n if (xPercent || yPercent) {\n //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the translation to simulate it.\n temp = target.getBBox();\n tx = _round(tx + xPercent / 100 * temp.width);\n ty = _round(ty + yPercent / 100 * temp.height);\n }\n\n temp = \"matrix(\" + a11 + \",\" + a21 + \",\" + a12 + \",\" + a22 + \",\" + tx + \",\" + ty + \")\";\n target.setAttribute(\"transform\", temp);\n forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)\n},\n _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue, relative) {\n var cap = 360,\n isString = _isString(endValue),\n endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\"rad\") ? _RAD2DEG : 1),\n change = relative ? endNum * relative : endNum - startNum,\n finalValue = startNum + change + \"deg\",\n direction,\n pt;\n\n if (isString) {\n direction = endValue.split(\"_\")[1];\n\n if (direction === \"short\") {\n change %= cap;\n\n if (change !== change % (cap / 2)) {\n change += change < 0 ? cap : -cap;\n }\n }\n\n if (direction === \"cw\" && change < 0) {\n change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;\n } else if (direction === \"ccw\" && change > 0) {\n change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;\n }\n }\n\n plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\n pt.e = finalValue;\n pt.u = \"deg\";\n\n plugin._props.push(property);\n\n return pt;\n},\n _assign = function _assign(target, source) {\n // Internet Explorer doesn't have Object.assign(), so we recreate it here.\n for (var p in source) {\n target[p] = source[p];\n }\n\n return target;\n},\n _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\n //for handling cases where someone passes in a whole transform string, like transform: \"scale(2, 3) rotate(20deg) translateY(30em)\"\n var startCache = _assign({}, target._gsap),\n exclude = \"perspective,force3D,transformOrigin,svgOrigin\",\n style = target.style,\n endCache,\n p,\n startValue,\n endValue,\n startNum,\n endNum,\n startUnit,\n endUnit;\n\n if (startCache.svg) {\n startValue = target.getAttribute(\"transform\");\n target.setAttribute(\"transform\", \"\");\n style[_transformProp] = transforms;\n endCache = _parseTransform(target, 1);\n\n _removeProperty(target, _transformProp);\n\n target.setAttribute(\"transform\", startValue);\n } else {\n startValue = getComputedStyle(target)[_transformProp];\n style[_transformProp] = transforms;\n endCache = _parseTransform(target, 1);\n style[_transformProp] = startValue;\n }\n\n for (p in _transformProps) {\n startValue = startCache[p];\n endValue = endCache[p];\n\n if (startValue !== endValue && exclude.indexOf(p) < 0) {\n //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n startUnit = getUnit(startValue);\n endUnit = getUnit(endValue);\n startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\n endNum = parseFloat(endValue);\n plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\n plugin._pt.u = endUnit || 0;\n\n plugin._props.push(p);\n }\n }\n\n _assign(endCache, startCache);\n}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.\n\n\n_forEachName(\"padding,margin,Width,Radius\", function (name, index) {\n var t = \"Top\",\n r = \"Right\",\n b = \"Bottom\",\n l = \"Left\",\n props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\n return index < 2 ? name + side : \"border\" + side + name;\n });\n\n _specialProps[index > 1 ? \"border\" + name : name] = function (plugin, target, property, endValue, tween) {\n var a, vars;\n\n if (arguments.length < 4) {\n // getter, passed target, property, and unit (from _get())\n a = props.map(function (prop) {\n return _get(plugin, prop, property);\n });\n vars = a.join(\" \");\n return vars.split(a[0]).length === 5 ? a[0] : vars;\n }\n\n a = (endValue + \"\").split(\" \");\n vars = {};\n props.forEach(function (prop, i) {\n return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\n });\n plugin.init(target, vars, tween);\n };\n});\n\nexport var CSSPlugin = {\n name: \"css\",\n register: _initCore,\n targetTest: function targetTest(target) {\n return target.style && target.nodeType;\n },\n init: function init(target, vars, tween, index, targets) {\n var props = this._props,\n style = target.style,\n startAt = tween.vars.startAt,\n startValue,\n endValue,\n endNum,\n startNum,\n type,\n specialProp,\n p,\n startUnit,\n endUnit,\n relative,\n isTransformRelated,\n transformPropTween,\n cache,\n smooth,\n hasPriority;\n _pluginInitted || _initCore();\n\n for (p in vars) {\n if (p === \"autoRound\") {\n continue;\n }\n\n endValue = vars[p];\n\n if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {\n // plugins\n continue;\n }\n\n type = typeof endValue;\n specialProp = _specialProps[p];\n\n if (type === \"function\") {\n endValue = endValue.call(tween, index, target, targets);\n type = typeof endValue;\n }\n\n if (type === \"string\" && ~endValue.indexOf(\"random(\")) {\n endValue = _replaceRandom(endValue);\n }\n\n if (specialProp) {\n specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\n } else if (p.substr(0, 2) === \"--\") {\n //CSS variable\n startValue = (getComputedStyle(target).getPropertyValue(p) + \"\").trim();\n endValue += \"\";\n _colorExp.lastIndex = 0;\n\n if (!_colorExp.test(startValue)) {\n // colors don't have units\n startUnit = getUnit(startValue);\n endUnit = getUnit(endValue);\n }\n\n endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\n this.add(style, \"setProperty\", startValue, endValue, index, targets, 0, 0, p);\n props.push(p);\n } else if (type !== \"undefined\") {\n if (startAt && p in startAt) {\n // in case someone hard-codes a complex value as the start, like top: \"calc(2vh / 2)\". Without this, it'd use the computed value (always in px)\n startValue = typeof startAt[p] === \"function\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\n p in _config.units && !getUnit(startValue) && (startValue += _config.units[p]); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.\n\n _isString(startValue) && ~startValue.indexOf(\"random(\") && (startValue = _replaceRandom(startValue));\n (startValue + \"\").charAt(1) === \"=\" && (startValue = _get(target, p)); // can't work with relative values\n } else {\n startValue = _get(target, p);\n }\n\n startNum = parseFloat(startValue);\n relative = type === \"string\" && endValue.charAt(1) === \"=\" ? +(endValue.charAt(0) + \"1\") : 0;\n relative && (endValue = endValue.substr(2));\n endNum = parseFloat(endValue);\n\n if (p in _propertyAliases) {\n if (p === \"autoAlpha\") {\n //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.\n if (startNum === 1 && _get(target, \"visibility\") === \"hidden\" && endNum) {\n //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n startNum = 0;\n }\n\n _addNonTweeningPT(this, style, \"visibility\", startNum ? \"inherit\" : \"hidden\", endNum ? \"inherit\" : \"hidden\", !endNum);\n }\n\n if (p !== \"scale\" && p !== \"transform\") {\n p = _propertyAliases[p];\n ~p.indexOf(\",\") && (p = p.split(\",\")[0]);\n }\n }\n\n isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---\n\n if (isTransformRelated) {\n if (!transformPropTween) {\n cache = target._gsap;\n cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:\"translateX(50vw)\"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.\n\n smooth = vars.smoothOrigin !== false && cache.smooth;\n transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)\n\n transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.\n }\n\n if (p === \"scale\") {\n this._pt = new PropTween(this._pt, cache, \"scaleY\", cache.scaleY, (relative ? relative * endNum : endNum - cache.scaleY) || 0);\n props.push(\"scaleY\", p);\n p += \"X\";\n } else if (p === \"transformOrigin\") {\n endValue = _convertKeywordsToPercentages(endValue); //in case something like \"left top\" or \"bottom right\" is passed in. Convert to percentages.\n\n if (cache.svg) {\n _applySVGOrigin(target, endValue, 0, smooth, 0, this);\n } else {\n endUnit = parseFloat(endValue.split(\" \")[2]) || 0; //handle the zOrigin separately!\n\n endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \"zOrigin\", cache.zOrigin, endUnit);\n\n _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\n }\n\n continue;\n } else if (p === \"svgOrigin\") {\n _applySVGOrigin(target, endValue, 1, smooth, 0, this);\n\n continue;\n } else if (p in _rotationalProperties) {\n _addRotationalPropTween(this, cache, p, startNum, endValue, relative);\n\n continue;\n } else if (p === \"smoothOrigin\") {\n _addNonTweeningPT(this, cache, \"smooth\", cache.smooth, endValue);\n\n continue;\n } else if (p === \"force3D\") {\n cache[p] = endValue;\n continue;\n } else if (p === \"transform\") {\n _addRawTransformPTs(this, endValue, target);\n\n continue;\n }\n } else if (!(p in style)) {\n p = _checkPropPrefix(p) || p;\n }\n\n if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\n startUnit = (startValue + \"\").substr((startNum + \"\").length);\n endNum || (endNum = 0); // protect against NaN\n\n endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);\n startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\n this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, relative ? relative * endNum : endNum - startNum, !isTransformRelated && (endUnit === \"px\" || p === \"zIndex\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\n this._pt.u = endUnit || 0;\n\n if (startUnit !== endUnit && endUnit !== \"%\") {\n //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a \"b\" (beginning) property and point to a render method that handles that. (performance optimization)\n this._pt.b = startValue;\n this._pt.r = _renderCSSPropWithBeginning;\n }\n } else if (!(p in style)) {\n if (p in target) {\n //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.\n this.add(target, p, startValue || target[p], endValue, index, targets);\n } else {\n _missingPlugin(p, endValue);\n\n continue;\n }\n } else {\n _tweenComplexCSSString.call(this, target, p, startValue, endValue);\n }\n\n props.push(p);\n }\n }\n\n hasPriority && _sortPropTweensByPriority(this);\n },\n get: _get,\n aliases: _propertyAliases,\n getSetter: function getSetter(target, property, plugin) {\n //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like \"x\" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.\n var p = _propertyAliases[property];\n p && p.indexOf(\",\") < 0 && (property = p);\n return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \"x\")) ? plugin && _recentSetterPlugin === plugin ? property === \"scale\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \"scale\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\"-\") ? _setterCSSProp : _getSetter(target, property);\n },\n core: {\n _removeProperty: _removeProperty,\n _getMatrix: _getMatrix\n }\n};\ngsap.utils.checkPrefix = _checkPropPrefix;\n\n(function (positionAndScale, rotation, others, aliases) {\n var all = _forEachName(positionAndScale + \",\" + rotation + \",\" + others, function (name) {\n _transformProps[name] = 1;\n });\n\n _forEachName(rotation, function (name) {\n _config.units[name] = \"deg\";\n _rotationalProperties[name] = 1;\n });\n\n _propertyAliases[all[13]] = positionAndScale + \",\" + rotation;\n\n _forEachName(aliases, function (name) {\n var split = name.split(\":\");\n _propertyAliases[split[1]] = all[split[0]];\n });\n})(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\", \"rotation,rotationX,rotationY,skewX,skewY\", \"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\", \"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");\n\n_forEachName(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\", function (name) {\n _config.units[name] = \"px\";\n});\n\ngsap.registerPlugin(CSSPlugin);\nexport { CSSPlugin as default, _getBBox, _createElement, _checkPropPrefix as checkPrefix };","import { gsap, Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ, TweenLite, TimelineLite, TimelineMax } from \"./gsap-core.js\";\nimport { CSSPlugin } from \"./CSSPlugin.js\";\nvar gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,\n // to protect from tree shaking\nTweenMaxWithCSS = gsapWithCSS.core.Tween;\nexport { gsapWithCSS as gsap, gsapWithCSS as default, CSSPlugin, TweenMaxWithCSS as TweenMax, TweenLite, TimelineMax, TimelineLite, Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || defaults.transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","module.exports = {\n \"version\": \"0.23.0\"\n};","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/*!\n * ScrollTrigger 3.8.0\n * https://greensock.com\n *\n * @license Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar gsap,\n _coreInitted,\n _win,\n _doc,\n _docEl,\n _body,\n _root,\n _resizeDelay,\n _raf,\n _request,\n _toArray,\n _clamp,\n _time2,\n _syncInterval,\n _refreshing,\n _pointerIsDown,\n _transformProp,\n _i,\n _prevWidth,\n _prevHeight,\n _autoRefresh,\n _sort,\n _suppressOverwrites,\n _ignoreResize,\n _limitCallbacks,\n // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.\n_startup = 1,\n _proxies = [],\n _scrollers = [],\n _getTime = Date.now,\n _time1 = _getTime(),\n _lastScrollTime = 0,\n _enabled = 1,\n _passThrough = function _passThrough(v) {\n return v;\n},\n _getTarget = function _getTarget(t) {\n return _toArray(t)[0] || (_isString(t) ? console.warn(\"Element not found:\", t) : null);\n},\n _round = function _round(value) {\n return Math.round(value * 100000) / 100000 || 0;\n},\n _windowExists = function _windowExists() {\n return typeof window !== \"undefined\";\n},\n _getGSAP = function _getGSAP() {\n return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\n},\n _isViewport = function _isViewport(e) {\n return !!~_root.indexOf(e);\n},\n _getProxyProp = function _getProxyProp(element, property) {\n return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];\n},\n _getScrollFunc = function _getScrollFunc(element, _ref) {\n var s = _ref.s,\n sc = _ref.sc;\n\n // we store the scroller functions in a alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a \".rec\" property in order to revert to that after refreshing to ensure things don't shift around.\n var i = _scrollers.indexOf(element),\n offset = sc === _vertical.sc ? 1 : 2;\n\n !~i && (i = _scrollers.push(element) - 1);\n return _scrollers[i + offset] || (_scrollers[i + offset] = _getProxyProp(element, s) || (_isViewport(element) ? sc : function (value) {\n return arguments.length ? element[s] = value : element[s];\n }));\n},\n _getBoundsFunc = function _getBoundsFunc(element) {\n return _getProxyProp(element, \"getBoundingClientRect\") || (_isViewport(element) ? function () {\n _winOffsets.width = _win.innerWidth;\n _winOffsets.height = _win.innerHeight;\n return _winOffsets;\n } : function () {\n return _getBounds(element);\n });\n},\n _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref2) {\n var d = _ref2.d,\n d2 = _ref2.d2,\n a = _ref2.a;\n return (a = _getProxyProp(scroller, \"getBoundingClientRect\")) ? function () {\n return a()[d];\n } : function () {\n return (isViewport ? _win[\"inner\" + d2] : scroller[\"client\" + d2]) || 0;\n };\n},\n _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {\n return !isViewport || ~_proxies.indexOf(element) ? _getBoundsFunc(element) : function () {\n return _winOffsets;\n };\n},\n _maxScroll = function _maxScroll(element, _ref3) {\n var s = _ref3.s,\n d2 = _ref3.d2,\n d = _ref3.d,\n a = _ref3.a;\n return (s = \"scroll\" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? (_body[s] || _docEl[s]) - (_win[\"inner\" + d2] || _docEl[\"client\" + d2] || _body[\"client\" + d2]) : element[s] - element[\"offset\" + d2];\n},\n _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {\n for (var i = 0; i < _autoRefresh.length; i += 3) {\n (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);\n }\n},\n _isString = function _isString(value) {\n return typeof value === \"string\";\n},\n _isFunction = function _isFunction(value) {\n return typeof value === \"function\";\n},\n _isNumber = function _isNumber(value) {\n return typeof value === \"number\";\n},\n _isObject = function _isObject(value) {\n return typeof value === \"object\";\n},\n _callIfFunc = function _callIfFunc(value) {\n return _isFunction(value) && value();\n},\n _combineFunc = function _combineFunc(f1, f2) {\n return function () {\n var result1 = _callIfFunc(f1),\n result2 = _callIfFunc(f2);\n\n return function () {\n _callIfFunc(result1);\n\n _callIfFunc(result2);\n };\n };\n},\n _endAnimation = function _endAnimation(animation, reversed, pause) {\n return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause();\n},\n _callback = function _callback(self, func) {\n var result = func(self);\n result && result.totalTime && (self.callbackAnimation = result);\n},\n _abs = Math.abs,\n _scrollLeft = \"scrollLeft\",\n _scrollTop = \"scrollTop\",\n _left = \"left\",\n _top = \"top\",\n _right = \"right\",\n _bottom = \"bottom\",\n _width = \"width\",\n _height = \"height\",\n _Right = \"Right\",\n _Left = \"Left\",\n _Top = \"Top\",\n _Bottom = \"Bottom\",\n _padding = \"padding\",\n _margin = \"margin\",\n _Width = \"Width\",\n _Height = \"Height\",\n _px = \"px\",\n _horizontal = {\n s: _scrollLeft,\n p: _left,\n p2: _Left,\n os: _right,\n os2: _Right,\n d: _width,\n d2: _Width,\n a: \"x\",\n sc: function sc(value) {\n return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0;\n }\n},\n _vertical = {\n s: _scrollTop,\n p: _top,\n p2: _Top,\n os: _bottom,\n os2: _Bottom,\n d: _height,\n d2: _Height,\n a: \"y\",\n op: _horizontal,\n sc: function sc(value) {\n return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0;\n }\n},\n _getComputedStyle = function _getComputedStyle(element) {\n return _win.getComputedStyle(element);\n},\n _makePositionable = function _makePositionable(element) {\n // if the element already has position: absolute or fixed, leave that, otherwise make it position: relative\n var position = _getComputedStyle(element).position;\n\n element.style.position = position === \"absolute\" || position === \"fixed\" ? position : \"relative\";\n},\n _setDefaults = function _setDefaults(obj, defaults) {\n for (var p in defaults) {\n p in obj || (obj[p] = defaults[p]);\n }\n\n return obj;\n},\n _getBounds = function _getBounds(element, withoutTransforms) {\n var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== \"matrix(1, 0, 0, 1, 0, 0)\" && gsap.to(element, {\n x: 0,\n y: 0,\n xPercent: 0,\n yPercent: 0,\n rotation: 0,\n rotationX: 0,\n rotationY: 0,\n scale: 1,\n skewX: 0,\n skewY: 0\n }).progress(1),\n bounds = element.getBoundingClientRect();\n tween && tween.progress(0).kill();\n return bounds;\n},\n _getSize = function _getSize(element, _ref4) {\n var d2 = _ref4.d2;\n return element[\"offset\" + d2] || element[\"client\" + d2] || 0;\n},\n _getLabelRatioArray = function _getLabelRatioArray(timeline) {\n var a = [],\n labels = timeline.labels,\n duration = timeline.duration(),\n p;\n\n for (p in labels) {\n a.push(labels[p] / duration);\n }\n\n return a;\n},\n _getClosestLabel = function _getClosestLabel(animation) {\n return function (value) {\n return gsap.utils.snap(_getLabelRatioArray(animation), value);\n };\n},\n _snapDirectional = function _snapDirectional(snapIncrementOrArray) {\n var snap = gsap.utils.snap(snapIncrementOrArray),\n a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function (a, b) {\n return a - b;\n });\n return a ? function (value, direction) {\n var i;\n\n if (!direction) {\n return snap(value);\n }\n\n if (direction > 0) {\n value -= 1e-4; // to avoid rounding errors. If we're too strict, it might snap forward, then immediately again, and again.\n\n for (i = 0; i < a.length; i++) {\n if (a[i] >= value) {\n return a[i];\n }\n }\n\n return a[i - 1];\n } else {\n i = a.length;\n value += 1e-4;\n\n while (i--) {\n if (a[i] <= value) {\n return a[i];\n }\n }\n }\n\n return a[0];\n } : function (value, direction) {\n var snapped = snap(value);\n return !direction || Math.abs(snapped - value) < 0.001 || snapped - value < 0 === direction < 0 ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);\n };\n},\n _getLabelAtDirection = function _getLabelAtDirection(timeline) {\n return function (value, st) {\n return _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction);\n };\n},\n _multiListener = function _multiListener(func, element, types, callback) {\n return types.split(\",\").forEach(function (type) {\n return func(element, type, callback);\n });\n},\n _addListener = function _addListener(element, type, func) {\n return element.addEventListener(type, func, {\n passive: true\n });\n},\n _removeListener = function _removeListener(element, type, func) {\n return element.removeEventListener(type, func);\n},\n _markerDefaults = {\n startColor: \"green\",\n endColor: \"red\",\n indent: 0,\n fontSize: \"16px\",\n fontWeight: \"normal\"\n},\n _defaults = {\n toggleActions: \"play\",\n anticipatePin: 0\n},\n _keywords = {\n top: 0,\n left: 0,\n center: 0.5,\n bottom: 1,\n right: 1\n},\n _offsetToPx = function _offsetToPx(value, size) {\n if (_isString(value)) {\n var eqIndex = value.indexOf(\"=\"),\n relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;\n\n if (~eqIndex) {\n value.indexOf(\"%\") > eqIndex && (relative *= size / 100);\n value = value.substr(0, eqIndex - 1);\n }\n\n value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf(\"%\") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);\n }\n\n return value;\n},\n _createMarker = function _createMarker(type, name, container, direction, _ref5, offset, matchWidthEl, containerAnimation) {\n var startColor = _ref5.startColor,\n endColor = _ref5.endColor,\n fontSize = _ref5.fontSize,\n indent = _ref5.indent,\n fontWeight = _ref5.fontWeight;\n\n var e = _doc.createElement(\"div\"),\n useFixedPosition = _isViewport(container) || _getProxyProp(container, \"pinType\") === \"fixed\",\n isScroller = type.indexOf(\"scroller\") !== -1,\n parent = useFixedPosition ? _body : container,\n isStart = type.indexOf(\"start\") !== -1,\n color = isStart ? startColor : endColor,\n css = \"border-color:\" + color + \";font-size:\" + fontSize + \";color:\" + color + \";font-weight:\" + fontWeight + \";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;\";\n\n css += \"position:\" + ((isScroller || containerAnimation) && useFixedPosition ? \"fixed;\" : \"absolute;\");\n (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + \":\" + (offset + parseFloat(indent)) + \"px;\");\n matchWidthEl && (css += \"box-sizing:border-box;text-align:left;width:\" + matchWidthEl.offsetWidth + \"px;\");\n e._isStart = isStart;\n e.setAttribute(\"class\", \"gsap-marker-\" + type + (name ? \" marker-\" + name : \"\"));\n e.style.cssText = css;\n e.innerText = name || name === 0 ? type + \"-\" + name : type;\n parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);\n e._offset = e[\"offset\" + direction.op.d2];\n\n _positionMarker(e, 0, direction, isStart);\n\n return e;\n},\n _positionMarker = function _positionMarker(marker, start, direction, flipped) {\n var vars = {\n display: \"block\"\n },\n side = direction[flipped ? \"os2\" : \"p2\"],\n oppositeSide = direction[flipped ? \"p2\" : \"os2\"];\n marker._isFlipped = flipped;\n vars[direction.a + \"Percent\"] = flipped ? -100 : 0;\n vars[direction.a] = flipped ? \"1px\" : 0;\n vars[\"border\" + side + _Width] = 1;\n vars[\"border\" + oppositeSide + _Width] = 0;\n vars[direction.p] = start + \"px\";\n gsap.set(marker, vars);\n},\n _triggers = [],\n _ids = {},\n _sync = function _sync() {\n return _getTime() - _lastScrollTime > 20 && _updateAll();\n},\n _onScroll = function _onScroll() {\n var time = _getTime();\n\n if (_lastScrollTime !== time) {\n _updateAll();\n\n _lastScrollTime || _dispatch(\"scrollStart\");\n _lastScrollTime = time;\n } else if (!_request) {\n _request = _raf(_updateAll);\n }\n},\n _onResize = function _onResize() {\n return !_refreshing && !_ignoreResize && !_doc.fullscreenElement && _resizeDelay.restart(true);\n},\n // ignore resizes triggered by refresh()\n_listeners = {},\n _emptyArray = [],\n _media = [],\n _creatingMedia,\n // when ScrollTrigger.matchMedia() is called, we record the current media key here (like \"(min-width: 800px)\") so that we can assign it to everything that's created during that call. Then we can revert just those when necessary. In the ScrollTrigger's init() call, the _creatingMedia is recorded as a \"media\" property on the instance.\n_lastMediaTick,\n _onMediaChange = function _onMediaChange(e) {\n var tick = gsap.ticker.frame,\n matches = [],\n i = 0,\n index;\n\n if (_lastMediaTick !== tick || _startup) {\n _revertAll();\n\n for (; i < _media.length; i += 4) {\n index = _win.matchMedia(_media[i]).matches;\n\n if (index !== _media[i + 3]) {\n // note: some browsers fire the matchMedia event multiple times, like when going full screen, so we shouldn't call the function multiple times. Check to see if it's already matched.\n _media[i + 3] = index;\n index ? matches.push(i) : _revertAll(1, _media[i]) || _isFunction(_media[i + 2]) && _media[i + 2](); // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\n }\n }\n\n _revertRecorded(); // in case killing/reverting any of the animations actually added inline styles back.\n\n\n for (i = 0; i < matches.length; i++) {\n index = matches[i];\n _creatingMedia = _media[index];\n _media[index + 2] = _media[index + 1](e);\n }\n\n _creatingMedia = 0;\n _coreInitted && _refreshAll(0, 1);\n _lastMediaTick = tick;\n\n _dispatch(\"matchMedia\");\n }\n},\n _softRefresh = function _softRefresh() {\n return _removeListener(ScrollTrigger, \"scrollEnd\", _softRefresh) || _refreshAll(true);\n},\n _dispatch = function _dispatch(type) {\n return _listeners[type] && _listeners[type].map(function (f) {\n return f();\n }) || _emptyArray;\n},\n _savedStyles = [],\n // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.\n_revertRecorded = function _revertRecorded(media) {\n for (var i = 0; i < _savedStyles.length; i += 5) {\n if (!media || _savedStyles[i + 4] === media) {\n _savedStyles[i].style.cssText = _savedStyles[i + 1];\n _savedStyles[i].getBBox && _savedStyles[i].setAttribute(\"transform\", _savedStyles[i + 2] || \"\");\n _savedStyles[i + 3].uncache = 1;\n }\n }\n},\n _revertAll = function _revertAll(kill, media) {\n var trigger;\n\n for (_i = 0; _i < _triggers.length; _i++) {\n trigger = _triggers[_i];\n\n if (!media || trigger.media === media) {\n if (kill) {\n trigger.kill(1);\n } else {\n trigger.revert();\n }\n }\n }\n\n media && _revertRecorded(media);\n media || _dispatch(\"revert\");\n},\n _clearScrollMemory = function _clearScrollMemory() {\n return _scrollers.forEach(function (obj) {\n return typeof obj === \"function\" && (obj.rec = 0);\n });\n},\n // zero-out all the recorded scroll positions. Don't use _triggers because if, for example, .matchMedia() is used to create some ScrollTriggers and then the user resizes and it removes ALL ScrollTriggers, and then go back to a size where there are ScrollTriggers, it would have kept the position(s) saved from the initial state.\n_refreshingAll,\n _refreshAll = function _refreshAll(force, skipRevert) {\n if (_lastScrollTime && !force) {\n _addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\n return;\n }\n\n _refreshingAll = true;\n\n var refreshInits = _dispatch(\"refreshInit\");\n\n _sort && ScrollTrigger.sort();\n skipRevert || _revertAll();\n\n _triggers.forEach(function (t) {\n return t.refresh();\n }); // don't loop with _i because during a refresh() someone could call ScrollTrigger.update() which would iterate through _i resulting in a skip.\n\n\n refreshInits.forEach(function (result) {\n return result && result.render && result.render(-1);\n }); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.\n\n _clearScrollMemory();\n\n _resizeDelay.pause();\n\n _refreshingAll = false;\n\n _dispatch(\"refresh\");\n},\n _lastScroll = 0,\n _direction = 1,\n _updateAll = function _updateAll() {\n if (!_refreshingAll) {\n var l = _triggers.length,\n time = _getTime(),\n recordVelocity = time - _time1 >= 50,\n scroll = l && _triggers[0].scroll();\n\n _direction = _lastScroll > scroll ? -1 : 1;\n _lastScroll = scroll;\n\n if (recordVelocity) {\n if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {\n _lastScrollTime = 0;\n\n _dispatch(\"scrollEnd\");\n }\n\n _time2 = _time1;\n _time1 = time;\n }\n\n if (_direction < 0) {\n _i = l;\n\n while (_i-- > 0) {\n _triggers[_i] && _triggers[_i].update(0, recordVelocity);\n }\n\n _direction = 1;\n } else {\n for (_i = 0; _i < l; _i++) {\n _triggers[_i] && _triggers[_i].update(0, recordVelocity);\n }\n }\n\n _request = 0;\n }\n},\n _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, \"display\", \"flexShrink\", \"float\", \"zIndex\", \"grid-column-start\", \"grid-column-end\", \"grid-row-start\", \"grid-row-end\", \"grid-area\", \"justify-self\", \"align-self\", \"place-self\"],\n _stateProps = _propNamesToCopy.concat([_width, _height, \"boxSizing\", \"max\" + _Width, \"max\" + _Height, \"position\", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),\n _swapPinOut = function _swapPinOut(pin, spacer, state) {\n _setState(state);\n\n var cache = pin._gsap;\n\n if (cache.spacerIsNative) {\n _setState(cache.spacerState);\n } else if (pin.parentNode === spacer) {\n var parent = spacer.parentNode;\n\n if (parent) {\n parent.insertBefore(pin, spacer);\n parent.removeChild(spacer);\n }\n }\n},\n _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {\n if (pin.parentNode !== spacer) {\n var i = _propNamesToCopy.length,\n spacerStyle = spacer.style,\n pinStyle = pin.style,\n p;\n\n while (i--) {\n p = _propNamesToCopy[i];\n spacerStyle[p] = cs[p];\n }\n\n spacerStyle.position = cs.position === \"absolute\" ? \"absolute\" : \"relative\";\n cs.display === \"inline\" && (spacerStyle.display = \"inline-block\");\n pinStyle[_bottom] = pinStyle[_right] = \"auto\";\n spacerStyle.overflow = \"visible\";\n spacerStyle.boxSizing = \"border-box\";\n spacerStyle[_width] = _getSize(pin, _horizontal) + _px;\n spacerStyle[_height] = _getSize(pin, _vertical) + _px;\n spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = \"0\";\n\n _setState(spacerState);\n\n pinStyle[_width] = pinStyle[\"max\" + _Width] = cs[_width];\n pinStyle[_height] = pinStyle[\"max\" + _Height] = cs[_height];\n pinStyle[_padding] = cs[_padding];\n pin.parentNode.insertBefore(spacer, pin);\n spacer.appendChild(pin);\n }\n},\n _capsExp = /([A-Z])/g,\n _setState = function _setState(state) {\n if (state) {\n var style = state.t.style,\n l = state.length,\n i = 0,\n p,\n value;\n (state.t._gsap || gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off\n\n for (; i < l; i += 2) {\n value = state[i + 1];\n p = state[i];\n\n if (value) {\n style[p] = value;\n } else if (style[p]) {\n style.removeProperty(p.replace(_capsExp, \"-$1\").toLowerCase());\n }\n }\n }\n},\n _getState = function _getState(element) {\n // returns an Array with alternating values like [property, value, property, value] and a \"t\" property pointing to the target (element). Makes it fast and cheap.\n var l = _stateProps.length,\n style = element.style,\n state = [],\n i = 0;\n\n for (; i < l; i++) {\n state.push(_stateProps[i], style[_stateProps[i]]);\n }\n\n state.t = element;\n return state;\n},\n _copyState = function _copyState(state, override, omitOffsets) {\n var result = [],\n l = state.length,\n i = omitOffsets ? 8 : 0,\n // skip top, left, right, bottom if omitOffsets is true\n p;\n\n for (; i < l; i += 2) {\n p = state[i];\n result.push(p, p in override ? override[p] : state[i + 1]);\n }\n\n result.t = state.t;\n return result;\n},\n _winOffsets = {\n left: 0,\n top: 0\n},\n // // potential future feature (?) Allow users to calculate where a trigger hits (scroll position) like getScrollPosition(\"#id\", \"top bottom\")\n// _getScrollPosition = (trigger, position, {scroller, containerAnimation, horizontal}) => {\n// \tscroller = _getTarget(scroller || _win);\n// \tlet direction = horizontal ? _horizontal : _vertical,\n// \t\tisViewport = _isViewport(scroller);\n// \t_getSizeFunc(scroller, isViewport, direction);\n// \treturn _parsePosition(position, _getTarget(trigger), _getSizeFunc(scroller, isViewport, direction)(), direction, _getScrollFunc(scroller, direction)(), 0, 0, 0, _getOffsetsFunc(scroller, isViewport)(), isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\"border\" + direction.p2 + _Width]) || 0, 0, containerAnimation ? containerAnimation.duration() : _maxScroll(scroller), containerAnimation);\n// },\n_parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation) {\n _isFunction(value) && (value = value(self));\n\n if (_isString(value) && value.substr(0, 3) === \"max\") {\n value = scrollerMax + (value.charAt(4) === \"=\" ? _offsetToPx(\"0\" + value.substr(3), scrollerSize) : 0);\n }\n\n var time = containerAnimation ? containerAnimation.time() : 0,\n p1,\n p2,\n element;\n containerAnimation && containerAnimation.seek(0);\n\n if (!_isNumber(value)) {\n _isFunction(trigger) && (trigger = trigger(self));\n var offsets = value.split(\" \"),\n bounds,\n localOffset,\n globalOffset,\n display;\n element = _getTarget(trigger) || _body;\n bounds = _getBounds(element) || {};\n\n if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === \"none\") {\n // if display is \"none\", it won't report getBoundingClientRect() properly\n display = element.style.display;\n element.style.display = \"block\";\n bounds = _getBounds(element);\n display ? element.style.display = display : element.style.removeProperty(\"display\");\n }\n\n localOffset = _offsetToPx(offsets[0], bounds[direction.d]);\n globalOffset = _offsetToPx(offsets[1] || \"0\", scrollerSize);\n value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;\n markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);\n scrollerSize -= scrollerSize - globalOffset; // adjust for the marker\n } else if (markerScroller) {\n _positionMarker(markerScroller, scrollerSize, direction, true);\n }\n\n if (marker) {\n var position = value + scrollerSize,\n isStart = marker._isStart;\n p1 = \"scroll\" + direction.d2;\n\n _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[p1], _docEl[p1]) : marker.parentNode[p1]) <= position + 1);\n\n if (useFixedPosition) {\n scrollerBounds = _getBounds(markerScroller);\n useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);\n }\n }\n\n if (containerAnimation && element) {\n p1 = _getBounds(element);\n containerAnimation.seek(scrollerMax);\n p2 = _getBounds(element);\n containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];\n value = value / containerAnimation._caScrollDist * scrollerMax;\n }\n\n containerAnimation && containerAnimation.seek(time);\n return containerAnimation ? value : Math.round(value);\n},\n _prefixExp = /(?:webkit|moz|length|cssText|inset)/i,\n _reparent = function _reparent(element, parent, top, left) {\n if (element.parentNode !== parent) {\n var style = element.style,\n p,\n cs;\n\n if (parent === _body) {\n element._stOrig = style.cssText; // record original inline styles so we can revert them later\n\n cs = _getComputedStyle(element);\n\n for (p in cs) {\n // must copy all relevant styles to ensure that nothing changes visually when we reparent to the . Skip the vendor prefixed ones.\n if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === \"string\" && p !== \"0\") {\n style[p] = cs[p];\n }\n }\n\n style.top = top;\n style.left = left;\n } else {\n style.cssText = element._stOrig;\n }\n\n gsap.core.getCache(element).uncache = 1;\n parent.appendChild(element);\n }\n},\n // _mergeAnimations = animations => {\n// \tlet tl = gsap.timeline({smoothChildTiming: true}).startTime(Math.min(...animations.map(a => a.globalTime(0))));\n// \tanimations.forEach(a => {let time = a.totalTime(); tl.add(a); a.totalTime(time); });\n// \ttl.smoothChildTiming = false;\n// \treturn tl;\n// },\n// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)\n_getTweenCreator = function _getTweenCreator(scroller, direction) {\n var getScroll = _getScrollFunc(scroller, direction),\n prop = \"_scroll\" + direction.p2,\n // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.\n lastScroll1,\n lastScroll2,\n getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {\n var tween = getTween.tween,\n onComplete = vars.onComplete,\n modifiers = {};\n tween && tween.kill();\n lastScroll1 = Math.round(initialValue);\n vars[prop] = scrollTo;\n vars.modifiers = modifiers;\n\n modifiers[prop] = function (value) {\n value = _round(getScroll()); // round because in some [very uncommon] Windows environments, it can get reported with decimals even though it was set without.\n\n if (value !== lastScroll1 && value !== lastScroll2 && Math.abs(value - lastScroll1) > 2) {\n // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124.\n tween.kill();\n getTween.tween = 0;\n } else {\n value = initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio;\n }\n\n lastScroll2 = lastScroll1;\n return lastScroll1 = _round(value);\n };\n\n vars.onComplete = function () {\n getTween.tween = 0;\n onComplete && onComplete.call(tween);\n };\n\n tween = getTween.tween = gsap.to(scroller, vars);\n return tween;\n };\n\n scroller[prop] = getScroll;\n scroller.addEventListener(\"wheel\", function () {\n return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);\n }, {\n passive: true\n }); // Windows machines handle mousewheel scrolling in chunks (like \"3 lines per scroll\") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a wheel event.\n\n return getTween;\n};\n\n_horizontal.op = _vertical;\nexport var ScrollTrigger = /*#__PURE__*/function () {\n function ScrollTrigger(vars, animation) {\n _coreInitted || ScrollTrigger.register(gsap) || console.warn(\"Please gsap.registerPlugin(ScrollTrigger)\");\n this.init(vars, animation);\n }\n\n var _proto = ScrollTrigger.prototype;\n\n _proto.init = function init(vars, animation) {\n this.progress = this.start = 0;\n this.vars && this.kill(1); // in case it's being initted again\n\n if (!_enabled) {\n this.update = this.refresh = this.kill = _passThrough;\n return;\n }\n\n vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {\n trigger: vars\n } : vars, _defaults);\n\n var _vars = vars,\n onUpdate = _vars.onUpdate,\n toggleClass = _vars.toggleClass,\n id = _vars.id,\n onToggle = _vars.onToggle,\n onRefresh = _vars.onRefresh,\n scrub = _vars.scrub,\n trigger = _vars.trigger,\n pin = _vars.pin,\n pinSpacing = _vars.pinSpacing,\n invalidateOnRefresh = _vars.invalidateOnRefresh,\n anticipatePin = _vars.anticipatePin,\n onScrubComplete = _vars.onScrubComplete,\n onSnapComplete = _vars.onSnapComplete,\n once = _vars.once,\n snap = _vars.snap,\n pinReparent = _vars.pinReparent,\n pinSpacer = _vars.pinSpacer,\n containerAnimation = _vars.containerAnimation,\n fastScrollEnd = _vars.fastScrollEnd,\n preventOverlaps = _vars.preventOverlaps,\n direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _horizontal : _vertical,\n isToggle = !scrub && scrub !== 0,\n scroller = _getTarget(vars.scroller || _win),\n scrollerCache = gsap.core.getCache(scroller),\n isViewport = _isViewport(scroller),\n useFixedPosition = (\"pinType\" in vars ? vars.pinType : _getProxyProp(scroller, \"pinType\") || isViewport && \"fixed\") === \"fixed\",\n callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],\n toggleActions = isToggle && vars.toggleActions.split(\" \"),\n markers = \"markers\" in vars ? vars.markers : _defaults.markers,\n borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\"border\" + direction.p2 + _Width]) || 0,\n self = this,\n onRefreshInit = vars.onRefreshInit && function () {\n return vars.onRefreshInit(self);\n },\n getScrollerSize = _getSizeFunc(scroller, isViewport, direction),\n getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),\n lastSnap = 0,\n scrollFunc = _getScrollFunc(scroller, direction),\n tweenTo,\n pinCache,\n snapFunc,\n scroll1,\n scroll2,\n start,\n end,\n markerStart,\n markerEnd,\n markerStartTrigger,\n markerEndTrigger,\n markerVars,\n change,\n pinOriginalState,\n pinActiveState,\n pinState,\n spacer,\n offset,\n pinGetter,\n pinSetter,\n pinStart,\n pinChange,\n spacingStart,\n spacerState,\n markerStartSetter,\n markerEndSetter,\n cs,\n snap1,\n snap2,\n scrubTween,\n scrubSmooth,\n snapDurClamp,\n snapDelayedCall,\n prevProgress,\n prevScroll,\n prevAnimProgress,\n caMarkerSetter;\n\n self.media = _creatingMedia;\n anticipatePin *= 45;\n self.scroller = scroller;\n self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;\n scroll1 = scrollFunc();\n self.vars = vars;\n animation = animation || vars.animation;\n \"refreshPriority\" in vars && (_sort = 1);\n scrollerCache.tweenScroll = scrollerCache.tweenScroll || {\n top: _getTweenCreator(scroller, _vertical),\n left: _getTweenCreator(scroller, _horizontal)\n };\n self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];\n\n if (animation) {\n animation.vars.lazy = false;\n animation._initted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.render(0, true, true);\n self.animation = animation.pause();\n animation.scrollTrigger = self;\n scrubSmooth = _isNumber(scrub) && scrub;\n scrubSmooth && (scrubTween = gsap.to(animation, {\n ease: \"power3\",\n duration: scrubSmooth,\n onComplete: function onComplete() {\n return onScrubComplete && onScrubComplete(self);\n }\n }));\n snap1 = 0;\n id || (id = animation.vars.id);\n }\n\n _triggers.push(self);\n\n if (snap) {\n if (!_isObject(snap) || snap.push) {\n snap = {\n snapTo: snap\n };\n }\n\n \"scrollBehavior\" in _body.style && gsap.set(isViewport ? [_body, _docEl] : scroller, {\n scrollBehavior: \"auto\"\n }); // smooth scrolling doesn't work with snap.\n\n snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === \"labels\" ? _getClosestLabel(animation) : snap.snapTo === \"labelsDirectional\" ? _getLabelAtDirection(animation) : snap.directional !== false ? function (value, st) {\n return _snapDirectional(snap.snapTo)(value, st.direction);\n } : gsap.utils.snap(snap.snapTo);\n snapDurClamp = snap.duration || {\n min: 0.1,\n max: 2\n };\n snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);\n snapDelayedCall = gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {\n if (Math.abs(self.getVelocity()) < 10 && !_pointerIsDown && lastSnap !== scrollFunc()) {\n var totalProgress = animation && !isToggle ? animation.totalProgress() : self.progress,\n velocity = (totalProgress - snap2) / (_getTime() - _time2) * 1000 || 0,\n change1 = gsap.utils.clamp(-self.progress, 1 - self.progress, _abs(velocity / 2) * velocity / 0.185),\n naturalEnd = self.progress + (snap.inertia === false ? 0 : change1),\n endValue = _clamp(0, 1, snapFunc(naturalEnd, self)),\n scroll = scrollFunc(),\n endScroll = Math.round(start + endValue * change),\n _snap = snap,\n onStart = _snap.onStart,\n _onInterrupt = _snap.onInterrupt,\n _onComplete = _snap.onComplete,\n tween = tweenTo.tween;\n\n if (scroll <= end && scroll >= start && endScroll !== scroll) {\n if (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) {\n // there's an overlapping snap! So we must figure out which one is closer and let that tween live.\n return;\n }\n\n if (snap.inertia === false) {\n change1 = endValue - self.progress;\n }\n\n tweenTo(endScroll, {\n duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),\n ease: snap.ease || \"power3\",\n data: _abs(endScroll - scroll),\n // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.\n onInterrupt: function onInterrupt() {\n return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);\n },\n onComplete: function onComplete() {\n lastSnap = scrollFunc();\n snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;\n onSnapComplete && onSnapComplete(self);\n _onComplete && _onComplete(self);\n }\n }, scroll, change1 * change, endScroll - scroll - change1 * change);\n onStart && onStart(self, tweenTo.tween);\n }\n } else if (self.isActive) {\n snapDelayedCall.restart(true);\n }\n }).pause();\n }\n\n id && (_ids[id] = self);\n trigger = self.trigger = _getTarget(trigger || pin);\n pin = pin === true ? trigger : _getTarget(pin);\n _isString(toggleClass) && (toggleClass = {\n targets: trigger,\n className: toggleClass\n });\n\n if (pin) {\n pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && _getComputedStyle(pin.parentNode).display === \"flex\" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default.\n\n self.pin = pin;\n vars.force3D !== false && gsap.set(pin, {\n force3D: true\n });\n pinCache = gsap.core.getCache(pin);\n\n if (!pinCache.spacer) {\n // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the \"original\" pin state after it has already been affected by another ScrollTrigger.\n if (pinSpacer) {\n pinSpacer = _getTarget(pinSpacer);\n pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement); // for React & Angular\n\n pinCache.spacerIsNative = !!pinSpacer;\n pinSpacer && (pinCache.spacerState = _getState(pinSpacer));\n }\n\n pinCache.spacer = spacer = pinSpacer || _doc.createElement(\"div\");\n spacer.classList.add(\"pin-spacer\");\n id && spacer.classList.add(\"pin-spacer-\" + id);\n pinCache.pinState = pinOriginalState = _getState(pin);\n } else {\n pinOriginalState = pinCache.pinState;\n }\n\n self.spacer = spacer = pinCache.spacer;\n cs = _getComputedStyle(pin);\n spacingStart = cs[pinSpacing + direction.os2];\n pinGetter = gsap.getProperty(pin);\n pinSetter = gsap.quickSetter(pin, direction.a, _px); // pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = \"hidden\"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).\n\n _swapPinIn(pin, spacer, cs);\n\n pinState = _getState(pin);\n }\n\n if (markers) {\n markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;\n markerStartTrigger = _createMarker(\"scroller-start\", id, scroller, direction, markerVars, 0);\n markerEndTrigger = _createMarker(\"scroller-end\", id, scroller, direction, markerVars, 0, markerStartTrigger);\n offset = markerStartTrigger[\"offset\" + direction.op.d2];\n markerStart = _createMarker(\"start\", id, scroller, direction, markerVars, offset, 0, containerAnimation);\n markerEnd = _createMarker(\"end\", id, scroller, direction, markerVars, offset, 0, containerAnimation);\n containerAnimation && (caMarkerSetter = gsap.quickSetter([markerStart, markerEnd], direction.a, _px));\n\n if (!useFixedPosition && !(_proxies.length && _getProxyProp(scroller, \"fixedMarkers\") === true)) {\n _makePositionable(isViewport ? _body : scroller);\n\n gsap.set([markerStartTrigger, markerEndTrigger], {\n force3D: true\n });\n markerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);\n markerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);\n }\n }\n\n if (containerAnimation) {\n var oldOnUpdate = containerAnimation.vars.onUpdate,\n oldParams = containerAnimation.vars.onUpdateParams;\n containerAnimation.eventCallback(\"onUpdate\", function () {\n self.update(0, 0, 1);\n oldOnUpdate && oldOnUpdate.apply(oldParams || []);\n });\n }\n\n self.previous = function () {\n return _triggers[_triggers.indexOf(self) - 1];\n };\n\n self.next = function () {\n return _triggers[_triggers.indexOf(self) + 1];\n };\n\n self.revert = function (revert) {\n var r = revert !== false || !self.enabled,\n prevRefreshing = _refreshing;\n\n if (r !== self.isReverted) {\n if (r) {\n self.scroll.rec || (self.scroll.rec = scrollFunc());\n prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.\n\n prevProgress = self.progress;\n prevAnimProgress = animation && animation.progress();\n }\n\n markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\n return m.style.display = r ? \"none\" : \"block\";\n });\n r && (_refreshing = 1);\n self.update(r); // make sure the pin is back in its original position so that all the measurements are correct.\n\n _refreshing = prevRefreshing;\n pin && (r ? _swapPinOut(pin, spacer, pinOriginalState) : (!pinReparent || !self.isActive) && _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState));\n self.isReverted = r;\n }\n };\n\n self.refresh = function (soft, force) {\n if ((_refreshing || !self.enabled) && !force) {\n return;\n }\n\n if (pin && soft && _lastScrollTime) {\n _addListener(ScrollTrigger, \"scrollEnd\", _softRefresh);\n\n return;\n }\n\n _refreshing = 1;\n scrubTween && scrubTween.pause();\n invalidateOnRefresh && animation && animation.progress(0).invalidate();\n self.isReverted || self.revert();\n\n var size = getScrollerSize(),\n scrollerBounds = getScrollerOffsets(),\n max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction),\n offset = 0,\n otherPinOffset = 0,\n parsedEnd = vars.end,\n parsedEndTrigger = vars.endTrigger || trigger,\n parsedStart = vars.start || (vars.start === 0 || !trigger ? 0 : pin ? \"0 0\" : \"0 100%\"),\n pinnedContainer = vars.pinnedContainer && _getTarget(vars.pinnedContainer),\n triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,\n i = triggerIndex,\n cs,\n bounds,\n scroll,\n isVertical,\n override,\n curTrigger,\n curPin,\n oppositeScroll,\n initted,\n revertedPins;\n\n while (i--) {\n // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things \"rewind\" properly.\n curTrigger = _triggers[i];\n curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = 1); // if it's a timeline-based trigger that hasn't been fully initialized yet because it's waiting for 1 tick, just force the refresh() here, otherwise if it contains a pin that's supposed to affect other ScrollTriggers further down the page, they won't be adjusted properly.\n\n curPin = curTrigger.pin;\n\n if (curPin && (curPin === trigger || curPin === pin) && !curTrigger.isReverted) {\n revertedPins || (revertedPins = []);\n revertedPins.unshift(curTrigger); // we'll revert from first to last to make sure things reach their end state properly\n\n curTrigger.revert();\n }\n }\n\n _isFunction(parsedStart) && (parsedStart = parsedStart(self));\n start = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation) || (pin ? -0.001 : 0);\n _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));\n\n if (_isString(parsedEnd) && !parsedEnd.indexOf(\"+=\")) {\n if (~parsedEnd.indexOf(\" \")) {\n parsedEnd = (_isString(parsedStart) ? parsedStart.split(\" \")[0] : \"\") + parsedEnd;\n } else {\n offset = _offsetToPx(parsedEnd.substr(2), size);\n parsedEnd = _isString(parsedStart) ? parsedStart : start + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.\n\n parsedEndTrigger = trigger;\n }\n }\n\n end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? \"100% 0\" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation)) || -0.001;\n change = end - start || (start -= 0.01) && 0.001;\n offset = 0;\n i = triggerIndex;\n\n while (i--) {\n curTrigger = _triggers[i];\n curPin = curTrigger.pin;\n\n if (curPin && curTrigger.start - curTrigger._pinPush < start && !containerAnimation) {\n cs = curTrigger.end - curTrigger.start;\n (curPin === trigger || curPin === pinnedContainer) && !_isNumber(parsedStart) && (offset += cs); // numeric start values shouldn't be offset at all - treat them as absolute\n\n curPin === pin && (otherPinOffset += cs);\n }\n }\n\n start += offset;\n end += offset;\n self._pinPush = otherPinOffset;\n\n if (markerStart && offset) {\n // offset the markers if necessary\n cs = {};\n cs[direction.a] = \"+=\" + offset;\n pinnedContainer && (cs[direction.p] = \"-=\" + scrollFunc());\n gsap.set([markerStart, markerEnd], cs);\n }\n\n if (pin) {\n cs = _getComputedStyle(pin);\n isVertical = direction === _vertical;\n scroll = scrollFunc(); // recalculate because the triggers can affect the scroll\n\n pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;\n !max && end > 1 && ((isViewport ? _body : scroller).style[\"overflow-\" + direction.a] = \"scroll\"); // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://greensock.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/\n\n _swapPinIn(pin, spacer, cs);\n\n pinState = _getState(pin); // transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.\n\n bounds = _getBounds(pin, true);\n oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();\n\n if (pinSpacing) {\n spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];\n spacerState.t = spacer;\n i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;\n i && spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).\n\n _setState(spacerState);\n\n useFixedPosition && scrollFunc(prevScroll);\n }\n\n if (useFixedPosition) {\n override = {\n top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,\n left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,\n boxSizing: \"border-box\",\n position: \"fixed\"\n };\n override[_width] = override[\"max\" + _Width] = Math.ceil(bounds.width) + _px;\n override[_height] = override[\"max\" + _Height] = Math.ceil(bounds.height) + _px;\n override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = \"0\";\n override[_padding] = cs[_padding];\n override[_padding + _Top] = cs[_padding + _Top];\n override[_padding + _Right] = cs[_padding + _Right];\n override[_padding + _Bottom] = cs[_padding + _Bottom];\n override[_padding + _Left] = cs[_padding + _Left];\n pinActiveState = _copyState(pinOriginalState, override, pinReparent);\n }\n\n if (animation) {\n // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.\n initted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely.\n\n _suppressOverwrites(1);\n\n animation.render(animation.duration(), true, true);\n pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;\n change !== pinChange && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.\n\n animation.render(0, true, true);\n initted || animation.invalidate();\n\n _suppressOverwrites(0);\n } else {\n pinChange = change;\n }\n } else if (trigger && scrollFunc() && !containerAnimation) {\n // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()\n bounds = trigger.parentNode;\n\n while (bounds && bounds !== _body) {\n if (bounds._pinOffset) {\n start -= bounds._pinOffset;\n end -= bounds._pinOffset;\n }\n\n bounds = bounds.parentNode;\n }\n }\n\n revertedPins && revertedPins.forEach(function (t) {\n return t.revert(false);\n });\n self.start = start;\n self.end = end;\n scroll1 = scroll2 = scrollFunc(); // reset velocity\n\n if (!containerAnimation) {\n scroll1 < prevScroll && scrollFunc(prevScroll);\n self.scroll.rec = 0;\n }\n\n self.revert(false);\n _refreshing = 0;\n animation && isToggle && animation._initted && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh().\n\n if (prevProgress !== self.progress) {\n // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.\n animation && !isToggle && animation.totalProgress(prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.\n\n self.progress = prevProgress;\n self.update(0, 0, 1);\n }\n\n pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));\n onRefresh && onRefresh(self);\n };\n\n self.getVelocity = function () {\n return (scrollFunc() - scroll2) / (_getTime() - _time2) * 1000 || 0;\n };\n\n self.endAnimation = function () {\n _endAnimation(self.callbackAnimation);\n\n if (animation) {\n scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1);\n }\n };\n\n self.getTrailing = function (name) {\n var i = _triggers.indexOf(self),\n a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1);\n\n return _isString(name) ? a.filter(function (t) {\n return t.vars.preventOverlaps === name;\n }) : a;\n };\n\n self.update = function (reset, recordVelocity, forceFake) {\n if (containerAnimation && !forceFake && !reset) {\n return;\n }\n\n var scroll = self.scroll(),\n p = reset ? 0 : (scroll - start) / change,\n clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,\n prevProgress = self.progress,\n isActive,\n wasActive,\n toggleState,\n action,\n stateChanged,\n toggled,\n isAtMax,\n isTakingAction;\n\n if (recordVelocity) {\n scroll2 = scroll1;\n scroll1 = containerAnimation ? scrollFunc() : scroll;\n\n if (snap) {\n snap2 = snap1;\n snap1 = animation && !isToggle ? animation.totalProgress() : clipped;\n }\n } // anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).\n\n\n anticipatePin && !clipped && pin && !_refreshing && !_startup && _lastScrollTime && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin && (clipped = 0.0001);\n\n if (clipped !== prevProgress && self.enabled) {\n isActive = self.isActive = !!clipped && clipped < 1;\n wasActive = !!prevProgress && prevProgress < 1;\n toggled = isActive !== wasActive;\n stateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)\n\n self.direction = clipped > prevProgress ? 1 : -1;\n self.progress = clipped;\n\n if (stateChanged && !_refreshing) {\n toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.\n\n if (isToggle) {\n action = !toggled && toggleActions[toggleState + 1] !== \"none\" && toggleActions[toggleState + 1] || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the \"enter\" action, we should switch to the \"leave\" in this case (but only if one is defined)\n\n isTakingAction = animation && (action === \"complete\" || action === \"reset\" || action in animation);\n }\n }\n\n preventOverlaps && toggled && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function (t) {\n return t.endAnimation();\n }));\n\n if (!isToggle) {\n if (scrubTween && !_refreshing && !_startup) {\n scrubTween.vars.totalProgress = clipped;\n scrubTween.invalidate().restart();\n } else if (animation) {\n animation.totalProgress(clipped, !!_refreshing);\n }\n }\n\n if (pin) {\n reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);\n\n if (!useFixedPosition) {\n pinSetter(pinStart + pinChange * clipped);\n } else if (stateChanged) {\n isAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)\n\n if (pinReparent) {\n if (!reset && (isActive || isAtMax)) {\n var bounds = _getBounds(pin, true),\n _offset = scroll - start;\n\n _reparent(pin, _body, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);\n } else {\n _reparent(pin, spacer);\n }\n }\n\n _setState(isActive || isAtMax ? pinActiveState : pinState);\n\n pinChange !== change && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));\n }\n }\n\n snap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);\n toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) {\n return el.classList[isActive || once ? \"add\" : \"remove\"](toggleClass.className);\n }); // classes could affect positioning, so do it even if reset or refreshing is true.\n\n onUpdate && !isToggle && !reset && onUpdate(self);\n\n if (stateChanged && !_refreshing) {\n if (isToggle) {\n if (isTakingAction) {\n if (action === \"complete\") {\n animation.pause().totalProgress(1);\n } else if (action === \"reset\") {\n animation.restart(true).pause();\n } else if (action === \"restart\") {\n animation.restart(true);\n } else {\n animation[action]();\n }\n }\n\n onUpdate && onUpdate(self);\n }\n\n if (toggled || !_limitCallbacks) {\n // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.\n onToggle && toggled && _callback(self, onToggle);\n callbacks[toggleState] && _callback(self, callbacks[toggleState]);\n once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0); // a callback shouldn't be called again if once is true.\n\n if (!toggled) {\n // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order\n toggleState = clipped === 1 ? 1 : 3;\n callbacks[toggleState] && _callback(self, callbacks[toggleState]);\n }\n }\n\n if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) {\n _endAnimation(self.callbackAnimation);\n\n scrubTween ? scrubTween.progress(1) : _endAnimation(animation, !clipped, 1);\n }\n } else if (isToggle && onUpdate && !_refreshing) {\n onUpdate(self);\n }\n } // update absolutely-positioned markers (only if the scroller isn't the viewport)\n\n\n if (markerEndSetter) {\n var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;\n markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));\n markerEndSetter(n);\n }\n\n caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));\n };\n\n self.enable = function (reset, refresh) {\n if (!self.enabled) {\n self.enabled = true;\n\n _addListener(scroller, \"resize\", _onResize);\n\n _addListener(scroller, \"scroll\", _onScroll);\n\n onRefreshInit && _addListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\n if (reset !== false) {\n self.progress = prevProgress = 0;\n scroll1 = scroll2 = lastSnap = scrollFunc();\n }\n\n refresh !== false && self.refresh();\n }\n };\n\n self.getTween = function (snap) {\n return snap && tweenTo ? tweenTo.tween : scrubTween;\n };\n\n self.disable = function (reset, allowAnimation) {\n if (self.enabled) {\n reset !== false && self.revert();\n self.enabled = self.isActive = false;\n allowAnimation || scrubTween && scrubTween.pause();\n prevScroll = 0;\n pinCache && (pinCache.uncache = 1);\n onRefreshInit && _removeListener(ScrollTrigger, \"refreshInit\", onRefreshInit);\n\n if (snapDelayedCall) {\n snapDelayedCall.pause();\n tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);\n }\n\n if (!isViewport) {\n var i = _triggers.length;\n\n while (i--) {\n if (_triggers[i].scroller === scroller && _triggers[i] !== self) {\n return; //don't remove the listeners if there are still other triggers referencing it.\n }\n }\n\n _removeListener(scroller, \"resize\", _onResize);\n\n _removeListener(scroller, \"scroll\", _onScroll);\n }\n }\n };\n\n self.kill = function (revert, allowAnimation) {\n self.disable(revert, allowAnimation);\n scrubTween && scrubTween.kill();\n id && delete _ids[id];\n\n var i = _triggers.indexOf(self);\n\n _triggers.splice(i, 1);\n\n i === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...\n // if no other ScrollTrigger instances of the same scroller are found, wipe out any recorded scroll position. Otherwise, in a single page application, for example, it could maintain scroll position when it really shouldn't.\n\n i = 0;\n\n _triggers.forEach(function (t) {\n return t.scroller === self.scroller && (i = 1);\n });\n\n i || (self.scroll.rec = 0);\n\n if (animation) {\n animation.scrollTrigger = null;\n revert && animation.render(-1);\n allowAnimation || animation.kill();\n }\n\n markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\n return m.parentNode && m.parentNode.removeChild(m);\n });\n\n if (pin) {\n pinCache && (pinCache.uncache = 1);\n i = 0;\n\n _triggers.forEach(function (t) {\n return t.pin === pin && i++;\n });\n\n i || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element.\n }\n };\n\n self.enable(false, false);\n !animation || !animation.add || change ? self.refresh() : gsap.delayedCall(0.01, function () {\n return start || end || self.refresh();\n }) && (change = 0.01) && (start = end = 0); // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick. If \"change\" is defined, we know it must be re-enabling, thus we can refresh() right away.\n };\n\n ScrollTrigger.register = function register(core) {\n if (!_coreInitted) {\n gsap = core || _getGSAP();\n\n if (_windowExists() && window.document) {\n _win = window;\n _doc = document;\n _docEl = _doc.documentElement;\n _body = _doc.body;\n }\n\n if (gsap) {\n _toArray = gsap.utils.toArray;\n _clamp = gsap.utils.clamp;\n _suppressOverwrites = gsap.core.suppressOverwrites || _passThrough;\n gsap.core.globals(\"ScrollTrigger\", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a \"name\" property.\n\n if (_body) {\n _raf = _win.requestAnimationFrame || function (f) {\n return setTimeout(f, 16);\n };\n\n _addListener(_win, \"wheel\", _onScroll);\n\n _root = [_win, _doc, _docEl, _body];\n\n _addListener(_doc, \"scroll\", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!\n\n\n var bodyStyle = _body.style,\n border = bodyStyle.borderTopStyle,\n bounds;\n bodyStyle.borderTopStyle = \"solid\"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.\n\n bounds = _getBounds(_body);\n _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0; // accommodate the offset of the caused by margins and/or padding\n\n _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;\n border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty(\"border-top-style\");\n _syncInterval = setInterval(_sync, 200);\n gsap.delayedCall(0.5, function () {\n return _startup = 0;\n });\n\n _addListener(_doc, \"touchcancel\", _passThrough); // some older Android devices intermittently stop dispatching \"touchmove\" events if we don't listen for \"touchcancel\" on the document.\n\n\n _addListener(_body, \"touchstart\", _passThrough); //works around Safari bug: https://greensock.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/\n\n\n _multiListener(_addListener, _doc, \"pointerdown,touchstart,mousedown\", function () {\n return _pointerIsDown = 1;\n });\n\n _multiListener(_addListener, _doc, \"pointerup,touchend,mouseup\", function () {\n return _pointerIsDown = 0;\n });\n\n _transformProp = gsap.utils.checkPrefix(\"transform\");\n\n _stateProps.push(_transformProp);\n\n _coreInitted = _getTime();\n _resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();\n _autoRefresh = [_doc, \"visibilitychange\", function () {\n var w = _win.innerWidth,\n h = _win.innerHeight;\n\n if (_doc.hidden) {\n _prevWidth = w;\n _prevHeight = h;\n } else if (_prevWidth !== w || _prevHeight !== h) {\n _onResize();\n }\n }, _doc, \"DOMContentLoaded\", _refreshAll, _win, \"load\", function () {\n return _lastScrollTime || _refreshAll();\n }, _win, \"resize\", _onResize];\n\n _iterateAutoRefresh(_addListener);\n }\n }\n }\n\n return _coreInitted;\n };\n\n ScrollTrigger.defaults = function defaults(config) {\n for (var p in config) {\n _defaults[p] = config[p];\n }\n };\n\n ScrollTrigger.kill = function kill() {\n _enabled = 0;\n\n _triggers.slice(0).forEach(function (trigger) {\n return trigger.kill(1);\n });\n };\n\n ScrollTrigger.config = function config(vars) {\n \"limitCallbacks\" in vars && (_limitCallbacks = !!vars.limitCallbacks);\n var ms = vars.syncInterval;\n ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);\n\n if (\"autoRefreshEvents\" in vars) {\n _iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || \"none\");\n _ignoreResize = (vars.autoRefreshEvents + \"\").indexOf(\"resize\") === -1;\n }\n };\n\n ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {\n var t = _getTarget(target),\n i = _scrollers.indexOf(t),\n isViewport = _isViewport(t);\n\n if (~i) {\n _scrollers.splice(i, isViewport ? 6 : 2);\n }\n\n isViewport ? _proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _proxies.unshift(t, vars);\n };\n\n ScrollTrigger.matchMedia = function matchMedia(vars) {\n // _media is populated in the following order: mediaQueryString, onMatch, onUnmatch, isMatched. So if there are two media queries, the Array would have a length of 8\n var mq, p, i, func, result;\n\n for (p in vars) {\n i = _media.indexOf(p);\n func = vars[p];\n _creatingMedia = p;\n\n if (p === \"all\") {\n func();\n } else {\n mq = _win.matchMedia(p);\n\n if (mq) {\n mq.matches && (result = func());\n\n if (~i) {\n _media[i + 1] = _combineFunc(_media[i + 1], func);\n _media[i + 2] = _combineFunc(_media[i + 2], result);\n } else {\n i = _media.length;\n\n _media.push(p, func, result);\n\n mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\n }\n\n _media[i + 3] = mq.matches;\n }\n }\n\n _creatingMedia = 0;\n }\n\n return _media;\n };\n\n ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {\n query || (_media.length = 0);\n query = _media.indexOf(query);\n query >= 0 && _media.splice(query, 4);\n };\n\n ScrollTrigger.isInViewport = function isInViewport(element, ratio, horizontal) {\n var bounds = (_isString(element) ? _getTarget(element) : element).getBoundingClientRect(),\n offset = bounds[horizontal ? _width : _height] * ratio || 0;\n return horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win.innerHeight;\n };\n\n ScrollTrigger.positionInViewport = function positionInViewport(element, referencePoint, horizontal) {\n _isString(element) && (element = _getTarget(element));\n var bounds = element.getBoundingClientRect(),\n size = bounds[horizontal ? _width : _height],\n offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf(\"%\") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0;\n return horizontal ? (bounds.left + offset) / _win.innerWidth : (bounds.top + offset) / _win.innerHeight;\n };\n\n return ScrollTrigger;\n}();\nScrollTrigger.version = \"3.8.0\";\n\nScrollTrigger.saveStyles = function (targets) {\n return targets ? _toArray(targets).forEach(function (target) {\n // saved styles are recorded in a consecutive alternating Array, like [element, cssText, transform attribute, cache, matchMedia, ...]\n if (target && target.style) {\n var i = _savedStyles.indexOf(target);\n\n i >= 0 && _savedStyles.splice(i, 5);\n\n _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute(\"transform\"), gsap.core.getCache(target), _creatingMedia);\n }\n }) : _savedStyles;\n};\n\nScrollTrigger.revert = function (soft, media) {\n return _revertAll(!soft, media);\n};\n\nScrollTrigger.create = function (vars, animation) {\n return new ScrollTrigger(vars, animation);\n};\n\nScrollTrigger.refresh = function (safe) {\n return safe ? _onResize() : (_coreInitted || ScrollTrigger.register()) && _refreshAll(true);\n};\n\nScrollTrigger.update = _updateAll;\nScrollTrigger.clearScrollMemory = _clearScrollMemory;\n\nScrollTrigger.maxScroll = function (element, horizontal) {\n return _maxScroll(element, horizontal ? _horizontal : _vertical);\n};\n\nScrollTrigger.getScrollFunc = function (element, horizontal) {\n return _getScrollFunc(_getTarget(element), horizontal ? _horizontal : _vertical);\n};\n\nScrollTrigger.getById = function (id) {\n return _ids[id];\n};\n\nScrollTrigger.getAll = function () {\n return _triggers.slice(0);\n};\n\nScrollTrigger.isScrolling = function () {\n return !!_lastScrollTime;\n};\n\nScrollTrigger.snapDirectional = _snapDirectional;\n\nScrollTrigger.addEventListener = function (type, callback) {\n var a = _listeners[type] || (_listeners[type] = []);\n ~a.indexOf(callback) || a.push(callback);\n};\n\nScrollTrigger.removeEventListener = function (type, callback) {\n var a = _listeners[type],\n i = a && a.indexOf(callback);\n i >= 0 && a.splice(i, 1);\n};\n\nScrollTrigger.batch = function (targets, vars) {\n var result = [],\n varsCopy = {},\n interval = vars.interval || 0.016,\n batchMax = vars.batchMax || 1e9,\n proxyCallback = function proxyCallback(type, callback) {\n var elements = [],\n triggers = [],\n delay = gsap.delayedCall(interval, function () {\n callback(elements, triggers);\n elements = [];\n triggers = [];\n }).pause();\n return function (self) {\n elements.length || delay.restart(true);\n elements.push(self.trigger);\n triggers.push(self);\n batchMax <= elements.length && delay.progress(1);\n };\n },\n p;\n\n for (p in vars) {\n varsCopy[p] = p.substr(0, 2) === \"on\" && _isFunction(vars[p]) && p !== \"onRefreshInit\" ? proxyCallback(p, vars[p]) : vars[p];\n }\n\n if (_isFunction(batchMax)) {\n batchMax = batchMax();\n\n _addListener(ScrollTrigger, \"refresh\", function () {\n return batchMax = vars.batchMax();\n });\n }\n\n _toArray(targets).forEach(function (target) {\n var config = {};\n\n for (p in varsCopy) {\n config[p] = varsCopy[p];\n }\n\n config.trigger = target;\n result.push(ScrollTrigger.create(config));\n });\n\n return result;\n};\n\nScrollTrigger.sort = function (func) {\n return _triggers.sort(func || function (a, b) {\n return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6);\n });\n};\n\n_getGSAP() && gsap.registerPlugin(ScrollTrigger);\nexport { ScrollTrigger as default };","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {};\n\nfunction getUniqueId() {\n var key = '__global_unique_id__';\n return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;\n}\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + getUniqueId() + '__';\n\n var Provider = /*#__PURE__*/function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer = /*#__PURE__*/function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","const { webm, mp4 } = require(\"./media.js\");\n\n// Detect iOS browsers < version 10\nconst oldIOS = () =>\n typeof navigator !== \"undefined\" &&\n parseFloat(\n (\n \"\" +\n (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(\n navigator.userAgent\n ) || [0, \"\"])[1]\n )\n .replace(\"undefined\", \"3_2\")\n .replace(\"_\", \".\")\n .replace(\"_\", \"\")\n ) < 10 &&\n !window.MSStream;\n\n// Detect native Wake Lock API support (Samsung Browser supports it but cannot use it)\nconst nativeWakeLock = () =>\n \"wakeLock\" in navigator &&\n window.navigator.userAgent.indexOf(\"Samsung\") === -1;\n\nclass NoSleep {\n constructor() {\n this.enabled = false;\n if (nativeWakeLock()) {\n this._wakeLock = null;\n const handleVisibilityChange = () => {\n if (this._wakeLock !== null && document.visibilityState === \"visible\") {\n this.enable();\n }\n };\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n document.addEventListener(\"fullscreenchange\", handleVisibilityChange);\n } else if (oldIOS()) {\n this.noSleepTimer = null;\n } else {\n // Set up no sleep video element\n this.noSleepVideo = document.createElement(\"video\");\n\n this.noSleepVideo.setAttribute(\"title\", \"No Sleep\");\n this.noSleepVideo.setAttribute(\"playsinline\", \"\");\n\n this._addSourceToVideo(this.noSleepVideo, \"webm\", webm);\n this._addSourceToVideo(this.noSleepVideo, \"mp4\", mp4);\n\n // For iOS >15 video needs to be on the document to work as a wake lock\n Object.assign(this.noSleepVideo.style, {\n position: \"absolute\",\n left: \"-100%\",\n top: \"-100%\",\n });\n document.querySelector(\"body\").append(this.noSleepVideo);\n\n this.noSleepVideo.addEventListener(\"loadedmetadata\", () => {\n if (this.noSleepVideo.duration <= 1) {\n // webm source\n this.noSleepVideo.setAttribute(\"loop\", \"\");\n } else {\n // mp4 source\n this.noSleepVideo.addEventListener(\"timeupdate\", () => {\n if (this.noSleepVideo.currentTime > 0.5) {\n this.noSleepVideo.currentTime = Math.random();\n }\n });\n }\n });\n }\n }\n\n _addSourceToVideo(element, type, dataURI) {\n var source = document.createElement(\"source\");\n source.src = dataURI;\n source.type = `video/${type}`;\n element.appendChild(source);\n }\n\n get isEnabled() {\n return this.enabled;\n }\n\n enable() {\n if (nativeWakeLock()) {\n return navigator.wakeLock\n .request(\"screen\")\n .then((wakeLock) => {\n this._wakeLock = wakeLock;\n this.enabled = true;\n console.log(\"Wake Lock active.\");\n this._wakeLock.addEventListener(\"release\", () => {\n // ToDo: Potentially emit an event for the page to observe since\n // Wake Lock releases happen when page visibility changes.\n // (https://web.dev/wakelock/#wake-lock-lifecycle)\n console.log(\"Wake Lock released.\");\n });\n })\n .catch((err) => {\n this.enabled = false;\n console.error(`${err.name}, ${err.message}`);\n throw err;\n });\n } else if (oldIOS()) {\n this.disable();\n console.warn(`\n NoSleep enabled for older iOS devices. This can interrupt\n active or long-running network requests from completing successfully.\n See https://github.com/richtr/NoSleep.js/issues/15 for more details.\n `);\n this.noSleepTimer = window.setInterval(() => {\n if (!document.hidden) {\n window.location.href = window.location.href.split(\"#\")[0];\n window.setTimeout(window.stop, 0);\n }\n }, 15000);\n this.enabled = true;\n return Promise.resolve();\n } else {\n let playPromise = this.noSleepVideo.play();\n return playPromise\n .then((res) => {\n this.enabled = true;\n return res;\n })\n .catch((err) => {\n this.enabled = false;\n throw err;\n });\n }\n }\n\n disable() {\n if (nativeWakeLock()) {\n if (this._wakeLock) {\n this._wakeLock.release();\n }\n this._wakeLock = null;\n } else if (oldIOS()) {\n if (this.noSleepTimer) {\n console.warn(`\n NoSleep now disabled for older iOS devices.\n `);\n window.clearInterval(this.noSleepTimer);\n this.noSleepTimer = null;\n }\n } else {\n this.noSleepVideo.pause();\n }\n this.enabled = false;\n }\n}\n\nmodule.exports = NoSleep;\n","// Copyright (c) .NET Foundation. All rights reserved.\r\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\r\n\r\nimport { TextMessageFormat } from \"./TextMessageFormat\";\r\nimport { isArrayBuffer } from \"./Utils\";\r\n\r\n/** @private */\r\nexport interface HandshakeRequestMessage {\r\n readonly protocol: string;\r\n readonly version: number;\r\n}\r\n\r\n/** @private */\r\nexport interface HandshakeResponseMessage {\r\n readonly error: string;\r\n readonly minorVersion: number;\r\n}\r\n\r\n/** @private */\r\nexport class HandshakeProtocol {\r\n // Handshake request is always JSON\r\n public writeHandshakeRequest(handshakeRequest: HandshakeRequestMessage): string {\r\n return TextMessageFormat.write(JSON.stringify(handshakeRequest));\r\n }\r\n\r\n public parseHandshakeResponse(data: any): [any, HandshakeResponseMessage] {\r\n let responseMessage: HandshakeResponseMessage;\r\n let messageData: string;\r\n let remainingData: any;\r\n\r\n if (isArrayBuffer(data) || (typeof Buffer !== \"undefined\" && data instanceof Buffer)) {\r\n // Format is binary but still need to read JSON text from handshake response\r\n const binaryData = new Uint8Array(data);\r\n const separatorIndex = binaryData.indexOf(TextMessageFormat.RecordSeparatorCode);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = String.fromCharCode.apply(null, binaryData.slice(0, responseLength));\r\n remainingData = (binaryData.byteLength > responseLength) ? binaryData.slice(responseLength).buffer : null;\r\n } else {\r\n const textData: string = data;\r\n const separatorIndex = textData.indexOf(TextMessageFormat.RecordSeparator);\r\n if (separatorIndex === -1) {\r\n throw new Error(\"Message is incomplete.\");\r\n }\r\n\r\n // content before separator is handshake response\r\n // optional content after is additional messages\r\n const responseLength = separatorIndex + 1;\r\n messageData = textData.substring(0, responseLength);\r\n remainingData = (textData.length > responseLength) ? textData.substring(responseLength) : null;\r\n }\r\n\r\n // At this point we should have just the single handshake message\r\n const messages = TextMessageFormat.parse(messageData);\r\n const response = JSON.parse(messages[0]);\r\n if (response.type) {\r\n throw new Error(\"Expected a handshake response from the server.\");\r\n }\r\n responseMessage = response;\r\n\r\n // multiple messages could have arrived with handshake\r\n // return additional data to be parsed as usual, or null if all parsed\r\n return [remainingData, responseMessage];\r\n }\r\n}\r\n","/** @license React v16.14.0\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;kb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"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 b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(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});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new Cancel('canceled');\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('./../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar VERSION = require('../env/data').version;\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new TypeError('options must be an object');\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","/** @license React v16.14.0\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","module.exports = {\n webm:\n \"data:video/webm;base64,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\",\n mp4:\n \"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw\",\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","import setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeReflectConstruct from \"@babel/runtime/helpers/esm/isNativeReflectConstruct\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}","import getPrototypeOf from \"@babel/runtime/helpers/esm/getPrototypeOf\";\nimport setPrototypeOf from \"@babel/runtime/helpers/esm/setPrototypeOf\";\nimport isNativeFunction from \"@babel/runtime/helpers/esm/isNativeFunction\";\nimport construct from \"@babel/runtime/helpers/esm/construct\";\nexport default function _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import { Buttplug } from \"./buttplug_ffi\";\r\nexport class ButtplugError extends Error {\r\n constructor(aMessage, aId = 0, aInner) {\r\n super(aMessage);\r\n this.innerError = aInner;\r\n this.messageId = aId;\r\n }\r\n}\r\nexport class ButtplugHandshakeError extends ButtplugError {\r\n constructor(aMessage, aId = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\nexport class ButtplugDeviceError extends ButtplugError {\r\n constructor(aMessage, aId = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\nexport class ButtplugMessageError extends ButtplugError {\r\n constructor(aMessage, aId = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\nexport class ButtplugPingError extends ButtplugError {\r\n constructor(aMessage, aId = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\nexport class ButtplugUnknownError extends ButtplugError {\r\n constructor(aMessage, aId = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\nexport class ButtplugClientConnectorError extends ButtplugError {\r\n constructor(aMessage, aId = 0) {\r\n super(aMessage, aId);\r\n }\r\n}\r\nexport function convertPBufError(err, id) {\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugConnectorError) {\r\n return new ButtplugClientConnectorError(err.message, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugDeviceError) {\r\n return new ButtplugDeviceError(err.message, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugHandshakeError) {\r\n return new ButtplugHandshakeError(err.message, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugMessageError) {\r\n return new ButtplugMessageError(err.message, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugPingError) {\r\n return new ButtplugPingError(err.message, id);\r\n }\r\n if (err.errorType === Buttplug.ServerMessage.ButtplugErrorType.ButtplugUnknownError) {\r\n return new ButtplugUnknownError(err.message, id);\r\n }\r\n throw new ButtplugUnknownError(\"Cannot convert error: \" + err);\r\n}\r\n//# sourceMappingURL=errors.js.map","import arrayWithHoles from \"@babel/runtime/helpers/esm/arrayWithHoles\";\nimport iterableToArrayLimit from \"@babel/runtime/helpers/esm/iterableToArrayLimit\";\nimport unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nimport nonIterableRest from \"@babel/runtime/helpers/esm/nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\nimport { convertPBufError } from \"./errors\";\r\nexport class ButtplugMessageSorter {\r\n constructor() {\r\n this._counter = 1;\r\n this._waitingMsgs = new Map();\r\n }\r\n // One of the places we should actually return a promise, as we need to store\r\n // them while waiting for them to return across the line.\r\n // tslint:disable:promise-function-async\r\n PrepareOutgoingMessage(aMsg) {\r\n aMsg.id = this._counter;\r\n // Always increment last, otherwise we might lose sync\r\n this._counter += 1;\r\n let res;\r\n let rej;\r\n const msgPromise = new Promise((resolve, reject) => { res = resolve; rej = reject; });\r\n this._waitingMsgs.set(aMsg.id, [res, rej]);\r\n return msgPromise;\r\n }\r\n ParseIncomingMessages(msg) {\r\n var _a, _b, _c, _d;\r\n if (msg.id !== 0 && this._waitingMsgs.has(msg.id)) {\r\n const [res, rej] = this._waitingMsgs.get(msg.id);\r\n // If we've gotten back an error, reject the related promise using a\r\n // ButtplugException derived type.\r\n if ((_b = (_a = msg.message) === null || _a === void 0 ? void 0 : _a.serverMessage) === null || _b === void 0 ? void 0 : _b.error) {\r\n rej(convertPBufError((_d = (_c = msg.message) === null || _c === void 0 ? void 0 : _c.serverMessage) === null || _d === void 0 ? void 0 : _d.error, msg.id));\r\n return null;\r\n }\r\n res(msg);\r\n return null;\r\n }\r\n return msg;\r\n }\r\n}\r\n//# sourceMappingURL=sorter.js.map","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\"use strict\";\r\nimport { Buttplug } from \"./buttplug_ffi\";\r\nimport { ButtplugDeviceError } from \"./errors\";\r\nimport { EventEmitter } from \"events\";\r\nimport { vibrate, rotate, stopDevice, linear, batteryLevel, rssiLevel, rawRead, rawWrite, rawSubscribe, rawUnsubscribe } from \"./ffi\";\r\n// Re-export the protobuf enum, so we don't require users to have to know the\r\n// full resolution path.\r\nexport var ButtplugDeviceMessageType = Buttplug.ServerMessage.MessageAttributeType;\r\nexport class MessageAttributes {\r\n constructor(attributes) {\r\n this.featureCount = attributes.featureCount;\r\n this.stepCount = attributes.stepCount;\r\n this.maxDuration = attributes.maxDuration;\r\n this.endpoints = attributes.endpoints;\r\n }\r\n}\r\nexport class VibrationCmd {\r\n constructor(index, speed) {\r\n this.Index = index;\r\n this.Speed = speed;\r\n }\r\n}\r\nexport class RotationCmd {\r\n constructor(index, speed, clockwise) {\r\n this.Index = index;\r\n this.Speed = speed;\r\n this.Clockwise = clockwise;\r\n }\r\n}\r\nexport class VectorCmd {\r\n constructor(index, duration, position) {\r\n this.Index = index;\r\n this.Duration = duration;\r\n this.Position = position;\r\n }\r\n}\r\n/**\r\n * Represents an abstract device, capable of taking certain kinds of messages.\r\n */\r\nexport class ButtplugClientDevice extends EventEmitter {\r\n /**\r\n * @param _index Index of the device, as created by the device manager.\r\n * @param _name Name of the device.\r\n * @param allowedMsgs Buttplug messages the device can receive.\r\n */\r\n constructor(devicePtr, sorter, index, name, allowedMsgsObj) {\r\n super();\r\n this._messageAttributes = new Map();\r\n this._devicePtr = devicePtr;\r\n this._sorter = sorter;\r\n this._index = index;\r\n this._name = name;\r\n for (let attributes of allowedMsgsObj) {\r\n this._messageAttributes.set(attributes.messageType, new MessageAttributes(attributes));\r\n }\r\n }\r\n /**\r\n * Return the name of the device.\r\n */\r\n get Name() {\r\n return this._name;\r\n }\r\n /**\r\n * Return the index of the device.\r\n */\r\n get Index() {\r\n return this._index;\r\n }\r\n /**\r\n * Return a list of message types the device accepts.\r\n */\r\n get AllowedMessages() {\r\n return Array.from(this._messageAttributes.keys());\r\n }\r\n /**\r\n * Return the message attributes related to the given message\r\n */\r\n messageAttributes(messageName) {\r\n return this._messageAttributes.get(messageName);\r\n }\r\n checkAllowedMessageType(messageType) {\r\n if (!this._messageAttributes.has(messageType)) {\r\n throw new ButtplugDeviceError(`Message ${ButtplugDeviceMessageType[messageType]} does not exist on device ${this._name}`);\r\n }\r\n }\r\n async vibrate(speeds) {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.VibrateCmd);\r\n let msgSpeeds;\r\n if (typeof (speeds) === \"number\") {\r\n // We can skip the check here since we're building the command array ourselves.\r\n const features = this._messageAttributes.get(ButtplugDeviceMessageType.VibrateCmd).featureCount;\r\n msgSpeeds = Array.from({ length: features }, (_, i) => Buttplug.DeviceMessage.VibrateComponent.create({\r\n index: i,\r\n speed: speeds,\r\n }));\r\n }\r\n else if (Array.isArray(speeds) && speeds.every(x => typeof (x) === \"number\")) {\r\n msgSpeeds = speeds.map((x, index) => Buttplug.DeviceMessage.VibrateComponent.create({\r\n index: index,\r\n speed: x\r\n }));\r\n }\r\n else if (Array.isArray(speeds) && speeds.every(x => x instanceof VibrationCmd)) {\r\n msgSpeeds = speeds.map(x => Buttplug.DeviceMessage.VibrateComponent.create({\r\n index: x.Index,\r\n speed: x.Speed\r\n }));\r\n }\r\n else {\r\n throw new ButtplugDeviceError(\"vibrate can only take numbers or arrays of numbers or VibrationCmds.\");\r\n }\r\n await vibrate(this._sorter, this._devicePtr, msgSpeeds);\r\n }\r\n async rotate(speeds, clockwise) {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RotateCmd);\r\n let msgRotations;\r\n if (typeof (speeds) === \"number\" && clockwise !== undefined) {\r\n // We can skip the check here since we're building the command array ourselves.\r\n const features = this._messageAttributes.get(ButtplugDeviceMessageType.RotateCmd).featureCount;\r\n msgRotations = Array.from({ length: features }, (_, i) => Buttplug.DeviceMessage.RotateComponent.create({\r\n index: i,\r\n speed: speeds,\r\n clockwise: clockwise\r\n }));\r\n }\r\n else if (Array.isArray(speeds) && speeds.every(x => x instanceof RotationCmd)) {\r\n msgRotations = speeds.map(x => Buttplug.DeviceMessage.RotateComponent.create({\r\n index: x.Index,\r\n speed: x.Speed,\r\n clockwise: x.Clockwise\r\n }));\r\n }\r\n else {\r\n throw new ButtplugDeviceError(\"rotate can only take number/boolean or arrays of RotateCmds.\");\r\n }\r\n await rotate(this._sorter, this._devicePtr, msgRotations);\r\n }\r\n async linear(position, duration) {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.LinearCmd);\r\n let msgVectors;\r\n if (typeof (position) === \"number\" && duration !== undefined) {\r\n // We can skip the check here since we're building the command array ourselves.\r\n const features = this._messageAttributes.get(ButtplugDeviceMessageType.LinearCmd).featureCount;\r\n msgVectors = Array.from({ length: features }, (_, i) => Buttplug.DeviceMessage.LinearComponent.create({\r\n index: i,\r\n position: position,\r\n duration: duration\r\n }));\r\n }\r\n else if (Array.isArray(position) && position.every(x => x instanceof VectorCmd)) {\r\n msgVectors = position.map(x => Buttplug.DeviceMessage.LinearComponent.create({\r\n index: x.Index,\r\n position: x.Position,\r\n duration: x.Duration\r\n }));\r\n }\r\n else {\r\n throw new ButtplugDeviceError(\"linear can only take number/number or arrays of VectorCmds.\");\r\n }\r\n await linear(this._sorter, this._devicePtr, msgVectors);\r\n }\r\n async batteryLevel() {\r\n var _a, _b, _c, _d;\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.BatteryLevelCmd);\r\n let batteryMsg = await batteryLevel(this._sorter, this._devicePtr);\r\n if ((_b = (_a = batteryMsg.message) === null || _a === void 0 ? void 0 : _a.deviceEvent) === null || _b === void 0 ? void 0 : _b.batteryLevelReading) {\r\n let reading = (_d = (_c = batteryMsg.message) === null || _c === void 0 ? void 0 : _c.deviceEvent) === null || _d === void 0 ? void 0 : _d.batteryLevelReading;\r\n return reading.reading;\r\n }\r\n throw new ButtplugDeviceError(\"Wrong reply message received for batteryLevel: \" + batteryMsg);\r\n }\r\n async rssiLevel() {\r\n var _a, _b, _c, _d;\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RSSILevelCmd);\r\n let rssiMsg = await rssiLevel(this._sorter, this._devicePtr);\r\n if ((_b = (_a = rssiMsg.message) === null || _a === void 0 ? void 0 : _a.deviceEvent) === null || _b === void 0 ? void 0 : _b.rssiLevelReading) {\r\n return (_d = (_c = rssiMsg.message) === null || _c === void 0 ? void 0 : _c.deviceEvent) === null || _d === void 0 ? void 0 : _d.rssiLevelReading.reading;\r\n }\r\n throw new ButtplugDeviceError(\"Wrong reply message received for rssiLevel: \" + rssiMsg);\r\n }\r\n async rawRead(endpoint, expectedLength, timeout) {\r\n var _a, _b;\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawReadCmd);\r\n let readingMsg = await rawRead(this._sorter, this._devicePtr, endpoint, expectedLength, timeout);\r\n if ((_b = (_a = readingMsg.message) === null || _a === void 0 ? void 0 : _a.deviceEvent) === null || _b === void 0 ? void 0 : _b.rawReading) {\r\n return readingMsg.message.deviceEvent.rawReading.data;\r\n }\r\n throw new ButtplugDeviceError(\"Wrong reply message received for rawRead: \" + readingMsg);\r\n }\r\n async rawWrite(endpoint, data, writeWithResponse) {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawWriteCmd);\r\n await rawWrite(this._sorter, this._devicePtr, endpoint, data, writeWithResponse);\r\n }\r\n async rawSubscribe(endpoint) {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawSubscribeCmd);\r\n await rawSubscribe(this._sorter, this._devicePtr, endpoint);\r\n }\r\n async rawUnsubscribe(endpoint) {\r\n this.checkAllowedMessageType(ButtplugDeviceMessageType.RawUnsubscribeCmd);\r\n await rawUnsubscribe(this._sorter, this._devicePtr, endpoint);\r\n }\r\n async stop() {\r\n await stopDevice(this._sorter, this._devicePtr);\r\n }\r\n emitDisconnected() {\r\n this.emit(\"deviceremoved\");\r\n }\r\n}\r\n//# sourceMappingURL=device.js.map","import unsupportedIterableToArray from \"@babel/runtime/helpers/esm/unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","/*!\r\n * Buttplug JS Source Code File - Visit https://buttplug.io for more info about\r\n * the project. Licensed under the BSD 3-Clause license. See LICENSE file in the\r\n * project root for full license information.\r\n *\r\n * @copyright Copyright (c) Nonpolynomial Labs LLC. All rights reserved.\r\n */\r\n\"use strict\";\r\nimport { EventEmitter } from \"events\";\r\nimport { Buttplug } from \"./buttplug_ffi\";\r\nimport { ButtplugClientConnectorError } from \"./errors\";\r\nimport { createClientPtr, createDevicePtr, connectEmbedded, connectWebsocket, startScanning, stopScanning, stopAllDevices, disconnect } from \"./ffi\";\r\nimport { ButtplugEmbeddedConnectorOptions, ButtplugWebsocketConnectorOptions } from \"./connectors\";\r\nimport { ButtplugMessageSorter } from \"./sorter\";\r\nimport { ButtplugClientDevice } from \"./device\";\r\nexport class ButtplugClient extends EventEmitter {\r\n constructor(clientName = \"Generic Buttplug Client\") {\r\n super();\r\n this._devices = new Map();\r\n // This will either be null, or our WASM heap pointer for our connected client object.\r\n this._clientPtr = undefined;\r\n this._isScanning = false;\r\n this._connected = false;\r\n this._sorter = new ButtplugMessageSorter();\r\n this.connect = async (options) => {\r\n if (this._connected) {\r\n throw new ButtplugClientConnectorError(\"Client already connected.\");\r\n }\r\n if (options instanceof ButtplugEmbeddedConnectorOptions) {\r\n await connectEmbedded(this._sorter, this._clientPtr, options);\r\n }\r\n else if (options instanceof ButtplugWebsocketConnectorOptions) {\r\n await connectWebsocket(this._sorter, this._clientPtr, options);\r\n }\r\n else {\r\n throw new ButtplugClientConnectorError(\"Invalid connector type.\");\r\n }\r\n this._connected = true;\r\n };\r\n this.disconnect = async () => {\r\n if (!this._clientPtr) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n await disconnect(this._sorter, this._clientPtr);\r\n };\r\n this.startScanning = async () => {\r\n if (!this._connected) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n this._isScanning = true;\r\n await startScanning(this._sorter, this._clientPtr);\r\n };\r\n this.stopScanning = async () => {\r\n if (!this._connected) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n this._isScanning = false;\r\n await stopScanning(this._sorter, this._clientPtr);\r\n };\r\n this.stopAllDevices = async () => {\r\n if (!this._connected) {\r\n throw new ButtplugClientConnectorError(\"Not connected.\");\r\n }\r\n await stopAllDevices(this._sorter, this._clientPtr);\r\n };\r\n this.sorterCallback = (buf) => {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\r\n const msg = Buttplug.ButtplugFFIServerMessage.decode(buf);\r\n if (msg.id > 0) {\r\n this._sorter.ParseIncomingMessages(msg);\r\n return;\r\n }\r\n if ((_b = (_a = msg.message) === null || _a === void 0 ? void 0 : _a.serverMessage) === null || _b === void 0 ? void 0 : _b.deviceAdded) {\r\n const addedMsg = (_d = (_c = msg.message) === null || _c === void 0 ? void 0 : _c.serverMessage) === null || _d === void 0 ? void 0 : _d.deviceAdded;\r\n const devicePtr = createDevicePtr(this._clientPtr, addedMsg.index);\r\n const device = new ButtplugClientDevice(devicePtr, this._sorter, addedMsg.index, addedMsg.name, addedMsg.messageAttributes);\r\n this._devices.set(addedMsg.index, device);\r\n this.emit(\"deviceadded\", device);\r\n return;\r\n }\r\n if ((_f = (_e = msg.message) === null || _e === void 0 ? void 0 : _e.serverMessage) === null || _f === void 0 ? void 0 : _f.deviceRemoved) {\r\n const removedMsg = (_h = (_g = msg.message) === null || _g === void 0 ? void 0 : _g.serverMessage) === null || _h === void 0 ? void 0 : _h.deviceRemoved;\r\n if (this._devices.has(removedMsg.index)) {\r\n const removedDevice = this._devices.get(removedMsg.index);\r\n removedDevice === null || removedDevice === void 0 ? void 0 : removedDevice.emitDisconnected();\r\n this._devices.delete(removedMsg.index);\r\n this.emit(\"deviceremoved\", removedDevice);\r\n }\r\n return;\r\n }\r\n if ((_k = (_j = msg.message) === null || _j === void 0 ? void 0 : _j.serverMessage) === null || _k === void 0 ? void 0 : _k.scanningFinished) {\r\n this._isScanning = false;\r\n this.emit(\"scanningfinished\");\r\n return;\r\n }\r\n if ((_m = (_l = msg.message) === null || _l === void 0 ? void 0 : _l.serverMessage) === null || _m === void 0 ? void 0 : _m.disconnect) {\r\n this._connected = false;\r\n this.emit(\"serverdisconnect\");\r\n }\r\n };\r\n this._clientName = clientName;\r\n this._clientPtr = createClientPtr(this.sorterCallback, clientName);\r\n }\r\n get Connected() {\r\n return this._connected;\r\n }\r\n get Devices() {\r\n // While this function doesn't actually send a message, if we don't have a\r\n // connector, we shouldn't have devices.\r\n this.CheckConnector();\r\n const devices = [];\r\n this._devices.forEach((d, i) => {\r\n devices.push(d);\r\n });\r\n return devices;\r\n }\r\n get isScanning() {\r\n return this._isScanning;\r\n }\r\n CheckConnector() {\r\n if (!this.Connected) {\r\n throw new ButtplugClientConnectorError(\"ButtplugClient not connected\");\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=client.js.map"],"sourceRoot":""}