@scrypted/prebuffer-mixin 0.1.226 → 0.1.227
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.nodejs.js +1 -1
- package/dist/plugin.zip +0 -0
- package/package.json +1 -1
- package/src/main.ts +41 -25
- package/src/rfc4571.ts +24 -16
- package/vscode-profile-2022-04-17-16-14-09.cpuprofile +1 -0
package/dist/main.nodejs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(()=>{var e={747:(e,t,r)=>{"use strict";Object.defineProperty(t,"rh",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"Nu",{enumerable:!0,get:function(){return o.default}});var i=a(r(257)),s=a(r(816)),o=a(r(243)),n=a(r(828));function a(e){return e&&e.__esModule?e:{default:e}}const c=[s.default,o.default,n.default];s.default,o.default,n.default},816:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i,s=(i=r(257))&&i.__esModule?i:{default:i},o=r(761);const n=["realm"],a=n,c={type:"Basic",parseWWWAuthenticateRest:function(e){return(0,o.parseHTTPHeadersQuotedKeyValueSet)(e,a,n)},buildWWWAuthenticateRest:function(e){return(0,o.buildHTTPHeadersQuotedKeyValueSet)(e,a,n)},parseAuthorizationRest:function(e){if(!e)throw new s.default("E_EMPTY_AUTH");const{username:t,password:r}=c.decodeHash(e);return{hash:e,username:t,password:r}},buildAuthorizationRest:function({hash:e,username:t,password:r}){if(t&&r)return c.computeHash({username:t,password:r});if(!e)throw new s.default("E_NO_HASH");return e},computeHash:function({username:e,password:t}){return Buffer.from(e+":"+t).toString("base64")},decodeHash:function(e){const[t,...r]=Buffer.from(e,"base64").toString().split(":");return{username:t,password:r.join(":")}}};var d=c;t.default=d},828:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i,s=(i=r(257))&&i.__esModule?i:{default:i},o=r(761);const n=["invalid_request","invalid_token","insufficient_scope"],a=["realm","scope","error","error_description"];var c={type:"Bearer",parseWWWAuthenticateRest:function(e){return(0,o.parseHTTPHeadersQuotedKeyValueSet)(e,a,[])},buildWWWAuthenticateRest:function(e){if(e.error&&-1===n.indexOf(e.error))throw new s.default("E_INVALID_ERROR",e.error,n);return(0,o.buildHTTPHeadersQuotedKeyValueSet)(e,a,[])},parseAuthorizationRest:function(e){if(!e)throw new s.default("E_EMPTY_AUTH");return{hash:e}},buildAuthorizationRest:function({hash:e}){if(!e)throw new s.default("E_NO_HASH");return e}};t.default=c},243:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i,s=r(761),o=(i=r(113))&&i.__esModule?i:{default:i};const n=["realm","nonce"],a=[...n,"domain","opaque","stale","algorithm","qop"],c=["username","realm","nonce","uri","response"],d=[...c,"algorithm","cnonce","opaque","qop","nc"];function u(e,t){const r=o.default.createHash(e);return r.update(t),r.digest("hex")}var l={type:"Digest",parseWWWAuthenticateRest:function(e){return(0,s.parseHTTPHeadersQuotedKeyValueSet)(e,a,n)},buildWWWAuthenticateRest:function(e){return(0,s.buildHTTPHeadersQuotedKeyValueSet)(e,a,n)},parseAuthorizationRest:function(e){return(0,s.parseHTTPHeadersQuotedKeyValueSet)(e,d,c)},buildAuthorizationRest:function(e){return(0,s.buildHTTPHeadersQuotedKeyValueSet)(e,d,c)},computeHash:function(e){const t=e.ha1||u(e.algorithm,[e.username,e.realm,e.password].join(":")),r=u(e.algorithm,[e.method,e.uri].join(":"));return u(e.algorithm,[t,e.nonce,e.nc,e.cnonce,e.qop,r].join(":"))}};t.default=l},761:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseHTTPHeadersQuotedKeyValueSet=function(e,t,r=[]){const i=e.trim().match(o);if(!i)throw new s.default("E_MALFORMED_QUOTEDKEYVALUE",e);const a=i.map(((e,t)=>{const r=e.split("=");if(2!==r.length)throw new s.default("E_MALFORMED_QUOTEDKEYVALUE",t,e,r.length);return r})).reduce((function(e,[r,i],o){if(-1===t.indexOf(r))throw new s.default("E_UNAUTHORIZED_KEY",o,r);return e[r]=i.replace(/^"(.+(?="$))"$/,"$1"),e}),{});return n(r,a),a},t.buildHTTPHeadersQuotedKeyValueSet=function(e,t,r=[]){return n(r,e),t.reduce((function(t,r){return e[r]?t+(t?", ":"")+r+'="'+e[r]+'"':t}),"")};var i,s=(i=r(257))&&i.__esModule?i:{default:i};const o=/\w+=(".*?"|[^",]+)(?=,|$)/g;function n(e,t){e.forEach((e=>{if(void 0===t[e])throw new s.default("E_REQUIRED_KEY",e)}))}},510:function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),s=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.MixinDeviceBase=t.ScryptedDeviceBase=void 0,s(r(741),t);const o=r(741);class n extends o.DeviceBase{constructor(e){super(),this.nativeId=e}get storage(){return this._storage||(this._storage=deviceManager.getDeviceStorage(this.nativeId)),this._storage}get log(){return this._log||(this._log=deviceManager.getDeviceLogger(this.nativeId)),this._log}get console(){return this._console||(this._console=deviceManager.getDeviceConsole(this.nativeId)),this._console}async createMediaObject(e,t){return mediaManager.createMediaObject(e,t,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:deviceManager.getMixinConsole(e.sourceId,this.nativeId)}_lazyLoadDeviceState(){this._deviceState||(this.nativeId?this._deviceState=deviceManager.getDeviceState(this.nativeId):this._deviceState=deviceManager.getDeviceState())}onDeviceEvent(e,t){return deviceManager.onDeviceEvent(this.nativeId,e,t)}}t.ScryptedDeviceBase=n;class a extends o.DeviceBase{constructor(e){super(),this._listeners=new Set,this.mixinDevice=e.mixinDevice,this.mixinDeviceInterfaces=e.mixinDeviceInterfaces,this.mixinStorageSuffix=e.mixinStorageSuffix,this._deviceState=e.mixinDeviceState,this.mixinProviderNativeId=e.mixinProviderNativeId}get storage(){if(!this._storage){const e=this.mixinStorageSuffix,t=this.id+(e?":"+e:"");this._storage=deviceManager.getMixinStorage(t,this.mixinProviderNativeId)}return this._storage}get console(){return this._console||(deviceManager.getMixinConsole?this._console=deviceManager.getMixinConsole(this.id,this.mixinProviderNativeId):this._console=deviceManager.getDeviceConsole(this.mixinProviderNativeId)),this._console}async createMediaObject(e,t){return mediaManager.createMediaObject(e,t,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:deviceManager.getMixinConsole(e.sourceId,this.mixinProviderNativeId)}onDeviceEvent(e,t){return deviceManager.onMixinEvent(this.id,this,e,t)}_lazyLoadDeviceState(){}manageListener(e){this._listeners.add(e)}release(){for(const e of this._listeners)e.removeListener()}}t.MixinDeviceBase=a,function(){function e(e){return function(){return this._lazyLoadDeviceState(),this._deviceState[e]}}function t(e){return function(t){this._lazyLoadDeviceState(),this._deviceState[e]=t}}for(var r of Object.values(o.ScryptedInterfaceProperty))Object.defineProperty(n.prototype,r,{set:t(r),get:e(r)}),Object.defineProperty(a.prototype,r,{set:t(r),get:e(r)})}();let c={};try{c=Object.assign(c,{log:deviceManager.getDeviceLogger(void 0),deviceManager,endpointManager,mediaManager,systemManager,pluginHostAPI})}catch(e){console.error("sdk initialization error, import @scrypted/types or use @scrypted/web-sdk instead",e)}t.default=c},733:e=>{const t=require("realfs");e.exports=t},741:(e,t,r)=>{"use strict";r.r(t),r.d(t,{DeviceBase:()=>i,ScryptedInterfaceProperty:()=>s,ScryptedInterfaceDescriptors:()=>o,ScryptedDeviceType:()=>n,HumidityMode:()=>a,FanMode:()=>c,TemperatureUnit:()=>d,ThermostatMode:()=>u,LockState:()=>l,MediaPlayerState:()=>p,ScryptedInterface:()=>m,ScryptedMimeTypes:()=>h});class i{}let s;!function(e){e.id="id",e.info="info",e.interfaces="interfaces",e.mixins="mixins",e.name="name",e.pluginId="pluginId",e.providedInterfaces="providedInterfaces",e.providedName="providedName",e.providedRoom="providedRoom",e.providedType="providedType",e.providerId="providerId",e.room="room",e.type="type",e.on="on",e.brightness="brightness",e.colorTemperature="colorTemperature",e.rgb="rgb",e.hsv="hsv",e.running="running",e.paused="paused",e.docked="docked",e.thermostatActiveMode="thermostatActiveMode",e.thermostatAvailableModes="thermostatAvailableModes",e.thermostatMode="thermostatMode",e.thermostatSetpoint="thermostatSetpoint",e.thermostatSetpointHigh="thermostatSetpointHigh",e.thermostatSetpointLow="thermostatSetpointLow",e.temperature="temperature",e.temperatureUnit="temperatureUnit",e.humidity="humidity",e.lockState="lockState",e.entryOpen="entryOpen",e.batteryLevel="batteryLevel",e.online="online",e.updateAvailable="updateAvailable",e.fromMimeType="fromMimeType",e.toMimeType="toMimeType",e.binaryState="binaryState",e.intrusionDetected="intrusionDetected",e.powerDetected="powerDetected",e.audioDetected="audioDetected",e.motionDetected="motionDetected",e.ambientLight="ambientLight",e.occupied="occupied",e.flooded="flooded",e.ultraviolet="ultraviolet",e.luminance="luminance",e.position="position",e.humiditySetting="humiditySetting",e.fan="fan"}(s||(s={}));const o={ScryptedDevice:{name:"ScryptedDevice",methods:["listen","probe","setName","setRoom","setType"],properties:["id","info","interfaces","mixins","name","pluginId","providedInterfaces","providedName","providedRoom","providedType","providerId","room","type"]},ScryptedPlugin:{name:"ScryptedPlugin",methods:["getPluginJson"],properties:[]},OnOff:{name:"OnOff",methods:["turnOff","turnOn"],properties:["on"]},Brightness:{name:"Brightness",methods:["setBrightness"],properties:["brightness"]},ColorSettingTemperature:{name:"ColorSettingTemperature",methods:["getTemperatureMaxK","getTemperatureMinK","setColorTemperature"],properties:["colorTemperature"]},ColorSettingRgb:{name:"ColorSettingRgb",methods:["setRgb"],properties:["rgb"]},ColorSettingHsv:{name:"ColorSettingHsv",methods:["setHsv"],properties:["hsv"]},Notifier:{name:"Notifier",methods:["sendNotification"],properties:[]},StartStop:{name:"StartStop",methods:["start","stop"],properties:["running"]},Pause:{name:"Pause",methods:["pause","resume"],properties:["paused"]},Dock:{name:"Dock",methods:["dock"],properties:["docked"]},TemperatureSetting:{name:"TemperatureSetting",methods:["setThermostatMode","setThermostatSetpoint","setThermostatSetpointHigh","setThermostatSetpointLow"],properties:["thermostatActiveMode","thermostatAvailableModes","thermostatMode","thermostatSetpoint","thermostatSetpointHigh","thermostatSetpointLow"]},Thermometer:{name:"Thermometer",methods:["setTemperatureUnit"],properties:["temperature","temperatureUnit"]},HumiditySensor:{name:"HumiditySensor",methods:[],properties:["humidity"]},Camera:{name:"Camera",methods:["getPictureOptions","takePicture"],properties:[]},Microphone:{name:"Microphone",methods:["getAudioStream"],properties:[]},Display:{name:"Display",methods:["startDisplay","stopDisplay"],properties:[]},VideoCamera:{name:"VideoCamera",methods:["getVideoStream","getVideoStreamOptions"],properties:[]},VideoRecorder:{name:"VideoRecorder",methods:["getRecordingStream","getRecordingStreamOptions","getRecordingStreamThumbnail"],properties:[]},VideoClips:{name:"VideoClips",methods:["getVideoClip","getVideoClipThumbnail","getVideoClips","removeVideoClips"],properties:[]},VideoCameraConfiguration:{name:"VideoCameraConfiguration",methods:["setVideoStreamOptions"],properties:[]},Intercom:{name:"Intercom",methods:["startIntercom","stopIntercom"],properties:[]},Lock:{name:"Lock",methods:["lock","unlock"],properties:["lockState"]},PasswordStore:{name:"PasswordStore",methods:["addPassword","getPasswords","removePassword"],properties:[]},Authenticator:{name:"Authenticator",methods:["checkPassword"],properties:[]},Scene:{name:"Scene",methods:["activate","deactivate","isReversible"],properties:[]},Entry:{name:"Entry",methods:["closeEntry","openEntry"],properties:[]},EntrySensor:{name:"EntrySensor",methods:[],properties:["entryOpen"]},DeviceProvider:{name:"DeviceProvider",methods:["getDevice"],properties:[]},DeviceDiscovery:{name:"DeviceDiscovery",methods:["discoverDevices"],properties:[]},DeviceCreator:{name:"DeviceCreator",methods:["createDevice","getCreateDeviceSettings"],properties:[]},Battery:{name:"Battery",methods:[],properties:["batteryLevel"]},Refresh:{name:"Refresh",methods:["getRefreshFrequency","refresh"],properties:[]},MediaPlayer:{name:"MediaPlayer",methods:["getMediaStatus","load","seek","skipNext","skipPrevious"],properties:[]},Online:{name:"Online",methods:[],properties:["online"]},SoftwareUpdate:{name:"SoftwareUpdate",methods:["checkForUpdate","installUpdate"],properties:["updateAvailable"]},BufferConverter:{name:"BufferConverter",methods:["convert"],properties:["fromMimeType","toMimeType"]},Settings:{name:"Settings",methods:["getSettings","putSetting"],properties:[]},BinarySensor:{name:"BinarySensor",methods:[],properties:["binaryState"]},IntrusionSensor:{name:"IntrusionSensor",methods:[],properties:["intrusionDetected"]},PowerSensor:{name:"PowerSensor",methods:[],properties:["powerDetected"]},AudioSensor:{name:"AudioSensor",methods:[],properties:["audioDetected"]},MotionSensor:{name:"MotionSensor",methods:[],properties:["motionDetected"]},AmbientLightSensor:{name:"AmbientLightSensor",methods:[],properties:["ambientLight"]},OccupancySensor:{name:"OccupancySensor",methods:[],properties:["occupied"]},FloodSensor:{name:"FloodSensor",methods:[],properties:["flooded"]},UltravioletSensor:{name:"UltravioletSensor",methods:[],properties:["ultraviolet"]},LuminanceSensor:{name:"LuminanceSensor",methods:[],properties:["luminance"]},PositionSensor:{name:"PositionSensor",methods:[],properties:["position"]},Readme:{name:"Readme",methods:["getReadmeMarkdown"],properties:[]},OauthClient:{name:"OauthClient",methods:["getOauthUrl","onOauthCallback"],properties:[]},MixinProvider:{name:"MixinProvider",methods:["canMixin","getMixin","releaseMixin"],properties:[]},HttpRequestHandler:{name:"HttpRequestHandler",methods:["onRequest"],properties:[]},EngineIOHandler:{name:"EngineIOHandler",methods:["onConnection"],properties:[]},PushHandler:{name:"PushHandler",methods:["onPush"],properties:[]},Program:{name:"Program",methods:["run"],properties:[]},Scriptable:{name:"Scriptable",methods:["eval","loadScripts","saveScript"],properties:[]},ObjectDetector:{name:"ObjectDetector",methods:["getDetectionInput","getObjectTypes"],properties:[]},ObjectDetection:{name:"ObjectDetection",methods:["detectObjects","getDetectionModel"],properties:[]},HumiditySetting:{name:"HumiditySetting",methods:["setHumidity"],properties:["humiditySetting"]},Fan:{name:"Fan",methods:["setFan"],properties:["fan"]},RTCSignalingChannel:{name:"RTCSignalingChannel",methods:["startRTCSignalingSession"],properties:[]},RTCSignalingClient:{name:"RTCSignalingClient",methods:["createRTCSignalingSession"],properties:[]}};let n,a,c,d,u,l,p,m,h;!function(e){e.Builtin="Builtin",e.Camera="Camera",e.Fan="Fan",e.Light="Light",e.Switch="Switch",e.Outlet="Outlet",e.Sensor="Sensor",e.Scene="Scene",e.Program="Program",e.Automation="Automation",e.Vacuum="Vacuum",e.Notifier="Notifier",e.Thermostat="Thermostat",e.Lock="Lock",e.PasswordControl="PasswordControl",e.Display="Display",e.SmartDisplay="SmartDisplay",e.Speaker="Speaker",e.SmartSpeaker="SmartSpeaker",e.Event="Event",e.Entry="Entry",e.Garage="Garage",e.DeviceProvider="DeviceProvider",e.DataSource="DataSource",e.API="API",e.Doorbell="Doorbell",e.Irrigation="Irrigation",e.Valve="Valve",e.Person="Person",e.Unknown="Unknown"}(n||(n={})),function(e){e.Humidify="Humidify",e.Dehumidify="Dehumidify",e.Auto="Auto",e.Off="Off"}(a||(a={})),function(e){e.Auto="Auto",e.Manual="Manual"}(c||(c={})),function(e){e.C="C",e.F="F"}(d||(d={})),function(e){e.Off="Off",e.Cool="Cool",e.Heat="Heat",e.HeatCool="HeatCool",e.Auto="Auto",e.FanOnly="FanOnly",e.Purifier="Purifier",e.Eco="Eco",e.Dry="Dry",e.On="On"}(u||(u={})),function(e){e.Locked="Locked",e.Unlocked="Unlocked",e.Jammed="Jammed"}(l||(l={})),function(e){e.Idle="Idle",e.Playing="Playing",e.Paused="Paused",e.Buffering="Buffering"}(p||(p={})),function(e){e.ScryptedDevice="ScryptedDevice",e.ScryptedPlugin="ScryptedPlugin",e.OnOff="OnOff",e.Brightness="Brightness",e.ColorSettingTemperature="ColorSettingTemperature",e.ColorSettingRgb="ColorSettingRgb",e.ColorSettingHsv="ColorSettingHsv",e.Notifier="Notifier",e.StartStop="StartStop",e.Pause="Pause",e.Dock="Dock",e.TemperatureSetting="TemperatureSetting",e.Thermometer="Thermometer",e.HumiditySensor="HumiditySensor",e.Camera="Camera",e.Microphone="Microphone",e.Display="Display",e.VideoCamera="VideoCamera",e.VideoRecorder="VideoRecorder",e.VideoClips="VideoClips",e.VideoCameraConfiguration="VideoCameraConfiguration",e.Intercom="Intercom",e.Lock="Lock",e.PasswordStore="PasswordStore",e.Authenticator="Authenticator",e.Scene="Scene",e.Entry="Entry",e.EntrySensor="EntrySensor",e.DeviceProvider="DeviceProvider",e.DeviceDiscovery="DeviceDiscovery",e.DeviceCreator="DeviceCreator",e.Battery="Battery",e.Refresh="Refresh",e.MediaPlayer="MediaPlayer",e.Online="Online",e.SoftwareUpdate="SoftwareUpdate",e.BufferConverter="BufferConverter",e.Settings="Settings",e.BinarySensor="BinarySensor",e.IntrusionSensor="IntrusionSensor",e.PowerSensor="PowerSensor",e.AudioSensor="AudioSensor",e.MotionSensor="MotionSensor",e.AmbientLightSensor="AmbientLightSensor",e.OccupancySensor="OccupancySensor",e.FloodSensor="FloodSensor",e.UltravioletSensor="UltravioletSensor",e.LuminanceSensor="LuminanceSensor",e.PositionSensor="PositionSensor",e.Readme="Readme",e.OauthClient="OauthClient",e.MixinProvider="MixinProvider",e.HttpRequestHandler="HttpRequestHandler",e.EngineIOHandler="EngineIOHandler",e.PushHandler="PushHandler",e.Program="Program",e.Scriptable="Scriptable",e.ObjectDetector="ObjectDetector",e.ObjectDetection="ObjectDetection",e.HumiditySetting="HumiditySetting",e.Fan="Fan",e.RTCSignalingChannel="RTCSignalingChannel",e.RTCSignalingClient="RTCSignalingClient"}(m||(m={})),function(e){e.Url="text/x-uri",e.InsecureLocalUrl="text/x-insecure-local-uri",e.LocalUrl="text/x-local-uri",e.PushEndpoint="text/x-push-endpoint",e.MediaStreamUrl="text/x-media-url",e.FFmpegInput="x-scrypted/x-ffmpeg-input",e.RTCSignalingChannel="x-scrypted/x-scrypted-rtc-signaling-channel",e.SchemePrefix="x-scrypted/x-scrypted-scheme-",e.MediaObject="x-scrypted/x-scrypted-media-object"}(h||(h={}))},113:e=>{"use strict";e.exports=require("crypto")},37:e=>{"use strict";e.exports=require("os")},257:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>h});var i=r(37);function s(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function n(e){var t="function"==typeof Map?new Map:void 0;return n=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,i)}function i(){return a(e,arguments,u(this).constructor)}return i.prototype=Object.create(e.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),d(i,e)},n(e)}function a(e,t,r){return a=c()?Reflect.construct:function(e,t,r){var i=[null];i.push.apply(i,t);var s=new(Function.bind.apply(e,i));return r&&d(s,r.prototype),s},a.apply(null,arguments)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}let l=function(e){function t(e,r,...i){var s,n,a;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),e instanceof Array||(i=(void 0===r?[]:[r]).concat(i),r=e,e=[]),n=this,(s=!(a=u(t).call(this,r))||"object"!=typeof a&&"function"!=typeof a?o(n):a).code=r||"E_UNEXPECTED",s.params=i,s.wrappedErrors=e,s.name=s.toString(),Error.captureStackTrace&&Error.captureStackTrace(o(s),s.constructor),s}var r,n,a;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&d(e,t)}(t,e),r=t,(n=[{key:"toString",value:function(){return(this.wrappedErrors.length?this.wrappedErrors[this.wrappedErrors.length-1].stack+i.EOL:"")+this.constructor.name+": "+this.code+" ("+this.params.join(", ")+")"}}])&&s(r.prototype,n),a&&s(r,a),t}(n(Error));function p(e){return e instanceof l||e.constructor&&e.constructor.name&&e.constructor.name.endsWith("Error")&&"string"==typeof e.code&&m(e.code)&&e.params&&e.params instanceof Array}function m(e){return/^([A-Z0-9_]+)$/.test(e)}l.wrap=function(e,t,...r){let i=null;const s=m(e.message),o=(e.wrappedErrors||[]).concat(e);return t||(t=s?e.message:"E_UNEXPECTED"),e.message&&!s&&r.push(e.message),i=new l(o,t,...r),i},l.cast=function(e,...t){return p(e)?e:l.wrap.apply(l,[e].concat(t))},l.bump=function(e,...t){return p(e)?l.wrap.apply(l,[e,e.code].concat(e.params)):l.wrap.apply(l,[e].concat(t))};const h=l}},t={};function r(i){var s=t[i];if(void 0!==s)return s.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,r),o.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{"use strict";r.r(i),r.d(i,{default:()=>Ne});var e=r(510),t=r.n(e);const{systemManager:s}=t(),o="v4";class n extends e.ScryptedDeviceBase{hasEnabledMixin={};unshiftMixin=!1;constructor(t){super(t);try{this.hasEnabledMixin=JSON.parse(this.storage.getItem("hasEnabledMixin"))}catch(e){this.hasEnabledMixin={}}this.pluginsComponent=s.getComponent("plugins"),s.listen((async(t,r,i)=>{r.eventInterface!==e.ScryptedInterface.ScryptedDevice||r.property||this.maybeEnableMixin(t)}));for(const e of Object.keys(s.getSystemState())){const t=s.getDeviceById(e);this.maybeEnableMixin(t)}}async shouldEnableMixin(e){return!0}async maybeEnableMixin(e){if(!e||e.mixins?.includes(this.id))return;if(this.hasEnabledMixin[e.id]===o)return;if(!await this.canMixin(e.type,e.interfaces))return;if(!await this.shouldEnableMixin(e))return;this.log.i("auto enabling mixin for "+e.name);const t=(e.mixins||[]).slice();this.unshiftMixin?t.unshift(this.id):t.push(this.id);const r=await this.pluginsComponent;await r.setMixins(e.id,t),this.setHasEnabledMixin(e.id)}setHasEnabledMixin(e){this.hasEnabledMixin[e]!==o&&(this.hasEnabledMixin[e]=o,this.storage.setItem("hasEnabledMixin",JSON.stringify(this.hasEnabledMixin)))}}const a=require("child_process");var c=r.n(a);const d=require("process");var u=r.n(d);const l=["decode_slice_header error","no frame!","non-existing PPS"];function p(e){if(e){try{e.stdin.write("q\n")}catch(e){}setTimeout((()=>{e.kill(),setTimeout((()=>{e.kill("SIGKILL")}),2e3)}),2e3)}}function m(e,t,r,i){const s=!!u().env.SCRYPTED_FFMPEG_NOISY||!!i?.getItem("SCRYPTED_FFMPEG_NOISY");function o(e){const i=o=>{const n=o.toString();for(const e of l)if(-1!==n.indexOf(e))return;if(!(s||r||-1===n.indexOf("frame=")&&-1===n.indexOf("size=")))return e(n),e("video/audio detected, discarding further input"),t.stdout.removeListener("data",i),void t.stderr.removeListener("data",i);e(n)};return i}t.stdout?.on("data",o(e.log)),t.stderr?.on("data",o(e.error)),t.on("exit",(()=>e.log("ffmpeg exited")))}function h(e,t){const r=[];let i=!1;for(const e of t){try{if(i){const t=new URL(e);r.push(`${t.protocol}[REDACTED]`)}else r.push(e)}catch(t){r.push(e)}i="-i"===e}e.log(r.join(" "))}const f=require("events");async function g(e,t){if(!t)return Buffer.alloc(0);{const r=e.read(t);if(r)return r}return new Promise(((r,i)=>{const s=()=>{const i=e.read(t);i&&(n(),r(i))},o=()=>{n(),i(new Error(`stream ended during read for minimum ${t} bytes`))},n=()=>{e.removeListener("readable",s),e.removeListener("end",o)};e.on("readable",s),e.on("end",o)}))}const y="\n".charCodeAt(0);async function v(e){return async function(e,t){const r=[];let i=0;for(;;){const s=await g(e,1);if(!s)throw new Error("end of stream");if(s[0]===t)break;r[i++]=s[0]}return Buffer.from(r).toString()}(e,y)}const{mediaManager:S}=t();async function*b(e){for(;;){const t=await g(e,8),r=t.readInt32BE(0)-8,i=t.slice(4).toString(),s=await g(e,r);yield{header:t,length:r,type:i,data:s}}}const _=["-movflags","frag_keyframe+empty_moov+default_base_moof+skip_sidx+skip_trailer","-f","mp4"];const w=require("net");var P=r.n(w);const x=require("dgram");var M=r.n(x);async function T(e){if(e)try{await new Promise((t=>e.close(t)))}catch(e){}}async function I(e,t){e.bind(t),await(0,f.once)(e,"listening");const r=e.address().port;return{port:r,url:`udp://127.0.0.1:${r}`}}async function C(e){return I(e,0)}async function O(){return async function(e){const t=M().createSocket("udp4"),{port:r,url:i}=await I(t,e);return{server:t,port:r,url:i}}(0)}async function R(e,t){return e.bind(t),await(0,f.once)(e,"listening"),{port:t,url:`udp://127.0.0.1:${t}`}}async function D(){const e=new(P().Server),t=await async function(e){return e.listen(0),await(0,f.once)(e,"listening"),e.address().port}(e),r=new Promise(((t,r)=>{const i=setTimeout((()=>{r(new Error("timeout waiting for client"))}),3e4);e.on("connection",(r=>{e.close(),clearTimeout(i),t(r)}))}));return{server:e,url:`tcp://127.0.0.1:${t}`,port:t,clientPromise:r}}function E(e){if(e)return JSON.parse(JSON.stringify(e))}const{mediaManager:A}=t();async function k(e,t){return new Promise((r=>{const i=s=>{const o=s.toString(),n=o.indexOf(`${t}: `);if(-1!==n){const s=o.substring(n+t.length+1).trim();let a=s.indexOf(" ");const c=s.indexOf(",");-1!==a&&c<a&&(a=c),-1!==a&&(e.stdout.removeListener("data",i),e.stderr.removeListener("data",i),r(s.substring(0,a)))}};e.stdout.on("data",i),e.stderr.on("data",i)}))}function B(e,t,r,i){let s;function o(){console.error("timeout waiting for data, killing parser session",e),t()}function n(){i&&(clearTimeout(s),s=setTimeout(o,i))}return r.once("killed",(()=>clearTimeout(s))),n(),{resetActivityTimer:n}}async function V(e,t){const{console:r}=t;let i,s=!0;const o=new f.EventEmitter;let n,a,d,u,l;o.on("error",(e=>r.error("rebroadcast error",e)));const g=new Promise(((e,t)=>{u=e,l=t}));let y;const v=new Promise((e=>{y=e}));function S(){s&&(o.emit("killed"),o.emit("error",new Error("killed"))),s=!1,clearTimeout(i),y(),l?.(new Error("ffmpeg was killed before connecting to the rebroadcast session")),p(T)}const b=e.inputArguments.slice();i=setTimeout(S,3e4);let _=!1;const w=e=>{if(!s)throw e(),new Error("parser session was killed killed before ffmpeg connected");o.on("killed",e)},P=["pipe","pipe","pipe"];let x=3;for(const e of Object.keys(t.parsers)){const i=t.parsers[e];if(i.parseDatagram){_=!0;const r=M().createSocket("udp4"),s=await C(r),n=M().createSocket("udp4");await R(n,s.port+1),w((()=>{r.close(),n.close()})),b.push(...i.outputArguments,s.url.replace("udp://","rtp://"));const{resetActivityTimer:a}=B(e,S,o,t?.timeout);(async()=>{for await(const t of i.parseDatagram(r,parseInt(d?.[2]),parseInt(d?.[3])))u?.(void 0),o.emit(e,t),a()})(),(async()=>{for await(const t of i.parseDatagram(n,parseInt(d?.[2]),parseInt(d?.[3]),"rtcp"))u?.(void 0),o.emit(e,t),a()})()}else if(i.tcpProtocol){const s=await D(),n=new URL(i.tcpProtocol);n.port=s.port.toString(),b.push(...i.outputArguments,n.toString());const{resetActivityTimer:a}=B(e,S,o,t?.timeout);(async()=>{const t=await s.clientPromise;try{w((()=>t.destroy()));for await(const r of i.parse(t,parseInt(d?.[2]),parseInt(d?.[3])))u?.(void 0),o.emit(e,r),a()}catch(e){r.error("rebroadcast parse error",e),S()}})()}else b.push(...i.outputArguments,"pipe:"+x++),P.push("pipe")}_&&(b.push("-sdp_file","pipe:"+x++),P.push("pipe")),b.unshift("-hide_banner"),h(r,b);const T=c().spawn(await A.getFFmpegPath(),b,{stdio:P});let I;m(r,T,void 0,t?.storage),T.on("exit",S),I=_?new Promise((e=>{const t=[];T.stdio[x-1].on("data",(r=>{t.push(r),e(t)}))})):Promise.resolve([]);let O=0;return Object.keys(t.parsers).forEach((async e=>{const i=t.parsers[e];if(!i.parse||i.tcpProtocol)return;const s=T.stdio[3+O];O++;try{const{resetActivityTimer:r}=B(e,S,o,t?.timeout);for await(const t of i.parse(s,parseInt(d?.[2]),parseInt(d?.[3])))u?.(void 0),o.emit(e,t),r()}catch(e){r.error("rebroadcast parse error",e),S()}})),async function(e){return k(e,"Audio")}(T).then((e=>n=e)),async function(e){return k(e,"Video")}(T).then((e=>a=e)),async function(e){return new Promise((t=>{const r=i=>{const s=i.toString(),o=/(([0-9]{2,5})x([0-9]{2,5}))/.exec(s);o&&(e.stdout.removeListener("data",r),e.stderr.removeListener("data",r),t(o))};e.stdout.on("data",r),e.stderr.on("data",r)}))}(T).then((e=>d=e)),await g,u=void 0,l=void 0,clearTimeout(i),{sdp:I,inputAudioCodec:n,inputVideoCodec:a,inputVideoResolution:{width:parseInt(d?.[1]),height:parseInt(d?.[2])},get isActive(){return s},kill:S,killed:v,negotiateMediaStream:()=>{const t=E(e.mediaStreamOptions)||{id:void 0,name:void 0};return t.video||(t.video={}),t.video.codec=a,t.audio=t?.audio?.codec===n?e?.mediaStreamOptions?.audio:{codec:n},t},emit(e,t){return o.emit(e,t),this},on(e,t){return o.on(e,t),this},once(e,t){return o.once(e,t),this},removeListener(e,t){return o.removeListener(e,t),this}}}async function j(e,t){const r=await e;let i=!0;const s=()=>{r.removeAllListeners(),r.destroy();const e=o;o=void 0,e?.()};let o=t?.connect((e=>{i&&(i=!1,e.startStream&&r.write(e.startStream));for(const t of e.chunks)r.write(t);return r.writableLength}),s);r.once("close",(()=>{s()})),r.on("error",(e=>t?.console?.log("client stream ended")))}const L=require("stream");var H=r(113),U=r.n(H);function N(e){let t=e.split("\n").map((e=>e.trim()));t=t.filter((e=>!e.includes("a=control:")));let r=0;for(let e=0;e<t.length;e++){t[e].startsWith("m=")&&(t.splice(e+1,0,"a=control:trackID="+r),r++)}return t.join("\r\n")}function F(e){const t=[];for(const r of e.split(" ").slice(3)||[])t.push(parseInt(r));return t}function K(e){return e.filter((e=>e.startsWith("a=fmtp"))).map((e=>{const t=e.indexOf(" ");if(-1===t)return;const r=e.substring(0,t),i=e.substring(t+1),s=parseInt(r.split(":")[1]);if(!r||!i||NaN===s)return;const o={};return i.split(";").map((e=>e.trim())).forEach((e=>{const[t,...r]=e.split("=");o[t]=r.join("=")})),{payloadType:s,parameters:o}})).filter((e=>!!e))}const q="a=control:";function $(e){const t=e.find((e=>e.startsWith(q)))?.substring(q.length),r=e.find((e=>e.startsWith("a=rtpmap:")))?.toLowerCase();let i,s;r?.includes("mpeg4")?i="aac":r?.includes("opus")?i="opus":r?.includes("pcm")?i="pcm":r?.includes("h264")?i="h264":r?.includes("h265")&&(i="h265");for(const t of["sendonly","sendrecv","recvonly","inactive"]){if(e.find((e=>e==="a="+t))){s=t;break}}return{...(o=e[0],{type:o.split(" ")[0].substring(2),payloadTypes:F(o)}),fmtp:K(e),lines:e,contents:e.join("\r\n"),control:t,codec:i,direction:s};var o}function G(e){const t=e.split("\n").map((e=>e.trim())),r=[],i=[];let s;for(const e of t)e.startsWith("m=")&&(s&&i.push(s),s=[]),s?s.push(e):r.push(e);s&&i.push(s);const o={header:{lines:r,contents:r.join("\r\n")},msections:i.map($),toSdp:()=>[...o.header.lines,...o.msections.map((e=>e.lines)).flat()].join("\r\n")};return o}const W=require("tls");var z=r.n(W),J=r(747);class Q extends Error{constructor(){super("Operation Timed Out")}}function Y(e,t){if("h264"!==e.type)return;const r=e.chunks[e.chunks.length-1].subarray(12),i=31&r[0];if(24===i){let e=1;for(;e<r.length;){const i=r.readUInt16BE(e);e+=2;if((31&r[e])===t)return r.subarray(e,e+i);e+=i}}else if(28===i){const e=31&r[1],i=!!(128&r[1]);if(e===t&&i)return r.subarray(1)}else if(i===t)return r}function X(e){const t={};for(const r of e.slice(1)){const e=r.indexOf(":");let i="";-1!==e&&(i=r.substring(e+1).trim());t[r.substring(0,e).toLowerCase()]=i}return t}class Z extends class{constructor(e){this.console=e}write(e,t,r){let i=`${e}\r\n`;r&&(t["Content-Length"]=r.length.toString());for(const[e,r]of Object.entries(t))i+=`${e}: ${r}\r\n`;i+="\r\n",this.client.write(i),this.console?.log("rtsp outgoing message\n",i),this.console?.log(),r&&this.client.write(r)}async readMessage(){const e=await async function(e){let t=[];for(;;){let r=await v(e);if(r=r.trim(),!r)return t;t.push(r)}}(this.client);return this.console?.log("rtsp incoming message\n",e.join("\n")),this.console?.log(),e}}{cseq=0;rfc4571=new L.PassThrough;needKeepAlive=!1;constructor(e,t){super(t),this.url=e;const r=new URL(e),i=parseInt(r.port)||554;e.startsWith("rtsps")?this.client=z().connect({rejectUnauthorized:!1,port:i,host:r.hostname}):this.client=P().connect(i,r.hostname)}writeRequest(e,t,r,i){t=t||{};let s=this.url;r&&(r.includes("rtsp://")||r.includes("rtsps://")?s=r:s+="/"+r);const o=new URL(s);o.username="",o.password="",s=o.toString();const n=`${e} ${s} RTSP/1.0`,a=this.cseq++;t.CSeq=a.toString(),this.authorization&&(t.Authorization=this.authorization),this.session&&(t.Session=this.session),this.write(n,t,i)}async handleDataPayload(e){if(36!==e[0])throw new Error("RTSP Client expected frame magic but received: "+e.toString());const t=e.readUInt16BE(2),r=await g(this.client,t);this.rfc4571.push(e),this.rfc4571.push(r)}async readDataPayload(){const e=await g(this.client,4);return this.handleDataPayload(e)}async readLoop(){try{for(;;)this.needKeepAlive&&(this.needKeepAlive=!1,await this.getParameter()),await this.readDataPayload()}catch(e){throw this.client.destroy(e),this.rfc4571.destroy(e),e}}async readMessage(){for(;;){const e=await g(this.client,4);if("RTSP"===e.toString()){this.client.unshift(e);return await super.readMessage()}await this.handleDataPayload(e)}}async request(e,t,r,i,s){this.writeRequest(e,t,r,i);const o=this.requestTimeout?await(n=this.requestTimeout,a=this.readMessage(),new Promise(((e,t)=>{setTimeout((()=>t(new Q)),n),a.then(e),a.catch(t)}))):await this.readMessage();var n,a;const c=o[0],d=X(o);if(!c.includes("200")&&!d["www-authenticate"])throw new Error(c);const u=d["www-authenticate"];if(u){if(s)throw new Error("auth failed");const o=new URL(this.url);if(u.includes("Basic")){const e=J.rh.computeHash(o);this.authorization=`Basic ${e}`}else{const t=J.Nu.parseWWWAuthenticateRest(u),r=decodeURIComponent(o.username),i=decodeURIComponent(o.password),s=U().createHash("md5").update(`${r}:${t.realm}:${i}`).digest("hex"),n=U().createHash("md5").update(`${e}:${o.pathname}`).digest("hex"),a=U().createHash("md5").update(`${s}:${t.nonce}:${n}`).digest("hex"),c={username:r,realm:t.realm,nonce:t.nonce,uri:o.pathname,algorithm:"MD5",response:a},d=Object.entries(c).map((([e,t])=>{return`${e}=${t&&(r=t,`"${r.replace(/"/g,'\\"')}"`)}`;var r})).join(", ");this.authorization=`Digest ${d}`}return this.request(e,t,r,i,!0)}const l=parseInt(d["content-length"]);return l?{headers:d,body:await g(this.client,l)}:{headers:d,body:void 0}}async options(){return this.request("OPTIONS",{})}async getParameter(){return this.request("GET_PARAMETER")}async describe(e){return this.request("DESCRIBE",{...e||{},Accept:"application/sdp"})}async setup(e,t,r){const i={Transport:`RTP/AVP/${r?"UDP":"TCP"};unicast;${r?"client_port":"interleaved"}=${e}-${e+1}`},s=await this.request("SETUP",i,t);if(s.headers.session){const e=function(e){const t={};for(const r of e.split(";")){const[e,i]=r.split("=",2);t[e]=i}return t}(s.headers.session);let t=parseInt(e.timeout);if(t){let e=setInterval((()=>this.needKeepAlive=!0),1e3*(t-5));this.client.once("close",(()=>clearInterval(e)))}this.session=s.headers.session.split(";")[0]}return s}async play(e="0.000"){const t={Range:`npt=${e}-`};return this.request("PLAY",t)}async pause(){return this.request("PAUSE")}async teardown(){try{return await this.request("TEARDOWN")}finally{this.client.destroy()}}}class ee{setupTracks={};constructor(e,t,r,i){this.client=e,this.sdp=t,this.udp=r,this.checkRequest=i,this.session=(0,H.randomBytes)(4).toString("hex"),t&&(t=t.trim())}async handleSetup(){let e=[];for(;;){let t=await v(this.client);if(t=t.trim(),t)e.push(t);else{if(!await this.headers(e))break;e=[]}}}async handlePlayback(){return this.handleSetup()}async handleTeardown(){return this.handleSetup()}async*handleRecord(){for(;;){const e=await g(this.client,4);if(36!==e[0])throw new Error("RTSP Server expected frame magic but received: "+e.toString());const t=e.readUInt16BE(2),r=await g(this.client,t),i=e.readUInt8(1),s=i-i%2,o=Object.values(this.setupTracks).find((e=>e.destination===s));if(!o)throw new Error("RSTP Server received unknown channel: "+i);yield{type:o.codec,rtcp:i%2==1,header:e,packet:r}}}send(e,t){const r=Buffer.alloc(4);r.writeUInt8(36,0),r.writeUInt8(t,1),r.writeUInt16BE(e.length,2),this.client.write(r),this.client.write(Buffer.from(e))}sendUdp(e,t,r){this.udp.send(t,r?e+1:e,"127.0.0.1")}sendTrack(e,t,r){const i=this.setupTracks[e];i?"udp"!==i.protocol?this.send(t,r?i.destination+1:i.destination):this.udp?this.sendUdp(i.destination,t,r):this.console?.warn("RTSP Server UDP socket not available."):this.console?.warn("RTSP Server track not found:",e)}options(e,t){const r={Public:"DESCRIBE, OPTIONS, PAUSE, PLAY, SETUP, TEARDOWN, ANNOUNCE, RECORD"};this.respond(200,"OK",t,r)}describe(e,t){const r={};r["Content-Base"]=e,r["Content-Type"]="application/sdp",this.respond(200,"OK",t,r,Buffer.from(this.sdp))}setup(e,t){const r={},i=t.transport;r.Transport=i,r.Session=this.session;const s=G(this.sdp).msections.find((t=>e.endsWith(t.control)));if(s){if(i.includes("UDP")){if(!this.udp)return void this.respond(461,"Unsupported Transport",t,{});const e=i.match(/.*?client_port=([0-9]+)-([0-9]+)/),[r,o,n]=e;this.setupTracks[s.control]={control:s.control,protocol:"udp",destination:parseInt(o),codec:s.codec}}else if(i.includes("TCP")){const e=i.match(/.*?interleaved=([0-9]+)-([0-9]+)/);if(e){const t=parseInt(e[1]);parseInt(e[2]);this.setupTracks[s.control]={control:s.control,protocol:"tcp",destination:t,codec:s.codec}}}this.respond(200,"OK",t,r)}else this.respond(404,"Not Found",t,r)}play(e,t){const r={},i=Object.values(this.setupTracks).map((t=>`url=${e}/${t.control}`)).join(",")+";seq=0;rtptime=0";r["RTP-Info"]=i,r.Range="npt=now-",r.Session=this.session,this.respond(200,"OK",t,r)}async announce(e,t){const r=parseInt(t["content-length"]),i=await g(this.client,r);this.sdp=i.toString();const s={};s.Session=this.session,this.respond(200,"OK",t,s)}async record(e,t){const r={};r.Session=this.session,this.respond(200,"OK",t,r)}async teardown(e,t){const r={};r.Session=this.session,this.respond(200,"OK",t,r)}async headers(e){this.console?.log("request headers",e.join("\n"));let[t,r]=e[0].split(" ",2);t=t.toLowerCase();const i=X(e);if(this.checkRequest){let s;try{s=await this.checkRequest(t,r,i,e)}catch(e){this.console?.error("error checking request",e)}if(!s)throw this.respond(400,"Bad Request",i,{}),this.client.destroy(),new Error("check request failed")}if(this[t])return await this[t](r,i),"play"!==t&&"record"!==t&&"teardown"!==t;this.respond(400,"Bad Request",i,{})}respond(e,t,r,i,s){let o=`RTSP/1.0 ${e} ${t}\r\n`;r.cseq&&(i.CSeq=r.cseq),s&&(i["Content-Length"]=s.length.toString());for(const[e,t]of Object.entries(i))o+=`${e}: ${t}\r\n`;this.console?.log("response headers",o),o+="\r\n",this.client.write(o),s&&(this.client.write(s),this.console?.log("response body",s.toString()))}}const{systemManager:te}=t();class re{values={};hasValue={};constructor(e,t){this.device=e,this.settings=t;for(const e of Object.keys(t)){const r=t[e],i=()=>this.getItem(e);let s;s="clippath"!==r.type?i:()=>{try{return JSON.parse(i())}catch(e){}},Object.defineProperty(this.values,e,{get:s,set:t=>this.putSetting(e,t)}),Object.defineProperty(this.hasValue,e,{get:()=>null!=this.device.storage.getItem(e)})}}get keys(){const e={};for(const t of Object.keys(this.settings))e[t]=t;return e}async getSettings(){const e=await(this.options?.onGet?.()),t=[];for(const[r,i]of Object.entries(this.settings)){let s=Object.assign({},i);e?.[r]&&(s=Object.assign(s,e[r])),s.onGet&&(s=Object.assign(s,await s.onGet())),s.hide||await(this.options?.hide?.[r]?.())||(s.key=r,s.value=this.getItemInternal(r,s),t.push(s),delete s.onPut,delete s.onGet,delete s.mapPut,delete s.mapGet)}return t}async putSetting(t,r){const i=this.settings[t];let s;i&&(s=this.getItemInternal(t,i)),i?.noStore||(i.mapPut&&(r=i.mapPut(s,r)),"object"==typeof r?this.device.storage.setItem(t,JSON.stringify(r)):this.device.storage.setItem(t,r?.toString())),i?.onPut?.(s,r),this.device.onDeviceEvent(e.ScryptedInterface.Settings,void 0)}getItemInternal(e,t){if(!t)return this.device.storage.getItem(e);const r=function(e,t){const{defaultValue:r}=t,i=t.multiple?"array":t.type;if("boolean"===i)return"true"===e||"false"!==e&&(r||!1);if("number"===i)return parseFloat(e)||r||0;if("integer"===i)return parseInt(e)||r||0;if("array"===i)try{return JSON.parse(e)}catch(e){return r||[]}if("device"===i)return te.getDeviceById(e);if(e&&t.json)try{return JSON.parse(e)}catch(e){return r}return e||r}(this.device.storage.getItem(e),t);return t.mapGet?t.mapGet(r):r}getItem(e){return this.getItemInternal(e,this.settings[e])}}const{deviceManager:ie}=t();class se extends e.MixinDeviceBase{constructor(t){super(t),this.settingsGroup=t.group,this.settingsGroupKey=t.groupKey,process.nextTick((()=>ie.onMixinEvent(this.id,this,e.ScryptedInterface.Settings,null)))}async getSettings(){const t=this.mixinDeviceInterfaces.includes(e.ScryptedInterface.Settings)?this.mixinDevice.getSettings():void 0,r=this.getMixinSettings(),i=[];try{const e=await t||[];i.push(...e)}catch(e){const t=this.name,r=`${t} Extension settings failed to load.`;this.console.error(r,e),i.push({key:Math.random().toString(),title:t,value:"Settings Error",group:"Errors",description:r,readonly:!0})}try{const e=await r||[];for(const t of e)t.group=t.group||this.settingsGroup,t.key=this.settingsGroupKey+":"+t.key;i.push(...e)}catch(e){const t=ie.getDeviceState(this.mixinProviderNativeId).name,r=`${t} Extension settings failed to load.`;this.console.error(r,e),i.push({key:Math.random().toString(),title:t,value:"Settings Error",group:"Errors",description:r,readonly:!0})}return i}async putSetting(t,r){const i=this.settingsGroupKey+":";if(!t?.startsWith(i))return this.mixinDevice.putSetting(t,r);await this.putMixinSetting(t.substring(i.length),r),ie.onMixinEvent(this.id,this,e.ScryptedInterface.Settings,null)}async release(){await ie.onMixinEvent(this.id,this,e.ScryptedInterface.Settings,null)}}function oe(e){return e}async function*ne(e){let t,r,i;for await(const s of e)t?r||(r=s):t=s,yield{startStream:i,chunks:[s.header,s.data],type:s.type},t&&r&&!i&&(i=Buffer.concat([t.header,t.data,r.header,r.data]))}class ae{bitoffset=0;constructor(e){this.view=e}ExpGolomb(){const{view:e}=this;let{zeros:t,skip:r,byt:i,byteoffset:s}=function(e,t){let r=0,i=t>>3,s=7&t,o=-1,n=e.getUint8(i)<<s;do{r=128&n,n<<=1,o++,s++,8===s&&(s=0,i++,n=e.getUint8(i))}while(!r);return{zeros:o,skip:s,byt:n,byteoffset:i}}(e,this.bitoffset),o=1;for(;t>0;)o=o<<1|(128&i)>>>7,i<<=1,r++,t--,8===r&&(r=0,s++,i=e.getUint8(s));return this.bitoffset=s<<3|r,o-1}SignedExpGolomb(){const e=this.ExpGolomb();return 1&e?e+1>>>1:-(e>>>1)}readBit(){const e=7&this.bitoffset,t=this.bitoffset>>3;return this.bitoffset++,this.view.getUint8(t)>>7-e&1}readByte(){const e=7&this.bitoffset,t=this.bitoffset>>3;this.bitoffset+=8;const r=this.view.getUint8(t);if(0===e)return r;return r<<e|this.view.getUint8(t+1)>>8-e}}function ce(e,t){let r=8,i=8;const s=[];for(let o=0;o<t;o++){if(0!==i){i=(r+e.SignedExpGolomb()+256)%256}i&&(r=i),s.push(i)}return s}function de(e){if(7!=(31&e[0]))throw new Error("Not an SPS unit");const t=new ae(new DataView(e.buffer,e.byteOffset+4)),r=e[1],i=e[2],s=e[3],o=t.ExpGolomb();let n=1,a=0,c=0,d=0,u=0,l=0;const p=[];if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){n=t.ExpGolomb();let e=8;if(3===n&&(e=12,d=t.readBit()),a=t.ExpGolomb()+8,c=t.ExpGolomb()+8,u=t.readBit(),l=t.readBit(),l){let r=0;for(;r<6;r++)t.readBit()&&p.push(ce(t,16));for(;r<e;r++)t.readBit()&&p.push(ce(t,64))}}const m=t.ExpGolomb()+4,h=t.ExpGolomb();let f=0,g=0,y=0;const v=[];let S=0;if(0===h)S=t.ExpGolomb()+4;else if(1===h){f=t.readBit(),g=t.SignedExpGolomb(),y=t.SignedExpGolomb();const e=t.SignedExpGolomb();for(let r=0;r<e;r++)v.push(t.SignedExpGolomb())}const b=t.ExpGolomb(),_=t.readBit(),w=t.ExpGolomb()+1,P=t.ExpGolomb()+1,x=t.readBit();let M=0;x||(M=t.readBit());const T=t.readBit(),I=t.readBit(),C=function(e,t){return e?{left:t.ExpGolomb(),right:t.ExpGolomb(),top:t.ExpGolomb(),bottom:t.ExpGolomb()}:{left:0,right:0,top:0,bottom:0}}(I,t),O=t.readBit(),R=function(e,t){const r={aspect_ratio_info_present_flag:0,aspect_ratio_idc:0,sar_width:0,sar_height:0,overscan_info_present_flag:0,overscan_appropriate_flag:0,video_signal_type_present_flag:0,video_format:0,video_full_range_flag:0,colour_description_present_flag:0,colour_primaries:0,transfer_characteristics:0,matrix_coefficients:0,chroma_loc_info_present_flag:0,chroma_sample_loc_type_top_field:0,chroma_sample_loc_type_bottom_field:0,nal_hrd_parameters_present_flag:0,vcl_hrd_parameters_present_flag:0,low_delay_hrd_flag:0,pic_struct_present_flag:0,bitstream_restriction_flag:0,motion_vectors_over_pic_boundaries_flag:0,max_bytes_per_pic_denom:0,max_bits_per_mb_denom:0,log2_max_mv_length_horizontal:0,log2_max_mv_length_vertical:0,num_reorder_frames:0,max_dec_frame_buffering:0};return e&&(r.aspect_ratio_info_present_flag=t.readBit(),r.aspect_ratio_info_present_flag&&(r.aspect_ratio_idc=t.ExpGolomb(),255===r.aspect_ratio_idc&&(r.sar_width=t.readByte(),r.sar_height=t.readByte())),r.overscan_info_present_flag=t.readBit(),r.overscan_info_present_flag&&(r.overscan_appropriate_flag=t.readBit()),r.video_signal_type_present_flag=t.readBit(),r.video_signal_type_present_flag&&(r.video_format=t.readBit()<<2|t.readBit()<<1|t.readBit(),r.video_full_range_flag=t.readBit(),r.colour_description_present_flag=t.readBit(),r.colour_description_present_flag&&(r.colour_primaries=t.readByte(),r.transfer_characteristics=t.readByte(),r.matrix_coefficients=t.readByte())),r.chroma_loc_info_present_flag=t.readBit(),r.chroma_loc_info_present_flag&&(r.chroma_sample_loc_type_top_field=t.ExpGolomb(),r.chroma_sample_loc_type_bottom_field=t.ExpGolomb()),r.nal_hrd_parameters_present_flag=t.readBit(),r.vcl_hrd_parameters_present_flag=t.readBit(),(r.nal_hrd_parameters_present_flag||r.vcl_hrd_parameters_present_flag)&&(r.low_delay_hrd_flag=t.readBit()),r.pic_struct_present_flag=t.readBit(),r.bitstream_restriction_flag=t.readBit(),r.bitstream_restriction_flag&&(r.bitstream_restriction_flag=t.readBit(),r.motion_vectors_over_pic_boundaries_flag=t.readBit(),r.max_bytes_per_pic_denom=t.ExpGolomb(),r.max_bits_per_mb_denom=t.ExpGolomb(),r.log2_max_mv_length_horizontal=t.ExpGolomb(),r.log2_max_mv_length_vertical=t.ExpGolomb(),r.num_reorder_frames=t.ExpGolomb(),r.max_dec_frame_buffering=t.ExpGolomb())),r}(O,t);return{sps_id:o,profile_compatibility:i,profile_idc:r,level_idc:s,chroma_format_idc:n,bit_depth_luma:a,bit_depth_chroma:c,color_plane_flag:d,qpprime_y_zero_transform_bypass_flag:u,seq_scaling_matrix_present_flag:l,seq_scaling_matrix:p,log2_max_frame_num:m,pic_order_cnt_type:h,delta_pic_order_always_zero_flag:f,offset_for_non_ref_pic:g,offset_for_top_to_bottom_field:y,offset_for_ref_frame:v,log2_max_pic_order_cnt_lsb:S,max_num_ref_frames:b,gaps_in_frame_num_value_allowed_flag:_,pic_width_in_mbs:w,pic_height_in_map_units:P,frame_mbs_only_flag:x,mb_adaptive_frame_field_flag:M,direct_8x8_inference_flag:T,frame_cropping_flag:I,frame_cropping:C,vui_parameters_present_flag:O,vui_parameters:R}}function ue(e){let t,r;0==e.chroma_format_idc&&0==e.color_plane_flag?t=r=0:1==e.chroma_format_idc&&0==e.color_plane_flag?t=r=2:2==e.chroma_format_idc&&0==e.color_plane_flag?(t=2,r=1):3==e.chroma_format_idc&&(0==e.color_plane_flag?t=r=1:1==e.color_plane_flag&&(t=r=0));let i=e.pic_width_in_mbs,s=e.pic_height_in_map_units,o=(2-e.frame_mbs_only_flag)*s,n=0,a=0,c=0,d=0;return e.frame_cropping_flag&&(n=e.frame_cropping.left,a=e.frame_cropping.right,c=e.frame_cropping.top,d=e.frame_cropping.bottom),{width:16*i-t*(n+a),height:16*o-r*(2-e.frame_mbs_only_flag)*(c+d)}}async function le(e,t,r,i,s,o){let n=!0;const a=new L.EventEmitter;a.on("error",(t=>e.error("rebroadcast error",t)));const c=G(r),d=c.msections.find((e=>"audio"===e.type)),u=c.msections.find((e=>"video"===e.type)),l=d?.payloadTypes?.[0],p=u?.payloadTypes?.[0],m=d?.codec,h=u.codec;let f;const y=new Promise((e=>{f=e})),v=()=>{n&&(a.emit("killed"),a.emit("error",new Error("killed"))),n=!1,f(),t.destroy()};t.on("close",v),t.on("error",v);const{resetActivityTimer:S}=B("rtsp",v,a,s?.timeout);let b;const _=u?.fmtp?.[0]?.parameters?.["sprop-parameter-sets"],w=_?.split(",")?.[0];if(w)try{const t=de(Buffer.from(w,"base64"));b=ue(t),e.log("parsed sdp sps",t)}catch(t){e.warn("sdp sps parsing failed")}return(async()=>{for(;;){let r,i,s;if(o){r=await g(t,4),i=r.readUInt16BE(2);const e=r.readUInt8(1);s=o[e]}else r=await g(t,2),i=r.readUInt16BE(0);const n=await g(t,i),c=127&n[1];if(!o){const e=Buffer.alloc(2);e[0]=36,c===l?e[1]=0:c===p&&(e[1]=2),r=Buffer.concat([e,r]),c===l?s=m:c===p&&(s=h)}const d={startStream:undefined,chunks:[r,n],type:s};if(!b){const t=Y(d,7);if(t)try{const r=de(t);b=ue(r),e.log(b),e.log("parsed bitstream sps",r)}catch(t){e.warn("sps parsing failed"),b={width:NaN,height:NaN}}}a.emit("rtsp",d),S()}})().finally(v),{sdp:Promise.resolve([Buffer.from(r)]),inputAudioCodec:m,inputVideoCodec:h,get inputVideoResolution(){return b},get isActive(){return n},kill:v,killed:y,resetActivityTimer:S,negotiateMediaStream:e=>{const t=E(i)||{id:void 0,name:void 0};if(t.video||(t.video={}),t.video.codec=h,e?.audio?.codec&&e?.audio?.codec!==m){if(c.msections.find((t=>"audio"===t.type&&t.codec===e?.audio?.codec)))return t.audio={codec:e?.audio?.codec},t}return t.audio=t?.audio?.codec===m?i?.audio:{codec:m},t},emit(e,t){return a.emit(e,t),this},on(e,t){return a.on(e,t),this},once(e,t){return a.once(e,t),this},removeListener(e,t){return a.removeListener(e,t),this}}}var pe=r(37),me=r.n(pe);const he=["BCM2708","BCM2709","BCM2710","BCM2835","BCM2836","BCM2837","BCM2837B0","BCM2711"];function fe(){let e;try{e=r(733).readFileSync("/proc/cpuinfo",{encoding:"utf8"})}catch(e){return!1}const t=e.split("\n").map((e=>e.replace(/\t/g,""))).filter((e=>e.length>0)).map((e=>e.split(":"))).map((e=>e.map((e=>e.trim())))).filter((e=>"Hardware"===e[0]));if(!t||0==t.length)return!1;return function(e){return he.indexOf(e)>-1}(t[0][1])}const ge="Video4Linux (Docker compatible)";function ye(){if(fe()){return{}}if("darwin"===me().platform())return{VideoToolbox:["-hwaccel","auto"]};const e={"Nvidia CUDA":["-vsync","0","–hwaccel","cuda","-hwaccel_output_format","cuda"],"Nvidia CUVID":["-vsync","0","–hwaccel","cuvid","-c:v","h264_cuvid"]};if(fe())e["Raspberry Pi"]=["-c:v","h264_mmal"],e[ge]=["-c:v","h264_v4l2m2m"];else if("linux"===me().platform())e[ge]=["-c:v","h264_v4l2m2m"];else{if("win32"!==me().platform())return{};e["Intel QuickSync"]=["-c:v","h264_qsv"]}return e}function ve(){const e={"Copy Video, Transcode Audio":"copy"};if(fe());else if("darwin"===me().platform())e.VideoToolbox="h264_videotoolbox";else if("win32"===me().platform())e["Intel QuickSync"]="h264_qsv",e.AMD="h264_amf",e.Nvidia="h264_nvenc";else{if("linux"!==me().platform())return{};e.V4L2="h264_v4l2m2m",e.VAAPI="h264_vaapi",e.Nvidia="nvenc_h264"}const t={};for(const[r,i]of Object.entries(e))t[r]=["-c:v",i];return fe()&&(t["Raspberry Pi"]=["-pix_fmt","yuv420p","-c:v","h264_v4l2m2m"]),t["libx264 (Software)"]=["-c:v","libx264","-preset","ultrafast","-bf","0","-force_key_frames","expr:gte(t,n_forced*4)"],t}function Se(e){if(!e)return;const t=e.find((e=>"cloud"!==e.source));return t?[t]:[]}function be(e,t){if(t)return e.hasValue.enabledStreams?t.filter((t=>e.values.enabledStreams.includes(t.name))):Se(t)}function _e(e){const t={defaultStream:{title:"Local Stream",description:"The media stream to use when streaming on your local network. This stream should be prebuffered. Recommended resolution: 1920x1080 to 4K.",hide:!0,prefersPrebuffer:!0,preferredResolution:8294400},remoteStream:{title:"Remote (Medium Resolution) Stream",description:"The media stream to use when streaming from outside your local network. Selecting a low birate stream is recommended. Recommended resolution: 1270x720.",hide:!0,prefersPrebuffer:!1,preferredResolution:921600},lowResolutionStream:{title:"Low Resolution Stream",description:"The media stream to use for low resolution output, such as Apple Watch and Video Analysis. Recommended resolution: 480x360.",hide:!0,prefersPrebuffer:!1,preferredResolution:172800},recordingStream:{title:"Local Recording Stream",description:"The media stream to use when recording to local storage such as an NVR. This stream should be prebuffered. Recommended resolution: 1920x1080 to 4K.",hide:!0,prefersPrebuffer:!0,preferredResolution:8294400},remoteRecordingStream:{title:"Remote Recording Stream",description:"The media stream to use when recording to cloud storage such as HomeKit Secure Video clips in iCloud. This stream should be prebuffered. Recommended resolution: 1270x720.",hide:!0,prefersPrebuffer:!0,preferredResolution:921600}},r=new re(e,{enabledStreams:{title:"Prebuffered Streams",description:"Prebuffering maintains an active connection to the stream and improves load times. Prebuffer also retains the recent video for capturing motion events with HomeKit Secure video. Enabling Prebuffer is not recommended on Cloud cameras.",multiple:!0,hide:!1},...t,transcodeStreams:{group:"Transcoding",title:"Transcode Streams",description:"The media streams to transcode. Transcoding audio and video is not recommended and should only be used when necessary. The Rebroadcast Plugin manages the system-wide Transcode settings. See the Rebroadcast Readme for optimal configuration.",multiple:!0,choices:Object.values(t).map((e=>e.title))},missingCodecParameters:{group:"Transcoding",title:"Add H264 Extra Data",description:"Some cameras do not include H264 extra data in the stream and this causes live streaming to always fail (but recordings may be working). This is a inexpensive video filter and does not perform a transcode. Enable this setting only as necessary.",type:"boolean"},videoDecoderArguments:{group:"Transcoding",title:"Video Decoder Arguments",description:"FFmpeg arguments used to decode input video when transcoding a stream.",placeholder:"-hwaccel auto",choices:Object.keys(ye()),combobox:!0,mapPut:(e,t)=>ye()[t]?.join(" ")||t}});function i(e,t){const i=be(r,t);return function(e,t){if(!e)return;let r,i;for(const s of e){const e=Math.abs(s.video?.width*s.video?.height-t);(!r||e<i)&&(r=s,i=e,Number.isNaN(i)&&(i=Number.MAX_SAFE_INTEGER))}return r}(e.prefersPrebuffer&&i?.length>0?i:t,e.preferredResolution)}function s(e,s){const o=r.settings[e],n=r.values[e];let a="Default"===n,c=s?.find((e=>e.name===n));return!a&&c||(a=!0,c=i(o,s)),{title:t[e].title,isDefault:a,stream:c}}function o(e,t){const r=["Default",...t.map((e=>e.name))],s=i(e,t).name;return{defaultValue:"Default",description:e.description+` The default for this stream is ${s}.`,choices:r,hide:!1}}return r.options={onGet:async()=>{let r;try{const i=await e.mixinDevice.getVideoStreamOptions();return r={defaultValue:Se(i)?.map((e=>e.name)),choices:i.map((e=>e.name)),hide:!1},i?.length>1?{enabledStreams:r,defaultStream:o(t.defaultStream,i),remoteStream:o(t.remoteStream,i),lowResolutionStream:o(t.lowResolutionStream,i),recordingStream:o(t.recordingStream,i),remoteRecordingStream:o(t.remoteRecordingStream,i)}:{enabledStreams:r}}catch(t){e.console.error("error retrieving getVideoStreamOptions",t)}return{}}},{getDefaultStream:e=>s(r.keys.defaultStream,e),getRemoteStream:e=>s(r.keys.remoteStream,e),getLowResolutionStream:e=>s(r.keys.lowResolutionStream,e),getRecordingStream:e=>s(r.keys.recordingStream,e),getRemoteRecordingStream:e=>s(r.keys.remoteRecordingStream,e),storageSettings:r}}const{mediaManager:we,log:Pe,systemManager:xe,deviceManager:Me}=t(),Te="Default",Ie="AAC or No Audio",Ce=`${Ie} (Copy)`,Oe="Compatible Audio",Re="Other Audio",De=["aac","mp3","mp2","opus"],Ee="-fflags +genpts",Ae="Scrypted",ke="FFmpeg (TCP)",Be="FFmpeg (UDP)",Ve="Default",je=[Ie,Oe,Re],Le=["mpegts","mp4","rtsp"];class He{prebuffers={mp4:[],mpegts:[],rtsp:[]};audioDisabled=!1;activeClients=0;needBitrateReset=!1;constructor(e,t,r){this.mixin=e,this.advertisedMediaStreamOptions=t,this.stopInactive=r,this.storage=e.storage,this.console=e.console,this.mixinDevice=e.mixinDevice,this.audioConfigurationKey="audioConfiguration-"+this.streamId,this.ffmpegInputArgumentsKey="ffmpegInputArguments-"+this.streamId,this.rebroadcastModeKey="rebroadcastMode-"+this.streamId,this.lastDetectedAudioCodecKey="lastDetectedAudioCodec-"+this.streamId,this.rtspParserKey="rtspParser-"+this.streamId;const i="rtspServerPathKey-"+this.streamId;this.maxBitrateKey="maxBitrate-"+this.streamId,this.rtspServerPath=this.storage.getItem(i),this.rtspServerPath||(this.rtspServerPath=U().randomBytes(8).toString("hex"),this.storage.setItem(i,this.rtspServerPath))}get maxBitrate(){let e=parseInt(this.storage.getItem(this.maxBitrateKey));return e||(e=this.advertisedMediaStreamOptions?.video?.maxBitrate,this.storage.setItem(this.maxBitrateKey,e?.toString())),e||void 0}async resetBitrate(){this.console.log("Resetting bitrate after adaptive streaming session",this.maxBitrate),this.needBitrateReset=!1,this.mixinDevice.setVideoStreamOptions({id:this.streamId,video:{bitrate:this.maxBitrate}})}get streamId(){return this.advertisedMediaStreamOptions.id}get streamName(){return this.advertisedMediaStreamOptions.name}clearPrebuffers(){this.prebuffers.mp4=[],this.prebuffers.mpegts=[],this.prebuffers.rtsp=[]}ensurePrebufferSession(){this.parserSessionPromise||this.mixin.released||(this.console.log(this.streamName,"prebuffer session started"),this.parserSessionPromise=this.startPrebufferSession(),this.parserSessionPromise.catch((()=>this.parserSessionPromise=void 0)))}getAudioConfig(){let e=this.storage.getItem(this.audioConfigurationKey)||"";je.find((t=>e.startsWith(t)))||(e="");const t=-1!==e.indexOf(Ie),r=-1!==e.indexOf(Oe),i=-1!==e.indexOf(Re);return{isUsingDefaultAudioConfig:!(t||r||i),aacAudio:t,compatibleAudio:r,reencodeAudio:i}}canUseRtspParser(e,t){if(e)return!1;if("rtsp"!==t?.container)return!1;const{isUsingDefaultAudioConfig:r,compatibleAudio:i,aacAudio:s}=this.getAudioConfig();return r||i||s}getParser(e,t,r){if(!this.canUseRtspParser(t,r))return Ve;const i=e&&"scrypted"===r?.tool?Ae:Ve,s=this.storage.getItem(this.rtspParserKey);return s&&s!==Ve?s===Ae?Ae:s===ke?ke:s===Be?Be:i:i}getRebroadcastMode(){let e=this.storage.getItem(this.rebroadcastModeKey)||"Default",t="MPEG-TS";"scrypted"===this.advertisedMediaStreamOptions?.tool&&this.advertisedMediaStreamOptions?.container?.startsWith("rtsp")&&(t="RTSP"),"Default"===e&&(e=t);const r=e?.startsWith("RTSP");return{defaultMode:t,rtspMode:e?.startsWith("RTSP"),muxingMp4:!r||e?.includes("MP4")}}async getMixinSettings(){const t=[],r=this.parserSession;let i=0,s=0;const{muxingMp4:o,rtspMode:n,defaultMode:a}=this.getRebroadcastMode();for(const e of o?this.prebuffers.mp4:this.prebuffers.rtsp){s=s||e.time;for(const t of e.chunk.chunks)i+=t.byteLength}const c=Date.now()-s,d=Math.round(i/c*8),u=this.streamName?`Stream: ${this.streamName}`:"Stream";t.push({title:"Audio Codec Transcoding",group:u,description:"Configuring your camera to output AAC, MP3, MP2, or Opus is recommended. PCM/G711 cameras should set this to Transcode.",type:"string",key:this.audioConfigurationKey,value:this.storage.getItem(this.audioConfigurationKey)||Te,choices:[Te,Ce,"Compatible Audio (Copy)","Other Audio (Transcode)"]},{title:"Rebroadcast Container",group:u,description:`Experimental: The container format to use when rebroadcasting. MPEG-TS is stable. RTSP is lower latency. The default mode for this camera is ${a}.`,placeholder:"MPEG-TS",choices:[Ve,"MPEG-TS","RTSP"],key:this.rebroadcastModeKey,value:this.storage.getItem(this.rebroadcastModeKey)||Ve});const l=()=>{t.push({title:"FFmpeg Input Arguments Prefix",group:u,description:"Optional/Advanced: Additional input arguments to pass to the ffmpeg command. These will be placed before the input arguments.",key:this.ffmpegInputArgumentsKey,value:this.storage.getItem(this.ffmpegInputArgumentsKey),placeholder:Ee,choices:[Ee,"-use_wallclock_as_timestamps 1","-v verbose"],combobox:!0})};if(this.canUseRtspParser(o,this.advertisedMediaStreamOptions)&&n&&"rtsp"===this.advertisedMediaStreamOptions?.container){const e=this.getParser(n,o,this.advertisedMediaStreamOptions),r=n&&"scrypted"===this.advertisedMediaStreamOptions?.tool?Ae:"FFmpeg";t.push({key:this.rtspParserKey,group:u,title:"RTSP Parser",description:`Experimental: The RTSP Parser used to read the stream. FFmpeg is stable. The Scrypted parser is lower latency. The Scrypted Parser is only available when the Audo Codec is not Transcoding and the Rebroadcast Container is RTSP. The default is "${r}" for this camera.`,value:this.storage.getItem(this.rtspParserKey)||Ve,choices:[Ve,ke,Be,Ae]}),e!==Ae&&l()}else l();if(r){const e=r.inputVideoResolution?.width&&r.inputVideoResolution?.height?`${r.inputVideoResolution?.width}x${r.inputVideoResolution?.height}`:"unknown";t.push({key:"detectedResolution",group:u,title:"Detected Resolution and Bitrate",readonly:!0,value:`${e} @ ${d||"unknown"} Kb/s`,description:"Configuring your camera to 1920x1080, 2000Kb/S, Variable Bit Rate, is recommended."},{key:"detectedCodec",group:u,title:"Detected Video/Audio Codecs",readonly:!0,value:(r?.inputVideoCodec?.toString()||"unknown")+"/"+(r?.inputAudioCodec?.toString()||"unknown"),description:"Configuring your camera to H264 video and AAC/MP3/MP2/Opus audio is recommended."},{key:"detectedKeyframe",group:u,title:"Detected Keyframe Interval",description:"Configuring your camera to 4 seconds is recommended (IDR aka Frame Interval = FPS * 4 seconds).",readonly:!0,value:(this.detectedIdrInterval||0)/1e3||"unknown"})}else t.push({title:"Status",group:u,key:"status",description:"Rebroadcast is currently idle and will be started automatically on demand.",value:"Idle",readonly:!0});return n&&t.push({group:u,key:"rtspRebroadcastUrl",title:"RTSP Rebroadcast Url",description:"The RTSP URL of the rebroadcast stream. Substitute localhost as appropriate.",readonly:!0,value:`rtsp://localhost:${this.mixin.plugin.storageSettings.values.rebroadcastPort}/${this.rtspServerPath}`}),this.mixin.mixinDeviceInterfaces.includes(e.ScryptedInterface.VideoCameraConfiguration)&&t.push({group:u,key:this.maxBitrateKey,title:"Max Bitrate",description:"This camera supports Adaptive Bitrate. Set the maximum bitrate to be allowed while using adaptive bitrate streaming. This will also serve as the default bitrate.",type:"number",value:this.maxBitrate?.toString()}),t}async startPrebufferSession(){let t;this.prebuffers.mp4=[],this.prebuffers.mpegts=[],this.prebuffers.rtsp=[];try{t=(await this.mixinDevice.getVideoStreamOptions()).find((e=>e.id===this.streamId))}catch(e){}const r=null===t?.audio,i=t?.audio?.codec,{isUsingDefaultAudioConfig:s,aacAudio:o,compatibleAudio:n,reencodeAudio:a}=this.getAudioConfig(),{rtspMode:d,muxingMp4:u}=this.getRebroadcastMode();let l=this.storage.getItem(this.lastDetectedAudioCodecKey)||void 0;"null"===l&&(l=null);let g=!1;u&&!r&&!i&&s&&void 0===l&&(this.console.warn("Camera did not report an audio codec, muting the audio stream and probing the codec."),g=!0);const y=void 0===l?i?.toLowerCase():l?.toLowerCase(),v=!De.includes(y);!u||g||!1===t?.userConfigurable||r||v&&(s&&Pe.a(`${this.mixin.name} is using the ${y} audio codec. Configuring your Camera to use AAC, MP3, MP2, or Opus audio is recommended. If this is not possible, Select 'Transcode Audio' in the camera stream's Rebroadcast settings to suppress this alert.`),this.console.warn("Configure your camera to output AAC, MP3, MP2, or Opus audio. Suboptimal audio codec in use:",y));const w=["-bsf:a","aac_adtstoasc"],x=[];let M;this.audioDisabled=!1;const I=null===l;let C=!1;if(!g&&s&&v&&(!1===t?.userConfigurable?this.console.log("camera reports it is not user configurable. transcoding due to incompatible codec",y):this.console.log("camera audio transcoding due to incompatible codec. configure the camera to use a compatible codec if possible."),C=!0),r||g)M=["-an"],this.audioDisabled=!0;else if(a||C)M=["-bsf:a","aac_adtstoasc","-acodec","aac","-ar","32k","-b:a","32k","-ac","1","-profile:a","aac_low","-flags","+global_header"];else if(o||I)M=["-acodec","copy"],M.push(...w);else if(n)M=["-acodec","copy"],M.push(...x);else{M=["-acodec","copy"];const e="aac"===y?w:x;M.push(...e)}const R=["-vcodec","copy"],D={console:this.console,timeout:6e4,parsers:{}};if(this.parsers=D.parsers,this.console.log("rebroadcast mode:",d?"rtsp":"mpegts"),d){const e=function(e){let t;return{container:"rtsp",tcpProtocol:"rtsp://127.0.0.1/"+(0,H.randomBytes)(8).toString("hex"),inputArguments:["-rtsp_transport","tcp"],outputArguments:["-rtsp_transport","tcp",...e?.vcodec||[],...e?.acodec||[],"-f","rtsp"],findSyncFrame(e){let t;for(let r=0;r<e.length;r++)Y(e[r],7)&&(t=r);return void 0!==t?e.slice(t):e},sdp:new Promise((e=>t=e)),async*parse(e,r,i){const s=new ee(e);await s.handleSetup(),t(s.sdp);for await(const{type:e,rtcp:t,header:o,packet:n}of s.handleRecord())yield{chunks:[o,n],type:`${t?"rtcp":"rtp"}-${e}`,width:r,height:i}}}}({vcodec:R,acodec:s?["-acodec","copy"]:M});this.sdp=e.sdp,D.parsers.rtsp=e}else D.parsers.mpegts={container:"mpegts",outputArguments:[...(E={vcodec:R,acodec:M})?.vcodec||[],...E?.acodec||[],"-f","mpegts"],parse:(A=188,k=e=>{if(71!=e[0])throw new Error("Invalid sync byte in mpeg-ts packet. Terminating stream.")},async function*(e){let t=[],r=0;for(;;){const i=e.read();if(!i){await(0,f.once)(e,"readable");continue}if(t.push(i),r+=i.length,r<A)continue;const s=Buffer.concat(t);k?.(s);const o=s.length%A,n=s.slice(0,s.length-o),a=s.slice(s.length-o);t=[a],r=a.length,yield{chunks:[n]}}}),findSyncFrame(e){for(let t=0;t<e.length;t++){const r=e[t];for(let i=0;i<r.chunks.length;i++){const s=r.chunks[i];let o=0;for(;o+188<s.length;){const r=s.subarray(o,o+188);if(256==((31&r[1])<<8|r[2])&&32&r[3]&&r[4]>0&&64&r[5])return e.slice(t);o+=188}}}return e}};var E,A,k;u&&(D.parsers.mp4=function(e){return{container:"mp4",outputArguments:[...e?.vcodec||[],...e?.acodec||[],..._],async*parse(e){const t=b(e);yield*ne(t)},findSyncFrame:oe}}({vcodec:R,acodec:M}));const j=await this.mixinDevice.getVideoStream(t),L="x-scrypted/x-rfc4571"===j.mimeType;let U,N;this.storage.removeItem(this.lastDetectedAudioCodecKey);let F=!1;if(d&&L){F=!0,this.console.log("bypassing ffmpeg: using scrypted rfc4571 parser");const e=await we.convertMediaObjectToJSON(j,"x-scrypted/x-rfc4571"),{url:t,sdp:r,mediaStreamOptions:i}=e;U=await le(this.console,function(e){const t=new URL(e);if(!t.protocol.startsWith("tcp"))throw new Error("rfc4751 url must be tcp");return P().connect(parseInt(t.port),t.hostname)}(t),r,i,D),this.sdp=U.sdp.then((e=>Buffer.concat(e).toString()))}else{const t=await we.convertMediaObjectToBuffer(j,e.ScryptedMimeTypes.FFmpegInput),i=JSON.parse(t.toString());N=i.mediaStreamOptions;const s=this.getParser(d,u,i.mediaStreamOptions);if(s===Ae){F=!0,this.console.log("bypassing ffmpeg: using scrypted rtsp/rfc4571 parser");const e=new Z(i.url,this.console);let t=[];const s=()=>{for(const e of t)T(e)};try{e.requestTimeout=1e4,await e.options();let o=(await e.describe()).body.toString().trim();this.console.log("sdp",o);const n=G(o);let a=0;const c={},d=!1,u=async(r,i)=>{let s=a;if(d){const e=a,{port:r,server:o}=await O();t.push(o),s=r,o.on("message",(t=>{const r=Buffer.alloc(4);r.writeUInt8(36,0),r.writeUInt8(e,1),r.writeUInt16BE(t.length,2);const s={chunks:[r,t],type:i};U?.emit("rtsp",s),U?.resetActivityTimer?.()}))}await e.setup(s,r,d),c[a]=i,a+=2};if(!r){for(const e of n.msections.filter((e=>"audio"===e.type)))await u(e.control,e.codec);0===a&&this.console.warn("sdp did not contain audio track and audio was not reported as missing.")}const l=n.msections.find((e=>"video"===e.type));n.msections=n.msections.filter((e=>e===l||"audio"===e.type)),o=[...n.header.lines,...n.msections.map((e=>e.lines)).flat()].join("\r\n"),this.sdp=Promise.resolve(o),await u(l.control,l.codec),await e.play(),U=await le(this.console,e.rfc4571,o,i.mediaStreamOptions,D,c);const p=U.kill.bind(U);let m=!1;if(U.kill=async()=>{s(),m||(m=!0,e.teardown().finally(p)),await async function(e){await new Promise((t=>setTimeout(t,e)))}(500),e.client.destroy(),p()},!U.isActive)throw new Error("parser was killed before rtsp client started");e.readLoop().finally((()=>U.kill()))}catch(t){throw s(),e.client.destroy(),t}}else{s===Be?i.inputArguments=["-rtsp_transport","udp","-i",i.url]:s===ke&&(i.inputArguments=["-rtsp_transport","tcp","-i",i.url]);const e=this.storage.getItem(this.ffmpegInputArgumentsKey)||Ee;i.inputArguments.unshift(...e.split(" ")),U=await V(i,D)}}F&&u&&this.getVideoStream({id:this.streamId,refresh:!1}).then((async e=>{const t=this.storage.getItem(this.ffmpegInputArgumentsKey)||Ee;e.inputArguments.unshift(...t.split(" "));const r=await async function(e,t,r,i){const s=e.slice();s.push(...r,...t,..._,"pipe:3"),s.unshift("-hide_banner"),h(i,s);const o=c().spawn(await S.getFFmpegPath(),s,{stdio:["pipe","pipe","pipe","pipe"]});return m(i,o),{cp:o,generator:b(o.stdio[3])}}(e.inputArguments,M,R,this.console),i=()=>{p(r.cp),U.kill(),r.generator.throw(new Error("killed"))};if(!U.isActive)return void i();U.killed.finally(i);const{resetActivityTimer:s}=B("mp4",i,U,D.timeout);for await(const e of ne(r.generator))s(),U.emit("mp4",e)})).catch((()=>{})),!r&&i&&void 0!==U.inputAudioCodec&&U.inputAudioCodec!==i&&this.console.warn("Audio codec plugin reported vs detected mismatch",i,l);const K=t?.video?.codec;if(K&&void 0!==U.inputVideoCodec&&U.inputVideoCodec!==K&&this.console.warn("Video codec plugin reported vs detected mismatch",K,U.inputVideoCodec),U.inputAudioCodec?De.includes(U.inputAudioCodec?.toLowerCase())?this.console.log("Detected audio codec is mp4/mpegts compatible.",U.inputAudioCodec):this.console.log("Detected audio codec is not mp4/mpegts compatible.",U.inputAudioCodec):this.console.log("No audio stream detected."),this.storage.setItem(this.lastDetectedAudioCodecKey,U.inputAudioCodec||"null"),"h264"!==U.inputVideoCodec&&this.console.error("Video codec is not h264. If there are errors, try changing your camera's encoder output."),g)return this.console.warn("Audio probe complete, ending rebroadcast session and restarting with detected codecs."),U.kill(),this.startPrebufferSession();if(this.parserSession=U,Me.onMixinEvent(this.mixin.id,this.mixin.mixinProviderNativeId,e.ScryptedInterface.Settings,void 0),N?.refreshAt){let t,r=N;const i=async()=>{if(!U.isActive)return;const t=await this.mixinDevice.getVideoStream(r),i=await we.convertMediaObjectToBuffer(t,e.ScryptedMimeTypes.FFmpegInput),o=JSON.parse(i.toString());r=o.mediaStreamOptions,s(r)},s=e=>{const r=e.refreshAt-Date.now()-3e4;this.console.log("refreshing media stream in",r),t=setTimeout(i,r)};s(r),U.killed.finally((()=>clearTimeout(t)))}U.killed.finally((()=>{clearTimeout(this.inactivityTimeout),this.parserSessionPromise=void 0,this.parserSession===U&&(this.parserSession=void 0)}));for(const t of Le){let r,i=0;this.detectedIdrInterval=void 0,U.on(t,(s=>{const o=this.prebuffers[t],n=Date.now(),a=()=>{if(r){const t="number"!=typeof this.detectedIdrInterval;this.detectedIdrInterval=n-r,t&&Me.onMixinEvent(this.mixin.id,this.mixin.mixinProviderNativeId,e.ScryptedInterface.Settings,void 0)}r=n};for(("mdat"===s.type||"h264"===s.type&&Y(s,5))&&a(),o.push({time:n,chunk:s});o.length&&o[0].time<n-1e4;)o.shift(),i++;i>1e3&&(this.prebuffers[t]=o.slice(),i=0)}))}return U}printActiveClients(){this.console.log(this.streamName,"active rebroadcast clients:",this.activeClients)}inactivityCheck(t,r){this.activeClients||(this.needBitrateReset&&this.mixin.mixinDeviceInterfaces.includes(e.ScryptedInterface.VideoCameraConfiguration)&&this.resetBitrate(),this.stopInactive&&(this.inactivityTimeout&&!r||(clearTimeout(this.inactivityTimeout),this.inactivityTimeout=setTimeout((()=>{this.inactivityTimeout=void 0,this.activeClients?this.console.log("inactivity timeout found active clients."):(this.console.log(this.streamName,"terminating rebroadcast due to inactivity"),t.kill())}),3e4))))}async handleRebroadcasterClient(e){const{isActiveClient:t,container:r,session:i,socketPromise:s,requestedPrebuffer:o}=e;o&&this.console.log("sending prebuffer",o),j(s,{connect:(s,n)=>{t&&(this.activeClients++,this.printActiveClients());const a=Date.now(),c=t=>{if(e.filter&&!(t=e.filter(t)))return;s(t)>1e8&&(this.console.log("more than 100MB has been buffered, did downstream die? killing connection.",this.streamName),d())},d=()=>{i.removeListener(r,c),i.removeListener("killed",d),n()};i.on(r,c),i.once("killed",d);const u=this.prebuffers[r];if("rtsp"!==r)for(const e of u)e.time<a-o||c(e.chunk);else{const e=this.parsers[r].findSyncFrame(u.filter((e=>e.time>=a-o)).map((e=>e.chunk)));for(const t of e)c(t)}return()=>{t&&(this.activeClients--,this.printActiveClients()),this.inactivityCheck(i,t),d()}}})}async getVideoStream(e){if(!1===e?.refresh&&!this.parserSessionPromise)throw new Error("Stream is currently unavailable and will not be started for this request. RequestMediaStreamOptions.refresh === false");this.ensurePrebufferSession();const t=await this.parserSessionPromise;let r=e?.prebuffer;null==r&&(r=1.5*Math.max(4e3,this.detectedIdrInterval||4e3));const{rtspMode:i}=this.getRebroadcastMode(),s=i?"rtsp":"mpegts";let o=this.parsers[e?.container]?e?.container:s;e?.prebuffer&&"mp4"!==o&&"mp4"===e?.container&&(r+=1.5*(this.detectedIdrInterval||4e3));const n=t.negotiateMediaStream(e);let a,c,d,u=await this.sdp;const l=new Map;if("rtsp"===o){const e=G(u);e.msections.length>2&&(e.msections=e.msections.filter((e=>e.codec===n.video?.codec||e.codec===n.audio?.codec)),u=e.toSdp(),d=e=>{const t=l.get(e.type);if(null==t)return;const r=e.chunks.slice(),i=Buffer.from(r[0]);return i.writeUInt8(t,1),r[0]=i,{startStream:e.startStream,chunks:r}});const t=await D();a=t.clientPromise.then((async e=>{u=N(u);const t=new ee(e,u);t.console=this.console,await t.handlePlayback();for(const e of Object.values(t.setupTracks))l.set(e.codec,e.destination);return e})),c=t.url.replace("tcp://","rtsp://")}else{const e=await D();a=e.clientPromise,c=`tcp://127.0.0.1:${e.port}`}n.sdp=u;const p=!1!==e?.refresh;this.handleRebroadcasterClient({isActiveClient:p,container:o,requestedPrebuffer:r,socketPromise:a,session:t,filter:d}),n.prebuffer=r;const{reencodeAudio:m}=this.getAudioConfig();this.audioDisabled?n.audio=null:m&&(n.audio={codec:"aac",encoder:"aac",profile:"aac_low"}),t.inputVideoResolution?.width&&t.inputVideoResolution?.height&&Object.assign(n.video,t.inputVideoResolution);const h=Date.now();let f=0;const g=this.prebuffers[o];for(const e of g)if(!(e.time<h-r))for(const t of e.chunk.chunks)f+=t.length;return{url:c,container:o,inputArguments:["-analyzeduration","0","-probesize",Math.max(5e5,f).toString(),...this.parsers[o].inputArguments||[],"-f",this.parsers[o].container,"-i",c],mediaStreamOptions:n}}}class Ue extends se{released=!1;sessions=new Map;streamSettings=_e(this);constructor(e,t){super(t),this.plugin=e,this.delayStart()}delayStart(){this.console.log("prebuffer sessions starting in 5 seconds"),setTimeout((()=>this.ensurePrebufferSessions()),5e3)}async getVideoStream(e){if(e?.directMediaStream)return this.mixinDevice.getVideoStream(e);await this.ensurePrebufferSessions();let t,r,i=e?.id;const s=await this.mixinDevice.getVideoStreamOptions();let o;const n=2e6;if(!i){switch(e?.destination){case"medium-resolution":case"remote":o=this.streamSettings.getRemoteStream(s),r=this.plugin.storageSettings.values.remoteStreamingBitrate;break;case"low-resolution":o=this.streamSettings.getLowResolutionStream(s),r=512e3;break;case"local-recorder":o=this.streamSettings.getRecordingStream(s),r=n;break;case"remote-recorder":o=this.streamSettings.getRemoteRecordingStream(s),r=n;break;default:o=this.streamSettings.getDefaultStream(s),r=n}i=o.stream.id,this.console.log("Selected stream",o.stream.name),this.streamSettings.storageSettings.values.transcodeStreams?.includes(o.title)&&(t=this.plugin.storageSettings.values.h264EncoderArguments?.split(" "))}const a=this.sessions.get(i);if(!a)return this.mixinDevice.getVideoStream(e);const c=await a.getVideoStream(e);return c.h264EncoderArguments=t,c.destinationVideoBitrate=r,this.streamSettings.storageSettings.values.missingCodecParameters&&(c.h264FilterArguments=c.h264FilterArguments||[],c.h264FilterArguments.push("-bsf:v","dump_extra")),c.videoDecoderArguments=this.streamSettings.storageSettings.values.videoDecoderArguments?.split(" "),we.createFFmpegMediaObject(c,{sourceId:this.id})}async ensurePrebufferSessions(){const t=await this.mixinDevice.getVideoStreamOptions(),r=this.getPrebufferedStreams(t),i=r?r.map((e=>e.id)):[void 0],s=t?.map((e=>e.id))||[void 0];if("true"!==this.storage.getItem("warnedCloud")){const e=t?.find((e=>"cloud"===e.source));e&&(this.storage.setItem("warnedCloud","true"),Pe.a(`${this.name} is a cloud camera. Prebuffering maintains a persistent stream and will not enabled by default. You must enable the Prebuffer stream manually.`))}const o=this.mixinDeviceInterfaces.includes(e.ScryptedInterface.Battery);let n=0;for(const e of s){let r=this.sessions.get(e);if(!r){const s=t?.find((t=>t.id===e));s?.prebuffer&&Pe.a(`Prebuffer is already available on ${this.name}. If this is a grouped device, disable the Rebroadcast extension.`);const a=s?.name,c=i.includes(e);if(r=new He(this,s,o||!c),this.sessions.set(e,r),o){this.console.log("camera is battery powered, prebuffering and rebroadcasting will only work on demand.");continue}if(!c){this.console.log("stream",a,"will be rebroadcast on demand.");continue}(async()=>{for(;this.sessions.get(e)===r&&!this.released;){r.ensurePrebufferSession();let e=!1;try{const t=await r.parserSessionPromise;n++,e=!0,this.online=!!n,await t.killed,this.console.error("prebuffer session ended")}catch(e){this.console.error("prebuffer session ended with error",e)}finally{e&&n--,e=!1,this.online=!!n}this.console.log("restarting prebuffer session in 5 seconds"),await new Promise((e=>setTimeout(e,5e3)))}this.console.log("exiting prebuffer session (released or restarted with new configuration)")})()}}if(!this.sessions.has(void 0)){const e=this.streamSettings.storageSettings.values.defaultStream;let r=this.sessions.get(t?.find((t=>t.name===e))?.id);r||(r=this.sessions.get(t?.find((e=>e.id===i[0]))?.id)),r||(r=this.sessions.get(t?.find((e=>e.id===s?.[0]))?.id)),r?(this.sessions.set(void 0,r),this.console.log("Default Stream:",r.advertisedMediaStreamOptions.id,r.advertisedMediaStreamOptions.name)):this.console.warn("Unable to find Default Stream?")}Me.onMixinEvent(this.id,this.mixinProviderNativeId,e.ScryptedInterface.Settings,void 0)}async getMixinSettings(){const e=[];e.push(...await this.streamSettings.storageSettings.getSettings());for(const t of new Set([...this.sessions.values()]))if(t)try{e.push(...await t.getMixinSettings())}catch(e){this.console.error("error in prebuffer session getMixinSettings",e)}return e}async putMixinSetting(e,t){if(this.streamSettings.storageSettings.settings[e]?await this.streamSettings.storageSettings.putSetting(e,t):this.storage.setItem(e,t?.toString()),"Transcoding"===this.streamSettings.storageSettings.settings[e]?.group)return;const r=this.sessions;this.sessions=new Map;for(const e of r.values())e?.parserSessionPromise?.then((e=>e.kill()));this.ensurePrebufferSessions()}getPrebufferedStreams(e){return be(this.streamSettings.storageSettings,e)}async getVideoStreamOptions(){const e=await this.mixinDevice.getVideoStreamOptions()||[];let t=this.getPrebufferedStreams(e);for(const r of e)(this.sessions.get(r.id)?.parserSession||t.includes(r))&&(r.prebuffer=1e4);return e}setVideoStreamOptions(e){const t=this.sessions.get(e.id);if(t&&e?.video?.bitrate){t.needBitrateReset=!0;const r=t.maxBitrate;r&&e?.video?.bitrate>r&&(this.console.log("clamping max bitrate request",e.video.bitrate,r),e.video.bitrate=r)}return this.mixinDevice.setVideoStreamOptions(e)}async release(){this.console.log("prebuffer session releasing if started"),this.released=!0;for(const e of this.sessions.values())e&&(e.clearPrebuffers(),e.parserSessionPromise?.then((t=>{this.console.log("prebuffer session released"),t.kill(),e.clearPrebuffers()})))}}const Ne=new class extends n{storageSettings=new re(this,{rebroadcastPort:{title:"Rebroadcast Port",description:"The port of the RTSP server that will rebroadcast your streams.",type:"number"},remoteStreamingBitrate:{title:"Remote Streaming Bitrate",type:"number",defaultValue:1e6,description:"The bitrate to use when remote streaming. This setting will only be used when transcoding or adaptive bitrate is enabled on a camera."},h264EncoderArguments:{title:"H264 Encoder Arguments",description:"FFmpeg arguments used to encode h264 video. This is not camera specific and is used to setup the hardware accelerated encoder on your Scrypted server. This setting will only be used when transcoding is enabled on a camera.",choices:Object.keys(ve()),defaultValue:ve()["libx264 (Software)"].join(" "),combobox:!0,mapPut:(e,t)=>ve()[t]?.join(" ")||t||ve()["libx264 (Software)"]?.join(" ")}});currentMixins=new Map;constructor(t){super(t),this.fromMimeType="x-scrypted/x-rfc4571",this.toMimeType=e.ScryptedMimeTypes.FFmpegInput,process.nextTick((()=>{for(const e of Object.keys(xe.getSystemState())){const t=xe.getDeviceById(e);if(t.mixins?.includes(this.id))try{t.getVideoStreamOptions()}catch(e){this.console.error("error triggering prebuffer",t.name,e)}}}));const r=function(){var e=new Date;return e.setHours(24),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e.getTime()-(new Date).getTime()}()+72e5;this.log.i(`Rebroadcaster scheduled for restart at 2AM: ${Math.round(r/1e3/60)} minutes`),setTimeout((()=>Me.requestRestart()),r),this.startRtspServer()}getSettings(){return this.storageSettings.getSettings()}putSetting(e,t){return this.storageSettings.putSetting(e,t)}startRtspServer(){T(this.rtspServer),this.rtspServer=new(P().Server)((async e=>{let t;const r=new ee(e,void 0,void 0,(async(e,i,s,o)=>{r.checkRequest=void 0;const n=new URL(i);for(const e of this.currentMixins.keys()){const i=this.currentMixins.get(e);for(const e of i.sessions.values())if(n.pathname.endsWith(e.rtspServerPath))return r.console=e.console,t=e,t.ensurePrebufferSession(),await t.parserSessionPromise,r.sdp=await t.sdp,!0}return!1}));this.console.log("RTSP Rebroadcast connection started."),r.console=this.console;try{await r.handlePlayback();const i=await t.parserSessionPromise,s=1.5*Math.max(4e3,t.detectedIdrInterval||4e3);t.handleRebroadcasterClient({isActiveClient:!0,container:"rtsp",session:i,socketPromise:Promise.resolve(e),requestedPrebuffer:s}),await r.handleTeardown()}catch(t){e.destroy()}this.console.log("RTSP Rebroadcast connection finished.")})),this.storageSettings.values.rebroadcastPort||(this.storageSettings.values.rebroadcastPort=Math.round(1e4*Math.random()+3e4)),this.rtspServer.listen(this.storageSettings.values.rebroadcastPort)}async convert(e,t,r){const i=JSON.parse(e.toString()),{url:s,sdp:o}=i,n=G(o),a=new Map;for(const e of n.msections)for(const t of e.payloadTypes)a.set(t,e.control);const c=new URL(s);if(!c.protocol.startsWith("tcp"))throw new Error("rfc4751 url must be tcp");const{clientPromise:d,url:u}=await D(),l={url:u,inputArguments:["-rtsp_transport","tcp","-i",u.replace("tcp","rtsp")]};return d.then((async e=>{const t=new ee(e,o);await t.handlePlayback();const r=P().connect(parseInt(c.port),c.hostname);for(e.on("close",(()=>{r.destroy()})),r.on("close",(()=>{e.destroy()}));;){const i=(await g(r,2)).readInt16BE(0),s=await g(r,i),o=127&s[1],n=a.get(o);if(!n)throw e.destroy(),r.destroy(),new Error("unknown payload type "+o);t.sendTrack(n,s,!1)}})),Buffer.from(JSON.stringify(l))}async canMixin(t,r){if(!r.includes(e.ScryptedInterface.VideoCamera))return null;const i=[e.ScryptedInterface.VideoCamera,e.ScryptedInterface.Settings,e.ScryptedInterface.Online];return r.includes(e.ScryptedInterface.VideoCameraConfiguration)&&i.push(e.ScryptedInterface.VideoCameraConfiguration),i}async getMixin(e,t,r){this.setHasEnabledMixin(r.id);const i=new Ue(this,{mixinDevice:e,mixinDeviceState:r,mixinProviderNativeId:this.nativeId,mixinDeviceInterfaces:t,group:"Stream Management",groupKey:"prebuffer"});return this.currentMixins.set(r.id,i),i}async releaseMixin(e,t){t.online=!0,await t.release(),this.currentMixins.delete(e)}}})();var s=exports="undefined"==typeof exports?{}:exports;for(var o in i)s[o]=i[o];i.__esModule&&Object.defineProperty(s,"__esModule",{value:!0})})();
|
|
1
|
+
(()=>{var e={747:(e,t,r)=>{"use strict";Object.defineProperty(t,"rh",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"Nu",{enumerable:!0,get:function(){return o.default}});var i=a(r(257)),s=a(r(816)),o=a(r(243)),n=a(r(828));function a(e){return e&&e.__esModule?e:{default:e}}const c=[s.default,o.default,n.default];s.default,o.default,n.default},816:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i,s=(i=r(257))&&i.__esModule?i:{default:i},o=r(761);const n=["realm"],a=n,c={type:"Basic",parseWWWAuthenticateRest:function(e){return(0,o.parseHTTPHeadersQuotedKeyValueSet)(e,a,n)},buildWWWAuthenticateRest:function(e){return(0,o.buildHTTPHeadersQuotedKeyValueSet)(e,a,n)},parseAuthorizationRest:function(e){if(!e)throw new s.default("E_EMPTY_AUTH");const{username:t,password:r}=c.decodeHash(e);return{hash:e,username:t,password:r}},buildAuthorizationRest:function({hash:e,username:t,password:r}){if(t&&r)return c.computeHash({username:t,password:r});if(!e)throw new s.default("E_NO_HASH");return e},computeHash:function({username:e,password:t}){return Buffer.from(e+":"+t).toString("base64")},decodeHash:function(e){const[t,...r]=Buffer.from(e,"base64").toString().split(":");return{username:t,password:r.join(":")}}};var d=c;t.default=d},828:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i,s=(i=r(257))&&i.__esModule?i:{default:i},o=r(761);const n=["invalid_request","invalid_token","insufficient_scope"],a=["realm","scope","error","error_description"];var c={type:"Bearer",parseWWWAuthenticateRest:function(e){return(0,o.parseHTTPHeadersQuotedKeyValueSet)(e,a,[])},buildWWWAuthenticateRest:function(e){if(e.error&&-1===n.indexOf(e.error))throw new s.default("E_INVALID_ERROR",e.error,n);return(0,o.buildHTTPHeadersQuotedKeyValueSet)(e,a,[])},parseAuthorizationRest:function(e){if(!e)throw new s.default("E_EMPTY_AUTH");return{hash:e}},buildAuthorizationRest:function({hash:e}){if(!e)throw new s.default("E_NO_HASH");return e}};t.default=c},243:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i,s=r(761),o=(i=r(113))&&i.__esModule?i:{default:i};const n=["realm","nonce"],a=[...n,"domain","opaque","stale","algorithm","qop"],c=["username","realm","nonce","uri","response"],d=[...c,"algorithm","cnonce","opaque","qop","nc"];function u(e,t){const r=o.default.createHash(e);return r.update(t),r.digest("hex")}var l={type:"Digest",parseWWWAuthenticateRest:function(e){return(0,s.parseHTTPHeadersQuotedKeyValueSet)(e,a,n)},buildWWWAuthenticateRest:function(e){return(0,s.buildHTTPHeadersQuotedKeyValueSet)(e,a,n)},parseAuthorizationRest:function(e){return(0,s.parseHTTPHeadersQuotedKeyValueSet)(e,d,c)},buildAuthorizationRest:function(e){return(0,s.buildHTTPHeadersQuotedKeyValueSet)(e,d,c)},computeHash:function(e){const t=e.ha1||u(e.algorithm,[e.username,e.realm,e.password].join(":")),r=u(e.algorithm,[e.method,e.uri].join(":"));return u(e.algorithm,[t,e.nonce,e.nc,e.cnonce,e.qop,r].join(":"))}};t.default=l},761:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseHTTPHeadersQuotedKeyValueSet=function(e,t,r=[]){const i=e.trim().match(o);if(!i)throw new s.default("E_MALFORMED_QUOTEDKEYVALUE",e);const a=i.map(((e,t)=>{const r=e.split("=");if(2!==r.length)throw new s.default("E_MALFORMED_QUOTEDKEYVALUE",t,e,r.length);return r})).reduce((function(e,[r,i],o){if(-1===t.indexOf(r))throw new s.default("E_UNAUTHORIZED_KEY",o,r);return e[r]=i.replace(/^"(.+(?="$))"$/,"$1"),e}),{});return n(r,a),a},t.buildHTTPHeadersQuotedKeyValueSet=function(e,t,r=[]){return n(r,e),t.reduce((function(t,r){return e[r]?t+(t?", ":"")+r+'="'+e[r]+'"':t}),"")};var i,s=(i=r(257))&&i.__esModule?i:{default:i};const o=/\w+=(".*?"|[^",]+)(?=,|$)/g;function n(e,t){e.forEach((e=>{if(void 0===t[e])throw new s.default("E_REQUIRED_KEY",e)}))}},510:function(e,t,r){"use strict";var i=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),s=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||i(t,e,r)};Object.defineProperty(t,"__esModule",{value:!0}),t.MixinDeviceBase=t.ScryptedDeviceBase=void 0,s(r(741),t);const o=r(741);class n extends o.DeviceBase{constructor(e){super(),this.nativeId=e}get storage(){return this._storage||(this._storage=deviceManager.getDeviceStorage(this.nativeId)),this._storage}get log(){return this._log||(this._log=deviceManager.getDeviceLogger(this.nativeId)),this._log}get console(){return this._console||(this._console=deviceManager.getDeviceConsole(this.nativeId)),this._console}async createMediaObject(e,t){return mediaManager.createMediaObject(e,t,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:deviceManager.getMixinConsole(e.sourceId,this.nativeId)}_lazyLoadDeviceState(){this._deviceState||(this.nativeId?this._deviceState=deviceManager.getDeviceState(this.nativeId):this._deviceState=deviceManager.getDeviceState())}onDeviceEvent(e,t){return deviceManager.onDeviceEvent(this.nativeId,e,t)}}t.ScryptedDeviceBase=n;class a extends o.DeviceBase{constructor(e){super(),this._listeners=new Set,this.mixinDevice=e.mixinDevice,this.mixinDeviceInterfaces=e.mixinDeviceInterfaces,this.mixinStorageSuffix=e.mixinStorageSuffix,this._deviceState=e.mixinDeviceState,this.mixinProviderNativeId=e.mixinProviderNativeId}get storage(){if(!this._storage){const e=this.mixinStorageSuffix,t=this.id+(e?":"+e:"");this._storage=deviceManager.getMixinStorage(t,this.mixinProviderNativeId)}return this._storage}get console(){return this._console||(deviceManager.getMixinConsole?this._console=deviceManager.getMixinConsole(this.id,this.mixinProviderNativeId):this._console=deviceManager.getDeviceConsole(this.mixinProviderNativeId)),this._console}async createMediaObject(e,t){return mediaManager.createMediaObject(e,t,{sourceId:this.id})}getMediaObjectConsole(e){return"string"!=typeof e.sourceId?this.console:deviceManager.getMixinConsole(e.sourceId,this.mixinProviderNativeId)}onDeviceEvent(e,t){return deviceManager.onMixinEvent(this.id,this,e,t)}_lazyLoadDeviceState(){}manageListener(e){this._listeners.add(e)}release(){for(const e of this._listeners)e.removeListener()}}t.MixinDeviceBase=a,function(){function e(e){return function(){return this._lazyLoadDeviceState(),this._deviceState[e]}}function t(e){return function(t){this._lazyLoadDeviceState(),this._deviceState[e]=t}}for(var r of Object.values(o.ScryptedInterfaceProperty))Object.defineProperty(n.prototype,r,{set:t(r),get:e(r)}),Object.defineProperty(a.prototype,r,{set:t(r),get:e(r)})}();let c={};try{c=Object.assign(c,{log:deviceManager.getDeviceLogger(void 0),deviceManager,endpointManager,mediaManager,systemManager,pluginHostAPI})}catch(e){console.error("sdk initialization error, import @scrypted/types or use @scrypted/web-sdk instead",e)}t.default=c},733:e=>{const t=require("realfs");e.exports=t},741:(e,t,r)=>{"use strict";r.r(t),r.d(t,{DeviceBase:()=>i,ScryptedInterfaceProperty:()=>s,ScryptedInterfaceDescriptors:()=>o,ScryptedDeviceType:()=>n,HumidityMode:()=>a,FanMode:()=>c,TemperatureUnit:()=>d,ThermostatMode:()=>u,LockState:()=>l,MediaPlayerState:()=>p,ScryptedInterface:()=>m,ScryptedMimeTypes:()=>h});class i{}let s;!function(e){e.id="id",e.info="info",e.interfaces="interfaces",e.mixins="mixins",e.name="name",e.pluginId="pluginId",e.providedInterfaces="providedInterfaces",e.providedName="providedName",e.providedRoom="providedRoom",e.providedType="providedType",e.providerId="providerId",e.room="room",e.type="type",e.on="on",e.brightness="brightness",e.colorTemperature="colorTemperature",e.rgb="rgb",e.hsv="hsv",e.running="running",e.paused="paused",e.docked="docked",e.thermostatActiveMode="thermostatActiveMode",e.thermostatAvailableModes="thermostatAvailableModes",e.thermostatMode="thermostatMode",e.thermostatSetpoint="thermostatSetpoint",e.thermostatSetpointHigh="thermostatSetpointHigh",e.thermostatSetpointLow="thermostatSetpointLow",e.temperature="temperature",e.temperatureUnit="temperatureUnit",e.humidity="humidity",e.lockState="lockState",e.entryOpen="entryOpen",e.batteryLevel="batteryLevel",e.online="online",e.updateAvailable="updateAvailable",e.fromMimeType="fromMimeType",e.toMimeType="toMimeType",e.binaryState="binaryState",e.intrusionDetected="intrusionDetected",e.powerDetected="powerDetected",e.audioDetected="audioDetected",e.motionDetected="motionDetected",e.ambientLight="ambientLight",e.occupied="occupied",e.flooded="flooded",e.ultraviolet="ultraviolet",e.luminance="luminance",e.position="position",e.humiditySetting="humiditySetting",e.fan="fan"}(s||(s={}));const o={ScryptedDevice:{name:"ScryptedDevice",methods:["listen","probe","setName","setRoom","setType"],properties:["id","info","interfaces","mixins","name","pluginId","providedInterfaces","providedName","providedRoom","providedType","providerId","room","type"]},ScryptedPlugin:{name:"ScryptedPlugin",methods:["getPluginJson"],properties:[]},OnOff:{name:"OnOff",methods:["turnOff","turnOn"],properties:["on"]},Brightness:{name:"Brightness",methods:["setBrightness"],properties:["brightness"]},ColorSettingTemperature:{name:"ColorSettingTemperature",methods:["getTemperatureMaxK","getTemperatureMinK","setColorTemperature"],properties:["colorTemperature"]},ColorSettingRgb:{name:"ColorSettingRgb",methods:["setRgb"],properties:["rgb"]},ColorSettingHsv:{name:"ColorSettingHsv",methods:["setHsv"],properties:["hsv"]},Notifier:{name:"Notifier",methods:["sendNotification"],properties:[]},StartStop:{name:"StartStop",methods:["start","stop"],properties:["running"]},Pause:{name:"Pause",methods:["pause","resume"],properties:["paused"]},Dock:{name:"Dock",methods:["dock"],properties:["docked"]},TemperatureSetting:{name:"TemperatureSetting",methods:["setThermostatMode","setThermostatSetpoint","setThermostatSetpointHigh","setThermostatSetpointLow"],properties:["thermostatActiveMode","thermostatAvailableModes","thermostatMode","thermostatSetpoint","thermostatSetpointHigh","thermostatSetpointLow"]},Thermometer:{name:"Thermometer",methods:["setTemperatureUnit"],properties:["temperature","temperatureUnit"]},HumiditySensor:{name:"HumiditySensor",methods:[],properties:["humidity"]},Camera:{name:"Camera",methods:["getPictureOptions","takePicture"],properties:[]},Microphone:{name:"Microphone",methods:["getAudioStream"],properties:[]},Display:{name:"Display",methods:["startDisplay","stopDisplay"],properties:[]},VideoCamera:{name:"VideoCamera",methods:["getVideoStream","getVideoStreamOptions"],properties:[]},VideoRecorder:{name:"VideoRecorder",methods:["getRecordingStream","getRecordingStreamOptions","getRecordingStreamThumbnail"],properties:[]},VideoClips:{name:"VideoClips",methods:["getVideoClip","getVideoClipThumbnail","getVideoClips","removeVideoClips"],properties:[]},VideoCameraConfiguration:{name:"VideoCameraConfiguration",methods:["setVideoStreamOptions"],properties:[]},Intercom:{name:"Intercom",methods:["startIntercom","stopIntercom"],properties:[]},Lock:{name:"Lock",methods:["lock","unlock"],properties:["lockState"]},PasswordStore:{name:"PasswordStore",methods:["addPassword","getPasswords","removePassword"],properties:[]},Authenticator:{name:"Authenticator",methods:["checkPassword"],properties:[]},Scene:{name:"Scene",methods:["activate","deactivate","isReversible"],properties:[]},Entry:{name:"Entry",methods:["closeEntry","openEntry"],properties:[]},EntrySensor:{name:"EntrySensor",methods:[],properties:["entryOpen"]},DeviceProvider:{name:"DeviceProvider",methods:["getDevice"],properties:[]},DeviceDiscovery:{name:"DeviceDiscovery",methods:["discoverDevices"],properties:[]},DeviceCreator:{name:"DeviceCreator",methods:["createDevice","getCreateDeviceSettings"],properties:[]},Battery:{name:"Battery",methods:[],properties:["batteryLevel"]},Refresh:{name:"Refresh",methods:["getRefreshFrequency","refresh"],properties:[]},MediaPlayer:{name:"MediaPlayer",methods:["getMediaStatus","load","seek","skipNext","skipPrevious"],properties:[]},Online:{name:"Online",methods:[],properties:["online"]},SoftwareUpdate:{name:"SoftwareUpdate",methods:["checkForUpdate","installUpdate"],properties:["updateAvailable"]},BufferConverter:{name:"BufferConverter",methods:["convert"],properties:["fromMimeType","toMimeType"]},Settings:{name:"Settings",methods:["getSettings","putSetting"],properties:[]},BinarySensor:{name:"BinarySensor",methods:[],properties:["binaryState"]},IntrusionSensor:{name:"IntrusionSensor",methods:[],properties:["intrusionDetected"]},PowerSensor:{name:"PowerSensor",methods:[],properties:["powerDetected"]},AudioSensor:{name:"AudioSensor",methods:[],properties:["audioDetected"]},MotionSensor:{name:"MotionSensor",methods:[],properties:["motionDetected"]},AmbientLightSensor:{name:"AmbientLightSensor",methods:[],properties:["ambientLight"]},OccupancySensor:{name:"OccupancySensor",methods:[],properties:["occupied"]},FloodSensor:{name:"FloodSensor",methods:[],properties:["flooded"]},UltravioletSensor:{name:"UltravioletSensor",methods:[],properties:["ultraviolet"]},LuminanceSensor:{name:"LuminanceSensor",methods:[],properties:["luminance"]},PositionSensor:{name:"PositionSensor",methods:[],properties:["position"]},Readme:{name:"Readme",methods:["getReadmeMarkdown"],properties:[]},OauthClient:{name:"OauthClient",methods:["getOauthUrl","onOauthCallback"],properties:[]},MixinProvider:{name:"MixinProvider",methods:["canMixin","getMixin","releaseMixin"],properties:[]},HttpRequestHandler:{name:"HttpRequestHandler",methods:["onRequest"],properties:[]},EngineIOHandler:{name:"EngineIOHandler",methods:["onConnection"],properties:[]},PushHandler:{name:"PushHandler",methods:["onPush"],properties:[]},Program:{name:"Program",methods:["run"],properties:[]},Scriptable:{name:"Scriptable",methods:["eval","loadScripts","saveScript"],properties:[]},ObjectDetector:{name:"ObjectDetector",methods:["getDetectionInput","getObjectTypes"],properties:[]},ObjectDetection:{name:"ObjectDetection",methods:["detectObjects","getDetectionModel"],properties:[]},HumiditySetting:{name:"HumiditySetting",methods:["setHumidity"],properties:["humiditySetting"]},Fan:{name:"Fan",methods:["setFan"],properties:["fan"]},RTCSignalingChannel:{name:"RTCSignalingChannel",methods:["startRTCSignalingSession"],properties:[]},RTCSignalingClient:{name:"RTCSignalingClient",methods:["createRTCSignalingSession"],properties:[]}};let n,a,c,d,u,l,p,m,h;!function(e){e.Builtin="Builtin",e.Camera="Camera",e.Fan="Fan",e.Light="Light",e.Switch="Switch",e.Outlet="Outlet",e.Sensor="Sensor",e.Scene="Scene",e.Program="Program",e.Automation="Automation",e.Vacuum="Vacuum",e.Notifier="Notifier",e.Thermostat="Thermostat",e.Lock="Lock",e.PasswordControl="PasswordControl",e.Display="Display",e.SmartDisplay="SmartDisplay",e.Speaker="Speaker",e.SmartSpeaker="SmartSpeaker",e.Event="Event",e.Entry="Entry",e.Garage="Garage",e.DeviceProvider="DeviceProvider",e.DataSource="DataSource",e.API="API",e.Doorbell="Doorbell",e.Irrigation="Irrigation",e.Valve="Valve",e.Person="Person",e.Unknown="Unknown"}(n||(n={})),function(e){e.Humidify="Humidify",e.Dehumidify="Dehumidify",e.Auto="Auto",e.Off="Off"}(a||(a={})),function(e){e.Auto="Auto",e.Manual="Manual"}(c||(c={})),function(e){e.C="C",e.F="F"}(d||(d={})),function(e){e.Off="Off",e.Cool="Cool",e.Heat="Heat",e.HeatCool="HeatCool",e.Auto="Auto",e.FanOnly="FanOnly",e.Purifier="Purifier",e.Eco="Eco",e.Dry="Dry",e.On="On"}(u||(u={})),function(e){e.Locked="Locked",e.Unlocked="Unlocked",e.Jammed="Jammed"}(l||(l={})),function(e){e.Idle="Idle",e.Playing="Playing",e.Paused="Paused",e.Buffering="Buffering"}(p||(p={})),function(e){e.ScryptedDevice="ScryptedDevice",e.ScryptedPlugin="ScryptedPlugin",e.OnOff="OnOff",e.Brightness="Brightness",e.ColorSettingTemperature="ColorSettingTemperature",e.ColorSettingRgb="ColorSettingRgb",e.ColorSettingHsv="ColorSettingHsv",e.Notifier="Notifier",e.StartStop="StartStop",e.Pause="Pause",e.Dock="Dock",e.TemperatureSetting="TemperatureSetting",e.Thermometer="Thermometer",e.HumiditySensor="HumiditySensor",e.Camera="Camera",e.Microphone="Microphone",e.Display="Display",e.VideoCamera="VideoCamera",e.VideoRecorder="VideoRecorder",e.VideoClips="VideoClips",e.VideoCameraConfiguration="VideoCameraConfiguration",e.Intercom="Intercom",e.Lock="Lock",e.PasswordStore="PasswordStore",e.Authenticator="Authenticator",e.Scene="Scene",e.Entry="Entry",e.EntrySensor="EntrySensor",e.DeviceProvider="DeviceProvider",e.DeviceDiscovery="DeviceDiscovery",e.DeviceCreator="DeviceCreator",e.Battery="Battery",e.Refresh="Refresh",e.MediaPlayer="MediaPlayer",e.Online="Online",e.SoftwareUpdate="SoftwareUpdate",e.BufferConverter="BufferConverter",e.Settings="Settings",e.BinarySensor="BinarySensor",e.IntrusionSensor="IntrusionSensor",e.PowerSensor="PowerSensor",e.AudioSensor="AudioSensor",e.MotionSensor="MotionSensor",e.AmbientLightSensor="AmbientLightSensor",e.OccupancySensor="OccupancySensor",e.FloodSensor="FloodSensor",e.UltravioletSensor="UltravioletSensor",e.LuminanceSensor="LuminanceSensor",e.PositionSensor="PositionSensor",e.Readme="Readme",e.OauthClient="OauthClient",e.MixinProvider="MixinProvider",e.HttpRequestHandler="HttpRequestHandler",e.EngineIOHandler="EngineIOHandler",e.PushHandler="PushHandler",e.Program="Program",e.Scriptable="Scriptable",e.ObjectDetector="ObjectDetector",e.ObjectDetection="ObjectDetection",e.HumiditySetting="HumiditySetting",e.Fan="Fan",e.RTCSignalingChannel="RTCSignalingChannel",e.RTCSignalingClient="RTCSignalingClient"}(m||(m={})),function(e){e.Url="text/x-uri",e.InsecureLocalUrl="text/x-insecure-local-uri",e.LocalUrl="text/x-local-uri",e.PushEndpoint="text/x-push-endpoint",e.MediaStreamUrl="text/x-media-url",e.FFmpegInput="x-scrypted/x-ffmpeg-input",e.RTCSignalingChannel="x-scrypted/x-scrypted-rtc-signaling-channel",e.SchemePrefix="x-scrypted/x-scrypted-scheme-",e.MediaObject="x-scrypted/x-scrypted-media-object"}(h||(h={}))},113:e=>{"use strict";e.exports=require("crypto")},37:e=>{"use strict";e.exports=require("os")},257:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>h});var i=r(37);function s(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function n(e){var t="function"==typeof Map?new Map:void 0;return n=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,i)}function i(){return a(e,arguments,u(this).constructor)}return i.prototype=Object.create(e.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),d(i,e)},n(e)}function a(e,t,r){return a=c()?Reflect.construct:function(e,t,r){var i=[null];i.push.apply(i,t);var s=new(Function.bind.apply(e,i));return r&&d(s,r.prototype),s},a.apply(null,arguments)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function d(e,t){return d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},d(e,t)}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}let l=function(e){function t(e,r,...i){var s,n,a;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),e instanceof Array||(i=(void 0===r?[]:[r]).concat(i),r=e,e=[]),n=this,(s=!(a=u(t).call(this,r))||"object"!=typeof a&&"function"!=typeof a?o(n):a).code=r||"E_UNEXPECTED",s.params=i,s.wrappedErrors=e,s.name=s.toString(),Error.captureStackTrace&&Error.captureStackTrace(o(s),s.constructor),s}var r,n,a;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&d(e,t)}(t,e),r=t,(n=[{key:"toString",value:function(){return(this.wrappedErrors.length?this.wrappedErrors[this.wrappedErrors.length-1].stack+i.EOL:"")+this.constructor.name+": "+this.code+" ("+this.params.join(", ")+")"}}])&&s(r.prototype,n),a&&s(r,a),t}(n(Error));function p(e){return e instanceof l||e.constructor&&e.constructor.name&&e.constructor.name.endsWith("Error")&&"string"==typeof e.code&&m(e.code)&&e.params&&e.params instanceof Array}function m(e){return/^([A-Z0-9_]+)$/.test(e)}l.wrap=function(e,t,...r){let i=null;const s=m(e.message),o=(e.wrappedErrors||[]).concat(e);return t||(t=s?e.message:"E_UNEXPECTED"),e.message&&!s&&r.push(e.message),i=new l(o,t,...r),i},l.cast=function(e,...t){return p(e)?e:l.wrap.apply(l,[e].concat(t))},l.bump=function(e,...t){return p(e)?l.wrap.apply(l,[e,e.code].concat(e.params)):l.wrap.apply(l,[e].concat(t))};const h=l}},t={};function r(i){var s=t[i];if(void 0!==s)return s.exports;var o=t[i]={exports:{}};return e[i].call(o.exports,o,o.exports,r),o.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{"use strict";r.r(i),r.d(i,{default:()=>Ke});var e=r(510),t=r.n(e);const{systemManager:s}=t(),o="v4";class n extends e.ScryptedDeviceBase{hasEnabledMixin={};unshiftMixin=!1;constructor(t){super(t);try{this.hasEnabledMixin=JSON.parse(this.storage.getItem("hasEnabledMixin"))}catch(e){this.hasEnabledMixin={}}this.pluginsComponent=s.getComponent("plugins"),s.listen((async(t,r,i)=>{r.eventInterface!==e.ScryptedInterface.ScryptedDevice||r.property||this.maybeEnableMixin(t)}));for(const e of Object.keys(s.getSystemState())){const t=s.getDeviceById(e);this.maybeEnableMixin(t)}}async shouldEnableMixin(e){return!0}async maybeEnableMixin(e){if(!e||e.mixins?.includes(this.id))return;if(this.hasEnabledMixin[e.id]===o)return;if(!await this.canMixin(e.type,e.interfaces))return;if(!await this.shouldEnableMixin(e))return;this.log.i("auto enabling mixin for "+e.name);const t=(e.mixins||[]).slice();this.unshiftMixin?t.unshift(this.id):t.push(this.id);const r=await this.pluginsComponent;await r.setMixins(e.id,t),this.setHasEnabledMixin(e.id)}setHasEnabledMixin(e){this.hasEnabledMixin[e]!==o&&(this.hasEnabledMixin[e]=o,this.storage.setItem("hasEnabledMixin",JSON.stringify(this.hasEnabledMixin)))}}const a=require("child_process");var c=r.n(a);const d=require("process");var u=r.n(d);const l=["decode_slice_header error","no frame!","non-existing PPS"];function p(e){if(e){try{e.stdin.write("q\n")}catch(e){}setTimeout((()=>{e.kill(),setTimeout((()=>{e.kill("SIGKILL")}),2e3)}),2e3)}}function m(e,t,r,i){const s=!!u().env.SCRYPTED_FFMPEG_NOISY||!!i?.getItem("SCRYPTED_FFMPEG_NOISY");function o(e){const i=o=>{const n=o.toString();for(const e of l)if(-1!==n.indexOf(e))return;if(!(s||r||-1===n.indexOf("frame=")&&-1===n.indexOf("size=")))return e(n),e("video/audio detected, discarding further input"),t.stdout.removeListener("data",i),void t.stderr.removeListener("data",i);e(n)};return i}t.stdout?.on("data",o(e.log)),t.stderr?.on("data",o(e.error)),t.on("exit",(()=>e.log("ffmpeg exited")))}function h(e,t){const r=[];let i=!1;for(const e of t){try{if(i){const t=new URL(e);r.push(`${t.protocol}[REDACTED]`)}else r.push(e)}catch(t){r.push(e)}i="-i"===e}e.log(r.join(" "))}const f=require("events");async function g(e,t){if(!t)return Buffer.alloc(0);{const r=e.read(t);if(r)return r}return new Promise(((r,i)=>{const s=()=>{const i=e.read(t);i&&(e.removeListener("readable",s),r(i))};e.on("readable",s)}))}async function y(e,t){if(!t)return Buffer.alloc(0);{const r=e.read(t);if(r)return r}return new Promise(((r,i)=>{const s=()=>{const i=e.read(t);i&&(n(),r(i))},o=()=>{n(),i(new Error(`stream ended during read for minimum ${t} bytes`))},n=()=>{e.removeListener("readable",s),e.removeListener("end",o)};e.on("readable",s),e.on("end",o)}))}const v="\n".charCodeAt(0);async function S(e){return async function(e,t){const r=[];let i=0;for(;;){const s=await y(e,1);if(!s)throw new Error("end of stream");if(s[0]===t)break;r[i++]=s[0]}return Buffer.from(r).toString()}(e,v)}const{mediaManager:b}=t();async function*_(e){for(;;){const t=await y(e,8),r=t.readInt32BE(0)-8,i=t.slice(4).toString(),s=await y(e,r);yield{header:t,length:r,type:i,data:s}}}const w=["-movflags","frag_keyframe+empty_moov+default_base_moof+skip_sidx+skip_trailer","-f","mp4"];const P=require("net");var x=r.n(P);const M=require("dgram");var T=r.n(M);async function I(e){if(e)try{await new Promise((t=>e.close(t)))}catch(e){}}async function C(e,t){e.bind(t),await(0,f.once)(e,"listening");const r=e.address().port;return{port:r,url:`udp://127.0.0.1:${r}`}}async function R(e){return C(e,0)}async function O(){return async function(e){const t=T().createSocket("udp4"),{port:r,url:i}=await C(t,e);return{server:t,port:r,url:i}}(0)}async function D(e,t){return e.bind(t),await(0,f.once)(e,"listening"),{port:t,url:`udp://127.0.0.1:${t}`}}async function E(){const e=new(x().Server),t=await async function(e){return e.listen(0),await(0,f.once)(e,"listening"),e.address().port}(e),r=new Promise(((t,r)=>{const i=setTimeout((()=>{r(new Error("timeout waiting for client"))}),3e4);e.on("connection",(r=>{e.close(),clearTimeout(i),t(r)}))}));return{server:e,url:`tcp://127.0.0.1:${t}`,port:t,clientPromise:r}}function A(e){if(e)return JSON.parse(JSON.stringify(e))}const{mediaManager:k}=t();async function B(e,t){return new Promise((r=>{const i=s=>{const o=s.toString(),n=o.indexOf(`${t}: `);if(-1!==n){const s=o.substring(n+t.length+1).trim();let a=s.indexOf(" ");const c=s.indexOf(",");-1!==a&&c<a&&(a=c),-1!==a&&(e.stdout.removeListener("data",i),e.stderr.removeListener("data",i),r(s.substring(0,a)))}};e.stdout.on("data",i),e.stderr.on("data",i)}))}function V(e,t,r,i){let s;let o=Date.now();function n(){o=Date.now()}return i&&(s=setInterval((()=>{Date.now()>o+i&&(clearInterval(s),s=void 0,console.error("timeout waiting for data, killing parser session",e),t())}),i)),r.once("killed",(()=>clearTimeout(s))),n(),{resetActivityTimer:n,clearActivityTimer:function(){clearTimeout(s)}}}async function j(e,t){const{console:r}=t;let i,s=!0;const o=new f.EventEmitter;let n,a,d,u,l;o.on("error",(e=>r.error("rebroadcast error",e)));const g=new Promise(((e,t)=>{u=e,l=t}));let y;const v=new Promise((e=>{y=e}));function S(){s&&(o.emit("killed"),o.emit("error",new Error("killed"))),s=!1,clearTimeout(i),y(),l?.(new Error("ffmpeg was killed before connecting to the rebroadcast session")),p(M)}const b=e.inputArguments.slice();i=setTimeout(S,3e4);let _=!1;const w=e=>{if(!s)throw e(),new Error("parser session was killed killed before ffmpeg connected");o.on("killed",e)},P=["pipe","pipe","pipe"];let x=3;for(const e of Object.keys(t.parsers)){const i=t.parsers[e];if(i.parseDatagram){_=!0;const r=T().createSocket("udp4"),s=await R(r),n=T().createSocket("udp4");await D(n,s.port+1),w((()=>{r.close(),n.close()})),b.push(...i.outputArguments,s.url.replace("udp://","rtp://"));const{resetActivityTimer:a}=V(e,S,o,t?.timeout);(async()=>{for await(const t of i.parseDatagram(r,parseInt(d?.[2]),parseInt(d?.[3])))u?.(void 0),o.emit(e,t),a()})(),(async()=>{for await(const t of i.parseDatagram(n,parseInt(d?.[2]),parseInt(d?.[3]),"rtcp"))u?.(void 0),o.emit(e,t),a()})()}else if(i.tcpProtocol){const s=await E(),n=new URL(i.tcpProtocol);n.port=s.port.toString(),b.push(...i.outputArguments,n.toString());const{resetActivityTimer:a}=V(e,S,o,t?.timeout);(async()=>{const t=await s.clientPromise;try{w((()=>t.destroy()));for await(const r of i.parse(t,parseInt(d?.[2]),parseInt(d?.[3])))u?.(void 0),o.emit(e,r),a()}catch(e){r.error("rebroadcast parse error",e),S()}})()}else b.push(...i.outputArguments,"pipe:"+x++),P.push("pipe")}_&&(b.push("-sdp_file","pipe:"+x++),P.push("pipe")),b.unshift("-hide_banner"),h(r,b);const M=c().spawn(await k.getFFmpegPath(),b,{stdio:P});let I;m(r,M,void 0,t?.storage),M.on("exit",S),I=_?new Promise((e=>{const t=[];M.stdio[x-1].on("data",(r=>{t.push(r),e(t)}))})):Promise.resolve([]);let C=0;return Object.keys(t.parsers).forEach((async e=>{const i=t.parsers[e];if(!i.parse||i.tcpProtocol)return;const s=M.stdio[3+C];C++;try{const{resetActivityTimer:r}=V(e,S,o,t?.timeout);for await(const t of i.parse(s,parseInt(d?.[2]),parseInt(d?.[3])))u?.(void 0),o.emit(e,t),r()}catch(e){r.error("rebroadcast parse error",e),S()}})),async function(e){return B(e,"Audio")}(M).then((e=>n=e)),async function(e){return B(e,"Video")}(M).then((e=>a=e)),async function(e){return new Promise((t=>{const r=i=>{const s=i.toString(),o=/(([0-9]{2,5})x([0-9]{2,5}))/.exec(s);o&&(e.stdout.removeListener("data",r),e.stderr.removeListener("data",r),t(o))};e.stdout.on("data",r),e.stderr.on("data",r)}))}(M).then((e=>d=e)),await g,u=void 0,l=void 0,clearTimeout(i),{sdp:I,inputAudioCodec:n,inputVideoCodec:a,inputVideoResolution:{width:parseInt(d?.[1]),height:parseInt(d?.[2])},get isActive(){return s},kill:S,killed:v,negotiateMediaStream:()=>{const t=A(e.mediaStreamOptions)||{id:void 0,name:void 0};return t.video||(t.video={}),t.video.codec=a,t.audio=t?.audio?.codec===n?e?.mediaStreamOptions?.audio:{codec:n},t},emit(e,t){return o.emit(e,t),this},on(e,t){return o.on(e,t),this},once(e,t){return o.once(e,t),this},removeListener(e,t){return o.removeListener(e,t),this}}}async function L(e,t){const r=await e;let i=!0;const s=()=>{r.removeAllListeners(),r.destroy();const e=o;o=void 0,e?.()};let o=t?.connect((e=>{i&&(i=!1,e.startStream&&r.write(e.startStream));for(const t of e.chunks)r.write(t);return r.writableLength}),s);r.once("close",(()=>{s()})),r.on("error",(e=>t?.console?.log("client stream ended")))}const H=require("stream");var U=r(113),N=r.n(U);function K(e){let t=e.split("\n").map((e=>e.trim()));t=t.filter((e=>!e.includes("a=control:")));let r=0;for(let e=0;e<t.length;e++){t[e].startsWith("m=")&&(t.splice(e+1,0,"a=control:trackID="+r),r++)}return t.join("\r\n")}function q(e){const t=[];for(const r of e.split(" ").slice(3)||[])t.push(parseInt(r));return t}function F(e){return e.filter((e=>e.startsWith("a=fmtp"))).map((e=>{const t=e.indexOf(" ");if(-1===t)return;const r=e.substring(0,t),i=e.substring(t+1),s=parseInt(r.split(":")[1]);if(!r||!i||NaN===s)return;const o={};return i.split(";").map((e=>e.trim())).forEach((e=>{const[t,...r]=e.split("=");o[t]=r.join("=")})),{payloadType:s,parameters:o}})).filter((e=>!!e))}const $="a=control:";function G(e){const t=e.find((e=>e.startsWith($)))?.substring($.length),r=e.find((e=>e.startsWith("a=rtpmap:")))?.toLowerCase();let i,s;r?.includes("mpeg4")?i="aac":r?.includes("opus")?i="opus":r?.includes("pcm")?i="pcm":r?.includes("h264")?i="h264":r?.includes("h265")&&(i="h265");for(const t of["sendonly","sendrecv","recvonly","inactive"]){if(e.find((e=>e==="a="+t))){s=t;break}}return{...(o=e[0],{type:o.split(" ")[0].substring(2),payloadTypes:q(o)}),fmtp:F(e),lines:e,contents:e.join("\r\n"),control:t,codec:i,direction:s};var o}function W(e){const t=e.split("\n").map((e=>e.trim())),r=[],i=[];let s;for(const e of t)e.startsWith("m=")&&(s&&i.push(s),s=[]),s?s.push(e):r.push(e);s&&i.push(s);const o={header:{lines:r,contents:r.join("\r\n")},msections:i.map(G),toSdp:()=>[...o.header.lines,...o.msections.map((e=>e.lines)).flat()].join("\r\n")};return o}const z=require("tls");var J=r.n(z),Q=r(747);class Y extends Error{constructor(){super("Operation Timed Out")}}function X(e,t){if("h264"!==e.type)return;const r=e.chunks[e.chunks.length-1].subarray(12),i=31&r[0];if(24===i){let e=1;for(;e<r.length;){const i=r.readUInt16BE(e);e+=2;if((31&r[e])===t)return r.subarray(e,e+i);e+=i}}else if(28===i){const e=31&r[1],i=!!(128&r[1]);if(e===t&&i)return r.subarray(1)}else if(i===t)return r}function Z(e){const t={};for(const r of e.slice(1)){const e=r.indexOf(":");let i="";-1!==e&&(i=r.substring(e+1).trim());t[r.substring(0,e).toLowerCase()]=i}return t}class ee extends class{constructor(e){this.console=e}write(e,t,r){let i=`${e}\r\n`;r&&(t["Content-Length"]=r.length.toString());for(const[e,r]of Object.entries(t))i+=`${e}: ${r}\r\n`;i+="\r\n",this.client.write(i),this.console?.log("rtsp outgoing message\n",i),this.console?.log(),r&&this.client.write(r)}async readMessage(){const e=await async function(e){let t=[];for(;;){let r=await S(e);if(r=r.trim(),!r)return t;t.push(r)}}(this.client);return this.console?.log("rtsp incoming message\n",e.join("\n")),this.console?.log(),e}}{cseq=0;rfc4571=new H.PassThrough;needKeepAlive=!1;constructor(e,t){super(t),this.url=e;const r=new URL(e),i=parseInt(r.port)||554;e.startsWith("rtsps")?this.client=J().connect({rejectUnauthorized:!1,port:i,host:r.hostname}):this.client=x().connect(i,r.hostname)}writeRequest(e,t,r,i){t=t||{};let s=this.url;r&&(r.includes("rtsp://")||r.includes("rtsps://")?s=r:s+="/"+r);const o=new URL(s);o.username="",o.password="",s=o.toString();const n=`${e} ${s} RTSP/1.0`,a=this.cseq++;t.CSeq=a.toString(),this.authorization&&(t.Authorization=this.authorization),this.session&&(t.Session=this.session),this.write(n,t,i)}async handleDataPayload(e){if(36!==e[0])throw new Error("RTSP Client expected frame magic but received: "+e.toString());const t=e.readUInt16BE(2),r=await y(this.client,t);this.rfc4571.push(e),this.rfc4571.push(r)}async readDataPayload(){const e=await y(this.client,4);return this.handleDataPayload(e)}async readLoop(){try{for(;;)this.needKeepAlive&&(this.needKeepAlive=!1,await this.getParameter()),await this.readDataPayload()}catch(e){throw this.client.destroy(e),this.rfc4571.destroy(e),e}}async readMessage(){for(;;){const e=await y(this.client,4);if("RTSP"===e.toString()){this.client.unshift(e);return await super.readMessage()}await this.handleDataPayload(e)}}async request(e,t,r,i,s){this.writeRequest(e,t,r,i);const o=this.requestTimeout?await(n=this.requestTimeout,a=this.readMessage(),new Promise(((e,t)=>{setTimeout((()=>t(new Y)),n),a.then(e),a.catch(t)}))):await this.readMessage();var n,a;const c=o[0],d=Z(o);if(!c.includes("200")&&!d["www-authenticate"])throw new Error(c);const u=d["www-authenticate"];if(u){if(s)throw new Error("auth failed");const o=new URL(this.url);if(u.includes("Basic")){const e=Q.rh.computeHash(o);this.authorization=`Basic ${e}`}else{const t=Q.Nu.parseWWWAuthenticateRest(u),r=decodeURIComponent(o.username),i=decodeURIComponent(o.password),s=N().createHash("md5").update(`${r}:${t.realm}:${i}`).digest("hex"),n=N().createHash("md5").update(`${e}:${o.pathname}`).digest("hex"),a=N().createHash("md5").update(`${s}:${t.nonce}:${n}`).digest("hex"),c={username:r,realm:t.realm,nonce:t.nonce,uri:o.pathname,algorithm:"MD5",response:a},d=Object.entries(c).map((([e,t])=>{return`${e}=${t&&(r=t,`"${r.replace(/"/g,'\\"')}"`)}`;var r})).join(", ");this.authorization=`Digest ${d}`}return this.request(e,t,r,i,!0)}const l=parseInt(d["content-length"]);return l?{headers:d,body:await y(this.client,l)}:{headers:d,body:void 0}}async options(){return this.request("OPTIONS",{})}async getParameter(){return this.request("GET_PARAMETER")}writeGetParameter(){return this.writeRequest("GET_PARAMETER")}async describe(e){return this.request("DESCRIBE",{...e||{},Accept:"application/sdp"})}async setup(e,t,r){const i={Transport:`RTP/AVP/${r?"UDP":"TCP"};unicast;${r?"client_port":"interleaved"}=${e}-${e+1}`},s=await this.request("SETUP",i,t);if(s.headers.session){const e=function(e){const t={};for(const r of e.split(";")){const[e,i]=r.split("=",2);t[e]=i}return t}(s.headers.session);let t=parseInt(e.timeout);if(t){let e=setInterval((()=>this.needKeepAlive=!0),1e3*(t-5));this.client.once("close",(()=>clearInterval(e)))}this.session=s.headers.session.split(";")[0]}return s}async play(e="0.000"){const t={Range:`npt=${e}-`};return this.request("PLAY",t)}writePlay(e="0.000"){const t={Range:`npt=${e}-`};return this.writeRequest("PLAY",t)}async pause(){return this.request("PAUSE")}async teardown(){try{return await this.request("TEARDOWN")}finally{this.client.destroy()}}writeTeardown(){this.writeRequest("TEARDOWN")}}class te{setupTracks={};constructor(e,t,r,i){this.client=e,this.sdp=t,this.udp=r,this.checkRequest=i,this.session=(0,U.randomBytes)(4).toString("hex"),t&&(t=t.trim())}async handleSetup(){let e=[];for(;;){let t=await S(this.client);if(t=t.trim(),t)e.push(t);else{if(!await this.headers(e))break;e=[]}}}async handlePlayback(){return this.handleSetup()}async handleTeardown(){return this.handleSetup()}async*handleRecord(){for(;;){const e=await y(this.client,4);if(36!==e[0])throw new Error("RTSP Server expected frame magic but received: "+e.toString());const t=e.readUInt16BE(2),r=await y(this.client,t),i=e.readUInt8(1),s=i-i%2,o=Object.values(this.setupTracks).find((e=>e.destination===s));if(!o)throw new Error("RSTP Server received unknown channel: "+i);yield{type:o.codec,rtcp:i%2==1,header:e,packet:r}}}send(e,t){const r=Buffer.alloc(4);r.writeUInt8(36,0),r.writeUInt8(t,1),r.writeUInt16BE(e.length,2),this.client.write(r),this.client.write(Buffer.from(e))}sendUdp(e,t,r){this.udp.send(t,r?e+1:e,"127.0.0.1")}sendTrack(e,t,r){const i=this.setupTracks[e];i?"udp"!==i.protocol?this.send(t,r?i.destination+1:i.destination):this.udp?this.sendUdp(i.destination,t,r):this.console?.warn("RTSP Server UDP socket not available."):this.console?.warn("RTSP Server track not found:",e)}options(e,t){const r={Public:"DESCRIBE, OPTIONS, PAUSE, PLAY, SETUP, TEARDOWN, ANNOUNCE, RECORD"};this.respond(200,"OK",t,r)}describe(e,t){const r={};r["Content-Base"]=e,r["Content-Type"]="application/sdp",this.respond(200,"OK",t,r,Buffer.from(this.sdp))}setup(e,t){const r={},i=t.transport;r.Transport=i,r.Session=this.session;const s=W(this.sdp).msections.find((t=>e.endsWith(t.control)));if(s){if(i.includes("UDP")){if(!this.udp)return void this.respond(461,"Unsupported Transport",t,{});const e=i.match(/.*?client_port=([0-9]+)-([0-9]+)/),[r,o,n]=e;this.setupTracks[s.control]={control:s.control,protocol:"udp",destination:parseInt(o),codec:s.codec}}else if(i.includes("TCP")){const e=i.match(/.*?interleaved=([0-9]+)-([0-9]+)/);if(e){const t=parseInt(e[1]);parseInt(e[2]);this.setupTracks[s.control]={control:s.control,protocol:"tcp",destination:t,codec:s.codec}}}this.respond(200,"OK",t,r)}else this.respond(404,"Not Found",t,r)}play(e,t){const r={},i=Object.values(this.setupTracks).map((t=>`url=${e}/${t.control}`)).join(",")+";seq=0;rtptime=0";r["RTP-Info"]=i,r.Range="npt=now-",r.Session=this.session,this.respond(200,"OK",t,r)}async announce(e,t){const r=parseInt(t["content-length"]),i=await y(this.client,r);this.sdp=i.toString();const s={};s.Session=this.session,this.respond(200,"OK",t,s)}async record(e,t){const r={};r.Session=this.session,this.respond(200,"OK",t,r)}async teardown(e,t){const r={};r.Session=this.session,this.respond(200,"OK",t,r)}async headers(e){this.console?.log("request headers",e.join("\n"));let[t,r]=e[0].split(" ",2);t=t.toLowerCase();const i=Z(e);if(this.checkRequest){let s;try{s=await this.checkRequest(t,r,i,e)}catch(e){this.console?.error("error checking request",e)}if(!s)throw this.respond(400,"Bad Request",i,{}),this.client.destroy(),new Error("check request failed")}if(this[t])return await this[t](r,i),"play"!==t&&"record"!==t&&"teardown"!==t;this.respond(400,"Bad Request",i,{})}respond(e,t,r,i,s){let o=`RTSP/1.0 ${e} ${t}\r\n`;r.cseq&&(i.CSeq=r.cseq),s&&(i["Content-Length"]=s.length.toString());for(const[e,t]of Object.entries(i))o+=`${e}: ${t}\r\n`;this.console?.log("response headers",o),o+="\r\n",this.client.write(o),s&&(this.client.write(s),this.console?.log("response body",s.toString()))}}const{systemManager:re}=t();class ie{values={};hasValue={};constructor(e,t){this.device=e,this.settings=t;for(const e of Object.keys(t)){const r=t[e],i=()=>this.getItem(e);let s;s="clippath"!==r.type?i:()=>{try{return JSON.parse(i())}catch(e){}},Object.defineProperty(this.values,e,{get:s,set:t=>this.putSetting(e,t)}),Object.defineProperty(this.hasValue,e,{get:()=>null!=this.device.storage.getItem(e)})}}get keys(){const e={};for(const t of Object.keys(this.settings))e[t]=t;return e}async getSettings(){const e=await(this.options?.onGet?.()),t=[];for(const[r,i]of Object.entries(this.settings)){let s=Object.assign({},i);e?.[r]&&(s=Object.assign(s,e[r])),s.onGet&&(s=Object.assign(s,await s.onGet())),s.hide||await(this.options?.hide?.[r]?.())||(s.key=r,s.value=this.getItemInternal(r,s),t.push(s),delete s.onPut,delete s.onGet,delete s.mapPut,delete s.mapGet)}return t}async putSetting(t,r){const i=this.settings[t];let s;i&&(s=this.getItemInternal(t,i)),i?.noStore||(i.mapPut&&(r=i.mapPut(s,r)),"object"==typeof r?this.device.storage.setItem(t,JSON.stringify(r)):this.device.storage.setItem(t,r?.toString())),i?.onPut?.(s,r),this.device.onDeviceEvent(e.ScryptedInterface.Settings,void 0)}getItemInternal(e,t){if(!t)return this.device.storage.getItem(e);const r=function(e,t){const{defaultValue:r}=t,i=t.multiple?"array":t.type;if("boolean"===i)return"true"===e||"false"!==e&&(r||!1);if("number"===i)return parseFloat(e)||r||0;if("integer"===i)return parseInt(e)||r||0;if("array"===i)try{return JSON.parse(e)}catch(e){return r||[]}if("device"===i)return re.getDeviceById(e);if(e&&t.json)try{return JSON.parse(e)}catch(e){return r}return e||r}(this.device.storage.getItem(e),t);return t.mapGet?t.mapGet(r):r}getItem(e){return this.getItemInternal(e,this.settings[e])}}const{deviceManager:se}=t();class oe extends e.MixinDeviceBase{constructor(t){super(t),this.settingsGroup=t.group,this.settingsGroupKey=t.groupKey,process.nextTick((()=>se.onMixinEvent(this.id,this,e.ScryptedInterface.Settings,null)))}async getSettings(){const t=this.mixinDeviceInterfaces.includes(e.ScryptedInterface.Settings)?this.mixinDevice.getSettings():void 0,r=this.getMixinSettings(),i=[];try{const e=await t||[];i.push(...e)}catch(e){const t=this.name,r=`${t} Extension settings failed to load.`;this.console.error(r,e),i.push({key:Math.random().toString(),title:t,value:"Settings Error",group:"Errors",description:r,readonly:!0})}try{const e=await r||[];for(const t of e)t.group=t.group||this.settingsGroup,t.key=this.settingsGroupKey+":"+t.key;i.push(...e)}catch(e){const t=se.getDeviceState(this.mixinProviderNativeId).name,r=`${t} Extension settings failed to load.`;this.console.error(r,e),i.push({key:Math.random().toString(),title:t,value:"Settings Error",group:"Errors",description:r,readonly:!0})}return i}async putSetting(t,r){const i=this.settingsGroupKey+":";if(!t?.startsWith(i))return this.mixinDevice.putSetting(t,r);await this.putMixinSetting(t.substring(i.length),r),se.onMixinEvent(this.id,this,e.ScryptedInterface.Settings,null)}async release(){await se.onMixinEvent(this.id,this,e.ScryptedInterface.Settings,null)}}function ne(e){return e}async function*ae(e){let t,r,i;for await(const s of e)t?r||(r=s):t=s,yield{startStream:i,chunks:[s.header,s.data],type:s.type},t&&r&&!i&&(i=Buffer.concat([t.header,t.data,r.header,r.data]))}class ce{bitoffset=0;constructor(e){this.view=e}ExpGolomb(){const{view:e}=this;let{zeros:t,skip:r,byt:i,byteoffset:s}=function(e,t){let r=0,i=t>>3,s=7&t,o=-1,n=e.getUint8(i)<<s;do{r=128&n,n<<=1,o++,s++,8===s&&(s=0,i++,n=e.getUint8(i))}while(!r);return{zeros:o,skip:s,byt:n,byteoffset:i}}(e,this.bitoffset),o=1;for(;t>0;)o=o<<1|(128&i)>>>7,i<<=1,r++,t--,8===r&&(r=0,s++,i=e.getUint8(s));return this.bitoffset=s<<3|r,o-1}SignedExpGolomb(){const e=this.ExpGolomb();return 1&e?e+1>>>1:-(e>>>1)}readBit(){const e=7&this.bitoffset,t=this.bitoffset>>3;return this.bitoffset++,this.view.getUint8(t)>>7-e&1}readByte(){const e=7&this.bitoffset,t=this.bitoffset>>3;this.bitoffset+=8;const r=this.view.getUint8(t);if(0===e)return r;return r<<e|this.view.getUint8(t+1)>>8-e}}function de(e,t){let r=8,i=8;const s=[];for(let o=0;o<t;o++){if(0!==i){i=(r+e.SignedExpGolomb()+256)%256}i&&(r=i),s.push(i)}return s}function ue(e){if(7!=(31&e[0]))throw new Error("Not an SPS unit");const t=new ce(new DataView(e.buffer,e.byteOffset+4)),r=e[1],i=e[2],s=e[3],o=t.ExpGolomb();let n=1,a=0,c=0,d=0,u=0,l=0;const p=[];if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){n=t.ExpGolomb();let e=8;if(3===n&&(e=12,d=t.readBit()),a=t.ExpGolomb()+8,c=t.ExpGolomb()+8,u=t.readBit(),l=t.readBit(),l){let r=0;for(;r<6;r++)t.readBit()&&p.push(de(t,16));for(;r<e;r++)t.readBit()&&p.push(de(t,64))}}const m=t.ExpGolomb()+4,h=t.ExpGolomb();let f=0,g=0,y=0;const v=[];let S=0;if(0===h)S=t.ExpGolomb()+4;else if(1===h){f=t.readBit(),g=t.SignedExpGolomb(),y=t.SignedExpGolomb();const e=t.SignedExpGolomb();for(let r=0;r<e;r++)v.push(t.SignedExpGolomb())}const b=t.ExpGolomb(),_=t.readBit(),w=t.ExpGolomb()+1,P=t.ExpGolomb()+1,x=t.readBit();let M=0;x||(M=t.readBit());const T=t.readBit(),I=t.readBit(),C=function(e,t){return e?{left:t.ExpGolomb(),right:t.ExpGolomb(),top:t.ExpGolomb(),bottom:t.ExpGolomb()}:{left:0,right:0,top:0,bottom:0}}(I,t),R=t.readBit(),O=function(e,t){const r={aspect_ratio_info_present_flag:0,aspect_ratio_idc:0,sar_width:0,sar_height:0,overscan_info_present_flag:0,overscan_appropriate_flag:0,video_signal_type_present_flag:0,video_format:0,video_full_range_flag:0,colour_description_present_flag:0,colour_primaries:0,transfer_characteristics:0,matrix_coefficients:0,chroma_loc_info_present_flag:0,chroma_sample_loc_type_top_field:0,chroma_sample_loc_type_bottom_field:0,nal_hrd_parameters_present_flag:0,vcl_hrd_parameters_present_flag:0,low_delay_hrd_flag:0,pic_struct_present_flag:0,bitstream_restriction_flag:0,motion_vectors_over_pic_boundaries_flag:0,max_bytes_per_pic_denom:0,max_bits_per_mb_denom:0,log2_max_mv_length_horizontal:0,log2_max_mv_length_vertical:0,num_reorder_frames:0,max_dec_frame_buffering:0};return e&&(r.aspect_ratio_info_present_flag=t.readBit(),r.aspect_ratio_info_present_flag&&(r.aspect_ratio_idc=t.ExpGolomb(),255===r.aspect_ratio_idc&&(r.sar_width=t.readByte(),r.sar_height=t.readByte())),r.overscan_info_present_flag=t.readBit(),r.overscan_info_present_flag&&(r.overscan_appropriate_flag=t.readBit()),r.video_signal_type_present_flag=t.readBit(),r.video_signal_type_present_flag&&(r.video_format=t.readBit()<<2|t.readBit()<<1|t.readBit(),r.video_full_range_flag=t.readBit(),r.colour_description_present_flag=t.readBit(),r.colour_description_present_flag&&(r.colour_primaries=t.readByte(),r.transfer_characteristics=t.readByte(),r.matrix_coefficients=t.readByte())),r.chroma_loc_info_present_flag=t.readBit(),r.chroma_loc_info_present_flag&&(r.chroma_sample_loc_type_top_field=t.ExpGolomb(),r.chroma_sample_loc_type_bottom_field=t.ExpGolomb()),r.nal_hrd_parameters_present_flag=t.readBit(),r.vcl_hrd_parameters_present_flag=t.readBit(),(r.nal_hrd_parameters_present_flag||r.vcl_hrd_parameters_present_flag)&&(r.low_delay_hrd_flag=t.readBit()),r.pic_struct_present_flag=t.readBit(),r.bitstream_restriction_flag=t.readBit(),r.bitstream_restriction_flag&&(r.bitstream_restriction_flag=t.readBit(),r.motion_vectors_over_pic_boundaries_flag=t.readBit(),r.max_bytes_per_pic_denom=t.ExpGolomb(),r.max_bits_per_mb_denom=t.ExpGolomb(),r.log2_max_mv_length_horizontal=t.ExpGolomb(),r.log2_max_mv_length_vertical=t.ExpGolomb(),r.num_reorder_frames=t.ExpGolomb(),r.max_dec_frame_buffering=t.ExpGolomb())),r}(R,t);return{sps_id:o,profile_compatibility:i,profile_idc:r,level_idc:s,chroma_format_idc:n,bit_depth_luma:a,bit_depth_chroma:c,color_plane_flag:d,qpprime_y_zero_transform_bypass_flag:u,seq_scaling_matrix_present_flag:l,seq_scaling_matrix:p,log2_max_frame_num:m,pic_order_cnt_type:h,delta_pic_order_always_zero_flag:f,offset_for_non_ref_pic:g,offset_for_top_to_bottom_field:y,offset_for_ref_frame:v,log2_max_pic_order_cnt_lsb:S,max_num_ref_frames:b,gaps_in_frame_num_value_allowed_flag:_,pic_width_in_mbs:w,pic_height_in_map_units:P,frame_mbs_only_flag:x,mb_adaptive_frame_field_flag:M,direct_8x8_inference_flag:T,frame_cropping_flag:I,frame_cropping:C,vui_parameters_present_flag:R,vui_parameters:O}}function le(e){let t,r;0==e.chroma_format_idc&&0==e.color_plane_flag?t=r=0:1==e.chroma_format_idc&&0==e.color_plane_flag?t=r=2:2==e.chroma_format_idc&&0==e.color_plane_flag?(t=2,r=1):3==e.chroma_format_idc&&(0==e.color_plane_flag?t=r=1:1==e.color_plane_flag&&(t=r=0));let i=e.pic_width_in_mbs,s=e.pic_height_in_map_units,o=(2-e.frame_mbs_only_flag)*s,n=0,a=0,c=0,d=0;return e.frame_cropping_flag&&(n=e.frame_cropping.left,a=e.frame_cropping.right,c=e.frame_cropping.top,d=e.frame_cropping.bottom),{width:16*i-t*(n+a),height:16*o-r*(2-e.frame_mbs_only_flag)*(c+d)}}async function pe(e,t,r,i,s,o){let n=!0;const a=new H.EventEmitter;a.on("error",(t=>e.error("rebroadcast error",t)));const c=W(r),d=c.msections.find((e=>"audio"===e.type)),u=c.msections.find((e=>"video"===e.type)),l=d?.payloadTypes?.[0],p=u?.payloadTypes?.[0],m=d?.codec,h=u.codec;let f;const y=new Promise((e=>{f=e})),v=()=>{n&&(a.emit("killed"),a.emit("error",new Error("killed"))),n=!1,f(),t.destroy()};t.on("close",v),t.on("error",v);const{resetActivityTimer:S}=V("rtsp",v,a,s?.timeout);let b;const _=u?.fmtp?.[0]?.parameters?.["sprop-parameter-sets"],w=_?.split(",")?.[0];if(w)try{const t=ue(Buffer.from(w,"base64"));b=le(t),e.log("parsed sdp sps",t)}catch(t){e.warn("sdp sps parsing failed")}return(async()=>{const r=o?.channelMap?4:2,i=o?.channelMap?2:0,s=async e=>"RTSP"===e.toString()&&(t.unshift(e),await o.handleRTSP(),!0);for await(let{header:n,data:c}of async function*(e,t=2,r=0,i){let s,o=!1;for(e.on("error",(e=>s=e)),e.on("end",(()=>o=!0));;){if(o)throw new Error("stream ended");if(s)throw s;const n=await g(e,t);if(await(i?.(n)))continue;const a=n.readUInt16BE(r),c=await g(e,a);yield{data:c,header:n}}}(t,r,i,s)){let t;if(await(o?.onLoop?.()),o?.channelMap){const e=n.readUInt8(1);t=o?.channelMap[e]}else{const e=127&c[1],r=Buffer.alloc(2);r[0]=36,e===l?r[1]=0:e===p&&(r[1]=2),n=Buffer.concat([r,n]),e===l?t=m:e===p&&(t=h)}const r={startStream:undefined,chunks:[n,c],type:t};if(!b){const t=X(r,7);if(t)try{const r=ue(t);b=le(r),e.log(b),e.log("parsed bitstream sps",r)}catch(t){e.warn("sps parsing failed"),b={width:NaN,height:NaN}}}a.emit("rtsp",r),S()}})().catch((e=>{throw e})).finally(v),{sdp:Promise.resolve([Buffer.from(r)]),inputAudioCodec:m,inputVideoCodec:h,get inputVideoResolution(){return b},get isActive(){return n},kill:v,killed:y,resetActivityTimer:S,negotiateMediaStream:e=>{const t=A(i)||{id:void 0,name:void 0};if(t.video||(t.video={}),t.video.codec=h,e?.audio?.codec&&e?.audio?.codec!==m){if(c.msections.find((t=>"audio"===t.type&&t.codec===e?.audio?.codec)))return t.audio={codec:e?.audio?.codec},t}return t.audio=t?.audio?.codec===m?i?.audio:{codec:m},t},emit(e,t){return a.emit(e,t),this},on(e,t){return a.on(e,t),this},once(e,t){return a.once(e,t),this},removeListener(e,t){return a.removeListener(e,t),this}}}var me=r(37),he=r.n(me);const fe=["BCM2708","BCM2709","BCM2710","BCM2835","BCM2836","BCM2837","BCM2837B0","BCM2711"];function ge(){let e;try{e=r(733).readFileSync("/proc/cpuinfo",{encoding:"utf8"})}catch(e){return!1}const t=e.split("\n").map((e=>e.replace(/\t/g,""))).filter((e=>e.length>0)).map((e=>e.split(":"))).map((e=>e.map((e=>e.trim())))).filter((e=>"Hardware"===e[0]));if(!t||0==t.length)return!1;return function(e){return fe.indexOf(e)>-1}(t[0][1])}const ye="Video4Linux (Docker compatible)";function ve(){if(ge()){return{}}if("darwin"===he().platform())return{VideoToolbox:["-hwaccel","auto"]};const e={"Nvidia CUDA":["-vsync","0","–hwaccel","cuda","-hwaccel_output_format","cuda"],"Nvidia CUVID":["-vsync","0","–hwaccel","cuvid","-c:v","h264_cuvid"]};if(ge())e["Raspberry Pi"]=["-c:v","h264_mmal"],e[ye]=["-c:v","h264_v4l2m2m"];else if("linux"===he().platform())e[ye]=["-c:v","h264_v4l2m2m"];else{if("win32"!==he().platform())return{};e["Intel QuickSync"]=["-c:v","h264_qsv"]}return e}function Se(){const e={"Copy Video, Transcode Audio":"copy"};if(ge());else if("darwin"===he().platform())e.VideoToolbox="h264_videotoolbox";else if("win32"===he().platform())e["Intel QuickSync"]="h264_qsv",e.AMD="h264_amf",e.Nvidia="h264_nvenc";else{if("linux"!==he().platform())return{};e.V4L2="h264_v4l2m2m",e.VAAPI="h264_vaapi",e.Nvidia="nvenc_h264"}const t={};for(const[r,i]of Object.entries(e))t[r]=["-c:v",i];return ge()&&(t["Raspberry Pi"]=["-pix_fmt","yuv420p","-c:v","h264_v4l2m2m"]),t["libx264 (Software)"]=["-c:v","libx264","-preset","ultrafast","-bf","0","-force_key_frames","expr:gte(t,n_forced*4)"],t}function be(e){if(!e)return;const t=e.find((e=>"cloud"!==e.source));return t?[t]:[]}function _e(e,t){if(t)return e.hasValue.enabledStreams?t.filter((t=>e.values.enabledStreams.includes(t.name))):be(t)}function we(e){const t={defaultStream:{title:"Local Stream",description:"The media stream to use when streaming on your local network. This stream should be prebuffered. Recommended resolution: 1920x1080 to 4K.",hide:!0,prefersPrebuffer:!0,preferredResolution:8294400},remoteStream:{title:"Remote (Medium Resolution) Stream",description:"The media stream to use when streaming from outside your local network. Selecting a low birate stream is recommended. Recommended resolution: 1270x720.",hide:!0,prefersPrebuffer:!1,preferredResolution:921600},lowResolutionStream:{title:"Low Resolution Stream",description:"The media stream to use for low resolution output, such as Apple Watch and Video Analysis. Recommended resolution: 480x360.",hide:!0,prefersPrebuffer:!1,preferredResolution:172800},recordingStream:{title:"Local Recording Stream",description:"The media stream to use when recording to local storage such as an NVR. This stream should be prebuffered. Recommended resolution: 1920x1080 to 4K.",hide:!0,prefersPrebuffer:!0,preferredResolution:8294400},remoteRecordingStream:{title:"Remote Recording Stream",description:"The media stream to use when recording to cloud storage such as HomeKit Secure Video clips in iCloud. This stream should be prebuffered. Recommended resolution: 1270x720.",hide:!0,prefersPrebuffer:!0,preferredResolution:921600}},r=new ie(e,{enabledStreams:{title:"Prebuffered Streams",description:"Prebuffering maintains an active connection to the stream and improves load times. Prebuffer also retains the recent video for capturing motion events with HomeKit Secure video. Enabling Prebuffer is not recommended on Cloud cameras.",multiple:!0,hide:!1},...t,transcodeStreams:{group:"Transcoding",title:"Transcode Streams",description:"The media streams to transcode. Transcoding audio and video is not recommended and should only be used when necessary. The Rebroadcast Plugin manages the system-wide Transcode settings. See the Rebroadcast Readme for optimal configuration.",multiple:!0,choices:Object.values(t).map((e=>e.title))},missingCodecParameters:{group:"Transcoding",title:"Add H264 Extra Data",description:"Some cameras do not include H264 extra data in the stream and this causes live streaming to always fail (but recordings may be working). This is a inexpensive video filter and does not perform a transcode. Enable this setting only as necessary.",type:"boolean"},videoDecoderArguments:{group:"Transcoding",title:"Video Decoder Arguments",description:"FFmpeg arguments used to decode input video when transcoding a stream.",placeholder:"-hwaccel auto",choices:Object.keys(ve()),combobox:!0,mapPut:(e,t)=>ve()[t]?.join(" ")||t}});function i(e,t){const i=_e(r,t);return function(e,t){if(!e)return;let r,i;for(const s of e){const e=Math.abs(s.video?.width*s.video?.height-t);(!r||e<i)&&(r=s,i=e,Number.isNaN(i)&&(i=Number.MAX_SAFE_INTEGER))}return r}(e.prefersPrebuffer&&i?.length>0?i:t,e.preferredResolution)}function s(e,s){const o=r.settings[e],n=r.values[e];let a="Default"===n,c=s?.find((e=>e.name===n));return!a&&c||(a=!0,c=i(o,s)),{title:t[e].title,isDefault:a,stream:c}}function o(e,t){const r=["Default",...t.map((e=>e.name))],s=i(e,t).name;return{defaultValue:"Default",description:e.description+` The default for this stream is ${s}.`,choices:r,hide:!1}}return r.options={onGet:async()=>{let r;try{const i=await e.mixinDevice.getVideoStreamOptions();return r={defaultValue:be(i)?.map((e=>e.name)),choices:i.map((e=>e.name)),hide:!1},i?.length>1?{enabledStreams:r,defaultStream:o(t.defaultStream,i),remoteStream:o(t.remoteStream,i),lowResolutionStream:o(t.lowResolutionStream,i),recordingStream:o(t.recordingStream,i),remoteRecordingStream:o(t.remoteRecordingStream,i)}:{enabledStreams:r}}catch(t){e.console.error("error retrieving getVideoStreamOptions",t)}return{}}},{getDefaultStream:e=>s(r.keys.defaultStream,e),getRemoteStream:e=>s(r.keys.remoteStream,e),getLowResolutionStream:e=>s(r.keys.lowResolutionStream,e),getRecordingStream:e=>s(r.keys.recordingStream,e),getRemoteRecordingStream:e=>s(r.keys.remoteRecordingStream,e),storageSettings:r}}const{mediaManager:Pe,log:xe,systemManager:Me,deviceManager:Te}=t(),Ie="Default",Ce="AAC or No Audio",Re=`${Ce} (Copy)`,Oe="Compatible Audio",De="Other Audio",Ee=["aac","mp3","mp2","opus"],Ae="-fflags +genpts",ke="Scrypted",Be="FFmpeg (TCP)",Ve="FFmpeg (UDP)",je="Default",Le=[Ce,Oe,De],He=["mpegts","mp4","rtsp"];class Ue{prebuffers={mp4:[],mpegts:[],rtsp:[]};audioDisabled=!1;activeClients=0;needBitrateReset=!1;constructor(e,t,r){this.mixin=e,this.advertisedMediaStreamOptions=t,this.stopInactive=r,this.storage=e.storage,this.console=e.console,this.mixinDevice=e.mixinDevice,this.audioConfigurationKey="audioConfiguration-"+this.streamId,this.ffmpegInputArgumentsKey="ffmpegInputArguments-"+this.streamId,this.rebroadcastModeKey="rebroadcastMode-"+this.streamId,this.lastDetectedAudioCodecKey="lastDetectedAudioCodec-"+this.streamId,this.rtspParserKey="rtspParser-"+this.streamId;const i="rtspServerPathKey-"+this.streamId;this.maxBitrateKey="maxBitrate-"+this.streamId,this.rtspServerPath=this.storage.getItem(i),this.rtspServerPath||(this.rtspServerPath=N().randomBytes(8).toString("hex"),this.storage.setItem(i,this.rtspServerPath))}get maxBitrate(){let e=parseInt(this.storage.getItem(this.maxBitrateKey));return e||(e=this.advertisedMediaStreamOptions?.video?.maxBitrate,this.storage.setItem(this.maxBitrateKey,e?.toString())),e||void 0}async resetBitrate(){this.console.log("Resetting bitrate after adaptive streaming session",this.maxBitrate),this.needBitrateReset=!1,this.mixinDevice.setVideoStreamOptions({id:this.streamId,video:{bitrate:this.maxBitrate}})}get streamId(){return this.advertisedMediaStreamOptions.id}get streamName(){return this.advertisedMediaStreamOptions.name}clearPrebuffers(){this.prebuffers.mp4=[],this.prebuffers.mpegts=[],this.prebuffers.rtsp=[]}ensurePrebufferSession(){this.parserSessionPromise||this.mixin.released||(this.console.log(this.streamName,"prebuffer session started"),this.parserSessionPromise=this.startPrebufferSession(),this.parserSessionPromise.catch((()=>this.parserSessionPromise=void 0)))}getAudioConfig(){let e=this.storage.getItem(this.audioConfigurationKey)||"";Le.find((t=>e.startsWith(t)))||(e="");const t=-1!==e.indexOf(Ce),r=-1!==e.indexOf(Oe),i=-1!==e.indexOf(De);return{isUsingDefaultAudioConfig:!(t||r||i),aacAudio:t,compatibleAudio:r,reencodeAudio:i}}canUseRtspParser(e,t){if(e)return!1;if("rtsp"!==t?.container)return!1;const{isUsingDefaultAudioConfig:r,compatibleAudio:i,aacAudio:s}=this.getAudioConfig();return r||i||s}getParser(e,t,r){if(!this.canUseRtspParser(t,r))return je;const i=e&&"scrypted"===r?.tool?ke:je,s=this.storage.getItem(this.rtspParserKey);return s&&s!==je?s===ke?ke:s===Be?Be:s===Ve?Ve:i:i}getRebroadcastMode(){let e=this.storage.getItem(this.rebroadcastModeKey)||"Default",t="MPEG-TS";"scrypted"===this.advertisedMediaStreamOptions?.tool&&this.advertisedMediaStreamOptions?.container?.startsWith("rtsp")&&(t="RTSP"),"Default"===e&&(e=t);const r=e?.startsWith("RTSP");return{defaultMode:t,rtspMode:e?.startsWith("RTSP"),muxingMp4:!r||e?.includes("MP4")}}async getMixinSettings(){const t=[],r=this.parserSession;let i=0,s=0;const{muxingMp4:o,rtspMode:n,defaultMode:a}=this.getRebroadcastMode();for(const e of o?this.prebuffers.mp4:this.prebuffers.rtsp){s=s||e.time;for(const t of e.chunk.chunks)i+=t.byteLength}const c=Date.now()-s,d=Math.round(i/c*8),u=this.streamName?`Stream: ${this.streamName}`:"Stream";t.push({title:"Audio Codec Transcoding",group:u,description:"Configuring your camera to output AAC, MP3, MP2, or Opus is recommended. PCM/G711 cameras should set this to Transcode.",type:"string",key:this.audioConfigurationKey,value:this.storage.getItem(this.audioConfigurationKey)||Ie,choices:[Ie,Re,"Compatible Audio (Copy)","Other Audio (Transcode)"]},{title:"Rebroadcast Container",group:u,description:`Experimental: The container format to use when rebroadcasting. MPEG-TS is stable. RTSP is lower latency. The default mode for this camera is ${a}.`,placeholder:"MPEG-TS",choices:[je,"MPEG-TS","RTSP"],key:this.rebroadcastModeKey,value:this.storage.getItem(this.rebroadcastModeKey)||je});const l=()=>{t.push({title:"FFmpeg Input Arguments Prefix",group:u,description:"Optional/Advanced: Additional input arguments to pass to the ffmpeg command. These will be placed before the input arguments.",key:this.ffmpegInputArgumentsKey,value:this.storage.getItem(this.ffmpegInputArgumentsKey),placeholder:Ae,choices:[Ae,"-use_wallclock_as_timestamps 1","-v verbose"],combobox:!0})};if(this.canUseRtspParser(o,this.advertisedMediaStreamOptions)&&n&&"rtsp"===this.advertisedMediaStreamOptions?.container){const e=this.getParser(n,o,this.advertisedMediaStreamOptions),r=n&&"scrypted"===this.advertisedMediaStreamOptions?.tool?ke:"FFmpeg";t.push({key:this.rtspParserKey,group:u,title:"RTSP Parser",description:`Experimental: The RTSP Parser used to read the stream. FFmpeg is stable. The Scrypted parser is lower latency. The Scrypted Parser is only available when the Audo Codec is not Transcoding and the Rebroadcast Container is RTSP. The default is "${r}" for this camera.`,value:this.storage.getItem(this.rtspParserKey)||je,choices:[je,Be,Ve,ke]}),e!==ke&&l()}else l();if(r){const e=r.inputVideoResolution?.width&&r.inputVideoResolution?.height?`${r.inputVideoResolution?.width}x${r.inputVideoResolution?.height}`:"unknown";t.push({key:"detectedResolution",group:u,title:"Detected Resolution and Bitrate",readonly:!0,value:`${e} @ ${d||"unknown"} Kb/s`,description:"Configuring your camera to 1920x1080, 2000Kb/S, Variable Bit Rate, is recommended."},{key:"detectedCodec",group:u,title:"Detected Video/Audio Codecs",readonly:!0,value:(r?.inputVideoCodec?.toString()||"unknown")+"/"+(r?.inputAudioCodec?.toString()||"unknown"),description:"Configuring your camera to H264 video and AAC/MP3/MP2/Opus audio is recommended."},{key:"detectedKeyframe",group:u,title:"Detected Keyframe Interval",description:"Configuring your camera to 4 seconds is recommended (IDR aka Frame Interval = FPS * 4 seconds).",readonly:!0,value:(this.detectedIdrInterval||0)/1e3||"unknown"})}else t.push({title:"Status",group:u,key:"status",description:"Rebroadcast is currently idle and will be started automatically on demand.",value:"Idle",readonly:!0});return n&&t.push({group:u,key:"rtspRebroadcastUrl",title:"RTSP Rebroadcast Url",description:"The RTSP URL of the rebroadcast stream. Substitute localhost as appropriate.",readonly:!0,value:`rtsp://localhost:${this.mixin.plugin.storageSettings.values.rebroadcastPort}/${this.rtspServerPath}`}),this.mixin.mixinDeviceInterfaces.includes(e.ScryptedInterface.VideoCameraConfiguration)&&t.push({group:u,key:this.maxBitrateKey,title:"Max Bitrate",description:"This camera supports Adaptive Bitrate. Set the maximum bitrate to be allowed while using adaptive bitrate streaming. This will also serve as the default bitrate.",type:"number",value:this.maxBitrate?.toString()}),t}async startPrebufferSession(){let t;this.prebuffers.mp4=[],this.prebuffers.mpegts=[],this.prebuffers.rtsp=[];try{t=(await this.mixinDevice.getVideoStreamOptions()).find((e=>e.id===this.streamId))}catch(e){}const r=null===t?.audio,i=t?.audio?.codec,{isUsingDefaultAudioConfig:s,aacAudio:o,compatibleAudio:n,reencodeAudio:a}=this.getAudioConfig(),{rtspMode:d,muxingMp4:u}=this.getRebroadcastMode();let l=this.storage.getItem(this.lastDetectedAudioCodecKey)||void 0;"null"===l&&(l=null);let g=!1;u&&!r&&!i&&s&&void 0===l&&(this.console.warn("Camera did not report an audio codec, muting the audio stream and probing the codec."),g=!0);const y=void 0===l?i?.toLowerCase():l?.toLowerCase(),v=!Ee.includes(y);!u||g||!1===t?.userConfigurable||r||v&&(s&&xe.a(`${this.mixin.name} is using the ${y} audio codec. Configuring your Camera to use AAC, MP3, MP2, or Opus audio is recommended. If this is not possible, Select 'Transcode Audio' in the camera stream's Rebroadcast settings to suppress this alert.`),this.console.warn("Configure your camera to output AAC, MP3, MP2, or Opus audio. Suboptimal audio codec in use:",y));const S=["-bsf:a","aac_adtstoasc"],P=[];let M;this.audioDisabled=!1;const T=null===l;let C=!1;if(!g&&s&&v&&(!1===t?.userConfigurable?this.console.log("camera reports it is not user configurable. transcoding due to incompatible codec",y):this.console.log("camera audio transcoding due to incompatible codec. configure the camera to use a compatible codec if possible."),C=!0),r||g)M=["-an"],this.audioDisabled=!0;else if(a||C)M=["-bsf:a","aac_adtstoasc","-acodec","aac","-ar","32k","-b:a","32k","-ac","1","-profile:a","aac_low","-flags","+global_header"];else if(o||T)M=["-acodec","copy"],M.push(...S);else if(n)M=["-acodec","copy"],M.push(...P);else{M=["-acodec","copy"];const e="aac"===y?S:P;M.push(...e)}const R=["-vcodec","copy"],D={console:this.console,timeout:6e4,parsers:{}};if(this.parsers=D.parsers,this.console.log("rebroadcast mode:",d?"rtsp":"mpegts"),d){const e=function(e){let t;return{container:"rtsp",tcpProtocol:"rtsp://127.0.0.1/"+(0,U.randomBytes)(8).toString("hex"),inputArguments:["-rtsp_transport","tcp"],outputArguments:["-rtsp_transport","tcp",...e?.vcodec||[],...e?.acodec||[],"-f","rtsp"],findSyncFrame(e){let t;for(let r=0;r<e.length;r++)X(e[r],7)&&(t=r);return void 0!==t?e.slice(t):e},sdp:new Promise((e=>t=e)),async*parse(e,r,i){const s=new te(e);await s.handleSetup(),t(s.sdp);for await(const{type:e,rtcp:t,header:o,packet:n}of s.handleRecord())yield{chunks:[o,n],type:`${t?"rtcp":"rtp"}-${e}`,width:r,height:i}}}}({vcodec:R,acodec:s?["-acodec","copy"]:M});this.sdp=e.sdp,D.parsers.rtsp=e}else D.parsers.mpegts={container:"mpegts",outputArguments:[...(E={vcodec:R,acodec:M})?.vcodec||[],...E?.acodec||[],"-f","mpegts"],parse:(A=188,k=e=>{if(71!=e[0])throw new Error("Invalid sync byte in mpeg-ts packet. Terminating stream.")},async function*(e){let t=[],r=0;for(;;){const i=e.read();if(!i){await(0,f.once)(e,"readable");continue}if(t.push(i),r+=i.length,r<A)continue;const s=Buffer.concat(t);k?.(s);const o=s.length%A,n=s.slice(0,s.length-o),a=s.slice(s.length-o);t=[a],r=a.length,yield{chunks:[n]}}}),findSyncFrame(e){for(let t=0;t<e.length;t++){const r=e[t];for(let i=0;i<r.chunks.length;i++){const s=r.chunks[i];let o=0;for(;o+188<s.length;){const r=s.subarray(o,o+188);if(256==((31&r[1])<<8|r[2])&&32&r[3]&&r[4]>0&&64&r[5])return e.slice(t);o+=188}}}return e}};var E,A,k;u&&(D.parsers.mp4=function(e){return{container:"mp4",outputArguments:[...e?.vcodec||[],...e?.acodec||[],...w],async*parse(e){const t=_(e);yield*ae(t)},findSyncFrame:ne}}({vcodec:R,acodec:M}));const B=await this.mixinDevice.getVideoStream(t),L="x-scrypted/x-rfc4571"===B.mimeType;let H,N;this.storage.removeItem(this.lastDetectedAudioCodecKey);let K=!1;if(d&&L){K=!0,this.console.log("bypassing ffmpeg: using scrypted rfc4571 parser");const e=await Pe.convertMediaObjectToJSON(B,"x-scrypted/x-rfc4571"),{url:t,sdp:r,mediaStreamOptions:i}=e;H=await pe(this.console,function(e){const t=new URL(e);if(!t.protocol.startsWith("tcp"))throw new Error("rfc4751 url must be tcp");return x().connect(parseInt(t.port),t.hostname)}(t),r,i,D),this.sdp=H.sdp.then((e=>Buffer.concat(e).toString()))}else{const t=await Pe.convertMediaObjectToBuffer(B,e.ScryptedMimeTypes.FFmpegInput),i=JSON.parse(t.toString());N=i.mediaStreamOptions;const s=this.getParser(d,u,i.mediaStreamOptions);if(s===ke){K=!0,this.console.log("bypassing ffmpeg: using scrypted rtsp/rfc4571 parser");const e=new ee(i.url,this.console);let t=[];const s=()=>{for(const e of t)I(e)};try{e.requestTimeout=1e4,await e.options();let o=(await e.describe()).body.toString().trim();this.console.log("sdp",o);const n=W(o);let a=0;const c={},d=!1,u=async(r,i)=>{let s=a;if(d){const e=a,{port:r,server:o}=await O();t.push(o),s=r,o.on("message",(t=>{const r=Buffer.alloc(4);r.writeUInt8(36,0),r.writeUInt8(e,1),r.writeUInt16BE(t.length,2);const s={chunks:[r,t],type:i};H?.emit("rtsp",s),H?.resetActivityTimer?.()}))}await e.setup(s,r,d),c[a]=i,a+=2};if(!r){for(const e of n.msections.filter((e=>"audio"===e.type)))await u(e.control,e.codec);0===a&&this.console.warn("sdp did not contain audio track and audio was not reported as missing.")}const l=n.msections.find((e=>"video"===e.type));n.msections=n.msections.filter((e=>e===l||"audio"===e.type)),o=[...n.header.lines,...n.msections.map((e=>e.lines)).flat()].join("\r\n"),this.sdp=Promise.resolve(o),await u(l.control,l.codec),e.writePlay(),H=await pe(this.console,e.client,o,i.mediaStreamOptions,D,{channelMap:c,handleRTSP:async()=>{await e.readMessage()},onLoop:async()=>{e.needKeepAlive&&(e.needKeepAlive=!1,e.writeGetParameter())}});const p=H.kill.bind(H);let m=!1;if(H.kill=async()=>{try{s(),m||(m=!0,e.writeTeardown()),await async function(e){await new Promise((t=>setTimeout(t,e)))}(500)}finally{e.client.destroy(),p()}},!H.isActive)throw new Error("parser was killed before rtsp client started");e.client.on("close",(()=>H.kill()))}catch(t){throw s(),e.client.destroy(),t}}else{s===Ve?i.inputArguments=["-rtsp_transport","udp","-i",i.url]:s===Be&&(i.inputArguments=["-rtsp_transport","tcp","-i",i.url]);const e=this.storage.getItem(this.ffmpegInputArgumentsKey)||Ae;i.inputArguments.unshift(...e.split(" ")),H=await j(i,D)}}K&&u&&this.getVideoStream({id:this.streamId,refresh:!1}).then((async e=>{const t=this.storage.getItem(this.ffmpegInputArgumentsKey)||Ae;e.inputArguments.unshift(...t.split(" "));const r=await async function(e,t,r,i){const s=e.slice();s.push(...r,...t,...w,"pipe:3"),s.unshift("-hide_banner"),h(i,s);const o=c().spawn(await b.getFFmpegPath(),s,{stdio:["pipe","pipe","pipe","pipe"]});return m(i,o),{cp:o,generator:_(o.stdio[3])}}(e.inputArguments,M,R,this.console),i=()=>{p(r.cp),H.kill(),r.generator.throw(new Error("killed"))};if(!H.isActive)return void i();H.killed.finally(i);const{resetActivityTimer:s}=V("mp4",i,H,D.timeout);for await(const e of ae(r.generator))s(),H.emit("mp4",e)})).catch((()=>{})),!r&&i&&void 0!==H.inputAudioCodec&&H.inputAudioCodec!==i&&this.console.warn("Audio codec plugin reported vs detected mismatch",i,l);const q=t?.video?.codec;if(q&&void 0!==H.inputVideoCodec&&H.inputVideoCodec!==q&&this.console.warn("Video codec plugin reported vs detected mismatch",q,H.inputVideoCodec),H.inputAudioCodec?Ee.includes(H.inputAudioCodec?.toLowerCase())?this.console.log("Detected audio codec is mp4/mpegts compatible.",H.inputAudioCodec):this.console.log("Detected audio codec is not mp4/mpegts compatible.",H.inputAudioCodec):this.console.log("No audio stream detected."),this.storage.setItem(this.lastDetectedAudioCodecKey,H.inputAudioCodec||"null"),"h264"!==H.inputVideoCodec&&this.console.error("Video codec is not h264. If there are errors, try changing your camera's encoder output."),g)return this.console.warn("Audio probe complete, ending rebroadcast session and restarting with detected codecs."),H.kill(),this.startPrebufferSession();if(this.parserSession=H,Te.onMixinEvent(this.mixin.id,this.mixin.mixinProviderNativeId,e.ScryptedInterface.Settings,void 0),N?.refreshAt){let t,r=N;const i=async()=>{if(!H.isActive)return;const t=await this.mixinDevice.getVideoStream(r),i=await Pe.convertMediaObjectToBuffer(t,e.ScryptedMimeTypes.FFmpegInput),o=JSON.parse(i.toString());r=o.mediaStreamOptions,s(r)},s=e=>{const r=e.refreshAt-Date.now()-3e4;this.console.log("refreshing media stream in",r),t=setTimeout(i,r)};s(r),H.killed.finally((()=>clearTimeout(t)))}H.killed.finally((()=>{clearTimeout(this.inactivityTimeout),this.parserSessionPromise=void 0,this.parserSession===H&&(this.parserSession=void 0)}));for(const t of He){let r,i=0;const s=t=>{if(r){const i="number"!=typeof this.detectedIdrInterval;this.detectedIdrInterval=t-r,i&&Te.onMixinEvent(this.mixin.id,this.mixin.mixinProviderNativeId,e.ScryptedInterface.Settings,void 0)}r=t};this.detectedIdrInterval=void 0,H.on(t,(e=>{const r=this.prebuffers[t],o=Date.now();for(("mdat"===e.type||"h264"===e.type&&X(e,5))&&s(o),r.push({time:o,chunk:e});r.length&&r[0].time<o-1e4;)r.shift(),i++;i>1e3&&(this.prebuffers[t]=r.slice(),i=0)}))}return H}printActiveClients(){this.console.log(this.streamName,"active rebroadcast clients:",this.activeClients)}inactivityCheck(t,r){this.activeClients||(this.needBitrateReset&&this.mixin.mixinDeviceInterfaces.includes(e.ScryptedInterface.VideoCameraConfiguration)&&this.resetBitrate(),this.stopInactive&&(this.inactivityTimeout&&!r||(clearTimeout(this.inactivityTimeout),this.inactivityTimeout=setTimeout((()=>{this.inactivityTimeout=void 0,this.activeClients?this.console.log("inactivity timeout found active clients."):(this.console.log(this.streamName,"terminating rebroadcast due to inactivity"),t.kill())}),3e4))))}async handleRebroadcasterClient(e){const{isActiveClient:t,container:r,session:i,socketPromise:s,requestedPrebuffer:o}=e;o&&this.console.log("sending prebuffer",o),L(s,{connect:(s,n)=>{t&&(this.activeClients++,this.printActiveClients());const a=Date.now(),c=t=>{if(e.filter&&!(t=e.filter(t)))return;s(t)>1e8&&(this.console.log("more than 100MB has been buffered, did downstream die? killing connection.",this.streamName),d())},d=()=>{i.removeListener(r,c),i.removeListener("killed",d),n()};i.on(r,c),i.once("killed",d);const u=this.prebuffers[r];if("rtsp"!==r)for(const e of u)e.time<a-o||c(e.chunk);else{const e=this.parsers[r].findSyncFrame(u.filter((e=>e.time>=a-o)).map((e=>e.chunk)));for(const t of e)c(t)}return()=>{t&&(this.activeClients--,this.printActiveClients()),this.inactivityCheck(i,t),d()}}})}async getVideoStream(e){if(!1===e?.refresh&&!this.parserSessionPromise)throw new Error("Stream is currently unavailable and will not be started for this request. RequestMediaStreamOptions.refresh === false");this.ensurePrebufferSession();const t=await this.parserSessionPromise;let r=e?.prebuffer;null==r&&(r=1.5*Math.max(4e3,this.detectedIdrInterval||4e3));const{rtspMode:i}=this.getRebroadcastMode(),s=i?"rtsp":"mpegts";let o=this.parsers[e?.container]?e?.container:s;e?.prebuffer&&"mp4"!==o&&"mp4"===e?.container&&(r+=1.5*(this.detectedIdrInterval||4e3));const n=t.negotiateMediaStream(e);let a,c,d,u=await this.sdp;const l=new Map;if("rtsp"===o){const e=W(u);e.msections.length>2&&(e.msections=e.msections.filter((e=>e.codec===n.video?.codec||e.codec===n.audio?.codec)),u=e.toSdp(),d=e=>{const t=l.get(e.type);if(null==t)return;const r=e.chunks.slice(),i=Buffer.from(r[0]);return i.writeUInt8(t,1),r[0]=i,{startStream:e.startStream,chunks:r}});const t=await E();a=t.clientPromise.then((async e=>{u=K(u);const t=new te(e,u);t.console=this.console,await t.handlePlayback();for(const e of Object.values(t.setupTracks))l.set(e.codec,e.destination);return e})),c=t.url.replace("tcp://","rtsp://")}else{const e=await E();a=e.clientPromise,c=`tcp://127.0.0.1:${e.port}`}n.sdp=u;const p=!1!==e?.refresh;this.handleRebroadcasterClient({isActiveClient:p,container:o,requestedPrebuffer:r,socketPromise:a,session:t,filter:d}),n.prebuffer=r;const{reencodeAudio:m}=this.getAudioConfig();this.audioDisabled?n.audio=null:m&&(n.audio={codec:"aac",encoder:"aac",profile:"aac_low"}),t.inputVideoResolution?.width&&t.inputVideoResolution?.height&&Object.assign(n.video,t.inputVideoResolution);const h=Date.now();let f=0;const g=this.prebuffers[o];for(const e of g)if(!(e.time<h-r))for(const t of e.chunk.chunks)f+=t.length;return{url:c,container:o,inputArguments:["-analyzeduration","0","-probesize",Math.max(5e5,f).toString(),...this.parsers[o].inputArguments||[],"-f",this.parsers[o].container,"-i",c],mediaStreamOptions:n}}}class Ne extends oe{released=!1;sessions=new Map;streamSettings=we(this);constructor(e,t){super(t),this.plugin=e,this.delayStart()}delayStart(){this.console.log("prebuffer sessions starting in 5 seconds"),setTimeout((()=>this.ensurePrebufferSessions()),5e3)}async getVideoStream(e){if(e?.directMediaStream)return this.mixinDevice.getVideoStream(e);await this.ensurePrebufferSessions();let t,r,i=e?.id;const s=await this.mixinDevice.getVideoStreamOptions();let o;const n=2e6;if(!i){switch(e?.destination){case"medium-resolution":case"remote":o=this.streamSettings.getRemoteStream(s),r=this.plugin.storageSettings.values.remoteStreamingBitrate;break;case"low-resolution":o=this.streamSettings.getLowResolutionStream(s),r=512e3;break;case"local-recorder":o=this.streamSettings.getRecordingStream(s),r=n;break;case"remote-recorder":o=this.streamSettings.getRemoteRecordingStream(s),r=n;break;default:o=this.streamSettings.getDefaultStream(s),r=n}i=o.stream.id,this.console.log("Selected stream",o.stream.name),this.streamSettings.storageSettings.values.transcodeStreams?.includes(o.title)&&(t=this.plugin.storageSettings.values.h264EncoderArguments?.split(" "))}const a=this.sessions.get(i);if(!a)return this.mixinDevice.getVideoStream(e);const c=await a.getVideoStream(e);return c.h264EncoderArguments=t,c.destinationVideoBitrate=r,this.streamSettings.storageSettings.values.missingCodecParameters&&(c.h264FilterArguments=c.h264FilterArguments||[],c.h264FilterArguments.push("-bsf:v","dump_extra")),c.videoDecoderArguments=this.streamSettings.storageSettings.values.videoDecoderArguments?.split(" "),Pe.createFFmpegMediaObject(c,{sourceId:this.id})}async ensurePrebufferSessions(){const t=await this.mixinDevice.getVideoStreamOptions(),r=this.getPrebufferedStreams(t),i=r?r.map((e=>e.id)):[void 0],s=t?.map((e=>e.id))||[void 0];if("true"!==this.storage.getItem("warnedCloud")){const e=t?.find((e=>"cloud"===e.source));e&&(this.storage.setItem("warnedCloud","true"),xe.a(`${this.name} is a cloud camera. Prebuffering maintains a persistent stream and will not enabled by default. You must enable the Prebuffer stream manually.`))}const o=this.mixinDeviceInterfaces.includes(e.ScryptedInterface.Battery);let n=0;for(const e of s){let r=this.sessions.get(e);if(!r){const s=t?.find((t=>t.id===e));s?.prebuffer&&xe.a(`Prebuffer is already available on ${this.name}. If this is a grouped device, disable the Rebroadcast extension.`);const a=s?.name,c=i.includes(e);if(r=new Ue(this,s,o||!c),this.sessions.set(e,r),o){this.console.log("camera is battery powered, prebuffering and rebroadcasting will only work on demand.");continue}if(!c){this.console.log("stream",a,"will be rebroadcast on demand.");continue}(async()=>{for(;this.sessions.get(e)===r&&!this.released;){r.ensurePrebufferSession();let e=!1;try{const t=await r.parserSessionPromise;n++,e=!0,this.online=!!n,await t.killed,this.console.error("prebuffer session ended")}catch(e){this.console.error("prebuffer session ended with error",e)}finally{e&&n--,e=!1,this.online=!!n}this.console.log("restarting prebuffer session in 5 seconds"),await new Promise((e=>setTimeout(e,5e3)))}this.console.log("exiting prebuffer session (released or restarted with new configuration)")})()}}if(!this.sessions.has(void 0)){const e=this.streamSettings.storageSettings.values.defaultStream;let r=this.sessions.get(t?.find((t=>t.name===e))?.id);r||(r=this.sessions.get(t?.find((e=>e.id===i[0]))?.id)),r||(r=this.sessions.get(t?.find((e=>e.id===s?.[0]))?.id)),r?(this.sessions.set(void 0,r),this.console.log("Default Stream:",r.advertisedMediaStreamOptions.id,r.advertisedMediaStreamOptions.name)):this.console.warn("Unable to find Default Stream?")}Te.onMixinEvent(this.id,this.mixinProviderNativeId,e.ScryptedInterface.Settings,void 0)}async getMixinSettings(){const e=[];e.push(...await this.streamSettings.storageSettings.getSettings());for(const t of new Set([...this.sessions.values()]))if(t)try{e.push(...await t.getMixinSettings())}catch(e){this.console.error("error in prebuffer session getMixinSettings",e)}return e}async putMixinSetting(e,t){if(this.streamSettings.storageSettings.settings[e]?await this.streamSettings.storageSettings.putSetting(e,t):this.storage.setItem(e,t?.toString()),"Transcoding"===this.streamSettings.storageSettings.settings[e]?.group)return;const r=this.sessions;this.sessions=new Map;for(const e of r.values())e?.parserSessionPromise?.then((e=>e.kill()));this.ensurePrebufferSessions()}getPrebufferedStreams(e){return _e(this.streamSettings.storageSettings,e)}async getVideoStreamOptions(){const e=await this.mixinDevice.getVideoStreamOptions()||[];let t=this.getPrebufferedStreams(e);for(const r of e)(this.sessions.get(r.id)?.parserSession||t.includes(r))&&(r.prebuffer=1e4);return e}setVideoStreamOptions(e){const t=this.sessions.get(e.id);if(t&&e?.video?.bitrate){t.needBitrateReset=!0;const r=t.maxBitrate;r&&e?.video?.bitrate>r&&(this.console.log("clamping max bitrate request",e.video.bitrate,r),e.video.bitrate=r)}return this.mixinDevice.setVideoStreamOptions(e)}async release(){this.console.log("prebuffer session releasing if started"),this.released=!0;for(const e of this.sessions.values())e&&(e.clearPrebuffers(),e.parserSessionPromise?.then((t=>{this.console.log("prebuffer session released"),t.kill(),e.clearPrebuffers()})))}}const Ke=new class extends n{storageSettings=new ie(this,{rebroadcastPort:{title:"Rebroadcast Port",description:"The port of the RTSP server that will rebroadcast your streams.",type:"number"},remoteStreamingBitrate:{title:"Remote Streaming Bitrate",type:"number",defaultValue:1e6,description:"The bitrate to use when remote streaming. This setting will only be used when transcoding or adaptive bitrate is enabled on a camera."},h264EncoderArguments:{title:"H264 Encoder Arguments",description:"FFmpeg arguments used to encode h264 video. This is not camera specific and is used to setup the hardware accelerated encoder on your Scrypted server. This setting will only be used when transcoding is enabled on a camera.",choices:Object.keys(Se()),defaultValue:Se()["libx264 (Software)"].join(" "),combobox:!0,mapPut:(e,t)=>Se()[t]?.join(" ")||t||Se()["libx264 (Software)"]?.join(" ")}});currentMixins=new Map;constructor(t){super(t),this.fromMimeType="x-scrypted/x-rfc4571",this.toMimeType=e.ScryptedMimeTypes.FFmpegInput,process.nextTick((()=>{for(const e of Object.keys(Me.getSystemState())){const t=Me.getDeviceById(e);if(t.mixins?.includes(this.id))try{t.getVideoStreamOptions()}catch(e){this.console.error("error triggering prebuffer",t.name,e)}}}));const r=function(){var e=new Date;return e.setHours(24),e.setMinutes(0),e.setSeconds(0),e.setMilliseconds(0),e.getTime()-(new Date).getTime()}()+72e5;this.log.i(`Rebroadcaster scheduled for restart at 2AM: ${Math.round(r/1e3/60)} minutes`),setTimeout((()=>Te.requestRestart()),r),this.startRtspServer()}getSettings(){return this.storageSettings.getSettings()}putSetting(e,t){return this.storageSettings.putSetting(e,t)}startRtspServer(){I(this.rtspServer),this.rtspServer=new(x().Server)((async e=>{let t;const r=new te(e,void 0,void 0,(async(e,i,s,o)=>{r.checkRequest=void 0;const n=new URL(i);for(const e of this.currentMixins.keys()){const i=this.currentMixins.get(e);for(const e of i.sessions.values())if(n.pathname.endsWith(e.rtspServerPath))return r.console=e.console,t=e,t.ensurePrebufferSession(),await t.parserSessionPromise,r.sdp=await t.sdp,!0}return!1}));this.console.log("RTSP Rebroadcast connection started."),r.console=this.console;try{await r.handlePlayback();const i=await t.parserSessionPromise,s=1.5*Math.max(4e3,t.detectedIdrInterval||4e3);t.handleRebroadcasterClient({isActiveClient:!0,container:"rtsp",session:i,socketPromise:Promise.resolve(e),requestedPrebuffer:s}),await r.handleTeardown()}catch(t){e.destroy()}this.console.log("RTSP Rebroadcast connection finished.")})),this.storageSettings.values.rebroadcastPort||(this.storageSettings.values.rebroadcastPort=Math.round(1e4*Math.random()+3e4)),this.rtspServer.listen(this.storageSettings.values.rebroadcastPort)}async convert(e,t,r){const i=JSON.parse(e.toString()),{url:s,sdp:o}=i,n=W(o),a=new Map;for(const e of n.msections)for(const t of e.payloadTypes)a.set(t,e.control);const c=new URL(s);if(!c.protocol.startsWith("tcp"))throw new Error("rfc4751 url must be tcp");const{clientPromise:d,url:u}=await E(),l={url:u,inputArguments:["-rtsp_transport","tcp","-i",u.replace("tcp","rtsp")]};return d.then((async e=>{const t=new te(e,o);await t.handlePlayback();const r=x().connect(parseInt(c.port),c.hostname);for(e.on("close",(()=>{r.destroy()})),r.on("close",(()=>{e.destroy()}));;){const i=(await y(r,2)).readInt16BE(0),s=await y(r,i),o=127&s[1],n=a.get(o);if(!n)throw e.destroy(),r.destroy(),new Error("unknown payload type "+o);t.sendTrack(n,s,!1)}})),Buffer.from(JSON.stringify(l))}async canMixin(t,r){if(!r.includes(e.ScryptedInterface.VideoCamera))return null;const i=[e.ScryptedInterface.VideoCamera,e.ScryptedInterface.Settings,e.ScryptedInterface.Online];return r.includes(e.ScryptedInterface.VideoCameraConfiguration)&&i.push(e.ScryptedInterface.VideoCameraConfiguration),i}async getMixin(e,t,r){this.setHasEnabledMixin(r.id);const i=new Ne(this,{mixinDevice:e,mixinDeviceState:r,mixinProviderNativeId:this.nativeId,mixinDeviceInterfaces:t,group:"Stream Management",groupKey:"prebuffer"});return this.currentMixins.set(r.id,i),i}async releaseMixin(e,t){t.online=!0,await t.release(),this.currentMixins.delete(e)}}})();var s=exports="undefined"==typeof exports?{}:exports;for(var o in i)s[o]=i[o];i.__esModule&&Object.defineProperty(s,"__esModule",{value:!0})})();
|
|
2
2
|
//# sourceMappingURL=main.nodejs.js.map
|
package/dist/plugin.zip
CHANGED
|
Binary file
|
package/package.json
CHANGED
package/src/main.ts
CHANGED
|
@@ -677,26 +677,41 @@ class PrebufferSession {
|
|
|
677
677
|
|
|
678
678
|
this.sdp = Promise.resolve(sdp);
|
|
679
679
|
await doSetup(videoSection.control, videoSection.codec);
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
session = await startRFC4571Parser(this.console, rtspClient.
|
|
680
|
+
rtspClient.writePlay();
|
|
681
|
+
|
|
682
|
+
session = await startRFC4571Parser(this.console, rtspClient.client, sdp, ffmpegInput.mediaStreamOptions, rbo, {
|
|
683
|
+
channelMap: mapping,
|
|
684
|
+
handleRTSP: async () => {
|
|
685
|
+
await rtspClient.readMessage();
|
|
686
|
+
},
|
|
687
|
+
onLoop: async () => {
|
|
688
|
+
if (rtspClient.needKeepAlive) {
|
|
689
|
+
rtspClient.needKeepAlive = false;
|
|
690
|
+
rtspClient.writeGetParameter();
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
});
|
|
683
694
|
const sessionKill = session.kill.bind(session);
|
|
684
695
|
let issuedTeardown = false;
|
|
685
696
|
session.kill = async () => {
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
issuedTeardown
|
|
690
|
-
|
|
697
|
+
try {
|
|
698
|
+
cleanupServers();
|
|
699
|
+
// issue a teardown to upstream to close gracefully but don't rely on it responding.
|
|
700
|
+
if (!issuedTeardown) {
|
|
701
|
+
issuedTeardown = true;
|
|
702
|
+
rtspClient.writeTeardown();
|
|
703
|
+
}
|
|
704
|
+
await sleep(500);
|
|
705
|
+
}
|
|
706
|
+
finally {
|
|
707
|
+
rtspClient.client.destroy();
|
|
708
|
+
sessionKill();
|
|
691
709
|
}
|
|
692
|
-
await sleep(500);
|
|
693
|
-
rtspClient.client.destroy();
|
|
694
|
-
sessionKill();
|
|
695
710
|
}
|
|
696
711
|
if (!session.isActive)
|
|
697
712
|
throw new Error('parser was killed before rtsp client started');
|
|
698
713
|
|
|
699
|
-
rtspClient.
|
|
714
|
+
rtspClient.client.on('close', () => session.kill());
|
|
700
715
|
}
|
|
701
716
|
catch (e) {
|
|
702
717
|
cleanupServers();
|
|
@@ -829,32 +844,33 @@ class PrebufferSession {
|
|
|
829
844
|
let shifts = 0;
|
|
830
845
|
|
|
831
846
|
let prevIdr: number;
|
|
847
|
+
|
|
848
|
+
const updateIdr = (now: number) => {
|
|
849
|
+
if (prevIdr) {
|
|
850
|
+
const sendEvent = typeof this.detectedIdrInterval !== 'number';
|
|
851
|
+
this.detectedIdrInterval = now - prevIdr;
|
|
852
|
+
// only on the first idr update should we send a settings refresh.
|
|
853
|
+
if (sendEvent)
|
|
854
|
+
deviceManager.onMixinEvent(this.mixin.id, this.mixin.mixinProviderNativeId, ScryptedInterface.Settings, undefined);
|
|
855
|
+
}
|
|
856
|
+
prevIdr = now;
|
|
857
|
+
}
|
|
858
|
+
|
|
832
859
|
this.detectedIdrInterval = undefined;
|
|
833
860
|
session.on(container, (chunk: StreamChunk) => {
|
|
834
861
|
const prebufferContainer: PrebufferStreamChunk[] = this.prebuffers[container];
|
|
835
862
|
const now = Date.now();
|
|
836
863
|
|
|
837
|
-
const updateIdr = () => {
|
|
838
|
-
if (prevIdr) {
|
|
839
|
-
const sendEvent = typeof this.detectedIdrInterval !== 'number';
|
|
840
|
-
this.detectedIdrInterval = now - prevIdr;
|
|
841
|
-
// only on the first idr update should we send a settings refresh.
|
|
842
|
-
if (sendEvent)
|
|
843
|
-
deviceManager.onMixinEvent(this.mixin.id, this.mixin.mixinProviderNativeId, ScryptedInterface.Settings, undefined);
|
|
844
|
-
}
|
|
845
|
-
prevIdr = now;
|
|
846
|
-
}
|
|
847
|
-
|
|
848
864
|
// this is only valid for mp4, so its no op for everything else
|
|
849
865
|
// used to detect idr interval.
|
|
850
866
|
if (chunk.type === 'mdat') {
|
|
851
|
-
updateIdr();
|
|
867
|
+
updateIdr(now);
|
|
852
868
|
}
|
|
853
869
|
else if (chunk.type === 'h264') {
|
|
854
870
|
if (findH264NaluType(chunk, H264_NAL_TYPE_IDR)) {
|
|
855
871
|
// only update the rtsp computed idr once a minute.
|
|
856
872
|
// per packet bitscan is not great.
|
|
857
|
-
updateIdr();
|
|
873
|
+
updateIdr(now);
|
|
858
874
|
}
|
|
859
875
|
}
|
|
860
876
|
|
package/src/rfc4571.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cloneDeep } from "@scrypted/common/src/clone-deep";
|
|
2
2
|
import { ParserOptions, ParserSession, setupActivityTimer } from "@scrypted/common/src/ffmpeg-rebroadcast";
|
|
3
|
-
import { readLength } from "@scrypted/common/src/read-stream";
|
|
3
|
+
import { read16BELengthLoop, readLength } from "@scrypted/common/src/read-stream";
|
|
4
4
|
import { findH264NaluType, H264_NAL_TYPE_SPS, RTSP_FRAME_MAGIC } from "@scrypted/common/src/rtsp-server";
|
|
5
5
|
import { parseSdp } from "@scrypted/common/src/sdp-utils";
|
|
6
6
|
import { StreamChunk } from "@scrypted/common/src/stream-parser";
|
|
@@ -20,7 +20,11 @@ export function connectRFC4571Parser(url: string) {
|
|
|
20
20
|
|
|
21
21
|
export type RtspChannelCodecMapping = { [key: number]: string };
|
|
22
22
|
|
|
23
|
-
export async function startRFC4571Parser(console: Console, socket: Readable, sdp: string, mediaStreamOptions: ResponseMediaStreamOptions, options?: ParserOptions<"rtsp">,
|
|
23
|
+
export async function startRFC4571Parser(console: Console, socket: Readable, sdp: string, mediaStreamOptions: ResponseMediaStreamOptions, options?: ParserOptions<"rtsp">, rtspOptions?: {
|
|
24
|
+
channelMap: RtspChannelCodecMapping,
|
|
25
|
+
handleRTSP: () => Promise<void>,
|
|
26
|
+
onLoop?: () => Promise<void>,
|
|
27
|
+
}): Promise<ParserSession<"rtsp">> {
|
|
24
28
|
let isActive = true;
|
|
25
29
|
const events = new EventEmitter();
|
|
26
30
|
// need this to prevent kill from throwing due to uncaught Error during cleanup
|
|
@@ -79,26 +83,27 @@ export async function startRFC4571Parser(console: Console, socket: Readable, sdp
|
|
|
79
83
|
let startStream: Buffer;
|
|
80
84
|
|
|
81
85
|
(async () => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
const headerLength = rtspOptions?.channelMap ? 4 : 2;
|
|
87
|
+
const offset = rtspOptions?.channelMap ? 2 : 0;
|
|
88
|
+
const skipHeader = async (header: Buffer) => {
|
|
89
|
+
if (header.toString() !== 'RTSP')
|
|
90
|
+
return false;
|
|
91
|
+
socket.unshift(header);
|
|
92
|
+
await rtspOptions.handleRTSP();
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
for await (let { header, data } of read16BELengthLoop(socket, headerLength, offset, skipHeader)) {
|
|
85
96
|
let type: string;
|
|
86
97
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
98
|
+
await rtspOptions?.onLoop?.();
|
|
99
|
+
|
|
100
|
+
if (rtspOptions?.channelMap) {
|
|
90
101
|
const channel = header.readUInt8(1);
|
|
91
|
-
type =
|
|
102
|
+
type = rtspOptions?.channelMap[channel];
|
|
92
103
|
}
|
|
93
104
|
else {
|
|
94
|
-
|
|
95
|
-
length = header.readUInt16BE(0);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const data = await readLength(socket, length);
|
|
99
|
-
const pt = data[1] & 0x7f;
|
|
105
|
+
const pt = data[1] & 0x7f;
|
|
100
106
|
|
|
101
|
-
if (!rtspMapping) {
|
|
102
107
|
const prefix = Buffer.alloc(2);
|
|
103
108
|
prefix[0] = RTSP_FRAME_MAGIC;
|
|
104
109
|
if (pt === audioPt) {
|
|
@@ -144,6 +149,9 @@ export async function startRFC4571Parser(console: Console, socket: Readable, sdp
|
|
|
144
149
|
resetActivityTimer();
|
|
145
150
|
}
|
|
146
151
|
})()
|
|
152
|
+
.catch(e => {
|
|
153
|
+
throw e;
|
|
154
|
+
})
|
|
147
155
|
.finally(kill);
|
|
148
156
|
|
|
149
157
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"nodes":[{"id":1,"callFrame":{"functionName":"(root)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[2,10,23,32,46,47,49,57,61,62,101,107,109],"locationId":0},{"id":2,"callFrame":{"functionName":"onStreamRead","scriptId":"84","url":"node:internal/stream_base_commons","lineNumber":170,"columnNumber":21},"hitCount":1,"children":[3,51,108],"positionTicks":[{"line":99,"ticks":1,"startLocationId":2,"endLocationId":3}],"locationId":1},{"id":3,"callFrame":{"functionName":"Readable.push","scriptId":"49","url":"node:internal/streams/readable","lineNumber":226,"columnNumber":34},"hitCount":1,"children":[4],"positionTicks":[{"line":228,"ticks":1,"startLocationId":5,"endLocationId":6}],"locationId":4},{"id":4,"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":235,"columnNumber":25},"hitCount":5,"children":[5],"positionTicks":[{"line":278,"ticks":1,"startLocationId":8,"endLocationId":9},{"line":237,"ticks":4,"startLocationId":10,"endLocationId":11}],"locationId":7},{"id":5,"callFrame":{"functionName":"addChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":303,"columnNumber":17},"hitCount":0,"children":[6,17],"locationId":12},{"id":6,"callFrame":{"functionName":"emitReadable","scriptId":"49","url":"node:internal/streams/readable","lineNumber":562,"columnNumber":21},"hitCount":1,"children":[7],"positionTicks":[{"line":570,"ticks":1,"startLocationId":14,"endLocationId":15}],"locationId":13},{"id":7,"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":103,"columnNumber":17},"hitCount":11,"children":[8],"positionTicks":[{"line":129,"ticks":2,"startLocationId":17,"endLocationId":18},{"line":127,"ticks":1,"startLocationId":19,"endLocationId":20},{"line":126,"ticks":1,"startLocationId":21,"endLocationId":19},{"line":113,"ticks":1,"startLocationId":22,"endLocationId":23},{"line":128,"ticks":6,"startLocationId":20,"endLocationId":17}],"locationId":16},{"id":8,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[9],"locationId":24},{"id":9,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[27],"locationId":25},{"id":27,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":60,"children":[28],"positionTicks":[{"line":25,"ticks":60,"startLocationId":27,"endLocationId":28}],"locationId":26},{"id":28,"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":48,"positionTicks":[{"line":25,"ticks":48,"startLocationId":30,"endLocationId":31}],"locationId":29},{"id":17,"callFrame":{"functionName":"maybeReadMore","scriptId":"49","url":"node:internal/streams/readable","lineNumber":601,"columnNumber":22},"hitCount":1,"children":[18],"positionTicks":[{"line":605,"ticks":1,"startLocationId":33,"endLocationId":34}],"locationId":32},{"id":18,"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":103,"columnNumber":17},"hitCount":0,"children":[19],"locationId":16},{"id":19,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[20],"locationId":24},{"id":20,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[21],"locationId":25},{"id":21,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":23,"children":[22],"positionTicks":[{"line":25,"ticks":23,"startLocationId":27,"endLocationId":28}],"locationId":26},{"id":22,"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":28,"positionTicks":[{"line":25,"ticks":28,"startLocationId":30,"endLocationId":31}],"locationId":29},{"id":51,"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":957,"columnNumber":13},"hitCount":1,"positionTicks":[{"line":959,"ticks":1,"startLocationId":36,"endLocationId":37}],"locationId":35},{"id":108,"callFrame":{"functionName":"get name","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"positionTicks":[{"line":178,"ticks":1,"startLocationId":39,"endLocationId":40}],"locationId":38},{"id":10,"callFrame":{"functionName":"runMicrotasks","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":31,"children":[11,29,31,50,105,106,115],"locationId":41},{"id":11,"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":3344,"columnNumber":3},"hitCount":15,"children":[12,24,58],"positionTicks":[{"line":475,"ticks":1,"startLocationId":43,"endLocationId":44},{"line":3383,"ticks":1,"startLocationId":45,"endLocationId":46},{"line":3359,"ticks":13,"startLocationId":47,"endLocationId":48}],"locationId":42},{"id":12,"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1768,"columnNumber":34},"hitCount":9,"children":[13,52],"positionTicks":[{"line":1775,"ticks":1,"startLocationId":50,"endLocationId":51},{"line":1778,"ticks":8,"startLocationId":52,"endLocationId":53}],"locationId":49},{"id":13,"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1792,"columnNumber":28},"hitCount":10,"children":[14,65,111],"positionTicks":[{"line":1805,"ticks":2,"startLocationId":55,"endLocationId":56},{"line":1802,"ticks":1,"startLocationId":57,"endLocationId":58},{"line":1793,"ticks":7,"startLocationId":59,"endLocationId":60}],"locationId":54},{"id":14,"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":638,"columnNumber":32},"hitCount":0,"children":[15],"locationId":61},{"id":15,"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":393,"columnNumber":34},"hitCount":0,"children":[16],"locationId":62},{"id":16,"callFrame":{"functionName":"emit","scriptId":"381","url":"node:domain","lineNumber":463,"columnNumber":43},"hitCount":1,"positionTicks":[{"line":475,"ticks":1,"startLocationId":64,"endLocationId":65}],"locationId":63},{"id":65,"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"hitCount":0,"children":[66],"locationId":66},{"id":66,"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":334,"columnNumber":24},"hitCount":0,"children":[67],"locationId":67},{"id":67,"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":2,"positionTicks":[{"line":340,"ticks":2,"startLocationId":69,"endLocationId":70}],"locationId":68},{"id":111,"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1804,"columnNumber":21},"hitCount":0,"children":[112],"locationId":71},{"id":112,"callFrame":{"functionName":"Readable.on","scriptId":"49","url":"node:internal/streams/readable","lineNumber":874,"columnNumber":32},"hitCount":0,"children":[113],"locationId":72},{"id":113,"callFrame":{"functionName":"addListener","scriptId":"13","url":"node:events","lineNumber":485,"columnNumber":57},"hitCount":0,"children":[114],"locationId":73},{"id":114,"callFrame":{"functionName":"_addListener","scriptId":"13","url":"node:events","lineNumber":417,"columnNumber":21},"hitCount":1,"positionTicks":[{"line":446,"ticks":1,"startLocationId":75,"endLocationId":76}],"locationId":74},{"id":52,"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"hitCount":0,"children":[53],"locationId":66},{"id":53,"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":334,"columnNumber":24},"hitCount":0,"children":[54],"locationId":67},{"id":54,"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":6,"positionTicks":[{"line":340,"ticks":6,"startLocationId":69,"endLocationId":70}],"locationId":68},{"id":24,"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"hitCount":0,"children":[25,116],"locationId":66},{"id":25,"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":334,"columnNumber":24},"hitCount":0,"children":[26],"locationId":67},{"id":26,"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":4,"positionTicks":[{"line":340,"ticks":4,"startLocationId":69,"endLocationId":70}],"locationId":68},{"id":116,"callFrame":{"functionName":"promiseInitHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":320,"columnNumber":24},"hitCount":0,"children":[117],"locationId":77},{"id":117,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[118],"locationId":24},{"id":118,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[119,122],"locationId":25},{"id":119,"callFrame":{"functionName":"lookupPublicResource","scriptId":"24","url":"node:internal/async_hooks","lineNumber":178,"columnNumber":29},"hitCount":1,"positionTicks":[{"line":182,"ticks":1,"startLocationId":79,"endLocationId":80}],"locationId":78},{"id":122,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":1,"positionTicks":[{"line":23,"ticks":1,"startLocationId":81,"endLocationId":82}],"locationId":26},{"id":58,"callFrame":{"functionName":"emit","scriptId":"381","url":"node:domain","lineNumber":463,"columnNumber":43},"hitCount":0,"children":[59],"locationId":63},{"id":59,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":339,"columnNumber":43},"hitCount":2,"children":[60],"positionTicks":[{"line":390,"ticks":2,"startLocationId":84,"endLocationId":85}],"locationId":83},{"id":60,"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6064,"columnNumber":28},"hitCount":5,"positionTicks":[{"line":6079,"ticks":2,"startLocationId":87,"endLocationId":88},{"line":6076,"ticks":1,"startLocationId":89,"endLocationId":90},{"line":6067,"ticks":2,"startLocationId":91,"endLocationId":92}],"locationId":86},{"id":29,"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1768,"columnNumber":34},"hitCount":37,"children":[30,42,43],"positionTicks":[{"line":1788,"ticks":9,"startLocationId":93,"endLocationId":94},{"line":640,"ticks":1,"startLocationId":95,"endLocationId":96},{"line":1785,"ticks":6,"startLocationId":97,"endLocationId":98},{"line":1780,"ticks":21,"startLocationId":99,"endLocationId":100}],"locationId":49},{"id":30,"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":781,"columnNumber":45},"hitCount":4,"children":[100],"positionTicks":[{"line":784,"ticks":4,"startLocationId":102,"endLocationId":103}],"locationId":101},{"id":100,"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":3,"positionTicks":[{"line":784,"ticks":3,"startLocationId":105,"endLocationId":106}],"locationId":104},{"id":42,"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1792,"columnNumber":28},"hitCount":5,"children":[55,73,80],"positionTicks":[{"line":1805,"ticks":1,"startLocationId":55,"endLocationId":56},{"line":1793,"ticks":4,"startLocationId":59,"endLocationId":60}],"locationId":54},{"id":55,"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":638,"columnNumber":32},"hitCount":0,"children":[56],"locationId":61},{"id":56,"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":393,"columnNumber":34},"hitCount":2,"children":[77],"positionTicks":[{"line":81,"ticks":1,"startLocationId":107,"endLocationId":108},{"line":378,"ticks":1,"startLocationId":109,"endLocationId":110}],"locationId":62},{"id":77,"callFrame":{"functionName":"fromList","scriptId":"49","url":"node:internal/streams/readable","lineNumber":1300,"columnNumber":17},"hitCount":0,"children":[78],"locationId":111},{"id":78,"callFrame":{"functionName":"consume","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":79,"columnNumber":9},"hitCount":0,"children":[79],"locationId":112},{"id":79,"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1114,"columnNumber":39},"hitCount":1,"positionTicks":[{"line":1119,"ticks":1,"startLocationId":114,"endLocationId":115}],"locationId":113},{"id":73,"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1804,"columnNumber":21},"hitCount":0,"children":[74],"locationId":71},{"id":74,"callFrame":{"functionName":"Readable.on","scriptId":"49","url":"node:internal/streams/readable","lineNumber":874,"columnNumber":32},"hitCount":0,"children":[75,89],"locationId":72},{"id":75,"callFrame":{"functionName":"addListener","scriptId":"13","url":"node:events","lineNumber":485,"columnNumber":57},"hitCount":0,"children":[76],"locationId":73},{"id":76,"callFrame":{"functionName":"_addListener","scriptId":"13","url":"node:events","lineNumber":417,"columnNumber":21},"hitCount":1,"positionTicks":[{"line":445,"ticks":1,"startLocationId":116,"endLocationId":75}],"locationId":74},{"id":89,"callFrame":{"functionName":"emitReadable","scriptId":"49","url":"node:internal/streams/readable","lineNumber":562,"columnNumber":21},"hitCount":0,"children":[90],"locationId":13},{"id":90,"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":103,"columnNumber":17},"hitCount":0,"children":[91,121],"locationId":16},{"id":91,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[92],"locationId":24},{"id":92,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[93],"locationId":25},{"id":93,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":1,"children":[98],"positionTicks":[{"line":25,"ticks":1,"startLocationId":27,"endLocationId":28}],"locationId":26},{"id":98,"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":4,"positionTicks":[{"line":25,"ticks":4,"startLocationId":30,"endLocationId":31}],"locationId":29},{"id":121,"callFrame":{"functionName":"initHooksExist","scriptId":"24","url":"node:internal/async_hooks","lineNumber":467,"columnNumber":23},"hitCount":1,"positionTicks":[{"line":469,"ticks":1,"startLocationId":118,"endLocationId":119}],"locationId":117},{"id":80,"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"hitCount":1,"children":[81,103],"positionTicks":[{"line":434,"ticks":1,"startLocationId":120,"endLocationId":121}],"locationId":66},{"id":81,"callFrame":{"functionName":"promiseInitHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":320,"columnNumber":24},"hitCount":0,"children":[82],"locationId":77},{"id":82,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[83],"locationId":24},{"id":83,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[84],"locationId":25},{"id":84,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":2,"positionTicks":[{"line":23,"ticks":2,"startLocationId":81,"endLocationId":82}],"locationId":26},{"id":103,"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":334,"columnNumber":24},"hitCount":0,"children":[104],"locationId":67},{"id":104,"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"positionTicks":[{"line":340,"ticks":1,"startLocationId":69,"endLocationId":70}],"locationId":68},{"id":43,"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"hitCount":1,"children":[44,94],"positionTicks":[{"line":338,"ticks":1,"startLocationId":122,"endLocationId":123}],"locationId":66},{"id":44,"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":334,"columnNumber":24},"hitCount":2,"children":[45],"positionTicks":[{"line":340,"ticks":2,"startLocationId":124,"endLocationId":125}],"locationId":67},{"id":45,"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":14,"positionTicks":[{"line":340,"ticks":14,"startLocationId":69,"endLocationId":70}],"locationId":68},{"id":94,"callFrame":{"functionName":"promiseInitHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":320,"columnNumber":24},"hitCount":0,"children":[95],"locationId":77},{"id":95,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[96],"locationId":24},{"id":96,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[97,99],"locationId":25},{"id":97,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":2,"positionTicks":[{"line":23,"ticks":2,"startLocationId":81,"endLocationId":82}],"locationId":26},{"id":99,"callFrame":{"functionName":"lookupPublicResource","scriptId":"24","url":"node:internal/async_hooks","lineNumber":178,"columnNumber":29},"hitCount":4,"positionTicks":[{"line":182,"ticks":4,"startLocationId":79,"endLocationId":80}],"locationId":78},{"id":31,"callFrame":{"functionName":"promiseAfterHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":349,"columnNumber":25},"hitCount":7,"positionTicks":[{"line":354,"ticks":7,"startLocationId":127,"endLocationId":128}],"locationId":126},{"id":50,"callFrame":{"functionName":"promiseBeforeHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":342,"columnNumber":26},"hitCount":1,"children":[64],"positionTicks":[{"line":308,"ticks":1,"startLocationId":130,"endLocationId":131}],"locationId":129},{"id":64,"callFrame":{"functionName":"emitBeforeScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":498,"columnNumber":25},"hitCount":8,"positionTicks":[{"line":503,"ticks":8,"startLocationId":133,"endLocationId":134}],"locationId":132},{"id":105,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":339,"columnNumber":43},"hitCount":1,"positionTicks":[{"line":415,"ticks":1,"startLocationId":135,"endLocationId":136}],"locationId":83},{"id":106,"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":393,"columnNumber":34},"hitCount":1,"positionTicks":[{"line":394,"ticks":1,"startLocationId":137,"endLocationId":138}],"locationId":62},{"id":115,"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"hitCount":1,"positionTicks":[{"line":308,"ticks":1,"startLocationId":139,"endLocationId":140}],"locationId":66},{"id":23,"callFrame":{"functionName":"(idle)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":3872,"locationId":141},{"id":32,"callFrame":{"functionName":"emitReadable_","scriptId":"49","url":"node:internal/streams/readable","lineNumber":573,"columnNumber":22},"hitCount":0,"children":[33],"locationId":142},{"id":33,"callFrame":{"functionName":"emit","scriptId":"381","url":"node:domain","lineNumber":463,"columnNumber":43},"hitCount":1,"children":[34],"positionTicks":[{"line":475,"ticks":1,"startLocationId":64,"endLocationId":65}],"locationId":63},{"id":34,"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":339,"columnNumber":43},"hitCount":3,"children":[35],"positionTicks":[{"line":384,"ticks":1,"startLocationId":143,"endLocationId":144},{"line":390,"ticks":2,"startLocationId":84,"endLocationId":85}],"locationId":83},{"id":35,"callFrame":{"functionName":"r","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1805,"columnNumber":14},"hitCount":2,"children":[36,68],"positionTicks":[{"line":1811,"ticks":1,"startLocationId":146,"endLocationId":147},{"line":1807,"ticks":1,"startLocationId":148,"endLocationId":149}],"locationId":145},{"id":36,"callFrame":{"functionName":"Readable.removeListener","scriptId":"49","url":"node:internal/streams/readable","lineNumber":904,"columnNumber":44},"hitCount":0,"children":[37],"locationId":150},{"id":37,"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":103,"columnNumber":17},"hitCount":0,"children":[38],"locationId":16},{"id":38,"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"hitCount":0,"children":[39],"locationId":24},{"id":39,"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"hitCount":0,"children":[40],"locationId":25},{"id":40,"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"hitCount":17,"children":[41],"positionTicks":[{"line":25,"ticks":17,"startLocationId":27,"endLocationId":28}],"locationId":26},{"id":41,"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":17,"positionTicks":[{"line":25,"ticks":17,"startLocationId":30,"endLocationId":31}],"locationId":29},{"id":68,"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":638,"columnNumber":32},"hitCount":0,"children":[69,120],"locationId":61},{"id":69,"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":393,"columnNumber":34},"hitCount":0,"children":[70],"locationId":62},{"id":70,"callFrame":{"functionName":"fromList","scriptId":"49","url":"node:internal/streams/readable","lineNumber":1300,"columnNumber":17},"hitCount":0,"children":[71,85],"locationId":111},{"id":71,"callFrame":{"functionName":"concat","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":64,"columnNumber":8},"hitCount":0,"children":[72],"locationId":151},{"id":72,"callFrame":{"functionName":"allocUnsafe","scriptId":"18","url":"node:buffer","lineNumber":371,"columnNumber":41},"hitCount":1,"positionTicks":[{"line":374,"ticks":1,"startLocationId":153,"endLocationId":154}],"locationId":152},{"id":85,"callFrame":{"functionName":"consume","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":79,"columnNumber":9},"hitCount":0,"children":[86],"locationId":112},{"id":86,"callFrame":{"functionName":"_getBuffer","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":137,"columnNumber":12},"hitCount":0,"children":[87],"locationId":155},{"id":87,"callFrame":{"functionName":"allocUnsafe","scriptId":"18","url":"node:buffer","lineNumber":371,"columnNumber":41},"hitCount":0,"children":[88],"locationId":152},{"id":88,"callFrame":{"functionName":"allocate","scriptId":"18","url":"node:buffer","lineNumber":396,"columnNumber":17},"hitCount":1,"positionTicks":[{"line":403,"ticks":1,"startLocationId":157,"endLocationId":158}],"locationId":156},{"id":120,"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":595,"columnNumber":33},"hitCount":1,"positionTicks":[{"line":596,"ticks":1,"startLocationId":160,"endLocationId":161}],"locationId":159},{"id":46,"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":80,"locationId":162},{"id":47,"callFrame":{"functionName":"after","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":33,"columnNumber":9},"hitCount":0,"children":[48],"locationId":163},{"id":48,"callFrame":{"functionName":"asyncTaskFinished","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"positionTicks":[{"line":37,"ticks":1,"startLocationId":165,"endLocationId":166}],"locationId":164},{"id":49,"callFrame":{"functionName":"emitAfterScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":506,"columnNumber":24},"hitCount":3,"positionTicks":[{"line":552,"ticks":1,"startLocationId":168,"endLocationId":169},{"line":509,"ticks":2,"startLocationId":170,"endLocationId":171}],"locationId":167},{"id":57,"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":72,"locationId":172},{"id":61,"callFrame":{"functionName":"shift","scriptId":"28","url":"node:internal/fixed_queue","lineNumber":107,"columnNumber":7},"hitCount":1,"positionTicks":[{"line":108,"ticks":1,"startLocationId":174,"endLocationId":175}],"locationId":173},{"id":62,"callFrame":{"functionName":"before","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":27,"columnNumber":10},"hitCount":0,"children":[63],"locationId":176},{"id":63,"callFrame":{"functionName":"asyncTaskStarted","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":5,"positionTicks":[{"line":31,"ticks":5,"startLocationId":178,"endLocationId":179}],"locationId":177},{"id":101,"callFrame":{"functionName":"destroy","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":39,"columnNumber":11},"hitCount":3,"children":[102],"positionTicks":[{"line":42,"ticks":2,"startLocationId":181,"endLocationId":182},{"line":41,"ticks":1,"startLocationId":183,"endLocationId":181}],"locationId":180},{"id":102,"callFrame":{"functionName":"asyncTaskCanceled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":2,"positionTicks":[{"line":43,"ticks":2,"startLocationId":185,"endLocationId":186}],"locationId":184},{"id":107,"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":235,"columnNumber":25},"hitCount":1,"positionTicks":[{"line":236,"ticks":1,"startLocationId":187,"endLocationId":10}],"locationId":7},{"id":109,"callFrame":{"functionName":"emitBeforeScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":498,"columnNumber":25},"hitCount":1,"children":[110],"positionTicks":[{"line":503,"ticks":1,"startLocationId":133,"endLocationId":134}],"locationId":132},{"id":110,"callFrame":{"functionName":"before","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":27,"columnNumber":10},"hitCount":1,"positionTicks":[{"line":31,"ticks":1,"startLocationId":188,"endLocationId":189}],"locationId":176}],"startTime":2345344741991,"endTime":2345350441895,"samples":[9,16,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,26,28,23,23,23,23,23,23,23,23,23,23,10,23,30,11,29,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,23,31,23,10,23,23,23,23,23,23,23,23,23,23,41,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,42,29,29,45,46,22,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,48,23,23,23,23,23,23,23,49,23,23,23,50,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,51,23,23,23,23,23,23,21,23,23,23,23,23,23,23,23,23,23,23,23,21,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,54,42,13,26,23,56,28,29,23,23,23,23,23,23,23,23,23,23,46,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,4,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,11,46,57,57,46,46,46,46,46,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,60,23,23,23,23,23,23,23,61,23,23,23,23,23,23,23,23,23,23,46,57,57,57,57,57,57,57,57,57,57,57,57,57,57,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,63,23,23,23,23,23,23,23,13,46,23,23,23,23,23,23,23,23,23,11,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,13,23,23,34,23,23,12,23,23,23,28,23,23,23,23,23,23,23,23,23,23,64,67,29,29,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,29,23,23,23,27,23,23,23,23,23,23,23,23,23,23,21,23,23,23,23,23,23,23,23,23,23,41,23,23,23,23,23,29,27,23,23,23,23,42,31,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,27,44,31,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,46,7,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,11,23,23,23,41,23,72,23,23,23,23,23,23,10,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,40,23,23,23,45,76,12,79,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,13,22,23,23,23,23,46,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,64,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,11,23,23,23,23,23,23,28,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,28,28,23,23,23,23,23,23,23,23,23,23,46,23,23,27,23,23,23,23,23,23,23,23,21,23,23,23,23,23,23,23,23,23,23,23,23,3,23,64,23,23,23,23,23,23,23,23,23,23,23,21,23,23,23,23,23,23,23,23,23,21,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,21,23,41,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,41,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,21,29,23,12,23,23,45,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,7,23,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,35,23,23,23,23,84,23,23,45,23,23,10,23,23,23,6,23,23,27,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,60,45,13,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,46,27,29,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,27,23,23,23,23,23,23,29,23,23,23,23,23,23,23,23,23,23,23,23,63,23,29,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,27,28,23,23,23,23,23,23,46,23,23,23,23,23,23,46,23,23,11,46,23,23,23,22,21,23,23,23,23,23,23,23,23,23,23,23,23,28,57,57,46,57,57,57,46,46,46,46,23,21,23,23,23,23,28,23,21,10,23,21,40,23,23,23,23,23,23,23,23,27,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,4,28,23,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,21,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,63,23,23,22,23,41,23,23,46,23,23,23,23,23,80,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,41,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,27,23,46,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,10,23,21,23,60,23,23,27,23,23,23,23,23,23,23,23,23,23,63,23,12,13,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,34,57,57,57,57,57,57,57,57,57,57,57,64,45,46,45,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,27,29,29,23,23,23,23,23,23,23,23,23,23,23,23,7,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,27,23,23,23,23,23,23,23,23,41,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,10,23,11,41,64,23,23,23,23,23,23,27,23,46,23,23,23,23,23,23,23,23,23,23,23,23,11,11,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,28,23,23,23,23,28,23,23,23,17,23,28,22,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,29,31,10,23,23,23,23,23,23,23,23,23,23,88,23,23,23,93,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,67,23,23,23,23,60,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,4,23,23,23,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,7,23,23,23,23,23,45,23,13,11,23,23,23,23,40,97,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,64,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,46,13,23,54,98,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,7,23,23,23,23,10,23,23,23,23,23,23,23,28,29,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,40,23,23,23,99,28,23,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,11,23,23,23,23,23,23,23,23,31,99,12,46,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,46,23,23,22,23,23,23,23,27,22,23,29,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,45,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,30,27,23,23,28,23,23,23,23,23,23,23,23,23,28,23,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,64,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,21,23,11,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,27,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,40,98,23,23,29,23,23,23,23,23,23,100,23,23,23,23,23,23,23,23,23,23,23,23,23,29,23,22,28,23,23,23,23,23,23,23,23,27,23,23,23,45,23,23,23,23,49,23,23,23,23,23,23,23,57,57,57,57,57,46,101,46,102,46,35,46,40,23,23,23,104,105,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,57,57,57,57,57,57,57,57,57,57,57,57,57,57,46,57,23,23,23,23,23,23,23,23,23,41,23,23,23,23,23,23,23,28,23,23,23,40,23,23,23,23,23,23,23,23,23,23,23,23,23,21,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,46,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,106,27,45,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,29,23,23,102,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,107,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,41,23,23,23,23,23,23,23,23,23,23,23,11,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,26,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,21,23,23,23,22,23,23,23,23,23,23,23,23,23,23,23,46,23,29,23,23,23,23,23,23,23,23,23,23,23,23,10,22,10,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,23,23,60,23,23,100,84,46,31,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,49,23,23,23,21,23,27,23,23,23,23,46,23,23,23,23,23,23,23,23,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,108,23,23,23,23,23,23,23,99,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,10,27,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,29,43,22,28,11,23,23,23,23,23,23,23,23,23,27,110,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,10,23,23,23,29,23,7,23,23,23,23,23,23,23,23,23,23,23,27,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,23,23,23,23,41,23,23,23,23,23,23,23,23,23,23,46,12,59,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,27,56,31,23,23,23,23,97,12,12,23,23,23,23,23,23,23,23,23,23,27,7,21,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,13,23,23,23,23,23,46,23,23,23,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,27,23,23,23,23,23,23,23,28,23,23,23,23,7,23,23,23,23,23,23,23,23,23,23,23,23,10,23,46,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,29,40,23,21,23,23,42,23,23,23,114,23,23,23,23,23,23,23,46,23,23,23,27,57,57,57,57,57,46,46,46,101,101,115,28,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,41,23,23,23,23,10,23,27,23,2,23,23,23,23,23,23,23,23,23,23,23,23,23,23,63,21,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,45,23,23,23,23,23,23,23,23,23,23,23,23,23,4,23,23,11,23,10,23,23,23,23,10,23,23,23,23,23,23,23,23,23,10,109,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,28,29,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,119,23,23,23,57,57,57,46,57,23,57,57,57,57,57,57,57,57,57,57,57,120,23,23,23,23,23,23,23,7,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,29,23,23,23,23,23,23,23,23,23,23,23,23,21,46,28,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,46,23,46,23,23,23,23,23,23,7,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,41,23,23,10,23,23,23,23,23,23,23,23,40,23,23,23,23,23,23,23,23,23,7,23,23,23,23,23,23,23,23,23,23,23,23,41,45,30,26,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,4,23,23,23,23,23,23,23,23,45,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,12,23,23,23,23,23,23,54,23,23,23,99,23,40,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,30,23,23,23,23,23,23,23,23,23,23,23,41,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,27,28,100,29,29,54,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,46,23,27,23,23,29,23,23,23,23,23,23,23,23,23,23,23,34,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,121,23,29,54,23,23,23,23,23,23,64,23,23,23,23,23,23,23,23,23,23,23,46,23,23,23,23,21,27,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,28,23,23,23,23,23,23,23,23,23,41,44,98,98,13,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,27,33,10,23,23,23,23,23,23,23,23,23,54,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,29,27,59,23,23,23,23,23,23,23,23,23,23,23,23,23,122,23,23,23,23,23,23,27,23,46,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,10,23,23,23,23,23,23,23,23,23,23,23,23,42,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,22,23,23,23,23],"timeDeltas":[23445,1207,1129,1254,1350,1310,1262,1219,1134,1012,1026,1043,1058,1507,1417,1535,1521,1540,1228,1331,1267,1491,1055,1256,1064,1042,1252,1253,1115,1162,1524,1107,1152,1100,1050,1093,1150,1065,1536,1489,1041,1248,1103,1013,1008,1503,1064,1281,1287,1266,1257,1511,997,1243,1268,1454,1342,1491,1411,1400,1145,1021,1036,1192,1417,1131,1274,1501,1135,1006,1391,1182,1128,1296,1262,1267,1267,1001,1007,1291,1315,1095,1453,1010,1309,1532,1513,1519,1598,967,1020,1171,1097,1319,1523,1520,1365,1030,1537,1031,1517,1534,1264,1522,1043,1108,1114,1126,1203,1503,1550,1409,1258,1268,1266,1006,1063,1169,1543,1273,1129,1150,1261,1274,1268,1279,1311,1241,1275,1254,1515,1023,1243,1110,1100,1423,1604,1567,1579,1582,1037,1303,1033,1505,1011,1009,1118,1040,1149,1263,1133,1291,1310,1541,1485,1543,1518,1581,1578,1579,1496,1249,1203,1259,1200,1284,1328,1256,988,1032,1180,1259,1407,1170,1280,1144,1493,1070,1424,1174,993,1082,1263,1077,1402,1306,1116,1074,1254,1259,1522,1024,1257,1148,1107,1018,1265,1547,1022,1123,1285,1378,1159,1405,1114,1083,1401,1164,1267,1268,1289,1615,1593,1446,1546,1175,1208,1280,1026,1094,1108,1237,1182,996,1009,1082,1234,1016,1134,1399,1378,1361,1086,996,1007,1338,1012,1067,1206,1087,1496,1442,1566,1510,1343,1512,1452,1112,1008,1041,1091,1156,1517,1027,1258,1070,1269,1517,1027,1249,1531,1028,1306,1258,1077,1185,1074,1049,1377,1211,1112,1291,1311,1053,1056,1037,1505,1548,1353,1022,1362,1536,1194,1096,1370,1188,1268,1526,1037,1076,1190,1469,1106,1201,1126,1260,1343,1448,1021,1262,1114,1168,1050,1504,1555,1510,1534,1006,1064,1362,1503,1499,1506,1503,1504,1501,1506,1535,1037,1491,1110,1088,1237,1086,1320,1208,1060,1023,1064,1505,1506,1505,1493,1259,1390,1197,1254,1267,1270,1294,1366,1168,1260,1040,1064,1022,1068,1557,1519,1087,1132,1284,1102,1160,1026,1112,1555,1020,1549,1507,1521,1532,1178,1004,1094,1252,1034,1526,1497,1540,1431,1113,1500,1136,1098,1124,1360,1169,1362,1121,1002,1036,1010,1120,1102,1481,1501,1509,1498,1135,1221,1234,1254,1038,1250,1256,1273,1390,1159,1029,1521,1573,1247,1185,1067,1297,1066,1506,1270,1534,1263,1513,1036,1277,1256,1558,1047,1337,1372,1398,1318,1028,1066,1064,1178,1334,1242,1265,1212,1291,1375,1185,1284,1248,1283,1335,1135,1212,1192,1236,1262,1360,1272,1194,1018,1042,1511,1544,1512,1520,1519,1268,1480,1137,1367,1122,1469,1531,1295,1531,1066,1031,1047,1487,1149,1187,1276,1262,1262,1291,1523,1515,1377,1103,1502,1085,1022,1129,1012,1077,1060,1067,1517,1147,1079,1056,1037,1093,1286,1497,1538,1504,1523,1561,1511,1050,1294,1248,1282,1348,1074,1195,1030,1098,1329,1514,1516,1517,1467,1177,997,1101,1087,1298,1538,1207,1056,1525,1034,1265,1250,1260,1271,1274,1261,1299,1266,1204,1407,1270,1083,1364,1313,1267,1350,1177,1027,1007,1037,1285,1059,1506,1525,1537,1528,1633,1595,1181,1516,1516,1556,1251,1345,1269,1229,1234,1060,1386,1200,1215,1324,1367,1246,1055,1161,1304,1010,1121,1010,1258,1552,1021,1023,1506,1144,1218,1491,1526,1045,1053,1132,1027,1170,1089,1451,1128,1180,1231,1294,1168,1005,1063,1505,1543,1067,1178,1536,1031,1517,1026,1265,1258,1271,1060,1315,1261,1101,1165,1045,1294,1025,1289,1526,1027,1262,1195,1146,1200,1061,1081,1399,1443,1302,1258,1380,1539,1078,1552,1517,1529,1523,1520,1555,1086,1221,1214,1077,1387,1158,1204,1371,1356,1025,1153,1035,1201,1505,1074,1198,1471,1408,1537,1521,1599,1217,1063,1064,1248,1207,1030,1156,1420,1023,1202,1538,1520,1522,1097,1503,1225,1042,1286,1061,1247,1283,1490,1050,1250,1523,1025,1276,1562,1099,1566,1569,1110,1094,1257,1473,1006,1102,1653,909,1059,1093,1027,1039,1091,1016,1395,1013,1036,1297,1296,1270,1037,1249,1175,1338,1192,1345,1280,1540,1514,1493,1031,1017,1532,1536,1257,1273,1123,1063,1199,1066,1465,1104,1363,1130,1496,1536,1584,1546,1537,1528,1596,1573,1027,1097,1026,1097,1158,1162,1051,1278,1356,1234,1080,1008,1028,1319,1544,1514,1518,1519,1524,1569,1487,1025,1037,1234,1274,1486,1052,1246,1274,1031,1550,1483,1539,1526,1346,970,1044,1157,1186,1195,1051,1507,1096,1267,1275,1239,1544,1022,1492,1507,1541,1524,1257,1269,1233,1247,1151,1085,1352,1203,1350,1184,1425,1109,1087,1015,1505,1430,1044,1544,1497,1536,1455,1301,1266,1517,1030,1254,1039,1116,1406,1056,1122,1543,1530,1527,1095,1514,997,1037,1507,1545,1523,1518,1525,1517,1525,1540,1258,1593,1687,1579,1579,1523,1456,1247,1376,1129,1290,1064,1050,1079,1037,1521,1506,1504,1558,1069,1556,1509,1206,1343,1191,1114,1508,1005,1126,1260,1518,1037,1252,1234,1080,1297,1286,1530,1509,1023,1077,1014,1030,1506,1144,1075,1537,1503,1535,1543,1426,1204,1496,1520,1535,1110,1055,1096,1092,1309,1537,1468,1589,1588,1491,1016,1011,1106,1270,1047,1396,1270,1536,1475,1050,1539,1513,1540,1255,1223,1326,1520,1054,1101,1108,1033,1503,1049,1521,1038,1270,1127,1070,1110,1095,1352,1027,1116,1071,1521,1250,1278,1284,1261,1265,1254,1323,1234,1281,1276,1026,1325,1158,1063,1259,1202,1245,1218,1363,1119,996,1035,1174,1505,1056,1293,1272,1263,1264,1265,1286,1269,1274,1348,1182,1020,1116,1153,1037,1432,1365,1436,1515,1522,1261,1379,1083,980,1030,1222,1291,1536,1526,1519,1540,1255,1266,1275,1239,1168,1546,1037,1310,1339,1020,1237,1096,1326,1101,1210,1366,1499,1027,1037,1014,1038,1028,1559,1024,1343,1332,1502,1508,1039,1332,1514,1215,1529,1212,1552,1254,1217,1256,1259,1047,1087,1327,1522,1047,1218,1124,1104,1132,1480,1066,1511,1205,1532,1528,1030,1524,1524,1537,1092,1209,1096,1103,1238,1505,1491,1551,1257,1233,1012,1026,1506,1062,1353,1175,1175,1260,1256,1279,1261,1521,1053,1202,1287,1104,1353,1343,1069,1161,1170,1474,1216,1611,1560,1591,1026,1055,1506,1010,1550,1033,1249,1221,1103,1132,1051,1295,1282,1259,1483,1550,1525,1534,1256,1271,1523,1005,1135,1066,1263,1553,1516,1522,1514,1481,1296,1474,1367,1531,1515,1512,1093,1317,1541,1553,1385,1041,1106,1111,1077,1033,1505,1057,1526,1515,1120,1042,1037,1040,1109,1143,1256,1266,1513,1047,1510,1035,1253,1268,1358,1382,1231,1390,1370,1402,1303,1360,1175,1055,1565,1185,1468,1578,1334,990,1008,1203,1369,1213,1301,1211,1333,1331,1490,1469,1518,1523,1519,1521,1254,1308,1422,1135,1055,1519,1542,1267,1368,1114,1295,1033,1435,1548,1513,1318,1380,1048,1517,1049,1328,1460,1027,1241,1535,1110,1082,1071,1255,1582,1432,1488,1036,1326,1032,1307,1271,1021,1318,1248,1025,1537,1034,1262,1254,1083,1229,997,1023,1019,1138,1556,1512,1496,1037,1286,1532,1490,1536,1227,1012,1042,1039,1013,1293,1350,1507,1498,1243,1488,1538,1276,1055,1383,1165,1490,1535,1527,1583,1535,1537,1049,1167,1540,1600,1439,1056,1014,1052,1505,1502,1535,1308,1276,1052,1302,1521,1060,1225,1044,1269,1483,1192,1163,1350,1070,1211,1014,1546,1522,1117,1536,1531,1231,1033,1348,1541,1175,1554,1351,1529,1525,1269,1446,1324,1337,1626,1533,1580,1625,1514,1044,1501,1152,1401,1182,1021,1008,1035,1050,1131,1289,1166,1388,1198,1527,1513,1053,1074,1163,1272,1482,1073,1535,1514,1529,1603,1487,1457,1491,1400,1466,1110,1216,1191,1021,1504,1504,1502,1501,1500,1205,1411,1376,1229,1388,1320,1226,1081,1181,1307,1198,1240,1058,1135,1116,1060,1298,1543,1519,1049,1054,1030,1008,1203,1421,1541,1020,1104,1529,1073,1171,1289,1526,1029,1264,1524,1051,1292,1027,1264,1009,1285,1524,1038,1327,1147,1113,1040,1037,1055,1049,1503,1501,1532,1490,1535,1494,1535,1521,1579,1620,1123,1196,1288,1142,1237,1273,1520,1014,1119,1018,1041,1011,1368,1162,1293,1278,1057,1432,1367,1224,1233,1264,1127,1267,1366,1018,1048,1324,1145,1183,1035,1265,1544,1040,1258,1533,1522,1352,1025,1018,1509,1480,1089,1530,1035,1269,1521,1030,1250,1234,1532,1122,1233,1220,1255,1574,1017,1272,1239,1293,1029,1074,1013,1040,1171,1504,1059,1089,1073,1069,1374,1193,1454,1541,1097,1549,1259,1270,1269,1269,1031,1271,1225,1344,1152,1015,1505,1590,1576,1581,1438,1078,1051,1014,1408,1164,1291,1462,1072,1267,1506,1041,1232,1511,1028,1094,1066,1173,1040,1321,1527,1534,1601,1530,990,1097,1033,1028,1337,1148,1260,1282,1053,1564,1470,1281,1518,1527,1532,1514,1591,1610,1441,1094,1509,1063,1561,1241,1272,1083,1509,1066,1033,1037,1036,1029,1079,1011,1276,1515,1062,1542,1030,1040,1524,1331,1518,1519,1530,1357,1201,1040,1538,1487,1604,1486,1243,1024,1037,1092,1358,1555,1502,1534,1265,1273,1263,1136,1413,1152,1485,1387,1284,1188,1237,1030,1290,1246,1528,1042,1228,1033,1063,1009,1104,1190,1173,1514,1008,1039,1537,1520,1520,1203,1278,1103,1514,1517,1539,1330,1373,1131,1074,1539,1535,1535,1536,1125,1507,1507,1068,1563,1056,1106,1499,1502,1537,1538,1067,1128,1528,1165,1261,1282,1265,1311,1229,1257,1208,1505,1078,1264,1267,1295,1120,1056,1039,1505,1007,1503,1553,1518,1528,1309,1265,1309,1011,1511,1143,1268,1093,1228,1242,1243,1340,1437,1532,1087,1260,1283,1004,1026,1476,1265,1191,1386,1160,1513,1041,1275,1283,1148,1222,1268,1271,1090,1293,1050,1232,1314,1255,1262,1347,1462,1531,1018,1497,1505,1060,1057,1077,1139,1006,1251,1043,1267,1216,1503,1536,1521,1575,1526,1550,1505,1553,1015,1238,1046,1080,1268,1063,1265,1096,1033,1028,1041,1280,1503,1056,1269,1511,1028,1255,1543,1091,1101,1317,1507,1026,1036,1012,1093,1075,1396,1148,1287,1247,1314,1100,1070,1085,1010,1503,1065,1262,1162,1268,1255,1280,1481,1108,1266,1376,1263,1299,1357,1403,1298,1393,1337,1271,1013,1348,1269,1320,1276,1115,1152,1016,1043,1255,1096,1107,1107,1053,1526,1026,1091,1517,1055,1084,1387,1085,1168,1283,1131,1083,1248,1006,1315,1023,1536,1527,1071,1039,1086,1033,1093,1119,1436,1277,1519,1523,1580,1579,1528,1261,1310,1610,1573,1338,982,1111,1503,1085,1503,1044,1528,1112,1015,1027,1089,1501,1008,1503,1504,1500,1534,1490,1647,1573,1585,1573,1526,1533,1538,1508,1163,1219,1260,1501,1012,1368,1029,1015,1032,1450,1061,1057,1506,1053,1028,1482,1247,1254,1037,1244,1393,1181,1229,1293,1261,1283,1487,1091,1015,1600,1558,1595,1003,1614,1113,1539,1536,1632,1176,1088,1258,1299,1506,1024,1210,1514,1053,1262,1329,1248,998,1326,1291,1327,1289,1524,1536,1495,1164,1082,1013,1014,1301,1548,1072,1173,1273,1529,1515,1520,1522,1667,1072,1267,1303,1021,1364,1270,1300,1231,1050,1132,1013,1127,1132,1110,1519,1505,1098,1065,1049,1175,1505,1536,1291,1187,980,1165,1346,1171,1407,1180,1476,1068,1526,1041,1038,1320,1125,1096,1079,1532,1094,1096,1122,1021,1274,1504,1536,1517,1520,1531,1575,1033,1265,1190,1519,1605,1577,1585,1393,1305,1316,1364,1196,1412,1337,1586,1595,1010,1334,1058,1175,1416,1045,1104,1097,999,1021,1071,1074,1011,1039,1056,1099,1002,1055,1032,1043,1302,1232,1018,1083,1054,1161,1056,1375,1012,1024,1076,1021,1097,1107,1103,1006,1540,1519,1489,1095,1131,1500,1552,1528,1527,1513,1489,1497,1060,1158,1453,1060,1262,1431,1098,1010,1234,1029,1294,1503,1054,1399,1176,1265,1521,1054,1237,1252,1311,1256,1334,1164,1229,1032,1092,1093,1537,1512,1587,1230,1270,994,1054,1549,1477,1508,1045,1015,1082,1504,1046,1504,1417,1014,1092,1502,1278,1505,1257,1107,1317,1050,1179,1506,1501,1123,1077,1066,1044,1029,1256,1118,1215,1359,1503,1498,1009,1125,1123,1126,1140,1311,1208,1304,1255,1261,1142,1278,1044,1543,1520,1520,1521,1430,1009,1039,1172,1505,1534,1525,1517,1521,1534,1593,1141,1657,1037,1537,1037,1042,1234,1239,1037,1293,1366,999,1126,1397,1090,1037,1057,1316,1205,1550,1054,1267,1245,1057,1268,1260,1310,1263,1210,1290,1122,1480,1061,1259,1283,1185,1428,1535,1030,1547,1535,1607,1476,1073,1035,1161,1103,1105,1024,1179,1026,1522,1022,1173,1202,1285,1515,1030,1254,1262,1377,1319,1123,1058,1299,1172,1018,1289,1255,1297,1121,1023,1507,1543,1515,1516,1540,1477,1555,1161,1010,1262,1295,1294,1319,1102,1021,1175,1308,1109,1082,1049,1124,1311,1045,1521,1018,1279,1033,1039,1279,1273,1497,1389,1026,1151,1265,1266,1277,1276,1263,1296,1532,981,1119,1157,1011,1247,1166,1271,1352,1329,997,964,1276,1244,1032,1103,1115,1503,1408,1340,1101,1204,1408,1232,1353,1538,1505,1519,1133,1522,1138,1509,1011,1556,1478,1051,1130,1335,1045,1042,1027,1507,1005,1537,1523,1521,1240,1536,1363,1507,1165,1570,1581,1024,1076,1080,1009,1205,1103,1544,1204,1065,1027,1029,1039,1222,1482,1139,1527,1515,1460,1402,1157,1233,1421,1121,1302,1250,1287,1266,1113,1432,1010,1037,1500,1088,1361,1230,1308,1113,995,1009,1475,1078,1288,1368,1539,1513,1524,1518,1586,1147,1142,1279,1512,1021,1255,1338,1244,1318,1095,1178,1154,1262,1542,1095,1210,1029,1040,1229,1026,1298,1489,1052,1253,1206,1363,1172,1283,1532,1244,1533,1205,1033,1051,1067,1083,1325,1526,1527,1269,1334,1058,987,1054,1253,1503,1546,1478,1544,1539,1520,1036,1252,1371,1250,1073,1357,1211,1322,1284,1200,1041,1461,1231,1533,1605,1516,1036,1021,1123,1115,1298,1101,1148,1356,1233,1519,1022,1098,1255,1282,1310,1231,1269,1288,1272,1279,1045,1260,1084,1239,1254,1282,1235,1410,1146,1032,1036,1095,1505,1538,1519,1523,1518,1185,1098,1095,1289,1274,1270,1326,1022,1510,1035,1320,1155,1050,1542,1543,1202,1042,1039,1172,1381,1343,1103,1288,1520,1518,1519,1530,1167,1271,1227,1527,1142,1181,1316,1171,1094,1031,1352,1149,1298,1237,1256,1011,1102,1073,1305,1208,1010,1057,1508,1503,1503,1539,1482,1032,1555,1511,1036,1519,1518,1537,1259,1209,1505,1048,1216,1260,1538,1305,1532,1509,1104,1101,1329,1102,1551,1495,1105,1217,1287,1533,1515,1533,1589,1212,1091,1166,1105,1088,1523,1091,1261,1277,1298,1015,1039,1505,1024,1199,1272,1255,1273,1267,1269,1269,1214,1521,1075,1328,1406,1237,1074,1034,1015,1286,1354,1163,1120,1225,1028,1015,1508,1253,1520,1048,1046,1400,1104,1553,1518,1020,1177,1308,1239,1513,1065,1036,1267,1271,1032,1315,1237,1401,1194,1263,1254,1121,1120,1010,1039,1505,1535,1538,1475,1532,1493,1545,1575,1630,1591,1170,1311,1250,1090,1558,1047,1048,1322,1325,1099,1139,1485,1213,955,1030,1519,1055,1245,1267,1519,1060,1079,999,996,1352,1453,1148,1489,1013,1248,1254,1057,1228,1243,1055,1503,1046,1200,1504,1008,1031,1055,1047,1511,1504,1501,1503,1264,1050,1110,1151,1477,1184,1602,1579,1347,1305,1240,1272,1051,1397,1140,1591,1519,1538,1641,1552,1547,1536,1005,1245,1019,1543,1515,1523,1528,1523,1483,1379,1543,1003,1519,1491,1016,1306,1507,1323,1256,1559,1047,980,1040,1266,1255,1304,1380,1157,1516,1033,1349,1179,1174,1217,1298,1312,1298,1206,1271,1347,1061,1260,1538,1609,1561,1692,1096,1033,1238,1108,1433,1347,1504,1074,1220,1280,1459,1070,1544,1520,1385,1172,1383,1153,1200,1056,1261,1068,1504,1053,1252,1277,1185,1071,1014,1005,1509,1504,1058,1492,1065,1255,1270,1271,1266,1272,1281,1279,1513,1163,1024,1072,1026,1063,1197,1145,1095,1241,1258,1267,1276,1273,1278,1310,1307,1165,1048,1309,1518,1024,1183,1353,1079,1108,1045,1367,1185,1504,1005,1299,1217,1083,1264,1261,1262,1267,1271,1120,999,1288,1039,1556,1138,1501,1502,1152,1158,1027,1448,1100,1219,1239,1069,1506,1157,1504,1055,1504,1256,1408,1258,1244,1218,1297,1077,1035,1053,1502,1503,1504,1505,1501,1275,1502,1286,1271,1038,1178,1262,1048,1257,1066,1023,1170,1465,1074,1042,1036,1052,1111,1256,1503,1119,1503,1558,1251,1209,1290,978,1028,1482,1504,1068,1261,1537,1046,1512,1036,1032,1233,1066,1477,1357,1062,1070,1284,1174,1035,1010,1557,1519,1495,1092,1111,1104,1504,1503,1005,1212,1402,1122,1299,1063,1483,1099,1324,1255,1058,1062,1500,1561,1505,1516,1121,1168,1026,1505,1549,1518,1534,1332,1256,1273,1283,1274,1262,1391,1306,1233,1518,1226,1240,1039,1109,1005,1009,1048,1139,1367,1187,1050,1031,1173,1264,1028,1309,1270,1354,1152,1289,1266,1281,1273,1256,1271,1524,1127,1150,1245,1105,1278,1032,1279,1262,1526,1043,1229,1128,1139,1024,1364,1226,1287,1322,1447,1073,1514,1164,1511,1414,1549,1303,1009,1313,1203,1298,1248,1508,1173,1503,1309,1200,1503,1142,1013,1040,1175,1112,1289,1505,1503,1507,1504,1265,1117,1502,1502,1139,1502,1019,1057,1037,1097,1040,1283,1501,1505,1053,1045,1011,1115,1025,1566,1517,1480,1303,1014,1550,1534,1270,1516,1033,1253,1276,1259,1572,1080,1127,1261,1106,1471,1166,1266,1260,1384,1111,1038,1004,1117,1091,1458,1501,1503,1537,1539,1519,1059,1218,1283,1231,1280,1496,1213,1473,1020,1123,1015,1501,1533,1523,1523,1408,1133,1042,1421,1536,1522,1520,1523,1336,1263,1330,1452,1234,1386,1334,1322,1174,1099,1107,1191,1572,1096,1562,1089,1036,1028,1039,1505,1551,1521,1064,1518,1057,1323,1220,1265,1269,1264,1322,1317,1110,1282,1020,1248,1412,1138,1251,1011,1249,1500,1506,1536,1322,1024,1181,1036,1063,1507,1070,1260,1467,1543,1011,1209,1320,1207,1534,1504,1547,1257,1132,1297,1177,1078,1248,1091,1277,1192,1261,1026,1020,1012,1154,1156,1045,1254,1259,1254,1255,1262,1026,1062,1239,1277,1230,1256,1025,1109,1095,1005,1504,1509,1088,1209,1230,1307,1238,1285,1141,1018,1013,1502,1020,1390,1127,1169,1482,1503,1537,1489,1504,1504,1276,1227,1086,1009,1289,1167,1403,1225,1027,1264,1285,1025,1052,1506,1172,1081,1109,1045,1045,1016,1033,1256,1258,1025,1228,1503,1503,1506,1502,1030,1508,1107,1127,1102,1505,1108,1127,1082,1422,1051,1041,1504,1504,1496,1510,1500,1325,1227,1156,1093,1153,1504,1503,1505,1022,1090,1266,1070,1266,1107,1506,1203,1052,1505,1029,1039,1039,1504,1504,1414,1505,1012,1503,1008,1024,1510,1496,1545,1532,1315,1438,1018,1208,1283,1043,1283,1539,1537,1540,1444,1039,1050,1188,1183,1108,1483,1104,1314,1020,1010,1395,1505,1108,1504,1504,1316,1223,1506,1010,1006,1510,1043,1302,1512,1091,1173,1312,1069,991,1014,1173,1507,1166,1179,1534,1514,1523,1344,1451,1522,1134,1127,1049,1066,1042,1252,1048,1199,1066,1250,1105,1338,1212,1279,1169,1122,1034,1501,1070,1256,988,1305,1249,1286,1256,1267,1150,1483,1150,1440,1187,1224,1230,1359,1159,1267,1244,1081,1018,1080,1244,1137,1162,1504,1043,1102,1052,1013,1031,1548,1501,1025,1270,1256,1258,1263,1280,1486,1025,1006,1038,1130,1139,1010,1423,1009,1166,1514,1537,1189,1046,1027,1042,1039,1060,1504,1536,1520,1525,1494,1311,1539,1527,1517,1094,1064,1046,1056,1034,1495,1470,1274,1218,1371,1239,1241,1048,1361,1011,1548,1039,1064,1120,1255,1034,1167,1190,1270,1274,1252,1268,1282,1299,1177,1176,1471,1234,1163,1200,1278,1113,1153,1055,1502,1549,1525,1542,1185,1032,1114,1102,1540,1491,1686,1565,1680,1545,1528,1359,1505,1026,1297,1300,1252,1459,1133,1263,1019,1040,1144,1104,1549,1120,1056,1544,1535,1367,1521,1271,1274,1358,1178,1371,1153,1029,1077,1145,1274,1507,1550,1527,1534,1018,1062,1329,1501,1536,1534,1534,1274,1522,1107,1167,1524,1007,1116,1066,1085,1297,1531,1019,1297,1282,1236,1153,1536,1518,1305,1025,1212,1254,1349,998,1062,1145,1072,1134,1157,1255,1152,1245,1273,1240,1436,1073,1264,1249,1417,1224,1093,1089,1174,1262,1026,1258,1272,1400,1016,1034,1095,1409,1154,1532,1030,1504,1052,1532,1512,1341,1542,1505,1525,1002,1054,1059,1010,1336,1189,1156,1192,1282,1267,1519,1027,1259,1451,1086,1253,1170,1285,1170,1291,1363,1236,1156,908,1052,1505,1055,1061,1226,1223,1074,1478,1052,1261,1259,1285,1151,1052,1293,1480,1506,1504,1503,1506,1501,1021,1063,1596,1583,1563,1584,1605,1598,1580,1361,1167,1254,1358,1549,1117,1489,1090,1028,1039,1007,1502,1543,1180,1539,1321,1266,1498,1028,1155,1595,1583,1583,1523,1142,1074,1101,1357,1517,1513,1510,1658,919,1038,1489,1150,1538,1520,1150,1049,1106,1262,1261,1269,1272,1268,1282,1278,1532,1512,1142,1011,1090,1014,1156,1223,992,1306,1536,1070,1035,1031,1171,1111,1105,1116,1227,1185,1539,1531,1510,1255,1334,1482,1539,1531,1536,1520,1033,1130,1535,1538,1535,1536,1279,1499,1012,1014,1160,1537,1050,1557,1516,1517,1526,1114,1327,1517,1599,1547,1045,1132,1107,1108,1352,1392,1209,1502,1031,1220,1006,1042,1047,1506,1026,1504,1009,1524,1538,1642,1556,1367,1265,1310,1293,1201,1523,1588,1125,1182,1220,1249,1268,1290,1510,1035,1184,958,1020,1507,1058,1469,1058,1091,1525,1522,1535,1268,1276,1089,1398,1178,1512,1172,1106,1054,1097,1504,1071,1068,1254,1418,1068,1002,1057,1310,1265,1084,1526,1516,1524,1531,1330,1478,1050,1217,1226,1317,1081,1072,1100,1296,1135,1263,1509,1038,1265,1096,1079,1070,1307,1504,1538,1556,1419,1094,1249,1518,1027,1283,1078,1083,1329,1235,1271,1252,1267,1321,1242,1207,1087,1380,1162,1255,1151,1397,1115,1028,1062,1253,1106,1292,1254,1372,1540,1514,1529,1513,1292,1552,1097,1173,1509,1204,1049,1276,1458,1565,1517,1526,1523,1033,1147,988,1099,1225,1503,1505,1545,1515,1520,1527,1490,1602,1478,1565,1525,1041,1503,1541,1518,1597,1509,1071,1016,1545,1514,1535,1057,1058,1002,1025,1506,1203,1500,1045,1251,1050,1337,1274,1360,1169,1387,1665,1340,1532,1417,1251,1263,1517,1026,1259,1272,1014,1008,1020,1110,1106,1046,1133,1513,1022,1152,1257,1262,1293,1533,1529,1519,1352,1530,1289,1279,1253,1255,1285,1446,1018,995,1032,1504,1563,1077,1130,1510,1448,1534,1534,1389,1162,1259,1559,1493,1017,1107,1094,1141,1124,1133,1065,1111,1579,1587,1379,1404,1017,1016,1237,1143,1537,1513,1476,1484,1551,1182,1527,1512,1054,1323,1170,1160,1012,1555,1511,1465,1456,1000,1016,1034,1070,1114,1314,1055,1069,1163,1487,1048,1276,1303,1456,1502,1504,1554,1234,1276,1262,1255,1213,1155,1293,1205,1474,1080,1246,1299,1331,1115,1025,1034,1151,1256,1538,1533,1417,1543,1403,1067,1279,1244,1263,1281,1136,1069,1549,1496,1021,1080,1397,1172,1370,1201,1300,1067,977,1063,1305,1499,1508,1533,1543,1306,1228,1278,1254,1524,1054,1221,1077,1384,1396,1092,1163,1262,1283,1523,1025,1265,1110,1104,1038,1504,1501,1507,1120,1505,1503,1556,1051,1524,1530,1485,1076,1527,1033,1240,1520,1039,1157,1328,1245,1115,1374,1032,1506,1176,1354,1083,1010,1036,1176,1503,1532,1519,1492,1604,1594,1528,1538,1162,1048,1123,1108,1035,1135,1499,1069,1169,1321,1115,1006,1016,1489,1542,1515,1534,1514,1534,1277,1305,1292,1496,1083,1284,1234,1388,1083,1078,1242,1313,1597,1518,1596,1489,1029,1021,1173,1503,1074,1045,1275,1011,1063,1512,1528,1519,1296,1124,1140,1258,1285,1249,1516,1039,1335,1403,1337,1532,1505,1273,1287,1239,1044,1025,1502,1505,1550,1518,1327,1571,1580,1592,1704,1288,1319,1596,1083,1069,1091,1076,1103,1199,1256,1135,1408,1181,1018,1005,1244,1302,1265,1265,1266,1289,1363,1198,1487,1406,1022,1155,1265,1149,1097,1440,1022,1237,1150,1133,1466,1534,1533,1544,1267,996,1027,1502,1549,1527,1542,1069,1429,1074,1046,1368,1321,1202,1528,1514,1491,1521,1192,1323,1213,1077,1278,1510,1094,1231,1029,1268,1026,1057,1523,1506,1540,1521,1544,1510,1178,1549,1502,1103,1553,1431,1095,1104,1099,1113,1547,1505,1534,1246,1050,1054,1251,1310,1525,1520,1201,1164,1050,1533,1518,1542,1303,1254,1331,1212,1517,1033,1252,1079,1190,1122,1307,1576,1331,1533,1164,1022,1007,1504,1543,1439,1084,1148,1400,1501,1540,1325,1530,1546,1288,1538,1035,1218,1261,1133,1278,1381,1576,1512,1545,1275,1035,1338,965,1041,1173,1363,1204,1517,1032,1259,1243,1179,1277,1264,1490,1125,1464,1157,1012,1021,1063,1250,1225,1014,1299,1010,1312,1139,1237,1277,1047,1387,1209,1244,999,1344,1453,1018,1366,1294,1047,1017,1029,1502,1087,1235,1239,1052,1483,1106,1261,1066,1298,1260,1110,1062,1496,1534,1237,1049,1106,1109,1107,1091,1501,1299,1535,1490,1283,1480,1557,1517,1544,994,1263,1084,1310,1158,1302,1554,1027,1067,1003,986,1239,1503,1067,1494,1547,1516,1540,1262,1270,1274,1252,1298,1328,1163,977,1128,1212,1272,1552,1516,1521,1264,1313,994,1013,1011,1307,1550,1506,1527,1485,1521,1522,1519,1619,1239,1649,1442,1533,1580,1009,1369,1050,1489,1545,1230,1319,1254],"$vscode":{"rootPath":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin","locations":[{"callFrame":{"functionName":"(root)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"onStreamRead","scriptId":"84","url":"node:internal/stream_base_commons","lineNumber":170,"columnNumber":21},"locations":[{"lineNumber":171,"columnNumber":22,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"84","url":"node:internal/stream_base_commons","lineNumber":98,"columnNumber":0},"locations":[{"lineNumber":99,"columnNumber":1,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"onStreamRead","scriptId":"84","url":"node:internal/stream_base_commons","lineNumber":99,"columnNumber":0},"locations":[{"lineNumber":100,"columnNumber":1,"source":{"name":"internal/stream_base_commons","path":"internal/stream_base_commons","sourceReference":733809357,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.push","scriptId":"49","url":"node:internal/streams/readable","lineNumber":226,"columnNumber":34},"locations":[{"lineNumber":227,"columnNumber":35,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.push","scriptId":"49","url":"node:internal/streams/readable","lineNumber":227,"columnNumber":0},"locations":[{"lineNumber":228,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.push","scriptId":"49","url":"node:internal/streams/readable","lineNumber":228,"columnNumber":0},"locations":[{"lineNumber":229,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":235,"columnNumber":25},"locations":[{"lineNumber":236,"columnNumber":26,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":277,"columnNumber":0},"locations":[{"lineNumber":278,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":278,"columnNumber":0},"locations":[{"lineNumber":279,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":236,"columnNumber":0},"locations":[{"lineNumber":237,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":237,"columnNumber":0},"locations":[{"lineNumber":238,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"addChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":303,"columnNumber":17},"locations":[{"lineNumber":304,"columnNumber":18,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitReadable","scriptId":"49","url":"node:internal/streams/readable","lineNumber":562,"columnNumber":21},"locations":[{"lineNumber":563,"columnNumber":22,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitReadable","scriptId":"49","url":"node:internal/streams/readable","lineNumber":569,"columnNumber":0},"locations":[{"lineNumber":570,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitReadable","scriptId":"49","url":"node:internal/streams/readable","lineNumber":570,"columnNumber":0},"locations":[{"lineNumber":571,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":103,"columnNumber":17},"locations":[{"lineNumber":104,"columnNumber":18,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":128,"columnNumber":0},"locations":[{"lineNumber":129,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":129,"columnNumber":0},"locations":[{"lineNumber":130,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":126,"columnNumber":0},"locations":[{"lineNumber":127,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":127,"columnNumber":0},"locations":[{"lineNumber":128,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":125,"columnNumber":0},"locations":[{"lineNumber":126,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":112,"columnNumber":0},"locations":[{"lineNumber":113,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"nextTick","scriptId":"25","url":"node:internal/process/task_queues","lineNumber":113,"columnNumber":0},"locations":[{"lineNumber":114,"columnNumber":1,"source":{"name":"internal/process/task_queues","path":"internal/process/task_queues","sourceReference":1090918982,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitInitScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":484,"columnNumber":23},"locations":[{"lineNumber":485,"columnNumber":24,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitInitNative","scriptId":"24","url":"node:internal/async_hooks","lineNumber":195,"columnNumber":23},"locations":[{"lineNumber":196,"columnNumber":24,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":15,"columnNumber":8},"locations":[{"lineNumber":16,"columnNumber":9,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":24,"columnNumber":0},"locations":[{"lineNumber":25,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":25,"columnNumber":0},"locations":[{"lineNumber":26,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":24,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"asyncTaskScheduled","scriptId":"0","url":"","lineNumber":25,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"maybeReadMore","scriptId":"49","url":"node:internal/streams/readable","lineNumber":601,"columnNumber":22},"locations":[{"lineNumber":602,"columnNumber":23,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"maybeReadMore","scriptId":"49","url":"node:internal/streams/readable","lineNumber":604,"columnNumber":0},"locations":[{"lineNumber":605,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"maybeReadMore","scriptId":"49","url":"node:internal/streams/readable","lineNumber":605,"columnNumber":0},"locations":[{"lineNumber":606,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":957,"columnNumber":13},"locations":[{"lineNumber":958,"columnNumber":14,"source":{"name":"internal/buffer","path":"internal/buffer","sourceReference":919131247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":958,"columnNumber":0},"locations":[{"lineNumber":959,"columnNumber":1,"source":{"name":"internal/buffer","path":"internal/buffer","sourceReference":919131247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"FastBuffer","scriptId":"19","url":"node:internal/buffer","lineNumber":959,"columnNumber":0},"locations":[{"lineNumber":960,"columnNumber":1,"source":{"name":"internal/buffer","path":"internal/buffer","sourceReference":919131247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"get name","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"get name","scriptId":"0","url":"","lineNumber":177,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"get name","scriptId":"0","url":"","lineNumber":178,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"runMicrotasks","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":3344,"columnNumber":3},"locations":[{"lineNumber":85,"columnNumber":6,"source":{"name":"src/rfc4571.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/rfc4571.ts","sourceReference":0}},{"lineNumber":3345,"columnNumber":4,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":474,"columnNumber":0},"locations":[{"lineNumber":61,"columnNumber":1,"source":{"name":"/Volumes/Dev/scrypted/src/mechanisms/bearer.ts","path":"/Volumes/Dev/scrypted/src/mechanisms/bearer.ts","sourceReference":1278469789}},{"lineNumber":475,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":475,"columnNumber":0},"locations":[{"lineNumber":62,"columnNumber":1,"source":{"name":"/Volumes/Dev/scrypted/src/mechanisms/bearer.ts","path":"/Volumes/Dev/scrypted/src/mechanisms/bearer.ts","sourceReference":1278469789}},{"lineNumber":476,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":3382,"columnNumber":0},"locations":[{"lineNumber":124,"columnNumber":17,"source":{"name":"src/rfc4571.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/rfc4571.ts","sourceReference":0}},{"lineNumber":3383,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":3383,"columnNumber":0},"locations":[{"lineNumber":121,"columnNumber":40,"source":{"name":"src/rfc4571.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/rfc4571.ts","sourceReference":0}},{"lineNumber":3384,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":3358,"columnNumber":0},"locations":[{"lineNumber":95,"columnNumber":24,"source":{"name":"src/rfc4571.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/rfc4571.ts","sourceReference":0}},{"lineNumber":3359,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":3359,"columnNumber":0},"locations":[{"lineNumber":96,"columnNumber":13,"source":{"name":"src/rfc4571.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/rfc4571.ts","sourceReference":0}},{"lineNumber":3360,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1768,"columnNumber":34},"locations":[{"lineNumber":4,"columnNumber":8,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1769,"columnNumber":35,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1774,"columnNumber":0},"locations":[{"lineNumber":11,"columnNumber":3,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1775,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1775,"columnNumber":0},"locations":[{"lineNumber":12,"columnNumber":5,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1776,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1777,"columnNumber":0},"locations":[{"lineNumber":17,"columnNumber":7,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1778,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1778,"columnNumber":0},"locations":[{"lineNumber":1779,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1792,"columnNumber":28},"locations":[{"lineNumber":31,"columnNumber":1,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1793,"columnNumber":29,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1804,"columnNumber":0},"locations":[{"lineNumber":43,"columnNumber":3,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1805,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1805,"columnNumber":0},"locations":[{"lineNumber":44,"columnNumber":5,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1806,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1801,"columnNumber":0},"locations":[{"lineNumber":39,"columnNumber":7,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1802,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1802,"columnNumber":0},"locations":[{"lineNumber":40,"columnNumber":6,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1803,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1792,"columnNumber":0},"locations":[{"lineNumber":31,"columnNumber":1,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1793,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"readLengthRaw","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1793,"columnNumber":0},"locations":[{"lineNumber":32,"columnNumber":3,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1794,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":638,"columnNumber":32},"locations":[{"lineNumber":639,"columnNumber":33,"source":{"name":"net","path":"net","sourceReference":2001752234,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":393,"columnNumber":34},"locations":[{"lineNumber":394,"columnNumber":35,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"381","url":"node:domain","lineNumber":463,"columnNumber":43},"locations":[{"lineNumber":464,"columnNumber":44,"source":{"name":"domain","path":"domain","sourceReference":1178741714,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"381","url":"node:domain","lineNumber":474,"columnNumber":0},"locations":[{"lineNumber":475,"columnNumber":1,"source":{"name":"domain","path":"domain","sourceReference":1178741714,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"381","url":"node:domain","lineNumber":475,"columnNumber":0},"locations":[{"lineNumber":476,"columnNumber":1,"source":{"name":"domain","path":"domain","sourceReference":1178741714,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":327,"columnNumber":43},"locations":[{"lineNumber":328,"columnNumber":44,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":334,"columnNumber":24},"locations":[{"lineNumber":335,"columnNumber":25,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":339,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"registerDestroyHook","scriptId":"0","url":"","lineNumber":340,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1804,"columnNumber":21},"locations":[{"lineNumber":43,"columnNumber":22,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1805,"columnNumber":22,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"Readable.on","scriptId":"49","url":"node:internal/streams/readable","lineNumber":874,"columnNumber":32},"locations":[{"lineNumber":875,"columnNumber":33,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"addListener","scriptId":"13","url":"node:events","lineNumber":485,"columnNumber":57},"locations":[{"lineNumber":486,"columnNumber":58,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"_addListener","scriptId":"13","url":"node:events","lineNumber":417,"columnNumber":21},"locations":[{"lineNumber":418,"columnNumber":22,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"_addListener","scriptId":"13","url":"node:events","lineNumber":445,"columnNumber":0},"locations":[{"lineNumber":446,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"_addListener","scriptId":"13","url":"node:events","lineNumber":446,"columnNumber":0},"locations":[{"lineNumber":447,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":320,"columnNumber":24},"locations":[{"lineNumber":321,"columnNumber":25,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"lookupPublicResource","scriptId":"24","url":"node:internal/async_hooks","lineNumber":178,"columnNumber":29},"locations":[{"lineNumber":179,"columnNumber":30,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"lookupPublicResource","scriptId":"24","url":"node:internal/async_hooks","lineNumber":181,"columnNumber":0},"locations":[{"lineNumber":182,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"lookupPublicResource","scriptId":"24","url":"node:internal/async_hooks","lineNumber":182,"columnNumber":0},"locations":[{"lineNumber":183,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":22,"columnNumber":0},"locations":[{"lineNumber":23,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"init","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":23,"columnNumber":0},"locations":[{"lineNumber":24,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":339,"columnNumber":43},"locations":[{"lineNumber":340,"columnNumber":44,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":389,"columnNumber":0},"locations":[{"lineNumber":390,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":390,"columnNumber":0},"locations":[{"lineNumber":391,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6064,"columnNumber":28},"locations":[{"lineNumber":854,"columnNumber":30,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6065,"columnNumber":29,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6078,"columnNumber":0},"locations":[{"lineNumber":876,"columnNumber":9,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6079,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6079,"columnNumber":0},"locations":[{"lineNumber":877,"columnNumber":11,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6080,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6075,"columnNumber":0},"locations":[{"lineNumber":873,"columnNumber":11,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6076,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6076,"columnNumber":0},"locations":[{"lineNumber":871,"columnNumber":33,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6077,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6066,"columnNumber":0},"locations":[{"lineNumber":856,"columnNumber":9,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6067,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":6067,"columnNumber":0},"locations":[{"lineNumber":859,"columnNumber":9,"source":{"name":"src/main.ts","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/src/main.ts","sourceReference":0}},{"lineNumber":6068,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1787,"columnNumber":0},"locations":[{"lineNumber":25,"columnNumber":9,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1788,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1788,"columnNumber":0},"locations":[{"lineNumber":23,"columnNumber":13,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1789,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":639,"columnNumber":0},"locations":[{"lineNumber":108,"columnNumber":1,"source":{"name":"/Volumes/Dev/scrypted/src/mechanisms/digest.ts","path":"/Volumes/Dev/scrypted/src/mechanisms/digest.ts","sourceReference":1029979584}},{"lineNumber":640,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":640,"columnNumber":0},"locations":[{"lineNumber":109,"columnNumber":1,"source":{"name":"/Volumes/Dev/scrypted/src/mechanisms/digest.ts","path":"/Volumes/Dev/scrypted/src/mechanisms/digest.ts","sourceReference":1029979584}},{"lineNumber":641,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1784,"columnNumber":0},"locations":[{"lineNumber":22,"columnNumber":7,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1785,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1785,"columnNumber":0},"locations":[{"lineNumber":23,"columnNumber":7,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1786,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1779,"columnNumber":0},"locations":[{"lineNumber":18,"columnNumber":7,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1780,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"read16BELengthLoop","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1780,"columnNumber":0},"locations":[{"lineNumber":19,"columnNumber":9,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1781,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":781,"columnNumber":45},"locations":[{"lineNumber":782,"columnNumber":46,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":783,"columnNumber":0},"locations":[{"lineNumber":784,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"toString","scriptId":"18","url":"node:buffer","lineNumber":784,"columnNumber":0},"locations":[{"lineNumber":785,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":783,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"utf8Slice","scriptId":"0","url":"","lineNumber":784,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":80,"columnNumber":0},"locations":[{"lineNumber":81,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":81,"columnNumber":0},"locations":[{"lineNumber":82,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":377,"columnNumber":0},"locations":[{"lineNumber":378,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":378,"columnNumber":0},"locations":[{"lineNumber":379,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"fromList","scriptId":"49","url":"node:internal/streams/readable","lineNumber":1300,"columnNumber":17},"locations":[{"lineNumber":1301,"columnNumber":18,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"consume","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":79,"columnNumber":9},"locations":[{"lineNumber":80,"columnNumber":10,"source":{"name":"internal/streams/buffer_list","path":"internal/streams/buffer_list","sourceReference":703977247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1114,"columnNumber":39},"locations":[{"lineNumber":1115,"columnNumber":40,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1118,"columnNumber":0},"locations":[{"lineNumber":1119,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"slice","scriptId":"18","url":"node:buffer","lineNumber":1119,"columnNumber":0},"locations":[{"lineNumber":1120,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"_addListener","scriptId":"13","url":"node:events","lineNumber":444,"columnNumber":0},"locations":[{"lineNumber":445,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"initHooksExist","scriptId":"24","url":"node:internal/async_hooks","lineNumber":467,"columnNumber":23},"locations":[{"lineNumber":468,"columnNumber":24,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"initHooksExist","scriptId":"24","url":"node:internal/async_hooks","lineNumber":468,"columnNumber":0},"locations":[{"lineNumber":469,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"initHooksExist","scriptId":"24","url":"node:internal/async_hooks","lineNumber":469,"columnNumber":0},"locations":[{"lineNumber":470,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":433,"columnNumber":0},"locations":[{"lineNumber":434,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":434,"columnNumber":0},"locations":[{"lineNumber":435,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":337,"columnNumber":0},"locations":[{"lineNumber":338,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":338,"columnNumber":0},"locations":[{"lineNumber":339,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":339,"columnNumber":0},"locations":[{"lineNumber":340,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"destroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":340,"columnNumber":0},"locations":[{"lineNumber":341,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseAfterHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":349,"columnNumber":25},"locations":[{"lineNumber":350,"columnNumber":26,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseAfterHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":353,"columnNumber":0},"locations":[{"lineNumber":354,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseAfterHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":354,"columnNumber":0},"locations":[{"lineNumber":355,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseBeforeHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":342,"columnNumber":26},"locations":[{"lineNumber":343,"columnNumber":27,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseBeforeHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":307,"columnNumber":0},"locations":[{"lineNumber":308,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseBeforeHook","scriptId":"24","url":"node:internal/async_hooks","lineNumber":308,"columnNumber":0},"locations":[{"lineNumber":309,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitBeforeScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":498,"columnNumber":25},"locations":[{"lineNumber":499,"columnNumber":26,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitBeforeScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":502,"columnNumber":0},"locations":[{"lineNumber":503,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitBeforeScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":503,"columnNumber":0},"locations":[{"lineNumber":504,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":414,"columnNumber":0},"locations":[{"lineNumber":415,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":415,"columnNumber":0},"locations":[{"lineNumber":416,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":393,"columnNumber":0},"locations":[{"lineNumber":394,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"Readable.read","scriptId":"49","url":"node:internal/streams/readable","lineNumber":394,"columnNumber":0},"locations":[{"lineNumber":395,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":307,"columnNumber":0},"locations":[{"lineNumber":308,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"promiseInitHookWithDestroyTracking","scriptId":"24","url":"node:internal/async_hooks","lineNumber":308,"columnNumber":0},"locations":[{"lineNumber":309,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"(idle)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"emitReadable_","scriptId":"49","url":"node:internal/streams/readable","lineNumber":573,"columnNumber":22},"locations":[{"lineNumber":574,"columnNumber":23,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":383,"columnNumber":0},"locations":[{"lineNumber":384,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emit","scriptId":"13","url":"node:events","lineNumber":384,"columnNumber":0},"locations":[{"lineNumber":385,"columnNumber":1,"source":{"name":"events","path":"events","sourceReference":838564717,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"r","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1805,"columnNumber":14},"locations":[{"lineNumber":44,"columnNumber":15,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1806,"columnNumber":15,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"r","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1810,"columnNumber":0},"locations":[{"lineNumber":48,"columnNumber":9,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1811,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"r","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1811,"columnNumber":0},"locations":[{"lineNumber":49,"columnNumber":8,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1812,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"r","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1806,"columnNumber":0},"locations":[{"lineNumber":45,"columnNumber":7,"source":{"name":"/Volumes/Dev/scrypted/common/src/read-stream.ts","path":"/Volumes/Dev/scrypted/common/src/read-stream.ts","sourceReference":0}},{"lineNumber":1807,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"r","scriptId":"390","url":"file:///plugin/main.nodejs.js","lineNumber":1807,"columnNumber":0},"locations":[{"lineNumber":1808,"columnNumber":1,"source":{"name":"/plugin/main.nodejs.js","path":"/Volumes/Dev/scrypted/plugins/prebuffer-mixin/out/main.nodejs.js","sourceReference":0}}]},{"callFrame":{"functionName":"Readable.removeListener","scriptId":"49","url":"node:internal/streams/readable","lineNumber":904,"columnNumber":44},"locations":[{"lineNumber":905,"columnNumber":45,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"concat","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":64,"columnNumber":8},"locations":[{"lineNumber":65,"columnNumber":9,"source":{"name":"internal/streams/buffer_list","path":"internal/streams/buffer_list","sourceReference":703977247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"allocUnsafe","scriptId":"18","url":"node:buffer","lineNumber":371,"columnNumber":41},"locations":[{"lineNumber":372,"columnNumber":42,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"allocUnsafe","scriptId":"18","url":"node:buffer","lineNumber":373,"columnNumber":0},"locations":[{"lineNumber":374,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"allocUnsafe","scriptId":"18","url":"node:buffer","lineNumber":374,"columnNumber":0},"locations":[{"lineNumber":375,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"_getBuffer","scriptId":"52","url":"node:internal/streams/buffer_list","lineNumber":137,"columnNumber":12},"locations":[{"lineNumber":138,"columnNumber":13,"source":{"name":"internal/streams/buffer_list","path":"internal/streams/buffer_list","sourceReference":703977247,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"allocate","scriptId":"18","url":"node:buffer","lineNumber":396,"columnNumber":17},"locations":[{"lineNumber":397,"columnNumber":18,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"allocate","scriptId":"18","url":"node:buffer","lineNumber":402,"columnNumber":0},"locations":[{"lineNumber":403,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"allocate","scriptId":"18","url":"node:buffer","lineNumber":403,"columnNumber":0},"locations":[{"lineNumber":404,"columnNumber":1,"source":{"name":"buffer","path":"buffer","sourceReference":196076683,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":595,"columnNumber":33},"locations":[{"lineNumber":596,"columnNumber":34,"source":{"name":"net","path":"net","sourceReference":2001752234,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":595,"columnNumber":0},"locations":[{"lineNumber":596,"columnNumber":1,"source":{"name":"net","path":"net","sourceReference":2001752234,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"","scriptId":"99","url":"node:net","lineNumber":596,"columnNumber":0},"locations":[{"lineNumber":597,"columnNumber":1,"source":{"name":"net","path":"net","sourceReference":2001752234,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"after","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":33,"columnNumber":9},"locations":[{"lineNumber":34,"columnNumber":10,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"asyncTaskFinished","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"asyncTaskFinished","scriptId":"0","url":"","lineNumber":36,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"asyncTaskFinished","scriptId":"0","url":"","lineNumber":37,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"emitAfterScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":506,"columnNumber":24},"locations":[{"lineNumber":507,"columnNumber":25,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitAfterScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":551,"columnNumber":0},"locations":[{"lineNumber":552,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitAfterScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":552,"columnNumber":0},"locations":[{"lineNumber":553,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitAfterScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":508,"columnNumber":0},"locations":[{"lineNumber":509,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"emitAfterScript","scriptId":"24","url":"node:internal/async_hooks","lineNumber":509,"columnNumber":0},"locations":[{"lineNumber":510,"columnNumber":1,"source":{"name":"internal/async_hooks","path":"internal/async_hooks","sourceReference":1760071345,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"shift","scriptId":"28","url":"node:internal/fixed_queue","lineNumber":107,"columnNumber":7},"locations":[{"lineNumber":108,"columnNumber":8,"source":{"name":"internal/fixed_queue","path":"internal/fixed_queue","sourceReference":2089620939,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"shift","scriptId":"28","url":"node:internal/fixed_queue","lineNumber":107,"columnNumber":0},"locations":[{"lineNumber":108,"columnNumber":1,"source":{"name":"internal/fixed_queue","path":"internal/fixed_queue","sourceReference":2089620939,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"shift","scriptId":"28","url":"node:internal/fixed_queue","lineNumber":108,"columnNumber":0},"locations":[{"lineNumber":109,"columnNumber":1,"source":{"name":"internal/fixed_queue","path":"internal/fixed_queue","sourceReference":2089620939,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"before","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":27,"columnNumber":10},"locations":[{"lineNumber":28,"columnNumber":11,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"asyncTaskStarted","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"asyncTaskStarted","scriptId":"0","url":"","lineNumber":30,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"asyncTaskStarted","scriptId":"0","url":"","lineNumber":31,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"destroy","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":39,"columnNumber":11},"locations":[{"lineNumber":40,"columnNumber":12,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"destroy","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":41,"columnNumber":0},"locations":[{"lineNumber":42,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"destroy","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":42,"columnNumber":0},"locations":[{"lineNumber":43,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"destroy","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":40,"columnNumber":0},"locations":[{"lineNumber":41,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"asyncTaskCanceled","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"locations":[]},{"callFrame":{"functionName":"asyncTaskCanceled","scriptId":"0","url":"","lineNumber":42,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"asyncTaskCanceled","scriptId":"0","url":"","lineNumber":43,"columnNumber":0},"locations":[]},{"callFrame":{"functionName":"readableAddChunk","scriptId":"49","url":"node:internal/streams/readable","lineNumber":235,"columnNumber":0},"locations":[{"lineNumber":236,"columnNumber":1,"source":{"name":"internal/streams/readable","path":"internal/streams/readable","sourceReference":860984053,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"before","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":30,"columnNumber":0},"locations":[{"lineNumber":31,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]},{"callFrame":{"functionName":"before","scriptId":"95","url":"node:internal/inspector_async_hook","lineNumber":31,"columnNumber":0},"locations":[{"lineNumber":32,"columnNumber":1,"source":{"name":"internal/inspector_async_hook","path":"internal/inspector_async_hook","sourceReference":67292066,"presentationHint":"deemphasize","origin":"Skipped by skipFiles"}}]}]}}
|