選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

lib-jitsi-meet.min.js 379KB

12345678910111213
  1. (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JitsiMeetJS=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTC=require("./modules/RTC/RTC");var XMPPEvents=require("./service/xmpp/XMPPEvents");var AuthenticationEvents=require("./service/authentication/AuthenticationEvents");var RTCEvents=require("./service/RTC/RTCEvents");var EventEmitter=require("events");var JitsiConferenceEvents=require("./JitsiConferenceEvents");var JitsiConferenceErrors=require("./JitsiConferenceErrors");var JitsiParticipant=require("./JitsiParticipant");var Statistics=require("./modules/statistics/statistics");var JitsiDTMFManager=require("./modules/DTMF/JitsiDTMFManager");var JitsiTrackEvents=require("./JitsiTrackEvents");function JitsiConference(options){if(!options.name||options.name.toLowerCase()!==options.name){logger.error("Invalid conference name (no conference name passed or it"+"contains invalid characters like capital letters)!");return}this.options=options;this.connection=this.options.connection;this.xmpp=this.connection.xmpp;this.eventEmitter=new EventEmitter;this.room=this.xmpp.createRoom(this.options.name,this.options.config);this.room.updateDeviceAvailability(RTC.getDeviceAvailability());this.rtc=new RTC(this.room,options);if(!RTC.options.disableAudioLevels)this.statistics=new Statistics;setupListeners(this);this.participants={};this.lastDominantSpeaker=null;this.dtmfManager=null;this.somebodySupportsDTMF=false;this.authEnabled=false;this.authIdentity;this.startAudioMuted=false;this.startVideoMuted=false;this.tracks=[]}JitsiConference.prototype.join=function(password){if(this.room)this.room.join(password)};JitsiConference.prototype.isJoined=function(){return this.room&&this.room.joined};JitsiConference.prototype.leave=function(){if(this.xmpp&&this.room)this.xmpp.leaveRoom(this.room.roomjid);this.room=null};JitsiConference.prototype.getName=function(){return this.options.name};JitsiConference.prototype.isAuthEnabled=function(){return this.authEnabled};JitsiConference.prototype.isLoggedIn=function(){return!!this.authIdentity};JitsiConference.prototype.getAuthLogin=function(){return this.authIdentity};JitsiConference.prototype.isExternalAuthEnabled=function(){return this.room&&this.room.moderator.isExternalAuthEnabled()};JitsiConference.prototype.getExternalAuthUrl=function(urlForPopup){return new Promise(function(resolve,reject){if(!this.isExternalAuthEnabled()){reject();return}if(urlForPopup){this.room.moderator.getPopupLoginUrl(resolve,reject)}else{this.room.moderator.getLoginUrl(resolve,reject)}}.bind(this))};JitsiConference.prototype.getLocalTracks=function(){if(this.rtc){return this.rtc.localStreams}else{return[]}};JitsiConference.prototype.on=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.on(eventId,handler)};JitsiConference.prototype.off=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.removeListener(eventId,handler)};JitsiConference.prototype.addEventListener=JitsiConference.prototype.on;JitsiConference.prototype.removeEventListener=JitsiConference.prototype.off;JitsiConference.prototype.addCommandListener=function(command,handler){if(this.room)this.room.addPresenceListener(command,handler)};JitsiConference.prototype.removeCommandListener=function(command){if(this.room)this.room.removePresenceListener(command)};JitsiConference.prototype.sendTextMessage=function(message){if(this.room)this.room.sendMessage(message)};JitsiConference.prototype.sendCommand=function(name,values){if(this.room){this.room.addToPresence(name,values);this.room.sendPresence()}};JitsiConference.prototype.sendCommandOnce=function(name,values){this.sendCommand(name,values);this.removeCommand(name)};JitsiConference.prototype.removeCommand=function(name){if(this.room)this.room.removeFromPresence(name)};JitsiConference.prototype.setDisplayName=function(name){if(this.room){this.room.removeFromPresence("nick");this.room.addToPresence("nick",{attributes:{xmlns:"http://jabber.org/protocol/nick"},value:name});this.room.sendPresence()}};JitsiConference.prototype.addTrack=function(track){this.room.addStream(track.getOriginalStream(),function(){this.rtc.addLocalStream(track);if(this.startAudioMuted&&track.isAudioTrack()){track.mute()}if(this.startVideoMuted&&track.isVideoTrack()){track.mute()}if(track.startMuted){track.mute()}this.tracks.push(track);var muteHandler=this._fireMuteChangeEvent.bind(this,track);var stopHandler=this.removeTrack.bind(this,track);var audioLevelHandler=this._fireAudioLevelChangeEvent.bind(this);track.addEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,muteHandler);track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,stopHandler);track.addEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,audioLevelHandler);this.addEventListener(JitsiConferenceEvents.TRACK_REMOVED,function(someTrack){if(someTrack!==track){return}track.removeEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,muteHandler);track.removeEventListener(JitsiTrackEvents.TRACK_STOPPED,stopHandler);track.removeEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,audioLevelHandler)});this.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED,track)}.bind(this))};JitsiConference.prototype._fireAudioLevelChangeEvent=function(audioLevel){this.eventEmitter.emit(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED,this.myUserId(),audioLevel)};JitsiConference.prototype._fireMuteChangeEvent=function(track){this.eventEmitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED,track)};JitsiConference.prototype.removeTrack=function(track){var pos=this.tracks.indexOf(track);if(pos>-1){this.tracks.splice(pos,1)}if(!this.room){if(this.rtc)this.rtc.removeLocalStream(track);return}this.room.removeStream(track.getOriginalStream(),function(){this.rtc.removeLocalStream(track);this.eventEmitter.emit(JitsiConferenceEvents.TRACK_REMOVED,track)}.bind(this))};JitsiConference.prototype.getRole=function(){return this.room.role};JitsiConference.prototype.isModerator=function(){return this.room.isModerator()};JitsiConference.prototype.lock=function(password){if(!this.isModerator()){return Promise.reject()}var conference=this;return new Promise(function(resolve,reject){conference.room.lockRoom(password||"",function(){resolve()},function(err){reject(err)},function(){reject(JitsiConferenceErrors.PASSWORD_NOT_SUPPORTED)})})};JitsiConference.prototype.unlock=function(){return this.lock()};JitsiConference.prototype.selectParticipant=function(participantId){if(this.rtc){this.rtc.selectedEndpoint(participantId)}};JitsiConference.prototype.pinParticipant=function(participantId){if(this.rtc){this.rtc.pinEndpoint(participantId)}};JitsiConference.prototype.getParticipants=function(){return Object.keys(this.participants).map(function(key){return this.participants[key]},this)};JitsiConference.prototype.getParticipantById=function(id){return this.participants[id]};JitsiConference.prototype.kickParticipant=function(id){var participant=this.getParticipantById(id);if(!participant){return}this.room.kick(participant.getJid())};JitsiConference.prototype.muteParticipant=function(id){var participant=this.getParticipantById(id);if(!participant){return}this.room.muteParticipant(participant.getJid(),true)};JitsiConference.prototype.onMemberJoined=function(jid,nick,role){var id=Strophe.getResourceFromJid(jid);if(id==="focus"||this.myUserId()===id){return}var participant=new JitsiParticipant(jid,this,nick);participant._role=role;this.participants[id]=participant;this.eventEmitter.emit(JitsiConferenceEvents.USER_JOINED,id,participant);this.xmpp.connection.disco.info(jid,"node",function(iq){participant._supportsDTMF=$(iq).find('>query>feature[var="urn:xmpp:jingle:dtmf:0"]').length>0;this.updateDTMFSupport()}.bind(this))};JitsiConference.prototype.onMemberLeft=function(jid){var id=Strophe.getResourceFromJid(jid);if(id==="focus"||this.myUserId()===id){return}var participant=this.participants[id];delete this.participants[id];this.eventEmitter.emit(JitsiConferenceEvents.USER_LEFT,id,participant)};JitsiConference.prototype.onUserRoleChanged=function(jid,role){var id=Strophe.getResourceFromJid(jid);var participant=this.getParticipantById(id);if(!participant){return}participant._role=role;this.eventEmitter.emit(JitsiConferenceEvents.USER_ROLE_CHANGED,id,role)};JitsiConference.prototype.onDisplayNameChanged=function(jid,displayName){var id=Strophe.getResourceFromJid(jid);var participant=this.getParticipantById(id);if(!participant){return}participant._displayName=displayName;this.eventEmitter.emit(JitsiConferenceEvents.DISPLAY_NAME_CHANGED,id,displayName)};JitsiConference.prototype.onTrackAdded=function(track){var id=track.getParticipantId();var participant=this.getParticipantById(id);if(!participant){return}participant._tracks.push(track);var emitter=this.eventEmitter;track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,function(){var pos=participant._tracks.indexOf(track);if(pos>-1){participant._tracks.splice(pos,1)}emitter.emit(JitsiConferenceEvents.TRACK_REMOVED,track)});track.addEventListener(JitsiTrackEvents.TRACK_MUTE_CHANGED,function(){emitter.emit(JitsiConferenceEvents.TRACK_MUTE_CHANGED,track)});track.addEventListener(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,function(audioLevel){emitter.emit(JitsiConferenceEvents.TRACK_AUDIO_LEVEL_CHANGED,id,audioLevel)});this.eventEmitter.emit(JitsiConferenceEvents.TRACK_ADDED,track)};JitsiConference.prototype.updateDTMFSupport=function(){var somebodySupportsDTMF=false;var participants=this.getParticipants();for(var i=0;i<participants.length;i+=1){if(participants[i].supportsDTMF()){somebodySupportsDTMF=true;break}}if(somebodySupportsDTMF!==this.somebodySupportsDTMF){this.somebodySupportsDTMF=somebodySupportsDTMF;this.eventEmitter.emit(JitsiConferenceEvents.DTMF_SUPPORT_CHANGED,somebodySupportsDTMF)}};JitsiConference.prototype.isDTMFSupported=function(){return this.somebodySupportsDTMF};JitsiConference.prototype.myUserId=function(){return this.room&&this.room.myroomjid?Strophe.getResourceFromJid(this.room.myroomjid):null};JitsiConference.prototype.sendTones=function(tones,duration,pause){if(!this.dtmfManager){var connection=this.xmpp.connection.jingle.activecall.peerconnection;if(!connection){logger.warn("cannot sendTones: no conneciton");return}var tracks=this.getLocalTracks().filter(function(track){return track.isAudioTrack()});if(!tracks.length){logger.warn("cannot sendTones: no local audio stream");return}this.dtmfManager=new JitsiDTMFManager(tracks[0],connection)}this.dtmfManager.sendTones(tones,duration,pause)};JitsiConference.prototype.isRecordingSupported=function(){if(this.room)return this.room.isRecordingSupported();return false};JitsiConference.prototype.getRecordingState=function(){if(this.room)return this.room.getRecordingState();return"off"};JitsiConference.prototype.getRecordingURL=function(){if(this.room)return this.room.getRecordingURL();return null};JitsiConference.prototype.toggleRecording=function(options){if(this.room)return this.room.toggleRecording(options,function(status,error){this.eventEmitter.emit(JitsiConferenceEvents.RECORDING_STATE_CHANGED,status,error)}.bind(this));this.eventEmitter.emit(JitsiConferenceEvents.RECORDING_STATE_CHANGED,"error",new Error("The conference is not created yet!"))};JitsiConference.prototype.isSIPCallingSupported=function(){if(this.room)return this.room.isSIPCallingSupported();return false};JitsiConference.prototype.dial=function(number){if(this.room)return this.room.dial(number);return new Promise(function(resolve,reject){reject(new Error("The conference is not created yet!"))})};JitsiConference.prototype.hangup=function(){if(this.room)return this.room.hangup();return new Promise(function(resolve,reject){reject(new Error("The conference is not created yet!"))})};JitsiConference.prototype.getPhoneNumber=function(){if(this.room)return this.room.getPhoneNumber();return null};JitsiConference.prototype.getPhonePin=function(){if(this.room)return this.room.getPhonePin();return null};JitsiConference.prototype.getConnectionState=function(){if(this.room)return this.room.getConnectionState();return null};JitsiConference.prototype.setStartMuted=function(audioMuted,videoMuted){if(!this.isModerator()){return}this.room.removeFromPresence("startmuted");this.room.addToPresence("startmuted",{attributes:{audio:audioMuted,video:videoMuted,xmlns:"http://jitsi.org/jitmeet/start-muted"}});this.room.sendPresence()};JitsiConference.prototype.isStartAudioMuted=function(){return this.startAudioMuted};JitsiConference.prototype.isStartVideoMuted=function(){return this.startVideoMuted};function setupListeners(conference){conference.xmpp.addListener(XMPPEvents.CALL_INCOMING,function(event){conference.rtc.onIncommingCall(event);if(conference.statistics)conference.statistics.startRemoteStats(event.peerconnection)});conference.room.addListener(XMPPEvents.REMOTE_STREAM_RECEIVED,function(data,sid,thessrc){var track=conference.rtc.createRemoteStream(data,sid,thessrc);if(track){conference.onTrackAdded(track)}});conference.room.addListener(XMPPEvents.AUDIO_MUTED_BY_FOCUS,function(value){conference.rtc.setAudioMute(value)});conference.room.addListener(XMPPEvents.MUC_JOINED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_JOINED)});conference.room.addListener(XMPPEvents.ROOM_JOIN_ERROR,function(pres){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.CONNECTION_ERROR,pres)});conference.room.addListener(XMPPEvents.ROOM_CONNECT_ERROR,function(pres){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.CONNECTION_ERROR,pres)});conference.room.addListener(XMPPEvents.PASSWORD_REQUIRED,function(pres){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.PASSWORD_REQUIRED,pres)});conference.room.addListener(XMPPEvents.AUTHENTICATION_REQUIRED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.AUTHENTICATION_REQUIRED)});conference.room.addListener(XMPPEvents.BRIDGE_DOWN,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.VIDEOBRIDGE_NOT_AVAILABLE)});conference.room.addListener(XMPPEvents.KICKED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.KICKED)});conference.room.addListener(XMPPEvents.MUC_MEMBER_JOINED,conference.onMemberJoined.bind(conference));conference.room.addListener(XMPPEvents.MUC_MEMBER_LEFT,conference.onMemberLeft.bind(conference));conference.room.addListener(XMPPEvents.DISPLAY_NAME_CHANGED,conference.onDisplayNameChanged.bind(conference));conference.room.addListener(XMPPEvents.LOCAL_ROLE_CHANGED,function(role){conference.eventEmitter.emit(JitsiConferenceEvents.USER_ROLE_CHANGED,conference.myUserId(),role)});conference.room.addListener(XMPPEvents.MUC_ROLE_CHANGED,conference.onUserRoleChanged.bind(conference));conference.room.addListener(XMPPEvents.CONNECTION_INTERRUPTED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_INTERRUPTED)});conference.room.addListener(XMPPEvents.RECORDING_STATE_CHANGED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.RECORDING_STATE_CHANGED)});conference.room.addListener(XMPPEvents.PHONE_NUMBER_CHANGED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.PHONE_NUMBER_CHANGED)});conference.room.addListener(XMPPEvents.CONNECTION_RESTORED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONNECTION_RESTORED)});conference.room.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED,function(){conference.eventEmitter.emit(JitsiConferenceEvents.CONFERENCE_FAILED,JitsiConferenceErrors.SETUP_FAILED)});conference.room.addListener(AuthenticationEvents.IDENTITY_UPDATED,function(authEnabled,authIdentity){conference.authEnabled=authEnabled;conference.authIdentity=authIdentity});conference.room.addListener(XMPPEvents.MESSAGE_RECEIVED,function(jid,displayName,txt,myJid,ts){var id=Strophe.getResourceFromJid(jid);conference.eventEmitter.emit(JitsiConferenceEvents.MESSAGE_RECEIVED,id,txt,ts)});conference.rtc.addListener(RTCEvents.DOMINANTSPEAKER_CHANGED,function(id){if(conference.lastDominantSpeaker!==id&&conference.room){conference.lastDominantSpeaker=id;conference.eventEmitter.emit(JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,id)}});conference.rtc.addListener(RTCEvents.LASTN_CHANGED,function(oldValue,newValue){conference.eventEmitter.emit(JitsiConferenceEvents.IN_LAST_N_CHANGED,oldValue,newValue)});conference.rtc.addListener(RTCEvents.LASTN_ENDPOINT_CHANGED,function(lastNEndpoints,endpointsEnteringLastN){conference.eventEmitter.emit(JitsiConferenceEvents.LAST_N_ENDPOINTS_CHANGED,lastNEndpoints,endpointsEnteringLastN)});conference.xmpp.addListener(XMPPEvents.PASSWORD_REQUIRED,function(){conference.eventEmitter.emit(JitsiConferenceErrors.PASSWORD_REQUIRED)});conference.xmpp.addListener(XMPPEvents.START_MUTED_FROM_FOCUS,function(audioMuted,videoMuted){conference.startAudioMuted=audioMuted;conference.startVideoMuted=videoMuted;conference.tracks.forEach(function(track){if(conference.startAudioMuted&&track.isAudioTrack()){track.mute()}if(conference.startVideoMuted&&track.isVideoTrack()){track.mute()}});var initiallyMuted=audioMuted||videoMuted;conference.eventEmitter.emit(JitsiConferenceEvents.START_MUTED,conference.startAudioMuted,conference.startVideoMuted,initiallyMuted)});conference.room.addPresenceListener("startmuted",function(data,from){var isModerator=false;if(conference.myUserId()===from&&conference.isModerator()){isModerator=true}else{var participant=conference.getParticipantById(from);if(participant&&participant.isModerator()){isModerator=true}}if(!isModerator){return}var startAudioMuted=data.attributes.audio==="true";var startVideoMuted=data.attributes.video==="true";var updated=false;if(startAudioMuted!==conference.startAudioMuted){conference.startAudioMuted=startAudioMuted;updated=true}if(startVideoMuted!==conference.startVideoMuted){conference.startVideoMuted=startVideoMuted;updated=true}if(updated){conference.eventEmitter.emit(JitsiConferenceEvents.START_MUTED,conference.startAudioMuted,conference.startVideoMuted,false)}});if(conference.statistics){conference.statistics.addAudioLevelListener(function(ssrc,level){var userId=null;var jid=conference.room.getJidBySSRC(ssrc);if(!jid)return;conference.rtc.setAudioLevel(jid,level)});conference.xmpp.addListener(XMPPEvents.DISPOSE_CONFERENCE,function(){conference.statistics.dispose()})}}module.exports=JitsiConference}).call(this,"/JitsiConference.js")},{"./JitsiConferenceErrors":2,"./JitsiConferenceEvents":3,"./JitsiParticipant":8,"./JitsiTrackEvents":10,"./modules/DTMF/JitsiDTMFManager":11,"./modules/RTC/RTC":16,"./modules/statistics/statistics":24,"./service/RTC/RTCEvents":80,"./service/authentication/AuthenticationEvents":83,"./service/xmpp/XMPPEvents":87,events:44,"jitsi-meet-logger":48}],2:[function(require,module,exports){var JitsiConferenceErrors={PASSWORD_REQUIRED:"conference.passwordRequired",AUTHENTICATION_REQUIRED:"conference.authenticationRequired",PASSWORD_NOT_SUPPORTED:"conference.passwordNotSupported",CONNECTION_ERROR:"conference.connectionError",SETUP_FAILED:"conference.setup_failed",VIDEOBRIDGE_NOT_AVAILABLE:"conference.videobridgeNotAvailable"};module.exports=JitsiConferenceErrors},{}],3:[function(require,module,exports){var JitsiConferenceEvents={TRACK_ADDED:"conference.trackAdded",TRACK_REMOVED:"conference.trackRemoved",DOMINANT_SPEAKER_CHANGED:"conference.dominantSpeaker",USER_JOINED:"conference.userJoined",USER_LEFT:"conference.userLeft",USER_ROLE_CHANGED:"conference.roleChanged",MESSAGE_RECEIVED:"conference.messageReceived",DISPLAY_NAME_CHANGED:"conference.displayNameChanged",AVATAR_CHANGED:"conference.avatarChanged",CONNECTION_STATS_RECEIVED:"conference.connectionStatsReceived",LAST_N_ENDPOINTS_CHANGED:"conference.lastNEndpointsChanged",IN_LAST_N_CHANGED:"conference.lastNEndpointsChanged",TRACK_MUTE_CHANGED:"conference.trackMuteChanged",TRACK_AUDIO_LEVEL_CHANGED:"conference.audioLevelsChanged",CONNECTION_INTERRUPTED:"conference.connectionInterrupted",CONNECTION_RESTORED:"conference.connectionRestored",CONFERENCE_FAILED:"conference.failed",CONFERENCE_JOINED:"conference.joined",CONFERENCE_LEFT:"conference.left",KICKED:"conferenece.kicked",START_MUTED:"conference.start_muted",DTMF_SUPPORT_CHANGED:"conference.dtmfSupportChanged",RECORDING_STATE_CHANGED:"conference.recordingStateChanged",PHONE_NUMBER_CHANGED:"conference.phoneNumberChanged"};module.exports=JitsiConferenceEvents},{}],4:[function(require,module,exports){var JitsiConference=require("./JitsiConference");var XMPP=require("./modules/xmpp/xmpp");function JitsiConnection(appID,token,options){this.appID=appID;this.token=token;this.options=options;this.xmpp=new XMPP(options);this.conferences={}}JitsiConnection.prototype.connect=function(options){if(!options)options={};this.xmpp.connect(options.id,options.password)};JitsiConnection.prototype.disconnect=function(){this.xmpp.disconnect()};JitsiConnection.prototype.setToken=function(token){this.token=token};JitsiConnection.prototype.initJitsiConference=function(name,options){this.conferences[name]=new JitsiConference({name:name,config:options,connection:this});return this.conferences[name]};JitsiConnection.prototype.addEventListener=function(event,listener){this.xmpp.addListener(event,listener)};JitsiConnection.prototype.removeEventListener=function(event,listener){this.xmpp.removeListener(event,listener)};module.exports=JitsiConnection},{"./JitsiConference":1,"./modules/xmpp/xmpp":42}],5:[function(require,module,exports){var JitsiConnectionErrors={PASSWORD_REQUIRED:"connection.passwordRequired",CONNECTION_ERROR:"connection.connectionError",OTHER_ERROR:"connection.otherError"};module.exports=JitsiConnectionErrors},{}],6:[function(require,module,exports){var JitsiConnnectionEvents={CONNECTION_FAILED:"connection.connectionFailed",CONNECTION_ESTABLISHED:"connection.connectionEstablished",CONNECTION_DISCONNECTED:"connection.connectionDisconnected",WRONG_STATE:"connection.wrongState"};module.exports=JitsiConnnectionEvents},{}],7:[function(require,module,exports){var JitsiConnection=require("./JitsiConnection");var JitsiConferenceEvents=require("./JitsiConferenceEvents");var JitsiConnectionEvents=require("./JitsiConnectionEvents");var JitsiConnectionErrors=require("./JitsiConnectionErrors");var JitsiConferenceErrors=require("./JitsiConferenceErrors");var JitsiTrackEvents=require("./JitsiTrackEvents");var JitsiTrackErrors=require("./JitsiTrackErrors");var Logger=require("jitsi-meet-logger");var RTC=require("./modules/RTC/RTC");var Statistics=require("./modules/statistics/statistics");var Resolutions=require("./service/RTC/Resolutions");function getLowerResolution(resolution){if(!Resolutions[resolution])return null;var order=Resolutions[resolution].order;var res=null;var resName=null;for(var i in Resolutions){var tmp=Resolutions[i];if(!res||res.order<tmp.order&&tmp.order<order){resName=i;res=tmp}}return resName}var LibJitsiMeet={JitsiConnection:JitsiConnection,events:{conference:JitsiConferenceEvents,connection:JitsiConnectionEvents,track:JitsiTrackEvents},errors:{conference:JitsiConferenceErrors,connection:JitsiConnectionErrors,track:JitsiTrackErrors},logLevels:Logger.levels,init:function(options){return RTC.init(options||{})},isDesktopSharingEnabled:function(){return RTC.isDesktopSharingEnabled()},setLogLevel:function(level){Logger.setLogLevel(level)},createLocalTracks:function(options){return RTC.obtainAudioAndVideoPermissions(options||{}).then(function(tracks){if(!RTC.options.disableAudioLevels)for(var i=0;i<tracks.length;i++){var track=tracks[i];var mStream=track.getOriginalStream();if(track.getType()==="audio"){Statistics.startLocalStats(mStream,track.setAudioLevel.bind(track));track.addEventListener(JitsiTrackEvents.TRACK_STOPPED,function(){Statistics.stopLocalStats(mStream)})}}return tracks}).catch(function(error){if(error===JitsiTrackErrors.UNSUPPORTED_RESOLUTION){var oldResolution=options.resolution||"360";var newResolution=getLowerResolution(oldResolution);if(newResolution===null)return Promise.reject(error);options.resolution=newResolution;return LibJitsiMeet.createLocalTracks(options)}return Promise.reject(error)})},isDeviceListAvailable:function(){return RTC.isDeviceListAvailable()},isDeviceChangeAvailable:function(){return RTC.isDeviceChangeAvailable()},enumerateDevices:function(callback){RTC.enumerateDevices(callback)}};require("es6-promise").polyfill();window.Promise=window.Promise||require("es6-promise").Promise;module.exports=LibJitsiMeet},{"./JitsiConferenceErrors":2,"./JitsiConferenceEvents":3,"./JitsiConnection":4,"./JitsiConnectionErrors":5,"./JitsiConnectionEvents":6,"./JitsiTrackErrors":9,"./JitsiTrackEvents":10,"./modules/RTC/RTC":16,"./modules/statistics/statistics":24,"./service/RTC/Resolutions":81,"es6-promise":46,"jitsi-meet-logger":48}],8:[function(require,module,exports){function JitsiParticipant(jid,conference,displayName){this._jid=jid;this._id=Strophe.getResourceFromJid(jid);this._conference=conference;this._displayName=displayName;this._supportsDTMF=false;this._tracks=[];this._role="none"}JitsiParticipant.prototype.getConference=function(){return this._conference};JitsiParticipant.prototype.getTracks=function(){return this._tracks};JitsiParticipant.prototype.getId=function(){return this._id};JitsiParticipant.prototype.getJid=function(){return this._jid};JitsiParticipant.prototype.getDisplayName=function(){return this._displayName};JitsiParticipant.prototype.isModerator=function(){return this._role==="moderator"};JitsiParticipant.prototype.isAudioMuted=function(){return this.getTracks().reduce(function(track,isAudioMuted){return isAudioMuted&&(track.isVideoTrack()||track.isMuted())},true)};JitsiParticipant.prototype.isVideoMuted=function(){return this.getTracks().reduce(function(track,isVideoMuted){return isVideoMuted&&(track.isAudioTrack()||track.isMuted())},true)};JitsiParticipant.prototype.getLatestStats=function(){};JitsiParticipant.prototype.getRole=function(){return this._role};JitsiParticipant.prototype.isFocus=function(){};JitsiParticipant.prototype.isRecorder=function(){};JitsiParticipant.prototype.isSipGateway=function(){};JitsiParticipant.prototype.isScreenSharing=function(){};JitsiParticipant.prototype.getUserAgent=function(){};JitsiParticipant.prototype.kick=function(){};JitsiParticipant.prototype.askToMute=function(){};JitsiParticipant.prototype.supportsDTMF=function(){return this._supportsDTMF};module.exports=JitsiParticipant},{}],9:[function(require,module,exports){module.exports={parseError:function(error,devices){devices=devices||[];if(typeof error=="object"&&error.constraintName&&error.name&&(error.name=="ConstraintNotSatisfiedError"||error.name=="OverconstrainedError")&&(error.constraintName=="minWidth"||error.constraintName=="maxWidth"||error.constraintName=="minHeight"||error.constraintName=="maxHeight")&&devices.indexOf("video")!==-1){return this.UNSUPPORTED_RESOLUTION}else{return this.GENERAL}},UNSUPPORTED_RESOLUTION:"gum.unsupported_resolution",GENERAL:"gum.general"}},{}],10:[function(require,module,exports){var JitsiTrackEvents={TRACK_MUTE_CHANGED:"track.trackMuteChanged",TRACK_AUDIO_LEVEL_CHANGED:"track.audioLevelsChanged",TRACK_STOPPED:"track.stopped"};module.exports=JitsiTrackEvents},{}],11:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);function JitsiDTMFManager(localAudio,peerConnection){var tracks=localAudio._getTracks();if(!tracks.length){throw new Error("Failed to initialize DTMFSender: no audio track.")}this.dtmfSender=peerConnection.peerconnection.createDTMFSender(tracks[0]);logger.debug("Initialized DTMFSender")}JitsiDTMFManager.prototype.sendTones=function(tones,duration,pause){this.dtmfSender.insertDTMF(tones,duration||200,pause||200)}}).call(this,"/modules/DTMF/JitsiDTMFManager.js")},{"jitsi-meet-logger":48}],12:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCEvents=require("../../service/RTC/RTCEvents");function DataChannels(peerConnection,emitter){peerConnection.ondatachannel=this.onDataChannel.bind(this);this.eventEmitter=emitter;this._dataChannels=[]}DataChannels.prototype.onDataChannel=function(event){var dataChannel=event.channel;var self=this;dataChannel.onopen=function(){logger.info("Data channel opened by the Videobridge!",dataChannel);self.eventEmitter.emit(RTCEvents.DATA_CHANNEL_OPEN)};dataChannel.onerror=function(error){logger.error("Data Channel Error:",error,dataChannel)};dataChannel.onmessage=function(event){var data=event.data;var obj;try{obj=JSON.parse(data)}catch(e){logger.error("Failed to parse data channel message as JSON: ",data,dataChannel)}if("undefined"!==typeof obj&&null!==obj){var colibriClass=obj.colibriClass;if("DominantSpeakerEndpointChangeEvent"===colibriClass){var dominantSpeakerEndpoint=obj.dominantSpeakerEndpoint;logger.info("Data channel new dominant speaker event: ",dominantSpeakerEndpoint);self.eventEmitter.emit(RTCEvents.DOMINANTSPEAKER_CHANGED,dominantSpeakerEndpoint)}else if("InLastNChangeEvent"===colibriClass){var oldValue=obj.oldValue;var newValue=obj.newValue;var type;if((type=typeof oldValue)!=="boolean"){if(type==="string"){oldValue=oldValue=="true"}else{oldValue=new Boolean(oldValue).valueOf()}}if((type=typeof newValue)!=="boolean"){if(type==="string"){newValue=newValue=="true"}else{newValue=new Boolean(newValue).valueOf()}}self.eventEmitter.emit(RTCEvents.LASTN_CHANGED,oldValue,newValue)}else if("LastNEndpointsChangeEvent"===colibriClass){var lastNEndpoints=obj.lastNEndpoints;var endpointsEnteringLastN=obj.endpointsEnteringLastN;logger.info("Data channel new last-n event: ",lastNEndpoints,endpointsEnteringLastN,obj);self.eventEmitter.emit(RTCEvents.LASTN_ENDPOINT_CHANGED,lastNEndpoints,endpointsEnteringLastN,obj)}else{logger.debug("Data channel JSON-formatted message: ",obj);self.eventEmitter.emit("rtc.datachannel."+colibriClass,obj)}}};dataChannel.onclose=function(){logger.info("The Data Channel closed",dataChannel);var idx=self._dataChannels.indexOf(dataChannel);if(idx>-1)self._dataChannels=self._dataChannels.splice(idx,1)};this._dataChannels.push(dataChannel)};DataChannels.prototype.handleSelectedEndpointEvent=function(userResource){this._onXXXEndpointChanged("selected",userResource)};DataChannels.prototype.handlePinnedEndpointEvent=function(userResource){this._onXXXEndpointChanged("pinnned",userResource)};DataChannels.prototype._onXXXEndpointChanged=function(xxx,userResource){var head=xxx.charAt(0);var tail=xxx.substring(1);var lower=head.toLowerCase()+tail;var upper=head.toUpperCase()+tail;console.log(lower+" endpoint changed: ",userResource);this._some(function(dataChannel){if(dataChannel.readyState=="open"){console.log("sending "+lower+" endpoint changed notification to the bridge: ",userResource);var jsonObject={};jsonObject.colibriClass=upper+"EndpointChangedEvent";jsonObject[lower+"Endpoint"]=userResource?userResource:null;dataChannel.send(JSON.stringify(jsonObject));return true}})};DataChannels.prototype._some=function(callback,thisArg){var dataChannels=this._dataChannels;if(dataChannels&&dataChannels.length!==0){if(thisArg)return dataChannels.some(callback,thisArg);else return dataChannels.some(callback);
  2. }else{return false}};module.exports=DataChannels}).call(this,"/modules/RTC/DataChannels.js")},{"../../service/RTC/RTCEvents":80,"jitsi-meet-logger":48}],13:[function(require,module,exports){var JitsiTrack=require("./JitsiTrack");var RTCBrowserType=require("./RTCBrowserType");var JitsiTrackEvents=require("../../JitsiTrackEvents");var RTCUtils=require("./RTCUtils");function JitsiLocalTrack(stream,videoType,resolution){this.videoType=videoType;this.dontFireRemoveEvent=false;this.resolution=resolution;this.startMuted=false;var self=this;JitsiTrack.call(this,null,stream,function(){if(!this.dontFireRemoveEvent)this.eventEmitter.emit(JitsiTrackEvents.TRACK_STOPPED);this.dontFireRemoveEvent=false}.bind(this))}JitsiLocalTrack.prototype=Object.create(JitsiTrack.prototype);JitsiLocalTrack.prototype.constructor=JitsiLocalTrack;JitsiLocalTrack.prototype._setMute=function(mute){if(this.isMuted()===mute){return}if(!this.rtc){this.startMuted=mute;return}var isAudio=this.type===JitsiTrack.AUDIO;this.dontFireRemoveEvent=false;if(window.location.protocol!="https:"||isAudio||this.videoType==="desktop"||RTCBrowserType.isFirefox()){var tracks=this._getTracks();for(var idx=0;idx<tracks.length;idx++){tracks[idx].enabled=!mute}if(isAudio)this.rtc.room.setAudioMute(mute);else this.rtc.room.setVideoMute(mute);this.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)}else{if(mute){this.dontFireRemoveEvent=true;this.rtc.room.removeStream(this.stream,function(){});RTCUtils.stopMediaStream(this.stream);if(isAudio)this.rtc.room.setAudioMute(mute);else this.rtc.room.setVideoMute(mute);this.stream=null;this.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)}else{var self=this;RTCUtils.obtainAudioAndVideoPermissions({devices:isAudio?["audio"]:["video"],resolution:self.resolution}).then(function(streams){var stream=null;for(var i=0;i<streams.length;i++){stream=streams[i];if(stream.type===self.type){self.stream=stream.stream;self.videoType=stream.videoType;break}}if(!stream)return;for(var i=0;i<self.containers.length;i++){RTCUtils.attachMediaStream(self.containers[i],self.stream)}self.rtc.room.addStream(stream.stream,function(){if(isAudio)self.rtc.room.setAudioMute(mute);else self.rtc.room.setVideoMute(mute);self.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)})})}}};JitsiLocalTrack.prototype.stop=function(){if(!this.stream)return;if(this.rtc)this.rtc.room.removeStream(this.stream,function(){});RTCUtils.stopMediaStream(this.stream);this.detach()};JitsiLocalTrack.prototype.isMuted=function(){if(!this.stream)return true;var tracks=[];var isAudio=this.type===JitsiTrack.AUDIO;if(isAudio){tracks=this.stream.getAudioTracks()}else{if(!this.isActive())return true;tracks=this.stream.getVideoTracks()}for(var idx=0;idx<tracks.length;idx++){if(tracks[idx].enabled)return false}return true};JitsiLocalTrack.prototype._setRTC=function(rtc){this.rtc=rtc};JitsiLocalTrack.prototype.isLocal=function(){return true};module.exports=JitsiLocalTrack},{"../../JitsiTrackEvents":10,"./JitsiTrack":15,"./RTCBrowserType":17,"./RTCUtils":18}],14:[function(require,module,exports){var JitsiTrack=require("./JitsiTrack");var JitsiTrackEvents=require("../../JitsiTrackEvents");function JitsiRemoteTrack(RTC,data,sid,ssrc){JitsiTrack.call(this,RTC,data.stream,function(){this.eventEmitter.emit(JitsiTrackEvents.TRACK_STOPPED)}.bind(this));this.rtc=RTC;this.sid=sid;this.stream=data.stream;this.peerjid=data.peerjid;this.videoType=data.videoType;this.ssrc=ssrc;this.muted=false;if(this.type===JitsiTrack.AUDIO&&data.audiomuted||this.type===JitsiTrack.VIDEO&&data.videomuted){this.muted=true}}JitsiRemoteTrack.prototype=Object.create(JitsiTrack.prototype);JitsiRemoteTrack.prototype.constructor=JitsiRemoteTrack;JitsiRemoteTrack.prototype.setMute=function(value){this.stream.muted=value;this.muted=value;this.eventEmitter.emit(JitsiTrackEvents.TRACK_MUTE_CHANGED)};JitsiRemoteTrack.prototype.isMuted=function(){return this.muted};JitsiRemoteTrack.prototype.getParticipantId=function(){return Strophe.getResourceFromJid(this.peerjid)};JitsiRemoteTrack.prototype.isLocal=function(){return false};delete JitsiRemoteTrack.prototype.stop;delete JitsiRemoteTrack.prototype.start;module.exports=JitsiRemoteTrack},{"../../JitsiTrackEvents":10,"./JitsiTrack":15}],15:[function(require,module,exports){var RTCBrowserType=require("./RTCBrowserType");var JitsiTrackEvents=require("../../JitsiTrackEvents");var EventEmitter=require("events");var RTC=require("./RTCUtils");function implementOnEndedHandling(jitsiTrack){var stream=jitsiTrack.getOriginalStream();var originalStop=stream.stop;stream.stop=function(){originalStop.apply(stream);if(jitsiTrack.isActive()){stream.onended()}}}function addMediaStreamInactiveHandler(mediaStream,handler){if(RTCBrowserType.isTemasysPluginUsed()){if(mediaStream.onended){mediaStream.onended=handler}else if(mediaStream.addEventListener){mediaStream.addEventListener("ended",function(){handler(mediaStream)})}else if(mediaStream.attachEvent){mediaStream.attachEvent("ended",function(){handler(mediaStream)})}}else{if(typeof mediaStream.active!=="undefined")mediaStream.oninactive=handler;else mediaStream.onended=handler}}function JitsiTrack(rtc,stream,streamInactiveHandler){this.containers=[];this.rtc=rtc;this.stream=stream;this.eventEmitter=new EventEmitter;this.audioLevel=-1;this.type=this.stream.getVideoTracks().length>0?JitsiTrack.VIDEO:JitsiTrack.AUDIO;if(this.type=="audio"){this._getTracks=function(){return this.stream.getAudioTracks()}.bind(this)}else{this._getTracks=function(){return this.stream.getVideoTracks()}.bind(this)}if(RTCBrowserType.isFirefox()&&this.stream){implementOnEndedHandling(this)}if(stream)addMediaStreamInactiveHandler(stream,streamInactiveHandler)}JitsiTrack.VIDEO="video";JitsiTrack.AUDIO="audio";JitsiTrack.prototype.getType=function(){return this.type};JitsiTrack.prototype.isAudioTrack=function(){return this.getType()===JitsiTrack.AUDIO};JitsiTrack.prototype.isVideoTrack=function(){return this.getType()===JitsiTrack.VIDEO};JitsiTrack.prototype.getOriginalStream=function(){return this.stream};JitsiTrack.prototype.mute=function(){this._setMute(true)};JitsiTrack.prototype.unmute=function(){this._setMute(false)};JitsiTrack.prototype.attach=function(container){if(this.stream)require("./RTCUtils").attachMediaStream(container,this.stream);this.containers.push(container)};JitsiTrack.prototype.detach=function(container){for(var i=0;i<this.containers.length;i++){if(this.containers[i].is(container)){this.containers.splice(i,1)}if(!container){this.containers[i].find(">video").remove()}}if(container)$(container).find(">video").remove()};JitsiTrack.prototype.stop=function(){};JitsiTrack.prototype.isScreenSharing=function(){};JitsiTrack.prototype._getId=function(){var tracks=this.stream.getTracks();if(!tracks||tracks.length===0)return null;return tracks[0].id};JitsiTrack.prototype.getId=function(){return RTC.getStreamID(this.stream)};JitsiTrack.prototype.isActive=function(){if(typeof this.stream.active!=="undefined")return this.stream.active;else return true};JitsiTrack.prototype.on=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.on(eventId,handler)};JitsiTrack.prototype.off=function(eventId,handler){if(this.eventEmitter)this.eventEmitter.removeListener(eventId,handler)};JitsiTrack.prototype.addEventListener=JitsiTrack.prototype.on;JitsiTrack.prototype.removeEventListener=JitsiTrack.prototype.off;JitsiTrack.prototype.setAudioLevel=function(audioLevel){if(this.audioLevel!==audioLevel){this.eventEmitter.emit(JitsiTrackEvents.TRACK_AUDIO_LEVEL_CHANGED,audioLevel);this.audioLevel=audioLevel}};module.exports=JitsiTrack},{"../../JitsiTrackEvents":10,"./RTCBrowserType":17,"./RTCUtils":18,events:44}],16:[function(require,module,exports){var EventEmitter=require("events");var RTCBrowserType=require("./RTCBrowserType");var RTCUtils=require("./RTCUtils.js");var JitsiTrack=require("./JitsiTrack");var JitsiLocalTrack=require("./JitsiLocalTrack.js");var DataChannels=require("./DataChannels");var JitsiRemoteTrack=require("./JitsiRemoteTrack.js");var DesktopSharingEventTypes=require("../../service/desktopsharing/DesktopSharingEventTypes");var MediaStreamType=require("../../service/RTC/MediaStreamTypes");var RTCEvents=require("../../service/RTC/RTCEvents.js");function createLocalTracks(streams){var newStreams=[];for(var i=0;i<streams.length;i++){var localStream=new JitsiLocalTrack(streams[i].stream,streams[i].videoType,streams[i].resolution);newStreams.push(localStream);if(streams[i].isMuted===true)localStream.setMute(true)}return newStreams}function RTC(room,options){this.room=room;this.localStreams=[];this.remoteStreams={};this.localAudio=null;this.localVideo=null;this.eventEmitter=new EventEmitter;var self=this;this.options=options||{};room.addPresenceListener("videomuted",function(values,from){if(self.remoteStreams[from]){self.remoteStreams[from][JitsiTrack.VIDEO].setMute(values.value=="true")}});room.addPresenceListener("audiomuted",function(values,from){if(self.remoteStreams[from]){self.remoteStreams[from][JitsiTrack.AUDIO].setMute(values.value=="true")}})}RTC.obtainAudioAndVideoPermissions=function(options){return RTCUtils.obtainAudioAndVideoPermissions(options).then(createLocalTracks)};RTC.prototype.onIncommingCall=function(event){if(this.options.config.openSctp)this.dataChannels=new DataChannels(event.peerconnection,this.eventEmitter);for(var i=0;i<this.localStreams.length;i++)if(this.localStreams[i]){this.room.addStream(this.localStreams[i].getOriginalStream(),function(){})}};RTC.prototype.selectedEndpoint=function(id){if(this.dataChannels)this.dataChannels.handleSelectedEndpointEvent(id)};RTC.prototype.pinEndpoint=function(id){if(this.dataChannels)this.dataChannels.handlePinnedEndpointEvent(id)};RTC.prototype.addListener=function(type,listener){this.eventEmitter.on(type,listener)};RTC.prototype.removeListener=function(eventType,listener){this.eventEmitter.removeListener(eventType,listener)};RTC.addListener=function(eventType,listener){RTCUtils.addListener(eventType,listener)};RTC.removeListener=function(eventType,listener){RTCUtils.removeListener(eventType,listener)};RTC.isRTCReady=function(){return RTCUtils.isRTCReady()};RTC.init=function(options){this.options=options||{};return RTCUtils.init(this.options)};RTC.getDeviceAvailability=function(){return RTCUtils.getDeviceAvailability()};RTC.prototype.addLocalStream=function(stream){this.localStreams.push(stream);stream._setRTC(this);if(stream.type=="audio"){this.localAudio=stream}else{this.localVideo=stream}};RTC.prototype.setAudioMute=function(value){for(var i=0;i<this.localStreams.length;i++){var stream=this.localStreams[i];if(stream.getType()!=="audio"){continue}stream._setMute(value)}};RTC.prototype.removeLocalStream=function(stream){for(var i=0;i<this.localStreams.length;i++){if(this.localStreams[i].getOriginalStream()===stream){delete this.localStreams[i];return}}};RTC.prototype.createRemoteStream=function(data,sid,thessrc){var remoteStream=new JitsiRemoteTrack(this,data,sid,thessrc);if(!data.peerjid)return;var jid=Strophe.getResourceFromJid(data.peerjid);if(!this.remoteStreams[jid]){this.remoteStreams[jid]={}}this.remoteStreams[jid][remoteStream.type]=remoteStream;return remoteStream};RTC.getPCConstraints=function(){return RTCUtils.pc_constraints};RTC.attachMediaStream=function(elSelector,stream){RTCUtils.attachMediaStream(elSelector,stream)};RTC.getStreamID=function(stream){return RTCUtils.getStreamID(stream)};RTC.getVideoSrc=function(element){return RTCUtils.getVideoSrc(element)};RTC.isDeviceListAvailable=function(){return RTCUtils.isDeviceListAvailable()};RTC.isDeviceChangeAvailable=function(){return RTCUtils.isDeviceChangeAvailable()};RTC.enumerateDevices=function(callback){RTCUtils.enumerateDevices(callback)};RTC.setVideoSrc=function(element,src){RTCUtils.setVideoSrc(element,src)};RTC.stopMediaStream=function(mediaStream){RTCUtils.stopMediaStream(mediaStream)};RTC.isDesktopSharingEnabled=function(){return RTCUtils.isDesktopSharingEnabled()};RTC.prototype.getVideoElementName=function(){return RTCBrowserType.isTemasysPluginUsed()?"object":"video"};RTC.prototype.dispose=function(){};RTC.prototype.switchVideoStreams=function(newStream){this.localVideo.stream=newStream;this.localStreams=[];if(this.localAudio.getOriginalStream()!=newStream)this.localStreams.push(this.localAudio);this.localStreams.push(this.localVideo)};RTC.prototype.setAudioLevel=function(jid,audioLevel){if(!jid)return;var resource=Strophe.getResourceFromJid(jid);if(this.remoteStreams[resource]&&this.remoteStreams[resource][JitsiTrack.AUDIO])this.remoteStreams[resource][JitsiTrack.AUDIO].setAudioLevel(audioLevel)};module.exports=RTC},{"../../service/RTC/MediaStreamTypes":79,"../../service/RTC/RTCEvents.js":80,"../../service/desktopsharing/DesktopSharingEventTypes":84,"./DataChannels":12,"./JitsiLocalTrack.js":13,"./JitsiRemoteTrack.js":14,"./JitsiTrack":15,"./RTCBrowserType":17,"./RTCUtils.js":18,events:44}],17:[function(require,module,exports){var currentBrowser;var browserVersion;var isAndroid;var RTCBrowserType={RTC_BROWSER_CHROME:"rtc_browser.chrome",RTC_BROWSER_OPERA:"rtc_browser.opera",RTC_BROWSER_FIREFOX:"rtc_browser.firefox",RTC_BROWSER_IEXPLORER:"rtc_browser.iexplorer",RTC_BROWSER_SAFARI:"rtc_browser.safari",getBrowserType:function(){return currentBrowser},isChrome:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_CHROME},isOpera:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_OPERA},isFirefox:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_FIREFOX},isIExplorer:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_IEXPLORER},isSafari:function(){return currentBrowser===RTCBrowserType.RTC_BROWSER_SAFARI},isTemasysPluginUsed:function(){return RTCBrowserType.isIExplorer()||RTCBrowserType.isSafari()},getFirefoxVersion:function(){return RTCBrowserType.isFirefox()?browserVersion:null},getChromeVersion:function(){return RTCBrowserType.isChrome()?browserVersion:null},usesPlanB:function(){return RTCBrowserType.isChrome()||RTCBrowserType.isOpera()||RTCBrowserType.isTemasysPluginUsed()},usesUnifiedPlan:function(){return RTCBrowserType.isFirefox()},isAndroid:function(){return isAndroid}};function detectChrome(){if(navigator.webkitGetUserMedia){currentBrowser=RTCBrowserType.RTC_BROWSER_CHROME;var userAgent=navigator.userAgent.toLowerCase();var ver=parseInt(userAgent.match(/chrome\/(\d+)\./)[1],10);console.log("This appears to be Chrome, ver: "+ver);return ver}return null}function detectOpera(){var userAgent=navigator.userAgent;if(userAgent.match(/Opera|OPR/)){currentBrowser=RTCBrowserType.RTC_BROWSER_OPERA;var version=userAgent.match(/(Opera|OPR) ?\/?(\d+)\.?/)[2];console.info("This appears to be Opera, ver: "+version);return version}return null}function detectFirefox(){if(navigator.mozGetUserMedia){currentBrowser=RTCBrowserType.RTC_BROWSER_FIREFOX;var version=parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1],10);console.log("This appears to be Firefox, ver: "+version);return version}return null}function detectSafari(){if(/^((?!chrome).)*safari/i.test(navigator.userAgent)){currentBrowser=RTCBrowserType.RTC_BROWSER_SAFARI;console.info("This appears to be Safari");return 1}return null}function detectIE(){var version;var ua=window.navigator.userAgent;var msie=ua.indexOf("MSIE ");if(msie>0){version=parseInt(ua.substring(msie+5,ua.indexOf(".",msie)),10)}var trident=ua.indexOf("Trident/");if(!version&&trident>0){var rv=ua.indexOf("rv:");version=parseInt(ua.substring(rv+3,ua.indexOf(".",rv)),10)}var edge=ua.indexOf("Edge/");if(!version&&edge>0){version=parseInt(ua.substring(edge+5,ua.indexOf(".",edge)),10)}if(version){currentBrowser=RTCBrowserType.RTC_BROWSER_IEXPLORER;console.info("This appears to be IExplorer, ver: "+version)}return version}function detectBrowser(){var version;var detectors=[detectOpera,detectChrome,detectFirefox,detectIE,detectSafari];for(var i=0;i<detectors.length;i++){version=detectors[i]();if(version)return version}console.warn("Browser type defaults to Safari ver 1");currentBrowser=RTCBrowserType.RTC_BROWSER_SAFARI;return 1}browserVersion=detectBrowser();isAndroid=navigator.userAgent.indexOf("Android")!=-1;module.exports=RTCBrowserType},{}],18:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("./RTCBrowserType");var Resolutions=require("../../service/RTC/Resolutions");var RTCEvents=require("../../service/RTC/RTCEvents");var AdapterJS=require("./adapter.screenshare");var SDPUtil=require("../xmpp/SDPUtil");var EventEmitter=require("events");var screenObtainer=require("./ScreenObtainer");var JitsiTrackErrors=require("../../JitsiTrackErrors");var eventEmitter=new EventEmitter;var devices={audio:true,video:true};var rtcReady=false;function setResolutionConstraints(constraints,resolution){var isAndroid=RTCBrowserType.isAndroid();if(Resolutions[resolution]){constraints.video.mandatory.minWidth=Resolutions[resolution].width;constraints.video.mandatory.minHeight=Resolutions[resolution].height}else if(isAndroid){constraints.video.mandatory.minWidth=320;constraints.video.mandatory.minHeight=240;constraints.video.mandatory.maxFrameRate=15}if(constraints.video.mandatory.minWidth)constraints.video.mandatory.maxWidth=constraints.video.mandatory.minWidth;if(constraints.video.mandatory.minHeight)constraints.video.mandatory.maxHeight=constraints.video.mandatory.minHeight}function getConstraints(um,options){var constraints={audio:false,video:false};if(um.indexOf("video")>=0){constraints.video={mandatory:{},optional:[]};if(options.cameraDeviceId){constraints.video.optional.push({sourceId:options.cameraDeviceId})}constraints.video.optional.push({googLeakyBucket:true});setResolutionConstraints(constraints,options.resolution)}if(um.indexOf("audio")>=0){if(!RTCBrowserType.isFirefox()){constraints.audio={mandatory:{},optional:[]};if(options.micDeviceId){constraints.audio.optional.push({sourceId:options.micDeviceId})}constraints.audio.optional.push({googEchoCancellation:true},{googAutoGainControl:true},{googNoiseSupression:true},{googHighpassFilter:true},{googNoisesuppression2:true},{googEchoCancellation2:true},{googAutoGainControl2:true})}else{if(options.micDeviceId){constraints.audio={mandatory:{},optional:[{sourceId:options.micDeviceId}]}}else{constraints.audio=true}}}if(um.indexOf("screen")>=0){if(RTCBrowserType.isChrome()){constraints.video={mandatory:{chromeMediaSource:"screen",googLeakyBucket:true,maxWidth:window.screen.width,maxHeight:window.screen.height,maxFrameRate:3},optional:[]}}else if(RTCBrowserType.isTemasysPluginUsed()){constraints.video={optional:[{sourceId:AdapterJS.WebRTCPlugin.plugin.screensharingKey}]}}else if(RTCBrowserType.isFirefox()){constraints.video={mozMediaSource:"window",mediaSource:"window"}}else{logger.error("'screen' WebRTC media source is supported only in Chrome"+" and with Temasys plugin")}}if(um.indexOf("desktop")>=0){constraints.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:options.desktopStream,googLeakyBucket:true,maxWidth:window.screen.width,maxHeight:window.screen.height,maxFrameRate:3},optional:[]}}if(options.bandwidth){if(!constraints.video){constraints.video={mandatory:{},optional:[]}}constraints.video.optional.push({bandwidth:options.bandwidth})}if(options.fps){if(!constraints.video){constraints.video={mandatory:{},optional:[]}}constraints.video.mandatory.minFrameRate=options.fps}if(RTCBrowserType.isFirefox()&&options.firefox_fake_device){constraints.fake=true}return constraints}function setAvailableDevices(um,available){if(um.indexOf("video")!=-1){devices.video=available}if(um.indexOf("audio")!=-1){devices.audio=available}eventEmitter.emit(RTCEvents.AVAILABLE_DEVICES_CHANGED,devices)}function onReady(options,GUM){rtcReady=true;eventEmitter.emit(RTCEvents.RTC_READY,true);screenObtainer.init(eventEmitter,options,GUM)}function maybeApply(fn,args){if(fn){fn.apply(null,args||[])}}var getUserMediaStatus={initialized:false,callbacks:[]};function wrapGetUserMedia(getUserMedia){return function(constraints,successCallback,errorCallback){getUserMedia(constraints,function(stream){maybeApply(successCallback,[stream]);if(!getUserMediaStatus.initialized){getUserMediaStatus.initialized=true;getUserMediaStatus.callbacks.forEach(function(callback){callback()});getUserMediaStatus.callbacks.length=0}},function(error){maybeApply(errorCallback,[error])})}}function createAutoDeviceInfo(kind){return{facing:null,label:"Auto",kind:kind,deviceId:"",groupId:null}}function afterUserMediaInitialized(callback){if(getUserMediaStatus.initialized){callback()}else{getUserMediaStatus.callbacks.push(callback)}}function wrapEnumerateDevices(enumerateDevices){return function(callback){afterUserMediaInitialized(function(){enumerateDevices().then(function(devices){devices.unshift(createAutoDeviceInfo("audioinput"),createAutoDeviceInfo("videoinput"));callback(devices)},function(err){console.error("cannot enumerate devices: ",err);callback([createAutoDeviceInfo("audioInput"),createAutoDeviceInfo("videoinput")])})})}}function enumerateDevicesThroughMediaStreamTrack(callback){MediaStreamTrack.getSources(function(sources){var devices=sources.map(function(source){var kind=(source.kind||"").toLowerCase();return{facing:source.facing||null,label:source.label,kind:kind?kind+"input":null,deviceId:source.id,groupId:source.groupId||null}});devices.unshift(createAutoDeviceInfo("audioinput"),createAutoDeviceInfo("videoinput"));callback(devices)})}function obtainDevices(options){if(!options.devices||options.devices.length===0){return options.successCallback(options.streams||{})}var device=options.devices.splice(0,1);var devices=[];devices.push(device);options.deviceGUM[device](function(stream){options.streams=options.streams||{};options.streams[device]=stream;obtainDevices(options)},function(error){Object.keys(options.streams).forEach(function(device){RTCUtils.stopMediaStream(options.streams[device])});logger.error("failed to obtain "+device+" stream - stop",error);options.errorCallback(JitsiTrackErrors.parseError(error,devices))})}function handleLocalStream(streams,resolution){var audioStream,videoStream,desktopStream,res=[];if(window.webkitMediaStream){var audioVideo=streams.audioVideo;if(audioVideo){var audioTracks=audioVideo.getAudioTracks();if(audioTracks.length){audioStream=new webkitMediaStream;for(var i=0;i<audioTracks.length;i++){audioStream.addTrack(audioTracks[i])}}var videoTracks=audioVideo.getVideoTracks();if(videoTracks.length){videoStream=new webkitMediaStream;for(var j=0;j<videoTracks.length;j++){videoStream.addTrack(videoTracks[j])}}}if(streams&&streams.desktopStream)desktopStream=streams.desktopStream}else if(RTCBrowserType.isFirefox()||RTCBrowserType.isTemasysPluginUsed()){if(streams&&streams.audio)audioStream=streams.audio;if(streams&&streams.video)videoStream=streams.video;if(streams&&streams.desktop)desktopStream=streams.desktop}if(desktopStream)res.push({stream:desktopStream,type:"video",videoType:"desktop"});if(audioStream)res.push({stream:audioStream,type:"audio",videoType:null});if(videoStream)res.push({stream:videoStream,type:"video",videoType:"camera",resolution:resolution});return res}var RTCUtils={init:function(options){return new Promise(function(resolve,reject){if(RTCBrowserType.isFirefox()){var FFversion=RTCBrowserType.getFirefoxVersion();if(FFversion<40){logger.error("Firefox version too old: "+FFversion+". Required >= 40.");reject(new Error("Firefox version too old: "+FFversion+". Required >= 40."));return}this.peerconnection=mozRTCPeerConnection;this.getUserMedia=wrapGetUserMedia(navigator.mozGetUserMedia.bind(navigator));this.enumerateDevices=wrapEnumerateDevices(navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices));this.pc_constraints={};this.attachMediaStream=function(element,stream){if(!element[0])return;element[0].mozSrcObject=stream;element[0].play()};this.getStreamID=function(stream){var id=stream.id;if(!id){var tracks=stream.getVideoTracks();if(!tracks||tracks.length===0){tracks=stream.getAudioTracks()}id=tracks[0].id}return SDPUtil.filter_special_chars(id)};this.getVideoSrc=function(element){if(!element)return null;return element.mozSrcObject};this.setVideoSrc=function(element,src){if(element)element.mozSrcObject=src};RTCSessionDescription=mozRTCSessionDescription;RTCIceCandidate=mozRTCIceCandidate}else if(RTCBrowserType.isChrome()||RTCBrowserType.isOpera()){this.peerconnection=webkitRTCPeerConnection;var getUserMedia=navigator.webkitGetUserMedia.bind(navigator);if(navigator.mediaDevices){this.getUserMedia=wrapGetUserMedia(getUserMedia);this.enumerateDevices=wrapEnumerateDevices(navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices))}else{this.getUserMedia=getUserMedia;this.enumerateDevices=enumerateDevicesThroughMediaStreamTrack}this.attachMediaStream=function(element,stream){if(!stream.jitsiObjectURL){stream.jitsiObjectURL=webkitURL.createObjectURL(stream)}element.attr("src",stream.jitsiObjectURL)};this.getStreamID=function(stream){return SDPUtil.filter_special_chars(stream.id)};this.getVideoSrc=function(element){if(!element)return null;return element.getAttribute("src")};this.setVideoSrc=function(element,src){if(element)element.setAttribute("src",src)};this.pc_constraints={optional:[{DtlsSrtpKeyAgreement:"true"}]};if(options.useIPv6){this.pc_constraints.optional.push({googIPv6:true})}if(RTCBrowserType.isAndroid()){this.pc_constraints={}}if(!webkitMediaStream.prototype.getVideoTracks){webkitMediaStream.prototype.getVideoTracks=function(){return this.videoTracks}}if(!webkitMediaStream.prototype.getAudioTracks){webkitMediaStream.prototype.getAudioTracks=function(){return this.audioTracks}}}else if(RTCBrowserType.isTemasysPluginUsed()){var self=this;AdapterJS.webRTCReady(function(isPlugin){self.peerconnection=RTCPeerConnection;self.getUserMedia=window.getUserMedia;self.enumerateDevices=enumerateDevicesThroughMediaStreamTrack;self.attachMediaStream=function(elSel,stream){if(stream.id==="dummyAudio"||stream.id==="dummyVideo"){return}attachMediaStream(elSel[0],stream)};self.getStreamID=function(stream){var id=SDPUtil.filter_special_chars(stream.label);return id};self.getVideoSrc=function(element){if(!element){logger.warn("Attempt to get video SRC of null element");return null}var children=element.children;for(var i=0;i!==children.length;++i){if(children[i].name==="streamId"){return children[i].value}}return null};self.setVideoSrc=function(element,src){if(!src){logger.warn("Not attaching video stream, 'src' is null");return}AdapterJS.WebRTCPlugin.WaitForPluginReady();var stream=AdapterJS.WebRTCPlugin.plugin.getStreamWithId(AdapterJS.WebRTCPlugin.pageId,src);attachMediaStream(element,stream)};onReady(options,self.getUserMediaWithConstraints);resolve()})}else{try{logger.error("Browser does not appear to be WebRTC-capable")}catch(e){}reject("Browser does not appear to be WebRTC-capable");return}if(!RTCBrowserType.isTemasysPluginUsed()){onReady(options,this.getUserMediaWithConstraints);resolve()}}.bind(this))},getUserMediaWithConstraints:function(um,success_callback,failure_callback,options){options=options||{};var resolution=options.resolution;var constraints=getConstraints(um,options);logger.info("Get media constraints",constraints);try{this.getUserMedia(constraints,function(stream){logger.log("onUserMediaSuccess");setAvailableDevices(um,true);success_callback(stream)},function(error){setAvailableDevices(um,false);logger.warn("Failed to get access to local media. Error ",error,constraints);if(failure_callback){failure_callback(error,resolution)}})}catch(e){logger.error("GUM failed: ",e);if(failure_callback){failure_callback(e)}}},obtainAudioAndVideoPermissions:function(options){var self=this;options=options||{};return new Promise(function(resolve,reject){var successCallback=function(stream){resolve(handleLocalStream(stream,options.resolution))};options.devices=options.devices||["audio","video"];if(!screenObtainer.isSupported()&&options.devices.indexOf("desktop")!==-1){reject(new Error("Desktop sharing is not supported!"))}if(RTCBrowserType.isFirefox()||RTCBrowserType.isTemasysPluginUsed()){var GUM=function(device,s,e){this.getUserMediaWithConstraints(device,s,e,options)};var deviceGUM={audio:GUM.bind(self,["audio"]),video:GUM.bind(self,["video"])};if(screenObtainer.isSupported()){deviceGUM["desktop"]=screenObtainer.obtainStream.bind(screenObtainer)}obtainDevices({devices:options.devices,streams:[],successCallback:successCallback,errorCallback:reject,deviceGUM:deviceGUM})}else{var hasDesktop=options.devices.indexOf("desktop")>-1;if(hasDesktop){options.devices.splice(options.devices.indexOf("desktop"),1)}options.resolution=options.resolution||"360";if(options.devices.length){this.getUserMediaWithConstraints(options.devices,function(stream){if(options.devices.indexOf("audio")!==-1&&!stream.getAudioTracks().length||options.devices.indexOf("video")!==-1&&!stream.getVideoTracks().length){self.stopMediaStream(stream);reject(JitsiTrackErrors.parseError(new Error("Unable to get the audio and "+"video tracks."),options.devices));return}if(hasDesktop){screenObtainer.obtainStream(function(desktopStream){successCallback({audioVideo:stream,desktopStream:desktopStream})},function(error){self.stopMediaStream(stream);reject(JitsiTrackErrors.parseError(error,options.devices))})}else{successCallback({audioVideo:stream})}},function(error){reject(JitsiTrackErrors.parseError(error,options.devices))},options)}else if(hasDesktop){screenObtainer.obtainStream(function(stream){successCallback({desktopStream:stream})},function(error){reject(JitsiTrackErrors.parseError(error,["desktop"]))})}}}.bind(this))},addListener:function(eventType,listener){eventEmitter.on(eventType,listener)},removeListener:function(eventType,listener){eventEmitter.removeListener(eventType,listener)},getDeviceAvailability:function(){return devices},isRTCReady:function(){return rtcReady},isDeviceListAvailable:function(){var isEnumerateDevicesAvailable=navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices;if(isEnumerateDevicesAvailable){return true}return MediaStreamTrack&&MediaStreamTrack.getSources?true:false},isDeviceChangeAvailable:function(){if(RTCBrowserType.isChrome()||RTCBrowserType.isOpera()||RTCBrowserType.isTemasysPluginUsed())return true;return false},stopMediaStream:function(mediaStream){mediaStream.getTracks().forEach(function(track){if(track.stop){track.stop()}});if(mediaStream.stop){mediaStream.stop()}if(mediaStream.jitsiObjectURL){webkitURL.revokeObjectURL(mediaStream.jitsiObjectURL)}},isDesktopSharingEnabled:function(){return screenObtainer.isSupported()}};module.exports=RTCUtils}).call(this,"/modules/RTC/RTCUtils.js")},{"../../JitsiTrackErrors":9,"../../service/RTC/RTCEvents":80,"../../service/RTC/Resolutions":81,"../xmpp/SDPUtil":32,"./RTCBrowserType":17,"./ScreenObtainer":19,"./adapter.screenshare":20,events:44,"jitsi-meet-logger":48}],19:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("./RTCBrowserType");var AdapterJS=require("./adapter.screenshare");var DesktopSharingEventTypes=require("../../service/desktopsharing/DesktopSharingEventTypes");var chromeExtInstalled=false;var chromeExtUpdateRequired=false;var firefoxExtInstalled=null;var reDetectFirefoxExtension=false;var GUM=null;var ScreenObtainer={eventEmitter:null,obtainStream:null,init:function(eventEmitter,options,gum){this.eventEmitter=eventEmitter;var obtainDesktopStream=null;this.options=options=options||{};GUM=gum;if(RTCBrowserType.isFirefox())initFirefoxExtensionDetection(options);var chromeMethod=options.desktopSharingChromeMethod||options.desktopSharing;if(RTCBrowserType.isTemasysPluginUsed()){if(!AdapterJS.WebRTCPlugin.plugin.HasScreensharingFeature){logger.info("Screensharing not supported by this plugin "+"version")}else if(!AdapterJS.WebRTCPlugin.plugin.isScreensharingAvailable){logger.info("Screensharing not available with Temasys plugin on"+" this site")}else{
  3. obtainDesktopStream=obtainWebRTCScreen;logger.info("Using Temasys plugin for desktop sharing")}}else if(RTCBrowserType.isChrome()){if(chromeMethod=="ext"){if(RTCBrowserType.getChromeVersion()>=34){obtainDesktopStream=this.obtainScreenFromExtension;logger.info("Using Chrome extension for desktop sharing");initChromeExtension(options)}else{logger.info("Chrome extension not supported until ver 34")}}else if(chromeMethod=="webrtc"){obtainDesktopStream=obtainWebRTCScreen;logger.info("Using Chrome WebRTC for desktop sharing")}}else if(RTCBrowserType.isFirefox()){if(options.desktopSharingFirefoxDisabled){obtainDesktopStream=null}else if(window.location.protocol==="http:"){logger.log("Screen sharing is not supported over HTTP. "+"Use of HTTPS is required.");obtainDesktopStream=null}else{obtainDesktopStream=this.obtainScreenOnFirefox}}if(!obtainDesktopStream){logger.info("Desktop sharing disabled")}this.obtainStream=obtainDesktopStream},isSupported:function(){return!!this.obtainStream},obtainScreenOnFirefox:function(callback,errorCallback){var self=this;var extensionRequired=false;if(this.options.desktopSharingFirefoxMaxVersionExtRequired===-1||this.options.desktopSharingFirefoxMaxVersionExtRequired>=0&&RTCBrowserType.getFirefoxVersion()<=this.options.desktopSharingFirefoxMaxVersionExtRequired){extensionRequired=true;logger.log("Jidesha extension required on firefox version "+RTCBrowserType.getFirefoxVersion())}if(!extensionRequired||firefoxExtInstalled===true){obtainWebRTCScreen(callback,errorCallback);return}if(reDetectFirefoxExtension){reDetectFirefoxExtension=false;initFirefoxExtensionDetection(this.options)}if(firefoxExtInstalled===null){window.setTimeout(function(){if(firefoxExtInstalled===null)firefoxExtInstalled=false;self.obtainScreenOnFirefox(callback,errorCallback)},300);logger.log("Waiting for detection of jidesha on firefox to "+"finish.");return}firefoxExtInstalled=null;reDetectFirefoxExtension=true;this.eventEmitter.emit(DesktopSharingEventTypes.FIREFOX_EXTENSION_NEEDED,this.options.desktopSharingFirefoxExtensionURL);errorCallback("Firefox extension required.")},obtainScreenFromExtension:function(streamCallback,failCallback){if(chromeExtInstalled){doGetStreamFromExtension(this.options,streamCallback,failCallback)}else{if(chromeExtUpdateRequired){alert("Jitsi Desktop Streamer requires update. "+"Changes will take effect after next Chrome restart.")}chrome.webstore.install(getWebStoreInstallUrl(this.options),function(arg){logger.log("Extension installed successfully",arg);chromeExtInstalled=true;window.setTimeout(function(){doGetStreamFromExtension(this.options,streamCallback,failCallback)},500)},function(arg){logger.log("Failed to install the extension",arg);failCallback(arg)})}}};function obtainWebRTCScreen(streamCallback,failCallback){GUM(["screen"],streamCallback,failCallback)}function getWebStoreInstallUrl(options){return"https://chrome.google.com/webstore/detail/"+(options.desktopSharingChromeExtId||options.chromeExtensionId)}function isUpdateRequired(minVersion,extVersion){try{var s1=minVersion.split(".");var s2=extVersion.split(".");var len=Math.max(s1.length,s2.length);for(var i=0;i<len;i++){var n1=0,n2=0;if(i<s1.length)n1=parseInt(s1[i]);if(i<s2.length)n2=parseInt(s2[i]);if(isNaN(n1)||isNaN(n2)){return true}else if(n1!==n2){return n1>n2}}return false}catch(e){logger.error("Failed to parse extension version",e);return true}}function checkChromeExtInstalled(callback,options){if(!chrome||!chrome.runtime){callback(false,false);return}chrome.runtime.sendMessage(options.desktopSharingChromeExtId||options.chromeExtensionId,{getVersion:true},function(response){if(!response||!response.version){logger.warn("Extension not installed?: ",chrome.runtime.lastError);callback(false,false);return}var extVersion=response.version;logger.log("Extension version is: "+extVersion);var updateRequired=isUpdateRequired(options.desktopSharingChromeMinExtVersion||options.minChromeExtVersion,extVersion);callback(!updateRequired,updateRequired)})}function doGetStreamFromExtension(options,streamCallback,failCallback){chrome.runtime.sendMessage(options.desktopSharingChromeExtId||options.chromeExtensionId,{getStream:true,sources:options.desktopSharingChromeSources||options.desktopSharingSources},function(response){if(!response){failCallback(chrome.runtime.lastError);return}logger.log("Response from extension: "+response);if(response.streamId){GUM(["desktop"],function(stream){streamCallback(stream)},failCallback,{desktopStream:response.streamId})}else{failCallback("Extension failed to get the stream")}})}function initInlineInstalls(options){$("link[rel=chrome-webstore-item]").attr("href",getWebStoreInstallUrl(options))}function initChromeExtension(options){initInlineInstalls(options);checkChromeExtInstalled(function(installed,updateRequired){chromeExtInstalled=installed;chromeExtUpdateRequired=updateRequired;logger.info("Chrome extension installed: "+chromeExtInstalled+" updateRequired: "+chromeExtUpdateRequired)},options)}function initFirefoxExtensionDetection(options){if(options.desktopSharingFirefoxDisabled){return}if(firefoxExtInstalled===false||firefoxExtInstalled===true)return;if(!options.desktopSharingFirefoxExtId){firefoxExtInstalled=false;return}var img=document.createElement("img");img.onload=function(){logger.log("Detected firefox screen sharing extension.");firefoxExtInstalled=true};img.onerror=function(){logger.log("Detected lack of firefox screen sharing extension.");firefoxExtInstalled=false};var src="chrome://"+options.desktopSharingFirefoxExtId.replace("@",".")+"/content/"+document.location.hostname+".png";img.setAttribute("src",src)}module.exports=ScreenObtainer}).call(this,"/modules/RTC/ScreenObtainer.js")},{"../../service/desktopsharing/DesktopSharingEventTypes":84,"./RTCBrowserType":17,"./adapter.screenshare":20,"jitsi-meet-logger":48}],20:[function(require,module,exports){(function(__filename){var console=require("jitsi-meet-logger").getLogger(__filename);var AdapterJS=AdapterJS||{};if(typeof exports!=="undefined"){module.exports=AdapterJS}AdapterJS.options=AdapterJS.options||{};AdapterJS.VERSION="0.12.3";AdapterJS.onwebrtcready=AdapterJS.onwebrtcready||function(isUsingPlugin){};AdapterJS.webRTCReady=function(callback){if(typeof callback!=="function"){throw new Error("Callback provided is not a function")}if(true===AdapterJS.onwebrtcreadyDone){callback(null!==AdapterJS.WebRTCPlugin.plugin)}else{AdapterJS.onwebrtcready=callback}};AdapterJS.WebRTCPlugin=AdapterJS.WebRTCPlugin||{};AdapterJS.WebRTCPlugin.pluginInfo={prefix:"Tem",plugName:"TemWebRTCPlugin",pluginId:"plugin0",type:"application/x-temwebrtcplugin",onload:"__TemWebRTCReady0",portalLink:"http://skylink.io/plugin/",downloadLink:null,companyName:"Temasys"};if(!!navigator.platform.match(/^Mac/i)){AdapterJS.WebRTCPlugin.pluginInfo.downloadLink="http://bit.ly/1n77hco"}else if(!!navigator.platform.match(/^Win/i)){AdapterJS.WebRTCPlugin.pluginInfo.downloadLink="http://bit.ly/1kkS4FN"}AdapterJS.WebRTCPlugin.TAGS={NONE:"none",AUDIO:"audio",VIDEO:"video"};AdapterJS.WebRTCPlugin.pageId=Math.random().toString(36).slice(2);AdapterJS.WebRTCPlugin.plugin=null;AdapterJS.WebRTCPlugin.setLogLevel=null;AdapterJS.WebRTCPlugin.defineWebRTCInterface=null;AdapterJS.WebRTCPlugin.isPluginInstalled=null;AdapterJS.WebRTCPlugin.pluginInjectionInterval=null;AdapterJS.WebRTCPlugin.injectPlugin=null;AdapterJS.WebRTCPlugin.PLUGIN_STATES={NONE:0,INITIALIZING:1,INJECTING:2,INJECTED:3,READY:4};AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.NONE;AdapterJS.onwebrtcreadyDone=false;AdapterJS.WebRTCPlugin.PLUGIN_LOG_LEVELS={NONE:"NONE",ERROR:"ERROR",WARNING:"WARNING",INFO:"INFO",VERBOSE:"VERBOSE",SENSITIVE:"SENSITIVE"};AdapterJS.WebRTCPlugin.WaitForPluginReady=null;AdapterJS.WebRTCPlugin.callWhenPluginReady=null;__TemWebRTCReady0=function(){if(document.readyState==="complete"){AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY;AdapterJS.maybeThroughWebRTCReady()}else{AdapterJS.WebRTCPlugin.documentReadyInterval=setInterval(function(){if(document.readyState==="complete"){clearInterval(AdapterJS.WebRTCPlugin.documentReadyInterval);AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY;AdapterJS.maybeThroughWebRTCReady()}},100)}};AdapterJS.maybeThroughWebRTCReady=function(){if(!AdapterJS.onwebrtcreadyDone){AdapterJS.onwebrtcreadyDone=true;if(typeof AdapterJS.onwebrtcready==="function"){AdapterJS.onwebrtcready(AdapterJS.WebRTCPlugin.plugin!==null)}}};AdapterJS.TEXT={PLUGIN:{REQUIRE_INSTALLATION:"This website requires you to install a WebRTC-enabling plugin "+"to work on this browser.",NOT_SUPPORTED:"Your browser does not support WebRTC.",BUTTON:"Install Now"},REFRESH:{REQUIRE_REFRESH:"Please refresh page",BUTTON:"Refresh Page"}};AdapterJS._iceConnectionStates={starting:"starting",checking:"checking",connected:"connected",completed:"connected",done:"completed",disconnected:"disconnected",failed:"failed",closed:"closed"};AdapterJS._iceConnectionFiredStates=[];AdapterJS.isDefined=null;AdapterJS.parseWebrtcDetectedBrowser=function(){var hasMatch,checkMatch=navigator.userAgent.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];if(/trident/i.test(checkMatch[1])){hasMatch=/\brv[ :]+(\d+)/g.exec(navigator.userAgent)||[];webrtcDetectedBrowser="IE";webrtcDetectedVersion=parseInt(hasMatch[1]||"0",10)}else if(checkMatch[1]==="Chrome"){hasMatch=navigator.userAgent.match(/\bOPR\/(\d+)/);if(hasMatch!==null){webrtcDetectedBrowser="opera";webrtcDetectedVersion=parseInt(hasMatch[1],10)}}if(navigator.userAgent.indexOf("Safari")){if(typeof InstallTrigger!=="undefined"){webrtcDetectedBrowser="firefox"}else if(false||!!document.documentMode){webrtcDetectedBrowser="IE"}else if(Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0){webrtcDetectedBrowser="safari"}else if(!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0){webrtcDetectedBrowser="opera"}else if(!!window.chrome){webrtcDetectedBrowser="chrome"}}if(!webrtcDetectedBrowser){webrtcDetectedVersion=checkMatch[1]}if(!webrtcDetectedVersion){try{checkMatch=checkMatch[2]?[checkMatch[1],checkMatch[2]]:[navigator.appName,navigator.appVersion,"-?"];if((hasMatch=navigator.userAgent.match(/version\/(\d+)/i))!==null){checkMatch.splice(1,1,hasMatch[1])}webrtcDetectedVersion=parseInt(checkMatch[1],10)}catch(error){}}};AdapterJS.maybeFixConfiguration=function(pcConfig){if(pcConfig===null){return}for(var i=0;i<pcConfig.iceServers.length;i++){if(pcConfig.iceServers[i].hasOwnProperty("urls")){pcConfig.iceServers[i].url=pcConfig.iceServers[i].urls;delete pcConfig.iceServers[i].urls}}};AdapterJS.addEvent=function(elem,evnt,func){if(elem.addEventListener){elem.addEventListener(evnt,func,false)}else if(elem.attachEvent){elem.attachEvent("on"+evnt,func)}else{elem[evnt]=func}};AdapterJS.renderNotificationBar=function(text,buttonText,buttonLink,openNewTab,displayRefreshBar){if(document.readyState!=="complete"){return}var w=window;var i=document.createElement("iframe");i.style.position="fixed";i.style.top="-41px";i.style.left=0;i.style.right=0;i.style.width="100%";i.style.height="40px";i.style.backgroundColor="#ffffe1";i.style.border="none";i.style.borderBottom="1px solid #888888";i.style.zIndex="9999999";if(typeof i.style.webkitTransition==="string"){i.style.webkitTransition="all .5s ease-out"}else if(typeof i.style.transition==="string"){i.style.transition="all .5s ease-out"}document.body.appendChild(i);c=i.contentWindow?i.contentWindow:i.contentDocument.document?i.contentDocument.document:i.contentDocument;c.document.open();c.document.write('<span style="display: inline-block; font-family: Helvetica, Arial,'+"sans-serif; font-size: .9rem; padding: 4px; vertical-align: "+'middle; cursor: default;">'+text+"</span>");if(buttonText&&buttonLink){c.document.write('<button id="okay">'+buttonText+'</button><button id="cancel">Cancel</button>');c.document.close();AdapterJS.addEvent(c.document.getElementById("okay"),"click",function(e){if(!!displayRefreshBar){AdapterJS.renderNotificationBar(AdapterJS.TEXT.EXTENSION?AdapterJS.TEXT.EXTENSION.REQUIRE_REFRESH:AdapterJS.TEXT.REFRESH.REQUIRE_REFRESH,AdapterJS.TEXT.REFRESH.BUTTON,"javascript:location.reload()")}window.open(buttonLink,!!openNewTab?"_blank":"_top");e.preventDefault();try{event.cancelBubble=true}catch(error){}var pluginInstallInterval=setInterval(function(){if(!isIE){navigator.plugins.refresh(false)}AdapterJS.WebRTCPlugin.isPluginInstalled(AdapterJS.WebRTCPlugin.pluginInfo.prefix,AdapterJS.WebRTCPlugin.pluginInfo.plugName,function(){clearInterval(pluginInstallInterval);AdapterJS.WebRTCPlugin.defineWebRTCInterface()},function(){})},500)});AdapterJS.addEvent(c.document.getElementById("cancel"),"click",function(e){w.document.body.removeChild(i)})}else{c.document.close()}setTimeout(function(){if(typeof i.style.webkitTransform==="string"){i.style.webkitTransform="translateY(40px)"}else if(typeof i.style.transform==="string"){i.style.transform="translateY(40px)"}else{i.style.top="0px"}},300)};webrtcDetectedType=null;webrtcDetectedDCSupport=null;checkMediaDataChannelSettings=function(peerBrowserAgent,peerBrowserVersion,callback,constraints){if(typeof callback!=="function"){return}var beOfferer=true;var isLocalFirefox=webrtcDetectedBrowser==="firefox";var isLocalFirefoxInterop=webrtcDetectedType==="moz"&&webrtcDetectedVersion>30;var isPeerFirefox=peerBrowserAgent==="firefox";var isPeerFirefoxInterop=peerBrowserAgent==="firefox"&&(peerBrowserVersion?peerBrowserVersion>30:false);if(isLocalFirefox&&isPeerFirefox||isLocalFirefoxInterop){try{delete constraints.mandatory.MozDontOfferDataChannel}catch(error){console.error("Failed deleting MozDontOfferDataChannel");console.error(error)}}else if(isLocalFirefox&&!isPeerFirefox){constraints.mandatory.MozDontOfferDataChannel=true}if(!isLocalFirefox){for(var prop in constraints.mandatory){if(constraints.mandatory.hasOwnProperty(prop)){if(prop.indexOf("Moz")!==-1){delete constraints.mandatory[prop]}}}}if(isLocalFirefox&&!isPeerFirefox&&!isLocalFirefoxInterop){beOfferer=false}callback(beOfferer,constraints)};checkIceConnectionState=function(peerId,iceConnectionState,callback){if(typeof callback!=="function"){console.warn("No callback specified in checkIceConnectionState. Aborted.");return}peerId=peerId?peerId:"peer";if(!AdapterJS._iceConnectionFiredStates[peerId]||iceConnectionState===AdapterJS._iceConnectionStates.disconnected||iceConnectionState===AdapterJS._iceConnectionStates.failed||iceConnectionState===AdapterJS._iceConnectionStates.closed){AdapterJS._iceConnectionFiredStates[peerId]=[]}iceConnectionState=AdapterJS._iceConnectionStates[iceConnectionState];if(AdapterJS._iceConnectionFiredStates[peerId].indexOf(iceConnectionState)<0){AdapterJS._iceConnectionFiredStates[peerId].push(iceConnectionState);if(iceConnectionState===AdapterJS._iceConnectionStates.connected){setTimeout(function(){AdapterJS._iceConnectionFiredStates[peerId].push(AdapterJS._iceConnectionStates.done);callback(AdapterJS._iceConnectionStates.done)},1e3)}callback(iceConnectionState)}return};createIceServer=null;createIceServers=null;RTCPeerConnection=null;RTCSessionDescription=typeof RTCSessionDescription==="function"?RTCSessionDescription:null;RTCIceCandidate=typeof RTCIceCandidate==="function"?RTCIceCandidate:null;getUserMedia=null;attachMediaStream=null;reattachMediaStream=null;webrtcDetectedBrowser=null;webrtcDetectedVersion=null;if(navigator.mozGetUserMedia){webrtcDetectedBrowser="firefox";webrtcDetectedVersion=parseInt(navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1],10);webrtcDetectedType="moz";webrtcDetectedDCSupport="SCTP";RTCPeerConnection=function(pcConfig,pcConstraints){AdapterJS.maybeFixConfiguration(pcConfig);return new mozRTCPeerConnection(pcConfig,pcConstraints)};RTCSessionDescription=mozRTCSessionDescription;window.RTCSessionDescription=RTCSessionDescription;RTCIceCandidate=mozRTCIceCandidate;window.RTCIceCandidate=RTCIceCandidate;window.getUserMedia=navigator.mozGetUserMedia.bind(navigator);navigator.getUserMedia=window.getUserMedia;MediaStreamTrack.getSources=function(successCb){setTimeout(function(){var infos=[{kind:"audio",id:"default",label:"",facing:""},{kind:"video",id:"default",label:"",facing:""}];successCb(infos)},0)};createIceServer=function(url,username,password){var iceServer=null;var url_parts=url.split(":");if(url_parts[0].indexOf("stun")===0){iceServer={url:url}}else if(url_parts[0].indexOf("turn")===0){if(webrtcDetectedVersion<27){var turn_url_parts=url.split("?");if(turn_url_parts.length===1||turn_url_parts[1].indexOf("transport=udp")===0){iceServer={url:turn_url_parts[0],credential:password,username:username}}}else{iceServer={url:url,credential:password,username:username}}}return iceServer};createIceServers=function(urls,username,password){var iceServers=[];for(var i=0;i<urls.length;i++){var iceServer=createIceServer(urls[i],username,password);if(iceServer!==null){iceServers.push(iceServer)}}return iceServers};attachMediaStream=function(element,stream){element.mozSrcObject=stream;if(stream!==null)element.play();return element};reattachMediaStream=function(to,from){to.mozSrcObject=from.mozSrcObject;to.play();return to};MediaStreamTrack.getSources=MediaStreamTrack.getSources||function(callback){if(!callback){throw new TypeError("Failed to execute 'getSources' on 'MediaStreamTrack'"+": 1 argument required, but only 0 present.")}return callback([])};if(!MediaStream.prototype.getVideoTracks){MediaStream.prototype.getVideoTracks=function(){return[]}}if(!MediaStream.prototype.getAudioTracks){MediaStream.prototype.getAudioTracks=function(){return[]}}AdapterJS.maybeThroughWebRTCReady()}else if(navigator.webkitGetUserMedia){webrtcDetectedBrowser="chrome";webrtcDetectedType="webkit";webrtcDetectedVersion=parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2],10);var checkIfOpera=navigator.userAgent.match(/\bOPR\/(\d+)/);if(checkIfOpera!==null){webrtcDetectedBrowser="opera";webrtcDetectedVersion=parseInt(checkIfOpera[1],10)}if(webrtcDetectedBrowser==="chrome"&&webrtcDetectedVersion>=31||webrtcDetectedBrowser==="opera"&&webrtcDetectedVersion>=20){webrtcDetectedDCSupport="SCTP"}else if(webrtcDetectedBrowser==="chrome"&&webrtcDetectedVersion<30&&webrtcDetectedVersion>24){webrtcDetectedDCSupport="RTP"}else{webrtcDetectedDCSupport=""}createIceServer=function(url,username,password){var iceServer=null;var url_parts=url.split(":");if(url_parts[0].indexOf("stun")===0){iceServer={url:url}}else if(url_parts[0].indexOf("turn")===0){iceServer={url:url,credential:password,username:username}}return iceServer};createIceServers=function(urls,username,password){var iceServers=[];if(webrtcDetectedVersion>=34){iceServers={urls:urls,credential:password,username:username}}else{for(var i=0;i<urls.length;i++){var iceServer=createIceServer(urls[i],username,password);if(iceServer!==null){iceServers.push(iceServer)}}}return iceServers};RTCPeerConnection=function(pcConfig,pcConstraints){if(webrtcDetectedVersion<34){AdapterJS.maybeFixConfiguration(pcConfig)}return new webkitRTCPeerConnection(pcConfig,pcConstraints)};window.getUserMedia=navigator.webkitGetUserMedia.bind(navigator);navigator.getUserMedia=window.getUserMedia;attachMediaStream=function(element,stream){if(typeof element.srcObject!=="undefined"){element.srcObject=stream}else if(typeof element.mozSrcObject!=="undefined"){element.mozSrcObject=stream}else if(typeof element.src!=="undefined"){element.src=stream===null?"":URL.createObjectURL(stream)}else{console.log("Error attaching stream to element.")}return element};reattachMediaStream=function(to,from){to.src=from.src;return to};AdapterJS.maybeThroughWebRTCReady()}else if(navigator.mediaDevices&&navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)){webrtcDetectedBrowser="edge";webrtcDetectedVersion=parseInt(navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)[2],10);webrtcMinimumVersion=12;window.getUserMedia=navigator.getUserMedia.bind(navigator);attachMediaStream=function(element,stream){element.srcObject=stream;return element};reattachMediaStream=function(to,from){to.srcObject=from.srcObject;return to};AdapterJS.maybeThroughWebRTCReady()}else{if(typeof console!=="object"||typeof console.log!=="function"){console={}||console;console.log=function(arg){};console.info=function(arg){};console.error=function(arg){};console.dir=function(arg){};console.exception=function(arg){};console.trace=function(arg){};console.warn=function(arg){};console.count=function(arg){};console.debug=function(arg){};console.count=function(arg){};console.time=function(arg){};console.timeEnd=function(arg){};console.group=function(arg){};console.groupCollapsed=function(arg){};console.groupEnd=function(arg){}}webrtcDetectedType="plugin";webrtcDetectedDCSupport="plugin";AdapterJS.parseWebrtcDetectedBrowser();isIE=webrtcDetectedBrowser==="IE";AdapterJS.WebRTCPlugin.WaitForPluginReady=function(){while(AdapterJS.WebRTCPlugin.pluginState!==AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){}};AdapterJS.WebRTCPlugin.callWhenPluginReady=function(callback){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){callback()}else{var checkPluginReadyState=setInterval(function(){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){clearInterval(checkPluginReadyState);callback()}},100)}};AdapterJS.WebRTCPlugin.setLogLevel=function(logLevel){AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.setLogLevel(logLevel)})};AdapterJS.WebRTCPlugin.injectPlugin=function(){if(document.readyState!=="complete"){return}if(AdapterJS.WebRTCPlugin.pluginState!==AdapterJS.WebRTCPlugin.PLUGIN_STATES.INITIALIZING){return}AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTING;if(webrtcDetectedBrowser==="IE"&&webrtcDetectedVersion<=10){var frag=document.createDocumentFragment();AdapterJS.WebRTCPlugin.plugin=document.createElement("div");AdapterJS.WebRTCPlugin.plugin.innerHTML='<object id="'+AdapterJS.WebRTCPlugin.pluginInfo.pluginId+'" type="'+AdapterJS.WebRTCPlugin.pluginInfo.type+'" '+'width="1" height="1">'+'<param name="pluginId" value="'+AdapterJS.WebRTCPlugin.pluginInfo.pluginId+'" /> '+'<param name="windowless" value="false" /> '+'<param name="pageId" value="'+AdapterJS.WebRTCPlugin.pageId+'" /> '+'<param name="onload" value="'+AdapterJS.WebRTCPlugin.pluginInfo.onload+'" />'+'<param name="tag" value="'+AdapterJS.WebRTCPlugin.TAGS.NONE+'" />'+(AdapterJS.options.getAllCams?'<param name="forceGetAllCams" value="True" />':"")+"</object>";while(AdapterJS.WebRTCPlugin.plugin.firstChild){frag.appendChild(AdapterJS.WebRTCPlugin.plugin.firstChild)}document.body.appendChild(frag);AdapterJS.WebRTCPlugin.plugin=document.getElementById(AdapterJS.WebRTCPlugin.pluginInfo.pluginId)}else{AdapterJS.WebRTCPlugin.plugin=document.createElement("object");AdapterJS.WebRTCPlugin.plugin.id=AdapterJS.WebRTCPlugin.pluginInfo.pluginId;if(isIE){AdapterJS.WebRTCPlugin.plugin.width="1px";AdapterJS.WebRTCPlugin.plugin.height="1px"}else{AdapterJS.WebRTCPlugin.plugin.width="0px";AdapterJS.WebRTCPlugin.plugin.height="0px"}AdapterJS.WebRTCPlugin.plugin.type=AdapterJS.WebRTCPlugin.pluginInfo.type;AdapterJS.WebRTCPlugin.plugin.innerHTML='<param name="onload" value="'+AdapterJS.WebRTCPlugin.pluginInfo.onload+'">'+'<param name="pluginId" value="'+AdapterJS.WebRTCPlugin.pluginInfo.pluginId+'">'+'<param name="windowless" value="false" /> '+(AdapterJS.options.getAllCams?'<param name="forceGetAllCams" value="True" />':"")+'<param name="pageId" value="'+AdapterJS.WebRTCPlugin.pageId+'">'+'<param name="tag" value="'+AdapterJS.WebRTCPlugin.TAGS.NONE+'" />';document.body.appendChild(AdapterJS.WebRTCPlugin.plugin)}AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INJECTED};AdapterJS.WebRTCPlugin.isPluginInstalled=function(comName,plugName,installedCb,notInstalledCb){if(!isIE){var pluginArray=navigator.plugins;for(var i=0;i<pluginArray.length;i++){if(pluginArray[i].name.indexOf(plugName)>=0){installedCb();return}}notInstalledCb()}else{try{var axo=new ActiveXObject(comName+"."+plugName)}catch(e){notInstalledCb();return}installedCb()}};AdapterJS.WebRTCPlugin.defineWebRTCInterface=function(){if(AdapterJS.WebRTCPlugin.pluginState===AdapterJS.WebRTCPlugin.PLUGIN_STATES.READY){console.error("AdapterJS - WebRTC interface has already been defined");return}AdapterJS.WebRTCPlugin.pluginState=AdapterJS.WebRTCPlugin.PLUGIN_STATES.INITIALIZING;AdapterJS.isDefined=function(variable){return variable!==null&&variable!==undefined};createIceServer=function(url,username,password){var iceServer=null;var url_parts=url.split(":");if(url_parts[0].indexOf("stun")===0){iceServer={url:url,hasCredentials:false}}else if(url_parts[0].indexOf("turn")===0){iceServer={url:url,hasCredentials:true,credential:password,username:username}}return iceServer};createIceServers=function(urls,username,password){var iceServers=[];for(var i=0;i<urls.length;++i){iceServers.push(createIceServer(urls[i],username,password))}return iceServers};RTCSessionDescription=function(info){AdapterJS.WebRTCPlugin.WaitForPluginReady();return AdapterJS.WebRTCPlugin.plugin.ConstructSessionDescription(info.type,info.sdp)};RTCPeerConnection=function(servers,constraints){var iceServers=null;if(servers){iceServers=servers.iceServers;for(var i=0;i<iceServers.length;i++){if(iceServers[i].urls&&!iceServers[i].url){iceServers[i].url=iceServers[i].urls}iceServers[i].hasCredentials=AdapterJS.isDefined(iceServers[i].username)&&AdapterJS.isDefined(iceServers[i].credential)}}var mandatory=constraints&&constraints.mandatory?constraints.mandatory:null;var optional=constraints&&constraints.optional?constraints.optional:null;AdapterJS.WebRTCPlugin.WaitForPluginReady();return AdapterJS.WebRTCPlugin.plugin.PeerConnection(AdapterJS.WebRTCPlugin.pageId,iceServers,mandatory,optional)};MediaStreamTrack={};MediaStreamTrack.getSources=function(callback){AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.GetSources(callback)})};window.getUserMedia=function(constraints,successCallback,failureCallback){constraints.audio=constraints.audio||false;constraints.video=constraints.video||false;AdapterJS.WebRTCPlugin.callWhenPluginReady(function(){AdapterJS.WebRTCPlugin.plugin.getUserMedia(constraints,successCallback,failureCallback)})};window.navigator.getUserMedia=window.getUserMedia;attachMediaStream=function(element,stream){if(!element||!element.parentNode){return}var streamId;if(stream===null){streamId=""}else{if(typeof stream.enableSoundTracks!=="undefined"){stream.enableSoundTracks(true)}streamId=stream.id}var elementId=element.id.length===0?Math.random().toString(36).slice(2):element.id;var nodeName=element.nodeName.toLowerCase();if(nodeName!=="object"){var tag;switch(nodeName){case"audio":tag=AdapterJS.WebRTCPlugin.TAGS.AUDIO;break;case"video":tag=AdapterJS.WebRTCPlugin.TAGS.VIDEO;break;default:tag=AdapterJS.WebRTCPlugin.TAGS.NONE}var frag=document.createDocumentFragment();var temp=document.createElement("div");var classHTML="";if(element.className){classHTML='class="'+element.className+'" '}else if(element.attributes&&element.attributes["class"]){classHTML='class="'+element.attributes["class"].value+'" '}temp.innerHTML='<object id="'+elementId+'" '+classHTML+'type="'+AdapterJS.WebRTCPlugin.pluginInfo.type+'">'+'<param name="pluginId" value="'+elementId+'" /> '+'<param name="pageId" value="'+AdapterJS.WebRTCPlugin.pageId+'" /> '+'<param name="windowless" value="true" /> '+'<param name="streamId" value="'+streamId+'" /> '+'<param name="tag" value="'+tag+'" /> '+"</object>";while(temp.firstChild){frag.appendChild(temp.firstChild)}var height="";var width="";if(element.clientWidth||element.clientHeight){width=element.clientWidth;height=element.clientHeight}else if(element.width||element.height){width=element.width;height=element.height}element.parentNode.insertBefore(frag,element);frag=document.getElementById(elementId);frag.width=width;frag.height=height;element.parentNode.removeChild(element)}else{var children=element.children;for(var i=0;i!==children.length;++i){if(children[i].name==="streamId"){children[i].value=streamId;break}}element.setStreamId(streamId)}var newElement=document.getElementById(elementId);AdapterJS.forwardEventHandlers(newElement,element,Object.getPrototypeOf(element));return newElement};reattachMediaStream=function(to,from){var stream=null;var children=from.children;for(var i=0;i!==children.length;++i){if(children[i].name==="streamId"){AdapterJS.WebRTCPlugin.WaitForPluginReady();stream=AdapterJS.WebRTCPlugin.plugin.getStreamWithId(AdapterJS.WebRTCPlugin.pageId,children[i].value);break}}if(stream!==null){return attachMediaStream(to,stream)}else{console.log("Could not find the stream associated with this element")}};AdapterJS.forwardEventHandlers=function(destElem,srcElem,prototype){properties=Object.getOwnPropertyNames(prototype);for(prop in properties){propName=properties[prop];if(typeof propName.slice==="function"){if(propName.slice(0,2)=="on"&&srcElem[propName]!=null){if(isIE){destElem.attachEvent(propName,srcElem[propName])}else{destElem.addEventListener(propName.slice(2),srcElem[propName],false)}}else{}}}var subPrototype=Object.getPrototypeOf(prototype);if(subPrototype!=null){AdapterJS.forwardEventHandlers(destElem,srcElem,subPrototype)}};RTCIceCandidate=function(candidate){if(!candidate.sdpMid){candidate.sdpMid=""}AdapterJS.WebRTCPlugin.WaitForPluginReady();return AdapterJS.WebRTCPlugin.plugin.ConstructIceCandidate(candidate.sdpMid,candidate.sdpMLineIndex,candidate.candidate)};AdapterJS.addEvent(document,"readystatechange",AdapterJS.WebRTCPlugin.injectPlugin);AdapterJS.WebRTCPlugin.injectPlugin()};AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb=AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb||function(){AdapterJS.addEvent(document,"readystatechange",AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv);AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv()};AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCbPriv=function(){if(AdapterJS.options.hidePluginInstallPrompt){return}var downloadLink=AdapterJS.WebRTCPlugin.pluginInfo.downloadLink;if(downloadLink){var popupString;if(AdapterJS.WebRTCPlugin.pluginInfo.portalLink){popupString="This website requires you to install the "+' <a href="'+AdapterJS.WebRTCPlugin.pluginInfo.portalLink+'" target="_blank">'+AdapterJS.WebRTCPlugin.pluginInfo.companyName+" WebRTC Plugin</a>"+" to work on this browser."}else{popupString=AdapterJS.TEXT.PLUGIN.REQUIRE_INSTALLATION}AdapterJS.renderNotificationBar(popupString,AdapterJS.TEXT.PLUGIN.BUTTON,downloadLink)}else{AdapterJS.renderNotificationBar(AdapterJS.TEXT.PLUGIN.NOT_SUPPORTED)}};AdapterJS.WebRTCPlugin.isPluginInstalled(AdapterJS.WebRTCPlugin.pluginInfo.prefix,AdapterJS.WebRTCPlugin.pluginInfo.plugName,AdapterJS.WebRTCPlugin.defineWebRTCInterface,AdapterJS.WebRTCPlugin.pluginNeededButNotInstalledCb)}}).call(this,"/modules/RTC/adapter.screenshare.js")},{"jitsi-meet-logger":48}],21:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);function supportsLocalStorage(){try{return"localStorage"in window&&window.localStorage!==null}catch(e){logger.log("localstorage is not supported");return false}}function generateUniqueId(){function _p8(){return(Math.random().toString(16)+"000000000").substr(2,8)}return _p8()+_p8()+_p8()+_p8()}function Settings(conferenceID){this.displayName="";this.userId;this.confSettings=null;this.conferenceID=conferenceID;if(supportsLocalStorage()){if(!window.localStorage.getItem(conferenceID))this.confSettings={};else this.confSettings=JSON.parse(window.localStorage.getItem(conferenceID));if(!this.confSettings.jitsiMeetId){this.confSettings.jitsiMeetId=generateUniqueId();logger.log("generated id",this.confSettings.jitsiMeetId);this.save()}this.userId=this.confSettings.jitsiMeetId||"";this.displayName=this.confSettings.displayname||""}else{logger.log("local storage is not supported");this.userId=generateUniqueId();
  4. }}Settings.prototype.save=function(){if(!supportsLocalStorage())window.localStorage.setItem(this.conferenceID,JSON.stringify(this.confSettings))};Settings.prototype.setDisplayName=function(newDisplayName){this.displayName=newDisplayName;if(this.confSettings!=null)this.confSettings.displayname=displayName;this.save();return this.displayName},Settings.prototype.getSettings=function(){return{displayName:this.displayName,uid:this.userId}},module.exports=Settings}).call(this,"/modules/settings/Settings.js")},{"jitsi-meet-logger":48}],22:[function(require,module,exports){var RTCBrowserType=require("../RTC/RTCBrowserType");var WEBAUDIO_ANALYZER_FFT_SIZE=2048;var WEBAUDIO_ANALYZER_SMOOTING_TIME=.8;function timeDomainDataToAudioLevel(samples){var maxVolume=0;var length=samples.length;for(var i=0;i<length;i++){if(maxVolume<samples[i])maxVolume=samples[i]}return parseFloat(((maxVolume-127)/128).toFixed(3))}function animateLevel(newLevel,lastLevel){var value=0;var diff=lastLevel-newLevel;if(diff>.2){value=lastLevel-.2}else if(diff<-.4){value=lastLevel+.4}else{value=newLevel}return parseFloat(value.toFixed(3))}function LocalStatsCollector(stream,interval,callback){window.AudioContext=window.AudioContext||window.webkitAudioContext;this.stream=stream;this.intervalId=null;this.intervalMilis=interval;this.audioLevel=0;this.callback=callback}LocalStatsCollector.prototype.start=function(){if(!window.AudioContext||RTCBrowserType.isTemasysPluginUsed())return;var context=new AudioContext;var analyser=context.createAnalyser();analyser.smoothingTimeConstant=WEBAUDIO_ANALYZER_SMOOTING_TIME;analyser.fftSize=WEBAUDIO_ANALYZER_FFT_SIZE;var source=context.createMediaStreamSource(this.stream);source.connect(analyser);var self=this;this.intervalId=setInterval(function(){var array=new Uint8Array(analyser.frequencyBinCount);analyser.getByteTimeDomainData(array);var audioLevel=timeDomainDataToAudioLevel(array);if(audioLevel!=self.audioLevel){self.audioLevel=animateLevel(audioLevel,self.audioLevel);self.callback(self.audioLevel)}},this.intervalMilis)};LocalStatsCollector.prototype.stop=function(){if(this.intervalId){clearInterval(this.intervalId);this.intervalId=null}};module.exports=LocalStatsCollector},{"../RTC/RTCBrowserType":17}],23:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("../RTC/RTCBrowserType");var StatisticsEvents=require("../../service/statistics/Events");var browserSupported=RTCBrowserType.isChrome()||RTCBrowserType.isOpera();var keyMap={};keyMap[RTCBrowserType.RTC_BROWSER_FIREFOX]={ssrc:"ssrc",packetsReceived:"packetsReceived",packetsLost:"packetsLost",packetsSent:"packetsSent",bytesReceived:"bytesReceived",bytesSent:"bytesSent"};keyMap[RTCBrowserType.RTC_BROWSER_CHROME]={receiveBandwidth:"googAvailableReceiveBandwidth",sendBandwidth:"googAvailableSendBandwidth",remoteAddress:"googRemoteAddress",transportType:"googTransportType",localAddress:"googLocalAddress",activeConnection:"googActiveConnection",ssrc:"ssrc",packetsReceived:"packetsReceived",packetsSent:"packetsSent",packetsLost:"packetsLost",bytesReceived:"bytesReceived",bytesSent:"bytesSent",googFrameHeightReceived:"googFrameHeightReceived",googFrameWidthReceived:"googFrameWidthReceived",googFrameHeightSent:"googFrameHeightSent",googFrameWidthSent:"googFrameWidthSent",audioInputLevel:"audioInputLevel",audioOutputLevel:"audioOutputLevel"};keyMap[RTCBrowserType.RTC_BROWSER_OPERA]=keyMap[RTCBrowserType.RTC_BROWSER_CHROME];function calculatePacketLoss(lostPackets,totalPackets){if(!totalPackets||totalPackets<=0||!lostPackets||lostPackets<=0)return 0;return Math.round(lostPackets/totalPackets*100)}function getStatValue(item,name){var browserType=RTCBrowserType.getBrowserType();if(!keyMap[browserType][name])throw"The property isn't supported!";var key=keyMap[browserType][name];return RTCBrowserType.isChrome()||RTCBrowserType.isOpera()?item.stat(key):item[key]}function formatAudioLevel(audioLevel){return Math.min(Math.max(audioLevel,0),1)}function acceptStat(reportId,reportType,statName){if(reportType=="googCandidatePair"&&statName=="googChannelId")return false;if(reportType=="ssrc"){if(statName=="googTrackId"||statName=="transportId"||statName=="ssrc")return false}return true}function acceptReport(id,type){if(id.substring(0,15)=="googCertificate"||id.substring(0,9)=="googTrack"||id.substring(0,20)=="googLibjingleSession")return false;if(type=="googComponent")return false;return true}function PeerStats(){this.ssrc2Loss={};this.ssrc2AudioLevel={};this.ssrc2bitrate={};this.ssrc2resolution={}}PeerStats.prototype.setSsrcLoss=function(lossRate){this.ssrc2Loss=lossRate};PeerStats.prototype.setSsrcResolution=function(resolution){if(resolution===null&&this.ssrc2resolution[ssrc]){delete this.ssrc2resolution[ssrc]}else if(resolution!==null)this.ssrc2resolution[ssrc]=resolution};PeerStats.prototype.setSsrcBitrate=function(ssrc,bitrate){if(this.ssrc2bitrate[ssrc]){this.ssrc2bitrate[ssrc].download+=bitrate.download;this.ssrc2bitrate[ssrc].upload+=bitrate.upload}else{this.ssrc2bitrate[ssrc]=bitrate}};PeerStats.prototype.setSsrcAudioLevel=function(ssrc,audioLevel){this.ssrc2AudioLevel[ssrc]=formatAudioLevel(audioLevel)};function ConferenceStats(){this.bandwidth={};this.bitrate={};this.packetLoss=null;this.transport=[]}function StatsCollector(peerconnection,audioLevelsInterval,statsInterval,eventEmitter,config){this.peerconnection=peerconnection;this.baselineAudioLevelsReport=null;this.currentAudioLevelsReport=null;this.currentStatsReport=null;this.baselineStatsReport=null;this.audioLevelsIntervalId=null;this.eventEmitter=eventEmitter;this.config=config||{};this.conferenceStats=new ConferenceStats;this.GATHER_INTERVAL=15e3;this.LOG_INTERVAL=6e4;this.gatherStatsIntervalId=null;this.logStatsIntervalId=null;this.statsToBeLogged={timestamps:[],stats:{}};this.audioLevelsIntervalMilis=audioLevelsInterval;this.statsIntervalId=null;this.statsIntervalMilis=statsInterval;this.ssrc2stats={}}module.exports=StatsCollector;StatsCollector.prototype.stop=function(){if(this.audioLevelsIntervalId){clearInterval(this.audioLevelsIntervalId);this.audioLevelsIntervalId=null}if(this.statsIntervalId){clearInterval(this.statsIntervalId);this.statsIntervalId=null}if(this.logStatsIntervalId){clearInterval(this.logStatsIntervalId);this.logStatsIntervalId=null}if(this.gatherStatsIntervalId){clearInterval(this.gatherStatsIntervalId);this.gatherStatsIntervalId=null}};StatsCollector.prototype.errorCallback=function(error){logger.error("Get stats error",error);this.stop()};StatsCollector.prototype.start=function(){var self=this;this.audioLevelsIntervalId=setInterval(function(){self.peerconnection.getStats(function(report){var results=null;if(!report||!report.result||typeof report.result!="function"){results=report}else{results=report.result()}self.currentAudioLevelsReport=results;self.processAudioLevelReport();self.baselineAudioLevelsReport=self.currentAudioLevelsReport},self.errorCallback)},self.audioLevelsIntervalMilis)};StatsCollector.prototype.addStatsToBeLogged=function(reports){var self=this;var num_records=this.statsToBeLogged.timestamps.length;this.statsToBeLogged.timestamps.push((new Date).getTime());reports.map(function(report){if(!acceptReport(report.id,report.type))return;var stat=self.statsToBeLogged.stats[report.id];if(!stat){stat=self.statsToBeLogged.stats[report.id]={}}stat.type=report.type;report.names().map(function(name){if(!acceptStat(report.id,report.type,name))return;var values=stat[name];if(!values){values=stat[name]=[]}while(values.length<num_records){values.push(null)}values.push(report.stat(name))})})};StatsCollector.prototype.processStatsReport=function(){if(!this.baselineStatsReport){return}for(var idx in this.currentStatsReport){var now=this.currentStatsReport[idx];try{if(getStatValue(now,"receiveBandwidth")||getStatValue(now,"sendBandwidth")){this.conferenceStats.bandwidth={download:Math.round(getStatValue(now,"receiveBandwidth")/1e3),upload:Math.round(getStatValue(now,"sendBandwidth")/1e3)}}}catch(e){}if(now.type=="googCandidatePair"){var ip,type,localIP,active;try{ip=getStatValue(now,"remoteAddress");type=getStatValue(now,"transportType");localIP=getStatValue(now,"localAddress");active=getStatValue(now,"activeConnection")}catch(e){}if(!ip||!type||!localIP||active!="true")continue;var addressSaved=false;for(var i=0;i<this.conferenceStats.transport.length;i++){if(this.conferenceStats.transport[i].ip==ip&&this.conferenceStats.transport[i].type==type&&this.conferenceStats.transport[i].localip==localIP){addressSaved=true}}if(addressSaved)continue;this.conferenceStats.transport.push({localip:localIP,ip:ip,type:type});continue}if(now.type=="candidatepair"){if(now.state=="succeeded")continue;var local=this.currentStatsReport[now.localCandidateId];var remote=this.currentStatsReport[now.remoteCandidateId];this.conferenceStats.transport.push({localip:local.ipAddress+":"+local.portNumber,ip:remote.ipAddress+":"+remote.portNumber,type:local.transport})}if(now.type!="ssrc"&&now.type!="outboundrtp"&&now.type!="inboundrtp"){continue}var before=this.baselineStatsReport[idx];if(!before){logger.warn(getStatValue(now,"ssrc")+" not enough data");continue}var ssrc=getStatValue(now,"ssrc");if(!ssrc)continue;var ssrcStats=this.ssrc2stats[ssrc];if(!ssrcStats){ssrcStats=new PeerStats;this.ssrc2stats[ssrc]=ssrcStats}var isDownloadStream=true;var key="packetsReceived";var packetsNow=getStatValue(now,key);if(typeof packetsNow==="undefined"||packetsNow===null){isDownloadStream=false;key="packetsSent";packetsNow=getStatValue(now,key);if(typeof packetsNow==="undefined"||packetsNow===null){console.warn("No packetsReceived nor packetsSent stat found");continue}}if(!packetsNow||packetsNow<0)packetsNow=0;var packetsBefore=getStatValue(before,key);if(!packetsBefore||packetsBefore<0)packetsBefore=0;var packetRate=packetsNow-packetsBefore;if(!packetRate||packetRate<0)packetRate=0;var currentLoss=getStatValue(now,"packetsLost");if(!currentLoss||currentLoss<0)currentLoss=0;var previousLoss=getStatValue(before,"packetsLost");if(!previousLoss||previousLoss<0)previousLoss=0;var lossRate=currentLoss-previousLoss;if(!lossRate||lossRate<0)lossRate=0;var packetsTotal=packetRate+lossRate;ssrcStats.setSsrcLoss(ssrc,{packetsTotal:packetsTotal,packetsLost:lossRate,isDownloadStream:isDownloadStream});var bytesReceived=0,bytesSent=0;if(getStatValue(now,"bytesReceived")){bytesReceived=getStatValue(now,"bytesReceived")-getStatValue(before,"bytesReceived")}if(getStatValue(now,"bytesSent")){bytesSent=getStatValue(now,"bytesSent")-getStatValue(before,"bytesSent")}var time=Math.round((now.timestamp-before.timestamp)/1e3);if(bytesReceived<=0||time<=0){bytesReceived=0}else{bytesReceived=Math.round(bytesReceived*8/time/1e3)}if(bytesSent<=0||time<=0){bytesSent=0}else{bytesSent=Math.round(bytesSent*8/time/1e3)}ssrcStats.setSsrcBitrate(ssrc,{download:bytesReceived,upload:bytesSent});var resolution={height:null,width:null};try{if(getStatValue(now,"googFrameHeightReceived")&&getStatValue(now,"googFrameWidthReceived")){resolution.height=getStatValue(now,"googFrameHeightReceived");resolution.width=getStatValue(now,"googFrameWidthReceived")}else if(getStatValue(now,"googFrameHeightSent")&&getStatValue(now,"googFrameWidthSent")){resolution.height=getStatValue(now,"googFrameHeightSent");resolution.width=getStatValue(now,"googFrameWidthSent")}}catch(e){}if(resolution.height&&resolution.width){ssrcStats.setSsrcResolution(ssrc,resolution)}else{ssrcStats.setSsrcResolution(ssrc,null)}}var self=this;var totalPackets={download:0,upload:0};var lostPackets={download:0,upload:0};var bitrateDownload=0;var bitrateUpload=0;var resolutions={};Object.keys(this.ssrc2stats).forEach(function(jid){Object.keys(self.ssrc2stats[jid].ssrc2Loss).forEach(function(ssrc){var type="upload";if(self.ssrc2stats[jid].ssrc2Loss[ssrc].isDownloadStream)type="download";totalPackets[type]+=self.ssrc2stats[jid].ssrc2Loss[ssrc].packetsTotal;lostPackets[type]+=self.ssrc2stats[jid].ssrc2Loss[ssrc].packetsLost});Object.keys(self.ssrc2stats[jid].ssrc2bitrate).forEach(function(ssrc){bitrateDownload+=self.ssrc2stats[jid].ssrc2bitrate[ssrc].download;bitrateUpload+=self.ssrc2stats[jid].ssrc2bitrate[ssrc].upload;delete self.ssrc2stats[jid].ssrc2bitrate[ssrc]});resolutions[jid]=self.ssrc2stats[jid].ssrc2resolution});this.conferenceStats.bitrate={upload:bitrateUpload,download:bitrateDownload};this.conferenceStats.packetLoss={total:calculatePacketLoss(lostPackets.download+lostPackets.upload,totalPackets.download+totalPackets.upload),download:calculatePacketLoss(lostPackets.download,totalPackets.download),upload:calculatePacketLoss(lostPackets.upload,totalPackets.upload)};this.eventEmitter.emit(StatisticsEvents.CONNECTION_STATS,{bitrate:this.conferenceStats.bitrate,packetLoss:this.conferenceStats.packetLoss,bandwidth:this.conferenceStats.bandwidth,resolution:resolutions,transport:this.conferenceStats.transport});this.conferenceStats.transport=[]};StatsCollector.prototype.processAudioLevelReport=function(){if(!this.baselineAudioLevelsReport){return}for(var idx in this.currentAudioLevelsReport){var now=this.currentAudioLevelsReport[idx];if(now.type!="ssrc"||!getStatValue(now,"packetsReceived")){continue}var before=this.baselineAudioLevelsReport[idx];if(!before){logger.warn(getStatValue(now,"ssrc")+" not enough data");continue}var ssrc=getStatValue(now,"ssrc");if(!ssrc){if(Date.now()-now.timestamp<3e3)logger.warn("No ssrc: ");continue}var ssrcStats=this.ssrc2stats[ssrc];if(!ssrcStats){ssrcStats=new PeerStats;this.ssrc2stats[ssrc]=ssrcStats}var audioLevel=null;try{audioLevel=getStatValue(now,"audioInputLevel");if(!audioLevel)audioLevel=getStatValue(now,"audioOutputLevel")}catch(e){logger.warn("Audio Levels are not available in the statistics.");clearInterval(this.audioLevelsIntervalId);return}if(audioLevel){audioLevel=audioLevel/32767;ssrcStats.setSsrcAudioLevel(ssrc,audioLevel);this.eventEmitter.emit(StatisticsEvents.AUDIO_LEVEL,ssrc,audioLevel)}}}}).call(this,"/modules/statistics/RTPStatsCollector.js")},{"../../service/statistics/Events":85,"../RTC/RTCBrowserType":17,"jitsi-meet-logger":48}],24:[function(require,module,exports){var LocalStats=require("./LocalStatsCollector.js");var RTPStats=require("./RTPStatsCollector.js");var EventEmitter=require("events");var StatisticsEvents=require("../../service/statistics/Events");var eventEmitter=new EventEmitter;function Statistics(){this.rtpStats=null;this.eventEmitter=new EventEmitter}Statistics.prototype.startRemoteStats=function(peerconnection){if(this.rtpStats){this.rtpStats.stop()}this.rtpStats=new RTPStats(peerconnection,200,2e3,this.eventEmitter);this.rtpStats.start()};Statistics.localStats=[];Statistics.startLocalStats=function(stream,callback){var localStats=new LocalStats(stream,200,callback);this.localStats.push(localStats);localStats.start()};Statistics.prototype.addAudioLevelListener=function(listener){this.eventEmitter.on(StatisticsEvents.AUDIO_LEVEL,listener)};Statistics.prototype.removeAudioLevelListener=function(listener){this.eventEmitter.removeListener(StatisticsEvents.AUDIO_LEVEL,listener)};Statistics.prototype.dispose=function(){Statistics.stopAllLocalStats();this.stopRemote();if(this.eventEmitter)this.eventEmitter.removeAllListeners();if(eventEmitter)eventEmitter.removeAllListeners()};Statistics.stopAllLocalStats=function(){for(var i=0;i<this.localStats.length;i++)this.localStats[i].stop();this.localStats=[]};Statistics.stopLocalStats=function(stream){for(var i=0;i<Statistics.localStats.length;i++)if(Statistics.localStats[i].stream===stream){var localStats=Statistics.localStats.splice(i,1);localStats.stop();break}};Statistics.prototype.stopRemote=function(){if(this.rtpStats){this.rtpStats.stop();this.eventEmitter.emit(StatisticsEvents.STOP);this.rtpStats=null}};Statistics.prototype.getPeerSSRCAudioLevel=function(peerJid,ssrc){var peerStats=this.rtpStats.jid2stats[peerJid];return peerStats?peerStats.ssrc2AudioLevel[ssrc]:null};Statistics.LOCAL_JID=require("../../service/statistics/constants").LOCAL_JID;module.exports=Statistics},{"../../service/statistics/Events":85,"../../service/statistics/constants":86,"./LocalStatsCollector.js":22,"./RTPStatsCollector.js":23,events:44}],25:[function(require,module,exports){var ALPHANUM="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";var HEX_DIGITS="0123456789abcdef";function randomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min}function randomElement(arr){return arr[randomInt(0,arr.length-1)]}function randomAlphanumStr(length){var result="";for(var i=0;i<length;i+=1){result+=randomElement(ALPHANUM)}return result}var RandomUtil={randomHexDigit:function(){return randomElement(HEX_DIGITS)},randomHexString:function(len){var ret="";while(len--){ret+=this.randomHexDigit()}return ret},randomElement:randomElement,randomAlphanumStr:randomAlphanumStr};module.exports=RandomUtil},{}],26:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var XMPPEvents=require("../../service/xmpp/XMPPEvents");var Moderator=require("./moderator");var EventEmitter=require("events");var Recorder=require("./recording");var JIBRI_XMLNS="http://jitsi.org/protocol/jibri";var parser={packet2JSON:function(packet,nodes){var self=this;$(packet).children().each(function(index){var tagName=$(this).prop("tagName");var node={tagName:tagName};node.attributes={};$($(this)[0].attributes).each(function(index,attr){node.attributes[attr.name]=attr.value});var text=Strophe.getText($(this)[0]);if(text){node.value=text}node.children=[];nodes.push(node);self.packet2JSON($(this),node.children)})},JSON2packet:function(nodes,packet){for(var i=0;i<nodes.length;i++){var node=nodes[i];if(!node||node===null){continue}packet.c(node.tagName,node.attributes);if(node.value)packet.t(node.value);if(node.children)this.JSON2packet(node.children,packet);packet.up()}}};function filterNodeFromPresenceJSON(pres,nodeName){var res=[];for(var i=0;i<pres.length;i++)if(pres[i].tagName===nodeName)res.push(pres[i]);return res}function ChatRoom(connection,jid,password,XMPP,options){this.eventEmitter=new EventEmitter;this.xmpp=XMPP;this.connection=connection;this.roomjid=Strophe.getBareJidFromJid(jid);this.myroomjid=jid;this.password=password;logger.info("Joined MUC as "+this.myroomjid);this.members={};this.presMap={};this.presHandlers={};this.joined=false;this.role="none";this.focusMucJid=null;this.bridgeIsDown=false;this.options=options||{};this.moderator=new Moderator(this.roomjid,this.xmpp,this.eventEmitter);this.initPresenceMap();this.session=null;var self=this;this.lastPresences={};this.phoneNumber=null;this.phonePin=null}ChatRoom.prototype.initPresenceMap=function(){this.presMap["to"]=this.myroomjid;this.presMap["xns"]="http://jabber.org/protocol/muc";this.presMap["nodes"]=[];this.presMap["nodes"].push({tagName:"user-agent",value:navigator.userAgent,attributes:{xmlns:"http://jitsi.org/jitmeet/user-agent"}})};ChatRoom.prototype.updateDeviceAvailability=function(devices){this.presMap["nodes"].push({tagName:"devices",children:[{tagName:"audio",value:devices.audio},{tagName:"video",value:devices.video}]})};ChatRoom.prototype.join=function(password){if(password)this.password=password;var self=this;this.moderator.allocateConferenceFocus(function(){self.sendPresence(true)}.bind(this))};ChatRoom.prototype.sendPresence=function(fromJoin){if(!this.presMap["to"]||!this.joined&&!fromJoin){return}var pres=$pres({to:this.presMap["to"]});pres.c("x",{xmlns:this.presMap["xns"]});if(this.password){pres.c("password").t(this.password).up()}pres.up();if(this.connection.caps){this.connection.caps.node=this.xmpp.options.clientNode;pres.c("c",this.connection.caps.generateCapsAttrs()).up()}parser.JSON2packet(this.presMap.nodes,pres);this.connection.send(pres)};ChatRoom.prototype.doLeave=function(){logger.log("do leave",this.myroomjid);var pres=$pres({to:this.myroomjid,type:"unavailable"});this.presMap.length=0;this.connection.send(pres)};ChatRoom.prototype.createNonAnonymousRoom=function(){var getForm=$iq({type:"get",to:this.roomjid}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}).c("x",{xmlns:"jabber:x:data",type:"submit"});var self=this;this.connection.sendIQ(getForm,function(form){if(!$(form).find('>query>x[xmlns="jabber:x:data"]'+'>field[var="muc#roomconfig_whois"]').length){logger.error("non-anonymous rooms not supported");return}var formSubmit=$iq({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});formSubmit.c("x",{xmlns:"jabber:x:data",type:"submit"});formSubmit.c("field",{"var":"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up();formSubmit.c("field",{"var":"muc#roomconfig_whois"}).c("value").t("anyone").up().up();self.connection.sendIQ(formSubmit)},function(error){logger.error("Error getting room configuration form")})};ChatRoom.prototype.onPresence=function(pres){var from=pres.getAttribute("from");var member={};member.show=$(pres).find(">show").text();member.status=$(pres).find(">status").text();var tmp=$(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>item');member.affiliation=tmp.attr("affiliation");member.role=tmp.attr("role");member.jid=tmp.attr("jid");member.isFocus=false;if(member.jid&&member.jid.indexOf(this.moderator.getFocusUserJid()+"/")===0){member.isFocus=true}$(pres).find(">x").remove();var nodes=[];parser.packet2JSON(pres,nodes);this.lastPresences[from]=nodes;var jibri=null;for(var i=0;i<nodes.length;i++){var node=nodes[i];switch(node.tagName){case"nick":member.nick=node.value;break;case"userId":member.id=node.value;break}}if(from==this.myroomjid){if(member.affiliation=="owner"&&this.role!==member.role){this.role=member.role;this.eventEmitter.emit(XMPPEvents.LOCAL_ROLE_CHANGED,this.role)}if(!this.joined){this.joined=true;console.log("(TIME) MUC joined: ",window.performance.now());this.eventEmitter.emit(XMPPEvents.MUC_JOINED)}}else if(this.members[from]===undefined){this.members[from]=member;logger.log("entered",from,member);if(member.isFocus){this.focusMucJid=from;if(!this.recording){this.recording=new Recorder(this.options.recordingType,this.eventEmitter,this.connection,this.focusMucJid,this.options.jirecon,this.roomjid);if(this.lastJibri)this.recording.handleJibriPresence(this.lastJibri)}logger.info("Ignore focus: "+from+", real JID: "+member.jid)}else{this.eventEmitter.emit(XMPPEvents.MUC_MEMBER_JOINED,from,member.nick,member.role)}}else{if(this.members[from].role!=member.role){this.members[from].role=member.role;this.eventEmitter.emit(XMPPEvents.MUC_ROLE_CHANGED,from,member.role)}if(member.displayName)this.members[from].displayName=member.displayName}for(var i=0;i<nodes.length;i++){var node=nodes[i];switch(node.tagName){case"nick":if(!member.isFocus){var displayName=!this.xmpp.options.displayJids?member.nick:Strophe.getResourceFromJid(from);if(displayName&&displayName.length>0){this.eventEmitter.emit(XMPPEvents.DISPLAY_NAME_CHANGED,from,displayName)}}break;case"bridgeIsDown":if(!this.bridgeIsDown){this.bridgeIsDown=true;this.eventEmitter.emit(XMPPEvents.BRIDGE_DOWN)}break;case"jibri-recording-status":var jibri=node;break;case"call-control":var att=node.attributes;if(!att)break;this.phoneNumber=att.phone||null;this.phonePin=att.pin||null;this.eventEmitter.emit(XMPPEvents.PHONE_NUMBER_CHANGED);break;default:this.processNode(node,from)}}if(!member.isFocus)this.eventEmitter.emit(XMPPEvents.USER_ID_CHANGED,from,member.id);if(member.status){this.eventEmitter.emit(XMPPEvents.PRESENCE_STATUS,from,member)}if(jibri){this.lastJibri=jibri;if(this.recording)this.recording.handleJibriPresence(jibri)}};ChatRoom.prototype.processNode=function(node,from){if(this.presHandlers[node.tagName])this.presHandlers[node.tagName](node,Strophe.getResourceFromJid(from))};ChatRoom.prototype.sendMessage=function(body,nickname){var msg=$msg({to:this.roomjid,type:"groupchat"});msg.c("body",body).up();if(nickname){msg.c("nick",{xmlns:"http://jabber.org/protocol/nick"}).t(nickname).up().up()}this.connection.send(msg);this.eventEmitter.emit(XMPPEvents.SENDING_CHAT_MESSAGE,body)};ChatRoom.prototype.setSubject=function(subject){var msg=$msg({to:this.roomjid,type:"groupchat"});msg.c("subject",subject);this.connection.send(msg);logger.log("topic changed to "+subject)};ChatRoom.prototype.onParticipantLeft=function(jid){delete this.lastPresences[jid];this.eventEmitter.emit(XMPPEvents.MUC_MEMBER_LEFT,jid);this.moderator.onMucMemberLeft(jid)};ChatRoom.prototype.onPresenceUnavailable=function(pres,from){if($(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]'+">destroy").length){var reason;var reasonSelect=$(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]'+">destroy>reason");if(reasonSelect.length){reason=reasonSelect.text()}this.xmpp.leaveRoom(this.roomjid);this.eventEmitter.emit(XMPPEvents.MUC_DESTROYED,reason);delete this.connection.emuc.rooms[Strophe.getBareJidFromJid(from)];return true}if(!$(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="110"]').length){delete this.members[from];this.onParticipantLeft(from)}else if(Object.keys(this.members).length>1){for(var i in this.members){var member=this.members[i];delete this.members[i];this.onParticipantLeft(member)}}if($(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="307"]').length){if(this.myroomjid===from){this.xmpp.leaveRoom(this.roomjid);this.eventEmitter.emit(XMPPEvents.KICKED)}}};ChatRoom.prototype.onMessage=function(msg,from){var nick=$(msg).find('>nick[xmlns="http://jabber.org/protocol/nick"]').text()||Strophe.getResourceFromJid(from);var txt=$(msg).find(">body").text();var type=msg.getAttribute("type");if(type=="error"){this.eventEmitter.emit(XMPPEvents.CHAT_ERROR_RECEIVED,$(msg).find(">text").text(),txt);return true}var subject=$(msg).find(">subject");if(subject.length){var subjectText=subject.text();if(subjectText||subjectText===""){this.eventEmitter.emit(XMPPEvents.SUBJECT_CHANGED,subjectText);logger.log("Subject is changed to "+subjectText)}}var stamp=$(msg).find(">delay").attr("stamp");if(!stamp){stamp=$(msg).find('>[xmlns="jabber:x:delay"]').attr("stamp");if(stamp){var dateParts=stamp.match(/(\d{4})(\d{2})(\d{2}T\d{2}:\d{2}:\d{2})/);stamp=dateParts[1]+"-"+dateParts[2]+"-"+dateParts[3]+"Z"}}if(txt){logger.log("chat",nick,txt);this.eventEmitter.emit(XMPPEvents.MESSAGE_RECEIVED,from,nick,txt,this.myroomjid,stamp)}};ChatRoom.prototype.onPresenceError=function(pres,from){if($(pres).find('>error[type="auth"]>not-authorized[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]').length){logger.log("on password required",from);this.eventEmitter.emit(XMPPEvents.PASSWORD_REQUIRED)}else if($(pres).find('>error[type="cancel"]>not-allowed[xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"]').length){var toDomain=Strophe.getDomainFromJid(pres.getAttribute("to"));if(toDomain===this.xmpp.options.hosts.anonymousdomain){this.eventEmitter.emit(XMPPEvents.ROOM_JOIN_ERROR,pres)}else{logger.warn("onPresError ",pres);this.eventEmitter.emit(XMPPEvents.ROOM_CONNECT_ERROR,pres)}}else{logger.warn("onPresError ",pres);this.eventEmitter.emit(XMPPEvents.ROOM_CONNECT_ERROR,pres)}};ChatRoom.prototype.kick=function(jid){var kickIQ=$iq({to:this.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#admin"}).c("item",{nick:Strophe.getResourceFromJid(jid),role:"none"}).c("reason").t("You have been kicked.").up().up().up();this.connection.sendIQ(kickIQ,function(result){logger.log("Kick participant with jid: ",jid,result)},function(error){logger.log("Kick participant error: ",error)})};ChatRoom.prototype.lockRoom=function(key,onSuccess,onError,onNotSupported){var ob=this;this.connection.sendIQ($iq({to:this.roomjid,type:"get"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"}),function(res){if($(res).find('>query>x[xmlns="jabber:x:data"]>field[var="muc#roomconfig_roomsecret"]').length){var formsubmit=$iq({to:ob.roomjid,type:"set"}).c("query",{xmlns:"http://jabber.org/protocol/muc#owner"});formsubmit.c("x",{xmlns:"jabber:x:data",type:"submit"});formsubmit.c("field",{"var":"FORM_TYPE"}).c("value").t("http://jabber.org/protocol/muc#roomconfig").up().up();formsubmit.c("field",{"var":"muc#roomconfig_roomsecret"}).c("value").t(key).up().up();formsubmit.c("field",{"var":"muc#roomconfig_whois"}).c("value").t("anyone").up().up();ob.connection.sendIQ(formsubmit,onSuccess,onError)}else{onNotSupported()}},onError)};ChatRoom.prototype.addToPresence=function(key,values){values.tagName=key;this.presMap["nodes"].push(values)};ChatRoom.prototype.removeFromPresence=function(key){for(var i=0;i<this.presMap.nodes.length;i++){if(key===this.presMap.nodes[i].tagName)this.presMap.nodes.splice(i,1)}};ChatRoom.prototype.addPresenceListener=function(name,handler){this.presHandlers[name]=handler};ChatRoom.prototype.removePresenceListener=function(name){delete this.presHandlers[name]};ChatRoom.prototype.isModerator=function(){return this.role==="moderator"};ChatRoom.prototype.getMemberRole=function(peerJid){if(this.members[peerJid]){return this.members[peerJid].role}return null};ChatRoom.prototype.setJingleSession=function(session){this.session=session;this.session.room=this};ChatRoom.prototype.removeStream=function(stream,callback){if(!this.session)return;this.session.removeStream(stream,callback)};ChatRoom.prototype.switchStreams=function(stream,oldStream,callback,isAudio){if(this.session){this.session.switchStreams(stream,oldStream,callback,isAudio)}else{logger.warn("No conference handler or conference not started yet");callback()}};ChatRoom.prototype.addStream=function(stream,callback){if(this.session){this.session.addStream(stream,callback)}else{logger.warn("No conference handler or conference not started yet");callback()}};ChatRoom.prototype.setVideoMute=function(mute,callback,options){var self=this;var localCallback=function(mute){self.sendVideoInfoPresence(mute);if(callback)callback(mute)};if(this.session){this.session.setVideoMute(mute,localCallback,options)}else{localCallback(mute)}};ChatRoom.prototype.setAudioMute=function(mute,callback){return this.sendAudioInfoPresence(mute,callback)};ChatRoom.prototype.addAudioInfoToPresence=function(mute){this.removeFromPresence("audiomuted");this.addToPresence("audiomuted",{attributes:{audions:"http://jitsi.org/jitmeet/audio"},value:mute.toString()})};ChatRoom.prototype.sendAudioInfoPresence=function(mute,callback){this.addAudioInfoToPresence(mute);if(this.connection){this.sendPresence()}if(callback)callback()};ChatRoom.prototype.addVideoInfoToPresence=function(mute){this.removeFromPresence("videomuted");this.addToPresence("videomuted",{attributes:{videons:"http://jitsi.org/jitmeet/video"},value:mute.toString()})};ChatRoom.prototype.sendVideoInfoPresence=function(mute){this.addVideoInfoToPresence(mute);if(!this.connection)return;this.sendPresence()};ChatRoom.prototype.addListener=function(type,listener){this.eventEmitter.on(type,listener)};ChatRoom.prototype.removeListener=function(type,listener){this.eventEmitter.removeListener(type,listener)};ChatRoom.prototype.remoteStreamAdded=function(data,sid,thessrc){if(this.lastPresences[data.peerjid]){var pres=this.lastPresences[data.peerjid];var audiomuted=filterNodeFromPresenceJSON(pres,"audiomuted");var videomuted=filterNodeFromPresenceJSON(pres,"videomuted");data.videomuted=videomuted.length>0&&videomuted[0]&&videomuted[0]["value"]==="true"?true:false;data.audiomuted=audiomuted.length>0&&audiomuted[0]&&audiomuted[0]["value"]==="true"?true:false}this.eventEmitter.emit(XMPPEvents.REMOTE_STREAM_RECEIVED,data,sid,thessrc)};ChatRoom.prototype.getJidBySSRC=function(ssrc){if(!this.session)return null;return this.session.getSsrcOwner(ssrc)};ChatRoom.prototype.isRecordingSupported=function(){if(this.recording)return this.recording.isSupported();return false};ChatRoom.prototype.getRecordingState=function(){if(this.recording)return this.recording.getState();return"off"};ChatRoom.prototype.getRecordingURL=function(){if(this.recording)return this.recording.getURL();return null;
  5. };ChatRoom.prototype.toggleRecording=function(options,statusChangeHandler){if(this.recording)return this.recording.toggleRecording(options,statusChangeHandler);return statusChangeHandler("error",new Error("The conference is not created yet!"))};ChatRoom.prototype.isSIPCallingSupported=function(){if(this.moderator)return this.moderator.isSipGatewayEnabled();return false};ChatRoom.prototype.dial=function(number){return this.connection.rayo.dial(number,"fromnumber",Strophe.getNodeFromJid(this.myroomjid),this.password,this.focusMucJid)};ChatRoom.prototype.hangup=function(){return this.connection.rayo.hangup()};ChatRoom.prototype.getPhoneNumber=function(){return this.phoneNumber};ChatRoom.prototype.getPhonePin=function(){return this.phonePin};ChatRoom.prototype.getConnectionState=function(){if(!this.session)return null;return this.session.getIceConnectionState()};ChatRoom.prototype.muteParticipant=function(jid,mute){logger.info("set mute",mute);var iqToFocus=$iq({to:this.focusMucJid,type:"set"}).c("mute",{xmlns:"http://jitsi.org/jitmeet/audio",jid:jid}).t(mute.toString()).up();this.connection.sendIQ(iqToFocus,function(result){logger.log("set mute",result)},function(error){logger.log("set mute error",error)})};ChatRoom.prototype.onMute=function(iq){var from=iq.getAttribute("from");if(from!==this.focusMucJid){logger.warn("Ignored mute from non focus peer");return false}var mute=$(iq).find("mute");if(mute.length){var doMuteAudio=mute.text()==="true";this.eventEmitter.emit(XMPPEvents.AUDIO_MUTED_BY_FOCUS,doMuteAudio)}return true};module.exports=ChatRoom}).call(this,"/modules/xmpp/ChatRoom.js")},{"../../service/xmpp/XMPPEvents":87,"./moderator":34,"./recording":35,events:44,"jitsi-meet-logger":48}],27:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);function JingleSession(me,sid,connection,service,eventEmitter){this.me=me;this.sid=sid;this.connection=connection;this.service=service;this.eventEmitter=eventEmitter;this.usedrip=true;this.drip_container=[];this.media_constraints=null;this.ice_config={};this.room=null}JingleSession.prototype.initialize=function(peerjid,isInitiator,media_constraints,ice_config){this.media_constraints=media_constraints;this.ice_config=ice_config;if(this.state!==null){logger.error("attempt to initiate on session "+this.sid+"in state "+this.state);return}this.state="pending";this.initiator=isInitiator?this.me:peerjid;this.responder=!isInitiator?this.me:peerjid;this.peerjid=peerjid;this.doInitialize()};JingleSession.prototype.doInitialize=function(){};JingleSession.prototype.addIceCandidates=function(contents){};JingleSession.prototype.addSources=function(contents){};JingleSession.prototype.removeSources=function(contents){};JingleSession.prototype.terminate=function(){};JingleSession.prototype.sendTerminate=function(reason,text){};JingleSession.prototype.setOffer=function(jingle){};JingleSession.prototype.setAnswer=function(jingle){};module.exports=JingleSession}).call(this,"/modules/xmpp/JingleSession.js")},{"jitsi-meet-logger":48}],28:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var JingleSession=require("./JingleSession");var TraceablePeerConnection=require("./TraceablePeerConnection");var SDPDiffer=require("./SDPDiffer");var SDPUtil=require("./SDPUtil");var SDP=require("./SDP");var async=require("async");var transform=require("sdp-transform");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var RTCBrowserType=require("../RTC/RTCBrowserType");var SSRCReplacement=require("./LocalSSRCReplacement");var RTC=require("../RTC/RTC");function JingleSessionPC(me,sid,connection,service){JingleSession.call(this,me,sid,connection,service);this.initiator=null;this.responder=null;this.peerjid=null;this.state=null;this.localSDP=null;this.remoteSDP=null;this.relayedStreams=[];this.usetrickle=true;this.usepranswer=false;this.hadstuncandidate=false;this.hadturncandidate=false;this.lasticecandidate=false;this.statsinterval=null;this.reason=null;this.addssrc=[];this.removessrc=[];this.pendingop=null;this.switchstreams=false;this.addingStreams=false;this.wait=true;this.localStreamsSSRC={};this.ssrcOwners={};this.ssrcVideoTypes={};this.webrtcIceUdpDisable=!!this.service.options.webrtcIceUdpDisable;this.webrtcIceTcpDisable=!!this.service.options.webrtcIceTcpDisable;this.videoMuteByUser=false;this.modifySourcesQueue=async.queue(this._modifySources.bind(this),1);this.modifySourcesQueue.pause()}JingleSessionPC.prototype=JingleSession.prototype;JingleSessionPC.prototype.constructor=JingleSessionPC;JingleSessionPC.prototype.setOffer=function(offer){this.setRemoteDescription(offer,"offer")};JingleSessionPC.prototype.setAnswer=function(answer){this.setRemoteDescription(answer,"answer")};JingleSessionPC.prototype.updateModifySourcesQueue=function(){var signalingState=this.peerconnection.signalingState;var iceConnectionState=this.peerconnection.iceConnectionState;if(signalingState==="stable"&&iceConnectionState==="connected"){this.modifySourcesQueue.resume()}else{this.modifySourcesQueue.pause()}};JingleSessionPC.prototype.doInitialize=function(){var self=this;this.hadstuncandidate=false;this.hadturncandidate=false;this.lasticecandidate=false;this.isreconnect=false;this.wasstable=false;this.peerconnection=new TraceablePeerConnection(this.connection.jingle.ice_config,RTC.getPCConstraints(),this);this.peerconnection.onicecandidate=function(event){var protocol;if(event&&event.candidate){protocol=typeof event.candidate.protocol==="string"?event.candidate.protocol.toLowerCase():"";if(self.webrtcIceTcpDisable&&protocol=="tcp"||self.webrtcIceUdpDisable&&protocol=="udp"){return}}self.sendIceCandidate(event.candidate)};this.peerconnection.onaddstream=function(event){if(event.stream.id!=="default"){logger.log("REMOTE STREAM ADDED: ",event.stream,event.stream.id);self.remoteStreamAdded(event)}else{logger.log("RECVONLY REMOTE STREAM IGNORED: "+event.stream+" - "+event.stream.id)}};this.peerconnection.onremovestream=function(event){$(document).trigger("remotestreamremoved.jingle",[event,self.sid])};this.peerconnection.onsignalingstatechange=function(event){if(!(self&&self.peerconnection))return;if(self.peerconnection.signalingState==="stable"){self.wasstable=true}self.updateModifySourcesQueue()};this.peerconnection.oniceconnectionstatechange=function(event){if(!(self&&self.peerconnection))return;logger.log("(TIME) ICE "+self.peerconnection.iceConnectionState+": ",window.performance.now());self.updateModifySourcesQueue();switch(self.peerconnection.iceConnectionState){case"connected":if(self.peerconnection.signalingState==="stable"&&self.isreconnect)self.room.eventEmitter.emit(XMPPEvents.CONNECTION_RESTORED);self.isreconnect=false;break;case"disconnected":self.isreconnect=true;if(self.wasstable)self.room.eventEmitter.emit(XMPPEvents.CONNECTION_INTERRUPTED);break;case"failed":self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED);break}onIceConnectionStateChange(self.sid,self)};this.peerconnection.onnegotiationneeded=function(event){self.room.eventEmitter.emit(XMPPEvents.PEERCONNECTION_READY,self)};this.relayedStreams.forEach(function(stream){self.peerconnection.addStream(stream)})};function onIceConnectionStateChange(sid,session){switch(session.peerconnection.iceConnectionState){case"checking":session.timeChecking=(new Date).getTime();session.firstconnect=true;break;case"completed":case"connected":if(session.firstconnect){session.firstconnect=false;var metadata={};metadata.setupTime=(new Date).getTime()-session.timeChecking;session.peerconnection.getStats(function(res){if(res&&res.result){res.result().forEach(function(report){if(report.type=="googCandidatePair"&&report.stat("googActiveConnection")=="true"){metadata.localCandidateType=report.stat("googLocalCandidateType");metadata.remoteCandidateType=report.stat("googRemoteCandidateType");metadata.candidatePair=report.stat("googLocalCandidateType")+";"+report.stat("googRemoteCandidateType");if(report.stat("googRemoteAddress").indexOf("[")===0){metadata.ipv6=true}}})}})}break}}JingleSessionPC.prototype.accept=function(){this.state="active";var pranswer=this.peerconnection.localDescription;if(!pranswer||pranswer.type!="pranswer"){return}logger.log("going from pranswer to answer");if(this.usetrickle){var lines=SDPUtil.find_lines(pranswer.sdp,"a=candidate:");for(var i=0;i<lines.length;i++){pranswer.sdp=pranswer.sdp.replace(lines[i]+"\r\n","")}}while(SDPUtil.find_line(pranswer.sdp,"a=inactive")){pranswer.sdp=pranswer.sdp.replace("a=inactive","a=sendrecv")}var prsdp=new SDP(pranswer.sdp);if(self.webrtcIceTcpDisable){prsdp.removeTcpCandidates=true}if(self.webrtcIceUdpDisable){prsdp.removeUdpCandidates=true}var accept=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:this.initiator,responder:this.responder,sid:this.sid});prsdp.toJingle(accept,this.initiator==this.me?"initiator":"responder");var sdp=this.peerconnection.localDescription.sdp;while(SDPUtil.find_line(sdp,"a=inactive")){sdp=sdp.replace("a=inactive","a=sendrecv")}var self=this;this.peerconnection.setLocalDescription(new RTCSessionDescription({type:"answer",sdp:sdp}),function(){self.setLocalDescription();SSRCReplacement.processSessionInit(accept);self.connection.sendIQ(accept,function(){var ack={};ack.source="answer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer";JingleSessionPC.onJingleError(self.sid,error)},1e4)},function(e){logger.error("setLocalDescription failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)})};JingleSessionPC.prototype.terminate=function(reason){this.state="ended";this.reason=reason;this.peerconnection.close();if(this.statsinterval!==null){window.clearInterval(this.statsinterval);this.statsinterval=null}};JingleSessionPC.prototype.active=function(){return this.state=="active"};JingleSessionPC.prototype.sendIceCandidate=function(candidate){var self=this;if(candidate&&!this.lasticecandidate){var ice=SDPUtil.iceparams(this.localSDP.media[candidate.sdpMLineIndex],this.localSDP.session);var jcand=SDPUtil.candidateToJingle(candidate.candidate);if(!(ice&&jcand)){logger.error("failed to get ice && jcand");return}ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1";if(jcand.type==="srflx"){this.hadstuncandidate=true}else if(jcand.type==="relay"){this.hadturncandidate=true}if(this.usetrickle){if(this.usedrip){if(this.drip_container.length===0){window.setTimeout(function(){if(self.drip_container.length===0)return;self.sendIceCandidates(self.drip_container);self.drip_container=[]},20)}this.drip_container.push(candidate);return}else{self.sendIceCandidate([candidate])}}}else{if(!this.usetrickle){var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:this.peerconnection.localDescription.type=="offer"?"session-initiate":"session-accept",initiator:this.initiator,sid:this.sid});this.localSDP=new SDP(this.peerconnection.localDescription.sdp);if(self.webrtcIceTcpDisable){this.localSDP.removeTcpCandidates=true}if(self.webrtcIceUdpDisable){this.localSDP.removeUdpCandidates=true}var sendJingle=function(ssrc){if(!ssrc)ssrc={};self.localSDP.toJingle(init,self.initiator==self.me?"initiator":"responder",ssrc);SSRCReplacement.processSessionInit(init);self.connection.sendIQ(init,function(){var ack={};ack.source="offer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error";self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer";JingleSessionPC.onJingleError(self.sid,error)},1e4)};sendJingle()}this.lasticecandidate=true;logger.log("Have we encountered any srflx candidates? "+this.hadstuncandidate);logger.log("Have we encountered any relay candidates? "+this.hadturncandidate);if(!(this.hadstuncandidate||this.hadturncandidate)&&this.peerconnection.signalingState!="closed"){$(document).trigger("nostuncandidates.jingle",[this.sid])}}};JingleSessionPC.prototype.sendIceCandidates=function(candidates){logger.log("sendIceCandidates",candidates);var cand=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"transport-info",initiator:this.initiator,sid:this.sid});for(var mid=0;mid<this.localSDP.media.length;mid++){var cands=candidates.filter(function(el){return el.sdpMLineIndex==mid});var mline=SDPUtil.parse_mline(this.localSDP.media[mid].split("\r\n")[0]);if(cands.length>0){var ice=SDPUtil.iceparams(this.localSDP.media[mid],this.localSDP.session);ice.xmlns="urn:xmpp:jingle:transports:ice-udp:1";cand.c("content",{creator:this.initiator==this.me?"initiator":"responder",name:cands[0].sdpMid?cands[0].sdpMid:mline.media}).c("transport",ice);for(var i=0;i<cands.length;i++){cand.c("candidate",SDPUtil.candidateToJingle(cands[i].candidate)).up()}if(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session)){var tmp=SDPUtil.parse_fingerprint(SDPUtil.find_line(this.localSDP.media[mid],"a=fingerprint:",this.localSDP.session));tmp.required=true;cand.c("fingerprint",{xmlns:"urn:xmpp:jingle:apps:dtls:0"}).t(tmp.fingerprint);delete tmp.fingerprint;cand.attrs(tmp);cand.up()}cand.up();cand.up()}}this.connection.sendIQ(cand,function(){var ack={};ack.source="transportinfo";$(document).trigger("ack.jingle",[this.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="transportinfo";JingleSessionPC.onJingleError(this.sid,error)},1e4)};JingleSessionPC.prototype.sendOffer=function(){var self=this;this.peerconnection.createOffer(function(sdp){self.createdOffer(sdp)},function(e){logger.error("createOffer failed",e)},this.media_constraints)};JingleSessionPC.prototype.createdOffer=function(sdp){var self=this;this.localSDP=new SDP(sdp.sdp);var sendJingle=function(){var init=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-initiate",initiator:this.initiator,sid:this.sid});self.localSDP.toJingle(init,this.initiator==this.me?"initiator":"responder");SSRCReplacement.processSessionInit(init);self.connection.sendIQ(init,function(){var ack={};ack.source="offer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){self.state="error";self.peerconnection.close();var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="offer";JingleSessionPC.onJingleError(self.sid,error)},1e4)};sdp.sdp=this.localSDP.raw;this.peerconnection.setLocalDescription(sdp,function(){if(self.usetrickle){sendJingle()}self.setLocalDescription()},function(e){logger.error("setLocalDescription failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)});var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:");for(var i=0;i<cands.length;i++){var cand=SDPUtil.parse_icecandidate(cands[i]);if(cand.type=="srflx"){this.hadstuncandidate=true}else if(cand.type=="relay"){this.hadturncandidate=true}}};JingleSessionPC.prototype.readSsrcInfo=function(contents){var self=this;$(contents).each(function(idx,content){var name=$(content).attr("name");var mediaType=this.getAttribute("name");var ssrcs=$(content).find('description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');ssrcs.each(function(){var ssrc=this.getAttribute("ssrc");$(this).find('>ssrc-info[xmlns="http://jitsi.org/jitmeet"]').each(function(){var owner=this.getAttribute("owner");self.ssrcOwners[ssrc]=owner})})})};JingleSessionPC.prototype.getLocalSSRC=function(mediaType){return this.localStreamsSSRC[mediaType]};JingleSessionPC.prototype.getSsrcOwner=function(ssrc){return this.ssrcOwners[ssrc]};JingleSessionPC.prototype.setRemoteDescription=function(elem,desctype){this.remoteSDP=new SDP("");if(self.webrtcIceTcpDisable){this.remoteSDP.removeTcpCandidates=true}if(self.webrtcIceUdpDisable){this.remoteSDP.removeUdpCandidates=true}this.remoteSDP.fromJingle(elem);this.readSsrcInfo($(elem).find(">content"));if(this.peerconnection.remoteDescription){logger.log("setRemoteDescription when remote description is not null, should be pranswer",this.peerconnection.remoteDescription);if(this.peerconnection.remoteDescription.type=="pranswer"){var pranswer=new SDP(this.peerconnection.remoteDescription.sdp);for(var i=0;i<pranswer.media.length;i++){if(!SDPUtil.find_line(this.remoteSDP.media[i],"a=ice-ufrag:",this.remoteSDP.session)){if(SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)){this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-ufrag:",pranswer.session)+"\r\n"}else{logger.warn("no ice ufrag?")}if(SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)){this.remoteSDP.media[i]+=SDPUtil.find_line(pranswer.media[i],"a=ice-pwd:",pranswer.session)+"\r\n"}else{logger.warn("no ice pwd?")}}var lines=SDPUtil.find_lines(pranswer.media[i],"a=candidate:");for(var j=0;j<lines.length;j++){this.remoteSDP.media[i]+=lines[j]+"\r\n"}}this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("")}}var remotedesc=new RTCSessionDescription({type:desctype,sdp:this.remoteSDP.raw});this.peerconnection.setRemoteDescription(remotedesc,function(){},function(e){logger.error("setRemoteDescription error",e);JingleSessionPC.onJingleFatalError(self,e)})};JingleSessionPC.prototype.addIceCandidate=function(elem){var self=this;if(this.peerconnection.signalingState=="closed"){return}if(!this.peerconnection.remoteDescription&&this.peerconnection.signalingState=="have-local-offer"){logger.log("trickle ice candidate arriving before session accept...");if(!this.remoteSDP){var cobbled="v=0\r\n"+"o=- 1923518516 2 IN IP4 0.0.0.0\r\n"+"s=-\r\n"+"t=0 0\r\n";for(var i=0;i<this.localSDP.media.length;i++){cobbled+=SDPUtil.find_line(this.localSDP.media[i],"m=")+"\r\n";cobbled+=SDPUtil.find_lines(this.localSDP.media[i],"a=rtpmap:").join("\r\n")+"\r\n";if(SDPUtil.find_line(this.localSDP.media[i],"a=mid:")){cobbled+=SDPUtil.find_line(this.localSDP.media[i],"a=mid:")+"\r\n"}cobbled+="a=inactive\r\n"}this.remoteSDP=new SDP(cobbled)}elem.each(function(){for(var i=0;i<self.remoteSDP.media.length;i++){if(SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||self.remoteSDP.media[i].indexOf("m="+$(this).attr("name"))===0){if(!SDPUtil.find_line(self.remoteSDP.media[i],"a=ice-ufrag:")){var tmp=$(this).find("transport");self.remoteSDP.media[i]+="a=ice-ufrag:"+tmp.attr("ufrag")+"\r\n";self.remoteSDP.media[i]+="a=ice-pwd:"+tmp.attr("pwd")+"\r\n";tmp=$(this).find("transport>fingerprint");if(tmp.length){self.remoteSDP.media[i]+="a=fingerprint:"+tmp.attr("hash")+" "+tmp.text()+"\r\n"}else{logger.log("no dtls fingerprint (webrtc issue #1718?)");self.remoteSDP.media[i]+="a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:BAADBAADBAADBAADBAADBAADBAADBAADBAADBAAD\r\n"}break}}}});this.remoteSDP.raw=this.remoteSDP.session+this.remoteSDP.media.join("");var iscomplete=this.remoteSDP.media.filter(function(mediapart){return SDPUtil.find_line(mediapart,"a=ice-ufrag:")}).length==this.remoteSDP.media.length;if(iscomplete){logger.log("setting pranswer");try{this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"pranswer",sdp:this.remoteSDP.raw}),function(){},function(e){logger.log("setRemoteDescription pranswer failed",e.toString())})}catch(e){logger.error("setting pranswer failed",e)}}else{}}elem.each(function(){var idx=-1;var i;for(i=0;i<self.remoteSDP.media.length;i++){if(SDPUtil.find_line(self.remoteSDP.media[i],"a=mid:"+$(this).attr("name"))||self.remoteSDP.media[i].indexOf("m="+$(this).attr("name"))===0){idx=i;break}}if(idx==-1){for(i=0;i<self.localSDP.media.length;i++){if(SDPUtil.find_line(self.localSDP.media[i],"a=mid:"+$(this).attr("name"))||self.localSDP.media[i].indexOf("m="+$(this).attr("name"))===0){idx=i;break}}}var name=$(this).attr("name");$(this).find("transport>candidate").each(function(){var line,candidate;var protocol=this.getAttribute("protocol");protocol=typeof protocol==="string"?protocol.toLowerCase():"";if(self.webrtcIceTcpDisable&&protocol=="tcp"||self.webrtcIceUdpDisable&&protocol=="udp"){return}line=SDPUtil.candidateFromJingle(this);candidate=new RTCIceCandidate({sdpMLineIndex:idx,sdpMid:name,candidate:line});try{self.peerconnection.addIceCandidate(candidate)}catch(e){logger.error("addIceCandidate failed",e.toString(),line)}})})};JingleSessionPC.prototype.sendAnswer=function(provisional){var self=this;this.peerconnection.createAnswer(function(sdp){self.createdAnswer(sdp,provisional)},function(e){logger.error("createAnswer failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)},this.media_constraints)};JingleSessionPC.prototype.createdAnswer=function(sdp,provisional){var self=this;this.localSDP=new SDP(sdp.sdp);this.usepranswer=provisional===true;if(this.usetrickle){if(this.usepranswer){sdp.type="pranswer";for(var i=0;i<this.localSDP.media.length;i++){this.localSDP.media[i]=this.localSDP.media[i].replace("a=sendrecv\r\n","a=inactive\r\n")}this.localSDP.raw=this.localSDP.session+"\r\n"+this.localSDP.media.join("")}}var self=this;var sendJingle=function(ssrcs){var accept=$iq({to:self.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-accept",initiator:self.initiator,responder:self.responder,sid:self.sid});if(self.webrtcIceTcpDisable){self.localSDP.removeTcpCandidates=true}if(self.webrtcIceUdpDisable){self.localSDP.removeUdpCandidates=true}self.localSDP.toJingle(accept,self.initiator==self.me?"initiator":"responder",ssrcs);SSRCReplacement.processSessionInit(accept);self.connection.sendIQ(accept,function(){var ack={};ack.source="answer";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};error.source="answer";JingleSessionPC.onJingleError(self.sid,error)},1e4)};sdp.sdp=this.localSDP.raw;this.peerconnection.setLocalDescription(sdp,function(){if(self.usetrickle&&!self.usepranswer){sendJingle()}self.setLocalDescription()},function(e){logger.error("setLocalDescription failed",e);self.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED)});var cands=SDPUtil.find_lines(this.localSDP.raw,"a=candidate:");for(var j=0;j<cands.length;j++){var cand=SDPUtil.parse_icecandidate(cands[j]);if(cand.type=="srflx"){this.hadstuncandidate=true}else if(cand.type=="relay"){this.hadturncandidate=true}}};JingleSessionPC.prototype.sendTerminate=function(reason,text){var self=this,term=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-terminate",initiator:this.initiator,sid:this.sid}).c("reason").c(reason||"success");if(text){term.up().c("text").t(text)}this.connection.sendIQ(term,function(){self.peerconnection.close();self.peerconnection=null;self.terminate();var ack={};ack.source="terminate";$(document).trigger("ack.jingle",[self.sid,ack])},function(stanza){var error=$(stanza).find("error").length?{code:$(stanza).find("error").attr("code"),reason:$(stanza).find("error :first")[0].tagName}:{};$(document).trigger("ack.jingle",[self.sid,error])},1e4);if(this.statsinterval!==null){window.clearInterval(this.statsinterval);this.statsinterval=null}};JingleSessionPC.prototype.addSource=function(elem){var self=this;if(!this.peerconnection.localDescription){logger.warn("addSource - localDescription not ready yet");setTimeout(function(){self.addSource(elem)},200);return}logger.log("addssrc",(new Date).getTime());logger.log("ice",this.peerconnection.iceConnectionState);this.readSsrcInfo(elem);var sdp=new SDP(this.peerconnection.remoteDescription.sdp);var mySdp=new SDP(this.peerconnection.localDescription.sdp);$(elem).each(function(idx,content){var name=$(content).attr("name");var lines="";$(content).find('ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]').each(function(){var semantics=this.getAttribute("semantics");var ssrcs=$(this).find(">source").map(function(){return this.getAttribute("ssrc")}).get();if(ssrcs.length){lines+="a=ssrc-group:"+semantics+" "+ssrcs.join(" ")+"\r\n"}});var tmp=$(content).find('source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');tmp.each(function(){var ssrc=$(this).attr("ssrc");if(mySdp.containsSSRC(ssrc)){logger.warn("Got add stream request for my own ssrc: "+ssrc);return}if(sdp.containsSSRC(ssrc)){logger.warn("Source-add request for existing SSRC: "+ssrc);return}$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name");if($(this).attr("value")&&$(this).attr("value").length)lines+=":"+$(this).attr("value");lines+="\r\n"})});sdp.media.forEach(function(media,idx){if(!SDPUtil.find_line(media,"a=mid:"+name))return;sdp.media[idx]+=lines;if(!self.addssrc[idx])self.addssrc[idx]="";self.addssrc[idx]+=lines});sdp.raw=sdp.session+sdp.media.join("")});this.modifySourcesQueue.push(function(){logger.log("modify sources done");var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",mySdp,newSdp);self.notifyMySSRCUpdate(mySdp,newSdp)})};JingleSessionPC.prototype.removeSource=function(elem){var self=this;if(!this.peerconnection.localDescription){logger.warn("removeSource - localDescription not ready yet");setTimeout(function(){self.removeSource(elem)},200);return}logger.log("removessrc",(new Date).getTime());logger.log("ice",this.peerconnection.iceConnectionState);var sdp=new SDP(this.peerconnection.remoteDescription.sdp);var mySdp=new SDP(this.peerconnection.localDescription.sdp);$(elem).each(function(idx,content){var name=$(content).attr("name");var lines="";$(content).find('ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]').each(function(){var semantics=this.getAttribute("semantics");var ssrcs=$(this).find(">source").map(function(){return this.getAttribute("ssrc")}).get();if(ssrcs.length){lines+="a=ssrc-group:"+semantics+" "+ssrcs.join(" ")+"\r\n"}});var tmp=$(content).find('source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');tmp.each(function(){var ssrc=$(this).attr("ssrc");if(mySdp.containsSSRC(ssrc)){logger.error("Got remove stream request for my own ssrc: "+ssrc);return}$(this).find(">parameter").each(function(){lines+="a=ssrc:"+ssrc+" "+$(this).attr("name");if($(this).attr("value")&&$(this).attr("value").length)lines+=":"+$(this).attr("value");lines+="\r\n"})});sdp.media.forEach(function(media,idx){if(!SDPUtil.find_line(media,"a=mid:"+name))return;sdp.media[idx]+=lines;if(!self.removessrc[idx])self.removessrc[idx]="";self.removessrc[idx]+=lines});sdp.raw=sdp.session+sdp.media.join("")});this.modifySourcesQueue.push(function(){logger.log("modify sources done");var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",mySdp,newSdp);self.notifyMySSRCUpdate(mySdp,newSdp)})};JingleSessionPC.prototype._modifySources=function(successCallback,queueCallback){var self=this;if(this.peerconnection.signalingState=="closed")return;if(!(this.addssrc.length||this.removessrc.length||this.pendingop!==null||this.switchstreams||this.addingStreams)){this.setLocalDescription();if(successCallback){successCallback()}queueCallback();return}this.switchstreams=false;this.addingStreams=false;var sdp=new SDP(this.peerconnection.remoteDescription.sdp);this.addssrc.forEach(function(lines,idx){sdp.media[idx]+=lines});this.addssrc=[];this.removessrc.forEach(function(lines,idx){lines=lines.split("\r\n");lines.pop();lines.forEach(function(line){sdp.media[idx]=sdp.media[idx].replace(line+"\r\n","")})});this.removessrc=[];sdp.raw=sdp.session+sdp.media.join("");this.peerconnection.setRemoteDescription(new RTCSessionDescription({type:"offer",sdp:sdp.raw}),function(){if(self.signalingState=="closed"){logger.error("createAnswer attempt on closed state");queueCallback("createAnswer attempt on closed state");return}self.peerconnection.createAnswer(function(modifiedAnswer){if(self.pendingop!==null){var sdp=new SDP(modifiedAnswer.sdp);if(sdp.media.length>1){switch(self.pendingop){case"mute":sdp.media[1]=sdp.media[1].replace("a=sendrecv","a=recvonly");break;case"unmute":sdp.media[1]=sdp.media[1].replace("a=recvonly","a=sendrecv");break}sdp.raw=sdp.session+sdp.media.join("");modifiedAnswer.sdp=sdp.raw}self.pendingop=null}self.peerconnection.setLocalDescription(modifiedAnswer,function(){self.setLocalDescription();if(successCallback){successCallback()}queueCallback()},function(error){logger.error("modified setLocalDescription failed",error);queueCallback(error)})},function(error){logger.error("modified answer failed",error);queueCallback(error)})},function(error){logger.error("modify failed",error);queueCallback(error)})};JingleSessionPC.prototype.switchStreams=function(newStream,oldStream,successCallback,isAudio){var self=this;var sender,newTrack;var senderKind=isAudio?"audio":"video";var oldSdp=null;if(self.peerconnection){if(self.peerconnection.localDescription){oldSdp=new SDP(self.peerconnection.localDescription.sdp)}if(RTCBrowserType.getBrowserType()===RTCBrowserType.RTC_BROWSER_FIREFOX){self.peerconnection.peerconnection.getSenders().some(function(s){if(s.track&&s.track.kind===senderKind){sender=s;return true}});if(sender){newTrack=isAudio?newStream.getAudioTracks()[0]:newStream.getVideoTracks()[0];sender.replaceTrack(newTrack).then(function(){console.log("Replaced a track, isAudio="+isAudio)}).catch(function(err){console.log("Failed to replace a track: "+err)})}else{console.log("Cannot switch tracks: no RTPSender.")}}else{self.peerconnection.removeStream(oldStream,true);if(newStream){self.peerconnection.addStream(newStream)}}}if(!oldSdp){successCallback();return}self.switchstreams=true;self.modifySourcesQueue.push(function(){logger.log("modify sources done");successCallback();var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.addStream=function(stream,callback){var self=this;var oldSdp=null;if(this.peerconnection){if(this.peerconnection.localDescription){oldSdp=new SDP(this.peerconnection.localDescription.sdp)}if(stream)this.peerconnection.addStream(stream)}if(!oldSdp||!this.peerconnection){callback();return}this.addingStreams=true;this.modifySourcesQueue.push(function(){logger.log("modify sources done");callback();var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.removeStream=function(stream,callback){var self=this;var oldSdp=null;if(this.peerconnection){if(this.peerconnection.localDescription){oldSdp=new SDP(this.peerconnection.localDescription.sdp)}if(stream)this.peerconnection.removeStream(stream)}if(!oldSdp||!this.peerconnection){callback();return}this.addingStreams=true;this.modifySourcesQueue.push(function(){logger.log("modify sources done");callback();var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.notifyMySSRCUpdate=function(old_sdp,new_sdp){if(!(this.peerconnection.signalingState=="stable"&&this.peerconnection.iceConnectionState=="connected")){logger.log("Too early to send updates");return}sdpDiffer=new SDPDiffer(new_sdp,old_sdp);var remove=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"source-remove",initiator:this.initiator,sid:this.sid});var removed=sdpDiffer.toJingle(remove);if(removed)remove=SSRCReplacement.processSourceRemove(remove);if(removed&&remove){logger.info("Sending source-remove",remove);this.connection.sendIQ(remove,function(res){logger.info("got remove result",res)},function(err){logger.error("got remove error",err)})}else{logger.log("removal not necessary")}var sdpDiffer=new SDPDiffer(old_sdp,new_sdp);var add=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",
  6. action:"source-add",initiator:this.initiator,sid:this.sid});var added=sdpDiffer.toJingle(add);if(added)add=SSRCReplacement.processSourceAdd(add);if(added&&add){logger.info("Sending source-add",add);this.connection.sendIQ(add,function(res){logger.info("got add result",res)},function(err){logger.error("got add error",err)})}else{logger.log("addition not necessary")}};JingleSessionPC.prototype.setVideoMute=function(mute,callback,options){var byUser;if(options){byUser=options.byUser;if(typeof byUser==="undefined"){byUser=true}}else{byUser=true}if(byUser){this.videoMuteByUser=mute}else if(this.videoMuteByUser){return}this.hardMuteVideo(mute);var self=this;var oldSdp=null;if(self.peerconnection){if(self.peerconnection.localDescription){oldSdp=new SDP(self.peerconnection.localDescription.sdp)}}this.modifySourcesQueue.push(function(){logger.log("modify sources done");callback(mute);var newSdp=new SDP(self.peerconnection.localDescription.sdp);logger.log("SDPs",oldSdp,newSdp);self.notifyMySSRCUpdate(oldSdp,newSdp)})};JingleSessionPC.prototype.hardMuteVideo=function(muted){this.pendingop=muted?"mute":"unmute"};JingleSessionPC.prototype.sendMute=function(muted,content){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c(muted?"mute":"unmute",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"});info.attrs({creator:this.me==this.initiator?"creator":"responder"});if(content){info.attrs({name:content})}this.connection.send(info)};JingleSessionPC.prototype.sendRinging=function(){var info=$iq({to:this.peerjid,type:"set"}).c("jingle",{xmlns:"urn:xmpp:jingle:1",action:"session-info",initiator:this.initiator,sid:this.sid});info.c("ringing",{xmlns:"urn:xmpp:jingle:apps:rtp:info:1"});this.connection.send(info)};JingleSessionPC.prototype.getStats=function(interval){var self=this;var recv={audio:0,video:0};var lost={audio:0,video:0};var lastrecv={audio:0,video:0};var lastlost={audio:0,video:0};var loss={audio:0,video:0};var delta={audio:0,video:0};this.statsinterval=window.setInterval(function(){if(self&&self.peerconnection&&self.peerconnection.getStats){self.peerconnection.getStats(function(stats){var results=stats.result();for(var i=0;i<results.length;++i){if(results[i].type=="ssrc"){var packetsrecv=results[i].stat("packetsReceived");var packetslost=results[i].stat("packetsLost");if(packetsrecv&&packetslost){packetsrecv=parseInt(packetsrecv,10);packetslost=parseInt(packetslost,10);if(results[i].stat("googFrameRateReceived")){lastlost.video=lost.video;lastrecv.video=recv.video;recv.video=packetsrecv;lost.video=packetslost}else{lastlost.audio=lost.audio;lastrecv.audio=recv.audio;recv.audio=packetsrecv;lost.audio=packetslost}}}}delta.audio=recv.audio-lastrecv.audio;delta.video=recv.video-lastrecv.video;loss.audio=delta.audio>0?Math.ceil(100*(lost.audio-lastlost.audio)/delta.audio):0;loss.video=delta.video>0?Math.ceil(100*(lost.video-lastlost.video)/delta.video):0;$(document).trigger("packetloss.jingle",[self.sid,loss])})}},interval||3e3);return this.statsinterval};JingleSessionPC.onJingleError=function(session,error){logger.error("Jingle error",error)};JingleSessionPC.onJingleFatalError=function(session,error){this.room.eventEmitter.emit(XMPPEvents.CONFERENCE_SETUP_FAILED);this.room.eventEmitter.emit(XMPPEvents.JINGLE_FATAL_ERROR,session,error)};JingleSessionPC.prototype.setLocalDescription=function(){var self=this;var newssrcs=[];if(!this.peerconnection.localDescription)return;var session=transform.parse(this.peerconnection.localDescription.sdp);var i;session.media.forEach(function(media){if(media.ssrcs&&media.ssrcs.length>0){media.ssrcs.forEach(function(ssrc){if(ssrc.attribute!=="cname"){return}newssrcs.push({ssrc:ssrc.id,type:media.type});self.localStreamsSSRC[media.type]=ssrc.id})}});logger.log("new ssrcs",newssrcs);if(newssrcs.length>0){for(i=0;i<newssrcs.length;i++){var ssrc=newssrcs[i].ssrc;var myJid=self.me;self.ssrcOwners[ssrc]=myJid}}};JingleSessionPC.prototype.sendKeyframe=function(){var pc=this.peerconnection;logger.log("sendkeyframe",pc.iceConnectionState);if(pc.iceConnectionState!=="connected")return;var self=this;pc.setRemoteDescription(pc.remoteDescription,function(){pc.createAnswer(function(modifiedAnswer){pc.setLocalDescription(modifiedAnswer,function(){},function(error){logger.log("triggerKeyframe setLocalDescription failed",error);self.room.eventEmitter.emit(XMPPEvents.SET_LOCAL_DESCRIPTION_ERROR)})},function(error){logger.log("triggerKeyframe createAnswer failed",error);self.room.eventEmitter.emit(XMPPEvents.CREATE_ANSWER_ERROR)})},function(error){logger.log("triggerKeyframe setRemoteDescription failed",error);eventEmitter.emit(XMPPEvents.SET_REMOTE_DESCRIPTION_ERROR)})};JingleSessionPC.prototype.remoteStreamAdded=function(data,times){var self=this;var thessrc;var streamId=RTC.getStreamID(data.stream);if(!streamId){logger.error("No stream ID for",data.stream)}else if(streamId&&streamId.indexOf("mixedmslabel")===-1){var ssrclines=this.peerconnection.remoteDescription?SDPUtil.find_lines(this.peerconnection.remoteDescription.sdp,"a=ssrc:"):[];ssrclines=ssrclines.filter(function(line){if(RTCBrowserType.isTemasysPluginUsed()){return line.indexOf("mslabel:"+streamId)!==-1}else{return line.indexOf("msid:"+streamId)!==-1}});if(ssrclines.length){thessrc=ssrclines[0].substring(7).split(" ")[0];if(!self.ssrcOwners[thessrc]){logger.error("No SSRC owner known for: "+thessrc);return}data.peerjid=self.ssrcOwners[thessrc];logger.log("associated jid",self.ssrcOwners[thessrc])}else{logger.error("No SSRC lines for ",streamId)}}this.room.remoteStreamAdded(data,this.sid,thessrc);var isVideo=data.stream.getVideoTracks().length>0;if(isVideo&&data.peerjid&&this.peerjid===data.peerjid&&data.stream.getVideoTracks().length===0&&RTC.localVideo.getTracks().length>0){window.setTimeout(function(){self.sendKeyframe()},3e3)}};JingleSessionPC.prototype.getIceConnectionState=function(){return this.peerconnection.iceConnectionState};module.exports=JingleSessionPC}).call(this,"/modules/xmpp/JingleSessionPC.js")},{"../../service/xmpp/XMPPEvents":87,"../RTC/RTC":16,"../RTC/RTCBrowserType":17,"./JingleSession":27,"./LocalSSRCReplacement":29,"./SDP":30,"./SDPDiffer":31,"./SDPUtil":32,"./TraceablePeerConnection":33,async:43,"jitsi-meet-logger":48,"sdp-transform":76}],29:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var SDP=require("./SDP");var RandomUtil=require("../util/RandomUtil");var RTCBrowserType=require("../RTC/RTCBrowserType");var isEnabled=!RTCBrowserType.isFirefox();var localVideoSSRC;var localRecvOnlySSRC,localRecvOnlyMSID,localRecvOnlyMSLabel,localRecvOnlyLabel;var localRecvOnlyCName;var filterOutSource=function(modifyIq,actionName){var modifyIqTree=$(modifyIq.tree());if(!localVideoSSRC)return modifyIqTree[0];var videoSSRC=modifyIqTree.find('>jingle>content[name="video"]'+'>description>source[ssrc="'+localVideoSSRC+'"]');if(!videoSSRC.length){return modifyIqTree[0]}logger.info("Blocking "+actionName+" for local video SSRC: "+localVideoSSRC);videoSSRC.remove();if(modifyIqTree.find(">jingle>content>description>source").length){return modifyIqTree[0]}else{return null}};var storeLocalVideoSSRC=function(jingleIq){var videoSSRCs=$(jingleIq.tree()).find('>jingle>content[name="video"]>description>source');videoSSRCs.each(function(idx,ssrcElem){if(localVideoSSRC)return;var ssrSel=$(ssrcElem);var msid=ssrSel.find('>parameter[name="msid"]');if(msid.length){var ssrcVal=ssrSel.attr("ssrc");if(ssrcVal){localVideoSSRC=ssrcVal;logger.info("Stored local video SSRC"+" for future re-use: "+localVideoSSRC)}}})};function generateLabel(){return RandomUtil.randomHexString(8)+"-"+RandomUtil.randomHexString(4)+"-"+RandomUtil.randomHexString(4)+"-"+RandomUtil.randomHexString(4)+"-"+RandomUtil.randomHexString(12)}function generateRecvonlySSRC(){localVideoSSRC=localRecvOnlySSRC=localVideoSSRC?localVideoSSRC:Math.random().toString(10).substring(2,11);localRecvOnlyCName=Math.random().toString(36).substring(2);localRecvOnlyMSLabel=generateLabel();localRecvOnlyLabel=generateLabel();localRecvOnlyMSID=localRecvOnlyMSLabel+" "+localRecvOnlyLabel;logger.info("Generated local recvonly SSRC: "+localRecvOnlySSRC+", cname: "+localRecvOnlyCName)}var LocalSSRCReplacement={processSessionInit:function(sessionInit){if(!isEnabled)return;if(localVideoSSRC){logger.error("Local SSRC stored already: "+localVideoSSRC);return}storeLocalVideoSSRC(sessionInit)},mungeLocalVideoSSRC:function(localDescription){if(!isEnabled)return localDescription;if(!localDescription){logger.warn("localDescription is null or undefined");return localDescription}var sdp=new SDP(localDescription.sdp);if(sdp.media.length<2)return;if(localVideoSSRC&&sdp.media[1].indexOf("a=ssrc:")!==-1&&!sdp.containsSSRC(localVideoSSRC)){var map=sdp.getMediaSsrcMap();var videoPart=map[1];var videoSSRCs=videoPart.ssrcs;var newSSRC=Object.keys(videoSSRCs)[0];logger.info("Replacing new video SSRC: "+newSSRC+" with "+localVideoSSRC);localDescription.sdp=sdp.raw.replace(new RegExp("a=ssrc:"+newSSRC,"g"),"a=ssrc:"+localVideoSSRC)}else if(sdp.media[1].indexOf("a=ssrc:")===-1&&sdp.media[1].indexOf("a=recvonly")!==-1){if(!localRecvOnlySSRC){generateRecvonlySSRC()}logger.info("No SSRC in video recvonly stream"+" - adding SSRC: "+localRecvOnlySSRC);sdp.media[1]+="a=ssrc:"+localRecvOnlySSRC+" cname:"+localRecvOnlyCName+"\r\n"+"a=ssrc:"+localRecvOnlySSRC+" msid:"+localRecvOnlyMSID+"\r\n"+"a=ssrc:"+localRecvOnlySSRC+" mslabel:"+localRecvOnlyMSLabel+"\r\n"+"a=ssrc:"+localRecvOnlySSRC+" label:"+localRecvOnlyLabel+"\r\n";localDescription.sdp=sdp.session+sdp.media.join("")}return localDescription},processSourceAdd:function(sourceAdd){if(!isEnabled)return sourceAdd;if(!localVideoSSRC){storeLocalVideoSSRC(sourceAdd);return sourceAdd}else{return filterOutSource(sourceAdd,"source-add")}},processSourceRemove:function(sourceRemove){if(!isEnabled)return sourceRemove;return filterOutSource(sourceRemove,"source-remove")},setEnabled:function(enabled){isEnabled=enabled}};module.exports=LocalSSRCReplacement}).call(this,"/modules/xmpp/LocalSSRCReplacement.js")},{"../RTC/RTCBrowserType":17,"../util/RandomUtil":25,"./SDP":30,"jitsi-meet-logger":48}],30:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var SDPUtil=require("./SDPUtil");function SDP(sdp){this.removeTcpCandidates=false;this.removeUdpCandidates=false;this.media=sdp.split("\r\nm=");for(var i=1;i<this.media.length;i++){this.media[i]="m="+this.media[i];if(i!=this.media.length-1){this.media[i]+="\r\n"}}this.session=this.media.shift()+"\r\n";this.raw=this.session+this.media.join("")}SDP.prototype.getMediaSsrcMap=function(){var self=this;var media_ssrcs={};var tmp;for(var mediaindex=0;mediaindex<self.media.length;mediaindex++){tmp=SDPUtil.find_lines(self.media[mediaindex],"a=ssrc:");var mid=SDPUtil.parse_mid(SDPUtil.find_line(self.media[mediaindex],"a=mid:"));var media={mediaindex:mediaindex,mid:mid,ssrcs:{},ssrcGroups:[]};media_ssrcs[mediaindex]=media;tmp.forEach(function(line){var linessrc=line.substring(7).split(" ")[0];if(!media.ssrcs[linessrc]){media.ssrcs[linessrc]={ssrc:linessrc,lines:[]}}media.ssrcs[linessrc].lines.push(line)});tmp=SDPUtil.find_lines(self.media[mediaindex],"a=ssrc-group:");tmp.forEach(function(line){var idx=line.indexOf(" ");var semantics=line.substr(0,idx).substr(13);var ssrcs=line.substr(14+semantics.length).split(" ");if(ssrcs.length){media.ssrcGroups.push({semantics:semantics,ssrcs:ssrcs})}})}return media_ssrcs};SDP.prototype.containsSSRC=function(ssrc){var medias=this.getMediaSsrcMap();var result=false;Object.keys(medias).forEach(function(mediaindex){if(result)return;if(medias[mediaindex].ssrcs[ssrc]){result=true}});return result};SDP.prototype.mangle=function(){var i,j,mline,lines,rtpmap,newdesc;for(i=0;i<this.media.length;i++){lines=this.media[i].split("\r\n");lines.pop();mline=SDPUtil.parse_mline(lines.shift());if(mline.media!="audio")continue;newdesc="";mline.fmt.length=0;for(j=0;j<lines.length;j++){if(lines[j].substr(0,9)=="a=rtpmap:"){rtpmap=SDPUtil.parse_rtpmap(lines[j]);if(rtpmap.name=="CN"||rtpmap.name=="ISAC")continue;mline.fmt.push(rtpmap.id);newdesc+=lines[j]+"\r\n"}else{newdesc+=lines[j]+"\r\n"}}this.media[i]=SDPUtil.build_mline(mline)+"\r\n";this.media[i]+=newdesc}this.raw=this.session+this.media.join("")};SDP.prototype.removeSessionLines=function(prefix){var self=this;var lines=SDPUtil.find_lines(this.session,prefix);lines.forEach(function(line){self.session=self.session.replace(line+"\r\n","")});this.raw=this.session+this.media.join("");return lines};SDP.prototype.removeMediaLines=function(mediaindex,prefix){var self=this;var lines=SDPUtil.find_lines(this.media[mediaindex],prefix);lines.forEach(function(line){self.media[mediaindex]=self.media[mediaindex].replace(line+"\r\n","")});this.raw=this.session+this.media.join("");return lines};SDP.prototype.toJingle=function(elem,thecreator){var self=this;var i,j,k,mline,ssrc,rtpmap,tmp,lines;if(SDPUtil.find_line(this.session,"a=group:")){lines=SDPUtil.find_lines(this.session,"a=group:");for(i=0;i<lines.length;i++){tmp=lines[i].split(" ");var semantics=tmp.shift().substr(8);elem.c("group",{xmlns:"urn:xmpp:jingle:apps:grouping:0",semantics:semantics});for(j=0;j<tmp.length;j++){elem.c("content",{name:tmp[j]}).up()}elem.up()}}for(i=0;i<this.media.length;i++){mline=SDPUtil.parse_mline(this.media[i].split("\r\n")[0]);if(!(mline.media==="audio"||mline.media==="video"||mline.media==="application")){continue}if(SDPUtil.find_line(this.media[i],"a=ssrc:")){ssrc=SDPUtil.find_line(this.media[i],"a=ssrc:").substring(7).split(" ")[0]}else{ssrc=false}elem.c("content",{creator:thecreator,name:mline.media});if(SDPUtil.find_line(this.media[i],"a=mid:")){var mid=SDPUtil.parse_mid(SDPUtil.find_line(this.media[i],"a=mid:"));elem.attrs({name:mid})}if(SDPUtil.find_line(this.media[i],"a=rtpmap:").length){elem.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:mline.media});if(ssrc){elem.attrs({ssrc:ssrc})}for(j=0;j<mline.fmt.length;j++){rtpmap=SDPUtil.find_line(this.media[i],"a=rtpmap:"+mline.fmt[j]);elem.c("payload-type",SDPUtil.parse_rtpmap(rtpmap));if(SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j])){tmp=SDPUtil.parse_fmtp(SDPUtil.find_line(this.media[i],"a=fmtp:"+mline.fmt[j]));for(k=0;k<tmp.length;k++){elem.c("parameter",tmp[k]).up()}}this.rtcpFbToJingle(i,elem,mline.fmt[j]);elem.up()}if(SDPUtil.find_line(this.media[i],"a=crypto:",this.session)){elem.c("encryption",{required:1});var crypto=SDPUtil.find_lines(this.media[i],"a=crypto:",this.session);crypto.forEach(function(line){elem.c("crypto",SDPUtil.parse_crypto(line)).up()});elem.up()}if(ssrc){elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});var ssrclines=SDPUtil.find_lines(this.media[i],"a=ssrc:");if(ssrclines.length>0){ssrclines.forEach(function(line){var idx=line.indexOf(" ");var linessrc=line.substr(0,idx).substr(7);if(linessrc!=ssrc){elem.up();ssrc=linessrc;elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"})}var kv=line.substr(idx+1);elem.c("parameter");if(kv.indexOf(":")==-1){elem.attrs({name:kv})}else{var k=kv.split(":",2)[0];elem.attrs({name:k});var v=kv.split(":",2)[1];v=SDPUtil.filter_special_chars(v);elem.attrs({value:v})}elem.up()})}else{elem.up();elem.c("source",{ssrc:ssrc,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});elem.c("parameter");elem.attrs({name:"cname",value:Math.random().toString(36).substring(7)});elem.up();var msid=null;if(mline.media=="audio"){msid=APP.RTC.localAudio._getId()}else{msid=APP.RTC.localVideo._getId()}if(msid!=null){msid=SDPUtil.filter_special_chars(msid);elem.c("parameter");elem.attrs({name:"msid",value:msid});elem.up();elem.c("parameter");elem.attrs({name:"mslabel",value:msid});elem.up();elem.c("parameter");elem.attrs({name:"label",value:msid});elem.up()}}elem.up();var ssrc_group_lines=SDPUtil.find_lines(this.media[i],"a=ssrc-group:");ssrc_group_lines.forEach(function(line){var idx=line.indexOf(" ");var semantics=line.substr(0,idx).substr(13);var ssrcs=line.substr(14+semantics.length).split(" ");if(ssrcs.length){elem.c("ssrc-group",{semantics:semantics,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});ssrcs.forEach(function(ssrc){elem.c("source",{ssrc:ssrc}).up()});elem.up()}})}if(SDPUtil.find_line(this.media[i],"a=rtcp-mux")){elem.c("rtcp-mux").up()}this.rtcpFbToJingle(i,elem,"*");if(SDPUtil.find_line(this.media[i],"a=extmap:")){lines=SDPUtil.find_lines(this.media[i],"a=extmap:");for(j=0;j<lines.length;j++){tmp=SDPUtil.parse_extmap(lines[j]);elem.c("rtp-hdrext",{xmlns:"urn:xmpp:jingle:apps:rtp:rtp-hdrext:0",uri:tmp.uri,id:tmp.value});if(tmp.hasOwnProperty("direction")){switch(tmp.direction){case"sendonly":elem.attrs({senders:"responder"});break;case"recvonly":elem.attrs({senders:"initiator"});break;case"sendrecv":elem.attrs({senders:"both"});break;case"inactive":elem.attrs({senders:"none"});break}}elem.up()}}elem.up()}this.transportToJingle(i,elem);if(SDPUtil.find_line(this.media[i],"a=sendrecv",this.session)){elem.attrs({senders:"both"})}else if(SDPUtil.find_line(this.media[i],"a=sendonly",this.session)){elem.attrs({senders:"initiator"})}else if(SDPUtil.find_line(this.media[i],"a=recvonly",this.session)){elem.attrs({senders:"responder"})}else if(SDPUtil.find_line(this.media[i],"a=inactive",this.session)){elem.attrs({senders:"none"})}if(mline.port=="0"){elem.attrs({senders:"rejected"})}elem.up()}elem.up();return elem};SDP.prototype.transportToJingle=function(mediaindex,elem){var tmp,sctpmap,sctpAttrs,fingerprints;var self=this;elem.c("transport");if(SDPUtil.find_line(this.media[mediaindex],"a=sctpmap:").length){sctpmap=SDPUtil.find_line(this.media[mediaindex],"a=sctpmap:",self.session);if(sctpmap){sctpAttrs=SDPUtil.parse_sctpmap(sctpmap);elem.c("sctpmap",{xmlns:"urn:xmpp:jingle:transports:dtls-sctp:1",number:sctpAttrs[0],protocol:sctpAttrs[1]});if(sctpAttrs.length>2)elem.attrs({streams:sctpAttrs[2]});elem.up()}}fingerprints=SDPUtil.find_lines(this.media[mediaindex],"a=fingerprint:",this.session);fingerprints.forEach(function(line){tmp=SDPUtil.parse_fingerprint(line);tmp.xmlns="urn:xmpp:jingle:apps:dtls:0";elem.c("fingerprint").t(tmp.fingerprint);delete tmp.fingerprint;line=SDPUtil.find_line(self.media[mediaindex],"a=setup:",self.session);if(line){tmp.setup=line.substr(8)}elem.attrs(tmp);elem.up()});tmp=SDPUtil.iceparams(this.media[mediaindex],this.session);if(tmp){tmp.xmlns="urn:xmpp:jingle:transports:ice-udp:1";elem.attrs(tmp);if(SDPUtil.find_line(this.media[mediaindex],"a=candidate:",this.session)){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=candidate:",this.session);lines.forEach(function(line){var candidate=SDPUtil.candidateToJingle(line);var protocol=candidate&&typeof candidate.protocol==="string"?candidate.protocol.toLowerCase():"";if(self.removeTcpCandidates&&protocol==="tcp"||self.removeUdpCandidates&&protocol==="udp"){return}elem.c("candidate",candidate).up()})}}elem.up()};SDP.prototype.rtcpFbToJingle=function(mediaindex,elem,payloadtype){var lines=SDPUtil.find_lines(this.media[mediaindex],"a=rtcp-fb:"+payloadtype);lines.forEach(function(line){var tmp=SDPUtil.parse_rtcpfb(line);if(tmp.type=="trr-int"){elem.c("rtcp-fb-trr-int",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",value:tmp.params[0]});elem.up()}else{elem.c("rtcp-fb",{xmlns:"urn:xmpp:jingle:apps:rtp:rtcp-fb:0",type:tmp.type});if(tmp.params.length>0){elem.attrs({subtype:tmp.params[0]})}elem.up()}})};SDP.prototype.rtcpFbFromJingle=function(elem,payloadtype){var media="";var tmp=elem.find('>rtcp-fb-trr-int[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]');if(tmp.length){media+="a=rtcp-fb:"+"*"+" "+"trr-int"+" ";if(tmp.attr("value")){media+=tmp.attr("value")}else{media+="0"}media+="\r\n"}tmp=elem.find('>rtcp-fb[xmlns="urn:xmpp:jingle:apps:rtp:rtcp-fb:0"]');tmp.each(function(){media+="a=rtcp-fb:"+payloadtype+" "+$(this).attr("type");if($(this).attr("subtype")){media+=" "+$(this).attr("subtype")}media+="\r\n"});return media};SDP.prototype.fromJingle=function(jingle){var self=this;this.raw="v=0\r\n"+"o=- 1923518516 2 IN IP4 0.0.0.0\r\n"+"s=-\r\n"+"t=0 0\r\n";if($(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').length){$(jingle).find('>group[xmlns="urn:xmpp:jingle:apps:grouping:0"]').each(function(idx,group){var contents=$(group).find(">content").map(function(idx,content){return content.getAttribute("name")}).get();if(contents.length>0){self.raw+="a=group:"+(group.getAttribute("semantics")||group.getAttribute("type"))+" "+contents.join(" ")+"\r\n"}})}this.session=this.raw;jingle.find(">content").each(function(){var m=self.jingle2media($(this));self.media.push(m)});this.raw=this.session+this.media.join("")};SDP.prototype.jingle2media=function(content){var media="",desc=content.find("description"),ssrc=desc.attr("ssrc"),self=this,tmp;var sctp=content.find('>transport>sctpmap[xmlns="urn:xmpp:jingle:transports:dtls-sctp:1"]');tmp={media:desc.attr("media")};tmp.port="1";if(content.attr("senders")=="rejected"){tmp.port="0"}if(content.find(">transport>fingerprint").length||desc.find("encryption").length){if(sctp.length)tmp.proto="DTLS/SCTP";else tmp.proto="RTP/SAVPF"}else{tmp.proto="RTP/AVPF"}if(!sctp.length){tmp.fmt=desc.find("payload-type").map(function(){return this.getAttribute("id")}).get();media+=SDPUtil.build_mline(tmp)+"\r\n"}else{media+="m=application 1 DTLS/SCTP "+sctp.attr("number")+"\r\n";media+="a=sctpmap:"+sctp.attr("number")+" "+sctp.attr("protocol");var streamCount=sctp.attr("streams");if(streamCount)media+=" "+streamCount+"\r\n";else media+="\r\n"}media+="c=IN IP4 0.0.0.0\r\n";if(!sctp.length)media+="a=rtcp:1 IN IP4 0.0.0.0\r\n";tmp=content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]');if(tmp.length){if(tmp.attr("ufrag")){media+=SDPUtil.build_iceufrag(tmp.attr("ufrag"))+"\r\n"}if(tmp.attr("pwd")){media+=SDPUtil.build_icepwd(tmp.attr("pwd"))+"\r\n"}tmp.find(">fingerprint").each(function(){media+="a=fingerprint:"+this.getAttribute("hash");media+=" "+$(this).text();media+="\r\n";if(this.getAttribute("setup")){media+="a=setup:"+this.getAttribute("setup")+"\r\n"}})}switch(content.attr("senders")){case"initiator":media+="a=sendonly\r\n";break;case"responder":media+="a=recvonly\r\n";break;case"none":media+="a=inactive\r\n";break;case"both":media+="a=sendrecv\r\n";break}media+="a=mid:"+content.attr("name")+"\r\n";if(desc.find("rtcp-mux").length){media+="a=rtcp-mux\r\n"}if(desc.find("encryption").length){desc.find("encryption>crypto").each(function(){media+="a=crypto:"+this.getAttribute("tag");media+=" "+this.getAttribute("crypto-suite");media+=" "+this.getAttribute("key-params");if(this.getAttribute("session-params")){media+=" "+this.getAttribute("session-params")}media+="\r\n"})}desc.find("payload-type").each(function(){media+=SDPUtil.build_rtpmap(this)+"\r\n";if($(this).find(">parameter").length){media+="a=fmtp:"+this.getAttribute("id")+" ";media+=$(this).find("parameter").map(function(){return(this.getAttribute("name")?this.getAttribute("name")+"=":"")+this.getAttribute("value")}).get().join("; ");media+="\r\n"}media+=self.rtcpFbFromJingle($(this),this.getAttribute("id"))});media+=self.rtcpFbFromJingle(desc,"*");tmp=desc.find('>rtp-hdrext[xmlns="urn:xmpp:jingle:apps:rtp:rtp-hdrext:0"]');tmp.each(function(){media+="a=extmap:"+this.getAttribute("id")+" "+this.getAttribute("uri")+"\r\n"});content.find('>transport[xmlns="urn:xmpp:jingle:transports:ice-udp:1"]>candidate').each(function(){var protocol=this.getAttribute("protocol");protocol=typeof protocol==="string"?protocol.toLowerCase():"";if(self.removeTcpCandidates&&protocol==="tcp"||self.removeUdpCandidates&&protocol==="udp"){return}media+=SDPUtil.candidateFromJingle(this)});content.find('description>ssrc-group[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]').each(function(){var semantics=this.getAttribute("semantics");var ssrcs=$(this).find(">source").map(function(){return this.getAttribute("ssrc")}).get();if(ssrcs.length){media+="a=ssrc-group:"+semantics+" "+ssrcs.join(" ")+"\r\n"}});tmp=content.find('description>source[xmlns="urn:xmpp:jingle:apps:rtp:ssma:0"]');tmp.each(function(){var ssrc=this.getAttribute("ssrc");$(this).find(">parameter").each(function(){var name=this.getAttribute("name");var value=this.getAttribute("value");value=SDPUtil.filter_special_chars(value);media+="a=ssrc:"+ssrc+" "+name;if(value&&value.length)media+=":"+value;media+="\r\n"})});return media};module.exports=SDP}).call(this,"/modules/xmpp/SDP.js")},{"./SDPUtil":32,"jitsi-meet-logger":48}],31:[function(require,module,exports){var SDPUtil=require("./SDPUtil");function SDPDiffer(mySDP,otherSDP){this.mySDP=mySDP;this.otherSDP=otherSDP}SDPDiffer.prototype.getNewMedia=function(){function arrayEquals(array){if(!array)return false;if(this.length!=array.length)return false;for(var i=0,l=this.length;i<l;i++){if(this[i]instanceof Array&&array[i]instanceof Array){if(!this[i].equals(array[i]))return false}else if(this[i]!=array[i]){return false}}return true}var myMedias=this.mySDP.getMediaSsrcMap();var othersMedias=this.otherSDP.getMediaSsrcMap();var newMedia={};Object.keys(othersMedias).forEach(function(othersMediaIdx){var myMedia=myMedias[othersMediaIdx];var othersMedia=othersMedias[othersMediaIdx];if(!myMedia&&othersMedia){newMedia[othersMediaIdx]=othersMedia;return}Object.keys(othersMedia.ssrcs).forEach(function(ssrc){if(Object.keys(myMedia.ssrcs).indexOf(ssrc)===-1){if(!newMedia[othersMediaIdx]){newMedia[othersMediaIdx]={mediaindex:othersMedia.mediaindex,mid:othersMedia.mid,ssrcs:{},ssrcGroups:[]}}newMedia[othersMediaIdx].ssrcs[ssrc]=othersMedia.ssrcs[ssrc]}});othersMedia.ssrcGroups.forEach(function(otherSsrcGroup){var matched=false;for(var i=0;i<myMedia.ssrcGroups.length;i++){var mySsrcGroup=myMedia.ssrcGroups[i];if(otherSsrcGroup.semantics==mySsrcGroup.semantics&&arrayEquals.apply(otherSsrcGroup.ssrcs,[mySsrcGroup.ssrcs])){matched=true;break}}if(!matched){if(!newMedia[othersMediaIdx]){newMedia[othersMediaIdx]={mediaindex:othersMedia.mediaindex,mid:othersMedia.mid,ssrcs:{},ssrcGroups:[]}}newMedia[othersMediaIdx].ssrcGroups.push(otherSsrcGroup)}})});return newMedia};SDPDiffer.prototype.toJingle=function(modify){var sdpMediaSsrcs=this.getNewMedia();var modified=false;Object.keys(sdpMediaSsrcs).forEach(function(mediaindex){modified=true;var media=sdpMediaSsrcs[mediaindex];modify.c("content",{name:media.mid});modify.c("description",{xmlns:"urn:xmpp:jingle:apps:rtp:1",media:media.mid});Object.keys(media.ssrcs).forEach(function(ssrcNum){var mediaSsrc=media.ssrcs[ssrcNum];modify.c("source",{xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});modify.attrs({ssrc:mediaSsrc.ssrc});mediaSsrc.lines.forEach(function(line){var idx=line.indexOf(" ");var kv=line.substr(idx+1);modify.c("parameter");if(kv.indexOf(":")==-1){modify.attrs({name:kv})}else{var nv=kv.split(":",2);var name=nv[0];var value=SDPUtil.filter_special_chars(nv[1]);modify.attrs({name:name});modify.attrs({value:value})}modify.up()});modify.up()});media.ssrcGroups.forEach(function(ssrcGroup){if(ssrcGroup.ssrcs.length){modify.c("ssrc-group",{semantics:ssrcGroup.semantics,xmlns:"urn:xmpp:jingle:apps:rtp:ssma:0"});ssrcGroup.ssrcs.forEach(function(ssrc){modify.c("source",{ssrc:ssrc}).up()});modify.up()}});modify.up();modify.up()});return modified};module.exports=SDPDiffer},{"./SDPUtil":32}],32:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("../RTC/RTCBrowserType");SDPUtil={filter_special_chars:function(text){return text.replace(/[\\\/\{,\}\+]/g,"")},iceparams:function(mediadesc,sessiondesc){var data=null;if(SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)&&SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc)){data={ufrag:SDPUtil.parse_iceufrag(SDPUtil.find_line(mediadesc,"a=ice-ufrag:",sessiondesc)),pwd:SDPUtil.parse_icepwd(SDPUtil.find_line(mediadesc,"a=ice-pwd:",sessiondesc))}}return data},parse_iceufrag:function(line){return line.substring(12)},build_iceufrag:function(frag){return"a=ice-ufrag:"+frag},parse_icepwd:function(line){return line.substring(10)},build_icepwd:function(pwd){return"a=ice-pwd:"+pwd},parse_mid:function(line){return line.substring(6)},parse_mline:function(line){var parts=line.substring(2).split(" "),data={};data.media=parts.shift();data.port=parts.shift();data.proto=parts.shift();if(parts[parts.length-1]===""){parts.pop()}data.fmt=parts;return data},build_mline:function(mline){return"m="+mline.media+" "+mline.port+" "+mline.proto+" "+mline.fmt.join(" ")},parse_rtpmap:function(line){var parts=line.substring(9).split(" "),data={};data.id=parts.shift();parts=parts[0].split("/");data.name=parts.shift();data.clockrate=parts.shift();data.channels=parts.length?parts.shift():"1";return data},parse_sctpmap:function(line){var parts=line.substring(10).split(" ");var sctpPort=parts[0];var protocol=parts[1];var streamCount=parts.length>2?parts[2]:null;return[sctpPort,protocol,streamCount]},build_rtpmap:function(el){var line="a=rtpmap:"+el.getAttribute("id")+" "+el.getAttribute("name")+"/"+el.getAttribute("clockrate");if(el.getAttribute("channels")&&el.getAttribute("channels")!="1"){line+="/"+el.getAttribute("channels")}return line},parse_crypto:function(line){var parts=line.substring(9).split(" "),data={};data.tag=parts.shift();data["crypto-suite"]=parts.shift();data["key-params"]=parts.shift();if(parts.length){data["session-params"]=parts.join(" ")}return data},parse_fingerprint:function(line){var parts=line.substring(14).split(" "),data={};data.hash=parts.shift();data.fingerprint=parts.shift();return data},parse_fmtp:function(line){var parts=line.split(" "),i,key,value,data=[];parts.shift();parts=parts.join(" ").split(";");for(i=0;i<parts.length;i++){key=parts[i].split("=")[0];while(key.length&&key[0]==" "){key=key.substring(1)}value=parts[i].split("=")[1];if(key&&value){data.push({name:key,value:value})}else if(key){data.push({name:"",value:key})}}return data},parse_icecandidate:function(line){var candidate={},elems=line.split(" ");candidate.foundation=elems[0].substring(12);candidate.component=elems[1];candidate.protocol=elems[2].toLowerCase();candidate.priority=elems[3];candidate.ip=elems[4];candidate.port=elems[5];candidate.type=elems[7];candidate.generation=0;for(var i=8;i<elems.length;i+=2){switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:logger.log('parse_icecandidate not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}}candidate.network="1";candidate.id=Math.random().toString(36).substr(2,10);return candidate},build_icecandidate:function(cand){var line=["a=candidate:"+cand.foundation,cand.component,cand.protocol,cand.priority,cand.ip,cand.port,"typ",cand.type].join(" ");line+=" ";switch(cand.type){case"srflx":case"prflx":case"relay":if(cand.hasOwnAttribute("rel-addr")&&cand.hasOwnAttribute("rel-port")){line+="raddr";line+=" ";line+=cand["rel-addr"];line+=" ";line+="rport";line+=" ";line+=cand["rel-port"];line+=" "}break}if(cand.hasOwnAttribute("tcptype")){line+="tcptype";line+=" ";line+=cand.tcptype;line+=" "}line+="generation";line+=" ";line+=cand.hasOwnAttribute("generation")?cand.generation:"0";return line},parse_ssrc:function(desc){var lines=desc.split("\r\n"),data={};for(var i=0;i<lines.length;i++){if(lines[i].substring(0,7)=="a=ssrc:"){var idx=lines[i].indexOf(" ");data[lines[i].substr(idx+1).split(":",2)[0]]=lines[i].substr(idx+1).split(":",2)[1]}}return data},parse_rtcpfb:function(line){var parts=line.substr(10).split(" ");var data={};data.pt=parts.shift();data.type=parts.shift();data.params=parts;return data},parse_extmap:function(line){var parts=line.substr(9).split(" ");var data={};data.value=parts.shift();if(data.value.indexOf("/")!=-1){data.direction=data.value.substr(data.value.indexOf("/")+1);data.value=data.value.substr(0,data.value.indexOf("/"))}else{data.direction="both"}data.uri=parts.shift();
  7. data.params=parts;return data},find_line:function(haystack,needle,sessionpart){var lines=haystack.split("\r\n");for(var i=0;i<lines.length;i++){if(lines[i].substring(0,needle.length)==needle){return lines[i]}}if(!sessionpart){return false}lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++){if(lines[j].substring(0,needle.length)==needle){return lines[j]}}return false},find_lines:function(haystack,needle,sessionpart){var lines=haystack.split("\r\n"),needles=[];for(var i=0;i<lines.length;i++){if(lines[i].substring(0,needle.length)==needle)needles.push(lines[i])}if(needles.length||!sessionpart){return needles}lines=sessionpart.split("\r\n");for(var j=0;j<lines.length;j++){if(lines[j].substring(0,needle.length)==needle){needles.push(lines[j])}}return needles},candidateToJingle:function(line){if(line.indexOf("candidate:")===0){line="a="+line}else if(line.substring(0,12)!="a=candidate:"){logger.log("parseCandidate called with a line that is not a candidate line");logger.log(line);return null}if(line.substring(line.length-2)=="\r\n")line=line.substring(0,line.length-2);var candidate={},elems=line.split(" "),i;if(elems[6]!="typ"){logger.log("did not find typ in the right place");logger.log(line);return null}candidate.foundation=elems[0].substring(12);candidate.component=elems[1];candidate.protocol=elems[2].toLowerCase();candidate.priority=elems[3];candidate.ip=elems[4];candidate.port=elems[5];candidate.type=elems[7];candidate.generation="0";for(i=8;i<elems.length;i+=2){switch(elems[i]){case"raddr":candidate["rel-addr"]=elems[i+1];break;case"rport":candidate["rel-port"]=elems[i+1];break;case"generation":candidate.generation=elems[i+1];break;case"tcptype":candidate.tcptype=elems[i+1];break;default:logger.log('not translating "'+elems[i]+'" = "'+elems[i+1]+'"')}}candidate.network="1";candidate.id=Math.random().toString(36).substr(2,10);return candidate},candidateFromJingle:function(cand){var line="a=candidate:";line+=cand.getAttribute("foundation");line+=" ";line+=cand.getAttribute("component");line+=" ";var protocol=cand.getAttribute("protocol");if(RTCBrowserType.isFirefox()&&protocol.toLowerCase()=="ssltcp"){protocol="tcp"}line+=protocol;line+=" ";line+=cand.getAttribute("priority");line+=" ";line+=cand.getAttribute("ip");line+=" ";line+=cand.getAttribute("port");line+=" ";line+="typ";line+=" "+cand.getAttribute("type");line+=" ";switch(cand.getAttribute("type")){case"srflx":case"prflx":case"relay":if(cand.getAttribute("rel-addr")&&cand.getAttribute("rel-port")){line+="raddr";line+=" ";line+=cand.getAttribute("rel-addr");line+=" ";line+="rport";line+=" ";line+=cand.getAttribute("rel-port");line+=" "}break}if(protocol.toLowerCase()=="tcp"){line+="tcptype";line+=" ";line+=cand.getAttribute("tcptype");line+=" "}line+="generation";line+=" ";line+=cand.getAttribute("generation")||"0";return line+"\r\n"}};module.exports=SDPUtil}).call(this,"/modules/xmpp/SDPUtil.js")},{"../RTC/RTCBrowserType":17,"jitsi-meet-logger":48}],33:[function(require,module,exports){(function(__filename){var RTC=require("../RTC/RTC");var logger=require("jitsi-meet-logger").getLogger(__filename);var RTCBrowserType=require("../RTC/RTCBrowserType.js");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var SSRCReplacement=require("./LocalSSRCReplacement");function TraceablePeerConnection(ice_config,constraints,session){var self=this;this.session=session;var RTCPeerConnectionType=null;if(RTCBrowserType.isFirefox()){RTCPeerConnectionType=mozRTCPeerConnection}else if(RTCBrowserType.isTemasysPluginUsed()){RTCPeerConnectionType=RTCPeerConnection}else{RTCPeerConnectionType=webkitRTCPeerConnection}this.peerconnection=new RTCPeerConnectionType(ice_config,constraints);this.updateLog=[];this.stats={};this.statsinterval=null;this.maxstats=0;var Interop=require("sdp-interop").Interop;this.interop=new Interop;var Simulcast=require("sdp-simulcast");this.simulcast=new Simulcast({numOfLayers:3,explodeRemoteSimulcast:false});this.trace=function(what,info){self.updateLog.push({time:new Date,type:what,value:info||""})};this.onicecandidate=null;this.peerconnection.onicecandidate=function(event){if(!RTCBrowserType.isTemasysPluginUsed())self.trace("onicecandidate",JSON.stringify(event.candidate,null," "));if(self.onicecandidate!==null){self.onicecandidate(event)}};this.onaddstream=null;this.peerconnection.onaddstream=function(event){self.trace("onaddstream",event.stream.id);if(self.onaddstream!==null){self.onaddstream(event)}};this.onremovestream=null;this.peerconnection.onremovestream=function(event){self.trace("onremovestream",event.stream.id);if(self.onremovestream!==null){self.onremovestream(event)}};this.onsignalingstatechange=null;this.peerconnection.onsignalingstatechange=function(event){self.trace("onsignalingstatechange",self.signalingState);if(self.onsignalingstatechange!==null){self.onsignalingstatechange(event)}};this.oniceconnectionstatechange=null;this.peerconnection.oniceconnectionstatechange=function(event){self.trace("oniceconnectionstatechange",self.iceConnectionState);if(self.oniceconnectionstatechange!==null){self.oniceconnectionstatechange(event)}};this.onnegotiationneeded=null;this.peerconnection.onnegotiationneeded=function(event){self.trace("onnegotiationneeded");if(self.onnegotiationneeded!==null){self.onnegotiationneeded(event)}};self.ondatachannel=null;this.peerconnection.ondatachannel=function(event){self.trace("ondatachannel",event);if(self.ondatachannel!==null){self.ondatachannel(event)}};if(!RTCBrowserType.isFirefox()&&this.maxstats){this.statsinterval=window.setInterval(function(){self.peerconnection.getStats(function(stats){var results=stats.result();var now=new Date;for(var i=0;i<results.length;++i){results[i].names().forEach(function(name){var id=results[i].id+"-"+name;if(!self.stats[id]){self.stats[id]={startTime:now,endTime:now,values:[],times:[]}}self.stats[id].values.push(results[i].stat(name));self.stats[id].times.push(now.getTime());if(self.stats[id].values.length>self.maxstats){self.stats[id].values.shift();self.stats[id].times.shift()}self.stats[id].endTime=now})}})},1e3)}}var dumpSDP=function(description){if(typeof description==="undefined"||description==null){return""}return"type: "+description.type+"\r\n"+description.sdp};var normalizePlanB=function(desc){if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){logger.warn("An empty description was passed as an argument.");return desc}var transform=require("sdp-transform");var session=transform.parse(desc.sdp);if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){var firstSsrcs=[];var newSsrcLines=[];if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(group){if(typeof group.semantics!=="undefined"&&group.semantics==="FID"){if(typeof group.ssrcs!=="undefined"){firstSsrcs.push(Number(group.ssrcs.split(" ")[0]))}}})}if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){var i;for(i=0;i<mLine.ssrcs.length;i++){if(typeof mLine.ssrcs[i]==="object"&&typeof mLine.ssrcs[i].id!=="undefined"&&!$.inArray(mLine.ssrcs[i].id,firstSsrcs)){newSsrcLines.push(mLine.ssrcs[i]);delete mLine.ssrcs[i]}}for(i=0;i<mLine.ssrcs.length;i++){if(typeof mLine.ssrcs[i]!=="undefined"){newSsrcLines.push(mLine.ssrcs[i])}}mLine.ssrcs=newSsrcLines}})}var resStr=transform.write(session);return new RTCSessionDescription({type:desc.type,sdp:resStr})};var getters={signalingState:function(){return this.peerconnection.signalingState},iceConnectionState:function(){return this.peerconnection.iceConnectionState},localDescription:function(){var desc=this.peerconnection.localDescription;desc=SSRCReplacement.mungeLocalVideoSSRC(desc);this.trace("getLocalDescription::preTransform",dumpSDP(desc));if(RTCBrowserType.usesUnifiedPlan()){desc=this.interop.toPlanB(desc);this.trace("getLocalDescription::postTransform (Plan B)",dumpSDP(desc))}return desc},remoteDescription:function(){var desc=this.peerconnection.remoteDescription;this.trace("getRemoteDescription::preTransform",dumpSDP(desc));if(RTCBrowserType.usesUnifiedPlan()){desc=this.interop.toPlanB(desc);this.trace("getRemoteDescription::postTransform (Plan B)",dumpSDP(desc))}return desc}};Object.keys(getters).forEach(function(prop){Object.defineProperty(TraceablePeerConnection.prototype,prop,{get:getters[prop]})});TraceablePeerConnection.prototype.addStream=function(stream){this.trace("addStream",stream.id);try{this.peerconnection.addStream(stream)}catch(e){logger.error(e)}};TraceablePeerConnection.prototype.removeStream=function(stream,stopStreams){this.trace("removeStream",stream.id);if(stopStreams){RTC.stopMediaStream(stream)}try{if(this.peerconnection.removeStream)this.peerconnection.removeStream(stream)}catch(e){logger.error(e)}};TraceablePeerConnection.prototype.createDataChannel=function(label,opts){this.trace("createDataChannel",label,opts);return this.peerconnection.createDataChannel(label,opts)};TraceablePeerConnection.prototype.setLocalDescription=function(description,successCallback,failureCallback){this.trace("setLocalDescription::preTransform",dumpSDP(description));if(RTCBrowserType.usesUnifiedPlan()){description=this.interop.toUnifiedPlan(description);this.trace("setLocalDescription::postTransform (Plan A)",dumpSDP(description))}var self=this;this.peerconnection.setLocalDescription(description,function(){self.trace("setLocalDescriptionOnSuccess");successCallback()},function(err){self.trace("setLocalDescriptionOnFailure",err);failureCallback(err)})};TraceablePeerConnection.prototype.setRemoteDescription=function(description,successCallback,failureCallback){this.trace("setRemoteDescription::preTransform",dumpSDP(description));description=this.simulcast.mungeRemoteDescription(description);this.trace("setRemoteDescription::postTransform (simulcast)",dumpSDP(description));if(RTCBrowserType.usesUnifiedPlan()){description=this.interop.toUnifiedPlan(description);this.trace("setRemoteDescription::postTransform (Plan A)",dumpSDP(description))}if(RTCBrowserType.usesPlanB()){description=normalizePlanB(description)}var self=this;this.peerconnection.setRemoteDescription(description,function(){self.trace("setRemoteDescriptionOnSuccess");successCallback()},function(err){self.trace("setRemoteDescriptionOnFailure",err);failureCallback(err)})};TraceablePeerConnection.prototype.close=function(){this.trace("stop");if(this.statsinterval!==null){window.clearInterval(this.statsinterval);this.statsinterval=null}this.peerconnection.close()};TraceablePeerConnection.prototype.createOffer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createOffer",JSON.stringify(constraints,null," "));this.peerconnection.createOffer(function(offer){self.trace("createOfferOnSuccess::preTransform",dumpSDP(offer));if(RTCBrowserType.usesUnifiedPlan()){offer=self.interop.toPlanB(offer);self.trace("createOfferOnSuccess::postTransform (Plan B)",dumpSDP(offer))}offer=SSRCReplacement.mungeLocalVideoSSRC(offer);if(self.session.room.options.enableSimulcast&&self.simulcast.isSupported()){offer=self.simulcast.mungeLocalDescription(offer);self.trace("createOfferOnSuccess::postTransform (simulcast)",dumpSDP(offer))}successCallback(offer)},function(err){self.trace("createOfferOnFailure",err);failureCallback(err)},constraints)};TraceablePeerConnection.prototype.createAnswer=function(successCallback,failureCallback,constraints){var self=this;this.trace("createAnswer",JSON.stringify(constraints,null," "));this.peerconnection.createAnswer(function(answer){self.trace("createAnswerOnSuccess::preTransform",dumpSDP(answer));if(RTCBrowserType.usesUnifiedPlan()){answer=self.interop.toPlanB(answer);self.trace("createAnswerOnSuccess::postTransform (Plan B)",dumpSDP(answer))}answer=SSRCReplacement.mungeLocalVideoSSRC(answer);if(self.session.room.options.enableSimulcast&&self.simulcast.isSupported()){answer=self.simulcast.mungeLocalDescription(answer);self.trace("createAnswerOnSuccess::postTransform (simulcast)",dumpSDP(answer))}successCallback(answer)},function(err){self.trace("createAnswerOnFailure",err);failureCallback(err)},constraints)};TraceablePeerConnection.prototype.addIceCandidate=function(candidate,successCallback,failureCallback){this.trace("addIceCandidate",JSON.stringify(candidate,null," "));this.peerconnection.addIceCandidate(candidate)};TraceablePeerConnection.prototype.getStats=function(callback,errback){if(RTCBrowserType.isFirefox()){if(!errback)errback=function(){};this.peerconnection.getStats(null,callback,errback)}else{this.peerconnection.getStats(callback)}};module.exports=TraceablePeerConnection}).call(this,"/modules/xmpp/TraceablePeerConnection.js")},{"../../service/xmpp/XMPPEvents":87,"../RTC/RTC":16,"../RTC/RTCBrowserType.js":17,"./LocalSSRCReplacement":29,"jitsi-meet-logger":48,"sdp-interop":66,"sdp-simulcast":69,"sdp-transform":76}],34:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var XMPPEvents=require("../../service/xmpp/XMPPEvents");var Settings=require("../settings/Settings");var AuthenticationEvents=require("../../service/authentication/AuthenticationEvents");function createExpBackoffTimer(step){var count=1;return function(reset){if(reset){count=1;return}var timeout=Math.pow(2,count-1);count+=1;return timeout*step}}function Moderator(roomName,xmpp,emitter){this.roomName=roomName;this.xmppService=xmpp;this.getNextTimeout=createExpBackoffTimer(1e3);this.getNextErrorTimeout=createExpBackoffTimer(1e3);this.externalAuthEnabled=false;this.settings=new Settings(roomName);this.sipGatewayEnabled=this.xmppService.options.hosts&&this.xmppService.options.hosts.call_control!==undefined;this.eventEmitter=emitter;this.connection=this.xmppService.connection;this.focusUserJid;function listener(event){if(event.data&&event.data.sessionId){if(event.origin!==window.location.origin){logger.warn("Ignoring sessionId from different origin: "+event.origin);return}localStorage.setItem("sessionId",event.data.sessionId)}}if(window.addEventListener){window.addEventListener("message",listener,false)}else{window.attachEvent("onmessage",listener)}}Moderator.prototype.isExternalAuthEnabled=function(){return this.externalAuthEnabled};Moderator.prototype.isSipGatewayEnabled=function(){return this.sipGatewayEnabled};Moderator.prototype.onMucMemberLeft=function(jid){logger.info("Someone left is it focus ? "+jid);var resource=Strophe.getResourceFromJid(jid);if(resource==="focus"&&!this.xmppService.sessionTerminated){logger.info("Focus has left the room - leaving conference");this.eventEmitter.emit(XMPPEvents.FOCUS_LEFT)}};Moderator.prototype.setFocusUserJid=function(focusJid){if(!this.focusUserJid){this.focusUserJid=focusJid;logger.info("Focus jid set to: "+this.focusUserJid)}};Moderator.prototype.getFocusUserJid=function(){return this.focusUserJid};Moderator.prototype.getFocusComponent=function(){var focusComponent=this.xmppService.options.hosts.focus;if(!focusComponent){focusComponent="focus."+this.xmppService.options.hosts.domain}return focusComponent};Moderator.prototype.createConferenceIq=function(){var elem=$iq({to:this.getFocusComponent(),type:"set"});var sessionId=localStorage.getItem("sessionId");var machineUID=this.settings.getSettings().uid;logger.info("Session ID: "+sessionId+" machine UID: "+machineUID);elem.c("conference",{xmlns:"http://jitsi.org/protocol/focus",room:this.roomName,"machine-uid":machineUID});if(sessionId){elem.attrs({"session-id":sessionId})}if(this.xmppService.options.hosts.bridge!==undefined){elem.c("property",{name:"bridge",value:this.xmppService.options.hosts.bridge}).up()}if(this.xmppService.options.enforcedBridge!==undefined){elem.c("property",{name:"enforcedBridge",value:this.xmppService.options.enforcedBridge}).up()}if(this.xmppService.options.hosts.call_control!==undefined){elem.c("property",{name:"call_control",value:this.xmppService.options.hosts.call_control}).up()}if(this.xmppService.options.channelLastN!==undefined){elem.c("property",{name:"channelLastN",value:this.xmppService.options.channelLastN}).up()}if(this.xmppService.options.adaptiveLastN!==undefined){elem.c("property",{name:"adaptiveLastN",value:this.xmppService.options.adaptiveLastN}).up()}if(this.xmppService.options.adaptiveSimulcast!==undefined){elem.c("property",{name:"adaptiveSimulcast",value:this.xmppService.options.adaptiveSimulcast}).up()}if(this.xmppService.options.openSctp!==undefined){elem.c("property",{name:"openSctp",value:this.xmppService.options.openSctp}).up()}if(this.xmppService.options.startAudioMuted!==undefined){elem.c("property",{name:"startAudioMuted",value:this.xmppService.options.startAudioMuted}).up()}if(this.xmppService.options.startVideoMuted!==undefined){elem.c("property",{name:"startVideoMuted",value:this.xmppService.options.startVideoMuted}).up()}elem.c("property",{name:"simulcastMode",value:"rewriting"}).up();elem.up();return elem};Moderator.prototype.parseSessionId=function(resultIq){var sessionId=$(resultIq).find("conference").attr("session-id");if(sessionId){logger.info("Received sessionId: "+sessionId);localStorage.setItem("sessionId",sessionId)}};Moderator.prototype.parseConfigOptions=function(resultIq){this.setFocusUserJid($(resultIq).find("conference").attr("focusjid"));var authenticationEnabled=$(resultIq).find(">conference>property"+"[name='authentication'][value='true']").length>0;logger.info("Authentication enabled: "+authenticationEnabled);this.externalAuthEnabled=$(resultIq).find(">conference>property"+"[name='externalAuth'][value='true']").length>0;console.info("External authentication enabled: "+this.externalAuthEnabled);if(!this.externalAuthEnabled){this.parseSessionId(resultIq)}var authIdentity=$(resultIq).find(">conference").attr("identity");this.eventEmitter.emit(AuthenticationEvents.IDENTITY_UPDATED,authenticationEnabled,authIdentity);if($(resultIq).find(">conference>property"+"[name='sipGatewayEnabled'][value='true']").length){this.sipGatewayEnabled=true}logger.info("Sip gateway enabled: "+this.sipGatewayEnabled)};Moderator.prototype.allocateConferenceFocus=function(callback){this.setFocusUserJid(this.xmppService.options.focusUserJid);var iq=this.createConferenceIq();var self=this;this.connection.sendIQ(iq,function(result){self.parseConfigOptions(result);if("true"===$(result).find("conference").attr("ready")){self.getNextTimeout(true);self.getNextErrorTimeout(true);callback()}else{var waitMs=self.getNextTimeout();logger.info("Waiting for the focus... "+waitMs);self.getNextErrorTimeout(true);window.setTimeout(function(){self.allocateConferenceFocus(callback)},waitMs)}},function(error){var invalidSession=$(error).find(">error>session-invalid").length;if(invalidSession){logger.info("Session expired! - removing");localStorage.removeItem("sessionId")}if($(error).find(">error>graceful-shutdown").length){self.eventEmitter.emit(XMPPEvents.GRACEFUL_SHUTDOWN);return}var reservationErr=$(error).find(">error>reservation-error");if(reservationErr.length){var errorCode=reservationErr.attr("error-code");var errorMsg;if($(error).find(">error>text")){errorMsg=$(error).find(">error>text").text()}self.eventEmitter.emit(XMPPEvents.RESERVATION_ERROR,errorCode,errorMsg);return}if($(error).find(">error>not-authorized").length){logger.warn("Unauthorized to start the conference",error);var toDomain=Strophe.getDomainFromJid(error.getAttribute("to"));if(toDomain!==this.xmppService.options.hosts.anonymousdomain){self.externalAuthEnabled=true}self.eventEmitter.emit(XMPPEvents.AUTHENTICATION_REQUIRED,function(){self.allocateConferenceFocus(callback)});return}var waitMs=self.getNextErrorTimeout();logger.error("Focus error, retry after "+waitMs,error);var focusComponent=self.getFocusComponent();var retrySec=waitMs/1e3;if(!invalidSession){self.eventEmitter.emit(XMPPEvents.FOCUS_DISCONNECTED,focusComponent,retrySec)}self.getNextTimeout(true);window.setTimeout(function(){self.allocateConferenceFocus(callback)},waitMs)})};Moderator.prototype.authenticate=function(){var self=this;return new Promise(function(resolve,reject){self.connection.sendIQ(self.createConferenceIq(),function(result){self.parseSessionId(result);resolve()},function(error){var code=$(error).find(">error").attr("code");reject(error,code)})})};Moderator.prototype.getLoginUrl=function(urlCallback,failureCallback){var iq=$iq({to:this.getFocusComponent(),type:"get"});iq.c("login-url",{xmlns:"http://jitsi.org/protocol/focus",room:this.roomName,"machine-uid":this.settings.getSettings().uid});this.connection.sendIQ(iq,function(result){var url=$(result).find("login-url").attr("url");url=url=decodeURIComponent(url);if(url){logger.info("Got auth url: "+url);urlCallback(url)}else{logger.error("Failed to get auth url from the focus",result);failureCallback(result)}},function(error){logger.error("Get auth url error",error);failureCallback(error)})};Moderator.prototype.getPopupLoginUrl=function(urlCallback,failureCallback){var iq=$iq({to:this.getFocusComponent(),type:"get"});iq.c("login-url",{xmlns:"http://jitsi.org/protocol/focus",room:this.roomName,"machine-uid":this.settings.getSettings().uid,popup:true});this.connection.sendIQ(iq,function(result){var url=$(result).find("login-url").attr("url");url=url=decodeURIComponent(url);if(url){logger.info("Got POPUP auth url: "+url);urlCallback(url)}else{logger.error("Failed to get POPUP auth url from the focus",result);failureCallback(result)}},function(error){logger.error("Get POPUP auth url error",error);failureCallback(error)})};Moderator.prototype.logout=function(callback){var iq=$iq({to:this.getFocusComponent(),type:"set"});var sessionId=localStorage.getItem("sessionId");if(!sessionId){callback();return}iq.c("logout",{xmlns:"http://jitsi.org/protocol/focus","session-id":sessionId});this.connection.sendIQ(iq,function(result){var logoutUrl=$(result).find("logout").attr("logout-url");if(logoutUrl){logoutUrl=decodeURIComponent(logoutUrl)}logger.info("Log out OK, url: "+logoutUrl,result);localStorage.removeItem("sessionId");callback(logoutUrl)},function(error){logger.error("Logout error",error)})};module.exports=Moderator}).call(this,"/modules/xmpp/moderator.js")},{"../../service/authentication/AuthenticationEvents":83,"../../service/xmpp/XMPPEvents":87,"../settings/Settings":21,"jitsi-meet-logger":48}],35:[function(require,module,exports){(function(__filename){var XMPPEvents=require("../../service/XMPP/XMPPEvents");var logger=require("jitsi-meet-logger").getLogger(__filename);function Recording(type,eventEmitter,connection,focusMucJid,jirecon,roomjid){this.eventEmitter=eventEmitter;this.connection=connection;this.state="off";this.focusMucJid=focusMucJid;this.jirecon=jirecon;this.url=null;this.type=type;this._isSupported=type===Recording.types.JIBRI||type===Recording.types.JIRECON&&!this.jirecon?false:true;this.jireconRid=null;this.roomjid=roomjid}Recording.types={COLIBRI:"colibri",JIRECON:"jirecon",JIBRI:"jibri"};Recording.prototype.handleJibriPresence=function(jibri){var attributes=jibri.attributes;if(!attributes)return;this._isSupported=attributes.status&&attributes.status!=="undefined";if(this._isSupported){this.url=attributes.url||null;this.state=attributes.status||"off"}this.eventEmitter.emit(XMPPEvents.RECORDING_STATE_CHANGED)};Recording.prototype.setRecordingJibri=function(state,callback,errCallback,options){if(state==this.state){errCallback(new Error("Invalid state!"))}options=options||{};var iq=$iq({to:this.focusMucJid,type:"set"}).c("jibri",{xmlns:"http://jitsi.org/protocol/jibri",action:state==="on"?"start":"stop",streamid:options.streamId,"follow-entity":options.followEntity}).up();logger.log("Set jibri recording: "+state,iq.nodeTree);console.log(iq.nodeTree);this.connection.sendIQ(iq,function(result){callback($(result).find("jibri").attr("state"),$(result).find("jibri").attr("url"))},function(error){logger.log("Failed to start recording, error: ",error);errCallback(error)})};Recording.prototype.setRecordingJirecon=function(state,callback,errCallback,options){if(state==this.state){errCallback(new Error("Invalid state!"))}var iq=$iq({to:this.jirecon,type:"set"}).c("recording",{xmlns:"http://jitsi.org/protocol/jirecon",action:state==="on"?"start":"stop",mucjid:this.roomjid});if(state==="off"){iq.attrs({rid:this.jireconRid})}console.log("Start recording");var self=this;this.connection.sendIQ(iq,function(result){self.jireconRid=$(result).find("recording").attr("rid");console.log("Recording "+(state==="on"?"started":"stopped")+"(jirecon)"+result);self.state=state;if(state==="off"){self.jireconRid=null}callback(state)},function(error){console.log("Failed to start recording, error: ",error);errCallback(error)})};Recording.prototype.setRecordingColibri=function(state,callback,errCallback,options){var elem=$iq({to:this.focusMucJid,type:"set"});elem.c("conference",{xmlns:"http://jitsi.org/protocol/colibri"});elem.c("recording",{state:state,token:options.token});var self=this;this.connection.sendIQ(elem,function(result){console.log('Set recording "',state,'". Result:',result);var recordingElem=$(result).find(">conference>recording");var newState=recordingElem.attr("state");self.state=newState;callback(newState);if(newState==="pending"){self.connection.addHandler(function(iq){var state=$(iq).find("recording").attr("state");if(state){self.state=newState;callback(state)}},"http://jitsi.org/protocol/colibri","iq",null,null,null)}},function(error){console.warn(error);errCallback(error)})};Recording.prototype.setRecording=function(state,callback,errCallback,options){switch(this.type){case Recording.types.JIRECON:this.setRecordingJirecon(state,callback,errCallback,options);break;case Recording.types.COLIBRI:this.setRecordingColibri(state,callback,errCallback,options);break;case Recording.types.JIBRI:this.setRecordingJibri(state,callback,errCallback,options);break;default:console.error("Unknown recording type!");return}};Recording.prototype.toggleRecording=function(options,statusChangeHandler){if(!options.token&&this.type===Recording.types.COLIBRI||!options.streamId&&this.type===Recording.types.JIBRI){statusChangeHandler("error",new Error("No token passed!"));logger.error("No token passed!");return}var oldState=this.state;var newState=oldState==="off"||!oldState?"on":"off";var self=this;this.setRecording(newState,function(state,url){logger.log("New recording state: ",state);if(state&&state!==oldState){self.state=state;self.url=url;statusChangeHandler(state)}else{statusChangeHandler("error",new Error("Status not changed!"))}},function(error){statusChangeHandler("error",error)},options)};Recording.prototype.isSupported=function(){return this._isSupported};Recording.prototype.getState=function(){return this.state};Recording.prototype.getURL=function(){return this.url};module.exports=Recording}).call(this,"/modules/xmpp/recording.js")},{"../../service/XMPP/XMPPEvents":82,"jitsi-meet-logger":48}],36:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var ChatRoom=require("./ChatRoom");module.exports=function(XMPP){Strophe.addConnectionPlugin("emuc",{connection:null,rooms:{},init:function(conn){this.connection=conn;this.connection.addHandler(this.onPresence.bind(this),null,"presence",null,null,null,null);this.connection.addHandler(this.onPresenceUnavailable.bind(this),null,"presence","unavailable",null);this.connection.addHandler(this.onPresenceError.bind(this),null,"presence","error",null);this.connection.addHandler(this.onMessage.bind(this),null,"message",null,null);this.connection.addHandler(this.onMute.bind(this),"http://jitsi.org/jitmeet/audio","iq","set",null,null)},createRoom:function(jid,password,options){var roomJid=Strophe.getBareJidFromJid(jid);if(this.rooms[roomJid]){logger.error("You are already in the room!");return}this.rooms[roomJid]=new ChatRoom(this.connection,jid,password,XMPP,options);return this.rooms[roomJid]},doLeave:function(jid){this.rooms[jid].doLeave();delete this.rooms[jid]},onPresence:function(pres){var from=pres.getAttribute("from");if(pres.getAttribute("type")){return true}var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;if($(pres).find('>x[xmlns="http://jabber.org/protocol/muc#user"]>status[code="201"]').length){room.createNonAnonymousRoom()}room.onPresence(pres);return true},onPresenceUnavailable:function(pres){var from=pres.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onPresenceUnavailable(pres,from);return true},onPresenceError:function(pres){var from=pres.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onPresenceError(pres,from);return true},onMessage:function(msg){var from=msg.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onMessage(msg,from);return true},setJingleSession:function(from,session){var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.setJingleSession(session)},onMute:function(iq){var from=iq.getAttribute("from");var room=this.rooms[Strophe.getBareJidFromJid(from)];if(!room)return;room.onMute(iq);return true}})}}).call(this,"/modules/xmpp/strophe.emuc.js")},{"./ChatRoom":26,"jitsi-meet-logger":48}],37:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var JingleSession=require("./JingleSessionPC");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var RTCBrowserType=require("../RTC/RTCBrowserType");module.exports=function(XMPP,eventEmitter){Strophe.addConnectionPlugin("jingle",{connection:null,sessions:{},jid2session:{},ice_config:{iceServers:[]},media_constraints:{mandatory:{OfferToReceiveAudio:true,OfferToReceiveVideo:true}},init:function(conn){this.connection=conn;if(this.connection.disco){this.connection.disco.addFeature("urn:xmpp:jingle:1");this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:1");this.connection.disco.addFeature("urn:xmpp:jingle:transports:ice-udp:1");this.connection.disco.addFeature("urn:xmpp:jingle:apps:dtls:0");this.connection.disco.addFeature("urn:xmpp:jingle:transports:dtls-sctp:1");this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:audio");this.connection.disco.addFeature("urn:xmpp:jingle:apps:rtp:video");if(RTCBrowserType.isChrome()||RTCBrowserType.isOpera()||RTCBrowserType.isTemasysPluginUsed()){this.connection.disco.addFeature("urn:ietf:rfc:4588")}this.connection.disco.addFeature("urn:ietf:rfc:5761");this.connection.disco.addFeature("urn:ietf:rfc:5888")}this.connection.addHandler(this.onJingle.bind(this),"urn:xmpp:jingle:1","iq","set",null,null)},onJingle:function(iq){var sid=$(iq).find("jingle").attr("sid");var action=$(iq).find("jingle").attr("action");var fromJid=iq.getAttribute("from");var ack=$iq({type:"result",to:fromJid,id:iq.getAttribute("id")});logger.log("on jingle "+action+" from "+fromJid,iq);var sess=this.sessions[sid];if("session-initiate"!=action){if(sess===null){ack.type="error";ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"});this.connection.send(ack);return true}if(fromJid!=sess.peerjid){logger.warn("jid mismatch for session id",sid,fromJid,sess.peerjid);ack.type="error";ack.c("error",{type:"cancel"}).c("item-not-found",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up().c("unknown-session",{xmlns:"urn:xmpp:jingle:errors:1"});this.connection.send(ack);return true}}else if(sess!==undefined){ack.type="error";ack.c("error",{type:"cancel"}).c("service-unavailable",{xmlns:"urn:ietf:params:xml:ns:xmpp-stanzas"}).up();logger.warn("duplicate session id",sid);this.connection.send(ack);return true}this.connection.send(ack);switch(action){case"session-initiate":console.log("(TIME) received session-initiate: ",window.performance.now());var startMuted=$(iq).find("jingle>startmuted");if(startMuted&&startMuted.length>0){var audioMuted=startMuted.attr("audio");var videoMuted=startMuted.attr("video");eventEmitter.emit(XMPPEvents.START_MUTED_FROM_FOCUS,audioMuted==="true",videoMuted==="true");
  8. }sess=new JingleSession($(iq).attr("to"),$(iq).find("jingle").attr("sid"),this.connection,XMPP);var fromBareJid=Strophe.getBareJidFromJid(fromJid);this.connection.emuc.setJingleSession(fromBareJid,sess);sess.media_constraints=this.media_constraints;sess.ice_config=this.ice_config;sess.initialize(fromJid,false);eventEmitter.emit(XMPPEvents.CALL_INCOMING,sess);sess.setOffer($(iq).find(">jingle"));this.sessions[sess.sid]=sess;this.jid2session[sess.peerjid]=sess;sess.sendAnswer();sess.accept();break;case"session-accept":sess.setAnswer($(iq).find(">jingle"));sess.accept();break;case"session-terminate":if(Object.keys(this.sessions).length<1||!(this.sessions[Object.keys(this.sessions)[0]]instanceof JingleSession)){break}logger.log("terminating...",sess.sid);sess.terminate();this.terminate(sess.sid);if($(iq).find(">jingle>reason").length){$(document).trigger("callterminated.jingle",[sess.sid,sess.peerjid,$(iq).find(">jingle>reason>:first")[0].tagName,$(iq).find(">jingle>reason>text").text()])}else{$(document).trigger("callterminated.jingle",[sess.sid,sess.peerjid])}break;case"transport-info":sess.addIceCandidate($(iq).find(">jingle>content"));break;case"session-info":var affected;if($(iq).find('>jingle>ringing[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length){$(document).trigger("ringing.jingle",[sess.sid])}else if($(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length){affected=$(iq).find('>jingle>mute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name");$(document).trigger("mute.jingle",[sess.sid,affected])}else if($(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').length){affected=$(iq).find('>jingle>unmute[xmlns="urn:xmpp:jingle:apps:rtp:info:1"]').attr("name");$(document).trigger("unmute.jingle",[sess.sid,affected])}break;case"addsource":case"source-add":sess.addSource($(iq).find(">jingle>content"));break;case"removesource":case"source-remove":sess.removeSource($(iq).find(">jingle>content"));break;default:logger.warn("jingle action not implemented",action);break}return true},terminate:function(sid,reason,text){if(sid===null||sid===undefined){for(sid in this.sessions){if(this.sessions[sid].state!="ended"){this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text);this.sessions[sid].terminate()}delete this.jid2session[this.sessions[sid].peerjid];delete this.sessions[sid]}}else if(this.sessions.hasOwnProperty(sid)){if(this.sessions[sid].state!="ended"){this.sessions[sid].sendTerminate(reason||!this.sessions[sid].active()?"cancel":null,text);this.sessions[sid].terminate()}delete this.jid2session[this.sessions[sid].peerjid];delete this.sessions[sid]}},getStunAndTurnCredentials:function(){var self=this;this.connection.sendIQ($iq({type:"get",to:this.connection.domain}).c("services",{xmlns:"urn:xmpp:extdisco:1"}).c("service",{host:"turn."+this.connection.domain}),function(res){var iceservers=[];$(res).find(">services>service").each(function(idx,el){el=$(el);var dict={};var type=el.attr("type");switch(type){case"stun":dict.url="stun:"+el.attr("host");if(el.attr("port")){dict.url+=":"+el.attr("port")}iceservers.push(dict);break;case"turn":case"turns":dict.url=type+":";if(el.attr("username")){if(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)&&parseInt(navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./)[2],10)<28){dict.url+=el.attr("username")+"@"}else{dict.username=el.attr("username")}}dict.url+=el.attr("host");if(el.attr("port")&&el.attr("port")!="3478"){dict.url+=":"+el.attr("port")}if(el.attr("transport")&&el.attr("transport")!="udp"){dict.url+="?transport="+el.attr("transport")}if(el.attr("password")){dict.credential=el.attr("password")}iceservers.push(dict);break}});self.ice_config.iceServers=iceservers},function(err){logger.warn("getting turn credentials failed",err);logger.warn("is mod_turncredentials or similar installed?")})},getLog:function(){var data={};var self=this;Object.keys(this.sessions).forEach(function(sid){var session=self.sessions[sid];if(session.peerconnection&&session.peerconnection.updateLog){data["jingle_"+session.sid]={updateLog:session.peerconnection.updateLog,stats:session.peerconnection.stats,url:window.location.href}}});return data}})}}).call(this,"/modules/xmpp/strophe.jingle.js")},{"../../service/xmpp/XMPPEvents":87,"../RTC/RTCBrowserType":17,"./JingleSessionPC":28,"jitsi-meet-logger":48}],38:[function(require,module,exports){module.exports=function(){Strophe.addConnectionPlugin("logger",{connection:null,log:[],init:function(conn){this.connection=conn;this.connection.rawInput=this.log_incoming.bind(this);this.connection.rawOutput=this.log_outgoing.bind(this)},log_incoming:function(stanza){this.log.push([(new Date).getTime(),"incoming",stanza])},log_outgoing:function(stanza){this.log.push([(new Date).getTime(),"outgoing",stanza])}})}},{}],39:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var XMPPEvents=require("../../service/xmpp/XMPPEvents");var PING_INTERVAL=2e4;var PING_TIMEOUT=15e3;var PING_THRESHOLD=3;module.exports=function(XMPP,eventEmitter){Strophe.addConnectionPlugin("ping",{connection:null,failedPings:0,init:function(connection){this.connection=connection;Strophe.addNamespace("PING","urn:xmpp:ping")},ping:function(jid,success,error,timeout){var iq=$iq({type:"get",to:jid});iq.c("ping",{xmlns:Strophe.NS.PING});this.connection.sendIQ(iq,success,error,timeout)},hasPingSupport:function(jid,callback){this.connection.disco.info(jid,null,function(result){var ping=$(result).find('>>feature[var="urn:xmpp:ping"]');callback(ping.length>0)},function(error){logger.error("Ping feature discovery error",error);callback(false)})},startInterval:function(remoteJid,interval){if(this.intervalId){logger.error("Ping task scheduled already");return}if(!interval)interval=PING_INTERVAL;var self=this;this.intervalId=window.setInterval(function(){self.ping(remoteJid,function(result){self.failedPings=0},function(error){self.failedPings+=1;logger.error("Ping "+(error?"error":"timeout"),error);if(self.failedPings>=PING_THRESHOLD){self.connection.disconnect()}},PING_TIMEOUT)},interval);logger.info("XMPP pings will be sent every "+interval+" ms")},stopInterval:function(){if(this.intervalId){window.clearInterval(this.intervalId);this.intervalId=null;this.failedPings=0;logger.info("Ping interval cleared")}}})}}).call(this,"/modules/xmpp/strophe.ping.js")},{"../../service/xmpp/XMPPEvents":87,"jitsi-meet-logger":48}],40:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);module.exports=function(){Strophe.addConnectionPlugin("rayo",{RAYO_XMLNS:"urn:xmpp:rayo:1",connection:null,init:function(conn){this.connection=conn;if(this.connection.disco){this.connection.disco.addFeature("urn:xmpp:rayo:client:1")}this.connection.addHandler(this.onRayo.bind(this),this.RAYO_XMLNS,"iq","set",null,null)},onRayo:function(iq){logger.info("Rayo IQ",iq)},dial:function(to,from,roomName,roomPass,focusMucJid){var self=this;return new Promise(function(resolve,reject){if(!focusMucJid){reject(new Error("Internal error!"));return}var req=$iq({type:"set",to:focusMucJid});req.c("dial",{xmlns:self.RAYO_XMLNS,to:to,from:from});req.c("header",{name:"JvbRoomName",value:roomName}).up();if(roomPass!==null&&roomPass.length){req.c("header",{name:"JvbRoomPassword",value:roomPass}).up()}self.connection.sendIQ(req,function(result){logger.info("Dial result ",result);var resource=$(result).find("ref").attr("uri");self.call_resource=resource.substr("xmpp:".length);logger.info("Received call resource: "+self.call_resource);resolve()},function(error){logger.info("Dial error ",error);reject(error)})})},hangup:function(){var self=this;return new Promise(function(resolve,reject){if(!self.call_resource){reject(new Error("No call in progress"));logger.warn("No call in progress");return}var req=$iq({type:"set",to:self.call_resource});req.c("hangup",{xmlns:self.RAYO_XMLNS});self.connection.sendIQ(req,function(result){logger.info("Hangup result ",result);self.call_resource=null;resolve()},function(error){logger.info("Hangup error ",error);self.call_resource=null;reject(new Error("Hangup error "))})})}})}}).call(this,"/modules/xmpp/strophe.rayo.js")},{"jitsi-meet-logger":48}],41:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);module.exports=function(){Strophe.log=function(level,msg){switch(level){case Strophe.LogLevel.WARN:logger.warn("Strophe: "+msg);break;case Strophe.LogLevel.ERROR:case Strophe.LogLevel.FATAL:logger.error("Strophe: "+msg);break}};Strophe.getStatusString=function(status){switch(status){case Strophe.Status.ERROR:return"ERROR";case Strophe.Status.CONNECTING:return"CONNECTING";case Strophe.Status.CONNFAIL:return"CONNFAIL";case Strophe.Status.AUTHENTICATING:return"AUTHENTICATING";case Strophe.Status.AUTHFAIL:return"AUTHFAIL";case Strophe.Status.CONNECTED:return"CONNECTED";case Strophe.Status.DISCONNECTED:return"DISCONNECTED";case Strophe.Status.DISCONNECTING:return"DISCONNECTING";case Strophe.Status.ATTACHED:return"ATTACHED";default:return"unknown"}}}}).call(this,"/modules/xmpp/strophe.util.js")},{"jitsi-meet-logger":48}],42:[function(require,module,exports){(function(__filename){var logger=require("jitsi-meet-logger").getLogger(__filename);var EventEmitter=require("events");var Pako=require("pako");var RTCEvents=require("../../service/RTC/RTCEvents");var XMPPEvents=require("../../service/xmpp/XMPPEvents");var JitsiConnectionErrors=require("../../JitsiConnectionErrors");var JitsiConnectionEvents=require("../../JitsiConnectionEvents");var RTC=require("../RTC/RTC");var authenticatedUser=false;function createConnection(bosh){bosh=bosh||"/http-bind";if(this.token){bosh+=bosh.indexOf("?")==-1?"?token="+this.token:"&token="+this.token}return new Strophe.Connection(bosh)}function initStrophePlugins(XMPP){require("./strophe.emuc")(XMPP);require("./strophe.jingle")(XMPP,XMPP.eventEmitter);require("./strophe.util")();require("./strophe.ping")(XMPP,XMPP.eventEmitter);require("./strophe.rayo")();require("./strophe.logger")()}function XMPP(options){this.eventEmitter=new EventEmitter;this.connection=null;this.disconnectInProgress=false;this.forceMuted=false;this.options=options;initStrophePlugins(this);this.connection=createConnection(options.bosh)}XMPP.prototype.getConnection=function(){return connection};XMPP.prototype._connect=function(jid,password){var self=this;var anonymousConnectionFailed=false;var connectionFailed=false;var lastErrorMsg;this.connection.connect(jid,password,function(status,msg){logger.log("(TIME) Strophe "+Strophe.getStatusString(status)+(msg?"["+msg+"]":"")+" :"+window.performance.now());if(status===Strophe.Status.CONNECTED){if(self.options.useStunTurn){self.connection.jingle.getStunAndTurnCredentials()}logger.info("My Jabber ID: "+self.connection.jid);var pingJid=self.connection.domain;self.connection.ping.hasPingSupport(pingJid,function(hasPing){if(hasPing)self.connection.ping.startInterval(pingJid);else logger.warn("Ping NOT supported by "+pingJid)});if(password)authenticatedUser=true;if(self.connection&&self.connection.connected&&Strophe.getResourceFromJid(self.connection.jid)){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_ESTABLISHED,Strophe.getResourceFromJid(self.connection.jid))}}else if(status===Strophe.Status.CONNFAIL){if(msg==="x-strophe-bad-non-anon-jid"){anonymousConnectionFailed=true}else{connectionFailed=true}lastErrorMsg=msg}else if(status===Strophe.Status.DISCONNECTED){self.connection.ping.stopInterval();self.disconnectInProgress=false;if(anonymousConnectionFailed){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_FAILED,JitsiConnectionErrors.PASSWORD_REQUIRED)}else if(connectionFailed){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_FAILED,JitsiConnectionErrors.OTHER_ERROR,msg?msg:lastErrorMsg)}else{self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_DISCONNECTED,msg?msg:lastErrorMsg)}}else if(status===Strophe.Status.AUTHFAIL){self.eventEmitter.emit(JitsiConnectionEvents.CONNECTION_FAILED,JitsiConnectionErrors.PASSWORD_REQUIRED)}})};XMPP.prototype.connect=function(jid,password){if(!jid){var configDomain=this.options.hosts.anonymousdomain||this.options.hosts.domain;if(this.options.hosts.anonymousdomain&&window.location.search.indexOf("login=true")!==-1){configDomain=this.options.hosts.domain}jid=configDomain||window.location.hostname}return this._connect(jid,password)};XMPP.prototype.createRoom=function(roomName,options){var roomjid=roomName+"@"+this.options.hosts.muc;if(options.useNicks){if(options.nick){roomjid+="/"+options.nick}else{roomjid+="/"+Strophe.getNodeFromJid(this.connection.jid)}}else{var tmpJid=Strophe.getNodeFromJid(this.connection.jid);if(!authenticatedUser)tmpJid=tmpJid.substr(0,8);roomjid+="/"+tmpJid}return this.connection.emuc.createRoom(roomjid,null,options)};XMPP.prototype.addListener=function(type,listener){this.eventEmitter.on(type,listener)};XMPP.prototype.removeListener=function(type,listener){this.eventEmitter.removeListener(type,listener)};XMPP.prototype.leaveRoom=function(jid){var handler=this.connection.jingle.jid2session[jid];if(handler&&handler.peerconnection){if(RTC.localAudio){handler.peerconnection.removeStream(RTC.localAudio.getOriginalStream(),true)}if(RTC.localVideo){handler.peerconnection.removeStream(RTC.localVideo.getOriginalStream(),true)}handler.peerconnection.close()}this.eventEmitter.emit(XMPPEvents.DISPOSE_CONFERENCE);this.connection.emuc.doLeave(jid)};XMPP.prototype.sendLogs=function(data){if(!this.connection.emuc.focusMucJid)return false;var deflate=true;var content=JSON.stringify(data);if(deflate){content=String.fromCharCode.apply(null,Pako.deflateRaw(content))}content=Base64.encode(content);var message=$msg({to:this.connection.emuc.focusMucJid,type:"normal"});message.c("log",{xmlns:"urn:xmpp:eventlog",id:"PeerConnectionStats"});message.c("message").t(content).up();if(deflate){message.c("tag",{name:"deflated",value:"true"}).up()}message.up();this.connection.send(message);return true};XMPP.prototype.getJingleLog=function(){return this.connection.jingle?this.connection.jingle.getLog():{}};XMPP.prototype.getXmppLog=function(){return this.connection.logger?this.connection.logger.log:null};XMPP.prototype.dial=function(to,from,roomName,roomPass){this.connection.rayo.dial(to,from,roomName,roomPass)};XMPP.prototype.setMute=function(jid,mute){this.connection.moderate.setMute(jid,mute)};XMPP.prototype.eject=function(jid){this.connection.moderate.eject(jid)};XMPP.prototype.getSessions=function(){return this.connection.jingle.sessions};XMPP.prototype.disconnect=function(){if(this.disconnectInProgress||!this.connection||!this.connection.connected){this.eventEmitter.emit(JitsiConnectionEvents.WRONG_STATE);return}this.disconnectInProgress=true;this.connection.disconnect()};XMPP.prototype.getLocalSSRC=function(mediaType){if(this.connection.jingle.activecall&&this.connection.jingle.activecall.peerconnection){return this.connection.jingle.activecall.getLocalSSRC(mediaType)}else{return null}};module.exports=XMPP}).call(this,"/modules/xmpp/xmpp.js")},{"../../JitsiConnectionErrors":5,"../../JitsiConnectionEvents":6,"../../service/RTC/RTCEvents":80,"../../service/xmpp/XMPPEvents":87,"../RTC/RTC":16,"./strophe.emuc":36,"./strophe.jingle":37,"./strophe.logger":38,"./strophe.ping":39,"./strophe.rayo":40,"./strophe.util":41,events:44,"jitsi-meet-logger":48,pako:49}],43:[function(require,module,exports){(function(process){(function(){var async={};var root,previous_async;root=this;if(root!=null){previous_async=root.async}async.noConflict=function(){root.async=previous_async;return async};function only_once(fn){var called=false;return function(){if(called)throw new Error("Callback was already called.");called=true;fn.apply(root,arguments)}}var _toString=Object.prototype.toString;var _isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var _each=function(arr,iterator){if(arr.forEach){return arr.forEach(iterator)}for(var i=0;i<arr.length;i+=1){iterator(arr[i],i,arr)}};var _map=function(arr,iterator){if(arr.map){return arr.map(iterator)}var results=[];_each(arr,function(x,i,a){results.push(iterator(x,i,a))});return results};var _reduce=function(arr,iterator,memo){if(arr.reduce){return arr.reduce(iterator,memo)}_each(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo};var _keys=function(obj){if(Object.keys){return Object.keys(obj)}var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};if(typeof process==="undefined"||!process.nextTick){if(typeof setImmediate==="function"){async.nextTick=function(fn){setImmediate(fn)};async.setImmediate=async.nextTick}else{async.nextTick=function(fn){setTimeout(fn,0)};async.setImmediate=async.nextTick}}else{async.nextTick=process.nextTick;if(typeof setImmediate!=="undefined"){async.setImmediate=function(fn){setImmediate(fn)}}else{async.setImmediate=async.nextTick}}async.each=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;_each(arr,function(x){iterator(x,only_once(done))});function done(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}}}};async.forEach=async.each;async.eachSeries=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;var iterate=function(){iterator(arr[completed],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}else{iterate()}}})};iterate()};async.forEachSeries=async.eachSeries;async.eachLimit=function(arr,limit,iterator,callback){var fn=_eachLimit(limit);fn.apply(null,[arr,iterator,callback])};async.forEachLimit=async.eachLimit;var _eachLimit=function(limit){return function(arr,iterator,callback){callback=callback||function(){};if(!arr.length||limit<=0){return callback()}var completed=0;var started=0;var running=0;(function replenish(){if(completed>=arr.length){return callback()}while(running<limit&&started<arr.length){started+=1;running+=1;iterator(arr[started-1],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;running-=1;if(completed>=arr.length){callback()}else{replenish()}}})}})()}};var doParallel=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.each].concat(args))}};var doParallelLimit=function(limit,fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[_eachLimit(limit)].concat(args))}};var doSeries=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.eachSeries].concat(args))}};var _asyncMap=function(eachfn,arr,iterator,callback){arr=_map(arr,function(x,i){return{index:i,value:x}});if(!callback){eachfn(arr,function(x,callback){iterator(x.value,function(err){callback(err)})})}else{var results=[];eachfn(arr,function(x,callback){iterator(x.value,function(err,v){results[x.index]=v;callback(err)})},function(err){callback(err,results)})}};async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.mapLimit=function(arr,limit,iterator,callback){return _mapLimit(limit)(arr,iterator,callback)};var _mapLimit=function(limit){return doParallelLimit(limit,_asyncMap)};async.reduce=function(arr,memo,iterator,callback){async.eachSeries(arr,function(x,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.inject=async.reduce;async.foldl=async.reduce;async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,function(x){return x}).reverse();async.reduce(reversed,memo,iterator,callback)};async.foldr=async.reduceRight;var _filter=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.filter=doParallel(_filter);async.filterSeries=doSeries(_filter);async.select=async.filter;async.selectSeries=async.filterSeries;var _reject=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(!v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.reject=doParallel(_reject);async.rejectSeries=doSeries(_reject);var _detect=function(eachfn,arr,iterator,main_callback){eachfn(arr,function(x,callback){iterator(x,function(result){if(result){main_callback(x);main_callback=function(){}}else{callback()}})},function(err){main_callback()})};async.detect=doParallel(_detect);async.detectSeries=doSeries(_detect);async.some=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(v){main_callback(true);main_callback=function(){}}callback()})},function(err){main_callback(false)})};async.any=async.some;async.every=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(!v){main_callback(false);main_callback=function(){}}callback()})},function(err){main_callback(true)})};async.all=async.every;async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{var fn=function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0};callback(null,_map(results.sort(fn),function(x){return x.value}))}})};async.auto=function(tasks,callback){callback=callback||function(){};var keys=_keys(tasks);var remainingTasks=keys.length;if(!remainingTasks){return callback()}var results={};var listeners=[];var addListener=function(fn){listeners.unshift(fn)};var removeListener=function(fn){for(var i=0;i<listeners.length;i+=1){if(listeners[i]===fn){listeners.splice(i,1);return}}};var taskComplete=function(){remainingTasks--;_each(listeners.slice(0),function(fn){fn()})};addListener(function(){if(!remainingTasks){var theCallback=callback;callback=function(){};theCallback(null,results)}});_each(keys,function(k){var task=_isArray(tasks[k])?tasks[k]:[tasks[k]];var taskCallback=function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}if(err){var safeResults={};_each(_keys(results),function(rkey){safeResults[rkey]=results[rkey]});safeResults[k]=args;callback(err,safeResults);callback=function(){}}else{results[k]=args;async.setImmediate(taskComplete)}};var requires=task.slice(0,Math.abs(task.length-1))||[];var ready=function(){return _reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)};if(ready()){task[task.length-1](taskCallback,results)}else{var listener=function(){if(ready()){removeListener(listener);task[task.length-1](taskCallback,results)}};addListener(listener)}})};async.retry=function(times,task,callback){var DEFAULT_TIMES=5;var attempts=[];if(typeof times==="function"){callback=task;task=times;times=DEFAULT_TIMES}times=parseInt(times,10)||DEFAULT_TIMES;var wrappedTask=function(wrappedCallback,wrappedResults){var retryAttempt=function(task,finalAttempt){return function(seriesCallback){task(function(err,result){seriesCallback(!err||finalAttempt,{err:err,result:result})},wrappedResults)}};while(times){attempts.push(retryAttempt(task,!(times-=1)))}async.series(attempts,function(done,data){data=data[data.length-1];(wrappedCallback||callback)(data.err,data.result)})};return callback?wrappedTask():wrappedTask};async.waterfall=function(tasks,callback){callback=callback||function(){};if(!_isArray(tasks)){var err=new Error("First argument to waterfall must be an array of functions");return callback(err)}if(!tasks.length){return callback()}var wrapIterator=function(iterator){return function(err){if(err){callback.apply(null,arguments);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}async.setImmediate(function(){iterator.apply(null,args)})}}};wrapIterator(async.iterator(tasks))()};var _parallel=function(eachfn,tasks,callback){callback=callback||function(){};if(_isArray(tasks)){eachfn.map(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};eachfn.each(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.parallel=function(tasks,callback){_parallel({map:async.map,each:async.each},tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel({map:_mapLimit(limit),each:_eachLimit(limit)},tasks,callback)};async.series=function(tasks,callback){callback=callback||function(){};if(_isArray(tasks)){async.mapSeries(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.eachSeries(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.iterator=function(tasks){var makeCallback=function(index){var fn=function(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()};fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn};return makeCallback(0)};async.apply=function(fn){var args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(null,args.concat(Array.prototype.slice.call(arguments)))}};var _concat=function(eachfn,arr,fn,callback){var r=[];eachfn(arr,function(x,cb){fn(x,function(err,y){r=r.concat(y||[]);cb(err)})},function(err){callback(err,r)})};async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){if(test()){iterator(function(err){if(err){return callback(err)}async.whilst(test,iterator,callback)})}else{callback()}};async.doWhilst=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(test.apply(null,args)){async.doWhilst(iterator,test,callback)}else{callback()}})};async.until=function(test,iterator,callback){if(!test()){iterator(function(err){if(err){return callback(err)}async.until(test,iterator,callback)})}else{callback()}};async.doUntil=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(!test.apply(null,args)){async.doUntil(iterator,test,callback)}else{callback()}})};async.queue=function(worker,concurrency){if(concurrency===undefined){concurrency=1}function _insert(q,data,pos,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,callback:typeof callback==="function"?callback:null};if(pos){q.tasks.unshift(item)}else{q.tasks.push(item)}if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var workers=0;var q={tasks:[],concurrency:concurrency,saturated:null,empty:null,drain:null,started:false,paused:false,push:function(data,callback){_insert(q,data,false,callback)},kill:function(){q.drain=null;q.tasks=[]},unshift:function(data,callback){_insert(q,data,true,callback)},process:function(){if(!q.paused&&workers<q.concurrency&&q.tasks.length){var task=q.tasks.shift();if(q.empty&&q.tasks.length===0){q.empty()}workers+=1;var next=function(){workers-=1;if(task.callback){task.callback.apply(task,arguments)}if(q.drain&&q.tasks.length+workers===0){q.drain()}q.process()};var cb=only_once(next);worker(task.data,cb)}},length:function(){return q.tasks.length},running:function(){return workers},idle:function(){return q.tasks.length+workers===0},pause:function(){if(q.paused===true){return}q.paused=true;q.process()},resume:function(){if(q.paused===false){return}q.paused=false;q.process()}};return q};async.priorityQueue=function(worker,concurrency){function _compareTasks(a,b){return a.priority-b.priority}function _binarySearch(sequence,item,compare){var beg=-1,end=sequence.length-1;while(beg<end){var mid=beg+(end-beg+1>>>1);if(compare(item,sequence[mid])>=0){beg=mid}else{end=mid-1}}return beg}function _insert(q,data,priority,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,priority:priority,callback:typeof callback==="function"?callback:null};q.tasks.splice(_binarySearch(q.tasks,item,_compareTasks)+1,0,item);if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var q=async.queue(worker,concurrency);q.push=function(data,priority,callback){_insert(q,data,priority,callback)};delete q.unshift;return q};async.cargo=function(worker,payload){var working=false,tasks=[];var cargo={tasks:tasks,payload:payload,saturated:null,empty:null,drain:null,drained:true,push:function(data,callback){if(!_isArray(data)){data=[data]}_each(data,function(task){tasks.push({data:task,callback:typeof callback==="function"?callback:null});cargo.drained=false;if(cargo.saturated&&tasks.length===payload){cargo.saturated()}});async.setImmediate(cargo.process)},process:function process(){if(working)return;if(tasks.length===0){if(cargo.drain&&!cargo.drained)cargo.drain();cargo.drained=true;return}var ts=typeof payload==="number"?tasks.splice(0,payload):tasks.splice(0,tasks.length);var ds=_map(ts,function(task){return task.data});if(cargo.empty)cargo.empty();working=true;worker(ds,function(){working=false;var args=arguments;_each(ts,function(data){if(data.callback){data.callback.apply(null,args)}});process()})},length:function(){return tasks.length},running:function(){return working}};return cargo};var _console_fn=function(name){return function(fn){var args=Array.prototype.slice.call(arguments,1);fn.apply(null,args.concat([function(err){var args=Array.prototype.slice.call(arguments,1);if(typeof console!=="undefined"){if(err){if(console.error){console.error(err)}}else if(console[name]){_each(args,function(x){console[name](x)})}}}]))}};async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};hasher=hasher||function(x){return x};var memoized=function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();var key=hasher.apply(null,args);if(key in memo){async.nextTick(function(){callback.apply(null,memo[key])})}else if(key in queues){queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([function(){memo[key]=arguments;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i<l;i++){q[i].apply(null,arguments)}}]))}};memoized.memo=memo;memoized.unmemoized=fn;return memoized};async.unmemoize=function(fn){return function(){return(fn.unmemoized||fn).apply(null,arguments)}};async.times=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.map(counter,iterator,callback)};async.timesSeries=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.mapSeries(counter,iterator,callback)};async.seq=function(){var fns=arguments;return function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();
  9. async.reduce(fns,args,function(newargs,fn,cb){fn.apply(that,newargs.concat([function(){var err=arguments[0];var nextargs=Array.prototype.slice.call(arguments,1);cb(err,nextargs)}]))},function(err,results){callback.apply(that,[err].concat(results))})}};async.compose=function(){return async.seq.apply(null,Array.prototype.reverse.call(arguments))};var _applyEach=function(eachfn,fns){var go=function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();return eachfn(fns,function(fn,cb){fn.apply(that,args.concat([cb]))},callback)};if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);return go.apply(this,args)}else{return go}};async.applyEach=doParallel(_applyEach);async.applyEachSeries=doSeries(_applyEach);async.forever=function(fn,callback){function next(err){if(err){if(callback){return callback(err)}throw err}fn(next)}next()};if(typeof module!=="undefined"&&module.exports){module.exports=async}else if(typeof define!=="undefined"&&define.amd){define([],function(){return async})}else{root.async=async}})()}).call(this,require("_process"))},{_process:45}],44:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}throw TypeError('Uncaught, unspecified "error" event.')}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];handler.apply(this,args)}}else if(isObject(handler)){len=arguments.length;args=new Array(len-1);for(i=1;i<len;i++)args[i-1]=arguments[i];listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++)listeners[i].apply(this,args)}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events)this._events={};if(this._events.newListener)this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])this._events[type]=listener;else if(isObject(this._events[type]))this._events[type].push(listener);else this._events[type]=[this._events[type],listener];if(isObject(this._events[type])&&!this._events[type].warned){var m;if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else{while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.listenerCount=function(emitter,type){var ret;if(!emitter._events||!emitter._events[type])ret=0;else if(isFunction(emitter._events[type]))ret=1;else ret=emitter._events[type].length;return ret};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],45:[function(require,module,exports){var process=module.exports={};var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=setTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;clearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){setTimeout(drainQueue,0)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],46:[function(require,module,exports){(function(process,global){(function(){"use strict";function lib$es6$promise$utils$$objectOrFunction(x){return typeof x==="function"||typeof x==="object"&&x!==null}function lib$es6$promise$utils$$isFunction(x){return typeof x==="function"}function lib$es6$promise$utils$$isMaybeThenable(x){return typeof x==="object"&&x!==null}var lib$es6$promise$utils$$_isArray;if(!Array.isArray){lib$es6$promise$utils$$_isArray=function(x){return Object.prototype.toString.call(x)==="[object Array]"}}else{lib$es6$promise$utils$$_isArray=Array.isArray}var lib$es6$promise$utils$$isArray=lib$es6$promise$utils$$_isArray;var lib$es6$promise$asap$$len=0;var lib$es6$promise$asap$$toString={}.toString;var lib$es6$promise$asap$$vertxNext;var lib$es6$promise$asap$$customSchedulerFn;var lib$es6$promise$asap$$asap=function asap(callback,arg){lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len]=callback;lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len+1]=arg;lib$es6$promise$asap$$len+=2;if(lib$es6$promise$asap$$len===2){if(lib$es6$promise$asap$$customSchedulerFn){lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush)}else{lib$es6$promise$asap$$scheduleFlush()}}};function lib$es6$promise$asap$$setScheduler(scheduleFn){lib$es6$promise$asap$$customSchedulerFn=scheduleFn}function lib$es6$promise$asap$$setAsap(asapFn){lib$es6$promise$asap$$asap=asapFn}var lib$es6$promise$asap$$browserWindow=typeof window!=="undefined"?window:undefined;var lib$es6$promise$asap$$browserGlobal=lib$es6$promise$asap$$browserWindow||{};var lib$es6$promise$asap$$BrowserMutationObserver=lib$es6$promise$asap$$browserGlobal.MutationObserver||lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;var lib$es6$promise$asap$$isNode=typeof process!=="undefined"&&{}.toString.call(process)==="[object process]";var lib$es6$promise$asap$$isWorker=typeof Uint8ClampedArray!=="undefined"&&typeof importScripts!=="undefined"&&typeof MessageChannel!=="undefined";function lib$es6$promise$asap$$useNextTick(){return function(){process.nextTick(lib$es6$promise$asap$$flush)}}function lib$es6$promise$asap$$useVertxTimer(){return function(){lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush)}}function lib$es6$promise$asap$$useMutationObserver(){var iterations=0;var observer=new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);var node=document.createTextNode("");observer.observe(node,{characterData:true});return function(){node.data=iterations=++iterations%2}}function lib$es6$promise$asap$$useMessageChannel(){var channel=new MessageChannel;channel.port1.onmessage=lib$es6$promise$asap$$flush;return function(){channel.port2.postMessage(0)}}function lib$es6$promise$asap$$useSetTimeout(){return function(){setTimeout(lib$es6$promise$asap$$flush,1)}}var lib$es6$promise$asap$$queue=new Array(1e3);function lib$es6$promise$asap$$flush(){for(var i=0;i<lib$es6$promise$asap$$len;i+=2){var callback=lib$es6$promise$asap$$queue[i];var arg=lib$es6$promise$asap$$queue[i+1];callback(arg);lib$es6$promise$asap$$queue[i]=undefined;lib$es6$promise$asap$$queue[i+1]=undefined}lib$es6$promise$asap$$len=0}function lib$es6$promise$asap$$attemptVertx(){try{var r=require;var vertx=r("vertx");lib$es6$promise$asap$$vertxNext=vertx.runOnLoop||vertx.runOnContext;return lib$es6$promise$asap$$useVertxTimer()}catch(e){return lib$es6$promise$asap$$useSetTimeout()}}var lib$es6$promise$asap$$scheduleFlush;if(lib$es6$promise$asap$$isNode){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useNextTick()}else if(lib$es6$promise$asap$$BrowserMutationObserver){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useMutationObserver()}else if(lib$es6$promise$asap$$isWorker){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useMessageChannel()}else if(lib$es6$promise$asap$$browserWindow===undefined&&typeof require==="function"){lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$attemptVertx()}else{lib$es6$promise$asap$$scheduleFlush=lib$es6$promise$asap$$useSetTimeout()}function lib$es6$promise$$internal$$noop(){}var lib$es6$promise$$internal$$PENDING=void 0;var lib$es6$promise$$internal$$FULFILLED=1;var lib$es6$promise$$internal$$REJECTED=2;var lib$es6$promise$$internal$$GET_THEN_ERROR=new lib$es6$promise$$internal$$ErrorObject;function lib$es6$promise$$internal$$selfFulfillment(){return new TypeError("You cannot resolve a promise with itself")}function lib$es6$promise$$internal$$cannotReturnOwn(){return new TypeError("A promises callback cannot return that same promise.")}function lib$es6$promise$$internal$$getThen(promise){try{return promise.then}catch(error){lib$es6$promise$$internal$$GET_THEN_ERROR.error=error;return lib$es6$promise$$internal$$GET_THEN_ERROR}}function lib$es6$promise$$internal$$tryThen(then,value,fulfillmentHandler,rejectionHandler){try{then.call(value,fulfillmentHandler,rejectionHandler)}catch(e){return e}}function lib$es6$promise$$internal$$handleForeignThenable(promise,thenable,then){lib$es6$promise$asap$$asap(function(promise){var sealed=false;var error=lib$es6$promise$$internal$$tryThen(then,thenable,function(value){if(sealed){return}sealed=true;if(thenable!==value){lib$es6$promise$$internal$$resolve(promise,value)}else{lib$es6$promise$$internal$$fulfill(promise,value)}},function(reason){if(sealed){return}sealed=true;lib$es6$promise$$internal$$reject(promise,reason)},"Settle: "+(promise._label||" unknown promise"));if(!sealed&&error){sealed=true;lib$es6$promise$$internal$$reject(promise,error)}},promise)}function lib$es6$promise$$internal$$handleOwnThenable(promise,thenable){if(thenable._state===lib$es6$promise$$internal$$FULFILLED){lib$es6$promise$$internal$$fulfill(promise,thenable._result)}else if(thenable._state===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,thenable._result)}else{lib$es6$promise$$internal$$subscribe(thenable,undefined,function(value){lib$es6$promise$$internal$$resolve(promise,value)},function(reason){lib$es6$promise$$internal$$reject(promise,reason)})}}function lib$es6$promise$$internal$$handleMaybeThenable(promise,maybeThenable){if(maybeThenable.constructor===promise.constructor){lib$es6$promise$$internal$$handleOwnThenable(promise,maybeThenable)}else{var then=lib$es6$promise$$internal$$getThen(maybeThenable);if(then===lib$es6$promise$$internal$$GET_THEN_ERROR){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$GET_THEN_ERROR.error)}else if(then===undefined){lib$es6$promise$$internal$$fulfill(promise,maybeThenable)}else if(lib$es6$promise$utils$$isFunction(then)){lib$es6$promise$$internal$$handleForeignThenable(promise,maybeThenable,then)}else{lib$es6$promise$$internal$$fulfill(promise,maybeThenable)}}}function lib$es6$promise$$internal$$resolve(promise,value){if(promise===value){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$selfFulfillment())}else if(lib$es6$promise$utils$$objectOrFunction(value)){lib$es6$promise$$internal$$handleMaybeThenable(promise,value)}else{lib$es6$promise$$internal$$fulfill(promise,value)}}function lib$es6$promise$$internal$$publishRejection(promise){if(promise._onerror){promise._onerror(promise._result)}lib$es6$promise$$internal$$publish(promise)}function lib$es6$promise$$internal$$fulfill(promise,value){if(promise._state!==lib$es6$promise$$internal$$PENDING){return}promise._result=value;promise._state=lib$es6$promise$$internal$$FULFILLED;if(promise._subscribers.length!==0){lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish,promise)}}function lib$es6$promise$$internal$$reject(promise,reason){if(promise._state!==lib$es6$promise$$internal$$PENDING){return}promise._state=lib$es6$promise$$internal$$REJECTED;promise._result=reason;lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection,promise)}function lib$es6$promise$$internal$$subscribe(parent,child,onFulfillment,onRejection){var subscribers=parent._subscribers;var length=subscribers.length;parent._onerror=null;subscribers[length]=child;subscribers[length+lib$es6$promise$$internal$$FULFILLED]=onFulfillment;subscribers[length+lib$es6$promise$$internal$$REJECTED]=onRejection;if(length===0&&parent._state){lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish,parent)}}function lib$es6$promise$$internal$$publish(promise){var subscribers=promise._subscribers;var settled=promise._state;if(subscribers.length===0){return}var child,callback,detail=promise._result;for(var i=0;i<subscribers.length;i+=3){child=subscribers[i];callback=subscribers[i+settled];if(child){lib$es6$promise$$internal$$invokeCallback(settled,child,callback,detail)}else{callback(detail)}}promise._subscribers.length=0}function lib$es6$promise$$internal$$ErrorObject(){this.error=null}var lib$es6$promise$$internal$$TRY_CATCH_ERROR=new lib$es6$promise$$internal$$ErrorObject;function lib$es6$promise$$internal$$tryCatch(callback,detail){try{return callback(detail)}catch(e){lib$es6$promise$$internal$$TRY_CATCH_ERROR.error=e;return lib$es6$promise$$internal$$TRY_CATCH_ERROR}}function lib$es6$promise$$internal$$invokeCallback(settled,promise,callback,detail){var hasCallback=lib$es6$promise$utils$$isFunction(callback),value,error,succeeded,failed;if(hasCallback){value=lib$es6$promise$$internal$$tryCatch(callback,detail);if(value===lib$es6$promise$$internal$$TRY_CATCH_ERROR){failed=true;error=value.error;value=null}else{succeeded=true}if(promise===value){lib$es6$promise$$internal$$reject(promise,lib$es6$promise$$internal$$cannotReturnOwn());return}}else{value=detail;succeeded=true}if(promise._state!==lib$es6$promise$$internal$$PENDING){}else if(hasCallback&&succeeded){lib$es6$promise$$internal$$resolve(promise,value)}else if(failed){lib$es6$promise$$internal$$reject(promise,error)}else if(settled===lib$es6$promise$$internal$$FULFILLED){lib$es6$promise$$internal$$fulfill(promise,value)}else if(settled===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,value)}}function lib$es6$promise$$internal$$initializePromise(promise,resolver){try{resolver(function resolvePromise(value){lib$es6$promise$$internal$$resolve(promise,value)},function rejectPromise(reason){lib$es6$promise$$internal$$reject(promise,reason)})}catch(e){lib$es6$promise$$internal$$reject(promise,e)}}function lib$es6$promise$enumerator$$Enumerator(Constructor,input){var enumerator=this;enumerator._instanceConstructor=Constructor;enumerator.promise=new Constructor(lib$es6$promise$$internal$$noop);if(enumerator._validateInput(input)){enumerator._input=input;enumerator.length=input.length;enumerator._remaining=input.length;enumerator._init();if(enumerator.length===0){lib$es6$promise$$internal$$fulfill(enumerator.promise,enumerator._result)}else{enumerator.length=enumerator.length||0;enumerator._enumerate();if(enumerator._remaining===0){lib$es6$promise$$internal$$fulfill(enumerator.promise,enumerator._result)}}}else{lib$es6$promise$$internal$$reject(enumerator.promise,enumerator._validationError())}}lib$es6$promise$enumerator$$Enumerator.prototype._validateInput=function(input){return lib$es6$promise$utils$$isArray(input)};lib$es6$promise$enumerator$$Enumerator.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")};lib$es6$promise$enumerator$$Enumerator.prototype._init=function(){this._result=new Array(this.length)};var lib$es6$promise$enumerator$$default=lib$es6$promise$enumerator$$Enumerator;lib$es6$promise$enumerator$$Enumerator.prototype._enumerate=function(){var enumerator=this;var length=enumerator.length;var promise=enumerator.promise;var input=enumerator._input;for(var i=0;promise._state===lib$es6$promise$$internal$$PENDING&&i<length;i++){enumerator._eachEntry(input[i],i)}};lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry=function(entry,i){var enumerator=this;var c=enumerator._instanceConstructor;if(lib$es6$promise$utils$$isMaybeThenable(entry)){if(entry.constructor===c&&entry._state!==lib$es6$promise$$internal$$PENDING){entry._onerror=null;enumerator._settledAt(entry._state,i,entry._result)}else{enumerator._willSettleAt(c.resolve(entry),i)}}else{enumerator._remaining--;enumerator._result[i]=entry}};lib$es6$promise$enumerator$$Enumerator.prototype._settledAt=function(state,i,value){var enumerator=this;var promise=enumerator.promise;if(promise._state===lib$es6$promise$$internal$$PENDING){enumerator._remaining--;if(state===lib$es6$promise$$internal$$REJECTED){lib$es6$promise$$internal$$reject(promise,value)}else{enumerator._result[i]=value}}if(enumerator._remaining===0){lib$es6$promise$$internal$$fulfill(promise,enumerator._result)}};lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt=function(promise,i){var enumerator=this;lib$es6$promise$$internal$$subscribe(promise,undefined,function(value){enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED,i,value)},function(reason){enumerator._settledAt(lib$es6$promise$$internal$$REJECTED,i,reason)})};function lib$es6$promise$promise$all$$all(entries){return new lib$es6$promise$enumerator$$default(this,entries).promise}var lib$es6$promise$promise$all$$default=lib$es6$promise$promise$all$$all;function lib$es6$promise$promise$race$$race(entries){var Constructor=this;var promise=new Constructor(lib$es6$promise$$internal$$noop);if(!lib$es6$promise$utils$$isArray(entries)){lib$es6$promise$$internal$$reject(promise,new TypeError("You must pass an array to race."));return promise}var length=entries.length;function onFulfillment(value){lib$es6$promise$$internal$$resolve(promise,value)}function onRejection(reason){lib$es6$promise$$internal$$reject(promise,reason)}for(var i=0;promise._state===lib$es6$promise$$internal$$PENDING&&i<length;i++){lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]),undefined,onFulfillment,onRejection)}return promise}var lib$es6$promise$promise$race$$default=lib$es6$promise$promise$race$$race;function lib$es6$promise$promise$resolve$$resolve(object){var Constructor=this;if(object&&typeof object==="object"&&object.constructor===Constructor){return object}var promise=new Constructor(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$resolve(promise,object);return promise}var lib$es6$promise$promise$resolve$$default=lib$es6$promise$promise$resolve$$resolve;function lib$es6$promise$promise$reject$$reject(reason){var Constructor=this;var promise=new Constructor(lib$es6$promise$$internal$$noop);lib$es6$promise$$internal$$reject(promise,reason);return promise}var lib$es6$promise$promise$reject$$default=lib$es6$promise$promise$reject$$reject;var lib$es6$promise$promise$$counter=0;function lib$es6$promise$promise$$needsResolver(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function lib$es6$promise$promise$$needsNew(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}var lib$es6$promise$promise$$default=lib$es6$promise$promise$$Promise;function lib$es6$promise$promise$$Promise(resolver){this._id=lib$es6$promise$promise$$counter++;this._state=undefined;this._result=undefined;this._subscribers=[];if(lib$es6$promise$$internal$$noop!==resolver){if(!lib$es6$promise$utils$$isFunction(resolver)){lib$es6$promise$promise$$needsResolver()}if(!(this instanceof lib$es6$promise$promise$$Promise)){lib$es6$promise$promise$$needsNew()}lib$es6$promise$$internal$$initializePromise(this,resolver)}}lib$es6$promise$promise$$Promise.all=lib$es6$promise$promise$all$$default;lib$es6$promise$promise$$Promise.race=lib$es6$promise$promise$race$$default;lib$es6$promise$promise$$Promise.resolve=lib$es6$promise$promise$resolve$$default;lib$es6$promise$promise$$Promise.reject=lib$es6$promise$promise$reject$$default;lib$es6$promise$promise$$Promise._setScheduler=lib$es6$promise$asap$$setScheduler;lib$es6$promise$promise$$Promise._setAsap=lib$es6$promise$asap$$setAsap;lib$es6$promise$promise$$Promise._asap=lib$es6$promise$asap$$asap;lib$es6$promise$promise$$Promise.prototype={constructor:lib$es6$promise$promise$$Promise,then:function(onFulfillment,onRejection){var parent=this;var state=parent._state;if(state===lib$es6$promise$$internal$$FULFILLED&&!onFulfillment||state===lib$es6$promise$$internal$$REJECTED&&!onRejection){return this}var child=new this.constructor(lib$es6$promise$$internal$$noop);var result=parent._result;if(state){var callback=arguments[state-1];lib$es6$promise$asap$$asap(function(){lib$es6$promise$$internal$$invokeCallback(state,child,callback,result)})}else{lib$es6$promise$$internal$$subscribe(parent,child,onFulfillment,onRejection)}return child},"catch":function(onRejection){return this.then(null,onRejection)}};function lib$es6$promise$polyfill$$polyfill(){var local;if(typeof global!=="undefined"){local=global}else if(typeof self!=="undefined"){local=self}else{try{local=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}}var P=local.Promise;if(P&&Object.prototype.toString.call(P.resolve())==="[object Promise]"&&!P.cast){return}local.Promise=lib$es6$promise$promise$$default}var lib$es6$promise$polyfill$$default=lib$es6$promise$polyfill$$polyfill;var lib$es6$promise$umd$$ES6Promise={Promise:lib$es6$promise$promise$$default,polyfill:lib$es6$promise$polyfill$$default};if(typeof define==="function"&&define["amd"]){define(function(){return lib$es6$promise$umd$$ES6Promise})}else if(typeof module!=="undefined"&&module["exports"]){module["exports"]=lib$es6$promise$umd$$ES6Promise}else if(typeof this!=="undefined"){this["ES6Promise"]=lib$es6$promise$umd$$ES6Promise}lib$es6$promise$polyfill$$default()}).call(this)}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{_process:45}],47:[function(require,module,exports){var levels={trace:0,debug:1,info:2,log:3,warn:4,error:5};function getCallerInfo(){var callerInfo={methodName:"",fileLocation:"",line:null,column:null};var error=new Error;var stack=error.stack?error.stack.split("\n"):[];if(!stack||stack.length<1){return callerInfo}var m=null;if(stack[3]){m=stack[3].match(/\s*at\s*(.+?)\s*\((\S*)\s*:(\d*)\s*:(\d*)\)/)}if(!m||m.length<=4){if(stack[2].indexOf("log@")===0){callerInfo.methodName=stack[3].substr(0,stack[3].indexOf("@"))}else{callerInfo.methodName=stack[2].substr(0,stack[2].indexOf("@"))}return callerInfo}callerInfo.methodName=m[1];callerInfo.fileLocation=m[2];callerInfo.line=m[3];callerInfo.column=m[4];return callerInfo}function log(){var logger=arguments[0],level=arguments[1],args=Array.prototype.slice.call(arguments,2);if(levels[level]<=logger.level){return}var callerInfo=getCallerInfo();for(var i=0;i<logger.transports.length;i++){var t=logger.transports[i];var l=t[level];if(l&&typeof l==="function"){l.bind(t,logger.id?"["+logger.id+"]":"","<"+callerInfo.methodName+">: ").apply(t,args)}}}function Logger(level,id,transports,format){this.id=id;this.format=format;if(!this.transports){this.transports=[];this.transports.push(Logger.consoleTransport)}this.level=levels[level];var methods=Object.keys(levels);for(var i=0;i<methods.length;i++){this[methods[i]]=log.bind(null,this,methods[i])}}Logger.prototype.setLevel=function(level){this.level=levels[level]};module.exports=Logger;Logger.consoleTransport=console;Logger.levels={TRACE:"trace",DEBUG:"debug",INFO:"info",LOG:"log",WARN:"warn",ERROR:"error"}},{}],48:[function(require,module,exports){var Logger=require("./Logger");var idLoggers={};var loggers=[];var curLevel=Logger.levels.TRACE;module.exports={getLogger:function(id,transports,format){var logger=new Logger(curLevel,id,transports,format);if(id){idLoggers[id]=idLoggers[id]||[];idLoggers[id].push(logger)}else{loggers.push(logger)}return logger},setLogLevelById:function(level,id){var l=id?idLoggers[id]||[]:loggers;for(var i=0;i<l.length;i++){l[i].setLevel(level)}},setLogLevel:function(level){curLevel=level;var i=0;for(;i<loggers.length;i++){loggers[i].setLevel(level)}for(var id in idLoggers){var l=idLoggers[id]||[];for(i=0;i<l.length;i++){l[i].setLevel(level)}}},levels:Logger.levels}},{"./Logger":47}],49:[function(require,module,exports){"use strict";var assign=require("./lib/utils/common").assign;var deflate=require("./lib/deflate");var inflate=require("./lib/inflate");var constants=require("./lib/zlib/constants");var pako={};assign(pako,deflate,inflate,constants);module.exports=pako},{"./lib/deflate":50,"./lib/inflate":51,"./lib/utils/common":52,"./lib/zlib/constants":55}],50:[function(require,module,exports){"use strict";var zlib_deflate=require("./zlib/deflate.js");var utils=require("./utils/common");var strings=require("./utils/strings");var msg=require("./zlib/messages");var zstream=require("./zlib/zstream");var toString=Object.prototype.toString;var Z_NO_FLUSH=0;var Z_FINISH=4;var Z_OK=0;var Z_STREAM_END=1;var Z_SYNC_FLUSH=2;var Z_DEFAULT_COMPRESSION=-1;var Z_DEFAULT_STRATEGY=0;var Z_DEFLATED=8;var Deflate=function(options){this.options=utils.assign({level:Z_DEFAULT_COMPRESSION,method:Z_DEFLATED,chunkSize:16384,windowBits:15,memLevel:8,strategy:Z_DEFAULT_STRATEGY,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else if(toString.call(data)==="[object ArrayBuffer]"){strm.input=new Uint8Array(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&(_mode===Z_FINISH||_mode===Z_SYNC_FLUSH)){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}if(_mode===Z_SYNC_FLUSH){this.onEnd(Z_OK);strm.avail_out=0;return true}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":52,"./utils/strings":53,"./zlib/deflate.js":57,"./zlib/messages":62,"./zlib/zstream":64}],51:[function(require,module,exports){"use strict";var zlib_inflate=require("./zlib/inflate.js");var utils=require("./utils/common");var strings=require("./utils/strings");var c=require("./zlib/constants");var msg=require("./zlib/messages");var zstream=require("./zlib/zstream");var gzheader=require("./zlib/gzheader");var toString=Object.prototype.toString;var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;
  10. zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;var allowBufError=false;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else if(toString.call(data)==="[object ArrayBuffer]"){strm.input=new Uint8Array(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status===c.Z_BUF_ERROR&&allowBufError===true){status=c.Z_OK;allowBufError=false}if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&(_mode===c.Z_FINISH||_mode===c.Z_SYNC_FLUSH)){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}if(strm.avail_in===0&&strm.avail_out===0){allowBufError=true}}while((strm.avail_in>0||strm.avail_out===0)&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}if(_mode===c.Z_SYNC_FLUSH){this.onEnd(c.Z_OK);strm.avail_out=0;return true}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":52,"./utils/strings":53,"./zlib/constants":55,"./zlib/gzheader":58,"./zlib/inflate.js":60,"./zlib/messages":62,"./zlib/zstream":64}],52:[function(require,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){var i,l,len,pos,chunk,result;len=0;for(i=0,l=chunks.length;i<l;i++){len+=chunks[i].length}result=new Uint8Array(len);pos=0;for(i=0,l=chunks.length;i<l;i++){chunk=chunks[i];result.set(chunk,pos);pos+=chunk.length}return result}};var fnUntyped={arraySet:function(dest,src,src_offs,len,dest_offs){for(var i=0;i<len;i++){dest[dest_offs+i]=src[src_offs+i]}},flattenChunks:function(chunks){return[].concat.apply([],chunks)}};exports.setTyped=function(on){if(on){exports.Buf8=Uint8Array;exports.Buf16=Uint16Array;exports.Buf32=Int32Array;exports.assign(exports,fnTyped)}else{exports.Buf8=Array;exports.Buf16=Array;exports.Buf32=Array;exports.assign(exports,fnUntyped)}};exports.setTyped(TYPED_OK)},{}],53:[function(require,module,exports){"use strict";var utils=require("./common");var STR_APPLY_OK=true;var STR_APPLY_UIA_OK=true;try{String.fromCharCode.apply(null,[0])}catch(__){STR_APPLY_OK=false}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(__){STR_APPLY_UIA_OK=false}var _utf8len=new utils.Buf8(256);for(var q=0;q<256;q++){_utf8len[q]=q>=252?6:q>=248?5:q>=240?4:q>=224?3:q>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos<str_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}buf_len+=c<128?1:c<2048?2:c<65536?3:4}buf=new utils.Buf8(buf_len);for(i=0,m_pos=0;i<buf_len;m_pos++){c=str.charCodeAt(m_pos);if((c&64512)===55296&&m_pos+1<str_len){c2=str.charCodeAt(m_pos+1);if((c2&64512)===56320){c=65536+(c-55296<<10)+(c2-56320);m_pos++}}if(c<128){buf[i++]=c}else if(c<2048){buf[i++]=192|c>>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i<len;i++){result+=String.fromCharCode(buf[i])}return result}exports.buf2binstring=function(buf){return buf2binstring(buf,buf.length)};exports.binstring2buf=function(str){var buf=new utils.Buf8(str.length);for(var i=0,len=buf.length;i<len;i++){buf[i]=str.charCodeAt(i)}return buf};exports.buf2string=function(buf,max){var i,out,c,c_len;var len=max||buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i<len;){c=buf[i++];if(c<128){utf16buf[out++]=c;continue}c_len=_utf8len[c];if(c_len>4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i<len){c=c<<6|buf[i++]&63;c_len--}if(c_len>1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":52}],54:[function(require,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],55:[function(require,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],56:[function(require,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i<end;i++){crc=crc>>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],57:[function(require,module,exports){"use strict";var utils=require("../utils/common");var trees=require("./trees");var adler32=require("./adler32");var crc32=require("./crc32");var msg=require("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scan<strend);len=MAX_MATCH-(strend-scan);scan=strend-MAX_MATCH;if(len>best_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+1])&s.hash_mask;while(s.insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[str+MIN_MATCH-1])&s.hash_mask;s.prev[str&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=str;str++;s.insert--;if(s.lookahead+s.insert<MIN_MATCH){break}}}}while(s.lookahead<MIN_LOOKAHEAD&&s.strm.avail_in!==0)}function deflate_stored(s,flush){var max_block_size=65535;if(max_block_size>s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}if(hash_head!==0&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head)}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}while(--s.match_length!==0);s.strstart++}else{s.strstart+=s.match_length;s.match_length=0;s.ins_h=s.window[s.strstart];s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+1])&s.hash_mask}}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_slow(s,flush){var hash_head;var bflush;var max_insert;for(;;){if(s.lookahead<MIN_LOOKAHEAD){fill_window(s);if(s.lookahead<MIN_LOOKAHEAD&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}hash_head=0;if(s.lookahead>=MIN_MATCH){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}s.prev_length=s.match_length;s.prev_match=s.match_start;s.match_length=MIN_MATCH-1;if(hash_head!==0&&s.prev_length<s.max_lazy_match&&s.strstart-hash_head<=s.w_size-MIN_LOOKAHEAD){s.match_length=longest_match(s,hash_head);if(s.match_length<=5&&(s.strategy===Z_FILTERED||s.match_length===MIN_MATCH&&s.strstart-s.match_start>4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<<s.hash_shift^s.window[s.strstart+MIN_MATCH-1])&s.hash_mask;hash_head=s.prev[s.strstart&s.w_mask]=s.head[s.ins_h];s.head[s.ins_h]=s.strstart}}while(--s.prev_length!==0);s.match_available=0;s.match_length=MIN_MATCH-1;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}else if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);if(bflush){flush_block_only(s,false)}s.strstart++;s.lookahead--;if(s.strm.avail_out===0){return BS_NEED_MORE}}else{s.match_available=1;s.strstart++;s.lookahead--}}if(s.match_available){bflush=trees._tr_tally(s,0,s.window[s.strstart-1]);s.match_available=0}s.insert=s.strstart<MIN_MATCH-1?s.strstart:MIN_MATCH-1;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_rle(s,flush){var bflush;var prev;var scan,strend;var _win=s.window;for(;;){if(s.lookahead<=MAX_MATCH){fill_window(s);if(s.lookahead<=MAX_MATCH&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.match_length=0;if(s.lookahead>=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scan<strend);s.match_length=MAX_MATCH-(strend-scan);if(s.match_length>s.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<<s.w_bits;s.w_mask=s.w_size-1;s.hash_bits=memLevel+7;s.hash_size=1<<s.hash_bits;s.hash_mask=s.hash_size-1;s.hash_shift=~~((s.hash_bits+MIN_MATCH-1)/MIN_MATCH);s.window=new utils.Buf8(s.w_size*2);s.head=new utils.Buf16(s.hash_size);s.prev=new utils.Buf16(s.w_size);s.lit_bufsize=1<<memLevel+6;s.pending_buf_size=s.lit_bufsize*4;s.pending_buf=new utils.Buf8(s.pending_buf_size);s.d_buf=s.lit_bufsize>>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.name.length){val=s.gzhead.name.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindex<s.gzhead.comment.length){val=s.gzhead.comment.charCodeAt(s.gzindex++)&255}else{val=0}put_byte(s,val)}while(val!==0);if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":52,"./adler32":54,"./crc32":56,"./messages":62,"./trees":63}],58:[function(require,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],59:[function(require,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var s_window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;s_window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<<state.lenbits)-1;dmask=(1<<state.distbits)-1;top:do{if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=lcode[hold&lmask];dolen:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits<op){hold+=input[_in++]<<bits;bits+=8}len+=hold&(1<<op)-1;hold>>>=op;bits-=op}if(bits<15){hold+=input[_in++]<<bits;bits+=8;hold+=input[_in++]<<bits;bits+=8}here=dcode[hold&dmask];dodist:for(;;){op=here>>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bits<op){hold+=input[_in++]<<bits;bits+=8;if(bits<op){hold+=input[_in++]<<bits;bits+=8}}dist+=hold&(1<<op)-1;if(dist>dmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=s_window;if(wnext===0){from+=wsize-op;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}else if(wnext<op){from+=wsize+wnext-op;op-=wnext;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=0;if(wnext<len){op=wnext;len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}}else{from+=wnext-op;if(op<len){len-=op;do{output[_out++]=s_window[from++]}while(--op);from=_out-dist;from_source=output}}while(len>2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<<op)-1)];continue dodist}else{strm.msg="invalid distance code";state.mode=BAD;break top}break}}else if((op&64)===0){here=lcode[(here&65535)+(hold&(1<<op)-1)];continue dolen}else if(op&32){state.mode=TYPE;break top}else{strm.msg="invalid literal/length code";state.mode=BAD;break top}break}}while(_in<last&&_out<end);len=bits>>3;_in-=len;bits-=len<<3;hold&=(1<<bits)-1;strm.next_in=_in;strm.next_out=_out;strm.avail_in=_in<last?5+(last-_in):5-(_in-last);strm.avail_out=_out<end?257+(end-_out):257-(_out-end);state.hold=hold;state.bits=bits;return}},{}],60:[function(require,module,exports){"use strict";var utils=require("../utils/common");var adler32=require("./adler32");var crc32=require("./crc32");var inflate_fast=require("./inffast");var inflate_table=require("./inftrees");var CODES=0;var LENS=1;var DISTS=2;var Z_FINISH=4;var Z_BLOCK=5;var Z_TREES=6;var Z_OK=0;var Z_STREAM_END=1;
  11. var Z_NEED_DICT=2;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_MEM_ERROR=-4;var Z_BUF_ERROR=-5;var Z_DEFLATED=8;var HEAD=1;var FLAGS=2;var TIME=3;var OS=4;var EXLEN=5;var EXTRA=6;var NAME=7;var COMMENT=8;var HCRC=9;var DICTID=10;var DICT=11;var TYPE=12;var TYPEDO=13;var STORED=14;var COPY_=15;var COPY=16;var TABLE=17;var LENLENS=18;var CODELENS=19;var LEN_=20;var LEN=21;var LENEXT=22;var DIST=23;var DISTEXT=24;var MATCH=25;var LIT=26;var CHECK=27;var LENGTH=28;var DONE=29;var BAD=30;var MEM=31;var SYNC=32;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var MAX_WBITS=15;var DEF_WBITS=MAX_WBITS;function ZSWAP32(q){return(q>>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<<state.wbits;state.wnext=0;state.whave=0;state.window=new utils.Buf8(state.wsize)}if(copy>=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave<state.wsize){state.whave+=dist}}}return 0}function inflate(strm,flush){var state;var input,output;var next;var put;var have,left;var hold;var bits;var _in,_out;var copy;var from;var from_source;var here=0;var here_bits,here_op,here_val;var last_bits,last_op,last_val;var len;var ret;var hbuf=new utils.Buf8(4);var opts;var n;var order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!strm||!strm.state||!strm.output||!strm.input&&strm.avail_in!==0){return Z_STREAM_ERROR}state=strm.state;if(state.mode===TYPE){state.mode=TYPEDO}put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;_in=have;_out=left;ret=Z_OK;inf_leave:for(;;){switch(state.mode){case HEAD:if(state.wrap===0){state.mode=TYPEDO;break}while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.wrap&2&&hold===35615){state.check=0;hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<<len;strm.adler=state.check=1;state.mode=hold&512?DICTID:TYPE;hold=0;bits=0;break;case FLAGS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.flags=hold;if((state.flags&255)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}if(state.flags&57344){strm.msg="unknown header flags set";state.mode=BAD;break}if(state.head){state.head.text=hold>>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.time=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(state.head){state.head.xflags=hold&255;state.head.os=hold>>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length=hold;if(state.head){state.head.extra_len=hold}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.name=null}state.length=0;state.mode=COMMENT;case COMMENT:if(state.flags&4096){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.comment+=String.fromCharCode(len)}}while(len&&copy<have);if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;if(len){break inf_leave}}else if(state.head){state.head.comment=null}state.mode=HCRC;case HCRC:if(state.flags&512){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.check&65535)){strm.msg="header crc mismatch";state.mode=BAD;break}hold=0;bits=0}if(state.head){state.head.hcrc=state.flags>>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}strm.adler=state.check=ZSWAP32(hold);hold=0;bits=0;state.mode=DICT;case DICT:if(state.havedict===0){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;return Z_NEED_DICT}strm.adler=state.check=1;state.mode=TYPE;case TYPE:if(flush===Z_BLOCK||flush===Z_TREES){break inf_leave}case TYPEDO:if(state.last){hold>>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.last=hold&1;hold>>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((hold&65535)!==(hold>>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave}case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.nlen=(hold&31)+257;hold>>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have<state.ncode){while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.lens[order[state.have++]]=hold&7;hold>>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have<state.nlen+state.ndist){for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_val<16){hold>>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave}case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<<state.lenbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(here_op&&(here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.lencode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.length+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<<state.distbits)-1];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if((here_op&240)===0){last_bits=here_bits;last_op=here_op;last_val=here_val;for(;;){here=state.distcode[last_val+((hold&(1<<last_bits+last_op)-1)>>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}hold>>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits<n){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}state.offset+=hold&(1<<state.extra)-1;hold>>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<<bits;bits+=8}_out-=left;strm.total_out+=_out;state.total+=_out;if(_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,put-_out):adler32(state.check,output,_out,put-_out)}_out=left;if((state.flags?hold:ZSWAP32(hold))!==state.check){strm.msg="incorrect data check";state.mode=BAD;break}hold=0;bits=0}state.mode=LENGTH;case LENGTH:if(state.wrap&&state.flags){while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<<bits;bits+=8}if(hold!==(state.total&4294967295)){strm.msg="incorrect length check";state.mode=BAD;break}hold=0;bits=0}state.mode=DONE;case DONE:ret=Z_STREAM_END;break inf_leave;case BAD:ret=Z_DATA_ERROR;break inf_leave;case MEM:return Z_MEM_ERROR;case SYNC:default:return Z_STREAM_ERROR}}strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;if(state.wsize||_out!==strm.avail_out&&state.mode<BAD&&(state.mode<CHECK||flush!==Z_FINISH)){if(updatewindow(strm,strm.output,strm.next_out,_out-strm.avail_out)){state.mode=MEM;return Z_MEM_ERROR}}_in-=strm.avail_in;_out-=strm.avail_out;strm.total_in+=_in;strm.total_out+=_out;state.total+=_out;if(state.wrap&&_out){strm.adler=state.check=state.flags?crc32(state.check,output,_out,strm.next_out-_out):adler32(state.check,output,_out,strm.next_out-_out)}strm.data_type=state.bits+(state.last?64:0)+(state.mode===TYPE?128:0)+(state.mode===LEN_||state.mode===COPY_?256:0);if((_in===0&&_out===0||flush===Z_FINISH)&&ret===Z_OK){ret=Z_BUF_ERROR}return ret}function inflateEnd(strm){if(!strm||!strm.state){return Z_STREAM_ERROR}var state=strm.state;if(state.window){state.window=null}strm.state=null;return Z_OK}function inflateGetHeader(strm,head){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if((state.wrap&2)===0){return Z_STREAM_ERROR}state.head=head;head.done=false;return Z_OK}exports.inflateReset=inflateReset;exports.inflateReset2=inflateReset2;exports.inflateResetKeep=inflateResetKeep;exports.inflateInit=inflateInit;exports.inflateInit2=inflateInit2;exports.inflate=inflate;exports.inflateEnd=inflateEnd;exports.inflateGetHeader=inflateGetHeader;exports.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":52,"./adler32":54,"./crc32":56,"./inffast":59,"./inftrees":61}],61:[function(require,module,exports){"use strict";var utils=require("../utils/common");var MAXBITS=15;var ENOUGH_LENS=852;var ENOUGH_DISTS=592;var CODES=0;var LENS=1;var DISTS=2;var lbase=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var lext=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var dbase=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var dext=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];module.exports=function inflate_table(type,lens,lens_index,codes,table,table_index,work,opts){var bits=opts.bits;var len=0;var sym=0;var min=0,max=0;var root=0;var curr=0;var drop=0;var left=0;var used=0;var huff=0;var incr;var fill;var low;var mask;var next;var base=null;var base_index=0;var end;var count=new utils.Buf16(MAXBITS+1);var offs=new utils.Buf16(MAXBITS+1);var extra=null;var extra_index=0;var here_bits,here_op,here_val;for(len=0;len<=MAXBITS;len++){count[len]=0}for(sym=0;sym<codes;sym++){count[lens[lens_index+sym]]++}root=bits;for(max=MAXBITS;max>=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min<max;min++){if(count[min]!==0){break}}if(root<min){root=min}left=1;for(len=1;len<=MAXBITS;len++){left<<=1;left-=count[len];if(left<0){return-1}}if(left>0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;len<MAXBITS;len++){offs[len+1]=offs[len]+count[len]}for(sym=0;sym<codes;sym++){if(lens[lens_index+sym]!==0){work[offs[lens[lens_index+sym]]++]=sym}}if(type===CODES){base=extra=work;end=19}else if(type===LENS){base=lbase;base_index-=257;extra=lext;extra_index-=257;end=256}else{base=dbase;extra=dext;end=-1}huff=0;sym=0;len=min;next=table_index;curr=root;drop=0;low=-1;used=1<<root;mask=used-1;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]<end){here_op=0;here_val=work[sym]}else if(work[sym]>end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<<len-drop;fill=1<<curr;min=fill;do{fill-=incr;table[next+(huff>>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<<len-1;while(huff&incr){incr>>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<<curr;while(curr+drop<max){left-=count[curr+drop];if(left<=0){break}curr++;left<<=1}used+=1<<curr;if(type===LENS&&used>ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":52}],62:[function(require,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],63:[function(require,module,exports){"use strict";var utils=require("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<<s.bi_valid&65535;put_short(s,s.bi_buf);s.bi_buf=value>>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<<s.bi_valid&65535;s.bi_valid+=length}}function send_code(s,c,tree){send_bits(s,tree[c*2],tree[c*2+1])}function bi_reverse(code,len){var res=0;do{res|=code&1;code>>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;h<HEAP_SIZE;h++){n=s.heap[h];bits=tree[tree[n*2+1]*2+1]+1;if(bits>max_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code<LENGTH_CODES-1;code++){base_length[code]=length;for(n=0;n<1<<extra_lbits[code];n++){_length_code[length++]=code}}_length_code[length-1]=code;dist=0;for(code=0;code<16;code++){base_dist[code]=dist;for(n=0;n<1<<extra_dbits[code];n++){_dist_code[dist++]=code}}dist>>=7;for(;code<D_CODES;code++){base_dist[code]=dist<<7;for(n=0;n<1<<extra_dbits[code]-7;n++){_dist_code[256+dist++]=code}}for(bits=0;bits<=MAX_BITS;bits++){bl_count[bits]=0}n=0;while(n<=143){static_ltree[n*2+1]=8;n++;bl_count[8]++}while(n<=255){static_ltree[n*2+1]=9;n++;bl_count[9]++}while(n<=279){static_ltree[n*2+1]=7;n++;bl_count[7]++}while(n<=287){static_ltree[n*2+1]=8;n++;bl_count[8]++}gen_codes(static_ltree,L_CODES+1,bl_count);for(n=0;n<D_CODES;n++){static_dtree[n*2+1]=5;static_dtree[n*2]=bi_reverse(n,5)}static_l_desc=new StaticTreeDesc(static_ltree,extra_lbits,LITERALS+1,L_CODES,MAX_BITS);static_d_desc=new StaticTreeDesc(static_dtree,extra_dbits,0,D_CODES,MAX_BITS);static_bl_desc=new StaticTreeDesc(new Array(0),extra_blbits,0,BL_CODES,MAX_BL_BITS)}function init_block(s){var n;for(n=0;n<L_CODES;n++){s.dyn_ltree[n*2]=0}for(n=0;n<D_CODES;n++){s.dyn_dtree[n*2]=0}for(n=0;n<BL_CODES;n++){s.bl_tree[n*2]=0}s.dyn_ltree[END_BLOCK*2]=1;s.opt_len=s.static_len=0;s.last_lit=s.matches=0}function bi_windup(s){if(s.bi_valid>8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]<tree[_m2]||tree[_n2]===tree[_m2]&&depth[n]<=depth[m]}function pqdownheap(s,tree,k){var v=s.heap[k];var j=k<<1;while(j<=s.heap_len){if(j<s.heap_len&&smaller(tree,s.heap[j+1],s.heap[j],s.depth)){j++}if(smaller(tree,v,s.heap[j],s.depth)){break}s.heap[k]=s.heap[j];k=j;j<<=1}s.heap[k]=v}function compress_block(s,ltree,dtree){var dist;var lc;var lx=0;var code;var extra;if(s.last_lit!==0){do{dist=s.pending_buf[s.d_buf+lx*2]<<8|s.pending_buf[s.d_buf+lx*2+1];lc=s.pending_buf[s.l_buf+lx];lx++;if(dist===0){send_code(s,lc,ltree)}else{code=_length_code[lc];send_code(s,code+LITERALS+1,ltree);extra=extra_lbits[code];if(extra!==0){lc-=base_length[code];send_bits(s,lc,extra)}dist--;code=d_code(dist);send_code(s,code,dtree);extra=extra_dbits[code];if(extra!==0){dist-=base_dist[code];send_bits(s,dist,extra)}}}while(lx<s.last_lit)}send_code(s,END_BLOCK,ltree)}function build_tree(s,desc){var tree=desc.dyn_tree;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var elems=desc.stat_desc.elems;var n,m;var max_code=-1;var node;s.heap_len=0;s.heap_max=HEAP_SIZE;for(n=0;n<elems;n++){if(tree[n*2]!==0){s.heap[++s.heap_len]=max_code=n;s.depth[n]=0}else{tree[n*2+1]=0}}while(s.heap_len<2){node=s.heap[++s.heap_len]=max_code<2?++max_code:0;tree[node*2]=1;s.depth[node]=0;s.opt_len--;if(has_stree){s.static_len-=stree[node*2+1]}}desc.max_code=max_code;for(n=s.heap_len>>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){s.bl_tree[curlen*2]+=count}else if(curlen!==0){if(curlen!==prevlen){s.bl_tree[curlen*2]++}s.bl_tree[REP_3_6*2]++}else if(count<=10){s.bl_tree[REPZ_3_10*2]++}else{s.bl_tree[REPZ_11_138*2]++}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function send_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count<max_count&&curlen===nextlen){continue}else if(count<min_count){do{send_code(s,curlen,s.bl_tree)}while(--count!==0)}else if(curlen!==0){if(curlen!==prevlen){send_code(s,curlen,s.bl_tree);count--}send_code(s,REP_3_6,s.bl_tree);send_bits(s,count-3,2)}else if(count<=10){send_code(s,REPZ_3_10,s.bl_tree);send_bits(s,count-3,3)}else{send_code(s,REPZ_11_138,s.bl_tree);send_bits(s,count-11,7)}count=0;prevlen=curlen;if(nextlen===0){max_count=138;min_count=3}else if(curlen===nextlen){max_count=6;min_count=3}else{max_count=7;min_count=4}}}function build_bl_tree(s){var max_blindex;scan_tree(s,s.dyn_ltree,s.l_desc.max_code);scan_tree(s,s.dyn_dtree,s.d_desc.max_code);build_tree(s,s.bl_desc);for(max_blindex=BL_CODES-1;max_blindex>=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank<blcodes;rank++){send_bits(s,s.bl_tree[bl_order[rank]*2+1],3)}send_tree(s,s.dyn_ltree,lcodes-1);send_tree(s,s.dyn_dtree,dcodes-1)}function detect_data_type(s){var black_mask=4093624447;var n;for(n=0;n<=31;n++,black_mask>>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n<LITERALS;n++){if(s.dyn_ltree[n*2]!==0){return Z_TEXT}}return Z_BINARY}var static_init_done=false;function _tr_init(s){if(!static_init_done){tr_static_init();static_init_done=true}s.l_desc=new TreeDesc(s.dyn_ltree,static_l_desc);s.d_desc=new TreeDesc(s.dyn_dtree,static_d_desc);s.bl_desc=new TreeDesc(s.bl_tree,static_bl_desc);s.bi_buf=0;s.bi_valid=0;init_block(s)}function _tr_stored_block(s,buf,stored_len,last){send_bits(s,(STORED_BLOCK<<1)+(last?1:0),3);copy_block(s,buf,stored_len,true)}function _tr_align(s){send_bits(s,STATIC_TREES<<1,3);send_code(s,END_BLOCK,static_ltree);bi_flush(s)}function _tr_flush_block(s,buf,stored_len,last){var opt_lenb,static_lenb;var max_blindex=0;if(s.level>0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);
  12. compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":52}],64:[function(require,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}],65:[function(require,module,exports){module.exports=function arrayEquals(array){if(!array)return false;if(this.length!=array.length)return false;for(var i=0,l=this.length;i<l;i++){if(this[i]instanceof Array&&array[i]instanceof Array){if(!arrayEquals.apply(this[i],[array[i]]))return false}else if(this[i]!=array[i]){return false}}return true}},{}],66:[function(require,module,exports){exports.Interop=require("./interop")},{"./interop":67}],67:[function(require,module,exports){"use strict";var transform=require("./transform");var arrayEquals=require("./array-equals");function Interop(){this.cache={}}module.exports=Interop;Interop.prototype.getFirstSendingIndexFromAnswer=function(type){if(!this.cache.answer){return null}var session=transform.parse(this.cache.answer);if(session&&session.media&&Array.isArray(session.media)){for(var i=0;i<session.media.length;i++){if(session.media[i].type==type&&(!session.media[i].direction||session.media[i].direction==="sendrecv"||session.media[i].direction==="sendonly")){return i}}}return null};Interop.prototype.toPlanB=function(desc){var self=this;if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){console.warn("An empty description was passed as an argument.");return desc}var session=transform.parse(desc.sdp);if(typeof session.media==="undefined"||!Array.isArray(session.media)||session.media.length===0){console.warn("The description has no media.");return desc}if(session.media.length<=3&&session.media.every(function(m){return["video","audio","data"].indexOf(m.mid)!==-1})){console.warn("This description does not look like Unified Plan.");return desc}var sdp=desc.sdp;var rewrite=false;for(var i=0;i<session.media.length;i++){var uLine=session.media[i];uLine.rtp.forEach(function(rtp){if(rtp.codec==="NULL"){rewrite=true;var offer=transform.parse(self.cache["offer"]);rtp.codec=offer.media[i].rtp[0].codec}})}if(rewrite){sdp=transform.write(session)}this.cache[desc.type]=sdp;var media=session.media;session.media=[];var type2bl={};var types=[];media.forEach(function(uLine){if((typeof uLine.rtcpMux!=="string"||uLine.rtcpMux!=="rtcp-mux")&&uLine.direction!=="inactive"){throw new Error("Cannot convert to Plan B because m-lines "+"without the rtcp-mux attribute were found.")}if(uLine.type==="application"){session.media.push(uLine);types.push(uLine.mid);return}if(typeof type2bl[uLine.type]==="undefined"){type2bl[uLine.type]=uLine}if(typeof uLine.sources==="object"){Object.keys(uLine.sources).forEach(function(ssrc){if(typeof type2bl[uLine.type].sources!=="object")type2bl[uLine.type].sources={};type2bl[uLine.type].sources[ssrc]=uLine.sources[ssrc];if(typeof uLine.msid!=="undefined"){type2bl[uLine.type].sources[ssrc].msid=uLine.msid}})}if(typeof uLine.ssrcGroups!=="undefined"&&Array.isArray(uLine.ssrcGroups)){if(typeof type2bl[uLine.type].ssrcGroups==="undefined"||!Array.isArray(type2bl[uLine.type].ssrcGroups)){type2bl[uLine.type].ssrcGroups=[]}type2bl[uLine.type].ssrcGroups=type2bl[uLine.type].ssrcGroups.concat(uLine.ssrcGroups)}if(type2bl[uLine.type]===uLine){uLine.candidates=media[0].candidates;uLine.iceUfrag=media[0].iceUfrag;uLine.icePwd=media[0].icePwd;uLine.fingerprint=media[0].fingerprint;uLine.mid=uLine.type;delete uLine.bundleOnly;delete uLine.msid;types.push(uLine.type);session.media.push(uLine)}});session.groups.some(function(group){if(group.type==="BUNDLE"){group.mids=types.join(" ");return true}});session.msidSemantic={semantic:"WMS",token:"*"};var resStr=transform.write(session);return new RTCSessionDescription({type:desc.type,sdp:resStr})};Interop.prototype.toUnifiedPlan=function(desc){var self=this;if(typeof desc!=="object"||desc===null||typeof desc.sdp!=="string"){console.warn("An empty description was passed as an argument.");return desc}var session=transform.parse(desc.sdp);if(typeof session.media==="undefined"||!Array.isArray(session.media)||session.media.length===0){console.warn("The description has no media.");return desc}if(session.media.length>3||!session.media.every(function(m){return["video","audio","data"].indexOf(m.mid)!==-1})){console.warn("This description does not look like Plan B.");return desc}var mids=[];session.media.forEach(function(m){mids.push(m.mid)});var hasBundle=false;if(typeof session.groups!=="undefined"&&Array.isArray(session.groups)){hasBundle=session.groups.every(function(g){return g.type!=="BUNDLE"||arrayEquals.apply(g.mids.sort(),[mids.sort()])})}if(!hasBundle){throw new Error("Cannot convert to Unified Plan because m-lines that"+" are not bundled were found.")}var cached;if(typeof this.cache[desc.type]!=="undefined"){cached=transform.parse(this.cache[desc.type])}var recvonlySsrcs={audio:{},video:{}};var mid2ul={};session.media.forEach(function(bLine){if((typeof bLine.rtcpMux!=="string"||bLine.rtcpMux!=="rtcp-mux")&&bLine.direction!=="inactive"){throw new Error("Cannot convert to Unified Plan because m-lines "+"without the rtcp-mux attribute were found.")}if(bLine.type==="application"){mid2ul[bLine.mid]=bLine;return}var sources=bLine.sources;var ssrcGroups=bLine.ssrcGroups;var candidates=bLine.candidates;var iceUfrag=bLine.iceUfrag;var icePwd=bLine.icePwd;var fingerprint=bLine.fingerprint;var port=bLine.port;delete bLine.sources;delete bLine.ssrcGroups;delete bLine.candidates;delete bLine.iceUfrag;delete bLine.icePwd;delete bLine.fingerprint;delete bLine.port;delete bLine.mid;var ssrc2group={};if(typeof ssrcGroups!=="undefined"&&Array.isArray(ssrcGroups)){ssrcGroups.forEach(function(ssrcGroup){if(ssrcGroup.semantics==="SIM"){return}if(typeof ssrcGroup.ssrcs!=="undefined"&&Array.isArray(ssrcGroup.ssrcs)){ssrcGroup.ssrcs.forEach(function(ssrc){if(typeof ssrc2group[ssrc]==="undefined"){ssrc2group[ssrc]=[]}ssrc2group[ssrc].push(ssrcGroup)})}})}var ssrc2ml={};if(typeof sources==="object"){Object.keys(sources).forEach(function(ssrc){var uLine;if(desc.type==="offer"){if(!sources[ssrc].msid){recvonlySsrcs[bLine.type][ssrc]=sources[ssrc];return}}if(typeof ssrc2group[ssrc]!=="undefined"&&Array.isArray(ssrc2group[ssrc])){ssrc2group[ssrc].some(function(ssrcGroup){return ssrcGroup.ssrcs.some(function(related){if(typeof ssrc2ml[related]==="object"){uLine=ssrc2ml[related];return true}})})}if(typeof uLine==="object"){uLine.sources[ssrc]=sources[ssrc];delete sources[ssrc].msid}else{uLine=Object.create(bLine);ssrc2ml[ssrc]=uLine;if(typeof sources[ssrc].msid!=="undefined"){uLine.msid=sources[ssrc].msid;uLine.direction="sendrecv";delete sources[ssrc].msid}uLine.sources={};uLine.sources[ssrc]=sources[ssrc];uLine.ssrcGroups=ssrc2group[ssrc];if(typeof cached!=="undefined"&&typeof cached.media!=="undefined"&&Array.isArray(cached.media)){cached.media.forEach(function(m){if(typeof m.sources==="object"){Object.keys(m.sources).forEach(function(s){if(s===ssrc){uLine.mid=m.mid}})}})}if(typeof uLine.mid==="undefined"){if(desc.type==="answer"){throw new Error("An unmapped SSRC was found.")}uLine.mid=[bLine.type,"-",ssrc].join("")}uLine.candidates=candidates;uLine.iceUfrag=iceUfrag;uLine.icePwd=icePwd;uLine.fingerprint=fingerprint;uLine.port=port;mid2ul[uLine.mid]=uLine}})}});session.media=[];mids=[];if(desc.type==="answer"){for(var i=0;i<cached.media.length;i++){var uLine=cached.media[i];if(typeof mid2ul[uLine.mid]==="undefined"){delete uLine.msid;delete uLine.sources;delete uLine.ssrcGroups;if(!uLine.direction||uLine.direction==="sendrecv")uLine.direction="recvonly";else if(uLine.direction==="sendonly")uLine.direction="inactive"}else{}session.media.push(uLine);if(typeof uLine.mid==="string"){mids.push(uLine.mid)}}}else{if(typeof cached!=="undefined"&&typeof cached.media!=="undefined"&&Array.isArray(cached.media)){cached.media.forEach(function(uLine){mids.push(uLine.mid);if(typeof mid2ul[uLine.mid]!=="undefined"){session.media.push(mid2ul[uLine.mid])}else{delete uLine.msid;delete uLine.sources;delete uLine.ssrcGroups;if(!uLine.direction||uLine.direction==="sendrecv")uLine.direction="recvonly";if(!uLine.direction||uLine.direction==="sendonly")uLine.direction="inactive";session.media.push(uLine)}})}Object.keys(mid2ul).forEach(function(mid){if(mids.indexOf(mid)===-1){mids.push(mid);if(mid2ul[mid].direction==="recvonly"){session.media.some(function(uLine){if((uLine.direction==="sendrecv"||uLine.direction==="sendonly")&&uLine.type===mid2ul[mid].type){Object.keys(mid2ul[mid].sources).forEach(function(ssrc){uLine.sources[ssrc]=mid2ul[mid].sources[ssrc]});return true}})}else{session.media.push(mid2ul[mid])}}})}["audio","video"].forEach(function(type){if(!session||!session.media||!Array.isArray(session.media))return;var idx=null;if(Object.keys(recvonlySsrcs[type]).length>0){idx=self.getFirstSendingIndexFromAnswer(type);if(idx===null){for(var i=0;i<session.media.length;i++){if(session.media[i].type===type){idx=i;break}}}}if(idx&&session.media.length>idx){var mLine=session.media[idx];Object.keys(recvonlySsrcs[type]).forEach(function(ssrc){if(mLine.sources&&mLine.sources[ssrc]){console.warn("Replacing an existing SSRC.")}if(!mLine.sources){mLine.sources={}}mLine.sources[ssrc]=recvonlySsrcs[type][ssrc]})}});session.groups.some(function(group){if(group.type==="BUNDLE"){group.mids=mids.join(" ");return true}});session.msidSemantic={semantic:"WMS",token:"*"};var resStr=transform.write(session);this.cache[desc.type]=resStr;return new RTCSessionDescription({type:desc.type,sdp:resStr})}},{"./array-equals":65,"./transform":68}],68:[function(require,module,exports){var transform=require("sdp-transform");exports.write=function(session,opts){if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){if(typeof mLine.sources!=="undefined"&&Object.keys(mLine.sources).length!==0){mLine.ssrcs=[];Object.keys(mLine.sources).forEach(function(ssrc){var source=mLine.sources[ssrc];Object.keys(source).forEach(function(attribute){mLine.ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})});delete mLine.sources}if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs!=="undefined"&&Array.isArray(ssrcGroup.ssrcs)){ssrcGroup.ssrcs=ssrcGroup.ssrcs.join(" ")}})}})}if(typeof session!=="undefined"&&typeof session.groups!=="undefined"&&Array.isArray(session.groups)){session.groups.forEach(function(g){if(typeof g.mids!=="undefined"&&Array.isArray(g.mids)){g.mids=g.mids.join(" ")}})}return transform.write(session,opts)};exports.parse=function(sdp){var session=transform.parse(sdp);if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){mLine.sources={};mLine.ssrcs.forEach(function(ssrc){if(!mLine.sources[ssrc.id])mLine.sources[ssrc.id]={};mLine.sources[ssrc.id][ssrc.attribute]=ssrc.value});delete mLine.ssrcs}if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs==="string"){ssrcGroup.ssrcs=ssrcGroup.ssrcs.split(" ")}})}})}if(typeof session!=="undefined"&&typeof session.groups!=="undefined"&&Array.isArray(session.groups)){session.groups.forEach(function(g){if(typeof g.mids==="string"){g.mids=g.mids.split(" ")}})}return session}},{"sdp-transform":76}],69:[function(require,module,exports){var transform=require("sdp-transform");var transformUtils=require("./transform-utils");var parseSsrcs=transformUtils.parseSsrcs;var writeSsrcs=transformUtils.writeSsrcs;var DEFAULT_NUM_OF_LAYERS=3;function Simulcast(options){this.options=options?options:{};if(!this.options.numOfLayers){this.options.numOfLayers=DEFAULT_NUM_OF_LAYERS}this.layers=[]}function generateSSRC(){var min=0,max=4294967295;return Math.floor(Math.random()*(max-min))+min}function processVideo(session,action){if(session==null||!Array.isArray(session.media)){return}session.media.forEach(function(mLine){if(mLine.type==="video"){action(mLine)}})}function validateDescription(desc){return desc&&desc!=null&&desc.type&&desc.type!=""&&desc.sdp&&desc.sdp!=""}function explodeRemoteSimulcast(mLine){if(!mLine||!Array.isArray(mLine.ssrcGroups)){return}var sources=parseSsrcs(mLine);var order=[];var j=mLine.ssrcGroups.length;while(j--){if(mLine.ssrcGroups[j].semantics!=="SIM"){continue}var simulcastSsrcs=mLine.ssrcGroups[j].ssrcs.split(" ");for(var i=0;i<simulcastSsrcs.length;i++){var ssrc=simulcastSsrcs[i];order.push(ssrc);var parts=sources[ssrc].msid.split(" ");sources[ssrc].msid=[parts[0],"/",i," ",parts[1],"/",i].join("");sources[ssrc].cname=[sources[ssrc].cname,"/",i].join("");mLine.ssrcGroups.forEach(function(relatedGroup){if(relatedGroup.semantics==="SIM"){return}var relatedSsrcs=relatedGroup.ssrcs.split(" ");if(relatedSsrcs.indexOf(ssrc)===-1){return}relatedSsrcs.forEach(function(relatedSSRC){sources[relatedSSRC].msid=sources[ssrc].msid;sources[relatedSSRC].cname=sources[ssrc].cname;if(relatedSSRC!==ssrc){order.push(relatedSSRC)}})})}mLine.ssrcs=writeSsrcs(sources,order);mLine.ssrcGroups.splice(j,1)}}function implodeRemoteSimulcast(mLine){if(!mLine||!Array.isArray(mLine.ssrcGroups)){console.debug("Halt: There are no SSRC groups in the remote "+"description.");return}var sources=parseSsrcs(mLine);mLine.ssrcGroups.forEach(function(simulcastGroup){if(simulcastGroup.semantics!=="SIM"){return}console.debug("Imploding SIM group: "+simulcastGroup.ssrcs);simulcastGroup.nuke=true;var simulcastSsrcs=simulcastGroup.ssrcs.split(" ");for(var i=1;i<simulcastSsrcs.length;i++){var ssrc=simulcastSsrcs[i];delete sources[ssrc];mLine.ssrcGroups.forEach(function(relatedGroup){if(relatedGroup.semantics==="SIM"){return}var relatedSsrcs=relatedGroup.ssrcs.split(" ");if(relatedSsrcs.indexOf(ssrc)===-1){return}relatedSsrcs.forEach(function(relatedSSRC){delete sources[relatedSSRC]});relatedGroup.nuke=true})}return});mLine.ssrcs=writeSsrcs(sources);var i=mLine.ssrcGroups.length;while(i--){if(mLine.ssrcGroups[i].nuke){mLine.ssrcGroups.splice(i,1)}}}function removeGoogConference(mLine){if(!mLine||!Array.isArray(mLine.invalid)){return}var i=mLine.invalid.length;while(i--){if(mLine.invalid[i].value=="x-google-flag:conference"){mLine.invalid.splice(i,1)}}}function assertGoogConference(mLine){if(!mLine){return}if(!Array.isArray(mLine.invalid)){mLine.invalid=[]}if(!mLine.invalid.some(function(i){return i.value==="x-google-flag:conference"})){mLine.invalid.push({value:"x-google-flag:conference"})}}Simulcast.prototype._maybeInitializeLayers=function(mLine){if(!mLine||mLine.type!=="video"){return}var sources=parseSsrcs(mLine);if(Object.keys(sources).length===0){if(this.layers.length!==0){this.layers=[]}return}var baseLayerSSRC=Object.keys(sources)[0];var baseLayer=sources[baseLayerSSRC];if(this.layers.length>0&&sources[baseLayerSSRC].cname!==this.layers[0].cname){this.layers=[]}if(this.layers.length<1){this.layers.push({ssrc:baseLayerSSRC,msid:baseLayer.msid,cname:baseLayer.cname});var rtx=false;if(Array.isArray(mLine.rtp)){rtx=mLine.rtp.some(function(rtpmap){return rtpmap.codec==="rtx"})}if(rtx){this.layers[0].rtx=generateSSRC()}for(var i=1;i<Math.max(1,this.options.numOfLayers);i++){var layer={ssrc:generateSSRC()};if(rtx){layer.rtx=generateSSRC()}this.layers.push(layer)}}};Simulcast.prototype._restoreSimulcastView=function(mLine){if(mLine&&mLine.type==="video"&&this.layers.length!==0){var sources={};var msid=this.layers[0].msid;var cname=this.layers[0].cname;var simulcastSsrcs=[];var ssrcGroups=[];for(var i=0;i<this.layers.length;i++){var layer=this.layers[i];sources[layer.ssrc]={msid:msid,cname:cname};simulcastSsrcs.push(layer.ssrc);if(layer.rtx){sources[layer.rtx]={msid:msid,cname:cname};ssrcGroups.push({semantics:"FID",ssrcs:[layer.ssrc,layer.rtx].join(" ")})}}ssrcGroups.push({semantics:"SIM",ssrcs:simulcastSsrcs.join(" ")});mLine.ssrcGroups=ssrcGroups;mLine.ssrcs=writeSsrcs(sources)}};Simulcast.prototype.isSupported=function(){return window.chrome};Simulcast.prototype.mungeRemoteDescription=function(desc){if(!validateDescription(desc)){return desc}var session=transform.parse(desc.sdp);var self=this;processVideo(session,function(mLine){if(self.options.explodeRemoteSimulcast){explodeRemoteSimulcast(mLine)}else{implodeRemoteSimulcast(mLine)}if(self.layers.length<1){removeGoogConference(mLine)}else{assertGoogConference(mLine)}});return new RTCSessionDescription({type:desc.type,sdp:transform.write(session)})};Simulcast.prototype.mungeLocalDescription=function(desc){if(!validateDescription(desc)||!this.isSupported()){return desc}var session=transform.parse(desc.sdp);var self=this;processVideo(session,function(mLine){self._maybeInitializeLayers(mLine);self._restoreSimulcastView(mLine)});return new RTCSessionDescription({type:desc.type,sdp:transform.write(session)})};module.exports=Simulcast},{"./transform-utils":70,"sdp-transform":72}],70:[function(require,module,exports){exports.writeSsrcs=function(sources,order){var ssrcs=[];if(typeof sources!=="undefined"&&Object.keys(sources).length!==0){if(Array.isArray(order)){for(var i=0;i<order.length;i++){var ssrc=order[i];var source=sources[ssrc];Object.keys(source).forEach(function(attribute){ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})}}else{Object.keys(sources).forEach(function(ssrc){var source=sources[ssrc];Object.keys(source).forEach(function(attribute){ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})})}}return ssrcs};exports.parseSsrcs=function(mLine){var sources={};if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){mLine.ssrcs.forEach(function(ssrc){if(!sources[ssrc.id])sources[ssrc.id]={};sources[ssrc.id][ssrc.attribute]=ssrc.value})}return sources}},{}],71:[function(require,module,exports){var grammar=module.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-]*)\/(\d*)(?:\s*\/(\S*))?/,names:["payload","codec","rate","encoding"],format:function(o){return o.encoding?"rtpmap:%d %s/%s/%s":"rtpmap:%d %s/%s"}},{push:"fmtp",reg:/^fmtp:(\d*) (\S*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(o){return o.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(o){return o.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:([\w_\/]*) (\S*)(?: (\S*))?/,names:["value","uri","config"],format:function(o){return o.config!=null?"extmap:%s %s %s":"extmap:%s %s"}},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(o){return o.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: generation (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","generation"],format:function(o){var str="candidate:%s %d %s %d %s %d typ %s";str+=o.raddr!=null?" raddr %s rport %d":"%v%v";if(o.generation!=null){str+=" generation %d"}return str}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_]*):(.*)/,names:["id","attribute","value"],format:"ssrc:%d %s:%s"},{push:"ssrcGroups",reg:/^ssrc-group:(\w*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{push:"invalid",names:["value"]}]};Object.keys(grammar).forEach(function(key){var objs=grammar[key];objs.forEach(function(obj){if(!obj.reg){obj.reg=/(.*)/}if(!obj.format){obj.format="%s"}})})},{}],72:[function(require,module,exports){var parser=require("./parser");var writer=require("./writer");exports.write=writer;exports.parse=parser.parse;exports.parseFmtpConfig=parser.parseFmtpConfig;exports.parsePayloads=parser.parsePayloads;exports.parseRemoteCandidates=parser.parseRemoteCandidates},{"./parser":73,"./writer":74}],73:[function(require,module,exports){var toIntIfInt=function(v){return String(Number(v))===v?Number(v):v};var attachProperties=function(match,location,names,rawName){if(rawName&&!names){location[rawName]=toIntIfInt(match[1])}else{for(var i=0;i<names.length;i+=1){if(match[i+1]!=null){location[names[i]]=toIntIfInt(match[i+1])}}}};var parseReg=function(obj,location,content){var needsBlank=obj.name&&obj.names;if(obj.push&&!location[obj.push]){location[obj.push]=[]}else if(needsBlank&&!location[obj.name]){location[obj.name]={}}var keyLocation=obj.push?{}:needsBlank?location[obj.name]:location;attachProperties(content.match(obj.reg),keyLocation,obj.names,obj.name);if(obj.push){location[obj.push].push(keyLocation)}};var grammar=require("./grammar");var validLine=RegExp.prototype.test.bind(/^([a-z])=(.*)/);exports.parse=function(sdp){var session={},media=[],location=session;sdp.split(/(\r\n|\r|\n)/).filter(validLine).forEach(function(l){var type=l[0];var content=l.slice(2);if(type==="m"){media.push({rtp:[],fmtp:[]});location=media[media.length-1]}for(var j=0;j<(grammar[type]||[]).length;j+=1){var obj=grammar[type][j];if(obj.reg.test(content)){return parseReg(obj,location,content)}}});session.media=media;return session};var fmtpReducer=function(acc,expr){var s=expr.split("=");if(s.length===2){acc[s[0]]=toIntIfInt(s[1])}return acc};exports.parseFmtpConfig=function(str){return str.split(";").reduce(fmtpReducer,{})};exports.parsePayloads=function(str){return str.split(" ").map(Number)};exports.parseRemoteCandidates=function(str){var candidates=[];var parts=str.split(" ").map(toIntIfInt);for(var i=0;i<parts.length;i+=3){candidates.push({component:parts[i],ip:parts[i+1],port:parts[i+2]})}return candidates}},{"./grammar":71}],74:[function(require,module,exports){var grammar=require("./grammar");var formatRegExp=/%[sdv%]/g;var format=function(formatStr){var i=1;var args=arguments;var len=args.length;return formatStr.replace(formatRegExp,function(x){if(i>=len){return x}var arg=args[i];i+=1;switch(x){case"%%":return"%";case"%s":return String(arg);case"%d":return Number(arg);case"%v":return""}})};var makeLine=function(type,obj,location){var str=obj.format instanceof Function?obj.format(obj.push?location:location[obj.name]):obj.format;var args=[type+"="+str];if(obj.names){for(var i=0;i<obj.names.length;i+=1){var n=obj.names[i];if(obj.name){args.push(location[obj.name][n])}else{args.push(location[obj.names[i]])}}}else{args.push(location[obj.name])}return format.apply(null,args)};var defaultOuterOrder=["v","o","s","i","u","e","p","c","b","t","r","z","a"];var defaultInnerOrder=["i","c","b","a"];module.exports=function(session,opts){opts=opts||{};if(session.version==null){session.version=0}if(session.name==null){session.name=" "}session.media.forEach(function(mLine){if(mLine.payloads==null){mLine.payloads=""}});var outerOrder=opts.outerOrder||defaultOuterOrder;var innerOrder=opts.innerOrder||defaultInnerOrder;var sdp=[];outerOrder.forEach(function(type){grammar[type].forEach(function(obj){if(obj.name in session&&session[obj.name]!=null){sdp.push(makeLine(type,obj,session))}else if(obj.push in session&&session[obj.push]!=null){session[obj.push].forEach(function(el){sdp.push(makeLine(type,obj,el))})}})});session.media.forEach(function(mLine){sdp.push(makeLine("m",grammar.m[0],mLine));innerOrder.forEach(function(type){grammar[type].forEach(function(obj){if(obj.name in mLine&&mLine[obj.name]!=null){sdp.push(makeLine(type,obj,mLine))}else if(obj.push in mLine&&mLine[obj.push]!=null){mLine[obj.push].forEach(function(el){sdp.push(makeLine(type,obj,el))})}})})});return sdp.join("\r\n")+"\r\n"}},{"./grammar":71}],75:[function(require,module,exports){var grammar=module.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-]*)\/(\d*)(?:\s*\/(\S*))?/,names:["payload","codec","rate","encoding"],format:function(o){return o.encoding?"rtpmap:%d %s/%s/%s":"rtpmap:%d %s/%s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(o){return o.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(o){return o.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:([\w_\/]*) (\S*)(?: (\S*))?/,names:["value","uri","config"],format:function(o){return o.config!=null?"extmap:%s %s %s":"extmap:%s %s"}},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(o){return o.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: generation (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","generation"],format:function(o){var str="candidate:%s %d %s %d %s %d typ %s";str+=o.raddr!=null?" raddr %s rport %d":"%v%v";if(o.generation!=null){str+=" generation %d"}return str}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_]*):(.*)/,names:["id","attribute","value"],format:"ssrc:%d %s:%s"},{push:"ssrcGroups",reg:/^ssrc-group:(\w*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{push:"invalid",names:["value"]}]};Object.keys(grammar).forEach(function(key){var objs=grammar[key];objs.forEach(function(obj){if(!obj.reg){obj.reg=/(.*)/}if(!obj.format){obj.format="%s"}})})},{}],76:[function(require,module,exports){arguments[4][72][0].apply(exports,arguments)},{"./parser":77,"./writer":78,dup:72}],77:[function(require,module,exports){var toIntIfInt=function(v){return String(Number(v))===v?Number(v):v};var attachProperties=function(match,location,names,rawName){if(rawName&&!names){location[rawName]=toIntIfInt(match[1])}else{for(var i=0;i<names.length;i+=1){if(match[i+1]!=null){location[names[i]]=toIntIfInt(match[i+1])}}}};var parseReg=function(obj,location,content){var needsBlank=obj.name&&obj.names;if(obj.push&&!location[obj.push]){location[obj.push]=[]}else if(needsBlank&&!location[obj.name]){location[obj.name]={}}var keyLocation=obj.push?{}:needsBlank?location[obj.name]:location;attachProperties(content.match(obj.reg),keyLocation,obj.names,obj.name);if(obj.push){location[obj.push].push(keyLocation)}};var grammar=require("./grammar");var validLine=RegExp.prototype.test.bind(/^([a-z])=(.*)/);exports.parse=function(sdp){var session={},media=[],location=session;sdp.split(/(\r\n|\r|\n)/).filter(validLine).forEach(function(l){var type=l[0];var content=l.slice(2);if(type==="m"){media.push({rtp:[],fmtp:[]});location=media[media.length-1]}for(var j=0;j<(grammar[type]||[]).length;j+=1){var obj=grammar[type][j];if(obj.reg.test(content)){return parseReg(obj,location,content)}}});session.media=media;return session};var fmtpReducer=function(acc,expr){var s=expr.split("=");if(s.length===2){acc[s[0]]=toIntIfInt(s[1])}return acc};exports.parseFmtpConfig=function(str){return str.split(/\;\s?/).reduce(fmtpReducer,{})};exports.parsePayloads=function(str){return str.split(" ").map(Number)};exports.parseRemoteCandidates=function(str){var candidates=[];var parts=str.split(" ").map(toIntIfInt);
  13. for(var i=0;i<parts.length;i+=3){candidates.push({component:parts[i],ip:parts[i+1],port:parts[i+2]})}return candidates}},{"./grammar":75}],78:[function(require,module,exports){arguments[4][74][0].apply(exports,arguments)},{"./grammar":75,dup:74}],79:[function(require,module,exports){var MediaStreamType={VIDEO_TYPE:"Video",AUDIO_TYPE:"Audio"};module.exports=MediaStreamType},{}],80:[function(require,module,exports){var RTCEvents={RTC_READY:"rtc.ready",DATA_CHANNEL_OPEN:"rtc.data_channel_open",LASTN_CHANGED:"rtc.lastn_changed",DOMINANTSPEAKER_CHANGED:"rtc.dominantspeaker_changed",LASTN_ENDPOINT_CHANGED:"rtc.lastn_endpoint_changed",AVAILABLE_DEVICES_CHANGED:"rtc.available_devices_changed"};module.exports=RTCEvents},{}],81:[function(require,module,exports){var Resolutions={1080:{width:1920,height:1080,order:7},fullhd:{width:1920,height:1080,order:7},720:{width:1280,height:720,order:6},hd:{width:1280,height:720,order:6},960:{width:960,height:720,order:5},640:{width:640,height:480,order:4},vga:{width:640,height:480,order:4},360:{width:640,height:360,order:3},320:{width:320,height:240,order:2},180:{width:320,height:180,order:1}};module.exports=Resolutions},{}],82:[function(require,module,exports){var XMPPEvents={CONNECTION_FAILED:"xmpp.connection.failed",CONNECTION_INTERRUPTED:"xmpp.connection.interrupted",CONNECTION_RESTORED:"xmpp.connection.restored",CALL_INCOMING:"xmpp.callincoming.jingle",KICKED:"xmpp.kicked",USER_ID_CHANGED:"xmpp.user_id_changed",MUC_JOINED:"xmpp.muc_joined",MUC_MEMBER_JOINED:"xmpp.muc_member_joined",MUC_MEMBER_LEFT:"xmpp.muc_member_left",MUC_ROLE_CHANGED:"xmpp.muc_role_changed",MUC_DESTROYED:"xmpp.muc_destroyed",DISPLAY_NAME_CHANGED:"xmpp.display_name_changed",REMOTE_STATS:"xmpp.remote_stats",LOCAL_ROLE_CHANGED:"xmpp.localrole_changed",SUBJECT_CHANGED:"xmpp.subject_changed",MESSAGE_RECEIVED:"xmpp.message_received",SENDING_CHAT_MESSAGE:"xmpp.sending_chat_message",PARTICIPANT_VIDEO_TYPE_CHANGED:"xmpp.video_type",PARTICIPANT_AUDIO_MUTED:"xmpp.audio_muted",PARTICIPANT_VIDEO_MUTED:"xmpp.video_muted",AUDIO_MUTED_BY_FOCUS:"xmpp.audio_muted_by_focus",START_MUTED_FROM_FOCUS:"xmpp.start_muted_from_focus",DEVICE_AVAILABLE:"xmpp.device_available",PEERCONNECTION_READY:"xmpp.peerconnection_ready",CONFERENCE_SETUP_FAILED:"xmpp.conference_setup_failed",PASSWORD_REQUIRED:"xmpp.password_required",AUTHENTICATION_REQUIRED:"xmpp.authentication_required",CHAT_ERROR_RECEIVED:"xmpp.chat_error_received",ETHERPAD:"xmpp.etherpad",BRIDGE_DOWN:"xmpp.bridge_down",PRESENCE_STATUS:"xmpp.presence_status",RESERVATION_ERROR:"xmpp.room_reservation_error",DISPOSE_CONFERENCE:"xmpp.dispose_conference",GRACEFUL_SHUTDOWN:"xmpp.graceful_shutdown",SET_LOCAL_DESCRIPTION_ERROR:"xmpp.set_local_description_error",SET_REMOTE_DESCRIPTION_ERROR:"xmpp.set_remote_description_error",CREATE_ANSWER_ERROR:"xmpp.create_answer_error",JINGLE_FATAL_ERROR:"xmpp.jingle_fatal_error",PROMPT_FOR_LOGIN:"xmpp.prompt_for_login",FOCUS_DISCONNECTED:"xmpp.focus_disconnected",ROOM_JOIN_ERROR:"xmpp.room_join_error",ROOM_CONNECT_ERROR:"xmpp.room_connect_error",READY_TO_JOIN:"xmpp.ready_to_join",FOCUS_LEFT:"xmpp.focus_left",REMOTE_STREAM_RECEIVED:"xmpp.remote_stream_received",RECORDING_STATE_CHANGED:"xmpp.recordingStateChanged",PHONE_NUMBER_CHANGED:"conference.phoneNumberChanged"};module.exports=XMPPEvents},{}],83:[function(require,module,exports){var AuthenticationEvents={IDENTITY_UPDATED:"authentication.identity_updated"};module.exports=AuthenticationEvents},{}],84:[function(require,module,exports){var DesktopSharingEventTypes={FIREFOX_EXTENSION_NEEDED:"ds.firefox_extension_needed"};module.exports=DesktopSharingEventTypes},{}],85:[function(require,module,exports){module.exports={CONNECTION_STATS:"statistics.connectionstats",AUDIO_LEVEL:"statistics.audioLevel",STOP:"statistics.stop"}},{}],86:[function(require,module,exports){var Constants={LOCAL_JID:"local"};module.exports=Constants},{}],87:[function(require,module,exports){arguments[4][82][0].apply(exports,arguments)},{dup:82}]},{},[7])(7)});