From 682bec173b0f1e3d27fe7d3e278fafbcf2fde7a8 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Fri, 10 Aug 2018 15:10:12 -0700 Subject: [PATCH 01/89] JSDK-1973 Updating twilio-video.js to 2.x. --- README.md | 2 ++ examples/bandwidthconstraints/src/index.js | 21 ++++++++++++---- examples/codecpreferences/public/index.html | 2 +- examples/codecpreferences/src/index.js | 21 ++++++++++++---- package.json | 4 +-- quickstart/src/index.js | 27 ++++++++++++++------- 6 files changed, 55 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 8ffbdf36..077310c3 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ [![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true )](https://ci.appveyor.com/project/markandrus/video-quickstart-js) +_For Twilio Video 1.x Quickstart, go [here](https://github.com/twilio/video-quickstart-js/tree/1.x)._ + This application should give you a ready-made starting point for writing your own video apps with Twilio Video. Before we begin, we need to collect all the config values we need to run the application: diff --git a/examples/bandwidthconstraints/src/index.js b/examples/bandwidthconstraints/src/index.js index d679fd2d..8595fb02 100644 --- a/examples/bandwidthconstraints/src/index.js +++ b/examples/bandwidthconstraints/src/index.js @@ -113,6 +113,17 @@ function disconnectFromRoom() { return; } +/** + * Get the Tracks of the given Participant. + */ +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} + /** * Set up the bitrate graph for audio or video media. */ @@ -206,23 +217,23 @@ function updateBandwidthParametersInRoom() { // media should join. roomName = someRoom.name; - // Attach the newly added Track to the DOM and start the bitrate graph. - someRoom.on('trackAdded', attachTrack.bind( + // Attach the newly subscribed Track to the DOM and start the bitrate graph. + someRoom.on('trackSubscribed', attachTrack.bind( null, audioPreview, videoPreview, startAudioBitrateGraph.bind(null, someRoom), startVideoBitrateGraph.bind(null, someRoom))); - // Detach the removed Track from the DOM and stop the bitrate graph. - someRoom.on('trackRemoved', detachTrack.bind( + // Detach the unsubscribed Track from the DOM and stop the bitrate graph. + someRoom.on('trackUnsubscribed', detachTrack.bind( null, audioPreview, videoPreview)); // Detach Participant's Tracks and stop the bitrate graphs upon disconnect. someRoom.on('participantDisconnected', function(participant) { - participant.tracks.forEach(detachTrack.bind( + getTracks(participant).forEach(detachTrack.bind( null, audioPreview, videoPreview)); diff --git a/examples/codecpreferences/public/index.html b/examples/codecpreferences/public/index.html index 217e4b3d..9d0fb464 100644 --- a/examples/codecpreferences/public/index.html +++ b/examples/codecpreferences/public/index.html @@ -3,7 +3,7 @@ - Bandwidth Constraints + Codec Preferences diff --git a/examples/codecpreferences/src/index.js b/examples/codecpreferences/src/index.js index e27e1122..6758ef3c 100644 --- a/examples/codecpreferences/src/index.js +++ b/examples/codecpreferences/src/index.js @@ -106,6 +106,17 @@ function disconnectFromRoom() { return; } +/** + * Get the Tracks of the given Participant. + */ +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} + /** * Hide the codec used to encode the media of a particular kind in a Room. */ @@ -174,22 +185,22 @@ function wait(ms) { // media should join. roomName = someRoom.name; - // Attach the newly added Track to the DOM. - someRoom.on('trackAdded', attachTrack.bind( + // Attach the newly subscribed Track to the DOM. + someRoom.on('trackSubscribed', attachTrack.bind( null, audioPreview, videoPreview, showAppliedCodec.bind(null, someRoom))); - // Detach the removed Track from the DOM. - someRoom.on('trackRemoved', detachTrack.bind( + // Detach the unsubscribed Track from the DOM. + someRoom.on('trackUnsubscribed', detachTrack.bind( null, audioPreview, videoPreview)); // Detach Participant's Tracks upon disconnect. someRoom.on('participantDisconnected', function(participant) { - participant.tracks.forEach(detachTrack.bind( + getTracks(participant).forEach(detachTrack.bind( null, audioPreview, videoPreview)); diff --git a/package.json b/package.json index 7de83aa1..6fc75a3e 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,8 @@ "express": "^4.15.2", "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", - "twilio": "^3.0.0-rc.16", - "twilio-video": "^1.3.0" + "twilio": "^3.19.1", + "twilio-video": "^2.0.0-beta1" }, "devDependencies": { "browserify": "^14.3.0", diff --git a/quickstart/src/index.js b/quickstart/src/index.js index 6cb27271..6ce3919c 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -16,7 +16,7 @@ function attachTracks(tracks, container) { // Attach the Participant's Tracks to the DOM. function attachParticipantTracks(participant, container) { - var tracks = Array.from(participant.tracks.values()); + var tracks = getTracks(participant); attachTracks(tracks, container); } @@ -31,7 +31,7 @@ function detachTracks(tracks) { // Detach the Participant's Tracks from the DOM. function detachParticipantTracks(participant) { - var tracks = Array.from(participant.tracks.values()); + var tracks = getTracks(participant); detachTracks(tracks); } @@ -76,6 +76,15 @@ $.getJSON('/token', function(data) { }; }); +// Get the Participant's Tracks. +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} + // Successfully connected! function roomJoined(room) { window.room = activeRoom = room; @@ -102,22 +111,22 @@ function roomJoined(room) { log("Joining: '" + participant.identity + "'"); }); - // When a Participant adds a Track, attach it to the DOM. - room.on('trackAdded', function(track, participant) { - log(participant.identity + " added track: " + track.kind); + // When a Participant's Track is subscribed to, attach it to the DOM. + room.on('trackSubscribed', function(track, publication, participant) { + log("Subscribed to " + participant.identity + "'s track: " + track.kind); var previewContainer = document.getElementById('remote-media'); attachTracks([track], previewContainer); }); - // When a Participant removes a Track, detach it from the DOM. - room.on('trackRemoved', function(track, participant) { - log(participant.identity + " removed track: " + track.kind); + // When a Participant's Track is unsubscribed from, detach it from the DOM. + room.on('trackUnsubscribed', function(track, publication, participant) { + log("Unsubscribed from " + participant.identity + "'s track: " + track.kind); detachTracks([track]); }); // When a Participant leaves the Room, detach its Tracks. room.on('participantDisconnected', function(participant) { - log("Participant '" + participant.identity + "' left the room"); + log("RemoteParticipant '" + participant.identity + "' left the room"); detachParticipantTracks(participant); }); From 0222790c08d1594ea5ceaf59c2d7a4bb01dd9cab Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Tue, 4 Sep 2018 14:48:41 -0700 Subject: [PATCH 02/89] Fix for https://github.com/twilio/video-quickstart-js/issues/51 --- quickstart/src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/quickstart/src/index.js b/quickstart/src/index.js index 6ce3919c..4b629466 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -138,6 +138,7 @@ function roomJoined(room) { previewTracks.forEach(function(track) { track.stop(); }); + previewTracks = null; } detachParticipantTracks(room.localParticipant); room.participants.forEach(detachParticipantTracks); From 521ef3b373f0dea21b332222956f4d7078ea6511 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Fri, 30 Nov 2018 16:37:15 -0800 Subject: [PATCH 03/89] Upgrading to twilio-video.js@2.0.0-beta4 --- .gitignore | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 92b3fa43..e1e46771 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,7 @@ jspm_packages # Misc .DS_Store +package-lock.json # The generated index.js quickstart/public/index.js diff --git a/package.json b/package.json index 6fc75a3e..c4c7a5ac 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.0.0-beta1" + "twilio-video": "^2.0.0-beta4" }, "devDependencies": { "browserify": "^14.3.0", From f5aa15e5792f2b076934232c5a01426f65134b86 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Mon, 10 Dec 2018 23:07:07 -0800 Subject: [PATCH 04/89] Adding Unified Plan customer advisory to README.md. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 077310c3..d270f052 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +**IMPORTANT:** Please upgrade to the latest version of twilio-video.js to avoid upcoming +breaking changes in Google Chrome. See [this advisory](https://support.twilio.com/hc/en-us/articles/360012782494-Breaking-Changes-in-Twilio-Video-JavaScript-SDKs-December-2018-) +for details. + # Twilio Video Quickstart for JavaScript [![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true From 7cecbc5e44af1bb9f797c0616e914a08df5cf6e4 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Wed, 13 Mar 2019 18:25:59 -0700 Subject: [PATCH 05/89] Setting ttl to 4 hours. --- server/index.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/index.js b/server/index.js index 7bd92f36..0ab9d6bb 100644 --- a/server/index.js +++ b/server/index.js @@ -16,6 +16,9 @@ var VideoGrant = AccessToken.VideoGrant; var express = require('express'); var randomName = require('./randomname'); +// Max. period that a Participant is allowed to be in a Room (currently 14400 seconds or 4 hours) +const MAX_ALLOWED_SESSION_DURATION = 14400; + // Create Express webapp. var app = express(); @@ -59,7 +62,8 @@ app.get('/token', function(request, response) { var token = new AccessToken( process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_API_KEY, - process.env.TWILIO_API_SECRET + process.env.TWILIO_API_SECRET, + { ttl: MAX_ALLOWED_SESSION_DURATION } ); // Assign the generated identity to the token. From b27dd7c52d2212acd3fff8a9c8df82700dadf27f Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Thu, 2 May 2019 18:19:57 -0700 Subject: [PATCH 06/89] Update twilio-video.js to 2.0.0-beta9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c4c7a5ac..b5deb889 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.0.0-beta4" + "twilio-video": "^2.0.0-beta9" }, "devDependencies": { "browserify": "^14.3.0", From f737dd5c98444b8b356782498ac813fff082326d Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Mon, 13 May 2019 18:01:06 -0700 Subject: [PATCH 07/89] JSDK-2353 Adding an example for capturing screen using getDisplayMedia(). (#71) --- .gitignore | 2 + examples/index.html | 13 ++- examples/screenshare/public/index.css | 87 +++++++++++++++++ examples/screenshare/public/index.html | 39 ++++++++ examples/screenshare/public/prism.css | 123 +++++++++++++++++++++++++ examples/screenshare/src/helpers.js | 28 ++++++ examples/screenshare/src/index.js | 46 +++++++++ package.json | 2 + server/index.js | 3 +- 9 files changed, 341 insertions(+), 2 deletions(-) create mode 100644 examples/screenshare/public/index.css create mode 100644 examples/screenshare/public/index.html create mode 100644 examples/screenshare/public/prism.css create mode 100644 examples/screenshare/src/helpers.js create mode 100644 examples/screenshare/src/index.js diff --git a/.gitignore b/.gitignore index e1e46771..17964cf3 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ examples/codecpreferences/public/index.js examples/localvideofilter/public/index.js examples/localvideosnapshot/public/index.js examples/mediadevices/public/index.js +examples/screenshare/public/index.js # The generated helpers.js examples/bandwidthconstraints/public/helpers.js @@ -60,3 +61,4 @@ examples/codecpreferences/public/helpers.js examples/localvideofilter/public/helpers.js examples/localvideosnapshot/public/helpers.js examples/mediadevices/public/helpers.js +examples/screenshare/public/helpers.js diff --git a/examples/index.html b/examples/index.html index 8818dcb4..ac033974 100644 --- a/examples/index.html +++ b/examples/index.html @@ -67,7 +67,7 @@

- diff --git a/examples/screenshare/public/index.css b/examples/screenshare/public/index.css new file mode 100644 index 00000000..f4c3f7a4 --- /dev/null +++ b/examples/screenshare/public/index.css @@ -0,0 +1,87 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 0 2px; +} + +div.col-sm-8, div.col-sm-4 { + height: 100%; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +div.card { + border: none; + overflow-y: auto; +} + +div.col-sm-8 > .card { + height: 100%; +} + +div.col-sm-4 > .card:first-child { + height: 30%; +} + +div.col-sm-4 > .card:last-child { + height: 70%; +} + +video#screenpreview { + background-color: lightgrey !important; + background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); + background-position: 50%; + background-repeat: no-repeat; +} + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/screenshare/public/index.html b/examples/screenshare/public/index.html new file mode 100644 index 00000000..c067d9c0 --- /dev/null +++ b/examples/screenshare/public/index.html @@ -0,0 +1,39 @@ + + + + + + + Share Your Screen + + + + + +
+
+
+
+
+

+ Share Your Screen +

+

+        
+
+
+
+
+
+

Local Screen

+ + + +
+
+
+
+
+ + + diff --git a/examples/screenshare/public/prism.css b/examples/screenshare/public/prism.css new file mode 100644 index 00000000..7e2569ab --- /dev/null +++ b/examples/screenshare/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #87ceeb; +} + +.token.operator, +.token.punctuation { + color: #ff5555; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean { + color: #55ff55; +} + +.token.number { + color: #cd5c5c; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #ff55ff; +} + +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #ff55ff; +} + +.token.function { + color: #ccc; +} + +.token.keyword { + color: #55ff55; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/examples/screenshare/src/helpers.js b/examples/screenshare/src/helpers.js new file mode 100644 index 00000000..c561f144 --- /dev/null +++ b/examples/screenshare/src/helpers.js @@ -0,0 +1,28 @@ +'use strict'; + +const Video = require('twilio-video'); + +/** + * Create a LocalVideoTrack for your screen. You can then share it + * with other Participants in the Room. + * @param {number} height - Desired vertical resolution in pixels + * @param {number} width - Desired horizontal resolution in pixels + * @returns {Promise} + */ +function createScreenTrack(height, width) { + if (typeof navigator === 'undefined' + || !navigator.mediaDevices + || !navigator.mediaDevices.getDisplayMedia) { + return Promise.reject(new Error('getDisplayMedia is not supported')); + } + return navigator.mediaDevices.getDisplayMedia({ + video: { + height: height, + width: width + } + }).then(function(stream) { + return new Video.LocalVideoTrack(stream.getVideoTracks()[0]); + }); +} + +exports.createScreenTrack = createScreenTrack; diff --git a/examples/screenshare/src/index.js b/examples/screenshare/src/index.js new file mode 100644 index 00000000..a35b3fd1 --- /dev/null +++ b/examples/screenshare/src/index.js @@ -0,0 +1,46 @@ +'use strict'; + +const Prism = require('prismjs'); +const getSnippet = require('../../util/getsnippet'); +const helpers = require('./helpers'); +const createScreenTrack = helpers.createScreenTrack; +const captureScreen = document.querySelector('button#capturescreen'); +const screenPreview = document.querySelector('video#screenpreview'); +const stopScreenCapture = document.querySelector('button#stopscreencapture'); + +(async function() { + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + // Hide the "Stop Capture Screen" button. + stopScreenCapture.style.display = 'none'; + + // The LocalVideoTrack for your screen. + let screenTrack; + + captureScreen.onclick = async function() { + try { + // Create and preview your local screen. + screenTrack = await createScreenTrack(720, 1280); + screenTrack.attach(screenPreview); + // Show the "Capture Screen" button after screen capture stops. + screenTrack.on('stopped', toggleButtons); + // Show the "Stop Capture Screen" button. + toggleButtons(); + } catch (e) { + alert(e.message); + } + }; + + stopScreenCapture.onclick = function() { + // Stop capturing your screen. + screenTrack.stop(); + } +}()); + +function toggleButtons() { + captureScreen.style.display = captureScreen.style.display === 'none' ? '' : 'none'; + stopScreenCapture.style.display = stopScreenCapture.style.display === 'none' ? '' : 'none'; +} diff --git a/package.json b/package.json index b5deb889..a07540b9 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js", "build:examples:localvideosnapshot": "copyfiles -f examples/localvideosnapshot/src/helpers.js examples/localvideosnapshot/public && browserify examples/localvideosnapshot/src/index.js > examples/localvideosnapshot/public/index.js", "build:examples:mediadevices": "copyfiles -f examples/mediadevices/src/helpers.js examples/mediadevices/public && browserify examples/mediadevices/src/index.js > examples/mediadevices/public/index.js", + "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", @@ -19,6 +20,7 @@ "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers.js", "clean:examples:localvideosnapshot": "rimraf examples/localvideosnapshot/public/index.js examples/localvideosnapshot/public/helpers.js", "clean:examples:mediadevices": "rimraf examples/mediadevices/public/index.js examples/mediadevices/public/helpers.js", + "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, diff --git a/server/index.js b/server/index.js index 0ab9d6bb..8317f80c 100644 --- a/server/index.js +++ b/server/index.js @@ -28,7 +28,8 @@ var app = express(); 'codecpreferences', 'localvideofilter', 'localvideosnapshot', - 'mediadevices' + 'mediadevices', + 'screenshare' ].forEach(function(example) { var examplePath = path.join(__dirname, `../examples/${example}/public`); app.use(`/${example}`, express.static(examplePath)); From 5703a7ea7b3a7c1016c49fd60bfbbf0421da26de Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Thu, 16 May 2019 19:27:15 -0700 Subject: [PATCH 08/89] JSDK-2352: Update Video JS QuickStart app to listen to events on the emitting objects. (#73) * quickstart updated to listen to participant tracks --- quickstart/src/index.js | 72 ++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/quickstart/src/index.js b/quickstart/src/index.js index 4b629466..1f7c2030 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -7,32 +7,58 @@ var previewTracks; var identity; var roomName; -// Attach the Tracks to the DOM. + +// Attach the Track to the DOM. +function attachTrack(track, container) { + container.appendChild(track.attach()); +} + +// Attach array of Tracks to the DOM. function attachTracks(tracks, container) { tracks.forEach(function(track) { - container.appendChild(track.attach()); + attachTrack(track, container); }); } -// Attach the Participant's Tracks to the DOM. -function attachParticipantTracks(participant, container) { - var tracks = getTracks(participant); - attachTracks(tracks, container); +// Detach given track from the DOM +function detachTrack(track) { + track.detach().forEach(function(element) { + element.remove(); + }); } -// Detach the Tracks from the DOM. -function detachTracks(tracks) { - tracks.forEach(function(track) { - track.detach().forEach(function(detachedElement) { - detachedElement.remove(); - }); +// A new RemoteTrack was published to the Room. +function trackPublished(publication, container) { + if (publication.isSubscribed) { + attachTrack(publication.track, container); + } + publication.on('subscribed', function(track) { + log('Subscribed to ' + publication.kind + ' track'); + attachTrack(track, container); + }); + publication.on('unsubscribed', detachTrack); +} + +// A RemoteTrack was unpublished from the Room. +function trackUnpublished(publication) { + log(publication.kind + ' track was unpublished.'); +} + +// A new RemoteParticipant joined the Room +function participantConnected(participant, container) { + participant.tracks.forEach(function(publication) { + trackPublished(publication, container); + }); + participant.on('trackPublished', function(publication) { + trackPublished(publication, container); }); + participant.on('trackUnpublished', trackUnpublished); } // Detach the Participant's Tracks from the DOM. function detachParticipantTracks(participant) { var tracks = getTracks(participant); - detachTracks(tracks); + tracks.forEach(detachTrack); } // When we are about to transition away from this page, disconnect @@ -96,32 +122,20 @@ function roomJoined(room) { // Attach LocalParticipant's Tracks, if not already attached. var previewContainer = document.getElementById('local-media'); if (!previewContainer.querySelector('video')) { - attachParticipantTracks(room.localParticipant, previewContainer); + attachTracks(getTracks(room.localParticipant), previewContainer); } // Attach the Tracks of the Room's Participants. + var remoteMediaContainer = document.getElementById('remote-media'); room.participants.forEach(function(participant) { log("Already in Room: '" + participant.identity + "'"); - var previewContainer = document.getElementById('remote-media'); - attachParticipantTracks(participant, previewContainer); + participantConnected(participant, remoteMediaContainer); }); // When a Participant joins the Room, log the event. room.on('participantConnected', function(participant) { log("Joining: '" + participant.identity + "'"); - }); - - // When a Participant's Track is subscribed to, attach it to the DOM. - room.on('trackSubscribed', function(track, publication, participant) { - log("Subscribed to " + participant.identity + "'s track: " + track.kind); - var previewContainer = document.getElementById('remote-media'); - attachTracks([track], previewContainer); - }); - - // When a Participant's Track is unsubscribed from, detach it from the DOM. - room.on('trackUnsubscribed', function(track, publication, participant) { - log("Unsubscribed from " + participant.identity + "'s track: " + track.kind); - detachTracks([track]); + participantConnected(participant, remoteMediaContainer); }); // When a Participant leaves the Room, detach its Tracks. From e7d349406d167bae78dd2358e315fcd853d7812c Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Wed, 29 May 2019 10:11:46 -0700 Subject: [PATCH 09/89] JSDK-2354 - quickstart sample to demonstrate dominant speaker detection (#74) demonstrate dominant speaker detection --- .gitignore | 2 + examples/dominantspeaker/public/index.css | 148 +++++++++++++++++ examples/dominantspeaker/public/index.html | 39 +++++ examples/dominantspeaker/public/prism.css | 123 ++++++++++++++ examples/dominantspeaker/src/helpers.js | 35 ++++ examples/dominantspeaker/src/index.js | 180 +++++++++++++++++++++ examples/index.html | 90 +++++++---- examples/util/getroomcredentials.js | 6 +- package.json | 2 + server/index.js | 3 +- 10 files changed, 595 insertions(+), 33 deletions(-) create mode 100644 examples/dominantspeaker/public/index.css create mode 100644 examples/dominantspeaker/public/index.html create mode 100644 examples/dominantspeaker/public/prism.css create mode 100644 examples/dominantspeaker/src/helpers.js create mode 100644 examples/dominantspeaker/src/index.js diff --git a/.gitignore b/.gitignore index 17964cf3..ba1f06a0 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,7 @@ package-lock.json quickstart/public/index.js examples/bandwidthconstraints/public/index.js examples/codecpreferences/public/index.js +examples/dominantspeaker/public/index.js examples/localvideofilter/public/index.js examples/localvideosnapshot/public/index.js examples/mediadevices/public/index.js @@ -58,6 +59,7 @@ examples/screenshare/public/index.js # The generated helpers.js examples/bandwidthconstraints/public/helpers.js examples/codecpreferences/public/helpers.js +examples/dominantspeaker/public/helpers.js examples/localvideofilter/public/helpers.js examples/localvideosnapshot/public/helpers.js examples/mediadevices/public/helpers.js diff --git a/examples/dominantspeaker/public/index.css b/examples/dominantspeaker/public/index.css new file mode 100644 index 00000000..80d34558 --- /dev/null +++ b/examples/dominantspeaker/public/index.css @@ -0,0 +1,148 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 0 2px; +} + +div.col-sm-6, div.col-sm-6 { + height: 100%; +} + +div#remote-media { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + height: auto; + width: 100%; + background-color: #fff; + text-align: center; + margin: auto; +} + +div.mediadiv { + margin: 10px; + width: 200px; +} + +div#remote-media h6 { + position: absolute; + font-size: 14px; + background-color: rgba(0, 0, 0, 0.4); + color: white; + max-width: calc((100% - 16px) - 0.5em); + margin: 0.25em; + border-radius: 4px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +#roomName { + padding: 2px; + border: 1px solid black; + margin: 2px; +} + +div#remote-media video { + max-width: 100% !important; + max-height: 80% !important; + background-color: #272726; + background-repeat: no-repeat; +} + +div#user-controls { + display: flex; + flex-direction: column; + flex-wrap: wrap; + height: 40%; + width: 100%; + margin: 10px; + padding: 10px; +} + +div.usercontrol { + margin: 5px; + border: 1px solid black; + padding: 10px; +} + +div.dominant_speaker { + border: 4px solid red; + background: aqua; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +div.card { + border: none; + overflow-y: auto; +} + +div.input-group > select { + width: 100%; +} + +div.col-sm-8 > .card { + height: 100%; +} + +div.col-sm-4 > .card:first-child { + height: 30%; +} + +div.col-sm-4 > .card:last-child { + height: 70%; +} + + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/dominantspeaker/public/index.html b/examples/dominantspeaker/public/index.html new file mode 100644 index 00000000..b2889f8c --- /dev/null +++ b/examples/dominantspeaker/public/index.html @@ -0,0 +1,39 @@ + + + + + + Dominant Speaker + + + + + +
+
+
+
+
+

+ Dominant Speaker Detection +

+

+          
+
+
+
+ +
+
+
+
+
+ + + diff --git a/examples/dominantspeaker/public/prism.css b/examples/dominantspeaker/public/prism.css new file mode 100644 index 00000000..7e2569ab --- /dev/null +++ b/examples/dominantspeaker/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #87ceeb; +} + +.token.operator, +.token.punctuation { + color: #ff5555; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean { + color: #55ff55; +} + +.token.number { + color: #cd5c5c; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #ff55ff; +} + +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #ff55ff; +} + +.token.function { + color: #ccc; +} + +.token.keyword { + color: #55ff55; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/examples/dominantspeaker/src/helpers.js b/examples/dominantspeaker/src/helpers.js new file mode 100644 index 00000000..f361c4d5 --- /dev/null +++ b/examples/dominantspeaker/src/helpers.js @@ -0,0 +1,35 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Connect to a Room with the Dominant Speaker API enabled. + * This API is available only in Small Group or Group Rooms. + * @param {string} token - Token for joining the Room + * @param {string} roomName - Room name + * @returns {CancelablePromise} + */ +function connectToRoomWithDominantSpeaker(token, roomName) { + return Video.connect(token, { + dominantSpeaker: true, + name: roomName + }); +} + +/** + * Listen to changes in the dominant speaker and update your application. + * @param {Room} room - The Room you just joined + * @param {function} updateDominantSpeaker - Updates the app UI with the new dominant speaker + * @returns {void} + */ +function setupDominantSpeakerUpdates(room, updateDominantSpeaker) { + room.on('dominantSpeakerChanged', function(participant) { + console.log('A new RemoteParticipant is now the dominant speaker:', participant); + updateDominantSpeaker(participant); + }); +} + +exports.connectToRoomWithDominantSpeaker = connectToRoomWithDominantSpeaker; +exports.setupDominantSpeakerUpdates = setupDominantSpeakerUpdates; + + diff --git a/examples/dominantspeaker/src/index.js b/examples/dominantspeaker/src/index.js new file mode 100644 index 00000000..07f0c696 --- /dev/null +++ b/examples/dominantspeaker/src/index.js @@ -0,0 +1,180 @@ +'use strict'; + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const getSnippet = require('../../util/getsnippet'); +const helpers = require('./helpers'); +const connectToRoomWithDominantSpeaker = helpers.connectToRoomWithDominantSpeaker; +const setupDominantSpeakerUpdates = helpers.setupDominantSpeakerUpdates; + +const joinRoomBlock = document.querySelector('#joinRoom'); +const roomNameText = document.querySelector('#roomName'); +const mediaContainer = document.getElementById('remote-media'); +const userControls = document.getElementById('user-controls'); +let roomName = null; +const SAMPLE_USER_COUNT = 4; + +/** + * creates a button and adds to given container. + */ +function createButton(text, container) { + const btn = document.createElement('button'); + btn.innerHTML = text; // 'Disconnect'; + btn.classList.add('btn', 'btn-outline-primary', 'btn-sm'); + container.appendChild(btn); + return btn; +} + +/** + * + * creates controls for user to mute/unmute and disconnect + * from the room. + */ +async function createUserControls(userIdentity) { + const creds = await getRoomCredentials(userIdentity); + let room = null; + + const currentUserControls = document.createElement('div'); + currentUserControls.classList.add('usercontrol'); + + const title = document.createElement('h6'); + title.appendChild(document.createTextNode(creds.identity)); + currentUserControls.appendChild(title); + + // connect button + const connectDisconnect = createButton('Connect', currentUserControls); + connectDisconnect.onclick = async function(event) { + connectDisconnect.disabled = true; + const connected = room !== null; + if (connected) { + room.disconnect(); + room = null; + muteBtn.innerHTML = 'Mute'; + } else { + room = await connectToRoom(creds); + } + connectDisconnect.innerHTML = connected ? 'Connect' : 'Disconnect'; + muteBtn.style.display = connected ? 'none' : 'inline'; + connectDisconnect.disabled = false; + } + + // mute button. + const muteBtn = createButton('Mute', currentUserControls); + muteBtn.onclick = function() { + const mute = muteBtn.innerHTML == 'Mute'; + const localUser = room.localParticipant; + getTracks(localUser).forEach(function(track) { + if (track.kind === 'audio') { + if (mute) { + track.disable(); + } else { + track.enable(); + } + } + }); + muteBtn.innerHTML = mute ? 'Unmute' : 'Mute'; + } + muteBtn.style.display = 'none'; + userControls.appendChild(currentUserControls); +} + +/** + * Connect the Participant with media to the Room. + */ +async function connectToRoom(creds) { + const room = await Video.connect( creds.token, { + name: roomName + }); + + return room; +} + +/** + * Get the Tracks of the given Participant. + */ +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} + +/** + * add/removes css attribute per dominant speaker change. + * @param {?Participant} speaker - Participant + * @returns {void} + */ +function updateDominantSpeaker(speaker) { + const dominantSpeakerDiv = document.querySelector('div.dominant_speaker'); + if (dominantSpeakerDiv) { + dominantSpeakerDiv.classList.remove('dominant_speaker'); + } + if (speaker) { + const newDominantSpeakerDiv = document.getElementById(speaker.sid); + if (newDominantSpeakerDiv) { + newDominantSpeakerDiv.classList.add('dominant_speaker'); + } + } +} + +(async function() { + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + // Get the credentials to connect to the Room. + const creds = await getRoomCredentials(); + + // Connect to a random Room with no media. This Participant will + // display the media of the other Participants that will enter + // the Room and watch for dominant speaker updates. + const someRoom = await connectToRoomWithDominantSpeaker(creds.token); + + setupDominantSpeakerUpdates(someRoom, updateDominantSpeaker); + + // Set the name of the Room to which the Participant that shares + // media should join. + joinRoomBlock.style.display = 'block'; + roomName = someRoom.name; + roomNameText.appendChild(document.createTextNode(roomName)); + + // create controls to connect few users + ['Alice', 'Bob', 'Charlie', 'Mak'].forEach(createUserControls); + + someRoom.on('participantConnected', function(participant) { + const participantdiv = document.createElement('div'); + participantdiv.id = participant.sid; + const mediaDiv = document.createElement('div'); + mediaDiv.classList.add("mediadiv"); + + const title = document.createElement('h6'); + title.appendChild(document.createTextNode(participant.identity)); + mediaDiv.appendChild(title); + + participant.on('trackSubscribed', function(track) { + mediaDiv.appendChild(track.attach()); + }); + participantdiv.appendChild(mediaDiv); + mediaContainer.appendChild(participantdiv); + }); + + someRoom.on('participantDisconnected', function(participant) { + getTracks(participant).forEach(function(track) { + track.detach().forEach(function(element) { + element.remove(); + }); + }); + const participantDiv = document.getElementById(participant.sid); + participantDiv.parentNode.removeChild(participantDiv); + }); + + // Disconnect from the Room on page unload. + window.onbeforeunload = function() { + someRoom.disconnect(); + someRoom = null; + }; +}()); diff --git a/examples/index.html b/examples/index.html index ac033974..ef8112a8 100644 --- a/examples/index.html +++ b/examples/index.html @@ -19,78 +19,108 @@

Examples

- -

- Bandwidth Constraints -

+
+ +

+ Bandwidth Constraints +

+

This app demonstrates the Bandwidth Constraints API, which can be used to control the send-side bandwidth of the media that is published to the Room.

- - -

- Local Video Filter -

+
+
+ +

+ Local Video Filter +

+

This app demonstrates a way to apply filters to the LocalVideoTrack. The filtered LocalVideoTrack can then be used to connect to a Room.

- +
- -

- Local Video Snapshot -

+
+ +

+ Local Video Snapshot +

+

This app demonstrates a way to capture a snapshot of the LocalVideoTrack using the HTMLCanvasElement.

- - -

- Media Device Selection -

+
+
+ +

+ Media Device Selection +

+

This app demonstrates a way to select the media devices to be used for capturing local media.

- +
- -

- Codec Preferences -

+
+ +

+ Codec Preferences +

+

This app demonstrates the Codec Preferences API, which can be used to specify the send-side audio and video codec preferences while connecting to a Room.

- - -

- Share Your Screen -

+
+
+ +

+ Share Your Screen +

+

This app demonstrates how to capture your screen so that you can share it with other Participants in the Room.

- +
+
+
+
+
+
+ +

+ Dominant Speaker +

+
+
+

+ This app demonstrates the Dominant Speaker API for Group or Small Group Rooms. + In order to run this example, please go to the Programmable Video Settings in the + Twilio Console and select the Room Type as Group or Group-Small. +

+
+
diff --git a/examples/util/getroomcredentials.js b/examples/util/getroomcredentials.js index 53b2417f..eb2c85c1 100644 --- a/examples/util/getroomcredentials.js +++ b/examples/util/getroomcredentials.js @@ -2,10 +2,12 @@ /** * Get the Room credentials from the server. + * @param {string} [identity] identitiy to use, if not specified server generates random one. * @returns {Promise<{identity: string, token: string}>} */ -async function getRoomCredentials() { - const response = await fetch('/token'); +async function getRoomCredentials(identity) { + const tokenUrl = '/token' + (identity ? '?identity=' + identity : ''); + const response = await fetch(tokenUrl); return response.json(); } diff --git a/package.json b/package.json index a07540b9..50aa57ca 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build:examples": "npm-run-all build:examples:*", "build:examples:bandwidthconstraints": "copyfiles -f examples/bandwidthconstraints/src/helpers.js examples/bandwidthconstraints/public && browserify examples/bandwidthconstraints/src/index.js > examples/bandwidthconstraints/public/index.js", "build:examples:codecpreferences": "copyfiles -f examples/codecpreferences/src/helpers.js examples/codecpreferences/public && browserify examples/codecpreferences/src/index.js > examples/codecpreferences/public/index.js", + "build:examples:dominantspeaker": "copyfiles -f examples/dominantspeaker/src/helpers.js examples/dominantspeaker/public && browserify examples/dominantspeaker/src/index.js > examples/dominantspeaker/public/index.js", "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js", "build:examples:localvideosnapshot": "copyfiles -f examples/localvideosnapshot/src/helpers.js examples/localvideosnapshot/public && browserify examples/localvideosnapshot/src/index.js > examples/localvideosnapshot/public/index.js", "build:examples:mediadevices": "copyfiles -f examples/mediadevices/src/helpers.js examples/mediadevices/public && browserify examples/mediadevices/src/index.js > examples/mediadevices/public/index.js", @@ -17,6 +18,7 @@ "clean:examples": "npm-run-all clean:examples:*", "clean:examples:bandwidthconstraints": "rimraf examples/bandwidthconstraints/public/index.js examples/bandwidthconstraints/public/helpers.js", "clean:examples:codecpreferences": "rimraf examples/codecpreferences/public/index.js examples/codecpreferences/public/helpers.js", + "clean:examples:dominantspeaker": "rimraf examples/dominantspeaker/public/index.js examples/dominantspeaker/public/helpers.js", "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers.js", "clean:examples:localvideosnapshot": "rimraf examples/localvideosnapshot/public/index.js examples/localvideosnapshot/public/helpers.js", "clean:examples:mediadevices": "rimraf examples/mediadevices/public/index.js examples/mediadevices/public/helpers.js", diff --git a/server/index.js b/server/index.js index 8317f80c..7bef30ac 100644 --- a/server/index.js +++ b/server/index.js @@ -26,6 +26,7 @@ var app = express(); [ 'bandwidthconstraints', 'codecpreferences', + 'dominantspeaker', 'localvideofilter', 'localvideosnapshot', 'mediadevices', @@ -56,7 +57,7 @@ app.get('/', function(request, response) { * parameter. */ app.get('/token', function(request, response) { - var identity = randomName(); + var identity = request.query.identity || randomName(); // Create an access token which we will sign and return to the client, // containing the grant we just created. From 384703ba5f7103f9e027e7aae8f4382e96af0642 Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Mon, 3 Jun 2019 14:30:57 -0700 Subject: [PATCH 10/89] JSDK-2356: quick start sample for room state change events (#76) --- .gitignore | 2 + examples/dominantspeaker/src/helpers.js | 6 +- examples/dominantspeaker/src/index.js | 2 +- examples/index.html | 16 ++- examples/reconnection/public/index.css | 126 +++++++++++++++++++++++ examples/reconnection/public/index.html | 47 +++++++++ examples/reconnection/public/prism.css | 123 ++++++++++++++++++++++ examples/reconnection/src/helpers.js | 36 +++++++ examples/reconnection/src/index.js | 129 ++++++++++++++++++++++++ package.json | 3 + server/index.js | 1 + 11 files changed, 485 insertions(+), 6 deletions(-) create mode 100644 examples/reconnection/public/index.css create mode 100644 examples/reconnection/public/index.html create mode 100644 examples/reconnection/public/prism.css create mode 100644 examples/reconnection/src/helpers.js create mode 100644 examples/reconnection/src/index.js diff --git a/.gitignore b/.gitignore index ba1f06a0..26f9fe8b 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ examples/dominantspeaker/public/index.js examples/localvideofilter/public/index.js examples/localvideosnapshot/public/index.js examples/mediadevices/public/index.js +examples/reconnection/public/index.js examples/screenshare/public/index.js # The generated helpers.js @@ -63,4 +64,5 @@ examples/dominantspeaker/public/helpers.js examples/localvideofilter/public/helpers.js examples/localvideosnapshot/public/helpers.js examples/mediadevices/public/helpers.js +examples/reconnection/public/helpers.js examples/screenshare/public/helpers.js diff --git a/examples/dominantspeaker/src/helpers.js b/examples/dominantspeaker/src/helpers.js index f361c4d5..4eb9fd06 100644 --- a/examples/dominantspeaker/src/helpers.js +++ b/examples/dominantspeaker/src/helpers.js @@ -6,13 +6,11 @@ var Video = require('twilio-video'); * Connect to a Room with the Dominant Speaker API enabled. * This API is available only in Small Group or Group Rooms. * @param {string} token - Token for joining the Room - * @param {string} roomName - Room name * @returns {CancelablePromise} */ -function connectToRoomWithDominantSpeaker(token, roomName) { +function connectToRoomWithDominantSpeaker(token) { return Video.connect(token, { - dominantSpeaker: true, - name: roomName + dominantSpeaker: true }); } diff --git a/examples/dominantspeaker/src/index.js b/examples/dominantspeaker/src/index.js index 07f0c696..bf03b2f4 100644 --- a/examples/dominantspeaker/src/index.js +++ b/examples/dominantspeaker/src/index.js @@ -20,7 +20,7 @@ const SAMPLE_USER_COUNT = 4; */ function createButton(text, container) { const btn = document.createElement('button'); - btn.innerHTML = text; // 'Disconnect'; + btn.innerHTML = text; btn.classList.add('btn', 'btn-outline-primary', 'btn-sm'); container.appendChild(btn); return btn; diff --git a/examples/index.html b/examples/index.html index ef8112a8..afe245b0 100644 --- a/examples/index.html +++ b/examples/index.html @@ -105,7 +105,7 @@

-
+
+
+ +

+ Reconnection States and Events +

+
+
+

+ This app demonstrates the Room's Reconnection States and Events + which can be used to notify the user when Twilio Video SDK is reconnecting + to the Room, probably due to network interruptions or handoffs. +

+
+
diff --git a/examples/reconnection/public/index.css b/examples/reconnection/public/index.css new file mode 100644 index 00000000..7881dc2c --- /dev/null +++ b/examples/reconnection/public/index.css @@ -0,0 +1,126 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 0 2px; +} + +div.col-sm-6, div.col-sm-6 { + height: 100%; +} + +div#remote-media { + height: 50%; + width: 100%; + background-color: #fff; + text-align: center; + margin: auto; +} + +div#remote-media video { + margin: 1em; + max-width: 80% !important; + max-height: 80% !important; + background-color: #272726; + background-repeat: no-repeat; +} + +div.roomstate { + background: white; + margin: 2px; + color: black; + border: solid 1px black; + padding: 20px; + margin: 10px; +} + +div.roomstate.unknown.current { + background:gray; +} + +div.roomstate.connected.current { + background: green; +} + +div.roomstate.disconnected.current { + background:red; +} + +div.roomstate.reconnecting.current { + background: yellow; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +div.card { + border: none; + overflow-y: auto; +} + +div.input-group > select { + width: 100%; +} + +div.col-sm-8 > .card { + height: 100%; +} + +div.col-sm-4 > .card:first-child { + height: 30%; +} + +div.col-sm-4 > .card:last-child { + height: 70%; +} + + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/reconnection/public/index.html b/examples/reconnection/public/index.html new file mode 100644 index 00000000..8d8d0463 --- /dev/null +++ b/examples/reconnection/public/index.html @@ -0,0 +1,47 @@ + + + + + + Reconnection States and Events + + + + + +
+
+
+
+
+

+ Reconnection States and Events +

+

+          
+
+
+
+
+
Room state is:
+
Connected
+
Disconnected
+
Reconnecting
+ +

+ After you have created the Room, please either turn off your internet network for a little while + and then turn it back on, or switch between networks. The Twilio Video SDK will try to re-establish + connection to the Room, which will transition to the "connecting" state. Once reconnection is complete, + the Room will transition back to the "connected" state. + + You can join other user to the room using button below. +

+ +
+
+
+
+
+ + + diff --git a/examples/reconnection/public/prism.css b/examples/reconnection/public/prism.css new file mode 100644 index 00000000..7e2569ab --- /dev/null +++ b/examples/reconnection/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #87ceeb; +} + +.token.operator, +.token.punctuation { + color: #ff5555; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean { + color: #55ff55; +} + +.token.number { + color: #cd5c5c; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #ff55ff; +} + +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #ff55ff; +} + +.token.function { + color: #ccc; +} + +.token.keyword { + color: #55ff55; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/examples/reconnection/src/helpers.js b/examples/reconnection/src/helpers.js new file mode 100644 index 00000000..7a27d51d --- /dev/null +++ b/examples/reconnection/src/helpers.js @@ -0,0 +1,36 @@ +'use strict'; + +/** + * Listen to Room reconnection events and update the UI accordingly. + * @param {Room} room - The Room you have joined + * @param {function} updateRoomState - Updates the app UI with the new Room state + * @returns {void} + */ +function setupReconnectionUpdates(room, updateRoomState) { + room.on('disconnected', (room, error) => { + if (error.code === 20104) { + console.log('Signaling reconnection failed due to expired AccessToken!'); + } else if (error.code === 53000) { + console.log('Signaling reconnection attempts exhausted!'); + } else if (error.code === 53204) { + console.log('Signaling reconnection took too long!'); + } + updateRoomState(room.state); + }); + + room.on('reconnected', function() { + console.log('Reconnected to the Room!'); + updateRoomState(room.state); + }); + + room.on('reconnecting', function(error) { + if (error.code === 53001) { + console.log('Reconnecting your signaling connection!', error.message); + } else if (error.code === 53405) { + console.log('Reconnecting your media connection!', error.message); + } + updateRoomState(room.state); + }); +} + +exports.setupReconnectionUpdates = setupReconnectionUpdates; diff --git a/examples/reconnection/src/index.js b/examples/reconnection/src/index.js new file mode 100644 index 00000000..e88a1d6d --- /dev/null +++ b/examples/reconnection/src/index.js @@ -0,0 +1,129 @@ +'use strict'; + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const getSnippet = require('../../util/getsnippet'); +const helpers = require('./helpers'); +const setupReconnectionUpdates = helpers.setupReconnectionUpdates; +const connectOrDisconnect = document.querySelector('input#connectordisconnect'); +const createRoomBtn = document.querySelector('input#createRoom'); + +const mediaContainer = document.getElementById('remote-media'); +let roomName = null; +let room = null; +let someRoom = null; + +/** + * Connect the Participant with media to the Room. + */ +async function connectToRoom() { + const creds = await getRoomCredentials(); + room = await Video.connect( creds.token, { + name: roomName + }); + connectOrDisconnect.value = 'Leave Room'; +} + +/** + * Disconnect the Participant with media from the Room. + */ +function disconnectFromRoom() { + room.disconnect(); + room = null; + connectOrDisconnect.value = 'Join Room'; + return; +} + +function connectToOrDisconnectFromRoom(event) { + event.preventDefault(); + return room ? disconnectFromRoom() : connectToRoom(); +} + +/** + * update the UI to indicate room state. + */ +function onRoomStateChange(newState) { + const oldStateBtn = document.querySelector('div.current'); + if (oldStateBtn) { + oldStateBtn.classList.remove('current'); + } + + const newStateBtn = document.querySelector('div.' + newState); + newStateBtn.classList.add('current'); + + if (newState === 'disconnected') { + // once disconnected room needs to be recreated. + cleanupRoom(); + } +} + +function cleanupRoom() { + roomName = null; + someRoom = null; + createRoomBtn.disabled = false; + connectOrDisconnect.disabled = true; + connectOrDisconnect.value = 'Join Room'; + + // remove all participant media nodes. + while (mediaContainer.firstChild) { + mediaContainer.removeChild(mediaContainer.firstChild); + } +} + +async function setupRoom() { + try { + // Get the credentials to connect to the Room. + createRoomBtn.disabled = true; + const creds = await getRoomCredentials(); + + // Connect to a random Room with no media. This Participant will + // display the media of the other Participants that will enter + // the Room and watch for reconnection updates. + someRoom = await Video.connect(creds.token, { tracks: [] }); + setupReconnectionUpdates(someRoom, onRoomStateChange); + onRoomStateChange(someRoom.state); + + // Set the name of the Room to which the Participant that shares + // media should join. + roomName = someRoom.name; + + // set listener to connect new user to the room. + connectOrDisconnect.disabled = false; + connectOrDisconnect.onclick = connectToOrDisconnectFromRoom; + + // Disconnect from the Room on page unload. + window.onbeforeunload = function() { + someRoom.disconnect(); + }; + + someRoom.on('participantConnected', function(participant) { + const div = document.createElement('div'); + div.id = participant.sid; + mediaContainer.appendChild(div); + participant.on('trackSubscribed', function(track) { + div.appendChild(track.attach()); + }); + }); + + someRoom.on('participantDisconnected', function(participant) { + const participantDiv = document.getElementById(participant.sid); + participantDiv.parentNode.removeChild(participantDiv); + }); + } catch (error) { + console.log("Error while setting up room - was network turned off?", error); + cleanupRoom(); + } +} + +(async function() { + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + // set listener to create new room. + createRoomBtn.onclick = setupRoom; + cleanupRoom(); +}()); diff --git a/package.json b/package.json index 50aa57ca..ddec5807 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js", "build:examples:localvideosnapshot": "copyfiles -f examples/localvideosnapshot/src/helpers.js examples/localvideosnapshot/public && browserify examples/localvideosnapshot/src/index.js > examples/localvideosnapshot/public/index.js", "build:examples:mediadevices": "copyfiles -f examples/mediadevices/src/helpers.js examples/mediadevices/public && browserify examples/mediadevices/src/index.js > examples/mediadevices/public/index.js", + "build:examples:reconnection": "copyfiles -f examples/reconnection/src/helpers.js examples/reconnection/public && browserify examples/reconnection/src/index.js > examples/reconnection/public/index.js", "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "clean": "npm-run-all clean:*", @@ -22,9 +23,11 @@ "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers.js", "clean:examples:localvideosnapshot": "rimraf examples/localvideosnapshot/public/index.js examples/localvideosnapshot/public/helpers.js", "clean:examples:mediadevices": "rimraf examples/mediadevices/public/index.js examples/mediadevices/public/helpers.js", + "clean:examples:reconnection": "rimraf examples/reconnection/public/index.js examples/reconnection/public/helpers.js", "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" + }, "repository": { "type": "git", diff --git a/server/index.js b/server/index.js index 7bef30ac..115d528a 100644 --- a/server/index.js +++ b/server/index.js @@ -30,6 +30,7 @@ var app = express(); 'localvideofilter', 'localvideosnapshot', 'mediadevices', + 'reconnection', 'screenshare' ].forEach(function(example) { var examplePath = path.join(__dirname, `../examples/${example}/public`); From 4e4ad9963c76bdcbe07cc71464bd4d3838893ef6 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Thu, 6 Jun 2019 16:55:24 -0700 Subject: [PATCH 11/89] JSDK-2355 QuickStart example for Network Quality API (#81) * JSDK-2355 Setup the network quality example app's build and launch. * JSDK-2355 Report only the Network Quality level for now.\ * JSDK-2355 Add reporting of NQ stats and update UI. * Update to twilio-video.js@2.0.0-beta10. --- .gitignore | 2 + examples/dominantspeaker/src/helpers.js | 2 - examples/index.html | 31 ++- examples/networkquality/public/index.css | 147 ++++++++++++++ examples/networkquality/public/index.html | 70 +++++++ examples/networkquality/public/prism.css | 123 ++++++++++++ examples/networkquality/src/helpers.js | 79 ++++++++ examples/networkquality/src/index.js | 229 ++++++++++++++++++++++ package.json | 5 +- server/index.js | 1 + 10 files changed, 679 insertions(+), 10 deletions(-) create mode 100644 examples/networkquality/public/index.css create mode 100644 examples/networkquality/public/index.html create mode 100644 examples/networkquality/public/prism.css create mode 100644 examples/networkquality/src/helpers.js create mode 100644 examples/networkquality/src/index.js diff --git a/.gitignore b/.gitignore index 26f9fe8b..1e604ab3 100644 --- a/.gitignore +++ b/.gitignore @@ -54,6 +54,7 @@ examples/dominantspeaker/public/index.js examples/localvideofilter/public/index.js examples/localvideosnapshot/public/index.js examples/mediadevices/public/index.js +examples/networkquality/public/index.js examples/reconnection/public/index.js examples/screenshare/public/index.js @@ -64,5 +65,6 @@ examples/dominantspeaker/public/helpers.js examples/localvideofilter/public/helpers.js examples/localvideosnapshot/public/helpers.js examples/mediadevices/public/helpers.js +examples/networkquality/public/helpers.js examples/reconnection/public/helpers.js examples/screenshare/public/helpers.js diff --git a/examples/dominantspeaker/src/helpers.js b/examples/dominantspeaker/src/helpers.js index 4eb9fd06..ec1ef1c5 100644 --- a/examples/dominantspeaker/src/helpers.js +++ b/examples/dominantspeaker/src/helpers.js @@ -29,5 +29,3 @@ function setupDominantSpeakerUpdates(room, updateDominantSpeaker) { exports.connectToRoomWithDominantSpeaker = connectToRoomWithDominantSpeaker; exports.setupDominantSpeakerUpdates = setupDominantSpeakerUpdates; - - diff --git a/examples/index.html b/examples/index.html index afe245b0..8bd19b58 100644 --- a/examples/index.html +++ b/examples/index.html @@ -85,8 +85,8 @@

- This app demonstrates the Codec Preferences API, which can be used to specify the send-side - audio and video codec preferences while connecting to a Room. + This app demonstrates the Codec Preferences API, + which can be used to specify the send-side audio and video codec preferences while connecting to a Room.

@@ -98,8 +98,9 @@

- This app demonstrates how to capture your screen so that you can share it with other Participants - in the Room. + This app demonstrates how to capture your screen + so that you can share it with other Participants in the Room. This example requires that the browser support the + getDisplayMedia API.

@@ -115,7 +116,7 @@

- This app demonstrates the Dominant Speaker API for Group or Small Group Rooms. + This app demonstrates the Dominant Speaker API for Group or Small Group Rooms. In order to run this example, please go to the Programmable Video Settings in the Twilio Console and select the Room Type as Group or Group-Small.

@@ -129,7 +130,7 @@

- This app demonstrates the Room's Reconnection States and Events + This app demonstrates the Room's Reconnection States and Events which can be used to notify the user when Twilio Video SDK is reconnecting to the Room, probably due to network interruptions or handoffs.

@@ -137,6 +138,24 @@

+
+
+
+ +

+ Network Quality +

+
+
+

+ This app demonstrates the Network Quality API for Group or Small Group Rooms. + In order to run this example, please go to the Programmable Video Settings in the + Twilio Console and select the Room Type as Group or Group-Small. +

+
+
+
+
diff --git a/examples/networkquality/public/index.css b/examples/networkquality/public/index.css new file mode 100644 index 00000000..bf0be9b6 --- /dev/null +++ b/examples/networkquality/public/index.css @@ -0,0 +1,147 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 0 2px; +} + +div.col-sm-6, div.col-sm-6 { + height: 100%; +} + +div#remotemedia { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + height: auto; + width: 100%; + background-color: #fff; + text-align: center; + margin: auto; +} + +div.mediadiv { + margin: 10px; + width: 200px; +} + +div#remotemedia h6 { + position: absolute; + font-size: 14px; + background-color: black; + color: white; +} + +#roomname { + padding: 2px; + border: 1px solid black; + margin: 2px; +} + +div#remotemedia video { + max-width: 100% !important; + max-height: 80% !important; + background-color: #272726; + background-repeat: no-repeat; +} + +div#remotemedia textarea { + resize: none; + width: 200px; + height: 200px; + font-size: 0.6em; + font-family: Courier, sans-serif; +} + +div#usercontrols { + display: flex; + flex-direction: column; + flex-wrap: wrap; + width: 100%; + padding: 5px 10px; +} + +div.usercontrol { + margin: 5px; + border: 1px solid black; + padding: 10px; +} + +div.usercontrol button { + float: right; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +div.card { + border: none; + overflow-y: auto; +} + +div.input-group > select { + width: 100%; +} + +div.col-sm-8 > .card { + height: 100%; +} + +div.col-sm-4 > .card:first-child { + height: 30%; +} + +div.col-sm-4 > .card:last-child { + height: 70%; +} + + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/networkquality/public/index.html b/examples/networkquality/public/index.html new file mode 100644 index 00000000..ea9bb0bd --- /dev/null +++ b/examples/networkquality/public/index.html @@ -0,0 +1,70 @@ + + + + + + Network Quality + + + + + +
+
+
+
+
+

+ Network Quality +

+

+          
+
+
+
+
+
+

Set Network Quality Verbosity Levels

+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+
+
+ + + diff --git a/examples/networkquality/public/prism.css b/examples/networkquality/public/prism.css new file mode 100644 index 00000000..7e2569ab --- /dev/null +++ b/examples/networkquality/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #272822; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #87ceeb; +} + +.token.operator, +.token.punctuation { + color: #ff5555; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.constant, +.token.symbol, +.token.deleted { + color: #f92672; +} + +.token.boolean { + color: #55ff55; +} + +.token.number { + color: #cd5c5c; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #ff55ff; +} + +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable { + color: #ff55ff; +} + +.token.function { + color: #ccc; +} + +.token.keyword { + color: #55ff55; +} + +.token.regex, +.token.important { + color: #fd971f; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/examples/networkquality/src/helpers.js b/examples/networkquality/src/helpers.js new file mode 100644 index 00000000..df13a05e --- /dev/null +++ b/examples/networkquality/src/helpers.js @@ -0,0 +1,79 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Connect to a Room with the Network Quality API enabled. + * This API is available only in Small Group or Group Rooms. + * @param {string} token - Token for joining the Room + * @param {number} localVerbosity - Verbosity level of Network Quality reports + * for the LocalParticipant [1 - 3] + * @param {number} remoteVerbosity - Verbosity level of Network Quality reports + * for the RemoteParticipant(s) [0 - 3] + * @returns {CancelablePromise} + */ +function connectToRoomWithNetworkQuality(token, localVerbosity, remoteVerbosity) { + return Video.connect(token, { + networkQuality: { + local: localVerbosity, + remote: remoteVerbosity + } + }); +} + +/** + * Listen to changes in the Network Quality report of a Participant and update + * your application. + * @param {Participant} participant - The Participant whose updates you want to listen to + * @param {function} updateNetworkQualityReport - Updates the app UI with the new + * Network Quality report of the Participant. + * @returns {void} + */ +function setupNetworkQualityUpdatesForParticipant(participant, updateNetworkQualityReport) { + updateNetworkQualityReport(participant); + participant.on('networkQualityLevelChanged', function() { + updateNetworkQualityReport(participant); + }); +} + +/** + * Listen to changes in the Network Quality reports and update your application. + * @param {Room} room - The Room you just joined + * @param {function} updateNetworkQualityReport - Updates the app UI with the new + * Network Quality report of a Participant. + * @returns {void} + */ +function setupNetworkQualityUpdates(room, updateNetworkQualityReport) { + // Listen to changes in Network Quality level of the LocalParticipant. + setupNetworkQualityUpdatesForParticipant(room.localParticipant, updateNetworkQualityReport); + // Listen to changes in Network Quality levels of RemoteParticipants already + // in the Room. + room.participants.forEach(function(participant) { + setupNetworkQualityUpdatesForParticipant(participant, updateNetworkQualityReport); + }); + // Listen to changes in Network Quality levels of RemoteParticipants that will + // join the Room in the future. + room.on('participantConnected', function(participant) { + setupNetworkQualityUpdatesForParticipant(participant, updateNetworkQualityReport); + }); +} + +/** + * Change the local and remote Network Quality verbosity levels after joining the Room. + * @param {Room} room - The Room you just joined + * @param {number} localVerbosity - Verbosity level of Network Quality reports + * for the LocalParticipant [1 - 3] + * @param {number} remoteVerbosity - Verbosity level of Network Quality reports + * for the RemoteParticipant(s) [0 - 3] + * @returns {void} + */ +function setNetworkQualityConfiguration(room, localVerbosity, remoteVerbosity) { + room.localParticipant.setNetworkQualityConfiguration({ + local: localVerbosity, + remote: remoteVerbosity + }); +} + +exports.connectToRoomWithNetworkQuality = connectToRoomWithNetworkQuality; +exports.setupNetworkQualityUpdates = setupNetworkQualityUpdates; +exports.setNetworkQualityConfiguration = setNetworkQualityConfiguration; diff --git a/examples/networkquality/src/index.js b/examples/networkquality/src/index.js new file mode 100644 index 00000000..3f0a0ace --- /dev/null +++ b/examples/networkquality/src/index.js @@ -0,0 +1,229 @@ +'use strict'; + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const getSnippet = require('../../util/getsnippet'); +const helpers = require('./helpers'); +const connectToRoomWithNetworkQuality = helpers.connectToRoomWithNetworkQuality; +const setupNetworkQualityUpdates = helpers.setupNetworkQualityUpdates; +const setNetworkQualityConfiguration = helpers.setNetworkQualityConfiguration; + +const joinRoomBlock = document.getElementById('joinroom'); +const roomNameText = document.getElementById('roomname'); +const mediaContainer = document.getElementById('remotemedia'); +const userControls = document.getElementById('usercontrols'); +const setupRoomBtn = document.getElementById('setuproom'); +const localVerbosity = document.getElementById('local'); +const remoteVerbosity = document.getElementById('remote'); + +let roomName = null; +let rooms = new Set(); +let someRoom = null; + +/** + * creates a button and add to given container. + */ +function createButton(text, container) { + const btn = document.createElement('button'); + btn.innerHTML = text; + btn.classList.add('btn', 'btn-outline-primary', 'btn-sm'); + container.appendChild(btn); + return btn; +} + +/** + * Creates controls for additional users to connect/disconnect from the Room. + */ +async function createUserControls(userIdentity) { + const creds = await getRoomCredentials(userIdentity); + let room = null; + + const currentUserControls = document.createElement('div'); + currentUserControls.classList.add('usercontrol'); + + const title = document.createElement('span'); + title.innerText = creds.identity; + currentUserControls.appendChild(title); + + // connect button + const connectDisconnect = createButton('Connect', currentUserControls); + connectDisconnect.onclick = async function() { + connectDisconnect.disabled = true; + const connected = room !== null; + if (connected) { + room.disconnect(); + rooms.delete(room); + room = null; + } else { + room = await connectToRoom(creds); + rooms.add(room); + } + connectDisconnect.innerHTML = connected ? 'Connect' : 'Disconnect'; + connectDisconnect.disabled = false; + }; + userControls.appendChild(currentUserControls); +} + +/** + * Clear the user controls. + */ +function clearUserControls() { + userControls.querySelectorAll('.usercontrol').forEach(function(controls) { + controls.remove(); + }); +} + +/** + * Connect the Participant with media to the Room. + */ +function connectToRoom(creds) { + return Video.connect(creds.token, { + name: roomName + }); +} + +/** + * Get the Tracks of the given Participant. + */ +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} + +/** + * Show the UI for the given Participant. + */ +function showParticipant(participant, isRemote) { + const participantDiv = document.createElement('div'); + participantDiv.id = participant.sid; + const mediaDiv = document.createElement('div'); + mediaDiv.classList.add('mediadiv'); + + const title = document.createElement('h6'); + mediaDiv.appendChild(title); + participantDiv.appendChild(mediaDiv); + + const stats = document.createElement('textarea'); + stats.setAttribute('readonly', 'true'); + participantDiv.appendChild(stats); + + mediaContainer.appendChild(participantDiv); + updateNetworkQualityReport(participant); + + if (isRemote) { + participant.on('trackSubscribed', function(track) { + mediaDiv.appendChild(track.attach()); + }); + } else { + getTracks(participant).forEach(function(track) { + mediaDiv.appendChild(track.attach()); + }); + } +} + +/** + * Remove a Participant's UI. + */ +function removeParticipant(participant) { + const participantDiv = document.getElementById(participant.sid); + participantDiv.parentNode.removeChild(participantDiv); +} + +/** + * Updates the Network Quality report for a Participant. + */ +function updateNetworkQualityReport(participant) { + const participantDiv = document.getElementById(participant.sid); + const title = participantDiv.querySelector('h6'); + title.innerHTML = `NQ Level (${participant.identity}): ${participant.networkQualityLevel}`; + const stats = participantDiv.querySelector('textarea'); + stats.value = `NQ Stats:\r\n========\r\n${JSON.stringify(participant.networkQualityStats, null, 2)}`; +} + +/** + * Set up the Room. + */ +async function setupRoom(e) { + e.preventDefault(); + + // Get the credentials to connect to the Room. + const creds = await getRoomCredentials('You'); + + // Connect to a random Room with no media. This Participant will + // display the media of the other Participants that will enter + // the Room and watch for Network Quality updates. + someRoom = await connectToRoomWithNetworkQuality( + creds.token, + parseInt(localVerbosity.value, 10), + parseInt(remoteVerbosity.value, 10)); + + showParticipant(someRoom.localParticipant, false); + + // Set the name of the Room to which the Participant that shares + // media should join. + joinRoomBlock.style.display = 'block'; + roomName = someRoom.name; + roomNameText.innerText = roomName; + + // Listen for changes in verbosity levels and update the Room's Network Quality + // Configuration. + localVerbosity.onchange = remoteVerbosity.onchange = function() { + setNetworkQualityConfiguration( + someRoom, + parseInt(localVerbosity.value, 10), + parseInt(remoteVerbosity.value, 10)); + }; + + // Convert the "Create Room" button to a "Leave Room" button. + setupRoomBtn.onclick = teardownRoom; + setupRoomBtn.value = 'Leave Room'; + + // create controls to connect few users + ['Alice', 'Bob', 'Charlie', 'Mak'].forEach(createUserControls); + + someRoom.on('participantConnected', function(participant) { + showParticipant(participant, true); + }); + + someRoom.on('participantDisconnected', removeParticipant); + setupNetworkQualityUpdates(someRoom, updateNetworkQualityReport); + + // Disconnect from the Room on page unload. + window.onbeforeunload = teardownRoom; +} + +/** + * Tear down the Room. + */ +function teardownRoom(e) { + e.preventDefault(); + if (someRoom) { + someRoom.participants.forEach(removeParticipant); + removeParticipant(someRoom.localParticipant); + clearUserControls(); + someRoom.disconnect(); + someRoom = null; + joinRoomBlock.style.display = 'none'; + roomName = ''; + roomNameText.innerText = ''; + setupRoomBtn.onclick = setupRoom; + setupRoomBtn.value = 'Create Room'; + localVerbosity.onchange = remoteVerbosity.onchange = null; + } + rooms.forEach(function(room) { + room.disconnect(); + rooms.delete(room); + }); +} + +(async function() { + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + setupRoomBtn.onclick = setupRoom; +}()); diff --git a/package.json b/package.json index ddec5807..1f248247 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js", "build:examples:localvideosnapshot": "copyfiles -f examples/localvideosnapshot/src/helpers.js examples/localvideosnapshot/public && browserify examples/localvideosnapshot/src/index.js > examples/localvideosnapshot/public/index.js", "build:examples:mediadevices": "copyfiles -f examples/mediadevices/src/helpers.js examples/mediadevices/public && browserify examples/mediadevices/src/index.js > examples/mediadevices/public/index.js", + "build:examples:networkquality": "copyfiles -f examples/networkquality/src/helpers.js examples/networkquality/public && browserify examples/networkquality/src/index.js > examples/networkquality/public/index.js", "build:examples:reconnection": "copyfiles -f examples/reconnection/src/helpers.js examples/reconnection/public && browserify examples/reconnection/src/index.js > examples/reconnection/public/index.js", "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", @@ -23,11 +24,11 @@ "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers.js", "clean:examples:localvideosnapshot": "rimraf examples/localvideosnapshot/public/index.js examples/localvideosnapshot/public/helpers.js", "clean:examples:mediadevices": "rimraf examples/mediadevices/public/index.js examples/mediadevices/public/helpers.js", + "clean:examples:networkquality": "rimraf examples/networkquality/public/index.js examples/networkquality/public/helpers.js", "clean:examples:reconnection": "rimraf examples/reconnection/public/index.js examples/reconnection/public/helpers.js", "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" - }, "repository": { "type": "git", @@ -54,7 +55,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.0.0-beta9" + "twilio-video": "^2.0.0-beta10" }, "devDependencies": { "browserify": "^14.3.0", diff --git a/server/index.js b/server/index.js index 115d528a..d202d384 100644 --- a/server/index.js +++ b/server/index.js @@ -30,6 +30,7 @@ var app = express(); 'localvideofilter', 'localvideosnapshot', 'mediadevices', + 'networkquality', 'reconnection', 'screenshare' ].forEach(function(example) { From 0a62e24746ea1058f57ca05242d0e89bd3a78675 Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Mon, 10 Jun 2019 12:18:32 -0700 Subject: [PATCH 12/89] media selection sample that works on mobile devices and connect to room (#80) --- CHANGELOG.md | 7 +- examples/mediadevices/public/index.css | 14 +- examples/mediadevices/public/index.html | 13 +- examples/mediadevices/src/helpers.js | 86 +++++++-- examples/mediadevices/src/index.js | 237 +++++++++++++++++++----- examples/util/waveform.js | 34 ++-- 6 files changed, 309 insertions(+), 82 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea0e841c..eaad623b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ + # 1.0.0 ======= - +* Updated Media Device Selection app to Connect to Room. +* Added an example app to demonstrate Network quality API. +* Added an example app to demonstrate Room State Changes. +* Added an example app to demonstrate Dominant Speaker API. +* Updated twilio-video to 2.0.0. * Added an example app to demonstrate Codec Preferences API. * Added an example app to demonstrate Bandwidth Constraints API. * Added an example app to demonstrate Local Video Filter. diff --git a/examples/mediadevices/public/index.css b/examples/mediadevices/public/index.css index f0530a90..a35f6470 100644 --- a/examples/mediadevices/public/index.css +++ b/examples/mediadevices/public/index.css @@ -20,6 +20,13 @@ div.row.thin-gutters { margin: 0 2px 0 2px; } +div#remote-media video { + max-width: 100% !important; + max-height: 80% !important; + background-color: #272726; + background-repeat: no-repeat; +} + div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { padding: 0 2px; @@ -61,10 +68,6 @@ div.col-sm-8 > .card { height: 100%; } -div.col-sm-4 > .card { - height: 50%; -} - div#audioinputwaveform { position: absolute; left: 20px; @@ -83,7 +86,8 @@ div#audioinputwaveform > canvas { } video#videoinputpreview { - width: 100%; + max-width: 100% !important; + max-height: 80% !important; background-color: lightgrey !important; background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); background-position: 50%; diff --git a/examples/mediadevices/public/index.html b/examples/mediadevices/public/index.html index 8e25f4f7..2d183473 100644 --- a/examples/mediadevices/public/index.html +++ b/examples/mediadevices/public/index.html @@ -12,7 +12,7 @@
-
+

@@ -22,7 +22,7 @@

-
+

Preview Media

@@ -62,6 +62,15 @@

Select Media Devices

+ + +
diff --git a/examples/mediadevices/src/helpers.js b/examples/mediadevices/src/helpers.js index d9c5a074..abcb6092 100644 --- a/examples/mediadevices/src/helpers.js +++ b/examples/mediadevices/src/helpers.js @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ 'use strict'; var Video = require('twilio-video'); @@ -15,41 +16,81 @@ function getDevicesOfKind(deviceInfos, kind) { } /** - * Apply the selected audio input device. - * @param {string} deviceId - * @param {HTMLAudioElement} audio - * @returns {Promise} + * Replace the existing LocalAudioTrack or LocalVideoTrack with + * a new one in the Room. + * @param {Room} room - The Room you have joined + * @param {LocalAudioTrack|LocalVideoTrack} track - The LocalTrack you want to switch to + * @returns {void} */ -function applyAudioInputDeviceSelection(deviceId, audio) { - return Video.createLocalAudioTrack({ - deviceId: deviceId - }).then(function(localTrack) { - localTrack.attach(audio); +function switchLocalTracks(room, track) { + room.localParticipant.tracks.forEach(function(trackPublication) { + if (trackPublication.kind === track.kind) { + trackPublication.track.stop(); + room.localParticipant.unpublishTrack(trackPublication.track); + } }); + room.localParticipant.publishTrack(track); } /** * Apply the selected audio output device. * @param {string} deviceId * @param {HTMLAudioElement} audio + * @returns {Promise} */ function applyAudioOutputDeviceSelection(deviceId, audio) { - audio.setSinkId(deviceId); + // return typeof audio.setSinkId === 'function' + // ? audio.setSinkId(deviceId) + // : Promise.reject('This browser does not support setting an audio output device'); + + if (typeof audio.setSinkId === 'function') { + return audio.setSinkId(deviceId); + } + return Promise.reject('This browser does not support setting an audio output device'); + +} + +/** + * Apply the selected audio input device. + * @param {string} deviceId + * @param {HTMLAudioElement} audio + * @param {Room} [room] - The Room, if you have already joined one + * @returns {Promise} + */ +function applyAudioInputDeviceSelection(deviceId, audio, room) { + return Video.createLocalAudioTrack({ + deviceId: { + exact: deviceId // NOTE: on ios safari - it respects the deviceId only if its exact. + } + }).then(function(localTrack) { + localTrack.attach(audio); + if (room) { + switchLocalTracks(room, localTrack); + } + }).catch(function(error) { + console.log('applyAudioInputDeviceSelection failed:', error); + }); } /** * Apply the selected video input device. * @param {string} deviceId * @param {HTMLVideoElement} video + * @param {Room} [room] - The Room, if you have already joined one * @returns {Promise} */ -function applyVideoInputDeviceSelection(deviceId, video) { +function applyVideoInputDeviceSelection(deviceId, video, room) { return Video.createLocalVideoTrack({ - deviceId: deviceId, - height: 240, - width: 320 + deviceId: { + exact: deviceId + } }).then(function(localTrack) { localTrack.attach(video); + if (room) { + switchLocalTracks(room, localTrack); + } + }).catch(function(error) { + console.log('applyVideoInputDeviceSelection failed:', error); }); } @@ -63,7 +104,7 @@ function applyVideoInputDeviceSelection(deviceId, video) { */ function getDeviceSelectionOptions() { return navigator.mediaDevices.enumerateDevices().then(function(deviceInfos) { - var kinds = [ 'audioinput', 'audiooutput', 'videoinput' ]; + var kinds = ['audioinput', 'audiooutput', 'videoinput']; return kinds.reduce(function(deviceSelectionOptions, kind) { deviceSelectionOptions[kind] = getDevicesOfKind(deviceInfos, kind); return deviceSelectionOptions; @@ -71,7 +112,22 @@ function getDeviceSelectionOptions() { }); } +/** + * Connects to room using specified input devices + * @param {string} token + * @param {string} audioDeviceId + * @param {string} videoDeviceId + * @returns {Promise} + */ +function connectWithSelectedDevices(token, audioDeviceId, videoDeviceId) { + return Video.connect(token, { + audio: { deviceId: { exact: audioDeviceId } }, + video: { deviceId: { exact: videoDeviceId } } + }); +} + module.exports.applyAudioInputDeviceSelection = applyAudioInputDeviceSelection; module.exports.applyAudioOutputDeviceSelection = applyAudioOutputDeviceSelection; module.exports.applyVideoInputDeviceSelection = applyVideoInputDeviceSelection; +module.exports.connectWithSelectedDevices = connectWithSelectedDevices; module.exports.getDeviceSelectionOptions = getDeviceSelectionOptions; diff --git a/examples/mediadevices/src/index.js b/examples/mediadevices/src/index.js index 0de99a30..ee5e703f 100644 --- a/examples/mediadevices/src/index.js +++ b/examples/mediadevices/src/index.js @@ -7,6 +7,14 @@ var waveform = require('../../util/waveform'); var applyAudioInputDeviceSelection = helpers.applyAudioInputDeviceSelection; var applyAudioOutputDeviceSelection = helpers.applyAudioOutputDeviceSelection; var applyVideoInputDeviceSelection = helpers.applyVideoInputDeviceSelection; +const connectWithSelectedDevices = helpers.connectWithSelectedDevices; +const connectOrDisconnect = document.querySelector('input#connectordisconnect'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const mediaContainer = document.getElementById('remote-media'); +const joinRoomBlock = document.querySelector('#joinRoom'); +const roomNameText = document.querySelector('#roomName'); +let someRoom = null; + var getDeviceSelectionOptions = helpers.getDeviceSelectionOptions; var deviceSelections = { @@ -19,71 +27,206 @@ var deviceSelections = { * Build the list of available media devices. */ function updateDeviceSelectionOptions() { - getDeviceSelectionOptions().then(function (deviceSelectionOptions) { - ['audioinput', 'audiooutput', 'videoinput'].forEach(function(kind) { - var kindDeviceInfos = deviceSelectionOptions[kind]; - var select = deviceSelections[kind]; - - [].slice.call(select.children).forEach(function(option) { - option.remove(); - }); - - kindDeviceInfos.forEach(function(kindDeviceInfo) { - var deviceId = kindDeviceInfo.deviceId; - var label = kindDeviceInfo.label || 'Device [ id: ' - + deviceId.substr(0, 5) + '... ]'; - - var option = document.createElement('option'); - option.value = deviceId; - option.appendChild(document.createTextNode(label)); - select.appendChild(option); - }); - }); + // before enumerating devices, get media permssions + // NOTE: w/o media permissions, safari/ff does not return the labels + // (like front camera, back camera) for the devices. + return navigator.mediaDevices.getUserMedia({ audio: true, video: true }) + .then(getDeviceSelectionOptions) + .then(function(deviceSelectionOptions) { + ['audioinput', 'audiooutput', 'videoinput'].forEach(function(kind) { + var kindDeviceInfos = deviceSelectionOptions[kind]; + var select = deviceSelections[kind]; + + [].slice.call(select.children).forEach(function(option) { + option.remove(); + }); + + kindDeviceInfos.forEach(function(kindDeviceInfo) { + var deviceId = kindDeviceInfo.deviceId; + var label = kindDeviceInfo.label || 'Device [ id: ' + + deviceId.substr(0, 5) + '... ]'; + var option = document.createElement('option'); + option.value = deviceId; + option.appendChild(document.createTextNode(label)); + select.appendChild(option); + }); + }); }); } -// Load the code snippet. -getSnippet('./helpers.js').then(function(snippet) { - var pre = document.querySelector('pre.language-javascript'); - pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); -}); +function updateRoomBlock(room) { + while (roomNameText.firstChild) { + roomNameText.removeChild(roomNameText.firstChild); + } -// Build the list of available media devices. -updateDeviceSelectionOptions(); + joinRoomBlock.style.display = room ? 'block' : 'none'; + connectOrDisconnect.value = room ? 'Disconnect' : 'Connect'; -// Whenever a media device is added or removed, update the list. -navigator.mediaDevices.ondevicechange = updateDeviceSelectionOptions; + if (room) { + roomNameText.appendChild(document.createTextNode(room.name)); + } +} -// Apply the selected audio input media device. -document.querySelector('button#audioinputapply').onclick = function(event) { +// Attach the Track to the DOM. +function attachTrack(track, container) { + container.appendChild(track.attach()); +} + +// Detach given track from the DOM +function detachTrack(track) { + track.detach().forEach(function(element) { + element.remove(); + }); +} + +// A new RemoteTrack was published to the Room. +function trackPublished(publication, container) { + console.log('Track was of kind ' + publication.kind + ' was published:' + publication.isSubscribed); + if (publication.isSubscribed) { + attachTrack(publication.track, container); + } + publication.on('subscribed', function(track) { + console.log('Subscribed to ' + publication.kind + ' track'); + attachTrack(track, container); + }); + publication.on('unsubscribed', detachTrack); +} + +// A RemoteTrack was unpublished from the Room. +function trackUnpublished(publication) { + console.log(publication.kind + ' track was unpublished.'); +} + +// A new RemoteParticipant joined the Room +function participantConnected(participant) { + console.log("Participant '" + participant.identity + "' joined the room"); + let participantDiv = document.getElementById(participant.sid); + if (!participantDiv) { + participantDiv = document.createElement('div'); + participantDiv.id = participant.sid; + mediaContainer.appendChild(participantDiv); + } + participant.tracks.forEach(function(publication) { + trackPublished(publication, participantDiv); + }); + participant.on('trackPublished', function(publication) { + trackPublished(publication, participantDiv); + }); + participant.on('trackUnpublished', trackUnpublished); +} + +// Detach the Participant's Tracks from the DOM. +function participantDisconnected(participant) { + console.log("Participant '" + participant.identity + "' joined the room"); + const participantDiv = document.getElementById(participant.sid); + participantDiv.parentNode.removeChild(participantDiv); +} + +// reads selected audio input, and updates preview and room to use the device. +function applyAudioInputDeviceChange(event) { var audio = document.querySelector('audio#audioinputpreview'); var waveformContainer = document.querySelector('div#audioinputwaveform'); + if (event) { + event.preventDefault(); + event.stopPropagation(); + } - applyAudioInputDeviceSelection(deviceSelections.audioinput.value, audio).then(function() { - var canvas = waveformContainer.querySelector('canvas'); - waveform.setStream(audio.srcObject); - if (!canvas) { - waveformContainer.appendChild(waveform.element); + return applyAudioInputDeviceSelection(deviceSelections.audioinput.value, audio, someRoom).then(function() { + if (audio.srcObject) { + var canvas = waveformContainer.querySelector('canvas'); + waveform.setStream(audio.srcObject); + if (!canvas) { + waveformContainer.appendChild(waveform.element); + } } }); +} - event.preventDefault(); - event.stopPropagation(); -}; +// reads selected video input, and updates preview and room to use the device. +function applyVideoInputDeviceChange(event) { + try { + var video = document.querySelector('video#videoinputpreview'); + applyVideoInputDeviceSelection(deviceSelections.videoinput.value, video, someRoom); + if (event) { + event.preventDefault(); + event.stopPropagation(); + } + } catch (error) { + console.log('videoInput apply failed:', error); + } +} -// Apply the selected audio output media device. -document.querySelector('button#audiooutputapply').onclick = function(event) { +// reads selected audio output, and updates preview to use the device. +function applyAudioOutputDeviceChange(event) { var audio = document.querySelector('audio#audioinputpreview'); - applyAudioOutputDeviceSelection(deviceSelections.audiooutput.value, audio); + + // Note: not supported on safari + if (deviceSelections.audiooutput.value) { + applyAudioOutputDeviceSelection(deviceSelections.audiooutput.value, audio); + } + event.preventDefault(); event.stopPropagation(); -}; +} -// Apply the selected video input media device. -document.querySelector('button#videoinputapply').onclick = function(event) { - var video = document.querySelector('video#videoinputpreview'); - applyVideoInputDeviceSelection(deviceSelections.videoinput.value, video); +async function connectOrDisconnectRoom(event) { + connectOrDisconnect.disabled = true; event.preventDefault(); event.stopPropagation(); + if (someRoom) { + someRoom.disconnect(); + someRoom = null; + } else { + + const creds = await getRoomCredentials(); + someRoom = await connectWithSelectedDevices(creds.token, deviceSelections.audioinput.value, deviceSelections.videoinput.value); + + // sync the preview with connected tracks. + applyVideoInputDeviceChange(); + applyAudioInputDeviceChange(); + + someRoom.participants.forEach(participantConnected); + + // listen as participants connect/disconnect + someRoom.on('participantConnected', participantConnected); + someRoom.on('participantDisconnected', participantDisconnected); + } + updateRoomBlock(someRoom); + connectOrDisconnect.disabled = false; +} + +// Load the code snippet. +getSnippet('./helpers.js').then(function(snippet) { + var pre = document.querySelector('pre.language-javascript'); + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); +}); + +// setup device selections +updateDeviceSelectionOptions(); + +// Whenever a media device is added or removed, update the list. +navigator.mediaDevices.ondevicechange = updateDeviceSelectionOptions; + +// Apply the selected audio input media device. +document.querySelector('button#audioinputapply').onclick = applyAudioInputDeviceChange; + +// Apply the selected video input media device. +document.querySelector('button#videoinputapply').onclick = applyVideoInputDeviceChange; + +// Apply the selected audio output media device. +// NOTE: safari does not let us query the output device (and its HTMLAudioElement does not have setSinkId) +document.querySelector('button#audiooutputapply').onclick = applyAudioOutputDeviceChange; + +// Connect/Disconnect the room. +connectOrDisconnect.onclick = connectOrDisconnectRoom; + +// Disconnect from the Room on page unload. +window.onbeforeunload = function() { + if (someRoom) { + someRoom.disconnect(); + someRoom = null; + } }; + + diff --git a/examples/util/waveform.js b/examples/util/waveform.js index edf50cd0..623b8344 100644 --- a/examples/util/waveform.js +++ b/examples/util/waveform.js @@ -3,6 +3,12 @@ const CANVAS_HEIGHT = 150; const CANVAS_WIDTH = 300; const FFT_SIZE = 512; +const AudioContext = window.AudioContext // Default + || window.webkitAudioContext; // Safari and old versions of Chrome + +if (!AudioContext) { + console.error('AudioContext is not supported on this platform '); +} /** * Create a waveform element to attach to the DOM. @@ -75,16 +81,20 @@ function Waveform(options) { * @returns {void} */ Waveform.prototype.setStream = function setStream(stream) { - // Disconnect any existing audio source. - this.unsetStream(); + // audioContext created w/o user action gets started as suspended. + // need to resume. ( see: https://goo.gl/7K7WLu ) + this._audioContext.resume().then(function() { + // Disconnect any existing audio source. + this.unsetStream(); - // Create a new audio source for the passed stream, and connect it to the analyser. - this._audioSource = this._audioContext.createMediaStreamSource(stream); - this._audioSource.connect(this._analyser); + // Create a new audio source for the passed stream, and connect it to the analyser. + this._audioSource = this._audioContext.createMediaStreamSource(stream); + this._audioSource.connect(this._analyser); - // Start the render loop - renderFrame(this); -} + // Start the render loop + renderFrame(this); + }.bind(this)); +}; /** * Stop visualizing the current stream. @@ -95,7 +105,7 @@ Waveform.prototype.unsetStream = function unsetStream() { this._audioSource.disconnect(this._analyser); this._audioSource = null; } -} +}; /** * Render the current audio frequency snapshot to the canvas. @@ -137,9 +147,9 @@ function renderFrame(waveform) { var x = 0; for (var i = 0; i < bufferLength; i++) { var v = dataArray[i] / 128.0; - var y = v * CANVAS_HEIGHT/2; + var y = v * CANVAS_HEIGHT / 2; - if(i === 0) { + if (i === 0) { canvasCtx.moveTo(x, y); } else { canvasCtx.lineTo(x, y); @@ -149,7 +159,7 @@ function renderFrame(waveform) { } // End the line at the middle right, and draw the line. - canvasCtx.lineTo(canvas.width, canvas.height/2); + canvasCtx.lineTo(canvas.width, canvas.height / 2); canvasCtx.stroke(); } From 12f5c1e45dfc2ace994470afb168a5b951414fa4 Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Mon, 10 Jun 2019 12:21:05 -0700 Subject: [PATCH 13/89] minor change to helper.js --- examples/mediadevices/src/helpers.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/examples/mediadevices/src/helpers.js b/examples/mediadevices/src/helpers.js index abcb6092..5354f17a 100644 --- a/examples/mediadevices/src/helpers.js +++ b/examples/mediadevices/src/helpers.js @@ -39,15 +39,9 @@ function switchLocalTracks(room, track) { * @returns {Promise} */ function applyAudioOutputDeviceSelection(deviceId, audio) { - // return typeof audio.setSinkId === 'function' - // ? audio.setSinkId(deviceId) - // : Promise.reject('This browser does not support setting an audio output device'); - - if (typeof audio.setSinkId === 'function') { - return audio.setSinkId(deviceId); - } - return Promise.reject('This browser does not support setting an audio output device'); - + return typeof audio.setSinkId === 'function' + ? audio.setSinkId(deviceId) + : Promise.reject('This browser does not support setting an audio output device'); } /** From ecb4390eed6e64a30ead58ae03849d134538318c Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Mon, 10 Jun 2019 16:32:10 -0700 Subject: [PATCH 14/89] Add advisory for breaking changes in Firefox. --- README.md | 5 ++--- package.json | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d270f052..78c9887e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ -**IMPORTANT:** Please upgrade to the latest version of twilio-video.js to avoid upcoming -breaking changes in Google Chrome. See [this advisory](https://support.twilio.com/hc/en-us/articles/360012782494-Breaking-Changes-in-Twilio-Video-JavaScript-SDKs-December-2018-) -for details. +**IMPORTANT:** Please upgrade to the latest version of twilio-video.js to avoid upcoming breaking changes in Firefox 68. +See [this advisory](https://support.twilio.com/hc/en-us/articles/360024434554-Twilio-Video-JavaScript-SDK-Breaking-Changes-in-Firefox-68-July-9-2019-) for details. # Twilio Video Quickstart for JavaScript diff --git a/package.json b/package.json index ddec5807..7938238a 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.0.0-beta9" + "twilio-video": "^2.0.0-beta10" }, "devDependencies": { "browserify": "^14.3.0", From 5e5eaaf0ffdf9ff03c130c832e3b3c10ec43803e Mon Sep 17 00:00:00 2001 From: Sreeram Yerrapragada Date: Tue, 11 Jun 2019 10:21:14 -0700 Subject: [PATCH 15/89] Pin latest release version until 2.0 GA --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1f248247..a775fb2f 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.0.0-beta10" + "twilio-video": "2.0.0-beta10" }, "devDependencies": { "browserify": "^14.3.0", From c2cd5b948bf24251e0f275a1988223318e1387b7 Mon Sep 17 00:00:00 2001 From: Aymen Date: Mon, 9 Sep 2019 22:12:04 -0700 Subject: [PATCH 16/89] Added links to navigate between quick-start and example pages (#91) * Added links to navigate between quick-start and example pages * Updated after review --- examples/index.html | 3 ++- quickstart/public/index.css | 16 ++++++++++++++-- quickstart/public/index.html | 2 ++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/examples/index.html b/examples/index.html index 8bd19b58..67c02053 100644 --- a/examples/index.html +++ b/examples/index.html @@ -13,7 +13,8 @@

Examples

These example apps demonstrate special use-cases of the Twilio Video JS SDK.

-
+

To try the quickstart, click here

+
diff --git a/quickstart/public/index.css b/quickstart/public/index.css index b85623cc..22371cc1 100644 --- a/quickstart/public/index.css +++ b/quickstart/public/index.css @@ -2,8 +2,20 @@ body, p { - padding: 0; - margin: 0; + color: #ffffff; +} +body, h1 { + color: #ffffff; + +} +body, +a { + color: #ffffff; +} + +body, +a:hover { + color: red; } body { diff --git a/quickstart/public/index.html b/quickstart/public/index.html index ae4ba641..7b8669ab 100644 --- a/quickstart/public/index.html +++ b/quickstart/public/index.html @@ -5,6 +5,8 @@ +

Welcome to Twilio Video quickstart

+

For more examples click here

From 81ebb446e7379259c826c1d1dc68b70464513327 Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Thu, 14 Nov 2019 09:22:31 -0800 Subject: [PATCH 17/89] remove stale advisory --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 78c9887e..077310c3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,3 @@ -**IMPORTANT:** Please upgrade to the latest version of twilio-video.js to avoid upcoming breaking changes in Firefox 68. -See [this advisory](https://support.twilio.com/hc/en-us/articles/360024434554-Twilio-Video-JavaScript-SDK-Breaking-Changes-in-Firefox-68-July-9-2019-) for details. - # Twilio Video Quickstart for JavaScript [![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true From 2a42d230995ed5aa51e0a8152a62f2df925f750f Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Mon, 2 Dec 2019 11:36:19 -0800 Subject: [PATCH 18/89] update to beta15 (#93) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a775fb2f..fa339ac7 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "2.0.0-beta10" + "twilio-video": "2.0.0-beta15" }, "devDependencies": { "browserify": "^14.3.0", From 13fc1e0619a11bec2622007fe273c9c46879ec01 Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Fri, 20 Dec 2019 16:39:34 -0800 Subject: [PATCH 19/89] update to twilio-video@2.0.0 (#99) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa339ac7..f67cc915 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "2.0.0-beta15" + "twilio-video": "2.0.0" }, "devDependencies": { "browserify": "^14.3.0", From ff7fb4670c512225010032d38129f9b1e4f601df Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 24 Jan 2020 15:51:58 -0800 Subject: [PATCH 20/89] Added all the necessary folders and files --- examples/enablingdisablingtracks/public/helpers.js | 0 examples/enablingdisablingtracks/public/index.css | 0 examples/enablingdisablingtracks/public/index.html | 0 examples/enablingdisablingtracks/public/index.js | 0 examples/enablingdisablingtracks/public/prism.css | 0 examples/enablingdisablingtracks/src/filters.js | 0 examples/enablingdisablingtracks/src/helpers.js | 0 examples/enablingdisablingtracks/src/index.js | 0 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/enablingdisablingtracks/public/helpers.js create mode 100644 examples/enablingdisablingtracks/public/index.css create mode 100644 examples/enablingdisablingtracks/public/index.html create mode 100644 examples/enablingdisablingtracks/public/index.js create mode 100644 examples/enablingdisablingtracks/public/prism.css create mode 100644 examples/enablingdisablingtracks/src/filters.js create mode 100644 examples/enablingdisablingtracks/src/helpers.js create mode 100644 examples/enablingdisablingtracks/src/index.js diff --git a/examples/enablingdisablingtracks/public/helpers.js b/examples/enablingdisablingtracks/public/helpers.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/public/index.js b/examples/enablingdisablingtracks/public/index.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/public/prism.css b/examples/enablingdisablingtracks/public/prism.css new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/src/filters.js b/examples/enablingdisablingtracks/src/filters.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/enablingdisablingtracks/src/helpers.js new file mode 100644 index 00000000..e69de29b diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js new file mode 100644 index 00000000..e69de29b From b9f605c650b692d833ded69a29514547a07b598b Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 27 Jan 2020 13:11:19 -0800 Subject: [PATCH 21/89] Added example to example html file. Link doesn't go anywhere yet. --- .../enablingdisablingtracks/public/helpers.js | 0 examples/enablingdisablingtracks/public/index.js | 0 examples/enablingdisablingtracks/src/filters.js | 0 examples/index.html | 16 ++++++++++++++++ 4 files changed, 16 insertions(+) delete mode 100644 examples/enablingdisablingtracks/public/helpers.js delete mode 100644 examples/enablingdisablingtracks/public/index.js delete mode 100644 examples/enablingdisablingtracks/src/filters.js diff --git a/examples/enablingdisablingtracks/public/helpers.js b/examples/enablingdisablingtracks/public/helpers.js deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/enablingdisablingtracks/public/index.js b/examples/enablingdisablingtracks/public/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/enablingdisablingtracks/src/filters.js b/examples/enablingdisablingtracks/src/filters.js deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/index.html b/examples/index.html index 67c02053..16e8573c 100644 --- a/examples/index.html +++ b/examples/index.html @@ -157,6 +157,22 @@

+
+
+
+ +

+ Enabling and Disabling Tracks +

+
+
+

+ This app demonstrates how to enable/disable tracks and handle the events on the remote side. +

+
+
+
+
From 20f461c2bb4189f78baef67c44880ed179eb5fb8 Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 27 Jan 2020 16:50:28 -0800 Subject: [PATCH 22/89] Got the beginnings of the enabling disabling example up and running. --- .gitignore | 2 + .../enablingdisablingtracks/public/index.html | 40 +++++++++++++++++++ examples/index.html | 2 +- package.json | 2 + 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1e604ab3..01fe69cf 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ examples/mediadevices/public/index.js examples/networkquality/public/index.js examples/reconnection/public/index.js examples/screenshare/public/index.js +examples/enablingdisablingtracks/public/index.js # The generated helpers.js examples/bandwidthconstraints/public/helpers.js @@ -68,3 +69,4 @@ examples/mediadevices/public/helpers.js examples/networkquality/public/helpers.js examples/reconnection/public/helpers.js examples/screenshare/public/helpers.js +examples/enablingdisablingtracks/public/helpers.js \ No newline at end of file diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index e69de29b..5ab51766 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -0,0 +1,40 @@ + + + + + + Enabling and Disabling Tracks + + + + + +
+
+
+
+
+

+ Enabling and Disabling Tracks +

+

+          
+
+
+
+
+
+

P1 Controls

+
+
+
+
+

P2 Preview

+
+
+
+
+
+ + + diff --git a/examples/index.html b/examples/index.html index 16e8573c..916542ae 100644 --- a/examples/index.html +++ b/examples/index.html @@ -160,7 +160,7 @@

- +

Enabling and Disabling Tracks

diff --git a/package.json b/package.json index f67cc915..071ec4b9 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "build:examples:reconnection": "copyfiles -f examples/reconnection/src/helpers.js examples/reconnection/public && browserify examples/reconnection/src/index.js > examples/reconnection/public/index.js", "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", + "build:examples:enablingdisablingtracks": "copyfiles -f examples/enablingdisablingtracks/src/helpers.js examples/enablingdisablingtracks/public && browserify examples/enablingdisablingtracks/src/index.js > examples/enablingdisablingtracks/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", "clean:examples:bandwidthconstraints": "rimraf examples/bandwidthconstraints/public/index.js examples/bandwidthconstraints/public/helpers.js", @@ -27,6 +28,7 @@ "clean:examples:networkquality": "rimraf examples/networkquality/public/index.js examples/networkquality/public/helpers.js", "clean:examples:reconnection": "rimraf examples/reconnection/public/index.js examples/reconnection/public/helpers.js", "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", + "clean:examples:enablingdisablingtracks": "rimraf examples/enablingdisablingtracks/public/index.js examples/enablingdisablingtracks/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, From ef1fb5fc9e15ab89dec688beb2530c990a888dfe Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 27 Jan 2020 17:29:54 -0800 Subject: [PATCH 23/89] Got the code snippet to render --- .../enablingdisablingtracks/public/index.html | 3 + .../enablingdisablingtracks/public/prism.css | 124 ++++++++++++++++++ .../enablingdisablingtracks/src/helpers.js | 38 ++++++ examples/enablingdisablingtracks/src/index.js | 18 +++ server/index.js | 4 +- 5 files changed, 186 insertions(+), 1 deletion(-) diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index 5ab51766..e00b1c6a 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -25,11 +25,14 @@

P1 Controls

+ +

P2 Preview

+

diff --git a/examples/enablingdisablingtracks/public/prism.css b/examples/enablingdisablingtracks/public/prism.css index e69de29b..d8d7c2f3 100644 --- a/examples/enablingdisablingtracks/public/prism.css +++ b/examples/enablingdisablingtracks/public/prism.css @@ -0,0 +1,124 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #87ceeb; + } + + .token.operator, + .token.punctuation { + color: #ff5555; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol, + .token.deleted { + color: #f92672; + } + + .token.boolean { + color: #55ff55; + } + + .token.number { + color: #cd5c5c; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #ff55ff; + } + + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #ff55ff; + } + + .token.function { + color: #ccc; + } + + .token.keyword { + color: #55ff55; + } + + .token.regex, + .token.important { + color: #fd971f; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } + \ No newline at end of file diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/enablingdisablingtracks/src/helpers.js index e69de29b..99758be0 100644 --- a/examples/enablingdisablingtracks/src/helpers.js +++ b/examples/enablingdisablingtracks/src/helpers.js @@ -0,0 +1,38 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Display local video and audio in the given HTMLVideoElement. + * @param {string} token - Token for joining the Room + * @param {string} roomName - Room name to join + * @returns {CancelablePromise} + */ + +function connectToRoom(token, roomName) { + return Video.connect(token, { + name: roomName + }); +} + +/** + * Enable and disable audio tracks + */ + + function enableAudio() {} + + function disableAudio() {} + +/** + * Enable and disable video tracks + */ + + function enableVideo() {} + + function disableVideo(){} + + exports.connectToRoom = connectToRoom; + exports.enableAudio = enableAudio; + exports.disableAudio = disableAudio; + exports.enableVideo = enableVideo; + exports.disableVideo = disableVideo; \ No newline at end of file diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index e69de29b..6d69634f 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -0,0 +1,18 @@ +'use strict'; + + +const Prism = require('prismjs'); +var getSnippet = require('../../util/getsnippet'); +const Video = require('twilio-video'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const helpers = require('./helpers'); + + +var video = document.querySelector('video#videoinputpreview'); + +// Load the code snippet. +getSnippet('./helpers.js').then(function(snippet) { + var pre = document.querySelector('pre.language-javascript'); + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); +}); + diff --git a/server/index.js b/server/index.js index d202d384..81209dee 100644 --- a/server/index.js +++ b/server/index.js @@ -32,7 +32,9 @@ var app = express(); 'mediadevices', 'networkquality', 'reconnection', - 'screenshare' + 'screenshare', + 'enablingdisablingtracks' + ].forEach(function(example) { var examplePath = path.join(__dirname, `../examples/${example}/public`); app.use(`/${example}`, express.static(examplePath)); From c73ef74e33b6ef7ad027e43b3d5b2c851856ca52 Mon Sep 17 00:00:00 2001 From: joma Date: Tue, 28 Jan 2020 15:16:17 -0800 Subject: [PATCH 24/89] Got the participants into the same room, working on appending tracks to the dom now --- .../enablingdisablingtracks/public/index.html | 12 +++-- .../enablingdisablingtracks/src/helpers.js | 32 ++++------- examples/enablingdisablingtracks/src/index.js | 54 ++++++++++++++++--- 3 files changed, 64 insertions(+), 34 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index e00b1c6a..42b01b82 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -29,11 +29,13 @@

P1 Controls

-
-
-

P2 Preview

- -
+
+
+

P2 View

+
+ +
+
diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/enablingdisablingtracks/src/helpers.js index 99758be0..c4861fa2 100644 --- a/examples/enablingdisablingtracks/src/helpers.js +++ b/examples/enablingdisablingtracks/src/helpers.js @@ -1,38 +1,24 @@ 'use strict'; -var Video = require('twilio-video'); +const Video = require('twilio-video'); -/** - * Display local video and audio in the given HTMLVideoElement. - * @param {string} token - Token for joining the Room - * @param {string} roomName - Room name to join - * @returns {CancelablePromise} - */ - -function connectToRoom(token, roomName) { - return Video.connect(token, { - name: roomName - }); -} +const audioBtn = document.getElementById('audiopreview');; +const videoBtn = document.getElementById('videopreview'); /** * Enable and disable audio tracks */ - function enableAudio() {} - - function disableAudio() {} + function muteAudio() { + } /** * Enable and disable video tracks */ - function enableVideo() {} + function muteVideo() { + } - function disableVideo(){} - exports.connectToRoom = connectToRoom; - exports.enableAudio = enableAudio; - exports.disableAudio = disableAudio; - exports.enableVideo = enableVideo; - exports.disableVideo = disableVideo; \ No newline at end of file + exports.muteAudio = muteAudio; + exports.muteVideo = muteVideo; \ No newline at end of file diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 6d69634f..9f203138 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -2,17 +2,59 @@ const Prism = require('prismjs'); -var getSnippet = require('../../util/getsnippet'); const Video = require('twilio-video'); +const getSnippet = require('../../util/getsnippet'); const getRoomCredentials = require('../../util/getroomcredentials'); const helpers = require('./helpers'); - var video = document.querySelector('video#videoinputpreview'); +let roomName = 'exampleRoom'; + +// Connect participant 1, displaying audio/video +async function connectToRoom(creds) { + const room = await Video.connect(creds.token, { + name: roomName + }); + return room; +} + +/** + * Get the Tracks of the given Participant. + */ +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} -// Load the code snippet. -getSnippet('./helpers.js').then(function(snippet) { - var pre = document.querySelector('pre.language-javascript'); +// Connect participant 2, listening to audio/video + +(async function(){ + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); -}); + // Get the credentials to connect to the Room. + const credsP1 = await getRoomCredentials(); + + const credsP2 = await getRoomCredentials(); + + // Create room instance and name for participants to join. + const roomP1 = await Video.connect(credsP1.token); + + // Set room name for participant 2 to join. + roomName = roomP1.name + + // Connecting remote participants. + const roomP2 = await Video.connect(credsP2.token, { + name:roomName, + tracks: [], + }); + + // Append roomP1 published tracks to the DOM. + +}()); \ No newline at end of file From 4a9413a78e042f7fa3ded05a03476d5b9ffe2d9f Mon Sep 17 00:00:00 2001 From: joma Date: Tue, 28 Jan 2020 17:23:21 -0800 Subject: [PATCH 25/89] Audio muting works. Can't get video to unmount from dom on mute --- .../enablingdisablingtracks/public/index.html | 5 +- examples/enablingdisablingtracks/src/index.js | 60 ++++++++++++++++++- 2 files changed, 59 insertions(+), 6 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index 42b01b82..0176e33f 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -25,15 +25,14 @@

P1 Controls

- - +

P2 View

- +
diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 9f203138..6381243e 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -6,9 +6,12 @@ const Video = require('twilio-video'); const getSnippet = require('../../util/getsnippet'); const getRoomCredentials = require('../../util/getroomcredentials'); const helpers = require('./helpers'); +const muteAudio = helpers.muteAudio; -var video = document.querySelector('video#videoinputpreview'); -let roomName = 'exampleRoom'; +let roomName = null; +const audioPreview = document.getElementById('audiopreview'); +const videoPreview = document.getElementById('videopreview'); +const P1Controls = document.getElementById('userControls') // Connect participant 1, displaying audio/video async function connectToRoom(creds) { @@ -29,6 +32,15 @@ function getTracks(participant) { }); } +// Creates a button +function createButton(text, container) { + const btn = document.createElement('button'); + btn.innerHTML = text; + btn.classList.add('btn', 'btn-outline-primary', 'btn-sm'); + container.appendChild(btn); + return btn; +} + // Connect participant 2, listening to audio/video (async function(){ @@ -54,7 +66,49 @@ function getTracks(participant) { name:roomName, tracks: [], }); + + // Creating mute buttons + const muteAudioBtn = createButton('Mute Audio', P1Controls) + const muteVideoBtn = createButton('Mute Video', P1Controls) - // Append roomP1 published tracks to the DOM. + // Muting audio track and video tracks + muteAudioBtn.onclick = function() { + const mute = muteAudioBtn.innerHTML === 'Mute Audio'; + const localUser = roomP1.localParticipant; + getTracks(localUser).forEach(function(track) { + if (track.kind === 'audio') { + if (mute) { + track.disable(); + } else { + track.enable(); + } + console.log('yeet!', track) + } + }); + muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; + } + muteVideoBtn.onclick = function() { + const mute = muteVideoBtn.innerHTML === 'Mute Video'; + const localUser = roomP1.localParticipant; + getTracks(localUser).forEach(function(track) { + if (track.kind === 'video') { + if (mute) { + track.disable(); + videoPreview.removeChild(track.detach()); + } else { + track.enable(); + videoPreview.appendChild(track.attach()); + } + console.log('yeet!', track) + } + }); + muteVideoBtn.innerHTML = mute ? 'Unmute Video' : 'Mute Video'; + } + + // + roomP2.on('trackSubscribed', function(track) { + videoPreview.appendChild(track.attach()) + }) + }()); \ No newline at end of file From 32e639475bd3e57f48282c90e62ae26ed2b1b300 Mon Sep 17 00:00:00 2001 From: joma Date: Wed, 29 Jan 2020 11:41:56 -0800 Subject: [PATCH 26/89] Cleaned up muting button functions --- .../enablingdisablingtracks/public/index.css | 59 +++++++++++++++++++ .../enablingdisablingtracks/src/helpers.js | 15 ++--- examples/enablingdisablingtracks/src/index.js | 57 +++++++++--------- 3 files changed, 90 insertions(+), 41 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css index e69de29b..841885e7 100644 --- a/examples/enablingdisablingtracks/public/index.css +++ b/examples/enablingdisablingtracks/public/index.css @@ -0,0 +1,59 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 0 2px; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} \ No newline at end of file diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/enablingdisablingtracks/src/helpers.js index c4861fa2..66216213 100644 --- a/examples/enablingdisablingtracks/src/helpers.js +++ b/examples/enablingdisablingtracks/src/helpers.js @@ -2,23 +2,16 @@ const Video = require('twilio-video'); -const audioBtn = document.getElementById('audiopreview');; -const videoBtn = document.getElementById('videopreview'); +const muteBtns = document.getElementById('userControls');; -/** - * Enable and disable audio tracks - */ - function muteAudio() { - } /** - * Enable and disable video tracks + * Enable and disable tracks */ - function muteVideo() { - } + function muteAudio() { + } exports.muteAudio = muteAudio; - exports.muteVideo = muteVideo; \ No newline at end of file diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 6381243e..2f732285 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -21,9 +21,8 @@ async function connectToRoom(creds) { return room; } -/** - * Get the Tracks of the given Participant. - */ +// Get the Tracks of the given Participant. + function getTracks(participant) { return Array.from(participant.tracks.values()).filter(function(publication) { return publication.track; @@ -59,7 +58,7 @@ function createButton(text, container) { const roomP1 = await Video.connect(credsP1.token); // Set room name for participant 2 to join. - roomName = roomP1.name + roomName = roomP1.name; // Connecting remote participants. const roomP2 = await Video.connect(credsP2.token, { @@ -68,47 +67,45 @@ function createButton(text, container) { }); // Creating mute buttons - const muteAudioBtn = createButton('Mute Audio', P1Controls) - const muteVideoBtn = createButton('Mute Video', P1Controls) + const muteAudioBtn = createButton('Mute Audio', P1Controls); + const muteVideoBtn = createButton('Mute Video', P1Controls); // Muting audio track and video tracks muteAudioBtn.onclick = function() { const mute = muteAudioBtn.innerHTML === 'Mute Audio'; const localUser = roomP1.localParticipant; - getTracks(localUser).forEach(function(track) { - if (track.kind === 'audio') { - if (mute) { - track.disable(); - } else { - track.enable(); - } - console.log('yeet!', track) - } - }); + const track = getTracks(localUser); + const audioTrack = track[1]; + + if (mute) { + audioTrack.disable(); + } else { + audioTrack.enable(); + } + muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; } muteVideoBtn.onclick = function() { const mute = muteVideoBtn.innerHTML === 'Mute Video'; const localUser = roomP1.localParticipant; - getTracks(localUser).forEach(function(track) { - if (track.kind === 'video') { - if (mute) { - track.disable(); - videoPreview.removeChild(track.detach()); - } else { - track.enable(); - videoPreview.appendChild(track.attach()); - } - console.log('yeet!', track) - } - }); + const track = getTracks(localUser); + const videoTrack = track[0]; + + if (mute) { + console.log('muted') + videoTrack.disable(); + } else { + console.log('unmuted') + videoTrack.enable(); + } + muteVideoBtn.innerHTML = mute ? 'Unmute Video' : 'Mute Video'; } - // + // Starts video upon P2 joining room roomP2.on('trackSubscribed', function(track) { - videoPreview.appendChild(track.attach()) + videoPreview.appendChild(track.attach()); }) }()); \ No newline at end of file From 183ceb316b6b8144fe748961a5a0a8f9d15cb21e Mon Sep 17 00:00:00 2001 From: joma Date: Wed, 29 Jan 2020 15:18:45 -0800 Subject: [PATCH 27/89] Fixing event handlers --- examples/enablingdisablingtracks/src/index.js | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 2f732285..ee62af3a 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -71,11 +71,14 @@ function createButton(text, container) { const muteVideoBtn = createButton('Mute Video', P1Controls); // Muting audio track and video tracks + let audioTrack = null; + let videoTrack = null; + muteAudioBtn.onclick = function() { const mute = muteAudioBtn.innerHTML === 'Mute Audio'; const localUser = roomP1.localParticipant; const track = getTracks(localUser); - const audioTrack = track[1]; + audioTrack = track[1]; if (mute) { audioTrack.disable(); @@ -90,13 +93,11 @@ function createButton(text, container) { const mute = muteVideoBtn.innerHTML === 'Mute Video'; const localUser = roomP1.localParticipant; const track = getTracks(localUser); - const videoTrack = track[0]; + videoTrack = track[0]; if (mute) { - console.log('muted') videoTrack.disable(); } else { - console.log('unmuted') videoTrack.enable(); } @@ -105,7 +106,37 @@ function createButton(text, container) { // Starts video upon P2 joining room roomP2.on('trackSubscribed', function(track) { + let muteImage = document.createElement('img'); + muteImage.src = 'https://cdn3.iconfinder.com/data/icons/multimedia-and-media-player-solid/48/Artboard_4-512.png'; + + let unmuteImage = document.createElement('img'); + unmuteImage.src = 'https://cdn0.iconfinder.com/data/icons/website-fat-outlines-part-1-black/96/web-01-512.png'; + videoPreview.appendChild(track.attach()); - }) - + audioPreview.appendChild(unmuteImage) + + track.on('enabled', () => { + if (track.kind === 'audio') { + console.log('unmute audio') + // audioPreview.replaceChild(unmuteImage, muteImage) + } + if (track.kind === 'video') { + console.log('unmute video') + // videoPreview.removeChild(muteImage); + } + }); + track.on('disabled', () => { + if (track.kind === 'audio') { + console.log('mute audio') + audioPreview.replaceChild(muteImage, unmuteImage) + // audioPreview.removeChild(unmuteImage); + // audioPreview.appendChild(muteImage); + } + if (track.kind === 'video') { + console.log('mute video') + // videoPreview.appendChild(muteImage); + } + }); + }); + }()); \ No newline at end of file From 4e9e88928e085eb52d7067459f0212fbe12349d6 Mon Sep 17 00:00:00 2001 From: joma Date: Wed, 29 Jan 2020 15:54:43 -0800 Subject: [PATCH 28/89] Fixed a bug where audio and video buttons were touching each other, pressing audio would affect video tracks and pressing video tracks would affect audio tracks --- examples/enablingdisablingtracks/src/index.js | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index ee62af3a..3f8d6263 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -71,20 +71,20 @@ function createButton(text, container) { const muteVideoBtn = createButton('Mute Video', P1Controls); // Muting audio track and video tracks - let audioTrack = null; - let videoTrack = null; muteAudioBtn.onclick = function() { const mute = muteAudioBtn.innerHTML === 'Mute Audio'; const localUser = roomP1.localParticipant; - const track = getTracks(localUser); - audioTrack = track[1]; - if (mute) { - audioTrack.disable(); - } else { - audioTrack.enable(); - } + getTracks(localUser).forEach(function(track) { + if (track.kind === 'audio') { + if (mute) { + track.disable(); + } else { + track.enable(); + } + } + }); muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; } @@ -92,14 +92,16 @@ function createButton(text, container) { muteVideoBtn.onclick = function() { const mute = muteVideoBtn.innerHTML === 'Mute Video'; const localUser = roomP1.localParticipant; - const track = getTracks(localUser); - videoTrack = track[0]; - if (mute) { - videoTrack.disable(); - } else { - videoTrack.enable(); - } + getTracks(localUser).forEach(function(track) { + if (track.kind === 'video') { + if (mute) { + track.disable(); + } else { + track.enable(); + } + } + }); muteVideoBtn.innerHTML = mute ? 'Unmute Video' : 'Mute Video'; } @@ -113,7 +115,7 @@ function createButton(text, container) { unmuteImage.src = 'https://cdn0.iconfinder.com/data/icons/website-fat-outlines-part-1-black/96/web-01-512.png'; videoPreview.appendChild(track.attach()); - audioPreview.appendChild(unmuteImage) + // audioPreview.appendChild(unmuteImage) track.on('enabled', () => { if (track.kind === 'audio') { @@ -122,19 +124,18 @@ function createButton(text, container) { } if (track.kind === 'video') { console.log('unmute video') - // videoPreview.removeChild(muteImage); + // videoPreview.replaceChild(track.attach(), muteImage); } }); + track.on('disabled', () => { if (track.kind === 'audio') { console.log('mute audio') - audioPreview.replaceChild(muteImage, unmuteImage) - // audioPreview.removeChild(unmuteImage); - // audioPreview.appendChild(muteImage); + // audioPreview.replaceChild(muteImage, unmuteImage) } if (track.kind === 'video') { console.log('mute video') - // videoPreview.appendChild(muteImage); + // videoPreview.replaceChild(muteImage, track.attach()); } }); }); From e7d5a1c14925fd266b864281738db3756084a4c8 Mon Sep 17 00:00:00 2001 From: joma Date: Thu, 30 Jan 2020 17:41:28 -0800 Subject: [PATCH 29/89] forgot to commit all day. tinkering with some logic for getting the muting and unmuting button to work --- .../enablingdisablingtracks/public/index.css | 23 +++++ .../enablingdisablingtracks/public/index.html | 3 +- examples/enablingdisablingtracks/src/index.js | 89 +++++++++---------- 3 files changed, 66 insertions(+), 49 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css index 841885e7..5285e7cc 100644 --- a/examples/enablingdisablingtracks/public/index.css +++ b/examples/enablingdisablingtracks/public/index.css @@ -39,6 +39,29 @@ pre.language-javascript a:hover { text-decoration: none; } +div#audiopreview { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + height: auto; + width: 100%; + background-color: #fff; + text-align: center; + margin: auto; +} + +div#videopreview { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; + height: auto; + width: 100%; + background-color: #fff; + margin: auto; + overflow: overlay; +} + + @media (max-width: 900px) { div.col-sm-8, div.col-sm-4 { max-width: 100%; diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index 0176e33f..f7dcc029 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -4,6 +4,7 @@ Enabling and Disabling Tracks + @@ -31,7 +32,7 @@

P1 Controls

P2 View

-
+
diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 3f8d6263..1ecddf2f 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -1,32 +1,21 @@ 'use strict'; - const Prism = require('prismjs'); const Video = require('twilio-video'); const getSnippet = require('../../util/getsnippet'); const getRoomCredentials = require('../../util/getroomcredentials'); const helpers = require('./helpers'); -const muteAudio = helpers.muteAudio; -let roomName = null; const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); const P1Controls = document.getElementById('userControls') - -// Connect participant 1, displaying audio/video -async function connectToRoom(creds) { - const room = await Video.connect(creds.token, { - name: roomName - }); - return room; -} +let roomName = null; // Get the Tracks of the given Participant. - function getTracks(participant) { - return Array.from(participant.tracks.values()).filter(function(publication) { + return Array.from(participant.tracks.values()).filter(publication => { return publication.track; - }).map(function(publication) { + }).map(publication => { return publication.track; }); } @@ -40,7 +29,9 @@ function createButton(text, container) { return btn; } -// Connect participant 2, listening to audio/video +// Creating mute buttons +const muteAudioBtn = createButton('Mute Audio', P1Controls); +const muteVideoBtn = createButton('Mute Video', P1Controls); (async function(){ // Load the code snippet. @@ -65,18 +56,13 @@ function createButton(text, container) { name:roomName, tracks: [], }); - - // Creating mute buttons - const muteAudioBtn = createButton('Mute Audio', P1Controls); - const muteVideoBtn = createButton('Mute Video', P1Controls); // Muting audio track and video tracks - - muteAudioBtn.onclick = function() { - const mute = muteAudioBtn.innerHTML === 'Mute Audio'; + muteAudioBtn.onclick = () => { + const mute = muteAudioBtn.innerHTML === ' Mute Audio'; const localUser = roomP1.localParticipant; - getTracks(localUser).forEach(function(track) { + getTracks(localUser).forEach(track => { if (track.kind === 'audio') { if (mute) { track.disable(); @@ -86,14 +72,22 @@ function createButton(text, container) { } }); - muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; + // muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; + + // console.log('audiobtn',muteAudioBtn) + + if(mute) { + muteAudioBtn.innerHTML = ' Unmute Audio' + } else { + muteAudioBtn.innerHTML = ' Mute Audio' + } } - muteVideoBtn.onclick = function() { + muteVideoBtn.onclick = () => { const mute = muteVideoBtn.innerHTML === 'Mute Video'; const localUser = roomP1.localParticipant; - getTracks(localUser).forEach(function(track) { + getTracks(localUser).forEach(track => { if (track.kind === 'video') { if (mute) { track.disable(); @@ -107,37 +101,36 @@ function createButton(text, container) { } // Starts video upon P2 joining room - roomP2.on('trackSubscribed', function(track) { - let muteImage = document.createElement('img'); - muteImage.src = 'https://cdn3.iconfinder.com/data/icons/multimedia-and-media-player-solid/48/Artboard_4-512.png'; - - let unmuteImage = document.createElement('img'); - unmuteImage.src = 'https://cdn0.iconfinder.com/data/icons/website-fat-outlines-part-1-black/96/web-01-512.png'; - - videoPreview.appendChild(track.attach()); - // audioPreview.appendChild(unmuteImage) + roomP2.on('trackSubscribed', (track => { + if(track.isEnabled) { + if(track.kind === 'audio') { + audioPreview.appendChild(track.attach()); + }else{ + videoPreview.appendChild(track.attach()); + } + } track.on('enabled', () => { if (track.kind === 'audio') { - console.log('unmute audio') - // audioPreview.replaceChild(unmuteImage, muteImage) + audioPreview.appendChild(track.attach()) } if (track.kind === 'video') { - console.log('unmute video') - // videoPreview.replaceChild(track.attach(), muteImage); + videoPreview.appendChild(track.attach()) } }); track.on('disabled', () => { - if (track.kind === 'audio') { - console.log('mute audio') - // audioPreview.replaceChild(muteImage, unmuteImage) - } - if (track.kind === 'video') { - console.log('mute video') - // videoPreview.replaceChild(muteImage, track.attach()); - } + track.detach().forEach(element => { + element.remove(); + }); }); - }); + })); + + // Disconnect from the Room + window.onbeforeunload = () => { + roomP1.disconnect(); + roomP2.disconnect(); + roomName = null; + } }()); \ No newline at end of file From d3513b08c309cb475d0b94c156a8821c92562576 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 00:19:26 -0800 Subject: [PATCH 30/89] Added SVG glyphicons --- .../enablingdisablingtracks/public/icons/pause-fill.svg | 3 +++ .../enablingdisablingtracks/public/icons/play-fill.svg | 3 +++ .../public/icons/volume-mute-fill.svg | 4 ++++ .../public/icons/volume-up-fill.svg | 6 ++++++ examples/enablingdisablingtracks/public/index.html | 8 ++++++-- 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100755 examples/enablingdisablingtracks/public/icons/pause-fill.svg create mode 100755 examples/enablingdisablingtracks/public/icons/play-fill.svg create mode 100755 examples/enablingdisablingtracks/public/icons/volume-mute-fill.svg create mode 100755 examples/enablingdisablingtracks/public/icons/volume-up-fill.svg diff --git a/examples/enablingdisablingtracks/public/icons/pause-fill.svg b/examples/enablingdisablingtracks/public/icons/pause-fill.svg new file mode 100755 index 00000000..a5018882 --- /dev/null +++ b/examples/enablingdisablingtracks/public/icons/pause-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/enablingdisablingtracks/public/icons/play-fill.svg b/examples/enablingdisablingtracks/public/icons/play-fill.svg new file mode 100755 index 00000000..f6585fbc --- /dev/null +++ b/examples/enablingdisablingtracks/public/icons/play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/examples/enablingdisablingtracks/public/icons/volume-mute-fill.svg b/examples/enablingdisablingtracks/public/icons/volume-mute-fill.svg new file mode 100755 index 00000000..2b49b56b --- /dev/null +++ b/examples/enablingdisablingtracks/public/icons/volume-mute-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/examples/enablingdisablingtracks/public/icons/volume-up-fill.svg b/examples/enablingdisablingtracks/public/icons/volume-up-fill.svg new file mode 100755 index 00000000..f0a15a31 --- /dev/null +++ b/examples/enablingdisablingtracks/public/icons/volume-up-fill.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index f7dcc029..1bd26148 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -4,10 +4,13 @@ Enabling and Disabling Tracks - - + + + + +
@@ -24,6 +27,7 @@

+

P1 Controls

From aeebe4975b7c6069471004b7e4b7daa105a62dfb Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 00:31:39 -0800 Subject: [PATCH 31/89] Mute buttons work. Now they're kind of buggy though. I need to go back and figure out why the initial click doesn't actually mute video or audio but every click after first click works fine. --- .../enablingdisablingtracks/public/index.html | 1 - examples/enablingdisablingtracks/src/index.js | 18 +++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index 1bd26148..887bbe74 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -27,7 +27,6 @@

-

P1 Controls

diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 1ecddf2f..5376d581 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -59,7 +59,7 @@ const muteVideoBtn = createButton('Mute Video', P1Controls); // Muting audio track and video tracks muteAudioBtn.onclick = () => { - const mute = muteAudioBtn.innerHTML === ' Mute Audio'; + const mute = muteAudioBtn.innerHTML === ' Mute Audio'; const localUser = roomP1.localParticipant; getTracks(localUser).forEach(track => { @@ -74,17 +74,15 @@ const muteVideoBtn = createButton('Mute Video', P1Controls); // muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; - // console.log('audiobtn',muteAudioBtn) - if(mute) { - muteAudioBtn.innerHTML = ' Unmute Audio' + muteAudioBtn.innerHTML = ' Unmute Audio' } else { - muteAudioBtn.innerHTML = ' Mute Audio' + muteAudioBtn.innerHTML = ' Mute Audio' } } muteVideoBtn.onclick = () => { - const mute = muteVideoBtn.innerHTML === 'Mute Video'; + const mute = muteVideoBtn.innerHTML === ' Mute Video'; const localUser = roomP1.localParticipant; getTracks(localUser).forEach(track => { @@ -97,7 +95,13 @@ const muteVideoBtn = createButton('Mute Video', P1Controls); } }); - muteVideoBtn.innerHTML = mute ? 'Unmute Video' : 'Mute Video'; + // muteVideoBtn.innerHTML = mute ? 'Unmute Video' : 'Mute Video'; + + if(mute) { + muteVideoBtn.innerHTML = ' Unmute Video' + } else { + muteVideoBtn.innerHTML = ' Mute Video'; + } } // Starts video upon P2 joining room From ecda8c2cf4a2d38fd69b32e216cc5bd8837becc3 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 11:10:15 -0800 Subject: [PATCH 32/89] Attempting to fix some button issues --- .../enablingdisablingtracks/public/index.html | 10 ++++++++- examples/enablingdisablingtracks/src/index.js | 21 ++++--------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index 887bbe74..98fc0238 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -29,7 +29,15 @@

P1 Controls

-
+
+ + +
diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 5376d581..3f1f9462 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -9,6 +9,8 @@ const helpers = require('./helpers'); const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); const P1Controls = document.getElementById('userControls') +const muteAudioBtn = document.getElementById('muteAudioBtn'); +const muteVideoBtn = document.getElementById('muteVideoBtn') let roomName = null; // Get the Tracks of the given Participant. @@ -20,18 +22,6 @@ function getTracks(participant) { }); } -// Creates a button -function createButton(text, container) { - const btn = document.createElement('button'); - btn.innerHTML = text; - btn.classList.add('btn', 'btn-outline-primary', 'btn-sm'); - container.appendChild(btn); - return btn; -} - -// Creating mute buttons -const muteAudioBtn = createButton('Mute Audio', P1Controls); -const muteVideoBtn = createButton('Mute Video', P1Controls); (async function(){ // Load the code snippet. @@ -59,6 +49,7 @@ const muteVideoBtn = createButton('Mute Video', P1Controls); // Muting audio track and video tracks muteAudioBtn.onclick = () => { + console.log('mute btn clicked') const mute = muteAudioBtn.innerHTML === ' Mute Audio'; const localUser = roomP1.localParticipant; @@ -72,8 +63,6 @@ const muteVideoBtn = createButton('Mute Video', P1Controls); } }); - // muteAudioBtn.innerHTML = mute ? 'Unmute Audio' : 'Mute Audio'; - if(mute) { muteAudioBtn.innerHTML = ' Unmute Audio' } else { @@ -94,9 +83,7 @@ const muteVideoBtn = createButton('Mute Video', P1Controls); } } }); - - // muteVideoBtn.innerHTML = mute ? 'Unmute Video' : 'Mute Video'; - + if(mute) { muteVideoBtn.innerHTML = ' Unmute Video' } else { From a3ac334c20f400d3b5c5c4a772de1f7c7726ca8d Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 11:41:09 -0800 Subject: [PATCH 33/89] Clean up. Still attempting to fix the buttons not working on the very first click --- .../enablingdisablingtracks/public/index.css | 17 ++++++++++++++--- .../enablingdisablingtracks/public/index.html | 3 ++- examples/enablingdisablingtracks/src/index.js | 4 +--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css index 5285e7cc..32b73356 100644 --- a/examples/enablingdisablingtracks/public/index.css +++ b/examples/enablingdisablingtracks/public/index.css @@ -39,9 +39,20 @@ pre.language-javascript a:hover { text-decoration: none; } +div#userControls { + display: flex; + flex-direction: row; + justify-content: center; + padding: 5px; +} + +div#userControls > button { + margin:5px +} + div#audiopreview { display: flex; - justify-content: flex-start; + justify-content: center; flex-wrap: wrap; height: auto; width: 100%; @@ -52,10 +63,10 @@ div#audiopreview { div#videopreview { display: flex; - justify-content: flex-start; + justify-content: center; flex-wrap: wrap; height: auto; - width: 100%; + width: auto; background-color: #fff; margin: auto; overflow: overlay; diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/enablingdisablingtracks/public/index.html index 98fc0238..f8059d30 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/enablingdisablingtracks/public/index.html @@ -31,7 +31,8 @@

P1 Controls

- + +

From e143e0b7fa1b6d990f9dbdc02b6ae62efa0b7bee Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 14:04:16 -0800 Subject: [PATCH 35/89] Shifted some logic out to helper functions --- .../enablingdisablingtracks/public/index.css | 3 +- .../enablingdisablingtracks/src/helpers.js | 49 +++++++++++++++---- examples/enablingdisablingtracks/src/index.js | 22 ++------- 3 files changed, 45 insertions(+), 29 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css index 32b73356..e0a1861d 100644 --- a/examples/enablingdisablingtracks/public/index.css +++ b/examples/enablingdisablingtracks/public/index.css @@ -47,7 +47,8 @@ div#userControls { } div#userControls > button { - margin:5px + margin:5px; + border-radius: 8px; } div#audiopreview { diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/enablingdisablingtracks/src/helpers.js index 66216213..91ade786 100644 --- a/examples/enablingdisablingtracks/src/helpers.js +++ b/examples/enablingdisablingtracks/src/helpers.js @@ -1,17 +1,46 @@ 'use strict'; -const Video = require('twilio-video'); - -const muteBtns = document.getElementById('userControls');; - - +/** + * Get the Tracks of the given Participant. + * @param {string} participant - A participant to get tracks +*/ +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication){ + return publication.track; + }); +} /** - * Enable and disable tracks - */ - - function muteAudio() { + * Enable and disable tracks. +*/ + + function muteAudio(localUser, mute) { + console.log('muting audio') + getTracks(localUser).forEach(function(track) { + if (track.kind === 'audio') { + if (mute) { + track.disable(); + } else { + track.enable(); + } + } + }); + } + function muteVideo(localUser, mute) { + console.log('mute video') + getTracks(localUser).forEach(function(track) { + if (track.kind === 'video') { + if (mute) { + track.disable(); + } else { + track.enable(); + } + } + }); } - exports.muteAudio = muteAudio; +exports.muteAudio = muteAudio; +exports.muteVideo = muteVideo; \ No newline at end of file diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index dd07a991..215ebbd4 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -5,6 +5,8 @@ const Video = require('twilio-video'); const getSnippet = require('../../util/getsnippet'); const getRoomCredentials = require('../../util/getroomcredentials'); const helpers = require('./helpers'); +const muteAudio = helpers.muteAudio; +const muteVideo = helpers.muteVideo; const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); @@ -51,15 +53,7 @@ function getTracks(participant) { const mute = muteAudioBtn.innerHTML === ' Mute Audio'; const localUser = roomP1.localParticipant; - getTracks(localUser).forEach(track => { - if (track.kind === 'audio') { - if (mute) { - track.disable(); - } else { - track.enable(); - } - } - }); + muteAudio(localUser, mute); if(mute) { muteAudioBtn.innerHTML = ' Unmute Audio' @@ -72,15 +66,7 @@ function getTracks(participant) { const mute = muteVideoBtn.innerHTML === ' Mute Video'; const localUser = roomP1.localParticipant; - getTracks(localUser).forEach(track => { - if (track.kind === 'video') { - if (mute) { - track.disable(); - } else { - track.enable(); - } - } - }); + muteVideo(localUser, mute); if(mute) { muteVideoBtn.innerHTML = ' Unmute Video' From 5cf9b78b4cc3fbf0b137580fe49df2e2b28d9b46 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 14:09:37 -0800 Subject: [PATCH 36/89] Added more descriptions, removed console logs --- examples/enablingdisablingtracks/src/helpers.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/enablingdisablingtracks/src/helpers.js index 91ade786..7928f21e 100644 --- a/examples/enablingdisablingtracks/src/helpers.js +++ b/examples/enablingdisablingtracks/src/helpers.js @@ -14,10 +14,12 @@ function getTracks(participant) { /** * Enable and disable tracks. + * @param {local participant} localUser - The local user that is enabling/disabling. + * @param {string} mute - The current state of the mute button. + * @returns {void} */ function muteAudio(localUser, mute) { - console.log('muting audio') getTracks(localUser).forEach(function(track) { if (track.kind === 'audio') { if (mute) { @@ -30,7 +32,6 @@ function getTracks(participant) { } function muteVideo(localUser, mute) { - console.log('mute video') getTracks(localUser).forEach(function(track) { if (track.kind === 'video') { if (mute) { From 027274dcdb0f7a2da22d65452ac8040dc0ef147b Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 14:22:11 -0800 Subject: [PATCH 37/89] Ha more styling for buttons --- examples/enablingdisablingtracks/public/index.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css index e0a1861d..aaf59df4 100644 --- a/examples/enablingdisablingtracks/public/index.css +++ b/examples/enablingdisablingtracks/public/index.css @@ -49,6 +49,14 @@ div#userControls { div#userControls > button { margin:5px; border-radius: 8px; + -webkit-transition-duration: 0.4s; /* Safari */ + transition-duration: 0.4s; +} + + +div#userControls > button:hover { + background-color: #e7e7e7; + color: black } div#audiopreview { From 3b214dfc35b407682d871077b5d0356061885ba4 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 14:42:04 -0800 Subject: [PATCH 38/89] I'm done I think --- examples/enablingdisablingtracks/public/index.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/enablingdisablingtracks/public/index.css index aaf59df4..dc5f64c6 100644 --- a/examples/enablingdisablingtracks/public/index.css +++ b/examples/enablingdisablingtracks/public/index.css @@ -49,8 +49,7 @@ div#userControls { div#userControls > button { margin:5px; border-radius: 8px; - -webkit-transition-duration: 0.4s; /* Safari */ - transition-duration: 0.4s; + transition-duration: 0.4s; } From c6ac4480dc08af579031811a4de57e54b8f497b2 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 14:42:43 -0800 Subject: [PATCH 39/89] Removed function that wasn't being used anymore --- examples/enablingdisablingtracks/src/index.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 215ebbd4..13ade3c7 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -14,16 +14,6 @@ const muteAudioBtn = document.getElementById('muteAudioBtn'); const muteVideoBtn = document.getElementById('muteVideoBtn') let roomName = null; -// Get the Tracks of the given Participant. -function getTracks(participant) { - return Array.from(participant.tracks.values()).filter(publication => { - return publication.track; - }).map(publication => { - return publication.track; - }); -} - - (async function(){ // Load the code snippet. const snippet = await getSnippet('./helpers.js'); From 9821a729bcb419dcdde913b2a27c02da5bc9ab06 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 31 Jan 2020 14:43:21 -0800 Subject: [PATCH 40/89] Last minor changes --- examples/enablingdisablingtracks/src/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/enablingdisablingtracks/src/index.js index 13ade3c7..b4ccc2eb 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/enablingdisablingtracks/src/index.js @@ -97,5 +97,4 @@ let roomName = null; roomP2.disconnect(); roomName = null; } - }()); \ No newline at end of file From f0dabaed0fc4eb4aadd965b0f903fa51cc0d0506 Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 3 Feb 2020 12:16:08 -0800 Subject: [PATCH 41/89] Changed file name, and path to localmediacontrols --- .gitignore | 4 ++-- examples/index.html | 2 +- .../public/icons/pause-fill.svg | 0 .../public/icons/play-fill.svg | 0 .../public/icons/volume-mute-fill.svg | 0 .../public/icons/volume-up-fill.svg | 0 .../public/index.css | 0 .../public/index.html | 4 ++-- .../public/prism.css | 0 .../src/helpers.js | 0 .../src/index.js | 21 +++++++++++++++---- package.json | 4 ++-- server/index.js | 2 +- 13 files changed, 25 insertions(+), 12 deletions(-) rename examples/{enablingdisablingtracks => localmediacontrols}/public/icons/pause-fill.svg (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/public/icons/play-fill.svg (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/public/icons/volume-mute-fill.svg (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/public/icons/volume-up-fill.svg (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/public/index.css (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/public/index.html (90%) rename examples/{enablingdisablingtracks => localmediacontrols}/public/prism.css (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/src/helpers.js (100%) rename examples/{enablingdisablingtracks => localmediacontrols}/src/index.js (81%) diff --git a/.gitignore b/.gitignore index 01fe69cf..647dfd5a 100644 --- a/.gitignore +++ b/.gitignore @@ -57,7 +57,7 @@ examples/mediadevices/public/index.js examples/networkquality/public/index.js examples/reconnection/public/index.js examples/screenshare/public/index.js -examples/enablingdisablingtracks/public/index.js +examples/localmediacontrols/public/index.js # The generated helpers.js examples/bandwidthconstraints/public/helpers.js @@ -69,4 +69,4 @@ examples/mediadevices/public/helpers.js examples/networkquality/public/helpers.js examples/reconnection/public/helpers.js examples/screenshare/public/helpers.js -examples/enablingdisablingtracks/public/helpers.js \ No newline at end of file +examples/localmediacontrols/public/helpers.js \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 916542ae..c0e00158 100644 --- a/examples/index.html +++ b/examples/index.html @@ -160,7 +160,7 @@

- +

Enabling and Disabling Tracks

diff --git a/examples/enablingdisablingtracks/public/icons/pause-fill.svg b/examples/localmediacontrols/public/icons/pause-fill.svg similarity index 100% rename from examples/enablingdisablingtracks/public/icons/pause-fill.svg rename to examples/localmediacontrols/public/icons/pause-fill.svg diff --git a/examples/enablingdisablingtracks/public/icons/play-fill.svg b/examples/localmediacontrols/public/icons/play-fill.svg similarity index 100% rename from examples/enablingdisablingtracks/public/icons/play-fill.svg rename to examples/localmediacontrols/public/icons/play-fill.svg diff --git a/examples/enablingdisablingtracks/public/icons/volume-mute-fill.svg b/examples/localmediacontrols/public/icons/volume-mute-fill.svg similarity index 100% rename from examples/enablingdisablingtracks/public/icons/volume-mute-fill.svg rename to examples/localmediacontrols/public/icons/volume-mute-fill.svg diff --git a/examples/enablingdisablingtracks/public/icons/volume-up-fill.svg b/examples/localmediacontrols/public/icons/volume-up-fill.svg similarity index 100% rename from examples/enablingdisablingtracks/public/icons/volume-up-fill.svg rename to examples/localmediacontrols/public/icons/volume-up-fill.svg diff --git a/examples/enablingdisablingtracks/public/index.css b/examples/localmediacontrols/public/index.css similarity index 100% rename from examples/enablingdisablingtracks/public/index.css rename to examples/localmediacontrols/public/index.css diff --git a/examples/enablingdisablingtracks/public/index.html b/examples/localmediacontrols/public/index.html similarity index 90% rename from examples/enablingdisablingtracks/public/index.html rename to examples/localmediacontrols/public/index.html index c8ee51bb..195b0e44 100644 --- a/examples/enablingdisablingtracks/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -30,8 +30,8 @@

P1 Controls

- - + +

diff --git a/examples/enablingdisablingtracks/public/prism.css b/examples/localmediacontrols/public/prism.css similarity index 100% rename from examples/enablingdisablingtracks/public/prism.css rename to examples/localmediacontrols/public/prism.css diff --git a/examples/enablingdisablingtracks/src/helpers.js b/examples/localmediacontrols/src/helpers.js similarity index 100% rename from examples/enablingdisablingtracks/src/helpers.js rename to examples/localmediacontrols/src/helpers.js diff --git a/examples/enablingdisablingtracks/src/index.js b/examples/localmediacontrols/src/index.js similarity index 81% rename from examples/enablingdisablingtracks/src/index.js rename to examples/localmediacontrols/src/index.js index b4ccc2eb..40e9de1b 100644 --- a/examples/enablingdisablingtracks/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -52,16 +52,29 @@ let roomName = null; } } + // muteVideoBtn.onclick = () => { + // const mute = muteVideoBtn.innerHTML === ' Mute Video'; + // const localUser = roomP1.localParticipant; + + // muteVideo(localUser, mute); + + // if(mute) { + // muteVideoBtn.innerHTML = ' Unmute Video' + // } else { + // muteVideoBtn.innerHTML = ' Mute Video'; + // } + // } + muteVideoBtn.onclick = () => { - const mute = muteVideoBtn.innerHTML === ' Mute Video'; + const mute = !muteVideoBtn.classList.has('muted'); const localUser = roomP1.localParticipant; muteVideo(localUser, mute); - if(mute) { - muteVideoBtn.innerHTML = ' Unmute Video' + if (mute) { + muteVideoBtn.classList.add('muted') } else { - muteVideoBtn.innerHTML = ' Mute Video'; + muteVideoBtn.classList.remove('muted') } } diff --git a/package.json b/package.json index 071ec4b9..c64f30b4 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "build:examples:reconnection": "copyfiles -f examples/reconnection/src/helpers.js examples/reconnection/public && browserify examples/reconnection/src/index.js > examples/reconnection/public/index.js", "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", - "build:examples:enablingdisablingtracks": "copyfiles -f examples/enablingdisablingtracks/src/helpers.js examples/enablingdisablingtracks/public && browserify examples/enablingdisablingtracks/src/index.js > examples/enablingdisablingtracks/public/index.js", + "build:examples:localmediacontrols": "copyfiles -f examples/localmediacontrols/src/helpers.js examples/localmediacontrols/public && browserify examples/localmediacontrols/src/index.js > examples/localmediacontrols/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", "clean:examples:bandwidthconstraints": "rimraf examples/bandwidthconstraints/public/index.js examples/bandwidthconstraints/public/helpers.js", @@ -28,7 +28,7 @@ "clean:examples:networkquality": "rimraf examples/networkquality/public/index.js examples/networkquality/public/helpers.js", "clean:examples:reconnection": "rimraf examples/reconnection/public/index.js examples/reconnection/public/helpers.js", "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", - "clean:examples:enablingdisablingtracks": "rimraf examples/enablingdisablingtracks/public/index.js examples/enablingdisablingtracks/public/helpers.js", + "clean:examples:localmediacontrols": "rimraf examples/localmediacontrols/public/index.js examples/localmediacontrols/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, diff --git a/server/index.js b/server/index.js index 81209dee..871319ee 100644 --- a/server/index.js +++ b/server/index.js @@ -33,7 +33,7 @@ var app = express(); 'networkquality', 'reconnection', 'screenshare', - 'enablingdisablingtracks' + 'localmediacontrols' ].forEach(function(example) { var examplePath = path.join(__dirname, `../examples/${example}/public`); From 205a0d1c6d6ce9af7df310f455225e50897580e0 Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 3 Feb 2020 13:57:56 -0800 Subject: [PATCH 42/89] Added buttons and appropriate click handlers so we arent using innerhtml anymore --- examples/localmediacontrols/public/index.css | 1 + examples/localmediacontrols/public/index.html | 6 +- examples/localmediacontrols/src/index.js | 66 ++++++++++++------- 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/examples/localmediacontrols/public/index.css b/examples/localmediacontrols/public/index.css index dc5f64c6..6dcf795c 100644 --- a/examples/localmediacontrols/public/index.css +++ b/examples/localmediacontrols/public/index.css @@ -47,6 +47,7 @@ div#userControls { } div#userControls > button { + align-items: center; margin:5px; border-radius: 8px; transition-duration: 0.4s; diff --git a/examples/localmediacontrols/public/index.html b/examples/localmediacontrols/public/index.html index 195b0e44..f29e57e7 100644 --- a/examples/localmediacontrols/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -30,8 +30,10 @@

P1 Controls

- - + + + +

diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 40e9de1b..21c53b41 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -11,7 +11,9 @@ const muteVideo = helpers.muteVideo; const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); const muteAudioBtn = document.getElementById('muteAudioBtn'); -const muteVideoBtn = document.getElementById('muteVideoBtn') +const muteVideoBtn = document.getElementById('muteVideoBtn'); +const unmuteAudioBtn = document.getElementById('unmuteAudioBtn'); +const unmuteVideoBtn = document.getElementById('unmuteVideoBtn'); let roomName = null; (async function(){ @@ -23,7 +25,6 @@ let roomName = null; // Get the credentials to connect to the Room. const credsP1 = await getRoomCredentials(); - const credsP2 = await getRoomCredentials(); // Create room instance and name for participants to join. @@ -34,47 +35,68 @@ let roomName = null; // Connecting remote participants. const roomP2 = await Video.connect(credsP2.token, { - name:roomName, - tracks: [], + name: roomName, + tracks: [] }); - // Muting audio track and video tracks + // Muting audio track and video tracks click handlers muteAudioBtn.onclick = () => { - const mute = muteAudioBtn.innerHTML === ' Mute Audio'; + const mute = muteAudioBtn.style.display === 'flex' const localUser = roomP1.localParticipant; muteAudio(localUser, mute); - if(mute) { - muteAudioBtn.innerHTML = ' Unmute Audio' + if (mute) { + muteAudioBtn.style.display = 'none' + unmuteAudioBtn.style.display = 'flex' } else { - muteAudioBtn.innerHTML = ' Mute Audio' + muteAudioBtn.style.display = 'flex' + unmuteAudioBtn.style.display = 'none' } } - // muteVideoBtn.onclick = () => { - // const mute = muteVideoBtn.innerHTML === ' Mute Video'; - // const localUser = roomP1.localParticipant; + unmuteAudioBtn.onclick = () => { + const mute = !unmuteAudioBtn.style.display === 'flex' + const localUser = roomP1.localParticipant; - // muteVideo(localUser, mute); + muteAudio(localUser, mute); - // if(mute) { - // muteVideoBtn.innerHTML = ' Unmute Video' - // } else { - // muteVideoBtn.innerHTML = ' Mute Video'; - // } - // } + if (!mute) { + unmuteAudioBtn.style.display = 'none' + muteAudioBtn.style.display = 'flex' + } else { + unmuteAudioBtn.style.display = 'flex' + muteAudioBtn.style.display = 'none' + } + } muteVideoBtn.onclick = () => { - const mute = !muteVideoBtn.classList.has('muted'); + const mute = muteVideoBtn.style.display === 'flex' const localUser = roomP1.localParticipant; muteVideo(localUser, mute); if (mute) { - muteVideoBtn.classList.add('muted') + muteVideoBtn.style.display = 'none' + unmuteVideoBtn.style.display = 'flex' + } else { + muteVideoBtn.style.display = 'flex' + unmuteVideoBtn.style.display = 'none' + } + } + + unmuteVideoBtn.onclick = () => { + const mute = !unmuteVideoBtn.style.display === 'flex' + const localUser = roomP1.localParticipant; + + muteVideo(localUser, mute); + + if (!mute) { + unmuteVideoBtn.style.display = 'none' + muteVideoBtn.style.display = 'flex' } else { - muteVideoBtn.classList.remove('muted') + unmuteVideoBtn.style.display = 'flex' + muteVideoBtn.style.display = 'none' } } From 91a6db736e1aacba7f0f1dd6c93f0104feaece5b Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 3 Feb 2020 15:26:08 -0800 Subject: [PATCH 43/89] Added requested changes --- examples/localmediacontrols/src/helpers.js | 112 ++++++++++++++------- examples/localmediacontrols/src/index.js | 69 ++++++------- 2 files changed, 106 insertions(+), 75 deletions(-) diff --git a/examples/localmediacontrols/src/helpers.js b/examples/localmediacontrols/src/helpers.js index 7928f21e..03562775 100644 --- a/examples/localmediacontrols/src/helpers.js +++ b/examples/localmediacontrols/src/helpers.js @@ -1,47 +1,81 @@ 'use strict'; -/** - * Get the Tracks of the given Participant. - * @param {string} participant - A participant to get tracks -*/ -function getTracks(participant) { - return Array.from(participant.tracks.values()).filter(function(publication) { - return publication.track; - }).map(function(publication){ - return publication.track; +/** + * Mute/unmute your media in a Room. + * @param {Room} room - The Room you have joined + * @param {'audio'|'video'} kind - The type of media you want to mute/unmute + * @param {'mute'|'unmute'} action - Whether you want to mute/unmute + */ +function muteOrUnmuteYourMedia(room, kind, action) { + const publications = kind === 'audio' + ? room.localParticipant.audioTracks + : room.localParticipant.videoTracks; + + publications.forEach(function(publication) { + if (action === 'mute') { + publication.track.disable(); + } else { + publication.track.enable(); + } }); } /** - * Enable and disable tracks. - * @param {local participant} localUser - The local user that is enabling/disabling. - * @param {string} mute - The current state of the mute button. - * @returns {void} -*/ - - function muteAudio(localUser, mute) { - getTracks(localUser).forEach(function(track) { - if (track.kind === 'audio') { - if (mute) { - track.disable(); - } else { - track.enable(); - } - } - }); - } - - function muteVideo(localUser, mute) { - getTracks(localUser).forEach(function(track) { - if (track.kind === 'video') { - if (mute) { - track.disable(); - } else { - track.enable(); - } - } + * Mute your audio in a Room. + * @param {Room} room - The Room you have joined + * @returns {void} + */ +function muteYourAudio(room) { + muteOrUnmuteYourMedia(room, 'audio', 'mute'); +} + +/** + * Mute your video in a Room. + * @param {Room} room - The Room you have joined + * @returns {void} + */ +function muteYourVideo(room) { + muteOrUnmuteYourMedia(room, 'video', 'mute'); +} + +/** + * Unmute your audio in a Room. + * @param {Room} room - The Room you have joined + * @returns {void} + */ +function unmuteYourAudio(room) { + muteOrUnmuteYourMedia(room, 'audio', 'unmute'); +} + +/** + * Unmute your video in a Room. + * @param {Room} room - The Room you have joined + * @returns {void} + */ +function unmuteYourVideo(room) { + muteOrUnmuteYourMedia(room, 'video', 'unmute'); +} + +/** + * A RemoteParticipant muted or unmuted its media. + * @param {Room} room - The Room you have joined + * @param {function} onMutedMedia - Called when a RemoteParticipant muted its media + * @param {function} onUnmutedMedia - Called when a RemoteParticipant unmuted its media + * @returns {void} + */ +function participantMutedOrUnmutedMedia(room, onMutedMedia, onUnmutedMedia) { + room.on('trackSubscribed', function(track, publication, participant) { + track.on('disabled', function() { + onMutedMedia(track, participant); + }); + track.on('enabled', function() { + onUnmutedMedia(track, participant); + }); }); - } +} -exports.muteAudio = muteAudio; -exports.muteVideo = muteVideo; \ No newline at end of file +exports.muteYourAudio = muteYourAudio; +exports.muteYourVideo = muteYourVideo; +exports.unmuteYourAudio = unmuteYourAudio; +exports.unmuteYourVideo = unmuteYourVideo; +exports.participantMutedOrUnmutedMedia = participantMutedOrUnmutedMedia; diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 21c53b41..59c351ac 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -5,8 +5,12 @@ const Video = require('twilio-video'); const getSnippet = require('../../util/getsnippet'); const getRoomCredentials = require('../../util/getroomcredentials'); const helpers = require('./helpers'); -const muteAudio = helpers.muteAudio; -const muteVideo = helpers.muteVideo; +const muteYourAudio = helpers.muteYourAudio; +const muteYourVideo = helpers.muteYourVideo; +const unmuteYourAudio = helpers.unmuteYourAudio; +const unmuteYourVideo = helpers.unmuteYourVideo; +const participantMutedOrUnmutedMedia = helpers.participantMutedOrUnmutedMedia; + const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); @@ -41,62 +45,58 @@ let roomName = null; // Muting audio track and video tracks click handlers muteAudioBtn.onclick = () => { - const mute = muteAudioBtn.style.display === 'flex' - const localUser = roomP1.localParticipant; + const mute = muteAudioBtn.style.display === 'flex'; - muteAudio(localUser, mute); + muteYourAudio(roomP1); if (mute) { - muteAudioBtn.style.display = 'none' - unmuteAudioBtn.style.display = 'flex' + muteAudioBtn.style.display = 'none'; + unmuteAudioBtn.style.display = 'flex'; } else { - muteAudioBtn.style.display = 'flex' - unmuteAudioBtn.style.display = 'none' + muteAudioBtn.style.display = 'flex'; + unmuteAudioBtn.style.display = 'none'; } } unmuteAudioBtn.onclick = () => { - const mute = !unmuteAudioBtn.style.display === 'flex' - const localUser = roomP1.localParticipant; + const mute = !unmuteAudioBtn.style.display === 'flex'; - muteAudio(localUser, mute); + unmuteYourAudio(roomP1); if (!mute) { - unmuteAudioBtn.style.display = 'none' - muteAudioBtn.style.display = 'flex' + unmuteAudioBtn.style.display = 'none'; + muteAudioBtn.style.display = 'flex'; } else { - unmuteAudioBtn.style.display = 'flex' - muteAudioBtn.style.display = 'none' + unmuteAudioBtn.style.display = 'flex'; + muteAudioBtn.style.display = 'none'; } } muteVideoBtn.onclick = () => { - const mute = muteVideoBtn.style.display === 'flex' - const localUser = roomP1.localParticipant; + const mute = muteVideoBtn.style.display === 'flex'; - muteVideo(localUser, mute); + muteYourVideo(roomP1); if (mute) { - muteVideoBtn.style.display = 'none' - unmuteVideoBtn.style.display = 'flex' + muteVideoBtn.style.display = 'none'; + unmuteVideoBtn.style.display = 'flex'; } else { - muteVideoBtn.style.display = 'flex' - unmuteVideoBtn.style.display = 'none' + muteVideoBtn.style.display = 'flex'; + unmuteVideoBtn.style.display = 'none'; } } unmuteVideoBtn.onclick = () => { - const mute = !unmuteVideoBtn.style.display === 'flex' - const localUser = roomP1.localParticipant; + const mute = !unmuteVideoBtn.style.display === 'flex'; - muteVideo(localUser, mute); + unmuteYourVideo(roomP1); if (!mute) { - unmuteVideoBtn.style.display = 'none' - muteVideoBtn.style.display = 'flex' + unmuteVideoBtn.style.display = 'none'; + muteVideoBtn.style.display = 'flex'; } else { - unmuteVideoBtn.style.display = 'flex' - muteVideoBtn.style.display = 'none' + unmuteVideoBtn.style.display = 'flex'; + muteVideoBtn.style.display = 'none'; } } @@ -110,16 +110,13 @@ let roomName = null; } } - track.on('enabled', () => { + participantMutedOrUnmutedMedia(roomP1, track => { if (track.kind === 'audio') { audioPreview.appendChild(track.attach()) - } - if (track.kind === 'video') { + } else if (track.kind === 'video') { videoPreview.appendChild(track.attach()) } - }); - - track.on('disabled', () => { + }, track => { track.detach().forEach(element => { element.remove(); }); From e1fc76c9fe84dfe111691f5a764ba6e6351c2891 Mon Sep 17 00:00:00 2001 From: joma Date: Tue, 4 Feb 2020 12:00:28 -0800 Subject: [PATCH 44/89] Fixed helper function issue with video and audio not being removed from dom --- examples/localmediacontrols/src/helpers.js | 4 +-- examples/localmediacontrols/src/index.js | 29 +++++++++++++--------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/examples/localmediacontrols/src/helpers.js b/examples/localmediacontrols/src/helpers.js index 03562775..a96d49a6 100644 --- a/examples/localmediacontrols/src/helpers.js +++ b/examples/localmediacontrols/src/helpers.js @@ -66,10 +66,10 @@ function unmuteYourVideo(room) { function participantMutedOrUnmutedMedia(room, onMutedMedia, onUnmutedMedia) { room.on('trackSubscribed', function(track, publication, participant) { track.on('disabled', function() { - onMutedMedia(track, participant); + return onMutedMedia(track, participant); }); track.on('enabled', function() { - onUnmutedMedia(track, participant); + return onUnmutedMedia(track, participant); }); }); } diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 59c351ac..f5bd5ca2 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -100,6 +100,21 @@ let roomName = null; } } + // Callbacks for attaching and detaching tracks + const detach = track => { + track.detach().forEach(element => { + element.remove(); + })}; + + const attach = track => { + if (track.kind === 'audio') { + audioPreview.appendChild(track.attach()) + } + if (track.kind === 'video') { + videoPreview.appendChild(track.attach()) + } + }; + // Starts video upon P2 joining room roomP2.on('trackSubscribed', (track => { if(track.isEnabled) { @@ -110,18 +125,8 @@ let roomName = null; } } - participantMutedOrUnmutedMedia(roomP1, track => { - if (track.kind === 'audio') { - audioPreview.appendChild(track.attach()) - } else if (track.kind === 'video') { - videoPreview.appendChild(track.attach()) - } - }, track => { - track.detach().forEach(element => { - element.remove(); - }); - }); - })); + participantMutedOrUnmutedMedia(roomP2, detach, attach); +})); // Disconnect from the Room window.onbeforeunload = () => { From 9c5601a16ee9ee95bcf2a2e612ad740c62d7b233 Mon Sep 17 00:00:00 2001 From: joma Date: Tue, 4 Feb 2020 13:08:14 -0800 Subject: [PATCH 45/89] Some styling changes --- examples/localmediacontrols/public/index.css | 23 +++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/examples/localmediacontrols/public/index.css b/examples/localmediacontrols/public/index.css index 6dcf795c..5bf6edc1 100644 --- a/examples/localmediacontrols/public/index.css +++ b/examples/localmediacontrols/public/index.css @@ -25,6 +25,16 @@ div.row.thin-gutters > [class*="col-"] { padding: 0 2px; } +div.card { + border: none; + overflow-y: auto; +} + +div.col-sm-8 > .card { + height: 100%; +} + + pre.language-javascript { font-family: 'Roboto Mono', monospace; font-size: 13px; @@ -74,13 +84,20 @@ div#videopreview { display: flex; justify-content: center; flex-wrap: wrap; - height: auto; - width: auto; + height: 75%; + width: 75%; background-color: #fff; margin: auto; - overflow: overlay; + width: 100%; } +div#videopreview > video { + width: 100%; + background-color: lightgrey !important; + background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); + background-position: 50%; + background-repeat: no-repeat; +} @media (max-width: 900px) { div.col-sm-8, div.col-sm-4 { From cfe01d01c7b087c2361433a1b5e1f271b7be586f Mon Sep 17 00:00:00 2001 From: joma Date: Tue, 4 Feb 2020 16:26:27 -0800 Subject: [PATCH 46/89] Implemented requested changes --- .gitignore | 2 +- examples/index.html | 2 +- examples/localmediacontrols/src/index.js | 79 +++++++----------------- 3 files changed, 23 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index 647dfd5a..2b9e60b5 100644 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,4 @@ examples/mediadevices/public/helpers.js examples/networkquality/public/helpers.js examples/reconnection/public/helpers.js examples/screenshare/public/helpers.js -examples/localmediacontrols/public/helpers.js \ No newline at end of file +examples/localmediacontrols/public/helpers.js diff --git a/examples/index.html b/examples/index.html index c0e00158..5c5fe0c4 100644 --- a/examples/index.html +++ b/examples/index.html @@ -167,7 +167,7 @@

- This app demonstrates how to enable/disable tracks and handle the events on the remote side. + This app demonstrates how to enable/disable your LocalTracks and handle the events on the remote side.

diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index f5bd5ca2..41da2e09 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -45,76 +45,29 @@ let roomName = null; // Muting audio track and video tracks click handlers muteAudioBtn.onclick = () => { - const mute = muteAudioBtn.style.display === 'flex'; - muteYourAudio(roomP1); - - if (mute) { - muteAudioBtn.style.display = 'none'; - unmuteAudioBtn.style.display = 'flex'; - } else { - muteAudioBtn.style.display = 'flex'; - unmuteAudioBtn.style.display = 'none'; - } + muteAudioBtn.style.display = 'none'; + unmuteAudioBtn.style.display = 'flex'; } unmuteAudioBtn.onclick = () => { - const mute = !unmuteAudioBtn.style.display === 'flex'; - unmuteYourAudio(roomP1); - - if (!mute) { - unmuteAudioBtn.style.display = 'none'; - muteAudioBtn.style.display = 'flex'; - } else { - unmuteAudioBtn.style.display = 'flex'; - muteAudioBtn.style.display = 'none'; - } + unmuteAudioBtn.style.display = 'none'; + muteAudioBtn.style.display = 'flex'; } muteVideoBtn.onclick = () => { - const mute = muteVideoBtn.style.display === 'flex'; - muteYourVideo(roomP1); - - if (mute) { - muteVideoBtn.style.display = 'none'; - unmuteVideoBtn.style.display = 'flex'; - } else { - muteVideoBtn.style.display = 'flex'; - unmuteVideoBtn.style.display = 'none'; - } + muteVideoBtn.style.display = 'none'; + unmuteVideoBtn.style.display = 'flex'; } unmuteVideoBtn.onclick = () => { - const mute = !unmuteVideoBtn.style.display === 'flex'; - unmuteYourVideo(roomP1); - - if (!mute) { - unmuteVideoBtn.style.display = 'none'; - muteVideoBtn.style.display = 'flex'; - } else { - unmuteVideoBtn.style.display = 'flex'; - muteVideoBtn.style.display = 'none'; - } + unmuteVideoBtn.style.display = 'none'; + muteVideoBtn.style.display = 'flex'; } - // Callbacks for attaching and detaching tracks - const detach = track => { - track.detach().forEach(element => { - element.remove(); - })}; - - const attach = track => { - if (track.kind === 'audio') { - audioPreview.appendChild(track.attach()) - } - if (track.kind === 'video') { - videoPreview.appendChild(track.attach()) - } - }; - // Starts video upon P2 joining room roomP2.on('trackSubscribed', (track => { if(track.isEnabled) { @@ -125,8 +78,18 @@ let roomName = null; } } - participantMutedOrUnmutedMedia(roomP2, detach, attach); -})); + participantMutedOrUnmutedMedia(roomP2, track => { + track.detach().forEach(element => { + element.remove(); + })}, track => { + if (track.kind === 'audio') { + audioPreview.appendChild(track.attach()) + } + if (track.kind === 'video') { + videoPreview.appendChild(track.attach()) + } + }); + })); // Disconnect from the Room window.onbeforeunload = () => { @@ -134,4 +97,4 @@ let roomName = null; roomP2.disconnect(); roomName = null; } -}()); \ No newline at end of file +}()); From 5e5ed2258f7fcc1f460fd1ccbbd62bc5f998677a Mon Sep 17 00:00:00 2001 From: joma Date: Wed, 5 Feb 2020 09:54:32 -0800 Subject: [PATCH 47/89] Finishing touches --- examples/localmediacontrols/src/index.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 41da2e09..959f073c 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -11,7 +11,6 @@ const unmuteYourAudio = helpers.unmuteYourAudio; const unmuteYourVideo = helpers.unmuteYourVideo; const participantMutedOrUnmutedMedia = helpers.participantMutedOrUnmutedMedia; - const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); const muteAudioBtn = document.getElementById('muteAudioBtn'); @@ -83,10 +82,10 @@ let roomName = null; element.remove(); })}, track => { if (track.kind === 'audio') { - audioPreview.appendChild(track.attach()) + audioPreview.appendChild(track.attach()); } if (track.kind === 'video') { - videoPreview.appendChild(track.attach()) + videoPreview.appendChild(track.attach()); } }); })); From 09630ce4185a023ec6ca0079bc3a05111fde239d Mon Sep 17 00:00:00 2001 From: joma Date: Wed, 5 Feb 2020 15:04:58 -0800 Subject: [PATCH 48/89] Removed SVGs replaced with font awesome icons, refactored logic for mute buttons --- .../public/icons/pause-fill.svg | 3 -- .../public/icons/play-fill.svg | 3 -- .../public/icons/volume-mute-fill.svg | 4 -- .../public/icons/volume-up-fill.svg | 6 --- examples/localmediacontrols/public/index.css | 10 +++- examples/localmediacontrols/public/index.html | 27 +++++----- examples/localmediacontrols/src/index.js | 49 +++++++++++-------- 7 files changed, 52 insertions(+), 50 deletions(-) delete mode 100755 examples/localmediacontrols/public/icons/pause-fill.svg delete mode 100755 examples/localmediacontrols/public/icons/play-fill.svg delete mode 100755 examples/localmediacontrols/public/icons/volume-mute-fill.svg delete mode 100755 examples/localmediacontrols/public/icons/volume-up-fill.svg diff --git a/examples/localmediacontrols/public/icons/pause-fill.svg b/examples/localmediacontrols/public/icons/pause-fill.svg deleted file mode 100755 index a5018882..00000000 --- a/examples/localmediacontrols/public/icons/pause-fill.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/localmediacontrols/public/icons/play-fill.svg b/examples/localmediacontrols/public/icons/play-fill.svg deleted file mode 100755 index f6585fbc..00000000 --- a/examples/localmediacontrols/public/icons/play-fill.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/examples/localmediacontrols/public/icons/volume-mute-fill.svg b/examples/localmediacontrols/public/icons/volume-mute-fill.svg deleted file mode 100755 index 2b49b56b..00000000 --- a/examples/localmediacontrols/public/icons/volume-mute-fill.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/examples/localmediacontrols/public/icons/volume-up-fill.svg b/examples/localmediacontrols/public/icons/volume-up-fill.svg deleted file mode 100755 index f0a15a31..00000000 --- a/examples/localmediacontrols/public/icons/volume-up-fill.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/examples/localmediacontrols/public/index.css b/examples/localmediacontrols/public/index.css index 5bf6edc1..f271261b 100644 --- a/examples/localmediacontrols/public/index.css +++ b/examples/localmediacontrols/public/index.css @@ -63,7 +63,6 @@ div#userControls > button { transition-duration: 0.4s; } - div#userControls > button:hover { background-color: #e7e7e7; color: black @@ -80,6 +79,15 @@ div#audiopreview { margin: auto; } +div#audiopreview > span > i#activeIcon { + display: flex; + font-size: 50px; +} + +div#audiopreview > span > i#inactiveIcon { + display:none; +} + div#videopreview { display: flex; justify-content: center; diff --git a/examples/localmediacontrols/public/index.html b/examples/localmediacontrols/public/index.html index f29e57e7..d950a393 100644 --- a/examples/localmediacontrols/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -7,10 +7,7 @@ - - - - +
@@ -28,20 +25,26 @@

-

P1 Controls

+

Local Media Controls

- - - - + +
-

P2 View

-
-
+

RemoteParticipant View

+
+ + + + + + +
+
+
diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 959f073c..351718b8 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -13,10 +13,6 @@ const participantMutedOrUnmutedMedia = helpers.participantMutedOrUnmutedMedia; const audioPreview = document.getElementById('audiopreview'); const videoPreview = document.getElementById('videopreview'); -const muteAudioBtn = document.getElementById('muteAudioBtn'); -const muteVideoBtn = document.getElementById('muteVideoBtn'); -const unmuteAudioBtn = document.getElementById('unmuteAudioBtn'); -const unmuteVideoBtn = document.getElementById('unmuteVideoBtn'); let roomName = null; (async function(){ @@ -44,27 +40,38 @@ let roomName = null; // Muting audio track and video tracks click handlers muteAudioBtn.onclick = () => { - muteYourAudio(roomP1); - muteAudioBtn.style.display = 'none'; - unmuteAudioBtn.style.display = 'flex'; - } + const mute = !muteAudioBtn.classList.contains('muted'); + const activeIcon = document.getElementById('activeIcon'); + const inactiveIcon = document.getElementById('inactiveIcon') + + if(mute) { + muteYourAudio(roomP1); + muteAudioBtn.classList.add('muted') + muteAudioBtn.innerText = 'Unmute Audio' + activeIcon.id = 'inactiveIcon' + inactiveIcon.id = 'activeIcon' - unmuteAudioBtn.onclick = () => { - unmuteYourAudio(roomP1); - unmuteAudioBtn.style.display = 'none'; - muteAudioBtn.style.display = 'flex'; + } else { + unmuteYourAudio(roomP1); + muteAudioBtn.classList.remove('muted') + muteAudioBtn.innerText = 'Mute Audio' + activeIcon.id = 'inactiveIcon' + inactiveIcon.id = 'activeIcon' + } } muteVideoBtn.onclick = () => { - muteYourVideo(roomP1); - muteVideoBtn.style.display = 'none'; - unmuteVideoBtn.style.display = 'flex'; - } - - unmuteVideoBtn.onclick = () => { - unmuteYourVideo(roomP1); - unmuteVideoBtn.style.display = 'none'; - muteVideoBtn.style.display = 'flex'; + const mute = !muteVideoBtn.classList.contains('muted') + + if(mute) { + muteYourVideo(roomP1); + muteVideoBtn.classList.add('muted') + muteVideoBtn.innerText = 'Start Video' + } else { + unmuteYourVideo(roomP1); + muteVideoBtn.classList.remove('muted') + muteVideoBtn.innerText = 'Stop Video' + } } // Starts video upon P2 joining room From 6b15d322efcc285af7a5c2b3f7848b0c7f100055 Mon Sep 17 00:00:00 2001 From: joma Date: Wed, 5 Feb 2020 15:11:03 -0800 Subject: [PATCH 49/89] Button restyling --- examples/localmediacontrols/public/index.css | 5 ----- examples/localmediacontrols/public/index.html | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/examples/localmediacontrols/public/index.css b/examples/localmediacontrols/public/index.css index f271261b..89a37d0f 100644 --- a/examples/localmediacontrols/public/index.css +++ b/examples/localmediacontrols/public/index.css @@ -63,11 +63,6 @@ div#userControls > button { transition-duration: 0.4s; } -div#userControls > button:hover { - background-color: #e7e7e7; - color: black -} - div#audiopreview { display: flex; justify-content: center; diff --git a/examples/localmediacontrols/public/index.html b/examples/localmediacontrols/public/index.html index d950a393..e6167d65 100644 --- a/examples/localmediacontrols/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -27,8 +27,8 @@

Local Media Controls

- - + +

From f408383d7a665e53104bd39ade2e2399baea90fb Mon Sep 17 00:00:00 2001 From: joma Date: Thu, 6 Feb 2020 11:50:18 -0800 Subject: [PATCH 50/89] Fixed indentation and added all my semicolons --- examples/localmediacontrols/src/index.js | 37 ++++++++++++------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 351718b8..91c3692c 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -42,44 +42,44 @@ let roomName = null; muteAudioBtn.onclick = () => { const mute = !muteAudioBtn.classList.contains('muted'); const activeIcon = document.getElementById('activeIcon'); - const inactiveIcon = document.getElementById('inactiveIcon') + const inactiveIcon = document.getElementById('inactiveIcon'); if(mute) { muteYourAudio(roomP1); - muteAudioBtn.classList.add('muted') - muteAudioBtn.innerText = 'Unmute Audio' - activeIcon.id = 'inactiveIcon' - inactiveIcon.id = 'activeIcon' + muteAudioBtn.classList.add('muted'); + muteAudioBtn.innerText = 'Unmute Audio'; + activeIcon.id = 'inactiveIcon'; + inactiveIcon.id = 'activeIcon'; } else { unmuteYourAudio(roomP1); - muteAudioBtn.classList.remove('muted') - muteAudioBtn.innerText = 'Mute Audio' - activeIcon.id = 'inactiveIcon' - inactiveIcon.id = 'activeIcon' + muteAudioBtn.classList.remove('muted'); + muteAudioBtn.innerText = 'Mute Audio'; + activeIcon.id = 'inactiveIcon'; + inactiveIcon.id = 'activeIcon'; } } muteVideoBtn.onclick = () => { - const mute = !muteVideoBtn.classList.contains('muted') + const mute = !muteVideoBtn.classList.contains('muted'); if(mute) { muteYourVideo(roomP1); - muteVideoBtn.classList.add('muted') - muteVideoBtn.innerText = 'Start Video' + muteVideoBtn.classList.add('muted'); + muteVideoBtn.innerText = 'Start Video'; } else { unmuteYourVideo(roomP1); - muteVideoBtn.classList.remove('muted') - muteVideoBtn.innerText = 'Stop Video' + muteVideoBtn.classList.remove('muted'); + muteVideoBtn.innerText = 'Stop Video'; } } // Starts video upon P2 joining room roomP2.on('trackSubscribed', (track => { - if(track.isEnabled) { - if(track.kind === 'audio') { + if (track.isEnabled) { + if (track.kind === 'audio') { audioPreview.appendChild(track.attach()); - }else{ + } else{ videoPreview.appendChild(track.attach()); } } @@ -87,7 +87,8 @@ let roomName = null; participantMutedOrUnmutedMedia(roomP2, track => { track.detach().forEach(element => { element.remove(); - })}, track => { + }); + }, track => { if (track.kind === 'audio') { audioPreview.appendChild(track.attach()); } From 219b48d29fccc05b53a85392722d4eebfe9681f2 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Mon, 10 Feb 2020 11:30:48 -0800 Subject: [PATCH 51/89] Updating twilio-video.js to ^2.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c64f30b4..35d79d5c 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "2.0.0" + "twilio-video": "^2.1.0" }, "devDependencies": { "browserify": "^14.3.0", From 77312da44dcdf7610593569ad420d8690aceda56 Mon Sep 17 00:00:00 2001 From: joma Date: Thu, 6 Feb 2020 11:23:27 -0800 Subject: [PATCH 52/89] Added updated styling to be more consistent with examples --- quickstart/public/index.css | 102 +++++++++-------------------------- quickstart/public/index.html | 39 ++++++++------ quickstart/src/index.js | 4 +- 3 files changed, 51 insertions(+), 94 deletions(-) diff --git a/quickstart/public/index.css b/quickstart/public/index.css index 22371cc1..6c69091d 100644 --- a/quickstart/public/index.css +++ b/quickstart/public/index.css @@ -1,25 +1,9 @@ @import url(https://fonts.googleapis.com/css?family=Share+Tech+Mono); -body, -p { - color: #ffffff; -} -body, h1 { - color: #ffffff; - -} -body, -a { - color: #ffffff; -} - -body, -a:hover { - color: red; -} - -body { - background: #272726; +div#controls { + display: flex; + justify-content: center; + flex-direction: row; } div#remote-media { @@ -39,18 +23,8 @@ div#remote-media video { background-repeat: no-repeat; } -div#controls { - padding: 3em; - max-width: 1200px; - margin: 0 auto; -} - -div#controls div { - float: left; -} - div#controls div#room-controls, -div#controls div#preview { +div#controls div#preview div#log{ width: 16em; margin: 0 1.5em; text-align: center; @@ -59,43 +33,20 @@ div#controls div#preview { div#controls p.instructions { text-align: left; margin-bottom: 1em; - font-family: Helvetica-LightOblique, Helvetica, sans-serif; - font-style: oblique; font-size: 1.25em; color: #777776; } -div#controls button { - width: 15em; - height: 2.5em; - margin-top: 1.75em; - border-radius: 1em; - font-family: "Helvetica Light", Helvetica, sans-serif; - font-size: .8em; - font-weight: lighter; - outline: 0; -} - -div#controls div#room-controls input { - font-family: Helvetica-LightOblique, Helvetica, sans-serif; - font-style: oblique; - font-size: 1em; -} - -div#controls button:active { - position: relative; - top: 1px; -} - div#controls div#preview div#local-media { width: 270px; height: 202px; border: 1px solid #cececc; box-sizing: border-box; - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjgwcHgiIGhlaWdodD0iODBweCIgdmlld0JveD0iMCAwIDgwIDgwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggMy4zLjEgKDEyMDAyKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5GaWxsIDUxICsgRmlsbCA1MjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJjdW1tYWNrIiBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTU5LjAwMDAwMCwgLTE3NDYuMDAwMDAwKSIgZmlsbD0iI0ZGRkZGRiI+CiAgICAgICAgICAgIDxnIGlkPSJGaWxsLTUxLSstRmlsbC01MiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU5LjAwMDAwMCwgMTc0Ni4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zOS42ODYsMC43MyBDMTcuODUsMC43MyAwLjA4NSwxOC41IDAuMDg1LDQwLjMzIEMwLjA4NSw2Mi4xNyAxNy44NSw3OS45MyAzOS42ODYsNzkuOTMgQzYxLjUyMiw3OS45MyA3OS4yODcsNjIuMTcgNzkuMjg3LDQwLjMzIEM3OS4yODcsMTguNSA2MS41MjIsMC43MyAzOS42ODYsMC43MyBMMzkuNjg2LDAuNzMgWiBNMzkuNjg2LDEuNzMgQzYxLjAwNSwxLjczIDc4LjI4NywxOS4wMiA3OC4yODcsNDAuMzMgQzc4LjI4Nyw2MS42NSA2MS4wMDUsNzguOTMgMzkuNjg2LDc4LjkzIEMxOC4zNjcsNzguOTMgMS4wODUsNjEuNjUgMS4wODUsNDAuMzMgQzEuMDg1LDE5LjAyIDE4LjM2NywxLjczIDM5LjY4NiwxLjczIEwzOS42ODYsMS43MyBaIiBpZD0iRmlsbC01MSI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTQ3Ljk2LDUzLjMzNSBMNDcuOTYsNTIuODM1IEwyMC4wOTMsNTIuODM1IEwyMC4wOTMsMjcuODI1IEw0Ny40NiwyNy44MjUgTDQ3LjQ2LDM4LjI1NSBMNTkuMjc5LDMwLjgwNSBMNTkuMjc5LDQ5Ljg1NSBMNDcuNDYsNDIuNDA1IEw0Ny40Niw1My4zMzUgTDQ3Ljk2LDUzLjMzNSBMNDcuOTYsNTIuODM1IEw0Ny45Niw1My4zMzUgTDQ4LjQ2LDUzLjMzNSBMNDguNDYsNDQuMjE1IEw2MC4yNzksNTEuNjY1IEw2MC4yNzksMjguOTk1IEw0OC40NiwzNi40NDUgTDQ4LjQ2LDI2LjgyNSBMMTkuMDkzLDI2LjgyNSBMMTkuMDkzLDUzLjgzNSBMNDguNDYsNTMuODM1IEw0OC40Niw1My4zMzUgTDQ3Ljk2LDUzLjMzNSIgaWQ9IkZpbGwtNTIiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+); - background-position: center; - background-repeat: no-repeat; margin: 0 auto; + background-color: lightgrey !important; + background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); + background-position: 50%; + background-repeat: no-repeat; } div#controls div#preview div#local-media video { @@ -104,10 +55,8 @@ div#controls div#preview div#local-media video { border: none; } -div#controls div#preview button#button-preview { - background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE3cHgiIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDE3IDEyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnNrZXRjaD0iaHR0cDovL3d3dy5ib2hlbWlhbmNvZGluZy5jb20vc2tldGNoL25zIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggMy4zLjEgKDEyMDAyKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5GaWxsIDM0PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSI+CiAgICAgICAgPGcgaWQ9ImN1bW1hY2siIHNrZXRjaDp0eXBlPSJNU0xheWVyR3JvdXAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjUuMDAwMDAwLCAtMTkwOS4wMDAwMDApIiBmaWxsPSIjMEEwQjA5Ij4KICAgICAgICAgICAgPHBhdGggZD0iTTEzNi40NzEsMTkxOS44NyBMMTM2LjQ3MSwxOTE5LjYyIEwxMjUuNzY3LDE5MTkuNjIgTDEyNS43NjcsMTkxMC4wOCBMMTM2LjIyMSwxOTEwLjA4IEwxMzYuMjIxLDE5MTQuMTUgTDE0MC43ODUsMTkxMS4yNyBMMTQwLjc4NSwxOTE4LjQyIEwxMzYuMjIxLDE5MTUuNTUgTDEzNi4yMjEsMTkxOS44NyBMMTM2LjQ3MSwxOTE5Ljg3IEwxMzYuNDcxLDE5MTkuNjIgTDEzNi40NzEsMTkxOS44NyBMMTM2LjcyMSwxOTE5Ljg3IEwxMzYuNzIxLDE5MTYuNDUgTDE0MS4yODUsMTkxOS4zMyBMMTQxLjI4NSwxOTEwLjM3IEwxMzYuNzIxLDE5MTMuMjQgTDEzNi43MjEsMTkwOS41OCBMMTI1LjI2NywxOTA5LjU4IEwxMjUuMjY3LDE5MjAuMTIgTDEzNi43MjEsMTkyMC4xMiBMMTM2LjcyMSwxOTE5Ljg3IEwxMzYuNDcxLDE5MTkuODciIGlkPSJGaWxsLTM0IiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj48L3BhdGg+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4=)1em center no-repeat #fff; - border: none; - padding-left: 1.5em; +button#button-preview { + width: 270px; } div#controls div#log { @@ -115,37 +64,38 @@ div#controls div#log { } div#controls div#room-controls { - display: none; + display: flex; } div#controls div#room-controls input { width: 100%; height: 2.5em; padding: .5em; - display: block; + text-align: center; } -div#controls div#room-controls button { - color: #fff; - background: 0 0; - border: 1px solid #686865; +div#controls div#room-controls > button#button-leave { + display: none; + text-align: center; + margin-top: 0; } -div#controls div#room-controls button#button-leave { - display: none; +div#room-controls > button { + text-align: center; } -div#controls div#log { - width: 35%; - height: 9.5em; - margin-top: 2.75em; +div#log { + width: 25em; + height: 15em; + min-height: 100%; + max-height: 100%; + margin-top: 3.125em; text-align: left; padding: 1.5em; - float: right; overflow-y: scroll; } -div#controls div#log p { +div#log p { color: #686865; font-family: 'Share Tech Mono', 'Courier New', Courier, fixed-width; font-size: 1.25em; diff --git a/quickstart/public/index.html b/quickstart/public/index.html index 7b8669ab..2fd61cc3 100644 --- a/quickstart/public/index.html +++ b/quickstart/public/index.html @@ -3,25 +3,32 @@ Twilio Video - Video Quickstart + -

Welcome to Twilio Video quickstart

-

For more examples click here

-
-
-
-

Hello Beautiful

-
- +
+
+

Welcome to Twilio Video quickstart

+

For more examples click here

+
-
-

Room Name:

- - - -
-
-
+
+
+
+

Hello Beautiful

+
+
+ +
+
+
+

Room Name

+ + + +
+
+
diff --git a/quickstart/src/index.js b/quickstart/src/index.js index 1f7c2030..d3e6f05f 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -117,7 +117,7 @@ function roomJoined(room) { log("Joined as '" + identity + "'"); document.getElementById('button-join').style.display = 'none'; - document.getElementById('button-leave').style.display = 'inline'; + document.getElementById('button-leave').style.display = 'block'; // Attach LocalParticipant's Tracks, if not already attached. var previewContainer = document.getElementById('local-media'); @@ -157,7 +157,7 @@ function roomJoined(room) { detachParticipantTracks(room.localParticipant); room.participants.forEach(detachParticipantTracks); activeRoom = null; - document.getElementById('button-join').style.display = 'inline'; + document.getElementById('button-join').style.display = 'block'; document.getElementById('button-leave').style.display = 'none'; }); } From 07e73419d806ca4e201a09247b663a0553a6a62d Mon Sep 17 00:00:00 2001 From: joma Date: Thu, 6 Feb 2020 15:52:13 -0800 Subject: [PATCH 53/89] Added icon next to preview my camera button --- quickstart/public/index.css | 19 +++++-- quickstart/public/index.html | 61 +++++++++++++------- quickstart/src/index.js | 105 +++++++++++++++++++---------------- 3 files changed, 115 insertions(+), 70 deletions(-) diff --git a/quickstart/public/index.css b/quickstart/public/index.css index 6c69091d..ac6fd715 100644 --- a/quickstart/public/index.css +++ b/quickstart/public/index.css @@ -24,12 +24,23 @@ div#remote-media video { } div#controls div#room-controls, -div#controls div#preview div#log{ +div#controls div#preview div#log { width: 16em; margin: 0 1.5em; text-align: center; } +div#controls div#preview button#button-preview { + display: flex; + justify-content: center; + align-items: center; +} + +div#controls div#preview button#button-preview img#button-preview-image { + padding-right: 1em; + color: white; +} + div#controls p.instructions { text-align: left; margin-bottom: 1em; @@ -44,7 +55,7 @@ div#controls div#preview div#local-media { box-sizing: border-box; margin: 0 auto; background-color: lightgrey !important; - background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); + background-image: url("https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg"); background-position: 50%; background-repeat: no-repeat; } @@ -70,7 +81,7 @@ div#controls div#room-controls { div#controls div#room-controls input { width: 100%; height: 2.5em; - padding: .5em; + padding: 0.5em; text-align: center; } @@ -97,7 +108,7 @@ div#log { div#log p { color: #686865; - font-family: 'Share Tech Mono', 'Courier New', Courier, fixed-width; + font-family: "Share Tech Mono", "Courier New", Courier, fixed-width; font-size: 1.25em; line-height: 1.25em; margin-left: 1em; diff --git a/quickstart/public/index.html b/quickstart/public/index.html index 2fd61cc3..d1dbf136 100644 --- a/quickstart/public/index.html +++ b/quickstart/public/index.html @@ -1,36 +1,59 @@ - - Twilio Video - Video Quickstart - - - - -
-
-

Welcome to Twilio Video quickstart

-

For more examples click here

+ + Twilio Video - Video Quickstart + + + + +
+
+

Welcome to Twilio Video Quickstart

+

For more examples click here

+
-
-
+

Hello Beautiful

- +

Room Name

- - + +
-
+
- - - + + + diff --git a/quickstart/src/index.js b/quickstart/src/index.js index d3e6f05f..fae20a27 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -1,13 +1,12 @@ -'use strict'; +"use strict"; -var Video = require('twilio-video'); +var Video = require("twilio-video"); var activeRoom; var previewTracks; var identity; var roomName; - // Attach the Track to the DOM. function attachTrack(track, container) { container.appendChild(track.attach()); @@ -27,32 +26,39 @@ function detachTrack(track) { }); } +// Appends remoteParticipant name to the DOM +function appendName(identity, container) { + const name = document.createTextNode(identity); + container.appendChild(name); +} + // A new RemoteTrack was published to the Room. function trackPublished(publication, container) { if (publication.isSubscribed) { attachTrack(publication.track, container); } - publication.on('subscribed', function(track) { - log('Subscribed to ' + publication.kind + ' track'); + publication.on("subscribed", function(track) { + log("Subscribed to " + publication.kind + " track"); attachTrack(track, container); }); - publication.on('unsubscribed', detachTrack); + publication.on("unsubscribed", detachTrack); } // A RemoteTrack was unpublished from the Room. function trackUnpublished(publication) { - log(publication.kind + ' track was unpublished.'); + log(publication.kind + " track was unpublished."); } // A new RemoteParticipant joined the Room function participantConnected(participant, container) { + appendName(participant.identity, container); participant.tracks.forEach(function(publication) { trackPublished(publication, container); }); - participant.on('trackPublished', function(publication) { + participant.on("trackPublished", function(publication) { trackPublished(publication, container); }); - participant.on('trackUnpublished', trackUnpublished); + participant.on("trackUnpublished", trackUnpublished); } // Detach the Participant's Tracks from the DOM. @@ -63,25 +69,25 @@ function detachParticipantTracks(participant) { // When we are about to transition away from this page, disconnect // from the room, if joined. -window.addEventListener('beforeunload', leaveRoomIfJoined); +window.addEventListener("beforeunload", leaveRoomIfJoined); // Obtain a token from the server in order to connect to the Room. -$.getJSON('/token', function(data) { +$.getJSON("/token", function(data) { identity = data.identity; - document.getElementById('room-controls').style.display = 'block'; + document.getElementById("room-controls").style.display = "block"; // Bind button to join Room. - document.getElementById('button-join').onclick = function() { - roomName = document.getElementById('room-name').value; + document.getElementById("button-join").onclick = function() { + roomName = document.getElementById("room-name").value; if (!roomName) { - alert('Please enter a room name.'); + alert("Please enter a room name."); return; } log("Joining room '" + roomName + "'..."); var connectOptions = { name: roomName, - logLevel: 'debug' + logLevel: "debug" }; if (previewTracks) { @@ -91,24 +97,26 @@ $.getJSON('/token', function(data) { // Join the Room with the token from the server and the // LocalParticipant's Tracks. Video.connect(data.token, connectOptions).then(roomJoined, function(error) { - log('Could not connect to Twilio: ' + error.message); + log("Could not connect to Twilio: " + error.message); }); }; // Bind button to leave Room. - document.getElementById('button-leave').onclick = function() { - log('Leaving room...'); + document.getElementById("button-leave").onclick = function() { + log("Leaving room..."); activeRoom.disconnect(); }; }); // Get the Participant's Tracks. function getTracks(participant) { - return Array.from(participant.tracks.values()).filter(function(publication) { - return publication.track; - }).map(function(publication) { - return publication.track; - }); + return Array.from(participant.tracks.values()) + .filter(function(publication) { + return publication.track; + }) + .map(function(publication) { + return publication.track; + }); } // Successfully connected! @@ -116,38 +124,38 @@ function roomJoined(room) { window.room = activeRoom = room; log("Joined as '" + identity + "'"); - document.getElementById('button-join').style.display = 'none'; - document.getElementById('button-leave').style.display = 'block'; + document.getElementById("button-join").style.display = "none"; + document.getElementById("button-leave").style.display = "block"; // Attach LocalParticipant's Tracks, if not already attached. - var previewContainer = document.getElementById('local-media'); - if (!previewContainer.querySelector('video')) { + var previewContainer = document.getElementById("local-media"); + if (!previewContainer.querySelector("video")) { attachTracks(getTracks(room.localParticipant), previewContainer); } // Attach the Tracks of the Room's Participants. - var remoteMediaContainer = document.getElementById('remote-media'); + var remoteMediaContainer = document.getElementById("remote-media"); room.participants.forEach(function(participant) { log("Already in Room: '" + participant.identity + "'"); participantConnected(participant, remoteMediaContainer); }); // When a Participant joins the Room, log the event. - room.on('participantConnected', function(participant) { + room.on("participantConnected", function(participant) { log("Joining: '" + participant.identity + "'"); participantConnected(participant, remoteMediaContainer); }); // When a Participant leaves the Room, detach its Tracks. - room.on('participantDisconnected', function(participant) { + room.on("participantDisconnected", function(participant) { log("RemoteParticipant '" + participant.identity + "' left the room"); detachParticipantTracks(participant); }); // Once the LocalParticipant leaves the room, detach the Tracks // of all Participants, including that of the LocalParticipant. - room.on('disconnected', function() { - log('Left'); + room.on("disconnected", function() { + log("Left"); if (previewTracks) { previewTracks.forEach(function(track) { track.stop(); @@ -157,33 +165,36 @@ function roomJoined(room) { detachParticipantTracks(room.localParticipant); room.participants.forEach(detachParticipantTracks); activeRoom = null; - document.getElementById('button-join').style.display = 'block'; - document.getElementById('button-leave').style.display = 'none'; + document.getElementById("button-join").style.display = "block"; + document.getElementById("button-leave").style.display = "none"; }); } // Preview LocalParticipant's Tracks. -document.getElementById('button-preview').onclick = function() { +document.getElementById("button-preview").onclick = function() { var localTracksPromise = previewTracks ? Promise.resolve(previewTracks) : Video.createLocalTracks(); - localTracksPromise.then(function(tracks) { - window.previewTracks = previewTracks = tracks; - var previewContainer = document.getElementById('local-media'); - if (!previewContainer.querySelector('video')) { - attachTracks(tracks, previewContainer); + localTracksPromise.then( + function(tracks) { + window.previewTracks = previewTracks = tracks; + var previewContainer = document.getElementById("local-media"); + if (!previewContainer.querySelector("video")) { + attachTracks(tracks, previewContainer); + } + }, + function(error) { + console.error("Unable to access local media", error); + log("Unable to access Camera and Microphone"); } - }, function(error) { - console.error('Unable to access local media', error); - log('Unable to access Camera and Microphone'); - }); + ); }; // Activity log. function log(message) { - var logDiv = document.getElementById('log'); - logDiv.innerHTML += '

> ' + message + '

'; + var logDiv = document.getElementById("log"); + logDiv.innerHTML += "

> " + message + "

"; logDiv.scrollTop = logDiv.scrollHeight; } From 6ee67dc655d16f46ee123479c57cbf3b472bcb84 Mon Sep 17 00:00:00 2001 From: joma Date: Fri, 7 Feb 2020 17:00:05 -0800 Subject: [PATCH 54/89] Removal of name on leaving room for both local and remote participant --- quickstart/public/index.css | 9 ++++++--- quickstart/src/index.js | 30 ++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/quickstart/public/index.css b/quickstart/public/index.css index ac6fd715..1904f54d 100644 --- a/quickstart/public/index.css +++ b/quickstart/public/index.css @@ -7,6 +7,9 @@ div#controls { } div#remote-media { + display: flex; + flex-direction: row; + justify-content: center; height: 43%; width: 100%; background-color: #fff; @@ -16,9 +19,9 @@ div#remote-media { div#remote-media video { border: 1px solid #272726; - margin: 3em 2em; - height: 70%; - max-width: 27% !important; + /* margin: 3em 2em; */ + /* height: 70%; */ + max-width: 80% !important; background-color: #272726; background-repeat: no-repeat; } diff --git a/quickstart/src/index.js b/quickstart/src/index.js index fae20a27..cbafa5c5 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -28,10 +28,25 @@ function detachTrack(track) { // Appends remoteParticipant name to the DOM function appendName(identity, container) { - const name = document.createTextNode(identity); + const name = document.createElement("p"); + name.id = `participantName-${identity}`; + name.className = "instructions"; + name.textContent = identity; container.appendChild(name); } +// Removes remoteParticipant name from the DOM +function removeName(participant) { + if (participant) { + let { identity } = participant; + const container = document.getElementById( + `participantContainer-${identity}` + ); + const name = document.getElementById(`participantName-${identity}`); + container.removeChild(name); + } +} + // A new RemoteTrack was published to the Room. function trackPublished(publication, container) { if (publication.isSubscribed) { @@ -51,12 +66,17 @@ function trackUnpublished(publication) { // A new RemoteParticipant joined the Room function participantConnected(participant, container) { - appendName(participant.identity, container); + let selfContainer = document.createElement("div"); + selfContainer.id = `participantContainer-${participant.identity}`; + + container.appendChild(selfContainer); + appendName(participant.identity, selfContainer); + participant.tracks.forEach(function(publication) { - trackPublished(publication, container); + trackPublished(publication, selfContainer); }); participant.on("trackPublished", function(publication) { - trackPublished(publication, container); + trackPublished(publication, selfContainer); }); participant.on("trackUnpublished", trackUnpublished); } @@ -150,6 +170,7 @@ function roomJoined(room) { room.on("participantDisconnected", function(participant) { log("RemoteParticipant '" + participant.identity + "' left the room"); detachParticipantTracks(participant); + removeName(participant); }); // Once the LocalParticipant leaves the room, detach the Tracks @@ -164,6 +185,7 @@ function roomJoined(room) { } detachParticipantTracks(room.localParticipant); room.participants.forEach(detachParticipantTracks); + room.participants.forEach(removeName); activeRoom = null; document.getElementById("button-join").style.display = "block"; document.getElementById("button-leave").style.display = "none"; From c851e6972f3204f540c401073b8778a92db63188 Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 10 Feb 2020 11:47:50 -0800 Subject: [PATCH 55/89] Removing div containers instead of just the name --- .env.template | 4 +- README.md | 6 +-- quickstart/public/index.css | 6 +-- quickstart/src/index.js | 87 ++++++++++++++++++------------------- server/index.js | 8 ++-- 5 files changed, 55 insertions(+), 56 deletions(-) diff --git a/.env.template b/.env.template index 9bdf434a..a2a0b023 100644 --- a/.env.template +++ b/.env.template @@ -1,3 +1,3 @@ TWILIO_ACCOUNT_SID=ACxxxxxxxxxx -TWILIO_API_KEY=SKxxxxxxxxxx -TWILIO_API_SECRET=xxxxxxxxxx +TWILIO_API_KEY_SID=SKxxxxxxxxxx +TWILIO_API_KEY_SECRET=xxxxxxxxxx diff --git a/README.md b/README.md index 077310c3..ad227a4e 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,12 @@ own video apps with Twilio Video. Before we begin, we need to collect all the config values we need to run the application: * Account SID: Your primary Twilio account identifier - find this [in the console here](https://www.twilio.com/console). -* API Key: Used to authenticate - [generate one here](https://www.twilio.com/console/runtime/api-keys). -* API Secret: Used to authenticate - [just like the above, you'll get one here](https://www.twilio.com/console/runtime/api-keys). +* API Key Sid: Used to authenticate - [generate one here](https://www.twilio.com/console/runtime/api-keys). +* API Key Secret: Used to authenticate - [just like the above, you'll get one here](https://www.twilio.com/console/runtime/api-keys). ## A Note on API Keys -When you generate an API key pair at the URLs above, your API Secret will only +When you generate an API key pair at the URLs above, your API Key Secret will only be shown once - make sure to save this in a secure location, or possibly your `~/.bash_profile`. diff --git a/quickstart/public/index.css b/quickstart/public/index.css index 1904f54d..83db7f58 100644 --- a/quickstart/public/index.css +++ b/quickstart/public/index.css @@ -19,11 +19,11 @@ div#remote-media { div#remote-media video { border: 1px solid #272726; - /* margin: 3em 2em; */ - /* height: 70%; */ max-width: 80% !important; - background-color: #272726; background-repeat: no-repeat; + background-color: lightgrey !important; + background-image: url("https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg"); + background-position: 50%; } div#controls div#room-controls, diff --git a/quickstart/src/index.js b/quickstart/src/index.js index cbafa5c5..9b4f67a6 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -1,6 +1,6 @@ -"use strict"; +'use strict'; -var Video = require("twilio-video"); +var Video = require('twilio-video'); var activeRoom; var previewTracks; @@ -19,31 +19,30 @@ function attachTracks(tracks, container) { }); } -// Detach given track from the DOM +// Detach given track from the DOM. function detachTrack(track) { track.detach().forEach(function(element) { element.remove(); }); } -// Appends remoteParticipant name to the DOM +// Appends remoteParticipant name to the DOM. function appendName(identity, container) { - const name = document.createElement("p"); + const name = document.createElement('p'); name.id = `participantName-${identity}`; - name.className = "instructions"; + name.className = 'instructions'; name.textContent = identity; container.appendChild(name); } -// Removes remoteParticipant name from the DOM +// Removes remoteParticipant container from the DOM. function removeName(participant) { if (participant) { let { identity } = participant; const container = document.getElementById( `participantContainer-${identity}` ); - const name = document.getElementById(`participantName-${identity}`); - container.removeChild(name); + container.parentNode.removeChild(container); } } @@ -52,21 +51,21 @@ function trackPublished(publication, container) { if (publication.isSubscribed) { attachTrack(publication.track, container); } - publication.on("subscribed", function(track) { - log("Subscribed to " + publication.kind + " track"); + publication.on('subscribed', function(track) { + log('Subscribed to ' + publication.kind + ' track'); attachTrack(track, container); }); - publication.on("unsubscribed", detachTrack); + publication.on('unsubscribed', detachTrack); } // A RemoteTrack was unpublished from the Room. function trackUnpublished(publication) { - log(publication.kind + " track was unpublished."); + log(publication.kind + ' track was unpublished.'); } // A new RemoteParticipant joined the Room function participantConnected(participant, container) { - let selfContainer = document.createElement("div"); + let selfContainer = document.createElement('div'); selfContainer.id = `participantContainer-${participant.identity}`; container.appendChild(selfContainer); @@ -75,10 +74,10 @@ function participantConnected(participant, container) { participant.tracks.forEach(function(publication) { trackPublished(publication, selfContainer); }); - participant.on("trackPublished", function(publication) { + participant.on('trackPublished', function(publication) { trackPublished(publication, selfContainer); }); - participant.on("trackUnpublished", trackUnpublished); + participant.on('trackUnpublished', trackUnpublished); } // Detach the Participant's Tracks from the DOM. @@ -89,25 +88,25 @@ function detachParticipantTracks(participant) { // When we are about to transition away from this page, disconnect // from the room, if joined. -window.addEventListener("beforeunload", leaveRoomIfJoined); +window.addEventListener('beforeunload', leaveRoomIfJoined); // Obtain a token from the server in order to connect to the Room. -$.getJSON("/token", function(data) { +$.getJSON('/token', function(data) { identity = data.identity; - document.getElementById("room-controls").style.display = "block"; + document.getElementById('room-controls').style.display = 'block'; // Bind button to join Room. - document.getElementById("button-join").onclick = function() { - roomName = document.getElementById("room-name").value; + document.getElementById('button-join').onclick = function() { + roomName = document.getElementById('room-name').value; if (!roomName) { - alert("Please enter a room name."); + alert('Please enter a room name.'); return; } log("Joining room '" + roomName + "'..."); var connectOptions = { name: roomName, - logLevel: "debug" + logLevel: 'debug' }; if (previewTracks) { @@ -117,13 +116,13 @@ $.getJSON("/token", function(data) { // Join the Room with the token from the server and the // LocalParticipant's Tracks. Video.connect(data.token, connectOptions).then(roomJoined, function(error) { - log("Could not connect to Twilio: " + error.message); + log('Could not connect to Twilio: ' + error.message); }); }; // Bind button to leave Room. - document.getElementById("button-leave").onclick = function() { - log("Leaving room..."); + document.getElementById('button-leave').onclick = function() { + log('Leaving room...'); activeRoom.disconnect(); }; }); @@ -144,30 +143,30 @@ function roomJoined(room) { window.room = activeRoom = room; log("Joined as '" + identity + "'"); - document.getElementById("button-join").style.display = "none"; - document.getElementById("button-leave").style.display = "block"; + document.getElementById('button-join').style.display = 'none'; + document.getElementById('button-leave').style.display = 'block'; // Attach LocalParticipant's Tracks, if not already attached. - var previewContainer = document.getElementById("local-media"); - if (!previewContainer.querySelector("video")) { + var previewContainer = document.getElementById('local-media'); + if (!previewContainer.querySelector('video')) { attachTracks(getTracks(room.localParticipant), previewContainer); } // Attach the Tracks of the Room's Participants. - var remoteMediaContainer = document.getElementById("remote-media"); + var remoteMediaContainer = document.getElementById('remote-media'); room.participants.forEach(function(participant) { log("Already in Room: '" + participant.identity + "'"); participantConnected(participant, remoteMediaContainer); }); // When a Participant joins the Room, log the event. - room.on("participantConnected", function(participant) { + room.on('participantConnected', function(participant) { log("Joining: '" + participant.identity + "'"); participantConnected(participant, remoteMediaContainer); }); // When a Participant leaves the Room, detach its Tracks. - room.on("participantDisconnected", function(participant) { + room.on('participantDisconnected', function(participant) { log("RemoteParticipant '" + participant.identity + "' left the room"); detachParticipantTracks(participant); removeName(participant); @@ -175,8 +174,8 @@ function roomJoined(room) { // Once the LocalParticipant leaves the room, detach the Tracks // of all Participants, including that of the LocalParticipant. - room.on("disconnected", function() { - log("Left"); + room.on('disconnected', function() { + log('Left'); if (previewTracks) { previewTracks.forEach(function(track) { track.stop(); @@ -187,13 +186,13 @@ function roomJoined(room) { room.participants.forEach(detachParticipantTracks); room.participants.forEach(removeName); activeRoom = null; - document.getElementById("button-join").style.display = "block"; - document.getElementById("button-leave").style.display = "none"; + document.getElementById('button-join').style.display = 'block'; + document.getElementById('button-leave').style.display = 'none'; }); } // Preview LocalParticipant's Tracks. -document.getElementById("button-preview").onclick = function() { +document.getElementById('button-preview').onclick = function() { var localTracksPromise = previewTracks ? Promise.resolve(previewTracks) : Video.createLocalTracks(); @@ -201,22 +200,22 @@ document.getElementById("button-preview").onclick = function() { localTracksPromise.then( function(tracks) { window.previewTracks = previewTracks = tracks; - var previewContainer = document.getElementById("local-media"); - if (!previewContainer.querySelector("video")) { + var previewContainer = document.getElementById('local-media'); + if (!previewContainer.querySelector('video')) { attachTracks(tracks, previewContainer); } }, function(error) { - console.error("Unable to access local media", error); - log("Unable to access Camera and Microphone"); + console.error('Unable to access local media', error); + log('Unable to access Camera and Microphone'); } ); }; // Activity log. function log(message) { - var logDiv = document.getElementById("log"); - logDiv.innerHTML += "

> " + message + "

"; + var logDiv = document.getElementById('log'); + logDiv.innerHTML += '

> ' + message + '

'; logDiv.scrollTop = logDiv.scrollHeight; } diff --git a/server/index.js b/server/index.js index 871319ee..194e0698 100644 --- a/server/index.js +++ b/server/index.js @@ -4,8 +4,8 @@ * Load Twilio configuration from .env config file - the following environment * variables should be set: * process.env.TWILIO_ACCOUNT_SID - * process.env.TWILIO_API_KEY - * process.env.TWILIO_API_SECRET + * process.env.TWILIO_API_KEY_SID + * process.env.TWILIO_API__KEY_SECRET */ require('dotenv').load(); @@ -67,8 +67,8 @@ app.get('/token', function(request, response) { // containing the grant we just created. var token = new AccessToken( process.env.TWILIO_ACCOUNT_SID, - process.env.TWILIO_API_KEY, - process.env.TWILIO_API_SECRET, + process.env.TWILIO_API_KEY_SID, + process.env.TWILIO_API_KEY_SECRET, { ttl: MAX_ALLOWED_SESSION_DURATION } ); From 27bb5ccf486fa4f9a14c0f702059303e1158a6bc Mon Sep 17 00:00:00 2001 From: joma Date: Mon, 10 Feb 2020 14:47:58 -0800 Subject: [PATCH 56/89] Added new image that reflects what quickstart UI looks like. --- .env.template | 4 ++-- README.md | 16 +++++++++------- quickstart/public/index.html | 2 +- quickstart/public/quickstart.png | Bin 0 -> 672247 bytes quickstart/src/index.js | 12 ++++-------- server/index.js | 8 ++++---- 6 files changed, 20 insertions(+), 22 deletions(-) create mode 100644 quickstart/public/quickstart.png diff --git a/.env.template b/.env.template index a2a0b023..5287df5e 100644 --- a/.env.template +++ b/.env.template @@ -1,3 +1,3 @@ TWILIO_ACCOUNT_SID=ACxxxxxxxxxx -TWILIO_API_KEY_SID=SKxxxxxxxxxx -TWILIO_API_KEY_SECRET=xxxxxxxxxx +TWILIO_API_SID=SKxxxxxxxxxx +TWILIO_API_SECRET=xxxxxxxxxx diff --git a/README.md b/README.md index ad227a4e..544e4948 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # Twilio Video Quickstart for JavaScript -[![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true -)](https://ci.appveyor.com/project/markandrus/video-quickstart-js) +[![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true)](https://ci.appveyor.com/project/markandrus/video-quickstart-js) _For Twilio Video 1.x Quickstart, go [here](https://github.com/twilio/video-quickstart-js/tree/1.x)._ @@ -9,19 +8,20 @@ This application should give you a ready-made starting point for writing your own video apps with Twilio Video. Before we begin, we need to collect all the config values we need to run the application: -* Account SID: Your primary Twilio account identifier - find this [in the console here](https://www.twilio.com/console). -* API Key Sid: Used to authenticate - [generate one here](https://www.twilio.com/console/runtime/api-keys). -* API Key Secret: Used to authenticate - [just like the above, you'll get one here](https://www.twilio.com/console/runtime/api-keys). +- Account SID: Your primary Twilio account identifier - find this [in the console here](https://www.twilio.com/console). +- API Key SID: Used to authenticate - [generate one here](https://www.twilio.com/console/runtime/api-keys). +- API Key Secret: Used to authenticate - [just like the above, you'll get one here](https://www.twilio.com/console/runtime/api-keys). ## A Note on API Keys When you generate an API key pair at the URLs above, your API Key Secret will only -be shown once - make sure to save this in a secure location, +be shown once - make sure to save this in a secure location, or possibly your `~/.bash_profile`. ## Setting Up The Application Create a configuration file for your application: + ```bash cp .env.template .env ``` @@ -29,11 +29,13 @@ cp .env.template .env Edit `.env` with the configuration parameters we gathered from above. Next, we need to install our dependencies from npm: + ```bash npm install ``` Now we should be all set! Run the application: + ```bash npm start ``` @@ -43,7 +45,7 @@ the name of the room you want to join and click on 'Join Room'. Then, open another tab and join the same room. Now, you should see your own video in both the tabs! -![screenshot of chat app](https://s3.amazonaws.com/com.twilio.prod.twilio-docs/images/video2.original.png) +![screenshot of chat app](quickstart/public/quickstart.png) ## Examples diff --git a/quickstart/public/index.html b/quickstart/public/index.html index d1dbf136..05496705 100644 --- a/quickstart/public/index.html +++ b/quickstart/public/index.html @@ -1,7 +1,7 @@ - Twilio Video - Video Quickstart + Twilio Video Quickstart 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

rM&r_;Tsz^e z9e7A4(05Z2dFON3O}~^CAtJNw;VIg{CK6mY{DPqqEA;ud*FksBk>94rs1j)9lXGx94>~2Q3cU5+i^r=npc?EURTFj8I2u%pl2)#A?n&&3?s`0_c2-q;fptj_D@ z_@y+D{qDV9>)LtZxQh;6hZPm1<@Os^$hE`yZslNWZSze@`RW@;QbR!nM%Y61x zNvz7fi3CmLY*G*qk$dP5pgwnkLe~ea1|9QfV>jvU(M1kblp-kRSy;Tqf*WQ(uC5OKJl~6$FKAnFGU!a4(OglWluS zB?HQZ-ALOs7up$idK1p_*AWR}PCloIG`Gm&|pFiq!ku0Px1g zPCrlx1A5Eqs0*ay^9m=W=G%Fg$7%6Iq2X!5~QbO zBbUS$tv8;f*=qlAOjXf;wDU6-D-aa%h1xdt#;sKMDM)!{%(7TxuW}ktat9M|!-ZYm ztI%Jb?GOfF334&iOnh8^IgordW9WP4?sfB7F`&V5hRk62C1Hu}38C?VrM}YByMqx~ z)<9iU%&stf(^Tgce$$ObQrcSTd&p>9&v4Sc4<)yPU%_miji2o@O)G z&QV(}RGOaOo{i#(>EtsMGFOT9^gws(ZmrutC~cdP}D z2*6iLQx_ZNyhltvOyjTr6Uu)rWYIeLJ*f4e{yXua=Jht|(kG+P!UptGqwtHDb*Afm zmkm{7S}Bc9M%yt%rMh6033Z1bHee`j8gRqt99;){qesW_w}nh0*F0{VNP(?quzXZh z9m2oV3$Z7_Fda9R>az0aTu;5ar}kvIL2FAxgSNa z5Q~bub>A|^;$fmwCv!YjZsz39R}*G3LY&W?_jt<9=dItoGhpuTxjbX*eUxn1mDw7V za(Tu|YeqI>_c88F8*dHq1zrRJrLtItJhEZS@XeVh4hw_uy!EZ*8jrbBhr-He1S+)N z^c)s3IS{1umKl*9U6lM0Z&e#faH`itqCr7UoW--g1{1XGfqQ^mP`}Clhw)FbCqOcZ zy;o77KIeJFoFga_Aw6?FGUB&WSfnvH|5)_)e5HK2V?OGVhj(+ks1$SYX5V$=RvUH) zx!MOiyV5C`n>Es`cNs;tUH^TNkb|Yt1GM?7<%<+q>exW*tIud&m%9m%neq=&6!=fZ>}IWN z>A9Wy5=L7CNUS0s>&U+7j3CC(l?QVc$hvL#H%>+o?O;WL)L28s5liTB9)<7Mo0=rp z!P=KtbDr*6XidCz>~BEMcAnJD(@rW*JwgLYlchnYh}Q-~_icsL*}lQ?=A%laV)Hn$ zZBk(9(S&{WKh0cn=>YSnmFUTOKbXoI@mwx12Bh&xoqqZn#Osb2Ml)J1WzeU4GVa#i z-Ghp4(?NB3)9Eh~F&%R@_Q(H((O=W~__QB39Ff8KOFlDJcn zPwtzS=FYea)}L|nB^P%08>UZF5>923ki9!8^YJH7K9MUlZ^wUAEX&h}ajMrFCCwBM zidlaeA|{L0czxKrw5qCrr6_viB&)W_=xj4mqC+I&sku3lBU`jPsL(@Ww^_clv=m68 zP-?Y1#cuHFWKuDlFo7jf;J%Xek<=C<^?!0MXJB~PqSgNL`e?9Kqp9{`rRm^+b-Vjc z3E_Z{k(JHc9OTdGY*cb7AoHxG$^n5LKgR))BIVgCrgs$SU+?wB$E~eTu(oqZnYcHbURFEV`Ch^Gb<_{9M=TwGjDI>zr5(j5oS&FCDJ0 zeM`Q8jsr!n*>|hY7LK3|KNdqTSCdhd3!RKTKfZ+A-n7EQcfftaF(c2r zZRjr5twbnp_x!j|M&z=Xfr;i22@$@%{Xe88-9EF6oz>aVaYQrwX3~ zukbNehD~{?F79<}6FSjfeNMjL7<_q2ARS`8li~Zx1)kEyvy$15(!dgd56Os|bakxC zk64hz8<|WOqFhav8}~vRMVv>Jf$493+P~+o2_Az0sMY$x_Y=X}%{Yi0 z(|^WD6>zrr(Ujj%k64g?b+k_(zIU+^mR#F4XpHwd6$u#Frn4LW4*=Ph4g+u~>bLbg z;D03ywfXZ<7EH_1dJ`2Z9n}6LZYHay{u+6UmZ=J(7Sx@x#cXRG$1L7OPtM~7_vCEd zhs0cLm}DGJ0e6Z=0o*Cn#djt?_WISYs?x_w2{ZHlQng4+p2J@)spiSicS&M3wON>a zD0fKF@~4&2@XO=9<-+CCA4trUw=fWlF(f`WnGRu!8|3f9zmIIPh=y0z3 z_35l_Aal(eBLfKHb%q7lOb2cx`D7PUKJT%7I_^v#h_}I1xkPf6wWST0<9gH5rct=` z%v$|M+9U7F==7)U7?%a^-;ZhK+;;*C@pcB^@=zE;+y^rA?w#v zm(H=(^9v*$8rWv0{+$3Og^1y;F7G+m=nB=X&|&S~eR3jluj7jBnnjl#W`jiIIO&j* z^$g3hCY}_pfqH3OKJ(+vp{A=`tPb}w?yhLC%Ca)c7X(COT(dq?eIu8tEUAd{5m$)L zSxlxvsz5+EnPBX#^Yfbp_UFy#%g*XvdhQLYS5OGWa{YON-|>Ww?ahY%)`sXUEb-u= z6`R*2Ub+I-EtPCtqoq=uF@X<)Hl2wN_Iq$!!VJUqQRRbozsH6$f_|ns!#msOaatb((e<3l5G)<^yb- zFXFQ4>OXJ>7c69qNlOvZPxR(R0_OC`2_lSKW8Ryo?tM_v+=0A2YIJ+vDH;$nDJART zHRrYwn3wJ?;7X`tHO#bI*ZQ#Dp7}}n=GV{w0P$Wi*FSLHKud9%*;~%IRcr$ulHs9ZktRIW z>3<;z<)DODf_mM}p-c(gk4uK3%oFd5&$K@Y)icqOui>Fn4n6k;$$76Qn);L2G*)Px z^v&~m^Vkd*y_qu0!jcfuPdj_U?+OmM^(l*qIqsr~@Vme7lhM6Vy;G$BRnm(wR+%8Z zizvM>p#gA;=f|?1Ax0Ld%eO!+y#Mn?t@w>x&jsnmRme$_S;2yPNp(!I`#+0{g)-oJ zD4(}!AJGS(KVng^=x*YKUMwqwNt0AL3;~wXcCG!+@3_w8HaMy8qkBGq!NlcuH8I8J zZ0OK*GV#DPjlG6DNiF*7b*fVgNG-axOclt$UHCz+#S1RrJ&6VTPK%;aVmgJ!r?n#Y zkb9WzT7t7$#|kbKv!4iLJ7wNv%s_^k=bEcE7WMBgCx^=J6uRddKrMdd9mGZSor4rp z#KBVb>0#3OGj^?5@HkF}6nK|8_@28qctljuixevf5ZXy>rHC=J!qYbqpV?$KOUHwh z75@Q-&@=52l^b@vh;3J8nG8}ynBjt>j3Nkp+OY0b(@9Tc-Q)}{hrJ^4AJ@=fhLhYi zGrcBf&*NdKrC|CrOzi7zUpDKR)cQr8G_wn&lP-TYK={#%gFnF)Qa?0oKx^6B6`F}{n`3^wc zz-Rjaxx0b3E?n&3es&s(zsfj=0EG!9ck2 z7?f?NDkO0+q&OWi)O$@?mi;g&`|-(fg&4!Eq%8|u@I%-Z3h#oQm!|tx z4v9sLvpS>Qh%|kmbTmDE^(~M=v5Jbn$*5Ryqo%svUM%%6mC0CKw#l-Tg1?K#c zn!lEk@E_J?)4x@}Op&XO(EkfYT2O2qp9(I<+t7Y8mxol?E z+avxDjnT0N;A}C7mLf!N`K+q!YqR5a>o>>^(oN`2pYG)czX)@4SDj$tnR<7_=F*o? zJZ`P$J*n&J|D}^GeJtFvv{}G&Ly(EC9Yb4*5?=df3S% zQ-Ebzz5DGls?V98WhA|0PFt27F%ue>?0;d2=$-TFhMfQj*-qg_Mq#Y7l6cTcIlIvy z+Mwv2XLK@$#Td-sC`~xIu?ee}73YqnGtWMZ#8s~;wlg__^r}~%XNMu{M5FjX77^fz zcoEHQ8lw=t#W$m^I?AchAT{OIO!j}`EOkoYjzn?Ptpp=)-2Fs;&RXuGk_L+eK3LRT zT@A*RPE*{gELJQza-IyMK?YP-%chW=*Ca@tEJX6IZ50U4pf zINWgsKt_sr^W7h9?LCuU-*j#Vy}DR5NJ7lIcSP)CY;c_ zk}~$7RovRXRnC2ds^DHdfUr*Zad#t-klkW5#xou=yx4iOOYFcCTM7SRRFP zU4z@Q0=$Z8haUUF>&b2<)LVX<%V}?h`!kVmHbR|4o`?QV>G=Y`bLU}O#-K> zLbQwHXc({GTD*R<^z2Oj8nPY$;SN>-NkQ~(YcO+Oe6M9P?pj;ZJO>((etVo}P|;3c zSx;6}uR!Vi5XjW_dTaw{_@>3P4S9e@=Z?Ia{tr1NV+KIF>Rmzde}}eoNg}(EyXIk$ zzI=#ve@5+sJCoJ8$IiFi!#T%+(&Q;7S!3hU_q`?V^z*48@LtUWDKa<7#529(?Z21- z{*H5IEpV|Dn0|`;)#KfksR5}fR)Av$A7zFb7UWrh!qRm7&2IP{CXHsA?yRBdI`151 zSj6z`1S-Bex+-1kfuYHSRoa%N@v$bk1+DS!_R1js9#V9a{D#!Ug@T|zAidNY+P=o0 zC4mG2+FHR<^A$85a#0T{tLWHX`uc#ixO;VGZr}lBBo$ED;J1yIqlTtJi+;Q)8DfzZ zDjf11e*TYclWzz2ISyYJr67eI4MySxpuL!B@7X zNQl*pf0-j+L;v1`)830_6#1AcIE;$3S7-VM%o5uJP<~-X#olPGE$C!?(m{vI?)wM3 z@Ao7eSF{Bw6>1ckR>HsSy7=R3pz*%-(f!LB(Rp&{SyJgSYHO*Z`)IPv)oQ?DU&0YS zE%`V!F9vYEY8JpNv?-Rhq3LZ|+Z3(Z`v7y)CZF%wn~lu8@7GD;BUIqa39T1&0$4Xg z4e>`}$I7_jEJaM=2G_Cxn{i1JU{h^u+milhTB8cH5@=s)&8_(Z|wE=Yot|MC~AtmeBsIqSY?zSND0(+48tLjHe{vy^55 zNt@BkbCB<-4}cN8>osQoqO&${Em1vBr%eqi(~<+>K&NgNG(6P9hn z=c%gc0z8jqMVs>{z+kam7u??Lv%Jx99%r*(rUi-)F~MIRGFF~d4Ma-5I#3zLw!0=2 zAWzB12Q()P6@k~~d=2mP=G6gf{bMblH$3{Fzlfp9of!KKsp_ljRyH> z;7U`Ng$$hPR8PJoivwh!SJw0iV$2wSF`L5n;WCKgz}YzTYt=P;yS9a|{w-!gWVF`) z^(=s21=M#2ew*)$m8+i;*#5XQ4`nTes|0i5x#JPpq2p6u3Z0lIs2 zO9H!*qfvy&c31gc&Fp$dwZ?Zq_a}F^n&31)^ek&a4QxWiwkgRS-}V0GKfAJGoxr|^ zGJtR*Uak0s2+vyIDb2)l0Urj+nYPkT01&>JKiiJcy|$WnZq+hPO~liNu~(Y(W9ZmM zyLe|QrjxZA(7aOfOt&cT#fz{o=Q_zLK{iAj060<1wHmm7PY5m`0E~_IY_jlLG>uba zBgGLgknUvu>Dm6gV4GtS0pd#_yx|l%Im8YSrPud&>b}sl0;z}K@??>L*9GVnv@qnQ zq>xN%-zy;e+IIRGve{C;o@800F>2u=S`Zx$9Q`S6h7sUBW=cT0!#dQ|f_GsU-{Ejk zsRCY27lzOLob56@x@EOnHR_bZ_%Iu;vu97qJZymFCIige^eH!N8U0ZUv1M@@pz{eK z7HoJ-05-E5m^O_y&9k6VGD3ulD}2C{8A!&9fF28@6}X=#Y$iAA(_nbF)TG{QK3zDu zm*M7clSft!u3W|hvdRVm;JGthre~cO%~m9qJxoA`YfQ7C`A7FC-wSRTo{pqtAAqDu zo8oerFsJJb%7ThOa);Mb=6Sb3uYj~_cHhGfa7dBbV5Z`7@w(dvO9`;co`Vre zj3PW~JRet+^W|Lt(O6YlucT>@Rc@Fp0i7EQj9p-R4?TAI`2cqCp!+6dbc&n&z2^c>`?CO?doo?c?8|zS0%^dRl!hYy9Tq+I4gUefWg+ zRsGWC4&&Do;F2h8R=3C1TWeX5tGBiV$B(tc@mL)ojX2iU|GYkGiSRzo0!)dRAwZ-a(D))lgZ0&(<>tuWgkE_~q>TR8sJ zODw;6C>Q`RIbmLx|IUE4_p|A$+e9$Q1b|}3R~`jcjkcC0qfrzp>|UBI;6Rg009qvP zm)lm848Qd=^DaJ))3zvBwJxM(qa(v2t+LEY+G#Y&szaX4_{D*UNv}V%@Gr*S%c|Rj zXB&k=@qf!Ue`gqCLLlf2kgfp)7Q6qs&Qzs{4&e8jGu4(VRoWmkCA=t`&>k zR{`^`vn4G1!=2<0?vvWR+vi~yv6%$;e!4fYyUhXY3rhxBO&Rql1$2ADQ>QWhLLSV3ZVBiRd_Zby&<>3vtOmEh(%)C zI6S9sxqsKo0v37;8h+V*qix@gFLAB2VeZ=f9???n7jg^3@TGYb`gi&z{ z<3Gdb*$3dFVUVnLJgxgo?Cd$!XgbIP{UJ@CN=hf6mNFaO%L?Wy281hTdkU{(<*B+^ zy879+;7QA}ZXXU6o0t8V=cDPjk6q@i&$6{`8ejqCfc`+=j$xts%ST$nCjfaoLj!OT zr6L*~!5cu~7c|le75)NJ3(e9N_PX5Bzaxg{tb!l04iZt>9Rq}q)Az?bcC1@=rzbTC^0f~jBPFy+^4q@yK1@jGj8B}uv9!W(g>;t-q4el#)4=V>xZd7leoojHQ z=Me}Gy?Q{CBq8*^Ua5{=LBY$X{kwj1ZDXCaUo-<)nmHXf`$Mh5;D2ITB6#rFrAUPf zvCMIMx!d&C%$p?J0YrVRqx!wr_De1@K^IKbJh_Jtn5%{e`}x-s^!+?c2CkRSiYe$6 z8-$&R$Z%%R^d>9y*pLFPDCb4PW%AMo8XZ|a>j0nAiN6-W^U>-{vZI2tk zEFMPMvciCwWV5tVy{2vNZd#)iMPg^qF9+yXZPcjlDGI?Pr+m7GvL{m5EYvoq9V@dn zU#!8wr=DUpzSPg7K~ZclCJ~XI_r+SaLg(PoP8pcTbI(#=Hl%DlgHYd-9g~RfS^WbT zx)MxU38+So|5c3w|L>|1pP{QJGAlCMr)1xUPpC>gl4!x|_vojD(3U+FtWFICK)3IPqC!q;{T9pl}O=5h;QN!ko(}IE@A9jOvDiFHcV6}yoFHi=F7 z3jpnU`U28ou+&8yHJtK?BC<&4w=0*Fhyc8!1Xf(V0D$Uh+>++o#HZv-8{ST1 zyZw6nG({Wd`V4YMRx?-V3g?R|t}Y918+HdTwu0YE$6`<`q5NXxh40vU$0RqddXNi} z-U4S`FZn+yAD+@;%fs<}j2rQ{f;U3fYpg!q);gHRZRmP}%Y%(50*7+@?=Z&R4wk-3>N%>(_N z`O~6REKy*VW@P8YA17>q@j^1|+}*3_SRhsX&<&W@XaT4S>2mb^db5V0^Y-I7y$03p zJfng}*>2Nn;E7S8Y7V@;3pD`prx!Y#J6ehuyk>8F>u%k2Gyu-=fsS3gEIW4xisFc6 z!7=gnT)nJj(=oBO^Z0m6Ed&_Q7!rRF+a&CU?+s)u=M{L#8~2*%tnfaYca=yH@`g+1 zfe%9`y>8no_NFS1%f?QD!Hn4)@bq22&F;~5S;+4~z~g{SdX^3y z%UNkVzi}@$xV9mi>>SJhH4=%YFY{-D$f>;tgBC?K^o_#G-;<>FT1>MTEsSdNZRiLVi=O__ORA4{WjR;{)K6Z(@XPi9|9~*|)k#_WI)#iQE^MmMabv*XWc*E; zU~XYHy)D5K@PNR(+q032=8YEF9B3l!+FQu<)@Cb#*|Kjt-2YC{X7Or4#(9Nc@Me4) zZ-aBAId?^9WEL8u*PAox{!{~f|`@Z(|-HBX3DU?pmcf`(D5{6mX+mlg9(9d@qulNFsJDRZ2%V`)dH?d zYWgi#u{v=CMGOmSVK(~rj?=wQ*dk~VqA*Di(CG>UWYXH{vdOwTc=tVwXO68Hyf5HP zIL%ulzZQO{x@A}od&FW>K6BnIU@!*j4i>XEvdiY>ho58FeSz+Hn!(jb z>hc@ildC7nYYgG8$2a3;-uM8X!XtNE{X+MqL7d@<1E2|@?cD5|E_LQex7NH)v2a+q z0~^Sp-5jOgk&=6EX5z34g+*ug>$+PvyLB74mJbMsV!_0HwRK+skmQ9W*C6P^#QtFD;kp%@|AdNV^<};N>18hqM5uN@jCY333T%Bl`r47n!bHq-ZxJ*q zUtfIa8kJ=yJUX?NL1p#t~YNTzs21n6pZtFlh&(>R2z^19}dFP4fMR$a3X97fMKGV^0#9ph|BN|7_WhVw#CDs=k4ZS0dr~w^K?bDvt*W(6(Z^vA1>vL5M z%>fi1#Y@SB?MH}^>vmQ~>flC=LE*fCdul4n!>T#_iA-fZ>5$|rYQ6Vg%KVf&DfDXw zf57!Pq2nF>$y7o2uTIUv3mJv=y#V7TU*^x^BOF%QFbwrkm}}+J-4^UDt%hX{-s71aBeUdr{AdH;ka`HP zLDUs*Mzg#3(Lvcxi0a^I+fNYEP)zcN4x_~CNj-4$JdY;9qnikk%Y0O$;-~*0Y@k8m4Q7k#bZmk1$m~!)?Zc15Zh|EAL=?|yiRV2Qo0e`zQ0QP^cjC0&ouK4^ zkcH2~s2emxP*yP}-C3g`bUB|D5dgHt^H}(^X*+3}7w=9Rck(1lTI^af({;`} zPaco7E1l8nI!#VpZiGcdXUzkB)>#0UBwx(AE_y9>Wre5JYMtC(7v0|9WI-lLlL(60e5Us)ImT~zh{fouWQrXGkdb?D>mNh4>i~s$Tt1_w-BelPrqovV zdX~qiV;(+6S>Qn|@5R3MER?XqRzrp$tn8vj;W4w6&w9y<=}w6#w9NYQX#9(9qVf*wa7Evw2L#f@v| zasxv*(t4VqWunbayw~QV`*Jgio{SbcqAyLh#|o&z9T)JTbEMKi;(D59{VR(TazZi} zZzH6mM)wnvEXShmK^SO>`=0^z>*+`d$JDo&XRuUg@l=#<;dz6R;rEAv zr_ur@AwH0f6mRYJGX@^ETir#6qN+UAzob)3hQxAG*&N8^vOIpST%w9=%A884;B2f- z%}|+bdV^qkUXq6FvT|e4A<(rhmJRCja0gi|?u3SR+a+61(ClgooZ+M==~{;l9>!5r zfTF|TlTNof!1RKLpBG*_-Qr=1?Ts+N8@}$-2{Cxs?6bRV%Qr8-9D-3F$ml*K<7sp< z$_sQ%b_FKP0*sqsVRLoGA0~vz2P`CH+)C0t6mA}>F$7BiU=P~jd!HtI{$*0p=YNpS4`S+Y(R|1tR1tN$$|E9sLRYl`>7CBo zVqjB7Q7l1_+shpe=q72j8P86=+kW@zx?x-x6AE&tq+B{iW?7mO6q4dnhw4(kcGP932n^TOFvqYFMwoPU!Fk;y_-iB z45p3at)CV5PqcS`y^`&IwGmG8rUATTSuzvOmsmOZ^GBxbmSN>fLftC$Gu`mEtn+$M zC)sGr6VtTBtLdqf0qce>I)n3agG>O4^cT>zp^xd%_%xqzU?^WX1ZOLWkDy5 z$JauQp8^Bg)U;R^b0JzrZ~*ado75V-jK33&J{Ve z`UAr(#{Qnlw|`C5;-$$<4n1muKPb;Fn7hs?UsUa0Y05l+%ybHZQ}_K+D1O zEw>T@>o&Ob@8FE@dDW13eT6)FkRo3FK}%>?ul>{oK7E<)by}KFuK{n&IuqK6039CYk&Q7KBaT-ok^6ug zQxf-icn&zh4|d1wolh6hdB>@lSiD`xeCE1FRQq{)FwD!ZbK>Uiq6<_g!Gy?L-}P^YhT zb@qZJRgLXo_N+uai>^cROj0ML#4XdfXTx0wxaxz8p&g27ux@qhrnbC=w&Vv@wu{Xr z$s^lWwtXnO*7mnq43x0$0R~=723KlX+UCjS^EAB%j|(7pCLZ^g*gkr6ypp;|BA~C@ z4bYpdAEqhxCL^jplEPw@U*s%qem8aN_+I_azH$1MT(g1}4?u$LW(x9h{U)sBjMDZA zaakIFe#C)faT{OU?dskK;g26us67^WaibGy%BqR06mm=~{$&AO*w+sa(btbaW|KQJ zcSQOFLZ&NP6EFC~Gekv6|G>i-lQW2;7YPgR*?!`lM|2{zx7PKnFO74fmezDIaS`)T z#8{@u8b~wD*v)!B@e=DjFAS|R8JmJ#ygvuIX}bL&`BCM|@N_n1b?_^u6-`QwZI48b z9A|a;Cq>&9V(r}~xDmj0S0&=Nh*|qF)#yz2>Fsgwru8LnuEz3kdnh4QqpP36%3C^e zH}HdVBAV}LY>1x`{^yr>&k^N>I0zIaEPFL;Fil=7$G`lj#YFd+f>njHDrGxn_(cfO zEV!1#{(kDSp(iR&jj~bpzJH&g=9cK)kkfTCj66rWz4(OM`Xx)MpNCWG=F@$wkGb;6t9+$S z?-rYHK0G9LkrosC&^tY6voY5ih%NEfvyp}%dd<@Jsj^cC2)NH@O~Sjje=i)3UNOz@ z{Jh|4;Cm)ky_?Gu%EmXW^NB;nRnuG6{QjUS?;H21EET2Mn$ojC-8z-dg>POa(RXVu zp4J76lIS9;)naG$Kpw3LeQbfM)-6J{KwoPD`$Zo-)dnQTMm*B}& zn=ggfI}1q9d>`!g1juc--NlUI6ugQcM{!0(8dodJ-^n(`O0PUVZvOyv0iy(C0|$Qg zq#*rLgg5C~uHOSx*90D~0IK1|*coNj0LdUKiGcGyi_%;c8m9|g8|09g?F1n=jN-U; zCI$|#8MS<+OvIPmZ+3oOv9U7*k4dG-cJezjx3tkX=WFqk=W52i*+?r`6ayZ+&1OfA zI;2WNv|C^^-(aCoFMBqUV{6dThFa z@3>%SowNz<&afz2R4p?(Za_F7{Y)ZApy!s8z>e=;@bUrhgT;Aq2`pVxqvbF0p{;>L z_g;O#eTV!XUOwTzTmJIn1F_cpbfsygM5jUvD*& zPMWh8Of_&K?3T=?4sh*$e!qty6u0x!;~l_vl(O8NduKaPA=ih`kGE#uB%t&YtlUoK zO8mOA9#8g3EX^*NTeb!aLos`$>u&ph|4C*N6kk^-|2MjBl4Sz%+- zl?FdP`tyeiE+H6l8eMXMR=-H4ybHG=aj2w0jN)WJEKo&BT`=uWx%WEe-EhPQ)gYw%TUhR4O6HK?~`rTg4I`FbDo>6f?9Ci^f`YpiF)(nWAXo@n=(O%4d~+RPyv zb%xO-mcMmZ6lQHIOJP*QqxEjJo~gTsLGav6^G(WOu|Y=ot+MjLuoMN!1aA|*!K;0S zX!=%J)~1*&#ys4JhvWjt%F4t1yG||l8iCA;XEhkp4R!EbB^+K_^nC_>#inKubq5j%v3*@hw+FT^gQ)o_T{=6)u6k3G^5w=%wTltY@?3kt^*E>##Cu4l#HoK z(^>|G^e|j5)Z>n4kDL;RDKRZO))Xh-&BnrAh;Rql*bkquj63tiB970?$rsR0IzH&L zhg9a$w}mCPeJb+7r&g)H6-X_QgvHIciKsFOw~_( zufBo4jv^>#4JFVPhBv(seYL+oRWeqopvx){=j-PuC~j3*Y#XZh`*|g?O_{8Sx?jFn zi8?B|Wbyx%A4X5k$%k+8uzcQR}{jh&wEI5=ku}nVB1<#Zt;(>8nhM65((-yY|*a=SzT0 zF)Tqi&|}RNj|QgBTQqUr*GPHZ?NJtLRPYxi{ZOy_zSvkrw$z&G+e13={D#kVRhn1P zkrJG8D%ErqqkNw`yoS5XpI4JHawPzi0i@E1mw4#pG zRhdT8azArmMvG|8>gxSpPPTtfJ>8cBuF47bE8dja_<#r&4YAnpI!1OIzMhX>B~Xz%vHNE@&gm>-p4b7QfN3)ZInI*%(6Zu>Kl_0sS_n))Wh>t-D)>n5meYkc;?F z)J~n0MlJGJ_bcVm?(#?bgXwPHAhfplIcMaW*TSNI>w0`YK0lyQ$Rr~iaF{XH^06$B z8WBb77)orCQW`>^!suDp3V)*9RI5QH(oJ$t(raC#1{J zu0p;nXfe@5eC}29F@k~^D%k?sgYjjICYMH2hV8e%@qWl|stmsOe1K3cRzYJAIk`Ss zsPA&WUZR{7fu`;4P~lcrTs|;Bi(t%Q3_qyQY7uS5l$93*1VRjj;F_QxI9B)AS9xBo zK$CQy4L8@B5`AlTBT*h41f0`nSi~G?@5Hp^*W%e6iiaN4W7f?T=!M&pdw)b72FIFD z+jtEfXkK{oxhrmP(`#>t2IVsGFEEgLBwnR?)ypLD!WFBOnfNAca^Gml`VX-F0vEEB z8bP-B)pcC;H8eDIl--55qS>MNY`r^AQOO{4d>7yxKTX)H>a0ic;I6Nzga^2*b=!_! zS`yLD{5*9r?zaoa$sLTN-8ryL zv>m+_-&4=V>F)F6d-Q1hDZK(ZyX4;8Tyd+r?G!1i-BaS(c0MUA;=Qtl;O@yAC!k9Q zh(G4isO>rJ4d;hoeUKc7CbbhQ5eg6(Lb@9IBi9Z3`29OqaD{5(sE^@1ZV#vYKvGvN ze|W?Hc=-8dHz#6swNq$Wn&f>*c(`{wy?W$T9aT2uV<-+wU23vB5<@05)a2cchx;MZ zr-08rg;r}_3_4?o)avZZCA&m--S0mB1Sp)QEUpVF>~z`ZH~xrtCQkAAbv-$L@Og&< zMYV?lAajO38Fk2@mJP-G_hacP|J_l;istAg_&UPQi2K$+s_%8gG_;8srS9GY{`ghI z`;W)!HzVy%-tV2v4<_M!&rjkL`aZ}tmeYUzX4m=zht-sKJ@)S7)9wJ7Km3vlX?6r5 z-`jmCn75@9st+I-(%q+!qYWMnnoKLGxj$6~k3p;Qqae@mwT}162+;6nly_DTtPDVmr|z~7bM za?RCR`y4clSwgq@e=d*}5TCK=LSr-?ZmiPvb*c9Lw_QduxRG6`c8)>t%US@Z?pR!> z(!q^5d%k2GjeMSs{>@Cs(-v;c)5^G2Dhs$*u91xH> zL2?=FQ}NPzHXUX2#WH&(_@rv5TX5UqaoNpYS++j;+pT=uc9}lCFZkZ+{UcZIb^*DAy#49Uv@d#_WfC>5 z60tP^$oe=5D6&L^3MQ^T6(j>~-@3)-a+~VVZd%oHDxFIrB8K!oB zX)qri_d05_;+vdB*Cc(%pp0LF=4~pMt#&#(b})%aHNWEig=1P=iHd-xCT|g*$@bI| zt=|7TKH6T6kLOIm$M;4UXRtfljDMQuSD9Q^oH>6Rk5|X#JL8iqX^M7GF!ofhxO z1&g8hhIVSguc~@=fs_`1-$K5yE1drv33^{nsNS#1o(MuDlHH{H(2f2QMtI*W_tA0m3b~E3mi)~}|?_##>rQhBFpvL#z;3dKD>&;bSp_lnM znWjscg3WZ&ik@r**uBLEpA6B-p4PLA;-SqSK6=gFj@>eHz;QP!rjwFwm4C5tuP1i< zhKS4i<-*;^fpo4gIaWFEOI3n$M@1yv^?2|5ZjZh8rAFhJZNrd$vH1*K(7Z7Ye!aqF z^Gg#j48A&;etQ+F^wYJ@gzX9mzZ#KLS6AzqcFUc%p3^{9S{ju-&mq-h>t;q$Op2!; zS={0n6PKn{r5*h>q^S_%o~M&D^&eUoJ9*j_sTGVjawh&*Jy|ilH1MXaU3z5;Z0uZ$;p#q`MzDMmTd9HO^gl9m@nP( zD#$L#YrP3Ch>)~>ck?VZ*g(pj7@dk>*`XzAzhEM}>ez%^J2Z8K0iI6xY<69qmaiwy z(GajbRldz{F_8<0fWs?Z#{}BbH%W0D+H!+V$G1o%lb}5a6ytmjfa;twonB;;KZW0E zM$0wZu$1)DxeQD$HL~Gpr1(>!D!0_>Z-pOjdn6&zU%WHl-6cp&#`%T4KeFu4&iyI> z9tL4~&@0~+2M|Xgy*Y+`8-^ka)_IqqfkHbZq5^bn0clAAPt|VfqnH)#(fA;x^zU3zM6PMLjC!?Yg z4?e{-o6W{#2rgf#gfJMEB;vYpp64av##OI1I(GhY(T=;0!mvrxc2TTc@)qnUvDW`J zZi3vdaoWZ#qRyzALO#If+5-%IO-|Z5uWL2E74fBOJcE0+b{**N==ycu*QzW0C?;~G zd#3gB`b`Niu~IIX==3^?1RQtoU6aPbDt$d zsu0r3dqWA!3U%$Y-|u<8q;q|ziphVeb3N6adsK!Xc&*qU@z^QxA$7rr2oT(fhywI> z_24(B$2ydB5^BMG(z^rrLS=aHeGf|ZHEmOqB_N+wEf$)8MX%B-Sw&@rk79^SmwpB9 zjmWrij_yp2Xxix6bi(Q?L;29O%Z~D9bJQjf6`UrnwF58BaVb#Hj>rg$h)Md~d+0~F zRvRJ|#`moWp=z{86S-o9pKKeTJM7~b)XZib+g+D#QdYLo17{m5{OQW|EoR%()&4NE zA-_`h!68&B(=3{21OvOz(7;(`i$3r5VK_`Zj&CgY&CQ|oP~&?kRuLrUs{Ol?L6+Seac6UXtqC~ z(QjJL!!CT)iv;;b7>~U@?=m1r3_bQs!2hmhf&RMD2Ye`wzpu@HqoyvZv>GSLa_4jX zYsF;>i(yaopdqQTk{`xt5*trt*cf=9IMq;fxvJ=qSDu- z12P%q%UQEE>sJRe-8XP(eD7$FXDYtE>vFwPj8m4Z5{wYE^GM<}Mh&{$_MkDCl#faJ z^{6?zqQd>PxgjiSJvukA&4iq{6|2_#&u{b{4zftINLY506SSfDsPuaA&zriIj~&$d zdwXR1GpPEM7rai4n+;c{b+QGd;{3OK4l$$LbqNwI(@0VWuZA7eA0SdgM7E!^QZ$X z>TKQPOaUL|56KqGwJ0EMt)OsKJkW8sPn+Z=tJqkUqhpuL4H7jDntDMd1U%;g);G#ta3xQ)vU; zl$>EswGKzzGdHq!5;{8mpEg9pgiZY8K6f~}u?3ENU1%^@P7@hdb18L z51zV{4T-MzVAy6MBO`n3L%GU@-LupA23~-tA++MyzUkRRb-<0?)_<01{t-WK1zRao zs5iX0y<&VEyQ9qd>rmgxhdJ3=V<0y(6zJY!>xZZ%_`iEEs-RrfePS~endI;~E;j&% zlZhqG_-A1uHsq~*O^9(n_OBjN3@jnVIvd_Y3!G8DmYg+&b(HXNv2gr6lXS#qN=kBy z-LLQhiZ5DCf6uqnlMF6f7sY9Z~%7c)ikHxz-Iab2$lXz{gDT1=G(-sY*wL6W}s(7pEEx z3OWA%(BIGJBE=xkB6we|Y5l8~{Qv&|UwO6Ec*VNLuthNvB+?uKP~>`*NMwiX$}gCe4r+AE086?IAF_0mZ0#-g?mP$ zT&7eFkQIW@J;(qp@;O&KdYN5otoc~<@S7l&GwaW*V8=vs36puqW=AKg*CzN*o9ue8 z;clUze?{ep7LEA(jbmxln;Fk`<#;Y&FVIyBmDq|xC3yuYnJi_4 zb~*Xj_z5Em^=nsO-+@nYp90So)j1^jdBj9^W|A;w>*#n8O3-JeJrb0SNLc+?B8$#w z-7%nr_badKocBdl`Riw2Ofib~$;4+D=NEkVo40<&DJmn1Dq(?Kz)h0bZLq`8Ss0)Wo5Nf| zRToCKPDMTIm&^n+ZK#*|hW!4J?tnr+GmCSWiyD3s%*aso2UC=t?9A+#r(aowN}AU>E}Zc)(js72ALK%@{A?=Gp18@^x<{JZxxLc{21Ea9iAveuDb4VW znA)yBxzB{PkXW$Xbrk!-Ri-`X9Ar*^=ZkcPgrwu$@n6VQ? z9MP6b<%DB5UzV;PE_CL9dnVpr*y9UD^*O&bI@nkrSZavs<%$1sSr8?>OgbMMD<=cz zXXE%<9Fz9RFvx)>=yV!MVzSHGLTcKQA7n?SbU4?dTIHds)ESCtAnXu_m(Tr?K`phM z)@KkH0C0S+ekB8fI#*qfmK~2UIig`I7)S3|GBQb{zGg9S7RH%yfyJEM#)1wzLuZ@(XFG+Sx+XeU_{70Xng|{T* z+~V;RtnMy%P|qlZm6b)GK1j>TdWk5;V-=mX8GDh#IqDg__CdIiBefCS3?8)ET_15JV#6*?dK=uolSjx zP~E5M^7w+6p*vGwPrwEiq+~YBtiQGRccN%=wydiT-$6&f=(x<=K)UQnA@w{n6%AL0 z|E#`eWXy&mC^L2#v!*(81DEXr0@rutJ@#(rTbtOuS2sqV z5XXstHASV_SQ(LA%2P@aQWcMYIhp?Du~a6V7h0u4O^9tYZ$|8n(0GPHe2U8@_Uv|l ziAV749=QgKl7a#*g(=#}ZnF<1@NnkaY<}qvU8kY*D?m~V21u_c2Gv&+b9#KKa!b-4 zf4J3RAU#N>XA|O8Z*^0H;eCF%7-3o_j@Q#a`mshT8d*Bdd@|HSids7-2_(lVg>=^u z|EKczpw3wW#jrVHYI@%DI2b|cfO^4cWI2SoE83g=bljuL6c_Z#Na6(5)t&*KZ2K&VPbwp5r!;y^&%Q{IxN~JDVFVC z@n!0tlLw}&{%}1mHeDbuYiQ-C!l5d>VnNwM;p@p!t1%F4s@A_^mE*oHwmSh*wuCY! zu_cB^oHOD=emlG#57WBQ-o#xF*-IV=c{)utyViwC?f8Sm6skB368@{<6gJz6t`D9( z<0#s_;RK9koWoHF0%C7uH1#}hw-U^oU`&ogNW-ioEAwjDS@(t4$A@O6Nn9Ae2OqbwN- z90s=Y%`)Bgd)u9Wk2R~YYvkK@mLJ# zxI#vLBOV}j{tmiucZxzqMb$n-op1Hgnp0zHgoZiGhMB?RB*IPRu#|0n<4$c%PWVeE z2|>A7=}ftdyf?{74{m4?_Wut#`~yIIVh{v|pN9>TYPmYJwe^{xX^Z{QTL4XB>>Dd& za>q%hG7_3h7G~waHM-q0vl`Pl__DJI9v?5ceixSx9rI{I5(0JT^)luzL}9?Z!-YzW z`^6wo5OEyMg29H{@YSs{V^Tzn6#qk1;Y2wfpL$waF6k}d4G0fq`3Mtb8T=g=`kl!w zJ6Mk+upV_V(cI>AmL0-s14uDN4D2#y+h1?BkP6g;#6Y?eitPLgdBD5({vMAxtQ-L- zbOo|uGk$T&zX6(Q86=J=5I!CF{O0UAi%_78oEuWH-`)OTGOD^eZ1PX;v8~}yA{@?O zeAGVEx(6kjUUl>zd=$nQVgrlL=QDJH2^52}N*>h4WZ3%I3SjyCM5d;N4Z()ke;z&k z+D4{m^v2o`#t8qT2R_N&CB`&5c@(a?#3oFQU-TKegnUdc-Mb8T2gUK!I@6g?Cjl)>CjD$1k~_ravJVXN1;DqXv21>M09g_R;y+*d! zuV$_eG50we>`kd}#5xx79=eYYejc&>ugK0%*qe6%+BuIgwO{LkPJpcKTYRBqY_~`*U_s_vh z#hWV9-8nSzI1_or4SByQ%ehuKD+TEic`Sl3B0`yXX6~}DHU4J%=UaoT&eUC5OVM$4 zkp5^VVYpKzAZd%Hl;U=^uWU41$aLEZbR?~jlua~gC0?gpWMK)E&7$mIMcr){^gTH< zUtMKfEJsz+P&(VR>N>_1Dy6Jofif<7R8)RQN6Vs$-P|Y3d4wG5Pg|S$3hSp(vjf`GyEvJkhzOs7IGX+zk0$$M($`bk!Z5Dqxf1ea z>dMYD)AR=4d!$2^fGYv{f@&yT@s{ieucNSqP>ZJhdJZud02JHXDbqT z;m@5eIvjbwg0$IG$%5hUe8Lm38QV~tB>ca-0DLyO{6dJx*_6NdVf0v*q}TmpdU&bM z?mbg~Is53R6Ow#lXnBPrz?+TwW$SNP9|iqPo}pA4Z8tl&!|toKwKi6cg813rCpN?K zCH&UQ54VhlBbsZ@*x$8hMhFDkS_?lRHv7%4YBG+%m7o9-MF9RMICV$)?%UZxJCGwz zkDdG0$2xF2bCKTTB8=lZxaUvDgx)p1pMK;aC51E?La(sZ&O}A{qLYxDmnVekbr`Wp zhu^Y`Q80Y1?dfndkH{osEQ~`r)TGE#t+R4zK&>Rj+vS{&K^uRdE+*O%hDr{P2c`FSh6nMXNW|?+iq# z$}Rrau_W1Z`JBzby-!Z4fK{!BH|_;PV4O;lBO2jPuTdX8G`=2N;7=AXVkd?9!T&Y% z+sMNzLF3d|^Y5VF%+0?Pm7Wpg6|AO;7A=d1e1r7q@`qP(N*%3Ylll&eosFO&WtsOZ zktn(vjYy^2US0xKasI)>{Xs>ROiF#OL#S0M8Jk`<>eXY|vy`g1uR=|phEX9SX^5Fn zn~S}+9^KJ%kz06@2H6h~+)GN`8Z3A8O2ST5Xg~`Ro0Z$=v3PE8%SY9X$l!!PL2*aV zvLtu+5f-^}4Hja}#P|davoG#Cqt0sX z^P17S@I7lYIgB=ekA+9GSpjNLOg9kvNKh;RIxq@6P`!opd52cnO{leHu3xaB-Z(N% zNrSq~>h|v*N#p5vSL?8#|Gw!+3467)Gps`Tdo(c%oh43D_(bzf9%3=lh%R)19l3r} z*9qg$K<1Te=*re)iB8+{r12jzu{CM!ZWVV=I7I8ruHh68;!Fpk{%Vh?sEKQL)9CWj zo*q&hxcT_Ij}VZjFZ61yWSfz~4#Vc>i}^(s&>_ICqrlAW11X*N+G_?15?=-^eo3s_ z_Rl3Hdmlu`MvenqLUKixvWNY5A3uS&OZ@6&sRobGX%!;6`~&$ui|*EQ%HAKtpVeD~ z?n$Zc`2DJT#vx{-cOY5%{*%+m@|*+p7g*vbZYxe3_LjUX7vuwP2n)NLm!XTX_(@c1r|fR*h4*Xf9hP3e6}!LRPy$@ zudnczR=uG0+w%rQHe??ZSy@RKpg(-DYo6YC5OxnZAb8e!U!?2O79KwvudEjcx}DY2 zweHzm`AZlHWcEx2FG+-+{V=QcNuzx7g1nJ*M0iX(^!mJ=Bs3KUc~0kZGP@&+^p2k< zKtzVaF6@-9T37pg@fhSzz-jf0)pB}h$fBfJ!`y-Cdf*B*B2s>))EWL0f=D)-ZdKt| zzO6*22HS-1iWn~CJRO4)$P3xRh;BZe%8Y$)rDUP381fajXt>~8@%N_7XzdQ>r=)^T zgut~M7S@1T^1B=8)QFEfFFk@wZ#yvP+d={bh(iabwKLlQM3;hz9xk~(jXNuN9DuTr zB^1y(qSfN7jKegun|sUO)Ghwye%0sQrdGy+^~P_(Pi5--gJm>7pE>Fv4d!V>l2h(&^+nMC#_+zhx6bGg6oj|qek*OR?+}85P}IRrus5(LQ&NQm zqS{CE_KZ=;d~UbZ2u@G8J5x$&LRbV$uMZ|MWCI7sM{SidH-6TeFAzCwQfVVL?uLYP zs6(YuFy;INT9jYG#%pK>B~F=1PSuDg5{EZ1)6jQ|*b|{<(X}kKXh3_FNxn_GXnG{%01> zm~2g_BQpsSON@i4VVNaY3UHd^Z>cx~u@q8~*aDIJID#qtg()+p*Ic3`Sa8u|R%_oZ z(d86)Oa`ZrVaDOm(_TL+r-D+o#}p_%^7tE9?kFiqL#J6QEWuWlrbt1;bw>ggzeEKRr+CF3eZ1^}F8IMMx`M~wfK%cPKEoLJ>Thmo* zKXNw$8DjH~?bKf|Y)-J5%k9UcuR`R)xKSz8c*Zhl;YOpPxlQUUYSX6IIV)!RgQZE) zp}#-DQ};_)0jM_evP@ACZS3a~1qctj-~Vk9&p5Wfy9--6x_LZi&5HJp)Jtg6@!K~Y zJ+Ud!I%_!!3J&-8dGl_`eQXf;H*rM#3?ou-?**YupeHFFGc1>yF)mMLkY4+)(> zF6@@>iuny~pCgiR9mNBZ)Y@0@DUSZP;~YRWYC6QWHbgC4#glkG-tFpY#~HktMaCtf zF8$U)2)24qDW$O*lPFcF$P^aju7X0IlihDwfSZx5Pm;u*K7SUqfNU@c6iY0^WSQm` zNp#wbrR{Y1-`R7}$ilxgvI(^0a}sH0s#0{BpFUYj3KhH#T{ZQUPh|~3r(Pe(*A;fP zAxM;fB#;-5{?~iW-L888ERSz`TUT4WGof8^4&1zi7P?R>@&|fBExSn}-t6e%F%OnL z3w5hA2P9E5v-#4dhHU)a>gswS0Fv3@U-SM@I8(2)K%AtC1TLk(T9+SRiS>}jNgynz z^}2gB-#>CzV;-M6tH^EpRWR*EYDxO>s#pg;y zfB$|R-8VUaNG*gZ>XX~|s(-Io1b*IDtY}o6fDI|D#o_o>DEnT7AOT)d8r<4~WryE3 zy-`xdvfBn?;z!SP-8E4$N4xw?*!AF~ltZ@&g~Qs<0nGU#_oWns+9~K05lP|a=;vtB zwo!$YgJ5*ewA9OOJ+Q|^M~8C17j~lm2nRH&8mcbP(YmoYCg zvfOI_(l|@mfd9T7S4?cZ`D#BVwO3ax^alut-4+j2ZU9bi@)CzO2kC7pAI9{CW0WFc}5eClFttE}r9lU>No9iuzc1qUW}<<{I&f=XI<# zXL=DiBND(Vb&n4UF*dZ*UH|$$rEP%r6)e%b*cokka#Vnf$kI=AwhCn(8OiwgOduq4 zBSL;TpXBxR_%GN10+Gh;80F}0(cPW*lZLtD+LEj!_^(s;$@`@X*phr4mEC_` z5e1L(GUzFld=(0ejSA-n`;hz-vxNN2aig^R+fa&y?tys2_JKRAhJ>3wIM-kpmr?t{ zDJt1~3yk(Kn%FskuDLG3?WIEhQ?aOpV-y7jJke*_+)N5A5N3d_E+Ai*O_ct@b6s% zs#p6Q-CED!<$vXo(8?5Zr$_R#;c>7mdIT_X?e|VW;Gd^J1t^F2lIgyjPP=P+wgv@) zL8#doL5{7rtW}Cm?=7}9$b%&gV0%%1$erj`)sDX z?{;Qq(AH*y&nnC+F~Z|*Gz?;hsjmIaLeTnFs_EP7m3rBEzkNXIN)K!Lv;I>kc#d) zFSi5V&}hZ$Z`j@@5vx;Kp>0f7)>5XaIPC5Dd5ar24s8p1kuOeL658Q@hVqeOMpiHe z?P~*D6;f~j`e1&EJ`3DQ|25-#hnVZv+de2$I4~dciW(3GtPe)?$|p71t3s?Pt`ZiM~vc`LJ7f%Jsg@!w4|gY zV#`bIiCwR~MdCMJluxI_vA-tNl#hwIB?vW+*@aXNlqnL>_8MNa!FV}Mqc z2x?Fsj&OI?KitB^Z{K%GY#?*0Tq|;ZpMI)AmYRHQ2;nc_hr_ z{PIHCN0O~GfLqRs&-J?b{lM8mDQt6C3acOBST~JEA3w#>C=*!>=v@mHd!+C^*>m{c zeH?wyOb9$oAlSAAxL&(G{Y|)@Mh=?naJ?qXc(nRp^_pvOiICLu8RYBBO9f-O3*=JX zV$djM7UE_Lk@sleT(U4Jm%%U7+YRe9|SyJPU^-R0U1r+jfb#v(AJOK5zX6a0KSt7w zE?D_#nKEDP%vfuQOE5~sE)UJhCY{)xP=*sQndV1hk2~hwO~q@qyWu3Wnp5z~SpKA- zIqM7R#7uG`Yvudm^&d3|00wx_MJ_=HTsXeu%U}@?7+5F!cBLfx`y=Dy8O&@~miern zAFtuB3g5;a(u;C;SuQrh{SL>YWVIa2^cpKQ{+yN00bNY`!C>N3uO6ky)A@A9ztrAx z@G*D(R8vIrZeg60uzPwXi~2$%JZy~PKLdz*14_L&(z=t3u%Nv!l}ai0cVPq1$T?I2 z6QEL&eSSwcTftqOhr2!wpzqaw$_%nOoqW_^Tqp}Ocldbb_kiKimQ3X&RWPMqQ1GNa zh{EmkyO{T~7e|6K;HoRBQq7fWdmr}jji$PP*M^dla})#AV6*!@`(!BwkuY{pkhnanB9*x=t6}K=A@$2l*P|>EiXcnW zU<>q%9|}(*%vPURSuK|}bGK_256>!GyA62Mn;S%MELS{PJf?RIxy30f0LB z#(x4(MN-8yT+}FFrx8JP`B(Cq3^tQ^Br=VS8UxYaylvP`84+IWjH@upm&g%?a}@zd zVP2w$c#1OBA}3&R(hnF!yr_8(!;)rQv$ zLd@^Y z|CLNVExHJxpArI62?jr<1uwNctwETFD3~*lJ2ueAq}mpdkQFwW-P~K5=POtNq+zry zc*q(`An|XcLfJhVm5&f|A0ir}CC1 z`OtntA~NMbfDf)$ak86_He%Bb6VI3mT1{1p{XL{TDbe>*ygUYq2fYhTC2L0mVwA)6A;i2-r#>fd5y@hh zLP(y#2@=w@J8?W`Nyhfjk`2eeddNpNW03}sB3^wSwbn}`1Zt;Xa!p2pzDoPC@dTtO zjlZ4~Lxx8Q-#ol<*^E~p)xBROdW^TSej0Y8&nS*_@*O{eGx<1$6BY>jv(kiy~h&yp}P6U7(Od(ssc4AE;fvyzch6z-E4f}sT~k&ke@ z$#DJ(RG@+cyb0_>wI2bG-H)$rF6xA^;gT+&c&yuCXTr|CIknqAG^|SB@>d2s>8XgC z^UVa`A)L>Oz8i33_%CnB;va9wi7lX~=O=J{eB&(_D+vibAFRPm-*uhvLCP2GzV}yI z4^UhHgI|Dyq5)>qP$ECUK!T@gZvGcp``63NVOm3zM%!p^GodQ^A1BU1I}4FF`HhbB49Z{z#2!}T%8#cd`QTp z;(h0es0Hy#kd)=L_^4UuJ+GK*! z^XnJ9k$fsfSYXWgPQvjR;OxiB4a;3}Zm z;E6j1J27^<_fBjEun{bS!3-jB7>Lq!Pg+5fn4}dCl6=QBHND-FcNgo6HTQAZpilzE z-XIbB?i$%cEHMh<8JN@vSuD5ikx+h~|ILP(D)+bdmPhh=(LR-NWyd1o<8!_qEeI!X z_DHvZk#wge#oX|JZPtFER6>G_a?Y!HguO`3mNA+|)NY#eA2)mBH(Uv$kJAsmObXP! zy@5E|;3K@XSK&BmV_X_!>iBa@2WE@8MU@{5EtO+IZw+`u?mE-{^G~2e1bG!VCfDU~ z+-tvzjb5l!d_{~Y=y4_-sj8R~U=d$43Kd#du|bvqo6RIw{HWZ9=In(|V|1R# zZ5gRE4Y)%v?SG{&n!yid_ucWDf=UzmlLI(3%1(gt`P%a^ap!!i)h{uGP*U@YmYYj?82!pWf~9YG%&;^h&pHwR0>t$OZ=Y+s^ji4OvRUM~&uo^V|bE z)EtSkY$m4g5A5cPt1Lo&T_V8WAXgqgY;2@{iExMzm=N198VN&bvh;SOKjv`@a;G_6 zPN{wqxJM%3YuT}132b*No6Yt4zr#{pP7bz*(Dq=0T;V~*+x~v)N-BC8qjnXYz)Bqs zzkhj-HHV(-QDs_|HDLVxE&Fa2l+;5?mb5w>O>+PD7(9)xBO}|SWn|I$;sy2~#l)4Y{$-K(qNOnV1s-M^ByTu!{rK2A$fQedP>wF~k7y#xTR>J! z*$@wiW;oE5(jF3C-C9=!28kUT1$w4{2(^b$X514uC8=m)zQ7|4DoTWv17=r-2XYbXA|1+yH1g?=!={TTZbI%-QjJ{HzTROvE|3xeRmay*-_ z`D7Eo0~GB=jN=c^>)6obzM1cH@moAN%~opXR0jV`&19vwyar4){Mjzx7suEO(_C%& zJwIqNz6Trp?K8HTs)*Pf$jlbnwPx8oL(AKN;DJq!!XlFGrzAp7$YwDK3$V&S>B`(x zfP=Oeu%XkdPok#8;xffJy@Z+@?e;YCwzc$mfY6d9=;!MqE1$W1A{vTwxLdIl4m%kd z6c`pyXX5aEf0^RSlUIz@QS9h=1r%6T9SJJ(KHybhNJ#J3<(33-eAtX9p!^XCH*4r6 z4Sr+NCwKqYHOjCrq~>%yPK^yxJ`BYK*c(W7Dt@*{(t0Vku%tbsy}9@#Jy?_PNS;=^ ze|r#n$vOG6#J7XDPQeO4MWshYF+^(Z?mPR_9yGbc>CwwyA;e5f5?`JdEEBwAH}$g8 zquv_uo5tP}AHo}ybeGyck%(u1Vulu}MUBW8hYD3LQGriMWM?C!Q7NUGwDo>{^(Z_H z(|2<2Szi2SWs5VxdnJ*iGt@BgHWY{(lTB~vZNsMqswiKPL+v9$jHdAHhzbr{GFqID-lhqtghZXmRk7q zmh;M2JZQ`uIp}Ae%b&kOHaZ+7S7x}AkYsAL5M`yu zpaYBP1J}C-%B0+QGa+(9doa`kq?u&ydp&BLQ?2tKQ75q9ahP4~ONUwyY3s^aI~E)_ z{mFcjQ0{i3O)+U+Otn=J#HfXsFNgh`2-}8POyqT%dVj-aCTVRes5O5!PV7m9l^*$(!s*-Q8 z(30D=o$?SDSLL+7tF4rilr8FtfqOd{`a_hr0Lu1Qk?BG$$Ac86&K%we@j=An;Y`d4 zxS-KZfb^KOEYFj|dp#_Jk-F?#=0Km+S+20H>*X=I560oHGmpAt6wR;ascwPsYdnE6dF z`BJxFmebjK@yNv+{g$2k2ME&QFj*2pF6*=~@FVa9UHxZ>*~{}E_jVZ$r22d?l9B`u zRDs!&h$0^11_pt#HZi%iA_MLT@En^D@_?t#LIle>UJp%Yii}xTIeaH*v_FVn-}|?j z3FemclZvPFQ-gz(q$y{nL_ziaE%_FpDxDy|=~oO`96t-KmbX`n7%x#Q{N_kHzg+65 z&0kbyH_}SQnj%nPCA|M{`1u_B^l%|psF_F8k6(AfL32hWt&WZaheYvGO;d0T4QLUv z>AY}SEq-s;{x+1_707uabwb%xE1A5OAatZpy{Q`jc1;Gi|ZvIX!@? z^s>#wzBd0!sV2SdW!XxxQkf{TxKzEa;x7ssh3aSR3-#rzU1`lKMg8cjr&u)%9^s}H zdCPw%_YJv>E^t_7THm#}9k&85vYay~sRR1()LA!KKGQ(9SZZfvEa%OU>u2`3ATeg( z5+}VVviVw&lc1$?CMBfTN`_!D9M0yTFy@ZhEHd!uuc^WQo>dgf)+p%rwu!zYcmJ#Yq9o7P7{1$GEQ*mIO%SxPc}piL zb)lT^P`dtN}P#dLVX(rONLd zQnBz)dL2)KK9D9;-oVm(dzG4fy5zVbP_s?%yM1FSY|=u2Qs|55Nm|;^fxvc8zK<8R zCt|_DVgBglWCvoqg=(~)U|UeaH)EMZ!JZlIc_nKH;(-gS@fHrS0ZDe2gB-fJ#$8YE z+t0#FmtR9?6$R$8Cv?2Md!P~WBEk_SbNaUSxMc~RBLmcY35;X{{6&#qCqjzJ3q$Dr zXZOP#g&rZf*0CxK0!@*LOaVw$1Lmmo@hx-`SOedeL~e2Z)b|d}fynFDSnAOXy~*A2 zN^tXM^{WG-bQ6YvUt~Q(7?DOh1hvO|W$Ss7Sk^PaP*R|BJ@5M$bS}5uOyVR;YV+He zk(XJivnDx8`gp2_(r$k;Dwmd)=}cVIyPnPVMMtPL{hECJ8;X7dbN=XZIJ!2bAq|p z=nQEgdB6kSD7(jeJ4^k9`qDw44|PtX;;R-m4j!#yOG&DWc`b6p?}&_7V8KFT37;j; z__)GYwco7q%0knV%OPlC1M-J^HaXhh6&==v+Md938vW<%e#z?Cd`om9Bh_A>rdwA4 zyC<+^Z#;vNyae+QES^XjcX^$}L&r2d-P4a8glFr`@p{71V=N!TDz`nl$DO&$$p!M_9YA~{UG!q{AZVX^ZcAVLk)u{;!1*j*8w_`V8d@=%LOnlKUXns9yT3txXm~Z z7n?rM%Ggbc2AGpVr`_#OmQfDHhniDJ&V>)gQk&~t)(}|LSB1<5T7CPgGa|$4^=xqvJ30_?E8u$iqlA*hW zO>`bSfhF`(!o)$0WWyT+zFBw^xQwW?p7He@EbW}%T;Z;S zl_Y}rY#Kf)y@W&femJ=x@Vs18Z|MVq6si(3Rc5F$jx zH;HNtPrhDnw?2thqethTN52Fncg6dTm2<^WzI0fWeG?Q4Q{uN;ePy&9iW!9I1t_iC z1|PMa9PqunH>s_+9e;Mx-{}5xcBuepHnuMdL`}Vjed78tW!u=OgzajVs3!bATaTF} zbRb7CtCqj))(T!?U4Q2H3+#}r-U8#AVyy^6F6Y~I>~^q=;heg-VRtA#F)`OEecF=2 zGA{Y$mW=RzpT2P!Du$j7{a5!Wc}l+4Na0~mRdCn=|9{%gvyygWrugV1go9r@Hh+F2 z`WqPjAIjb`s>-%)7Zs5f5l|G6P`bNIx>LH5Zb3SwL%O>r-QA@~cQ;6Pmw>>&ruwb5 z$6D`r_t<|N~yzVoO^N3udo*!2vOV&n4{+E7u8_pw9C)?mx3ZVV=wl%3`?^k3; zz~S6gKq`y*^!IG>Xun)DfLwy#b)?m&F@!`w@VAuSVG76blt$;vlH7$RRhYK^mwL=C z$L-&Ip5yU+nHYjnUVy(xgxy)x*kv*G>$m7A*mu!kdqS^tb)^ollWqqWruotMuYr#0HURqtorQQIv(t;c6{TCE#p$2%7) z-PKXux4z(->3x59gLLu#f#~-fK%ZH7*(Y^%PGab5QOE7E zhAKH(W$@BMe4RC_0!2|?(R#;BD4spN@=3a5cvk~<#Iwy|XpR(enN{~QJVNf~c)8&q zFP5Qmy~w&dPz}D--@&lXbLH`$ zrDBMxj|w4RduBFSSdg8iIt4tQ-f%fc$s>sOi7B%RKnvZR@t;EXBEXi$AP}%y@CucS z4rf!Q-CKy6%VO0(9e0HDdZ+PpJ_z>3(ZC{A8L8<;wn+bEbAxnAzgQ-z^g}|b(v)A? zaBtBVIQ5$46&jQ73!5z|;=yJdbeRhKOY9TUazt;fwOAsa_?+~Z<+cE875(D2(=_3= z>F_x?pnx%ow`kq*8qXx3i3db>N5-~W*smYc_>27+>Y~C3x<^B?B zsO#v+cB8Lx(>5Yd@w}G|&RA8&;>s-@ou||F0wng>3>M&Vd8C}*eH3a^-_>13#|*Dt zU~_x+UrO5hB_Sxk-fdA$sD%s0mMl%Hlaap;nESb zmkg(S(a&rdGv1rj5qtsLFS%tN=O`Om~L_#+wDW#sEKxf(0f2%dAC-F)+Wp#=(SSuU756pqc$VC zWzlKWfAge1)*wAH9&C@Yr%vGBncodqp{k3}9qb=4c z8E59C${ddpo0!@w;k64CG!Aa2RL7!&?v8}0;3 zd6y@LxAyTb_hr_)yn{NURfFF4Gm!dN)OhSpn3li$z>#J9{{15$lo5$e{Tfg01-Or$ zfRZoche0AizUzeLaES5LcqrwBJEbLDe*{kbl)C%K3Zw%R3i)>$kyKk zP{Xnjr@Bk6Ar|&3=no@>_PE2Fw)^JSSiSN=(g=SKP+2+U_B7ZK-&jsXF9CxX>3`M= z@0TW#YUHgz4 z2dk&x!@wZ;DCkS8@A8IY1lSHWr5z~qqVo?ktPaYiEa$!h*BBZLMe{ftQhcP$7Rhga zz=vhHn$>6EtyEyV^y?K5ItGr|`RpCMlfWC!Uy(wPi)1f%RC%=?A*chmk9+}z4O^?_ zqdRym6gXQs$74B?<+hV%s&!VWpIWB+cWMd7Zd;`8mK}5-c%ckBi=(n87}u)SFw-~LRz!_?bE+HQ6CV8 zQl$KnR5potBKqb3p34DC{L5(1S*7Z==OTFu7{vpl5QP!Y@G%^W4J@c9id0ncw}kw# znT+{GMEpmXsgQOA^xtIvl>Gq#-do~{t648cKiq1qXsd;%@xUyvv_9Drc{~g<%Jw8X z_iTbcZ-55wAu-&U(@rK$!$I> z57iS45a{r)rUt<*rw*-Z!#EeX6(SeAAf@q%buP!vj33IY3`;q#%uw)wCE#IJ8EhJ& zqlbeUbG5i~?&w^0yadn*f(6U!@D?pD$46l&s`vaqL9~rOr@iSnoNA1F3Vr=*k#o&C z_raTsaBpC+hBBy1WoSiPNc6c1l%Ku_gMD4?6xYkWSTygXrqYxYlHz#wi@+7+f$s)@9^w%X%vu!@dNIT#FVe)EU2 zlTfdGpbX&qcmIUQ$g*#kT&k%giseSVkhi%bTb(LKDtXb-LHJLE99Hy>?PLyY8m|xJ7 z`$YK$NX`~=zK$>HD?TZ!<4u6JE&R?C1(cJ(B<$(1BNf@F)rUH59*eO%3AU}{sgo4$ z8N0>WEjXmI=;7m&VOuRVo*R8HO~9oKO1h-)NSZ`nSq!D$gCe0f=E@76lCz?7VrpVS zS$LeNF3^@|zbY+@qg&O01~DueqSKuE|9j@Nn#FD9!biD}cgXkWrtq&cI>^iW5PN zlBB*)Z?0<-TCqQT$dxj^j-b%+B*b?Id(mqytCWxMMjzT4G8Jgd9S@DbT!n{vKloo- zS3Bam6%?}Cn!W-aTRujE8i=l$q{!|73T{UZXoA1XKcK%lP zd1YvIdvQ_zZ<=&Px-j|+Dp5^fQcNJ{qt;n1Viau5+5W3fKZu?ry6`Z@(ZUS4#Ks%^ zVRJ`pkkOa3W-ztzNkCBnUV&?O@4G@k)BS;QZt(Pfm8Q{uN4`z$Lj)G46R|tt?^lSe zvOcGQ;DrSddTjnZDM5%`{@I#+54|P|2mDSD*kbfiDo)DSo!5KO-=D z^de}^8bRJ&y>IXxeu-KW78s_enZ;2UL{$smkY8X>C1vJ#f?dm>g3?<}bwsN_`8oO< zP=~gneswgxsTv`q@O_8g;wpH1xoYt-rqR}CsQLO#Zz!c9yL2Fl0~Xw6MgO;NRq|a7ZlI8-;h5fb0xHn4|o5U0Ad4{K(!q@MiLpH!j z#x!E5&kFS2n>VTA=+4vw5)r1YXCAF}bCLCvg%N;+9Q5`B01iAs<2f%sS9y(3`TIFB zX;2lz&YiZ=YGk4#?(~0uW9(2$7RR28Nu@tyfkuwR%fRG!4jB9az&woQ`5c4!loYv2 zZL!?27~Jm1j{S)jO`OdY5b0k^Xmsa=N ze8yxz#q#@KN4rcOFs*n2AtCKVzcjK~>w64;G0GS^wDCMy%mR+eH>umBiQ2@L^VMEJ zz5lLe-rJL zrPsLQzM$1q74J00_9Lt_U4wVpujqE0T2Xu78x}akk+8T9Vo6T8wa$1qaCA4+yV}x3 z{@wt=ko`aOm*lfX&tD__P&(!`BN+j=;~_}gq#G*q`-VYpBA|^yY4dl`eU4yp;)fSC zAMyGv2G^!Iw>Ie1F+ERkP!@`@6rj)2&g+qBj-O%-Ber9lu0E67C(`EMWw&Wb&YzQs$@mYTn zb{!PJ$S=b=@ih4;;4S3sJo?f^=7r*L3;xs60RGG0Y9RjbRr|hIf|BL({as;?ipwp} zKgO9g3&&8MYb#v& z0ohx@SkZ&AbXY6CZ*(2(}-Xk@J>)gZDpu}>U&n7KG}B=N}!4Sur>UOYue#(LfqD4 zXXWXLqB_5Qm>^j?qoG7mG0#=eEiUM5Ho8E47Xfumg!>U91avs$M)%YjwNHt~mYLNz z{=!15&b+Csu-SQ zDMBTAhm3oXr8`ySA6D#6MATC4bd?E`rjUWw$@z+(Z)W~~ls<)qVS!0_@JI_{>qB3` zb%#r3QDUZ1M^;6fJ_ph9_JnpZJ^FP$#Bf&rY;_DSr4c0RdLa^zSu$8tm z?R|r~ULrDZ4D=OGz#7(E^o#G|8qIEZL70K4)R;$|Da3hdE#?k{x59v%+J?HQpe>7` zv_$wp!U|WRr|0P#m>e1~e7Vim+pLkkrZP02B61pzqkEu@p_YG~=6B!D~vbqHz_ z6LQ(Tu&2cgcYAv_eA04z`7MJV(6U8>B>yWR!ix*QSliFAJZ``4J`(6%5U>fWW>Vi+ zC6Oe2`xXc}H!f z9p8KceCfmSm~hOdOKG45@9%Z6GPI2|cBO{#s{t_1KTCfCiW@+U1wVd_Du*@eHTjOL z#{cRuSPl)SHQQGp zSJswJTt?81kmv958MwS1$nA6Ac$DlplXiCM%9YqwGp&A(OR z6`56N!=+b+3Bx?V>O1=~6sEyytzfv@8%>sJUMIK0;R4A)!KD}1>*xxlw@P8B`U+4e zcy9i!&yl}SR)i+dN;YC#U+rx=HYods@`OiODp)b_@;(FBfy76fvj-r2;ZYkZ`9B~; zUh(rb{Rue&aWKMP80y`*<4c7$uR~7pxo`XQVmK~j*%LTAc=bk;;)r|)MQs@O{e-UN(okoJKk(S_0~~yQ z`S9Dx2;c*BlW_ZlWio$;(LcoZ$V}b_i{BAYi7K~MoQ@F8$dNLz1Lf_1f2%J8j z6`{!!!Cm^N66Y<-p~V1RBt9QIgRhH4rTPEiR>vJx-%)LPF|4m|qGs@dZ55{K1{n%Q_S zZt%E=C>-%(f?O{3Fyt30)A;CE)$kvT6VW0MsF!>VI3_fJvm3}Ch5LiMODz1g_gz(S zXZo&697g1&Nu2N!yNakN5?GgwU(iB{9mmW>OZwkM5Rn1G@BmzMg9s&1`fRs{b{*~oG#On0_oINL; zqO7cxvy7sIpMs(Iu+Kje4h_)d1qc6MY=;(+0TT`-m%3j!_>iIL9{W|C=kPP+s^uAO z%@3WgblS-jj3yzXVNu>2^6l*vtYHnI&q0CWzC8xQD}K2qhwN*HtIt$1bVtZC za?MUQR~>QpU>svy0JW$q;J?=*7+L7l9~78=_yLPf_!$P!U2xbTJwtz|YiuWP_To~W zNIw&pUh&>WMG?GL*83kXfGA{?S2U+;VQ|~OY5~&)I*w%F*U1y)c1d>1TU0CcjWL;CPX&D(epZfmU?v* zXiRm%HR$^@;6IE8;Hu}l72Yg}GY5g?o(~?c=|4r3S0(g5XTrHjCZuQq3o3C{)n7fF zSfjIeFF_C>OuqTD4FmgOERSa5WTbE4IN}IeglJ3wYa+c2jCJsUr9-B`WD+>p50Lw}tp>uQr^-2SAVCepC zqDtUfvGD=0jj=QQ0XhFR#6cA7zGRmxlMGL#Y~VuGxR+p}eL%bMa3I%Ptlk^HGUV-8^Vv;k2Ln+L#7D?=T#g3cz`=ri;w(2pBTzIl@=nYk z5S;L~`|v;hX^Sn3nM>jFZC>kD{c$uzhSP~pUTX@7(+jc~73NAnu|7Pex$+A_vnGeV zJHUQ9KIu+xUutpHyGUYb9N^EQz>v8JhLRyJ>Hc0oF1hzV6Lj0l-`xTN`|6iSpyS8~ zcthWN#uG7Y0^0vRcyU9c1jycbG^R&J!Y~;HL#ht{iQmgwG-Kl6dwcta7|U8Naj4bn z+xM=O@v@&g35Bh^LlE1SgzCpkq(bx-lX#57)>Fv4Nb@wh@gqQTMWAw$bV-q;xpE#R741pKJ1KY%#^fzk)tYKF1^BkpTxgih3V15Zaj-!Z5zibG5LhmTk6tc+Kmm-*$V*Wir+5cl)+; z`L!kq2?utX(<+iMPZ2Tzib9zGe{{vXTOAK)EKUq8p{Qt#l~l*2levCySpNwQ>?i7^ z1a<%rMe$y3#kLu;sB~0A0?ef}CmRN*C zCwT58z!p#g!AxO4N^nFH!fd9vN#)s&XPHecmZ?1u@ofaiBYy9&*#e(!ld)>--ldIx z#-G<)>0~=u7?|Nba;D1J7(D7V7D!-?>^=A+h6o6(y65ovB6+BYFINr7TMG@JM@roh zFviT5$+9J+mHYbUU^jO{YPFYjBkCJv=hE&tCtsuJYn4g;J1!;n9*!?5MGALVh$H! zml|_1OudT!n7;t`B8A@C*FjDgl|c+7CLLsajQ_jkCYZUDj;#UKU;KFb(gqSzP`Oi( zlcpa}#}V8BrB23s7>&bua4wC&+eVS7RW4QRrRM_cmZJ$UhW}(i!NzVnCX}yTlGI$} zk__tE!|;-OyQFk68iA)t*5j2X~~eny6Ov-4C_dCF%8re33}+0Pzl*X@U-(FUi3X%>u$#$D?!nl|2V zoD5vtqqO$Yh}sr%uildczlsOAf>^0$!@F1E*Y^M!MV-7#)RYZSS)a`3S-HqrEeiY6 z(uITPv7SHLwN-ZPaS3GU!LK~&e~(U@SMJ@uL*cQXW5#B)a$C>NKVmsHE53MIdz@%2 zGPrj2G_$a-(|dQwr@kX%ft zbt?ssN=h0f8tVjuCvF2z4bC^uxKh85D$?cGfIbXMps$M~J1BI|!MZ z5pP9M(webP)XlYbEcbD*RbWPF&tc1v2W0iqxv?&W(vaYnMKxnOqiK6Jyv#g_$m6fH zF@;{Dq>utLx{*0tyW(@Zblyt0>)?E~YMcJxjecU;G;aAb_CyAoG2%pa8-)SkeH^mG zr53IUcIGLG>V-M>1#zD`)xEDN@jZLXJqO#j#TZV^`kPYNOhy(ri~YyffGQo=`4!73 z0e>ASx9xKy+UTLDPqU|X>;YInqeT1Ssya z+zEqI*IdK8rrNssHX&`a4_6j>o^Gu>JRrTzGP`RnoIq#fcoE!V4efD0jMHE7eTxE^ zZ`{`s!l?bUYRop{GTvCu_wVv1lke0{E_;+k11W0MVZ2E$K^$UGS)Cr9{OMGaigp<&FQu? zn!5W>na_}nM-tCDZj;YB2Wl~5-wj&fX%ES+FDIGmJ6P5yNI>9+)A@A#pD{HZeFpDK z0WD|QCs#U248;63|CY!eXk?Fn_?)kBpt)3{;pnWt$O$=0baBCj*K9TR zO{U&W+fE>Rx?{5V_WgLIa&x^gGmi?JxzS|u^q{IW{?da%E9cHnq8=~N37%xnuTn=| z3-I`+;;dE+S{sQ=XB~};eoOKS1g*~l$ezk){$|47k;raYE5#$#t2i3 z0pFrBsZ2t|TiH-Dvpy9a_gFobbzgYYT}jNMijwKx>a8*)x{!Eq!CKlI%v-pTBH(O9 z;#PP%t{nhK3nVle)nXiNPRPxGLkmqL8Ktb2S8H{<4mpK?8*Li#C0XS46MT|;L^8%> zlZ45ipVB6eM`&wImNa)Kf))vvt?&k}Lw)4bF;Q~YRj;%0oL0fQGafLW{pY#3uq z6YaAW$)z*7k@hS2MyJ~%xzdy#hd;yPBu3*_<+h#9Y9+Y;P2X@f#042bn|nGw^vJ5| zKpET8zC1ED+EjlGWJ|nI;JrDdTaEIN^df zaDw(mp$(KD`#IoJs6sc2UMdwe-%b=g&q%D4#;t^aqZz4j*9@n};dc7Do&+o2J1uMNFtEgc zS+F8LdpWto!Mt?l{(SfLTz6Qf{JsA(JR`dW{mJmxC4?}Eybo@96SX2mwUSTp(VYyg z@bq~9&wlx*ed@tH4*!m!_S61osYRjG4Q`$Xo58LA1&vF0h1=YFS=W|Ib5-_F?>(IX zV?K-~et<2PC$vPhRSNiDI~C_c2^#t68x=_MOT=c(U%&aJN5|_plk_Qv%UUfK#!eJp z|2RRKJx|>c6s_|T&24#>x0=s;;$fI_-p66k^VwFm;^T?cSo{Xs8+JmpShpDy4Zwws z)39pjB)4YA^b*wz`q2XYNvh>Xv>X>nhS6}7>QfB{yB_nK1RgKB9*OUrLo>h1ooRUHxS@Hm-muRCbC|}VB^L3(! z+POzQ3q7n=kCP8o0C6Q-&j&uS7+rU{R4u{1o!9dz9ZQ0{iT7p|~tp2GLtPgZ4Dv&#oha6Zel=GIpM}UMr zVUFJ62>b2Uf0&FTlAgt+i+ zqO0!<3SVv;s4U}a*QwZt)3yDseClB(=2RoE(;rVq##1u-*eAj61r45bKQSE7abTly zG=%)43)&0opOI-*X>Nt_;JiCmtgBoKXn_(Cf7H-3Eg&Vo^itjo zKK#Z36zw7hy!n8Z9fG9Y4n3_Q+7k5|1?2T%>-fRCYf=cp#ow{0G8omshdNG(ZZG90pI=?EPnPcX(RF5+ zT2pn1XY0+pTW*W(5=h2jTyK~mikP(;$a@L~?I5spCWE&#@F#C(tmN-?-yI_H|q z7S}hGYim8Y`Q4+-h@29)R+CdkT4E!YE%**L{BnPmD3($sXhC!0YPNx2S22co08v2j z2^mc232W3z^i1{D1Fls)zxHdsq2a8YiCP7YW0SiZ)GRNG3I(u3=75W3qEST?o%n=f zclH8ABrE~|Ry=|YZNFAg3e>1B107UAc#~8zCrL-8wzSy!g|z`kmBLSX^*Q!LR(F^6 zL&FUt+ufaKU~Zf@Y_zUohVV! z0p==tR7@ZVrva=&mS@+AZ^7eiBp|(@PdWl>m@03SP06q~9OwGF<5|LA4cptjx;8+I z&Bh&RCqjK+DG4sf7|?wZQ&b`(ajWyAgzW|3pGQ0e5WsN_R0btQ+-c|w9JJ*#TcXR=4Wj|IL(p~=9)JH%z^`^>QA%hEXo16k=KK-#+BxY&t8cn8h-@I0r~s4d=h@J`{q|D|s_QXXlE zF5R}K-xU%I7(#QUvP{%&8-^S}trmJp$^@EfDC_wcypBw?sn6rb;VFIi!|6TkM2ixM zqJ20QV*5&vj5XITF1E+~rh&S1@6~WuhSJ$&Z8ryYj2zuHHUVh%G}Pa;@|%nOo<2>R;%WFal$U@}>lvmFShO%^>$W%uG4UMP{f`tg_~qk-5y z`ayM_`N0LJJO#AyZ460xiCVW_#M$keOhFu$Tiw@JqBe<1#~L1tTXkqc(O)JA=yo zG$|2QWg?!k!4$n^1|jC*jEO52vjtV&-^UP>PHtA7{OOk5=|*UGwcGC>zYTxNZV# zzHHN~O$N3iH2L_}#`PJW`97t>9^g~(k#;=iGg$$EV+Xjci~&PN5!yMnGnH>53l^-H zM*H0XA4{3&E?wU$x7`$OeKXlAIFYO>F&7PQ5gvbsRoWGAsyWh=?S{j|bTwN%3+-WF z;a~G|m^J9|M+Kp3`;pJSQ;FLVEgUOF7s2YCjk7I z7jCB%YAr4`ma~iSd9$T6Yfm5UjyyMt%I@`>l<`dIfPHrDwRhZGa#VDYkT)b%#>1?u z*g(m?;4yD0;v5}o+7*(>Xtb{i8AQY56bfE+uajTePoRi}4L^5ETp*)XYZe>g+$+X> zRwh1tHTUJLvY(bqkE4vY`e;Oc$>a7Qzi6DWJsyj?hklv(xv1!`u`fPCBz&cw9foYP zI)hER_uLIXy-~h@ZE%scqxao8^1|ZHharkApTl&WwcQ9k#2t5}#%M^}{{`+ri;^gt z8j#bJbgykcB+TMxi2I@}drKwBip8pLJ5GDkBDULDP*X-9;Y2Go+EF++I$B2;i}yl8 zLEKkC^b6Uaqf{ub`ZD;9h~VhJnw$dQdzs)(S8Y@|kB2+Yd8@0&y;7EEz_{1S^RNO= zRsnw8e|u%s6xJA3o6aJ%Cp9Gdsuwt(uq~Z~8OJbG>S3YcWofm}=T94bsI)>>;CQ%vFnR2hu2C~gy?vw@~D&Lts6Q5`4!d)M2Siwo3-6Wiz}P}%9>sHvKec_V6JDVdbEi(j$EbH`(Qc2Wt(BjzZ>94 z&nUwaSnsFs5=>awC*T!iz@RD9nX<)Z`8vb1=!R{NnZs0yW5w^p7C0nuE&7&SOS>X_ z*i1<^oR3Mm(EyXua@_xHWPQ$6=CvKvymYd5!`5uAMsX~5RUkd@P-!}z zdwkgGhI(_9CVs5#gn-H7qUv;4aLKuhOgRx5b`TXdl?S;LCcQ(Q_)-RZ5rk!i&hG%T zk=xuUX$M|YM#}DIWUq-+q%fN8qtG2|yY+iel-ILQjK6LU3Ufh_Y;kzqdc zz9E-hnu8f504;kXiMo--7d=Lv)m5+2M8EhEnR3ybwe@N|1{u0#&l56>IpVTz+i0BOFF2yo zUVRHOCi;ri`fe-bbJ*UU^bhYj{wRkSgQ)6K{lVR7&=Qln&u^P;I&OTY@(k43lY{oA z%Hm74khm-LKC=GD6{#B(aZZs)`z7GyEWYH%1w?4 z<3?XXk%?vKBc-ZM%t|0H-5`Vd#I8Hap817fVHEbe?m}y6UX; zr|I^{%`4R(?9BXq$TBz&+gE}<$KEsTH{fwZbK39C;-d^^phZf-&UNMH^a4pk$keUD zaGFA?rW&N#!x+TxT4zfrRmsn-zFk}1?gMmm?@cLJ@Y>1op45nHAPts}0m1b0&iFndyqR5DJ z$y(adxGV@P$35%Z3V+5R$Zdt-4FG+6Tdo#8p>Go(@MHixFnN|*HaC&Eet)6>qFA7L zJ#z`{Nr+5m$S-?dc|3V`V{?bQv{Q`blnv3`F;O8ckV+gIYf_<$E^gf#ZF}2N`mkG6 z7E+5h@#r<=I~ifL>DKEx^EAW` z!e$}%G0{>9;Z9jlTx zG;Gn8A4#+hVjhMq;)+ajQ=@kJij+zy@i?m;Yf^=%&;RhBQJIh)J+tO}`8Yh^^%+6Q zb{Rm-gV>GP8%jrc@-_0pn60g*PNdFxSot2F99&0)4czFSU{pBJFw-r)j{{>yVwls5 z>PHL*ax$V^j6CUGuFYVIxQix){g2O6O$1tSKa+VWOi)ZTBe@|s1Kcg-p`=sLJkPLL`Myp zlhd{VM7cv;#4zfMgc*v=W4ZgH;k1t`^zHQ#f2LifmjlMQi(P*93|qo5=-; z&tfKapWjAkyTZx$w;I4SjObec&<1A>lh8vS=}46b3*&+d8VF} zxQ=m>mqnYlR86hHnLe2ZcQ45Y7+5@;Y=NJVhY>q9L7RhC_QQ?C&=-ryJ+|jvdob4z zL^?I(BE4TnziYeM)NY%oI#9@OAvGO{BwODUzu%Ln8Je&}mT*rGvnqw8%;#h*5^Ntu z-qR+MJ`Ud(*$obG8M?yfDanHVt)Alms}*ZGtlbDh~P8vZKxbxAuT$okxq^ftgNX$-FI> zdc>=ZkeV=%tSxqwcl)Ey)*@{_pdC!XYp5Wp%K-66PJK?b;W{_@J3;jQu0b^fbSUu- zc+@wsv*KvwoxzJVf`Di0o7RD6Nez>@rNNVkhUd_%XHzU~GBQC$*S6028hmi7jY|Ve zcdjMsIl(6SJZz@_;4_GD&C2KiHq&D^jHGD!)-?CrGN{j%$SrQQ6d+tg1W52&C>CGr zEk#7jaQ2dyB}+m3WH+T!ZOas58CN3e{&z#Mhuv%j#o0p}VW^zDUaD_WS-afK$QiaBnr)SYs(TOY-$qubOdc zZ2r4|slDloGArsLIQ$)68s`fobLQ{&H&d*pK28TA5Ma((>wMRD44^V~81&8QUF|1+ z*EQB2R>lCU$ULfBWF_KKW59bW(8i`7A4R1?+cZgL*a|-2MtzV8$Y_<}+Dj6zih7X; zZ*-mpbmhJECu>@G=}xfWVfZ|hva0qUa*2}QO0L|5$4A5L2tdw+p}A^-0?E$Utn(Ic zO24HkY%>3z77L=PsQRahv~Q9a$nM- zH>6HEccj1}YDi(HqFYKid4$`=s^I?DS{J|W%J=$`&(G+NrZ37(wUp~MXG;!e&+*C8 zy+qAQ`Dy3AB`sD#j!#CXojf7Su17qki(M8kbn)OA$no6Wf31j)_2{neIl<<7D=bg9 zh@z=Aft(J(^qpH$X&gzPn+vAYt*akpCFa$;lLU^{v-@DT=A7F^Wm_Pm3vtBK-QOmR z!2VA|vDXVIelPqiCikdbBKSUwV(!jh5L`R*w9ztNJrG$OpH-ON2A57+qL^iV<{e z6NES>l$L$S3sV5DUgP`Nr|3>GUO&!|azj~Gk+{bMlHpNImOv(qxa=OkT||`W8a7Rp zPMdqs@#tsW3fDsx^%~Y)PLNy{dfGV1Y<#F`{v;N?>+2r54V2v$az@4oiT?7Dru%8p z)#sf}pyJEssZybJ@A2|zvSbTz4 z#JMm?9(Od($2FJkFU`~%2Z(ByVJ&s*Y&&gxQ@QGj)vAEUB zPjk{X)JVf;68ZxGHtj=BsyNCgtK5$~0<~kz9%@u*SBBoOWO7u)E9_J2EqC>t77`uC zlSaU*cnG$<PIMD}vi>^~^yUR+we`9N|k<`~_$wY~fX z+yjK*@J)N6@cyK@PU^Ow6q_il7og9P!l7VEv32i5!q~NHHJu>?>M9xb@cd%AUZE#p z12{1^tst48_ct7h#m<^Dyit=a0`@}4&zz#+AumyILDMI%m}`g^#rW=Y1Dn4V^<#HnYd-C?m>j>-R%tG~ySa)d zkoD36wx$dxn~tWc_PZbGpbIY zXu6hqY`ea zC-`>&$2|R1FavW;A`uheG0cm(o7r5+vZ`6U-f6Em#LYLpEjP}0$u9xe(Jqz7D6H+I=Y7Jk3rP7d=>~}qL!$}uz z2Z6iicFm=Wh&vqa&zZi7eG^r+vuH1INsGN># z#9xW{+z@2@=`2ATHV=F&`K4ZP9@90ZkK_RWw~^|&EUlBBpI)dI~&eg{b#1dq7=i}*IrDgc;?8dW5h||-kSXBE;I|LW&myGxB9JqVe z8xN8~w48 zd>nG=sftg#DV?fvrE|1f8Y?QDIAw9kREmG)+vsCjE-;&|BT{JAm*;JKYOMS>PKIKQ zr#;yD25~!|zTS{c2Pg&P6{>0tTRlMY`T&t6z4f&`pGuLk(p;VSma9+TC$A;9J(``F ziVwda2YUn9Y$w}5+f~6)HTL5Ms8h^qFVXfR=$oXoq)ZFP*6N<|g z<&Qcb>dJ~8Wd(5B0jEltc@>f8C3#dO747lrf=fJ@R##nC4!ZsU-a_X4h;8#*<01QLEhEjQL$V}6d&=Rug&LUTrU%I4y- z-vt~bkLD8($NdrQLgf;(6h3rpdjtO)R2-b?L=X^I^?(;<+_IsC8Gd)e%Hd50@z$9-)EbPKv**HM4Tg4*{n+C?idgAfmgel^FS~X ziPMBtPurcOvQ?P4(q6bi$ZVC}8z|I(a3&KUXqv44KoZC0AF{K{9k?XnLcn(iBz1)x zvzh@_Mk&``oI43oWa78~>GTni3I{G9S)w`wBj%lM&88<=epzTjJ}D{Z)mY|yq-tnz zr7f3ps%qTnTLAXA(hT>5Cm^9p&nE*va_-CY*8)zkC z6J~A)#DH5W&Z&lK2E9%gRMekwqH>;Qc}@zjYPwgP;6E&IplL~nHT z+t|%>Q-JaxiAFp zJ3DGV3#+agG7pky)WK)#DF; zmG`wkc}dbyx9ow7b1{-VbOIJ|!(Yc+km6pq%AFdwti4+)(X&yW@#Rv=SgPcsYy^%A zE-sJXD2$djcGKqlU`laG)c|9hh=aDBrg8OK#{c-FpX-7e{@Cr)Dvdg95xS2lMvGVV29sUe;oPyI<%yso??lt9`l%uA7C_{m65m^u{nfr1?NMTB0|tbB;(xJH`yQ#2kNy%gC;)b z9(QS>4fth7(7EN$k*2;u)UDE3mO_R0{u#GaE1F9wWSr2fND)qctbj*~Omcq&OFF41yIp3Dg`j#Ig z!#O6ev3EaGY9+PTTHV@F22P+yz*b4UkWae_9&T7H`Rq^z5=!eJx>_291X!&qeqK92~PxL+2jmTsAjL>@*Hi2Dfc zO8xJ_;^#C1IGpF?#p_%H15!`u(oxj_ z>r#8Hkb&k%y7r5KBk83e0KAY8yndM}ATB^NywMzNx#h7OerT_3h=zLX$mjAGcICHg zfTe9q`>WjfF=1vBo*&h!6=)$L0*>x_d5>>;ntud%C09OZbzW#9??L4PAffYH??{>6 z5;iRv2aUw=2%0)jb1s@p^@KA((%gchn@D=U38xcX1Uo?3G<5BrxqezG!0N?5e3^>R zVSB1D)%Zf4hMkPPIIc;liev5BaUd1%^!k>7cBNxg=z;x>KPMHD_(?ru1g}6W2$Tm$mzn^=vd_TBPm)f0zGxishgW$LNl%tos9;kCu&Z;W z8591vnv>3DAIR^sX{PD4hGe>=qA-zH6C^w_-^>y%Tq<-?L$}?KwqQ+l7!5+QUkjy#3LNE0fEea*g#2 z;9}6JgMke`-FzoR2wM|!3h_QyDh7e{IgMIGTnGh1u8pq3+I-@WpT|D~=$}YH9{9Y` z=5umAOee5!W6oS`u26oleB_9>8pxk9Hz=9;wE6x^D23xkHxN*JOLg`?4^?43_|5X; zx4&H>dzCL(4b0&q4y^em?_&~C*)RZT)oUj$tiNoGk0{_9;~p)g)0HxPruqBbDE(V{ zH@Cg7SQc2_r(;=y@p|o9CurR%-PfZ{X|t$mu{7_^aAK_ls-y87mT{+GJK=WQH@{EO zd|f@hoO*@oHC6;3HTX<^C`4j^b%YG|`33?YMUT{Gwwlvle!uWZ-1|gxga*~8zk|IEZW2sht>drhW2DblWU#%Qt6p%5qm7c}21GKqlnWSr{*rFG&jF(1<7)6}e1`=^ zw?{;V3%!hi0HD;tKVl?#hWH$vtx6-E0ko|O5Hh;nIj%0uku`aUM zT!~W1QCeB*u-*0POj40sJB7tSPU%(zr>WV6c)$#SR1>19WC|#D%86{ zjF z#5zMCFUQE;Nhr1?+a3@^g|#`V&G>MMV}hdM)>-2qg?AqLBqmM?qH7<1!51iLgeJXl z`YV^jgxdTyWHw?kRBoUhS(f|ZxLQ_fDm+vgSO-76C<9HowwNs8i%q#uyR^`Fq_t59 z_HEtSs5#1qt1UrsSFLuL3eNEh#s~{t_301+fP=AX57r3t_lMHuqCSDCG-H2{5)h4D zqp%Z289&gG16&+D*^Jll6M<6lWc(VC|LNFOU#1Nn!#Uuqk_0w zJ`*;2NAF5*@w=y?FZO_r(mScX!Yk9E_b9i=4Z#*?g6!IYB;MuKPxlL?)^pa}*La?U zg%6FZ$8Sgu!{wEBD^zrS7 zXV23S%)f9oAYDt@nmk%}DShSnx!Q6rDAF==yjBv@bD`9>_nU@(G=Rnpb*3h=b9-X1 zQpQEkTY8R4XL=#A_Mob0#68w@A944@SjO^0YjZF5f$&{$mF8i6gj70cup@~@dVRlI z4yZeu!SR7m3nM`2`4V{HY?JWWUXX=dTlTU0nffgM?OF*NcZT9l zdZxLCCI>~Y)Hq2D%bK~2sG>_bmD{qLP`J!F_=+Z64!|6m2TTD8m*qY^Od1qG+Cz1@ zSe>E~OSaUeK=jbUN!K>Vk-)5Jm;!^hw73B>R}q;4YJI&Tf&0slPnhzu zeE=!fE?v&AL&FeC8IF{!pQlWlL!7=h@9m&m+P;)p(S+nZ`eUH^Bv%^TAY089LrW1Q zZc`}cr)S5i8sw%|g|UnvC15*A}*=m-^ic zB%B!_Ar!R8Z@FmUZP%R=PfnK1DZwfR@^T-2m@Qsw$s}jsVB+5GUBJnS-kNFli*9Z6fdnZ` z>}(Yz0-P2a)XGoR9^xsl%~z~;I7B|B%9mX&o^aevaXMWaEiKJYk*%)vYI{Lyh1V~$ zNhpR;hW$pS55dn-lKNbu-m0P(obRcLhLu@NXoJ-B%n(ZATcUP37l0{(#fVC-${jJMFkjF$0sB=dQ?#>h|I4kn(ptM`^R)KH0{6%d!VQu=?3@B)YzA2u+=Qi>M%(Btxi zde~f&I+lJt=21s2#_+Nn8;#!tTCHxH7F6Yp}4QmQBe$E|1f zV24KAh*^RShS2k=S9zBm70)hMV*}c=6Kq3zE;gpY)bcl-1aFoi-<9A zUf<(vJeWN;rbHNbBS=($pJAEIT-N6HnGKGzxaM4MDetAmeT z7oe;Te_bvE(PlLzfZk)kbIo$!z}T%sSzTXHI~_%V4pk?>jlxzRXf+T3_QHpihn6Js zjltqfLiSUF3-M&dc1ilIR=%QZNRPQTwfs8opJ&5viRlJWAQ_IsH7=f|D$xVz3p+h= zuqO{c>G)}w+uHsm50o-9Kn%xUYQmY@{F&n$QJTfmEx*q+Y4m`@8w8Ia*HBuHtJew$>x6QFcak@$A22$dTskP9i=PO!0 zp9^Dcx}3kz!P^F%G85&%EXN)$R0hbcI;bbkE%WSgk_##bGJbg^O!R(OWgmSwiQ1wfOKK1 z0r|J5;F$j)@wE;M=eJhAnqRJ-|k|@1BFW`73}io4yLi)g6QC z&`Q2neH)$4NgmT93M(!Uh*d`{cfc&r%ihD4D4w8%3}7RM3e@?FXeH3a5n*+4)=|RW zYonnw3vMf(cWe2?GXTpkN^89YW%3$T{CVE{fGo|4t%=-XD^h(QHx5Sh?zwkxD zFw6ep{`&G%We-?3rLQDAX#?(CFsr7heZcOdcEQant07n>m(7i*T$jL;oee)7+M8tOD4Z+8a6x)Xt-dj zpSn@MSeiu)T0X`&&+v8wwxnGxijwgj><#lzbDa~hKSf@(l>HX z`j5TgnjvzH=Td^-`7Gx6+;}Qn8Hw8)>jf!r*ueE-A>=nFwDwocr5fbBu<}nZNK}7W>nK*_WiXK zrJ))F_lJX7J|Dx>a#k%qzH&tY5Ld60MZvKsOl(Q!oZst_>xZKib^sigEOD1VoP981 z;A~iiV$vO>zFr!7VH}Qj`IWJ9Gj&kWo4tz3l334fOVePeW?h$g|ND+;C+<$v3VIbF z>6#@Wx0m~~i{m6`jvir;5Dc_>uNw$zp~AT~oA{k4Fw6ul!(wI&r~##4l_@$Gc4OHp zS2DzOP>?^dX(8}@fm(4!iRHkf?+-qKMg&2x)Ddl-A;y*J)O5J;yrS#ma{o+z^}6h) zx`M9g!Zw+x@>U-JqvyH96PYo3F4M<=G9v}o63{ZMaog8{X9EFLRPj`kYkP#(VW#^& zamb}>iHYEzIVKgmPZR^fZV|Y1w=6E&g26vmZEcSb7QlW5i68g(T+%7CT(dB{pndZ6 zK9M~gH&~l;W9z9kgE^oWl@C?PQ=^1}wny{iR|dC#knt*Lvim?7Uq8i7?P zt88(wB}+^)#qRDRoLrJY;@&Hs^L+uKfuOiC+AJK{N!qi%HT&2XNO!d)`<#=6>mK5e zZYDp!buU7^phK;DKu8aYlXsF?Y@t0*Cn$J#9nd9#ndB3(=;$oGbA{b;Vw|#OwqX-? zT>SVVEVC>6IdU8bN7eE`!wauj)VNQp0W8N1Xg)kLoVu-5Qx8nb3b6UFv8E8?LBBS8R{+1T@#N0vxyO|P3bTbmh+@$nP_O; zNi9Cr=b;MgTXR|(mjT;0W*rOD=1B0UujBQJYRMrJiE4G*mm%@m)z0joV+Qdzy73NR z^ZG#;crbwom*KM+jZFC<@g*5f{h^GCYUPlHGSI>8Q9p7bW0HEw+z}25+j4F^qZvn! ziL`ZALA54SI}+*EYhaTZCd%=4dK90qk_e^+pD2ONE&|DkC@is%d1V8Yo3yX}_G~LW zn3|Dj(iRLm!FGv0*H~lYnwI4Q>)ovIlxq}ZmAK@AeURXe76yjyQl{NNaD>$}?7(^c znBN_q^%n#U?00vmf6)ngEPIL6HS&4@bL|sA6n#F=scBgAsRP#dNME3pGC}NJ#Z0Jh zp3-f9#>)O4{yNVi=cT@K=xuj+zy1-vp-Cck@OYQ@y+bG`CVt7G@4J=HNFHGp zSncBx!7br%nt{0`d#`jLxfeWXbdyE3r9j@aiWcz2iqgiP(!MmDN|x|J7C2uK0_u!t zDFzp1DO!Z&%DQ@i){JrCyV-%NIY0z%Su3B2eu=}|@wFnWzqk(kheqg@%7RFWfQEc> zu1}%06Og}{r_|Ql6cQ1m4;xuZt)1o6tBNdv4t15U%;Jsak|tJkxXLM)bFz>xm0@lf zX;WhO`fS*%r33**VMLDtVz)9cCa|7?lUM8JudJsC3`u48u5G?N0-~~)Fs9~J**DEP zBk^?(k9+dA#mooyjcRno^K4S%^rI56lcy(uRf5tc(=v*sH_d{K`J;GUVQJh4&>z8p z1jV!aLOBqt3|E3fF1|{Oz;_5>`!L!3s$~}bABmg}i`{o(g`xV3N6Uw8dU;>*suC4S zl6Z7MaC!nKxUUY}nR4fuH<@&uiK_bi^Q!ZtIwYjaC!BK~*Lt6E)NFpceWQ8k(IRxd zUcy(DR;gvB9{#WePe}?A8|Q?5`&}D}yIeZ1mXn7o~uY;T2NX z8>=%jGD~|KXwLgU^{IqoZAqVcINg5va8@P7pZ&qn!|zn&KY{QBU<1SGL__<`I$rO- zXkU3^;4)F#n{OlBqapqY_#Mzq{C0!`D4rG|ZEMo;dG>>53i7Sk)>EQveT4RHYOZ5* z43@vu^5OP2Yr(r#56^*~4uJ3A+uh^_P(IhS+hEwHZx!|)=n|*`I#z7SZ6zELbTTj2 zyZ|0ZH^I6E8O2eQ^o(|B4ZeRumykq8?s{YLJ4)>6IoP5VRYF(mbV|i%{&AOX`j-I0UA#>tL}Lmn4AF+IA|&*lbQtv;UA+02$c0e zkzXXU%7ghzL4cs}!xgFg?r~m#!3Ob*jr2*69mM9(B2U`Cs1`_#dBmC=;Bkg1zXuA> z^}i-Z=Yk%za;EcInv*73KeiU%wS-~T@oOGiS2yn)e{mKX$g|*vFF1mnK>R$GKa-Y` ztw`wI?%ivyvwnA1{^2N(145R2ebm_Xz)~$&Hh_4IO!v!=e6Pc8@@=37Q%2o$F+t8i z@A}T2%r)6hA76r2)gurV-6ocKhYPNKbbJQ~)9C}cA1|@pT%f`JQ?d?<7K;VkST^mN z;h32eB<~Q|X+h^YyqyDC5$5h^; z7z2qFXFp2-YPS1mfUI&#*DB6%&fWE>1zFB{x&+sQ-D(7_D3EU*j|tb}sgU$B*RyBFz<=ADIY zfz7jJi{NUq<*Fmsbv)xH)~!TUD(y{7`ZD%uc%Lfx-5$j2oPgc$F=66|KSCQY9-?3u zT<=r-bOsQ&hnz*v)6p`v5&y+Mfd~sPMib`P4u1{bT3o>LC)4W0J9G&)ljMJQsl)BX z)tq20W5Gb>fcyhZt(hCXX$xlRG|>WFBfgsG%m(w7K?KRb%KdF!*molScU|e_ldxbe z(93F4rF^su?E!kc&xEG}8LzqC2%~Gi`-?*AygV43CDVqVk23qhTcilUnPa8m;@0N9 zRI6hYT@SzOTct&Tg)(FF9Dv+xUN4*T!1MDK81J?HD??^SZQt(=>Gq1XwC z6Cnr)DYrSN9mtHKZbxh7CY__Di3G-rE*QWAx`KI{52v|*bY}4nx@=iMvQ6Az%5RUx zK8P8c_g54;aU8Zd%jK%)e+2Bu;dwd73pn9ijXIw-Q^#3ST8VqHOQ5s($%P-u3W9nh zn9;zrZ+Lcl0JkJF0-*~p?hP3wyrHU7I$J=sQ zTw`%iBqdgKi={;q@`L3iFV(#Z&q~&yf~Tjo>}Zya#tD(O=rsAs3uQ9~(IK zJbMIPkAH{#lBZj+;<9?sQI+p4-0x})8ZQrmDd&2?0{BT4{Pb1<-@pG5eJ8@@tdRX< zJZs$PR!@Z;y!-u|Nt=lz-t;!~7kxCC@>Un^g_Ne$pXGGi-N=3Ax2+5|T52?SJZShP z^k`&C!ncOWR(EB%+NGezYJdQV8630YfA`#g)W%S^zpC78HvEx&Be_OeQo^Go!I;dB zlp^-5L2s~e`@U*Snv<-;#)36JDZ}@KXTkoqN16RKx`ggJ$gmpz3>|~IINA3GFV68zzUmk>d;$D18|mQ!NrATJB9RW^5dqiUvR= zf2qLYYLtDI1VX&G3T|)GPLM$s-m!Nl3*$L@ChbDN(tFJebV$b@r-(eHWxy=cLeO}knuWRf*gVy^onn@ zF92;8Z&!6g1d*)k**Rd3a~f&~E4A?=!mZ2&80T-<(Xy$IWu*_N3B<(dYR~ zh@Vsp?YWv41dM*&!LH;-08JkSJb3T%dH49Q4t8GMO;-WlH+|rRWdvTswrI$HElhb%O!T~d<{_qvc2Um)INvF*ziIwqUVMkjr*TrNS zAy?@Wq2rj@j&KH^9G|_~ywj3^<32))$ek1Psoa70u_MY|Inw)8y0LNug0ps!%q5H8}^M z`qhrV#$oI`ONa3AE@lFn57(n)C*#{ymdqPDa=pqibQW>E%Bz{`ufK+3udO5s?Tv<_ z2K*;t^qjR8`HwQFp+zTj`R`%$2k6ri4X}R9%j0F73ykQY{g3yNIaULnqnFneOwxRR^)+?dc(ENIk%Sz6C#|8L*fj z?g^({3k{|VSjjV!)X+jLo6lIb#E@_HjuB`|PaIfuhH#h@M^k&r z^~!DGSvu13j}NNE!b0zw=`~wUovT9!?wEFtC>qu|L0#)D1#Q2U;w*mHo``l| zC>Y&5Fk8`|$-?Mwa6Rl;Y_1f6%jC%Sz|ugAMEzvr^n`QQa|qV$Tc?xo{CEpxb!J6> zX&>zs6QL-mr672CV@2c@GVv7wp-uvC{QhZI1Q@h8+ade5=U8W##5_M_f8mEda3Yf0 zCrN}opaE0aYLQ9cyMe<@R{$;l5k#TfwMn%sGLv@f)83*0uxC{jyVOUp}8ka z+uCoi@L3vi&y$oh#jucQVMV%J$u!@Tnbc-~;=xZ2&xculQQ3m$^BI&V#J~z&@Zjv56ftv=)T5k zsRO@-pSfoxnU+s5@|9O2w5F?e# z^*v|oftc+Rtmx4PJFiE-N_zeaC4lq>{;lorF#%A9X28{evfkuOU9M zgI;G**l%NyU!g$$@|sWNjRPRRn%+dlYXTHqq~j$_0gX()HpK^jcJ_FFRMG4R$3OTe#*{vwBvJqi?pOi$iElLX3$K;z?+pmK|1aMD zSI_IezjlTKoJ0M^fYe{Yr~l(2|M&mte^|svHekk|?xUQ4i9!8UG5f36E`0@9)iYuO zH;De~Y<~4yfA*S>@nz87WpgVF{s;E>Kfb}=e$&TqK%0+nvmwR&Pk;3v{h51s^%LXP zV!c1Hm0yVk{pV|E*?=XzAt8Py`S)+}pC8$6Ef8z(%O$S;iM#vTqxkRN@2`k@CaQm6 z)_-Cy|K$Dq&ja{7|MK|_-%^|MmF)RDzwqaWfXU zR1*ErAZN|ylWe_eb=?)imms0l^8t*RHY|qviSP@c3Rn5lpIX_)%!B37z#DfTB`&T@ zOfSZEcx5(*520f=yqzfOK8qeJYX!jbJANn;?(ZH2jCe(qNw$~?Kzx)ngV#ysGSN%nCvbCZN24K%^ zCD|&|+83`dym`D#c=a!8z|^BYe@y1(CK9%?X8{{5;!#*6k~(>uP+Dbd}UOyLuE@n91jsmgcW7Z@Xog<8F17t-feC#1h?6k z$fxBE(3tB8&DNXh0nM`qPRoPBWknh>Y|-ERuFxOFzvmBc4zGtly;S^<8hn5AUH|hx zUjvQqaGgqlnBc1-RRAMpJp2BqU4D4uwa2%sFF(DI2U>^DyK4a2#}2y4-m~~!5IRt# z8XkL8Ox_&Mx-D?s^~S|}!T+1`^UVS{0XGH9vM1mR#<%$WcD9G$?m2Zp3SGY;*nDr3 z=}{g1216Kw55((zG132~=y^zfd$UEgZN>xqovUrjq%Hn`JX6mzmqe}~Zk5w08@-w| zGGra26WUAU{}a>xJK;DD6q?~wVzv9ioA{mJ(cn6&0p)xqLHpTFV@0O~Fh&fH2ULB~ z`W90hq||Rc!5!UqSs%x9BY|eC2T+;&cno@Vc*Wqx4l|)0z^A*eXXbO3;Q7tMPM6K8 zhHjzK50&`)JWI#xbH3PRXJ&D`hd>{%to;-T1s6Kn+PnD~g5!ngq>-pDGyKT>2_S~?!d0^lVw=ZhYILIm;^i=O2prl)mP?BhU_jdx)FHZ6_30X}X1Ft&0cyd|hBL%zq z?ATeqY1_sLQGt6E1OZcY_bMbmK7K9#_M(NHMbCAnQ3~c~Z=;`hmk1Q1<11IkN09FK zU#g6*t%#6}gmatC*L1CJqddjw&z`?Tdi(L4dhfzFQ$717uBV|>Jy7rcYS)v>g_-mi zgP?^XRKM4zFa3|RS32l-I)x3`kh{Hwt3~aOOq)QdvdL}1;N!lQO{tnuJA2vtW;$;X zFg?mSn4v#a)pZ}YYi`1>AT(B8%Ipr4B^tRCyhgJR>6gG(#T`2g?~oMsxldewMx1Sx zrb$$kQ8TUcdo9!0bjx8N=+Bs6_tXDiVuLR9#sg{gPH2iBMUc~=KI@;gzAt=RhONwKhKMM_lte*N19-IKdQSA%(WSC zM2&u^C^k|V ze|mH!KRAFs-^+zU&#`CNWFeu5*Pz1Q?IiZB(0Bg{3Lu1Q@PS6KNT9s?$(1I~Xxy{i zu0(MH*X7b#_bG{s3qIMq#PseRJ#OVUUR0VLY*rktyHDdsa~yic;m=+*5ZwGQ7jyLN zgqB^Qe}w6xdX@4Plc!m)aP;KPf`Mzw=JSnxFde-aY`lSmjqF$C`sD2DRW4=36)kv| zw#_k$AIgAbha!igY!6S5of191ksv>c?i+=PCdMH*r-K{!ExQC4I%<;~8oyZOU0W*8 zK@MtdGT|s_V8cHTVe;Ia{dUW5&a4qd(JQ{J*d5za#;zUgB<<|;BuLjiYvt+m98p~YV=)Ng10xLJSpkA8Aek(~BN zTO(;TyNuhJ#XDn{ zX!lMVi`u0KpW+rF;>%yrU`|d4p?9#pc55+f=T5+GaHl)QlD}IuacDq;sH;iz0ZC9c+@TvdGpCGPUNFwX~_W3)I#xHu_!Zt$ui_+*Ng4?Mm0i z!-o+$M>O_}DQ>R!^ti{YiCqp^Ld9#pKh)5UP*I>HU2@4QF6$b#YEB8D`=oJyIS&e1h?pVQ(2eyYD_F|X@v@CI zi4OF-NUzGDHl($gRlGA7muWc9)l8>BUd57BV4b<)fv$C*`B_U%!`2Z&028vDC_Zc8p2s7^r?WbCUg=`O2F_?-V56a{oizPxH*=f^ z8MpiZA5Ww|{Xuo2U9$uG{ZD&ZPO2iuG3#5?)g!+BC35AbLi1lzoIa=)F1-zaHQ~H1 zE6Xz62iBK&LIQmUZ;?khiQsaqR`H(w&+P9%f9Js98mS02Q62V*AWWG&Rgy$FPd@n$ z0o@67?=*O*IERbgYgjoU;}J$R;hq|;EV-nmj-YE~PHH4;aayg#xT>hB$M=VGZ@S9H zY~wWKv&V%+AvxPSK4AIs!{pqc97vi;-=(sz1R64ktX+|7s`X0;{FSF$S zuoxL1wPGGurpxVxu2(LEg6&5Sat*hYRIKq5@8vQz4;ig+)(Dn4uexHEDoa!MLKcs7**-UW^7-bLrG2U17FSjgvnyf z7Kw@e%o1mXblw-;pG}Est7I)&*2uPhQAvbiIg{YH%{(W0D1?eaQcpaHy~llM6}Nw| z`JE)VlW(GA`AdlkF`Z56K=ep45i?eGG64{si#uJJOZZUZJ5Q7HM%B~Ra)#4npO>Qj zcs9oTiEPNGbBX9M;wj#%(Q5iE<-4@;78#T)wNN>>!l&`h%Wpozmb2SqX2*byx;MZb zPaV2MIl;cBvYeH^os68PNhSmFZ5tNLk@IdRZVP4E$B|v>gbEN^C&#oP%cy7?6->#J zH;?DBXs#(nRXru=SU93K037n8h7GHnk4`_rA?j*ca{CIX*c??LonN<{SiScp*9hpr z6^NLgjA(rYrX1CvOkT|0B~VIJ&AtrAGb7PMx8oy@&2v}lM_p}>SWM2tgt`HKE+gSHS$rh(|GbUkFNDwO zwKEOy4T}^;sm;aQg4!TN*<{8t$%)ITUGwh&Iww1W#S|Oneauim^XcSuZEr7qy8-V( z8(+g4`^~IgegX=GRqrQkWy7y}z)lD027j5Nhtk-BTm(&bwr<3?%i!r4U;8S3CIG-{ z7z-vVk_ua$d9mjw2;&{?{ixnML6&v^M3Q z8*R2HZqtD{qo^p2(AEd-CtpOZvV~BfupmFDAj%HbR{I@mV$Fb&gy8na3Wf`;`{Rb@ z8*$Z2vLr8bOyubI0&7jpzj$zMBEvL`&d?RT&ZJj{AEdj+!(9Xh6U^Hj| zMYgTGdh%gwv+aA!#%v5a7}ShqUzUvS0f6Dc4uS^l5GML4E`g=`aKWkoNr5~n@%L1| zv|4|T=;AJD*Tf-K{GdDH`{=kx;1d&w5o{4vqDwWjotf``67rQG0J8%rV$H}= zku0+`E~{K>KJmLB%FXI7&RLo=tGa^Cf8-mMCT~W+>JzqEe?b;Rxd>t8HV#0JHuLrh zXP$1f+LE9^l9ipI2w$kka#jwZE%UL9be$JhJ6rJ$I36y>Wj*{=;PmaFdxjI8#~is@ zLwwiUX9)?4{LiC8ormo*rzb5K)cUjmi8%-z>bT13?Z)n&xHGeqdHT_LCpt$4QN1n{ zHE~?b+5iWO+{90bvUERR?cG2F`hmV+{~Z1f&3)4#0mcq1;GG6z}EAGEv@j{Ps61=yaz~wG# zC1~X2xT@0ae8xZ;QKq-z)RKY^9#BJjd!2Cp3fgMq7Jf+}R1DGRVQQFN9p^dSn|f=%;hvf4a7uK!E1<2LCX*IiL00U3j!<KTJ4WWj_8-BI0Mq&| zANp1M-SZJS=V-mh?dIBd)^H>O4}nsBI5cysOJru35BTqA%+hv%Hs6Sl)Xtp);!K@e zeXCXWxd|E|AUB4l2MNyAS{zla6odtH(tV~^_!+H=GXr%&-dglV=4UW^gZX6H~E}{3KKgKC>yn0No5((cVDLzUMn$DO9D@q@R1(Z;&#=B zg3ZI6N8NzX|5;-oXEjD#r8EaZ@5v(`Ihdx~$wJF^F|2JU!3%5Q)`IZJD@u6#GV|&! z(mL!w0c*gk#g96<-<~Wz75u8q>ADM&!p5dJYwZK;V$5J6*rQg)RWP2$_dy8?2RSwyja6!w@xjL<#P4SAYjkuA$@fW^}!=(AR-aaHDc^ zh{nWvA6rN9KyvG=j&i?X^(2?)G*x?9HE)&GnxQTy$0zsfrVtSnna&4|i;GBW%x4f0 zvS&oNLpoW>FiZp?L1&6W%+QJVi0cqe9r&DQg+20q#Hhvh#HDL7qP=hdcYSq?xsO(D z!ehJs3;%33{(Cm$bE@}yfLLn>5lKMH3Q^j$B156&3UXf)mbDGfm!h`Sj8Ezg*`{C5JVd)SuRR-x zff=nAF6gU~2XJ)cyvLW*n5y|^ymoSptkS5=Kzx2BHYcYxOk`UcUo|xrwsRow;fujn zb(2zrq}J$aMg8yx35w*9F0tIwPtS$a6NjF2ci#B!Pi(6q;P z!2l#bM4VPrBM2d%tM!jq0Wu6A3XSJ)W*KIg(t(3xMiK00lD zh*R7->hwkY%m-ZI9l!^Zrg3&%fkFsT>_7pk@c_eDd%WGgSb9j&sGad~MwS(!>d0PT zWV4x7L$~yHmoClHY@)h6qJ~+@#v9J(%JVFmvC6Hy;8oCIjlx85d(=CM)4D=CSOGK# zn{XPJ$aUNpz3@dS*WYo*)<8q;ZqD-YS{JVtZ#uP9$$9T8v&I115!{OOkh-?b=HjQd z+R&uVVOVW1r)LIS*nnFLBtCL5%MromCK+lCaidCa6Zg6}#t@B@LFL26%)YQ-31l76 z1e5s}GW^?*r@ZwaZ!WsS2tcxR+3j8Fpfjv$_vURDj=T}q)vac@L7ij}ywwe~LYVg2 zcVwdsmCe(Ue8!920!OP3+kM$sMMCj`+yhm293TPDq(vyUl5m!EzjcdB8x^BnQ|vg( zkQEhPtxy4-kVoF{RAcA*^XyR|x1rTBjS6HzoL+8j2Ai`~MiAKNQPpCg+cbVxtt{5D zH?)s*&V@%Ui88t}8dNW;)K8fAbFD#dhs>_K0mo9UR8XX5w>=gzFr-Fwfk*9ZWH;l{+tp(ul6tYo zo4yzH!d=Grc0>(N2hla#LeajEQngjSNprZs^!x8)h`s(1Zq=@#3t@ZOZmPT5HMpF| zQ7c{;<$Zyj7%f?5tG*LM-SIDe?^xLVyaolmx7%#vzxHHldgXUD(?mIqSa#2D9hOTb zeErE^c#P6!C64li6f5#`T-fM_p{7mIwvnt%>7;!j)n2rHCa4iD_mvsj!Xpgg)S$W; zx^O42tI09(UrN#+7hk$W=c&j#vIqj_*EI1>MMQDE+*%~6BWLd_wX=>_McG>g!TxZT zgYhUeaf_#{7ac=|mRqE~U!av(H6ChPX5XJly~4Sgv1|gyHTY0|_LIj-6b~vWlX*+E~r)p%_%%F)Rd1#cLce4m6@TWOLP+&`t#DnL^EerHKkR73 z`?h$@Tm1zypJtF0AS)CZ_}l6tnB!dzO=6tg4iv=>?|t%&b`7G;NUE*KFE&&%Ti{2( z3U-#%YLs8LPAfeI3(lgFWYp#|KEDb|)o`N)St?$)Ng0$oWgYA8-4YkoaiMBmAsc4E zSADao4RkZJB|0kMpUl-#OZF^YejK&eey%phx+x&ZIe5}n=ezL!`o7w3%Qta7i{?pQ z3z0)9xdpvwdfG9z1jJZ5f<{D}a6@)>CtJwXxE{W+(XNC%I2o}HK77$RZ6P} zpNQrdG_j}B{MHVKt7<;xUvqTHu>|MCYBLAePbEAFuhW3+aRzg*PoCdKEj_`rI7mWK z92em6VKnDi0+EO#$n010ig#?O^Xj~4+*i38@6S#3T$f|Jc8;?)OJHA*ukB1iFh|wH zXl?se;s92S!x2MYqPu=tLYCQ1XgPa+$re9vw z6^D2?dln$~s&2Wq-nXH7Y0Zm^#%MRF!1FUpWdDf6bGicWhM7Lq(EfY6_<5_wkf zR1fGIP-O=xL)Jhc7|32W&a$Blt$_`#50pbi_Q!V)v%B6x%o5zB@+zi-F#g%@c{G+n zGrN68U;@d4jXK9#dL{)>Z0_t0I~3GxoZUgupDW%k%v}S!wF2chtJya6brKi}@_M?`W7$)dDu?>QcFU80ixT{5vwT-q3mkCPH zV3>I)CTpkXMoS{JS${C)OER4i2j%G6Uz!l!o2-V$u%wdTbovVJ#ImJdl49**v>Kx& z(M{lLyl)B0(73tFF zler~{xwH%05ZI4yGwmiVGoQSToV9%fa<5*8F_>R$IhtPVZuRN%h=cjR*sV1#y)AaU zcp7qUYvU%<#jt2Ft*Dqf-l^@A%qu^+5Po7PR@$JUf9(p}*T*r)SywJ;*Tr>=Bq3bh2*ODG7>ZTs8gG{(OH7R)KwuVnUQir+_ zBlRvlk=KU0E)$r;^-$qeQqQBZcf!3sTd^8$oh(L*EoRyUCANAtr=drol-v)n>qteV zxvXvL(v=5BQWedt1>Cr6_D$>A+Qdt;=nTJti2UmJPY-lzj=*dmiQH$QuV zxsD#wl)IL+*UaeZ_#HFUi1OMihJEiBRnLFuSbyfIxopf@Wta7$x}`4!KZ1yNotAlq zzC3|%&dsdmv1nILI3KNn6{Kd-B;;ev$rVp2Ds)~2HX4B_cA_AW7NH;{=#O@XitQb! z60p)`bV)%PQu~qcojDf<3@sXz%<@Qe{btyL3VFdU2Vc&>g|N0WsiEszD9-A}=$IiA zx`{)N{fdKfw5TH=>bcR(w2clcIj{{R1wE}hVqBXjdrvE@)}hyRxsxMWD+gIoQaAAk zZj?DUTBn$uEB{Y+paf9aq3Hd zeA{bhsvy`Zj>~ly%tU6-r0}$=`YhxNZ!pb|MTOjv^#3uk5Fh8FXSP-f_dX>HYOkUa z$3O3rF40s@jGgMj2Dv5+VtV1s~)1c@RU zB*!9^5)~waAgKtFLy=QK)mvq^e7Em+Z+Gka#{2X5;jo6oQ+3Whd+#;ZTyw7}U+0c3 zcyw|M&I1=u*3$ZY9ey~WTIbli#yPf*WoFNd)4oO0!GrHL6-g8BTSFH;&_kiXkyq zNy^lGpItNk5^igp8#|L%$J2h3UP(3t7kM!$$~J9%CQp9ktruAn7SF#gh;V#&eNx_C zkrx%{cz{HJcdi6GS0j#4ffdRPy_iHC} z+N9YX?i;aoJgp>6&B&>xv8n&SOwq+>@H_C$NT# zRt0)N3x^qIa~m=j#=~^#>yUqhTZH4ZPZS=}$FFjp=H8U4WemScc*%m#bl%&R7nV(l zd#x)rj4bkI9cz$@p&A#-L-4%T+(7#Mtc|7_t`N6a!kp{t=^ zt8t{|CkWuv2GIDIE6}0P=3C~ANGIKJaI|z87bc=iG#3)WLm!Y@0vaF@t>{emBR1!& zpANsG5vFtTf_u#V*#o2{zhu&h6i>L#a7)$^DsMCL6SdWc7(^Gt=4{%^MVBNuQIoYb zA;S5$IU-udZ*~R9&rg&cbg3=(n2AAK{T>}tG?ukzv}L~Qy`4Ht0OXj<@m`VyLJEO) zlNXEJOV%yk#yE*6(6;@MXd`?39BTn|F&13yc3T^6Ga_L~{Ez`*@&4OWmbxL^dXR=S zhw+tm)W3^Xt}%q&k290q_gBvHFVEF1a<2K?70_?Z3%H7&J8unTqcVJeSHei?9EE8kL!FpjV;=UY!pA6{%YIGU^&5@ViO!A5|w z&f5M4toOnmB2u?uS=J`o%BRs4;11AIVx|V)sn!C#(fwFXrTN zWqoAdJ6lAh64oXPATggTow-x2YbOiM%C20rSyeagbUcaK4t#jcG`p!O%tP3$%b<*L zte3cc+Ns6!VC^SOYk<=}l63d)ifqlFscG@b!?f)oJ`Zo}J>hMYZ`c%dk8FNetecFX zpf9mTWifqe?a{g<_Ab6RX7*T^Sf8SU>2I-50^0eoNsUfq|5K#p#!}+jT3P;qqrhP(yH8BSDXqjpdZV+CR`JGNINr{|Y5Hlf)$Zma4! zm5U8j*pPrKGV!uQ>dUjGsxxZ2naio$bl}7u<<^AU7$Ph}NWK|ewiYJ3vR3-vWMnIS zO^n*GIc@dn@u1u*cdKFH|$6!Fp^P|%O<8h*V_JQsm!+**eSO%7hN zE|OJW#>oVivz?#-u{2wbU4?i)(LTu=Le?yfcb!41qU){t_$*953Ykx@We6w$t#qc2 z!9@%DWQ=dT1fc^{5}a0dE&ZBAt@T@@oHi%LzZk6aSmfQ9(>4tfTU8^WzsQ3rSwHTt zTHZVAFw=z@?6&pi@H^d3=h#r8G$|ab;arymd~5hn?*=)2oq>Tqq$(#*1Gl~}=z1C8VY~5!4ToT(jrcehSBl`U z+Np_?12~WV;aFWqf2rI$wL77iq6o*8T=RRm7$U(3lp+l?<0ZE<> zzB?*fVL5U_#Cf5H%3w`&^^F#d7bogGB~-HXQRM;5F;2gb2^H(Q3#sJZpYKBXS@mn+ zOi<xf+Zdo7GBuQ!Pueq0!KP}!!qBV#xP5Q9bOeh(xd^%l&BoB-PFw_u4DM@E@ zcWV`aY6zlt8vHq@@l!@faGH>NY4F3Zyr2rpNQH~9ssqQtj2+x<@8 z>UWnov!v zm)6N1_0wulfEjNWe(8>8C;NaK_UC*OBU&1sCgt^_2R5X{p|vu-T&I!vQ1ol05j9nq z72aVobJlv5K}6kk-L%1>G($kBP{Y=~^*&&NSocnjLK+_RCmVeH`G$N=bDy1}3&>r2 z#{5FfWK%KcdZ9^Bq>Ywwn4tW3O};^oD_^m}7+`}oo^RmE^*TW=pmlM6m@Iv$41n!3 z9CgKF-Aw6hiTO-nZ>GvGjWi0UPTdta0jb&$BpT|=(2#D(ee!0)xW zg2&aw5p$KD3e_=7h3euH`FWNVaRQJkCr)h?#+2D8P%?#^)w3>bJL3uVkgW)e+bMk8+BJ93R#7&!FKq~c#dmtYH|~U&Jtr)(lDcx^tm6 z#v(<+SE1j=*qR)Q9uxz|SqD3GN+IXaf18?2k&OAcC+1Svo|sXGH&i0hRAMX3?Sv8& zl|e^SxIAZR^sz}x_`5PrZ6*Bpw0CSv3rr!$mhT%BhjJQ~U zXNl9+bggGH-CsMDHC_2ty@D$cY2N0- z$maS;kbxH|Kbz4D+)-RLj#=4ToQ)Z*5Ez)F`xKF9>B0Nwt0JQe0-ZvH9n$tz4_=CL zkKh^N>jW{1X^{zQg8f3x-jOj)E7rh_l6p3q9@7lH$MwH007yumPT*F&GxH@_?ul}1 zLSf=jsWd*N)Ca*$h=LyJS+#%)Ys(Z9h@$}`LBg4pVZ(^-` zBuEnF?n{mZiJN5t+qGc19vY(?%;F#`94@nKW=}h#!ntk@YY}5egiUN#I!N-^FibmX zaec$s8Qmm=jVgxS!GDDHZOB8df($?|@Lsm%MQ4}OatiC&W@pL~=y2D?59vNKo$-q2 zvVpKF7N}UbPFn+5N_{3dfF99+r^jS{okZ<#kBBb!3gjx^ zXWe#;dYK__`E&-5zO34`Lcm>r$7~VF(!g=ECr2XA*O2v3TgZ`v4Z;J`s8cYl6+tt6udIV9!!3Jyta3ve*rk0MmJ0>m?X zcJnNEM@x59OBatb-fN+@y5QOxGQxze7No~bbtgt>kOqnRo4qEftQz}D_2 zZ>O>YV=7(ljdvj(2&kgG#|F|1^KH`GnlKQhYekhoVLIBijJ$qh+T4R9?bk#xm$g~i zyZ{j14?+x8GRpbSIqKw(>5jhn%RZYuIHLy?{ z@%`-V7j;bulh00niHKHmB)Y9w3QpSvuwV z-W00!*eyt>7+jX0l_|EjN;0<3m9a4s#LEKUwQR8In6?jyu=>@~6!o>g8hu)Ok6()0jdRXv5}MBE|JB{qbzFsE2HFt+ z#-2q-*DSWCML<`hN*j*OfrP3gM`5=}k_Gd6$JlF5x^>Pq*&%;fzW(!Ku+X;TXf3iY z(}B)BdVsev#~NMk?+&Gd%je5G6l>hmEO?-%Ld`Sbm&V2)LPjX7Sd_2aURa97iztR9 zjH;?}i}Ml`!64aX?_X@*DL%WP+|~l118U}!>ueL`aYrMqKCz2yS(o+TO!1&PV@sPQ zsaW(=yW_dv&kAsFAcd+1vRnRLyt3>xI2b>f&P1K|Il`zDm2QzxFTnn$_{vOi6&W;= zxy_jr9qJ0qiGVoVvt$=(&kHWMi8%0BLkyhcy8AAU{Cb)tD_vf1X6dhKjveY)*m;Hn zE#8=CA`AO}YP(Kr8Q!c1qDhQJF=w1md6mJoaXZ5 zSjZ1e-xN4DtQG6r%E((P@Tveu;?LG~gH9WxVLe-ppqAxOs!1gT_tiFi{IKWV5lD`k z*Mi==(}MeK@UT{SfO1Wmd@McDnu@CWIXU6k4rlFY1_;3Y`V9@t4b2YC?v$8bOnS+- z*^wj(g)A9nE;9V$gTO48!RG#vRb!WGP4z=5TKy>(-$q?};xBrehC&9HpuCx4yV%=o z?twm&>5)4soZZ+KZxA*r*|luqfmjZIoDKz*pzQ*evM?3(w64%-JByi@qE$2P1*D># z(-`XSByxFy$i;h7$e#{W79E4k+aDCYe2Rxo?Ptv2+{5~GVRPF03p2EN^9eUidg*5- zvXW)8)tYZ)4HKo%DAu@BGYQUuL>Kh4$pn;P*BsD+WAiqYxlYjP<`?fM#X&Quz5K?S z6#hD11{dE{KqZnUa+m0E1@M6jaQedVbbQQ0UTh-;)E!Jmmw(0H911y-i%lAjyg&AG zan1FL2NgjTU_pj4wp$lDvYyDh*&5{Dq1TNml{>$`sm_=Io>VSRyT{VKh*=>8FPzxH#qSd$X4sY# zedBxjdj#IUb4Taky&U%;6hwG5B<53EU)P@b-Y@a=2!qo?D48C&Lr2$R$w4(9tK}HX z^qpTLp#(L4-kOUM&<_fq3c(Mb%07bpdK~F{Hr!X2;DMSRMKQxECd5&=7cwW#bKiL@ zKY3zQ2zkUP!fwyL2<-WYHU716P>c<9v#dQEe6ww)olpFG-rCnCW3mTs zkV)-VrGLcT{qH+(F@fu^`_lw{%Q-Ys#0FwF0MiP-a93wY;0dtN7o>oq!@zArJ` zd5;kiFv|{8wvzAs%lCcw;aU3o6SVAunI)V3IO%^6>_7UKSFLb;03|QO&VYQ^2TvxL zl4cLD@$CQZdGq^p37~}Q^HUbSZ_suKV;;{3g9<0kzh>R}m+$*vk`LF%Ukms?7IA0x zy*dnZV#J+evYtOUdE-IGLBnAt@`Ix%d+L-^$3A}(q92^RG#qffiNeUSA6vV-OMiFi z?=Jn_rT<+ahDJVA3{yLfPWY8?*jf^!2gfZxbQ3 ze>d0P&Gmm^;Q+g{OY{908NCbm0p;z|e7iK?F2nz4F!E0s^IeAj|5Jv)Dp7g%TQ7ir zW921w+5X)^-}jfJcM-rY0@y9|?bi7J|5oE)$ItX5%CxS<9h^UW*!1bX<86obC5E+J z<%-+?gG{8(hk_br^3m6|wr^w(aYF3oGMV#SxnKfV+l7v69h589ahCK%`;NC||gf6e-_{8r*sBGmFV zG?YF5E$aW%^5E|8?~ecO{M%iByZg@%=DFwg3)xQ`g*{kNS@(zc;J0luh~pw=2S+9- z{%L~!Z?~JD^7dkXDG@_KN=nm@e#Kr-v4%DB|97_$F0p2%ebv1#9x?uL+y31{Z;nqn zfj@XdM@=I4M2F3hJFjT*;pgcoxpcNBv3BAlv49!Z>?L>7-YA<{BJ}1EmZ&AQ%GnYpBTt6S4(o~>NvyvF5bzpb+|?k zwz{ySwOj z7ya&{|EGJ!&JN+ZyXbc#{lB5IoyqZ+A9f@CZlwQSi1Pb{+Ku$P@cz%h`5(gVU3k9> z?|(2o*v;v8bNcTF$AoaTo74X(r%y>wCk|$ky?Lr)Ig!g-ugdYpQ~+z)_UfApV2}DG z6f8P;EsFYArOJ7U+mmF8n?=_w7Ac@l=L)pFh)rN1F36Ya&wj)X{W9$deHG0%KatT3 zJsK!?@pa$c^aVp#Xn(DGcp)m@aKG60a{D~=O!9%YN+NHd%c~xAjyxPKSJvhl9%&=!V@f?5{niRPynj2v?DIKqda<7aoKy5r+ZFAK z+S9%ed0tYoM04>z%Gp{huX^zFg0(%qZ~SdbqD+{Nl}&lbzPaL&zzcR`v{D%1ne3}- zh9O+%R%*$UZX(&&_}#DDHh_O9Jv3o?+3|P0_A57F5(_X3D~>z67R5f?LeO{>bo2<- z3ivtnOrXFosr*S7+&1lo{Ma*ZSZyqZq3FnjXM71G*rjFX;53z*{5)&@-4QZU@Xpat z4D#0KNw89@3;~lbUT9e7CcF7br`*{a{OvfN-IEDs$PO6bvFt%tauoGF7ukj;z7*F3 z`!1zYQ4L@D(!hl}?@I8~N?sZjUF|*ty;k^Enu?ZxYnKz|{TRv5HR;$_Y!{sSwE+N+ z_AC2}j_??0PnVkAYgIa0)tv(^H}_C!%{N>y|McdIOeq4xASa+_KhcM@v(5Ze2_1#e z$fNBa6E>bn;soC0w@FKB|J`x!o+6;!unfA^JLkr4U4CVMI%7~_f6BRgC4%qbD@QD$ z=eZu*4W*s3X_536+Jp;%ljV5nS^K%ZbI>jC?o&>d|)wH^88djBM{gGK>1zIn&n?rt>V0dG8L;@|dbhK+^@XhrNHD1+~b* z`ShL-63(RGm`%^x!!I}!C`8PnbY%)TsYHOrRw~bWd^&7hH_-qlJ_$6dQAuogDTZ&8 z;qqoxnv*6O=KK}f=2<7si5T_~nxRh|3y)}g1!iwEst#nZ!_Gb zIkRI_e09+je7zP+=W<*60wq&V--0$C68?u@G==Hcg*bAht@1m6HVh*b$9_Jn2W@h# za*W#*96W7-r>{d)EcIuD^{pxj`6X>o;qc?Xp%pJO0c)P~^IFNyT#fzx`8J!k8(2sg zNEyXMX3Ca04H+j!g2c%j9ISm^=8()H(B^uj=Lz(^T%Ib>Dqm6;=XRLtfZZVBkzV!V zEFZlppK~j1l`fcaDzMUuxL{Cg9w#3wHl&H};U{4bDb809=P}hUUK?-;Ub5l$KNGZN zGXZUpZLOrp_XUMM%Eg?LIOV@5;3bzEG(^^e)<;7d(j3SZg0y{(c?@xpR+d4+Iez5q7On$5=Kk)KnU~($CphZnNfkV9v*-rK2DF zP*Ube57n_#Pq{sln!*UJljbAQT66@L`4`(AFMCUldR1ebPM6B zyq}#}yE#P^dzgpUspBd7T-cU8p(9bSk@&`kR=u|mewK2RqJY=)A|G>F;*|NG#+O{> z5Ci5Lba5B2tu|V_vs>hTU`n-P%Q$n3!-*Va6C}EN2sSKPSzU1GI1zk(XO8{H4<<#x zM9(^!l<#yBlHm0mJDuAh!BK=DkAnbwlrjQZ@jFLj$XgQ=&@yErNb@Ge{kX?Vf#FQ=5D$?Toz~C+|$F~ zJ%pltaUe(tG56dfa~NyBUD_WtsF05Xn~OzCa1p$@(8ZswHNoGM7YZ%1BR2hnZ8&tw zifhJP7s`kGiZzR@c->HcH-hOff|d?nMEJkW4vD;d5v5NH*Bc^_i}?AUV{~`Ya4(AK z(sAJ^gS96W=7wD*2G<(J?t4`MmEdU|62+yOa!y%UCbF#})@gVFLew%W-X|AaR%gE0 zLW{RbaJ?eef6I)McIO~A3yx$bkDwAMVTV7WllQ$y`AD#{MY@Vys^Q`uI?#L_TLlK1 zlsX=6*WGihExJ;blDDix*|S6hs-uH9SEg0xR&&RPE8AgVi;Bl!DzH}W3g&ToB#flg z7cR^|(<`KnHu7G{fbnvSfQ`N_bV@`J(OTx)zz;me2M+5GdJ|KPavh-)xNsjY-~*=M zs<9X3W?sM3(v21|W;ySBE_U}qsp#UvZ?LW_~lLXBF;-lPK8g%TrY za2kB)ip-pwO^`ibjhO9OS*j_5{Y{=)#OYq!*by+8UbHTk32Pd9f5sz9D_uF9&r+ip zZuWTtG^n$t<}taY7_=X(;CzW-*fnmxLM|nK2xj(8Rl-QcB!@n@N0=Y4(bO8qiPywc z5BC!Mc$6ILF2s9qqQ4Z;ZBrLr36|#(5tquL3F}ad%N$v= z$kNRz%#v*b2h}HalYohOC1}VgGT6VVLnj(Djo2EFgE`^*3MprGLYz#*N7do zZjvuyN7Y8@p=aPF$(>+ZLlM@cc|pC;IIe7CO!E<;@nD~6O6V;G4of05mB(QmOqPcI zCORxpY3rW>blw9?BHs!(>}?CB2Jf+bLDC4t$HWf4q`h&&UA5QJ!n9X?&sr$w=*?9Q zxOkkgsMr|mjQE1^^7D)*gtvmHMQyU+XzI8=#*d;XL11*UK3qK_N)84O;^)R;o`qd- zU7t_T$vjHc0=6nbNOF$_Jb0Kibz$H>T&dZRYKhsfz{Uq0{1dK`)bxWxsFY~L^rrWN^AAHh;V-f5BR_;LHJaeJpi{*^~l}h|p9@?3X=?d5cSB!(#sUTB=ws z&Mq1ezf#eD`*vBRL}zg6t74>wMdRb`~n2jtIt4?M!SVV-Ya@lKcCVuz{G%h1#+$1~)XNA^+iu`VfP+0$Kt9D*Hp9G4(;_udfa9qmTjsb!olzGA1w0 z9Xg2!U=x-0k_3EVvyMgMb$Z@dY(Kq9_F=YZUBZ2>DVJ1QuD1VqAUL@_&x=(VajD5} zKOrxouWc?uZuYuIQan+*x7&`T+zV&_+roepG#@h)vkYh)w+&6QF}TY+98s zjbqfg?8&KwGr_$y&Tc%hDoW7K7WENl|G4xQ3Pzip(V~h1>xEQToEJdvayy*g zT4zewd3oa4ZC$sOqaLI z->bfsZnI#9Jj400e7;h*t2BSWdD{E3*X??Y7LSXgw!4Cp(f|^au<&8TET2HnBlO@GmD#X^SUVlXI*d2FI2A7xUC2505UVpOSgxi=*^?vJh zfRqUQI~{QvTe0gOw>MX0raB!VQWonv4dv12B*|hmr_g5h8sORz?5=;xa${6Ht9OAV zP5}l_BJ!w7ldCBp3M8_oyQ3_*ujx?+??KZ5cNs6q8n0sT@$+`*(&nOipu-CclYR4oSWG3txMtNG zX-5)`T5c0x8rpEGXgfBZ0~q%9L{EW?l^9Q+&OF;d5yY>tv8%LQ)4v?}XwXu&{x~k1 zl)vx7@?1YNKbm+5diysv7Q}E_J?FyD7&9k~U0$IP_-i?lC*Lmstgj!aH`o!eNOr@Qk8*YCQ&*KCwYuO)BA7T@uJg*i`Y*P-^Af_{2Rbb+k*VV02{P39rsLbNw#lD9_{K4%D=vpw2I4%uGgKd z=WSNrZ1ygGxHe2{Q9QM#ViXrZSwtnm_URUgC*D%&LgKA#X&l~GgdFmjo}Rs>#F^5k zVfXaYM3LgW33k?Z^h%BHVH+z|fvKsf${H%&7ewpinKiHG2obFMCz+wgaZ56s$g>@t z<=O%vDECk52Eon-L@=vzg2Hs1S;hHT=eWd_5}ztvg`BBJjL_uSuKP-?jTPn9rNpIV zfjU3Vn$tix^sqglLmCf#+A>BCwi?@wTaS-5(eiW`w%h^7IU-Gq9K*N>JS=`AcSO># zv6{fqTcfA|p22eBo{*hzjS0UHEW>(e(M&|bhJr5@Kr2aMY z|B3@7Ed@0SOCNU-Ln9@N_Kn^dGJhc!Dv=0bgwP$MURCB54lsj%kQjdWVgiR`!HA}dn)w?NxN>M%6m^<}Cq)q2jq}!dthPjqK zMrh-&Xr1pljr-#I@(eE5UF(pB!0_wN*7&+Fj%Ozn1VT2S`1^r3h=tjZiPp`sDl%cF z+2Jdl&^wenwXQOpo7pEu)Fr8jg3YEVB^JNccZC;!fA#Zt0woJEL!#63`s&|`d;ltP zrD7naR}rvXhrv*OyPRx5SFw%hw6XyO0UM>L6DEMnJj($YtBQ@Jqlf`^G5r)L{PqzR zv5+I=MYVJZ1!H`p4<*gtf*Qj|+O0kG9C3*F@9Xw_HXFb_&%bFOK>^KTSY0RbW?K`lW(;UTo-5t09`3 z&l!lKDn`7ML7O{xWRc)kbS2NNsIeFq!2|eO7WH#>X5QL>M!j?l&Mf64ibx5iIJdrN z*10xi0sRLeVs;A(CH_iVKR<}w`ZD2%q1Y?ing)Bza>#9s)b$q^{}Kf5>xqJ_HInw? zk(=K#_?F{)5{XSUUpHT2ga=nj>Z7niZLeMl&IUVVpS@%P7gEF637HH5Iw^)pSFw?L z`wcge79giHg{$Zhea~FwxAw0=G)x`f>R=|tX+JJqul`AK=<(?^>Ljz7R!G6NGO17b zq3)u93`=|{;yu1TYwba+Sb&rnOJE9W&w}fx5d!!q~}vk1>?v?q+L>gYq%ptL||~7 z5G}73Py2zr@TqE~%oeS>b2V1Kn`v%c)s+Ap3N|^YzGk3TNlt_azpe@Ap1jb2K$Us` zvb%vC+ptSq@;(!|u0TjmYF0xydB{aH@=X*3FlDjhb#GcE`#f2F^1{G(urhVa7#2E! zRc5N=75qr%x#hf18s^ME%YdIaIk+t@f3e>hXp4>pY!NMtI1DL>b4`mp@|J5s%k9Za z)xNA`oF3qGf!vr6??8>WAvG8GT=S+*@q3q6nFGD0eZbLAI&LcXZ(tm#<5FbFB7JuR zVkVh{pfI+o>goae3wQz3#<(v2mhhQiEj0Z4qfg*cv$!~HV$nRpxb@g1%2_^gHa~v8 zjxn&T`ykpI`~gAOo*tu)qFat3E*3*l6>L=QvPLGpJ=y%+Im3GlNEh^_dxLLX=Tq&w z;)=6*IXOA#pp&o>fw7F!ShaiiaQ_fc$I_V&vpu{;=}qIrcY}!oSY8|`7={-sp)_<< zgzZLxI5a6|FoT7u_IwWqx2~V(SaG{T6k`YjA;@PCf;{&vimOANf#B15$#wqSL8)K? zRX@8V>AJ*o!a59&-A5XFR7z0yD&hteEcneoX(H)EIa&IiAK%<11{I+3vL?|`**Z-3ngeQdxlf)8-2^eJdKEf$qev6Jo36biH_ieR0*&* zShIoS$yR3;=OIF;Eg`j*m4(M@9)khkYf~DfF!rmVxeDk!{B8 zq}6A2brc_?_K7<$AO7&!*8h62zY0;}yZE6hUtj2U6(kIacrguy9fw zw?1;gT4&2zCsTwAe-g2Wg`q*w_+9*B?nB8@?I@5izI}d_!2GTXBR(5CJr=I8hfcjS z89Ofw%tz}nN0nDcac;IV-Fb>0__{#R($|t@hFj|kLx6DQN-P>-OLz_l!v~PYIW!fq z3uZeY8xnEm@d!wc-eHc2g-3q$7K^2Iqr(Ahe|9@8@@nXTARn^+^G|4a*^tTkN2|2C zzo-ZdN6iBSnYxpdspUJ%JU@lCxNn9s`ft2y8H@>Nmo|)k=zDO%~gMY#L91^g#*r!*j$(>+S$l5DpIXEj zR$k?!!zb!Rt>T+%TAWF;g#SCwKp3``P{K-BoVf3}vl5sHE5Q=pJPBRR{%j7LYVEy_ zy|e66st``}tIRB=V>9|Ho4+*FlS?DW1%RZjVoP^Tz1dKo40D2Q*$G$_ALdxs*SAP* z*3t+mO$Baisl5uk`eL-q<%U|W9wAQ8EHP`lrse8dMarMxcdc&vxm{Q-ewfraW|wz>K4ufxJ$q2@xuP_yP&${R?FkW+)o$D6Sr zLY5sLxGCjM^+DsIB=?NlO6N!wB%MUs9b4*FxQ*C>g$X>)`U{gzq(YbyAYCs!JD@1}CND?;@xTuY?G-JQ0)dPK1yP?9-nK2MpS0LeSeGe~F) zuXf)JmVG|fdF7h-b<%>9myGPq;!L+xR@bLz3g`^#VkiiE22X%zEcKS@$JV~VR=|fe z?$}=RS>2OVS%LH}j_z?YPflK1L=DGkeWZvm!$)IWnU|;6J{LQ2^R<8L1yIxfvpXJ( z9z_VU&6O6zP9D~hq1n|^V7`^5>9o?R>c@5P-I;gs9pZ-wXv+2H{WOm?X=v2ndV4Q=RQz&KNU+H zBEUZlzveF2k)c`Cx0Rx4Mz(T|ghBSDt*V)7qX56v3>|+3q1ZzoD6&|$pD1=`Y5vC# zCIqp%rERy!j$T{BZa+=l)517R+Bqk3k83#K9b`&?&r!Mx_&L~FiI^}6QKSWe5aN9a z;r#w1Fi_)Mp6%sNRb_v1AgxKzSW9ePX*Q`D?PgU1#IS%d6Kw$cS3)FpqrgGU(XAV+^zLdnjZvfS)}yCjIdH*YfD_Ykce zygEt*t6V`~aNnSRpckgPr3p{88|^!V7*Cofj;+vlDbQoYsd-hrkb7POk24 z@8e@aD{Dt<{&1w78#Y>tX@+R$sZv;9E}>481rmtq&m{ zY<6Ot9el`|qFzP?U5)^Z%9@IH8X+A5JS{VoL#U(qW)uxDfgd)ZP~6o~pvFq(>vqgb zQeJdL*_}+=Y2N3Gy|<&-4r%fqcb*mo!iF=F;>^6W;T+gc1GKz`Z^6DG+`O;&BPyMB z$+pHL9!^f{ZDAEJIwCbpV3WpLrZk3tT{KX@$S=oMdojX#K(XJL3L%2*-HK58{4h#g zCp8(%Pu2^vg=uGbeBso)9q0P zp+>LvN!N4shmwcA3Gqrp`&G_TV)0VrXX7B**@WUAvvhC9t-+Su=APeo^zws2W6iNt zP4FYi;ru@7!<>OoM`SioqXV*00>GbCD)Q4@sfVZqRK=vQZC6b1ZNkPL!8@G+j;@4m0#SPvgC@P#~H#0z6Lw^4aRwg|3AzHG@XwcAqQPa%`?zGReo#CCQaDPZoLLaU0R*&reVgB?`AH zYpQ9*`EN}E#!Qlpqy$=MssFxyvT-yopZ!z^D;f{p60sWROTlL15x6OHd1Un9tD{|q z_w+d}Pqbblq2XaMg~Z(0r?|M}9-U3~F#^R-)ae|XNE~9|)i$Wmr*~?O=a#_m+yR>~ zFS9xzEU1{|%6Lr|uN`67-Wnet!-?YA?+*-nH+=Z;y7Kik|H{BYonwsL5J*MhmRT%&6~6}7Wz2mS;I0DY`=Yt$+SF!Qa9B~qT;EZI1DhBP z(S0b-ifY-^jDFzIt%g9DQ8({A^thQC(RjWn-7rpeODp@%Wgzatu0~Z=gI)E{Qq*D| zmH5BOpvc)LJ4pcw~17^@UYO4?hhjDD?>n1 zv+^{10F)!pD;wkZUrgIu_H?adM&9H#)o%;GjO|lmb+QM45g(~wCZ<_Fw5vaX<0m9k zRY&BB`O#bV!_B+1>46bHBOU22!?_WAbgzat_%a54;K-iUP5Fd9-|wjp1WVI)=}Gl0 z?V)M_SBH!G9W{YZfh^I6u+_a%*&lIHmyO@!H@h%`fe+zi-%8o<2sZDih~Hiw$mZvv zYM4-)R;)<()zyx$!{2rlEHZB^b~ey9Il5QSrb3DCSKKc!1C~H;fTuTVic)u4*1G3* zquT?&9Skd;U~B{CmVsZ|pkhHwCNTImA@e`Nfo~Y#C(l9_;P)sc8!zn~GUL&F#Y$|- z?qaU$>H>=nYc1MHF6kg{0IF)#WWNy4iw z4CPbRb#nlR)a2)xBYRr5SFv)0G}kusmeW!r{}SpE9vq}7MwaYnHB!FNOeT@df_G!e`8a~~Q!B+6q zW8f^AsO&JWzOV{4yHJm@4sWf|&&IKh&Dws=bsKt7%tHS$Jng*o{|JnE98Oyzx!&+P zDVM~{#$|mChrqD{#ZJ;%-T!P3IX>61r>WZ!Xc=Pge9{{#+%o2fd#%y)Fa73*8>rJp*q?p!WN3-&MQ-3ci&bawry_% zyccq)AAt|Ship-Iu!`zGo~{$eWjXs_PX1%#rFR{6v!RLymgh7USE@W$m<`W zwr8zZ;PnY|gIeIy1{kcD^52YF-yplPP+8A@gsgN!s!9ngmga+%u3KIT^;A}`;ZVjn6(ZCj?H z*UKU;`FPf#I?k5<=6H$2bf}g!Oof@xc}v2|=X94bm0+`a5-K18eR<1=931lO;^N0E zmE_$R9lf`EgtYEz>N4LhI7IJ);4gqFr#CBsJ4_`7Wqa@_0FQQSd z3h->#r1x4Z^ntSBsYlUeuLIuH`X1xapOG62S3zDA8x$6NrfKMU5JT|aatXHyfM)9b zeXAWnV|4iUiIM?THcUBeT#I@yY`2w#RZB+X;w-;Th-#ev;Ft$~E%ZtkuZLAm4W%Az z2$@JX(<+F2lPen2HbdhC#S0iWy>u?Bj`r1`PjWh#>KwopB{2A4Zx!rQktH+;txW** z>BT1`(iTwc+~F&LbC|>G_k%mzpx3?C&j!=`W1mM#6M5J4F5DkhV0Gg0z-`@w9Y$rQ z$ezmY6A?p=anuF9D^8F$>gOb#nIoa33Zf!=7ys}P!3h#_RJ$>mZ)Bh15#&-+=_4R9 zlACIz39q08eSUw?aPiG(XZdiE`?lwk0^#OKDDjJ7K6qQ9q6{f6e| z(SXAYH7-!$j=`=hFChEP#fbf1tg32&q`{Y<3utTKaQ-^nvn1nv$$#XFHewbpo`tig0&2F3r{4^(v2kV<4LBoPx}1lCJj%EQIh@ub%+fLhhU$z zX)=XznDTio-M4>&kZ+IF>4u;Ffu_iIl!XotoE785DWd zNb^3!^m~v@aZ%k6FTBNpz29S+oaA_ihJUUvcUJ!a7EG;4K!0KXc{-7KL>N*~@k5}R z;V4g#`|B*4k03K+@@>5OKhaY4ln)eaOJ$y05d;BCdRXeZWtKxSVB?4y$Kp_&6g8&bQMj769~cOlSt z-5{HVJo4yOGeVU!jwVnXm&}XL#iMbnU45uLDZ{!`6?Nc&M>lMxLCDMI)HCHO;e;iRI?Oq?{s31md8|L8C%zk zev?<5WW~B&L^bYmMl$eb0c&P8{cm3hdgZ7y3=SRgkfL3&&@BsAxVq#k5LB`@kb2su zxnY0x$d(~NZAmEH5;SprszN(@+MTHWuOB@B_oU2c_S{cQ`Nd;lI~rl+3o6R7y}aBl zOV`x0i$RRAmDd=Jb)RTUG$+WMy!4_9dH8H{CSeM`JTkmIM_+Z*?JCJ_-qpwc@@U9a z2%>EFz7m8k(=rB)`g}VFO;BPJYYE${v7HA6$cAn+rY%v%fRVdXY?YSkc-{VvoGkdw ztvXyeMeX4B8oF6rk|bnhvYmOQjE#^pJQel)6ycSB8}*qsuHKq%oXWw$;WW-NXaIz1 zO^v#nqX@nsz>fV$Lmmd3w^#Q$|f?@B?_2buU;?Z2je{_FJ}kV`3_d13T#Q|g~i#N4wW+fHm< z&HTaZ&7fgN+A--%-|*Yt&z3)pzdERe>f20QRDbY#UZ4d!4<(-b&Y%6`VLi_uhL#tm z`Q?8jg8px>)^m5+?=JiA+bzBoNOqU~?y}#F_CK&~??(IGX#WG#2Jq8vwEtI-za{Qs zU3gC2HgR12$sD)jb-8Ctw@#$BQm3`XJcBRr2GOHOr+FFZc75*tB{}?7{wu#4gxB)5! zJ@*B~Br5Z#-(NpY zeq(+@<|wah(#|)&r6OOK{V8a`9XreQkrnkn@AIv7<{tD$6GCV6!#StrHZDE6KaC;$ zrjse*>k`$|?0Nn)uLd!<;P-K4H8++1JULJ}BA&t4JL7tSg01M_i$X#)fw9%z!51$o z*54>6Uy~&Ah}TNsK-9DF*ZH`;j#r)R$WI@q$(G-qANcTrTQ^@kzs8A~S(1A|s$E&Q zoAKny5eLPf)0@b+LQBlV})Ki!2m6$=*Mp@Oj`ftBZ?^ zp{qrHAF@CT4t~oa?S~XM)~lN9+v}zcbNe}|!onIFd-)rdKPtbBj%1sCX{uvqXrX^V zW~5B6W^ijfD1KXeW;_2pXX6W*1}c+#%5Ez1(L=Mvy+b1@%h>J3!2vH@JTCs?9kKy2 zA+cJFfvaOhW*v3bf~~EHVrZ5YtEzP$3sq=V$fsqxj5?n6BDy#U!9Gp)krRnG^TVqa zeu@ojn39ZraRh}OxmY2{65YAo);}Hcp;WbjajQX`^->q7K^O1ht?8lH%GWk@W>?qN zWU|m4mxz~mhI(vJbQYOm(T%fhq7xwq_vQA*nMsX&CJnX1lGRM(fai)#Hg9-&HEWrY z>wmGsPH9?mOBPf$+rGWUKAM2dpYd4L*%*{$3@s11%0qKCFSu>mq2buDw~p7DPdFBP zAT9?d&Q^#A#nGIQto7Bq^dzX&#-aMa>QtFY-3E0@SH-&Q6Gle*u=x1PQS5cy-2xGT zVcX^OwUZ&OIXM^KttqVf4yDRBAznBM8)-|P2@GJ&!m1lc8Fm^y!8INmk`>0%)Z_$N zypIdxemfs;YToB07N{E^=+8Lvv2pv}BTU9Bc~|)4G3@*9;eqPvyXzTJ+jjU%z0}R- zT2HVJ%}Wjz2{&)b)pB&XSh(`=%!_PY*cV>Zyw3oke>{LGI&8s}&c&jPw^2jhuHvov zGj~fkZnJRAC&Kr^nVPbIYjPcwr7QC<xxF#%pLj@?gof$z7=V zXKeaFdy1|O;W2-^ zttR=YKHOqet2%zul#7zRkJ=rvkL!eQPrmk($<8>@Ou@n&n%UZZ#=bRiabG3>`=lsp z-#D54OQGhyElAU5mGP+?jhG|JHq{K*lCzsB94sxmUx^K+AF(;p^NE{@iMjsc%*V+J zqTW8$-YPGz+|p7d=YCF_yg)h!bee4cnH-j9%7SzAO0^3M`5NB6W8ij+yD2Yw-8J3VDIjPLv4-b% zF?)pB#wiGPV_tA__f0MjBi;)LuOi>0_u+2N-!wuR#E7+bcwCtHe<(Z4u&DZI?avSr zN{I*(0|t4TmZHSM^Ak)lwq^>RKD9yK~gExaaE!<`&<<9=@_U?h*hM$P||Y9~dxYiO2p? z6cAu+X6YDZ*#G<@=}VvJ-EUjLxSy>_bw+#gsn+wvRf7B?eO*X`&$mBfwS#1erl?d zCaFFa;wGT2GYPIIQ4nZ7zi2*QTGsGkmV#dezVe{u5z@X=R;fxJRZKQEcq#aCp5sko z*|+J7XZr-wH+Fae<+YV(--6M@0EyRIh-%f=s~e{SR{C#S%`r~p4ccCzK|JU2v+E>x zf)&UL_(S#F^YT6?ss_Z*ntwZXlc1ITT2y0KITG(8Z)Q%1j~4+CbqmR+9M1C5miuw?sri2>cg zCSyXrX(Z`BM9~eY<2VwB$Z$x=G_7D7&gB%&lE?L$m84iBAoS|W8>rHU^@t-~|GD5a z(!7csWYzXZhp6g{Z{CNj)Qa^eDC2i?eBW>+>8htH1JjJdVD-bUo%1vliN&GH;; zt0H0KD8G||1#{R`4*XD^B$dpY`g7;-8RO#sKh67-`NG+_i#vIKBQpnl>ZzBzrIQ^K z_m6UjX77(aaX)&Hm!n+RN>NpCmDL@|{Vr%!$OTOO<-+rAblqcfO@|kyPU1@Jd>N_uB0gW_k|bOMg=|&&E5-3oGF@ z?L7l`MbQpfEPFpny*Z!zbhv$miZk3W^XwnAhRmx3>(~n z_nBv%NE#1<10x16dHh7@LC(n9&^r4}CFE9;p~)1%rEs*OQ6QvL>qNhlxHQr3sw2HG z7lCXy6|~*k-OtWjDsQdc=GVGCzf&VO@F#E22?+_I_PF>TBCpkv(DuY1!t8NMQ(G*Y z_5X-C1`3Q?J6zl$7rT5ItQ_~Zkm8KQA^y@`+dSIGS%!>LslhvS>vmBo`$mH{P6F=ABLcY#8jC_HT~4jPg#YyQ`|d#= z3JEIDm0Ima8lzA(?%R156m3+myc3TVk_-TD1cZWsygikWmfN4j3d_6w zJh{H!>HKW6xBh-&?{44{+2q{>6Eu5!sQG8PB+o506{IE#-Sj+{xO=aAv1yb%2Y%5w zSaWEVZE!h}x=wSqBKqE?n~-n&G5cA^bIrRtR@s175L4ibQtHg{%T+u{2=i!}UHrk# zIEj@x&n0&zM0uCwnGVA7;f;Qq2umHkv)}Epldx)Tu4vgj+X-@J{d=oAN(=l#R8``| zAfO5*pxAH_9rw=Il-idjvqCcphk%NCLL2?N4uA2px$0^W{4yV%$Ju-i_N{m?8i&N? z%J!f8b;=cE{Dmo#s#JfSnJuLJhaL!c&%+N2{Z&o!^)rp*fSBEm|9F8&hCq(HEpTCz zatNQ&+}Lu_xeOvhSMozzKQjOpTV zNh6doiQ|&u*vvY_X!(q9gXjPcr?dW~SnUb+A)FyhkAQV6=>`$Ni*qRt9FXtUn@Y{5 zo|LvyeNX0KzCQi>;(AoI zfR9&wV`{Q&uGw(G=Y$>hxSHpi029YHDWkF^chnC3CvzdhvYyyzlEx|TMufO+m-D^E z;Hi6^JvLe<Kg{7Gq;{Zf$3k+R&o)nFl0~JJzvXephaK_TA4> zdArSLQZ=fM-uq`wv5iHOx!shJfA*e(Q3k>b6Ts=;_R#z=wQ!-|uTlp&{9P}U&6Vd6 z%{kfb*z_Tn&!62^15vyescL-mpy1=r&@flYPUP(f(be`^5thDX2Y)*pfI{zy`rl&t zzMjq<$+#qx=?Bn7R!|nV)HXM32ng0@cf@E$>uHgj+nUyQVzV`J_pPji9IyS+tM@-J z-BK&CTBE{*TiUUrur3bg3Mdj?ChF@Jx^qu*uqd5(&o1UWjS>q@R`-Qx9;`Eh@YG*8 z#9sX3omNFk2AR7!4Q%ItW&!eeZK{ZlHxJzL`J%%0l7KtqR>` zZIY*1%2U*OVJKA52Nm+p9aj#UUS|JP4-RoMhz?E06{C`wlTbO3A!JCUY?Sl-Kq4Y| zPl1{q>v0FAdi%2(vy6l4l}^)oKi~Q}0H2<3jXL-i?Z^D?K4`vy$V2ul?4FqQpjyoO zBQYmG|4zq|SFGvtPIHSE#d^S}F5llU+u!f`YVz@?2mJe9v;?3~*ATfuMKIUd^MVsV z;2O1UB7Fm`zna-u-(W9Gcwv(N7Sm5_(Qw@KInK>;p6~k_lp3}guoQGKd$=gQ{{g@L zb>1`4Z1LXAT&)HeEniUVf^5BMKAxe!Q-5N`JqRCd)g@8Nl+fMM)aR=n2{o7)UiQ=V zJkEd60Cm3HHTArkkM2R2^TcIX^PFb3#`Ej#{o#?LNE!Z9!NV(In7}a*-BksbagX&9~#~D5bYez?N%gL%_tem z)a~xC1i;0WeP?WRS$6Z4-E77N1}TQeNA6n0Q_|q)%07EO(Y`IN(%t3}B0u@^ zncbg!3sBk2pWRCc3c3M&nd9YOs6tB79Z5?_moRQ3t{jDdKUe%4WBnHPI8u@6 zrZlf`U%t~{{bUg~s9q#2EOBMUJ~PC+GAb8_DwgV+Icxy`q87JD@@iOGMNrwW-9Zhh z@JQeY$E1i_LbGvhDlR^rwXwdt6q(kQmg% zTFbN{@7XeO_6h)Qd~ah@xsNyBCJBQ`LrjYYG>S}Tjt-x7pFcGx=&8pGCJ%{EQ<p&?7TRzw{M1R3H;r-#4x-oI}#g!Fu`B<6YfjbGxqjg5_@ymb6E2bcS~V)RuD zaoxwKz0B)sT0Q+N(LC>HLKpXTX%DBo8`l9(5qW?7nb7`w5aWakBMT zbUj|%_?7>ucUgf#AS6q=zo_)T>kzwkCNMe*ML*tkq7dFqbX$=G-G$-0unjQEE7e2=k*lhbui2SOi~ad? zHc-w;uN>P%XYC!kb-{a4?}zwWbK#w_X~$OeV#$b}<@V%BMlgBJGw!)HKclGmz0;mf zyl92Bg=lY<1W2I7xr*td%rAf#uK69hg!T3C^@);HX7}@6yaRuE^(=Lh?>pLfKYC>%sd<)6F|C=#s8NdHI_u75?OO2lP4QtO+ zv{C)lb_tKb=Q~ykvCCWk>)xMt9yt*uXFUTmAD?7VBLwe4{S6ZCmXy1nR$kkuu(jwB zb-sTn8OH3xwnO{TKH)4rZ#~}~x^Q!JwZ4^O0UZXse#n-Yt{GkYdgU@^QAPSjDOo=S zTS%`B+Nz|=y?ARhZQ!XU(xx7yB53QXlM_eI7DYRoNQq^}(e36lIpwjbZrYu6|M2+- z<7z9jqR*@zSgO-0l!^~mb@)GYj13t9#Jh@b*vE#a3dZ3nHR>-yZ;2wv z%R_x56em6KlRW1;QJ2W60p%;c$a+~^S{P0MVKq6dTpcYohpol=GdlDThI;xV4cm7P zekK=`ROAq1KIUsn`5AoAJUp)eA(>F zfU37NQPi(I!04m+x*rxyEf53{!eY^Ty8AZSc5s+XQab+?OW{H`8MkZqkmsXt?*Xz* z9K(EEjoTCdi{9f^`euz5ES!pl8l&6e!Mp6f3V33|hu+026#chazk?md@|v-Cn+%KF zS+86t+{7o{ff-({T6Goh4@ndnb}0KU(i=mIqTN%kd4MwN+&xD+$%d?^b4+o1k##{( zzzn=V{ZoB0B$h^met!rXMtc z*Z=7ts=Wbj!VaU^Si4R6(V_1BV5Z+0_u);REV-#KS z2`r39QcW&Ko%dQD8|Cq8LMk;)&~E&X^_xHs)~PgXD!m2|GIm0s3IWa;hEE6Xp7vZ` z-Wv}h2C5af$?<0!0^azZUQF$|V2M!!E!OmpoDS#*g$rXf3ES2J%lqPy?3ihhadcvrc*M(9ospP=WzH|r63wCwNGe=CKt zdfn%7g++PI*{cq!N7~0&T)e$NEneZRPoy`hPj79%jT|lZcod8LZ`Jdau!)%v({{za zgf{#wZ2nO(7NxMeiHxP;WKJ28zXux*pD?FfKCK{!{;p1~UbxhUn>dHhc`{s=L%tvW z*bYf#vPwG z5FAev)w9m7-GkXNrjVUMtd_;k3z5s9Y-ggq3JG0_;cB@rJ0#&EoyGcMF6#@ywz^d( z+e58pK*HrezIRTZD(R=!+%bwqu0!X5Cu!K97qqCK(7<25Vu;LrL)oj{iXvje0n&$H z(t_7b`mDK)wT57igLJ2(sV(b!^s(012CG_7`E%2a^M4qqScmBuZ zk$8plI~Vw&#N|J{5`I$pd7rg|voqKo7^{9Q@%`uTneErYQ`2~2US+$sdx17zlT`I5 zy{VtS4|HQ`j8;kecJb`tHYev-+Cl29Y1HND2zHkcBllgHHJv!$Pp1fi(^7c6c37HI zFh^+)mkjo29mPVHiAG`yg|Mj#xC3DC=7f}Q>D2%>*0B+Qk>b%8#|ZJu38C!P5<`tL zl09@ma@hMSieP72YT{I_uL_o(%_iP)SCIs>WBkOOKI0b42{B>X{J8|q2Z*FV5(>S7 zHd!j99SSc&|V2h&Ax%J(<|(dC)-Swej6KJl@gTM7(KH9A-KHo$+p9_D$MBoBft2er23#f-g~Ai>Z|2yBljd8 zN)O{>rgsKq8As(AU;eKAbcT;+-_W>`&rGsMQ}4Op8V*V3+k1Tw@zdX)LLIee?SN5U zsmR&gUE8ipKCbk(p|J?Hbj=9j-aNR^C*vXt!WBUicMCzEnfZBat{G0lmG;Fjm~{bH zuqQ*dO5fS`xQ%+erMpeg4uw&rAr1>sNkTO}MeJoRcKI|m_zTKvSfkb9CYTKs3r`Pi&D9cqSWKO4o9Il*k*IBSXYIK+KH0mz zzCN;2Ur|@5ruUw6BVkGX_gDLWE68E&e>77+)wVwT)lB{4=cLtR-8MR5q)*F(t-r^t zZBN)RE!dMUaGAXS9_9Uq1GG(n#_~ArI8=UGM=-_0nrcW#(9?t)Av=3HzhiWoO3xBB z`EFx5#L{AiCHcxzv}_#A?>Z~W&)qaL{FA6-WJ_N;t!xiRMU0JZW?#ZZi0)Eo z2#>H_tQ%C!I(A=m{vw(DT6pUl$I`I+0mC&9cT;j6oF)DoPrUL-@d5oeOw{9h@!N}R zt&fFqn*QXiHm*d4?q3fj6a(E4UvAF+$nHKK$24PmjqBIHdf!KEQ)3Yr3n`!^GG`D7 zdOtN00Lh}qPEnsZ?OpL(m$wu2;?ECmE=YQh?%jgtvak@DRh%60t#=YPR>}3gpIMlj zd-I^k&>x}UQg;d-NDckVk7*Gq5%I4I>GoojTB~bx{f>j&pMIVfU}df<+PcVn1}nne z2>w$6JcJgdVc!$Z#u^{!W&4pn%K{~F6Q_oDw#veSZ68b_RnOJ&oLhaSE4nfiiYMUiJ!N4Djl+v`Z>D6Vpx3- zTPlyW(-972=#jqm7MmT>^}*X+yC2|tIv#n~t4|1YAs7_Cm;>isFJ3|QyEJtAwqdt~$pa0qgP$XYy=DKGy8k6q=Et)*_XmJ5X z5Mwcq)*!FEy@xk8>$FHJ;pWgbyl7hOt4^8xZuA%K@$?+!1I z>3XBUYA(v4Y)Rd@xzrl~DYhu_(6rl5^Y8uvU&f>NbC;ZK?{weOhW++78rP4$w4z7q zuIg=Cdb|-$>vk3g=QyX6EQ+VCzO#ACK)>3*_zcfc%#@Rzj&AoL2is@`(&bFSynES) z&-rO)yH;SlL)A{xcg`OM>6*Xp5R1k!Q7J0_Re7%!Cs(ZQqmQbpGG6Ap@iHsG_v!i& zKp;z4;$DB`@qp^W{UsNgAaL0@&(lm|I~CU2*g%F6WbjTse0lt2 zpZ%JYZ>9Fn&E7ef(?2{o(g!q-gb#lH>~ykkvp&IIhBz2r>5#5}@W}gSCjMvn5C?tB zm5M^#|F$xD{ckJNY#Wm}Pry8m?Si#Y-RC(2!LzyVM=6JU=SaJhnjg^;t>CI0bvwBe z>t5yq%4iWIb6yeI<0=_h#E%Mjbf{hVX9XcjW*uW)&S-k@m+hx9Ed##f$Eub#A!$I) z<2>Og#m$W8lcff18hg{nhs)HOPrcSha(gko8qNDpUm)Q~9MDGZ+9~bHBR(!hLsq}x zb{!Zbbap3qahjyn;Xz_@9vB}1ph7>i-g3QKmubuC?=Mj+RE)BJcyt4~A~(4&VR2~s zg^*elM#zGwEk2eS|MDyM{`z&uoA+BCAv|wfS;+g(VeZ5Vwu^d;FB@l5p;>imALp}v zYGj$=9t_+J=fS_Jw%qv%Pj4m!;puPkyya+iti8VVzf0$-0X*jkT;!fdDxz^@(uHoJ zzY%4Yug$!0mE?OX5z(*d0lULD5X=I>i%cc_*I&~(0YlcxD~J-O{WL$2+L?LC&gm=P z%$zf)zypM@ZDo{i)s}``XEnt`uHnT_N2RaPu9Di!MERM4yj=k)a&Kfh(Y*2jTxQb| zf&mYfD^sc#0n|0s=H!DJ+P}N`+Xja6mjdFABV=yF2RDCPK~+YGAvc+vk=;~_el_&u z%!S>_lqOPB1z!~aBvo{{Nfm`*e{NUFB~@Mqi{xK8P)CujPTd7>OLgGoNQ!mfM$rvX zzv|Gw?54G3rzImKIO2*vBoc3?FApSCzxjbN1Ym;2aJ3js4FeK7GD#|A!wUK(zFNqI zTs%`5#wVfE;8HS9kEYfix4?3cHSRw0_US0(K}Rc-Kr_YL=!O>8PJN!hQ&!WOel&i!--;COmwi`T!5eWR;oMO_-4k*_Z-?snl=p-M!U z(8QucvLW0NHG+n>t`|$4e zLU7x3n9A-~d)6h8w+SepJv&!)?%G6+-tXoSNO!zOIG5ZyexB_%+k7j&5sr$SrrhYM z-=R8*0Bd?HX*PDcUkS~Ik(=d-k4IU2IieUJ2? z_P&BenVOt095|1aj~A2w+K3cS0)7}mUofwW?OU0sTxz?_PpWC&IL%jQOpvkk!@ zkgMoVic|a)v;HqjEm)|%yTki#>$+13wjIZNnMEdds@5A6kug+*^`WoqH0%yddFpGF z%%XPqm2bj*t(~cd7p^#I$88Pp8{2@=L^ZtX4fn;WnyU>#5?+tuWo<3}jeQ?hzi^X{ zZS0Tk8G{xXi20YkBVNlP=z&~sk zm3TqocWm`!9?W({QrpX|cs$v16n{JczrNw&G4BxT&lNsRRqXPLk)ZHy5Z|>E4m%@} z&g9+c-L0pt@#2rziHqZJ&Bqr=lGip)w2eW>d-koGw}&Jx6fN1GKJwdVbZMJ+@gG~7 zv9?ilReDMaLlchQ>|&RNrq3++`SJUCLrZ^pY2qC!2=!IZE-tbUW`NtZ+2F(6W(<5k zk%wx0k;hvFwP)+6{MWbFEq3fe8v2l+F#lz$GAl$-rOy39LqvX3*9?A69j1*Qj0f}^ zJi1H|gs9k}o4XapCG|nwI=c{xup^JvDmNRKLPgwpC{sWe^i!4HTx#vf{!)1Y=Arl9%>Gl$%Jq7mNMI3$c zxT+Amjo4{!ZIy<1hUbnO0#bbg11gaCast$sRer8CN0Zt4=9`}l4N}!P^Funr*eq+h z!hZ~YTtuc~jaaK&**=uehlY*_BEr}p-Ov3l)7FTnTL2l+E_uc4kd!4~h}$m8R9 z_G%I@!$(8S&Vt}F!&WUH-K{W$tXNJ1Oc(P$0L7Q~T4L7OViNzdsY~zGFhFdgY5WM{ z-%9nLKoQzit<7Is^>B02^w~)0-YBN@9o`NUvhFL&cYxkl8{m6WL3_za5i?PRZOxmp!LZ)QsT)Py4jq2IgmJM)T+TU!<1Xu8YB*&X6N8OR|TWX z#XJu{T_o`Wpo4GbgH#rh7bJrX67+-sYfV(8I#hUUPPqa^fiu+olLV%hX z9sS%D^)jE+(deFy?GIDj-2OlLrQ;(U3wd89+(#mNi5;}u{b^cJ*((UxYlxN%nOGr3 z6f6R&^0nQSUkY3pu|(7INg(WXnUGTUq@ZyXIK(o0G&5a zk&XO>ffrTb^;_!>EvMDivD^#*%J^?Xa;ef(121&4smNO|9(5-@fc-+hZ$?v*(4%{1 zrdS!C53uID@DWfk0+?iZREnuktDB5CZ;PIB-^(1_?1Cm|=(Fuj=Q{Dcrl2Z(GX5HD z34;BRt#`j8%N%Cfm|_8mu0telxyu>JpY2mV{?IFN!FpFd*W@UEY72PK{4{e#M%_R( z=XcV%TH=P;P2ZKCd zR6Vc{`5A?C4pyPDh_rqH3bKsUUR&CyCYMEKVvQBe&+AvF(%Dn=K-#p8|&w z6{e|S7L#mV6Sahi)2#8h0FZ`L z-h^;rl;fg}^gsWeQ0^CJ)lasVwzLXA{L?j%Bb;CnA4K3+BIYeGS~y15NDoLY{iqlD zF?CW422s(Gh#*0(-#($Cf8p$`rE3N^A6x_$_5RXZ30KQ3-(ARvk3-3XQ;#Clw=D1B zTi-j(pI^BM7iVX!|AC5TgP^yL>j+ET@c`DTuRRSj+83y4wCQh5{3J^#IgDNk+An0X zEj=^I*Q$3~xAt5gZ}c(F_E(Zv@p4_){RaZXV8%`{o@c(`gyRYQ#V>=27kii({|Au$ z(Mw&A%|A%Ull?Er^nYP*N(_Q@N-pLl^;PWe8ig*=z|^kAhG&BW z|K3ZI?QpiF?S)6x2}5ilQ+?xyaENsMc9P}(*#_70EXJ8v!g6lb1k&8aOxIvx$GqgQ zm6SelMu+WgGrD|lri#A80c;TPxm z-9NEmW7sM}SYgMOZI6#QUdjhv1QuuFI6ws9qdyHA&53@(Fza~RFn-N4Y+|xKc!j7(%}tA5u(E) zV41uhS2qDvKQv75gl8?N8-7B?LA%LRxWQ4OZqm>RN9IDh5Uc$PE#@=4CgAfWAEqBv zGLl{V1pwI)m#X$x3p%+}^d|YUL{r~^R8_-m=W6P<#OIp3Fs>XDwe`lGX0BZI0Xo{=B8w0uIEg4C-K-@ zRo&->u&-A2^z^V@nKRkaVuK8u97?a->3w+F(zlGo{2zT`%5X$)h%`#v7)@4#Q>}CG zAutLbEWIKxO}kaFJsJ6tZa{TV5Mj1uEySlz1rG>1iU9oPdTgMr{nBUXE2Xbzp$X{J zhV8W`!$5UOdA^-3#id-U>0-GCyN1PZt#UdK1LvD-1s$l|KA z<=$j?<`&nnG|3fJ4(QBxGaR%{a;_2_jaK!)Hj)sR3tIMx?C%a6v|1epYXL_r5L+%J zo_@OthNsW~a+e325NmmQ&+vMzSs@o}oDl!MTycKfG00pw$BgrWw7j%P%`o1%q-2$l z`L6N$c|Zb`BU_rrEmFhxWc0Nb1{Q$wh=jFZwgoc#Y_td%%|Hi5AJN{RM}H!n7keOA zR~4ZyGtHw|r4I$1O8vahVmsthR{+&nEkQHC5&?#VKBeoAyN9BA=}CBQ8z1s|zTJ3o z)K*|uyb(Cn&(MUdK{3;*>LQI%rB23H9Q~!@7Q^ybm4YMQ)e5}c-645DKAmKm! zrqeGih#3iwt8+B%-UR*x;Qr|g#2fz9Wfd2tY(n`1Q`>5QVbGItK%{akYS2FoHFyGu zTWQSff_)*LuM-p$l(5yl+RFWyENN^C%6jmy=m@dH5=x>l=6AVfH9a#E^?i@25TLt< zX}k5AfRY9Pc^#t`X^L=hHpp(`4zu=RohO~-hr+(W{&-ZMPxAMlub*5!YiD8um4GoL zdA!+y2wlQQI^wcK*IGAKE0L@7IU>C%6tOdfN51nqNJeE#JKcD7TC)|V$afeJ0RH-Dc}uWLrDP`J6+vrnKM7Wahova)8HRT zOT2JdY%jQ?Z}R4M5qZVf`@xUJWuqB4R3h~YE^P{QtPSuMB6~UgSp?=^G6XLI-HERR zkMyOUwI!SWVi2!vEhBWh5EFFEFa32Q6WRW?WB)&ay-@rnmm?o^9*8s(kcYP(bnf3{zqbmj z;V@`Y+h1tb2Ya6~r!adw;#vD&-~|Hzd%PeY@+$`(La&q(_1$7_Wig5=VEP~iHoz~z z)G8L+1*FCrfDJy;Vy(c65>WmVUBh>d-f5W>jY$A~9*t2_dBYg4%(j_CWuFVrXO`kY zzm!xfVIDm_9qn=|dWZhpNy{>*FNOTGng`{ZVfd3$NcK+aU^fu*+#xd7;;_j`9|3K>b_2s@GM{cbJK1Be7iIs{7NRi#N>L)?QU;&bJH9p`j=nLCnG zB63N%sQadsp9_$er{`@vkK0vT=u%g!EdVb`M38{wXW|0B~&%!LJY9N&=9Y!?C8K@F6=Mek`zkUDRq2A!Cx&pwa#c z*mRiO*g$(C6V3scU|y-y9-AnXnK?Ub1jIvjnYyh{-Id%d`Z_DJMIKBR-;&2?hWR7N z)|^zNUti8ZC~H57=mB4%*Z_fUjq^srII(0()BtjPx^_Xe^k0R~p~hCqZ@2P(=@C|G zrdP2iErZ8d2kC~Ma6M3yO|;2X!iN8$tOl?Z`|yoFWkG{6-5x*NoN4Zp!tX%$%{VN2^>xRY-*Aj_|QF{!YUY+1tp9@Z!{v5o(U?)M!tLwf^{=;2GFlM7mBNM zq#2tL4^aA_k&A*#tEsO>>{-<&YcM;9DVslx7b#Xb;6fFrm_!Z@=~k(=BZSX`GZT)c zBnmH4L({JX4H>>72Pdg0uA($vb?KSwFN!r$FtF}qPk_m>!1r5sDn&}Ydu>dMjiS%a zr|Gn+m`plnvWmuCyFa%Q&fyn|9oU>`&^gEqs*qeC>+d#hEF8M+KBFP_&G$`fch3B6 zQ&Tj!ZT$wG9yDndDP&LP+>$*)cCt;Db4#q_n6LVbM~ZH;t54gwI`P^UI@D z6Aiujs9IaF$xF9mo>q7F^pn*r6t3|GVUPWsAgy4wdPi{Oywm!Pwbxxcw$BWn*bK6P zB1*?TLnHJ`jNG#Z180*#kEh48R_1m)q?6&sn8A#AJ5R(C(PD!NV%?{UX?bM6sCyTH1vHx=@I&t@{AcfB{U zryVrzr2uHH@+p{WaAuFq&r=YBV;v@2-Ulh~JS+Rqv|MhCmW1VW9`7EBF9o{pL*dzp zUYY$=$g86;D%5Cz~8@C?9+diq3EANPN?q==loUus`7h@aQC5@{vaP z+;Bq~CCSx&&{>Zy`t>x^ahN@^B=C(^OrTfW%XR*p zMuLv=ov6c-N2r^!O6CAwjmhiC-q}Q4?4RFbI~ zJfNzB=ux29K2E{xW(W&4_rzgtb2W`g!mG&{c?h))#3;CTpurDuBm3O(MN7M#-?U6T-%F*o07EoSioj|g$Gj}Qd?zES`pklS*7hP3lq)h}Z z?YJNG%LrM^efjByYW2m(OX^9dk)592k9Wx7V)ur$4>!NQ7BWPIaGF9)8=L2wH&-tq zs`E?}g^+O-=%PO69MO7@svl8T#A|enDI^BZr2e zjYRL>w&zTd3}+8iZ?D$5?vB=*{uItI4kzFWHH{cC5vnYw+AAlwQD5u`o*eI|$)J&m znyi|v{iE0>w!sElJ@N8=Pj^#H3UP3nN0nNMNrW|%^F z(q|xj+$!aAo=nO!%$mu%RQ%X+*Z%7*J`ur%FX|5xNK;aL+|-$ONn4zmtQkd&5?MF7 zV_VvvSTYHb2MmQ%iLDP|w`!ptgRu|eQ!Yvs7w zX%)r3zFoZoHkj)syFK&C>$Y@oA@sl^`Gda0}2C$Utpl{8M1o(iyg+^xp z_fzWF4aRCM&*F*e1W-rsVdV1|O%vinTDk~Sc z=V}sqqaaJ-2`~WpxwRJ0`9JWe(wG2yW4&{N8hP%x_a5AANjyhv!Hl0tIhzwicYzF6CBpel}c!WE?;j|7xLD&{0~0 zBrk*zJS(ih106v~G(2N-iD4ir z96H+2db17kKI?vSIdP7eACQB_U64t0#9S6s{jT@jelW(N7d){|sX>D(61Z7$ zHTSg4*Nf!dUG*bJlYyOOLl>rJen^uJ`kN$!2a|vJ<3?`tG8I1N7Uq9DDdKjPx9>0i zj6K?*{5Pcy*D)_9s_^rt3@ZwG|_`lKGn(=tMbm$R^S9j@mBfR(`TgZ+mS*Fa@0oI?A%$=CRM?f^>Zov;elg8 z{X>Cm3g9E-4lFH}nVA_JwYo>Q_;pEq_D)`COxoqos9;>l&B1SGzrDEN(lSv|@AY(d zFeWx6${hqIjreokdJ#s?WY4 z;9}2%_!+VgHt!|PZgyJl&W6prqEK?~9FWzH0&M>cY*v?&B;Ef6% z-WH#k8ot8P`q1o*@8+SbAdj6VP_fwO&(I_zxZ2T~MSb|Zd-cbm6f`NzaB3}Ol}7tE zdF=r0Dz3}B+o)Zvwjw0WeRk+oomFHSbRpLYlijYC*RV@lf^)^#92nT{=qwb$KgmRX z9_k0CMW8I%$4tI$S!@=w&?402_MffxH9MD+tN|p4_m0ezR0KDywhqZX51eR?L0YF{fQRe3R1#XaDzo?}z&_Ypq{CB+oO}7;}y}=A&KrNy4#UeM4>4yX3Ig z!$WGSO95q4xgaZFs*UAZYXalwFEe7B$M3LahajgLw2x$?2 zxUW*YgO4w75Vm&f?>>!1?Yd^15U*CC5alatQrSEcmWdyTD(mLc0zyEBm-oteA zR;-FkL_n1!mZaU)xSgvg@5P0Qt|AiZU873iXhL{3*EHzBB$m2WKfV1cE0tc83)0Tj z`#K0*$^8&9`(CV56L0s3^D&BM3NVv@zzAkk10$9kI|je^-GFKxo#&0dZJ-D-2J$U= zo(z^?(D-BC{#!~HXUN~+0Jc{#-v0~^K*T<^YQ0)*5n^@&PZvgR{CiIiVMEVGoJz^Q z6LR?{VwLLpqKeMz|KTOfR8$L>;HeU_G!m5`Z^vwxet3IU55NlSyXB=|a&~f^9r1kn z?o`FR)}XF%R)E&Gws?Lc3QR;J#|%F9#$5hp=WUCh!`)Z=+RxPj)9*D{ zf)=U;eP7>RG({km#zhSDxzrq#SpOQE%Rg&CtV9?{saXbS5H7E^(Es}Q8 c(rVm8 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

`1cpS_)L1W+92 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

7KxScAmmDuXv(^;O0>&LYsI*h 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

I@x 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

+
+
+
+ +

+ RemoteParticipant Reconnection States and Events +

+
+
+

+ This app demonstrates the RemoteParticipant Reconnection States and Events which can be used to update your application when somebody else is reconnecting to the Room. +

+
+
+
+

diff --git a/examples/remotereconnection/public/index.css b/examples/remotereconnection/public/index.css new file mode 100644 index 00000000..b51e4162 --- /dev/null +++ b/examples/remotereconnection/public/index.css @@ -0,0 +1,104 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 0 2px; +} + +div.col-sm-6, div.col-sm-6 { + height: 100%; +} + +div.roomstate { + background: white; + margin: 2px; + color: black; + border: solid 1px black; + padding: 20px; + margin: 10px; +} + +div.roomstate.unknown.current { + background:gray; +} + +div.roomstate.connected.current { + background: green; +} + +div.roomstate.reconnecting.current { + background: yellow; +} + +div#p1-media, +div#p2-media { + height: 50%; + width: 100%; + background-color: #fff; + text-align: center; + margin: auto; +} + +div#p1-media video, +div#p2-media video { + margin: 1em; + max-width: 80% !important; + max-height: 80% !important; + background-color: lightgrey !important; + background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); + background-position: 50%; + background-repeat: no-repeat; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/remotereconnection/public/index.html b/examples/remotereconnection/public/index.html new file mode 100644 index 00000000..8ca23d1d --- /dev/null +++ b/examples/remotereconnection/public/index.html @@ -0,0 +1,55 @@ + + + + + + RemoteParticipant Reconnection States + + + + + +
+
+
+
+
+

+ Remote Participant Reconnection States +

+

+          
+
+
+
+
+
+

Local View

+
+ +
State
+
+
Connected
+
Reconnecting
+
+
+
+
+
+

Remote View

+
+ +
State
+
+
Connected
+
Reconnecting
+
+
+
+
+
+
+
+ + + diff --git a/examples/remotereconnection/public/prism.css b/examples/remotereconnection/public/prism.css new file mode 100644 index 00000000..d8d7c2f3 --- /dev/null +++ b/examples/remotereconnection/public/prism.css @@ -0,0 +1,124 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #87ceeb; + } + + .token.operator, + .token.punctuation { + color: #ff5555; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol, + .token.deleted { + color: #f92672; + } + + .token.boolean { + color: #55ff55; + } + + .token.number { + color: #cd5c5c; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #ff55ff; + } + + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #ff55ff; + } + + .token.function { + color: #ccc; + } + + .token.keyword { + color: #55ff55; + } + + .token.regex, + .token.important { + color: #fd971f; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } + \ No newline at end of file diff --git a/examples/remotereconnection/src/helpers.js b/examples/remotereconnection/src/helpers.js new file mode 100644 index 00000000..a6eb1994 --- /dev/null +++ b/examples/remotereconnection/src/helpers.js @@ -0,0 +1,38 @@ +'use strict'; + +/** + * Listen to RemoteParticipant reconnection events and update the UI accordingly. + * @param {Room} room - The Room you have joined + * @param {function} updateRoomState - Updates the app UI with the new state + * @returns {void} + */ +function handleRemoteParticipantReconnectionUpdates(room, updateParticipantState) { + room.on('participantReconnecting', function(participant) { + updateParticipantState(participant.state); + }); + + room.on('participantReconnected', function(participant) { + updateParticipantState(participant.state); + }); +} + +/** + * Listen to LocalParticipant reconnection events and update the UI accordingly. + * @param {Room} room - The Room you have joined + * @param {function} updateRoomState - Updates the app UI with the new state + * @returns {void} + */ +function handleLocalParticipantReconnectionUpdates(room, updateParticipantState) { + const localParticipant = room.localParticipant; + + localParticipant.on('reconnecting', function() { + updateParticipantState(localParticipant.state); + }); + + localParticipant.on('reconnected', function() { + updateParticipantState(localParticipant.state); + }); +} + +exports.handleLocalParticipantReconnectionUpdates = handleLocalParticipantReconnectionUpdates; +exports.handleRemoteParticipantReconnectionUpdates = handleRemoteParticipantReconnectionUpdates; diff --git a/examples/remotereconnection/src/index.js b/examples/remotereconnection/src/index.js new file mode 100644 index 00000000..9886ba78 --- /dev/null +++ b/examples/remotereconnection/src/index.js @@ -0,0 +1,95 @@ +'use strict'; + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const getSnippet = require('../../util/getsnippet'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const helpers = require('./helpers'); +const handleLocalParticipantReconnectionUpdates = helpers.handleLocalParticipantReconnectionUpdates; +const handleRemoteParticipantReconnectionUpdates = helpers.handleRemoteParticipantReconnectionUpdates; + +const p1Media = document.getElementById('p1-media'); +const p2Media = document.getElementById('p2-media'); +const P1simulateReconnection = document.getElementById('p1-simulate-reconnection'); +const P2simulateReconnection = document.getElementById('p2-simulate-reconnection'); + +// Update UI to indicate remote side room state changes +const onRoomStateChange = (participant, newState) => { + const oldRoomState = document.querySelector(`#${participant} div.current`) + if (oldRoomState) { + oldRoomState.classList.remove('current'); + } + + const newRoomState = document.querySelector(`#${participant} div.${newState}`) + newRoomState.classList.add('current'); +} + +//Get the Tracks of the given Participant. +function getTracks(participant) { + return Array.from(participant.tracks.values()).filter(function(publication) { + return publication.track; + }).map(function(publication) { + return publication.track; + }); +} + +(async function() { + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + // Get the credentials to connect to the Room. + const credsP1 = await getRoomCredentials(); + const credsP2 = await getRoomCredentials(); + + // Create room instance and name for participants to join. + const roomP1 = await Video.connect(credsP1.token, { + region: 'au1' + }); + + // Set room name for participant 2 to join. + const roomName = roomP1.name; + + // Appends video/audio tracks when LocalParticipant is connected. + getTracks(roomP1.localParticipant).forEach(track => { + p1Media.appendChild(track.attach()); + }) + + // Appends video/audio tracks when LocalParticipant is subscribed. + roomP1.on('trackSubscribed', track => { + p2Media.appendChild(track.attach()); + }); + + // Connecting remote participants. + const roomP2 = await Video.connect(credsP2.token, { + name: roomName, + region: 'au1' + }); + + // Simulate reconnection button functionalities, adding in region in order to extend reconnection time + P1simulateReconnection.onclick = () => { + roomP1._signaling._transport._twilioConnection._close({ code: 4999, reason: 'simulate-reconnect'}); + } + + P2simulateReconnection.onclick = () => { + roomP2._signaling._transport._twilioConnection._close({ code: 4999, reason: 'simulate-reconnect'}); + } + + // Remote room listening on remote participant's (P1) reconnection state + handleRemoteParticipantReconnectionUpdates(roomP1, state => { + onRoomStateChange('p2', state); + }); + + handleLocalParticipantReconnectionUpdates(roomP1, state => { + onRoomStateChange('p1', state); + }); + + // Disconnect from the Room + window.onbeforeunload = () => { + roomP1.disconnect(); + roomP2.disconnect(); + roomName = null; + } +}()); diff --git a/package.json b/package.json index 35d79d5c..7ede25ed 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,9 @@ "build:examples:networkquality": "copyfiles -f examples/networkquality/src/helpers.js examples/networkquality/public && browserify examples/networkquality/src/index.js > examples/networkquality/public/index.js", "build:examples:reconnection": "copyfiles -f examples/reconnection/src/helpers.js examples/reconnection/public && browserify examples/reconnection/src/index.js > examples/reconnection/public/index.js", "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", - "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "build:examples:localmediacontrols": "copyfiles -f examples/localmediacontrols/src/helpers.js examples/localmediacontrols/public && browserify examples/localmediacontrols/src/index.js > examples/localmediacontrols/public/index.js", + "build:examples:remotereconnection": "copyfiles -f examples/remotereconnection/src/helpers.js examples/remotereconnection/public && browserify examples/remotereconnection/src/index.js > examples/remotereconnection/public/index.js", + "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", "clean:examples:bandwidthconstraints": "rimraf examples/bandwidthconstraints/public/index.js examples/bandwidthconstraints/public/helpers.js", @@ -29,6 +30,7 @@ "clean:examples:reconnection": "rimraf examples/reconnection/public/index.js examples/reconnection/public/helpers.js", "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", "clean:examples:localmediacontrols": "rimraf examples/localmediacontrols/public/index.js examples/localmediacontrols/public/helpers.js", + "clean:examples:remotereconnection": "rimraf examples/remotereconnection/public/index.js examples/remotereconnection/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, diff --git a/server/index.js b/server/index.js index 75e3a1e1..6853b361 100644 --- a/server/index.js +++ b/server/index.js @@ -33,7 +33,8 @@ var app = express(); 'networkquality', 'reconnection', 'screenshare', - 'localmediacontrols' + 'localmediacontrols', + 'remotereconnection' ].forEach(function(example) { var examplePath = path.join(__dirname, `../examples/${example}/public`); From 215ea85dbdf92c361825174af1f64642a66bf2e2 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Fri, 13 Mar 2020 14:59:27 -0700 Subject: [PATCH 61/89] Linking to twilio-video-app-react. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 544e4948..82ccb08d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +**NEW:** Please check out the newly open-sourced [multi-party video application](https://github.com/twilio/twilio-video-app-react) +built with twilio-video.js and [React.js](https://reactjs.org/). + # Twilio Video Quickstart for JavaScript [![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true)](https://ci.appveyor.com/project/markandrus/video-quickstart-js) From 86ba2c164bb7f6ed529486c6668ed6da688f4611 Mon Sep 17 00:00:00 2001 From: Makarand Patwardhan Date: Wed, 25 Mar 2020 11:54:07 -0700 Subject: [PATCH 62/89] explicitly call getuserMedia before enumerateDevices (#110) * explicitly call getuserMedia before enumerateDevices * fix params * ensureMediaPermissions --- examples/mediadevices/src/helpers.js | 36 +++++++++++++++++++++++----- examples/mediadevices/src/index.js | 6 +---- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/examples/mediadevices/src/helpers.js b/examples/mediadevices/src/helpers.js index 5354f17a..9fe99b42 100644 --- a/examples/mediadevices/src/helpers.js +++ b/examples/mediadevices/src/helpers.js @@ -88,6 +88,26 @@ function applyVideoInputDeviceSelection(deviceId, video, room) { }); } +/** + * Ensure that media permissions are obtained. + * @returns {Promise} + */ +function ensureMediaPermissions() { + return navigator.mediaDevices.enumerateDevices().then(function(devices) { + return devices.every(function(device) { + return !(device.id && device.label); + }); + }).then(function(shouldAskForMediaPermissions) { + if (shouldAskForMediaPermissions) { + return navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then(function(mediaStream) { + mediaStream.getTracks().forEach(function(track) { + track.stop(); + }); + }); + } + }); +} + /** * Get the list of available media devices. * @returns {Promise} @@ -97,12 +117,16 @@ function applyVideoInputDeviceSelection(deviceId, video, room) { * @property {Array} videoinput */ function getDeviceSelectionOptions() { - return navigator.mediaDevices.enumerateDevices().then(function(deviceInfos) { - var kinds = ['audioinput', 'audiooutput', 'videoinput']; - return kinds.reduce(function(deviceSelectionOptions, kind) { - deviceSelectionOptions[kind] = getDevicesOfKind(deviceInfos, kind); - return deviceSelectionOptions; - }, {}); + // before calling enumerateDevices, get media permissions (.getUserMedia) + // w/o media permissions, browsers do not return device Ids and/or labels. + return ensureMediaPermissions().then(function() { + return navigator.mediaDevices.enumerateDevices().then(function(deviceInfos) { + var kinds = ['audioinput', 'audiooutput', 'videoinput']; + return kinds.reduce(function(deviceSelectionOptions, kind) { + deviceSelectionOptions[kind] = getDevicesOfKind(deviceInfos, kind); + return deviceSelectionOptions; + }, {}); + }); }); } diff --git a/examples/mediadevices/src/index.js b/examples/mediadevices/src/index.js index ee5e703f..f85ddb01 100644 --- a/examples/mediadevices/src/index.js +++ b/examples/mediadevices/src/index.js @@ -27,11 +27,7 @@ var deviceSelections = { * Build the list of available media devices. */ function updateDeviceSelectionOptions() { - // before enumerating devices, get media permssions - // NOTE: w/o media permissions, safari/ff does not return the labels - // (like front camera, back camera) for the devices. - return navigator.mediaDevices.getUserMedia({ audio: true, video: true }) - .then(getDeviceSelectionOptions) + return getDeviceSelectionOptions() .then(function(deviceSelectionOptions) { ['audioinput', 'audiooutput', 'videoinput'].forEach(function(kind) { var kindDeviceInfos = deviceSelectionOptions[kind]; From 6aae58ea04cf9c1f4ad1c3d40ed8e7e13cc19b0b Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Mon, 13 Apr 2020 15:15:52 -0700 Subject: [PATCH 63/89] Adding link to best practices guide. (#114) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 82ccb08d..68a9afbb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -**NEW:** Please check out the newly open-sourced [multi-party video application](https://github.com/twilio/twilio-video-app-react) -built with twilio-video.js and [React.js](https://reactjs.org/). +**NEW:** Please check out our [Best Practices Guide](https://www.twilio.com/docs/video/build-js-video-application-recommendations-and-best-practices) +for building video applications with twilio-video.js. # Twilio Video Quickstart for JavaScript From 5981a29a01315e073eafe9f1bdf37ca1e5b9ffb0 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Mon, 20 Apr 2020 11:55:57 -0700 Subject: [PATCH 64/89] JSDK-2754: Implement recommendations in best practices guide. (#115) * UI to select microphone. * UI to select camera and enlarging microphone indicator. * UI to select room name and identity. * Connect to Room and wire Room events to the web app UI. * Leave Room when "Leave Room" button is clicked (or tab closed). * Handle backgrounding/foregrounding on mobile browsers. * Adding option to change media devices before selecting the Room name and identity. * Making Room UI responsive. * Adding an avatar background for when a RemoteVideoTrack is disabled. * Setting up the dominant speaker event. * Setting up the ability to pin an active Participant. * Specifying platform-specific ConnectOptions and BandwidthProfile values. * Show media errors. * Show connect and disconnect error messages. * Refactoring getRoomCredentials() to use a random identity if necessary. * Using async/await. * Saving media device selection to localStorage. * Accepting "roomName" and "identity" as URL parameters. * Changing "Screen Name" to "User Name". * Always test mic and camera in mobile browsers. * Unpublish and re-publish the LocalVideoTrack when the app is backgrounded and foregrounded. * Make sure that enumerated device IDs and labels are non-empty. * Updating README.md. * Moving the application screenshot to the "Overview" section. * Save the user name in LocalStorage instead of appending it to the URL. * Point to joinroom.js for SDK usage example. --- README.md | 43 +++- examples/util/getroomcredentials.js | 43 +++- quickstart/public/index.css | 146 +++++------- quickstart/public/index.html | 155 +++++++++---- quickstart/public/quickstart.png | Bin 672247 -> 151888 bytes quickstart/src/browser.js | 44 ++++ quickstart/src/index.js | 318 ++++++++++---------------- quickstart/src/joinroom.js | 333 ++++++++++++++++++++++++++++ quickstart/src/miclevel.js | 53 +++++ quickstart/src/selectmedia.js | 112 ++++++++++ quickstart/src/selectroom.js | 78 +++++++ quickstart/src/showerror.js | 21 ++ quickstart/src/userfriendlyerror.js | 38 ++++ server/index.js | 45 ++-- server/randomname.js | 34 --- 15 files changed, 1060 insertions(+), 403 deletions(-) create mode 100644 quickstart/src/browser.js create mode 100644 quickstart/src/joinroom.js create mode 100644 quickstart/src/miclevel.js create mode 100644 quickstart/src/selectmedia.js create mode 100644 quickstart/src/selectroom.js create mode 100644 quickstart/src/showerror.js create mode 100644 quickstart/src/userfriendlyerror.js delete mode 100644 server/randomname.js diff --git a/README.md b/README.md index 68a9afbb..7e5e004a 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,22 @@ for building video applications with twilio-video.js. _For Twilio Video 1.x Quickstart, go [here](https://github.com/twilio/video-quickstart-js/tree/1.x)._ +## Overview + This application should give you a ready-made starting point for writing your -own video apps with Twilio Video. Before we begin, we need to collect -all the config values we need to run the application: +own video apps with Twilio Video. + +![screenshot of chat app](quickstart/public/quickstart.png) + +## Setup Requirements + +Before we begin, we need to collect all the config values we need to run the application: - Account SID: Your primary Twilio account identifier - find this [in the console here](https://www.twilio.com/console). - API Key SID: Used to authenticate - [generate one here](https://www.twilio.com/console/runtime/api-keys). - API Key Secret: Used to authenticate - [just like the above, you'll get one here](https://www.twilio.com/console/runtime/api-keys). -## A Note on API Keys +### A Note on API Keys When you generate an API key pair at the URLs above, your API Key Secret will only be shown once - make sure to save this in a secure location, @@ -37,18 +44,38 @@ Next, we need to install our dependencies from npm: npm install ``` +## Running The Application + Now we should be all set! Run the application: ```bash npm start ``` -Your application should now be running at [http://localhost:3000](http://localhost:3000). Just enter -the name of the room you want to join and click on 'Join Room'. Then, -open another tab and join the same room. Now, you should see your own -video in both the tabs! +Your application should now be running at [http://localhost:3000](http://localhost:3000). You will +be prompted to test and choose your microphone and camera. On desktop browsers, your choices will +be saved. _On mobile browsers, you will be asked to test and choose your microphone and camera every +time you load the application in order to make sure they are not reserved by another application_. -![screenshot of chat app](quickstart/public/quickstart.png) +After choosing your input devices, you will be prompted to enter your Room name and user name, following +which you will join the Room. Now, all you have to do is open another tab and join the same Room in order +to see and hear yourself on both tabs! + +[joinroom.js](quickstart/src/joinroom.js) demonstrates how to use the SDK APIs to build a multi-party +video sesssion. You can start building your own application by incorporating this code into your own +application, and build your user interface around it. + +## Running On Multiple Devices + +You can use [ngrok](https://ngrok.com/) to try your application +on different devices by creating a secure tunnel to your application server: + +```bash +ngrok http 3000 +``` + +You will get a URL of the form `https://a1b2c3d4.ngrok.io` which can be loaded on a browser from a device +different than the one where your application server is running. ## Examples diff --git a/examples/util/getroomcredentials.js b/examples/util/getroomcredentials.js index eb2c85c1..a831311f 100644 --- a/examples/util/getroomcredentials.js +++ b/examples/util/getroomcredentials.js @@ -1,14 +1,47 @@ 'use strict'; +const ADJECTIVES = [ + 'Abrasive', 'Brash', 'Callous', 'Daft', 'Eccentric', 'Fiesty', 'Golden', + 'Holy', 'Ignominious', 'Joltin', 'Killer', 'Luscious', 'Mushy', 'Nasty', + 'OldSchool', 'Pompous', 'Quiet', 'Rowdy', 'Sneaky', 'Tawdry', + 'Unique', 'Vivacious', 'Wicked', 'Xenophobic', 'Yawning', 'Zesty' +]; + +const FIRST_NAMES = [ + 'Anna', 'Bobby', 'Cameron', 'Danny', 'Emmett', 'Frida', 'Gracie', 'Hannah', + 'Isaac', 'Jenova', 'Kendra', 'Lando', 'Mufasa', 'Nate', 'Owen', 'Penny', + 'Quincy', 'Roddy', 'Samantha', 'Tammy', 'Ulysses', 'Victoria', 'Wendy', + 'Xander', 'Yolanda', 'Zelda' +]; + +const LAST_NAMES = [ + 'Anchorage', 'Berlin', 'Cucamonga', 'Davenport', 'Essex', 'Fresno', + 'Gunsight', 'Hanover', 'Indianapolis', 'Jamestown', 'Kane', 'Liberty', + 'Minneapolis', 'Nevis', 'Oakland', 'Portland', 'Quantico', 'Raleigh', + 'SaintPaul', 'Tulsa', 'Utica', 'Vail', 'Warsaw', 'XiaoJin', 'Yale', + 'Zimmerman' +]; + +function randomItem(array) { + var randomIndex = Math.floor(Math.random() * array.length); + return array[randomIndex]; +} + +function randomName() { + return [ADJECTIVES, FIRST_NAMES, LAST_NAMES] + .map(randomItem) + .join(' '); +} + /** * Get the Room credentials from the server. - * @param {string} [identity] identitiy to use, if not specified server generates random one. + * @param {string} [identity] identitiy to use, if not specified use random name. * @returns {Promise<{identity: string, token: string}>} */ -async function getRoomCredentials(identity) { - const tokenUrl = '/token' + (identity ? '?identity=' + identity : ''); - const response = await fetch(tokenUrl); - return response.json(); +async function getRoomCredentials(identity = randomName()) { + const response = await fetch(`/token?identity=${identity}`); + const token = await response.text(); + return { identity, token }; } module.exports = getRoomCredentials; diff --git a/quickstart/public/index.css b/quickstart/public/index.css index 83db7f58..03a1ec07 100644 --- a/quickstart/public/index.css +++ b/quickstart/public/index.css @@ -1,120 +1,86 @@ -@import url(https://fonts.googleapis.com/css?family=Share+Tech+Mono); - -div#controls { - display: flex; - justify-content: center; - flex-direction: row; -} - -div#remote-media { - display: flex; - flex-direction: row; - justify-content: center; - height: 43%; - width: 100%; - background-color: #fff; - text-align: center; - margin: auto; -} - -div#remote-media video { - border: 1px solid #272726; - max-width: 80% !important; - background-repeat: no-repeat; - background-color: lightgrey !important; - background-image: url("https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg"); - background-position: 50%; +html { + height: 100%; } -div#controls div#room-controls, -div#controls div#preview div#log { - width: 16em; - margin: 0 1.5em; - text-align: center; +body { + height: 100%; } -div#controls div#preview button#button-preview { - display: flex; - justify-content: center; - align-items: center; +div.container-fluid { + height: 100%; } -div#controls div#preview button#button-preview img#button-preview-image { - padding-right: 1em; - color: white; +div#participants { + overflow-y: auto; } -div#controls p.instructions { - text-align: left; - margin-bottom: 1em; - font-size: 1.25em; - color: #777776; +div.participant { + background: center no-repeat url("data:image/svg+xml;utf8,"); + border: 1px solid gray; + display: inline-flex; + height: 90px; + margin: 10px 5px; + max-width: 160px; + overflow: hidden; } -div#controls div#preview div#local-media { - width: 270px; - height: 202px; - border: 1px solid #cececc; - box-sizing: border-box; - margin: 0 auto; - background-color: lightgrey !important; - background-image: url("https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg"); - background-position: 50%; - background-repeat: no-repeat; +div.participant > video { + width: 100%; } -div#controls div#preview div#local-media video { +div.participant.main { + height: inherit; + margin: 10px 0; max-width: 100%; - max-height: 100%; - border: none; + width: 100%; } -button#button-preview { - width: 270px; +div.participant.main > video { + height: 720px; } -div#controls div#log { - border: 1px solid #686865; +div.participant.active { + border: 1px solid crimson; + box-shadow: 0 0 5px crimson; } -div#controls div#room-controls { - display: flex; +div.participant.active.pinned { + border: 1px solid limegreen; + box-shadow: 0 0 5px limegreen; } -div#controls div#room-controls input { - width: 100%; - height: 2.5em; - padding: 0.5em; - text-align: center; +div.participant:hover { + cursor: pointer; } -div#controls div#room-controls > button#button-leave { - display: none; - text-align: center; - margin-top: 0; +div.participant::before { + background-color: black; + color: white !important; + content: attr(data-identity); + font-size: 10px; + padding: 0 5px; + position: absolute; + z-index: 1000; } -div#room-controls > button { - text-align: center; +div.participant.main::before { + font-size: 14px; + padding: 0 10px; } -div#log { - width: 25em; - height: 15em; - min-height: 100%; - max-height: 100%; - margin-top: 3.125em; - text-align: left; - padding: 1.5em; - overflow-y: scroll; +@media (max-width: 576px) { + div#participants { + overflow-x: auto; + white-space: nowrap; + } + + div.participant.main > video { + height: 180px; + } } -div#log p { - color: #686865; - font-family: "Share Tech Mono", "Courier New", Courier, fixed-width; - font-size: 1.25em; - line-height: 1.25em; - margin-left: 1em; - text-indent: -1.25em; - width: 90%; +@media (max-width: 768px) { + div.participant.main > video { + height: 270px; + } } diff --git a/quickstart/public/index.html b/quickstart/public/index.html index 05496705..75a28dd4 100644 --- a/quickstart/public/index.html +++ b/quickstart/public/index.html @@ -1,59 +1,122 @@ - + - Twilio Video Quickstart + Twilio Video QuickStart + - + -
-
-

Welcome to Twilio Video Quickstart

-

For more examples click here

+
-
-
-
-

Hello Beautiful

-
-
- + +
+
+
+
+
+ +
-
-

Room Name

- - - +
+ + + + -
- - + + diff --git a/quickstart/public/quickstart.png b/quickstart/public/quickstart.png index 7c5291daed6045105c8e76ec6712403339e1f57d..b1ac211cd9524868c8ad8aa641f92f653e562438 100644 GIT binary patch literal 151888 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

!o?KhTPDcyg~6^*j>&3vP~^j_CXJ_r=KW`(y0C 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

90dLAP`Q$rs+-lNiv}n1wR#PP;0Qqan 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

X|wA3+H#nwVT$&t~tDJo-uSxLO0ec4 zB@1Xx3?G;9d-0Y1F|ShseM|y3mP;;3__|h8o2k5+w@LNZ+vY8l&^V?^^lkCp*WVmJ z|EVv<%4JJ5yH0zLlKk4tFmGC1;j+9oowf2mfcvb*b?^vTtWBSh83RofK1bc(9(JpbpD&)T))p zd_US}1D9-JIWxvgCS$z8@;)T~NjYszGiY>bbV&1~}v1sukS%P&cm5!BWVN~vB zP)&14d#Lg*o?;QUILWZom#OI@LE+G9Wiq|&pL$x|16e_SQ1ohwZbCloy#c`~im7?R z#ZF&Kg!r3r*U$WdIDsIKoQ~2o6~GV`IOXM#c2?N(@Z<46zvHE{s!C3&Xdu7Xlph%8 z8KdkDYcW|KN|W+!<%+q|_ggj9Y$6`jDBh;)H%50GYH5|%LS98>^Va0RGjU+X71LTJ zc%~GeBmUIUk+A{o2g0q7f`p2P0z=Po+wOhw6PhI7%?i^t?b}C>Tost= zMqL{_c{m=p_knogvBzVcHg;Y#w>>tl)0P?Ym&B%xSI4@RuXqQ5F7?#mk1ZA?Dp!qmvpYliH(6>f@Sdo~tAi7w#Sp(cgFngIo=}5t9jMo;8d?R&DRaHHc2S7)Q6OAWm6?b>@V_G=rm9t|hvNnhtK$tgo+h>&f4R;^m) zJe^Jb1h(leaSoJEh&)l5qw9-8#Z)1eE-6E{XsM%HcPKLTH=asSK!N3%^3|zwd-%{{ zt7#owo!Y;$&%^pHoa4@h_N0Mw=A%cgy`745T5lx-BB&y2?BG6)b{&tCgF`WNV7Dx` z`}BMwMz!E-PFHU%oVPgI)FJHZ=+?r-13I>OJeF+G(DKTDQ7zi(nEI@Fy)i`J*A@Lb zw)FOE*2hEp?v^!>t&Sodd*TVn@3lJFv`u+T%OQDUR{|XKZ3~}}FAgIB207onq=V-; zD~Rc(Yx?o(xG1^8b1F;%o0lcA^g88AIL>&WF<_*Q?cdIZSj_0eq)UHEQtM&?TN#aUx};w7e&X?6)`b7 z6kGoCzr^SN=C9-R@Be6Q*l<yCt^l*sU{~wNT2^AO*$g zctzb!;etg?JyG@6S@q2@acfJL&Y+f{U`3_yOpeL2Ya?s3##eIrX=SbO7=^UIzu!Il z;`cP*v-B9(qNgRR*T(Ps#edgltgdX;`? z(F+^4w@9YubSI4h2ydw&m7VT1O3LZVTk(_nEDPx5-hJ`ZeRszlcYHhc?A#S6P7KB2 zBLi_Xh(jw$IvYKt1elP5>wkw>43 zE7z?+bu|q16V75_R`I)oBW2augKj;rkgBt@P5XE+kYXCKW7l9jsd=i4dsmD4>Km3% zSg=!OKTrs^=_&hwE3jsKjo(-eh)mz-BGoQcojc>+=wX5U!@#C>q$A9)z z9sS+1wtebfz8^oj=O5x)ZE(MI&$r`^fAEP|_lmd1vW=VL#jkpo=6`m@!w+tY;m5Yd z^{@QNXpw;ImsRcM*Iyl1UA-|L-0@@_lJ%@p)>(uBAGuNRlxOxBWZ2CDV6xR4S+{Bb zzp+t?3i&eyfjW+`)bv+LhGvaFz3{J>My!WRmuj(E(@mQL%~ko+X4P{aPzuDDtfCSh z`bqkrkxKE%&GJ(gl}t2FbwRQaifp12T#RXowg9A!`QBJ+F^4UnQVx?gKPL=@tknCa> zES8gxmA-t-tChN%M~Mr|1liaRAtaja-E7M~xjfcfs}0t(2j>aco>JSmrU zD4yC;fvHZ14ok^DxGR=zx>oItM(i|X*XGUlIqhpWy1N<8IjJ(l-rvxpoP$T@pj~BZ z^|GG0e(mzO|H-}a#1ngC{R*7|RUD)@e%j*Syk9aLXe@uTN%Uo_m?C6wC^Tb8>*|@| z_N`BD_dAy%)w#9WVE70BKYQ;19@ll=dB0PD0S1`Cpm%@-dl5y7lqjo9RHpQF7X^w5hj*G0g$g(;mvG)R!=)L#BVCMV% z&z(y`GG$X*h-R5X4rb=wbI&>V+_~@lpSS$qlf$-a=NIe`KKUuDY1w4QcCE9*>b2A; zu-dzS$}$xVw(sd3R)Vwq+J_#r#3uITmsoyfz<&0p>tPaaJgyEyav4H-glB(B+DBe(66n*m{hc{E-r^N(ycZTim&YQx7oWsiZd_+IxI#&mriu6tgrSEj#Ecs*q&khHM_?-%#(#>y z&D-%3=+Tw9Pmt(5}K{GEY*HxsfrOEe+W~Z<~!DIBF#uC7VHJ3Ti^T z8z^9e_{@ew(}3B4HPqHy_vo~Z3=R?;OSE})jg!p+z~?LgvP{~S!8%({mir)#=|bJ; z9qB--s%jqnA~32=yo5;?Km2`}b*`S>HeE|Vq5G_3c_!$K9~h9V)n)V_rF*vk=O#AesQ3I0qGW(AQ7!g68}Vrn|a106AFq` zz^Z%}LoT{jK0;CGSyH$X%;JQ;SeW_kUP&rP^ zOV3vjFG87QvpC8@20)TzpaT#RLVWRLVm2b%0ab6C+7obfV20xac6T2-Xdk=(8Y>Xk z1E8r+Fc!052^NYeba4Q~?zVPoJA9PvOG(FZ*|>a}MXD1PNDvv1yc00Zpp6UU*U>k= z{%#yn@8Z_dKV%F0j#_{3fOQgNHI5~#xuV+2*VR~cUA-lm8Z1l%eULUS3`G%9_*RIf zvk%|yWWI${5i5!W(1b3t*_jDTb@yACV=!bp(3Js91yMd^dPl&kVf<8yA;^%xgz?OZ zP7vTG|4NM!+c)ELv%_`|aJjK+U$!_v?|hD)j8)$!_{>%Kded^@u( z3lQ~PEC7p(+eYiYzqynfjya{#61+lG?KP2eeI}y>UU+<%azMv2F~@{d?U{5 ziUp=VNRg0sV2_o)??bb8)pCSWzDold#s_J3X4aa@684Mt{;UNtV{CuRodm7mSpWPF ztb2OF`tb?8_PXu(oYr~wFIP&0(nwkG={WCs7Oq-lMO~PqMo;npfK1(KKQZ{|hL=Fm zi{td}0n?;gf$E}*uT;+Fa_pBtkn_174q;NE1`%>2q~3VtE-faR3-F z94<{EE5xm-??i{S^^Dut$UMB59oE@)ioTGgEcREDC1`DPr6m%mJ#k%P{cS;lJ3|{u zuUxbx+Z*yTh$$F10hRHdVH<s%No+|qeyNAqgxQSU)rC2**y`v{a)QTpLj3*q4`fsYfnRF}=Fv8jpqP)4^T zoC0FY@C2=|UzFhWq_!I#Q{~UL_kHo-#r1rxroVsjK5f%AcxCZ5pfB4lEUZgI4w>Dd}-336Qj2V!x?!>Sai`oz~zOKDMc2?o(y=PC+JvW^{fP!)7 z0kJ^bqMZGOUWncxXntg*=oT^oqh55f7hP*oj=nVfFw$pJaF8Z4P-{$$*jNw16EnSnt+e7^EI@p7zOu6@ zxIh|QZ7afL*4x+TQjp5QT&vkRgn^v)-HKNOy~4}ldA!1>V(Cu*ho6s2*LJR@3p)b> zQCMjND4b?gAQT`WY@^GJu9Ma4VRqh+w}yOH1<8Vmp=>(HofCA$!r_A2pbO+f3HVzJ+L^f-Vt;HcV)mN#3lpxlBG zJ!b}yxdWXxI*4WzSA#sxa-Il&X+ui@%|Vz|oCyjr=6F_V%c3DGfYMJ{tMUMDMa2MS z&Jnl;=t_}V8mk%e;*zgO#%JeBv*s7ghgZ&g@J>Wu{hc~7zW)&T6xQb=H~^}PvZ%P$ zvd4R%*3AxWGY%z25H97jYk1Ld{zvttmx5{4x5lF9ivR48dxl;^V0cA5~);Hh`TQ4fT?mM5B3vuMAUWfkVu-%c8+Ik0@Fq!B6_JpyYYrCw*BjW zY7JXh;g>+Hk8oQU?Xpm!mi?^KouC-7@!lRAVdb9Qxzk>J@g=L;w$7RHwQ?=tIQ1`r zY5^-Bn2IXMncd)k(>D2X$(%GcHfAy00+g{s8dv$B2HcudV&cj!7wU$&vS&GW_LtfW z_>w{IDVb&gS4kGWN+&59==@2wQy?u1w$APDg@OP8KmbWZK~%m2%$!{E+yHd$9?g_A zX?zB^$ri^3+b7h0ad=&og8;8$!$3c4!}D{0p``fw{hO#QNH1 ztv3nf9hkGEt_-TFQo8|}b{*h`)@h$n$fpyHXE40XY!wXA3qdP9(hJC(wyx1WfKdRs zU2dbWmh>DsVZq^9w07t=hdZe2F$VOBS*5E71w+D?H8;V%2Z}49Z8WukB9Hb@u2-2b z+p4Ops;1gzCtq^Dm`PX%#>a-8!lJw^;xYwFPP;jirc%Sxq^K|Jvf>jJMhF4b*iebXdnJNAO(Y^K{HX~$ z+0l!DowUaEoFykZY=YElg~@;oztC!hl?fZ}?yzT`e8R5(h4&Y{D&kC7Z;x ztNoHW@p!Qn7f10Q&3Ayz!!tre0zxkK+*$`lvEVG&D2wc;_8+zO_AanZ$hrrIEIi(0 z8_{OIT4>k_2>~h4MD%GRI*%y z-*E{L!8}mSLu#5T2fqAgioQ#c;1?&Evgpi#Po0w{US0d|YD52Ym{V$aNBeS3`(91N zxqfNO)o~Y8?dZeVHWZC7WrqTkR8QS_;MC(Koy65)Y@pv7VUY2U)b&+y>6GbQr{u9Y zXy9CbwC7Hn%5y7|$#bc*6%40-ilPB)u8-MsJ70C!uI=2P+zgy+2Ci6ODwCE<0cHr5 zl0=-9BR4H8TM3mA=B2#62%s=#wbkXUpl9sZ$u7HkV#vDp9J0^+<|phw{?`At`dhc# zB!N+t#bLYeOyc zsRV_RjXHy>Y_|yYt%nZT*UsR#R6;ToQp!A^F~u zUmfb945@rqG%vTS*Q~aEdk$EBoZy*?#_Tu*odkd=oP+|Rf{`Y(1}KaQd+qT*`+iW!?xSdCPg^tE&T=@6L(s(ulm?sXX-}F# z`L3!T%+|PCr9%-bY_71IZ&_!Lo*J;p*=dVamf|Pdg&V?vZQH!w1;Prr`}c-GVHR_q z0fYMPgH$&l{+zuI*)Fv~UHk8Rbme6gy>Vx#xBh@ zeMrgS78`D?8gI4@y=B4Y*!Uza8_FarvV6?^)N$Zj&cCh>?>aC2)3{Z%iJyQ|kOY#> zH`hT{Dg^L3cI5h0^Q*gKa({9&a2_*o#R60Lc&dm#rK+L~AEG#9`MMzist8;O7S@5> zlYm6PUkxkl7xx~tw?aM~OXu4!{ii>+$%z5`+UGxKtF~@~u4Ju2gJVx=`-geyXcHle1)MUX7PhFPNh7wqmo`X6@Rr$25Xw6j69eII|%gZ9wvw_1p7MI~5}mO+Z2 z8XL0os#=RKueBiDngJ9HqNu_KMLUAidKb_p^50pVpt!Z+~F?B?g&?1_B`>?F#F z=81W0xNbEH0Hxkk<~W@{z>P`Ozw;@JYbnV6)rzBN15o?Lfx|_8EbdPlOBFW?o>6B( zE1!5y_!?bK?#%N=k)hv2m}j2$2}X-)AqJ~~isy^!KIZ=9X5hSL;EDyNzNuvvr~L$}LxV)nOYj7_ zH4U<6ZcpzflSUHYn82j<__Mq1!P^d!Evm^1NJCjzR%z>3vWi}{h1EZlCS50O3Tl(S z-Z49Us?B!p+d~FZ%>DRX9cb$XNank=rZI%`pve1UJOuE~Q53!dneOSK73drQG~_Y> zd8>2$fLP8d-?KEm0WDLJF7oTiBpIh9O|Il-V2Nj7@k4Nlo6a?NfoH%$7zd;f9efc0 zl~rbRY}Ab;N;=(X*hj)_FNp!(@aLRM;v4V27undv6e&8}tg5nt;26(OQQ%ZAP;w-i zLk7)2H-yk6(moD76Y>h#Ie}GZ44=~JnJH^TYdVja{9x-T8}ID1nT`%C2+Ual8TD3N zyWYyLxdFLbfP8bv>4#^?odhYN!&O#N2DfNQ!WIO6rsl04%vnh`z5wn{!FkwELIf z`aUa)$Ly<*K5lysAG0{tD)D;$xN=r53n-qgtzP{RoZaeulGc;j&a=R6d9{k#xkw?Q z<6iB4b&3wRnBdy;EOX{}YHLh#o0x-jpqt>@wM}ww(DM%9&AiA3O{b~0wN1sD^>ukT zR_7thA0c6UkXwWXtF09o3 z%#gp|MPlkU#s4&uAF$8-?H6tP)f>=Q=G(TbH(E44WE1`0#zc<^9%udWDYMqD4(l4| zwxZIwwYHzcF)3^#5JR7yEF#@$rG-0>lM{X1R;;YIcnhiDFwKh%K!PQN(3h}BI^zRI zbUse#5rpa-zF&oy^OFdXDDDR-9s&-SBE+2&x-SnFU)?L{vsUW4lAD3t47_{>7DEDo z3c(8}X`Gd2fdw}%Ol%VSP*%#NR_ea2(PoWA6HA^ce9%sgdyc8G|K*}T9-}4V%YNx81luBsh3i(CY4*Y7|UNJnXi z237+y&hCYPA22JOp;tVk zwQ7jpw5B3%pZ#wiw^hw$Hu(ID_Q+kIw#~o&Q`S@k4HBs~3kyX;PNEW1?q%-FN20X+(v_7aiz>UnO6W1PvCq4&`B{>#66A zqkiH976?M?!^)Q^PPj#e`1$hytEir-BTcB3Bv|oKyvz}ltIwKyox6JSUY_<{x>Nmr zJdLb(d?5@7kvtB_mCIrVJgxW}e=183OeN4Rg$J7Q(W@kr(`X1-InT4w)9P`s!_ovg zRn@Mta6WV=0K@vVciAvOOs5a*uxL@S%fPhj&>`rgW}O+!zf5;SA$8~KHKYlhw155j zS8Y@CRrY}oyxp1rsz1N0&z^ko1)Cb`V`W<4A{b*tnD!5eoOsMy8sST&Xcg=6mwHq! z(^FGuBubqLU+Gdot!OPEe3tM)N_4V1PITykJ%kiqJsexV}d80TG!*M0ZtH#C}OJD(#OOdyL2CxXT zfKp`opBshpjs2ZihNU(^BEG5OxdYtcH8ph%j}~+^LG2*)Ew|d1 zt5-pM-(w;8qdo1V0;7boRI&^8tSQ(5ApXdW$=&N7GIjOX$~!Mra^=hiZ$k0_Te%WD=V`#YnPGMbke4u+hgSf1ywdRS{0eA_8x3QNdY4(=jeB; z78e&ET>9G#>h*x)SqoSMMY`+?S)(UbX3o;MVs%r`31yy0OQ^qHm z^5tsASX|JR>nnstR@O%Kn=6;Y40ykqH~vhP9GJfGLtdI5d>~Vdzfg!3U12EBig3)< zZ+)MQkBr+RU-}EX>H0gZiwM&j?%8H5iP(SY$!~IxD)%$-ocKm1@HHI zWd$*N>ATO^?4CXL-cNtX?s?ZkR=Tpmth>h|Lung6ebOT3DFhlKffeZlnu%e6Y6!m4 zruq_0^U~77!3?{V_#ytrz-r1hE-+tFRfT=Ig zmu7x)t>k9FzejR2ap}*1K*;RWu#3)ifCc~|v+Nu|OTjB8$T9&_>C=21;eZgwRiGt| zkrgS-!dRfhV>AK8A#^_J2uObRt#7vL z?z`8n`SahgnpO1(T2|%Uuus2q#P0c*Z&nfTlCY1E}yJ6zGWXJ&m7y9@^AWqS_NNEJFEF>o2Ob(HT-Hllo~@ z9P>EARPo7>MJmYfv}L6gu3Zg1AKGm6Lx3w#-w#eEQ7Id^y9%y>~6RhL?N1%YIz?Xm_*`bIbn4L=6bU6X5n>Si)-CDEu z9;+IKt_rFx=hEQhxZk^E`uUEBxmERSS*$VD^KXZ6dc+8p4oZ#ZM8 zPeNgWMskoYPwKy6Kx6--l4IHko(W4jerEvVD>_ z;0IikJQ^ec5djZferenW$0ywDRC~9zm9^U%ct`8&t1OCEaUSqkKpM~DqPP`c3a+Rn zdlDx9Y67DAS%eP^$tOPF)~r}=)y<6-C7oypzx-e|tMnk2p@YY5&y&wuXaAI~BRBoZ zh9-oziRk zB5RW#h4d?~R|oDw7EKgc*Rwk;v38Y(R*xogUHpWD=d zRw@q?q*fJSoYIWC{~XD7pe$d}SUd=@Bj=SVp) ztlf-*fME_?JnY=(+zkBK8CY^)svFS#=znb2Kj{kY7Df}QsKGFrN>Y8Y>Mtxo1h%ECetM}M>cVbZOQv!V{&X?OnohlzSB=5FSu7SG*6jOhAe zO#hGD1MmNwZN0h9c0Bb><|Rry^id>Uzlfb|8@KW9eyeRNC0*WfC`kw&kd_tA#R7h$ z;|PqR;%3X_1r=&xgp+wh*N0>P(t7%SxSm&(xuAm9|+gsiy5>SRDmNf z5acN#i~4ml!`q_b036@XiY5QkkAFVC-rG)BNd0=0P+ouHyw=<}@XNcuFGL2cd43CB zeM63BD=gnp+%Fuo>1&Xi5UPyqT{*suKMUs%PRH$i*yK4*ebvkIzLs=d2^=C|zL`>(NY ze&bQwa_t?E?Vqr_Zo9`SE2}L;lxxefjhMU&ZSUS4wt35S){YPABz%7<1mpPptmPF| z5F#0}IC+Ol$|`K{zNf7yJa5H`61)4}+X1bRNTXR*erRvad_jIQ7iA~@b-5@9mm5@W z1}>5r2m|(1W|JOZ@rRWMf^d1%*`Sah-A^9C5U%mQtFDe0Mbzlzto{4u}{0zIC~xCD9ssdhVdoV22V z(&cO|g;MH~Z$4@V_U^P80jO(NZLpi(_pojJ!22ywRt_-4OgzzM=|ekh?)#6M#TzUi zGxE|Dk8&y_+P(?EDgL+NAcX%-5c9_y866s4^pFt<`tu8*O#;;A$$`=p|2_MaH#dK0 zzq)6F|5f{z`Z?(q7-CFdC;|@(LedxUkIEfGefq^)WboYM8XiC0W4CQt;e0`*1$Dp_ z?Wr4|JH&fX`o94;cJ_;4U-jiCpt|xeogz>-tON$ql+u!hfVam5f-?Tu<=!uc8Ca^j z`jVTAGdF55W}RKbR@vBKO)EALp*UfoV>p4Pt;^jwD-Q}{kG-M7F)M&gY!L-gZ`iW*`L^l-~LYP>N#quiEi7p<^9&UY=hl)``gfp zBB;aMysXGaditHIWY4Z0c6jem0PvVq)`{>Rvwfo2D#{WzO*WNz0-m-)KrPCSG?A<& zP_Sry8^RY#ZUecJn}OU6oJ*lgFd5apr6-LG$5TZ+EUKTrs;=(AUFisijO5yHXS0BYSuU&fc7s49hM=dF;}tO z(?Ij#WnfeDyI3mwbFF$Ri@!S%=xsjpSNj)Vqcb}eeOTOvKD(FpXXjXcuuenDqC>z{ z!Lxo}dLJRli%L1HFOGUj{-T_;YljbNCdlt1t-vPv6LY-Vrh};G7A``c9H;hD)L9Uq zhl^YDwIF9<{=eQUqi%BL%AA2K7MO+{NpwD@Ez)~p3Xc?)TAU!FIH0j0gwN^dkiCE7 zN1=Y2a*pBu@{j)ujcURMN!_*(PTIzn8!-1zSY^3Z(q@1BNB`S?@6(^O+EvT#=<#Fr z$A9>^z5U&{+TKG)Y~_aQppSaYnrfhA>G~_~)gWAW{X~4u;cnk&VF^2en;v-JZX3m) zOVP1~IRCF(*Fvg4$gZWSRYnu?MGy9no)k^#(8Pi@kOD495EsN9jNl5t{Sl10lAD3t z4E*RB5U_AX2sB${`fzl5mN&)YaH9?n_&@Znx_CI*Z+O9hsp{*=T#KCF+|DQxfSy z@xPB?QpdFJqQljyPDA&;&gXT>03E9~_(T6h@K^?O{sJ!r3>Ao;5B8LNo)4~M7z2Ij z5T_FKwtBl3&FP}eKlY>M<6PyH+g-1VsxEMx8%y^5)y$bXd=X8QTsX8_+HgH09Oz`9 z0OY{%u+^93!80lr1hk*bfeVTf*yNyKkSB}YS%f(4Xm*hLEKur-+N8cTvx?0S7!|nH zeC82Er@nI~Hv_MA29_L{I-zq3{2G-BL+jxX6d(y`OD0L#^vrjDfJU^E8#RKzXAyx> zC#TFF#NYoXJ3c*P z_XA3&X2xl+1QYxLTSvgap`Fjz=Id_Z@bBi=a?Fpc>)%vAveHGcGl;)Z$kq@Y-)LiVvv%P430u{) z+*(^ZtQ5|^A$*@!HVxaZ=f1}+KV+M?-4EgNRd(CG4@frJi!VH76Vo%c8o)U*I%@MH z1J-lXGTZPd`|ZZ-uZ2pb zifI2B!Ag0yyk&*0UAxu^zrmpa8{)NZ&wd-kXK8qB%EqT~5BT>gxJgT~hDGez9lPw! zci#==N&&6|;{<7q(h~)tP+nDM$B!Mej$V0q{Ww8<5ls3UI0Rqdzkyxkn$FEYZU(Y5 zAQ|N3kiKWNaKkK=<#r_g(~x$i0e#YPo~@bvEdNF7)GPzY66ks4w8fj3Sph+v>Cp-N zJ5!cd&SD$+msywuT;U@*L+)nzfI5vGAPJxpz@PiJb=NEy?Gk`S<=A1Wb_OpZOd=|iaWtONj;4j;lMy%q%D(_hs>Y3fu9xufk zfEryrk>V>DNg0{s@}T2u$oxcJoVkfO^ZzWaAssu}FJIGKxh!VjLMbb*SYTRMRDwv_ z&CRtPBIP-5& zivX|#HU@1}3Hj{Pkny+X5AuE1iV_iPs0YM$p0?ll^vA7&lz#(#Z3L2Twu6WF+wSKc z=T;s@IIKVmd$VoZyc!y*7}2spi2kQB@3#@~G-{hRUuzrJuD6c1Q^@3b$Di8X-r-iK zF;?yg{9aQjr2&+f$d%j-EZq$F55T2sG1t=L;kJy7EC(NdkuCVk#{nD8;M@ z4O$GqmjTeo#P3>G1t41hD^vF=>-+u=t5~_l^5Hi%{OPgd6Ie8E3%z5Ofj2cMZcJ%Q z75pS%L^ON`g#k{W;7`C36jTv{ca$w^{Ln5dXs)+N-FoCY0ZI-!X=ICwM*WI{1u8Rv zb`&k5%=rR&bFCq!NNNt( zGUoz;l@C0N@@3xjCqLC($<4rPnSm=1n0hx!5Tg8ol3Oq}j9Y%J!uIdmVUIrXl1;V# zyKT7nJ(xY18gBH1&pczX#tIwnIANi9la((gb?Hoz#aOKuV9HU!8gF@k(s~5q;ocGJ zn4GXkZw~--!s_7pi&w|3d1bBr#pnJA!u~EB93HoKK6JM;pKQBkvnL#AXA*$?^mF^| z?ze2SZ+-JS_Vq_!v|I1E$G-N}FWd1GC#($8>U#M6cJ3ti^okanfu3Vz1dyDs%ujAT z?#6Q^{<&0KNG_>sqbE?VT$VH7v|s`xuP8sf*}@S&}p6%Ww!6dotB1qAO+Z7kdLbnmN*Z*8|7`xH<=XRsrZ@UXZ4B9-mPGP6bls zu~3kfRB37PK6U#=A0}R0We!t2b7X*;r?ZkomDR1Mjylej%VGxf`@In53IwK_*Z{=O z12#Lh!@4^|w(X|XZe_f(s@NX>)K{&Qpr=lJhyp~yPp)mU0anu2-FBCCLqmQeoPDGfm9UBALFtsX+EO@CF`0C9_gWE|Q3mkmIehql9Y5Yd+kJNX zt=p{%Ey13>hb&3-DJ^AEAw-jGi3F zn6~mTr%dtykguteC>P=vbCLETVVf(t8OY7R`OUz&?iWQ-N0C)i___Z$^Q!={tY>*VG zQ!LzTU`%O@mbgrO3k07QT(!n96%Nm^DteGp;}ZnpxgmFc14@G3^I~Noce% z?GFuE&$qs7Ap&4`@7sqpEa7PToOYLET*=BG@6D4%-e-@`bMbcdBbew+_5zh&3tlts z`ywRA+?}~r4qR$Z_3{pKz*OI};8f?5LUX+UkPH!c=IUx1s1p!!)|mrVOJc=N**k%9 zLs9uowaG~2Ba9-KS60K#b<|-T!k-|D95Q3675dS;($K2i0B!?$w6nmq5vZ4zRi^)` z9*v)hxsscK*DwQD95B@lrBYeH%Hk^?u&Vl)?LTzX5}1QN_NiaDBl}*&L?5v-faVL& z?6S5a-S)BH_+=|DF1G*v+aCp#*4nylTdf2Ry?nr_z~|I>nH9)2fK{}FaySyRn))W% zoOUxilBZOXh1Z&p!y#JBqTx|sN&Suv0$!Z5nU3GqJ3Myf#olS4MziTe{;(&NuQXUnd;)z-b` ztrlIo(!ve(Sf(WR7Rxq((fp(pLdIW%mUJa1_4Rk&Whar52cLS{zV@Xr+k*=aS@ra! zMH_1^Sj1rS1WrA;eAh7ok?wxf_p@BbFB^FHcA3H#60lf?6wt236Zt=A<)mpK^aLhZ*qQL*D3fx#EDS zKcV7nd+5F!?ey_IP({t!FMjNUcB=K5l~mwB&sy@|zVcOz#uB#uo@TrC&im}MfB4_s zq3`|B2T1`MBWS4~U>bG+b#$QL3i6|*sw3qdUjMVHBtAT|&_7{f!sP$8FMJ78N7OcL zyBl8AaeLrBA9BYvHrK&+l5cJ8r!0?jZYx%AgouBe^*#12dv3=LTfVFo!u=up&@X<_ zZnzoxDSWVohiC1n?>%NGPn`h#*4grvt5CGc79^2!<(3?XTKa3Rhf}Ux9y8$k`N<5c zGLKeGC5toMXG9{J!k25fbYCe-egS}_Hk46Fzl(zWkgaHL0F;)XodcMF^V&PQ;eQ^t zc}&MjQ5i$in9l+q5>UV#KBv&|r@Gs10wAii&y(YmcI9{lio?Zh)r+dzM>MY{_u zO6pRj6ZMK(;^+)61_oGmKCkF_VNF35Yeb#8G|+Qs`IJN;EEfaLcZw9KDX6ISXCf8@ za0O5b2=uvo!y8t%ea+>$Ww4-NhBo~o-%?joL!!L$J`*s`?$VK};Y|cb={TACeSj)W zsXrd|FEA<7yXplsR)DB~?bVh$o(mnq?V*M=u?O}ZuokGg!W^r%+;Mys@Ra*OkgnyM%Kf+g*dBChdiU6DBXFVxLH>_!aR71$9$(KS?2i*}q(*qNqvgjeXn1Embk0n+UC z@SbUEOMajpX!MU!bK38~t2-_Ws<|#@i6Tpa)2GRHB|p@8qURMrAI5zlil#chfb3jO ztL{bOhj_?&fl%Ify)>l`lhaQGU|Jxz2(m#bjLhk!brEyrvX}vHY4paQ%93kL zbrbl4?u{S*>+c~y8nc~G{tFtg-T9u|Z2+IBqpht@Zpg{~_|c= zWQqXKe0<#dN1%721UY_;pqDQEL}eb%LyJ~kg?Sv!sS*7hC@6voifDU4pny+FJZ|Hd z{lEUiZu`AYe8lRJqo`07P7YFm=4pZD3?_URWdu!Nnz2mr zK1Do16o!=$n$&Tg3!|_LOcBf_sy=awih&>x@_3!Ez~RfwD^T#uce)YC4_8NJ1lrG4 zvQ0P>J~dqr`ooYN0Ohj_j?#0Mf2!eKCxD=U=^0J94)8i~$4Mi~F=|IBQlFy$$db|+ z%8*eg4bd92U74Hmq(!DEfXW*OJ)z~z0OV)Mj3uz@qWKxC0Iy;r9AI_F_?me75ZGp$ zy3Li`47`>ZSaM)`DS%Q1UntrZMAjFSgg-l|GvY{PrtXPgB2&i2NP4)b@;IT{Ad2a zS`T;Hx4!;O`@;Xick2DOScHDV1PAQh`=Vn7sHm)QT&PY^xHHQA$<07+268iS?im1I z03tl}6NSU_>J4k`rF};oD3$DX;Dtl=u2(~K8QFo#03sQyDlfJsd^=_C?&%-0zM*j< zw*^?xsBx^Q>L>9V9RjSzVljO00j~tvAQ;g~!Ziv=okNov!X%%-#2+HP=ZD^Thi$)h z6M!;gqqCDXaO{XpcJ;%}+-)5Lz4p>~p0aNIIqO#x+Q#j-+Ve1q-$JE;<9xuC{6htm09Tlv;6H_uinfz501R~X z*Z_g1>3I)$iTY{`xjn_XPD&HX`OOpflfo51=caQO#yevs*L?B)l|}VjK_kg5*~A=- zEdbjB{8oXHt_=Y~ua4J-zM;ExePofO2Qq2OwWlWanHJQ%z@xO?zIi>n(>qiZy#%c$&=LEth#_?0U`pxm;%8+`sarKf5Idrb|D>rEXETCIW?2b}EH|DI4gXz%OT; zO_PdlZ)+#Kc^T_C-3EW@qb%ZwZDs`Kv1uU>dKO|r(rJ)07SpX&u=C+OwE3Zf( zAK{0_e4mH5Rob%@T2{4Fg$q)O$p8EAf57rME>2)+XIG~^zjL2G`_g{vo`IOXAYjW$ z(R}a6KWeL%FSDlgE!Mbpl|_is4@45kJ5f~WYUhdXGifcny)(w0M*(o9MV zDJ`#xo>jc~;@^vUcN$amPfXZGe_kFKJDI< zwi)I^NfG7=27{=JLv((OjSDQQC>QKR5R`(#ym5JBN^)F2><7w}CH-i?`$4$AH5Tb! zy(caoawRtd=Q#sc9x%<`CHV+9l^1tDZ-pgqwjn^?1c62;dx(N3J?UHD^KPqeTyB5; z7k^_LHm@i9(-3JymtpQ%u-oAtUAbYsz3|jab_&7w{0q<7`1l~{M!$k@)u7#)x(gbq zsNHtYUG`9M!v6hRUt^`sDxTZ)jyvzQuMnZ%H%K(<)SwMd^rB%Hvsz5Y5|$SbrPuij!w2%!%hdIZ6fvP2oYedl?> zbJcP)aNaYJ`%#_uR9z|+rLACeR$G7l^%iMb0M9@$zXmUUQ8Y+c=bmcidL!k8VnL)+-a;m+KRz{OGt zfG#fjE?>(aTHV<>K=R0>)io91yIIWf%rXB&eWm@HKe48|z#%@nw$vOQdBBqo0;M{V z>mz{b_vb*Xz$XAw?iemjsM=6{)#I9{bq)C}8ZTeVD*#-C1ujuqh_-mdD$rufM>R$C zeLlRgjyg-2Ss<7;1jyYvWzSQfbsm?5bQ&d3P!;6~%-EP8fm#jUsefKREo{w|OLYcx z-(84u#Q{@)TG!V^>~kOgB`ayHviba&J+ZIPzCWC_wSdps+9um@&5icV6W_K~8`r{9 zT4)W;E3K@&(&DTb2NC2VZmuBL{Qx|rC51&U(CGs|`(fL==LLJ>+uyOGc%`jgb2S9} zb$0l~Aq0;E;iOeJ*4sPZ{d4x*Q{Q(t^D$fr%8B0p-q-%xZoTzRy8}PfLx=VQlt=8? z^KhJ!l5fw>{dWD$_qd>eRqHm`sne(I#V3DYhGeQ|N1gAEFD>gwr7t2tq-TbeM_dysHJfJ6WYKq9}+I?VdT z@ghLzgpH6&bPO%%=?Q zKb)#iNA&~Pz`IskUgoF)H4Y6$(pJDuAkhVQEifjAnwp@DP(op4jf6c1uDvJY{1z^YVdF{jfKuSkxGyNh{y}+jfp#DbJyhh@cG_D8p zSl-UoVV@>Tcu{W*SYJJ8f95D$azj>CRbk!jT~@xK*rR#kymX$v->3tm*+V>L1hF#+ zeR9fZVcj`1ubLQ{_BAI#SPe98EePl~S1ywo&~M>Fl(WD73(?y}(1&hLO>NVPxP9Q4 z9<-U(UMp;Aus3fTCdzZn{(0Y^-E+-)J9_jmPX43T)Ku?AoyUzffg`*e!aF-#Ex^jW zqPoV~+u8{jm~c1pOE2uOu8vdI+TLk{pZhG4t6S~9x4+ApmaRk>lYSKU0r{(jNOk(A zTkrOO=9*2mfA@1XyZJ5ljcVFO(3v{ATXrJtN79Q@AOe=;(Kv zH2H=Kg!o!Gja(Wx(L)uvfEWQAY3c+oq;-RYUfMJEOVd|g8n<#H;F}x7{h1<2X&j)} zMF45JRh7kU44|686duDpAVXfK2pRIm0I}gBD2AXl8V4+v#fzPvj?Of`USWXJ8IrpzZS_>+xSafn-9>No+Py> zEr`mm3pqN(xVq5zjzL?cXF@MltZG0T$jR0!%N8mSg^W>4ohXBUW zXaQPOXr)4!zC9%8+Hv;{TE{SE|Kv=b^>mHdC`<(%gMIdv+inC5<~ypa26$Fu0DD0< zfl4tVPOrhReJ>ZR{8*DGN`M%R|}Vz;A>5`fl% z!fC+WTzb*=;-TGhw8PfXPa)3}fm{XmDiA76+E))+`r1;i2HUf^6eKF69qj zm6leYUzT)>vE)i_2F_;&mK>P6AEVIU#aeX#FuWAGm;(^nkK-&qw(o$|5CrgvH?Oou z4)4ye0-DmR27i%B58d@(~pjgSOE_I-}vTUm&&vr+7;d7sfAfPy#FP@ z>$pYp(+Hz>3*h_o?MJ?C@BP?25jX`_QeI~hWNA8d^pLIJc&+m-jYSi7?e;fgx{5*l z)JAaBVWR&>ZHBzV$M${4-unf0~XZ?Wf}d)k@Y zJRx?mPWlBH*G2r3y8vgO>moM;=QRU!fWec1QuJI-(2k%|iNX3~NH$bf=y5U_zTQT_8M5772z(1Hqt8kw0yK@|{) z#TCJ+ETeI_sPUOZYnzAMoHw)Y=3{zlJq|w~QIJWZH-pxIe`&RK z_mE^E04Zl;D_LQJ4BIW0Yd(p`TFp)#v54fB! zm?IVRD8O*W0n#?y7iJK+<7gziFqx0zYdSTCSszdsM5C#6o6-`_vOR=`SF>}R@lBG! z%4a>1Z>j*>{QR_a^y$^ZMC4f`{QNWz}pw!Jj-+kXvfkqW+C!JOmjj2rQx(E)u zQdfSgx+Z4}?Fo^xQP)}kH$wKnx@DEt1prsjT1eM8dp*-3U0bzDziNuMQur8$Ux9Yk{LNOK%WOn9SUa-$N(jv9*|!}fY>Uf(aM|Rq2^80$XB^3#B!WEsUP*%g0m3$(~v}}{rp{dl( z-$d|HcXyYK^qnHDUYWHdTkPp4%o<4-T2<8q?`YKdfL7Iz{}~NLdwVO|f&~{8H95A; zqGaFrPrv`CfZstlQ(v%0zWNBlZQj~X9Kcl|VLd%3?ZET@FN0A&UvOmKDd17P+3aD-@NPr_i*(m8rSFdVu z$Mygor?D7Slp(h;85hM$U@Zw?shY4-wvD63EJlr*S6o1@`(jA>F%=_shp`-m3X3gK zS7-CMOpUa)IWuwwEoRZcu$4D7x{OjmTnYw<#{iBno(vBXkTqp(r-{smJ9K6`P2!U- zGWP*!0bTM(O=2aRMvDr(0$2maQ)o6Ba}*OdwsvQ>R;al^wKRj(l?`^oo9={S>mUhI zj=AiC(P$JcG+JgTwx-DnI59Z}+sd%hlqwt4ETFfnxSDKNC@Km^te)fs!SoCY1*~&` zJk6uDo$^0bicb}3P^HoI3$V`tMag(wKLJCT)ZIJZRa77SDd5t(y1HySZXSPGJs;#! zp<{LFq)qh$oZ`4LD1u(R+J(4Nq*C7T@-=lJGi#;~0zM1TbZY^U#@ry?JqOG z1JAUhUkTk>fE)(7lAD3oIs;1%O!XtasEa>5q9XGeTI_Fs`8O<7*KG5wDEEvbB$r)n zwNRDF52}D@d)-~7<<-{GvdLupsK|75QEQYIZ zzf-_b0mt`4!IuKiO_TOhevG|vG^^doi5aUVowEq-3(*h?C3W}pxr8AlnAjUhEgC2% zaO&7GqW(+B5+zR5Spuo>`Z(~}qgAi3kk7oEJn;Z5~K{?Ebx3An{~wTJO%0%8N0c0~0WfSV=&UJOQp zii%oGB2Y~A_|fcR_RxZ+?_H|{cfO|o{wKP`~kUM6TWklzrITh#> zJ(eEnuAb^L3Ku{HxRpPwwBulIemDGK`5>1EH@qyU7HwCq?8dhNHm|e+YuIh_%cNh(#2>=_d=wfD1}Hm2%U-^6leqvBcwY{w_0g) zoE0r5FNE;AH5=?t|MbrY3h1%l{MC0|@Ttson45vz3|t~J;9(o#7q3VT@<}g$lVqNN zPfca1BiTO#Y^dQYMm@uBwvBVV2~$aH8f76qLg3K={`yHk%t-N!i;OSEY#xU%GXUV5 zfk!otZ|L;A_%{JInCDN=bwM{ZZHWQ0=b`CTdeCavPvq-AgXUCnQyKOY96CwRRB!)) zor2n`w|@vAS!DT&+abKiofR zYt}at%mgSFK;@q_mzviZg17`a(|nEsdIf%ma5b3a`H=#+H&7~A0!}x*EHaJFD{R-(-?db*fE!^}#kOYU{jU&a7viUr>*I2tfyJ7e%l%w0_w)0wrJ~0D z;=u?1n^MR_TLhR&#A8kqCJ-cG;-ca`9O3}b*&}}Vlj@6VN`9NgC8gHWPMT#R*o};L z3ACmYM0Af&50GGlXn7uT@kG*&b#xO+Uyd*7yoHG#@8}=10!-TSan)iy7;JaizR4-b z@c~H!rvgI706B3?r->J+Z&;0=XP+JK+~_LnbT!=xAr zie9o@by+F%rNF5hZ`lfq%Y>ac(FcnFavxt+f%JiaemGL=ohnmW-nFaaR*P2n;6d0C zq~T0Ot+Qj&BFm!yaePii*93qS@RJr-*U4c~{c)g=cR-&O4!W-5Yt?pv23OnL?LANU z9A+G&C^8xv8Xa?jvNs8&3pnZ@2fOnriAQZ14d)bqKL+ot=&l589etQIpfcG5-aX1G z9#qVW3xGn~D^`I8f`S#?Mr&@oUfbERvn^LH{TcAD=^K3}S1d4324&)`6eWI~OTeW(Poq`(b_|X$iK#dHKTcRpvrw;A2K_XLczw<8cZKzCe z%pVx+vQfZkNeuqKiW+NLwZ@L`|AB>~n10e|UkS2G)UH9`=UaEjNqgb>XYHEJ8z6@6 zvEzH5vfujTd*A5a%0=D&g}Pxb>Pg5AE;j?OG6PPl#y&+{t2pq$yI_fmzNY{xDhZqXN%v0wrD%;15Bl1ErH*31a8t!f|<&pN*X2oryK!9MU)Tl zOq7>e7z+8**m#B*5zQ>C+Bi0=J0XpMeUHbg2X&B>}qPGyTw8 zuC-gXu1D^h9VhC3Mbj!9@9wdI6db6S@@29XziTP1E3*K&CSnO<0PgClGL9!H3YIOI z_LX=*rtZ#8;+)(nlUY;gbzX1IPkj8qW zIH2r(%>B*Hz22YRfl{+voq}Nn77S z#HUuDm{c-k?8vb4Rg`9kh|CNt!aDp)OEwUNdHhLx;Rk=~Mp{xsm_@` zqL`~H%WEv%G;95R`P4&nGoIM6~`W0%01> z=}O!QikvAXQMBCoyv~i0-K4P4N(<*~j+Ca)Kl8lZix$^+cGrL|hWXYQe3O*_?k4LE z`g5U73~$izFUn>w#C5wUPy8|*)ESwO1q`n|MOlVs0YFvIG8Mut>fgVwT=03h*1e+_ z@AL33rfS*{|EG!oV`K9&G?fR?c+NQ4r|ydh5K0pXuB=L(`0Lk^FhoTA^63}gL_#`O z0#POjY3W@+S*}&XP#Vb$A0bJJwvE6|T2ohRPe1pJC1ig_(^vxkbRkS7DRG-3a|_Vu zjR1<}Iv}_gWPD0?5(E^A{;9VICYGuK``AYwv^C4>$;6kib`%UZZ(MEPAuaSk`=m7h zpnGvKP#GotX=$R$X&|FT32SPu$8Dk8zWe>>5$6DU>dXLo2M2nrsr@MrjVm|Ac5(+Xd zFru`q9x!EB_Btz8LM{l(cBOQu<)pjr=|YQ*-CYjuYPZ`6FqmCIrV^c%PkWyyi*8G*J4 znCJ(4(G>4)L|EdpbZ9rk`m3xAvrlz-i+${-L-xmC{0dVKI5nB!f4Bs!65&#Y|DOSfP5njou1Kfx!bh~okkR2aN+xU?l{A`9;C3|_Df4IfhzvaZyPR2=qK>+?# z31!N~0w(-%=-T`FpI`r(=8pVH%)l8i^ONX2*XM-SE451k$_BFmJ~QoJ#UOjkeLK!(U6#UN0KWQot^eR@8|? zOH}~SBIPLnRHk+Deul*zP5M%X31;%FU}-d<-93YL?WWcCjyGRtn^rG#+^whE2so`R zvgWEr`_&`Y+ZRWO5$N1)4PgK!(!75d%BPi^(JWWmT2e%hPY&A?KlmQBRVlQ&5O>nA zw6wLgO=wPIfZ`D=E2)4lbsE=&5?muRR}&03NdQ<6;|UTJRSAD99I|L8^Pw+H%WTfS zu)wB(UJ%VC=NHHz=L6b@HaU~esZfWfPKq3^Kt{Id*&}KzT|>{buE)_Vb3V#5uY~lc zc_=}g7FKh?^;P@sUZ-9;L1#Ny56p5c3P|&+--4$RRRlhY720Pyy)p4YKFRtCI8e+m z<=5(dG8#SgavD?S_%bSs7o%_FX)QT0^#O@iw{m{h58mAbZ{%6LmbMv>^7x8X|+`NE>)jPeO$8IFe+9kw1UlK6bm}*H!)OXMJ=fVC7Zy zq!~Qr1uVF>{e3^#cRhq;wh~)GuHf4EQ2M@6K$@yZlQfyUqkYoe@2J06@uy zFrz>hfTiTRG6{`A`aC+RJnhnT;-@%DD$mhL%)w-FlK&z8mjwXFL89P8fVUVON<%vi zIFpP}y*y0&;t?H(1}Yy5Rrg>&lF=yw-MfNp6qzrn8{zl}Pp*h8S&TdkkP{bY7#SW# zQ!10Rd_rdlo>D$~0b9o|z$q*!cnXd13?Mp;M)z%ZY_)r?-(>6lfA-!3FtYnB`+Y`J zG^5^oUum_{_P*ZYvQ8Y^X?8*gaFamb;{(E_guuNJKKQ=e5FnI52$vQ}gCwLGCvl3q zy zJGiN-(J_eKU0s-`2>-|7J_`#H?HSN3sypz<# z(qkgX7YwLcES1xla!mJUg}+fb3<)U9kFf8w@`>xRgIv8qb$`$Jd=VDcBo}r~>^0yb zrQGuYUhU7FJ+A>{-di{s@4U^cz%^CiB?qQgpWQS>t5&UYY}t3f*46L+nBVimRa;-@ zK%o1fx$=|4&z4^QV_w?-->0{Bm;EAorES&K)vg6+>v}m~2UmZ2zS7SBMqba$dA)Ar zy4=WX=U1HD(x4*!3&Ys8D8MBGShQgsE(i1Kjaa7ax1;7|L`k>ob z9C*Y&4mQKk&d*G!tg2dfY+j>wG@Z+r)B(b>G)zuv3~}kk*Y1=*4*(t=XLfusnx@SCp1bFR4CUBKT&<->tEKv!zW>Qt%VOrL;97?BtRo1dU|`DCe}2lM>t9 z%nKj9aLgAzum{=podc&o|B?UNAYnn5&`DV{Tv zuG=C}NA_FJbeQ(L&KN%1e1J8K0OrRwG^GXskT5WEH7h3%jV=HlmJ{9-@N1x(+XwWl z_GZtMT%_wpt1n0$?EEum{ileiie=1j-m}b!Az6U)nFmZ4p`q>X?R9nh?tiRJZ*?vq zGV#F4l-jw@`MJmja;x%&01@7)7lILr$lyl|ZV?SudH!2j*L zKi~^5;S?aktz;vmrlj&F|mkUg(G56*R)-R{rylO0XF*`D9t zz(HY{NMm|UPGw)SDM_wh%yE)&AIxhybl%cbrjQVs{?QK@G(b0qw4kl7Qag8UQ(IHL zssYd0oOcKSd-?nYl`m~n4Q_m8Gv1kYzYmRNbaYm+L1YL#PZH|YKL=9?Q1j)Kl8n-! zLwlcLavyoCFtR@MwC0Y#I*G|b_>Inu!2~Kg&bI(#n(0058oAgkK;~kScDz-Y2WK+b%H(Et17Iw5 zMi|C3P?!$;9~+{*A7@M}nWiDe!2+V)g}ri(9gs9;oa>xNY*cO*nXe2&C}4`#A~FMe ze!GU2h_GOE>6PuO9thL+xHb)f%IMb zD|UG|=EA(cCpYGG`#!6_+PSK(C_~eUBOM@WD8j%*5ZAT=$v8Sliw0U;M9XO3vpzTg zDGfF-{fzeL!np~(;}_npGp9~z)0Q2osav8`r!K0gra^@}i!>LTC8zn6CNK!`1a2h; zLc;*S41kSk60KeDhwbF(jPV3e;z)|Kt0^aKbY}nn<)>wA-F~;(4LffOw5pTldS^jd ztk-~^=~8XlkZDPSX!Wh>>?io%0`M)9dSZA|O-m|u*InCH3m9L%qydIB-v#%ZDKpCG z&?Vb9sc_{|rNVG~jPCR?PBk?-r=jyhND45w@;symswXREdEc#idIb#abmlatJp<+I1C;1*L6IJ3m0Z z>(S(!dCEpuXW@2_WM%=%0j{h!9z!z=c#paFX~1afo0^(LTbrkBYHRu0vAJ1SFK1$- z#Hgt^Fp8U_}N{?M9`xwvyoleX1bli_X0Jy0!4_ zHDQAZ?56d*y(9KmyG907c?t2J>k1$>w$wnXw|Nz~mI`>l^jfOr?dw(GRaAki?YLLb zDc{7W>Y#(>Vb~^TX~}Y?rUx|hP5{)E%Lqy%!lrS%TQrg1X*&%h(jEpOh60(eqMcg4 zt{ta+9s@o`G}1eu%U$Qyb?&74FQ0_@jFIt~Pk4MK<{moqvlD4R1CX@#ueJ3JC`F?% zi#$L6b;dtu1IlpLGYWGK0Amew+z?5#VdF zPiA%kv!Tp{QRK~{{qDYhr&hNvQ86r_we9oBAf29`K`yX}E;di$+GUEgH@XNupcITH z6PlPnHPbb&#F3QpVN0jSr|&%TGJw*OLd{~Lnqk!H;$qsw#M81_ ztpWBXKLBVZ5@=r8maW{%cd|5zEMQrExq>jjHkLXYw$$SON-HYdd1N3xC@QT4=%)3Y zHeh9Db_SpgLrN{peB`hm*Tz7)-CksHb7AbWIp-JnzC~)q7?Wz?+jP9PUjffIKS!HA zP@+Y^`z(N78L+)Vk4n2gGqX3_FlVe~wZG3X4 z=GJ58sH>l)0J;O?>3A(3;%#09uBieZFukU7c{{&SE8u~sSL&7V*7ZuLfPo6z{6roF zLbTcegVvrmx45;yr-so)^0lli(no0bo7;O9lhB;yZ8G4a5Zz&CZ@+%!t?vOCTGnQ^ z9{9rN)p7ou3SkaMM@BI(&8xDiNYe}qi5b9kBb71e_)G%{Am#f8D$_hI(M|@a<`T*- z!eCTULX6a`rehp=uS*9hp+fT)?E3@lrV+QBdYnHjO%@DpPkVPofKVg$$+sJgOD z6_|Ef(aSbr;;AM0KAU(XWBPJ&$J_Lx2wKTJMwVtZ)heT=)TtJHFr}%fDWyhd(616E zKNMHNB01DfcbTD%U{p^Hp4Ui6m*!!ct4ga`3vz_{NzzbYXPvwLDgv`wvr+?ud{k7@ zr1ti8u%5XZAiRDDx!Fz4Ejn}doSK`~=C!AFVBA~@122|)H# zG_Jm}7ryO%;8oz7D&PUrYbuww^DDLj_M6+=UeXG9@`#tToIlosnQqaxq2X>aoMS2| zDuO8u0y-?S84yVOHa!I?g;8nD0iJBw%siWUPY&nkBrR^`qvd2K{PY0vbf?^7>Y7R2 zfK_z4qi8wjG1!!sR0IAZ%&#Y-Q^*4VGMQvz8c<4u8Z$bfqvX4@u&kN1;d5a$b1)H= z@tihcC<@zWV?JF5DZtb+NrM2U1wff|?gNy<q?z{rS;yc80O@{!btW|l8DI}&D-KAlX2MlPv|qi) zA5kc)L?K=erRBvM85vL|K;Kjq2D=RiTZs%9+fuHwq3Lty#s>yI21|SK@}L%T%H3K` zYT<1+M+NNlbUii?m|l-6d(ZK*SK#{mxV-GA;XQ#@ftR=fX;6?wi#?Frt|LeGyW?kc zg&2>SuO-dxZaR?#x(^sYLg#4uQ)5r*LX(XNyI4@lh);`N%GAgI;bSm><>(*rhX+g0 zWSZWQHZY7`7Omnu7i$#MaAZJpXbj89|D21?x^ba6iU3zvfD@~rtBk%8a0-)}6%N2? zqICtJE;3#;9uI3Cw|dgpQy5H(g$e)^4ITv;iCI#}ym`h%7xTWhtV|8a2TBTIg8`|g zk<4J-nAZVp7`p&# zw+%x9>=OQ;M7H1(YhZr+`w2@0U{+Sa;Gz+o!w9tiI5og&Mx&S+v5+;`Faj5Df92J| zw*iH;)B%A8{A_;%vgXz|=e(cmXCEgpMU@npu6WQfsbChq8I)sDBpE*23YUjx_-0gmRJxh6_$eG%YhGv6~Y;8c`nsjjvO=eJEZ z8g?2(JF9dI66_&4q-ABLfHGRYZV&pk&R*`au(F#Wj_?SslOq(*` z2u5T-w4XdzAYtcV(gN$4C#e<8GGX>@<>j0qW3m~YnhVow;4d5VlL5&j=aZe4>-JAi zTEeXllN|@Ro4qK-wKewA&-2AB$-ow4(uo<^VroA_TiuLPE*SxkUP*>)ePbi?2x)kz zPZ!Uf)9_%gn})c&wN-@;!{~<(5rdV-v3wezoKXlS+5oU6CpcgVAYB0Xq6*--?b>lL zfbzi5j830NmOzbdqUp|!oUaA6dYe~)Yp8$+Os}C>-mb6Q3V0gRSMIg(R`%npK>CKw zLhJwTuOHC8_ttCe#??Bw|C#ipIG{)O<6xLrL3tmzd%Kd z*fi#D76Z}(<{&d|r2x*kjrGc@t5OIC*2f#P9=oL(Kj)BQ%?=$J`v<7?@z`WnxBRsY z^7j`gYpPq_OEdLvmk;TiXAf$}rq_b}LTE0>ncUP3tDFrGw=@9LZDzyLrY8dy6;{IN zMgWM!ULj}5A>t{9j@AIAjcP5(F9iS2I&dG#%+@5Ms>1+n4vx8Nf$zl`Wy<*xx^Fca z8X8thbDbI+8};n7&$`J>CY`YC)fx1^1`?yxG#t*MHbM3ufZgPHoZf7bqyPh-!%Wd4 z5h2cSgzAb?wX`gCwLg4luP$A@-~gn_9fte+l&EV`+sZfVTt>FKI(DhHxrPaj3?!iD zwwdeR5vBGq*T}*LtgglY&&L*ZzN3#)b1w4ps=;xe>T!+N z(E28H(?t{+yXTBjWOka7$tL?16`@7U%)kH?gN3WXVLqeR-FvIrSNu=yJFs87pL<>> z9Y|eNRdq8ApN$B`Tx1{-bYp*f7|X5&qN73ypGNy9RJb&((t;uwKXaJJue8gJOJv#; zY;K5Hr2qhKVtAAQd>CD(Fx6I9(9$nZCK}bE`dVdL#1R@(pUo{bpbDVo1NmSop*oc! zpOgNwd=Xeua!yl#+SDlR_13kpvxN#j_K?O%b9x|tS^vD}VXY`_P!2$Fcz77L*J7}s z0!_~eYih0hoa`#}n3eAQGs8u^pJPmPv07S}YGQm;i5M&>V^uIuNhZTlhjT%r~O6KhH73hO6>BzBT96teA20X*s zR@X1l#toa@bf`#fiEg>$XH{5QtB#(()VT}OYHX;0Xr@)qYsbK@UBe7o`{|(xL{#xI zy3{+WNu(F^^GR*q)P}aTfeUPj1U$goyb4@H1w3GS4aM?y^(x?1z^lLwSpk6HqAn@4 zuvDeEuq)eZ0T|WRZ3e{P+lFPc>2b!0PBX85cx0S5{~p@Pc`$LA?tLVZ!xSWAA2A|X zJQIM_^q&@)WSUOP5`FI3=at8J(w6oWYG1t(Q1;(-;@Clb>YqO3%2r%biG#o2pdGIK zbav?iYs(Gfsl=D7=pgR+thmZyLnEOA_ZT0B8hf+0b`VC@Oj-c|s+qHL0GDM%8&#pv z%;Yhg2!=R1u-&uUQ7(B(8~8``nsp zefvL-=nuPgX?;zrHg3OFhYlVhD|AW|6Js!fmg5NvYGx$1EL`g~wT&>69RTnKHMiz4 z>)x+?!0hPwxN-oEHPy9Rv0{auermVwxZ@7BFK^d{ix+Y0uh!1nU#qe4F^)a%q!dd4 zpG#ZY9r$c+iL0Thgzrs)g){kj8`Gky9a}mN*i3MvU@UPKjOXa^xXO_%RKkiz0IpL+ zQ9b=~UnbsCdcfkr1r&X7F$6(p5 z&F^hq1+Jk29x%OzVtKp1aw~Av4g1Pn;f=R4Yo~hK%~1h!Vz*WLXaQ#`CzBv|m_h># zrUf7cHZClo8^Q}8|`_6l`VciDp+Vu^6@pJzS01T)Q+AV+4kI@_^6sFII zQL2cU@}=P_hTEe@g^4XP;0e>13CN1T>Y2;jwzSLJoc8Cg`34070fKMbOfYkM^p*p%LI-$TY1<-FesDDnTz=Sdz=&fisK< z&4hifCz6ZWqVHV2VZDC(r|)3^K@?+HB`y10Ky{WLePo~F=Mw06OSNoy3#?~8#|&s} zcm@D&xuFaPXlp|Ai>v{rGAk3~RL>CmAqSY8&`@75`qW7c4G!q!2~1hkbDA55f`VLU zdMam4hmIW9$mj^`sYO#d08^Sv3|O(A+jB_2@a~_}$zvzg+chjg3ot}YYn&7Vf3Q%i zH||jXg+qW~BmSrbg}w`zT1Q+;+GI3TKIk1-JOmc zy42AF(?@IDfE}RKz^4PCsY&%*I`Vz$VSq8Ik+EWcZ<*F@T+Y*w{dw`M9{bkURT3`I zn|}7~TC;vD`cJ>U^yz<8l@Egun#dR?r4UA%5G?EjW$iCW?&-|93zYYXj=dNz*lqzQ2LAS`9tlv?KS%N$NoZRFYN_v)snNy zock1V23ps2t=(2z--NbyN~_mwL|3^=Rkg6aIetLkq?Up5%F1AK!x;eE7;E(_mocV& zeN$>|DaS3(b)kG^u$=t^Lr5a30FD)~(8v#%z%|Qcs=lryEHlrGX7qtCe%>7?8pWUn zP@av>15D!%d=?gjU2W_d=fa>?Rh2t-b%Jv`bNT`iVfkumY$Bqn2X;596)W5I@lSkC z?|A$DfZu$bII$a$T}|6R3Tqxf77*3!^a9K$#<%+Q%3j3aHhPqJusrI;>xT;xUkDHl zH6&!TE@5Hynzb;tq#tl?)0A|&M&7?(1+Jw69x%O@YI*y56?ipOz{90C&DAy#dg3CP zmdhqJ$qakTx{QM?l7LT(WU|cA03gpagmY6&4VpKjk)KRTay|h%U{eP+-3=h0+kf`* zaG({d%Ws$agu9IR|2C5m#9Lr2@tTD@($R6ei z_0L7ay0oPgb5x%?JNvZtmUXbbW~{2x?RUOTk3aGhCM?r+7}x~tPFre&X<+jdNB5dT zv{-3Hof6zATt4zeWf!z_9TwCvFs5GCy1;8_3sb=w8|qxNm7TP`Hm(kK_@1JBpL!Me zp%w6e=?^WB_stun0`^PL+g{oVcr5fwThAZo(afY`+tBa?CZ0*6n+jkZVHs(w2Vg6G zgviekFSI}g<|1w2s44U5XVaS z%#6i(AG@GuPW9;5Kl10=xOy8J$xY}n&*{rwcu2S1w!*pR`*5vSF->X_CbO}5sXL#A z1;9IP`ZwRdO{-R|0p#O`pFtyw9HJmEqUWF8@61ZGOtgwq(rg{|4L1$d`umUki9Ya=zf(6E ztH)2BRYPMb*Pf|Ytkb~0h5k>IahgG${j~7s(YV$%?{LEtPCWl6I-7l?_%+*DFsrL6Kouw^72`Gm2FZ-77fvt@6vfj%Owm;wL-LNn_uRR)ZW6=h$( zZrV}$`MiOs?QiOLp`=s_h80jMrdl2N#8>rOfAgSLZLU>CA@23I)#~UzuN`-+(abd3 zO<3kBK$;)$J2-JxdrzFvs+OfhJJrEvjsWWF^zcKEFm{#6RDiOI$`U|mO5ghClbFha zFpp?t(eXwYM9|4tQyV)vKTkRUYnmLJ(23KhG}to=^`nh+1wc zlvNrmZ84ZygGRjls^+{st0rD&>O&pz{z)~>r#4K+(OoKvj5QzOcn2&oz~(E_dK7>~)L zJzogxmR+1LUs)x#cOG8|189t>F>#J1&7 zZmC@sPMbji=urJhz+D!sX&=u)J(8B`YG9Oea_2(CmSu!;eWn17e!gy-v7rfM43>_N z2*p)E8o)gAfU7bIV?hUCdnahQzwR}+(Y{}%Pks8I^u{;t)EseBM=)uvTvqRNqxO5$ zZZOPHWtpm_mDOlsOSlI>hCohfFqDmFEKBvv?^es12?7qLRawNCRv2P4*g3-)@({cB z24NhKxjtCN)x!Jd=BR)NOmB|s_^Lk(kKKD2UIO-4(c5m03S0pPHW4Wropv0eX%Z6& z7*iNIi+)PMmKjT$c3h_)U=jcWMHUtxV_(NSUSmZJq!``jM<;4ij1C=oT(e`dsw1m2 zfh+uLW0y3E+2dh$_>%rU1moB--zs zabliqI+dju%p=pB3|9sKZZ@9NMy47dHT`9RV+Z)e7)?8# z<-;1sI1Mn2RFpe_=T43NGhkjLj48E51&j2G5r1Vm+aPHJ`2}Q`W=>IG8{vww0cO@f zaLN+!secquJU$)QmRq*M0MF>e{;%q_JMVNxs3^xWb~6Z|G$!4^X^h8aGrg+5zEL60 zC4)$)czhmX6gM>kb3|ZOY16j5Ra;f4RD4(yBWE0woxw4DHl~zC+rNHT)@!;fcCy~~ zs;__tOkedcft#ZM9%K44Tt|=Tco~ZN<2~de8qydeG;OMq%~S`u;J&9JOIzFks(~Ym zO|nTvae!-vW9rh-!v6iQyd;tcFzx3w6aDAe%X^&r+d}BWbv63;!5%gAUDT?EWsI|g zjcjU@e?^6o-Opivw{-$;iAi$pd5l$#A^lIK{O*|Hm%r7zwRZqM zOBvO<#DTIHAZ!W%mv+qul}nV>0t~4i?P~^U01=F0#x_Uin7%~&+O(Xf80}e*53@UJ ztgRm)%3OLF&PW*M89-{G_;W;A&CM|$6mV%~E;o(JZU(q12*Sk1Xzyn;A*#2hUnQk5 zmDIx0F&qPFLk<|Bln-hPA^RKCdez2QbGDg}Z0;{_!gC;ws<)(-&7KZ!fO`ueu6c zFQNOZuCPDO69yPs__~3II1`s3vpUB0V_S&}Nb?8Z(^s(cIls|k_O^+qD`d61I*WZlwp6OHZA=YS%0dc{|!99MT zrF=ISHIRB0sQ!RkocQPao;jj;(76mS3lpt5@lp-}(k1FB9i|SW|@18?ZBg zmqUs`FhICJ?5L#zm@7RS{p$h%ev&}{qJkWNe2{iLAQnSVlE-9|!#W3RT2#bjCX2M< zIqe1@FP}+I$R#F5$6;Wp2~4E1p9b7b4iGcVFCewNqLRzQO#;BzCO#RnX)=ol+S=mg z5+bIC0lb!}%J2h#u;rH;+iBxUQ}fh-@O=ZV>(|v#b8ZSkK3%wQf_0R;wf6USE4M1* zuCW16=uU$AN1UcKfR1&X$yGLFAqto-BpqRv2rknc&tbT-tWus4X~Cj$N>(U2H_BQF z{7(_nh2zRii2|T~_%Bz$`+M?VF5xTZ0O^aF z$uyP?uk{-?VR9P4rQQpOByoz# zMRDfZ8zVYO%YMzub+CoB=%>g%<-a6s;-W=r;bOPvvk6F5gyx$gy}Z0a{rv;3HDAb- zrJAZ*b@g<*W!dDal`B^|;65;y002M$NklDWh1T-jN9s;jG2TU)yWj@`X|IN%FZ?HJsEDtSJ;R_4w(AZ(I=k&zK67s!U~-FE8^ zjSLO4&IH$cS~c};fKg->M^34jkp39y00x$`0O13~V^yZC?t zMh!ei0nK^2xjeRrwGmep&R2+7uDRH-{L>c!vj`F>f69z$?ppB9+q??A$O?GC^hFlR z+s&(hR{^gAH*5s}6F!v!bV6DnAU={+K7^ zc(-7{In!+GkSibp~g0RYC z{g-w3>+aSqTW{6ZzWP;koKa^SGmzN4q*+;*rA&#C9U;C7t!i~moon@H!;*G)b;G^} z)z-d3!+=MVTNKf9pW?X+iPH)JWTybbg@vVzFkQ)nscem-f9>rXQh#3`+R^~Wt8w~W zO8}V0&~)m=De6pu0c#9r!swz|ZCTpNzJ6!Os;#ev`3-8MYn*)5JPmTZ_O>=RMQh)l z18Qy>bh_C|!uh)a%Tv5x!2D!wd_S)jlOXiKlxA~Y#U({(Yx@DCg`6Xxe}0l-3Kf8H z(h<1c>6?Wga6P;)dlmRT74U%R_bH0^r5mpT{JFaE7X1oev9V^}c5_s~3`_yl%8xeE z0@_nBkP{OV3M4S`%meJ`sVB(i^kpQJ8R2ulk+q(aAg>gyW8*hNjQ?EVa|2G_|FvPD z6Ky3x&A^|z&y86$U}B%!8Vu-K%Xk5{HpKD61mDlkPwB|9U8;+=sjj?A9q}0*SQgW3 zFV89SE4ag-8kee43fxJkJUYpAG?WG6e+PiN^`y`R*z?#W`(9jZUt=?KkTIGAWOsh* zV;|SrE!(td<7>2M?=w1h@Q~K6U+385^znecwC&B^UQtsG%eYiMy*-+mi8?@-n;V9C zC1MNhX-0}^NSvwx$cBbS#)GnMOhUGh6l+S7y;{@Q0N9IAS2G!9F<*WV?PtH*RxDSm zfkptU<(g7`1ul0=53{rNn^+iv&@T(7^g9x%P(Un<@SxC(d}%6lPr75Kpw032oDWG^l!{wJ?k zeVtuI03|dEE0c$W>lcW5vcd6nxh_}LggtuKOLg!PA8Vv!sG6FYDN;4&8qLEsW`01}hoR7e4zJqz@orV4UYXI?eexY63et(m$)a z-mpV;4NbK4(S&lGimFPLli&HkHy>7g2`nh*odaWYY^wGy2(bA>M zTr0ohQm2}ls)&TjCQv^`(0?(&u?SFVS+wY2bD2#=fI%{`fdK)RkY$i6fZlWchSg4* z@W7Y8j```FezL8F5wiVUlL1v!lxf+rHg#O;AeXgDYu0Uc#<=O(Zv)0FY4a}thHDfB zkQ>a5&Q0-rfN`$1jf)KhG6B6+fah$L*EJ{u3CPSOZGSRq=S{zS^}>Aj#qd7%D)2)p z-~rPgQXKDFH%3S6fOq=96RxTm{*?v2b(FQj$c<1#AE9lmzM2G>&V z?(G671pupA%!l8`G@=nb^~B>^0kdWS?%#O$5v|#@lQ!_YhI@N8Jlf~9my2W*g@QQ3 zagrPQG)6Kyha|w+-l5P8oHB>r@6RME2>=O*$zqDrJS}dEk18UR-H%ptcm(52c0fmu zol+$La4D_nbMrHLzVj*N!rs*|&1uzzYSrD1$`I7$pcR!}h_qJ|ohA#Mu9dd&tEkq>IEc;vbImG}IT8kaTzy5{ti2Od>beX-Mw z8XM~Ln&>*ixa8mR);IFBIO}1fEf2N2u9%j39ZWF^thCjax3@D1Y6<60JQN0|wd>dF z%<&V{DwloBsH=}jPBQ@c8RpnGA}>g3Yz(6m8L586pJt58LCd8Hr%oPKU;mg|THD+-u;JkW z7<5|okz7?(7Q48xEZEme=yL5QCW*4qiOQps&KQ+ztqXw8bKxbV>05B42%&*dxUoe`nnOxxBC`kE%cw zYI^$))!egDH9OWTr>WBIW0Q=0$Of2&s@}hTP`lp$apm5#Uctpo=V~7vpVzsLlgJQa zDyb^g<&J|YZ`iEO8#k+v@cL-{0!oK43~3d5%wlcav>BGUn9qy!j(5IW|NeJX->yi&%s7M78QKrjJq`XO5QA+)5%d;4+U_x40#DNV`{z#)&3jf~X1e5Q1f zTRJ_Pf;IJN`RaN-`}|?r`h%L8om5BXC0CD1Zcef=c6Blm^$kCHpT;pX9XxcLF#S5^ z73RaBR;X{VmupanyFaFyS{PYks**?+La@~%<8!p}!_M>+Ci*MRfQFLN3Ke0%TC^Nf zZayODO*5EKm6>m{j_*h=+ycCRybAn?3V6WuM-<5W_Ki^i*S@jdD5P^2I(W=h zw4>y4GW92zbyhp?d%Zd?oYv8OPt!6FX%tN*szU`ZG-VS{WZFyv#TIWAWlB*nvw${s z5kPQOi*tR7<0#L;G?N5urK0niMVpx<7u2@lkzU8Z#iB7~W3;JhU#`oC(4a<&wJ;b3 zoY^yFs2H}i4R9MJlIe1GNO{byAN#_SI`D-r!vn6?mM{J{HQawYK*^A-H2uJH>i^Jg z9lpCnd8q{jb27EGbtUJy8P@b!efR?(QFeYvcfa8sYG_)f?%o0IKYT#>)$6qN*6k`N zDO6cyCADinXF7#$bCLFbi$4Fg1A1=v^8nh*$O4+2E8em{fBGG7!$?NUp88zsIHfne z`7Xd?kT@=g+qo1ur1M(8v7Jm)3*-;$?Ah~Ly9%I6{R+x*v>3;z7E95_Z_uNU>?d@8 znwte^(huGVJSxQwf`!1t)d5t#!Y@VFk}xd5PuqEqY} z9Ai#;6y}UM@T25-2J?0D_$feDE>T5;PG>nf8FTLP% zsvZy4g6gYl0EuPl92`;+Or5C&2y4>V;o*ksswP2lQ-&zo$l`+(a_+qi<(-6Mzy%4 zOdS`8$(AJyzq~*P_U&g>YMIWTyP(?IYRpIpCo3=wXbx=c>653qrX-YBT|D23E5BBs`SgQY z)n4VsnHItn$K$i)x-un-YgUA=*TVYau&8F73o|wr)v1*OKpH{5U`DurJ1;k;)IGEJ zk5_>gR{;;0zPLJhd%eOdaJ6Om3SZ_8wLF_R<83!~1=0p3zeZ`{|J@({gKmFQ3t64h zfF@e*xT$M#n-|zPOIXF}(II{Dv!7H+aUt&VX&nQcnfYlRMzg28mlnNf|Msb%IIQup z3Bb%8Mjf0sfRWss2wKK$nAdD&ph-0&kWIt1NTn2pp!ty*n8FmGXqi^8-{OF21}*k+ zCLGNJu*?t@!zDgAIPO5r-u(~5(%whZQ5L$zMJ;bx0Wf_+V@X)mD=$mJuk^a2X5q_% z%?+xts9LpQg6!iq&5AW`Ajas!4=Wcfr2nZ?nhwQuXr4fN*t|K~&*gRHwB@jWFvh7D7tWrA^`2F8 zbCbGYY#(~)+gh`>4UiuJjOMcTUVt#UrZCf^BmJDw3awaki_V}a?L{(>15^9QfBnaL z@`-Q4hKKdRKlm%X^WFDx{wZzV(58{$Za`=WHyZ(@8c0CU-dZ|7NGMLhk zN&Rgz2Gx=ocyVxb{6JNU;P;qPSDc&RpX)_dc);`~c(Hh=Kn3_k>TNG^1-z2J#0C8^ z9*&!gXzE*pt_NsAGlCMJGB>%P!+jTsL!zxb9aDZbF-912&f!G2@tI;uP=Hpt0h=tq z)C}$GNKR6@OgqXBXP|o=LI=vIO@OF5@-s2}ST1KYwxEL2Qp`j709@v`15yjJXLR!P z8Q9SQfMPXqMQhPH0)Qu@fUHu0S+-*vQ@F?nhdVIn6zceaGup6qm5S=xR5n(w`wDRJ z2NnUUL@oh#g7Zl&E38s=PBGb;JO@Ude2iE@3_}ohU?Uv%l_5p{uZK)7tNuoxjtuv! zxV8i>q_xx&E+T4dY(!lE@7kI&*v~2@R}m~fQK{a}4mCEma-2m?bM9aG?3eT>zxxkb zv7=Etwr>XXb?K3ZzX^EGBwlGAJ#2-lYirQyHtA~*KBTw&#M@LuoYFVG_K@y>%Ujg8 ztX)q&`6R6Iof^b=^ytHnYDN1}=cdog&BhEy%o8^UAN+qlOr~jrhR0_Br5Cvw=+sls zp+9Y{b**$?DyDsV_G;_4TUf&&*KSJB@_8s|V`LXK0!ZF+%SOWQOJHS7b>>31Gqs%s z41eSkA4Muqq|;~qL+39I=ubZU2ZZxilLpYGryqY>)AQpv^BXikKI#HD0SU})MSx(N zJT-zrEx`3Iud0SErG^GRxhZkJdwy3KIbbF;1GO2Pi;Y}O;1sij25-ALD&WOM-5l4^ zJB#a80e&fZn^ys^0zbF{89p*6$+4WCodQh&LSYWGnA&4Nq67ev1gIIz$Ybh|jmXSE zBWPKq`MLRSpE!V%<}Bc8IK3aEDouA9LQk5*$2sgbOIvyE>Xmx!-S_C3-OunG6E1}Q z&@-Ra_Juc-OP|n@BWG}MmpP}ov2Dhz6=EjJ!r5;O>xhlPr1d;Bcm`0kRUsmw#zvyL zyZu&Gz($4uzc!L{iZ*yaG7 z=wW$BrU2pq=MGrL^A|2*#3}-O%{zT)A%Je4c6|G)^_Y@INfB7k$N%Z0>ggZW`a6*q zBonmd4*+I6HAGfu4ovCMgWbC04|V`xXI#p`#PF0p`jL<6&G)|=oyWTkHH$B(WMLLR7rb&baWCBmrz}8xhgA|`UHDiS{%_+PwxTj2US-^>H(){ zBT$>0TQHmD(VCys`b}tmF(lat)#E3Qp=k}kn675sBWPz=!`k|^YUO!XzqaLDC`={> zv|~DPzE`*3(xxRuSDij_9uOMPk)y}-w)@_!=XdW0n2&K?12Cgy+?<2}$b*h$uS8>8 zThrveW|_9U035?@OsPvkK!9p7TR|RUVpId{7O&-PUInhD0v=;}E!Fb&^(x?1z^lLw zT7kt>uLC?uXf8kP)+7MS;+R8n0JQs+Iw!(iq-8pdh{rGCxXVZ#>GdCjLs_uo#|X|L?!b` z1s46vOa@h)Q?3b|^)cAqY`&L-AvM-9h#Nc!Qx~%7RkYR@XE95$#-0$s6YZ--H)S$k zeiW@~9+REQii-fW3&<0Y9KW1|91-gS&oYWYRInE8ANDTC>DKC3M1pKp$qP zQow9f>$WtJUVz4PW)}AGGC*?zK$)w3=uxMpCN&JZeEj$^<>!U9|L7qV7vwk)ZlhuQ z2YaYph?aQ{6QIo4go1W4&N&sThOb9qtdmG2=3`NJt%lI~TCn|-Pr-1qzW2TFw^UqK ztdjCF;-uyQh$&kB7}$=VrQXZc(pash9(h_9E?!Wiph)M=oKk&RgneqY@A-W?wEwtU z^SZSw0OwKt+3)|Ae&<8K&PY*AR9tg=jm&V~4Gs0Gsj204!q5R;J5e;NIk^9=b8oGC z+bq5+#_K6a1lY_RX%EOW>}JQ?yb4@P1=4oKYk7pXuU7%D0-51#v~ANm-FC;VfTgg@8Z{FOWF8LtfCH~K z5h^n~PxVbLYHDf2q*MpvSx$Sm)B%?``bZmbx@`GM72#xGx_kwo&p^t&jvPMfK+C4B zw>YDZ0T~~xYf*VAE^%7+<#kM^YE=%#nw6_IDa8{H_jR$-( zGYc@cz(~vy_0WDE!Fe8IGL^;qyJP@Vjydczi#g{^a7M+jr3Rikc^vu6oceKr=a>Uz z&Ddk3QB6;bW4fBxA=cX4(*>@A@uMR%!%%=2F7xs6AwHhKd^E$TPbM4z&=+thJ@W7q zXhi=5li3hvu`{rggIdzmfOa(xpt(q$gY37U+VUbanV7=>kTwQ&4jr%6VRVdaRsd{4 zkr|c(wBm`RDy>vQeUn;QtFg-kg_w@e1dqVDwk>bdx4!bMp4s&T>}j0f{W`5*zf=`v zrN|v}xM?WR;1HRoT=Om>tDbvwA3D{)h21@Xd;%~IYyRvrPwN;U+oo7mGBDuZKJyvf z@e^yAM%9kP9zqn>)TVdU)z^`~y40lyB(1*GJc_o}K&u&@5(_av@f_#02+PhiEIy7> zqZIqvq%UvtDsU|o@PO&HRLk4ftH7(M0=_FO$gAj-Z`xDMfWe9cZgpVIK$eY(92#f- zJEJHqw{iguVF%9j5B$aF^|p7sTXO)dS+u4WxR13SphP?n?e)Uq5?H!~s;X;r`)lr{ z9bOK|&A|{=0ca`(h?W9YTZyO2R3+x3Iv6%zMo`&&PyU!LUO0g(|1b5ehaN;@%3OEG zT;}EzjRe~K(?9#P{^4J~fOMb$Fc>08-eRV50FCo{?1`t<6U5D)=hs4%k*I(sH}Vu< zl*KH}5_FISIK^jiyN`~IJ8feIE$-YLMuid!_1Tk8Y2U(_Dp~*F$hbCb*r0~SCLH;_ z4sgx^NX^)hL5jeL1b= z3~LcAZp=~>c=8rn_bp4Bd27O$R-`Rkwvr;Sf|h!n-tx{n^?UDomv%q*G$1j>+85Q_ zS`3gZ0i0U?>8yJDM!3eM+PZUtDoP?6?&0PD(-WhcaNwUKG{2Xi|2E>T&g=ZihxCT~ z-=K9{S8CacmFyRR49#%b+e{J{Vzlq$$T4EH=w~=*1Fj|o85rm$hjs|FToizc!~*6y z4nU1WFuz&8l(*d!6|kR?>#=#j^mBAZ>c(%rEw-G zl@=Az9-l>DdP&u!64Wu>s)F}zFwFwM{H!Yn1{cRa1$N_F z(NbELQwp}w{*YS6r;Pv&VGLXJr<7lu2h%*Sv!_o1wsVPe$|ilFly-g|F;2xCH=%){ z37qi+(gW}cS^Hf`9xABSG})n17};v3E)@{4pCCn`fUthcoGqiiTX)>527u~z-oNXY z-mg!6;&U!3AroeJWE^QjUZxtE{$vbqe@`##SWs16BQ5_bfaEOa0{CY;x$mIvyJrWI ziUs}i-+WrDHrx*ryP9iGK>zY~rhY}7;VDA4>KqfEjA6IhSQ&&?Q~?j{-#k|vE>OvtxVkP~ z*5$J!dc(c zFLvozd`#mdKBr^k%MO&WMn5%S@Y;r(eO@BM{)6oIlnyJ^_tuD zhP!uaa>lRoU2{yIno@JiN`2^qzYj~=tcU;OX{}qkoY4Iij+@f|`O9zBU3YFKM|Ki@ zZzl1fAwc1re)i{o5yrDcU;5JL(A4^fg_=P!(Sx=%4%1lxy9-zZMBDVL;u0I3Weo6~ zbKW<$E!B=4cWB?f-N+w$wPsx#GKmc8n*x-kjcF#~NFsl*RE7x$K9M_2P5?|NoqTj+ z#PVFzHJXO)HCA~D8AB$?4`EpAIHP6Ln@1j8DZ~x?&U5A8u$RtT_>ZFkUXJNYU-j$N zwt4AS?j7+v6-a{tGt*3Uen~st{!99`_rD!y{e){ZTMSZSK109!>+hw#@6&V7@6n2; z8t1UjBK|1|(lY1$&%O3F1nJKzpJ_iuCDpn>1kntP*%I$%AR{r=f6=>2c}BX#1S&rcKpNM~IFfH8=>o_+@1g#x{oUQ^$`2B4a#{Wv4~} zsiY79CPBX(pU9}$X$(EACnw9De_!|4^hbaE56a8S*B8I?ZH-M1tBZ`-|M5q^sST@^ zL$;b+VphNWOMju`hd-%%-}H-G*4D1WM^5O(nGS8grp!r^oknBdvhZT+ymWAAb^O{Sy85@4ZjI{l53> z??3vl+J5WpL`+=-jK)-5#SKMUqrQIb92#I_KO@{stOL9bJA+m!bvn5JdF^`q-_*GD zR=~K=f&3r<*T$RXWaVfKU_C_4myM&Ho?o2)v<$& ztA$aG!SIFvwC7HpS7K+)cV3R(M>li@uGilL&y{~ezf8Qvdlh*3Dsa8-j$ghr@Q!@7 z0xlbr?``)S4$>A8ca^!`71F9w-H%sz+RZ1rWWb!bNcpoJwcfk7=n zi@9p$Dm{VDvwNghmo9e09A@dUhaXkXV=|9mF1=56{^8Z`RQ&{}ThA^Hr#2IW{}+Gt3H{%{b&Fne=k5B?2R;VNIIC)E_osjQ z^Qx+RKaopgu#=lKGl5}>?9(Q4PxE0;Tb9<^NpLd|R$uRk)1zAc=dsQ~-TB%b7^LP2 z(@$$tL&QO4hZgnpllzE+TCO##SLl$bHv^~~QW&fN z>>P?P{}O`#N4fRLPzjpiILvSo3BvKy9okRr%W79Tws!$3hKWD8M1XU~yyoX)0J{Vz z9dR1l$q5@IkOvz(t|A=%eVrXTP0s3F_q_q_>VUd0a09>%g@x*mj}7U`hyGE&`)hYz zeHnW1y$Zaj3V6WuMU~0h>6KmqukHLYT%oi)@ntx$cgX8ifvcT_NKT19@#()s^H-t= z|Kl4f!SQ|i%q9Kzcm0f(EMvkC!S2uQ-i4!^h$0M2epphQ3PD zR<=zg^3&$sf8>xly82x{XBm3a!J$58yAQw;W+{(-x@a9|680bPXQ~izws!M6o%q({ z8X*?RCO?@g+zdiy)SF|jyD3g>j{6*7_VUD_vX(aj$i^^j6}tV**=|NFGjf?`w5O*> zPd%|$#|n;P48!RUaJAtAmSSL|H`8ebkft2Zo+pS~es(emds(D6-}ibq`ZG>Deba_z z`rse_hW78@!&;~lMySW1KCPo?`t)y~{!4N}X8@rSfc9ej+`E2?RVH)_*0iRkiuFyq zywpmjMP0nm0~6W;7=`UbPI2V$X1py!ySh45+fai=y&xufAuNqkVM;hMpadn&IA=Ebs;f22;#J+I|eTRe{^mN;6KZl(>!Dh zK5CNAv^9NeBAxLYsRJKo{k^|R;=J1<`%a%og+)~rF7Sgy;kV8un*fH5W{ zF?ZdvG|TvUZ|`M2{*@o2kTvFYAmtpUcfX@t#4^LuXf+__(#nCk`#A(sv9-keLGD>ru zbL@YM$yM2CFo1{iUAPLe`fZRD>`>*A&JE^ZW}oa@-B zC=4nH*6Ch@=yKcI*Xs1)ZjHRIlbeVZSkf6?zSO}u)J{OC8K0&w$}zeYeW__wCsN~z zFV1m8lG5it_F;~iR9*8b_Q~Q}hB;oFs+w-$SiBCr?WU-J*UG;sE~9r6UIlL43fM?T zZ@a-OU@d6+vXii710!KT#5@|zICvxj;IqVOCzHup9Xfc#fvH(ylcKY8j0&BB*__b9 zy$5t??>>xAD^%ZHt5YWr!nk$OT3+jnFs3tIr2QKqz&?UbG6*PXY-+}=R0B{utzo7m zMFB-2fK-t7xJ?nVHo1-dtg5WmMJ6xhqS$PEHJ4US>G`+`JQ%WEC*r)aSySHik?XOcuXP-`Ayr|L1S>1Wp?W80;=N$X% zHY`D_x)0ewy=tkK-54}1*1ab^`91s5c~;X(2W<0Z0ry8pS6H=jrIsvN;?Bpi zSZz{OYN0^meVy_nDVUp_*9xXZ6&9E2Ji`r!IUc9aYhYZ@?b^?IPf$vIyIs z!Q~&F|2kK|V@$7e z!M&&RDsaP8z{90C%%%E43r$O0d~OV8bea|`?(Ql=+xvU^XkkC8&0Dtt_WIBwW-z(v ztYhvbCZ}k_cIo)yewW#Ku4_PR&KySbxkzjI7_3+epp+1LqLs`fW064+qsqhe(sVRK`#gcbm}dHG?$ zSP_pO(J_LmX%@78Y0RG_R#|0lQ{UTWo`MTX?>+ngEP3| zIaVrMAMdBTBHL}Wp| ze(_&-ktw>CsHz4n(DvWDb%RzeuceLvVd|Mf62c1D&vIg+W^lA`yZv@#7pGkk!Yp!y z#~y!7KlL;JhceN?<`raWbEM9N;YA-0S96PXGubw5Y?`VdrWef^pjgaLg(| z8|q_95a26>Uegas3d4qG0*WR8q~m0%wk}($%IYfERKO)>sA@Eq(djWTV9IG+rBR&a zIWBYb3=C{C(L~PZf(8k3p8>4q1E7>kkDf_Z^R&YgJXbav(YYvwDI%nX*)LvdENu`* zHUax-MyTWR(ULAIARm;+SS*!=^qU^m%u_*tn~i6+8T8i5_XieTo~P|=Y_GZhZCX{B z=%`)*epO`|=fvOvz-?_U8Kg5Y$IuqSj)q}~eK4{?%wk!2gRqWK1#1EX-}eG`{b)p& z=pZ^xV|`~B4)EE}e~yT#4ZL15n1r>&O@W#q9;&1S$pkk8jWCf%jvN74pJjkSl?rg` zx3<@!OKsOP&pZo2J%c8A4c8}qE_tw{mtdvWz|uA_z3KRgqlyD=PaQzZy1p7OU&RaGMaxP3Z!Xo3yy#M%kO7` z(tqHB?;)FXf%vCxee>I2(eY!?)3QGZcqHr62lI$qJIuWK$uWY`absJAQiv9I33^O( zyXVk)&(1NuC_(bDXy%AFgNwx}Eu<2(fiqOsR0_Zi5jjNoydzA}ed6*qH+q_b1W%$f zjc}Z4CJ0@)bU|mB;XcVYQ2V~cIT?60^U(s&ImLL(p`igMJ*aJ{K=2vV6zf>1WNthC z`4sxpRFEg)$u0$A`uF(@dOX&x(}__LrOG-N-8j#A@;vhhthXsjbLeJG){w$D6=q73 zv83Tli&Qd=DGV>48|7%DO>IikB1~W=A6rGiuP(sfSi{37&vG7F0JT;pPbe!Zb6Kfo z%rX$4jf=ek*+OMiElh9`K%Q}_k)ZY*I-*mjj`F=S7hdnA9j4xSwBhGrber|w-~Ux-aLOyLW*Su~pgqY5)iH(#_|!MhPaA*UwesVseVPYo z=j9cuo`C)qQWVy2+^$ut*K;$H@3hA~y}d{#%6XkcUG}L>5gTU>_Bxqj+^MJkzd3)i zyqss{0n?YWy56z93f#aI@cy9Oz!&d(mcD3Hcv|n*j_o@DHU%#3Co?kx<4nFTbq(sL z-}!m~P_qLx8JLaIEjwD@Fn3unp*Dsx4tO!`qJ_*GduZCr007SNMGXK&(Wiz1p9xyz z6XO`304hF!We_l$32+U-NP>Hu=GDUavqRY`h!nu8;&dl6Dhep;>1ARNEoD2ljqNNg zD*<@M0How%avY1XTE4PXci(fjP7Zc!9(h3$AUq9gJIfkFFqw#Bbr#9O7gBTD8)D=s z(~B$yDUM9Qz;0_ZdP^2E&wP1v1KE_RED{K^kr-H;KGSkcY1L<7qJkR5$OGdl7*tqS z9}cP*YqJSYL0HK`MucW$;9Mt7z#_B?m?~8d=&i1;Lsnqsv4ERUwO~`ONH}O{Y*s~e zHRnPr9cTZZ#|~gd>rs7E1I+1hbfcBp_2eG)_jYOfwp;Ybx1Z2+yN^H!2Vh1^wSN67 zKy@48{el@rOPc^lcG)=95E-dU9aDP_nSxDcvaC~^Q*TW1c>t?TZ3-j1uzXUR(BiKZ`oc2 zUhWEb5nL~Kg|EZ$Vft(fM{>1w)iPT51L#Cg!2pKU-4j*DLQsGE*MFvE%a#*D-vi4Q zP$eTVH{d8A8Xf_VS;QujkN`o&m}9I(93yHd35dxAChy|fNEO91z1;` z8E-c?VOrw`_zYaxbS49-LCjD^g~hOUt+dolKN@n=j%uoDivx5cIM*!+z_Ljb7@?+M zW3!MLEF=MxOeIRdME=d^zNX6s0qspr>NBxU?GT*@BCdP&a z0pfME)DP@G!UU%Yrzx$jsRQJtyGRuBcH4Qmhw_znW7Ew)(PpG=O z0B3*54NF*n6)&$WO*5VhPO$SbLy~2mo~PY@`pg*>^0khxUL84h!sWD%VX*rD+B*+8 zIjSq`-^n@Wpc&9f5y>;1gWVF6q>L7}X)w4u zY|4}gI^|$#b^cIH<{tTfj)e$}l*ZHp(_`Um@pEuYfe(X^fRDhNBA}{#7Nx_Vy#M>Q zWy?;RJbALsUvz@q_PLwvKY#w;=o^Ff>)+mGX{lLu0%rL)-}=wijR|~1d8xBt5|~V* z9cMHipIx0@0GI*ic^O9fJOZ{-zMnF}7r2ybe-8ya5n)(30dxdhV`I>4!j?w5s&*`# z0H*P1O*67G0DlqIK#`47@B&uq;uHl44p0T&3i#@vQ&Sksp6sn!TH39?u^G)|J^IvE zyXm&8?Y_23dmyIW)+Z&{Hh^OnfKhC&spC{+J6clwP0^65{62>9sd%W1$J=+6TT^qp z)5(ezmW@>kb4(@GE)Q1$PXSe>@-;>kS9SNa1CqNPpbduMm`V{=0{hLPz$rE@!nSPR zLfSqFusDWP_gt#~7rPXGJnXA%qQo?h0kjI7UUS{GcHzZWSax=?^nNw}! z)}8D!!hU|w?e@`YF2OBfjeX=}*AR;XbawiIZCJODE=##~<~gU@>NOkC3b$BF3ZRD4ie1+{K300ebsjv*Xan_H?z`uI-yCM8mdLf4m)Y_X-Ef}VMfvP;#VscIXyGm zO3TWK74exm1uZUxV}9`wcn1;i!1Nsi%da|mBQR1ahS3{=;UAe#DY}WY znRfMcAGYg0{89VRM{lyruf7tSp>q4&|M?C8<77Mkyz}j*kADIK{RaEfJwLR`vu6X6 zNS~uG6yqlk&?vxZMtUaGfSJTLNo;8xfBk4RmC_f>-Usjt0!n25ss8W+r_yOg@+SsT zOr^~AgNQ%(?A=X2`CS0sP6uog9DAvDqZs_dAW|Ps!BsAL*EU$ZRrV|u>1)u>5?7Ex3WXXxCws&_a7aHMQ zI5Y#q$6$9=%0Xf8KruC|Hk0GrO73o;k0PJcrZ9{`-LsK!3FDNLqojbNWW;Gh{nu>=hFFBAl z5a^|K=yrSdk^AhDYp$}GK#wIx#ajwYq}a_q##9Z>(j#wvxV#AAV$#^jNvSZEi4;|J z!xDDUnllUcfm)ll@C5t##7P*~uVKtR^n$O$FdtA0Kob}h!z!{lQUDnXst(fhDrSmj z&e2gw5diGkZX6N`0q?xLLTj7RZui{%SL~ZkqR=UyaSc*+pXZ8>T#HdWLSI_7$`vog zr{r5aOy`obPa%fk_T%s_`{mugw;z4;|Jp}xyw-m4>pShMU-_*4>EU(uq024@^tIac zfY`#ZW9$=`ea>$G!?$he8K=3Tv@Nt-O`!TdgF>vmd-vK{SknVF)s8uiB#qyKepH^Y z5!hf!D?Bhrl{^e$2ABg$Zv$=E0?g%{_4rQjLIZTDO7oVzw<@IN#dQ=59c) z(A8aO&ph`W7EX%`?e7nHefpJK;vzP?pN>;_}>VOl=kI+_jv5z^B0>(|1l1IFXt6au*E4;0gPxR z!Ck9Yy<)dq`AM63BEVzb0!vECuv#>wcmMjoz%b2Lm^aQD&kLmWQz5SwlW8dcoIqp0 zv>AnUtf{SV%&7{W1m0BmqD3sHif)twm!(o9DgGb;6Ld;S9c?M8>`2o1Dnv@cYcm?a z(%#?Z*x0d{p>SnSd-9WUSUZYG!meR#gelZ zqiy}BeeA|B*nj-z5A6T_=*M=$4cFTL-1!IlG_s02{&Jt)a_zsm!m0}|y3AU?-EBYq z*`KhYinEhXSx5@MnYdLr#=4@S5+I+7L?GMBNT5%;B#*o4QWeI2rR5FM zF)NH?+TD$7Kx z>Y$KF>EYOT3WNZ6y@0w{K%J_;c>`=&6zpiM>p>p{kP4#Zgp35_MX)aEbwF|wK&rTS zoU>SZb^R;&VK!oYlntS?s5ja1G9l$n!&qWn>l z0e)qJJ(e1Px$SJ_Ie;@vVHZqjI3QR>O&I{T09EPRcI>gar6sV88T5HSfM&7*$wION z+<`zleyKm2*#Z@z1{{L`21 z+u!=O{qXi5+M-1Z?CEEou`4dS%)a-Fuh>`r`Fl<}aL&2s!vMG0(@#AQD;-O<{xk~C z(qD5_2*;DQ(rI{QktN_O&)F^jqvQk;r0&Ju>Uu%4icSD`S39~{){9FSV`-V04nX$M z{i_CNh3B4r!ZPuDErJbAONq9sooh+q|2xMf5lO|1Hf?GV7FmU^g=!QRA}5@-?;G=A{}?#~f(}&HRM*>6kNm}c{i9FY;UBs_Em^6-q@rL_QYK zrSx7ufXe+i($v*#H#ef!dP)7aK$gT} z{S-;6y1ld4=`N*nRi*#FifRg>0M&S?zDhw@N(_G07*naRCl(b ztin2Ai^<2M!zGnY3O@`zZyWLGhLx6$mn^n|JTL1j)WYtVtN1IHW34u`jg8nxVW;){ ztK019hrSQ9d>z&IX_h#4KKkCtwvA(7(a>U_SaJivyWSOjEoF=eamn`d6Hi-hbrtql z#48EehGe^b@ez0j5f~O=x_kF-%#nA#gWdX7kM{`Zobk)(jzEZQ8{MPyqkF3eD4Qh! z*hWFqe|-Ntw)V-N+BCrDzkKfBtOPw`N?Hn5Kxy`gfBB4!pF4+CH|F_hC!IMvg-$WB zU}8LF(q38BXy?HCoqYOIs>9dA()G}hDAlF#V@dt0Q&2DF>d7#OO5DbgMpt{xSiq($ zDx!cY47(?RR#j}PNn{mj5?HIWMU-o7daQVR+)+;2=52Jv$k zXI6HGO`kU1N-3PGqkGlh0Na3_ZACx1zpo8lWfSS_G>bxm+Kh3$te*t9q5!+it*v(P zc}qyQPqJkXKLiLhD=aLq1&dAsyf#~3;9&~IDC}oU-OLfEQvj*jcIFP5=+oJ#va$l8 zN@pkH6$$c6pp9r&puiTNw$%CngwoO8_1|B#H0FN8EjK$*xOMA(n>lN&U3~FbcE|7j zYRi`|w@a?LoLCRox^>%V&AI@$gqilsU;nq={=;wDop=4puD|{xwr$I1IxZF4nP;7C z+vwKytN;0fVXu?0!z!}s@)}$I{IfJ4h_d0weXCFf73Il1naeRv1Sjs-Z95BeCy)v`>vmmLt02*P@np(rS$sR!`$o>%Gu; zLNQdTZlo5SGkzK65%8I}QGS5let7Df1RVy0RpLPD%z5Y8CqDTF+mES!O?9iC1Tc9SmA$^h!eAr&N!_;sOjBVt&phh_D$=9qPE=y?0M~(@0SnNc zGJ-zu{Vz-2~8y7kg1;GA>Lh28BX<-F6$4i+w0fFEfQz2@63hT8Do1NToo<1Fh007jzc{jcxe zViEC?cEz-u6|JzVuDQt` zedte^+^?}|)92bwF60HI7oW5UP3+6|$9wLv&wS>yHe>o^yB`hewb%a>#cD_o0OGpX zXakt*7__xDaV$HL86*Hk)qb@DurF&bjt3VAF~q48&FG97Qvu{bYoG|My0RP)*=K`Y z6h(1fTzuAzt^lsG3SDl&N01P#v(iz>^H~r zSbiKjKaS-&9xrnXeXc)x(`|egCE6y^*XNyczO8&=xh;SAemngGTqpt@{b4{+MCb(@v#2SgQQI`A4#>q&k7dH^UYyivM52RXjvtT@xs@B*NFy|LUZv?O{LI;^n z8_rcPt+a0TBOpC);&?zE+$a}gk{tx-86SrRv%0(15}DInfU9(&$(Z#w)YH+Zmx7^A zXh%g0G7#MC=BaK<`FNF{d+wzGW;#ewNOb$Z-2~1J!yf87d+wPRthTDbmY%f~Bm5d$ z{qlNSuyBFRm^Rg3S+faA0n9MRrnGdQoptv4JhvKO&^#mw307HAhMb}r?db_HtgqTj zEB|h%FFngPZ{A`L{q=r|!!Dy}t}>0B7Y`U- z!Kwza%i_WTwls}q2WmxHU0UH7)&StWc*1n2$t^0LV88s)FYUZbZnOjY4_JFwtKEF_ zx2&S{fIYqZDF@v1aUs~e{#AS7Z_ij3y5H0yE;MFN!z-3%3k}u831F&|fZrOw9K8`3 zso&XQp~z$$tRJzF{1YIRAiorWwLq!B;7IQOAMH!y5CHAv3-A2%&v$=fO!eGo7^9Ar zDopq6+2gE5WG|xo0;RHZ`A72_?&md*;ao;4#W0*>_S^Ci7^w&h0tPSs*bgkba4i0m z+w6?fF-C8wu%CSYHaq3q^ISSw08(I3^q9Ox#TxeUJ*HxrG=SW!ISXaPL`r=dnnr!! zOM?mk1$?UKy!x%Dre^>?0f_*(WHgJC0f?~`U{kS>0J75keXw^*J*&sOdb{uDdnhw2 z1KXt>SI`rME;E4LQbsxz_jqS^P*t9tn`S32J(;xf3~a6HERA9%jkCI{)?yPQ*gsvF zR6&oae)C|bYaGzSzQh)4k$qDR0BY*=8H|fUo~kOw6%N=;#KI|)S)2Qg9`a9xc}1EK zg+J#GZw3-AU>=YxE7^@ zwhQ(<)3!oF{nwAaj>KWm?!V`8-cyT2px;V%?Y386S<8OgV6_`;_VlU5G#f4IUOZ~+ zUHtVM;ujx*!->GK08=rRBejTqoH%i!Yr$5}mFxZY-*5Ncd#?k2VgZlj5(1@XpMAF7 zamO9@wXc26{oQ%zourP=c^#Y{sWEDNGF-m=^2_b{=byI~D^|GMmtK0w{`}`ZJJwVJ z{}8+KevWe_&zbjg9>?;wN8&s0wgT z>TV=Pr5li%o|ehuWWXTs7CC{o>GZ0kkh{8R<;g{GB3f3F3RP7H(1T_=zz4>mND8eZ z;5Ht>8xQMQTVF?UQ8-0D82iJ-3dD^k^}G*@q<#DLT3!L^`94zT08+7>aso)pNp||x zXu!65+{=+*!GaU*vMa8{W3-TqaxTnEkO3etjiaJJB0LIkZB(|WViKQ=*0h`6^V96+ zn{I&-X3~K(>5Hd+11Y>Zzv_Cv%>x#l?9rlRbFNt|XReG%e_L zg<472UTxjHm5Yl#mYtCa5N+kPF0`-HC>rauhws17mjCS$TaPrLdf#sAX>GE)k_u}k zhBf7t)(1%JgGKJ{Dx5|H6RiiP^}c(S*^EV( zB9jQWAN=6oIIcPN%b(wY+d&l<1O2!t96*Ku+s$oXcn@6rb~;cMA@eYM>WRNocqL}p zFULXzMv4F$mQ?;oT?r`#Ew)cA-&el!719Ye+qiM#sA^pAj=99@M{1EiGX%D-zy5kV z@4WNqCX(-lGhxC62lk$M<{7Sh@yKIcUD=QH5(3VP7A>+f&N$-@yPr98rh6==R}u-= z*6$5#4DW-HI%kG=)W_G>{4qLqj(0eKZq2%_w&aBA0Mx1W(u>d9n&)BdE;tc;PSVkU zIaRRJoYPg#i`x=7RHeBrlZuPSW1>G`J7{CsOWshKf>itXonLn(SyxhE#d zJ}Co6j=~vW8qGUhF;y&}t`m?r&_ATNZ$=`ZZc?%{l7@8vMspHlduZ7sFtzQLf@yq! zZOSuWUzcJx<-aLysPvPvok~f;gdg2x7uEA|vHj>rgP75`0bUa=0a-#5Y2*}u9sHrw zh$c{^BX)4(hD`veM)zH;d36H>$vPJm@pj_ujH*NVnY;`g@KuD$U}x;Ra;Q%|EAKvar7 z{MWx(Xa9anj7~;Qp^F%-zu10#Lk+-JU8cg&%1*F-yBqA`KYiYAyXpC3=Yw>d&qNoV zBe4t%Fdd13hEmY;=g+sh@4nkYKuY@-n9_12e@F$I+psUW@WKmi(xgcal!nG5^JqPH z(M1>8V~;)N{N}XoNG~BUtS@yfuEPnpDsm8D)}nPnEQ@>MDETK8>!W12ewaQ2BNBno z=c0>L_^bDCva3F@#A@qm?15zulNO)tx*GM6PS(Y;3WNsu{OdjH21J<>U#ekzU(rJz zCb6Zdo?@3uYL(PdltL!an^2+yyuTA&XCcK#N|&n}lFak9Eq$N3Z94{5AQlj;>U_X( zH?~De*GIrwcEb8~!ax=j7u);=vjJhRl2RV9WK8{2lA2vNsTe?<6p9^fEm$t?#>=w> zFjP-kxyCZma;aP|a28PN`yK}yE702y(>TaJ57agB8h)KHqw0iIUt8zUZhb?urHscW ziA-D{`;#1@nbw{Yr{~)v4?SputpBm=&St+s045sD{S~&I?o=9MLwzfAivW~vbK{V- ztPux*XP{5Bp00`X#5IZkK-WLVM+vm3IFh|73-e3P`(0@x9$=bLLD#(;8zhytLlVUwR5w zR5Pgj@34!>hAEzrv2s($g86N7#ZYQdDqmBQ_#9QdOoItH0Gw`ncJH!Q#Id_KcyeW}#%#!YJhjeP)?48D`XU^+2jM^dVEyX=Bg z$gfm%co=*qz#}asjn@V!zS-yAuWEIHQnlh#$D}S&(vzl5u~hn|S61u?Or|@1r!IEo zH5yOly3*y+t7;$m+LjJgexDs^9_0Z#2#ea%BHz(Cw5Lg6U&cimISolbpY*H3zyL>e zbE<=Z+_-YPETx0X+Om$;h|H?~NTC$Di1D$kOYO~6+eXxhQ)_~lhqT&FIGUok* z5dhKcu3!C5KKw~29_M~n201>1 zbj}I@Ft5BynYl~siN_yvVDyTsuSQ1EgVVq^$3Q11Gd{GX%`nKa>r(t9xBwB=+|r7E zHo6rcZggt`!1s3pCbKy<5w5e=G>W};@7QT2{7s!c8<|8bbqE!(<~_u58?o!)`1Ei* z1MXZ

GWGjK+aYwshfFkzdr>PyX}!_Ni}tjbob5fzWXu7Uke@ek}a9Mrj0&nlnXT za{7YXhH!uJ;>GsKPkz$fS6oB3Oh*!&=!2>8J@Ld7wqwT*zAVdMKjam(z>}f;-~RSD zw~p355=$sPVo0^}Q{pMX~5^dzoUJ$yA|-0X$Vn z?=F}fiW5sFs5#_&DOS(Pqj+ycc`3&2rGQb==`fJ;IqmCKrYhXVO`c@wIeFFwD2k=Z zJ~ly>^e9kaL$z&v-*sb}-vfYEwni83J$#?H0Q8jdRsofa`Q@D{bA4B_54%TGCY9E@I5NkOZiL6^| z8R&3J_iVS{-+Q0M$3~#leZ{5Ge}C8i*h3F4ryXgFJ#^n6?7N@;Ci5t>)}|V3AdR1t zK&qcwh^k6b-`wwE9<8vUk3IUB{r-P`#d!DH`21Ac0Rw#ZJ%6(CV+-v=|8yn2=1;)5 zKhYk2e1)rIPfgBnhWts)X#n}e?p-DJ*Zb}RV@B9@H{4)rk+W$m0-*C3%q8BP6i~HL z{FFqzVMviEsNjn!6W0Nl?LMohtYkgn&&7Z`W5p&XI5!zdAL20D*Kry@ak5RHJ`3>K z3ka{Xy1HsWZzIR68{pjzBi-%5D*sp)ta-Q<)2=nubrH+Tjkn+3{`Qizb&RWaSaf4_SznlCoj7ur2Kdj1Kq)JM;V zNB>Ae7c!%Nq<(~N7XhW5n_=zB%Xe8?Y9juXahTlq10FG32V@SykOrcL*e~fihZrvX z8-xX|09R1#Lu=1SE@pdR13TJPz1{Cp*<$hfVk82MwCMP7YX+o=Rh2Ql*iV5_WxD!U zUxhbf?mA#iV@P*PH`)VR7sS}U8NbUqWCqoh2Vg$aX`c#kWh~l8Mmnr5Ea8l)lkA#n zuj6+h2I)Ydt$t~Ry}GU3=1eKDooF*BPn=-c`Lx;;6C2&)zK45}8f@RP7Y*k&yg{#8g#YwadU2f&HcAc_l9IUenxaf418-w|ZQ+U>Be|z##JNEcY}WI#~VU3_y=c zz7>v>K`%g41#ny^IN+N>^MEGUTsah|MXYqAfkA0bW06dBxpQEU^QFEH))&x=lEZD& z0%~z8xdi%Rw7=tLj?VBfY4qJ;aDEARVG5RGfA2Ye#CFuA2!z6o*>mwHngv9_sb? z`?=xB-An{HM#0`;1*H@}08-WF>P@c#rU0p8v86iZdQEnBvSkwECEaNkOj!c} zQfCAiez#sMKB1AI6}?|6TUi!Gv(32pn4t=Az-&Q5KIv}K*nmJ4{KR7Ju3M#vW2t7J zI(3QzbmgUc*?y(lKErThDJOLvMH;@SFpui^9NW8xZ6E=7W%Xt(n2H%gn5|y%f)y7P zTO3UAtc7!FOFCe6T#Tn>WKk>>1M8VVMf*0GT8f?`2hp5%Sx#0y%wiYvgLoGYbw=uA zzBzgMq~l?LVG~p6@KjZOfP$wqKv_57nkseyY9t0JSXOn=U8$e6b^=9Tij_V)k;n=n zkRxdP>PO$-Go+>MhY3!F0nVX~=l~#HpjeUxdBG~h-rA~mpxyQ#-~Enj1R#bpDJj7o zdE`+G$8U7b>{(bmMcAqrS6WqVrG4ne8*Ivqd9E#LA{o1f9$aQGtbEyS`}8LP*0uJ~ z!w=(ZfUM!QUwIX$xk2gJF%~_KI>HW=ZMPDt__K&@YI+VDV%!CYV(o`<$^@a<8>m}=mm$<}aHt3};9lpdXQrjX z=Ix`9Cz02BiqGAAW@x;l)aNffFuS) zkJr@UkK!s~s_%XQH7!x3&vO!TU94Pf1R%7jzQGlTjVT&KVObK=g8k@TVWWv(7M-c; z>#OXKfB3E4a_i@jEo{cNX}W#sOJAXV>N2aYtH)1urY%0>3|qGBL0k6FGW-0rIm|QO zv7cw2b1r_P3HImk>CgqQ3ylBAN8l|YaMS_QH_zo@Fcku=Z(e7lABQ9bArtu{QGtJ`Ifvq-FVzw% zK#!$GKc;^15%3W>bOZz>w5a%{mEszu>yuN^U;-8f0Utqtrp(q|yHGw#K|raPk^mRf z(cweY@G5}nCfz&4lv2SCOBh57&`%0ig-L2<+8c@e6Ktt^rwiP)H4n+FBBLTGTB@@_ zteKJkV^J`UL*N+QBmdQRHQEUa=Tnr^YAx+e7~yAGFIDxD4g?u%Jm9#ZvWztISiC{U zG7-Qp1yiYj(7r&AHMTUdE`8oxnlb6mL{boM5dh<;XqZ3P%k2C-TvvktuuPjUd8+g8 zjE+u4o)7`B?!$L;42&PWe>DI)aTu zZin=)z0aOq{v>3P@PUv6U8bAPk);*%DzENuwf2-wMNuHH(KylU7trTL2AV z8)og&Oh&*4DrFB6bE#YbN2T}M2hf(HT}?@218gK3pc)CQD3;X%FtDt5U_UYd_9M+| z6P}zJRduHr*htGr0_-pl6;7!bDHe85`xdJg3)l@%&7P8)L>jrBlzPC%O`1T)tQf$$ zkMZEYj7GMnr`c*6YprNtk^_nYLjqPA>6xU&0ba0u@;7ZqBb$;KOA4K8b1u@wbf&|K zs%R)4on>u(BioCh@Mo&q-_y^n#$xJ#cnL=PNP57Yi+h`NX+1ZTUkh zEGIL|uDtqM``It=v`(ZK=YHTqoCGTDKou=v0kj{w@x!+4uMgR8{@<_c`j6c}W&f0+ zw_MQ5jG_OJa4 z_>3D@WV^QS2ZWZvKrV0{qGW&7*Z_!x*^H3q6>0Tkz-us!u>e-XnQspj{}F&M*(`}M zmQIdjyCnh?(~uQxpqMEwE!~0MKGO8k+NP!@0~TRAbMtKRNmsJjpl#W;mu;uRiuThU z6>sVZ6KxVz>*`)5YpFEar;1e;Xw!J5*$3kDP)z~)9J{MFtSNZ2%DJVkw%+1v6X*<; z)eJWR;l-X_Ho+z3+?y6{h6ib7ur|8_IbPGcfZ3tKMQw(6P#PYek%R*V1h5c z@=AO1!N=|42OhMu&p*e;F)n56T%j3N_x&)!I=(p0iY^`UtL0claIE`ac-0&s5a_mO zim+tg)!o&`9Fb-KU}YoK%{nTU3ILdmE>2?K5nos<1zYExeJa2=U}bwN?ZOMrvy)F= zV$VPRIP+Jt8;<*)$6%RnJT^W=eirUCJrZH?z;q;{?Dyd#a1=(s%Oj4$gZ2-GtW^Dg zZ6#GZ!|4Xaddd)88bVdcgV&txk4*2o+q$T-9<<_#6P-_K-Tq1#y8YIReqO0=kd-So zZN(VA3zp1+fL$0mCvt>=9h9kk53DEvrVD$iY+8Iq#**F!+-2t!0F;6h)#Q^tA7>l4 zY;oSBvNK9eD}<4pYGaDW!e}M^VP<0NllLjh#<0njT?Nq~3 z!vXnmXl8LF;KE_a1sB;*zID45jUQ{*Tz!>2^YpVe0Z-G3fX~K;1`Pb^7&U&pEjsl? zdu8o9dw~KlF|M&wJFi=Ty$z_3Ta7nBWqNRQYCrGM0-s`GxBMCk}+ z-xPqQQ_E4MWyPE-l^xEi6+0?z!NLXLkSHtLz8kG*H2{M?_swnA1w+|IS0mX*1%sUy zlaS_gl?h21u6oxor5Tv_v%jR&G>eH(1S|!eC#ovSdjUClg+=afEyX?c_UUpAdVca$Iw`@p%JQhKy2F+(In}uZ zsNsP2q00U&EUX6D$(Z5-z-O52w3I~ifmEuLCr+7+ZhsH+O}7a!tzt_h+tI(@1dhT8go@>k!lC;izc~WvLACVu(4mJktIBfJdegCC@l(9{u6F(JsF|gc?v~kSPd=Lg()HsfPjFqB zAoSrEkG@utMrdDg6~73ph6!>6SPKqXB!p&O_r3BjK3$^PCQ35DLUG*cb6?X`E&q# z01y~}`J9FHppdSDn@O|R+RSNqm*NhP4qJNZWbfJygsW7LEhx2C?cZhsB23 z?CY?mrZ&qjD6laUcI~e$cZFK=Z+&_FMq7OH4%fJ)36`~>pb&6Knw+?|A{XeOSgaYn zY@7 zU>=%fPBH+MH{22MY3JdNsNdeP6oJs^LtrU3PQB-Q=>UZu z66Q2alo^07E&(PJfTwEiUVvTE_+oUE=nKIr(xOJ8I~1^KC)J)sih2wdON~u+js=W{ zp_HF=JbFTbHKo&otlLK#JQDrsI5d)bOZTGv1dzcTmH-H|F_~92znItnpjR5rmS#E# zQ86Dj2;&+T=`^O|@}v#b7>dU(u!^!Wt1TNu-#(h z2ASK`sgnV_3A6^SfF-T7Q%+utWT3ZGts#ad!D zyU^hlkz${Q9N>WmA8__aS((|yq66R?M7K&8CG4wI^wdmD4!|;}Q$Q9@2PIiHMMlH` z)&-U&C%`g`ebm=CI6zpCU&Q;PtsHO~8010$IYVPz6XQ*CpuV@a#K{H& zdX8(19d^Q^FVd>C!-}V**;!{^fpLGcCFS+l*xY;D^!QzYqMv4_b@ze6wf z1D>YNoK31a7cil8JFP}ZKgXl{9H5e0mElU_slK6!@z%NUs#1IaW>@w{VF2sW-TQ3S-(Rvd zFR!wuhC1gKP*+=LlPO}_w{NFyq@TOyA;8#4F;pXVPT_!3bwWy%vjEJks_|m?cH3*bxBs>THoY-0eRF2JXpx!Bbfil(Aq zl~XaIj{{7`!=~y&p#%MH8vrkvzVkUqA;b>L`?ZtQ{)P?fot#3)C6=^*ml#pNJy4T) zvQOr$&Rp#{upxOwA_ZClj6DU( z#*5E9X}|gPFKo~59k#!s%J%Hs;|k(x57beJ_IF#mb`5Wg#3f*y?J3!1AN%m9ti35< zKlugixjUPNPI;X$e(@1Fj0pHt{$T{^a92_5#=rdKFBWP=8hW1|>+jlYuXTUNnz?;w zo=5W5r}BqC`XQEW__yr0cqAeaVUsD;p;COH3GhPE5?z|YsaTK0CMXl*d9i$udsrY% zCEc9j9!JNZn}p$urkXq)9ij@9(qRh20a;BgtynuLZLD;=SWTI(!yGCl%wyS&g#$)5 zZQ5#i1$mDBt3FVJ<}lS7(0n#vvlLIu&ln1RdhjZxn>+vz!+VogCXWDdVQi>_u}Whg z(5p)O9)O^9uCZ~^0A;G`Yj(JBPMC5MAZ!fd6}nPdn*FnFji;7wN&>g-9sMwQXE+8i z9w1#uwZ00Fk||=6-n9pNrJdW^9%E00{gr8aEOFBJiwdR;1~i&&$_1dZveIo^fKpze zVoOU(_EMa*6KkvSSZbxh{`N3d6>kCf0n$pROP{N;$ltUThO-rEgFvE~Sy@%7Xi7y{ zQIUPFC`sTnjiRbL;+0=m>{!=wSmP;Erkj{i*M$mAsEBVA8O}eo1z=pLUx!|3uoqj2fGg zdhq52PPLADy8FdPz(>GGV5A}-AQ_u73D%5sH(*cQkW$cDD%~#dCD7E?(oNCNB+~SG z=o}jXCjdq13{^}7xKg@UCi2pAcJ%_D&_qV4(K?7oMonT2L0CLbH8{5ds{^zJ?Z(^m z#T6?7rumi>3-|&MWzc4{hH7tFRtdEU*eNB>yI^gHkdy$Ew6EGw7ho+IptBSisBl0X z=njK^jQfMpcFI|o+ZafJz+kwodgfVxAl|EhuLx4oO%xsVg0_3`4^@i4r$=iM!+B5ugDQp zIF&&)d=MKZ0cRB?t$BGh+v!02iC&lgS}A}^NRa(gt1A+dzpDT+Gj`xq1!9_$=GYHN zRQD_aW@&H*Ap6jArlKRwhBa03R4L;-_xuYio9h0ihIZS#qr@7jYhZBWhmHsFih;e3 zfL(5*Q&Tj0QY|`m(vLc`eL!_k)%wgsj|auz>YU)1MZd=C1`JmLm|-~*FgaIT6-SX= zb7L)I*o~D|fzuOLRhL;!O(mnRCGB6x`4n)h>9PkOwzb<=SZ3i|=Iax)?jZPo4m$!K zm>zbh-g-r)>IFRCZqYhg_x9Uwf4f!v>+c`}p51!~!8*)UJqvx9fjSyi69{R=s}i;j zv}y6F39b+)8f~LAq>T+Nt|etoc0RMA6A(Jmp<<>O00`Cgq=J>2kAW2w+b5u-Td}C2 zMHSvEs_Azi6YVPdbn5`Z_M@Ndq#9n8`+Wf02v|AkH+ulLL(uazFbY7@d$j2JzHZu} zI>Uc;eo|{v022VNt*y+8rcSrYoppA`S(jQ~(OA3hPrqY7>#cbFJXb6wrZWP%FaS6f z$dxOAJVJNu*kTD3746--mume6ONWirK1=tNSPiUkVL`rQFZKKq-=}wJ+PY zP1`L8BmFv3{XyogF{%%}<}Tgr#*JHS*39XQbr4_FDvF%CV5ehA*{gjib7am@l2C9f zFe=G`qz>_b*ACdm1TGdNAy6kOt>4CTgb_A2))i36%XP(b%VCXsX*N(s+tD4k7GSZ3 z#6fyd$8H0>rTJC2ramh2bsPscE>34EP^$j`{~>LzYe~yG(y9&}GmR|VT{Hx#;*Ss` z9!3`_fPXK=b9;7eXBy~t0s04O%B*64DGm+ARtwOdzi5eV+_1qOxNn&)K4XeykDX{S zXpV;#MawToa|GNuJOUH&z;u{`tTg@ME?U zYLyx0T4Tz9T}3#8f39^hOscBsrIi%JDT964If=YXKckzUf-OabQ9QAr?2 z72Tml+DQQ}rPKqM@5{iykMw&zjAI-vK$Wf*^bv#EMjG3}Aoip8iFwq1)W=<*H77U2 z;>Q5X3aY6mEXy_hrQ9`e8rK{z8vRa_R~K~BjDI? z;XaU^aEEl4P76xGj0$UF(V0f6ttbGl9U!Cvod`gb3UP)&CvRpEm=(a$He?&6MyCR< zpcekuI!X@%U|eC6G>w?qQ$VAXei$s`0IaRpzzBerKqe^226-KE=@77DyAc#b=|zFM zSbRifbtFxrT4zQIw1%ZPEoW72j}0=$-riQLZ>_NG!d!rEJ^Q0eQ3O@x(Y>U^J4mfl z90XXErc$)&{W@S&(P5*g6j4T zY^S=|Ch}DWv{JC2QaXIw=FPU^rI&5t?CGv5{?*+(9grN7K18~4h{2Slm0G8Yz0_Dl z4yUDNFgCQX#8z4FPU5ea2V-E1N#DyHUm&^zZ&KF|7Ar1;&U`Dt59#V@*bU`F7HZ4Cic-5&xy+J}JEAlp+_w{FFp z1_Ye2LeioZruxiFuQ})#zoF;d1*QNJz$lJFD|LyI8NG^_H2yvq!MNmD+q7{xqe!vj zydn&*Ftul0w=c1RykCoq|E0@}j25fQc*LagpC%L$26&PlGln?=#u{Nv`?~vS01$;+ zK$T-HXV0DI{6V*E+GxukdBLX5&jU2J!FZwprB&(JRIIT8iTn2Lu_qsW%;L~jreP6P zvX{#B{rdsdc)2nbb%Bycsp1mT$8+pkHe5o5TBn7v>4HJV_ua1hR=1M}h#{5jmHb%y z0H*B#&{_(Sa&ohA3&?ehbQTP1kaT@r{Q;-Pb!;{4wg9AKwYebBB9>b-7a-Pex9*EY zclU%M6*K+>(jDT~3WBR#SXe+TD!`YD{wQ?2(GhW$iD`ZTou~Hh*rpY2`t(J%am_m0 zzOMw2+-%2&CsROIP*i{o*=sFH1$O=7BXAfIcvrx*pr8Ol;EKc8{PDBOmMvQjOJk~t zXkEX&F#U&H#)Is_Gpu;`EFVmP+yV1Auw~KPqr?te%)g zfUDjotkMsY>cB1U70`24=Dbg^N83{hd5{WmRjmgAp(@~!IX+uvU4XBOk|_R(P-QwP zZg+~28kh7{;8=a;hj7vmkm{ydU;9wEq-grI_W(8p(h?K%9OK*9F72iWSHLyfjeX4- zK;TyOsSW@F#qvhTS)M zHI_d%9!skpm|olopf&q?@%YTnLKaYhnfwE`@x}Fa(m4yUzN)c3drR1LkT`}>Ay1Wk zyV&V|Ct>Ixz%q*YC@%VZ_4ZJZh3kM!@0D`zMa!y1Osfi@+R&!TH9;Mn`UkoJu5IW_ z8{C-3j-6obbeJmNS4QyA>bgQPD($)0=!cCBlfKp+Z;p+Csg5DxaA|+-WWu@!;Ph2U_`>Rka-Rh4^S`o_cXb`|*tudQ|c^2P|fSEqsy zcGk%;3EQUp;GE9a?6{G z-o?7FU0iuI+vyrkVu{*A~zwdd@_t*12->Y4@9AgXx+jwJn zeCs>_<@bgZ1Pck;Ja#4p0As_Uvvsy$JiyXQ{_+WkWJJ0-zN)SWR8m=DFuAC>F>pQ# zW&!-{V0opl+^@9OBOfwk=eSb2kj?aysreEWT#Jk-OCknbS-Wl`TSj9H6CNdEpJ60c z`3Qa8PBd5J5D}4QA>9C8CN|CW%`ydE3-8-%;KwutI_8E7+^M~wx{eF_;2jq?gHU^% zwg89?(BQF;s_C7unilU+`yC@NYg(OyN_R-gF#U)hVmsc)<5Q}|>u%j*&Al{j~0#G2n&7pP?6_*Nc(}oihy^#-^b2w}KU9_aKcvr!0j!gEu4Z zgCM=eo+I&47Yu(GG%hHAV5d4|L`={+bb7If@9MpIR+9|yHK4O~i!{!Y&eJoTZCF#)=Z;D^+HO zH)^b>mA5nvdu4a{oIWtc0bcQ?CR70$stUc8fC`g6*6LBX$eLW$G<%_nRsob1Xlp-) zRrH&Al-3#EyauS9@@%}SEF^Y*wu2WEUiVd&8Ur8158R?OO9hul`L{KKM5H6(9#YcH zl5TYkD0Mf+u)x`iDJ|)bvJ-6-yWR!8*HlkVcuyS2M2f~}!e04C=BHxat!0+Jj_P<$ zCU5SWdxg=LSXV8saj$0zYV6pFsst2LR)e)x_#em4D9hIb5vFCHoQWBID*}&Eo5SR< z=VDgKerw%}9R&qSqlk@5>DWuI^AiH))i%guJHvvz`E=ISOV-M#Xzlf>;U%Q>^s6dz z>^__+<%SG5$YJpX=!7#`u~VPwO&G9d`rY|~AsD-HIq`Q`W6T;OD3-8_C$UJAx>YiG zc4SrJJA*$1=q;p4RK?SI;n>{`R#2EAiqW#YnY*aGK2;w*G+7~q-zU8r4N0yotJElY zZwiOfoVqMW9y@whi0kFa-0FRqGoo-2=;U1xI zxfs0qvoR1;w{2rBBDF+@|(yK@6Al*!@#yZcZzMLE)J{ea+Cs!HF}(hF=RsuWE|tOgV)(HH!zm zE{0x)czL_>1R4ci&r;cMO1R5wyCQUV&UV7{rQWj^0Dx=A5^aKcQsmFC5UH265M9FJ zsTQD_18>b*x}`{9PKNSI6gHq<^W6MJY(XKt-_yb(!&YVRgt=(CDYN|Z3ukUwZ*W$* zijlzkzd$4E`b( z8^olnH-qL5F{;$FDt&~_AThw!#x-A+=z8`b@` zyQ{k^k84kMb)JX>n|B~q?P5o%&6*R;;Rr#e8;N}-$X!3yUqi8*!qizT^I$B_2Rx%< zb2M*nJuXi#Ihv$K>2MjV`lL+zAK>kxQIKIrpC>pn-_Lw5TU{133YtbCj^JL%@5>!} ztp|Q9$8mkC3|cwz*gpwWQs`r=Z$jSU<1}ExE9p5mN^JamCtY1#Nlkn24o#c`BZp(< zh?~(2_sz+O`u$6C)@o5*5?F4aT%Bm@YF00bZjZpFHvK`rIE)~Lq2_y{J(io-1{F^3 zg-CTzfBEnw%xJGwi>=M<{*cFIv4Y5_{<>>U&X_gyvq9Wo|3d(dd1I6`-3FQEq+R5* zI78%&RX{6D_{*~WiZ?&SUWo%`cI5O@>hT}@KqfT+E zTYTRmIf*aIOJ7wuUjE;QOb*!m4RA5%cK#qcRDvUWI7XHi$@jw#I2?Bo|J=oIJGiRS a>ORn*-YAK!u!#q7mZg~;y3*9^)_(yb=UJ`* literal 672247 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

rM&r_;Tsz^e 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 c(rVm8 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

`1cpS_)L1W+92 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

7KxScAmmDuXv(^;O0>&LYsI*h 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

I@x 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

-
-
-
-

Local View

+
+
+
+

Local View

+
State
@@ -34,22 +41,26 @@
State
-
-
-

Remote View

-
- -
State
-
-
Connected
-
Reconnecting
-
-
+
+
+
+

Remote View

+
+
+ +
State
+
+
Connected
+
Reconnecting
+
+ + + diff --git a/examples/remotereconnection/src/index.js b/examples/remotereconnection/src/index.js index 9886ba78..9dd19954 100644 --- a/examples/remotereconnection/src/index.js +++ b/examples/remotereconnection/src/index.js @@ -37,26 +37,26 @@ function getTracks(participant) { // Load the code snippet. const snippet = await getSnippet('./helpers.js'); const pre = document.querySelector('pre.language-javascript'); - + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); - + // Get the credentials to connect to the Room. const credsP1 = await getRoomCredentials(); const credsP2 = await getRoomCredentials(); - + // Create room instance and name for participants to join. const roomP1 = await Video.connect(credsP1.token, { region: 'au1' }); - + // Set room name for participant 2 to join. const roomName = roomP1.name; - + // Appends video/audio tracks when LocalParticipant is connected. getTracks(roomP1.localParticipant).forEach(track => { p1Media.appendChild(track.attach()); }) - + // Appends video/audio tracks when LocalParticipant is subscribed. roomP1.on('trackSubscribed', track => { p2Media.appendChild(track.attach()); @@ -81,12 +81,12 @@ function getTracks(participant) { handleRemoteParticipantReconnectionUpdates(roomP1, state => { onRoomStateChange('p2', state); }); - + handleLocalParticipantReconnectionUpdates(roomP1, state => { onRoomStateChange('p1', state); }); - // Disconnect from the Room + // Disconnect from the Room window.onbeforeunload = () => { roomP1.disconnect(); roomP2.disconnect(); From a7f035abb5c7596cb67caa45f8c49ac954372418 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Wed, 20 May 2020 16:28:52 -0700 Subject: [PATCH 67/89] JSDK-2770 Mobile Friendly Quickstart Examples (#125) * JSDK-2770 Mobile Friendly UI Updates for Examples Co-authored-by: joma --- .../bandwidthconstraints/public/index.css | 32 +++++----- .../bandwidthconstraints/public/index.html | 21 +++++-- examples/codecpreferences/public/index.css | 30 ++++----- examples/codecpreferences/public/index.html | 21 +++++-- examples/dominantspeaker/public/index.css | 29 +++++---- examples/dominantspeaker/public/index.html | 15 ++++- examples/localmediacontrols/public/index.css | 54 +++++++++------- examples/localmediacontrols/public/index.html | 39 +++++++----- examples/localmediacontrols/src/index.js | 46 +++++++------- examples/localvideofilter/public/index.css | 22 ++++--- examples/localvideofilter/public/index.html | 19 ++++-- examples/localvideosnapshot/public/index.css | 26 +++++--- examples/localvideosnapshot/public/index.html | 19 ++++-- examples/mediadevices/public/index.css | 32 ++++++---- examples/mediadevices/public/index.html | 15 ++++- examples/networkquality/public/index.css | 43 +++++++------ examples/networkquality/public/index.html | 61 +++++++++++-------- examples/reconnection/public/index.css | 29 +++++---- examples/reconnection/public/index.html | 43 ++++++++----- examples/remotereconnection/public/index.css | 6 +- examples/remotereconnection/public/index.html | 6 +- examples/remotereconnection/src/index.js | 11 +++- examples/screenshare/public/index.css | 53 ++++++++++------ examples/screenshare/public/index.html | 23 +++++-- 24 files changed, 426 insertions(+), 269 deletions(-) diff --git a/examples/bandwidthconstraints/public/index.css b/examples/bandwidthconstraints/public/index.css index 85420721..bc2addd4 100644 --- a/examples/bandwidthconstraints/public/index.css +++ b/examples/bandwidthconstraints/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,11 +34,11 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } -div.col-sm-8, div.col-sm-4 { - height: 100%; +div.col-sm-6, div.col-sm-6 { + height: fit-content; } pre.language-javascript { @@ -52,22 +64,8 @@ div.input-group > select { width: 100%; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card:first-child { - height: 30%; -} - -div.col-sm-4 > .card:last-child { - height: 70%; -} - div#audiowaveform { position: absolute; - left: 20px; - top: 58px; width: 20%; height: 20%; background-color: darkgrey !important; diff --git a/examples/bandwidthconstraints/public/index.html b/examples/bandwidthconstraints/public/index.html index a51701d8..d5a6ad95 100644 --- a/examples/bandwidthconstraints/public/index.html +++ b/examples/bandwidthconstraints/public/index.html @@ -4,30 +4,36 @@ Bandwidth Constraints - +
-
-
+
+

Bandwidth Constraints

-

+            
+            
+

+            
-
+

Participant's Media

- +
@@ -67,5 +73,8 @@

Select Bandwidth Constraints

+ + + diff --git a/examples/codecpreferences/public/index.css b/examples/codecpreferences/public/index.css index 52429f9c..4ff57822 100644 --- a/examples/codecpreferences/public/index.css +++ b/examples/codecpreferences/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,11 +34,11 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } -div.col-sm-8, div.col-sm-4 { - height: 100%; +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; } pre.language-javascript { @@ -52,18 +64,6 @@ div.input-group > select { width: 100%; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card:first-child { - height: 30%; -} - -div.col-sm-4 > .card:last-child { - height: 70%; -} - div#audiowaveform { position: absolute; left: 20px; diff --git a/examples/codecpreferences/public/index.html b/examples/codecpreferences/public/index.html index 9d0fb464..3871c952 100644 --- a/examples/codecpreferences/public/index.html +++ b/examples/codecpreferences/public/index.html @@ -4,30 +4,36 @@ Codec Preferences - +
-
-
+
+

Codec Preferences

-

+            
+            
+

+            
-
+

Participant's Media

- +
@@ -69,5 +75,8 @@

Select Codec Preferences

+ + + diff --git a/examples/dominantspeaker/public/index.css b/examples/dominantspeaker/public/index.css index 80d34558..98841773 100644 --- a/examples/dominantspeaker/public/index.css +++ b/examples/dominantspeaker/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,11 +34,11 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } div.col-sm-6, div.col-sm-6 { - height: 100%; + max-height: fit-content; } div#remote-media { @@ -115,19 +127,10 @@ div.input-group > select { width: 100%; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card:first-child { - height: 30%; -} - -div.col-sm-4 > .card:last-child { - height: 70%; +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; } - @media (max-width: 900px) { div.col-sm-8, div.col-sm-4 { max-width: 100%; diff --git a/examples/dominantspeaker/public/index.html b/examples/dominantspeaker/public/index.html index b2889f8c..a3d43304 100644 --- a/examples/dominantspeaker/public/index.html +++ b/examples/dominantspeaker/public/index.html @@ -4,20 +4,26 @@ Dominant Speaker - +
-
+

Dominant Speaker Detection

-

+            
+            
+

+            
@@ -35,5 +41,8 @@
+ + + diff --git a/examples/localmediacontrols/public/index.css b/examples/localmediacontrols/public/index.css index 89a37d0f..62322a63 100644 --- a/examples/localmediacontrols/public/index.css +++ b/examples/localmediacontrols/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,7 +34,7 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } div.card { @@ -30,8 +42,8 @@ div.card { overflow-y: auto; } -div.col-sm-8 > .card { - height: 100%; +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; } @@ -60,20 +72,29 @@ div#userControls > button { align-items: center; margin:5px; border-radius: 8px; - transition-duration: 0.4s; + transition-duration: 0.4s; +} + +div#media-container { + display: grid; + grid-template-areas: 'content'; + width: 100% +} + +div#videopreview { + grid-area: content; + width: 100%; } div#audiopreview { - display: flex; - justify-content: center; - flex-wrap: wrap; - height: auto; + grid-area: content; + z-index: 1; + background-color: transparent; + padding: 2px 2px; width: 100%; - background-color: #fff; - text-align: center; - margin: auto; } + div#audiopreview > span > i#activeIcon { display: flex; font-size: 50px; @@ -83,17 +104,6 @@ div#audiopreview > span > i#inactiveIcon { display:none; } -div#videopreview { - display: flex; - justify-content: center; - flex-wrap: wrap; - height: 75%; - width: 75%; - background-color: #fff; - margin: auto; - width: 100%; -} - div#videopreview > video { width: 100%; background-color: lightgrey !important; diff --git a/examples/localmediacontrols/public/index.html b/examples/localmediacontrols/public/index.html index e6167d65..ce2c55f7 100644 --- a/examples/localmediacontrols/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -11,39 +11,47 @@
-
+

Enabling and Disabling Tracks

-

+            
+            
+

+            
-
+

Local Media Controls

- - + +

RemoteParticipant View

-
- - - - - - -
-
+
+
+
+
+ + + + + + +
@@ -52,5 +60,8 @@

RemoteParticipant View

+ + + diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 91c3692c..2ac19acc 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -19,7 +19,7 @@ let roomName = null; // Load the code snippet. const snippet = await getSnippet('./helpers.js'); const pre = document.querySelector('pre.language-javascript'); - + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); // Get the credentials to connect to the Room. @@ -47,35 +47,35 @@ let roomName = null; if(mute) { muteYourAudio(roomP1); muteAudioBtn.classList.add('muted'); - muteAudioBtn.innerText = 'Unmute Audio'; + muteAudioBtn.innerText = 'Enable Audio'; activeIcon.id = 'inactiveIcon'; inactiveIcon.id = 'activeIcon'; } else { unmuteYourAudio(roomP1); muteAudioBtn.classList.remove('muted'); - muteAudioBtn.innerText = 'Mute Audio'; + muteAudioBtn.innerText = 'Disable Audio'; activeIcon.id = 'inactiveIcon'; inactiveIcon.id = 'activeIcon'; } } - + muteVideoBtn.onclick = () => { const mute = !muteVideoBtn.classList.contains('muted'); - + if(mute) { muteYourVideo(roomP1); muteVideoBtn.classList.add('muted'); - muteVideoBtn.innerText = 'Start Video'; + muteVideoBtn.innerText = 'Enable Video'; } else { unmuteYourVideo(roomP1); muteVideoBtn.classList.remove('muted'); - muteVideoBtn.innerText = 'Stop Video'; + muteVideoBtn.innerText = 'Disable Video'; } } // Starts video upon P2 joining room - roomP2.on('trackSubscribed', (track => { + roomP2.on('trackSubscribed', track => { if (track.isEnabled) { if (track.kind === 'audio') { audioPreview.appendChild(track.attach()); @@ -83,22 +83,22 @@ let roomName = null; videoPreview.appendChild(track.attach()); } } + }); + + participantMutedOrUnmutedMedia(roomP2, track => { + track.detach().forEach(element => { + element.remove(); + }); + }, track => { + if (track.kind === 'audio') { + audioPreview.appendChild(track.attach()); + } + if (track.kind === 'video') { + videoPreview.appendChild(track.attach()); + } + }); - participantMutedOrUnmutedMedia(roomP2, track => { - track.detach().forEach(element => { - element.remove(); - }); - }, track => { - if (track.kind === 'audio') { - audioPreview.appendChild(track.attach()); - } - if (track.kind === 'video') { - videoPreview.appendChild(track.attach()); - } - }); - })); - - // Disconnect from the Room + // Disconnect from the Room window.onbeforeunload = () => { roomP1.disconnect(); roomP2.disconnect(); diff --git a/examples/localvideofilter/public/index.css b/examples/localvideofilter/public/index.css index b3555eda..a3edb028 100755 --- a/examples/localvideofilter/public/index.css +++ b/examples/localvideofilter/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,7 +34,7 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } div.col-sm-8, div.col-sm-4 { @@ -48,12 +60,8 @@ div.card { overflow-y: auto; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card { - height: 50%; +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; } video#videoinputfiltered, diff --git a/examples/localvideofilter/public/index.html b/examples/localvideofilter/public/index.html index 5c6dfeb8..d742dca0 100755 --- a/examples/localvideofilter/public/index.html +++ b/examples/localvideofilter/public/index.html @@ -5,24 +5,30 @@ Local Video Filter - +
-
-
+
+

Local Video Filter

-

+            
+            
+

+            
-
+

Local Video (raw)

@@ -45,5 +51,8 @@

Local Video (with filter)

+ + + diff --git a/examples/localvideosnapshot/public/index.css b/examples/localvideosnapshot/public/index.css index cc007ae4..52b9ab0b 100644 --- a/examples/localvideosnapshot/public/index.css +++ b/examples/localvideosnapshot/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,7 +34,11 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; +} + +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; } div.col-sm-8, div.col-sm-4 { @@ -48,14 +64,6 @@ div.card { overflow-y: auto; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card { - height: 50%; -} - canvas#snapshot, video#videoinputpreview { width: 100%; diff --git a/examples/localvideosnapshot/public/index.html b/examples/localvideosnapshot/public/index.html index 50dd0930..c1f82ac6 100644 --- a/examples/localvideosnapshot/public/index.html +++ b/examples/localvideosnapshot/public/index.html @@ -5,24 +5,30 @@ Local Video Snapshot - +
-
-
+
+

Local Video Snapshot

-

+            
+            
+

+            
-
+

Local Video

@@ -40,5 +46,8 @@

Snapshot

+ + + diff --git a/examples/mediadevices/public/index.css b/examples/mediadevices/public/index.css index a35f6470..8fbf2081 100644 --- a/examples/mediadevices/public/index.css +++ b/examples/mediadevices/public/index.css @@ -8,6 +8,23 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.card { + border: none; + max-height: min-content; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -29,11 +46,11 @@ div#remote-media video { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } -div.col-sm-8, div.col-sm-4 { - height: 100%; +div.col-sm-6, div.col-sm-6 { + height: fit-content; } pre.language-javascript { @@ -50,11 +67,6 @@ pre.language-javascript a:hover { text-decoration: none; } -div.card { - border: none; - overflow-y: auto; -} - div.input-group > select { width: 100%; } @@ -64,10 +76,6 @@ span.input-group-btn > button.btn.btn-primary.btn-sm { border-radius: 0; } -div.col-sm-8 > .card { - height: 100%; -} - div#audioinputwaveform { position: absolute; left: 20px; diff --git a/examples/mediadevices/public/index.html b/examples/mediadevices/public/index.html index 2d183473..58d14e2d 100644 --- a/examples/mediadevices/public/index.html +++ b/examples/mediadevices/public/index.html @@ -5,20 +5,26 @@ Media Device Selection - +
-
+

Media Device Selection

-

+            
+            
+

+            
@@ -78,5 +84,8 @@
+ + + diff --git a/examples/networkquality/public/index.css b/examples/networkquality/public/index.css index bf0be9b6..ebdd3ad0 100644 --- a/examples/networkquality/public/index.css +++ b/examples/networkquality/public/index.css @@ -8,6 +8,23 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.card { + border: none; + max-height: min-content; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,15 +39,15 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } div.col-sm-6, div.col-sm-6 { - height: 100%; + height: fit-content; } div#remotemedia { - display: flex; + display: grid; justify-content: flex-start; flex-wrap: wrap; height: auto; @@ -74,7 +91,7 @@ div#remotemedia textarea { } div#usercontrols { - display: flex; + display: grid; flex-direction: column; flex-wrap: wrap; width: 100%; @@ -105,28 +122,10 @@ pre.language-javascript a:hover { text-decoration: none; } -div.card { - border: none; - overflow-y: auto; -} - div.input-group > select { width: 100%; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card:first-child { - height: 30%; -} - -div.col-sm-4 > .card:last-child { - height: 70%; -} - - @media (max-width: 900px) { div.col-sm-8, div.col-sm-4 { max-width: 100%; diff --git a/examples/networkquality/public/index.html b/examples/networkquality/public/index.html index ea9bb0bd..d9afc034 100644 --- a/examples/networkquality/public/index.html +++ b/examples/networkquality/public/index.html @@ -4,20 +4,26 @@ Network Quality - +
-
+

Network Quality

-

+            
+            
+

+            
@@ -25,30 +31,32 @@

Set Network Quality Verbosity Levels

-
-
- -
- +
+ +
+ +
+ +
-
-
- -
- +
+ +
+ +
-
- - + + +
+ + + diff --git a/examples/reconnection/public/index.css b/examples/reconnection/public/index.css index 7881dc2c..fa87928c 100644 --- a/examples/reconnection/public/index.css +++ b/examples/reconnection/public/index.css @@ -8,6 +8,18 @@ body { height: 100%; } +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -22,11 +34,11 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } div.col-sm-6, div.col-sm-6 { - height: 100%; + max-height: fit-content; } div#remote-media { @@ -93,19 +105,6 @@ div.input-group > select { width: 100%; } -div.col-sm-8 > .card { - height: 100%; -} - -div.col-sm-4 > .card:first-child { - height: 30%; -} - -div.col-sm-4 > .card:last-child { - height: 70%; -} - - @media (max-width: 900px) { div.col-sm-8, div.col-sm-4 { max-width: 100%; diff --git a/examples/reconnection/public/index.html b/examples/reconnection/public/index.html index 8d8d0463..d666e82c 100644 --- a/examples/reconnection/public/index.html +++ b/examples/reconnection/public/index.html @@ -4,44 +4,55 @@ Reconnection States and Events - +
-
+

Reconnection States and Events

-

+            
+            
+

+            
-
Room state is:
-
Connected
-
Disconnected
-
Reconnecting
- -

- After you have created the Room, please either turn off your internet network for a little while - and then turn it back on, or switch between networks. The Twilio Video SDK will try to re-establish - connection to the Room, which will transition to the "connecting" state. Once reconnection is complete, - the Room will transition back to the "connected" state. +

Room state is:

+
+
Connected
+
Disconnected
+
Reconnecting
+ +

+ After you have created the Room, please either turn off your internet network for a little while + and then turn it back on, or switch between networks. The Twilio Video SDK will try to re-establish + connection to the Room, which will transition to the "connecting" state. Once reconnection is complete, + the Room will transition back to the "connected" state. - You can join other user to the room using button below. -

- + You can join other user to the room using button below. +

+ +
+ + + diff --git a/examples/remotereconnection/public/index.css b/examples/remotereconnection/public/index.css index da66e3a6..27ff2fd3 100644 --- a/examples/remotereconnection/public/index.css +++ b/examples/remotereconnection/public/index.css @@ -21,6 +21,10 @@ body { max-height: min-content; } +.align { + align-content: flex-start; +} + div.container-fluid { height: 100%; } @@ -35,7 +39,7 @@ div.row.thin-gutters { div.row.thin-gutters > .col, div.row.thin-gutters > [class*="col-"] { - padding: 0 2px; + padding: 8px 8px; } div.col-sm-6, div.col-sm-6 { diff --git a/examples/remotereconnection/public/index.html b/examples/remotereconnection/public/index.html index 945abd4e..1428121b 100644 --- a/examples/remotereconnection/public/index.html +++ b/examples/remotereconnection/public/index.html @@ -10,7 +10,7 @@
-
+
@@ -18,8 +18,8 @@

Remote Participant Reconnection States


diff --git a/examples/remotereconnection/src/index.js b/examples/remotereconnection/src/index.js
index 9dd19954..70d30d08 100644
--- a/examples/remotereconnection/src/index.js
+++ b/examples/remotereconnection/src/index.js
@@ -44,9 +44,13 @@ function getTracks(participant) {
   const credsP1 = await getRoomCredentials();
   const credsP2 = await getRoomCredentials();
 
+    // Create Local Tracks
+    const localTracks = await Video.createLocalTracks();
+
   // Create room instance and name for participants to join.
   const roomP1 = await Video.connect(credsP1.token, {
-    region: 'au1'
+    region: 'au1',
+    tracks: localTracks,
   });
 
   // Set room name for participant 2 to join.
@@ -55,7 +59,7 @@ function getTracks(participant) {
   // Appends video/audio tracks when LocalParticipant is connected.
   getTracks(roomP1.localParticipant).forEach(track => {
     p1Media.appendChild(track.attach());
-  })
+  });
 
   // Appends video/audio tracks when LocalParticipant is subscribed.
   roomP1.on('trackSubscribed', track => {
@@ -65,7 +69,8 @@ function getTracks(participant) {
   // Connecting remote participants.
   const roomP2 = await Video.connect(credsP2.token, {
     name: roomName,
-    region: 'au1'
+    region: 'au1',
+    tracks: localTracks
   });
 
   // Simulate reconnection button functionalities, adding in region in order to extend reconnection time
diff --git a/examples/screenshare/public/index.css b/examples/screenshare/public/index.css
index f4c3f7a4..f8eab111 100644
--- a/examples/screenshare/public/index.css
+++ b/examples/screenshare/public/index.css
@@ -8,6 +8,29 @@ body {
   height: 100%;
 }
 
+[data-toggle="collapse"].collapsed .if-not-collapsed {
+  display: none;
+}
+
+[data-toggle="collapse"]:not(.collapsed) .if-collapsed {
+  display: none;
+}
+
+.card {
+  border: none;
+  max-height: fit-content;
+  overflow-y: auto;
+}
+
+.align {
+  align-content: flex-start;
+}
+
+.card-body {
+  width: 640px;
+  max-width: fit-content;
+}
+
 div.container-fluid {
   height: 100%;
 }
@@ -22,13 +45,17 @@ div.row.thin-gutters {
 
 div.row.thin-gutters > .col,
 div.row.thin-gutters > [class*="col-"] {
-  padding: 0 2px;
+  padding: 8px 8px;
 }
 
 div.col-sm-8, div.col-sm-4 {
   height: 100%;
 }
 
+div.col-sm-6, div.col-sm-6 {
+  max-height: fit-content;
+}
+
 pre.language-javascript {
   font-family: 'Roboto Mono', monospace;
   font-size: 13px;
@@ -43,28 +70,18 @@ pre.language-javascript a:hover {
   text-decoration: none;
 }
 
-div.card {
-  border: none;
-  overflow-y: auto;
-}
-
-div.col-sm-8 > .card {
-  height: 100%;
-}
-
-div.col-sm-4 > .card:first-child {
-  height: 30%;
-}
-
-div.col-sm-4 > .card:last-child {
-  height: 70%;
-}
-
 video#screenpreview {
+  margin: auto;
   background-color: lightgrey !important;
   background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg');
   background-position: 50%;
   background-repeat: no-repeat;
+  min-width: 100%;
+  max-width: 100%;
+}
+
+.screenshare > .btn-block {
+  width:640px
 }
 
 @media (max-width: 900px) {
diff --git a/examples/screenshare/public/index.html b/examples/screenshare/public/index.html
index c067d9c0..41253321 100644
--- a/examples/screenshare/public/index.html
+++ b/examples/screenshare/public/index.html
@@ -5,20 +5,26 @@
   
   
   Share Your Screen
-  
+  
   
   
 
 
 
-
+

Share Your Screen

-

+          
+          
+

+          
@@ -26,14 +32,19 @@

Local Screen

- - - +
+ + + +

+ + + From 2182b4739912783554e16e2d3ea06853c36874b9 Mon Sep 17 00:00:00 2001 From: timmydoza Date: Mon, 22 Jun 2020 10:57:42 -0600 Subject: [PATCH 68/89] Fix deviceId accessor in mediadevices example (#117) --- examples/mediadevices/src/helpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/mediadevices/src/helpers.js b/examples/mediadevices/src/helpers.js index 9fe99b42..fd095e90 100644 --- a/examples/mediadevices/src/helpers.js +++ b/examples/mediadevices/src/helpers.js @@ -95,7 +95,7 @@ function applyVideoInputDeviceSelection(deviceId, video, room) { function ensureMediaPermissions() { return navigator.mediaDevices.enumerateDevices().then(function(devices) { return devices.every(function(device) { - return !(device.id && device.label); + return !(device.deviceId && device.label); }); }).then(function(shouldAskForMediaPermissions) { if (shouldAskForMediaPermissions) { From 4c09139adc1e60f932fce5df55159bba959c3d29 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Mon, 22 Jun 2020 11:56:43 -0700 Subject: [PATCH 69/89] JSDK-2820 Data Tracks Example (#134) * JSDK-2820 Starting files for DataTracks App * JSDK-2820 DataTracks example app Co-authored-by: joma --- .gitignore | 2 + examples/datatracks/public/index.css | 147 ++++++++++++ examples/datatracks/public/index.html | 70 ++++++ examples/datatracks/public/prism.css | 123 ++++++++++ examples/datatracks/src/helpers.js | 59 +++++ examples/datatracks/src/index.js | 221 ++++++++++++++++++ examples/index.html | 22 +- examples/localmediacontrols/public/index.html | 1 - examples/remotereconnection/src/index.js | 4 +- package.json | 2 + server/index.js | 3 +- 11 files changed, 643 insertions(+), 11 deletions(-) create mode 100644 examples/datatracks/public/index.css create mode 100644 examples/datatracks/public/index.html create mode 100644 examples/datatracks/public/prism.css create mode 100644 examples/datatracks/src/helpers.js create mode 100644 examples/datatracks/src/index.js diff --git a/.gitignore b/.gitignore index 2daed50d..346c3528 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ examples/reconnection/public/index.js examples/screenshare/public/index.js examples/localmediacontrols/public/index.js examples/remotereconnection/public/index.js +examples/datatracks/public/index.js # The generated helpers.js examples/bandwidthconstraints/public/helpers.js @@ -72,3 +73,4 @@ examples/reconnection/public/helpers.js examples/screenshare/public/helpers.js examples/localmediacontrols/public/helpers.js examples/remotereconnection/public/helpers.js +examples/datatracks/public/helpers.js diff --git a/examples/datatracks/public/index.css b/examples/datatracks/public/index.css new file mode 100644 index 00000000..c1f8ed3b --- /dev/null +++ b/examples/datatracks/public/index.css @@ -0,0 +1,147 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; + scroll-behavior: smooth; +} + +body { + height: 100%; +} + +[data-toggle='collapse'].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle='collapse']:not(.collapsed) .if-collapsed { + display: none; +} + +.card { + border: none; + max-height: fit-content; + overflow-y: auto; +} + +.btn:focus, +.btn:active { + outline: none !important; + box-shadow: none !important; +} + +.align { + align-content: flex-start; +} + +.card-body { + width: 640px; + max-width: fit-content; +} + +.card-title { + margin-bottom: 0px; +} + +.chat { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} + +div#p1-chat-log, +div#p2-chat-log { + border: 1px solid rgb(59, 59, 59); + border-radius: 5px 5px 5px 5px; + height: 120px; + overflow-y: scroll; + overflow-x: hidden; + width: 100%; + margin-top: 10px; + margin-bottom: 10px; +} + +p { + margin: unset; +} + +.P1 { + background-color: grey; +} + +.P2 { + background-color: lightgrey; +} + +#p1-usermsg, +#p2-usermsg { + width: 100%; +} + +.btn { + display: block; + margin-top: 10px; + margin-bottom: 10px; +} + +button#P1-msg-submit, +button#P2-msg-submit { + width: 100%; +} + +.col-sm-12 { + padding-left: 0%; + padding-right: 0%; +} + +form { + display: flex; + flex-wrap: wrap; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*='col-'] { + padding: 8px 8px; +} + +div.col-sm-6, +div.col-sm-6 { + max-height: fit-content; +} + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +#chat-log { + width: 25em; + height: 15em; + min-height: 100%; + max-height: 100%; + margin-top: 3.125em; + text-align: left; + padding: 1.5em; + overflow-y: scroll; +} diff --git a/examples/datatracks/public/index.html b/examples/datatracks/public/index.html new file mode 100644 index 00000000..3813bf41 --- /dev/null +++ b/examples/datatracks/public/index.html @@ -0,0 +1,70 @@ + + + + + + Data Tracks + + + + + +
+
+
+
+
+

+ Data Tracks +

+ +
+

+            
+
+
+
+
+
+
+
+
+

P1

+ +
+ +
+
+ + +
+
+
+
+
+
+
+

P2

+ +
+ +
+
+ + +
+
+
+
+
+
+
+ + + + + + diff --git a/examples/datatracks/public/prism.css b/examples/datatracks/public/prism.css new file mode 100644 index 00000000..8d846b2b --- /dev/null +++ b/examples/datatracks/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #87ceeb; + } + + .token.operator, + .token.punctuation { + color: #ff5555; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol, + .token.deleted { + color: #f92672; + } + + .token.boolean { + color: #55ff55; + } + + .token.number { + color: #cd5c5c; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #ff55ff; + } + + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #ff55ff; + } + + .token.function { + color: #ccc; + } + + .token.keyword { + color: #55ff55; + } + + .token.regex, + .token.important { + color: #fd971f; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } diff --git a/examples/datatracks/src/helpers.js b/examples/datatracks/src/helpers.js new file mode 100644 index 00000000..e65adfd2 --- /dev/null +++ b/examples/datatracks/src/helpers.js @@ -0,0 +1,59 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Connect to the given Room with a LocalDataTrack. + * @param {string} token - AccessToken for joining the Room + * @returns {CancelablePromise} + */ +async function connectToRoomWithDataTrack(token, roomName) { + const localDataTrack = new Video.LocalDataTrack({ + name: 'chat', + }); + + const room = await Video.connect(token, { + name: roomName, + tracks: [localDataTrack], + }); + + return room; +} + +/** + * Send a chat message using the given LocalDataTrack. + * @param {LocalDataTrack} dataTrack - The {@link LocalDataTrack} to send a message on + * @param {string} message - The message to be sent + */ +function sendChatMessage(dataTrack, message) { + dataTrack.send(message); +} + +/** + * Receive chat messages from RemoteParticipants in the given Room. + * @param {Room} room - The Room you are currently in + * @param {Function} onMessageReceived - Updates UI when a message is received + */ +function receiveChatMessages(room, onMessageReceived) { + room.participants.forEach(function(participant) { + participant.dataTracks.forEach(function(publication) { + if (publication.isSubscribed && publication.trackName === 'chat') { + publication.track.on('message', function(msg) { + onMessageReceived(msg, participant); + }); + } + }); + }); + + room.on('trackSubscribed', function(track, publication, participant) { + if (track.kind === 'data' && track.name === 'chat') { + track.on('message', function(msg) { + onMessageReceived(msg, participant); + }); + } + }); +} + +exports.connectToRoomWithDataTrack = connectToRoomWithDataTrack; +exports.sendChatMessage = sendChatMessage; +exports.receiveChatMessages = receiveChatMessages; diff --git a/examples/datatracks/src/index.js b/examples/datatracks/src/index.js new file mode 100644 index 00000000..fb3b9fea --- /dev/null +++ b/examples/datatracks/src/index.js @@ -0,0 +1,221 @@ +'use strict'; + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const getSnippet = require('../../util/getsnippet'); +const getRoomCredentials = require('../../util/getroomcredentials'); + +const { + sendChatMessage, + receiveChatMessages, + connectToRoomWithDataTrack, +} = require('./helpers'); + +const P1Connect = document.querySelector('input#p1-connectordisconnect'); +const P2Connect = document.querySelector('input#p2-connectordisconnect'); +const p1ChatLog = document.getElementById('p1-chat-log'); +const p2ChatLog = document.getElementById('p2-chat-log'); +const p1MsgText = document.getElementById('p1-usermsg'); +const p2MsgText = document.getElementById('p2-usermsg'); +const p1Form = document.getElementById('p1-form'); +const p2Form = document.getElementById('p2-form'); +const P1Submit = document.getElementById('P1-msg-submit'); +const P2Submit = document.getElementById('P2-msg-submit'); + +let roomName = 'Chat1'; +let roomP1 = null; +let roomP2 = null; + +/* + * Connect to or disconnect the Participant with media from the Room. + */ +async function connectToOrDisconnectFromRoom(event, id, room, roomName) { + event.preventDefault(); + return room + ? disconnectFromRoom(id, room) + : await connectToRoom(id, roomName); +} + +/** + * Connect the Participant with localVideoDiv to the Room. + */ +async function connectToRoom(id, roomName) { + const creds = await getRoomCredentials(); + const room = await connectToRoomWithDataTrack(creds.token, roomName); + id.value = 'Disconnect from Room'; + return room; +} + +/** + * Disconnect the Participant with media from the Room. + */ +function disconnectFromRoom(id, room) { + room.disconnect(); + id.value = 'Connect to Room'; + room = null; + return room; +} + +/** + * Creates messages for the chat log + */ +function createMessages(fromName, message) { + const pElement = document.createElement('p'); + pElement.className = 'text'; + pElement.classList.add(`${fromName}`); + pElement.innerText = `${fromName}: ${message}`; + return pElement; +} + +(async function() { + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + // Disabling Submit buttons until after a Participant connects to a room with published data tracks + P1Submit.disabled = true; + P2Submit.disabled = true; + + let P1localDataTrack = null; + + // P1 Submit Click Handler + function P1SubmitHandler(event) { + event.preventDefault(); + const msg = p1MsgText.value; + p1Form.reset(); + p1ChatLog.appendChild(createMessages('P1', msg)); + sendChatMessage(P1localDataTrack, msg); + p1ChatLog.scrollTop = p1ChatLog.scrollHeight; + } + + // P1 sends a text message over the Data Track + P1Submit.addEventListener('click', P1SubmitHandler); + + // Connect P1 + P1Connect.addEventListener('click', async event => { + event.preventDefault(); + + // Appends text to DOM + function appendText(text) { + p1ChatLog.appendChild(createMessages('P2', text)); + p1ChatLog.scrollTop = p1ChatLog.scrollHeight; + } + + // Connect P1 to Room + let room = await connectToOrDisconnectFromRoom( + event, + P1Connect, + roomP1, + roomName + ); + + if (room) { + roomP1 = room; + } else { + roomP1 = null; + P1localDataTrack = null; + P1Submit.disabled = true; + } + + if (roomP1) { + // Once the Data Track has been published, set the P1localDataTrack for use + roomP1.localParticipant.on('trackPublished', publication => { + if (publication.track.kind === 'data') { + P1localDataTrack = publication.track; + P1Submit.disabled = false; + } + }); + + // P1 to announce connected RemoteParticipants + roomP1.on('participantConnected', participant => { + appendText('has connected'); + }); + + // P1 Subscribe to tracks published by remoteParticipants and append them + receiveChatMessages(roomP1, appendText); + + // P1 to announce disconnected RemoteParticipants. + roomP1.on('participantDisconnected', participant => { + appendText('has disconnected'); + }); + } + }); + + let P2localDataTrack = null; + + // P2 Submit Click Handler + function P2SubmitHandler(event) { + event.preventDefault(); + const msg = p2MsgText.value; + p2Form.reset(); + p2ChatLog.appendChild(createMessages('P2', msg)); + sendChatMessage(P2localDataTrack, msg); + p2ChatLog.scrollTop = p2ChatLog.scrollHeight; + } + + // P2 sends a text message over the Data Track + P2Submit.addEventListener('click', P2SubmitHandler); + + // Connect P2 + P2Connect.addEventListener('click', async event => { + event.preventDefault(); + + // Appends text to DOM + function appendText(text) { + p2ChatLog.appendChild(createMessages('P1', text)); + p2ChatLog.scrollTop = p2ChatLog.scrollHeight; + } + + let room = await connectToOrDisconnectFromRoom( + event, + P2Connect, + roomP2, + roomName + ); + + if (room) { + roomP2 = room; + } else { + roomP2 = null; + P2localDataTrack = null; + P2Submit.disabled = true; + } + + if (roomP2) { + // Once the Data Track has been published, set the P2localDataTrack for use + roomP2.localParticipant.on('trackPublished', publication => { + if (publication.track.kind === 'data') { + P2localDataTrack = publication.track; + P2Submit.disabled = false; + } + }); + + // P2 to announce connected RemoteParticipants + roomP2.on('participantConnected', participant => { + appendText('has connected'); + }); + + // P2 Subscribe to tracks published by remoteParticipants and append them + receiveChatMessages(roomP2, appendText); + + // P2 to handle disconnected RemoteParticipants. + roomP2.on('participantDisconnected', participant => { + appendText('has disconnected'); + }); + } + }); + + // Disconnect from the Room on page unload. + window.onbeforeunload = function() { + if (roomP1) { + roomP1.disconnect(); + roomP1 = null; + } + if (roomP2) { + roomP2.disconnect(); + roomP2 = null; + } + }; +})(); diff --git a/examples/index.html b/examples/index.html index 28802685..6b193fcc 100644 --- a/examples/index.html +++ b/examples/index.html @@ -139,7 +139,7 @@

- - -
+
@@ -183,7 +179,19 @@

- This app demonstrates the RemoteParticipant Reconnection States and Events which can be used to update your application when somebody else is reconnecting to the Room. + This app demonstrates the RemoteParticipant Reconnection States and Events which can be used to update your application when somebody else is reconnecting to the Room. +

+
+

+
diff --git a/examples/localmediacontrols/public/index.html b/examples/localmediacontrols/public/index.html index ce2c55f7..699b8517 100644 --- a/examples/localmediacontrols/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -7,7 +7,6 @@ -
diff --git a/examples/remotereconnection/src/index.js b/examples/remotereconnection/src/index.js index 70d30d08..bfb9aba7 100644 --- a/examples/remotereconnection/src/index.js +++ b/examples/remotereconnection/src/index.js @@ -44,8 +44,8 @@ function getTracks(participant) { const credsP1 = await getRoomCredentials(); const credsP2 = await getRoomCredentials(); - // Create Local Tracks - const localTracks = await Video.createLocalTracks(); + // Create Local Tracks + const localTracks = await Video.createLocalTracks(); // Create room instance and name for participants to join. const roomP1 = await Video.connect(credsP1.token, { diff --git a/package.json b/package.json index 9164d88c..1521eb59 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js", "build:examples:localmediacontrols": "copyfiles -f examples/localmediacontrols/src/helpers.js examples/localmediacontrols/public && browserify examples/localmediacontrols/src/index.js > examples/localmediacontrols/public/index.js", "build:examples:remotereconnection": "copyfiles -f examples/remotereconnection/src/helpers.js examples/remotereconnection/public && browserify examples/remotereconnection/src/index.js > examples/remotereconnection/public/index.js", + "build:examples:datatracks": "copyfiles -f examples/datatracks/src/helpers.js examples/datatracks/public && browserify examples/datatracks/src/index.js > examples/datatracks/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", @@ -31,6 +32,7 @@ "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js", "clean:examples:localmediacontrols": "rimraf examples/localmediacontrols/public/index.js examples/localmediacontrols/public/helpers.js", "clean:examples:remotereconnection": "rimraf examples/remotereconnection/public/index.js examples/remotereconnection/public/helpers.js", + "clean:examples:datatracks": "rimraf examples/datatracks/public/index.js examples/datatracks/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, diff --git a/server/index.js b/server/index.js index a310dd56..5223eea9 100644 --- a/server/index.js +++ b/server/index.js @@ -34,7 +34,8 @@ const app = express(); 'reconnection', 'screenshare', 'localmediacontrols', - 'remotereconnection' + 'remotereconnection', + 'datatracks', ].forEach(example => { const examplePath = path.join(__dirname, `../examples/${example}/public`); From 044b8690cd574811af6f02b5bb2a7ddeb82e3423 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 7 Jul 2020 11:45:13 -0700 Subject: [PATCH 70/89] JSDK-2894 Media Devices Fix (#140) * JSDK-2894 Media Device Example Fix Co-authored-by: joma --- examples/mediadevices/src/helpers.js | 37 ++++++++++++++-------------- examples/mediadevices/src/index.js | 20 +++++++-------- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/examples/mediadevices/src/helpers.js b/examples/mediadevices/src/helpers.js index fd095e90..80d21b7a 100644 --- a/examples/mediadevices/src/helpers.js +++ b/examples/mediadevices/src/helpers.js @@ -15,23 +15,6 @@ function getDevicesOfKind(deviceInfos, kind) { }); } -/** - * Replace the existing LocalAudioTrack or LocalVideoTrack with - * a new one in the Room. - * @param {Room} room - The Room you have joined - * @param {LocalAudioTrack|LocalVideoTrack} track - The LocalTrack you want to switch to - * @returns {void} - */ -function switchLocalTracks(room, track) { - room.localParticipant.tracks.forEach(function(trackPublication) { - if (trackPublication.kind === track.kind) { - trackPublication.track.stop(); - room.localParticipant.unpublishTrack(trackPublication.track); - } - }); - room.localParticipant.publishTrack(track); -} - /** * Apply the selected audio output device. * @param {string} deviceId @@ -52,6 +35,14 @@ function applyAudioOutputDeviceSelection(deviceId, audio) { * @returns {Promise} */ function applyAudioInputDeviceSelection(deviceId, audio, room) { + // Stop and unpublish the existing LocalAudioTrack. + if (room) { + room.localParticipant.audioTracks.forEach(function(publication) { + publication.track.stop(); + publication.unpublish(); + }); + } + // Create the new LocalAudioTrack and publish it to the Room. return Video.createLocalAudioTrack({ deviceId: { exact: deviceId // NOTE: on ios safari - it respects the deviceId only if its exact. @@ -59,7 +50,7 @@ function applyAudioInputDeviceSelection(deviceId, audio, room) { }).then(function(localTrack) { localTrack.attach(audio); if (room) { - switchLocalTracks(room, localTrack); + return room.localParticipant.publishTrack(localTrack); } }).catch(function(error) { console.log('applyAudioInputDeviceSelection failed:', error); @@ -74,6 +65,14 @@ function applyAudioInputDeviceSelection(deviceId, audio, room) { * @returns {Promise} */ function applyVideoInputDeviceSelection(deviceId, video, room) { + // Stop and unpublish the existing LocalVideoTrack. + if (room) { + room.localParticipant.videoTracks.forEach(function(publication) { + publication.track.stop(); + publication.unpublish(); + }); + } + // Create the new LocalVideoTrack and publish it to the Room. return Video.createLocalVideoTrack({ deviceId: { exact: deviceId @@ -81,7 +80,7 @@ function applyVideoInputDeviceSelection(deviceId, video, room) { }).then(function(localTrack) { localTrack.attach(video); if (room) { - switchLocalTracks(room, localTrack); + return room.localParticipant.publishTrack(localTrack); } }).catch(function(error) { console.log('applyVideoInputDeviceSelection failed:', error); diff --git a/examples/mediadevices/src/index.js b/examples/mediadevices/src/index.js index f85ddb01..d0df3e02 100644 --- a/examples/mediadevices/src/index.js +++ b/examples/mediadevices/src/index.js @@ -120,7 +120,7 @@ function participantDisconnected(participant) { } // reads selected audio input, and updates preview and room to use the device. -function applyAudioInputDeviceChange(event) { +async function applyAudioInputDeviceChange(event) { var audio = document.querySelector('audio#audioinputpreview'); var waveformContainer = document.querySelector('div#audioinputwaveform'); if (event) { @@ -128,15 +128,15 @@ function applyAudioInputDeviceChange(event) { event.stopPropagation(); } - return applyAudioInputDeviceSelection(deviceSelections.audioinput.value, audio, someRoom).then(function() { - if (audio.srcObject) { - var canvas = waveformContainer.querySelector('canvas'); - waveform.setStream(audio.srcObject); - if (!canvas) { - waveformContainer.appendChild(waveform.element); - } + await applyAudioInputDeviceSelection(deviceSelections.audioinput.value, audio, someRoom); + + if (audio.srcObject) { + var canvas = waveformContainer.querySelector('canvas'); + waveform.setStream(audio.srcObject); + if (!canvas) { + waveformContainer.appendChild(waveform.element); } - }); + } } // reads selected video input, and updates preview and room to use the device. @@ -224,5 +224,3 @@ window.onbeforeunload = function() { someRoom = null; } }; - - From 9cf4585ffaed2bd04abd4876bdb60ccde260ac87 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 14 Jul 2020 19:45:49 -0700 Subject: [PATCH 71/89] JSDK-2867- Error Handling in Quickstart changes (#144) * JSDK-2867 Error handling recommendations added Co-authored-by: joma --- quickstart/src/selectroom.js | 4 +++- quickstart/src/showerror.js | 4 ++++ quickstart/src/userfriendlyerror.js | 22 +++++++++++++--------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/quickstart/src/selectroom.js b/quickstart/src/selectroom.js index 6e8a9a92..57a57c05 100644 --- a/quickstart/src/selectroom.js +++ b/quickstart/src/selectroom.js @@ -28,7 +28,9 @@ function selectRoom($modal, error) { } if (error) { - $alert.text(getUserFriendlyError(error)); + $alert.html(`
${error.name}${error.message + ? `: ${error.message}` + : ''}
${getUserFriendlyError(error)}`); $alert.css('display', ''); } else { $alert.css('display', 'none'); diff --git a/quickstart/src/showerror.js b/quickstart/src/showerror.js index a31d162b..f6d88b35 100644 --- a/quickstart/src/showerror.js +++ b/quickstart/src/showerror.js @@ -16,6 +16,10 @@ function showError($modal, error) { keyboard: false, show: true }); + + $('#show-error-label', $modal).text(`${error.name}${error.message + ? `: ${error.message}` + : ''}`); } module.exports = showError; diff --git a/quickstart/src/userfriendlyerror.js b/quickstart/src/userfriendlyerror.js index e18fbc01..b36e345a 100644 --- a/quickstart/src/userfriendlyerror.js +++ b/quickstart/src/userfriendlyerror.js @@ -2,24 +2,28 @@ const USER_FRIENDLY_ERRORS = { NotAllowedError: () => { - return 'The user did not give permission to access your media.'; + return 'Causes:
1. The user has denied permission for your app to access the input device either by dismissing the permission dialog or clicking on the "deny" button.
2. The user has denied permission for your app to access the input device in the browser settings.
' + +'
Solutions:
1. The user should reload your app and grant permission to access the input device.
2. The user should allow access to the input device in the browser settings and then reload your app.'; }, NotFoundError: () => { - return 'None of the available media types satisfied the given constraints.'; + return 'Cause:
1. The user has disabled the input device for the browser in the system settings.
2. The user\'s machine does not have such input device connected to it.
' + +'
Solution
1. The user should enable the input device for the browser in the system settings
2. The user should have atleast one input device connected.'; }, NotReadableError: () => { - return 'Could not access your media due to a hardware error.'; + return 'Cause:
The browser could not start media capture with the input device even after the user gave permission, probably because another app or tab has reserved the input device.
' + +'
Solution:
The user should close all other apps and tabs that have reserved the input device and reload your app, or worst case, restart the browser.'; }, OverconstrainedError: error => { return error.constraint === 'deviceId' - ? 'Your saved microphone or camera is no longer available.' - : 'Could not satisfy the requested media constraints. One of the reasons ' - + 'could be that your saved microphone or camera is no longer available.'; + ? 'Cause:
Your saved microphone or camera is no longer available.

Solution:
Please make sure the input device is connected to the machine.' + : 'Cause:
Could not satisfy the requested media constraints. One of the reasons ' + + 'could be that your saved microphone or camera is no longer available.

Solution:
Please make sure the input device is connected to the machine.'; }, TypeError: () => { - return 'navigator.mediaDevices does not exist. If you\'re' - + ' sure that your browser supports it, make sure your app is being served' - + 'either from localhost or an https domain.'; + return 'Cause:
navigator.mediaDevices does not exist.
' + + '
Solution:
If you\'re sure that the browser supports ' + + 'navigator.mediaDevices, make sure your app is being served ' + + 'from a secure context (localhost or an https domain).'; } }; From b2da4f000e519ab1acb280dff09d0325fcc8a9cd Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Mon, 20 Jul 2020 17:39:53 -0700 Subject: [PATCH 72/89] JSDK-2911 Update MediaDevices example to use track.restart (#145) * JSDK-2911 Updated Media Devices app to use restart Co-authored-by: joma --- examples/mediadevices/src/helpers.js | 83 +++++----------------------- examples/mediadevices/src/index.js | 58 ++++++++++--------- package.json | 2 +- 3 files changed, 45 insertions(+), 98 deletions(-) diff --git a/examples/mediadevices/src/helpers.js b/examples/mediadevices/src/helpers.js index 80d21b7a..68407b16 100644 --- a/examples/mediadevices/src/helpers.js +++ b/examples/mediadevices/src/helpers.js @@ -28,63 +28,22 @@ function applyAudioOutputDeviceSelection(deviceId, audio) { } /** - * Apply the selected audio input device. + * Apply the selected input device. * @param {string} deviceId - * @param {HTMLAudioElement} audio - * @param {Room} [room] - The Room, if you have already joined one - * @returns {Promise} + * @param {?LocalTrack} localTrack - LocalAudioTrack or LocalVideoTrack; if null, a new LocalTrack will be created. + * @param {'audio' | 'video'} kind + * @returns {Promise} - The created or restarted LocalTrack */ -function applyAudioInputDeviceSelection(deviceId, audio, room) { - // Stop and unpublish the existing LocalAudioTrack. - if (room) { - room.localParticipant.audioTracks.forEach(function(publication) { - publication.track.stop(); - publication.unpublish(); +function applyInputDeviceSelection(deviceId, localTrack, kind) { + var constraints = { deviceId: { exact: deviceId } }; + if (localTrack) { + return localTrack.restart(constraints).then(function() { + return localTrack; }); } - // Create the new LocalAudioTrack and publish it to the Room. - return Video.createLocalAudioTrack({ - deviceId: { - exact: deviceId // NOTE: on ios safari - it respects the deviceId only if its exact. - } - }).then(function(localTrack) { - localTrack.attach(audio); - if (room) { - return room.localParticipant.publishTrack(localTrack); - } - }).catch(function(error) { - console.log('applyAudioInputDeviceSelection failed:', error); - }); -} - -/** - * Apply the selected video input device. - * @param {string} deviceId - * @param {HTMLVideoElement} video - * @param {Room} [room] - The Room, if you have already joined one - * @returns {Promise} - */ -function applyVideoInputDeviceSelection(deviceId, video, room) { - // Stop and unpublish the existing LocalVideoTrack. - if (room) { - room.localParticipant.videoTracks.forEach(function(publication) { - publication.track.stop(); - publication.unpublish(); - }); - } - // Create the new LocalVideoTrack and publish it to the Room. - return Video.createLocalVideoTrack({ - deviceId: { - exact: deviceId - } - }).then(function(localTrack) { - localTrack.attach(video); - if (room) { - return room.localParticipant.publishTrack(localTrack); - } - }).catch(function(error) { - console.log('applyVideoInputDeviceSelection failed:', error); - }); + return kind === 'audio' + ? Video.createLocalAudioTrack(constraints) + : Video.createLocalVideoTrack(constraints); } /** @@ -129,22 +88,6 @@ function getDeviceSelectionOptions() { }); } -/** - * Connects to room using specified input devices - * @param {string} token - * @param {string} audioDeviceId - * @param {string} videoDeviceId - * @returns {Promise} - */ -function connectWithSelectedDevices(token, audioDeviceId, videoDeviceId) { - return Video.connect(token, { - audio: { deviceId: { exact: audioDeviceId } }, - video: { deviceId: { exact: videoDeviceId } } - }); -} - -module.exports.applyAudioInputDeviceSelection = applyAudioInputDeviceSelection; +module.exports.applyInputDeviceSelection = applyInputDeviceSelection; module.exports.applyAudioOutputDeviceSelection = applyAudioOutputDeviceSelection; -module.exports.applyVideoInputDeviceSelection = applyVideoInputDeviceSelection; -module.exports.connectWithSelectedDevices = connectWithSelectedDevices; module.exports.getDeviceSelectionOptions = getDeviceSelectionOptions; diff --git a/examples/mediadevices/src/index.js b/examples/mediadevices/src/index.js index d0df3e02..8375bca2 100644 --- a/examples/mediadevices/src/index.js +++ b/examples/mediadevices/src/index.js @@ -1,19 +1,20 @@ 'use strict'; +var Video = require('twilio-video'); var Prism = require('prismjs'); var getSnippet = require('../../util/getsnippet'); var helpers = require('./helpers'); var waveform = require('../../util/waveform'); -var applyAudioInputDeviceSelection = helpers.applyAudioInputDeviceSelection; +var applyInputDeviceSelection = helpers.applyInputDeviceSelection; var applyAudioOutputDeviceSelection = helpers.applyAudioOutputDeviceSelection; -var applyVideoInputDeviceSelection = helpers.applyVideoInputDeviceSelection; -const connectWithSelectedDevices = helpers.connectWithSelectedDevices; const connectOrDisconnect = document.querySelector('input#connectordisconnect'); const getRoomCredentials = require('../../util/getroomcredentials'); const mediaContainer = document.getElementById('remote-media'); const joinRoomBlock = document.querySelector('#joinRoom'); const roomNameText = document.querySelector('#roomName'); let someRoom = null; +let localAudioTrack = null; +let localVideoTrack = null; var getDeviceSelectionOptions = helpers.getDeviceSelectionOptions; @@ -121,36 +122,32 @@ function participantDisconnected(participant) { // reads selected audio input, and updates preview and room to use the device. async function applyAudioInputDeviceChange(event) { - var audio = document.querySelector('audio#audioinputpreview'); - var waveformContainer = document.querySelector('div#audioinputwaveform'); + const waveformContainer = document.querySelector('div#audioinputwaveform'); if (event) { event.preventDefault(); event.stopPropagation(); } - - await applyAudioInputDeviceSelection(deviceSelections.audioinput.value, audio, someRoom); - - if (audio.srcObject) { - var canvas = waveformContainer.querySelector('canvas'); - waveform.setStream(audio.srcObject); - if (!canvas) { - waveformContainer.appendChild(waveform.element); - } + localAudioTrack = await applyInputDeviceSelection(deviceSelections.audioinput.value, localAudioTrack, 'audio'); + const canvas = waveformContainer.querySelector('canvas'); + waveform.setStream(new MediaStream([localAudioTrack.mediaStreamTrack])); + if (!canvas) { + waveformContainer.appendChild(waveform.element); } + maybeEnableConnectButton(); + return localAudioTrack; } // reads selected video input, and updates preview and room to use the device. -function applyVideoInputDeviceChange(event) { - try { - var video = document.querySelector('video#videoinputpreview'); - applyVideoInputDeviceSelection(deviceSelections.videoinput.value, video, someRoom); - if (event) { - event.preventDefault(); - event.stopPropagation(); - } - } catch (error) { - console.log('videoInput apply failed:', error); +async function applyVideoInputDeviceChange(event) { + if (event) { + event.preventDefault(); + event.stopPropagation(); } + const video = document.querySelector('video#videoinputpreview'); + localVideoTrack = await applyInputDeviceSelection(deviceSelections.videoinput.value, localVideoTrack, 'video'); + localVideoTrack.attach(video); + maybeEnableConnectButton(); + return localVideoTrack; } // reads selected audio output, and updates preview to use the device. @@ -166,17 +163,21 @@ function applyAudioOutputDeviceChange(event) { event.stopPropagation(); } +function maybeEnableConnectButton() { + connectOrDisconnect.disabled = !(localAudioTrack && localVideoTrack); +} + async function connectOrDisconnectRoom(event) { - connectOrDisconnect.disabled = true; event.preventDefault(); event.stopPropagation(); if (someRoom) { someRoom.disconnect(); someRoom = null; } else { - const creds = await getRoomCredentials(); - someRoom = await connectWithSelectedDevices(creds.token, deviceSelections.audioinput.value, deviceSelections.videoinput.value); + someRoom = await Video.connect(creds.token, { + tracks: [localVideoTrack, localAudioTrack] + }); // sync the preview with connected tracks. applyVideoInputDeviceChange(); @@ -201,6 +202,9 @@ getSnippet('./helpers.js').then(function(snippet) { // setup device selections updateDeviceSelectionOptions(); +// Check if there are Tracks +maybeEnableConnectButton(); + // Whenever a media device is added or removed, update the list. navigator.mediaDevices.ondevicechange = updateDeviceSelectionOptions; diff --git a/package.json b/package.json index 1521eb59..f305fb0c 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.4.0" + "twilio-video": "^2.7.0" }, "devDependencies": { "browserify": "^14.3.0", From f71d413ffbeff044812f6002eb0120f0c5c2874c Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Fri, 2 Oct 2020 15:09:30 -0700 Subject: [PATCH 73/89] Updating twilio-video.js to 2.7.2. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f305fb0c..d3a260d1 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.7.0" + "twilio-video": "^2.7.2" }, "devDependencies": { "browserify": "^14.3.0", From cd40b43dfc429f71d239dac75e7b1db0d0301c38 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Wed, 27 Jan 2021 16:47:48 -0800 Subject: [PATCH 74/89] JSDK-3015 Adding in CDN for mute/unmute icons (#166) Co-authored-by: joma --- examples/localmediacontrols/public/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/localmediacontrols/public/index.html b/examples/localmediacontrols/public/index.html index 699b8517..353791db 100644 --- a/examples/localmediacontrols/public/index.html +++ b/examples/localmediacontrols/public/index.html @@ -5,6 +5,7 @@ Enabling and Disabling Tracks + From 023a46d47352e5711604711411cfbc68cd2d2081 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 16 Feb 2021 16:53:54 -0800 Subject: [PATCH 75/89] JSDK-3564 - Adding Remote view in screen share example (#170) * Updating quickstart to use twilio-video 2.11.0 * JSDK-3564 Adding remote view in screen sharing example Co-authored-by: joma --- examples/screenshare/public/index.html | 6 ++ examples/screenshare/src/index.js | 82 ++++++++++++++++++++++++-- package.json | 2 +- quickstart/src/index.js | 3 - quickstart/src/joinroom.js | 6 +- 5 files changed, 89 insertions(+), 10 deletions(-) diff --git a/examples/screenshare/public/index.html b/examples/screenshare/public/index.html index 41253321..20ce175f 100644 --- a/examples/screenshare/public/index.html +++ b/examples/screenshare/public/index.html @@ -38,6 +38,12 @@

Local Screen

+
+

Remote Screen

+
+ +
+
diff --git a/examples/screenshare/src/index.js b/examples/screenshare/src/index.js index a35b3fd1..b03384c9 100644 --- a/examples/screenshare/src/index.js +++ b/examples/screenshare/src/index.js @@ -1,12 +1,15 @@ 'use strict'; const Prism = require('prismjs'); +const Video = require('twilio-video'); const getSnippet = require('../../util/getsnippet'); +const getRoomCredentials = require('../../util/getroomcredentials'); const helpers = require('./helpers'); const createScreenTrack = helpers.createScreenTrack; const captureScreen = document.querySelector('button#capturescreen'); const screenPreview = document.querySelector('video#screenpreview'); const stopScreenCapture = document.querySelector('button#stopscreencapture'); +const remoteScreenPreview = document.querySelector('video.remote-screenpreview'); (async function() { // Load the code snippet. @@ -14,6 +17,22 @@ const stopScreenCapture = document.querySelector('button#stopscreencapture'); const pre = document.querySelector('pre.language-javascript'); pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + const logger = Video.Logger.getLogger('twilio-video'); + logger.setLevel('silent'); + + // Connect Local Participant (screen-sharer) to a room + const localCreds = await getRoomCredentials(); + const roomLocal = await Video.connect(localCreds.token, { + tracks: [] + }); + + // Connect Remote Participant (screen-viewer) to the room + const remoteCreds = await getRoomCredentials(); + const roomRemote = await Video.connect(remoteCreds.token, { + name: roomLocal.name, + tracks: [] + }); + // Hide the "Stop Capture Screen" button. stopScreenCapture.style.display = 'none'; @@ -25,8 +44,18 @@ const stopScreenCapture = document.querySelector('button#stopscreencapture'); // Create and preview your local screen. screenTrack = await createScreenTrack(720, 1280); screenTrack.attach(screenPreview); - // Show the "Capture Screen" button after screen capture stops. - screenTrack.on('stopped', toggleButtons); + + // Publish screen track to room + await roomLocal.localParticipant.publishTrack(screenTrack); + + // When screen sharing is stopped, unpublish the screen track. + screenTrack.on('stopped', () => { + if (roomLocal) { + roomLocal.localParticipant.unpublishTrack(screenTrack); + } + toggleButtons(); + }); + // Show the "Stop Capture Screen" button. toggleButtons(); } catch (e) { @@ -34,13 +63,56 @@ const stopScreenCapture = document.querySelector('button#stopscreencapture'); } }; - stopScreenCapture.onclick = function() { - // Stop capturing your screen. - screenTrack.stop(); + // Stop capturing your screen. + const stopScreenSharing = () => screenTrack.stop(); + + stopScreenCapture.onclick = stopScreenSharing; + + // Remote Participant handles screen share track + if(roomRemote) { + roomRemote.on('trackPublished', publication => { + onTrackPublished('publish', publication, remoteScreenPreview); + }); + + roomRemote.on('trackUnpublished', publication => { + onTrackPublished('unpublish', publication, remoteScreenPreview); + }); } + + // Disconnect from the Room on page unload. + window.onbeforeunload = function() { + if (roomLocal) { + roomLocal.disconnect(); + roomLocal = null; + } + if (roomRemote) { + roomRemote.disconnect(); + roomRemote = null; + } + }; }()); function toggleButtons() { captureScreen.style.display = captureScreen.style.display === 'none' ? '' : 'none'; stopScreenCapture.style.display = stopScreenCapture.style.display === 'none' ? '' : 'none'; } + +function onTrackPublished(publishType, publication, view) { + if (publishType === 'publish') { + if (publication.track) { + publication.track.attach(view); + } + + publication.on('subscribed', track => { + track.attach(view); + }); + } else if (publishType === 'unpublish') { + if (publication.track) { + publication.track.detach(view); + } + + publication.on('subscribed', track => { + track.detach(view); + }); + } +} diff --git a/package.json b/package.json index d3a260d1..505862fb 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.7.2" + "twilio-video": "^2.11.0" }, "devDependencies": { "browserify": "^14.3.0", diff --git a/quickstart/src/index.js b/quickstart/src/index.js index cf852acb..b5eda738 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -36,9 +36,6 @@ const connectOptions = { // https://www.twilio.com/console/video/configure dominantSpeaker: true, - // Comment this line to disable verbose logging. - logLevel: 'debug', - // Comment this line if you are playing music. maxAudioBitrate: 16000, diff --git a/quickstart/src/joinroom.js b/quickstart/src/joinroom.js index d9200882..0f2cdf4b 100644 --- a/quickstart/src/joinroom.js +++ b/quickstart/src/joinroom.js @@ -1,6 +1,6 @@ 'use strict'; -const { connect, createLocalVideoTrack } = require('twilio-video'); +const { connect, createLocalVideoTrack, Logger } = require('twilio-video'); const { isMobile } = require('./browser'); const $leave = $('#leave-room'); @@ -218,6 +218,10 @@ function trackPublished(publication, participant) { * @param connectOptions - the ConnectOptions used to join a Room */ async function joinRoom(token, connectOptions) { + // Comment the next two lines to disable verbose logging. + const logger = Logger.getLogger('twilio-video'); + logger.setLevel('debug'); + // Join to the Room with the given AccessToken and ConnectOptions. const room = await connect(token, connectOptions); From d591843db77319cbf17e6b8d055f80aa6697626b Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 23 Feb 2021 11:20:05 -0800 Subject: [PATCH 76/89] VIDEO-3563 Small patch to fix audio level indicator (#171) * VIDEO-3563 Small patch to audio level indicator Co-authored-by: joma --- quickstart/src/index.js | 8 ++-- quickstart/src/miclevel.js | 84 +++++++++++++++++++++-------------- quickstart/src/selectmedia.js | 2 +- 3 files changed, 56 insertions(+), 38 deletions(-) diff --git a/quickstart/src/index.js b/quickstart/src/index.js index b5eda738..7b776532 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -114,9 +114,9 @@ async function selectAndJoinRoom(error = null) { async function selectCamera() { if (deviceIds.video === null) { try { - deviceIds.video = await selectMedia('video', $selectCameraModal, stream => { + deviceIds.video = await selectMedia('video', $selectCameraModal, videoTrack => { const $video = $('video', $selectCameraModal); - $video.get(0).srcObject = stream; + videoTrack.attach($video.get(0)) }); } catch (error) { showError($showErrorModal, error); @@ -132,10 +132,10 @@ async function selectCamera() { async function selectMicrophone() { if (deviceIds.audio === null) { try { - deviceIds.audio = await selectMedia('audio', $selectMicModal, stream => { + deviceIds.audio = await selectMedia('audio', $selectMicModal, audioTrack => { const $levelIndicator = $('svg rect', $selectMicModal); const maxLevel = Number($levelIndicator.attr('height')); - micLevel(stream, maxLevel, level => $levelIndicator.attr('y', maxLevel - level)); + micLevel(audioTrack, maxLevel, level => $levelIndicator.attr('y', maxLevel - level)); }); } catch (error) { showError($showErrorModal, error); diff --git a/quickstart/src/miclevel.js b/quickstart/src/miclevel.js index 7153c324..e5e2e161 100644 --- a/quickstart/src/miclevel.js +++ b/quickstart/src/miclevel.js @@ -15,39 +15,57 @@ function rootMeanSquare(samples) { /** * Poll the microphone's input level. - * @param stream - the MediaStream representing the microphone + * @param audioTrack - the AudioTrack representing the microphone * @param maxLevel - the calculated level should be in the range [0 - maxLevel] * @param onLevel - called when the input level changes */ -module.exports = audioContext ? function micLevel(stream, maxLevel, onLevel) { - audioContext.resume().then(() => { - const analyser = audioContext.createAnalyser(); - analyser.fftSize = 1024; - analyser.smoothingTimeConstant = 0.5; - - const source = audioContext.createMediaStreamSource(stream); - source.connect(analyser); - const samples = new Uint8Array(analyser.frequencyBinCount); - - const track = stream.getTracks()[0]; - let level = null; - - requestAnimationFrame(function checkLevel() { - analyser.getByteFrequencyData(samples); - const rms = rootMeanSquare(samples); - const log2Rms = rms && Math.log2(rms); - const newLevel = Math.ceil(maxLevel * log2Rms / 8); - - if (level !== newLevel) { - level = newLevel; - onLevel(level); - } - - requestAnimationFrame(track.readyState === 'ended' - ? () => onLevel(0) - : checkLevel); - }); - }); -} : function notSupported() { - // Do nothing. -}; +module.exports = audioContext + ? function micLevel(audioTrack, maxLevel, onLevel) { + audioContext.resume().then(() => { + let rafID; + + const initializeAnalyser = () => { + const analyser = audioContext.createAnalyser(); + analyser.fftSize = 1024; + analyser.smoothingTimeConstant = 0.5; + + const stream = new MediaStream([audioTrack.mediaStreamTrack]); + const audioSource = audioContext.createMediaStreamSource(stream); + const samples = new Uint8Array(analyser.frequencyBinCount); + + audioSource.connect(analyser); + startAnimation(analyser, samples); + }; + + initializeAnalyser(); + + // We listen to when the Audio Track is started, and once it is, + // the Analyser Node is restarted. + audioTrack.on('started', initializeAnalyser); + + let level = null; + + function startAnimation(analyser, samples) { + window.cancelAnimationFrame(rafID); + + rafID = requestAnimationFrame(function checkLevel() { + analyser.getByteFrequencyData(samples); + const rms = rootMeanSquare(samples); + const log2Rms = rms && Math.log2(rms); + const newLevel = Math.ceil((maxLevel * log2Rms) / 8); + + if (level !== newLevel) { + level = newLevel; + onLevel(level); + } + + rafID = requestAnimationFrame(audioTrack.mediaStreamTrack.readyState === 'ended' + ? () => onLevel(0) + : checkLevel); + }); + } + }); + } + : function notSupported() { + // Do nothing. + }; diff --git a/quickstart/src/selectmedia.js b/quickstart/src/selectmedia.js index 4b88e7da..463e6a65 100644 --- a/quickstart/src/selectmedia.js +++ b/quickstart/src/selectmedia.js @@ -25,7 +25,7 @@ async function applyInputDevice(kind, deviceId, render) { // Render the current LocalTrack. localTracks[kind] = track; - render(new MediaStream([track.mediaStreamTrack])); + render(track); } /** From 5e0079cca91133b17c0cf0b5c87ab69c1963ef72 Mon Sep 17 00:00:00 2001 From: Manjesh Malavalli Date: Thu, 4 Mar 2021 08:59:40 -0800 Subject: [PATCH 77/89] VIDEO-3525 - Adopt VideoProcessor API (#176) * VIDEO-3525 * Updating Local Video Filter example to use the VideoProcessor API on Chrome. * Refactoring the example for Firefox and Safari to remove inefficiencies. * Updating README.md to highlight the VideoProcessor API. --- .gitignore | 2 +- README.md | 3 +- examples/localvideofilter/src/filters.js | 2 +- .../src/helpers-video-processor.js | 76 +++++++++++++++++++ examples/localvideofilter/src/helpers.js | 44 ++++++++--- examples/localvideofilter/src/index.js | 12 ++- package.json | 6 +- 7 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 examples/localvideofilter/src/helpers-video-processor.js diff --git a/.gitignore b/.gitignore index 346c3528..bfd43d9f 100644 --- a/.gitignore +++ b/.gitignore @@ -65,7 +65,7 @@ examples/datatracks/public/index.js examples/bandwidthconstraints/public/helpers.js examples/codecpreferences/public/helpers.js examples/dominantspeaker/public/helpers.js -examples/localvideofilter/public/helpers.js +examples/localvideofilter/public/helpers*.js examples/localvideosnapshot/public/helpers.js examples/mediadevices/public/helpers.js examples/networkquality/public/helpers.js diff --git a/README.md b/README.md index 7e5e004a..a8313000 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -**NEW:** Please check out our [Best Practices Guide](https://www.twilio.com/docs/video/build-js-video-application-recommendations-and-best-practices) -for building video applications with twilio-video.js. +**NEW:** The [Local Video Filter](examples/localvideofilter) example has been updated to use the recently released [Video Processor API](https://github.com/twilio/twilio-video.js/releases/tag/2.13.0) for Chrome. # Twilio Video Quickstart for JavaScript diff --git a/examples/localvideofilter/src/filters.js b/examples/localvideofilter/src/filters.js index a740fbc5..f70e75f1 100755 --- a/examples/localvideofilter/src/filters.js +++ b/examples/localvideofilter/src/filters.js @@ -26,7 +26,7 @@ function grayscale(imageData) { var r = data[i]; var g = data[i + 1]; var b = data[i + 2]; - var gs = ((0.2126 * r) + (0.7152 * g) + (0.0722 * b)) / 3; + var gs = (r + g + b) / 3; data[i] = data[i + 1] = data[i + 2] = gs; } return imageData; diff --git a/examples/localvideofilter/src/helpers-video-processor.js b/examples/localvideofilter/src/helpers-video-processor.js new file mode 100644 index 00000000..5187fa96 --- /dev/null +++ b/examples/localvideofilter/src/helpers-video-processor.js @@ -0,0 +1,76 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Apply a filter to the frames of a LocalVideoTrack. + * @param {number} width - Width in pixels of the video frames + * @param {number} height - Height in pixels of the video frames + * @param {string} filterCSS - Filter CSS string + * @constructor + */ +function FilterVideoProcessor(width, height, filterCSS) { + this._outputFrame = new OffscreenCanvas(width, height); + this._outputContext = this._outputFrame.getContext('2d'); + this._outputContext.filter = filterCSS; +} + +/** + * Process a frame of the LocalVideoTrack. + * @param {OffscreenCanvas} inputFrame + * @returns {OffscreenCanvas} + */ +FilterVideoProcessor.prototype.processFrame = function processFrame(inputFrame) { + this._outputContext.drawImage(inputFrame, 0, 0); + return this._outputFrame; +}; + +/** + * Display local video in the given HTMLVideoElement. + * @param {HTMLVideoElement} video + * @returns {Promise} + */ +function displayLocalVideo(video) { + return Video.createLocalVideoTrack({ + width: 640, + height: 360 + }).then(function(localTrack) { + localTrack.attach(video); + }); +} + +/** + * The filtered LocalVideoTrack; + */ +var filteredLocalTrack; + +/** + * Apply the specified filter to the local video. + * @param {HTMLVideoElement} video - Raw video + * @param {HTMLVideoElement} filtered - Filtered video + * @param {'none' | 'blur' | 'grayscale' | 'sepia'} name - Filter name + */ +function filterLocalVideo(video, filtered, name) { + if (!filteredLocalTrack) { + var mediaStreamTrack = video.srcObject.getVideoTracks()[0]; + filteredLocalTrack = new Video.LocalVideoTrack(mediaStreamTrack); + filteredLocalTrack.attach(filtered); + } + + var processor = filteredLocalTrack.processor; + if (processor) { + filteredLocalTrack.removeProcessor(processor); + } + + if (name !== 'none') { + var filterCSS = name + '(' + (name === 'blur' ? '5px' : '100%') + ')'; + var settings = filteredLocalTrack.mediaStreamTrack.getSettings(); + var height = settings.height; + var width = settings.width; + processor = new FilterVideoProcessor(width, height, filterCSS); + filteredLocalTrack.addProcessor(processor); + } +} + +module.exports.displayLocalVideo = displayLocalVideo; +module.exports.filterLocalVideo = filterLocalVideo; diff --git a/examples/localvideofilter/src/helpers.js b/examples/localvideofilter/src/helpers.js index 8be5c39b..2e6dc97b 100755 --- a/examples/localvideofilter/src/helpers.js +++ b/examples/localvideofilter/src/helpers.js @@ -3,20 +3,26 @@ var Video = require('twilio-video'); var filters = require('./filters'); -var VIDEO_WIDTH = 320; -var VIDEO_HEIGHT = 240; - /** * Display local video in the given HTMLVideoElement. * @param {HTMLVideoElement} video * @returns {Promise} */ function displayLocalVideo(video) { - return Video.createLocalVideoTrack().then(function(localTrack) { + return Video.createLocalVideoTrack({ + width: 640, + height: 360 + }).then(function(localTrack) { localTrack.attach(video); }); } +/** + * The timeout for filtering a video frame. + * @type {number} + */ +var filterTimeout; + /** * Apply the specified filter to the local video. * @param {HTMLVideoElement} video - Raw video @@ -25,20 +31,34 @@ function displayLocalVideo(video) { */ function filterLocalVideo(video, filtered, name) { var canvas = document.createElement('canvas'); + var mediaStreamTrack = video.srcObject.getVideoTracks()[0]; + var settings = mediaStreamTrack.getSettings(); + canvas.width = settings.width; + canvas.height = settings.height; + var context = canvas.getContext('2d'); - canvas.width = VIDEO_WIDTH; - canvas.height = VIDEO_HEIGHT; + var filterValue = name === 'blur' ? '5px' : '100%'; + context.filter = name === 'none' ? '' : name + '(' + filterValue + ')'; + clearTimeout(filterTimeout); + + var isSafari = /Safari/.test(navigator.userAgent) + && !/Chrome/.test(navigator.userAgent); function filterVideoFrame() { - context.drawImage(video, 0, 0, canvas.width, canvas.height); - var imageData = context.getImageData(0, 0, canvas.width, canvas.height); - context.putImageData(filters[name](imageData), 0, 0); - requestAnimationFrame(filterVideoFrame); + var renderStartTime = Date.now(); + context.drawImage(video, 0, 0); + if (isSafari) { + var imageData = context.getImageData(0, 0, canvas.width, canvas.height); + context.putImageData(filters[name](imageData), 0, 0); + } + var renderDelay = Date.now() - renderStartTime; + var interFrameDelay = Math.round(1000 / settings.frameRate); + filterTimeout = setTimeout(filterVideoFrame, interFrameDelay - renderDelay); } - var stream = canvas.captureStream(30); + var stream = canvas.captureStream(settings.frameRate); filtered.srcObject = stream; - requestAnimationFrame(filterVideoFrame); + filterTimeout = setTimeout(filterVideoFrame); } module.exports.displayLocalVideo = displayLocalVideo; diff --git a/examples/localvideofilter/src/index.js b/examples/localvideofilter/src/index.js index 5d910f16..0ebd9522 100755 --- a/examples/localvideofilter/src/index.js +++ b/examples/localvideofilter/src/index.js @@ -2,7 +2,11 @@ var Prism = require('prismjs'); var getSnippet = require('../../util/getsnippet'); -var helpers = require('./helpers'); + +var helpers = typeof OffscreenCanvas === 'undefined' + ? require('./helpers') + : require('./helpers-video-processor'); + var displayLocalVideo = helpers.displayLocalVideo; var filterLocalVideo = helpers.filterLocalVideo; @@ -11,7 +15,11 @@ var video = document.querySelector('video#videoinputpreview'); var filtered = document.querySelector('video#videoinputfiltered'); // Load the code snippet. -getSnippet('./helpers.js').then(function(snippet) { +getSnippet( + typeof OffscreenCanvas === 'undefined' + ? './helpers.js' + : './helpers-video-processor.js' +).then(function(snippet) { var pre = document.querySelector('pre.language-javascript'); pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); }); diff --git a/package.json b/package.json index 505862fb..e5f9c8db 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build:examples:bandwidthconstraints": "copyfiles -f examples/bandwidthconstraints/src/helpers.js examples/bandwidthconstraints/public && browserify examples/bandwidthconstraints/src/index.js > examples/bandwidthconstraints/public/index.js", "build:examples:codecpreferences": "copyfiles -f examples/codecpreferences/src/helpers.js examples/codecpreferences/public && browserify examples/codecpreferences/src/index.js > examples/codecpreferences/public/index.js", "build:examples:dominantspeaker": "copyfiles -f examples/dominantspeaker/src/helpers.js examples/dominantspeaker/public && browserify examples/dominantspeaker/src/index.js > examples/dominantspeaker/public/index.js", - "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js", + "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers*.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js", "build:examples:localvideosnapshot": "copyfiles -f examples/localvideosnapshot/src/helpers.js examples/localvideosnapshot/public && browserify examples/localvideosnapshot/src/index.js > examples/localvideosnapshot/public/index.js", "build:examples:mediadevices": "copyfiles -f examples/mediadevices/src/helpers.js examples/mediadevices/public && browserify examples/mediadevices/src/index.js > examples/mediadevices/public/index.js", "build:examples:networkquality": "copyfiles -f examples/networkquality/src/helpers.js examples/networkquality/public && browserify examples/networkquality/src/index.js > examples/networkquality/public/index.js", @@ -24,7 +24,7 @@ "clean:examples:bandwidthconstraints": "rimraf examples/bandwidthconstraints/public/index.js examples/bandwidthconstraints/public/helpers.js", "clean:examples:codecpreferences": "rimraf examples/codecpreferences/public/index.js examples/codecpreferences/public/helpers.js", "clean:examples:dominantspeaker": "rimraf examples/dominantspeaker/public/index.js examples/dominantspeaker/public/helpers.js", - "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers.js", + "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers*.js", "clean:examples:localvideosnapshot": "rimraf examples/localvideosnapshot/public/index.js examples/localvideosnapshot/public/helpers.js", "clean:examples:mediadevices": "rimraf examples/mediadevices/public/index.js examples/mediadevices/public/helpers.js", "clean:examples:networkquality": "rimraf examples/networkquality/public/index.js examples/networkquality/public/helpers.js", @@ -61,7 +61,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.11.0" + "twilio-video": "^2.13.0" }, "devDependencies": { "browserify": "^14.3.0", From 920968b0742ac31fd005766a5f5b3a97298c563c Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Thu, 8 Apr 2021 15:34:28 -0700 Subject: [PATCH 78/89] VIDEO-3928 Fix LocalVideoSnapshot (#180) * Adding ImageCapture API to LocalVideoSnapshot example Co-authored-by: joma --- examples/localvideosnapshot/public/index.css | 8 ++++- examples/localvideosnapshot/public/index.html | 3 +- examples/localvideosnapshot/src/helpers.js | 17 +++++++---- examples/localvideosnapshot/src/index.js | 29 ++++++++++++++----- 4 files changed, 43 insertions(+), 14 deletions(-) diff --git a/examples/localvideosnapshot/public/index.css b/examples/localvideosnapshot/public/index.css index 52b9ab0b..5c7175b4 100644 --- a/examples/localvideosnapshot/public/index.css +++ b/examples/localvideosnapshot/public/index.css @@ -64,9 +64,15 @@ div.card { overflow-y: auto; } -canvas#snapshot, +.hidden { + display: none; +} + +canvas.snapshot-canvas, +img.snapshot-img, video#videoinputpreview { width: 100%; + height: 100%; background-color: lightgrey !important; background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); background-position: 50%; diff --git a/examples/localvideosnapshot/public/index.html b/examples/localvideosnapshot/public/index.html index c1f82ac6..e2eb2a6d 100644 --- a/examples/localvideosnapshot/public/index.html +++ b/examples/localvideosnapshot/public/index.html @@ -39,7 +39,8 @@

Local Video

Snapshot

- + +
diff --git a/examples/localvideosnapshot/src/helpers.js b/examples/localvideosnapshot/src/helpers.js index c222039b..237919db 100644 --- a/examples/localvideosnapshot/src/helpers.js +++ b/examples/localvideosnapshot/src/helpers.js @@ -10,6 +10,7 @@ var Video = require('twilio-video'); function displayLocalVideo(video) { return Video.createLocalVideoTrack().then(function(localTrack) { localTrack.attach(video); + return localTrack; }); } @@ -17,12 +18,18 @@ function displayLocalVideo(video) { * Take snapshot of the local video from the HTMLVideoElement and render it * in the HTMLCanvasElement. * @param {HTMLVideoElement} video - * @param {HTMLCanvasElement} canvas + * @param {LocalVideoTrack} localVideoTrack + * @param {HTMLCanvasElement|HTMLImageElement} snapshot */ -function takeLocalVideoSnapshot(video, canvas) { - var context = canvas.getContext('2d'); - context.clearRect(0, 0, canvas.width, canvas.height); - context.drawImage(video, 0, 0, canvas.width, canvas.height); + function takeLocalVideoSnapshot(video, localVideoTrack, snapshot) { + if (window.ImageCapture) { + const imageCapture = new ImageCapture(localVideoTrack.mediaStreamTrack); + imageCapture.takePhoto().then(function(blob) { + snapshot.src = URL.createObjectURL(blob); + }); + } else { + snapshot.getContext('2d').drawImage(video, 0, 0); + } } module.exports.displayLocalVideo = displayLocalVideo; diff --git a/examples/localvideosnapshot/src/index.js b/examples/localvideosnapshot/src/index.js index a46b2b6d..09df08b4 100644 --- a/examples/localvideosnapshot/src/index.js +++ b/examples/localvideosnapshot/src/index.js @@ -6,13 +6,27 @@ var helpers = require('./helpers'); var displayLocalVideo = helpers.displayLocalVideo; var takeLocalVideoSnapshot = helpers.takeLocalVideoSnapshot; -var canvas = document.querySelector('canvas#snapshot'); +var canvas = document.querySelector('.snapshot-canvas'); +var img = document.querySelector('.snapshot-img'); var takeSnapshot = document.querySelector('button#takesnapshot'); var video = document.querySelector('video#videoinputpreview'); +let videoTrack; +let el; + +// Show image or canvas +window.onload = function() { + el = window.ImageCapture ? img : canvas; + el.classList.remove('hidden'); + if(videoTrack) { + setSnapshotSizeToVideo(el, videoTrack); + } +} + // Set the canvas size to the video size. -function setCanvasSizeToVideo(canvas, video) { - canvas.style.height = video.clientHeight + 'px'; +function setSnapshotSizeToVideo(snapshot, video) { + snapshot.width = video.dimensions.width; + snapshot.height = video.dimensions.height; } // Load the code snippet. @@ -22,15 +36,16 @@ getSnippet('./helpers.js').then(function(snippet) { }); // Request the default LocalVideoTrack and display it. -displayLocalVideo(video).then(function() { +displayLocalVideo(video).then(function(localVideoTrack) { // Display a snapshot of the LocalVideoTrack on the canvas. + videoTrack = localVideoTrack; takeSnapshot.onclick = function() { - setCanvasSizeToVideo(canvas, video); - takeLocalVideoSnapshot(video, canvas); + setSnapshotSizeToVideo(el, localVideoTrack); + takeLocalVideoSnapshot(video, localVideoTrack, el); }; }); // Resize the canvas to the video size whenever window is resized. window.onresize = function() { - setCanvasSizeToVideo(canvas, video); + setSnapshotSizeToVideo(el, videoTrack); }; From e9b198fbec28eb5867307b23c7a407e2b1382ffb Mon Sep 17 00:00:00 2001 From: Kevin Whinnery Date: Tue, 20 Apr 2021 18:16:13 -0500 Subject: [PATCH 79/89] use only positive adjectives (#181) --- examples/util/getroomcredentials.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/util/getroomcredentials.js b/examples/util/getroomcredentials.js index a831311f..572d6c85 100644 --- a/examples/util/getroomcredentials.js +++ b/examples/util/getroomcredentials.js @@ -1,10 +1,10 @@ 'use strict'; const ADJECTIVES = [ - 'Abrasive', 'Brash', 'Callous', 'Daft', 'Eccentric', 'Fiesty', 'Golden', - 'Holy', 'Ignominious', 'Joltin', 'Killer', 'Luscious', 'Mushy', 'Nasty', - 'OldSchool', 'Pompous', 'Quiet', 'Rowdy', 'Sneaky', 'Tawdry', - 'Unique', 'Vivacious', 'Wicked', 'Xenophobic', 'Yawning', 'Zesty' + 'Awesome', 'Bold', 'Creative', 'Dapper', 'Eccentric', 'Fiesty', 'Golden', + 'Holy', 'Ignominious', 'Jolly', 'Kindly', 'Lucky', 'Mushy', 'Natural', + 'Oaken', 'Precise', 'Quiet', 'Rowdy', 'Sunny', 'Tall', + 'Unique', 'Vivid', 'Wonderful', 'Xtra', 'Yawning', 'Zesty' ]; const FIRST_NAMES = [ From 59627b4f5fdd03da9a322fc6da63482de7aa0d7d Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Thu, 13 May 2021 14:23:32 -0700 Subject: [PATCH 80/89] VIDEO-5326 Removing renderConnectOptions replacing with new hints config (#182) Co-authored-by: joma --- quickstart/src/index.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/quickstart/src/index.js b/quickstart/src/index.js index 7b776532..1c111218 100644 --- a/quickstart/src/index.js +++ b/quickstart/src/index.js @@ -24,10 +24,8 @@ const connectOptions = { video: { dominantSpeakerPriority: 'high', mode: 'collaboration', - renderDimensions: { - high: { height: 720, width: 1280 }, - standard: { height: 90, width: 160 } - } + clientTrackSwitchOffControl: 'auto', + contentPreferencesMode: 'auto' } }, From de923f101b5cd8493eb94a11f78f1fb8f97b32e8 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 15 Jun 2021 16:12:39 -0700 Subject: [PATCH 81/89] VIDEO-5327 Manual Render Hints example (#183) * VIDEO-5327 Adding manual render hints example. Co-authored-by: joma --- .gitignore | 2 + examples/index.html | 18 +++ examples/localmediacontrols/public/prism.css | 37 +++-- examples/renderhint/public/index.css | 113 +++++++++++++ examples/renderhint/public/index.html | 72 +++++++++ examples/renderhint/public/prism.css | 123 ++++++++++++++ examples/renderhint/src/helpers.js | 53 ++++++ examples/renderhint/src/index.js | 160 +++++++++++++++++++ package.json | 4 +- server/index.js | 2 +- 10 files changed, 563 insertions(+), 21 deletions(-) create mode 100644 examples/renderhint/public/index.css create mode 100644 examples/renderhint/public/index.html create mode 100644 examples/renderhint/public/prism.css create mode 100644 examples/renderhint/src/helpers.js create mode 100644 examples/renderhint/src/index.js diff --git a/.gitignore b/.gitignore index bfd43d9f..9265ba5e 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,7 @@ examples/screenshare/public/index.js examples/localmediacontrols/public/index.js examples/remotereconnection/public/index.js examples/datatracks/public/index.js +examples/renderhint/public/index.js # The generated helpers.js examples/bandwidthconstraints/public/helpers.js @@ -74,3 +75,4 @@ examples/screenshare/public/helpers.js examples/localmediacontrols/public/helpers.js examples/remotereconnection/public/helpers.js examples/datatracks/public/helpers.js +examples/renderhint/public/helpers.js diff --git a/examples/index.html b/examples/index.html index 6b193fcc..11407e07 100644 --- a/examples/index.html +++ b/examples/index.html @@ -197,6 +197,24 @@

+
+
+
+ +

+ Video Track Manual Controls +

+
+
+

+ This app demonstrates the manual modes of the clientTrackSwitchOffControl and + contentPreferencesMode features. + Which can be used to efficiently utilize CPU and bandwidth. +

+
+
+
+
diff --git a/examples/localmediacontrols/public/prism.css b/examples/localmediacontrols/public/prism.css index d8d7c2f3..8d846b2b 100644 --- a/examples/localmediacontrols/public/prism.css +++ b/examples/localmediacontrols/public/prism.css @@ -17,17 +17,17 @@ word-break: normal; word-wrap: normal; line-height: 1.5; - + -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; - + -webkit-hyphens: none; -moz-hyphens: none; -ms-hyphens: none; hyphens: none; } - + /* Code blocks */ pre[class*="language-"] { padding: 1em; @@ -35,35 +35,35 @@ overflow: auto; border-radius: 0.3em; } - + :not(pre) > code[class*="language-"], pre[class*="language-"] { background: #272822; } - + /* Inline code */ :not(pre) > code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; } - + .token.comment, .token.prolog, .token.doctype, .token.cdata { color: #87ceeb; } - + .token.operator, .token.punctuation { color: #ff5555; } - + .namespace { opacity: .7; } - + .token.property, .token.tag, .token.constant, @@ -71,15 +71,15 @@ .token.deleted { color: #f92672; } - + .token.boolean { color: #55ff55; } - + .token.number { color: #cd5c5c; } - + .token.selector, .token.attr-name, .token.string, @@ -88,7 +88,7 @@ .token.inserted { color: #ff55ff; } - + .token.entity, .token.url, .language-css .token.string, @@ -96,20 +96,20 @@ .token.variable { color: #ff55ff; } - + .token.function { color: #ccc; } - + .token.keyword { color: #55ff55; } - + .token.regex, .token.important { color: #fd971f; } - + .token.important, .token.bold { font-weight: bold; @@ -117,8 +117,7 @@ .token.italic { font-style: italic; } - + .token.entity { cursor: help; } - \ No newline at end of file diff --git a/examples/renderhint/public/index.css b/examples/renderhint/public/index.css new file mode 100644 index 00000000..1bcd12be --- /dev/null +++ b/examples/renderhint/public/index.css @@ -0,0 +1,113 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 8px 8px; +} + +div.card { + border: none; + overflow-y: auto; +} + +div.card-block { + margin: 5px; +} + +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; +} + + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +div#media-container { + position: relative; + display: grid; + grid-template-areas: 'content'; + max-width: 100%; +} + +span#trackIsSwitchedOff { + position: absolute; + z-index: 3; + width: 67px; + font-size: .9em; + right: 1%; + top: 1%; + align-items: center; + max-width: max-content; +} + +video { + width: 100% !important; + height: auto !important; +} + +div.bitrategraph { + margin-top: 5px; + text-align: center; +} + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/renderhint/public/index.html b/examples/renderhint/public/index.html new file mode 100644 index 00000000..e536bdd7 --- /dev/null +++ b/examples/renderhint/public/index.html @@ -0,0 +1,72 @@ + + + + + + Enabling and Disabling Tracks + + + + + + +
+
+
+
+
+

+ Video Track Manual Controls +

+ +
+

+            
+
+
+
+
+
+
+

Remote Video Controls

+
+
+ Switch Off Control: + + +
+
+ Content Preferences: + +
+
+
+

Remote Video Track

+
+ + +
+
+

Video Bitrate

+
+ +
+
+
+
+
+
+ + + + + + diff --git a/examples/renderhint/public/prism.css b/examples/renderhint/public/prism.css new file mode 100644 index 00000000..8d846b2b --- /dev/null +++ b/examples/renderhint/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #87ceeb; + } + + .token.operator, + .token.punctuation { + color: #ff5555; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol, + .token.deleted { + color: #f92672; + } + + .token.boolean { + color: #55ff55; + } + + .token.number { + color: #cd5c5c; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #ff55ff; + } + + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #ff55ff; + } + + .token.function { + color: #ccc; + } + + .token.keyword { + color: #55ff55; + } + + .token.regex, + .token.important { + color: #fd971f; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } diff --git a/examples/renderhint/src/helpers.js b/examples/renderhint/src/helpers.js new file mode 100644 index 00000000..b5c765ef --- /dev/null +++ b/examples/renderhint/src/helpers.js @@ -0,0 +1,53 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Connect to a Room with 'manual' mode. The default mode is 'auto'. + * @param {string} token - AccessToken for joining the Room + * @returns {Room} + */ +function joinRoom(token) { + return Video.connect(token, { + name: 'my-cool-room', + bandwidthProfile: { + video: { + contentPreferencesMode: 'manual', + clientTrackSwitchOffControl: 'manual' + } + } + }); +} + +/** + * Switch on the RemoteVideoTrack. + * @param {RemoteVideoTrack} track - The RemoteVideoTrack you want to switch on. + * @returns {RemoteVideoTrack} + */ +function switchOn(track) { + return track.switchOn(); +} + +/** + * Switch off the RemoteVideoTrack. + * @param {RemoteVideoTrack} track - The RemoteVideoTrack you want to switch off. + * @returns {RemoteVideoTrack} + */ + function switchOff(track) { + return track.switchOff(); +} + +/** + * Set the render dimensions of the RemoteVideoTrack. + * @param {RemoteVideoTrack} track - The RemoteVideoTrack you want to set render dimensions for. + * @param {{height: number, width: number}} renderDimensions - The render dimensions for the RemoteVideoTrack. + * @returns {RemoteVideoTrack} + */ +function setRenderDimensions(track, renderDimensions) { + return track.setContentPreferences(renderDimensions); +} + +module.exports.switchOn = switchOn; +module.exports.switchOff = switchOff; +module.exports.setRenderDimensions = setRenderDimensions; +module.exports.joinRoom = joinRoom; \ No newline at end of file diff --git a/examples/renderhint/src/index.js b/examples/renderhint/src/index.js new file mode 100644 index 00000000..bd49ee3b --- /dev/null +++ b/examples/renderhint/src/index.js @@ -0,0 +1,160 @@ +'use strict' + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const DataSeries = require('../../util/timelinegraph').DataSeries; +const GraphView = require('../../util/timelinegraph').GraphView; +const getSnippet = require('../../util/getsnippet'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const helpers = require('./helpers'); +const joinRoom = helpers.joinRoom; +const switchOn = helpers.switchOn; +const switchOff = helpers.switchOff; +const setRenderDimensions = helpers.setRenderDimensions; + +const renderDimensionsOption = document.querySelector('select#renderDimensionsOption'); +const switchOnBtn = document.querySelector('button#switchOn'); +const switchOffBtn = document.querySelector('button#switchOff'); +const videoEl = document.querySelector('video#remotevideo'); +const trackIsSwitchedOff = document.querySelector('span#trackIsSwitchedOff'); +let roomP1 = null; +let remoteVideoTrack = null; +let startVideoBitrateGraph = null; +let stopVideoBitrateGraph = null; + +/** + * Set up the bitrate graph for audio or video media. + */ + function setupBitrateGraph(kind, containerId, canvasId) { + const bitrateSeries = new DataSeries(); + const bitrateGraph = new GraphView(containerId, canvasId); + + bitrateGraph.graphDiv_.style.display = 'none'; + return async function startBitrateGraph(room, intervalMs) { + let bytesReceivedPrev = 0; + let timestampPrev = Date.now(); + const interval = setInterval(async function() { + if (!room) { + clearInterval(interval); + return; + } + const stats = await room.getStats(); + const remoteTrackStats = kind === 'audio' + ? stats[0].remoteAudioTrackStats[0] + : stats[0].remoteVideoTrackStats[0] + const bytesReceived = remoteTrackStats.bytesReceived; + const timestamp = remoteTrackStats.timestamp; + const bitrate = Math.round((bytesReceivedPrev - bytesReceived) * 8 / (timestampPrev - timestamp)); + + bitrateSeries.addPoint(timestamp, bitrate); + bitrateGraph.setDataSeries([bitrateSeries]); + bitrateGraph.updateEndDate(); + bytesReceivedPrev = bytesReceived; + timestampPrev = timestamp; + }, intervalMs); + + bitrateGraph.graphDiv_.style.display = ''; + return function stop() { + clearInterval(interval); + bitrateGraph.graphDiv_.style.display = 'none'; + }; + }; +} + +const handleIsSwitchedOff = (trackState) => { + if(trackState) { + trackIsSwitchedOff.textContent = 'Off'; + trackIsSwitchedOff.classList.remove('badge-success'); + trackIsSwitchedOff.classList.add('badge-danger'); + } else { + trackIsSwitchedOff.textContent = 'On'; + trackIsSwitchedOff.classList.remove('badge-danger'); + trackIsSwitchedOff.classList.add('badge-success'); + } +} + +(async function(){ + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + const logger = Video.Logger.getLogger('twilio-video'); + logger.setLevel('silent'); + + // Get the credentials to connect to the Room. + const credsP1 = await getRoomCredentials(); + const credsP2 = await getRoomCredentials(); + + // Create room instance and name for participants to join. + roomP1 = await joinRoom(credsP1.token); + + // Create the video track for the Remote Participant. + const videoTrack = await Video.createLocalVideoTrack(); + + // Connecting remote participant. + const roomP2 = await Video.connect(credsP2.token, { + name: 'my-cool-room', + bandwidthProfile: { + video: { + contentPreferencesMode: 'manual', + clientTrackSwitchOffControl: 'manual' + } + }, + tracks: [ videoTrack ] + }); + + // Set video bitrate graph. + startVideoBitrateGraph = setupBitrateGraph('video', 'videobitrategraph', 'videobitratecanvas'); + + // Attach RemoteVideoTrack + roomP1.on('trackSubscribed', track => { + if(track.kind === 'video') { + track.attach(videoEl); + remoteVideoTrack = track; + handleIsSwitchedOff(track.isSwitchedOff); + stopVideoBitrateGraph = startVideoBitrateGraph(roomP1, 1000); + + switchOnBtn.classList.remove('disabled'); + switchOffBtn.classList.remove('disabled'); + renderDimensionsOption.classList.remove('disabled'); + + remoteVideoTrack.on('switchedOff', track => { + handleIsSwitchedOff(track.isSwitchedOff); + }); + remoteVideoTrack.on('switchedOn', track => { + handleIsSwitchedOff(track.isSwitchedOff); + }); + } + }); + + // Remote Track Switch On + switchOnBtn.onclick = event => { + switchOn(remoteVideoTrack); + } + + // Remote Track Switch Off + switchOffBtn.onclick = event => { + switchOff(remoteVideoTrack); + } + + const renderDimensionsObj = { + HD: { width: 1280, height: 720 }, + VGA: { width: 640, height: 480 }, + QCIF: { width: 176, height: 144} + } + + // Set Render Dimensions. + renderDimensionsOption.addEventListener('change', () => { + const renderDimensions = renderDimensionsObj[renderDimensionsOption.value]; + setRenderDimensions(remoteVideoTrack, { renderDimensions }); + }); + + // Disconnect from the Room + window.onbeforeunload = () => { + stopVideoBitrateGraph(); + roomP1.disconnect(); + roomP2.disconnect(); + } +}()); diff --git a/package.json b/package.json index e5f9c8db..fa152d76 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "build:examples:localmediacontrols": "copyfiles -f examples/localmediacontrols/src/helpers.js examples/localmediacontrols/public && browserify examples/localmediacontrols/src/index.js > examples/localmediacontrols/public/index.js", "build:examples:remotereconnection": "copyfiles -f examples/remotereconnection/src/helpers.js examples/remotereconnection/public && browserify examples/remotereconnection/src/index.js > examples/remotereconnection/public/index.js", "build:examples:datatracks": "copyfiles -f examples/datatracks/src/helpers.js examples/datatracks/public && browserify examples/datatracks/src/index.js > examples/datatracks/public/index.js", + "build:examples:renderhint": "copyfiles -f examples/renderhint/src/helpers.js examples/renderhint/public && browserify examples/renderhint/src/index.js > examples/renderhint/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", @@ -33,6 +34,7 @@ "clean:examples:localmediacontrols": "rimraf examples/localmediacontrols/public/index.js examples/localmediacontrols/public/helpers.js", "clean:examples:remotereconnection": "rimraf examples/remotereconnection/public/index.js examples/remotereconnection/public/helpers.js", "clean:examples:datatracks": "rimraf examples/datatracks/public/index.js examples/datatracks/public/helpers.js", + "clean:examples:renderhint": "rimraf examples/renderhint/public/index.js examples/renderhint/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, @@ -61,7 +63,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.13.0" + "twilio-video": "^2.14.0" }, "devDependencies": { "browserify": "^14.3.0", diff --git a/server/index.js b/server/index.js index 5223eea9..a8b7a86e 100644 --- a/server/index.js +++ b/server/index.js @@ -36,7 +36,7 @@ const app = express(); 'localmediacontrols', 'remotereconnection', 'datatracks', - + 'renderhint' ].forEach(example => { const examplePath = path.join(__dirname, `../examples/${example}/public`); app.use(`/${example}`, express.static(examplePath)); From 595b122fb4b918f7c1087d4ebb00c2ae3e77ef59 Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 6 Jul 2021 13:58:23 -0700 Subject: [PATCH 82/89] VIDEO-5729 - Auto Render Hints example (#185) * Adding Auto renderhints example. Co-authored-by: joma --- .gitignore | 30 +---- examples/autorenderhint/public/index.css | 124 ++++++++++++++++++ examples/autorenderhint/public/index.html | 73 +++++++++++ .../public/prism.css | 0 examples/autorenderhint/src/helpers.js | 22 ++++ examples/autorenderhint/src/index.js | 122 +++++++++++++++++ examples/bandwidthconstraints/src/index.js | 42 +----- examples/index.html | 18 ++- .../public/index.css | 0 .../public/index.html | 2 +- examples/manualrenderhint/public/prism.css | 123 +++++++++++++++++ .../src/helpers.js | 0 .../src/index.js | 58 ++------ examples/util/setupbitrategraph.js | 48 +++++++ package.json | 6 +- server/index.js | 3 +- 16 files changed, 548 insertions(+), 123 deletions(-) create mode 100644 examples/autorenderhint/public/index.css create mode 100644 examples/autorenderhint/public/index.html rename examples/{renderhint => autorenderhint}/public/prism.css (100%) create mode 100644 examples/autorenderhint/src/helpers.js create mode 100644 examples/autorenderhint/src/index.js rename examples/{renderhint => manualrenderhint}/public/index.css (100%) rename examples/{renderhint => manualrenderhint}/public/index.html (98%) create mode 100644 examples/manualrenderhint/public/prism.css rename examples/{renderhint => manualrenderhint}/src/helpers.js (100%) rename examples/{renderhint => manualrenderhint}/src/index.js (65%) create mode 100644 examples/util/setupbitrategraph.js diff --git a/.gitignore b/.gitignore index 9265ba5e..bf415adc 100644 --- a/.gitignore +++ b/.gitignore @@ -47,32 +47,8 @@ jspm_packages package-lock.json # The generated index.js -quickstart/public/index.js -examples/bandwidthconstraints/public/index.js -examples/codecpreferences/public/index.js -examples/dominantspeaker/public/index.js -examples/localvideofilter/public/index.js -examples/localvideosnapshot/public/index.js -examples/mediadevices/public/index.js -examples/networkquality/public/index.js -examples/reconnection/public/index.js -examples/screenshare/public/index.js -examples/localmediacontrols/public/index.js -examples/remotereconnection/public/index.js -examples/datatracks/public/index.js -examples/renderhint/public/index.js +**/public/index.js # The generated helpers.js -examples/bandwidthconstraints/public/helpers.js -examples/codecpreferences/public/helpers.js -examples/dominantspeaker/public/helpers.js -examples/localvideofilter/public/helpers*.js -examples/localvideosnapshot/public/helpers.js -examples/mediadevices/public/helpers.js -examples/networkquality/public/helpers.js -examples/reconnection/public/helpers.js -examples/screenshare/public/helpers.js -examples/localmediacontrols/public/helpers.js -examples/remotereconnection/public/helpers.js -examples/datatracks/public/helpers.js -examples/renderhint/public/helpers.js +**/public/helpers.js +**/public/helpers*.js diff --git a/examples/autorenderhint/public/index.css b/examples/autorenderhint/public/index.css new file mode 100644 index 00000000..e021fc00 --- /dev/null +++ b/examples/autorenderhint/public/index.css @@ -0,0 +1,124 @@ +@import url('https://fonts.googleapis.com/css?family=Roboto+Mono:300'); + +html { + height: 100%; +} + +body { + height: 100%; +} + +[data-toggle="collapse"].collapsed .if-not-collapsed { + display: none; +} + +[data-toggle="collapse"]:not(.collapsed) .if-collapsed { + display: none; +} + +.align { + align-content: flex-start; +} + +div.container-fluid { + height: 100%; +} + +div.row { + height: 100%; +} + +div.row.thin-gutters { + margin: 0 2px 0 2px; +} + +div.row.thin-gutters > .col, +div.row.thin-gutters > [class*="col-"] { + padding: 8px 8px; +} + +div.card { + border: none; + overflow-y: auto; +} + +div.card-block { + margin: 5px; +} + +div.col-sm-6, div.col-sm-6 { + max-height: fit-content; +} + + +pre.language-javascript { + font-family: 'Roboto Mono', monospace; + font-size: 13px; +} + +pre.language-javascript a { + color: aquamarine; + text-decoration: underline; +} + +pre.language-javascript a:hover { + text-decoration: none; +} + +div#media-container { + position: relative; + display: grid; + grid-template-areas: 'content'; + max-width: 100%; +} + +span#trackIsSwitchedOff { + position: absolute; + z-index: 3; + width: 67px; + font-size: .9em; + right: 1%; + top: 1%; + align-items: center; + max-width: max-content; +} + +video { + width: 100% !important; + height: auto !important; + border: none; +} + +div#bg-img { + width: 100% !important; + height: auto !important; + background-color: lightgrey !important; + background-image: url('https://static0.twilio.com/marketing/bundles/archetype/img/logo-wordmark.svg'); + background-position: 50%; + background-repeat: no-repeat; + box-sizing: content-box; +} + +div.bitrategraph { + margin-top: 5px; + text-align: center; +} + +@media (max-width: 900px) { + div.col-sm-8, div.col-sm-4 { + max-width: 100%; + flex: 100%; + } + + div.col-sm-8 { + height: 40%; + } + + div.col-sm-4 { + height: 60%; + } + + pre.language-javascript { + font-size: 12px; + } +} diff --git a/examples/autorenderhint/public/index.html b/examples/autorenderhint/public/index.html new file mode 100644 index 00000000..10e7041a --- /dev/null +++ b/examples/autorenderhint/public/index.html @@ -0,0 +1,73 @@ + + + + + + Video Track Automatic Controls + + + + + + +
+
+
+
+
+

+ Video Track Automatic Controls +

+ +
+

+            
+
+
+
+
+
+
+

Remote Video Controls

+
+
+ Toggle Visibility: + + +
+
+ Video Size: + +
+
+
+

Remote Video Track

+
+ + + +
+
+

Video Bitrate

+
+ +
+
+
+
+
+
+ + + + + + diff --git a/examples/renderhint/public/prism.css b/examples/autorenderhint/public/prism.css similarity index 100% rename from examples/renderhint/public/prism.css rename to examples/autorenderhint/public/prism.css diff --git a/examples/autorenderhint/src/helpers.js b/examples/autorenderhint/src/helpers.js new file mode 100644 index 00000000..3599a515 --- /dev/null +++ b/examples/autorenderhint/src/helpers.js @@ -0,0 +1,22 @@ +'use strict'; + +var Video = require('twilio-video'); + +/** + * Connect to a Room with 'auto' mode. This is the default mode. + * @param {string} token - AccessToken for joining the Room + * @returns {Room} + */ +function joinRoom(token) { + return Video.connect(token, { + name: 'my-cool-room', + bandwidthProfile: { + video: { + contentPreferencesMode: 'auto', + clientTrackSwitchOffControl: 'auto' + } + } + }); +} + +module.exports.joinRoom = joinRoom; diff --git a/examples/autorenderhint/src/index.js b/examples/autorenderhint/src/index.js new file mode 100644 index 00000000..bb4d517e --- /dev/null +++ b/examples/autorenderhint/src/index.js @@ -0,0 +1,122 @@ +'use strict' + +const Prism = require('prismjs'); +const Video = require('twilio-video'); +const getSnippet = require('../../util/getsnippet'); +const getRoomCredentials = require('../../util/getroomcredentials'); +const setupBitrateGraph = require('../../util/setupbitrategraph'); +const helpers = require('./helpers'); +const joinRoom = helpers.joinRoom; + +const bgImg = document.querySelector('div#bg-img'); +const mediaContainer = document.querySelector('div#media-container'); +const renderDimensionsOption = document.querySelector('select#renderDimensionsOption'); +const videoEl = document.querySelector('video#remotevideo'); +const showVideo = document.querySelector('button#showVideo'); +const hideVideo = document.querySelector('button#hideVideo'); +const trackIsSwitchedOffIndicator = document.querySelector('span#trackIsSwitchedOff'); +let roomP1 = null; +let stopVideoBitrateGraph = null; + +const handleIsSwitchedOff = (isTrackSwitchedOff) => { + if(isTrackSwitchedOff) { + trackIsSwitchedOffIndicator.textContent = 'Off'; + trackIsSwitchedOffIndicator.classList.remove('badge-success'); + trackIsSwitchedOffIndicator.classList.add('badge-danger'); + } else { + trackIsSwitchedOffIndicator.textContent = 'On'; + trackIsSwitchedOffIndicator.classList.remove('badge-danger'); + trackIsSwitchedOffIndicator.classList.add('badge-success'); + } +} + +(async function(){ + // Load the code snippet. + const snippet = await getSnippet('./helpers.js'); + const pre = document.querySelector('pre.language-javascript'); + + pre.innerHTML = Prism.highlight(snippet, Prism.languages.javascript); + + const logger = Video.Logger.getLogger('twilio-video'); + logger.setLevel('silent'); + + // Get the credentials to connect to the Room. + const credsP1 = await getRoomCredentials(); + const credsP2 = await getRoomCredentials(); + + // Create room instance and name for participants to join. + roomP1 = await joinRoom(credsP1.token); + + // Create the video track for the Remote Participant. + const videoTrack = await Video.createLocalVideoTrack(); + + // Connecting remote participant. + const roomP2 = await Video.connect(credsP2.token, { + name: 'my-cool-room', + bandwidthProfile: { + video: { + contentPreferencesMode: 'auto', + clientTrackSwitchOffControl: 'auto' + } + }, + tracks: [ videoTrack ] + }); + + // Set video bitrate graph. + let startVideoBitrateGraph = setupBitrateGraph('video', 'videobitrategraph', 'videobitratecanvas'); + + // Attach RemoteVideoTrack + roomP1.on('trackSubscribed', track => { + if(track.kind === 'video') { + track.attach(videoEl); + handleIsSwitchedOff(track.isSwitchedOff); + stopVideoBitrateGraph = startVideoBitrateGraph(roomP1, 1000); + + showVideo.classList.remove('disabled'); + hideVideo.classList.remove('disabled'); + renderDimensionsOption.classList.remove('disabled'); + + track.on('switchedOff', track => { + handleIsSwitchedOff(track.isSwitchedOff); + }); + track.on('switchedOn', track => { + handleIsSwitchedOff(track.isSwitchedOff); + }); + } + }); + + // Show RemoteVideoTrack + showVideo.onclick = event => { + videoEl.hidden = false; + bgImg.hidden = true; + } + + // Hide RemoteVideoTrack + hideVideo.onclick = event => { + videoEl.hidden = true; + bgImg.hidden = false; + } + + const renderDimensionsObj = { + qHD: { width: 960, height: 540 }, + VGA: { width: 640, height: 480 }, + QCIF: { width: 176, height: 144} + } + + // Adjust Remote Video element size. + renderDimensionsOption.addEventListener('change', () => { + const renderDimensions = renderDimensionsObj[renderDimensionsOption.value]; + mediaContainer.style.height = `${renderDimensions.height}px`; + mediaContainer.style.width = `${renderDimensions.width}px`; + }); + + // Disconnect from the Room + window.onbeforeunload = () => { + if (stopVideoBitrateGraph) { + stopVideoBitrateGraph(); + stopVideoBitrateGraph = null; + } + roomP1.disconnect(); + roomP2.disconnect(); + } +}()); diff --git a/examples/bandwidthconstraints/src/index.js b/examples/bandwidthconstraints/src/index.js index 8595fb02..5bf89533 100644 --- a/examples/bandwidthconstraints/src/index.js +++ b/examples/bandwidthconstraints/src/index.js @@ -1,12 +1,11 @@ 'use strict'; -const DataSeries = require('../../util/timelinegraph').DataSeries; -const GraphView = require('../../util/timelinegraph').GraphView; const Prism = require('prismjs'); const Video = require('twilio-video'); const getRoomCredentials = require('../../util/getroomcredentials'); const getSnippet = require('../../util/getsnippet'); const helpers = require('./helpers'); +const setupBitrateGraph = require('../../util/setupbitrategraph'); const waveform = require('../../util/waveform'); const connectWithBandwidthConstraints = helpers.connectWithBandwidthConstraints; const updateBandwidthConstraints = helpers.updateBandwidthConstraints; @@ -124,45 +123,6 @@ function getTracks(participant) { }); } -/** - * Set up the bitrate graph for audio or video media. - */ -function setupBitrateGraph(kind, containerId, canvasId) { - const bitrateSeries = new DataSeries(); - const bitrateGraph = new GraphView(containerId, canvasId); - - bitrateGraph.graphDiv_.style.display = 'none'; - return function startBitrateGraph(room, intervalMs) { - let bytesReceivedPrev = 0; - let timestampPrev = Date.now(); - const interval = setInterval(async function() { - if (!room) { - clearInterval(interval); - return; - } - const stats = await room.getStats(); - const remoteTrackStats = kind === 'audio' - ? stats[0].remoteAudioTrackStats[0] - : stats[0].remoteVideoTrackStats[0] - const bytesReceived = remoteTrackStats.bytesReceived; - const timestamp = remoteTrackStats.timestamp; - const bitrate = Math.round((bytesReceivedPrev - bytesReceived) * 8 / (timestampPrev - timestamp)); - - bitrateSeries.addPoint(timestamp, bitrate); - bitrateGraph.setDataSeries([bitrateSeries]); - bitrateGraph.updateEndDate(); - bytesReceivedPrev = bytesReceived; - timestampPrev = timestamp; - }, intervalMs); - - bitrateGraph.graphDiv_.style.display = ''; - return function stop() { - clearInterval(interval); - bitrateGraph.graphDiv_.style.display = 'none'; - }; - }; -} - /** * Update bandwidth constraints in the Room. */ diff --git a/examples/index.html b/examples/index.html index 11407e07..e57dc281 100644 --- a/examples/index.html +++ b/examples/index.html @@ -197,10 +197,10 @@

-
+
+
+ +

+ Video Track Automatic Controls +

+
+
+

+ This app demonstrates the default (automatic) modes of the clientTrackSwitchOffControl and + contentPreferencesMode features. + Which can be used to efficiently utilize CPU and bandwidth. +

+
+
diff --git a/examples/renderhint/public/index.css b/examples/manualrenderhint/public/index.css similarity index 100% rename from examples/renderhint/public/index.css rename to examples/manualrenderhint/public/index.css diff --git a/examples/renderhint/public/index.html b/examples/manualrenderhint/public/index.html similarity index 98% rename from examples/renderhint/public/index.html rename to examples/manualrenderhint/public/index.html index e536bdd7..1b20f6c4 100644 --- a/examples/renderhint/public/index.html +++ b/examples/manualrenderhint/public/index.html @@ -3,7 +3,7 @@ - Enabling and Disabling Tracks + Video Track Manual Controls diff --git a/examples/manualrenderhint/public/prism.css b/examples/manualrenderhint/public/prism.css new file mode 100644 index 00000000..8d846b2b --- /dev/null +++ b/examples/manualrenderhint/public/prism.css @@ -0,0 +1,123 @@ +/* http://prismjs.com/download.html?themes=prism-okaidia&languages=markup+css+clike+javascript */ +/** + * okaidia theme for JavaScript, CSS and HTML + * Loosely based on Monokai textmate theme by http://www.monokai.nl/ + * @author ocodia + */ + + code[class*="language-"], + pre[class*="language-"] { + color: #f8f8f2; + background: none; + text-shadow: 0 1px rgba(0, 0, 0, 0.3); + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + } + + /* Code blocks */ + pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border-radius: 0.3em; + } + + :not(pre) > code[class*="language-"], + pre[class*="language-"] { + background: #272822; + } + + /* Inline code */ + :not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; + } + + .token.comment, + .token.prolog, + .token.doctype, + .token.cdata { + color: #87ceeb; + } + + .token.operator, + .token.punctuation { + color: #ff5555; + } + + .namespace { + opacity: .7; + } + + .token.property, + .token.tag, + .token.constant, + .token.symbol, + .token.deleted { + color: #f92672; + } + + .token.boolean { + color: #55ff55; + } + + .token.number { + color: #cd5c5c; + } + + .token.selector, + .token.attr-name, + .token.string, + .token.char, + .token.builtin, + .token.inserted { + color: #ff55ff; + } + + .token.entity, + .token.url, + .language-css .token.string, + .style .token.string, + .token.variable { + color: #ff55ff; + } + + .token.function { + color: #ccc; + } + + .token.keyword { + color: #55ff55; + } + + .token.regex, + .token.important { + color: #fd971f; + } + + .token.important, + .token.bold { + font-weight: bold; + } + .token.italic { + font-style: italic; + } + + .token.entity { + cursor: help; + } diff --git a/examples/renderhint/src/helpers.js b/examples/manualrenderhint/src/helpers.js similarity index 100% rename from examples/renderhint/src/helpers.js rename to examples/manualrenderhint/src/helpers.js diff --git a/examples/renderhint/src/index.js b/examples/manualrenderhint/src/index.js similarity index 65% rename from examples/renderhint/src/index.js rename to examples/manualrenderhint/src/index.js index bd49ee3b..3dd9de49 100644 --- a/examples/renderhint/src/index.js +++ b/examples/manualrenderhint/src/index.js @@ -2,10 +2,9 @@ const Prism = require('prismjs'); const Video = require('twilio-video'); -const DataSeries = require('../../util/timelinegraph').DataSeries; -const GraphView = require('../../util/timelinegraph').GraphView; const getSnippet = require('../../util/getsnippet'); const getRoomCredentials = require('../../util/getroomcredentials'); +const setupBitrateGraph = require('../../util/setupbitrategraph'); const helpers = require('./helpers'); const joinRoom = helpers.joinRoom; const switchOn = helpers.switchOn; @@ -19,50 +18,10 @@ const videoEl = document.querySelector('video#remotevideo'); const trackIsSwitchedOff = document.querySelector('span#trackIsSwitchedOff'); let roomP1 = null; let remoteVideoTrack = null; -let startVideoBitrateGraph = null; let stopVideoBitrateGraph = null; -/** - * Set up the bitrate graph for audio or video media. - */ - function setupBitrateGraph(kind, containerId, canvasId) { - const bitrateSeries = new DataSeries(); - const bitrateGraph = new GraphView(containerId, canvasId); - - bitrateGraph.graphDiv_.style.display = 'none'; - return async function startBitrateGraph(room, intervalMs) { - let bytesReceivedPrev = 0; - let timestampPrev = Date.now(); - const interval = setInterval(async function() { - if (!room) { - clearInterval(interval); - return; - } - const stats = await room.getStats(); - const remoteTrackStats = kind === 'audio' - ? stats[0].remoteAudioTrackStats[0] - : stats[0].remoteVideoTrackStats[0] - const bytesReceived = remoteTrackStats.bytesReceived; - const timestamp = remoteTrackStats.timestamp; - const bitrate = Math.round((bytesReceivedPrev - bytesReceived) * 8 / (timestampPrev - timestamp)); - - bitrateSeries.addPoint(timestamp, bitrate); - bitrateGraph.setDataSeries([bitrateSeries]); - bitrateGraph.updateEndDate(); - bytesReceivedPrev = bytesReceived; - timestampPrev = timestamp; - }, intervalMs); - - bitrateGraph.graphDiv_.style.display = ''; - return function stop() { - clearInterval(interval); - bitrateGraph.graphDiv_.style.display = 'none'; - }; - }; -} - -const handleIsSwitchedOff = (trackState) => { - if(trackState) { +const handleIsSwitchedOff = (isTrackSwitchedOff) => { + if(isTrackSwitchedOff) { trackIsSwitchedOff.textContent = 'Off'; trackIsSwitchedOff.classList.remove('badge-success'); trackIsSwitchedOff.classList.add('badge-danger'); @@ -106,13 +65,12 @@ const handleIsSwitchedOff = (trackState) => { }); // Set video bitrate graph. - startVideoBitrateGraph = setupBitrateGraph('video', 'videobitrategraph', 'videobitratecanvas'); + let startVideoBitrateGraph = setupBitrateGraph('video', 'videobitrategraph', 'videobitratecanvas'); // Attach RemoteVideoTrack roomP1.on('trackSubscribed', track => { if(track.kind === 'video') { track.attach(videoEl); - remoteVideoTrack = track; handleIsSwitchedOff(track.isSwitchedOff); stopVideoBitrateGraph = startVideoBitrateGraph(roomP1, 1000); @@ -120,10 +78,10 @@ const handleIsSwitchedOff = (trackState) => { switchOffBtn.classList.remove('disabled'); renderDimensionsOption.classList.remove('disabled'); - remoteVideoTrack.on('switchedOff', track => { + track.on('switchedOff', track => { handleIsSwitchedOff(track.isSwitchedOff); }); - remoteVideoTrack.on('switchedOn', track => { + track.on('switchedOn', track => { handleIsSwitchedOff(track.isSwitchedOff); }); } @@ -153,7 +111,9 @@ const handleIsSwitchedOff = (trackState) => { // Disconnect from the Room window.onbeforeunload = () => { - stopVideoBitrateGraph(); + if (stopVideoBitrateGraph) { + stopVideoBitrateGraph(); + } roomP1.disconnect(); roomP2.disconnect(); } diff --git a/examples/util/setupbitrategraph.js b/examples/util/setupbitrategraph.js new file mode 100644 index 00000000..f9c47bab --- /dev/null +++ b/examples/util/setupbitrategraph.js @@ -0,0 +1,48 @@ +'use strict'; + +const DataSeries = require('./timelinegraph').DataSeries; +const GraphView = require('./timelinegraph').GraphView; + +/** + * Set up the bitrate graph for audio or video media. + * @param {string} kind - 'video' or 'audio'. + * @param {string} containerId - The id of the graph container. + * @param {string} canvasId - The id of the canvas. + */ + function setupBitrateGraph(kind, containerId, canvasId) { + const bitrateSeries = new DataSeries(); + const bitrateGraph = new GraphView(containerId, canvasId); + + bitrateGraph.graphDiv_.style.display = 'none'; + return function startBitrateGraph(room, intervalMs) { + let bytesReceivedPrev = 0; + let timestampPrev = Date.now(); + const interval = setInterval(async function() { + if (!room) { + clearInterval(interval); + return; + } + const stats = await room.getStats(); + const remoteTrackStats = kind === 'audio' + ? stats[0].remoteAudioTrackStats[0] + : stats[0].remoteVideoTrackStats[0] + const bytesReceived = remoteTrackStats.bytesReceived; + const timestamp = remoteTrackStats.timestamp; + const bitrate = Math.round((bytesReceivedPrev - bytesReceived) * 8 / (timestampPrev - timestamp)); + + bitrateSeries.addPoint(timestamp, bitrate); + bitrateGraph.setDataSeries([bitrateSeries]); + bitrateGraph.updateEndDate(); + bytesReceivedPrev = bytesReceived; + timestampPrev = timestamp; + }, intervalMs); + + bitrateGraph.graphDiv_.style.display = ''; + return function stop() { + clearInterval(interval); + bitrateGraph.graphDiv_.style.display = 'none'; + }; + }; +} + +module.exports = setupBitrateGraph; diff --git a/package.json b/package.json index fa152d76..f3fbc58d 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,8 @@ "build:examples:localmediacontrols": "copyfiles -f examples/localmediacontrols/src/helpers.js examples/localmediacontrols/public && browserify examples/localmediacontrols/src/index.js > examples/localmediacontrols/public/index.js", "build:examples:remotereconnection": "copyfiles -f examples/remotereconnection/src/helpers.js examples/remotereconnection/public && browserify examples/remotereconnection/src/index.js > examples/remotereconnection/public/index.js", "build:examples:datatracks": "copyfiles -f examples/datatracks/src/helpers.js examples/datatracks/public && browserify examples/datatracks/src/index.js > examples/datatracks/public/index.js", - "build:examples:renderhint": "copyfiles -f examples/renderhint/src/helpers.js examples/renderhint/public && browserify examples/renderhint/src/index.js > examples/renderhint/public/index.js", + "build:examples:manualrenderhint": "copyfiles -f examples/manualrenderhint/src/helpers.js examples/manualrenderhint/public && browserify examples/manualrenderhint/src/index.js > examples/manualrenderhint/public/index.js", + "build:examples:autorenderhint": "copyfiles -f examples/autorenderhint/src/helpers.js examples/autorenderhint/public && browserify examples/autorenderhint/src/index.js > examples/autorenderhint/public/index.js", "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js", "clean": "npm-run-all clean:*", "clean:examples": "npm-run-all clean:examples:*", @@ -34,7 +35,8 @@ "clean:examples:localmediacontrols": "rimraf examples/localmediacontrols/public/index.js examples/localmediacontrols/public/helpers.js", "clean:examples:remotereconnection": "rimraf examples/remotereconnection/public/index.js examples/remotereconnection/public/helpers.js", "clean:examples:datatracks": "rimraf examples/datatracks/public/index.js examples/datatracks/public/helpers.js", - "clean:examples:renderhint": "rimraf examples/renderhint/public/index.js examples/renderhint/public/helpers.js", + "clean:examples:manualrenderhint": "rimraf examples/manualrenderhint/public/index.js examples/manualrenderhint/public/helpers.js", + "clean:examples:autorenderhint": "rimraf examples/autorenderhint/public/index.js examples/autorenderhint/public/helpers.js", "clean:quickstart": "rimraf quickstart/public/index.js", "start": "npm run clean && npm run build && node server" }, diff --git a/server/index.js b/server/index.js index a8b7a86e..e5408d84 100644 --- a/server/index.js +++ b/server/index.js @@ -36,7 +36,8 @@ const app = express(); 'localmediacontrols', 'remotereconnection', 'datatracks', - 'renderhint' + 'manualrenderhint', + 'autorenderhint' ].forEach(example => { const examplePath = path.join(__dirname, `../examples/${example}/public`); app.use(`/${example}`, express.static(examplePath)); From 3ce440f0dc7b0940a5005c0ee34d2d054050115b Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Tue, 27 Jul 2021 16:14:13 -0700 Subject: [PATCH 83/89] VIDEO-6370 - Clean up detached track elements (#192) * Chrome 92 fix : cleaning up elements on detach Co-authored-by: joma --- examples/bandwidthconstraints/src/index.js | 2 ++ examples/codecpreferences/src/index.js | 2 ++ examples/dominantspeaker/src/index.js | 1 + examples/localmediacontrols/src/index.js | 1 + examples/mediadevices/src/index.js | 1 + examples/screenshare/src/index.js | 2 ++ quickstart/src/joinroom.js | 8 ++++++-- 7 files changed, 15 insertions(+), 2 deletions(-) diff --git a/examples/bandwidthconstraints/src/index.js b/examples/bandwidthconstraints/src/index.js index 5bf89533..b35ca557 100644 --- a/examples/bandwidthconstraints/src/index.js +++ b/examples/bandwidthconstraints/src/index.js @@ -53,6 +53,7 @@ function attachTrack(audioElement, videoElement, starAudioBitrateGraph, startVid */ function detachAudioTrack(track, audioElement) { track.detach(audioElement); + audioElement.srcObject = null; waveform.unsetStream(); const canvas = waveformContainer.querySelector('canvas'); if (canvas) { @@ -70,6 +71,7 @@ function detachTrack(audioElement, videoElement, track) { return; } track.detach(videoElement); + videoElement.srcObject = null; stopVideoBitrateGraph(); } diff --git a/examples/codecpreferences/src/index.js b/examples/codecpreferences/src/index.js index 6758ef3c..d31ba2a5 100644 --- a/examples/codecpreferences/src/index.js +++ b/examples/codecpreferences/src/index.js @@ -48,6 +48,7 @@ function attachTrack(audioElement, videoElement, showAppliedCodec, track) { */ function detachAudioTrack(track, audioElement) { track.detach(audioElement); + audioElement.srcObject = null; waveform.unsetStream(); const canvas = waveformContainer.querySelector('canvas'); if (canvas) { @@ -65,6 +66,7 @@ function detachTrack(audioElement, videoElement, track) { return; } track.detach(videoElement); + videoElement.srcObject = null; } /** diff --git a/examples/dominantspeaker/src/index.js b/examples/dominantspeaker/src/index.js index bf03b2f4..68dcdd70 100644 --- a/examples/dominantspeaker/src/index.js +++ b/examples/dominantspeaker/src/index.js @@ -165,6 +165,7 @@ function updateDominantSpeaker(speaker) { someRoom.on('participantDisconnected', function(participant) { getTracks(participant).forEach(function(track) { track.detach().forEach(function(element) { + element.srcObject = null; element.remove(); }); }); diff --git a/examples/localmediacontrols/src/index.js b/examples/localmediacontrols/src/index.js index 2ac19acc..3b6d2da4 100644 --- a/examples/localmediacontrols/src/index.js +++ b/examples/localmediacontrols/src/index.js @@ -87,6 +87,7 @@ let roomName = null; participantMutedOrUnmutedMedia(roomP2, track => { track.detach().forEach(element => { + element.srcObject = null; element.remove(); }); }, track => { diff --git a/examples/mediadevices/src/index.js b/examples/mediadevices/src/index.js index 8375bca2..d445872c 100644 --- a/examples/mediadevices/src/index.js +++ b/examples/mediadevices/src/index.js @@ -73,6 +73,7 @@ function attachTrack(track, container) { // Detach given track from the DOM function detachTrack(track) { track.detach().forEach(function(element) { + element.srcObject = null; element.remove(); }); } diff --git a/examples/screenshare/src/index.js b/examples/screenshare/src/index.js index b03384c9..319550b0 100644 --- a/examples/screenshare/src/index.js +++ b/examples/screenshare/src/index.js @@ -109,10 +109,12 @@ function onTrackPublished(publishType, publication, view) { } else if (publishType === 'unpublish') { if (publication.track) { publication.track.detach(view); + view.srcObject = null; } publication.on('subscribed', track => { track.detach(view); + view.srcObject = null; }); } } diff --git a/quickstart/src/joinroom.js b/quickstart/src/joinroom.js index 0f2cdf4b..080ddf77 100644 --- a/quickstart/src/joinroom.js +++ b/quickstart/src/joinroom.js @@ -142,13 +142,17 @@ function attachTrack(track, participant) { function detachTrack(track, participant) { // Detach the Participant's Track from the thumbnail. const $media = $(`div#${participant.sid} > ${track.kind}`, $participants); + const mediaEl = $media.get(0); $media.css('opacity', '0'); - track.detach($media.get(0)); + track.detach(mediaEl); + mediaEl.srcObject = null; // If the detached Track is a VideoTrack that is published by the active // Participant, then detach it from the main video as well. if (track.kind === 'video' && participant === activeParticipant) { - track.detach($activeVideo.get(0)); + const activeVideoEl = $activeVideo.get(0); + track.detach(activeVideoEl); + activeVideoEl.srcObject = null; $activeVideo.css('opacity', '0'); } } From 31580e442ab7e2fb271db053befc16637a7826ab Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Wed, 27 Oct 2021 11:52:53 -0700 Subject: [PATCH 84/89] Update twilio-video to 2.18 (#203) Co-authored-by: joma --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f3fbc58d..ef8ed894 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", "twilio": "^3.19.1", - "twilio-video": "^2.14.0" + "twilio-video": "^2.18.0" }, "devDependencies": { "browserify": "^14.3.0", From 6f83377eb23274b327d382b9e57cf76fe5f4f58a Mon Sep 17 00:00:00 2001 From: Joyce Ma <43423318+PikaJoyce@users.noreply.github.com> Date: Wed, 2 Feb 2022 17:42:47 -0800 Subject: [PATCH 85/89] VIDEO-7710 - Fixing Media Device Selection for Audio Output (#209) * VIDEO-7710 - Fixing Audio Output Device selection. Co-authored-by: joma --- examples/mediadevices/public/index.html | 1 - examples/mediadevices/src/index.js | 35 ++++++++++++++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/examples/mediadevices/public/index.html b/examples/mediadevices/public/index.html index 58d14e2d..74c56487 100644 --- a/examples/mediadevices/public/index.html +++ b/examples/mediadevices/public/index.html @@ -33,7 +33,6 @@

Preview Media

-

diff --git a/examples/mediadevices/src/index.js b/examples/mediadevices/src/index.js index d445872c..cc8637ba 100644 --- a/examples/mediadevices/src/index.js +++ b/examples/mediadevices/src/index.js @@ -15,6 +15,7 @@ const roomNameText = document.querySelector('#roomName'); let someRoom = null; let localAudioTrack = null; let localVideoTrack = null; +let deviceId; var getDeviceSelectionOptions = helpers.getDeviceSelectionOptions; @@ -67,7 +68,15 @@ function updateRoomBlock(room) { // Attach the Track to the DOM. function attachTrack(track, container) { - container.appendChild(track.attach()); + let audioEl; + if (track.kind === 'audio') { + audioEl = track.attach(); + audioEl.className = 'remote-audio' + deviceId ? applyAudioOutputDeviceSelection(deviceId, audioEl) : null; + container.appendChild(audioEl) + } else { + container.appendChild(track.attach()); + } } // Detach given track from the DOM @@ -153,15 +162,23 @@ async function applyVideoInputDeviceChange(event) { // reads selected audio output, and updates preview to use the device. function applyAudioOutputDeviceChange(event) { - var audio = document.querySelector('audio#audioinputpreview'); - - // Note: not supported on safari - if (deviceSelections.audiooutput.value) { - applyAudioOutputDeviceSelection(deviceSelections.audiooutput.value, audio); + if (event) { + event.preventDefault(); } - - event.preventDefault(); - event.stopPropagation(); + deviceId = deviceSelections.audiooutput.value; + document.querySelectorAll('.remote-audio').forEach(audioEl => { + if (deviceId) { + // Note: not supported on safari + applyAudioOutputDeviceSelection(deviceId, audioEl) + .then(() => { + console.log(`Success, audio output device attached: ${deviceId}`); + }) + .catch(error => { + let errorMessage = error; + console.error('ERROR: ', errorMessage); + }); + } + }) } function maybeEnableConnectButton() { From cc6cb2ecb1b4782d8e9cfd3fc5bbece314231586 Mon Sep 17 00:00:00 2001 From: Tim Mendoza Date: Thu, 18 Aug 2022 09:59:28 -0600 Subject: [PATCH 86/89] Update browserify version to fix complie error --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index ef8ed894..a72efa49 100644 --- a/package.json +++ b/package.json @@ -64,11 +64,11 @@ "express": "^4.15.2", "prismjs": "^1.6.0", "stackblur-canvas": "^1.4.0", - "twilio": "^3.19.1", - "twilio-video": "^2.18.0" + "twilio": "^3.80.1", + "twilio-video": "^2.23.0" }, "devDependencies": { - "browserify": "^14.3.0", + "browserify": "^17.0.0", "copyfiles": "^1.2.0", "npm-run-all": "^4.0.2", "rimraf": "^2.6.1" From 0300c9f3fa222ddad8f7c9736fc828a976b06006 Mon Sep 17 00:00:00 2001 From: Anna Date: Wed, 6 Dec 2023 13:40:21 -0800 Subject: [PATCH 87/89] Update README.md with Twilio Video EOL banner Update README.md with Twilio Video EOL banner --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a8313000..b8217dae 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -**NEW:** The [Local Video Filter](examples/localvideofilter) example has been updated to use the recently released [Video Processor API](https://github.com/twilio/twilio-video.js/releases/tag/2.13.0) for Chrome. + +> [!WARNING] +> We are no longer allowing new customers to onboard to Twilio Video. Effective **December 5th, 2024**, Twilio Video will End of Life (EOL) and will cease to function for all customers. Customers may transition to any video provider they choose, however, we are recommending customers migrate to the Zoom Video SDK and we have prepared a [Migration Guide](https://developers.zoom.us/docs/video-sdk/twilio/). Additional information on this EOL is available in our Help Center [here](https://support.twilio.com/hc/en-us/articles/20950630029595-Programmable-Video-End-of-Life-Notice. # Twilio Video Quickstart for JavaScript From f276837dc42a51c21c3b5bac16c14853ad607c70 Mon Sep 17 00:00:00 2001 From: Anna Date: Wed, 6 Dec 2023 13:41:41 -0800 Subject: [PATCH 88/89] Update README.md with Twilio Video EOL banner Update README.md with Twilio Video EOL banner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8217dae..a3a36d5f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ > [!WARNING] -> We are no longer allowing new customers to onboard to Twilio Video. Effective **December 5th, 2024**, Twilio Video will End of Life (EOL) and will cease to function for all customers. Customers may transition to any video provider they choose, however, we are recommending customers migrate to the Zoom Video SDK and we have prepared a [Migration Guide](https://developers.zoom.us/docs/video-sdk/twilio/). Additional information on this EOL is available in our Help Center [here](https://support.twilio.com/hc/en-us/articles/20950630029595-Programmable-Video-End-of-Life-Notice. +> We are no longer allowing new customers to onboard to Twilio Video. Effective **December 5th, 2024**, Twilio Video will End of Life (EOL) and will cease to function for all customers. Customers may transition to any video provider they choose, however, we are recommending customers migrate to the Zoom Video SDK and we have prepared a [Migration Guide](https://developers.zoom.us/docs/video-sdk/twilio/). Additional information on this EOL is available in our Help Center [here](https://support.twilio.com/hc/en-us/articles/20950630029595-Programmable-Video-End-of-Life-Notice). # Twilio Video Quickstart for JavaScript From dd39ee79c4b29d70e6f45bed0171e2eb22634ab2 Mon Sep 17 00:00:00 2001 From: Luis Rivas Date: Tue, 15 Oct 2024 18:51:02 -0500 Subject: [PATCH 89/89] docs: remove the EOL warning banner --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index a3a36d5f..3da5213d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ - -> [!WARNING] -> We are no longer allowing new customers to onboard to Twilio Video. Effective **December 5th, 2024**, Twilio Video will End of Life (EOL) and will cease to function for all customers. Customers may transition to any video provider they choose, however, we are recommending customers migrate to the Zoom Video SDK and we have prepared a [Migration Guide](https://developers.zoom.us/docs/video-sdk/twilio/). Additional information on this EOL is available in our Help Center [here](https://support.twilio.com/hc/en-us/articles/20950630029595-Programmable-Video-End-of-Life-Notice). - # Twilio Video Quickstart for JavaScript [![OS X/Linus Build Status](https://secure.travis-ci.org/twilio/video-quickstart-js.png?branch=master)](http://travis-ci.org/twilio/video-quickstart-js) [![Windows Build status](https://ci.appveyor.com/api/projects/status/3u69uy9c0lsap3dr?svg=true)](https://ci.appveyor.com/project/markandrus/video-quickstart-js)