diff --git a/.gitignore b/.gitignore
index 5e059773..de067511 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,5 @@ cscope.out
cscope.po.out
tags
+node_modules
+**/*.js~
diff --git a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEngineEventHandler.cpp b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEngineEventHandler.cpp
index d0d52d68..0e20334d 100644
--- a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEngineEventHandler.cpp
+++ b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEngineEventHandler.cpp
@@ -313,9 +313,9 @@ void CAGEngineEventHandler::onRemoteVideoStats(const RemoteVideoStats& stats)
lpData->delay = stats.delay;
lpData->width = stats.width;
lpData->height = stats.height;
- lpData->receivedFrameRate = stats.receivedFrameRate;
+ lpData->rendererOutputFrameRate = stats.rendererOutputFrameRate;
lpData->receivedBitrate = stats.receivedBitrate;
- lpData->receivedFrameRate = stats.receivedFrameRate;
+ lpData->decoderOutputFrameRate = stats.decoderOutputFrameRate;
if(m_hMainWnd != NULL)
::PostMessage(m_hMainWnd, WM_MSGID(EID_REMOTE_VIDEO_STAT), (WPARAM)lpData, 0);
diff --git a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEventDef.h b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEventDef.h
index d1d915a7..5b88bae5 100644
--- a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEventDef.h
+++ b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/AGEventDef.h
@@ -189,7 +189,8 @@ typedef struct _AGE_REMOTE_VIDEO_STAT
int width;
int height;
int receivedBitrate;
- int receivedFrameRate;
+ int decoderOutputFrameRate;
+ int rendererOutputFrameRate;
} AGE_REMOTE_VIDEO_STAT, *PAGE_REMOTE_VIDEO_STAT, *LPAGE_REMOTE_VIDEO_STAT;
diff --git a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/OpenVideoCall.vcxproj b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/OpenVideoCall.vcxproj
index 2350236b..7e9f2d36 100644
--- a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/OpenVideoCall.vcxproj
+++ b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/OpenVideoCall.vcxproj
@@ -77,8 +77,8 @@
true
- $(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdk/include;../sdk/include;
- $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);../../../sdk/lib;../sdk/lib;
+ $(VC_IncludePath);$(WindowsSDK_IncludePath);../../../sdk/include;../sdk/include;../../sdk/include
+ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);../../../sdk/lib;../sdk/lib;../../sdk/lib
$(SolutionDir)\$(Configuration)\
$(Configuration)\
@@ -92,8 +92,8 @@
false
- $(VC_IncludePath);$(WindowsSdk_71A_IncludePath);../../../sdk/include;../sdk/include;
- $(VC_LibraryPath_x64);$(WindowsSdk_71A_LibraryPath_x64);../../../sdk/lib;../sdk/lib;
+ $(VC_IncludePath);$(WindowsSdk_71A_IncludePath);../../../sdk/include;../sdk/include;../../sdk/include
+ $(VC_LibraryPath_x64);$(WindowsSdk_71A_LibraryPath_x64);../../../sdk/lib;../sdk/lib;../../sdk/lib
$(SolutionDir)\$(Configuration)\
$(Configuration)\
diff --git a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/VideoDlg.cpp b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/VideoDlg.cpp
index ab3f21db..da2f2bef 100644
--- a/Group-Video/OpenVideoCall-Windows/OpenVideoCall/VideoDlg.cpp
+++ b/Group-Video/OpenVideoCall-Windows/OpenVideoCall/VideoDlg.cpp
@@ -1,4 +1,4 @@
-// VideoDlg.cpp : ʵÏÖÎļþ
+// VideoDlg.cpp : ʵ���ļ�
//
#include "stdafx.h"
@@ -8,7 +8,7 @@
#include "AGEventDef.h"
#include "video_preprocessing_plugin.h"
-// CVideoDlg ¶Ô»°¿ò
+// CVideoDlg �Ի���
IMPLEMENT_DYNAMIC(CVideoDlg, CDialogEx)
@@ -98,14 +98,14 @@ BEGIN_MESSAGE_MAP(CVideoDlg, CDialogEx)
END_MESSAGE_MAP()
-// CVideoDlg ÏûÏ¢´¦Àí³ÌÐò
+// CVideoDlg ��Ϣ��������
void CVideoDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
- // TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
+ // TODO: �ڴ˴�������Ϣ�����������
if (m_btnMin.GetSafeHwnd() != NULL)
m_btnMin.MoveWindow(cx - 72, 0, 24, 24, TRUE);
if (m_btnRst.GetSafeHwnd() != NULL)
@@ -117,7 +117,7 @@ void CVideoDlg::OnSize(UINT nType, int cx, int cy)
m_rcVideoArea.top += 24;
m_rcVideoArea.bottom -= 72;
- // 2ÈË£¬ ÓÒÉϽÇ×Ó»ÃæÇøÓò
+ // 2�ˣ� ���Ͻ��ӻ�������
m_rcChildVideoArea.top = m_rcVideoArea.top + 10;
m_rcChildVideoArea.bottom = m_rcChildVideoArea.top + 144;
m_rcChildVideoArea.right = m_rcVideoArea.right - 14;
@@ -252,7 +252,7 @@ void CVideoDlg::AdjustSizeVideoMulti(int cx, int cy)
void CVideoDlg::OnMouseMove(UINT nFlags, CPoint point)
{
- // TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ
+ // TODO: �ڴ�������Ϣ������������/�����Ĭ��ֵ
CDialogEx::OnMouseMove(nFlags, point);
}
@@ -326,15 +326,13 @@ void CVideoDlg::EnableSize(BOOL bEnable)
void CVideoDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
- // TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
- // ²»Îª»æͼÏûÏ¢µ÷Óà CDialogEx::OnPaint()
+ //CDialogEx::OnPaint()
DrawHead(&dc);
}
LRESULT CVideoDlg::OnNcHitTest(CPoint point)
{
- // TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ
LRESULT lResult = CDialogEx::OnNcHitTest(point);
if (lResult == HTCLIENT && ::GetAsyncKeyState(MK_LBUTTON) < 0)
lResult = HTCAPTION;
@@ -475,7 +473,7 @@ void CVideoDlg::OnBnClickedBtnfullscr()
void CVideoDlg::OnBnClickedScreenshare()
{
- m_dlgDesktopCapture.SaveScreen(NULL);
+ m_dlgDesktopCapture.SaveScreen(NULL);
m_dlgDesktopCapture.ShowWindow(SW_MAXIMIZE);
}
@@ -807,7 +805,7 @@ LRESULT CVideoDlg::OnRemoteVideoStat(WPARAM wParam, LPARAM lParam)
AGVIDEO_WNDINFO &rWndInfo = m_listWndInfo.GetNext(posNext);
if (rWndInfo.nUID == lpData->uid) {
- rWndInfo.nFramerate = lpData->receivedFrameRate;
+ rWndInfo.nFramerate = lpData->rendererOutputFrameRate;
rWndInfo.nBitrate = lpData->receivedBitrate;
rWndInfo.nWidth = lpData->width;
rWndInfo.nHeight = lpData->height;
@@ -1064,7 +1062,7 @@ BOOL CVideoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
- // TODO: ÔÚ´ËÌí¼Ó¶îÍâµÄ³õʼ»¯
+ // TODO: �ڴ����Ӷ���ij�ʼ��
m_dlgDevice.Create(CDeviceDlg::IDD, this);
m_dlgDevice.EnableDeviceTest(FALSE);
@@ -1078,7 +1076,7 @@ BOOL CVideoDlg::OnInitDialog()
m_bitMenuFilter.LoadBitmap(IDB_MENU_FILTER);
return TRUE; // return TRUE unless you set the focus to a control
- // Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE
+ // �쳣: OCX ����ҳӦ���� FALSE
}
@@ -1132,7 +1130,6 @@ void CVideoDlg::RebindVideoWnd()
BOOL CVideoDlg::PreTranslateMessage(MSG* pMsg)
{
- // TODO: ÔÚ´ËÌí¼ÓרÓôúÂëºÍ/»òµ÷ÓûùÀà
if (pMsg->message == WM_KEYDOWN){
switch (pMsg->wParam){
case VK_RETURN:
@@ -1196,33 +1193,31 @@ LRESULT CVideoDlg::OnWindowShareStart(WPARAM wParam, LPARAM lParam)
return 0;
}
-LRESULT CVideoDlg::OnDesktopShareStart(WPARAM wParam, LPARAM lParam)
-{
- LPDESKTOP_SHARE_PARAM lpDesktopShareParam = (LPDESKTOP_SHARE_PARAM)(wParam);
- CRect rcRegion;
-
- CAgoraObject::GetAgoraObject()->EnableVideo();
-
- rcRegion.left = lpDesktopShareParam->nX;
- rcRegion.top = lpDesktopShareParam->nY;
- rcRegion.right = rcRegion.left + lpDesktopShareParam->nWidth;
- rcRegion.bottom = rcRegion.top + lpDesktopShareParam->nHeight;
-
- CAgoraObject::GetAgoraObject()->EnableScreenCapture(NULL, lpDesktopShareParam->nFPS, &rcRegion, TRUE);
- // Sleep(1000);
- // CAgoraObject::GetAgoraObject()->SetVideoProfileEx(lpDesktopShareParam->nWidth, lpDesktopShareParam->nHeight, lpDesktopShareParam->nFPS, lpDesktopShareParam->nBitrate);
-
- m_btnScrCap.SwitchButtonStatus(CAGButton::AGBTN_PUSH);
-
- return 0;
+LRESULT CVideoDlg::OnDesktopShareStart(WPARAM wParam, LPARAM lParam)
+{
+ LPDESKTOP_SHARE_PARAM lpDesktopShareParam = (LPDESKTOP_SHARE_PARAM)(wParam);
+ CRect rcRegion;
+
+ CAgoraObject::GetAgoraObject()->EnableVideo();
+
+ rcRegion.left = lpDesktopShareParam->nX;
+ rcRegion.top = lpDesktopShareParam->nY;
+ rcRegion.right = rcRegion.left + lpDesktopShareParam->nWidth;
+ rcRegion.bottom = rcRegion.top + lpDesktopShareParam->nHeight;
+
+ CAgoraObject::GetAgoraObject()->EnableScreenCapture(NULL, lpDesktopShareParam->nFPS, &rcRegion, TRUE);
+ // Sleep(1000);
+ // CAgoraObject::GetAgoraObject()->SetVideoProfileEx(lpDesktopShareParam->nWidth, lpDesktopShareParam->nHeight, lpDesktopShareParam->nFPS, lpDesktopShareParam->nBitrate);
+
+ m_btnScrCap.SwitchButtonStatus(CAGButton::AGBTN_PUSH);
+
+ return 0;
}
void CVideoDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialogEx::OnShowWindow(bShow, nStatus);
- // TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
-
if (bShow && GetSafeHwnd() != NULL)
RebindVideoWnd();
}
@@ -1232,7 +1227,6 @@ void CVideoDlg::OnMove(int x, int y)
{
CDialogEx::OnMove(x, y);
- // TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
CRect rcChatBox;
rcChatBox.SetRect(x, y + m_rcVideoArea.Height() - 126, x + m_rcVideoArea.Width(), y + m_rcVideoArea.Height() + 24);
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/.gitignore b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/.gitignore
new file mode 100644
index 00000000..f9c790d6
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/.gitignore
@@ -0,0 +1,3 @@
+build
+dist
+package-lock.json
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/README.md b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/README.md
new file mode 100644
index 00000000..3f5db484
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/README.md
@@ -0,0 +1,3 @@
+# AgoraRTC Web Tutorial Webpack Sample
+
+## Basic Communication Example
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/index.html b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/index.html
new file mode 100644
index 00000000..cd3d74f1
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/index.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+ Basic Communication
+
+
+
+
+
+
+
+
+
Basic Communication
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/package.json b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/package.json
new file mode 100644
index 00000000..71a62eec
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "Agora-Web-Tutorial-Webpack-1to1-Basic-Communication",
+ "version": "2.6.1",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "start": "cross-env NODE_ENV=development webpack-dev-server --config ./scripts --mode development",
+ "build": "cross-env NODE_ENV=production webpack --config ./scripts --mode production"
+ },
+ "dependencies": {
+ "agora-rtc-sdk": "^2.6.1",
+ "jquery": "^3.4.1",
+ "toastify-js": "^1.5.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.4.5",
+ "@babel/preset-env": "^7.4.5",
+ "babel-loader": "^8.0.6",
+ "clean-webpack-plugin": "^2.0.1",
+ "cross-env": "^5.2.0",
+ "css-loader": "^2.1.1",
+ "file-loader": "^3.0.1",
+ "friendly-errors-webpack-plugin": "^1.7.0",
+ "html-webpack-plugin": "^3.2.0",
+ "mini-css-extract-plugin": "^0.5.0",
+ "node-sass": "^4.11.0",
+ "sass-loader": "^7.1.0",
+ "style-loader": "^0.23.1",
+ "webpack": "^4.29.6",
+ "webpack-cli": "^3.3.0",
+ "webpack-dev-server": "^3.2.1"
+ },
+ "keywords": ["agora", "agora-rtc-sdk", "webrtc"],
+ "author": "agora",
+ "license": "ISC"
+}
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/index.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/index.js
new file mode 100644
index 00000000..c596a382
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/index.js
@@ -0,0 +1,37 @@
+const path = require("path");
+const loaders = require("./loaders");
+const plugins = require("./plugins");
+
+const NODE_ENV = process.env.NODE_ENV
+
+const distPath = NODE_ENV == 'development' ? '../dist' : '../build'
+
+module.exports = {
+ entry: {
+ index: "./src/index.js",
+ },
+ devtool: "inline-source-map",
+ module: loaders,
+ plugins,
+ resolve: {
+ extensions: [ ".js" ],
+ },
+ output: {
+ filename: "[name].[hash].js",
+ path: path.resolve(__dirname, distPath),
+ },
+ optimization: {
+ minimize: false,
+ },
+ devServer: {
+ overlay: {
+ warnings: true,
+ errors: true,
+ },
+ hot: true,
+ contentBase: path.join(__dirname, "./"),
+ compress: true,
+ progress: true,
+ open: true
+ },
+};
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/loaders.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/loaders.js
new file mode 100644
index 00000000..61d1b875
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/loaders.js
@@ -0,0 +1,54 @@
+const path = require("path");
+
+const env = process.env;
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
+
+const styleLoader = env.NODE_ENV !== 'production' ? "style-loader" : MiniCssExtractPlugin.loader;
+
+const babelLoader = {
+ test: /\.m?js$/,
+ exclude: /(node_modules)/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: ['@babel/preset-env']
+ }
+ }
+};
+
+const cssLoader = {
+ test: /\.css$/,
+ use: [
+ styleLoader,
+ "css-loader",
+ ],
+};
+
+const scssLoader = {
+ test: /\.scss$/,
+ use: [
+ styleLoader,
+ "css-loader",
+ "sass-loader"
+ ]
+}
+
+const fileLoader = {
+ test: /\.(png|svg|jpg|gif)$/,
+ use: "file-loader",
+};
+
+const fontLoader = {
+ test: /\.(woff|woff2|eot|ttf|otf)$/,
+ use: "file-loader",
+};
+
+module.exports = {
+ rules: [
+ cssLoader,
+ scssLoader,
+ fileLoader,
+ fontLoader,
+ babelLoader
+ ],
+};
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/plugins.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/plugins.js
new file mode 100644
index 00000000..744f1dce
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/scripts/plugins.js
@@ -0,0 +1,29 @@
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const CleanWebpackPlugin = require("clean-webpack-plugin");
+const FriendlyErrorsPlugin = require("friendly-errors-webpack-plugin");
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
+const path = require("path");
+
+const plugins = [
+ new HtmlWebpackPlugin({
+ filename: "index.html",
+ template: path.resolve(__dirname, "../index.html"),
+ }),
+ new CleanWebpackPlugin(),
+ new FriendlyErrorsPlugin({
+ compilationSuccessInfo: {
+ messages: ["You application is running here http://localhost:8080"],
+ notes: ["Some additionnal notes to be displayed upon successful compilation"],
+ },
+ onErrors: function(severity, errors) {},
+ clearConsole: true,
+ additionalFormatters: [],
+ additionalTransformers: [],
+ }),
+ new MiniCssExtractPlugin({
+ filename: "[name].[hash].css",
+ chunkFilename: "[id].css"
+ })
+];
+
+module.exports = plugins;
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/common.css b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/common.css
new file mode 100644
index 00000000..2972fad5
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/common.css
@@ -0,0 +1,8 @@
+/*!
+ * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:auto;src:url(./icons/fa-solid-900.eot);src:url(./icons/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(./icons/fa-solid-900.woff2) format("woff2"),url(./icons/fa-solid-900.woff) format("woff"),url(./icons/fa-solid-900.ttf) format("truetype"),url(./icons/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:Font Awesome\ 5 Free;font-weight:900}
+/*!
+ * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s linear infinite}.fa-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}body,html{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding:0;height:100%;background:#f8f9fa}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}a{text-decoration:none}a,a:focus,a:hover{color:#000}.sections-container{margin-top:15px;width:100%;position:absolute}hr{width:1068px;display:block;border:none;border-bottom:1px solid #e4e4e4;margin:20px 0}.navbar{z-index:99;position:fixed;width:100%;display:flex;flex-direction:row;align-items:center;height:70px;background:#fff;border:1px solid #eee}.navbar .menu-item>a:hover{cursor:pointer;color:#006ad8}.navbar .nav-title{color:#333;width:188px;height:21px;font-size:18px;line-height:22px;letter-spacing:.5px}.navbar .nav-item:first-child{flex:1;display:flex;justify-content:center;align-items:center}.navbar .nav-item:first-child:before{margin-right:11px;width:48px;height:48px;content:" ";background:url(./icons/logo.png) no-repeat;display:block;background-position:50%;background-repeat:no-repeat;background-size:contain}.navbar .nav-item:last-child{flex:1;display:grid;grid-column:4;grid-gap:51px;grid-template-columns:repeat(5,58px);width:58px;height:20px;font-size:14px;font-weight:400;color:#333;line-height:20px}.section-container{margin-top:15px}.section-container .section-title{position:relative;display:flex;height:33px;font-size:24px;font-weight:500;color:#333;line-height:33px;justify-content:center;align-items:center;margin-bottom:33px}.section-container .section-title .title{min-width:99px;padding:0 31px;margin:0 28px;background:#f8f9fa;z-index:22}.section-container .section-title hr{position:absolute;top:-3px}.section-container .select-items{width:330px;border:1px solid #e4e4e4}.section-container .select-item:hover{background:#999;color:#fff}.section-container .section-body{position:relative;display:flex;flex:1;flex-direction:column;align-items:center}.hide{display:none}.section-form{flex-direction:column;display:flex;align-items:flex-start}.section-form input:focus{outline:none}.section-form .form-row-one{margin-top:20px;margin-left:25px;display:flex;justify-content:center}.section-form .form-row-one .form-item{width:1080px}.section-form .form-row-one .form-item .one-row{min-width:1031px}.section-form .form-row{margin-left:25px;display:grid;grid-gap:20px;grid-template-columns:repeat(3,1fr);grid-template-rows:auto}.section-form .form-row.button-list{margin-left:25px;display:grid;grid-gap:10px;grid-template-columns:repeat(5,1fr);grid-template-rows:auto}.section-form .form-row.button-list .btn{user-select:none;margin-right:10px;cursor:pointer;color:#006ad8;display:inline-block;box-sizing:border-box;text-align:center;line-height:34px;width:160px;height:34px;border:1px solid #ccc;font-size:14px;font-weight:400;border-radius:2px}.section-form .form-row.button-list .btn:hover{background:#006ad8;font-weight:400;color:#fff;border:1px solid #006ad8}.section-form .form-row.button-list .btn.leave{color:#666}.section-form .form-row.button-list .btn.leave:hover{color:#fff}.section-form .form-item{flex-direction:column;display:flex}.section-form .form-item label{width:193px;height:20px;font-size:14px;font-weight:400;color:#666;line-height:20px;padding:10px}.section-form .form-item input{border-radius:2px;border:1px solid #d3d3d3;font-size:13px;font-weight:400;color:#000;line-height:18px;width:330px;height:34px;box-sizing:border-box}.section-form .form-item input :-moz-placeholder,.section-form .form-item input :-ms-input-placeholder,.section-form .form-item input ::-moz-placeholder,.section-form .form-item input ::-webkit-input-placeholder{color:#999}.section-form .form-item input{padding:0 .5rem}.video-grid{margin-left:25px;display:grid;grid-gap:20px;grid-template-columns:repeat(2,auto);grid-template-rows:auto}#local_stream,#local_video_info{width:480px;height:320px}#local_stream{position:relative}#local_video_info{position:absolute}.video{margin:auto auto 25px;position:relative;cursor:pointer}.video .video-placeholder{background:url(./icons/video-placeholder.png) no-repeat;background-position:50%;background-repeat:no-repeat;width:94px;background-color:#666;background-size:94px 115px}.video #local_video_info{position:absolute;top:0;z-index:22;color:#fff}.video #local_video_info .uid{display:inline-block;margin:10px;position:absolute;bottom:0}.video .remote-video{height:320px;width:200px;position:absolute;top:0;z-index:999}.video .remote-video>div{width:230px;height:130px}.uid{z-index:999;margin:10px;color:#fff;position:absolute}.video-info{position:absolute}.video-info,.video-view{width:480px;height:320px}.video-view{position:relative}.notice{top:-50px;height:65px;display:flex;flex:1;width:100%;text-align:center;position:absolute;border-radius:3px}.notice-alert{border-radius:.25rem;color:#004085;background-color:#cce5ff;border:1px solid #b8daff}.danger-alert,.notice-alert{box-sizing:border-box;position:relative;padding:.75rem 1.25rem;margin-bottom:1rem}.danger-alert{border-radius:.25rem;color:#721c24;background-color:#f8d7da;border:1px solid #f5c6cb}.flex{flex:1;width:100%}.custom-select{user-select:none;position:relative;cursor:pointer;width:330px;height:34px;border-radius:2px;border:1px solid #d3d3d3;background:#fff;font-size:14px;font-weight:400;color:#333;box-sizing:border-box;line-height:20px}.custom-select>span{display:none}.custom-select .select-chevron{position:absolute;right:10px;top:9px}.custom-select .select-items{margin-top:.1rem;left:-1px;box-sizing:border-box;position:relative}.custom-select .item{height:32px;line-height:32px}.custom-select .item,.custom-select .select-item{background:#fff;padding:0 .5rem;width:328px;box-sizing:border-box;display:block;border-radius:2px}.custom-select .select-item{height:34px;line-height:34px}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.eot
new file mode 100644
index 00000000..4f991ad3
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.svg
new file mode 100644
index 00000000..c5f544c7
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.svg
@@ -0,0 +1,3452 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.ttf
new file mode 100644
index 00000000..8836d9ff
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.woff
new file mode 100644
index 00000000..d65148db
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.woff2
new file mode 100644
index 00000000..e2bfe667
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-brands-400.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.eot
new file mode 100644
index 00000000..f9c3418a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.svg
new file mode 100644
index 00000000..38b66718
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.svg
@@ -0,0 +1,803 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.ttf
new file mode 100644
index 00000000..b4abb3df
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.woff
new file mode 100644
index 00000000..b7414354
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.woff2
new file mode 100644
index 00000000..7faee563
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-regular-400.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.eot
new file mode 100644
index 00000000..bf4fd60a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.svg
new file mode 100644
index 00000000..35b78661
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.svg
@@ -0,0 +1,4527 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.ttf
new file mode 100644
index 00000000..9821bea3
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.woff
new file mode 100644
index 00000000..49325538
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.woff2
new file mode 100644
index 00000000..92c4d57c
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/fa-solid-900.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/logo.png b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/logo.png
new file mode 100644
index 00000000..cc14417a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/logo.png differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/video-placeholder.png b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/video-placeholder.png
new file mode 100644
index 00000000..41fe4b78
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/icons/video-placeholder.png differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/style.scss b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/style.scss
new file mode 100644
index 00000000..9103cf17
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/assets/style.scss
@@ -0,0 +1,8 @@
+@import "~toastify-js/src/toastify.css";
+
+html, body {
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/common.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/common.js
new file mode 100644
index 00000000..ca7b83b6
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/common.js
@@ -0,0 +1,109 @@
+import AgoraRTC from 'agora-rtc-sdk';
+import Toastify from 'toastify-js';
+import $ from 'jquery';
+import "./assets/common.css";
+
+export const Toast = {
+ info: (msg) => {
+ Toastify({
+ text: msg,
+ backgroundColor: "#3498db"
+ }).showToast();
+ },
+ notice: (msg) => {
+ Toastify({
+ text: msg,
+ backgroundColor: "#07bc0c"
+ }).showToast();
+ },
+ error: (msg) => {
+ Toastify({
+ text: msg,
+ backgroundColor: "#e74c3c"
+ }).showToast();
+ }
+};
+
+export function validator(formData, fields) {
+ const keys = Object.keys(formData);
+ for (let key of keys) {
+ if (fields.indexOf(key) != -1) {
+ if (!formData[key]) {
+ Toast.error("Please Enter " + key);
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+export function serializeFormData() {
+ const formData = $("#form").serializeArray();
+ const obj = {}
+ for (var item of formData) {
+ var key = item.name;
+ var val = item.value;
+ obj[key] = val;
+ }
+ return obj;
+}
+
+export function addView (id) {
+ if (!$("#" + id)[0]) {
+ $("", {
+ id: "remote_video_" + id,
+ class: "video-view",
+ }).appendTo("#video");
+ }
+}
+
+export function removeView (id) {
+ if ($("#remote_video_" + id)[0]) {
+ $("#remote_video_"+id).remove();
+ }
+}
+
+export function getDevices (next) {
+ AgoraRTC.getDevices(function (items) {
+ items.filter(function (item) {
+ return ['audioinput', 'videoinput'].indexOf(item.kind) !== -1
+ })
+ .map(function (item) {
+ return {
+ name: item.label,
+ value: item.deviceId,
+ kind: item.kind,
+ }
+ });
+ var videos = [];
+ var audios = [];
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+ if ('videoinput' == item.kind) {
+ var name = item.label;
+ var value = item.deviceId;
+ if (!name) {
+ name = "camera-" + videos.length;
+ }
+ videos.push({
+ name: name,
+ value: value,
+ kidn: item.kind
+ });
+ }
+ if ('audioinput' == item.kind) {
+ var name = item.label;
+ var value = item.deviceId;
+ if (!name) {
+ name = "microphone-" + audios.length;
+ }
+ audios.push({
+ name: name,
+ value: value,
+ kidn: item.kind
+ });
+ }
+ }
+ next({videos: videos, audios: audios});
+ });
+}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/index.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/index.js
new file mode 100644
index 00000000..ab36f951
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/index.js
@@ -0,0 +1,77 @@
+import RTCClient from './rtc-client';
+import $ from 'jquery';
+import {getDevices, serializeFormData, validator} from './common';
+import "./assets/style.scss";
+
+$(() => {
+ let selects = null;
+
+ getDevices(function (devices) {
+ selects = devices;
+ devices.audios.forEach(function (audio) {
+ $('', {
+ value: audio.value,
+ text: audio.name,
+ }).appendTo("#microphoneId");
+ })
+ devices.videos.forEach(function (video) {
+ $('', {
+ value: video.value,
+ text: video.name,
+ }).appendTo("#cameraId");
+ })
+ selects.resolutions = [
+ {
+ value: "180p", name: "resolution: 320x180 15fps 140kbps"
+ },
+ {
+ value: "360p", name: "resolution: 640x360 30fps 400kbps"
+ },
+ {
+ value: "720p", name: "resolution: 1280x720 24fps 1130kbps"
+ }
+ ]
+ selects.resolutions.forEach(function (resolution) {
+ $('', {
+ value: resolution.value,
+ text: resolution.name,
+ }).appendTo("#resolution");
+ })
+ })
+
+ const fields = ['appID', 'channel', 'uid'];
+
+ let rtc = new RTCClient();
+
+ $("#create").on("click", function () {
+ console.log("create")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.join(params);
+ }
+ })
+
+ $("#publish").on("click", function () {
+ console.log("startLiveStreaming")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.publish();
+ }
+ });
+
+ $("#unpublish").on("click", function () {
+ console.log("stopLiveStreaming")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.unpublish();
+ }
+ });
+
+ $("#leave").on("click", function () {
+ console.log("leave")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.leave();
+ }
+ })
+})
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/rtc-client.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/rtc-client.js
new file mode 100644
index 00000000..39dab583
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/basic-communication/src/rtc-client.js
@@ -0,0 +1,226 @@
+import AgoraRTC from 'agora-rtc-sdk';
+import {Toast, addView, removeView} from './common';
+
+console.log("agora sdk version: " + AgoraRTC.VERSION + " compatible: " + AgoraRTC.checkSystemRequirements());
+
+export default class RTCClient {
+ constructor () {
+ this._client = null;
+ this._joined = false;
+ this._published = false;
+ this._localStream = null,
+ this._remoteStreams = [];
+ this._params = {};
+ }
+
+ handleEvents() {
+ this._client.on("error", (err) => {
+ console.log(err)
+ })
+ // Occurs when the peer user leaves the channel; for example, the peer user calls Client.leave.
+ this._client.on("peer-leave", (evt) => {
+ var id = evt.uid;
+ if (id != this._params.uid) {
+ removeView(id);
+ }
+ Toast.notice("peer leave")
+ console.log('peer-leave', id);
+ })
+ // Occurs when the local stream is _published.
+ this._client.on("stream-_published", (evt) => {
+ Toast.notice("stream _published success")
+ console.log("stream-_published");
+ })
+ // Occurs when the remote stream is added.
+ this._client.on("stream-added", (evt) => {
+ var remoteStream = evt.stream;
+ var id = remoteStream.getId();
+ Toast.info("stream-added uid: " + id)
+ if (id !== this._params.uid) {
+ this._client.subscribe(remoteStream, (err) => {
+ console.log("stream subscribe failed", err);
+ })
+ }
+ console.log('stream-added remote-uid: ', id);
+ });
+ // Occurs when a user subscribes to a remote stream.
+ this._client.on("stream-subscribed", (evt) => {
+ const remoteStream = evt.stream;
+ const id = remoteStream.getId();
+ this._remoteStreams.push(remoteStream);
+ addView(id);
+ remoteStream.play("remote_video_" + id, {fit: "cover", muted: true});
+ Toast.info('stream-subscribed remote-uid: ' + id);
+ console.log('stream-subscribed remote-uid: ', id);
+ })
+ // Occurs when the remote stream is removed; for example, a peer user calls Client.unpublish.
+ this._client.on("stream-removed", (evt) => {
+ const remoteStream = evt.stream;
+ const id = remoteStream.getId();
+ Toast.info("stream-removed uid: " + id)
+ remoteStream.stop("remote_video_" + id);
+ this._remoteStreams = this._remoteStreams.filter((stream) => {
+ return stream.getId() !== id
+ })
+ removeView(id);
+ console.log('stream-removed remote-uid: ', id);
+ })
+ this._client.on("onTokenPrivilegeWillExpire", () => {
+ //After requesting a new token
+ // this._client.renewToken(token);
+ Toast.info("onTokenPrivilegeWillExpire")
+ console.log("onTokenPrivilegeWillExpire")
+ });
+ this._client.on("onTokenPrivilegeDidExpire", () => {
+ //After requesting a new token
+ // client.renewToken(token);
+ Toast.info("onTokenPrivilegeDidExpire")
+ console.log("onTokenPrivilegeDidExpire")
+ })
+ }
+
+ join (data) {
+ return new Promise((resolve, reject) => {
+ if (this._client) {
+ Toast.error("Your already create client");
+ return;
+ }
+
+ if (this._joined) {
+ Toast.error("Your already _joined");
+ return;
+ }
+
+ /**
+ * A class defining the properties of the config parameter in the createClient method.
+ * Note:
+ * Ensure that you do not leave mode and codec as empty.
+ * Ensure that you set these properties before calling Client.join.
+ * You could find more detail here. https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html
+ **/
+ this._client = AgoraRTC.createClient({mode: 'rtc', codec: 'h264'});
+
+ this._params = data;
+
+ // handle AgoraRTC client event
+ this.handleEvents();
+
+ // init client
+ this._client.init(data.appID, () => {
+ console.log("init success");
+
+ // join client
+ this._client.join(data.token ? data.token : null, data.channel, data.uid, (uid) => {
+ Toast.notice("join channel: " + data.channel + " success, uid: " + uid);
+ console.log("join channel: " + data.channel + " success, uid: " + uid);
+ this._joined = true;
+
+
+ // create local stream
+ this._localStream = AgoraRTC.createStream({
+ streamID: data.uid,
+ audio: true,
+ video: true,
+ screen: false,
+ microphoneId: data.microphoneId,
+ cameraId: data.cameraId
+ })
+
+ // init local stream
+ this._localStream.init(() => {
+ console.log("init local stream success");
+ // play stream with html element id "local_stream"
+ this._localStream.play("local_stream")
+
+ // run callback
+ resolve();
+ }, (err) => {
+ console.error("init local stream failed ", err);
+ })
+ }, function(err) {
+ console.error("client join failed", err)
+ })
+ }, (err) => {
+ console.error(err);
+ });
+ })
+ }
+
+ publish () {
+ if (!this._client) {
+ Toast.error("Please Create Channel First");
+ return;
+ }
+ if (this._published) {
+ Toast.error("Your already _published");
+ return;
+ }
+ var oldState = this._published;
+
+ // publish localStream
+ this._client.publish(this._localStream, (err) => {
+ this._published = oldState;
+ console.log("publish failed");
+ Toast.error("publish failed")
+ console.error(err);
+ })
+ Toast.info("publish")
+ this._published = true
+ }
+
+ unpublish () {
+ if (!this._client) {
+ Toast.error("Please Create Channel First");
+ return;
+ }
+ if (!this._published) {
+ Toast.error("Your didn't unpublished");
+ return;
+ }
+ var oldState = this._published;
+ this._client.unpublish(this._localStream, (err) => {
+ this._published = oldState;
+ console.log("unpublish failed");
+ Toast.error("unpublish failed")
+ console.error(err);
+ })
+ Toast.info("unpublish")
+ this._published = false;
+ }
+
+ leave () {
+ if (!this._client) {
+ Toast.error("Please Join First!");
+ return;
+ }
+ if (!this._joined) {
+ Toast.error("You are not in channel");
+ return;
+ }
+ // leave channel
+ this._client.leave(() => {
+ // close stream
+ this._localStream.close();
+ // stop stream
+ this._localStream.stop();
+ while (this._remoteStreams.length > 0) {
+ const stream = this._remoteStreams.shift();
+ const id = stream.getId()
+ stream.stop();
+ removeView(id);
+ }
+ this._localStream = null;
+ this._remoteStreams = [];
+ this._client = null;
+ console.log("client leaves channel success");
+ this._published = false;
+ this._joined = false;
+ Toast.notice("leave success")
+ }, (err) => {
+ console.log("channel leave failed");
+ Toast.error("leave success")
+ console.error(err);
+ })
+ }
+}
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/README.md b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/README.md
new file mode 100644
index 00000000..873371d6
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/README.md
@@ -0,0 +1,3 @@
+# AgoraRTC Web Tutorial Webpack Sample
+
+## CDN LiveStreaming Example
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/cdn.html b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/cdn.html
new file mode 100644
index 00000000..8f2eb731
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/cdn.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+ CDN StartLiveStreaming
+
+
+
+
+
+
+
+
+
CDN StartLiveStreaming
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/package.json b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/package.json
new file mode 100644
index 00000000..8501b427
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "Agora-Web-Tutorial-Webpack-1to1-CDN",
+ "version": "2.6.1",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "start": "cross-env NODE_ENV=development webpack-dev-server --config ./scripts --mode development",
+ "build": "cross-env NODE_ENV=production webpack --config ./scripts --mode production"
+ },
+ "dependencies": {
+ "agora-rtc-sdk": "^2.6.1",
+ "jquery": "^3.4.1",
+ "toastify-js": "^1.5.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.4.5",
+ "@babel/preset-env": "^7.4.5",
+ "babel-loader": "^8.0.6",
+ "clean-webpack-plugin": "^2.0.1",
+ "cross-env": "^5.2.0",
+ "css-loader": "^2.1.1",
+ "file-loader": "^3.0.1",
+ "friendly-errors-webpack-plugin": "^1.7.0",
+ "html-webpack-plugin": "^3.2.0",
+ "mini-css-extract-plugin": "^0.5.0",
+ "node-sass": "^4.11.0",
+ "sass-loader": "^7.1.0",
+ "style-loader": "^0.23.1",
+ "webpack": "^4.29.6",
+ "webpack-cli": "^3.3.0",
+ "webpack-dev-server": "^3.2.1"
+ },
+ "keywords": ["agora", "agora-rtc-sdk", "webrtc"],
+ "author": "agora",
+ "license": "ISC"
+}
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/index.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/index.js
new file mode 100644
index 00000000..9dabac7f
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/index.js
@@ -0,0 +1,39 @@
+const path = require("path");
+const loaders = require("./loaders");
+const plugins = require("./plugins");
+
+const resolve = path.resolve;
+
+const NODE_ENV = process.env.NODE_ENV
+
+const distPath = NODE_ENV == 'development' ? '../dist' : '../build'
+
+module.exports = {
+ entry: {
+ index: "./src/cdn.js",
+ },
+ devtool: "inline-source-map",
+ module: loaders,
+ plugins,
+ resolve: {
+ extensions: [ ".js" ],
+ },
+ output: {
+ filename: "[name].[hash].js",
+ path: path.resolve(__dirname, distPath),
+ },
+ optimization: {
+ minimize: false,
+ },
+ devServer: {
+ overlay: {
+ warnings: true,
+ errors: true,
+ },
+ hot: true,
+ contentBase: path.join(__dirname, "./"),
+ compress: true,
+ progress: true,
+ open: true
+ },
+};
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/loaders.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/loaders.js
new file mode 100644
index 00000000..61d1b875
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/loaders.js
@@ -0,0 +1,54 @@
+const path = require("path");
+
+const env = process.env;
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
+
+const styleLoader = env.NODE_ENV !== 'production' ? "style-loader" : MiniCssExtractPlugin.loader;
+
+const babelLoader = {
+ test: /\.m?js$/,
+ exclude: /(node_modules)/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: ['@babel/preset-env']
+ }
+ }
+};
+
+const cssLoader = {
+ test: /\.css$/,
+ use: [
+ styleLoader,
+ "css-loader",
+ ],
+};
+
+const scssLoader = {
+ test: /\.scss$/,
+ use: [
+ styleLoader,
+ "css-loader",
+ "sass-loader"
+ ]
+}
+
+const fileLoader = {
+ test: /\.(png|svg|jpg|gif)$/,
+ use: "file-loader",
+};
+
+const fontLoader = {
+ test: /\.(woff|woff2|eot|ttf|otf)$/,
+ use: "file-loader",
+};
+
+module.exports = {
+ rules: [
+ cssLoader,
+ scssLoader,
+ fileLoader,
+ fontLoader,
+ babelLoader
+ ],
+};
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/plugins.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/plugins.js
new file mode 100644
index 00000000..fbbd339e
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/scripts/plugins.js
@@ -0,0 +1,29 @@
+const HtmlWebpackPlugin = require("html-webpack-plugin");
+const CleanWebpackPlugin = require("clean-webpack-plugin");
+const FriendlyErrorsPlugin = require("friendly-errors-webpack-plugin");
+const MiniCssExtractPlugin = require("mini-css-extract-plugin");
+const path = require("path");
+
+const plugins = [
+ new HtmlWebpackPlugin({
+ filename: "index.html",
+ template: path.resolve(__dirname, "../cdn.html"),
+ }),
+ new CleanWebpackPlugin(),
+ new FriendlyErrorsPlugin({
+ compilationSuccessInfo: {
+ messages: ["You application is running here http://localhost:8080"],
+ notes: ["Some additionnal notes to be displayed upon successful compilation"],
+ },
+ onErrors: function(severity, errors) {},
+ clearConsole: true,
+ additionalFormatters: [],
+ additionalTransformers: [],
+ }),
+ new MiniCssExtractPlugin({
+ filename: "[name].[hash].css",
+ chunkFilename: "[id].css"
+ })
+];
+
+module.exports = plugins;
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/common.css b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/common.css
new file mode 100644
index 00000000..2972fad5
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/common.css
@@ -0,0 +1,8 @@
+/*!
+ * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:auto;src:url(./icons/fa-solid-900.eot);src:url(./icons/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(./icons/fa-solid-900.woff2) format("woff2"),url(./icons/fa-solid-900.woff) format("woff"),url(./icons/fa-solid-900.ttf) format("truetype"),url(./icons/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:Font Awesome\ 5 Free;font-weight:900}
+/*!
+ * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s linear infinite}.fa-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}body,html{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding:0;height:100%;background:#f8f9fa}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}a{text-decoration:none}a,a:focus,a:hover{color:#000}.sections-container{margin-top:15px;width:100%;position:absolute}hr{width:1068px;display:block;border:none;border-bottom:1px solid #e4e4e4;margin:20px 0}.navbar{z-index:99;position:fixed;width:100%;display:flex;flex-direction:row;align-items:center;height:70px;background:#fff;border:1px solid #eee}.navbar .menu-item>a:hover{cursor:pointer;color:#006ad8}.navbar .nav-title{color:#333;width:188px;height:21px;font-size:18px;line-height:22px;letter-spacing:.5px}.navbar .nav-item:first-child{flex:1;display:flex;justify-content:center;align-items:center}.navbar .nav-item:first-child:before{margin-right:11px;width:48px;height:48px;content:" ";background:url(./icons/logo.png) no-repeat;display:block;background-position:50%;background-repeat:no-repeat;background-size:contain}.navbar .nav-item:last-child{flex:1;display:grid;grid-column:4;grid-gap:51px;grid-template-columns:repeat(5,58px);width:58px;height:20px;font-size:14px;font-weight:400;color:#333;line-height:20px}.section-container{margin-top:15px}.section-container .section-title{position:relative;display:flex;height:33px;font-size:24px;font-weight:500;color:#333;line-height:33px;justify-content:center;align-items:center;margin-bottom:33px}.section-container .section-title .title{min-width:99px;padding:0 31px;margin:0 28px;background:#f8f9fa;z-index:22}.section-container .section-title hr{position:absolute;top:-3px}.section-container .select-items{width:330px;border:1px solid #e4e4e4}.section-container .select-item:hover{background:#999;color:#fff}.section-container .section-body{position:relative;display:flex;flex:1;flex-direction:column;align-items:center}.hide{display:none}.section-form{flex-direction:column;display:flex;align-items:flex-start}.section-form input:focus{outline:none}.section-form .form-row-one{margin-top:20px;margin-left:25px;display:flex;justify-content:center}.section-form .form-row-one .form-item{width:1080px}.section-form .form-row-one .form-item .one-row{min-width:1031px}.section-form .form-row{margin-left:25px;display:grid;grid-gap:20px;grid-template-columns:repeat(3,1fr);grid-template-rows:auto}.section-form .form-row.button-list{margin-left:25px;display:grid;grid-gap:10px;grid-template-columns:repeat(5,1fr);grid-template-rows:auto}.section-form .form-row.button-list .btn{user-select:none;margin-right:10px;cursor:pointer;color:#006ad8;display:inline-block;box-sizing:border-box;text-align:center;line-height:34px;width:160px;height:34px;border:1px solid #ccc;font-size:14px;font-weight:400;border-radius:2px}.section-form .form-row.button-list .btn:hover{background:#006ad8;font-weight:400;color:#fff;border:1px solid #006ad8}.section-form .form-row.button-list .btn.leave{color:#666}.section-form .form-row.button-list .btn.leave:hover{color:#fff}.section-form .form-item{flex-direction:column;display:flex}.section-form .form-item label{width:193px;height:20px;font-size:14px;font-weight:400;color:#666;line-height:20px;padding:10px}.section-form .form-item input{border-radius:2px;border:1px solid #d3d3d3;font-size:13px;font-weight:400;color:#000;line-height:18px;width:330px;height:34px;box-sizing:border-box}.section-form .form-item input :-moz-placeholder,.section-form .form-item input :-ms-input-placeholder,.section-form .form-item input ::-moz-placeholder,.section-form .form-item input ::-webkit-input-placeholder{color:#999}.section-form .form-item input{padding:0 .5rem}.video-grid{margin-left:25px;display:grid;grid-gap:20px;grid-template-columns:repeat(2,auto);grid-template-rows:auto}#local_stream,#local_video_info{width:480px;height:320px}#local_stream{position:relative}#local_video_info{position:absolute}.video{margin:auto auto 25px;position:relative;cursor:pointer}.video .video-placeholder{background:url(./icons/video-placeholder.png) no-repeat;background-position:50%;background-repeat:no-repeat;width:94px;background-color:#666;background-size:94px 115px}.video #local_video_info{position:absolute;top:0;z-index:22;color:#fff}.video #local_video_info .uid{display:inline-block;margin:10px;position:absolute;bottom:0}.video .remote-video{height:320px;width:200px;position:absolute;top:0;z-index:999}.video .remote-video>div{width:230px;height:130px}.uid{z-index:999;margin:10px;color:#fff;position:absolute}.video-info{position:absolute}.video-info,.video-view{width:480px;height:320px}.video-view{position:relative}.notice{top:-50px;height:65px;display:flex;flex:1;width:100%;text-align:center;position:absolute;border-radius:3px}.notice-alert{border-radius:.25rem;color:#004085;background-color:#cce5ff;border:1px solid #b8daff}.danger-alert,.notice-alert{box-sizing:border-box;position:relative;padding:.75rem 1.25rem;margin-bottom:1rem}.danger-alert{border-radius:.25rem;color:#721c24;background-color:#f8d7da;border:1px solid #f5c6cb}.flex{flex:1;width:100%}.custom-select{user-select:none;position:relative;cursor:pointer;width:330px;height:34px;border-radius:2px;border:1px solid #d3d3d3;background:#fff;font-size:14px;font-weight:400;color:#333;box-sizing:border-box;line-height:20px}.custom-select>span{display:none}.custom-select .select-chevron{position:absolute;right:10px;top:9px}.custom-select .select-items{margin-top:.1rem;left:-1px;box-sizing:border-box;position:relative}.custom-select .item{height:32px;line-height:32px}.custom-select .item,.custom-select .select-item{background:#fff;padding:0 .5rem;width:328px;box-sizing:border-box;display:block;border-radius:2px}.custom-select .select-item{height:34px;line-height:34px}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.eot
new file mode 100644
index 00000000..4f991ad3
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.svg
new file mode 100644
index 00000000..c5f544c7
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.svg
@@ -0,0 +1,3452 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.ttf
new file mode 100644
index 00000000..8836d9ff
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.woff
new file mode 100644
index 00000000..d65148db
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.woff2
new file mode 100644
index 00000000..e2bfe667
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-brands-400.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.eot
new file mode 100644
index 00000000..f9c3418a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.svg
new file mode 100644
index 00000000..38b66718
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.svg
@@ -0,0 +1,803 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.ttf
new file mode 100644
index 00000000..b4abb3df
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.woff
new file mode 100644
index 00000000..b7414354
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.woff2
new file mode 100644
index 00000000..7faee563
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-regular-400.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.eot
new file mode 100644
index 00000000..bf4fd60a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.svg
new file mode 100644
index 00000000..35b78661
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.svg
@@ -0,0 +1,4527 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.ttf
new file mode 100644
index 00000000..9821bea3
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.woff
new file mode 100644
index 00000000..49325538
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.woff2
new file mode 100644
index 00000000..92c4d57c
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/fa-solid-900.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/logo.png b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/logo.png
new file mode 100644
index 00000000..cc14417a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/logo.png differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/video-placeholder.png b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/video-placeholder.png
new file mode 100644
index 00000000..41fe4b78
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/icons/video-placeholder.png differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/style.scss b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/style.scss
new file mode 100644
index 00000000..9103cf17
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/assets/style.scss
@@ -0,0 +1,8 @@
+@import "~toastify-js/src/toastify.css";
+
+html, body {
+ width: 100%;
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/cdn.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/cdn.js
new file mode 100644
index 00000000..1d56bf81
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/cdn.js
@@ -0,0 +1,77 @@
+import RTCClient from './rtc-client';
+import $ from 'jquery';
+import {getDevices, serializeFormData, validator} from './common';
+import "./assets/style.scss";
+
+$(() => {
+ let selects = null;
+
+ getDevices(function (devices) {
+ selects = devices;
+ devices.audios.forEach(function (audio) {
+ $('', {
+ value: audio.value,
+ text: audio.name,
+ }).appendTo("#microphoneId");
+ })
+ devices.videos.forEach(function (video) {
+ $('', {
+ value: video.value,
+ text: video.name,
+ }).appendTo("#cameraId");
+ })
+ selects.resolutions = [
+ {
+ value: "180p", name: "resolution: 320x180 15fps 140kbps"
+ },
+ {
+ value: "360p", name: "resolution: 640x360 30fps 400kbps"
+ },
+ {
+ value: "720p", name: "resolution: 1280x720 24fps 1130kbps"
+ }
+ ]
+ selects.resolutions.forEach(function (resolution) {
+ $('', {
+ value: resolution.value,
+ text: resolution.name,
+ }).appendTo("#resolution");
+ })
+ })
+
+ const fields = ['appID', 'channel', 'uid', 'url'];
+
+ let rtc = new RTCClient();
+
+ $("#create").on("click", function () {
+ console.log("create")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.join(params);
+ }
+ })
+
+ $("#startLiveStreaming").on("click", function () {
+ console.log("startLiveStreaming")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.startLiveStreaming();
+ }
+ });
+
+ $("#stopLiveStreaming").on("click", function () {
+ console.log("stopLiveStreaming")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.stopLiveStreaming();
+ }
+ });
+
+ $("#leave").on("click", function () {
+ console.log("leave")
+ const params = serializeFormData();
+ if (validator(params, fields)) {
+ rtc.leave();
+ }
+ })
+})
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/common.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/common.js
new file mode 100644
index 00000000..ca7b83b6
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/common.js
@@ -0,0 +1,109 @@
+import AgoraRTC from 'agora-rtc-sdk';
+import Toastify from 'toastify-js';
+import $ from 'jquery';
+import "./assets/common.css";
+
+export const Toast = {
+ info: (msg) => {
+ Toastify({
+ text: msg,
+ backgroundColor: "#3498db"
+ }).showToast();
+ },
+ notice: (msg) => {
+ Toastify({
+ text: msg,
+ backgroundColor: "#07bc0c"
+ }).showToast();
+ },
+ error: (msg) => {
+ Toastify({
+ text: msg,
+ backgroundColor: "#e74c3c"
+ }).showToast();
+ }
+};
+
+export function validator(formData, fields) {
+ const keys = Object.keys(formData);
+ for (let key of keys) {
+ if (fields.indexOf(key) != -1) {
+ if (!formData[key]) {
+ Toast.error("Please Enter " + key);
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+export function serializeFormData() {
+ const formData = $("#form").serializeArray();
+ const obj = {}
+ for (var item of formData) {
+ var key = item.name;
+ var val = item.value;
+ obj[key] = val;
+ }
+ return obj;
+}
+
+export function addView (id) {
+ if (!$("#" + id)[0]) {
+ $("", {
+ id: "remote_video_" + id,
+ class: "video-view",
+ }).appendTo("#video");
+ }
+}
+
+export function removeView (id) {
+ if ($("#remote_video_" + id)[0]) {
+ $("#remote_video_"+id).remove();
+ }
+}
+
+export function getDevices (next) {
+ AgoraRTC.getDevices(function (items) {
+ items.filter(function (item) {
+ return ['audioinput', 'videoinput'].indexOf(item.kind) !== -1
+ })
+ .map(function (item) {
+ return {
+ name: item.label,
+ value: item.deviceId,
+ kind: item.kind,
+ }
+ });
+ var videos = [];
+ var audios = [];
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+ if ('videoinput' == item.kind) {
+ var name = item.label;
+ var value = item.deviceId;
+ if (!name) {
+ name = "camera-" + videos.length;
+ }
+ videos.push({
+ name: name,
+ value: value,
+ kidn: item.kind
+ });
+ }
+ if ('audioinput' == item.kind) {
+ var name = item.label;
+ var value = item.deviceId;
+ if (!name) {
+ name = "microphone-" + audios.length;
+ }
+ audios.push({
+ name: name,
+ value: value,
+ kidn: item.kind
+ });
+ }
+ }
+ next({videos: videos, audios: audios});
+ });
+}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/rtc-client.js b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/rtc-client.js
new file mode 100644
index 00000000..b7927b57
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1-Webpack/cdn/src/rtc-client.js
@@ -0,0 +1,286 @@
+import AgoraRTC from 'agora-rtc-sdk';
+import {Toast, addView, removeView} from './common';
+
+console.log("agora sdk version: " + AgoraRTC.VERSION + " compatible: " + AgoraRTC.checkSystemRequirements());
+
+export default class RTCClient {
+ constructor () {
+ this._client = null;
+ this._joined = false;
+ this._published = false;
+ this._localStream = null,
+ this._remoteStreams = [];
+ this._params = {};
+ }
+
+ handleEvents() {
+ this._client.on("error", (err) => {
+ console.log(err)
+ })
+ // Occurs when the peer user leaves the channel; for example, the peer user calls Client.leave.
+ this._client.on("peer-leave", (evt) => {
+ var id = evt.uid;
+ if (id != this._params.uid) {
+ removeView(id);
+ }
+ Toast.notice("peer leave")
+ console.log('peer-leave', id);
+ })
+ // Occurs when the local stream is _published.
+ this._client.on("stream-_published", (evt) => {
+ Toast.notice("stream _published success")
+ console.log("stream-_published");
+ })
+ // Occurs when the remote stream is added.
+ this._client.on("stream-added", (evt) => {
+ var remoteStream = evt.stream;
+ var id = remoteStream.getId();
+ Toast.info("stream-added uid: " + id)
+ if (id !== this._params.uid) {
+ this._client.subscribe(remoteStream, (err) => {
+ console.log("stream subscribe failed", err);
+ })
+ }
+ console.log('stream-added remote-uid: ', id);
+ });
+ // Occurs when a user subscribes to a remote stream.
+ this._client.on("stream-subscribed", (evt) => {
+ const remoteStream = evt.stream;
+ const id = remoteStream.getId();
+ this._remoteStreams.push(remoteStream);
+ addView(id);
+ remoteStream.play("remote_video_" + id, {fit: "cover", muted: true});
+ Toast.info('stream-subscribed remote-uid: ' + id);
+ console.log('stream-subscribed remote-uid: ', id);
+ })
+ // Occurs when the remote stream is removed; for example, a peer user calls Client.unpublish.
+ this._client.on("stream-removed", (evt) => {
+ const remoteStream = evt.stream;
+ const id = remoteStream.getId();
+ Toast.info("stream-removed uid: " + id)
+ remoteStream.stop("remote_video_" + id);
+ this._remoteStreams = this._remoteStreams.filter((stream) => {
+ return stream.getId() !== id
+ })
+ removeView(id);
+ console.log('stream-removed remote-uid: ', id);
+ })
+ this._client.on("onTokenPrivilegeWillExpire", () => {
+ //After requesting a new token
+ // this._client.renewToken(token);
+ Toast.info("onTokenPrivilegeWillExpire")
+ console.log("onTokenPrivilegeWillExpire")
+ });
+ this._client.on("onTokenPrivilegeDidExpire", () => {
+ //After requesting a new token
+ // client.renewToken(token);
+ Toast.info("onTokenPrivilegeDidExpire")
+ console.log("onTokenPrivilegeDidExpire")
+ })
+ // Occurs when the live streaming starts.
+ this._client.on("liveStreamingStarted", (evt) => {
+ Toast.info("liveStreamingStarted")
+ console.log("liveStreamingStarted", evt)
+ })
+ // Occurs when the live streaming fails.
+ this._client.on("liveStreamingFailed", (evt) => {
+ Toast.error("liveStreamingFailed")
+ console.log("liveStreamingFailed", evt)
+ })
+ // Occurs when the live streaming stops.
+ this._client.on("liveStreamingStopped", (evt) => {
+ Toast.info("liveStreamingStopped")
+ console.log("liveStreamingStopped", evt)
+ })
+ // Occurs when the live transcoding setting is updated.
+ this._client.on("liveTranscodingUpdated", (evt) => {
+ Toast.info("liveTranscodingUpdated")
+ console.log("liveTranscodingUpdated", evt)
+ })
+ }
+
+ join (data) {
+ return new Promise((resolve, reject) => {
+ if (this._client) {
+ Toast.error("Your already create client");
+ return;
+ }
+
+ if (this._joined) {
+ Toast.error("Your already _joined");
+ return;
+ }
+
+ /**
+ * A class defining the properties of the config parameter in the createClient method.
+ * Note:
+ * Ensure that you do not leave mode and codec as empty.
+ * Ensure that you set these properties before calling Client.join.
+ * You could find more detail here. https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html
+ **/
+ this._client = AgoraRTC.createClient({mode: 'rtc', codec: 'h264'});
+
+ this._params = data;
+
+ // handle AgoraRTC client event
+ this.handleEvents();
+
+ // init client
+ this._client.init(data.appID, () => {
+ console.log("init success");
+
+ // join client
+ this._client.join(data.token ? data.token : null, data.channel, data.uid, (uid) => {
+ Toast.notice("join channel: " + data.channel + " success, uid: " + uid);
+ console.log("join channel: " + data.channel + " success, uid: " + uid);
+ this._joined = true;
+
+
+ // create local stream
+ this._localStream = AgoraRTC.createStream({
+ streamID: data.uid,
+ audio: true,
+ video: true,
+ screen: false,
+ microphoneId: data.microphoneId,
+ cameraId: data.cameraId
+ })
+
+ // init local stream
+ this._localStream.init(() => {
+ console.log("init local stream success");
+ // play stream with html element id "local_stream"
+ this._localStream.play("local_stream")
+
+ // run callback
+ resolve();
+ }, (err) => {
+ console.error("init local stream failed ", err);
+ })
+ }, function(err) {
+ console.error("client join failed", err)
+ })
+ }, (err) => {
+ console.error(err);
+ });
+ })
+ }
+
+ leave () {
+ if (!this._client) {
+ Toast.error("Please Join First!");
+ return;
+ }
+ if (!this._joined) {
+ Toast.error("You are not in channel");
+ return;
+ }
+ // leave channel
+ this._client.leave(() => {
+ // close stream
+ this._localStream.close();
+ // stop stream
+ this._localStream.stop();
+ while (this._remoteStreams.length > 0) {
+ const stream = this._remoteStreams.shift();
+ const id = stream.getId()
+ stream.stop();
+ removeView(id);
+ }
+ this._localStream = null;
+ this._remoteStreams = [];
+ this._client = null;
+ console.log("client leaves channel success");
+ this._published = false;
+ this._joined = false;
+ Toast.notice("leave success")
+ }, (err) => {
+ console.log("channel leave failed");
+ Toast.error("leave success")
+ console.error(err);
+ })
+ }
+
+ startLiveStreaming () {
+ const uid = this._params.uid;
+ const liveTranscoding = {
+ "180p": {
+ width: 320,
+ height: 180,
+ videoBitrate: 140,
+ videoFramerate: 15,
+ lowLatency: false,
+ audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
+ audioBitrate: 48,
+ audioChannels: 1,
+ videoGop: 30,
+ videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
+ userCount: 1,
+ backgroundColor: 0x000000,
+ transcodingUsers: [{
+ uid,
+ alpha: 1,
+ width: 10,
+ height: 10,
+ zOrder: 1,
+ x: 10,
+ y: 10
+ }],
+ },
+ "360p": {
+ width: 640,
+ height: 360,
+ videoBitrate: 400,
+ videoFramerate: 30,
+ lowLatency: false,
+ audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
+ audioBitrate: 48,
+ audioChannels: 1,
+ videoGop: 30,
+ videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
+ userCount: 1,
+ backgroundColor: 0x000000,
+ transcodingUsers: [{
+ uid,
+ alpha: 1,
+ width: 10,
+ height: 10,
+ zOrder: 1,
+ x: 10,
+ y: 10
+ }],
+ },
+ "720p": {
+ width: 1280,
+ height: 720,
+ videoBitrate: 1130,
+ videoFramerate: 24,
+ lowLatency: false,
+ audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
+ audioBitrate: 48,
+ audioChannels: 1,
+ videoGop: 30,
+ videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
+ userCount: 1,
+ backgroundColor: 0x000000,
+ transcodingUsers: [{
+ uid,
+ alpha: 1,
+ width: 10,
+ height: 10,
+ zOrder: 1,
+ x: 10,
+ y: 10
+ }],
+ }
+ }
+ const transcodingConfig = liveTranscoding[this._params.resolution];
+ this._client.setLiveTranscoding(transcodingConfig);
+ this._client.startLiveStreaming(this._params.url);
+ }
+
+ stopLiveStreaming () {
+ this._client.stopLiveStreaming(this._params.url);
+ }
+}
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/AgoraRTCSDK.min.js b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/AgoraRTCSDK.min.js
new file mode 100644
index 00000000..39c1a628
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/AgoraRTCSDK.min.js
@@ -0,0 +1,2 @@
+/*! AgoraRTC|BUILD v2.6.1-0-g01b3be9 */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("AgoraRTC",[],t):"object"==typeof exports?exports.AgoraRTC=t():e.AgoraRTC=t()}(window,function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=17)}([function(e,t,n){"use strict";n.r(t);var i=n(6),o=n.n(i),a=n(5),r=n(3),s=n(1),d=0,c="free",u=[],l=[],p=0;setInterval(function(){Object(r.getParameter)("UPLOAD_LOG")&&f.info("console log upload")},9e5);var f=function(){var e,t,n,i,f,m,g="https://".concat(Object(r.getParameter)("LOG_UPLOAD_SERVER"),"/upload/v1"),v=["DEBUG","INFO","WARNING","ERROR","NONE"],S=0,I=function e(t){c="uploading",setTimeout(function(){!function(e,t,n){var i;Array.isArray(e)||(e=[e]),e=e.map(function(e){return{log_item_id:d++,log_level:e.log_level,payload_str:e.payload}}),i={sdk_version:r.VERSION,process_id:Object(s.a)(),payload:JSON.stringify(e)};try{Object(a.c)(g,i,function(e){"OK"===e?t&&t(e):n&&n(e)},function(e){n&&n(e)},{withCredentials:!0})}catch(e){n&&n(e)}}(t,function(){p=0,0!==u.length?(l=u.length<10?u.splice(0,u.length):u.splice(0,10),e(l)):c="free"},function(){setTimeout(function(){e(l)},p++<2?200:1e4)})},3e3)};t=function(){for(var t=[0],n=0;n4?e=4:e<0&&(e=0),S=e},log:e=function(){var e,t=arguments[0],n=arguments;if(n[0]=(e=new Date).toTimeString().split(" ")[0]+":"+e.getMilliseconds()+" Agora-SDK ["+(v[t]||"DEFAULT")+"]:",function(e,t){if(Object(r.getParameter)("UPLOAD_LOG"))try{t=Array.prototype.slice.call(t);var n="";t.forEach(function(e){"object"===o()(e)&&(e=JSON.stringify(e)),n=n+e+" "}),u.push({payload:n,log_level:e}),"free"===c&&(l=u.length<10?u.splice(0,u.length):u.splice(0,10),I(l))}catch(e){}}(t,n),!(t1&&(e="EXECUTOR_INVOKE_".concat(m)),e)return g._sendApiInvoke(o()({},S(),{success:!1,error:e},r&&{states:r()})),u&&u(e);g._sendApiInvoke(o()({},S(),{success:!0},p&&{result:t},r&&{states:r()})),u&&u(null,t)}},e._cachedItems=[],e._cacheInvokeReport=function(t){t.lts||(t.lts=Date.now()),e._cachedItems.push(t),e._cachedItems.length>50&&e._cachedItems.shift()},e._flushInvokeReport=function(t){if(e._cachedItems.length){var n=e._cachedItems;e._cachedItems=[],d.default.debug("Flush cached event reporting:",n.length),n.forEach(function(n,i){n.sid=t,setTimeout(function(){e._sendApiInvoke(n)},5e3+500*i)})}},e._sendApiInvoke=function(t){var n=t.tag,i=t.invokeId,a=t.sid,r=t.name,d=t.result,c=t.states,u=t.options,l=t.error,p=t.success,f=t.apiInvokeTime,m=t.lts,g=Object(s.getParameter)("NOT_REPORT_EVENT");if(!(n&&g instanceof Array&&g.includes(n)))if(e.list[a]){var v=e.list[a],S=v.startTime,I=v.cname,_=v.uid,h=v.cid,y=(m=m||Date.now())-S,b=m-f,E=o()({invokeId:i,sid:a,cname:I,cid:h,lts:m,uid:_,success:p,elapse:y,apiName:r,execElapse:b},void 0!==u&&{options:JSON.stringify(u)},void 0!==c&&{execStates:JSON.stringify(c)},void 0!==l&&{errorCode:JSON.stringify(l)},void 0!==d&&{execResult:JSON.stringify(d)});e.send({type:"io.agora.pb.Wrtc.ApiInvoke",data:E})}else e._cacheInvokeReport(arguments[0])},e.send=function(t){try{Object(c.c)(e.url,t,null,function(n){Object(c.c)(e.urlBackup,t,null,function(e){},{timeout:1e4})},{timeout:1e4})}catch(e){}},e}()},function(e,t,n){"use strict";n.r(t),n.d(t,"getBrowserInfo",function(){return v}),n.d(t,"getBrowserVersion",function(){return p}),n.d(t,"getBrowserOS",function(){return f}),n.d(t,"isChrome",function(){return o}),n.d(t,"isSafari",function(){return a}),n.d(t,"isFireFox",function(){return r}),n.d(t,"isOpera",function(){return s}),n.d(t,"isQQBrowser",function(){return d}),n.d(t,"isWeChatBrowser",function(){return c}),n.d(t,"isSupportedPC",function(){return u}),n.d(t,"isSupportedMobile",function(){return l}),n.d(t,"getChromeKernelVersion",function(){return g}),n.d(t,"isChromeKernel",function(){return m});var i,o=function(){var e=v();return e.name&&"Chrome"===e.name},a=function(){var e=v();return e.name&&"Safari"===e.name},r=function(){var e=v();return e.name&&"Firefox"===e.name},s=function(){var e=v();return e.name&&"OPR"===e.name},d=function(){var e=v();return e.name&&"QQBrowser"===e.name},c=function(){var e=v();return e.name&&"MicroMessenger"===e.name},u=function(){var e=f();return"Linux"===e||"Mac OS X"===e||"Mac OS"===e||-1!==e.indexOf("Windows")},l=function(){var e=f();return"Android"===e||"iOS"===e},p=function(){return v().version},f=function(){return v().os},m=function(){return!!navigator.userAgent.match(/chrome\/[\d]./i)},g=function(){var e=navigator.userAgent.match(/chrome\/[\d]./i);return e&&e[0]&&e[0].split("/")[1]},v=(i=function(){var e,t=navigator.userAgent,n=t.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];"Chrome"===n[1]&&null!=(e=t.match(/(OPR(?=\/))\/?(\d+)/i))&&(n=e),"Safari"===n[1]&&null!=(e=t.match(/version\/(\d+)/i))&&(n[2]=e[1]),~t.toLowerCase().indexOf("qqbrowser")&&null!=(e=t.match(/(qqbrowser(?=\/))\/?(\d+)/i))&&(n=e),~t.toLowerCase().indexOf("micromessenger")&&null!=(e=t.match(/(micromessenger(?=\/))\/?(\d+)/i))&&(n=e),~t.toLowerCase().indexOf("edge")&&null!=(e=t.match(/(edge(?=\/))\/?(\d+)/i))&&(n=e),~t.toLowerCase().indexOf("trident")&&null!=(e=/\brv[ :]+(\d+)/g.exec(t)||[])&&(n=[null,"IE",e[1]]);var i=void 0,o=[{s:"Windows 10",r:/(Windows 10.0|Windows NT 10.0)/},{s:"Windows 8.1",r:/(Windows 8.1|Windows NT 6.3)/},{s:"Windows 8",r:/(Windows 8|Windows NT 6.2)/},{s:"Windows 7",r:/(Windows 7|Windows NT 6.1)/},{s:"Windows Vista",r:/Windows NT 6.0/},{s:"Windows Server 2003",r:/Windows NT 5.2/},{s:"Windows XP",r:/(Windows NT 5.1|Windows XP)/},{s:"Windows 2000",r:/(Windows NT 5.0|Windows 2000)/},{s:"Windows ME",r:/(Win 9x 4.90|Windows ME)/},{s:"Windows 98",r:/(Windows 98|Win98)/},{s:"Windows 95",r:/(Windows 95|Win95|Windows_95)/},{s:"Windows NT 4.0",r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},{s:"Windows CE",r:/Windows CE/},{s:"Windows 3.11",r:/Win16/},{s:"Android",r:/Android/},{s:"Open BSD",r:/OpenBSD/},{s:"Sun OS",r:/SunOS/},{s:"Linux",r:/(Linux|X11)/},{s:"iOS",r:/(iPhone|iPad|iPod)/},{s:"Mac OS X",r:/Mac OS X/},{s:"Mac OS",r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},{s:"QNX",r:/QNX/},{s:"UNIX",r:/UNIX/},{s:"BeOS",r:/BeOS/},{s:"OS/2",r:/OS\/2/},{s:"Search Bot",r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}];for(var a in o){var r=o[a];if(r.r.test(navigator.userAgent)){i=r.s;break}}return{name:n[1],version:n[2],os:i}}(),function(){return i})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.BUILD="v2.6.1-0-g01b3be9";t.VERSION="2.6.1";t.SUPPORT_RESOLUTION_LIST={"90p_1":[160,90],"120p_1":[160,120],"120p_3":[120,120],"120p_4":[212,120],"180p_1":[320,180],"180p_3":[180,180],"180p_4":[240,180],"240p_1":[320,240],"240p_3":[240,240],"240p_4":[424,240],"360p_1":[640,360],"360p_3":[360,360],"360p_4":[640,360],"360p_6":[360,360],"360p_7":[480,360],"360p_8":[480,360],"360p_9":[640,360],"360p_10":[640,360],"360p_11":[640,360],"480p_1":[640,480],"480p_2":[640,480],"480p_3":[480,480],"480p_4":[640,480],"480p_6":[480,480],"480p_8":[848,480],"480p_9":[848,480],"480p_10":[640,480],"720p_1":[1280,720],"720p_2":[1280,720],"720p_3":[1280,720],"720p_5":[960,720],"720p_6":[960,720],"1080p_1":[1920,1080],"1080p_2":[1920,1080],"1080p_3":[1920,1080],"1080p_5":[1920,1080],"1440p_1":[2560,1440],"1440p_2":[2560,1440],"4k_1":[3840,2160],"4k_3":[3840,2160]};const i={WEBCS_DOMAIN:["ap-web-1.agora.io","ap-web-2.agoraio.cn"],WEBCS_DOMAIN_BACKUP_LIST:["ap-web-3.agora.io","ap-web-4.agoraio.cn"],PROXY_CS:["ap-proxy-1.agora.io","ap-proxy-2.agora.io"],LOG_UPLOAD_SERVER:"logservice.agora.io",EVENT_REPORT_DOMAIN:"webcollector-1.agora.io",EVENT_REPORT_BACKUP_DOMAIN:"webcollector-2.agoraio.cn",WEBCS_BACKUP_CONNECT_TIMEOUT:6e3,HTTP_CONNECT_TIMEOUT:5e3,UPLOAD_LOG:!1,NOT_REPORT_EVENT:[],FILEPATH_LENMAX:255};t.setParameter=((e,t)=>void 0!==i[e]&&(i[e]=t,!0));t.getParameter=(e=>void 0!==i[e]?i[e]:null)},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t=n&&parseInt(i[n])}};if("object"==("undefined"==typeof window?"undefined":o()(window))?(!window.HTMLMediaElement||"srcObject"in window.HTMLMediaElement.prototype?(c=function(e,t){e.srcObject=t},u=function(e){return e.srcObject}):(c=function(e,t){"mozSrcObject"in e?e.mozSrcObject=t:(e._srcObject=t,e.src=t?URL.createObjectURL(t):null)},u=function(e){return"mozSrcObject"in e?e.mozSrcObject:e._srcObject}),a=window.navigator&&window.navigator.getUserMedia):(c=function(e,t){e.srcObject=t},u=function(e){return e.srcObject}),r=function(e,t){c(e,t)},function(e,t){c(e,u(t))},"undefined"!=typeof window&&window.navigator)if(navigator.mozGetUserMedia&&window.mozRTCPeerConnection){for(var m in f.log("This appears to be Firefox"),"firefox",s=f.extractVersion(navigator.userAgent,/Firefox\/([0-9]+)\./,1),31,l=mozRTCPeerConnection,p)p[m]=l.prototype[m];if(d=function(e,t){if(s<38&&e&&e.iceServers){for(var n=[],i=0;i0&&"function"==typeof e)return o(e,t);var r=function(e){var t={};return e.result().forEach(function(e){var n={id:e.id,timestamp:e.timestamp,type:e.type};e.names().forEach(function(t){n[t]=e.stat(t)}),t[n.id]=n}),t};if(arguments.length>=2){return o.apply(this,[function(e){a[1](r(e))},arguments[0]])}return new Promise(function(t,n){1===a.length&&null===e?o.apply(i,[function(e){t.apply(null,[r(e)])},n]):o.apply(i,[t,n])})},n},["createOffer","createAnswer"].forEach(function(e){var t=webkitRTCPeerConnection.prototype[e];webkitRTCPeerConnection.prototype[e]=function(){var e=this;if(arguments.length<1||1===arguments.length&&"object"===o()(arguments[0])){var n=1===arguments.length?arguments[0]:void 0;return new Promise(function(i,o){t.apply(e,[i,o,n])})}return t.apply(this,arguments)}}),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(e){var t=webkitRTCPeerConnection.prototype[e];webkitRTCPeerConnection.prototype[e]=function(){var e=arguments,n=this;return new Promise(function(i,o){t.apply(n,[e[0],function(){i(),e.length>=2&&e[1].apply(null,[])},function(t){o(t),e.length>=3&&e[2].apply(null,[t])}])})}});var v=function(e){if("object"!==o()(e)||e.mandatory||e.optional)return e;var t={};return Object.keys(e).forEach(function(n){if("require"!==n&&"advanced"!==n&&"mediaSource"!==n){var i="object"===o()(e[n])?e[n]:{ideal:e[n]};void 0!==i.exact&&"number"==typeof i.exact&&(i.min=i.max=i.exact);var a=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==i.ideal){t.optional=t.optional||[];var r={};"number"==typeof i.ideal?(r[a("min",n)]=i.ideal,t.optional.push(r),(r={})[a("max",n)]=i.ideal,t.optional.push(r)):(r[a("",n)]=i.ideal,t.optional.push(r))}void 0!==i.exact&&"number"!=typeof i.exact?(t.mandatory=t.mandatory||{},t.mandatory[a("",n)]=i.exact):["min","max"].forEach(function(e){void 0!==i[e]&&(t.mandatory=t.mandatory||{},t.mandatory[a(e,n)]=i[e])})}}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t};if(a=function(e,t,n){return e.audio&&(e.audio=v(e.audio)),e.video&&(e.video=v(e.video)),f.log("chrome: "+JSON.stringify(e)),navigator.webkitGetUserMedia(e,t,n)},navigator.getUserMedia=a,navigator.mediaDevices||(navigator.mediaDevices={getUserMedia:I,enumerateDevices:function(){return new Promise(function(e){var t={audio:"audioinput",video:"videoinput"};return MediaStreamTrack.getSources(function(n){e(n.map(function(e){return{label:e.label,kind:t[e.kind],deviceId:e.id,groupId:""}}))})})}}),navigator.mediaDevices.getUserMedia){var S=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(e){return f.log("spec: "+JSON.stringify(e)),e.audio=v(e.audio),e.video=v(e.video),f.log("chrome: "+JSON.stringify(e)),S(e)}}else navigator.mediaDevices.getUserMedia=function(e){return I(e)};void 0===navigator.mediaDevices.addEventListener&&(navigator.mediaDevices.addEventListener=function(){f.log("Dummy mediaDevices.addEventListener called.")}),void 0===navigator.mediaDevices.removeEventListener&&(navigator.mediaDevices.removeEventListener=function(){f.log("Dummy mediaDevices.removeEventListener called.")}),r=function(e,t){s>=43?c(e,t):void 0!==e.src?e.src=t?URL.createObjectURL(t):null:f.log("Error attaching stream to element.")},function(e,t){s>=43?c(e,u(t)):e.src=t.src}}else navigator.mediaDevices&&navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)?(f.log("This appears to be Edge"),"edge",s=f.extractVersion(navigator.userAgent,/Edge\/(\d+).(\d+)$/,2),12):f.log("Browser does not appear to be WebRTC-capable");else f.log("This does not appear to be a browser"),"not a browser";function I(e){return new Promise(function(t,n){a(e,t,n)})}var _;try{Object.defineProperty({},"version",{set:function(e){s=e}})}catch(e){}d?_=d:"undefined"!=typeof window&&(_=window.RTCPeerConnection)},function(e,t,n){var i=n(15);e.exports=function(e){for(var t=1;ti(this,void 0,void 0,function*(){const t={video:[],audio:[]};if("undefined"==typeof window){const e="NOT_BROWSER_ENV";return r.default.error(`getSupportedCodec: ${e}`),Promise.reject(e)}{let n;try{n=o.createRTCPeerConnection({iceServers:[]})}catch(e){return r.default.error("Failed to init RTCPeerConnection",e),Promise.reject(e)}if(n){if(e&&e.stream){let t;e.stream.getTracks&&n.addTrack?e.stream.getTracks().forEach(t=>{n.addTrack(t,e.stream)}):n.addStream(e.stream),t=a.isSafari()||a.isFireFox()?yield n.createOffer():yield new Promise((e,t)=>{n.createOffer(e,t)}),n.close();const i=t.sdp;return s(i)}{const e={mandatory:{OfferToReceiveAudio:!0,OfferToReceiveVideo:!0}};let t;(a.isSafari()||a.isFireFox()||a.isWeChatBrowser())&&n.addTransceiver?(n.addTransceiver("audio"),n.addTransceiver("video"),t=yield n.createOffer()):t=yield new Promise((t,i)=>{const o=setTimeout(()=>{i("CREATEOFFER_TIMEOUT")},3e3);n.createOffer(e=>{clearTimeout(o),t(e)},e=>{clearTimeout(o),i(e)},e)}),n.close();const i=t.sdp;return s(i)}}return r.default.warning("getSupportedCodec: no RTCPeerConnection constructor is detected"),Promise.resolve(t)}}));const s=e=>{const t={video:[],audio:[]};return e.match(/ VP8/i)&&t.video.push("VP8"),e.match(/ H264/i)&&t.video.push("H264"),e.match(/ opus/i)&&t.audio.push("OPUS"),Promise.resolve(t)}},function(e,t){var n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(n){var i=new Uint8Array(16);e.exports=function(){return n(i),i}}else{var o=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),o[t]=e>>>((3&t)<<3)&255;return o}}},function(e,t){for(var n=[],i=0;i<256;++i)n[i]=(i+256).toString(16).substr(1);e.exports=function(e,t){var i=t||0,o=n;return[o[e[i++]],o[e[i++]],o[e[i++]],o[e[i++]],"-",o[e[i++]],o[e[i++]],"-",o[e[i++]],o[e[i++]],"-",o[e[i++]],o[e[i++]],"-",o[e[i++]],o[e[i++]],o[e[i++]],o[e[i++]],o[e[i++]],o[e[i++]]].join("")}},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const i="object"==typeof window&&window.RTCPeerConnection,o="object"==typeof window&&window.webkitRTCPeerConnection,a="object"==typeof window&&window.mozRTCPeerConnection;t.createRTCPeerConnection=(e=>{const t=i||o||a;return t?new t(e):null})},function(e,t,n){"use strict";n.r(t);var i=n(3),o=n(0),a=n(1),r=function(){var e={dispatcher:{}};return e.dispatcher.eventListeners={},e.addEventListener=function(t,n){void 0===e.dispatcher.eventListeners[t]&&(e.dispatcher.eventListeners[t]=[]),e.dispatcher.eventListeners[t].push(n)},e.hasListeners=function(t){return!(!e.dispatcher.eventListeners[t]||!e.dispatcher.eventListeners[t].length)},e.on=e.addEventListener,e.removeEventListener=function(t,n){var i;-1!==(i=e.dispatcher.eventListeners[t].indexOf(n))&&e.dispatcher.eventListeners[t].splice(i,1)},e.dispatchEvent=function(t){var n;for(n in e.dispatcher.eventListeners[t.type])e.dispatcher.eventListeners[t.type]&&e.dispatcher.eventListeners[t.type].hasOwnProperty(n)&&"function"==typeof e.dispatcher.eventListeners[t.type][n]&&e.dispatcher.eventListeners[t.type][n](t)},e.dispatchSocketEvent=function(t){var n;for(n in e.dispatcher.eventListeners[t.type])e.dispatcher.eventListeners[t.type]&&e.dispatcher.eventListeners[t.type].hasOwnProperty(n)&&"function"==typeof e.dispatcher.eventListeners[t.type][n]&&e.dispatcher.eventListeners[t.type][n](t.msg)},e},s=function(e){var t={};return t.type=e.type,t},d=function(e){var t=s(e);return t.stream=e.stream,t.reason=e.reason,t.msg=e.msg,t},c=function(e){var t=s(e);return t.uid=e.uid,t.attr=e.attr,t.stream=e.stream,t},u=function(e){var t=s(e);return t.msg=e.msg,t},l=function(e){var t=s(e);return t.url=e.url,t.uid=e.uid,t.status=e.status,t.reason=e.reason,t},p=n(2),f=function(){};f.prototype.set=function(e,t){["BatteryLevel"].indexOf(e)>-1&&(this[e]=t)};var m=new function(){var e=r();return e.states={UNINIT:"UNINIT",INITING:"INITING",INITED:"INITED"},e.state=e.states.UNINIT,e.batteryManager=null,e._init=function(t,n){e.state=e.states.INITING,navigator.getBattery?navigator.getBattery().then(function(n){e.batteryManager=n,t&&setTimeout(function(){t()},0)}).catch(function(e){o.default.debug("navigator.getBattery is disabled",e),t&&t()}):(e.state=e.states.INITED,t&&t())},e._getBatteryStats=function(){var t={};return e.batteryManager&&e.batteryManager.level?t.BatteryLevel=Math.floor(100*e.batteryManager.level):t.BatteryLevel="UNSUPPORTED",t},e.getStats=function(t,n){var i=new f,o=e._getBatteryStats();o&&o.BatteryLevel&&i.set("BatteryLevel",o.BatteryLevel),t&&t(i)},e._init(),e},g=n(6),v=n.n(g),S=n(4),I=n.n(S),_=function(e){var t=r();return t.url=".",t},h=n(8),y={101100:"NO_FLAG_SET",101101:"FLAG_SET_BUT_EMPTY",101102:"INVALID_FALG_SET",101203:"NO_SERVICE_AVIABLE",0:"OK_CODE",5:"INVALID_VENDOR_KEY",7:"INVALID_CHANNEL_NAME",8:"INTERNAL_ERROR",9:"NO_AUTHORIZED",10:"DYNAMIC_KEY_TIMEOUT",11:"NO_ACTIVE_STATUS",13:"DYNAMIC_KEY_EXPIRED",14:"STATIC_USE_DYANMIC_KEY",15:"DYNAMIC_USE_STATIC_KEY"},b={2000:"ERR_NO_VOCS_AVAILABLE",2001:"ERR_NO_VOS_AVAILABLE",2002:"ERR_JOIN_CHANNEL_TIMEOUT",2003:"WARN_REPEAT_JOIN",2004:"ERR_JOIN_BY_MULTI_IP",101:"ERR_INVALID_VENDOR_KEY",102:"ERR_INVALID_CHANNEL_NAME",103:"WARN_NO_AVAILABLE_CHANNEL",104:"WARN_LOOKUP_CHANNEL_TIMEOUT",105:"WARN_LOOKUP_CHANNEL_REJECTED",106:"WARN_OPEN_CHANNEL_TIMEOUT",107:"WARN_OPEN_CHANNEL_REJECTED",108:"WARN_REQUEST_DEFERRED",109:"ERR_DYNAMIC_KEY_TIMEOUT",110:"ERR_NO_AUTHORIZED",111:"ERR_VOM_SERVICE_UNAVAILABLE",112:"ERR_NO_CHANNEL_AVAILABLE_CODE",113:"ERR_TOO_MANY_USERS",114:"ERR_MASTER_VOCS_UNAVAILABLE",115:"ERR_INTERNAL_ERROR",116:"ERR_NO_ACTIVE_STATUS",117:"ERR_INVALID_UID",118:"ERR_DYNAMIC_KEY_EXPIRED",119:"ERR_STATIC_USE_DYANMIC_KE",120:"ERR_DYNAMIC_USE_STATIC_KE",2:"K_TIMESTAMP_EXPIRED",3:"K_CHANNEL_PERMISSION_INVALID",4:"K_CERTIFICATE_INVALID",5:"K_CHANNEL_NAME_EMPTY",6:"K_CHANNEL_NOT_FOUND",7:"K_TICKET_INVALID",8:"K_CHANNEL_CONFLICTED",9:"K_SERVICE_NOT_READY",10:"K_SERVICE_TOO_HEAVY",14:"K_UID_BANNED",15:"K_IP_BANNED",16:"K_CHANNEL_BANNED"},E=["NO_SERVICE_AVIABLE"],R={19:"ERR_ALREADY_IN_USE",10:"ERR_TIMEDOUT",3:"ERR_NOT_READY",9:"ERR_NO_PERMISSION",0:"UNKNOW_ERROR"},A={FAILED:"FAILED",INVALID_KEY:"INVALID_KEY",INVALID_CLIENT_MODE:"INVALID_CLIENT_MODE",INVALID_CLIENT_CODEC:"INVALID_CLIENT_CODEC",CLIENT_MODE_CODEC_MISMATCH:"CLIENT_MODE_CODEC_MISMATCH",WEB_API_NOT_SUPPORTED:"WEB_API_NOT_SUPPORTED",INVALID_PARAMETER:"INVALID_PARAMETER",INVALID_OPERATION:"INVALID_OPERATION",INVALID_LOCAL_STREAM:"INVALID_LOCAL_STREAM",INVALID_REMOTE_STREAM:"INVALID_REMOTE_STREAM",INVALID_DYNAMIC_KEY:"INVALID_DYNAMIC_KEY",DYNAMIC_KEY_TIMEOUT:"DYNAMIC_KEY_TIMEOUT",NO_VOCS_AVAILABLE:"NO_VOCS_AVAILABLE",NO_VOS_AVAILABLE:"ERR_NO_VOS_AVAILABLE",JOIN_CHANNEL_TIMEOUT:"ERR_JOIN_CHANNEL_TIMEOUT",NO_AVAILABLE_CHANNEL:"NO_AVAILABLE_CHANNEL",LOOKUP_CHANNEL_TIMEOUT:"LOOKUP_CHANNEL_TIMEOUT",LOOKUP_CHANNEL_REJECTED:"LOOKUP_CHANNEL_REJECTED",OPEN_CHANNEL_TIMEOUT:"OPEN_CHANNEL_TIMEOUT",OPEN_CHANNEL_REJECTED:"OPEN_CHANNEL_REJECTED",REQUEST_DEFERRED:"REQUEST_DEFERRED",STREAM_ALREADY_PUBLISHED:"STREAM_ALREADY_PUBLISHED",STREAM_NOT_YET_PUBLISHED:"STREAM_NOT_YET_PUBLISHED",JOIN_TOO_FREQUENT:"JOIN_TOO_FREQUENT",SOCKET_ERROR:"SOCKET_ERROR",SOCKET_DISCONNECTED:"SOCKET_DISCONNECTED",PEERCONNECTION_FAILED:"PEERCONNECTION_FAILED",CONNECT_GATEWAY_ERROR:"CONNECT_GATEWAY_ERROR",SERVICE_NOT_AVAILABLE:"SERVICE_NOT_AVAILABLE",JOIN_CHANNEL_FAILED:"JOIN_CHANNEL_FAILED",PUBLISH_STREAM_FAILED:"PUBLISH_STREAM_FAILED",UNPUBLISH_STREAM_FAILED:"UNPUBLISH_STREAM_FAILED",SUBSCRIBE_STREAM_FAILED:"SUBSCRIBE_STREAM_FAILED",UNSUBSCRIBE_STREAM_FAILED:"UNSUBSCRIBE_STREAM_FAILED",NO_SUCH_REMOTE_STREAM:"NO_SUCH_REMOTE_STREAM",ERR_FAILED:"1",ERR_INVALID_VENDOR_KEY:"101",ERR_INVALID_CHANNEL_NAME:"102",WARN_NO_AVAILABLE_CHANNEL:"103",WARN_LOOKUP_CHANNEL_TIMEOUT:"104",WARN_LOOKUP_CHANNEL_REJECTED:"105",WARN_OPEN_CHANNEL_TIMEOUT:"106",WARN_OPEN_CHANNEL_REJECTED:"107",WARN_REQUEST_DEFERRED:"108",ERR_DYNAMIC_KEY_TIMEOUT:"109",ERR_INVALID_DYNAMIC_KEY:"110",ERR_NO_VOCS_AVAILABLE:"2000",ERR_NO_VOS_AVAILABLE:"2001",ERR_JOIN_CHANNEL_TIMEOUT:"2002",IOS_NOT_SUPPORT:"IOS_NOT_SUPPORT",WECHAT_NOT_SUPPORT:"WECHAT_NOT_SUPPORT",SHARING_SCREEN_NOT_SUPPORT:"SHARING_SCREEN_NOT_SUPPORT",STILL_ON_PUBLISHING:"STILL_ON_PUBLISHING",LOW_STREAM_ALREADY_PUBLISHED:"LOW_STREAM_ALREADY_PUBLISHED",LOW_STREAM_NOT_YET_PUBLISHED:"LOW_STREAM_ALREADY_PUBLISHED",HIGH_STREAM_NOT_VIDEO_TRACE:"HIGH_STREAM_NOT_VIDEO_TRACE",NOT_FIND_DEVICE_BY_LABEL:"NOT_FIND_DEVICE_BY_LABEL",ENABLE_DUALSTREAM_FAILED:"ENABLE_DUALSTREAM_FAILED",DISABLE_DUALSTREAM_FAILED:"DISABLE_DUALSTREAM_FAILED",PLAYER_NOT_FOUND:"PLAYER_NOT_FOUND",ELECTRON_NOT_SUPPORT_SHARING_SCREEN:"ELECTRON_NOT_SUPPORT_SHARING_SCREEN",BAD_ENVIRONMENT:"BAD_ENVIRONMENT"},T=function(e){var t=_({});t.id=e.id,t.fit=e.options&&e.options.fit,"contain"!==t.fit&&"cover"!==t.fit&&(t.fit=null),t.url=e.url,t.stream=e.stream.stream,t.elementID=e.elementID,t.setAudioOutput=function(e,n,i){var a=t.video||t.audio;return a?a.setSinkId?void a.setSinkId(e).then(function(){return o.default.debug("["+t.id+"] "+"video ".concat(t.id," setAudioOutput ").concat(e," SUCCESS")),a==t.video&&t.audio?t.audio.setSinkId(e):Promise.resolve()}).then(function(){return o.default.debug("["+t.id+"] "+"audio ".concat(t.id," setAudioOutput ").concat(e," SUCCESS")),n&&n()}).catch(function(e){return o.default.error("["+t.id+"] VideoPlayer.setAudioOutput",e),i&&i(e)}):(o.default.error("["+t.id+"] ",A.WEB_API_NOT_SUPPORTED),i&&i(A.WEB_API_NOT_SUPPORTED)):(o.default.error("["+t.id+"] ",A.PLAYER_NOT_FOUND),i&&i(A.PLAYER_NOT_FOUND))},t.destroy=function(){Object(h.c)(t.video,null),Object(h.c)(t.audio,null),t.video.pause(),delete t.resizer,document.getElementById(t.div.id)&&t.parentNode.contains(t.div)&&t.parentNode.removeChild(t.div)},t.div=document.createElement("div"),t.div.setAttribute("id","player_"+t.id),e.stream.video?t.div.setAttribute("style","width: 100%; height: 100%; position: relative; background-color: black; overflow: hidden;"):t.div.setAttribute("style","width: 100%; height: 100%; position: relative; overflow: hidden;"),t.video=document.createElement("video"),t.video.setAttribute("id","video"+t.id),e.stream.local&&!e.stream.screen?e.stream.mirror?t.video.setAttribute("style","width: 100%; height: 100%; position: absolute; transform: rotateY(180deg); object-fit: ".concat(t.fit||"cover",";")):t.video.setAttribute("style","width: 100%; height: 100%; position: absolute; object-fit: ".concat(t.fit||"cover",";")):e.stream.video?t.video.setAttribute("style","width: 100%; height: 100%; position: absolute; object-fit: ".concat(t.fit||"cover",";")):e.stream.screen?t.video.setAttribute("style","width: 100%; height: 100%; position: absolute; object-fit: ".concat(t.fit||"contain")):t.video.setAttribute("style","width: 100%; height: 100%; position: absolute; display: none; object-fit: ".concat(t.fit||"cover"));var n={autoplay:!0,muted:!!e.stream.local||!(!p.isSafari()&&"iOS"!==p.getBrowserOS())&&"video_element_muted",playsinline:!0,controls:!(!p.isSafari()&&"iOS"!==p.getBrowserOS()||e.stream.local),volume:null},i=I()({},n,e.options);if(!0!==i.muted||i.volume||(i.volume=0),i.autoplay&&t.video.setAttribute("autoplay",""),!0!==i.muted&&"video_element_muted"!==i.muted||(t.video.setAttribute("muted",""),t.video.muted=!0),i.playsinline&&t.video.setAttribute("playsinline",""),i.controls&&t.video.setAttribute("controls",""),Number.isFinite(i.volume)&&(t.video.volume=i.volume),t.audio=document.createElement("audio"),t.audio.setAttribute("id","audio"+t.id),i.autoplay&&t.audio.setAttribute("autoplay",""),!0===i.muted&&t.audio.setAttribute("muted",""),!0===i.muted&&(t.audio.muted=!0),i.playsinline&&t.audio.setAttribute("playsinline",""),Number.isFinite(i.volume)&&(t.audio.volume=i.volume),void 0!==t.elementID?(document.getElementById(t.elementID).appendChild(t.div),t.container=document.getElementById(t.elementID)):(document.body.appendChild(t.div),t.container=document.body),t.parentNode=t.div.parentNode,t.video.addEventListener("playing",function(e){!function e(){t.video.videoWidth*t.video.videoHeight>4?o.default.debug("["+t.id+"] video dimensions:",t.video.videoWidth,t.video.videoHeight):setTimeout(e,50)}()}),e.stream.hasVideo()||e.stream.hasScreen())t.div.appendChild(t.video),t.div.appendChild(t.audio),Object(h.b)(t.video,e.stream.stream),Object(h.b)(t.audio,e.stream.stream);else if(!1!==i.muted&&"video_element_muted"!==i.muted||(t.video.removeAttribute("muted"),t.video.muted=!1,t.div.appendChild(t.video)),window.MediaStream&&p.isSafari()){var a=new MediaStream(e.stream.stream.getAudioTracks());Object(h.c)(t.video,a)}else Object(h.c)(t.video,e.stream.stream);return t.setAudioVolume=function(e){var n=parseInt(e)/100;isFinite(n)&&(n<0?n=0:n>1&&(n=1),t.video&&(t.video.volume=n),t.audio&&(t.audio.volume=n))},t},O=function(e){var t={},n=webkitRTCPeerConnection;t.pc_config={iceServers:[]},t.con={optional:[{DtlsSrtpKeyAgreement:!0}]},e.iceServers instanceof Array?t.pc_config.iceServers=e.iceServers:(e.stunServerUrl&&(e.stunServerUrl instanceof Array?e.stunServerUrl.map(function(e){"string"==typeof e&&""!==e&&t.pc_config.iceServers.push({url:e})}):"string"==typeof e.stunServerUrl&&""!==e.stunServerUrl&&t.pc_config.iceServers.push({url:e.stunServerUrl})),e.turnServer&&(e.turnServer instanceof Array?e.turnServer.map(function(e){"string"==typeof e.url&&""!==e.url&&t.pc_config.iceServers.push({username:e.username,credential:e.password,url:e.url})}):"string"==typeof e.turnServer.url&&""!==e.turnServer.url&&t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.password,url:e.turnServer.url}))),void 0===e.audio&&(e.audio=!0),void 0===e.video&&(e.video=!0),t.mediaConstraints={mandatory:{OfferToReceiveVideo:e.video,OfferToReceiveAudio:e.audio}},t.roapSessionId=103,t.peerConnection=new n(t.pc_config,t.con),t.peerConnection.onicecandidate=function(e){e.candidate?t.iceCandidateCount+=1:(o.default.debug("PeerConnection State: "+t.peerConnection.iceGatheringState),void 0===t.ices&&(t.ices=0),t.ices=t.ices+1,t.ices>=1&&t.moreIceComing&&(t.moreIceComing=!1,t.markActionNeeded()))};var i=function(t){var n,i;return e.minVideoBW&&e.maxVideoBW&&(i=(n=t.match(/m=video.*\r\n/))[0]+"b=AS:"+e.maxVideoBW+"\r\n",t=t.replace(n[0],i),o.default.debug("Set Video Bitrate - min:"+e.minVideoBW+" max:"+e.maxVideoBW)),e.maxAudioBW&&(i=(n=t.match(/m=audio.*\r\n/))[0]+"b=AS:"+e.maxAudioBW+"\r\n",t=t.replace(n[0],i)),t};return t.processSignalingMessage=function(e){var n,o=JSON.parse(e);t.incomingMessage=o,"new"===t.state?"OFFER"===o.messageType?(n={sdp:o.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state):"offer-sent"===t.state?"ANSWER"===o.messageType?((n={sdp:o.sdp,type:"answer"}).sdp=i(n.sdp),t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.sendOK(),t.state="established"):"pr-answer"===o.messageType?(n={sdp:o.sdp,type:"pr-answer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))):"offer"===o.messageType?t.error("Not written yet"):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state):"established"===t.state&&("OFFER"===o.messageType?(n={sdp:o.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state))},t.addStream=function(e){t.peerConnection.addStream(e),t.markActionNeeded()},t.removeStream=function(){t.markActionNeeded()},t.close=function(){t.state="closed",t.peerConnection.close()},t.markActionNeeded=function(){t.actionNeeded=!0,t.doLater(function(){t.onstablestate()})},t.doLater=function(e){window.setTimeout(e,1)},t.onstablestate=function(){var e;if(t.actionNeeded){if("new"===t.state||"established"===t.state)t.peerConnection.createOffer(function(e){if(e.sdp=i(e.sdp),o.default.debug("Changed",e.sdp),e.sdp!==t.prevOffer)return t.peerConnection.setLocalDescription(e),t.state="preparing-offer",void t.markActionNeeded();o.default.debug("Not sending a new offer")},function(e){o.default.debug("peer connection create offer failed ",e)},t.mediaConstraints);else if("preparing-offer"===t.state){if(t.moreIceComing)return;t.prevOffer=t.peerConnection.localDescription.sdp,t.sendMessage("OFFER",t.prevOffer),t.state="offer-sent"}else if("offer-received"===t.state)t.peerConnection.createAnswer(function(e){if(t.peerConnection.setLocalDescription(e),t.state="offer-received-preparing-answer",t.iceStarted)t.markActionNeeded();else{var n=new Date;o.default.debug(n.getTime()+": Starting ICE in responder"),t.iceStarted=!0}},function(e){o.default.debug("peer connection create answer failed ",e)},t.mediaConstraints);else if("offer-received-preparing-answer"===t.state){if(t.moreIceComing)return;e=t.peerConnection.localDescription.sdp,t.sendMessage("ANSWER",e),t.state="established"}else t.error("Dazed and confused in state "+t.state+", stopping here");t.actionNeeded=!1}},t.sendOK=function(){t.sendMessage("OK")},t.sendMessage=function(e,n){var i={};i.messageType=e,i.sdp=n,"OFFER"===e?(i.offererSessionId=t.sessionId,i.answererSessionId=t.otherSessionId,i.seq=t.sequenceNumber+=1,i.tiebreaker=Math.floor(429496723*Math.random()+1)):(i.offererSessionId=t.incomingMessage.offererSessionId,i.answererSessionId=t.sessionId,i.seq=t.incomingMessage.seq),t.onsignalingmessage(JSON.stringify(i))},t._getSender=function(e){if(t.peerConnection&&t.peerConnection.getSenders){var n=t.peerConnection.getSenders().find(function(t){return t.track.kind==e});if(n)return n}return null},t.hasSender=function(e){return!!t._getSender(e)},t.replaceTrack=function(e,n,i){var o=t._getSender(e.kind);if(!o)return i("NO_SENDER_FOUND");try{o.replaceTrack(e)}catch(e){return i&&i(e)}setTimeout(function(){return n&&n()},50)},t.error=function(e){throw"Error in RoapOnJsep: "+e},t.sessionId=t.roapSessionId+=1,t.sequenceNumber=0,t.actionNeeded=!1,t.iceStarted=!1,t.moreIceComing=!0,t.iceCandidateCount=0,t.onsignalingmessage=e.callback,t.peerConnection.onopen=function(){t.onopen&&t.onopen()},t.peerConnection.onaddstream=function(e){t.onaddstream&&t.onaddstream(e)},t.peerConnection.onremovestream=function(e){t.onremovestream&&t.onremovestream(e)},t.peerConnection.oniceconnectionstatechange=function(e){t.oniceconnectionstatechange&&t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)},t.onaddstream=null,t.onremovestream=null,t.state="new",t.markActionNeeded(),t},C=function(e){var t={},n=h.a;t.uid=e.uid,t.isVideoMute=e.isVideoMute,t.isAudioMute=e.isAudioMute,t.isSubscriber=e.isSubscriber,t.clientId=e.clientId,t.pc_config={iceServers:[{url:"stun:webcs.agora.io:3478"}]},t.con={optional:[{DtlsSrtpKeyAgreement:!0}]},e.iceServers instanceof Array?t.pc_config.iceServers=e.iceServers:(e.stunServerUrl&&(e.stunServerUrl instanceof Array?e.stunServerUrl.map(function(e){"string"==typeof e&&""!==e&&t.pc_config.iceServers.push({url:e})}):"string"==typeof e.stunServerUrl&&""!==e.stunServerUrl&&t.pc_config.iceServers.push({url:e.stunServerUrl})),e.turnServer&&(e.turnServer instanceof Array?e.turnServer.map(function(e){"string"==typeof e.url&&""!==e.url&&t.pc_config.iceServers.push({username:e.username,credential:e.credential,url:e.url})}):"string"==typeof e.turnServer.url&&""!==e.turnServer.url&&(t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:"turn:"+e.turnServer.url+":"+e.turnServer.udpport+"?transport=udp"}),"string"==typeof e.turnServer.tcpport&&""!==e.turnServer.tcpport&&t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:"turn:"+e.turnServer.url+":"+e.turnServer.tcpport+"?transport=tcp"}),!0===e.turnServer.forceturn&&(t.pc_config.iceTransportPolicy="relay")))),void 0===e.audio&&(e.audio=!0),void 0===e.video&&(e.video=!0),t.mediaConstraints={mandatory:{OfferToReceiveVideo:e.video,OfferToReceiveAudio:e.audio}},t.roapSessionId=103;try{t.pc_config.sdpSemantics="plan-b",t.peerConnection=new n(t.pc_config,t.con)}catch(e){delete t.pc_config.sdpSemantics,t.peerConnection=new n(t.pc_config,t.con)}t.peerConnection.onicecandidate=function(e){var n,i,a,r;i=(n=t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/),a=n.match(/a=candidate:.+typ\shost.+\r\n/),r=n.match(/a=candidate:.+typ\srelay.+\r\n/),0===t.iceCandidateCount&&(t.timeout=setTimeout(function(){t.moreIceComing&&(t.moreIceComing=!1,t.markActionNeeded())},1e3)),null===i&&null===a&&null===r||void 0!==t.ice||(o.default.debug("["+t.clientId+"]srflx candidate : "+i+" relay candidate: "+r+" host candidate : "+a),clearTimeout(t.timeout),t.ice=0,t.moreIceComing=!1,t.markActionNeeded()),t.iceCandidateCount=t.iceCandidateCount+1},o.default.debug("["+t.clientId+']Created webkitRTCPeerConnnection with config "'+JSON.stringify(t.pc_config)+'".');var i=function(t){return e.screen&&(t=t.replace("a=x-google-flag:conference\r\n","")),t},a=function(n){var i,a;if(e.minVideoBW&&e.maxVideoBW){a=(i=n.match(/m=video.*\r\n/))[0]+"b=AS:"+e.maxVideoBW+"\r\n";var r=0,s=0;"h264"===e.codec?(r=n.search(/a=rtpmap:(\d+) H264\/90000\r\n/),s=n.search(/H264\/90000\r\n/)):"vp8"===e.codec&&(r=n.search(/a=rtpmap:(\d+) VP8\/90000\r\n/),s=n.search(/VP8\/90000\r\n/)),-1!==r&&-1!==s&&s-r>10&&(a=a+"a=fmtp:"+n.slice(r+9,s-1)+" x-google-min-bitrate="+e.minVideoBW+"\r\n"),n=n.replace(i[0],a),o.default.debug("["+t.clientId+"]Set Video Bitrate - min:"+e.minVideoBW+" max:"+e.maxVideoBW)}return e.maxAudioBW&&(a=(i=n.match(/m=audio.*\r\n/))[0]+"b=AS:"+e.maxAudioBW+"\r\n",n=n.replace(i[0],a)),n};return t.processSignalingMessage=function(e){var n,o=JSON.parse(e);t.incomingMessage=o,"new"===t.state?"OFFER"===o.messageType?(n={sdp:o.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state):"offer-sent"===t.state?"ANSWER"===o.messageType?((n={sdp:o.sdp,type:"answer"}).sdp=i(n.sdp),n.sdp=a(n.sdp),t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.sendOK(),t.state="established"):"pr-answer"===o.messageType?(n={sdp:o.sdp,type:"pr-answer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))):"offer"===o.messageType?t.error("Not written yet"):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state):"established"===t.state&&("OFFER"===o.messageType?(n={sdp:o.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.state="offer-received",t.markActionNeeded()):"ANSWER"===o.messageType?((n={sdp:o.sdp,type:"answer"}).sdp=i(n.sdp),n.sdp=a(n.sdp),t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state))},t.getVideoRelatedStats=function(e){t.peerConnection.getStats(null,function(n){Object.keys(n).forEach(function(i){var o=n[i];t.isSubscriber?"video"===o.mediaType&&o.id&&~o.id.indexOf("recv")&&e&&e({mediaType:"video",peerId:t.uid,isVideoMute:t.isVideoMute,frameRateReceived:o.googFrameRateReceived,frameRateDecoded:o.googFrameRateDecoded,bytesReceived:o.bytesReceived,packetsReceived:o.packetsReceived,packetsLost:o.packetsLost}):"video"===o.mediaType&&o.id&&~o.id.indexOf("send")&&e&&e({mediaType:"video",isVideoMute:t.isVideoMute,frameRateInput:o.googFrameRateInput,frameRateSent:o.googFrameRateSent,googRtt:o.googRtt})})})},t.getAudioRelatedStats=function(e){t.peerConnection.getStats(null,function(n){Object.keys(n).forEach(function(i){var o=n[i];t.isSubscriber&&"audio"===o.mediaType&&o.id&&~o.id.indexOf("recv")&&e&&e({mediaType:"audio",peerId:t.uid,isAudioMute:t.isAudioMute,frameDropped:parseInt(o.googDecodingPLC)+parseInt(o.googDecodingPLCCNG)+"",frameReceived:o.googDecodingCTN,googJitterReceived:o.googJitterReceived,bytesReceived:o.bytesReceived,packetsReceived:o.packetsReceived,packetsLost:o.packetsLost})})})},t.getStatsRate=function(e){t.getStats(function(t){e(t)})},t.getStats=function(e){t.peerConnection.getStats(null,function(n){var i=[],o=[],a=null;Object.keys(n).forEach(function(e){var t=n[e];o.push(t),"ssrc"!==t.type&&"VideoBwe"!==t.type||(a=t.timestamp,i.push(t))}),i.push({id:"time",startTime:t.connectedTime,timestamp:a||new Date}),e(i,o)})},t.addTrack=function(e,n){t.peerConnection.addTrack(e,n)},t.removeTrack=function(e,n){t.peerConnection.removeTrack(t.peerConnection.getSenders().find(function(t){return t.track==e}))},t.addStream=function(e){t.peerConnection.addStream(e),t.markActionNeeded()},t.removeStream=function(){t.markActionNeeded()},t.close=function(){t.state="closed",t.peerConnection.close()},t.markActionNeeded=function(){t.actionNeeded=!0,t.doLater(function(){t.onstablestate()})},t.doLater=function(e){window.setTimeout(e,1)},t.onstablestate=function(){var e;if(t.actionNeeded){if("new"===t.state||"established"===t.state)t.peerConnection.createOffer(function(e){if(e.sdp!==t.prevOffer)return t.peerConnection.setLocalDescription(e),t.state="preparing-offer",void t.markActionNeeded();o.default.debug("["+t.clientId+"]Not sending a new offer")},function(e){o.default.debug("["+t.clientId+"]peer connection create offer failed ",e)},t.mediaConstraints);else if("preparing-offer"===t.state){if(t.moreIceComing)return;t.prevOffer=t.peerConnection.localDescription.sdp,t.prevOffer=t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g,"a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"),t.sendMessage("OFFER",t.prevOffer),t.state="offer-sent"}else if("offer-received"===t.state)t.peerConnection.createAnswer(function(e){if(t.peerConnection.setLocalDescription(e),t.state="offer-received-preparing-answer",t.iceStarted)t.markActionNeeded();else{var n=new Date;o.default.debug("["+t.clientId+"]"+n.getTime()+": Starting ICE in responder"),t.iceStarted=!0}},function(e){o.default.debug("["+t.clientId+"]peer connection create answer failed ",e)},t.mediaConstraints);else if("offer-received-preparing-answer"===t.state){if(t.moreIceComing)return;e=t.peerConnection.localDescription.sdp,t.sendMessage("ANSWER",e),t.state="established"}else t.error("Dazed and confused in state "+t.state+", stopping here");t.actionNeeded=!1}},t.sendOK=function(){t.sendMessage("OK")},t.sendMessage=function(e,n){var i={};i.messageType=e,i.sdp=n,"OFFER"===e?(i.offererSessionId=t.sessionId,i.answererSessionId=t.otherSessionId,i.seq=t.sequenceNumber+=1,i.tiebreaker=Math.floor(429496723*Math.random()+1)):(i.offererSessionId=t.incomingMessage.offererSessionId,i.answererSessionId=t.sessionId,i.seq=t.incomingMessage.seq),t.onsignalingmessage(JSON.stringify(i))},t._getSender=function(e){if(t.peerConnection&&t.peerConnection.getSenders){var n=t.peerConnection.getSenders().find(function(t){return t.track.kind==e});if(n)return n}return null},t.hasSender=function(e){return!!t._getSender(e)},t.replaceTrack=function(e,n,i){var o=t._getSender(e.kind);if(!o)return i("NO_SENDER_FOUND");try{o.replaceTrack(e)}catch(e){return i&&i(e)}setTimeout(function(){return n&&n()},50)},t.error=function(e){throw"Error in RoapOnJsep: "+e},t.sessionId=t.roapSessionId+=1,t.sequenceNumber=0,t.actionNeeded=!1,t.iceStarted=!1,t.moreIceComing=!0,t.iceCandidateCount=0,t.onsignalingmessage=e.callback,t.peerConnection.ontrack=function(e){t.onaddstream&&(t.onaddstream(e,"ontrack"),t.peerConnection.onaddstream=null)},t.peerConnection.onaddstream=function(e){t.onaddstream&&(t.onaddstream(e,"onaddstream"),t.peerConnection.ontrack=null)},t.peerConnection.onremovestream=function(e){t.onremovestream&&t.onremovestream(e)},t.peerConnection.oniceconnectionstatechange=function(e){"connected"===e.currentTarget.iceConnectionState&&(t.connectedTime=new Date),t.oniceconnectionstatechange&&t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)},t.peerConnection.onnegotiationneeded=function(){void 0!==t.prevOffer&&t.peerConnection.createOffer().then(function(e){return e.sdp=e.sdp.replace(/a=recvonly\r\n/g,"a=inactive\r\n"),e.sdp=i(e.sdp),e.sdp=a(e.sdp),t.peerConnection.setLocalDescription(e)}).then(function(){t.onnegotiationneeded&&t.onnegotiationneeded(t.peerConnection.localDescription.sdp)}).catch(function(e){console.log("createOffer error: ",e)})},t.onaddstream=null,t.onremovestream=null,t.onnegotiationneeded=null,t.state="new",t.markActionNeeded(),t},N=function(e){var t={},n=h.a;t.uid=e.uid,t.isVideoMute=e.isVideoMute,t.isAudioMute=e.isAudioMute,t.isSubscriber=e.isSubscriber,t.clientId=e.clientId,t.pc_config={iceServers:[{urls:["stun:webcs.agora.io:3478","stun:stun.l.google.com:19302"]}],bundlePolicy:"max-bundle"},t.con={optional:[{DtlsSrtpKeyAgreement:!0}]},e.iceServers instanceof Array?t.pc_config.iceServers=e.iceServers:(e.stunServerUrl&&(e.stunServerUrl instanceof Array?e.stunServerUrl.map(function(e){"string"==typeof e&&""!==e&&t.pc_config.iceServers.push({url:e})}):"string"==typeof e.stunServerUrl&&""!==e.stunServerUrl&&t.pc_config.iceServers.push({url:e.stunServerUrl})),e.turnServer&&(e.turnServer instanceof Array?e.turnServer.map(function(e){"string"==typeof e.url&&""!==e.url&&t.pc_config.iceServers.push({username:e.username,credential:e.credential,url:e.url})}):"string"==typeof e.turnServer.url&&""!==e.turnServer.url&&(t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:["turn:"+e.turnServer.url+":"+e.turnServer.udpport+"?transport=udp"]}),"string"==typeof e.turnServer.tcpport&&""!==e.turnServer.tcpport&&t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:["turn:"+e.turnServer.url+":"+e.turnServer.tcpport+"?transport=tcp"]}),!0===e.turnServer.forceturn&&(t.pc_config.iceTransportPolicy="relay")))),void 0===e.audio&&(e.audio=!0),void 0===e.video&&(e.video=!0),t.mediaConstraints={mandatory:{OfferToReceiveVideo:e.video,OfferToReceiveAudio:e.audio}},t.roapSessionId=103;try{t.pc_config.sdpSemantics="plan-b",t.peerConnection=new n(t.pc_config,t.con)}catch(e){delete t.pc_config.sdpSemantics,t.peerConnection=new n(t.pc_config,t.con)}o.default.debug("["+t.clientId+']safari Created RTCPeerConnnection with config "'+JSON.stringify(t.pc_config)+'".'),t.peerConnection.onicecandidate=function(e){var n,i,a,r;i=(n=t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/),a=n.match(/a=candidate:.+typ\shost.+\r\n/),r=n.match(/a=candidate:.+typ\srelay.+\r\n/),0===t.iceCandidateCount&&(t.timeout=setTimeout(function(){t.moreIceComing&&(t.moreIceComing=!1,t.markActionNeeded())},1e3)),null===i&&null===a&&null===r||void 0!==t.ice||(o.default.debug("["+t.clientId+"]srflx candidate : "+i+" relay candidate: "+r+" host candidate : "+a),clearTimeout(t.timeout),t.ice=0,t.moreIceComing=!1,t.markActionNeeded()),t.iceCandidateCount=t.iceCandidateCount+1};var i=function(t){return e.screen&&(t=t.replace("a=x-google-flag:conference\r\n","")),t},a=function(n){var i,a;return e.minVideoBW&&e.maxVideoBW&&(a=(i=n.match(/m=video.*\r\n/))[0]+"b=AS:"+e.maxVideoBW+"\r\n",n=n.replace(i[0],a),o.default.debug("["+t.clientId+"]Set Video Bitrate - min:"+e.minVideoBW+" max:"+e.maxVideoBW)),e.maxAudioBW&&(a=(i=n.match(/m=audio.*\r\n/))[0]+"b=AS:"+e.maxAudioBW+"\r\n",n=n.replace(i[0],a)),n};t.processSignalingMessage=function(e){var n,o=JSON.parse(e);t.incomingMessage=o,"new"===t.state?"OFFER"===o.messageType?(n={sdp:o.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state):"offer-sent"===t.state?"ANSWER"===o.messageType?((n={sdp:o.sdp,type:"answer"}).sdp=i(n.sdp),n.sdp=a(n.sdp),n.sdp=n.sdp.replace(/a=x-google-flag:conference\r\n/g,""),t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.sendOK(),t.state="established"):"pr-answer"===o.messageType?(n={sdp:o.sdp,type:"pr-answer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))):"offer"===o.messageType?t.error("Not written yet"):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state):"established"===t.state&&("OFFER"===o.messageType?(n={sdp:o.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new RTCSessionDescription(n)),t.state="offer-received",t.markActionNeeded()):"ANSWER"===o.messageType?((n={sdp:o.sdp,type:"answer"}).sdp=i(n.sdp),n.sdp=a(n.sdp),t.peerConnection.setRemoteDescription(new RTCSessionDescription(n))):t.error("Illegal message for this state: "+o.messageType+" in state "+t.state))};var r={id:"",type:"",mediaType:"",googCodecName:"opus",aecDivergentFilterFraction:"0",audioInputLevel:"0",bytesSent:"0",packetsSent:"0",googEchoCancellationReturnLoss:"0",googEchoCancellationReturnLossEnhancement:"0"},s={id:"",type:"",mediaType:"",googCodecName:"h264"===e.codec?"H264":"VP8",bytesSent:"0",packetsLost:"0",packetsSent:"0",googAdaptationChanges:"0",googAvgEncodeMs:"0",googEncodeUsagePercent:"0",googFirsReceived:"0",googFrameHeightSent:"0",googFrameHeightInput:"0",googFrameRateInput:"0",googFrameRateSent:"0",googFrameWidthSent:"0",googFrameWidthInput:"0",googNacksReceived:"0",googPlisReceived:"0",googRtt:"0",googFramesEncoded:"0"},d={id:"",type:"",mediaType:"",audioOutputLevel:"0",bytesReceived:"0",packetsLost:"0",packetsReceived:"0",googAccelerateRate:"0",googCurrentDelayMs:"0",googDecodingCNG:"0",googDecodingCTN:"0",googDecodingCTSG:"0",googDecodingNormal:"0",googDecodingPLC:"0",googDecodingPLCCNG:"0",googExpandRate:"0",googJitterBufferMs:"0",googJitterReceived:"0",googPreemptiveExpandRate:"0",googPreferredJitterBufferMs:"0",googSecondaryDecodedRate:"0",googSpeechExpandRate:"0"},c={id:"",type:"",mediaType:"",googTargetDelayMs:"0",packetsLost:"0",googDecodeMs:"0",googMaxDecodeMs:"0",googRenderDelayMs:"0",googFrameWidthReceived:"0",googFrameHeightReceived:"0",googFrameRateReceived:"0",googFrameRateDecoded:"0",googFrameRateOutput:"0",googFramesDecoded:"0",googFrameReceived:"0",googJitterBufferMs:"0",googCurrentDelayMs:"0",googMinPlayoutDelayMs:"0",googNacksSent:"0",googPlisSent:"0",googFirsSent:"0",bytesReceived:"0",packetsReceived:"0"},u={id:"bweforvideo",type:"VideoBwe",googAvailableSendBandwidth:"0",googAvailableReceiveBandwidth:"0",googActualEncBitrate:"0",googRetransmitBitrate:"0",googTargetEncBitrate:"0",googBucketDelay:"0",googTransmitBitrate:"0"},l=0,p=0,f=0;return t.getVideoRelatedStats=function(n){t.peerConnection.getStats().then(function(i){var o={peerId:t.uid,mediaType:"video",isVideoMute:t.isVideoMute};i.forEach(function(i){if(t.isSubscriber){if("track"===i.type&&(~i.id.indexOf("video")||~i.trackIdentifier.indexOf("v"))){if(!t.lastReport)return void(t.lastReport=i);o.frameRateReceived=i.framesReceived-t.lastReport.framesReceived+"",o.frameRateDecoded=i.framesDecoded-t.lastReport.framesDecoded+"",t.lastReport=i}"inbound-rtp"===i.type&&~i.id.indexOf("Video")&&(o.bytesReceived=i.bytesReceived+"",o.packetsReceived=i.packetsReceived+"",o.packetsLost=i.packetsLost+"")}else if("outbound-rtp"===i.type&&~i.id.indexOf("Video")){if(!t.lastReport)return void(t.lastReport=i);n&&n({mediaType:"video",isVideoMute:t.isVideoMute,frameRateInput:e.maxFrameRate+"",frameRateSent:i.framesEncoded-t.lastReport.framesEncoded+""}),t.lastReport=i}}),n&&n(o)})},t.getAudioRelatedStats=function(e){t.peerConnection.getStats().then(function(n){n.forEach(function(n){t.isSubscriber&&"inbound-rtp"===n.type&&~n.id.indexOf("Audio")&&e&&e({peerId:t.uid,mediaType:"audio",isAudioMute:t.isAudioMute,frameDropped:n.packetsLost+"",frameReceived:n.packetsReceived+"",googJitterReceived:n.jitter+"",bytesReceived:n.bytesReceived+"",packetsReceived:n.packetsReceived+"",packetsLost:n.packetsLost+""})})})},t.getStatsRate=function(e){t.getStats(function(t){t.forEach(function(e){"outbound-rtp"===e.type&&"video"===e.mediaType&&e.googFramesEncoded&&(e.googFrameRateSent=((e.googFramesEncoded-l)/3).toString(),l=e.googFramesEncoded),"inbound-rtp"===e.type&&-1!=e.id.indexOf("55543")&&(e.googFrameRateReceived&&(e.googFrameRateReceived=((e.googFrameReceived-f)/3).toString(),f=e.googFrameReceived),e.googFrameRateDecoded&&(e.googFrameRateDecoded=((e.googFramesDecoded-p)/3).toString(),p=e.googFramesDecoded))}),e(t)})},t.getStats=function(e){var n=[];t.peerConnection.getStats().then(function(i){i.forEach(function(e){n.push(e),"outbound-rtp"===e.type&&"audio"===e.mediaType&&(r.id=e.id,r.type=e.type,r.mediaType=e.mediaType,r.bytesSent=e.bytesSent?e.bytesSent+"":"0",r.packetsSent=e.packetsSent?e.packetsSent+"":"0"),"outbound-rtp"===e.type&&"video"===e.mediaType&&(s.id=e.id,s.type=e.type,s.mediaType=e.mediaType,s.bytesSent=e.bytesSent?e.bytesSent+"":"0",s.packetsSent=e.packetsSent?e.packetsSent+"":"0",s.googPlisReceived=e.pliCount?e.pliCount+"":"0",s.googNacksReceived=e.nackCount?e.nackCount+"":"0",s.googFirsReceived=e.firCount?e.firCount+"":"0",s.googFramesEncoded=e.framesEncoded?e.framesEncoded+"":"0"),"inbound-rtp"===e.type&&-1!=e.id.indexOf("44444")&&(d.id=e.id,d.type=e.type,d.mediaType="audio",d.packetsReceived=e.packetsReceived?e.packetsReceived+"":"0",d.bytesReceived=e.bytesReceived?e.bytesReceived+"":"0",d.packetsLost=e.packetsLost?e.packetsLost+"":"0",d.packetsReceived=e.packetsReceived?e.packetsReceived+"":"0",d.googJitterReceived=e.jitter?e.jitter+"":"0"),"inbound-rtp"===e.type&&-1!=e.id.indexOf("55543")&&(c.id=e.id,c.type=e.type,c.mediaType="video",c.packetsReceived=e.packetsReceived?e.packetsReceived+"":"0",c.bytesReceived=e.bytesReceived?e.bytesReceived+"":"0",c.packetsLost=e.packetsLost?e.packetsLost+"":"0",c.googJitterBufferMs=e.jitter?e.jitter+"":"0",c.googNacksSent=e.nackCount?e.nackCount+"":"0",c.googPlisSent=e.pliCount?e.pliCount+"":"0",c.googFirsSent=e.firCount?e.firCount+"":"0"),"track"!==e.type||-1==e.id.indexOf("55543")&&!~e.trackIdentifier.indexOf("v")||(c.googFrameWidthReceived=e.frameWidth?e.frameWidth+"":"0",c.googFrameHeightReceived=e.frameHeight?e.frameHeight+"":"0",c.googFrameReceived=e.framesReceived?e.framesReceived+"":"0",c.googFramesDecoded=e.framesDecoded?e.framesDecoded+"":"0"),"track"!==e.type||-1==e.id.indexOf("44444")&&!~e.trackIdentifier.indexOf("a")||(d.audioOutputLevel=e.audioLevel+"",r.audioInputLevel=e.audioLevel+""),"candidate-pair"===e.type&&(0==e.availableIncomingBitrate?u.googAvailableSendBandwidth=e.availableOutgoingBitrate+"":u.googAvailableReceiveBandwidth=e.availableIncomingBitrate+"")});var o=[u,r,s,d,c];o.push({id:"time",startTime:t.connectedTime,timestamp:new Date}),e(o,n)}).catch(function(e){console.error(e)})},t.addTrack=function(e,n){t.peerConnection.addTrack(e,n)},t.removeTrack=function(e,n){var i=t.peerConnection.getSenders().find(function(t){return t.track==e});i.replaceTrack(null),t.peerConnection.removeTrack(i)},t.addStream=function(e){window.navigator.userAgent.indexOf("Safari")>-1&&-1===navigator.userAgent.indexOf("Chrome")?e.getTracks().forEach(function(n){return t.peerConnection.addTrack(n,e)}):t.peerConnection.addStream(e),t.markActionNeeded()},t.removeStream=function(){t.markActionNeeded()},t.close=function(){t.state="closed",t.peerConnection.close()},t.markActionNeeded=function(){t.actionNeeded=!0,t.doLater(function(){t.onstablestate()})},t.doLater=function(e){window.setTimeout(e,1)},t.onstablestate=function(){var n;if(t.actionNeeded){if("new"===t.state||"established"===t.state)e.isSubscriber&&(t.peerConnection.addTransceiver("audio",{direction:"recvonly"}),t.peerConnection.addTransceiver("video",{direction:"recvonly"})),t.peerConnection.createOffer(t.mediaConstraints).then(function(n){if(n.sdp=a(n.sdp),e.isSubscriber||(n.sdp=n.sdp.replace(/a=extmap:4 urn:3gpp:video-orientation\r\n/g,"")),n.sdp!==t.prevOffer)return t.peerConnection.setLocalDescription(n),t.state="preparing-offer",void t.markActionNeeded();o.default.debug("["+t.clientId+"]Not sending a new offer")}).catch(function(e){o.default.debug("["+t.clientId+"]peer connection create offer failed ",e)});else if("preparing-offer"===t.state){if(t.moreIceComing)return;t.prevOffer=t.peerConnection.localDescription.sdp,t.prevOffer=t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g,"a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"),t.sendMessage("OFFER",t.prevOffer),t.state="offer-sent"}else if("offer-received"===t.state)t.peerConnection.createAnswer(function(e){if(t.peerConnection.setLocalDescription(e),t.state="offer-received-preparing-answer",t.iceStarted)t.markActionNeeded();else{var n=new Date;o.default.debug("["+t.clientId+"]"+n.getTime()+": Starting ICE in responder"),t.iceStarted=!0}},function(e){o.default.debug("["+t.clientId+"]peer connection create answer failed ",e)},t.mediaConstraints);else if("offer-received-preparing-answer"===t.state){if(t.moreIceComing)return;n=t.peerConnection.localDescription.sdp,t.sendMessage("ANSWER",n),t.state="established"}else t.error("Dazed and confused in state "+t.state+", stopping here");t.actionNeeded=!1}},t.sendOK=function(){t.sendMessage("OK")},t.sendMessage=function(e,n){var i={};i.messageType=e,i.sdp=n,"OFFER"===e?(i.offererSessionId=t.sessionId,i.answererSessionId=t.otherSessionId,i.seq=t.sequenceNumber+=1,i.tiebreaker=Math.floor(429496723*Math.random()+1)):(i.offererSessionId=t.incomingMessage.offererSessionId,i.answererSessionId=t.sessionId,i.seq=t.incomingMessage.seq),t.onsignalingmessage(JSON.stringify(i))},t._getSender=function(e){if(t.peerConnection&&t.peerConnection.getSenders){var n=t.peerConnection.getSenders().find(function(t){return t.track.kind==e});if(n)return n}return null},t.hasSender=function(e){return!!t._getSender(e)},t.replaceTrack=function(e,n,i){var o=t._getSender(e.kind);if(!o)return i("NO_SENDER_FOUND");try{o.replaceTrack(e)}catch(e){return i&&i(e)}setTimeout(function(){return n&&n()},50)},t.error=function(e){throw"Error in RoapOnJsep: "+e},t.sessionId=t.roapSessionId+=1,t.sequenceNumber=0,t.actionNeeded=!1,t.iceStarted=!1,t.moreIceComing=!0,t.iceCandidateCount=0,t.onsignalingmessage=e.callback,t.peerConnection.ontrack=function(e){t.onaddstream&&t.onaddstream(e,"ontrack")},t.peerConnection.onremovestream=function(e){t.onremovestream&&t.onremovestream(e)},t.peerConnection.oniceconnectionstatechange=function(e){"connected"===e.currentTarget.iceConnectionState&&(t.connectedTime=new Date),t.oniceconnectionstatechange&&t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)},t.peerConnection.onnegotiationneeded=function(){void 0!==t.prevOffer&&t.peerConnection.createOffer().then(function(e){return e.sdp=e.sdp.replace(/a=recvonly\r\n/g,"a=inactive\r\n"),e.sdp=i(e.sdp),e.sdp=a(e.sdp),t.peerConnection.setLocalDescription(e)}).then(function(){t.onnegotiationneeded&&t.onnegotiationneeded(t.peerConnection.localDescription.sdp)}).catch(function(e){console.log("createOffer error: ",e)})},t.onaddstream=null,t.onremovestream=null,t.state="new",t.markActionNeeded(),t},w=function(){var e={addStream:function(){}};return e},D=function(e){var t={},n=(mozRTCPeerConnection,mozRTCSessionDescription),i=!1;t.uid=e.uid,t.isVideoMute=e.isVideoMute,t.isAudioMute=e.isAudioMute,t.isSubscriber=e.isSubscriber,t.clientId=e.clientId,t.pc_config={iceServers:[]},e.iceServers instanceof Array?e.iceServers.map(function(e){0===e.url.indexOf("stun:")&&t.pc_config.iceServers.push({url:e.url})}):(e.stunServerUrl&&(e.stunServerUrl instanceof Array?e.stunServerUrl.map(function(e){"string"==typeof e&&""!==e&&t.pc_config.iceServers.push({url:e})}):"string"==typeof e.stunServerUrl&&""!==e.stunServerUrl&&t.pc_config.iceServers.push({url:e.stunServerUrl})),e.turnServer&&"string"==typeof e.turnServer.url&&""!==e.turnServer.url&&(t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:"turn:"+e.turnServer.url+":"+e.turnServer.udpport+"?transport=udp"}),"string"==typeof e.turnServer.tcpport&&""!==e.turnServer.tcpport&&t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:"turn:"+e.turnServer.url+":"+e.turnServer.tcpport+"?transport=tcp"}),!0===e.turnServer.forceturn&&(t.pc_config.iceTransportPolicy="relay"))),void 0===e.audio&&(e.audio=!0),void 0===e.video&&(e.video=!0),t.mediaConstraints={offerToReceiveAudio:e.audio,offerToReceiveVideo:e.video,mozDontOfferDataChannel:!0},t.roapSessionId=103,t.peerConnection=new h.a(t.pc_config),o.default.debug("["+t.clientId+']safari Created RTCPeerConnnection with config "'+JSON.stringify(t.pc_config)+'".'),t.peerConnection.onicecandidate=function(e){var n,i,a,r;i=(n=t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/),a=n.match(/a=candidate:.+typ\shost.+\r\n/),r=n.match(/a=candidate:.+typ\srelay.+\r\n/),0===t.iceCandidateCount&&(t.timeout=setTimeout(function(){t.moreIceComing&&(t.moreIceComing=!1,t.markActionNeeded())},1e3)),null===i&&null===a&&null===r||void 0!==t.ice||(o.default.debug("["+t.clientId+"]srflx candidate : "+i+" relay candidate: "+r+" host candidate : "+a),clearTimeout(t.timeout),t.ice=0,t.moreIceComing=!1,t.markActionNeeded()),t.iceCandidateCount=t.iceCandidateCount+1},t.checkMLineReverseInSDP=function(e){return!(!~e.indexOf("m=audio")||!~e.indexOf("m=video"))&&e.indexOf("m=audio")>e.indexOf("m=video")},t.reverseMLineInSDP=function(e){var t=e.split("m=audio"),n=t[1].split("m=video"),i="m=video"+n[1],o="m=audio"+n[0];return e=t[0]+i+o},t.processSignalingMessage=function(e){var i,a=JSON.parse(e);t.incomingMessage=a,"new"===t.state?"OFFER"===a.messageType?(a.sdp=u(a.sdp),i={sdp:a.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e.name)}),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+a.messageType+" in state "+t.state):"offer-sent"===t.state?"ANSWER"===a.messageType?(a.sdp=u(a.sdp),a.sdp=a.sdp.replace(/ generation 0/g,""),a.sdp=a.sdp.replace(/ udp /g," UDP "),-1!==a.sdp.indexOf("a=group:BUNDLE")?(a.sdp=a.sdp.replace(/a=group:BUNDLE audio video/,"a=group:BUNDLE sdparta_0 sdparta_1"),a.sdp=a.sdp.replace(/a=mid:audio/,"a=mid:sdparta_0"),a.sdp=a.sdp.replace(/a=mid:video/,"a=mid:sdparta_1")):(a.sdp=a.sdp.replace(/a=mid:audio/,"a=mid:sdparta_0"),a.sdp=a.sdp.replace(/a=mid:video/,"a=mid:sdparta_0")),i={sdp:a.sdp,type:"answer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e)}),t.sendOK(),t.state="established"):"pr-answer"===a.messageType?(i={sdp:a.sdp,type:"pr-answer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e.name)})):"offer"===a.messageType?t.error("Not written yet"):t.error("Illegal message for this state: "+a.messageType+" in state "+t.state):"established"===t.state&&("OFFER"===a.messageType?(i={sdp:a.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e.name)}),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+a.messageType+" in state "+t.state))};var a={id:"",type:"",mediaType:"opus",googCodecName:"opus",aecDivergentFilterFraction:"0",audioInputLevel:"0",bytesSent:"0",packetsSent:"0",googEchoCancellationReturnLoss:"0",googEchoCancellationReturnLossEnhancement:"0"},r={id:"",type:"",mediaType:"",googCodecName:"h264"===e.codec?"H264":"VP8",bytesSent:"0",packetsLost:"0",packetsSent:"0",googAdaptationChanges:"0",googAvgEncodeMs:"0",googEncodeUsagePercent:"0",googFirsReceived:"0",googFrameHeightSent:"0",googFrameHeightInput:"0",googFrameRateInput:"0",googFrameRateSent:"0",googFrameWidthSent:"0",googFrameWidthInput:"0",googNacksReceived:"0",googPlisReceived:"0",googRtt:"0"},s={id:"",type:"",mediaType:"",audioOutputLevel:"0",bytesReceived:"0",packetsLost:"0",packetsReceived:"0",googAccelerateRate:"0",googCurrentDelayMs:"0",googDecodingCNG:"0",googDecodingCTN:"0",googDecodingCTSG:"0",googDecodingNormal:"0",googDecodingPLC:"0",googDecodingPLCCNG:"0",googExpandRate:"0",googJitterBufferMs:"0",googJitterReceived:"0",googPreemptiveExpandRate:"0",googPreferredJitterBufferMs:"0",googSecondaryDecodedRate:"0",googSpeechExpandRate:"0"},d={id:"",type:"",mediaType:"",googTargetDelayMs:"0",packetsLost:"0",googDecodeMs:"0",googMaxDecodeMs:"0",googRenderDelayMs:"0",googFrameWidthReceived:"0",googFrameHeightReceived:"0",googFrameRateReceived:"0",googFrameRateDecoded:"0",googFrameRateOutput:"0",googJitterBufferMs:"0",googCurrentDelayMs:"0",googMinPlayoutDelayMs:"0",googNacksSent:"0",googPlisSent:"0",googFirsSent:"0",bytesReceived:"0",packetsReceived:"0",googFramesDecoded:"0"},c=0;t.getVideoRelatedStats=function(e){t.peerConnection.getStats().then(function(n){Object.keys(n).forEach(function(i){var o=n[i];if(t.isSubscriber){if("inboundrtp"===o.type&&"video"===o.mediaType){if(!t.lastReport)return void(t.lastReport=o);e&&e({browser:"firefox",mediaType:"video",peerId:t.uid,isVideoMute:t.isVideoMute,frameRateReceived:o.framerateMean+"",frameRateDecoded:o.framesDecoded-t.lastReport.framesDecoded+"",bytesReceived:o.bytesReceived+"",packetsReceived:o.packetsReceived+"",packetsLost:o.packetsLost+""}),t.lastReport=o}}else if("outboundrtp"===o.type&&"video"===o.mediaType){if(!t.lastReport)return void(t.lastReport=o);e&&e({mediaType:"video",isVideoMute:t.isVideoMute,frameRateInput:o.framerateMean+"",frameRateSent:o.framesEncoded-t.lastReport.framesEncoded+""}),t.lastReport=o}})})},t.getAudioRelatedStats=function(e){t.peerConnection.getStats().then(function(n){Object.keys(n).forEach(function(i){var o=n[i];t.isSubscriber&&"inboundrtp"===o.type&&"audio"===o.mediaType&&e&&e({browser:"firefox",mediaType:"audio",peerId:t.uid,isAudioMute:t.isAudioMute,frameDropped:o.packetsLost+"",frameReceived:o.packetsReceived+"",googJitterReceived:o.jitter+"",bytesReceived:o.bytesReceived+"",packetsReceived:o.packetsReceived+"",packetsLost:o.packetsLost+""})})})},t.getStatsRate=function(e){t.getStats(function(t){t.forEach(function(e){"inboundrtp"===e.type&&"video"===e.mediaType&&e.googFrameRateDecoded&&(e.googFrameRateDecoded=((e.googFramesDecoded-c)/3).toString(),c=e.googFramesDecoded)}),e(t)})},t.getStats=function(e){t.peerConnection.getStats().then(function(n){var i=[];Object.keys(n).forEach(function(e){var t=n[e];i.push(t),"outboundrtp"===t.type&&"video"===t.mediaType&&-1===t.id.indexOf("rtcp")&&(r.id=t.id,r.type=t.type,r.mediaType=t.mediaType,r.bytesSent=t.bytesSent?t.bytesSent+"":"0",r.packetsSent=t.packetsSent?t.packetsSent+"":"0",r.googPlisReceived=t.pliCount?t.pliCount+"":"0",r.googNacksReceived=t.nackCount?t.nackCount+"":"0",r.googFirsReceived=t.firCount?t.firCount+"":"0",r.googFrameRateSent=t.framerateMean?t.framerateMean+"":"0"),"outboundrtp"===t.type&&"audio"===t.mediaType&&-1===t.id.indexOf("rtcp")&&(a.id=t.id,a.type=t.type,a.mediaType=t.mediaType,a.bytesSent=t.bytesSent?t.bytesSent+"":"0",a.packetsSent=t.packetsSent?t.packetsSent+"":"0"),"inboundrtp"!==t.type||"audio"!==t.mediaType||t.isRemote||-1!==t.id.indexOf("rtcp")||(s.id=t.id,s.type=t.type,s.mediaType=t.mediaType,s.bytesReceived=t.bytesReceived?t.bytesReceived+"":"0",s.packetsLost=t.packetsLost?t.packetsLost+"":"0",s.packetsReceived=t.packetsReceived?t.packetsReceived+"":"0",s.googJitterReceived=t.jitter?t.jitter+"":"0"),"inboundrtp"!==t.type||"video"!==t.mediaType||t.isRemote||-1!==t.id.indexOf("rtcp")||(d.id=t.id,d.type=t.type,d.mediaType=t.mediaType,d.bytesReceived=t.bytesReceived?t.bytesReceived+"":"0",d.googFrameRateReceived=t.framerateMean?t.framerateMean+"":"0",d.googFramesDecoded=t.framesDecoded?t.framesDecoded+"":"0",d.packetsLost=t.packetsLost?t.packetsLost+"":"0",d.packetsReceived=t.packetsReceived?t.packetsReceived+"":"0",d.googJitterBufferMs=t.jitter?t.jitter+"":"0",d.googNacksSent=t.nackCount?t.nackCount+"":"0",d.googPlisSent=t.pliCount?t.pliCount+"":"0",d.googFirsSent=t.firCount?t.firCount+"":"0"),-1!==t.id.indexOf("outbound_rtcp_video")&&(r.packetsLost=t.packetsLost?t.packetsLost+"":"0")});var o=[r,a,s,d];o.push({id:"time",startTime:t.connectedTime,timestamp:new Date}),e(o,i)},function(e){o.default.error("["+t.clientId+"]"+e)})},t.addStream=function(e){i=!0,t.peerConnection.addStream(e),t.markActionNeeded()},t.removeStream=function(){t.markActionNeeded()},t.close=function(){t.state="closed",t.peerConnection.close()},t.markActionNeeded=function(){t.actionNeeded=!0,t.doLater(function(){t.onstablestate()})},t.doLater=function(e){window.setTimeout(e,1)},t.onstablestate=function(){if(t.actionNeeded){if("new"===t.state||"established"===t.state)i&&(t.mediaConstraints=void 0),t.peerConnection.createOffer(function(e){if(e.sdp=u(e.sdp),e.sdp=e.sdp.replace(/a=extmap:1 http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time/,"a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"),e.sdp!==t.prevOffer)return t.peerConnection.setLocalDescription(e),t.state="preparing-offer",void t.markActionNeeded();o.default.debug("["+t.clientId+"]Not sending a new offer")},function(e){o.default.debug("["+t.clientId+"]Ups! create offer failed ",e)},t.mediaConstraints);else if("preparing-offer"===t.state){if(t.moreIceComing)return;t.prevOffer=t.peerConnection.localDescription.sdp,t.prevOffer=t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g,"a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"),t.sendMessage("OFFER",t.prevOffer),t.state="offer-sent"}else if("offer-received"===t.state)t.peerConnection.createAnswer(function(e){if(t.peerConnection.setLocalDescription(e),t.state="offer-received-preparing-answer",t.iceStarted)t.markActionNeeded();else{var n=new Date;o.default.debug("["+t.clientId+"]"+n.getTime()+": Starting ICE in responder"),t.iceStarted=!0}},function(){o.default.debug("["+t.clientId+"]Ups! Something went wrong")});else if("offer-received-preparing-answer"===t.state){if(t.moreIceComing)return;var e=t.peerConnection.localDescription.sdp;t.sendMessage("ANSWER",e),t.state="established"}else t.error("Dazed and confused in state "+t.state+", stopping here");t.actionNeeded=!1}},t.sendOK=function(){t.sendMessage("OK")},t.sendMessage=function(e,n){var i={};i.messageType=e,i.sdp=n,"OFFER"===e?(i.offererSessionId=t.sessionId,i.answererSessionId=t.otherSessionId,i.seq=t.sequenceNumber+=1,i.tiebreaker=Math.floor(429496723*Math.random()+1)):(i.offererSessionId=t.incomingMessage.offererSessionId,i.answererSessionId=t.sessionId,i.seq=t.incomingMessage.seq),t.onsignalingmessage(JSON.stringify(i))},t._getSender=function(e){if(t.peerConnection&&t.peerConnection.getSenders){var n=t.peerConnection.getSenders().find(function(t){return t.track.kind==e});if(n)return n}return null},t.hasSender=function(e){return!!t._getSender(e)},t.replaceTrack=function(e,n,i){var o=t._getSender(e.kind);if(!o)return i("NO_SENDER_FOUND");try{o.replaceTrack(e)}catch(e){return i&&i(e)}setTimeout(function(){return n&&n()},50)},t.error=function(e){throw"Error in RoapOnJsep: "+e},t.sessionId=t.roapSessionId+=1,t.sequenceNumber=0,t.actionNeeded=!1,t.iceStarted=!1,t.moreIceComing=!0,t.iceCandidateCount=0,t.onsignalingmessage=e.callback,t.peerConnection.ontrack=function(e){t.onaddstream&&t.onaddstream(e,"ontrack")},t.peerConnection.onremovestream=function(e){t.onremovestream&&t.onremovestream(e)},t.peerConnection.oniceconnectionstatechange=function(e){"connected"===e.currentTarget.iceConnectionState&&(t.connectedTime=new Date),t.oniceconnectionstatechange&&t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)};var u=function(t){var n;if(e.video&&e.maxVideoBW&&(null==(n=t.match(/m=video.*\r\n/))&&(n=t.match(/m=video.*\n/)),n&&n.length>0)){var i=n[0]+"b=TIAS:"+1e3*e.maxVideoBW+"\r\n";t=t.replace(n[0],i)}return e.audio&&e.maxAudioBW&&(null==(n=t.match(/m=audio.*\r\n/))&&(n=t.match(/m=audio.*\n/)),n&&n.length>0)&&(i=n[0]+"b=TIAS:"+1e3*e.maxAudioBW+"\r\n",t=t.replace(n[0],i)),t};return t.onaddstream=null,t.onremovestream=null,t.state="new",t.markActionNeeded(),t},k=function(e){var t={},n=(mozRTCPeerConnection,mozRTCSessionDescription),i=!1;t.uid=e.uid,t.isVideoMute=e.isVideoMute,t.isAudioMute=e.isAudioMute,t.isSubscriber=e.isSubscriber,t.clientId=e.clientId,t.pc_config={iceServers:[]},e.iceServers instanceof Array?e.iceServers.map(function(e){0===e.url.indexOf("stun:")&&t.pc_config.iceServers.push({url:e.url})}):(e.stunServerUrl&&(e.stunServerUrl instanceof Array?e.stunServerUrl.map(function(e){"string"==typeof e&&""!==e&&t.pc_config.iceServers.push({url:e})}):"string"==typeof e.stunServerUrl&&""!==e.stunServerUrl&&t.pc_config.iceServers.push({url:e.stunServerUrl})),e.turnServer&&"string"==typeof e.turnServer.url&&""!==e.turnServer.url&&(t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:"turn:"+e.turnServer.url+":"+e.turnServer.udpport+"?transport=udp"}),"string"==typeof e.turnServer.tcpport&&""!==e.turnServer.tcpport&&t.pc_config.iceServers.push({username:e.turnServer.username,credential:e.turnServer.credential,credentialType:"password",urls:"turn:"+e.turnServer.url+":"+e.turnServer.tcpport+"?transport=tcp"}),!0===e.turnServer.forceturn&&(t.pc_config.iceTransportPolicy="relay"))),void 0===e.audio&&(e.audio=!0),void 0===e.video&&(e.video=!0),t.mediaConstraints={offerToReceiveAudio:e.audio,offerToReceiveVideo:e.video,mozDontOfferDataChannel:!0},t.roapSessionId=103,t.peerConnection=new h.a(t.pc_config),o.default.debug("["+t.clientId+']safari Created RTCPeerConnnection with config "'+JSON.stringify(t.pc_config)+'".'),t.peerConnection.onicecandidate=function(e){var n,i,a,r;i=(n=t.peerConnection.localDescription.sdp).match(/a=candidate:.+typ\ssrflx.+\r\n/),a=n.match(/a=candidate:.+typ\shost.+\r\n/),r=n.match(/a=candidate:.+typ\srelay.+\r\n/),0===t.iceCandidateCount&&(t.timeout=setTimeout(function(){t.moreIceComing&&(t.moreIceComing=!1,t.markActionNeeded())},1e3)),null===i&&null===a&&null===r||void 0!==t.ice||(o.default.debug("["+t.clientId+"]srflx candidate : "+i+" relay candidate: "+r+" host candidate : "+a),clearTimeout(t.timeout),t.ice=0,t.moreIceComing=!1,t.markActionNeeded()),t.iceCandidateCount=t.iceCandidateCount+1},t.checkMLineReverseInSDP=function(e){return!(!~e.indexOf("m=audio")||!~e.indexOf("m=video"))&&e.indexOf("m=audio")>e.indexOf("m=video")},t.reverseMLineInSDP=function(e){var t=e.split("m=audio"),n=t[1].split("m=video"),i="m=video"+n[1],o="m=audio"+n[0];return e=t[0]+i+o},t.processSignalingMessage=function(e){var i,a=JSON.parse(e);t.incomingMessage=a,"new"===t.state?"OFFER"===a.messageType?(a.sdp=u(a.sdp),i={sdp:a.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e.name)}),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+a.messageType+" in state "+t.state):"offer-sent"===t.state?"ANSWER"===a.messageType?(a.sdp=u(a.sdp),a.sdp=a.sdp.replace(/ generation 0/g,""),a.sdp=a.sdp.replace(/ udp /g," UDP "),-1!==a.sdp.indexOf("a=group:BUNDLE")?(a.sdp=a.sdp.replace(/a=group:BUNDLE audio video/,"a=group:BUNDLE sdparta_0 sdparta_1"),a.sdp=a.sdp.replace(/a=mid:audio/,"a=mid:sdparta_0"),a.sdp=a.sdp.replace(/a=mid:video/,"a=mid:sdparta_1")):(a.sdp=a.sdp.replace(/a=mid:audio/,"a=mid:sdparta_0"),a.sdp=a.sdp.replace(/a=mid:video/,"a=mid:sdparta_0")),i={sdp:a.sdp,type:"answer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e)}),t.sendOK(),t.state="established"):"pr-answer"===a.messageType?(i={sdp:a.sdp,type:"pr-answer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e.name)})):"offer"===a.messageType?t.error("Not written yet"):t.error("Illegal message for this state: "+a.messageType+" in state "+t.state):"established"===t.state&&("OFFER"===a.messageType?(i={sdp:a.sdp,type:"offer"},t.peerConnection.setRemoteDescription(new n(i),function(){o.default.debug("["+t.clientId+"]setRemoteDescription succeeded")},function(e){o.default.info("["+t.clientId+"]setRemoteDescription failed: "+e.name)}),t.state="offer-received",t.markActionNeeded()):t.error("Illegal message for this state: "+a.messageType+" in state "+t.state))};var a={id:"",type:"",mediaType:"opus",googCodecName:"opus",aecDivergentFilterFraction:"0",audioInputLevel:"0",bytesSent:"0",packetsSent:"0",googEchoCancellationReturnLoss:"0",googEchoCancellationReturnLossEnhancement:"0"},r={id:"",type:"",mediaType:"",googCodecName:"h264"===e.codec?"H264":"VP8",bytesSent:"0",packetsLost:"0",packetsSent:"0",googAdaptationChanges:"0",googAvgEncodeMs:"0",googEncodeUsagePercent:"0",googFirsReceived:"0",googFrameHeightSent:"0",googFrameHeightInput:"0",googFrameRateInput:"0",googFrameRateSent:"0",googFrameWidthSent:"0",googFrameWidthInput:"0",googNacksReceived:"0",googPlisReceived:"0",googRtt:"0"},s={id:"",type:"",mediaType:"",audioOutputLevel:"0",bytesReceived:"0",packetsLost:"0",packetsReceived:"0",googAccelerateRate:"0",googCurrentDelayMs:"0",googDecodingCNG:"0",googDecodingCTN:"0",googDecodingCTSG:"0",googDecodingNormal:"0",googDecodingPLC:"0",googDecodingPLCCNG:"0",googExpandRate:"0",googJitterBufferMs:"0",googJitterReceived:"0",googPreemptiveExpandRate:"0",googPreferredJitterBufferMs:"0",googSecondaryDecodedRate:"0",googSpeechExpandRate:"0"},d={id:"",type:"",mediaType:"",googTargetDelayMs:"0",packetsLost:"0",googDecodeMs:"0",googMaxDecodeMs:"0",googRenderDelayMs:"0",googFrameWidthReceived:"0",googFrameHeightReceived:"0",googFrameRateReceived:"0",googFrameRateDecoded:"0",googFrameRateOutput:"0",googJitterBufferMs:"0",googCurrentDelayMs:"0",googMinPlayoutDelayMs:"0",googNacksSent:"0",googPlisSent:"0",googFirsSent:"0",bytesReceived:"0",packetsReceived:"0",googFramesDecoded:"0"},c=0;t.getVideoRelatedStats=function(e){t.peerConnection.getStats().then(function(n){var i=!0,o=!1,a=void 0;try{for(var r,s=n.values()[Symbol.iterator]();!(i=(r=s.next()).done);i=!0){var d=r.value;if(t.isSubscriber){if(("inbound-rtp"===d.type||"inboundrtp"===d.type)&&"video"===d.mediaType){if(!t.lastReport)return void(t.lastReport=d);e&&e({browser:"firefox",mediaType:"video",peerId:t.uid,isVideoMute:t.isVideoMute,frameRateReceived:d.framerateMean+"",frameRateDecoded:d.framesDecoded-t.lastReport.framesDecoded+"",bytesReceived:d.bytesReceived+"",packetsReceived:d.packetsReceived+"",packetsLost:d.packetsLost+""}),t.lastReport=d}}else if(("outbound-rtp"===d.type||"outboundrtp"===d.type)&&"video"===d.mediaType){if(!t.lastReport)return void(t.lastReport=d);e&&e({mediaType:"video",isVideoMute:t.isVideoMute,frameRateInput:d.framerateMean+"",frameRateSent:d.framesEncoded-t.lastReport.framesEncoded+""}),t.lastReport=d}}}catch(e){o=!0,a=e}finally{try{i||null==s.return||s.return()}finally{if(o)throw a}}})},t.getAudioRelatedStats=function(e){t.peerConnection.getStats().then(function(n){var i=!0,o=!1,a=void 0;try{for(var r,s=n.values()[Symbol.iterator]();!(i=(r=s.next()).done);i=!0){var d=r.value;t.isSubscriber&&("inbound-rtp"!==d.type&&"inboundrtp"!==d.type||"audio"!==d.mediaType||e&&e({browser:"firefox",mediaType:"audio",peerId:t.uid,isAudioMute:t.isAudioMute,frameDropped:d.packetsLost+"",frameReceived:d.packetsReceived+"",googJitterReceived:d.jitter+"",bytesReceived:d.bytesReceived+"",packetsReceived:d.packetsReceived+"",packetsLost:d.packetsLost+""}))}}catch(e){o=!0,a=e}finally{try{i||null==s.return||s.return()}finally{if(o)throw a}}})},t.getStatsRate=function(e){t.getStats(function(t){t.forEach(function(e){"inbound-rtp"!==e.type&&"inboundrtp"!==e.type||"video"!==e.mediaType||e.googFrameRateDecoded&&(e.googFrameRateDecoded=((e.googFramesDecoded-c)/3).toString(),c=e.googFramesDecoded)}),e(t)})},t.getStats=function(e){t.peerConnection.getStats().then(function(n){var i=[],o=!0,c=!1,u=void 0;try{for(var l,p=n.values()[Symbol.iterator]();!(o=(l=p.next()).done);o=!0){var f=l.value;i.push(f),"outbound-rtp"!==f.type&&"outboundrtp"!==f.type||"video"!==f.mediaType||-1!==f.id.indexOf("rtcp")||(r.id=f.id,r.type=f.type,r.mediaType=f.mediaType,r.bytesSent=f.bytesSent?f.bytesSent+"":"0",r.packetsSent=f.packetsSent?f.packetsSent+"":"0",r.googPlisReceived=f.pliCount?f.pliCount+"":"0",r.googNacksReceived=f.nackCount?f.nackCount+"":"0",r.googFirsReceived=f.firCount?f.firCount+"":"0",r.googFrameRateSent=f.framerateMean?f.framerateMean+"":"0"),"outbound-rtp"!==f.type&&"outboundrtp"!==f.type||"audio"!==f.mediaType||-1!==f.id.indexOf("rtcp")||(a.id=f.id,a.type=f.type,a.mediaType=f.mediaType,a.bytesSent=f.bytesSent?f.bytesSent+"":"0",a.packetsSent=f.packetsSent?f.packetsSent+"":"0"),"inbound-rtp"!==f.type&&"inboundrtp"!==f.type||"audio"!==f.mediaType||f.isRemote||-1!==f.id.indexOf("rtcp")||(s.id=f.id,s.type=f.type,s.mediaType=f.mediaType,s.bytesReceived=f.bytesReceived?f.bytesReceived+"":"0",s.packetsLost=f.packetsLost?f.packetsLost+"":"0",s.packetsReceived=f.packetsReceived?f.packetsReceived+"":"0",s.googJitterReceived=f.jitter?f.jitter+"":"0"),"inbound-rtp"!==f.type&&"inboundrtp"!==f.type||"video"!==f.mediaType||f.isRemote||-1!==f.id.indexOf("rtcp")||(d.id=f.id,d.type=f.type,d.mediaType=f.mediaType,d.bytesReceived=f.bytesReceived?f.bytesReceived+"":"0",d.googFrameRateReceived=f.framerateMean?f.framerateMean+"":"0",d.googFramesDecoded=f.framesDecoded?f.framesDecoded+"":"0",d.packetsLost=f.packetsLost?f.packetsLost+"":"0",d.packetsReceived=f.packetsReceived?f.packetsReceived+"":"0",d.googJitterBufferMs=f.jitter?f.jitter+"":"0",d.googNacksSent=f.nackCount?f.nackCount+"":"0",d.googPlisSent=f.pliCount?f.pliCount+"":"0",d.googFirsSent=f.firCount?f.firCount+"":"0"),-1!==f.id.indexOf("outbound_rtcp_video")&&(r.packetsLost=f.packetsLost?f.packetsLost+"":"0")}}catch(e){c=!0,u=e}finally{try{o||null==p.return||p.return()}finally{if(c)throw u}}var m=[r,a,s,d];m.push({id:"time",startTime:t.connectedTime,timestamp:new Date}),e(m,i)},function(e){o.default.error("["+t.clientId+"]"+e)})},t.addStream=function(e){i=!0,t.peerConnection.addStream(e),t.markActionNeeded()},t.removeStream=function(){t.markActionNeeded()},t.close=function(){t.state="closed",t.peerConnection.close()},t.markActionNeeded=function(){t.actionNeeded=!0,t.doLater(function(){t.onstablestate()})},t.doLater=function(e){window.setTimeout(e,1)},t.onstablestate=function(){if(t.actionNeeded){if("new"===t.state||"established"===t.state)i&&(t.mediaConstraints=void 0),t.peerConnection.createOffer(function(e){if(e.sdp=u(e.sdp),e.sdp=e.sdp.replace(/a=extmap:1 http:\/\/www.webrtc.org\/experiments\/rtp-hdrext\/abs-send-time/,"a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"),e.sdp!==t.prevOffer)return t.peerConnection.setLocalDescription(e),t.state="preparing-offer",void t.markActionNeeded();o.default.debug("["+t.clientId+"]Not sending a new offer")},function(e){o.default.debug("["+t.clientId+"]Ups! create offer failed ",e)},t.mediaConstraints);else if("preparing-offer"===t.state){if(t.moreIceComing)return;t.prevOffer=t.peerConnection.localDescription.sdp,t.prevOffer=t.prevOffer.replace(/a=candidate:.+typ\shost.+\r\n/g,"a=candidate:2243255435 1 udp 2122194687 192.168.0.1 30000 typ host generation 0 network-id 1\r\n"),t.sendMessage("OFFER",t.prevOffer),t.state="offer-sent"}else if("offer-received"===t.state)t.peerConnection.createAnswer(function(e){if(t.peerConnection.setLocalDescription(e),t.state="offer-received-preparing-answer",t.iceStarted)t.markActionNeeded();else{var n=new Date;o.default.debug("["+t.clientId+"]"+n.getTime()+": Starting ICE in responder"),t.iceStarted=!0}},function(){o.default.debug("["+t.clientId+"]Ups! Something went wrong")});else if("offer-received-preparing-answer"===t.state){if(t.moreIceComing)return;var e=t.peerConnection.localDescription.sdp;t.sendMessage("ANSWER",e),t.state="established"}else t.error("Dazed and confused in state "+t.state+", stopping here");t.actionNeeded=!1}},t.sendOK=function(){t.sendMessage("OK")},t.sendMessage=function(e,n){var i={};i.messageType=e,i.sdp=n,"OFFER"===e?(i.offererSessionId=t.sessionId,i.answererSessionId=t.otherSessionId,i.seq=t.sequenceNumber+=1,i.tiebreaker=Math.floor(429496723*Math.random()+1)):(i.offererSessionId=t.incomingMessage.offererSessionId,i.answererSessionId=t.sessionId,i.seq=t.incomingMessage.seq),t.onsignalingmessage(JSON.stringify(i))},t._getSender=function(e){if(t.peerConnection&&t.peerConnection.getSenders){var n=t.peerConnection.getSenders().find(function(t){return t.track.kind==e});if(n)return n}return null},t.hasSender=function(e){return!!t._getSender(e)},t.replaceTrack=function(e,n,i){var o=t._getSender(e.kind);if(!o)return i("NO_SENDER_FOUND");try{o.replaceTrack(e)}catch(e){return i&&i(e)}setTimeout(function(){return n&&n()},50)},t.error=function(e){throw"Error in RoapOnJsep: "+e},t.sessionId=t.roapSessionId+=1,t.sequenceNumber=0,t.actionNeeded=!1,t.iceStarted=!1,t.moreIceComing=!0,t.iceCandidateCount=0,t.onsignalingmessage=e.callback,t.peerConnection.ontrack=function(e){t.onaddstream&&t.onaddstream(e,"ontrack")},t.peerConnection.onremovestream=function(e){t.onremovestream&&t.onremovestream(e)},t.peerConnection.oniceconnectionstatechange=function(e){"connected"===e.currentTarget.iceConnectionState&&(t.connectedTime=new Date),t.oniceconnectionstatechange&&t.oniceconnectionstatechange(e.currentTarget.iceConnectionState)};var u=function(t){var n;if(e.video&&e.maxVideoBW&&(null==(n=t.match(/m=video.*\r\n/))&&(n=t.match(/m=video.*\n/)),n&&n.length>0)){var i=n[0]+"b=TIAS:"+1e3*e.maxVideoBW+"\r\n";t=t.replace(n[0],i)}return e.audio&&e.maxAudioBW&&(null==(n=t.match(/m=audio.*\r\n/))&&(n=t.match(/m=audio.*\n/)),n&&n.length>0)&&(i=n[0]+"b=TIAS:"+1e3*e.maxAudioBW+"\r\n",t=t.replace(n[0],i)),t};return t.onaddstream=null,t.onremovestream=null,t.state="new",t.markActionNeeded(),t},M=null,P=function(){try{M=window.require("electron")}catch(e){}return M},L=function(e){var t=a.b.reportApiInvoke(null,{callback:e,name:"getScreenSources",options:arguments,tag:"tracer"}),n=P();if(!n)return t&&t("electron is null");n.desktopCapturer.getSources({types:["window","screen"]},function(e,n){if(e)return t&&t(e);t&&t(null,n)})},x=function(e,t,n){var i=t.attributes.width;t={audio:!1,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:e,maxHeight:t.attributes.height,maxWidth:i,maxFrameRate:t.attributes.maxFr,minFrameRate:t.attributes.minFr}}};navigator.webkitGetUserMedia(t,function(e){n&&n(null,e)},function(e){n&&n(e)})},V=function(){return!!P()},F=L,B=x,U=function(e,t){L(function(n,i){if(n)return t&&t(n);!function(e,t){var n=document.createElement("div");n.innerText="share screen",n.setAttribute("style","text-align: center; height: 25px; line-height: 25px; border-radius: 4px 4px 0 0; background: #D4D2D4; border-bottom: solid 1px #B9B8B9;");var i=document.createElement("div");i.setAttribute("style","width: 100%; height: 500px; padding: 15px 25px ; box-sizing: border-box;");var o=document.createElement("div");o.innerText="Agora Web Screensharing wants to share the contents of your screen with webdemo.agorabeckon.com. Choose what you'd like to share.",o.setAttribute("style","height: 12%;");var a=document.createElement("div");a.setAttribute("style","width: 100%; height: 80%; background: #FFF; border: solid 1px #CBCBCB; display: flex; flex-wrap: wrap; justify-content: space-around; overflow-y: scroll; padding: 0 15px; box-sizing: border-box;");var r=document.createElement("div");r.setAttribute("style","text-align: right; padding: 16px 0;");var s=document.createElement("button");s.innerHTML="cancel",s.setAttribute("style","width: 85px;"),s.onclick=function(){document.body.removeChild(d),t&&t("NotAllowedError")},r.appendChild(s),i.appendChild(o),i.appendChild(a),i.appendChild(r);var d=document.createElement("div");d.setAttribute("style","position: absolute; z-index: 99999999; top: 50%; left: 50%; width: 620px; height: 525px; background: #ECECEC; border-radius: 4px; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%);"),d.appendChild(n),d.appendChild(i),document.body.appendChild(d),e.map(function(e){if(e.id){var n=document.createElement("div");n.setAttribute("style","width: 30%; height: 160px; padding: 20px 0; text-align: center;box-sizing: content-box;"),n.innerHTML=''+e.name+"",n.onclick=function(){document.body.removeChild(d),t&&t(null,e.id)},a.appendChild(n)}})}(i,function(n,i){if(n)return t&&t(n);x(i,e,t)})})},j=103,W=function(e){var t={};if(t.clientId=e.clientId,e.session_id=j+=1,"undefined"!=typeof window&&window.navigator)if(null!==window.navigator.userAgent.match("Firefox"))t.browser="mozilla",t=p.getBrowserVersion()>=66?k(e):D(e);else if("iOS"===p.getBrowserOS()||p.isSafari())o.default.debug("["+t.streamId+"]["+t.clientId+"]Safari"),(t=N(e)).browser="safari";else if(window.navigator.userAgent.indexOf("MSIE "))(t=C(e)).browser="ie";else if(window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1]>=26)(t=C(e)).browser="chrome-stable";else{if(!(window.navigator.userAgent.toLowerCase().indexOf("chrome")>=40))throw t.browser="none","WebRTC stack not available";(t=O(e)).browser="chrome-canary"}else o.default.error("["+t.streamId+"]["+t.clientId+"]Publish/subscribe video/audio streams not supported yet"),t=w(e);return t},H=function(e,t,n){var i={};if(i.config=e,i.streamId=e.streamId,navigator.getMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia,e.screen){if(V())return e.sourceId?B(e.sourceId,e,function(e,i){if(e)return n&&n();t&&t(i)}):U(e,function(e,i){if(e)return n&&n();t&&t(i)});if(o.default.debug("["+i.streamId+"]Screen access requested"),null!==window.navigator.userAgent.match("Firefox")){e.mediaSource=e.mediaSource||"screen";if(!~["screen","window","application"].indexOf(e.mediaSource))return n&&n("Invalid mediaSource, mediaSource should be one of [screen, window, application]");if(!e.attributes)return n&&n("Share screen attributes is null");var a={};a.video={frameRate:{ideal:e.attributes.mxaFr,max:e.attributes.mxaFr},height:{ideal:e.attributes.height},width:{ideal:e.attributes.width},mediaSource:e.mediaSource},navigator.getMedia(a,t,n)}else if(null!==window.navigator.userAgent.match("Chrome")){if(window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1]<34)return void n({code:"This browser does not support screen sharing"});var r="okeephmleflklcdebijnponpabbmmgeo";if(e.extensionId)o.default.debug("["+i.streamId+"]extensionId supplied, using "+e.extensionId),r=e.extensionId;else if(window.navigator.mediaDevices.getDisplayMedia){var s={video:{height:{ideal:e.attributes.height},width:{ideal:e.attributes.width},frameRate:{ideal:e.attributes.maxFr,max:e.attributes.maxFr}}};return o.default.debug("use getDisplayMedia, config.attributes:",e.attributes),o.default.debug("use getDisplayMedia, constraints:",s),window.navigator.mediaDevices.getDisplayMedia(s).then(function(e){t&&t(e)}).catch(n)}o.default.debug("["+i.streamId+"]Screen access on chrome stable, looking for extension");try{chrome.runtime.sendMessage(r,{getStream:!0},function(r){if(void 0!==r){var s=r.streamId,d=e.attributes.width,c=e.attributes.height,u=e.attributes.maxFr,l=e.attributes.minFr;a={video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:s,maxHeight:c,maxWidth:d,maxFrameRate:u,minFrameRate:l}}},navigator.getMedia(a,t,n)}else{o.default.error("["+i.streamId+"]No response from Chrome Plugin. Plugin not installed properly");n({name:"PluginNotInstalledProperly",message:"No response from Chrome Plugin. Plugin not installed properly."})}})}catch(e){o.default.debug("["+i.streamId+"]AgoraRTC screensharing plugin is not accessible");return void n({code:"no_plugin_present"})}}else o.default.debug("["+i.streamId+"]This browser does not support screenSharing")}else window.navigator.userAgent.indexOf("Safari")>-1&&-1===navigator.userAgent.indexOf("Chrome")?navigator.mediaDevices.getUserMedia(e).then(t).catch(n):"undefined"!=typeof navigator&&navigator.getMedia?navigator.getMedia(e,t,n):o.default.error("["+i.streamId+"]Video/audio streams not supported yet")},G=n(7),J=function(e,t,n){if(["End2EndDelay","TransportDelay","PacketLossRate","RecvLevel","RecvBitrate","CodecType","MuteState","TotalFreezeTime","TotalPlayDuration","RecordingLevel","SendLevel","SamplingRate","SendBitrate","CodecType","MuteState","End2EndDelay","TransportDelay","PacketLossRate","RecvBitrate","RecvResolutionWidth","RecvResolutionHeight","RenderResolutionHeight","RenderResolutionWidth","RenderFrameRate","TotalFreezeTime","TotalPlayDuration","TargetSendBitrate","SendFrameRate","SendFrameRate","SendBitrate","SendResolutionWidth","SendResolutionHeight","CaptureResolutionHeight","CaptureResolutionWidth","EncodeDelay","MuteState","TotalFreezeTime","TotalDuration","CaptureFrameRate","RTT","OutgoingAvailableBandwidth","Duration","UserCount","SendBytes","RecvBytes","SendBitrate","RecvBitrate","accessDelay","audioSendBytes","audioSendPackets","videoSendBytes","videoSendPackets","videoSendPacketsLost","videoSendFrameRate","audioSendPacketsLost","videoSendResolutionWidth","videoSendResolutionHeight","accessDelay","audioReceiveBytes","audioReceivePackets","audioReceivePacketsLost","videoReceiveBytes","videoReceivePackets","videoReceivePacketsLost","videoReceiveFrameRate","videoReceiveDecodeFrameRate","videoReceiveResolutionWidth","videoReceiveResolutionHeight","endToEndDelay","videoReceiveDelay","audioReceiveDelay","FirstFrameTime","VideoFreezeRate","AudioFreezeRate","RenderResolutionWidth","RenderResolutionHeight"].indexOf(t)>-1&&("string"==typeof n||isFinite(n)))return e[t]=""+n},z=n(10),K=new function(){var e=r();return e.devicesHistory={},e.states={UNINIT:"UNINIT",INITING:"INITING",INITED:"INITED"},e.state=e.states.UNINIT,e.deviceStates={ACTIVE:"ACTIVE",INACTIVE:"INACTIVE"},e.deviceReloadTimer=null,e._init=function(t,n){e.state=e.states.INITING,e.devicesHistory={},e._reloadDevicesInfo(function(){e.state=e.states.INITED,e.dispatchEvent({type:"inited"}),t&&t()},function(t){o.default.warning("Device Detection functionality cannot start properly."),e.state=e.states.UNINIT,n&&n(t)})},e._enumerateDevices=function(e,t){if(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices)return o.default.warning("enumerateDevices() not supported."),t&&t("enumerateDevices() not supported");navigator.mediaDevices.enumerateDevices().then(function(t){e&&setTimeout(function(){e(t)},0)}).catch(function(e){t&&t(e)})},e._reloadDevicesInfo=function(t,n){var i=[];e._enumerateDevices(function(n){var a=Date.now();for(var r in n.forEach(function(t){var n=e.devicesHistory[t.deviceId];if((n?n.state:e.deviceStates.INACTIVE)!=e.deviceStates.ACTIVE){var o=n||{initAt:a};o.device=t,o.state=e.deviceStates.ACTIVE,i.push(o),e.devicesHistory[t.deviceId]=o}e.devicesHistory[t.deviceId].lastReloadAt=a}),e.devicesHistory){var s=e.devicesHistory[r];s&&s.state==e.deviceStates.ACTIVE&&s.lastReloadAt!==a&&(s.state=e.deviceStates.INACTIVE,i.push(s)),s.lastReloadAt=a}e.state==e.states.INITED&&i.forEach(function(t){var n=I()({},t);switch(t.device.kind){case"audioinput":n.type="recordingDeviceChanged";break;case"audiooutput":n.type="playoutDeviceChanged";break;case"videoinput":n.type="cameraChanged";break;default:o.default.warning("Unknown device change",n),n.type="unknownDeviceChanged"}e.dispatchEvent(n)}),t&&t()},n)},e.getDeviceById=function(t,n,i){e.getDevices(function(e){for(var o=0;o=t&&e.length<=n},ee=function(e,t,n){return oe(e)&&e>=t&&e<=n},te=function(e){return"boolean"==typeof e},ne=function(e){return Z(e,1,2047)},ie=function(e){if("string"==typeof e){for(var t=0;t255)return!1}return!0}},oe=function(e){return"number"==typeof e&&e%1==0},ae=function(e){return"string"==typeof e},re=function(e){return null==e};var se=function(e){var t=r();if(t.params=I()({},e),t.stream=e.stream,t.url=e.url,t.onClose=void 0,t.local=!1,t.videoSource=e.videoSource,t.audioSource=e.audioSource,t.video=!!e.video,t.audio=!!e.audio,t.screen=!!e.screen,t.screenAttributes={width:1920,height:1080,maxFr:5,minFr:1},t.videoSize=e.videoSize,t.player=void 0,t.audioLevelHelper=null,e.attributes=e.attributes||{},t.attributes=e.attributes,t.microphoneId=e.microphoneId,t.cameraId=e.cameraId,t.inSwitchDevice=!1,t.userMuteVideo=!1,t.userMuteAudio=!1,t.peerMuteVideo=!1,t.peerMuteAudio=!1,t.lowStream=null,t.videoWidth=0,t.videoHeight=0,t.streamId=null,t.streamId=e.streamID,t.userId=null,t.mirror=!1!==e.mirror,t.DTX=e.audioProcessing&&e.audioProcessing.DTX,t.audioProcessing=e.audioProcessing,t.highQuality=!1,t.stereo=!1,t.speech=!1,t.screen||delete t.screen,!(void 0===t.videoSize||t.videoSize instanceof Array&&4===t.videoSize.length))throw Error("Invalid Video Size");function n(e,t){return{width:{ideal:e},height:{ideal:t}}}t.videoSize=[640,480,640,480],void 0!==e.local&&!0!==e.local||(t.local=!0),t.initialized=!t.local,function(e){e.audioMixing={audioContextInited:!1,defaultVolume:100,inEarMonitoring:"FILE",sounds:{},states:{IDLE:"IDLE",STARTING:"STARTING",BUSY:"BUSY",PAUSED:"PAUSED"},inEarMonitoringModes:{NONE:"NONE",FILE:"FILE",MICROPHONE:"MOCROPHONE",ALL:"ALL"},ctx:null,mediaStreamSource:null,mediaStreamDest:null,buffer:{}},e._initSoundIfNotExists=function(t,n){e.audioMixing.sounds[t]||(e.audioMixing.sounds[t]={soundId:t,state:"IDLE",muted:e.userMuteAudio,filePath:n,volume:e.audioMixing.defaultVolume,startAt:null,startOffset:null,pauseAt:null,pauseOffset:null,resumeAt:null,resumeOffset:null,stopAt:null,options:null,source:null})},e._initSoundIfNotExists(-1),e.loadAudioBuffer=function(t,n,i){var r=a.b.reportApiInvoke(e.sid,{callback:i,name:"Stream.loadAudioBuffer",options:arguments,tag:"tracer"});Q(n,"url",1,1024,!1),Q(t,"id",1,1024,!1);var s=new XMLHttpRequest;s.open("GET",n,!0),s.responseType="arraybuffer",s.onload=function(){if(s.status>400){var n=s.statusText;return o.default.error("[".concat(e.streamId,"] loadAudioBuffer Failed: ")+n),r(n)}var i=s.response;e.audioMixing.audioContextInited||e._initAudioContext(),e.audioMixing.ctx.decodeAudioData(i,function(n){e.audioMixing.buffer[t]=n,r(null)},function(t){o.default.error("[".concat(e.streamId,"] decodeAudioData Failed: "),t),r(t)})},s.send()},e.createAudioBufferSource=function(t){var n=a.b.reportApiInvoke(e.sid,{name:"Stream.createAudioBufferSource",options:arguments,tag:"tracer"});if(e.audioMixing.buffer[t.id]){var i=e.audioMixing.buffer[t.id],r=e.audioMixing.ctx.createBufferSource();r.buffer=i;var s=e.audioMixing.ctx.createGain();if(r.connect(s),s.connect(e.audioMixing.mediaStreamDest),r.gainNode=s,t.loop)r.loop=!0,r.start(0,t.playTime/1e3);else if(t.cycle>1)if(Object(p.isChrome)()){r.loop=!0;var d=t.cycle*i.duration*1e3-(t.playTime||0);r.start(0,t.playTime/1e3,d/1e3)}else o.default.warning("[".concat(e.streamId,"] Cycle Param is ignored by current browser")),r.start(0,t.playTime/1e3);else r.start(0,t.playTime/1e3);var c=e.audioMixing.sounds[t.soundId];return c.source=r,e._flushAudioMixingMuteStatus(),r.addEventListener("ended",function(){r===c.source&&e.dispatchEvent({type:"audioSourceEnded",soundId:t.soundId,source:r,sound:c})}),n(),r}return o.default.error("[".concat(e.streamId,"] "),"AUDIOBUFFER_NOT_FOUND",t.id),n(!1),!1},e.on("audioSourceEnded",function(t){t.source;var n=t.sound;n&&n.state===e.audioMixing.states.BUSY&&!n.pauseAt&&(n.state=e.audioMixing.states.IDLE,n.startAt=null,n.startOffset=null,n.resumeAt=null,n.resumeOffset=null,e.audioMixing.mediaStreamSource.connect(e.audioMixing.mediaStreamDest))}),e.clearAudioBufferSource=function(){e.audioBufferSource.forEach(function(e){e.stop()})},e._isSoundExists=function(t){return!!e.audioMixing.sounds[t.soundId]||(o.default.error("SoundId not exists. #".concat(t.soundId)),!1)},e._initAudioContext=function(){if(e.audioMixing.audioContextInited)throw new Error("Failed to init audio context. Already inited");if(!e.stream)throw new Error("Failed to init audio context. Local Stream not initialized");e.audioMixing.ctx=Object(z.a)(),e.audioMixing.mediaStreamSource=e.audioMixing.ctx.createMediaStreamSource(e.stream),e.audioMixing.mediaStreamDest=e.audioMixing.ctx.createMediaStreamDestination(),e.audioMixing.mediaStreamSource.connect(e.audioMixing.mediaStreamDest);var t=e.stream.getVideoTracks()[0];if(t&&e.audioMixing.mediaStreamDest.stream.addTrack(t),e._isAudioMuted()?(e._unmuteAudio(),e.stream=e.audioMixing.mediaStreamDest.stream,e._muteAudio()):e.stream=e.audioMixing.mediaStreamDest.stream,e.audioLevelHelper=null,e.pc&&e.pc.peerConnection&&e.pc.peerConnection){var n=(e.pc.peerConnection&&e.pc.peerConnection.getSenders()).find(function(e){return e&&e.track&&"audio"==e.track.kind}),i=e.audioMixing.mediaStreamDest.stream.getAudioTracks()[0];n&&n.replaceTrack&&i&&n.replaceTrack(i)}e.audioMixing.audioContextInited=!0},e._reloadInEarMonitoringMode=function(t){if(t){if(!e.audioMixing.inEarMonitoringModes[t])return o.default.error("[".concat(e.streamId,"] Invalid InEarMonitoringMode ").concat(t));e.audioMixing.inEarMonitoring=t}switch(e.audioMixing.audioContextInited||e._initAudioContext(),e.audioMixing.inEarMonitoring){case e.audioMixing.inEarMonitoringModes.FILE:e.audioMixing.mediaStreamSource.connectedToDestination&&(e.audioMixing.mediaStreamSource.disconnect(e.audioMixing.ctx.destination),e.audioMixing.mediaStreamSource.connectedToDestination=!1);case e.audioMixing.inEarMonitoringModes.ALL:for(var n in e.audioMixing.sounds){var i=e.audioMixing.sounds[n];i&&i.source&&!i.source.connectedToDestination&&(i.source.gainNode.connect(e.audioMixing.ctx.destination),i.source.connectedToDestination=!0)}}switch(e.audioMixing.inEarMonitoring){case e.audioMixing.inEarMonitoringModes.MICROPHONE:e.audioMixing.source.forEach(function(t){t.connectedToDestination&&(t.gainNode.disconnect(e.audioMixing.ctx.destination),t.connectedToDestination=!1)});case e.audioMixing.inEarMonitoringModes.ALL:e.audioMixing.mediaStreamSource.connectedToDestination||(e.audioMixing.mediaStreamSource.connect(e.audioMixing.ctx.destination),e.audioMixing.mediaStreamSource.connectedToDestination=!0)}},e._startAudioMixingBufferSource=function(t){e.audioMixing.audioContextInited||e._initAudioContext();var n={soundId:t.soundId,id:t.filePath,loop:t.loop,cycle:t.cycle,playTime:t.playTime||0},i=t.replace,o=e.createAudioBufferSource(n);return o.sound=e.audioMixing.sounds[t.soundId],o?(o.addEventListener("ended",e._audioMixingFinishedListener,{once:!0}),e._reloadInEarMonitoringMode(),i&&e.audioMixing.mediaStreamSource.disconnect(e.audioMixing.mediaStreamDest),o):null},e._stopAudioMixingBufferSource=function(t){var n=e.audioMixing.sounds[t.soundId].source;return n?(n.removeEventListener("ended",e._audioMixingFinishedListener),e.audioMixing.mediaStreamSource.connect(e.audioMixing.mediaStreamDest),n.stop(),n):null},e._flushAudioMixingMuteStatus=function(t){for(var n in e.audioMixing.sounds){var i=e.audioMixing.sounds[n];i&&(void 0!==t&&(i.muted=!!t),i.source&&(i.muted?i.source.gainNode.gain.value=0:i.source.gainNode.gain.value=i.volume/100))}},e._handleAudioMixingInvalidStateError=function(t,n,i){var a=e.audioMixing.sounds[n.soundId],r=-1===n.soundId?"INVALID_AUDIO_MIXING_STATE":"INVALID_PLAY_EFFECT_STATE";o.default.error("[".concat(e.streamId,"] Cannot ").concat(t,": ").concat(r,", state is ").concat(a.state)),i&&i(r)},e._handleAudioMixingNoSourceError=function(t,n,i){e.audioMixing.sounds[n.soundId].state=e.audioMixing.states.IDLE;var a=-1===n.soundId?"NO_AUDIO_MIXING_SOURCE":"NO_EFFECT_SOURCE";o.default.error("[".concat(e.streamId,"] Cannot ").concat(t,": ").concat(a)),i&&i(a)},e._getOneEffectStates=function(t){var n=e.audioMixing.sounds[t.soundId];return function(){return n?{state:n.state,startAt:n.startAt,resumeAt:n.resumeAt,pauseOffset:n.pauseOffset,pauseAt:n.pauseAt,resumeOffset:n.resumeOffset,stopAt:n.stopAt,duration:e._getOneEffectDuration(t),position:e._getOneEffectCurrentPosition(t)}:{}}},e._audioMixingFinishedListener=function(){var t=this.sound;t.state===e.audioMixing.states.IDLE&&e.audioMixing.buffer[t.options.filePath]&&!t.options.cacheResource&&(o.default.debug("Recycled buffer ".concat(t.options.filePath)),delete e.audioMixing.buffer[t.options.filePath]),-1===t.soundId&&e.dispatchEvent({type:"audioMixingFinished"})},e._playOneEffect=function(t,n){q(t,"options");var i=t.soundId,a=(t.filePath,t.cacheResource);if(t.cycle,t.loop,t.playTime,t.replace,Object(p.isSafari)()&&Object(p.getBrowserVersion)()<12){var r="BROWSER_NOT_SUPPORT";return o.default.error("[".concat(e.streamId,"] Cannot _playOneEffect: "),r),n(r)}e.audioMixing.audioContextInited||e._initAudioContext(),e._initSoundIfNotExists(i);var s=e.audioMixing.sounds[i];if(s.state===e.audioMixing.states.IDLE){if(void 0!==t.cycle&&!t.cycle>0)return r="Invalid Parmeter cycle: "+t.cycle,o.default.error("[".concat(e.streamId,"] ").concat(i),r),n(r);if(re(a)&&(t.cacheResource=!0),s.state=e.audioMixing.states.STARTING,s.options=t,e.audioMixing.buffer[t.filePath]){var d=e._startAudioMixingBufferSource(t);if(d)return s.source=d,s.startAt=Date.now(),s.resumeAt=null,s.pauseOffset=null,s.pauseAt=null,s.resumeOffset=null,s.stopAt=null,s.startOffset=t.playTime||0,s.state=e.audioMixing.states.BUSY,e._flushAudioMixingMuteStatus(),n(null);s.state=e.audioMixing.states.IDLE;var c="CREATE_BUFFERSOURCE_FAILED";if(n)return n(c);o.default.error("[".concat(e.streamId,"] "),c)}else e.loadAudioBuffer(t.filePath,t.filePath,function(i){if(i)s.state=e.audioMixing.states.IDLE,n?n(i):o.default.error("[".concat(e.streamId,"] "),i);else{var a=e._startAudioMixingBufferSource(t);if(a)return s.source=a,s.startAt=Date.now(),s.resumeAt=null,s.pauseOffset=null,s.pauseAt=null,s.resumeOffset=null,s.stopAt=null,s.startOffset=t.playTime||0,s.state=e.audioMixing.states.BUSY,e._flushAudioMixingMuteStatus(),n(null);if(s.state=e.audioMixing.states.IDLE,i="CREATE_BUFFERSOURCE_FAILED",n)return n(i);o.default.error("[".concat(e.streamId,"] "),i)}})}else e._handleAudioMixingInvalidStateError("_playEffect",t,n)},e._stopOneEffect=function(t,n){var i=e.audioMixing.sounds[t.soundId];return e._isSoundExists(t)?i.state===e.audioMixing.states.BUSY||i.state===e.audioMixing.states.PAUSED?(e._stopAudioMixingBufferSource(t),i.stopAt=Date.now(),i.state=e.audioMixing.states.IDLE,e.audioMixing.buffer[i.options.filePath]&&!i.options.cacheResource&&(o.default.debug("Recycled buffer ".concat(i.options.filePath)),delete e.audioMixing.buffer[i.options.filePath]),void(n&&n(null))):void e._handleAudioMixingInvalidStateError("_stopOneEffect",t,n):n("SOUND_NOT_EXISTS")},e._pauseOneEffect=function(t,n){var i=e.audioMixing.sounds[t.soundId];if(i.state===e.audioMixing.states.BUSY)return e._stopAudioMixingBufferSource(t)?(i.pauseAt=Date.now(),i.state=e.audioMixing.states.PAUSED,i.resumeAt?i.pauseOffset=i.pauseAt-i.resumeAt+i.resumeOffset:i.pauseOffset=i.pauseAt-i.startAt+i.startOffset,n&&n(null)):void e._handleAudioMixingNoSourceError("_pauseOneEffect",t,n);e._handleAudioMixingInvalidStateError("_pauseOneEffect",t,n)},e._resumeOneEffect=function(t,n){var i=e.audioMixing.sounds[t.soundId];if(i.state===e.audioMixing.states.PAUSED){var a={soundId:t.soundId,filePath:i.options.filePath,cycle:i.options.cycle,loop:i.options.loop,playTime:i.pauseOffset,replace:i.options.replace},r=e._startAudioMixingBufferSource(a);if(!r){var s="CREATE_BUFFERSOURCE_FAILED";return n(s),void o.default.error("[".concat(e.streamId,"] "),s)}i.source=r,i.resumeAt=Date.now(),i.resumeOffset=i.pauseOffset,i.state=e.audioMixing.states.BUSY,i.pauseAt=null,i.pauseOffset=null,n(null)}else e._handleAudioMixingInvalidStateError("_resumeOneEffect",t,n)},e._getOneEffectDuration=function(t){var n=e.audioMixing.sounds[t.soundId];return n.options&&n.options.filePath&&e.audioMixing.buffer[n.options.filePath]?1e3*e.audioMixing.buffer[n.options.filePath].duration:null},e._getOneEffectCurrentPosition=function(t,n){var i=e.audioMixing.sounds[t.soundId];return i.state===e.audioMixing.states.PAUSED?i.pauseOffset%e._getOneEffectDuration(t):i.state===e.audioMixing.states.BUSY?(Date.now()-i.startAt+i.startOffset)%e._getOneEffectDuration(t):void(n&&e._handleAudioMixingInvalidStateError("_getOneEffectCurrentPosition",t))},e._setOneEffectPosition=function(t,n,i){var a=e.audioMixing.sounds[t.soundId];if(a.state===e.audioMixing.states.BUSY){if(!e._stopAudioMixingBufferSource(t))return void e._handleAudioMixingNoSourceError("_setOneEffectPosition",t,i);var r={soundId:t.soundId,filePath:a.options.filePath,loop:a.options.loop,cycle:a.options.cycle,playTime:n},s=e._startAudioMixingBufferSource(r);if(!s){var d="CREATE_BUFFERSOURCE_FAILED";return i&&i(d),void o.default.error("[".concat(e.streamId,"] "),d)}a.source=s,a.startAt=Date.now(),a.startOffset=n,a.resumeAt=null,a.resumeOffset=null,a.pauseOffset=null,a.pauseAt=null}else{if(a.state!==e.audioMixing.states.PAUSED)return void e._handleAudioMixingInvalidStateError("_setOneEffectPosition",t,i);a.pauseOffset=n}i&&i(null)},e.startAudioMixing=function(t,n){var o=a.b.reportApiInvoke(e.sid,{callback:function(t){if(t)return n&&n(t);e.dispatchEvent({type:"audioMixingPlayed"}),n&&n(null)},getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.startAudioMixing",options:t});q(t,"options");var r=t.filePath,s=t.cacheResource,d=t.cycle,c=t.loop,u=t.playTime,l=t.replace;Q(r,"filePath",1,Object(i.getParameter)("FILEPATH_LENMAX"),!1),X(u,"playTime",0,1e8),!re(d)&&X(d,"cycle"),!re(c)&&$(c,"loop"),!re(l)&&$(l,"replace"),!re(s)&&$(s,"cacheResource");var p=I()({soundId:-1},t);e._playOneEffect(p,o)},e.stopAudioMixing=function(t){var n=a.b.reportApiInvoke(e.sid,{callback:t,getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.stopAudioMixing"});e._stopOneEffect({soundId:-1},n)},e.pauseAudioMixing=function(t){var n=a.b.reportApiInvoke(e.sid,{callback:t,getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.pauseAudioMixing"});return e._pauseOneEffect({soundId:-1},n)},e.resumeAudioMixing=function(t){var n=a.b.reportApiInvoke(e.sid,{callback:function(n,i){if(n)return t&&t(n);e.dispatchEvent({type:"audioMixingPlayed"}),t&&t(null)},getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.resumeAudioMixing"});e._resumeOneEffect({soundId:-1},n)},e.adjustAudioMixingVolume=function(t){var n=a.b.reportApiInvoke(e.sid,{getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.adjustAudioMixingVolume",options:arguments,tag:"tracer"});X(t,"volume",0,100),e.audioMixing.sounds[-1].volume=t,e._flushAudioMixingMuteStatus(),n()},e.getAudioMixingDuration=function(){var t=a.b.reportApiInvoke(e.sid,{getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.getAudioMixingDuration"}),n=e._getOneEffectDuration({soundId:-1});return t(null,n),n},e.getAudioMixingCurrentPosition=function(){var t=a.b.reportApiInvoke(e.sid,{getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.getAudioMixingCurrentPosition"}),n=e._getOneEffectCurrentPosition({soundId:-1},!0);return t(null,n),n},e.setAudioMixingPosition=function(t,n){var i=a.b.reportApiInvoke(e.sid,{callback:n,options:arguments,tag:"tracer",getStates:e._getOneEffectStates({soundId:-1}),name:"Stream.setAudioMixingPosition"});X(t,"position",0,1e8),e._setOneEffectPosition({soundId:-1},t,i)},e.playEffect=function(t,n){var o=a.b.reportApiInvoke(e.sid,{callback:function(t){if(t)return n&&n(t);e.dispatchEvent({type:"effectPlayed"}),n&&n(null)},name:"Stream.playEffect",options:t});q(t,"options");var r=t.soundId,s=t.filePath,d=t.cycle;X(r,"soundId",1,1e4),Q(s,"filePath",0,Object(i.getParameter)("FILEPATH_LENMAX"),!1),!re(d)&&X(d,"cycle"),e._playOneEffect(t,o)},e.stopEffect=function(t,n){var i=a.b.reportApiInvoke(e.sid,{callback:n,getStates:e._getOneEffectStates({soundId:t}),name:"Stream.stopEffect"});X(t,"soundId",1,1e4),e._stopOneEffect({soundId:t},i)},e.stopAllEffects=function(t){var n=a.b.reportApiInvoke(e.sid,{callback:t,name:"Stream.stopAllEffect"}),i=!1,o=0,r=0,s=function(e){i||(e?(n(e),i=!0):o+=1,o===r&&(n(null),i=!0))};for(var d in e.audioMixing.sounds){var c=e.audioMixing.sounds[d];-1!==c.soundId&&(c.state!==e.audioMixing.states.BUSY&&c.state!==e.audioMixing.states.PAUSED||(r++,e._stopOneEffect({soundId:d},s)))}r||n(null)},e.preloadEffect=function(t,n,o){var r=a.b.reportApiInvoke(e.sid,{callback:o,options:arguments,tag:"tracer",name:"Stream.preloadEffect"});X(t,"soundId",1,1e4),Q(n,"filePath",1,Object(i.getParameter)("FILEPATH_LENMAX"),!1),e._initSoundIfNotExists(t,n),e.audioMixing.buffer[n]?r(null):e.loadAudioBuffer(n,n,r)},e.unloadEffect=function(t,n){var i=a.b.reportApiInvoke(e.sid,{callback:n,options:arguments,tag:"tracer",name:"Stream.unloadEffect"});X(t,"soundId",1,1e4);var r=e.audioMixing.sounds[t];if(!r){var s="SOUND_NOT_EXISTS";return o.default.error(s,t),void i(s)}var d=r.options?r.options.filePath:r.filePath;if(d)delete e.audioMixing.buffer[d],delete e.audioMixing.sounds[t],i(null);else{var c="SOUND_BUFFER_NOT_FOUND";o.default.error(c,t),i(c)}},e.pauseEffect=function(t,n){var i=a.b.reportApiInvoke(e.sid,{callback:n,options:arguments,tag:"tracer",name:"Stream.pauseEffect"});return e._pauseOneEffect({soundId:t},i)},e.pauseAllEffects=function(t){var n=a.b.reportApiInvoke(e.sid,{callback:t,name:"Stream.pauseAllEffects"}),i=!1,o=0,r=0,s=function(e){i||(e?(n(e),i=!0):o+=1,o===r&&(n(null),i=!0))};for(var d in e.audioMixing.sounds)"-1"!==d&&e.audioMixing.sounds[d].state===e.audioMixing.states.BUSY&&(r++,e._pauseOneEffect({soundId:d},s));r||n(null)},e.resumeEffect=function(t,n){X(t,"soundId",1,1e4);var i=a.b.reportApiInvoke(e.sid,{callback:n,options:arguments,tag:"tracer",name:"Stream.resumeEffect"});return e._resumeOneEffect({soundId:t},i)},e.resumeAllEffects=function(t){var n=a.b.reportApiInvoke(e.sid,{callback:t,name:"Stream.resumeAllEffects"}),i=!1,o=0,r=0,s=function(e){i||(e?(n(e),i=!0):o+=1,o===r&&(n(null),i=!0))};for(var d in e.audioMixing.sounds)"-1"!==d&&e.audioMixing.sounds[d].state===e.audioMixing.states.PAUSED&&(r++,e._resumeOneEffect({soundId:d},s));r||n(null)},e.getEffectsVolume=function(){var t=[];for(var n in e.audioMixing.sounds){var i=e.audioMixing.sounds[n];i&&"-1"!==n&&t.push({soundId:parseInt(n),volume:i.volume})}return t},e.setEffectsVolume=function(t,n){var i=a.b.reportApiInvoke(e.sid,{name:"Stream.setEffectsVolume",options:arguments,tag:"tracer",callback:n});for(var o in X(t,"volume",0,100),e.audioMixing.defaultVolume=t,e.audioMixing.sounds){var r=e.audioMixing.sounds[o];"-1"!==o&&(r.volume=t)}e._flushAudioMixingMuteStatus(),i(null)},e.setVolumeOfEffect=function(t,n,i){var o=a.b.reportApiInvoke(e.sid,{name:"Stream.setVolumeOfEffect",options:arguments,tag:"tracer",callback:i});X(t,"soundId",0,1e4),X(n,"volume",0,100),e._initSoundIfNotExists(t),e.audioMixing.sounds[t].volume=n,e._flushAudioMixingMuteStatus(),o(null)}}(t),t.on("collectStats",function(e){e.promises.push(t._getPCStats()),e.promises.push(new Promise(function(e){var n={};t.pc&&t.pc.isSubscriber?null!==window.navigator.userAgent.match("Firefox")&&(J(n,"videoReceiveResolutionHeight",t.videoHeight),J(n,"videoReceiveResolutionWidth",t.videoWidth)):t.pc&&!t.pc.isSubscriber&&((Object(p.isSafari)()||Object(p.isFireFox)())&&(J(n,"videoSendResolutionHeight",t.videoHeight),J(n,"videoSendResolutionWidth",t.videoWidth)),(Object(p.isSafari)()||Object(p.isFireFox)())&&t.uplinkStats&&J(n,"videoSendPacketsLost",t.uplinkStats.uplink_cumulative_lost)),e(n)})),e.promises.push(new Promise(function(e){var n={};return t.traffic_stats&&t.pc&&t.pc.isSubscriber?(J(n,"accessDelay",t.traffic_stats.access_delay),J(n,"endToEndDelay",t.traffic_stats.e2e_delay),J(n,"videoReceiveDelay",t.traffic_stats.video_delay),J(n,"audioReceiveDelay",t.traffic_stats.audio_delay)):t.traffic_stats&&t.pc&&!t.pc.isSubscriber&&J(n,"accessDelay",t.traffic_stats.access_delay),e(n)}))});var s={true:!0,unspecified:!0,"90p_1":n(160,90),"120p_1":n(160,120),"120p_3":n(120,120),"120p_4":n(212,120),"180p_1":n(320,180),"180p_3":n(180,180),"180p_4":n(240,180),"240p_1":n(320,240),"240p_3":n(240,240),"240p_4":n(424,240),"360p_1":n(640,360),"360p_3":n(360,360),"360p_4":n(640,360),"360p_6":n(360,360),"360p_7":n(480,360),"360p_8":n(480,360),"360p_9":n(640,360),"360p_10":n(640,360),"360p_11":n(640,360),"480p_1":n(640,480),"480p_2":n(640,480),"480p_3":n(480,480),"480p_4":n(640,480),"480p_6":n(480,480),"480p_8":n(848,480),"480p_9":n(848,480),"480p_10":n(640,480),"720p_1":n(1280,720),"720p_2":n(1280,720),"720p_3":n(1280,720),"720p_5":n(960,720),"720p_6":n(960,720),"1080p_1":n(1920,1080),"1080p_2":n(1920,1080),"1080p_3":n(1920,1080),"1080p_5":n(1920,1080),"1440p_1":n(2560,1440),"1440p_2":n(2560,1440),"4k_1":n(3840,2160),"4k_3":n(3840,2160)};return t.setVideoResolution=function(n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.setVideoResolution",options:arguments,tag:"tracer"});return void 0!==s[n+=""]?(e.video=s[n],e.attributes=e.attributes||{},e.attributes.resolution=n,i(),!0):(i(),!1)},t.setVideoFrameRate=function(n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.setVideoFrameRate",options:arguments,tag:"tracer"});return Object(p.isFireFox)()?(i(),!1):"object"===v()(n)&&n instanceof Array&&n.length>1?(e.attributes=e.attributes||{},e.attributes.minFrameRate=n[0],e.attributes.maxFrameRate=n[1],i(),!0):(i(),!1)},t.setVideoBitRate=function(n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.setVideoBitRate",options:arguments,tag:"tracer"});return"object"===v()(n)&&n instanceof Array&&n.length>1?(e.attributes=e.attributes||{},e.attributes.minVideoBW=n[0],e.attributes.maxVideoBW=n[1],t.connectionSpec&&(t.connectionSpec.minVideoBW=n[0],t.connectionSpec.maxVideoBW=n[1]),i(),!0):(i(),!1)},t.setScreenBitRate=function(n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.setScreenBitRate",options:arguments,tag:"tracer"});return"object"===v()(n)&&n instanceof Array&&n.length>1?(e.screenAttributes=e.screenAttributes||{},e.screenAttributes.minVideoBW=n[0],e.screenAttributes.maxVideoBW=n[1],i(),!0):(i(),!1)},t.setScreenProfile=function(e){var n=a.b.reportApiInvoke(t.sid,{name:"Stream.setScreenProfile",options:arguments,tag:"tracer"});if(Y(e,"profile",["480p_1","480p_2","720p_1","720p_2","1080p_1","1080p_2"]),"string"==typeof e&&t.screen){switch(e){case"480p_1":t.screenAttributes.width=640,t.screenAttributes.height=480,t.screenAttributes.maxFr=5,t.screenAttributes.minFr=1;break;case"480p_2":t.screenAttributes.width=640,t.screenAttributes.height=480,t.screenAttributes.maxFr=30,t.screenAttributes.minFr=25;break;case"720p_1":t.screenAttributes.width=1280,t.screenAttributes.height=720,t.screenAttributes.maxFr=5,t.screenAttributes.minFr=1;break;case"720p_2":t.screenAttributes.width=1280,t.screenAttributes.height=720,t.screenAttributes.maxFr=30,t.screenAttributes.minFr=25;break;case"1080p_1":t.screenAttributes.width=1920,t.screenAttributes.height=1080,t.screenAttributes.maxFr=5,t.screenAttributes.minFr=1;break;case"1080p_2":t.screenAttributes.width=1920,t.screenAttributes.height=1080,t.screenAttributes.maxFr=30,t.screenAttributes.minFr=25}return n(),!0}return n(),!1},t.setVideoProfileCustom=function(e){var n=a.b.reportApiInvoke(t.sid,{name:"Stream.setVideoProfileCustom",options:arguments,tag:"tracer"});t.setVideoResolution(e[0]),t.setVideoFrameRate([e[1],e[1]]),t.setVideoBitRate([e[2],e[2]]),n()},t.setVideoProfileCustomPlus=function(i){var o=a.b.reportApiInvoke(t.sid,{name:"Stream.setVideoProfileCustom",options:arguments,tag:"tracer"});e.video=n(i.width,i.height),e.attributes=e.attributes||{},e.attributes.resolution="".concat(i.width,"x").concat(i.height),t.setVideoFrameRate([i.framerate,i.framerate]),t.setVideoBitRate([i.bitrate,i.bitrate]),o()},t.setVideoProfile=function(e){var n=a.b.reportApiInvoke(t.sid,{name:"Stream.setVideoProfile",options:arguments,tag:"tracer"});if(Y(e,"profile",["480p_1","480p_2","720p_1","720p_2","1080p_1","1080p_2","120p","120P","120p_1","120P_1","120p_3","120P_3","180p","180P","180p_1","180P_1","180p_3","180P_3","180p_4","180P_4","240p","240P","240p_1","240P_1","240p_3","240P_3","240p_4","240P_4","360p","360P","360p_1","360P_1","360p_3","360P_3","360p_4","360P_4","360p_6","360P_6","360p_7","360P_7","360p_8","360P_8","360p_9","360P_9","360p_10","360P_10","360p_11","360P_11","480p","480P","480p_1","480P_1","480p_2","480P_2","480p_3","480P_3","480p_4","480P_4","480p_6","480P_6","480p_8","480P_8","480p_9","480P_9","480p_10","480P_10","720p","720P","720p_1","720P_1","720p_2","720P_2","720p_3","720P_3","720p_5","720P_5","720p_6","720P_6","1080p","1080P","1080p_1","1080P_1","1080p_2","1080P_2","1080p_3","1080P_3","1080p_5","1080P_5","1440p","1440P","1440p_1","1440P_1","1440p_2","1440P_2","4k","4K","4k_1","4K_1","4k_3","4K_3"]),t.profile=e,"string"==typeof e&&t.video){switch(e){case"120p":case"120P":case"120p_1":case"120P_1":t.setVideoResolution("120p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([30,65]);break;case"120p_3":case"120P_3":t.setVideoResolution("120p_3"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([30,50]);break;case"180p":case"180P":case"180p_1":case"180P_1":t.setVideoResolution("180p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([30,140]);break;case"180p_3":case"180P_3":t.setVideoResolution("180p_3"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([30,100]);break;case"180p_4":case"180P_4":t.setVideoResolution("180p_4"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([30,120]);break;case"240p":case"240P":case"240p_1":case"240P_1":t.setVideoResolution("240p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([40,200]);break;case"240p_3":case"240P_3":t.setVideoResolution("240p_3"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([40,140]);break;case"240p_4":case"240P_4":t.setVideoResolution("240p_4"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([40,220]);break;case"360p":case"360P":case"360p_1":case"360P_1":t.setVideoResolution("360p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([80,400]);break;case"360p_3":case"360P_3":t.setVideoResolution("360p_3"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([80,260]);break;case"360p_4":case"360P_4":t.setVideoResolution("360p_4"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([80,600]);break;case"360p_6":case"360P_6":t.setVideoResolution("360p_6"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([80,400]);break;case"360p_7":case"360P_7":t.setVideoResolution("360p_7"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([80,320]);break;case"360p_8":case"360P_8":t.setVideoResolution("360p_8"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([80,490]);break;case"360p_9":case"360P_9":t.setVideoResolution("360p_9"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([80,800]);break;case"360p_10":case"360P_10":t.setVideoResolution("360p_10"),t.setVideoFrameRate([24,24]),t.setVideoBitRate([80,800]);break;case"360p_11":case"360P_11":t.setVideoResolution("360p_11"),t.setVideoFrameRate([24,24]),t.setVideoBitRate([80,1e3]);break;case"480p":case"480P":case"480p_1":case"480P_1":t.setVideoResolution("480p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([20,500]);break;case"480p_2":case"480P_2":t.setVideoResolution("480p_2"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([100,1e3]);break;case"480p_3":case"480P_3":t.setVideoResolution("480p_3"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([100,400]);break;case"480p_4":case"480P_4":t.setVideoResolution("480p_4"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([100,750]);break;case"480p_6":case"480P_6":t.setVideoResolution("480p_6"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([100,600]);break;case"480p_8":case"480P_8":t.setVideoResolution("480p_8"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([100,610]);break;case"480p_9":case"480P_9":t.setVideoResolution("480p_9"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([100,930]);break;case"480p_10":case"480P_10":t.setVideoResolution("480p_10"),t.setVideoFrameRate([10,10]),t.setVideoBitRate([100,400]);break;case"720p":case"720P":case"720p_1":case"720P_1":t.setVideoResolution("720p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([120,1130]);break;case"720p_2":case"720P_2":t.setVideoResolution("720p_2"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,2e3]);break;case"720p_3":case"720P_3":t.setVideoResolution("720p_3"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,1710]);break;case"720p_5":case"720P_5":t.setVideoResolution("720p_5"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([120,910]);break;case"720p_6":case"720P_6":t.setVideoResolution("720p_6"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,1380]);break;case"1080p":case"1080P":case"1080p_1":case"1080P_1":t.setVideoResolution("1080p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([120,2080]);break;case"1080p_2":case"1080P_2":t.setVideoResolution("1080p_2"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,3e3]);break;case"1080p_3":case"1080P_3":t.setVideoResolution("1080p_3"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,3150]);break;case"1080p_5":case"1080P_5":t.setVideoResolution("1080p_5"),t.setVideoFrameRate([60,60]),t.setVideoBitRate([120,4780]);break;case"1440p":case"1440P":case"1440p_1":case"1440P_1":t.setVideoResolution("1440p_1"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,4850]);break;case"1440p_2":case"1440P_2":t.setVideoResolution("1440p_2"),t.setVideoFrameRate([60,60]),t.setVideoBitRate([120,7350]);break;case"4k":case"4K":case"4k_1":case"4K_1":t.setVideoResolution("4k_1"),t.setVideoFrameRate([30,30]),t.setVideoBitRate([120,8910]);break;case"4k_3":case"4K_3":t.setVideoResolution("4k_3"),t.setVideoFrameRate([60,60]),t.setVideoBitRate([120,13500]);break;default:t.setVideoResolution("480p_1"),t.setVideoFrameRate([15,15]),t.setVideoBitRate([100,500])}return n(),!0}return n(),!1},t.setAudioProfile=function(e){var n=a.b.reportApiInvoke(t.sid,{name:"Stream.setAudioProfile",options:arguments,tag:"tracer"});if(Y(e,"profile",["speech_low_quality","speech_standard","music_standard","standard_stereo","high_quality","high_quality_stereo"]),t.audioProfile=e,"string"==typeof e&&t.audio){switch(e){case"speech_low_quality":t.highQuality=!1,t.stereo=!1,t.speech=!0,t.lowQuality=!0;break;case"speech_standard":t.highQuality=!1,t.stereo=!1,t.speech=!0,t.lowQuality=!1;break;case"music_standard":t.highQuality=!1,t.stereo=!1,t.speech=!1,t.lowQuality=!1;break;case"standard_stereo":t.highQuality=!1,t.stereo=!0,t.speech=!1,t.lowQuality=!1;break;case"high_quality":t.highQuality=!0,t.stereo=!1,t.speech=!1,t.lowQuality=!1;break;case"high_quality_stereo":t.highQuality=!0,t.stereo=!0,t.speech=!1,t.lowQuality=!1;break;default:t.highQuality=!1,t.stereo=!1,t.speech=!1,t.lowQuality=!1}return n(),!0}return n(),!1},t.getId=function(){return t.streamId},t.getUserId=function(){return t.userId},t.setUserId=function(e){var n=a.b.reportApiInvoke(t.sid,{name:"Stream.setUserId",options:arguments,tag:"tracer"});t.userId&&o.default.warning("[".concat(t.streamId,"] Stream.userId ").concat(t.userId," => ").concat(e)),t.userId=e,n()},t.getAttributes=function(){return e.screen?t.screenAttributes:e.attributes},t.hasAudio=function(){return t.audio},t.hasVideo=function(){return t.video},t.hasScreen=function(){return t.screen},t.isVideoOn=function(){return(t.hasVideo()||t.hasScreen())&&!t.userMuteVideo},t.isAudioOn=function(){return t.hasAudio()&&!t.userMuteAudio},t.init=function(n,i){var r=a.b.reportApiInvoke(t.sid,{callback:function(e,t){if(e)return i&&i(e);n&&n(t)},name:"Stream.init",options:arguments,tag:"tracer"}),s=((new Date).getTime(),arguments[2]);if(void 0===s&&(s=2),!0===t.initialized)return r({type:"warning",msg:"STREAM_ALREADY_INITIALIZED"});if(!0!==t.local)return r({type:"warning",msg:"STREAM_NOT_LOCAL"});if(t.videoSource?t.videoName="videoSource":t.video&&(t.videoName=K.searchDeviceNameById(e.cameraId)||"default"),t.audioSource?t.audioName="audioSource":t.audio&&(t.audioName=K.searchDeviceNameById(e.microphoneId)||"default"),t.screen&&(t.screenName=e.extensionId||"default"),t.videoSource||t.audioSource){var d=new MediaStream;return t.videoSource&&(o.default.debug("[".concat(t.streamId,"] Added videoSource")),d.addTrack(t.videoSource),t.video=!0),t.audioSource&&(o.default.debug("[".concat(t.streamId,"] Added audioSource")),d.addTrack(t.audioSource),t.audio=!0),t.hasVideo()?Object(G.h)(d,function(e,n){o.default.info("[".concat(t.streamId,"] Video Source width ").concat(e," height ").concat(n)),t.stream=d,t.initialized=!0,r()},function(e){o.default.warning("[".concat(t.streamId,"] Failed to get width & height from video source"),e),t.stream=d,t.initialized=!0,r()}):(t.stream=d,t.initialized=!0,r())}try{if((e.audio||e.video||e.screen)&&void 0===e.url){o.default.debug("[".concat(t.streamId,"] Requested access to local media"));var c=e.video;if(e.screen)var u={video:c,audio:!1,screen:!0,data:!0,extensionId:e.extensionId,attributes:t.screenAttributes,fake:e.fake,mediaSource:e.mediaSource,sourceId:e.sourceId,streamId:t.streamId};else{u={video:c,audio:e.audio,fake:e.fake,streamId:t.streamId};if(!(null!==window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)&&window.navigator.appVersion.match(/Chrome\/([\w\W]*?)\./)[1]<=35)){var l=30,f=30;if(void 0!==e.attributes.minFrameRate&&(l=e.attributes.minFrameRate),void 0!==e.attributes.maxFrameRate&&(f=e.attributes.maxFrameRate),!0===u.audio){u.audio=!e.microphoneId||{deviceId:{exact:e.microphoneId}};var m={};t.audioProcessing&&(void 0!==t.audioProcessing.AGC&&(Object(p.isFireFox)()?m.autoGainControl=t.audioProcessing.AGC:Object(p.isChrome)()&&(m.googAutoGainControl=t.audioProcessing.AGC,m.googAutoGainControl2=t.audioProcessing.AGC)),void 0!==t.audioProcessing.AEC&&(m.echoCancellation=t.audioProcessing.AEC),void 0!==t.audioProcessing.ANS&&(Object(p.isFireFox)()?m.noiseSuppression=t.audioProcessing.ANS:Object(p.isChrome)()&&(m.googNoiseSuppression=t.audioProcessing.ANS))),t.stereo&&Object(p.isChrome)()&&(m.googAutoGainControl=!1,m.googAutoGainControl2=!1,m.echoCancellation=!1,m.googNoiseSuppression=!1),0!==Object.keys(m).length&&(!0===u.audio?u.audio={mandatory:m}:u.audio=I()(u.audio,m))}!0===u.video?(u.video={width:{ideal:t.videoSize[0]},height:{ideal:t.videoSize[1]},frameRate:{ideal:l,max:f}},t.setVideoBitRate([500,500]),u.video.deviceId=e.cameraId?{exact:e.cameraId}:void 0):"object"===v()(u.video)&&(u.video.frameRate={ideal:l,max:f},u.video.deviceId=e.cameraId?{exact:e.cameraId}:void 0)}}o.default.debug("[".concat(t.streamId,"] "),u);var g=I()({},u);if(t.constraints=u,H(g,function(n){t.screenAudioTrack&&n.addTrack(t.screenAudioTrack);var i=n.getVideoTracks().length>0,a=n.getAudioTracks().length>0;return g.video&&!i&&g.audio&&!a?(o.default.error("[".concat(t.streamId,"] Media access: NO_CAMERA_MIC_PERMISSION")),r("NO_CAMERA_MIC_PERMISSION")):g.video&&!i?(o.default.error("[".concat(t.streamId,"] Media access: NO_CAMERA_PERMISSION")),r("NO_CAMERA_PERMISSION")):g.screen&&!i?(o.default.error("[".concat(t.streamId,"] Media access: NO_SCREEN_PERMISSION")),r("NO_SCREEN_PERMISSION")):g.audio&&!a?(o.default.error("[".concat(t.streamId,"] Media access: NO_MIC_PERMISSION")),r("NO_MIC_PERMISSION")):(o.default.debug("[".concat(t.streamId,"] User has granted access to local media")),t.dispatchEvent({type:"accessAllowed"}),t.stream=n,t.initialized=!0,e.screen&&e.audio&&!t.screenAudioTrack||r(),t.hasVideo()&&Object(G.h)(n,function(e,n){t.videoWidth=e,t.videoHeight=n},function(e){o.default.warning("[".concat(t.streamId,"] vsResHack failed: "),e)}),void(e.screen&&Object(p.isChrome)()&&t.stream&&t.stream.getVideoTracks()[0]&&(t.stream.getVideoTracks()[0].onended=function(){t.dispatchEvent({type:"stopScreenSharing"})})))},function(e){var n={type:"error",msg:e.name||e.code||e,info:null};switch(e&&(e.message&&(n.info=e.message),e.code&&(n.info?n.info+=". "+e.code:n.info=" "+e.code),e.constraint&&(n.info?n.info+=". Constraint: "+e.constraint:n.info="constraint: "+e.constraint)),n.msg){case"Starting video failed":case"TrackStartError":if(t.videoSize=void 0,s>0)return void setTimeout(function(){t.init(function(e){return r(e)},r,s-1)},1);n.msg="MEDIA_OPTION_INVALID";break;case"DevicesNotFoundError":n.msg="DEVICES_NOT_FOUND";break;case"NotSupportedError":n.msg="NOT_SUPPORTED";break;case"PermissionDeniedError":n.msg="PERMISSION_DENIED",t.dispatchEvent({type:"accessDenied"});break;case"PERMISSION_DENIED":t.dispatchEvent({type:"accessDenied"});break;case"InvalidStateError":n.msg="PERMISSION_DENIED",t.dispatchEvent({type:"accessDenied"});break;case"NotAllowedError":t.dispatchEvent({type:"accessDenied"});break;case"ConstraintNotSatisfiedError":n.msg="CONSTRAINT_NOT_SATISFIED";break;default:n.msg||(n.msg="UNDEFINED")}var i="Media access ".concat(n.msg).concat(n.info?": "+n.info:"");o.default.error("[".concat(t.streamId,"] "),i),r(n)}),e.screen&&e.audio){var S=!e.microphoneId||{deviceId:{exact:e.microphoneId}};m={};t.audioProcessing&&(void 0!==t.audioProcessing.AGC&&(Object(p.isFireFox)()?m.autoGainControl=t.audioProcessing.AGC:Object(p.isChrome)()&&(m.googAutoGainControl=t.audioProcessing.AGC,m.googAutoGainControl2=t.audioProcessing.AGC)),void 0!==t.audioProcessing.AEC&&(m.echoCancellation=t.audioProcessing.AEC),void 0!==t.audioProcessing.ANS&&(Object(p.isFireFox)()?m.noiseSuppression=t.audioProcessing.ANS:Object(p.isChrome)()&&(m.googNoiseSuppression=t.audioProcessing.ANS))),t.stereo&&Object(p.isChrome)()&&(m.googAutoGainControl=!1,m.googAutoGainControl2=!1,m.echoCancellation=!1,m.googNoiseSuppression=!1),0!==Object.keys(m).length&&(S=!0===S?{mandatory:m}:I()(S,m));var _={video:!1,audio:S};o.default.debug("[".concat(t.streamId,"] "),_),H(_,function(e){o.default.info("[".concat(t.streamId,"] User has granted access to auxiliary local media.")),t.dispatchEvent({type:"accessAllowed"});var n=e.getAudioTracks()[0];t.stream?(t.stream.addTrack(n),r()):t.screenAudioTrack=n},function(e){var n={type:"error",msg:e.name||e.code||e,info:null};switch(e&&(e.message&&(n.info=e.message),e.code&&(n.info?n.info+=". "+e.code:n.info=" "+e.code),e.constraint&&(n.info?n.info+=". Constraint: "+e.constraint:n.info="constraint: "+e.constraint)),n.msg){case"Starting video failed":case"TrackStartError":if(t.videoSize=void 0,s>0)return void setTimeout(function(){t.init(function(e){return r(e)},r,s-1)},1);n.msg="MEDIA_OPTION_INVALID";break;case"DevicesNotFoundError":n.msg="DEVICES_NOT_FOUND";break;case"NotSupportedError":n.msg="NOT_SUPPORTED";break;case"PermissionDeniedError":case"InvalidStateError":n.msg="PERMISSION_DENIED",t.dispatchEvent({type:"accessDenied"});break;case"PERMISSION_DENIED":case"NotAllowedError":t.dispatchEvent({type:"accessDenied"});break;case"ConstraintNotSatisfiedError":n.msg="CONSTRAINT_NOT_SATISFIED";break;default:n.msg||(n.msg="UNDEFINED")}var i="Media access ".concat(n.msg).concat(n.info?": "+n.info:"");o.default.error("[".concat(t.streamId,"] "),i),r(n)})}}else r({type:"warning",msg:"STREAM_HAS_NO_MEDIA_ATTRIBUTES"})}catch(e){o.default.error("[".concat(t.streamId,"] Stream init: "),e),r({type:"error",msg:e.message||e})}},t.close=function(){var e=a.b.reportApiInvoke(null,{name:"Stream.close",options:arguments,tag:"tracer"});if(o.default.debug("[".concat(t.streamId,"] Close stream with id"),t.streamId),void 0!==t.stream){var n=t.stream.getTracks();for(var i in n)n.hasOwnProperty(i)&&n[i].stop();t.stream=void 0}Object(p.isSafari)()&&t.pc&&t.pc.peerConnection&&t.pc.peerConnection.removeTrack&&t.pc.peerConnection.getSenders&&t.pc.peerConnection.getSenders().forEach(function(e){e&&(o.default.debug("[".concat(t.streamId,"] Remove Track"),e),t.pc.peerConnection.removeTrack(e))});t.initialized=!1,t._onAudioMute=void 0,t._onAudioUnmute=void 0,t._onVideoMute=void 0,t._onVideoUnmute=void 0,t.lowStream&&t.lowStream.close(),e()},t.enableAudio=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.enableAudio",options:arguments,tag:"tracer"});o.default.deprecate("[".concat(t.streamId,"] Stream.enableAudio is deprecated and will be removed in the future. Use Stream.unmuteAudio instead"));var n=t._unmuteAudio();return n&&(t.userMuteAudio=!1),e(null,n),n},t.disableAudio=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.disableAudio",options:arguments,tag:"tracer"});o.default.deprecate("[".concat(t.streamId,"] Stream.disableAudio is deprecated and will be removed in the future. Use Stream.muteAudio instead"));var n=t._muteAudio();return n&&(t.userMuteAudio=!0),e(null,n),n},t.enableVideo=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.enableVideo",options:arguments,tag:"tracer"});o.default.deprecate("[".concat(t.streamId,"] Stream.enableVideo is deprecated and will be removed in the future. Use Stream.unmuteVideo instead"));var n=t._unmuteVideo();return n&&(t.userMuteVideo=!1,t.lowStream&&(t.lowStream.userMuteVideo=!1)),e(null,n),n},t.disableVideo=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.disableVideo",options:arguments,tag:"tracer"});o.default.deprecate("[".concat(t.streamId,"] Stream.disableVideo is deprecated and will be removed in the future. Use Stream.muteVideo instead"));var n=t._muteVideo();return n&&(t.userMuteVideo=!0,t.lowStream&&(t.lowStream.userMuteVideo=!0)),e(null,n),n},t.unmuteAudio=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.unmuteAudio",options:arguments,tag:"tracer"}),n=t._unmuteAudio();return n&&(t.userMuteAudio=!1),e(null,n),n},t.muteAudio=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.muteAudio",options:arguments,tag:"tracer"}),n=t._muteAudio();return n&&(t.userMuteAudio=!0),e(null,n),n},t.unmuteVideo=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.unmuteVideo",options:arguments,tag:"tracer"}),n=t._unmuteVideo();return n&&(t.userMuteVideo=!1,t.lowStream&&(t.lowStream.userMuteVideo=!1)),e(null,n),n},t.muteVideo=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.muteVideo",options:arguments,tag:"tracer"}),n=t._muteVideo();return n&&(t.userMuteVideo=!0,t.lowStream&&(t.lowStream.userMuteVideo=!0)),e(null,n),n},t._unmuteAudio=function(){return o.default.debug("[".concat(t.streamId,"] Unmuted audio stream with id "),t.streamId),t._flushAudioMixingMuteStatus(!1),!(!t.hasAudio()||!t.initialized||void 0===t.stream||!0===t.stream.getAudioTracks()[0].enabled)&&(t._onAudioUnmute&&t._onAudioUnmute(),t.pc&&(t.pc.isAudioMute=!1),t.stream.getAudioTracks()[0].enabled=!0,!0)},t._isAudioMuted=function(){if(t.stream&&t.hasAudio()){var e=t.stream.getAudioTracks();return e.length>0&&!e[0].enabled}return!1},t._muteAudio=function(){return o.default.debug("[".concat(t.streamId,"] Muted audio stream with id "),t.streamId),t._flushAudioMixingMuteStatus(!0),!!(t.hasAudio()&&t.initialized&&void 0!==t.stream&&t.stream.getAudioTracks()[0].enabled)&&(t._onAudioMute&&t._onAudioMute(),t.pc&&(t.pc.isAudioMute=!0),t.stream.getAudioTracks()[0].enabled=!1,t.sid&&a.b.audioSendingStopped(t.sid,{succ:!0,reason:"muteAudio"}),!0)},t._unmuteVideo=function(){return o.default.debug("[".concat(t.streamId,"] Unmuted video stream with id"),t.streamId),!(!t.initialized||void 0===t.stream||!t.stream.getVideoTracks().length||!0===t.stream.getVideoTracks()[0].enabled)&&(t._onVideoUnmute&&t._onVideoUnmute(),t.pc&&(t.pc.isVideoMute=!1),t.stream.getVideoTracks()[0].enabled=!0,t.lowStream&&t.lowStream._unmuteVideo(),!0)},t._muteVideo=function(){return o.default.debug("[".concat(t.streamId,"] Muted video stream with id"),t.streamId),!!(t.initialized&&void 0!==t.stream&&t.stream.getVideoTracks().length&&t.stream.getVideoTracks()[0].enabled)&&(t._onVideoMute&&t._onVideoMute(),t.pc&&(t.pc.isVideoMute=!0),t.stream.getVideoTracks()[0].enabled=!1,t.lowStream&&t.lowStream._muteVideo(),t.sid&&a.b.videoSendingStopped(t.sid,{succ:!0,reason:"muteVideo"}),!0)},t.addTrack=function(n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.addTrack",options:arguments,tag:"tracer"});if(t.pc&&t.pc.addTrack(n,t.stream),"audio"==n.kind){var o=new MediaStream;t.userMuteAudio&&(n.enabled=!1),o.addTrack(n);var r=t.stream.getVideoTracks()[0];r&&(o.addTrack(r),t.audio=!0,e.audio=!0),t.stream=o,t.audioLevelHelper=null,t.player&&t.player.video&&(t.player.video.srcObject=t.stream)}else t.userMuteVideo&&(n.enabled=!1),t.stream.addTrack(n),t.video=!0,e.video=!0;i()},t.removeTrack=function(n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.removeTrack",options:arguments,tag:"tracer"});t.pc&&t.pc.removeTrack(n,t.stream),t.stream.removeTrack(n),"audio"===n.kind?(t.audio=!1,e.audio=!1):(t.video=!1,e.video=!1),t.audioLevelHelper=null,"live"==n.readyState&&(n.stop(),o.default.debug("[".concat(t.streamId,"] Track ").concat(n.kind," Stopped"))),i()},t.setAudioOutput=function(e,n,i){var r=a.b.reportApiInvoke(t.sid,{callback:function(e,t){if(e)return i&&i(e);n&&n(t)},name:"Stream.setAudioOutput",options:arguments,tag:"tracer"});return Z(e,1,255)?(t.audioOutput=e,t.player?void t.player.setAudioOutput(e,function(){return r()},r):r()):(o.default.error("[".concat(t.streamId,"] setAudioOutput Invalid Parameter"),e),r(A.INVALID_PARAMETER))},t.play=function(e,n){var i=a.b.reportApiInvoke(t.sid,{name:"Stream.play",options:arguments,tag:"tracer"});Q(e,"elementID"),re(n)||(re(n.fit)||Y(n.fit,"fit",["cover","contain"]),re(n.muted)||$(n.muted,"muted")),t.elementID=e,t.playOptions=n,t.isPlaying()?o.default.error("[".concat(t.streamId,"] Stream.play(): Stream is already playing")):!t.local||t.video||t.screen?void 0!==e&&(t.player=new T({id:t.getId(),stream:t,elementID:e,options:n})):t.hasAudio()&&(t.player=new T({id:t.getId(),stream:t,elementID:e,options:n})),t.audioOutput&&t.player.setAudioOutput(t.audioOutput),void 0!==t.audioLevel&&t.player.setAudioVolume(t.audioLevel),t._flushAudioMixingMuteStatus(!1),i()},t.stop=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.stop",options:arguments,tag:"tracer"});o.default.debug("[".concat(t.streamId,"] Stop stream player with id "),t.streamId),t.player?(t.player.destroy(),delete t.player):o.default.error("[".concat(t.streamId,"] Stream.stop(): Stream is not playing")),t._flushAudioMixingMuteStatus(!0),e()},t.isPlaying=function(){return!!t.player},t.isPaused=function(){return!!t.player&&(!(!t.player.video||!t.player.video.paused)||!(!t.player.audio||!t.player.audio.paused))},t.resume=function(){var e=!1;return t.player&&(t.player.video&&t.player.video.play&&(t.player.video.play(),e=!0),t.player.audio&&t.player.audio.play&&(t.player.audio.play(),e=!0)),e},t.getVideoTrack=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.getVideoTrack",options:arguments,tag:"tracer"});if(t.stream&&t.stream.getVideoTracks){var n=t.stream.getVideoTracks()[0];if(n)return o.default.info("[".concat(t.streamId,"] getVideoTrack"),n),e(),n}o.default.info("[".concat(t.streamId,"] getVideoTrack None")),e(null,"getVideoTrack None")},t.getAudioTrack=function(){var e=a.b.reportApiInvoke(t.sid,{name:"Stream.getAudioTrack",options:arguments,tag:"tracer"});if(t.stream&&t.stream.getAudioTracks){var n=t.stream.getAudioTracks()[0];if(n)return o.default.info("[".concat(t.streamId,"] getAudioTracks"),n),e(),n}o.default.info("[".concat(t.streamId,"] getAudioTracks None")),e(null,"getAudioTracks None")},t._replaceMediaStreamTrack=function(e,n,i){if(t.stream){if("video"==e.kind){if(r=t.stream.getVideoTracks()[0])return t.userMuteVideo&&(e.enabled=!1),t.stream.removeTrack(r),t.stream.addTrack(e),o.default.debug("[".concat(t.streamId,"] _replaceMediaStreamTrack ").concat(e.kind," SUCCESS")),"live"==r.readyState&&(r.stop(),o.default.debug("[".concat(t.streamId,"] Track ").concat(r.kind," Stopped"))),n&&n();var a="MEDIASTREAM_TRACK_NOT_FOUND";return o.default.error("[".concat(t.streamId,"] MEDIASTREAM_TRACK_NOT_FOUND ").concat(e.kind)),i(a)}if("audio"==e.kind){var r;if(r=t.stream.getAudioTracks()[0]){t.userMuteAudio&&(e.enabled=!1);var s=new MediaStream;s.addTrack(e);var d=t.stream&&t.stream.getVideoTracks()[0];return d&&s.addTrack(d),t.stream=s,t.audioLevelHelper=null,t.player&&t.player.video&&(t.player.video.srcObject=t.stream),o.default.debug("[".concat(t.streamId,"] _replaceMediaStreamTrack SUCCESS")),"live"==r.readyState&&(r.stop(),o.default.debug("[".concat(t.streamId,"] Track ").concat(r.kind," Stopped"))),n&&n()}a="MEDIASTREAM_TRACK_NOT_FOUND";return o.default.error("[".concat(t.streamId,"] MEDIASTREAM_TRACK_NOT_FOUND ").concat(e.kind)),i(a)}a="INVALID_TRACK_TYPE";return o.default.error("[".concat(t.streamId,"] _replaceMediaStreamTrack ").concat(a," ").concat(e.kind)),i&&i(a)}a="NO_STREAM_FOUND";return o.default.error("[".concat(t.streamId,"] _replaceMediaStreamTrack ").concat(a)),i&&i(a)},t.replaceTrack=function(e,n,i){var r=a.b.reportApiInvoke(t.sid,{callback:function(e,t){if(e)return i&&i(e);n&&n(t)},name:"Stream.replaceTrack",options:arguments,tag:"tracer"});return e&&e.kind?t.pc&&t.pc.hasSender&&t.pc.hasSender(e.kind)?void t.pc.replaceTrack(e,function(){return o.default.debug("[".concat(t.streamId,"] PeerConnection.replaceTrack ").concat(e.kind," SUCCESS")),t._replaceMediaStreamTrack(e,function(e){return r(null,e)},r)},function(n){return o.default.error("[".concat(t.streamId,"] PeerConnection.replaceTrack ").concat(e.kind," Failed ").concat(n)),r(n)}):t._replaceMediaStreamTrack(e,function(e){return r(null,e)},r):r("INVALID_TRACK")},t.setAudioVolume=function(e){var n=a.b.reportApiInvoke(t.sid,{name:"Stream.setAudioVolume",options:arguments,tag:"tracer"});X(e,"level",0,100),t.audioLevel=e,t.player&&t.player.setAudioVolume(e),n()},t.getStats=function(e,n){var i={type:"collectStats",promises:[]};t.dispatchEvent(i),Promise.all(i.promises).then(function(n){for(var i={},o=n.length-1;o>=0;o--){var a=n[o];I()(i,a)}e&&setTimeout(e.bind(t,i),0)}).catch(function(e){n&&setTimeout(n.bind(t,e),0)})},t._getPCStats=function(){return new Promise(function(e,n){if(!t.pc||"established"!==t.pc.state||!t.pc.getStats){return n("PEER_CONNECTION_NOT_ESTABLISHED")}t.pc.getStats(function(i){if(!t.pc||"established"!==t.pc.state||!t.pc.getStats){return n("PEER_CONNECTION_STATE_CHANGE")}var o=t.pc.isSubscriber?function(e){var t={};return e.forEach(function(e){e.id&&(-1===e.id.indexOf("recv")&&-1===e.id.indexOf("inbound_rtp")&&-1===e.id.indexOf("inbound-rtp")&&-1===e.id.indexOf("InboundRTP")||("audio"===e.mediaType?(J(t,"audioReceiveBytes",e.bytesReceived),J(t,"audioReceivePackets",e.packetsReceived),J(t,"audioReceivePacketsLost",e.packetsLost)):(J(t,"videoReceiveBytes",e.bytesReceived),J(t,"videoReceivePacketsLost",e.packetsLost),J(t,"videoReceivePackets",e.packetsReceived),J(t,"videoReceiveFrameRate",e.googFrameRateReceived),J(t,"videoReceiveDecodeFrameRate",e.googFrameRateDecoded),J(t,"videoReceiveResolutionWidth",e.googFrameWidthReceived),J(t,"videoReceiveResolutionHeight",e.googFrameHeightReceived))))}),t}(i):function(e){var t={};return e.forEach(function(e){e.id&&(-1===e.id.indexOf("send")&&-1===e.id.indexOf("outbound_rtp")&&-1===e.id.indexOf("OutboundRTP")||("audio"===e.mediaType?(J(t,"audioSendBytes",e.bytesSent),J(t,"audioSendPackets",e.packetsSent),J(t,"audioSendPacketsLost",e.packetsLost)):(J(t,"videoSendBytes",e.bytesSent),J(t,"videoSendPackets",e.packetsSent),J(t,"videoSendPacketsLost",e.packetsLost),J(t,"videoSendFrameRate",e.googFrameRateSent),J(t,"videoSendResolutionWidth",e.googFrameWidthSent),J(t,"videoSendResolutionHeight",e.googFrameHeightSent))))}),t}(i);return e(o)})}).then(function(e){return t.pc.isSubscriber?(Object(p.isFireFox)()||Object(p.isSafari)())&&(J(e,"videoReceiveResolutionHeight",t.videoHeight),J(e,"videoReceiveResolutionWidth",t.videoWidth)):((Object(p.isSafari)()||Object(p.isFireFox)())&&(J(e,"videoSendResolutionHeight",t.videoHeight),J(e,"videoSendResolutionWidth",t.videoWidth)),(Object(p.isSafari)()||Object(p.isFireFox)())&&t.uplinkStats&&J(e,"videoSendPacketsLost",t.uplinkStats.uplink_cumulative_lost)),Promise.resolve(e)})},t.getAudioLevel=function(){return t.audioLevelHelper?t.audioLevelHelper.getAudioLevel():t.stream?0!==t.stream.getAudioTracks().length?(t.audioLevelHelper=new G.a(t.stream),t.audioLevelHelper.getAudioLevel()):void o.default.warning("[".concat(t.streamId,"] can't get audioLevel beacuse no audio trace in stream")):(o.default.warning("[".concat(t.streamId,"] can't get audioLevel beacuse no stream exist")),0)},t.setVideoProfile("480P"),t._switchVideoDevice=function(e,n,i){if(e===t.cameraId)return n&&n();t.constraints.video.deviceId={exact:e};var a=I()({},t.constraints);a.audio=!1,o.default.debug("[".concat(t.streamId,"] ").concat(a)),H(a,function(o){try{Object(p.isSafari)()?t.replaceTrack(o.getVideoTracks()[0],function(){t.userMuteVideo&&(t.stream.getVideoTracks()[0].enabled=!1),n&&n()},i):(t.removeTrack(t.stream.getVideoTracks()[0]),t.addTrack(o.getVideoTracks()[0]),t.isPlaying()&&(t.stop(),t.elementID&&t.play(t.elementID)),t.cameraId=e,t.userMuteVideo&&(t.stream.getVideoTracks()[0].enabled=!1),n&&n())}catch(e){return i&&i(e)}},function(e){return i&&i(e)})},t._switchAudioDevice=function(e,n,i){if(e===t.microphoneId)return n&&n();!0===t.constraints.audio?t.constraints.audio={deviceId:{exact:e}}:t.constraints.audio.deviceId={exact:e};var a=I()({},t.constraints);a.video=!1,o.default.debug("[".concat(t.streamId,"] "),a),H(a,function(o){try{Object(p.isSafari)()?t.replaceTrack(o.getAudioTracks()[0],n,i):(t.removeTrack(t.stream.getAudioTracks()[0]),t.addTrack(o.getAudioTracks()[0]),t.audioMixing.audioContextInited&&(t.audioMixing.ctx.close(),t.audioMixing.audioContextInited=!1),t.userMuteAudio&&(t.stream.getAudioTracks()[0].enabled=!1),t.isPlaying()&&(t.stop(),t.elementID&&t.play(t.elementID)),t.microphoneId=e,n&&n())}catch(e){return i&&i(e)}},function(e){return i&&i(e)})},t.switchDevice=function(e,n,i,r){var s=a.b.reportApiInvoke(t.sid,{callback:function(e,t){if(e)return r&&r(e);i&&i(t)},name:"Stream.switchDevice",options:arguments,tag:"tracer"});Q(n,"deviceId");var d=function(){return t.inSwitchDevice=!1,s()},c=function(e){t.inSwitchDevice=!1,o.default.error("[".concat(t.streamId,"] "),e),s(e)};if(t.inSwitchDevice)return s("Device switch is in process.");if(t.inSwitchDevice=!0,!t.local)return c("Only the local stream can switch the device.");if(t.screen&&"video"===e)return c("The device cannot be switched during screen-sharing.");if(t.videoSource||t.audioSource)return c("The device cannot be switched when using videoSource or audioSource.");if(t.lowStream)return c("The device cannot be switched when using lowstream.");var u=!1;for(var l in t.audioMixing.sounds){if(t.audioMixing.sounds[l].state!==t.audioMixing.states.IDLE){u=!0;break}}if(t.audioMixing.audioContextInited&&u)return c("The device cannot be switched when using audio Mixing.");K.getDeviceById(n,function(){if("video"===e)t._switchVideoDevice(n,d,c);else{if("audio"!==e)return c("Invalid type.");t._switchAudioDevice(n,d,c)}},function(){return c("The device does not exist.")})},t},de=n(12),ce=["live","rtc","web","interop","h264_interop","web-only"],ue=["vp8","h264"],le=["aes-128-xts","aes-256-xts","aes-128-ecb"],pe=function(e){e&&e.apply(this,[].slice.call(arguments,1))},fe=n(5),me=function(e){var t=r();return t.needReconnect=!0,t.isTimeout=!1,t.isInit=!0,t.sendbytes=0,t.recvbytes=0,t.startTime=Date.now(),t.clientId=e.clientId,t.hostIndex=0,t.requestID=0,e.host instanceof Array?t.host=e.host:t.host=[e.host],t.getSendBytes=function(){return t.sendbytes},t.getRecvBytes=function(){return t.recvbytes},t.getDuration=function(){return Math.ceil((Date.now()-t.startTime)/1e3)},t.getURL=function(){return t.connection.url},t.reconnect=function(){t.isInit=!0,t.creatConnection()},t.connectNext=function(){t.isInit=!0,++t.hostIndex,o.default.debug("["+t.clientId+"] Gateway length:"+t.host.length+" current index:"+t.hostIndex),t.hostIndex>=t.host.length?t.dispatchEvent(u({type:"recover"})):t.creatConnection()},t.replaceHost=function(e){t.host=e||t.host,t.hostIndex=0,t.creatConnection()},t.creatConnection=function(){o.default.debug("["+t.clientId+"] start connect:"+t.host[t.hostIndex]),t.lts=(new Date).getTime(),t.connection=new WebSocket("wss://"+t.host[t.hostIndex]),t.connection.onopen=function(e){o.default.debug("["+t.clientId+"] websockect opened: "+t.host[t.hostIndex]),t.needReconnect=!0,t.isTimeout=!1,t.isInit=!1,t.sendbytes=0,t.recvbytes=0,t.startTime=Date.now(),Object(fe.d)(),clearTimeout(t.timeoutCheck),t.dispatchEvent(u({type:"onopen",event:e,socket:t}))},t.connection.onmessage=function(e){t.recvbytes+=Object(G.e)(e.data);var n=JSON.parse(e.data);n.hasOwnProperty("_id")?t.dispatchEvent(u({type:n._id,msg:n})):n.hasOwnProperty("_type")&&t.dispatchSocketEvent(u({type:n._type,msg:n.message}))},t.connection.onclose=function(n){t.needReconnect?t.isTimeout||t.isInit?(o.default.debug("["+t.clientId+"] websockect connect timeout"),a.b.joinGateway(e.sid,{lts:t.lts,succ:!1,ec:"timeout",addr:t.connection.url}),t.connectNext()):t.dispatchEvent(u({type:"disconnect",event:n})):(o.default.debug("["+t.clientId+"] websockect closeed"),pe(e.onFailure,n),clearTimeout(t.timeoutCheck),t.dispatchEvent(u({type:"close",event:n})),t.connection.onopen=void 0,t.connection.onclose=void 0,t.connection.onerror=void 0,t.connection.onmessage=void 0,t.connection=void 0)},t.connection.onerror=function(e){},setTimeout(function(){t.connection&&t.connection.readyState!=WebSocket.OPEN&&(t.isTimeout=!0,t.connection.close())},5e3)},t.creatConnection(),t.sendMessage=function(e,n){if(t.connection&&t.connection.readyState==WebSocket.OPEN){var i=JSON.stringify(e);t.sendbytes+=Object(G.e)(i),t.connection.send(i)}else n({error:"Gateway not connected"})},t.disconnect=function(){t.needReconnect=!0,t.connection.close()},t.close=function(){t.needReconnect=!1,t.connection.onclose=void 0,t.connection.close()},t.sendSignalCommand=function(e,n){e._id="_request_"+t.requestID,t.requestID+=1,"publish_stats"!==e._type&&"subscribe_stats"!==e._type&&"publish_stats_low"!==e._type&&t.on(e._id,function(i){i.msg&&n&&n(i.msg._result,i.msg.message),delete t.dispatcher.eventListeners[e._id]}),t.sendMessage(e,function(e){e.reason="NOT_CONNECTED",n&&n(e.reason,e)})},t},ge=function(e,t){var n={connect:function(){t.host=e,n.signal=me(t),n.on=n.signal.on,n.dispatchEvent=n.signal.dispatchEvent,n.signal.on("onopen",function(e){n.signal.onEvent=function(e){n.dispatchEvent(u({type:e.event,msg:e}))},n.dispatchEvent(u({type:"connect",msg:e}))}),n.signal.on("onError",function(e){var t=e.msg;onError(t.code,"error")})},getSendBytes:function(){return n.signal.getSendBytes()},getRecvBytes:function(){return n.signal.getRecvBytes()},getDuration:function(){return n.signal.getDuration()},disconnect:function(){n.signal.disconnect()},close:function(){n.signal.close()},getURL:function(){return n.signal.getURL()},reconnect:function(){n.signal.reconnect()},connectNext:function(){n.signal.connectNext()},replaceHost:function(e){n.signal.replaceHost(e)},emitSimpleMessage:function(e,t){n.signal.sendSignalCommand(e,t)}};return n.connect(),n},ve=function(e,t){var n=!1,r=0,s={command:"convergeAllocateEdge",sid:e.sid,appId:e.appId,token:e.token,uid:e.uid,cname:e.cname,ts:Math.floor(Date.now()/1e3),version:i.VERSION,seq:0,requestId:1};Object(i.getParameter)("PROXY_CS").map(function(d){var c=(new Date).getTime();Se("https://"+d+"/api/v1",s,function(s,u){if(s)return o.default.debug("["+e.clientId+"] Request proxy server failed: ",s),r++,a.b.requestProxyAppCenter(e.sid,{lts:c,succ:!1,APAddr:d,workerManagerList:null,ec:JSON.stringify(s),response:JSON.stringify({err:s,res:u})}),void(r>=Object(i.getParameter)("PROXY_CS").length&&t&&t("Get proxy server failed: request all failed"));if(!n)if((u=JSON.parse(u)).json_body){var l=JSON.parse(u.json_body);if(o.default.debug("["+e.clientId+"] App return:",l.servers),200!==l.code){s="Get proxy server failed: response code ["+l.code+"], reason [ "+l.reason+"]";o.default.debug("["+e.clientId+"] "+s),a.b.requestProxyAppCenter(e.sid,{lts:c,succ:!1,APAddr:d,workerManagerList:null,ec:s,response:JSON.stringify({err:s,res:u})})}else{n=!0;var p=_e(l.servers);a.b.requestProxyAppCenter(e.sid,{lts:c,succ:!0,APAddr:d,workerManagerList:JSON.stringify(p),ec:null,response:JSON.stringify({res:u})}),t&&t(null,p)}}else o.default.debug("["+e.clientId+"] Get proxy server failed: no json_body"),a.b.requestProxyAppCenter(e.sid,{lts:c,succ:!1,APAddr:d,workerManagerList:null,ec:"Get proxy server failed: no json_body",response:JSON.stringify({res:u})})})})},Se=function(e,t,n){var i={service_name:"webrtc_proxy",json_body:JSON.stringify(t)};Object(fe.c)(e,i,function(e){n&&n(null,e)},function(e){n&&n(e)},{"X-Packet-Service-Type":0,"X-Packet-URI":61})},Ie=function(e,t,n){var i=!1,r=0,s={command:"request",gatewayType:"http",appId:e.appId,cname:e.cname,uid:e.uid+"",sdkVersion:"2.3.1",sid:e.sid,seq:1,ts:+new Date,requestId:3,clientRequest:{appId:e.appId,cname:e.cname,uid:e.uid+"",sid:e.sid}};t.map(function(d){var c=(new Date).getTime();!function(e,t,n){Object(fe.c)(e,t,function(e){n&&n(null,e)},function(e){n&&n(e)})}("https://"+d+":4000/v2/machine",s,function(s,u){if(s)return o.default.debug("["+e.clientId+"] Request worker manager failed: ",s),r++,a.b.requestProxyWorkerManager(e.sid,{lts:c,succ:!1,workerManagerAddr:d,ec:JSON.stringify(s),response:JSON.stringify({res:u})}),void(r>=t.length&&n&&n("requeet worker manager server failed: request failed"));if(!i){if(!(u=JSON.parse(u)).serverResponse)return n&&n("requeet worker manager server failed: serverResponse is undefined");i=!0,a.b.requestProxyWorkerManager(e.sid,{lts:c,succ:!0,workerManagerAddr:d,ec:JSON.stringify(s),response:JSON.stringify({res:u})}),n&&n(null,{address:d,serverResponse:u.serverResponse})}})})},_e=function(e){if(!e||[]instanceof Array==!1)return[];var t=[];return e.forEach(function(e){var n;e.address&&e.tcp?(e.address.match(/^[\.\:\d]+$/)?n="".concat(e.address.replace(/[^\d]/g,"-"),".edge.agora.io"):(o.default.info("["+joinInfo.clientId+"] "+"Cannot recognized as IP address ".concat(e.address,". Used As Host instead")),n="".concat(e.address,":").concat(e.tcp)),t.push(n)):o.default.error("["+joinInfo.clientId+"] Invalid address format ",e)}),t},he=function(e,t){var n=I()({},e),o=Object(i.getParameter)("WEBCS_DOMAIN").concat(Object(i.getParameter)("WEBCS_DOMAIN_BACKUP_LIST")),a=[],r=!1;(o=o.map(function(e){return n.proxyServer?"https://".concat(n.proxyServer,"/ap/?url=").concat(e+"/api/v1"):"https://".concat(e,"/api/v1")})).map(function(e){!function(e,t,n){var i={flag:64,cipher_method:0,timeout:1e3,features:t};Object(fe.c)(e,i,function(e){try{var t=JSON.parse(e);n&&n(null,t)}catch(e){n&&n(e)}n&&n(null,e)},function(e){n&&n(e)},{"X-Packet-Service-Type":0,"X-Packet-URI":54})}(e,n,function(e,n){r||(e?(a.push(e),a.length>=o.length&&t&&t("ALL_REQUEST_FAILED")):(r=!0,t&&t(null,n)))})})},ye=function(e,t,n,i){var r=(new Date).getTime(),s="";t.multiIP&&t.multiIP.gateway_ip&&(s={vocs_ip:[t.multiIP.uni_lbs_ip],vos_ip:[t.multiIP.gateway_ip]});var d={flag:4,ts:+new Date,key:t.appId,cname:t.cname,detail:{},uid:t.uid||0};s&&(d.detail[5]=JSON.stringify(s)),Object(fe.c)(e,d,function(s){try{var d=JSON.parse(s).res,c=d.code}catch(e){var u="requestChooseServer failed with unexpected body "+s;return o.default.error("["+joinInfo.clientId+"]",u),i(u)}if(c){var l=y[d.code]||c;return a.b.joinChooseServer(t.sid,{lts:r,succ:!1,csAddr:e,serverList:null,ec:l}),i("Get server node failed ["+l+"]",e,l)}var p=[],f=[".agora.io",".agoraio.cn"],m=0;if(e.indexOf(f[1])>-1&&(m=1),d.addresses.forEach(function(e){var t;e.ip&&e.port?(e.ip.match(/^[\.\:\d]+$/)?t="webrtc-".concat(e.ip.replace(/[^\d]/g,"-")).concat(f[m++%f.length],":").concat(e.port):(o.default.info("["+joinInfo.clientId+"] "+"Cannot recognized as IP address ".concat(e.ip,". Used As Host instead")),t="".concat(e.ip,":").concat(e.port)),p.push(t)):o.default.error("["+joinInfo.clientId+"] Invalid address format ",e)}),!p.length){o.default.error("["+joinInfo.clientId+"] Empty Address response",d);l="EMPTY_ADDRESS_RESPONSE";return a.b.joinChooseServer(t.sid,{lts:r,succ:!1,csAddr:e,serverList:null,ec:l}),i("Get server node failed ["+l+"]",e,l)}var g={gateway_addr:p,uid:d.uid,cid:d.cid,uni_lbs_ip:d.detail};return n(g,e)},function(e,n){"timeout"===e.type?(a.b.joinChooseServer(t.sid,{lts:r,succ:!1,csAddr:n,serverList:null,ec:"timeout"}),i("Connect choose server timeout",n)):a.b.joinChooseServer(t.sid,{lts:r,succ:!1,csAddr:n,serverList:null,ec:"server_wrong"})},{"X-Packet-Service-Type":0,"X-Packet-URI":44})},be=function(e,t,n){var r=!1,s=null,d=1,c=1,u=null,l=function t(n,c){if(!r){var l=!1,f=!1,m=[],g=p.getBrowserInfo()||{};he({device:g.name,system:g.os,vendor:e.appId,version:i.VERSION,cname:e.cname,sid:e.sid,session_id:Object(a.a)(),detail:"",proxyServer:n},function(t,n){f=!0;try{var i=Object.keys(n.test_tags)[0],o=JSON.parse(n.test_tags[i]);u=o[1]}catch(e){u=null}a.b.reportApiInvoke(e.sid,{name:"_config-distribute-request",options:{err:t,res:n}})(),l&&c&&c(m,u)}),function(e,t,n){for(var r=(new Date).getTime(),s=!1,d=!0,c=function(n,i){if(s)a.b.joinChooseServer(e.sid,{lts:r,succ:!0,csAddr:i,serverList:n.gateway_addr,cid:n.cid+"",uid:n.uid+"",ec:null},!1);else{if(clearTimeout(g),s=!0,o.default.debug("["+e.clientId+"] Get gateway address:",n.gateway_addr),e.proxyServer){for(var d=n.gateway_addr,c=0;c=3600?3600:2*d)})}};e.useProxyServer?function n(){!function(e,t){ve(e,function(n,i){if(n)return t&&t(n);o.default.debug("["+e.clientId+"] getProxyServerList: ",i),Ie(e,i,t)})}(e,function(i,r){if(i)return o.default.debug("["+e.clientId+"]",i),o.default.debug("["+e.clientId+"] Request proxy will be restart in "+c+"s"),s=setTimeout(function(){n()},1e3*c),void(c=c>=3600?3600:2*c);clearTimeout(s);var d=r.address;e.proxyServer=d,e.turnServer={url:r.address,tcpport:r.serverResponse.tcpport||"3433",udpport:r.serverResponse.udpport||"3478",username:r.serverResponse.username||"test",credential:r.serverResponse.password||"111111",forceturn:!0},e.turnServer.tcpport+="",e.turnServer.udpport+="",a.b.setProxyServer(d),o.default.setProxyServer(d),l(d,t)})}():l(null,t)},Ee={ERR_NO_VOCS_AVAILABLE:"tryNext",ERR_NO_VOS_AVAILABLE:"tryNext",ERR_JOIN_CHANNEL_TIMEOUT:"tryNext",WARN_REPEAT_JOIN:"quit",ERR_JOIN_BY_MULTI_IP:"recover",WARN_LOOKUP_CHANNEL_TIMEOUT:"tryNext",WARN_OPEN_CHANNEL_TIMEOUT:"tryNext",ERR_VOM_SERVICE_UNAVAILABLE:"tryNext",ERR_TOO_MANY_USERS:"tryNext",ERR_MASTER_VOCS_UNAVAILABLE:"tryNext",ERR_INTERNAL_ERROR:"tryNext",notification_test_recover:"recover",notification_test_tryNext:"tryNext",notification_test_retry:"retry"},Re={googResidualEchoLikelihood:"A_rel",googResidualEchoLikelihoodRecentMax:"A_rem",googTypingNoiseState:"A_tns",totalSamplesDuration:"A_sd",googAdaptationChanges:"A_ac",googBandwidthLimitedResolution:"A_blr",googCpuLimitedResolution:"A_clr",googEncodeUsagePercent:"A_eup",googHasEnteredLowResolution:"A_helr",googActualEncBitrate:"A_aeb",googAvailableReceiveBandwidth:"A_arb",googAvailableSendBandwidth:"A_asb",googRetransmitBitrate:"A_rb",googTargetEncBitrate:"A_teb",googCaptureStartNtpTimeMs:"A_csnt",googPreemptiveExpandRate:"A_per",googPreferredJitterBufferMs:"A_pjbm",googSecondaryDecodedRate:"A_sder",googSecondaryDiscardedRate:"A_sdir",googSpeechExpandRate:"A_ser",googFrameHeightReceived:"A_fhr",googInterframeDelayMax:"A_ifdm",googMinPlayoutDelayMs:"A_mpdm",aecDivergentFilterFraction:"A_dff",codecImplementationName:"A_cin",googEchoCancellationReturnLoss:"A_ecl",googEchoCancellationReturnLossEnhancement:"A_ece"},Ae={};for(var Te in Re){var Oe=Re[Te];Re[Oe]&&console.error("Key Conflict: ".concat(Te)),Ae[Oe]=Te}var Ce=function(e){return Re[e]||e},Ne=function e(t){var n=!1,s=function(e){return{_type:"control",message:e}},u=function(e){var t={};return Object.keys(e).forEach(function(n){t[Ce(n)]=e[n]}),{_type:"subscribe_related_stats",options:t}},f=function(e,t,n){return{_type:"publish",options:e,sdp:t,p2pid:n}},m=e.DISCONNECTED,g=e.CONNECTING,S=e.CONNECTED,_=e.DISCONNECTING,h=m,y=r();Object.defineProperty(y,"state",{set:function(t){var n=h;h=t,n!==t&&y.dispatchEvent({type:"connection-state-change",prevState:e.connetionStateMap[n],curState:e.connetionStateMap[t]})},get:function(){return h}}),y.socket=void 0,y.state=m,y.mode=t.mode,y.role=t.role,y.codec=t.codec,y.config={},y.timers={},y.timer_counter={},y.localStreams={},y.remoteStreams={},y.attemps=1,y.p2p_attemps=1,y.audioLevel={},y.activeSpeaker=void 0,y.reconnectMode="retry",y.rejoinAttempt=0,y.hasChangeBGPAddress=!1,y.traffic_stats={},y.clientId=t.clientId,y.p2ps=new Map,y.firstFrameTimer=new Map,y.firstAudioDecodeTimer=new Map,y.liveStreams=new Map,y.injectLiveStreams=new Map,y.remoteStreamsInChannel=new Set,y.inChannelInfo={joinAt:null,duration:0};var E=pe;y.p2pCounter=Object(G.g)(1e5),y.generateP2PId=function(){return++y.p2pCounter},y.audioVolumeIndication={enabled:!1,sortedAudioVolumes:[],smooth:3,interval:2e3},y.remoteVideoStreamTypes={REMOTE_VIDEO_STREAM_HIGH:0,REMOTE_VIDEO_STREAM_LOW:1,REMOTE_VIDEO_STREAM_MEDIUM:2},y.streamFallbackTypes={STREAM_FALLBACK_OPTION_DISABLED:0,STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW:1,STREAM_FALLBACK_OPTION_AUDIO_ONLY:2},y.configPublisher=function(e){y.config=e},y.getGatewayInfo=function(e,t){N({_type:"gateway_info"},e,t)},y.setClientRole=function(e,t){o.default.debug("[".concat(y.clientId,"] setClientRole to ").concat(e));var n=a.b.reportApiInvoke(y.joinInfo.sid,{name:"_setClientRole",callback:t});N(function(e){return{_type:"set_client_role",message:e}}(e),function(){y.role=e,y.dispatchEvent({type:"client-role-changed",role:e}),n&&n(null,{role:e})},function(t){var i=t&&t.code?t.code:0,a=R[i];if("ERR_ALREADY_IN_USE"===a)return n&&n(null);a||(a="UNKNOW_ERROR_".concat(i)),o.default.error("set Client role error to "+e+": "+a),n&&n(a)})},y.join=function(e,n,r,s){e.useProxyServer&&(y.hasChangeBGPAddress=!0);var d=(new Date).getTime(),c=e.uid;if(y.inChannelInfo.joinAt&&(y.inChannelInfo.duration+=d-y.inChannelInfo.joinAt),y.inChannelInfo.joinAt=d,y.state!==g)return o.default.error("[".concat(y.clientId,"] GatewayClient.join Failed: state "),y.state),s&&s(A.INVALID_OPERATION),void a.b.joinGateway(e.sid,{lts:d,succ:!1,ec:A.INVALID_OPERATION,addr:null});if(null!=c&&parseInt(c)!==c)return o.default.error("[".concat(y.clientId,"] Input uid is invalid")),y.state=m,s&&s(A.INVALID_PARAMETER),void a.b.joinGateway(e.sid,{lts:d,succ:!1,ec:A.INVALID_PARAMETER,addr:null});var u=we.register(y,{uid:c,cname:e&&e.cname});if(u)return y.state=m,s&&s(u),void a.b.joinGateway(e.sid,{lts:d,succ:!1,ec:u,addr:null});y.joinInfo=I()({},e),y.uid=c,y.key=n,C(e,function(n){var c,u,l;y.state=S,o.default.debug("[".concat(y.clientId,"] Connected to gateway server")),y.pingTimer=setInterval(function(){var e=Date.now();N({_type:"ping"},function(){var t=Date.now()-e;N({_type:"signal_stats",message:{pingpongElapse:t}},function(){},function(e){})},function(e){})},3e3),N((c={role:y.role},u=c.role,l={appId:t.appId,key:y.key,channel:y.joinInfo.cname,uid:y.uid,version:i.VERSION,browser:navigator.userAgent,mode:y.mode,codec:y.codec,role:u,config:y.config,processId:Object(a.a)()},y.joinInfo.hasOwnProperty("stringUid")&&(l.stringUid=y.joinInfo.stringUid),{_type:"join1",message:l}),function(t){if(a.b.joinGateway(e.sid,{lts:d,succ:!0,ec:null,vid:t.vid,addr:y.socket.getURL()}),y.rejoinAttempt=0,r&&r(t.uid),y.dispatchEvent({type:"join"}),y.leaveOnConnected){o.default.info("[".concat(y.clientId,"] Calling Leave() once joined"));var n=y.leaveOnConnected;y.leaveOnConnected=null,y.leave(n.onSuccess,n.onFailure)}},function(t){if(o.default.error("[".concat(y.clientId,"] User join failed [").concat(t,"]")),Ee[t]&&y.rejoinAttempt<4){if(y._doWithAction(Ee[t],r,s),y.leaveOnConnected){o.default.error("[".concat(y.clientId,"] Calling Leave() once joined: Join Failed"));var n=y.leaveOnConnected;y.leaveOnConnected=null,n.onFailure(A.JOIN_CHANNEL_FAILED)}}else s&&s(t);a.b.joinGateway(e.sid,{lts:d,succ:!1,ec:t,addr:y.socket.getURL()})})},function(t){o.default.error("[".concat(y.clientId,"] User join failed [").concat(t,"]")),s&&s(t),a.b.joinGateway(e.sid,{lts:d,succ:!1,ec:t,addr:y.socket.getURL()})}),clearInterval(y.timers.trafficStats),y.timers.trafficStats=setInterval(function(){N({_type:"traffic_stats"},function(e){y.traffic_stats=e;var t=y.joinInfo.stringUid,n=y.localStreams[c]||y.localStreams[t];n&&(n.traffic_stats={access_delay:e.access_delay}),e.peer_delay&&e.peer_delay.forEach(function(t){var n=y.remoteStreams[t.peer_uid];n&&(n.traffic_stats={access_delay:e.access_delay,e2e_delay:t.e2e_delay,audio_delay:t.audio_delay,video_delay:t.video_delay})})})},3e3),y.resetAudioVolumeIndication()},y.leave=function(e,t){switch(y.state){case m:return o.default.debug("[".concat(y.clientId,"] Client Already in DISCONNECTED status")),void E(e);case _:return o.default.error("[".concat(y.clientId,"] Client Already in DISCONNECTING status")),void E(t,A.INVALID_OPERATION);case g:return y.leaveOnConnected?(o.default.error("[".concat(y.clientId,"] Client.leave() already called")),void E(t,A.INVALID_OPERATION)):(o.default.debug("[".concat(y.clientId,"] Client connecting. Waiting for Client Fully Connected(And leave)")),void(y.leaveOnConnected={onSuccess:e,onFailure:t}))}var n=we.unregister(y);if(n)o.default.error("[".concat(y.clientId,"] "),n);else{for(var i in y.state=_,clearInterval(y.pingTimer),y.timers)y.timers.hasOwnProperty(i)&&clearInterval(y.timers[i]);for(var i in y.inChannelInfo.joinAt&&(y.inChannelInfo.duration+=Date.now()-y.inChannelInfo.joinAt,y.inChannelInfo.joinAt=null),N({_type:"leave"},function(t){y.socket.close(),y.socket=void 0,o.default.info("[".concat(y.clientId,"] Leave channel success")),y.state=m,e&&e(t)},function(e){o.default.error("[".concat(y.clientId,"] Leave Channel Failed"),e),y.state=S,t&&t(e)}),y.localStreams)if(y.localStreams.hasOwnProperty(i)){var a=y.localStreams[i];delete y.localStreams[i],void 0!==a.pc&&(a.pc.close(),a.pc=void 0)}k()}},y.publish=function(e,t,n,i){var r=(new Date).getTime(),d=!1;if(e.publishLTS=r,"object"!==v()(e)||null===e)return o.default.error("[".concat(y.clientId,"] Invalid local stream")),i&&i(A.INVALID_LOCAL_STREAM),void a.b.publish(y.joinInfo.sid,{lts:r,succ:!1,audioName:e.hasAudio()&&e.audioName,videoName:e.hasVideo()&&e.videoName,screenName:e.hasScreen()&&e.screenName,ec:A.INVALID_LOCAL_STREAM});if(null===e.stream&&void 0===e.url)return o.default.error("[".concat(y.clientId,"] Invalid local media stream")),i&&i(A.INVALID_LOCAL_STREAM),void a.b.publish(y.joinInfo.sid,{lts:r,succ:!1,audioName:e.hasAudio()&&e.audioName,videoName:e.hasVideo()&&e.videoName,screenName:e.hasScreen()&&e.screenName,ec:A.INVALID_LOCAL_STREAM});if(y.state!==S)return o.default.error("[".concat(y.clientId,"] User is not in the session")),i&&i(A.INVALID_OPERATION),void a.b.publish(y.joinInfo.sid,{lts:r,succ:!1,audioName:e.hasAudio()&&e.audioName,videoName:e.hasVideo()&&e.videoName,screenName:e.hasScreen()&&e.screenName,ec:A.INVALID_OPERATION});var u=e.getAttributes()||{};if(e.local&&void 0===y.localStreams[e.getId()]&&(e.hasAudio()||e.hasVideo()||e.hasScreen())){var l=y.generateP2PId();if(y.p2ps.set(l,e),e.p2pId=l,void 0!==e.url)w(f({state:"url",audio:e.hasAudio(),video:e.hasVideo(),attributes:e.getAttributes(),mode:y.mode},e.url),function(t,n){"success"===t?(e.getUserId()!==n&&e.setUserId(n),y.localStreams[n]=e,e.onClose=function(){y.unpublish(e)}):o.default.error("[".concat(y.clientId,"] Publish local stream failed"),t)});else{y.localStreams[e.getId()]=e,e.connectionSpec={callback:function(u){o.default.debug("[".concat(y.clientId,"] SDP exchange in publish : send offer -- "),JSON.parse(u)),w(f({state:"offer",id:e.getId(),audio:e.hasAudio(),video:e.hasVideo()||e.hasScreen(),attributes:e.getAttributes(),streamType:t.streamType,dtx:e.DTX,hq:e.highQuality,lq:e.lowQuality,stereo:e.stereo,speech:e.speech,mode:y.mode,codec:y.codec,p2pid:l,turnip:y.joinInfo.turnServer.url,turnport:Number(y.joinInfo.turnServer.udpport),turnusername:y.joinInfo.turnServer.username,turnpassword:y.joinInfo.turnServer.credential},u),function(p,m){if("error"===p)return o.default.error("[".concat(y.clientId,"] Publish local stream failed")),i&&i(A.PUBLISH_STREAM_FAILED),void a.b.publish(y.joinInfo.sid,{lts:r,succ:!1,audioName:e.hasAudio()&&e.audioName,videoName:e.hasVideo()&&e.videoName,screenName:e.hasScreen()&&e.screenName,localSDP:u,ec:A.PUBLISH_STREAM_FAILED});e.pc.onsignalingmessage=function(n){e.pc.onsignalingmessage=function(){},w(f({state:"ok",id:e.getId(),audio:e.hasAudio(),video:e.hasVideo(),screen:e.hasScreen(),streamType:t.streamType,attributes:e.getAttributes(),mode:y.mode},n)),e.getUserId()!==m.id&&e.setUserId(m.id),o.default.info("[".concat(y.clientId,"] Local stream published with uid"),m.id),e.onClose=function(){y.unpublish(e)},e._onAudioUnmute=function(){N(s({action:"audio-out-on",streamId:e.getId()}),function(){},function(){})},e._onVideoUnmute=function(){N(s({action:"video-out-on",streamId:e.getId()}),function(){},function(){})},e._onAudioMute=function(){N(s({action:"audio-out-off",streamId:e.getId()}),function(){},function(){})},e._onVideoMute=function(){N(s({action:"video-out-off",streamId:e.getId()}),function(){},function(){})},e.getId()===e.getUserId()&&(e.isAudioOn()||e.hasAudio()&&(o.default.debug("[".concat(y.clientId,"] local stream audio mute")),e._onAudioMute()),e.isVideoOn()||(e.hasVideo()||e.hasScreen())&&(o.default.debug("[".concat(y.clientId,"] local stream video mute")),e._onVideoMute()))},e.pc.oniceconnectionstatechange=function(t){if("failed"===t){if(null!=y.timers[e.getId()]&&(clearInterval(y.timers[e.getId()]),clearInterval(y.timers[e.getId()]+"_RelatedStats")),o.default.error("[".concat(y.clientId,"] Publisher connection is lost -- streamId: ").concat(e.getId(),", p2pId: ").concat(l)),y.p2ps.delete(l),o.default.debug("[".concat(y.clientId,"] publish p2p failed: "),y.p2ps),!d)return d=!0,a.b.publish(y.joinInfo.sid,{lts:r,succ:!1,audioName:e.hasAudio()&&e.audioName,videoName:e.hasVideo()&&e.videoName,screenName:e.hasScreen()&&e.screenName,ec:A.PEERCONNECTION_FAILED}),y.dispatchEvent(c({type:"pubP2PLost",stream:e})),i&&i(A.PEERCONNECTION_FAILED);y.dispatchEvent(c({type:"pubP2PLost",stream:e}))}else if("connected"===t&&(o.default.debug("[".concat(y.clientId,"] publish p2p connected: "),y.p2ps),!d))return d=!0,a.b.publish(y.joinInfo.sid,{lts:r,succ:!0,audioName:e.hasAudio()&&e.audioName,videoName:e.hasVideo()&&e.videoName,screenName:e.hasScreen()&&e.screenName,ec:null}),n&&n()},o.default.debug("[".concat(y.clientId,"] SDP exchange in publish : receive answer -- "),JSON.parse(p)),e.pc.processSignalingMessage(p)})},audio:e.hasAudio(),video:e.hasVideo(),screen:e.hasScreen(),isSubscriber:!1,stunServerUrl:y.stunServerUrl,turnServer:y.joinInfo.turnServer,maxAudioBW:u.maxAudioBW,minVideoBW:u.minVideoBW,maxVideoBW:u.maxVideoBW,mode:y.mode,codec:y.codec,isVideoMute:e.userMuteVideo||e.peerMuteVideo,isAudioMute:e.userMuteAudio||e.peerMuteAudio,maxFrameRate:e.attributes.maxFrameRate,clientId:y.clientId},e.pc=W(e.connectionSpec),e.pc.addStream(e.stream),o.default.debug("[".concat(y.clientId,"] PeerConnection add stream :"),e.stream),e.pc.onnegotiationneeded=function(t){w(f({state:"negotiation",p2pid:l},t),function(t,n){e.pc.processSignalingMessage(t)})},y.timers[e.getId()]=setInterval(function(){var t=0;e&&e.pc&&e.pc.getStats&&e.pc.getStatsRate(function(n){n.forEach(function(n){if(n&&n.id&&!/_recv$/.test(n.id)&&!/^time$/.test(n.id)&&e.getUserId())if(-1===n.id.indexOf("outbound_rtp")&&-1===n.id.indexOf("OutboundRTP")||"video"!==n.mediaType||(n.googFrameWidthSent=e.videoWidth+"",n.googFrameHeightSent=e.videoHeight+""),e.getId()==e.getUserId()){var i=200*t;t++,setTimeout(function(){var e,t;N((e=n,t={},Object.keys(e).forEach(function(n){t[Ce(n)]=e[n]}),{_type:"publish_stats",options:{stats:t},sdp:null}),null,null)},i)}else{i=200*t;t++,setTimeout(function(){var e,t;N((e=n,t={},Object.keys(e).forEach(function(n){t[Ce(n)]=e[n]}),{_type:"publish_stats_low",options:{stats:t},sdp:null}),null,null)},i)}})})},3e3);var p=function(){e&&e.pc&&e.pc.getVideoRelatedStats&&e.pc.getVideoRelatedStats(function(t){var n,i;e.getId()===e.getUserId()?N((n=t,i={},Object.keys(n).forEach(function(e){i[Ce(e)]=n[e]}),{_type:"publish_related_stats",options:i}),null,null):N(function(e){var t={};return Object.keys(e).forEach(function(n){t[Ce(n)]=e[n]}),{_type:"publish_related_stats_low",options:t}}(t),null,null)})};p(),y.timers[e.getId()+"_RelatedStats"]=setInterval(p,1e3)}}},y.unpublish=function(e,t,n,i){return"object"!==v()(e)||null===e?(o.default.error("[".concat(y.clientId,"] Invalid local stream")),void E(i,A.INVALID_LOCAL_STREAM)):y.state!==S?(o.default.error("[".concat(y.clientId,"] User not in the session")),void E(i,A.INVALID_OPERATION)):(null!=y.timers[e.getId()]&&(clearInterval(y.timers[e.getId()]),clearInterval(y.timers[e.getId()+"_RelatedStats"])),void(void 0!==y.socket?e.local&&void 0!==y.localStreams[e.getId()]?(delete y.localStreams[e.getId()],N((a=e.getUserId(),r=t.streamType,{_type:"unpublish",message:a,streamType:r})),(e.hasAudio()||e.hasVideo()||e.hasScreen())&&void 0===e.url&&void 0!==e.pc&&(e.pc.close(),e.pc=void 0),e.onClose=void 0,e._onAudioMute=void 0,e._onAudioUnute=void 0,e._onVideoMute=void 0,e._onVideoUnmute=void 0,y.p2ps.delete(e.p2pId),n&&n()):(o.default.error("[".concat(y.clientId,"] Invalid local stream")),E(i,A.INVALID_LOCAL_STREAM)):(o.default.error("[".concat(y.clientId,"] User not in the session")),E(i,A.INVALID_OPERATION))));var a,r},y.subscribe=function(e,t,n){var i=(new Date).getTime();e.subscribeLTS=i;var r=!1;if(o.default.info("[".concat(y.clientId,"] Gatewayclient ").concat(y.uid," Subscribe ").concat(e.getId(),": ").concat(JSON.stringify(e.subscribeOptions))),"object"!==v()(e)||null===e)return o.default.error("[".concat(y.clientId,"] Invalid remote stream")),n&&n(A.INVALID_REMOTE_STREAM),void a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!1,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:A.INVALID_REMOTE_STREAM});if(y.state!==S&&(o.default.error("[".concat(y.clientId,"] User is not in the session")),!r))return r=!0,a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!1,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:A.INVALID_OPERATION}),n&&n(A.INVALID_OPERATION);if(!e.local&&y.remoteStreams.hasOwnProperty(e.getId()))if(e.hasAudio()||e.hasVideo()||e.hasScreen()){var l=y.generateP2PId();y.p2ps.set(l,e),e.p2pId=l,e.pc=W({callback:function(t){o.default.debug("[".concat(y.clientId,"] SDP exchange in subscribe : send offer -- "),JSON.parse(t));var r,s=I()({streamId:e.getId(),video:!0,audio:!0,mode:y.mode,codec:y.codec,p2pid:l,turnip:y.joinInfo.turnServer.url,turnport:Number(y.joinInfo.turnServer.udpport),turnusername:y.joinInfo.turnServer.username,turnpassword:y.joinInfo.turnServer.credential},e.subscribeOptions);w({_type:"subscribe",options:s,sdp:t,p2pid:r},function(t){if("error"===t)return o.default.error("[".concat(y.clientId,"] Subscribe remote stream failed, closing stream "),e.getId()),e.close(),n&&n(A.SUBSCRIBE_STREAM_FAILED),void a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!1,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:A.SUBSCRIBE_STREAM_FAILED});o.default.debug("[".concat(y.clientId,"] SDP exchange in subscribe : receive answer -- "),JSON.parse(t)),e.pc.processSignalingMessage(t)})},nop2p:!0,audio:!0,video:!0,screen:e.hasScreen(),isSubscriber:!0,stunServerUrl:y.stunServerUrl,turnServer:y.joinInfo.turnServer,isVideoMute:e.userMuteVideo,isAudioMute:e.userMuteAudio,uid:e.getId(),clientId:y.clientId}),e.pc.onaddstream=function(t,n){if(e._onAudioUnmute=function(){N(s({action:"audio-in-on",streamId:e.getId()}),function(){},function(){})},e._onAudioMute=function(){N(s({action:"audio-in-off",streamId:e.getId()}),function(){},function(){})},e._onVideoUnmute=function(){N(s({action:"video-in-on",streamId:e.getId()}),function(){},function(){})},e._onVideoMute=function(){N(s({action:"video-in-off",streamId:e.getId()}),function(){},function(){})},"ontrack"===n&&"video"===t.track.kind||"onaddstream"===n){o.default.info("[".concat(y.clientId,"] Remote stream subscribed with uid "),e.getId());var i=y.remoteStreams[e.getId()];if(y.remoteStreams[e.getId()].stream="onaddstream"===n?t.stream:t.streams[0],y.remoteStreams[e.getId()].hasVideo()){if(Object(p.isFireFox)()||Object(p.isSafari)()){var a=y.remoteStreams[e.getId()].stream;Object(G.h)(a,function(t,n){e.videoWidth=t,e.videoHeight=n},function(e){return o.default.warning("[".concat(y.clientId,"] vsResHack failed: ")+e)})}}else{var r=y.remoteStreams[e.getId()];r.peerMuteVideo=!0,y._adjustPCMuteStatus(r)}i&&i.isPlaying()&&i.elementID&&(o.default.debug("[".concat(y.clientId,"] Reload Player ").concat(i.elementID," StreamId ").concat(i.getId())),e.audioOutput=i.audioOutput,i.stop(),e.play(i.elementID,i.playOptions));var c=d({type:"stream-subscribed",stream:y.remoteStreams[e.getId()]});y.dispatchEvent(c)}},y.timers[e.getId()]=setInterval(function(){var t=0;e&&e.pc&&e.pc.getStats&&e.pc.getStatsRate(function(n){n.forEach(function(n){if(n&&n.id){if(/_send$/.test(n.id)||/^time$/.test(n.id)||/^bweforvideo$/.test(n.id))return;-1===n.id.indexOf("inbound_rtp")&&-1===n.id.indexOf("inbound-rtp")||"video"!==n.mediaType||(n.googFrameWidthReceived=e.videoWidth+"",n.googFrameHeightReceived=e.videoHeight+"");var i=200*t;t++;var o=e.getId();setTimeout(function(){var e,t,i;w((e=o,t=n,i={},Object.keys(t).forEach(function(e){i[Ce(e)]=t[e]}),{_type:"subscribe_stats",options:{id:e,stats:i},sdp:null}),null,null)},i)}else;})})},3e3),y.timers[e.getId()+"_RelatedStats"]=setInterval(function(){e&&e.pc&&(e.pc.getVideoRelatedStats&&e.pc.getVideoRelatedStats(function(e){N(u(e),null,null)}),e.pc.getAudioRelatedStats&&e.pc.getAudioRelatedStats(function(e){N(u(e),null,null)}))},1e3),y.audioLevel[e.getId()]=0,y.timers[e.getId()+"audio"]=setInterval(function(){y.hasListeners("active-speaker")&&e&&e.pc&&"established"===e.pc.state&&e.pc.getStats&&e.pc.getStats(function(t){t.forEach(function(t){if("audio"===t.mediaType){if(t.audioOutputLevel>5e3)for(var n in y.audioLevel[e.getId()]<20&&(y.audioLevel[e.getId()]+=1),y.audioLevel)n!==""+e.getId()&&y.audioLevel[n]>0&&(y.audioLevel[n]-=1);var i=Object.keys(y.audioLevel).sort(function(e,t){return y.audioLevel[t]-y.audioLevel[e]});if(y.activeSpeaker!==i[0]){var a=c({type:"active-speaker",uid:i[0]});y.dispatchEvent(a),y.activeSpeaker=i[0],o.default.debug("[".concat(y.clientId,"] Update active speaker: ").concat(y.activeSpeaker))}}})})},50),e.pc.oniceconnectionstatechange=function(s){if("failed"===s)null!=y.timers[e.getId()]&&(clearInterval(y.timers[e.getId()]),clearInterval(y.timers[e.getId()]+"audio")),o.default.error("[".concat(y.clientId,"] Subscriber connection is lost -- streamId: ").concat(e.getId(),", p2pId: ").concat(l)),o.default.debug("[".concat(y.clientId,"] subscribe p2p failed: "),y.p2ps),r||(r=!0,n&&n(A.PEERCONNECTION_FAILED),a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!1,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:A.PEERCONNECTION_FAILED})),y.remoteStreams[e.getId()]&&y.p2ps.has(l)&&(y.p2ps.delete(l),y.dispatchEvent(c({type:"subP2PLost",stream:e})));else if("connected"===s&&(o.default.debug("[".concat(y.clientId,"] subscribe p2p connected: "),y.p2ps),!r))return r=!0,a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!0,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:null}),y._adjustPCMuteStatus(e),y.firstAudioDecodeTimer.set(e.getId(),setInterval(function(){e.pc?e.pc.getStats(function(t){t.forEach(function(t){-1!==t.id.indexOf("recv")&&"audio"===t.mediaType&&parseInt(t.googDecodingNormal)>0&&(clearInterval(y.firstAudioDecodeTimer.get(e.getId())),y.firstAudioDecodeTimer.delete(e.getId()),a.b.reportApiInvoke(y.joinInfo.sid,{name:"firstAudioDecode"})(null,{elapse:Date.now()-e.subscribeLTS}))})}):(clearInterval(y.firstAudioDecodeTimer.get(e.getId())),y.firstAudioDecodeTimer.delete(e.getId()))},100)),y.firstFrameTimer.set(e.getId(),setInterval(function(){e.pc?e.pc.getStats(function(t){t.forEach(function(t){-1===t.id.indexOf("recv")&&-1===t.id.indexOf("inbound_rtp")&&-1===t.id.indexOf("inbound-rtp")&&-1===t.id.indexOf("InboundRTP")||"video"===t.mediaType&&(t.framesDecoded>0||t.googFramesDecoded>0)&&(clearInterval(y.firstFrameTimer.get(e.getId())),y.firstFrameTimer.delete(e.getId()),e.firstFrameTime=(new Date).getTime()-e.subscribeLTS,a.b.firstRemoteFrame(y.joinInfo.sid,{lts:(new Date).getTime(),peerid:e.getId(),succ:!0,width:+t.googFrameWidthReceived,height:+t.googFrameHeightReceived}))})}):(clearInterval(y.firstFrameTimer.get(e.getId())),y.firstFrameTimer.delete(e.getId()))},100)),e.sid=y.joinInfo.sid,t&&t()}}else o.default.error("[".concat(y.clientId,"] Invalid remote stream")),r||(r=!0,n&&n(A.INVALID_REMOTE_STREAM),a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!1,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:A.INVALID_REMOTE_STREAM}));else o.default.error("[".concat(y.clientId,"] No such remote stream")),r||(r=!0,n&&n(A.NO_SUCH_REMOTE_STREAM),a.b.subscribe(y.joinInfo.sid,{lts:i,succ:!1,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:A.NO_SUCH_REMOTE_STREAM}))},y.subscribeChange=function(e,t,n){var i,r,s=Date.now();o.default.info("[".concat(y.clientId,"] Gatewayclient ").concat(y.uid," SubscribeChange ").concat(e.getId(),": ").concat(JSON.stringify(e.subscribeOptions))),y._adjustPCMuteStatus(e),N((i=e.getId(),r=e.subscribeOptions,{_type:"subscribe_change",options:I()({streamId:i},r)}),function(i){if("error"===i)return o.default.error("[".concat(y.clientId,"] Subscribe Change Failed ").concat(e.getId())),void E(n,"SUBSCRIBE_CHANGE_FAILED");var r=d({type:"stream-subscribe-changed",stream:y.remoteStreams[e.getId()]});a.b.subscribe(y.joinInfo.sid,{lts:s,succ:!0,video:e.subscribeOptions&&e.subscribeOptions.video,audio:e.subscribeOptions&&e.subscribeOptions.audio,peerid:e.getId(),ec:null}),y.dispatchEvent(r),t&&t()},n)},y._adjustPCMuteStatus=function(e){!e.local&&e.pc&&e.pc.peerConnection.getReceivers&&e.pc.peerConnection.getReceivers().forEach(function(t){if(t&&t.track&&"audio"===t.track.kind){var n=!e.userMuteAudio&&!e.peerMuteAudio;e.subscribeOptions&&!e.subscribeOptions.audio&&(n=!1),t.track.enabled=!!n}else if(t&&t.track&&"video"===t.track.kind){var i=!e.userMuteVideo&&!e.peerMuteVideo;e.subscribeOptions&&!e.subscribeOptions.video&&(i=!1),t.track.enabled=!!i}})},y.unsubscribe=function(e,t,n){if("object"!==v()(e)||null===e)return o.default.error("[".concat(y.clientId,"] Invalid remote stream")),void E(n,A.INVALID_REMOTE_STREAM);if(y.state!==S)return o.default.error("[".concat(y.clientId,"] User is not in the session")),void E(n,A.INVALID_OPERATION);if(null!=y.timers[e.getId()]&&(clearInterval(y.timers[e.getId()]),clearInterval(y.timers[e.getId()]+"audio")),null!=y.audioLevel[e.getId()]&&delete y.audioLevel[e.getId()],null!=y.timer_counter[e.getId()]&&delete y.timer_counter[e.getId()],y.remoteStreams.hasOwnProperty(e.getId())){if(!y.socket)return o.default.error("[".concat(y.clientId,"] User is not in the session")),void E(n,A.INVALID_OPERATION);if(e.local)return o.default.error("[".concat(y.clientId,"] Invalid remote stream")),void E(n,A.INVALID_REMOTE_STREAM);e.close(),N({_type:"unsubscribe",message:e.getId()},function(i){if("error"===i)return o.default.error("[".concat(y.clientId,"] Unsubscribe remote stream failed ").concat(e.getId())),void E(n,A.UNSUBSCRIBE_STREAM_FAILED);void 0!==e.pc&&(e.pc.close(),e.pc=void 0),e.onClose=void 0,e._onAudioMute=void 0,e._onAudioUnute=void 0,e._onVideoMute=void 0,e._onVideoUnmute=void 0,delete e.subscribeOptions,y.p2ps.delete(e.p2pId),o.default.info("[".concat(y.clientId,"] Unsubscribe stream success")),t&&t()},n)}else E(n,A.NO_SUCH_REMOTE_STREAM)},y.setRemoteVideoStreamType=function(e,t){if(o.default.debug("[".concat(y.clientId,"] Switching remote video stream ").concat(e.getId()," to ").concat(t)),"object"===v()(e)&&null!==e)if(y.state===S){if(!e.local){switch(t){case y.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_HIGH:case y.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_LOW:case y.remoteVideoStreamTypes.REMOTE_VIDEO_STREAM_MEDIUM:break;default:return}N(function(e,t){return{_type:"switchVideoStream",message:{id:e,type:t}}}(e.getId(),t),null,null)}}else o.default.error("[".concat(y.clientId,"] User is not in the session"));else o.default.error("[".concat(y.clientId,"] Invalid remote stream"))},y.renewToken=function(e,t,n){e?y.key?y.state!==S?(o.default.debug("[".concat(y.clientId,"] Client is not connected. Trying to rejoin")),y.key=e,y.rejoin(),t&&t()):(o.default.debug("[".concat(y.clientId,"] renewToken from ").concat(y.key," to ").concat(e)),N(function(e){return{_type:"renew_token",message:{token:e}}}(e),t,n)):(o.default.error("[".concat(y.clientId,"] Client is previously joined without token")),n&&n(A.INVALID_PARAMETER)):(o.default.error("[".concat(y.clientId,"] Invalid Token ").concat(e)),n&&n(A.INVALID_PARAMETER))},y.setStreamFallbackOption=function(e,t){if(o.default.debug("[".concat(y.clientId,"] Set stream fallback option ").concat(e.getId()," to ").concat(t)),"object"===v()(e)&&null!==e)if(y.state===S){if(!e.local){switch(t){case y.streamFallbackTypes.STREAM_FALLBACK_OPTION_DISABLED:case y.streamFallbackTypes.STREAM_FALLBACK_OPTION_VIDEO_STREAM_LOW:case y.streamFallbackTypes.STREAM_FALLBACK_OPTION_AUDIO_ONLY:break;default:return}N(function(e,t){return{_type:"setFallbackOption",message:{id:e,type:t}}}(e.getId(),t),null,null)}}else o.default.error("[".concat(y.clientId,"] User is not in the session"));else o.default.error("[".concat(y.clientId,"] Invalid remote stream"))},y.startLiveStreaming=function(e,t){y.liveStreams.set(e,t),o.default.debug("[".concat(y.clientId,"] Start live streaming ").concat(e," ").concat(t," ").concat(t)),y.state===S?N(function(e,t){return{_type:"start_live_streaming",message:{url:e,transcodingEnabled:t}}}(e,t),null,null):o.default.error("[".concat(y.clientId,"] User is not in the session"))},y.stopLiveStreaming=function(e){o.default.debug("[".concat(y.clientId,"] Stop live streaming ").concat(e)),y.state===S?(y.liveStreams.delete(e),N(function(e){return{_type:"stop_live_streaming",message:{url:e}}}(e),null,null)):o.default.error("[".concat(y.clientId,"] User is not in the session"))},y.setLiveTranscoding=function(e){Object(G.d)(e)&&(y.transcoding=e,o.default.debug("[".concat(y.clientId,"] Set live transcoding "),e),y.state===S?N(function(e){return{_type:"set_live_transcoding",message:{transcoding:e}}}(e),null,null):o.default.error("[".concat(y.clientId,"] User is not in the session")))},y.addInjectStreamUrl=function(e,t){y.injectLiveStreams.set(e,t),o.default.debug("[".concat(y.clientId,"] Add inject stream url ").concat(e," config "),t),y.state===S?N(function(e,t){return{_type:"add_inject_stream_url",message:{url:e,config:t}}}(e,t),null,null):o.default.error("[".concat(y.clientId,"] User is not in the session"))},y.removeInjectStreamUrl=function(e){o.default.debug("[".concat(y.clientId,"] Remove inject stream url ").concat(e)),y.state===S?(y.injectLiveStreams.delete(e),N(function(e){return{_type:"remove_inject_stream_url",message:{url:e}}}(e),null,null)):o.default.error("[".concat(y.clientId,"] User is not in the session"))},y.enableAudioVolumeIndicator=function(e,t){y.audioVolumeIndication.enabled=!0,y.audioVolumeIndication.interval=e,y.audioVolumeIndication.smooth=t,y.resetAudioVolumeIndication()},y.resetAudioVolumeIndication=function(){if(clearInterval(y.timers.audioVolumeIndication),clearInterval(y.timers.audioVolumeSampling),y.audioVolumeIndication.enabled&&y.audioVolumeIndication.interval){var e=Math.floor(1e3*y.audioVolumeIndication.smooth/100);y.timers.audioVolumeSampling=setInterval(function(){y.audioVolumeSampling||(y.audioVolumeSampling={});var t={};for(var n in y.remoteStreams){var i=y.remoteStreams[n];if(i.stream&&i.hasAudio()){var o=i.getAudioLevel();o>0&&o<1&&(o*=100);var a=y.audioVolumeSampling[n]||[];for(a.push(o);a.length>e;)a.shift();t[n]=a}}y.audioVolumeSampling=t},100),y.timers.audioVolumeIndication=setInterval(function(){var e=[];for(var t in y.remoteStreams)if(y.audioVolumeSampling&&y.audioVolumeSampling[t]){var n=y.audioVolumeSampling[t],i=0;n.forEach(function(e){i+=e});var a={uid:t,level:Math.floor(i/n.length)};a.level&&e.push(a)}var r=e.sort(function(e,t){return e.level-t.level});o.default.debug("[".concat(y.clientId,"] volume-indicator "),JSON.stringify(r)),y.audioVolumeIndication.sortedAudioVolumes=r;var s=c({type:"volume-indicator",attr:r});y.dispatchEvent(s)},y.audioVolumeIndication.interval)}},y.closeGateway=function(){o.default.debug("[".concat(y.clientId,"] close gateway")),y.state=m,y.socket.close(),T()};var T=function(){for(var e in y.timers)y.timers.hasOwnProperty(e)&&clearInterval(y.timers[e]);for(var e in y.remoteStreams)if(y.remoteStreams.hasOwnProperty(e)){var t=y.remoteStreams[e],n=c({type:"stream-removed",uid:t.getId(),stream:t});y.dispatchEvent(n)}y.p2ps.clear(),k(),D(),clearInterval(y.pingTimer)};y.rejoin=function(){y.socket&&(clearInterval(y.pingTimer),y.socket.close(),y.socket=void 0),y.state=g,O()};var O=function(e,t){y.dispatchEvent(c({type:"rejoin-start"})),e=e||function(e){o.default.info("[".concat(y.clientId,"] User ").concat(e," is re-joined to ").concat(y.joinInfo.cname)),y.dispatchEvent(c({type:"rejoin"})),y.liveStreams&&y.liveStreams.size&&y.liveStreams.forEach(function(e,t){e&&y.setLiveTranscoding(y.transcoding),y.startLiveStreaming(t,e)}),y.injectLiveStreams&&y.injectLiveStreams.size&&y.injectLiveStreams.forEach(function(e,t){y.addInjectStreamUrl(t,e)})},t=t||function(e){o.default.error("[".concat(y.clientId,"] Re-join to channel failed "),e),y.dispatchEvent(d({type:"error",reason:e}))},y.key?(++y.rejoinAttempt,y.join(y.joinInfo,y.key,e,t)):o.default.error("[".concat(y.clientId,"] Connection recover failed [Invalid channel key]"))},C=function(e,t,i){var r;y.onConnect=t,void 0!==y.socket?(y.dispatchEvent({type:"reconnect"}),"retry"===y.reconnectMode?(o.default.debug("[".concat(y.clientId,"] Retry current gateway")),y.socket.reconnect()):"tryNext"===y.reconnectMode?(o.default.debug("[".concat(y.clientId,"] Try next gateway")),y.socket.connectNext()):"recover"===y.reconnectMode&&(o.default.debug("[".concat(y.clientId,"] Recover gateway")),o.default.debug("[".concat(y.clientId,"] Try to reconnect choose server and get gateway list again ")),be(y.joinInfo,function(e){y.socket.replaceHost(e.gateway_addr)}))):(r=e.gatewayAddr,y.socket=ge(r,{sid:y.joinInfo.sid,clientId:y.clientId}),y.socket.on("onUplinkStats",function(e){y.OutgoingAvailableBandwidth=e.uplink_available_bandwidth,y.localStreams[y.uid]&&(y.localStreams[y.uid].uplinkStats=e)}),y.socket.on("connect",function(){y.dispatchEvent({type:"connected"}),y.attemps=1,N(function(e){var t=e;return e.uni_lbs_ip&&(t=I()(e,{wanip:e.uni_lbs_ip,hasChange:y.hasChangeBGPAddress})),{_type:"token",message:t}}(e),y.onConnect,i)}),y.socket.on("recover",function(){y.state=g,o.default.debug("[".concat(y.clientId,"] Try to reconnect choose server and get gateway list again ")),be(y.joinInfo,function(e){y.socket.replaceHost(e.gateway_addr)})}),y.socket.on("disconnect",function(e){if(y.state!==m){y.state=m;var t=d({type:"error",reason:A.SOCKET_DISCONNECTED});if(y.dispatchEvent(t),0===y.p2ps.size?y.reconnectMode="tryNext":y.reconnectMode="retry",T(),1!=n){var i,a=(i=y.attemps,1e3*Math.min(30,Math.pow(2,i)-1));o.default.error("[".concat(y.clientId,"] Disconnect from server [").concat(e,"], attempt to recover [#").concat(y.attemps,"] after ").concat(a/1e3," seconds"));setTimeout(function(){y.attemps++,y.state=g,O()},a)}}}),y.socket.on("onAddAudioStream",function(e){if(o.default.info("[".concat(y.clientId,"] Newly added audio stream with uid ").concat(e.id)),y.remoteStreamsInChannel.has(e.id)||y.remoteStreamsInChannel.add(e.id),void 0===y.remoteStreams[e.id]){var t=se({streamID:e.id,local:!1,audio:e.audio,video:e.video,screen:e.screen,attributes:e.attributes});y.remoteStreams[e.id]=t;var n=d({type:"stream-added",stream:t});y.dispatchEvent(n)}}),y.socket.on("onUpdateStream",function(e){var t=y.remoteStreams[e.id];if(t){delete e.id,t.audio=e.audio,t.video=e.video,t.screen=e.screen,t.pc&&y._adjustPCMuteStatus(t);var n=d({type:"stream-updated",stream:t});y.dispatchEvent(n)}else o.default.debug("[".concat(y.clientId,"] Ignoring onUpdateStream event before onAddStream for uid ").concat(e.id))}),y.socket.on("onAddVideoStream",function(e){if(o.default.info("[".concat(y.clientId,"] Newly added remote stream with uid ").concat(e.id,".")),y.remoteStreamsInChannel.has(e.id)||y.remoteStreamsInChannel.add(e.id),void 0===y.remoteStreams[e.id]){var t=se({streamID:e.id,local:!1,audio:e.audio,video:e.video,screen:e.screen,attributes:e.attributes});y.remoteStreams[e.id]=t;var n=d({type:"stream-added",stream:t});y.dispatchEvent(n)}else{var i=y.remoteStreams[e.id];if(void 0!==i.stream){if((t=y.remoteStreams[e.id]).video=!0,t._unmuteVideo(),o.default.info("[".concat(y.clientId,"] Stream changed: enable video ").concat(e.id)),t.isPlaying()){var a=t.player.elementID;t.stop(),t.play(a)}}else if(i.p2pId)y.remoteStreams[e.id].video=!0;else{t=se({streamID:e.id,local:!1,audio:!0,video:!0,screen:!1,attributes:e.attributes});y.remoteStreams[e.id]=t,o.default.info("[".concat(y.clientId,"] Stream changed: modify video ").concat(e.id))}}}),y.socket.on("onRemoveStream",function(e){y.remoteStreamsInChannel.has(e.id)&&y.remoteStreamsInChannel.delete(e.id);var t=y.remoteStreams[e.id];if(t){delete y.remoteStreams[e.id];var n=d({type:"stream-removed",stream:t});y.dispatchEvent(n),t.close(),void 0!==t.pc&&(t.pc.close(),t.pc=void 0,y.p2ps.delete(t.p2pId))}else console.log("ERROR stream ",e.id," not found onRemoveStream ",e)}),y.socket.on("onPublishStream",function(e){var t=y.localStreams[e.id],n=d({type:"streamPublished",stream:t});y.dispatchEvent(n)}),y.socket.on("mute_audio",function(e){o.default.info("[".concat(y.clientId,"] rcv peer mute audio: ").concat(e.peerid));var t=c({type:"mute-audio",uid:e.peerid}),n=y.remoteStreams[e.peerid];n&&(n.peerMuteAudio=!0),n.pc&&y._adjustPCMuteStatus(n),y.dispatchEvent(t)}),y.socket.on("unmute_audio",function(e){o.default.info("[".concat(y.clientId,"] rcv peer unmute audio: ").concat(e.peerid));var t=c({type:"unmute-audio",uid:e.peerid}),n=y.remoteStreams[e.peerid];n&&(n.peerMuteAudio=!1),n.pc&&y._adjustPCMuteStatus(n),y.dispatchEvent(t)}),y.socket.on("mute_video",function(e){o.default.info("[".concat(y.clientId,"] rcv peer mute video: ").concat(e.peerid));var t=c({type:"mute-video",uid:e.peerid}),n=y.remoteStreams[e.peerid];n&&(n.peerMuteVideo=!0),n.pc&&y._adjustPCMuteStatus(n),y.dispatchEvent(t)}),y.socket.on("unmute_video",function(e){o.default.info("[".concat(y.clientId,"] rcv peer unmute video: ").concat(e.peerid));var t=c({type:"unmute-video",uid:e.peerid}),n=y.remoteStreams[e.peerid];n&&(n.peerMuteVideo=!1),n.pc&&y._adjustPCMuteStatus(n),y.dispatchEvent(t)}),y.socket.on("user_banned",function(e){o.default.info("[".concat(y.clientId,"] user banned uid: ").concat(e.id," error: ").concat(e.errcode));var t=c({type:"client-banned",uid:e.id,attr:e.errcode});y.dispatchEvent(t),n=!0,leave()}),y.socket.on("stream_fallback",function(e){o.default.info("[".concat(y.clientId,"] stream fallback uid: ").concat(e.id," peerId: ").concat(e.peerid," type: ").concat(e.type));var t=c({type:"stream-fallback",uid:e.id,stream:e.peerid,attr:e.type});y.dispatchEvent(t)}),y.socket.on("stream_recover",function(e){o.default.info("[".concat(y.clientId,"] stream recover uid: ").concat(e.id," peerId: ").concat(e.peerid," type: ").concat(e.type));var t=c({type:"stream-recover",uid:e.id,stream:e.peerid,attr:e.type});y.dispatchEvent(t)}),y.socket.on("onP2PLost",function(e){if(o.default.debug("[".concat(y.clientId,"] p2plost: "),e,"p2ps:",y.p2ps),"publish"===e.event){var t=y.localStreams[e.uid];t&&a.b.publish(y.joinInfo.sid,{lts:t.publishLTS,succ:!1,audioName:t.hasAudio()&&t.audioName,videoName:t.hasVideo()&&t.videoName,screenName:t.hasScreen()&&t.screenName,ec:"DTLS failed"})}if("subscribe"===e.event){var n=y.remoteStreams[e.uid];n&&a.b.subscribe(y.joinInfo.sid,{lts:n.subscribeLTS,succ:!1,video:n.subscribeOptions&&n.subscribeOptions.video,audio:n.subscribeOptions&&n.subscribeOptions.audio,peerid:e.uid+"",ec:"DTLS failed"})}o.default.debug("[".concat(y.clientId,"] p2plost:"),e.p2pid);var i=y.p2ps.get(e.p2pid);i&&(y.p2ps.delete(e.p2pid),i.local?y.dispatchEvent(c({type:"pubP2PLost",stream:i})):y.remoteStreams[i.getId()]&&y.dispatchEvent(c({type:"subP2PLost",stream:i})))}),y.socket.on("onTokenPrivilegeWillExpire",function(e){o.default.debug("[".concat(y.clientId,"] Received Message onTokenPrivilegeWillExpire")),y.dispatchEvent(c({type:"onTokenPrivilegeWillExpire"}))}),y.socket.on("onTokenPrivilegeDidExpire",function(){o.default.warning("[".concat(y.clientId,"] Received Message onTokenPrivilegeDidExpire, please get new token and join again")),y.closeGateway(),y.dispatchEvent(c({type:"onTokenPrivilegeDidExpire"}))}),y._doWithAction=function(e,t,n){"tryNext"===e?function(e,t){o.default.debug("[".concat(y.clientId,"] Connect next gateway")),y.state=m,y.socket.close(),T(),y.reconnectMode="tryNext",O(e,t)}(t,n):"retry"===e?function(e,t){o.default.debug("[".concat(y.clientId,"] Reconnect gateway")),y.state=m,y.socket.close(),T(),y.reconnectMode="retry",O(e,t)}(t,n):"quit"===e?(o.default.debug("[".concat(y.clientId,"] quit gateway")),y.state=m,y.socket.close(),T()):"recover"===e&&(o.default.debug("[".concat(y.clientId,"] Reconnect gateway")),y.state=m,y.socket.close(),T(),y.reconnectMode="recover",O())},y.socket.on("notification",function(e){if(o.default.debug("[".concat(y.clientId,"] Receive notification: "),e),"ERR_JOIN_BY_MULTI_IP"===b[e.code])return y.dispatchEvent({type:"onMultiIP",arg:e});e.detail?y._doWithAction(Ee[b[e.code]]):e.action&&y._doWithAction(e.action)}),y.socket.on("onPeerLeave",function(e){var t=c({type:"peer-leave",uid:e.id});if(y.remoteStreamsInChannel.has(e.id)&&y.remoteStreamsInChannel.delete(e.id),y.remoteStreams.hasOwnProperty(e.id)&&(t.stream=y.remoteStreams[e.id]),y.dispatchEvent(t),y.remoteStreams.hasOwnProperty(e.id)){o.default.info("[".concat(y.clientId,"] closing stream on peer leave"),e.id);var n=y.remoteStreams[e.id];n.close(),delete y.remoteStreams[e.id],void 0!==n.pc&&(n.pc.close(),n.pc=void 0,y.p2ps.delete(n.p2pId))}y.timers.hasOwnProperty(e.id)&&(clearInterval(y.timers[e.id]),clearInterval(y.timers[e.id]+"_RelatedStats"),delete y.timers[e.id]),null!=y.audioLevel[e.id]&&delete y.audioLevel[e.id],null!=y.timer_counter[e.id]&&delete y.timer_counter[e.id]}),y.socket.on("onUplinkStats",function(e){}),y.socket.on("liveStreamingStarted",function(e){var t=l({type:"liveStreamingStarted",url:e.url});y.dispatchEvent(t)}),y.socket.on("liveStreamingFailed",function(e){var t=l({type:"liveStreamingFailed",url:e.url});y.dispatchEvent(t)}),y.socket.on("liveStreamingStopped",function(e){var t=l({type:"liveStreamingStopped",url:e.url});y.dispatchEvent(t)}),y.socket.on("liveTranscodingUpdated",function(e){var t=l({type:"liveTranscodingUpdated",reason:e.reason});y.dispatchEvent(t)}),y.socket.on("streamInjectedStatus",function(e){var t=l({type:"streamInjectedStatus",url:e.url,uid:e.uid,status:e.status});y.dispatchEvent(t)}),y.socket.on("onUserOnline",function(e){y.dispatchEvent({type:"peer-online",uid:e.id})}))},N=function(e,t,n){if(void 0===y.socket)return o.default.error("[".concat(y.clientId,"] No socket available")),void E(n,A.INVALID_OPERATION);try{y.socket.emitSimpleMessage(e,function(e,i){"success"===e?"function"==typeof t&&t(i):"function"==typeof n&&n(b[i]||i)})}catch(t){o.default.error("[".concat(y.clientId,"] Socket emit message failed ").concat(JSON.stringify(e))),o.default.error("[".concat(y.clientId,"] "),t),E(n,A.SOCKET_ERROR)}},w=function(e,t){if(void 0!==y.socket)try{y.socket.emitSimpleMessage(e,function(e,n){t&&t(e,n)})}catch(e){o.default.error("[".concat(y.clientId,"] Error in sendSimpleSdp [").concat(e,"]"))}else o.default.error("[".concat(y.clientId,"] Error in sendSimpleSdp [socket not ready]"))},D=function(){for(var e in y.localStreams)if(void 0!==y.localStreams[e]){var t=y.localStreams[e];delete y.localStreams[e],void 0!==t.pc&&(t.pc.close(),t.pc=void 0)}},k=function(){for(var e in y.remoteStreamsInChannel.clear(),y.remoteStreams)if(y.remoteStreams.hasOwnProperty(e)){var t=y.remoteStreams[e];t.isPlaying()&&t.stop(),t.close(),delete y.remoteStreams[e],void 0!==t.pc&&(t.pc.close(),t.pc=void 0)}};return y},we={_gatewayClients:{},register:function(e,t){if(!t.uid){var n="NO_UID_PROVIDED";return o.default.error("[".concat(e.clientId,"] "),n,t),n}if(t.cname){if(this._gatewayClients[t.cname]&&this._gatewayClients[t.cname][t.uid]&&this._gatewayClients[t.cname][t.uid]!==e){n="UID_CONFLICT";return o.default.error("[".concat(e.clientId,"] "),n,t),n}return o.default.debug("[".concat(e.clientId,"] register client Channel"),t.cname,"Uid",t.uid),this._gatewayClients[t.cname]||(this._gatewayClients[t.cname]={}),this._gatewayClients[t.cname][t.uid]=e,null}var n="NO_CHANNEL_PROVIDED";return o.default.error("[".concat(e.clientId,"] "),n,t),n},unregister:function(e){var t=e&&e.uid,n=e.joinInfo&&e.joinInfo.cname;if(!t||!n){var i="INVALID_GATEWAYCLIENT";return o.default.error("[".concat(e.clientId,"] "),i),i}if(this._gatewayClients[n]&&this._gatewayClients[n][t]){if(this._gatewayClients[n][t]!==e){i="GATEWAYCLIENT_UID_CONFLICT";return o.default.error("[".concat(e.clientId,"] "),i),i}return o.default.debug("[".concat(e.clientId,"] unregister client "),e.uid),delete this._gatewayClients[n][t],null}var i="GATEWEAY_CLIENT_UNREGISTERED";o.default.error("[".concat(e.clientId,"] "),i)}};Ne.DISCONNECTED=0,Ne.CONNECTING=1,Ne.CONNECTED=2,Ne.DISCONNECTING=3,Ne.connetionStateMap={0:"DISCONNECTED",1:"CONNECTING",2:"CONNECTED",3:"DISCONNECTING"};var De=Ne,ke=function(e){var t;switch(e){case"120p":case"120p_1":t=["120p_1","120p_1","120p_1"];break;case"120p_3":t=["120p_3","120p_3","120p_3"];break;case"180p":case"180p_1":t=["90p_1","90p_1","180p_1"];break;case"180p_3":t=["120p_3","120p_3","180p_3"];break;case"180p_4":t=["120p_1","120p_1","180p_4"];break;case"240p":case"240p_1":t=["120p_1","120p_1","240p_1"];break;case"240p_3":t=["120p_3","120p_3","240p_3"];break;case"240p_4":t=["120p_4","120p_4","240p_4"];break;case"360p":case"360p_1":case"360p_4":case"360p_9":case"360p_10":case"360p_11":t=["90p_1","90p_1","360p_1"];break;case"360p_3":case"360p_6":t=["120p_3","120p_3","360p_3"];break;case"360p_7":case"360p_8":t=["120p_1","120p_1","360p_7"];break;case"480p":case"480p_1":case"480p_2":case"480p_4":case"480p_10":t=["120p_1","120p_1","480p_1"];break;case"480p_3":case"480p_6":t=["120p_3","120p_3","480p_3"];break;case"480p_8":case"480p_9":t=["120p_4","120p_4","480p_8"];break;case"720p":case"720p_1":case"720p_2":case"720p_3":t=["90p_1","90p_1","720p_1"];break;case"720p_5":case"720p_6":t=["120p_1","120p_1","720p_5"];break;case"1080p":case"1080p_1":case"1080p_2":case"1080p_3":case"1080p_5":t=["90p_1","90p_1","1080p_1"];break;case"1440p":case"1440p_1":case"1440p_2":t=["90p_1","90p_1","1440p_1"];break;case"4k":case"4k_1":case"4k_3":t=["90p_1","90p_1","4k_1"];break;default:t=["120p_1","120p_1","360p_7"]}return Object(p.isOpera)()?[e,15,50]:Object(p.isFireFox)()?[t[1],15,100]:Object(p.isSafari)()?[t[2],15,50]:[t[0],15,50]},Me={1001:"FRAMERATE_INPUT_TOO_LOW",1002:"FRAMERATE_SENT_TOO_LOW",1003:"SEND_VIDEO_BITRATE_TOO_LOW",1005:"RECV_VIDEO_DECODE_FAILED",2001:"AUDIO_INPUT_LEVEL_TOO_LOW",2002:"AUDIO_OUTPUT_LEVEL_TOO_LOW",2003:"SEND_AUDIO_BITRATE_TOO_LOW",2005:"RECV_AUDIO_DECODE_FAILED",3001:"FRAMERATE_INPUT_TOO_LOW_RECOVER",3002:"FRAMERATE_SENT_TOO_LOW_RECOVER",3003:"SEND_VIDEO_BITRATE_TOO_LOW_RECOVER",3005:"RECV_VIDEO_DECODE_FAILED_RECOVER",4001:"AUDIO_INPUT_LEVEL_TOO_LOW_RECOVER",4002:"AUDIO_OUTPUT_LEVEL_TOO_LOW_RECOVER",4003:"SEND_AUDIO_BITRATE_TOO_LOW_RECOVER",4005:"RECV_AUDIO_DECODE_FAILED_RECOVER"},Pe={FramerateInput:1001,FramerateSent:1002,SendVideoBitrate:1003,VideoDecode:1005,AudioIntputLevel:2001,AudioOutputLevel:2002,SendAudioBitrate:2003,AudioDecode:2005},Le=function(e){var t={remoteStreamStorage:{},localStreamStorage:{}};return t.gatewayClient=e,t.checkAudioOutputLevel=function(e){return!(e&&parseInt(e.audioRecvBytesDelta)>0&&parseInt(e.audioDecodingNormalDelta)>0&&0===parseInt(e.audioOutputLevel))},t.checkAudioIntputLevel=function(e){return!e||0!==parseInt(e.audioInputLevel)},t.checkFramerateInput=function(e,t){if(!e||!t.attributes)return!0;var n=parseInt(t.attributes.maxFrameRate),i=parseInt(e.googFrameRateInput);return!n||!i||!(n>10&&i<5||n<10&&n>=5&&i<=1)},t.checkFramerateSent=function(e){return!(e&&parseInt(e.googFrameRateInput)>5&&parseInt(e.googFrameRateSent)<=1)},t.checkSendVideoBitrate=function(e){return!e||0!==parseInt(e.videoSendBytesDelta)},t.checkSendAudioBitrate=function(e){return!e||0!==parseInt(e.audioSendBytesDelta)},t.checkVideoDecode=function(e){return!e||0===parseInt(e.videoRecvBytesDelta)||0!==parseInt(e.googFrameRateDecoded)},t.checkAudioDecode=function(e){return!e||0===parseInt(e.audioRecvBytesDelta)||0!==parseInt(e.audioDecodingNormalDelta)},t.record=function(e,n,i,o,a){i[e]||(i[e]={isPrevNormal:!0,record:[]});var r=i[e],s=t["check"+e](n,a);if(r.record.push(s),r.record.length>=5){r.isCurNormal=r.record.includes(!0);var d=Pe[e];r.isPrevNormal&&!r.isCurNormal&&t.gatewayClient.dispatchEvent({type:"exception",code:d,msg:Me[d],uid:o}),!r.isPrevNormal&&r.isCurNormal&&t.gatewayClient.dispatchEvent({type:"exception",code:d+2e3,msg:Me[d+2e3],uid:o}),r.isPrevNormal=r.isCurNormal,r.record=[]}},t.setLocalStats=function(e){var n={};Object.keys(e).map(function(i){var o=e[i],a=t.gatewayClient.localStreams[parseInt(i)],r=t.localStreamStorage[i]||{};a&&a.hasVideo()&&(t.record("SendVideoBitrate",o.videoStats,r,i),t.record("FramerateInput",o.videoStats,r,i,a),t.record("FramerateSent",o.videoStats,r,i)),a&&a.hasAudio()&&(t.record("AudioIntputLevel",o.audioStats,r,i),t.record("SendAudioBitrate",o.audioStats,r,i)),n[i]=r}),t.localStreamStorage=n},t.setRemoteStats=function(n){var i={};Object.keys(n).map(function(o){var a=n[o],r=e.remoteStreams[o],s=t.remoteStreamStorage[o]||{};r&&r.hasVideo()&&r.isPlaying()&&t.record("VideoDecode",a.videoStats,s,o),r&&r.hasAudio()&&r.isPlaying()&&(t.record("AudioOutputLevel",a.audioStats,s,o),t.record("AudioDecode",a.audioStats,s,o)),i[o]=s}),t.remoteStreamStorage=i},t},xe=new function(){var e=r();return e.states={UNINIT:"UNINIT",INITING:"INITING",INITED:"INITED"},e.state=e.states.UNINIT,e.type=null,e.lastConnectedAt=null,e.lastDisconnectedAt=null,e.lastTypeChangedAt=null,e.networkChangeTimer=null,e._init=function(t,n){if(e.state=e.states.INITING,navigator.connection&&navigator.connection.addEventListener){var i=e._getNetworkInfo();e.type=i&&i.type,e.state=e.states.INITED,t&&t()}else e.state=e.states.UNINIT,n&&n("DO_NOT_SUPPORT")},e._getNetworkInfo=function(){return navigator.connection},e._reloadNetworkInfo=function(){var t=e._getNetworkInfo(),n=t&&t.type||"UNSUPPORTED",i=Date.now();if(n!==e.type){e.lastTypeChangedAt=i,"none"==n?e.lastDisconnectedAt=i:"none"==e.type&&(e.lastConnectedAt=i),e.type=n;var o={type:"networkTypeChanged",networkType:n};e.dispatchEvent(o)}},e.getStats=function(t,n){var i={},o=e._getNetworkInfo();o&&(i.NetworkType=o.type||"UNSUPPORTED"),setTimeout(function(){t(i)},0)},e._init(function(){navigator.connection.addEventListener("change",function(){e._reloadNetworkInfo()}),e.networkChangeTimer=setInterval(function(){e._reloadNetworkInfo()},5e3)},function(e){}),e},Ve=function(e){var t={key:void 0,highStream:null,lowStream:null,lowStreamParameter:null,isDualStream:!1,highStreamState:2,lowStreamState:2,proxyServer:null,turnServer:{},useProxyServer:!1};t.mode=e.mode,t.clientId=Object(G.b)().slice(0,5);e=I()({},e);return t.aespassword=null,t.aesmode="none",t.hasPublished=!1,t.getConnectionState=function(){var n=a.b.reportApiInvoke(e.sessionId,{name:"Client.getConnectionState",options:arguments,tag:"tracer"}),i=De.connetionStateMap[t.gatewayClient.state];return n(),i},t.setClientRole=function(n,i){var r=a.b.reportApiInvoke(e.sessionId,{callback:i,name:"Client.setClientRole",options:arguments,tag:"tracer"});if(Y(n,"setClientRole",["host","audience"]),"rtc"===t.mode){var s="RTC mode can not use setClientRole";return o.default.warning("[".concat(t.clientId,"] ").concat(s)),r&&r(s)}t.gatewayClient&&t.gatewayClient.state===De.CONNECTED?("audience"===n&&(0===this.highStreamState?this._unpublish(this.highStream,function(){r&&r(null,{role:n})},function(e){r&&r(e)}):t.gatewayClient.setClientRole("audience",r)),"host"===n&&t.gatewayClient.setClientRole("host",r)):(t.gatewayClient.role=n,r&&r(null,{role:n}))},t.getGatewayInfo=function(e){if(t.gatewayClient.state!==De.CONNECTED){var n="Client is not in connected state";return o.default.error("[".concat(t.clientId,"] ").concat(n)),void e(n)}t.gatewayClient.getGatewayInfo(function(t){e(null,t)},e)},t.renewToken=function(n,i,r){var s=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return r&&r(e);i&&i(t)},name:"Client.renewToken",options:arguments,tag:"tracer"});if(!ne(n))throw new Error("Invalid token: Token is of the string type .Length of the string: [1,255]. ASCII characters only.");t.gatewayClient||(o.default.error("[".concat(t.clientId,"] renewToken Failed. GatewayClient not Exist")),s(A.INVALID_OPERATION)),t.key?(t.key=n,t.gatewayClient.renewToken(n,function(e){return s(null,e)},s)):(o.default.error("[".concat(t.clientId,"] renewToken should not be called before user join")),s(A.INVALID_OPERATION))},t.setLowStreamParameter=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.setLowStreamParameter",options:arguments,tag:"tracer"});q(n,"param");var r=n.width,s=n.height,d=n.framerate,c=n.bitrate;re(r)||X(r,"width"),re(s)||X(s,"height"),re(d)||X(d,"framerate"),re(c)||X(c,"bitrate",1,1e7),(!r&&s||r&&!s)&&o.default.warning("[".concat(t.clientId,"] The width and height parameters take effect only when both are set")),t.lowStreamParameter=n,i()},t.init=function(n,i,r){var s=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return r&&r(e);i&&i(t)},name:"Client.init",options:arguments,tag:"tracer"});Q(n),Object(p.isChromeKernel)()&&Object(p.getChromeKernelVersion)()<=48?r?s(A.BAD_ENVIRONMENT):Object(G.f)():(o.default.info("[".concat(t.clientId,"] Initializing AgoraRTC client, appId: ").concat(n,".")),e.appId=n,e.sessionId=Object(G.b)(),s())},t.setTurnServer=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.setTurnServer",options:arguments,tag:"tracer"});if(t.gatewayClient&&t.gatewayClient.state!==De.DISCONNECTED)throw new Error("Set turn server before join channel");if(t.useProxyServer)throw new Error("You have already set the proxy");q(n,"turnServer");var r=n.turnServerURL,s=n.username,d=n.password,c=n.udpport,u=n.forceturn,l=n.tcpport;Q(r,"turnServerURL"),Q(s,"username"),Q(d,"password"),Q(c,"udpport"),re(u)||$(u,"forceturn"),t.turnServer.url=r,t.turnServer.udpport=c,t.turnServer.username=s,t.turnServer.credential=d,t.turnServer.forceturn=u||!1,re(l)||(Q(l,"tcpport"),t.turnServer.tcpport=l,o.default.info("[".concat(t.clientId,"] Set turnserver tcpurl. ").concat(t.turnServer.url,":").concat(t.turnServer.tcpport))),o.default.info("[".concat(t.clientId,"] Set turnserver udpurl. ").concat(t.turnServer.url,":").concat(t.turnServer.udpport,",username: ").concat(t.turnServer.uername,",password: ").concat(t.turnServer.credential)),i()},t.setProxyServer=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.setProxyServer",options:arguments,tag:"tracer"});if(t.gatewayClient&&t.gatewayClient.state!==De.DISCONNECTED)throw new Error("Set proxy server before join channel");if(!n)throw new Error("Do not set the proxyServer parameter as empty");if(t.useProxyServer)throw new Error("You have already set the proxy");Q(n,"proxyServer"),t.proxyServer=n,a.b.setProxyServer(n),o.default.setProxyServer(n),i()},t.startProxyServer=function(){var n=a.b.reportApiInvoke(e.sessionId,{name:"Client.startProxyServer",options:arguments,tag:"tracer"});if(t.gatewayClient&&t.gatewayClient.state!==De.DISCONNECTED)throw new Error("Start proxy server before join channel");if(t.proxyServer||t.turnServer.url)throw new Error("You have already set the proxy");t.useProxyServer=!0,n()},t.stopProxyServer=function(){var n=a.b.reportApiInvoke(e.sessionId,{name:"Client.stopProxyServer",options:arguments,tag:"tracer"});if(t.gatewayClient&&t.gatewayClient.state!==De.DISCONNECTED)throw new Error("Stop proxy server after leave channel");a.b.setProxyServer(),o.default.setProxyServer(),t.turnServer={},t.proxyServer=null,t.useProxyServer=!1,n()},t.setEncryptionSecret=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.setEncryptionSecret",options:arguments,tag:"tracer"});Q(n,"password"),t.aespassword=n,i()},t.setEncryptionMode=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.setEncryptionMode",options:arguments,tag:"tracer"});if(Q(n,"encryptionMode"),!le.includes(n))throw new Error('Invalid encryptionMode: encryptionMode should be "aes-128-xts" | "aes-256-xts" | "aes-128-ecb"');t.aesmode=n,i()},t.configPublisher=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.configPublisher",options:arguments,tag:"tracer"});q(n,"config");var o=n.width,r=n.height,s=n.framerate,d=n.bitrate,c=n.publisherUrl;X(o,"width"),X(r,"height"),X(s,"framerate"),X(d,"bitrate",1,1e7),c&&Q(c,"publisherUrl"),t.gatewayClient.configPublisher(n),i()},t.enableDualStream=function(n,i){var r=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return i&&i(e);n&&n(t)},name:"Client.enableDualStream",options:arguments,tag:"tracer"});return"iOS"===Object(p.getBrowserOS)()?(a.b.streamSwitch(e.sessionId,{lts:(new Date).getTime(),isdual:!0,succ:!1}),r(A.IOS_NOT_SUPPORT)):Object(p.isWeChatBrowser)()?(a.b.streamSwitch(e.sessionId,{lts:(new Date).getTime(),isdual:!0,succ:!1}),r(A.WECHAT_NOT_SUPPORT)):(a.b.streamSwitch(e.sessionId,{lts:(new Date).getTime(),isdual:!0,succ:!0}),t.isDualStream=!0,void(0===t.highStreamState?t._publishLowStream(function(e){return r(null,e)},function(e){o.default.warning("[".concat(t.clientId,"]"),e),r(A.ENABLE_DUALSTREAM_FAILED)}):1===t.highStreamState?r(A.STILL_ON_PUBLISHING):r(null)))},t.disableDualStream=function(n,i){var r=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return i&&i(e);n&&n(t)},name:"Client.disableDualStream",options:arguments,tag:"tracer"});a.b.streamSwitch(e.sessionId,{lts:(new Date).getTime(),isdual:!1,succ:!0}),t.isDualStream=!1,0===t.highStreamState?t._unpublishLowStream(function(){t.highStream.lowStream=null,r()},function(e){o.default.warning("[".concat(t.clientId,"]"),e),r(A.DISABLE_DUALSTREAM_FAILED)}):1===t.highStreamState?r(A.STILL_ON_PUBLISHING):r()},t._createLowStream=function(e,n){if(t.highStream&&t.highStream.stream){var a=I()({},t.highStream.params);if(a.streamID+=1,a.audio=!1,a.video){var r=t.highStream.stream.getVideoTracks()[0];r?K.getVideoCameraIdByLabel(r.label,function(r){a.cameraId=r;var s=new se(a);if(s.streamId=t.highStream.getId()+1,t.lowStreamParameter){var d=I()({},t.lowStreamParameter);if(!d.width||!d.height){var c=ke(t.highStream.profile),u=i.SUPPORT_RESOLUTION_LIST[c[0]];d.width=u[0],d.height=u[1]}if(d.framerate=d.framerate||5,d.bitrate=d.bitrate||50,Object(p.isSafari)()||Object(p.isOpera)()){o.default.debug("[".concat(t.clientId,"] Shimming lowStreamParameter"));u=i.SUPPORT_RESOLUTION_LIST[t.highStream.profile];d.width=u[0],d.height=u[1]}s.setVideoProfileCustomPlus(d)}else s.setVideoProfileCustom(ke(t.highStream.profile));s.init(function(){t.highStream.lowStream=s,t.highStream.userMuteVideo&&s.muteVideo(),e&&e(s)},n)},n):n&&n(A.HIGH_STREAM_NOT_VIDEO_TRACE)}else n&&n(A.HIGH_STREAM_NOT_VIDEO_TRACE)}else n&&n(A.HIGH_STREAM_NOT_VIDEO_TRACE)},t._getLowStream=function(e,n){t.lowStream?e(t.lowStream):t._createLowStream(function(n){t.lowStream=n,e(t.lowStream)},n)},t._publishLowStream=function(e,n){return 2!==t.lowStreamState?n&&n(A.LOW_STREAM_ALREADY_PUBLISHED):t.highStream&&t.highStream.hasScreen()?n&&n(A.SHARING_SCREEN_NOT_SUPPORT):void t._getLowStream(function(i){t.lowStreamState=1,t.gatewayClient.publish(i,{streamType:1},function(){t.lowStreamState=0,e&&e()},function(e){o.default.debug("[".concat(t.clientId,"] publish low stream failed")),n&&n(e)})},n)},t._unpublishLowStream=function(e,n){if(0!==t.lowStreamState)return n&&n(A.LOW_STREAM_NOT_YET_PUBLISHED);t.lowStream&&(t.gatewayClient.unpublish(t.lowStream,{streamType:1},function(){},function(e){o.default.debug("[".concat(t.clientId,"] unpublish low stream failed")),n&&n(e)}),t.lowStream.close(),t.lowStream=null,t.lowStreamState=2,e&&e())},t.join=function(n,i,r,s,d){var c,u=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return d&&d(e);s&&s(t)},name:"Client.join",options:arguments,tag:"tracer"});if(n&&!ne(n))return o.default.warning("[".concat(t.clientId,"] Param channelKey should be string")),u(A.INVALID_PARAMETER);if(!ae(c=i)||!/^[a-zA-Z0-9!#$%&()+-:;<=.>?@[\]^_{}|~,\s]{1,64}$/.test(c))return o.default.warning("[".concat(t.clientId,"] The length must be within 64 bytes. The supported characters: a-z,A-Z,0-9,space,!, #, $, %, &, (, ), +, -, :, ;, <, =, ., >, ?, @, [, ], ^, _, {, }, |, ~, ,")),u(A.INVALID_PARAMETER);if("string"==typeof i&&""===i)return o.default.warning("[".concat(t.clientId,"] Param channel should not be empty")),u(A.INVALID_PARAMETER);if(r&&!Object(G.c)(r)&&!Z(r,1,255))return o.default.warning("[".concat(t.clientId,"] [String uid] Length of the string: [1,255]. ASCII characters only. [Number uid] The value range is [0,10000]")),u(A.INVALID_PARAMETER);if("string"==typeof r&&0==r.length)return o.default.warning("[".concat(t.clientId,"] String uid should not be empty")),u(A.INVALID_PARAMETER);if("string"==typeof r&&r.length>256)return o.default.warning("[".concat(t.clientId,"] Length of string uid should be less than 255")),u(A.INVALID_PARAMETER);t.highStream=null,t.lowStream=null,t.lowStreamParameter=null,t.isDualStream=!1,t.highStreamState=2,t.lowStreamState=2;var l={clientId:t.clientId,appId:e.appId,sid:e.sessionId,cname:i,uid:r,turnServer:t.turnServer,proxyServer:t.proxyServer,token:n||e.appId,useProxyServer:t.useProxyServer};if("string"==typeof r&&(l.stringUid=r,l.uid=0),t.aespassword&&"none"!==t.aesmode&&I()(l,{aespassword:t.aespassword,aesmode:t.aesmode}),a.b.sessionInit(e.sessionId,{lts:(new Date).getTime(),cname:i,appid:e.appId,mode:e.mode,succ:!0}),t.onSuccess=function(e){return u(null,e)},t.onFailure=function(e){return u(e)},t.channel=i,t.gatewayClient.state!==De.DISCONNECTED)return o.default.error("[".concat(t.clientId,"] Client already in connecting/connected state")),u(A.INVALID_OPERATION),void a.b.joinGateway(e.sessionId,{lts:Date.now(),succ:!1,ec:A.INVALID_OPERATION,addr:null});t.gatewayClient.state=De.CONNECTING,be(l,function(a,r){o.default.info("[".concat(t.clientId,"] Joining channel: ").concat(i)),t.gatewayClient.dispatchEvent({type:"config-distribute",config:r,joinInfo:l}),t.key=n||e.appId,l.cid=a.cid,l.uid=a.uid,a.uni_lbs_ip&&a.uni_lbs_ip[1]&&(l.uni_lbs_ip=a.uni_lbs_ip[1]),l.gatewayAddr=a.gateway_addr,t.joinInfo=l,t.gatewayClient.join(l,t.key,function(e){o.default.info("[".concat(t.clientId,"] Join channel ").concat(i," success, join with uid: ").concat(e,".")),t.onSuccess=null,u(null,e)},function(e){return u(e)})})},t.renewChannelKey=function(n,i,r){var s=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return r&&r(e);i&&i(t)},name:"Client.renewChannelKey",options:arguments,tag:"tracer"});Q(n,"key",1,2047),void 0===t.key?(o.default.error("[".concat(t.clientId,"] renewChannelKey should not be called before user join")),s(A.INVALID_OPERATION)):(t.key=n,t.gatewayClient.key=n,t.gatewayClient.rejoin(),s())},t.leave=function(n,i){var r=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return i&&i(e);n&&n(t)},name:"Client.leave",options:arguments,tag:"tracer"});o.default.info("[".concat(t.clientId,"] Leaving channel")),t._renewSession(),t.gatewayClient.leave(function(e){return r(e)},r)},t._renewSession=function(){var n=Object(G.b)();if(o.default.debug("renewSession ".concat(e.sessionId," => ").concat(n)),e.sessionId=n,t.joinInfo&&(t.joinInfo.sid=n),t.gatewayClient&&(t.gatewayClient.joinInfo&&(t.gatewayClient.joinInfo.sid=n),t.gatewayClient.localStreams))for(var i in t.gatewayClient.localStreams){var a=t.gatewayClient.localStreams[i];a&&(a.sid=n)}},t._publish=function(n,i,a){if(2!==t.highStreamState)return o.default.warning("[".concat(t.clientId,"] Can't publish stream when stream already publish ").concat(n.getId())),a&&a(A.STREAM_ALREADY_PUBLISHED);o.default.info("[".concat(t.clientId,"] Publishing stream, uid ").concat(n.getId())),t.highStream=n,t.highStreamState=1,t.highStream.streamId=t.joinInfo.stringUid||t.joinInfo.uid,t.hasPublished=!1;var r=function(n,i,a){t.gatewayClient.publish(n,{streamType:0},function(){n.sid=e.sessionId,t.highStreamState=0,o.default.info("[".concat(t.clientId,"] Publish success, uid: ").concat(n.getId())),t.isDualStream?t._publishLowStream(function(){i&&i()},function(e){o.default.warning("[".concat(t.clientId,"] "),e),i&&i()}):i&&i()},a)};"audience"===t.gatewayClient.role&&"live"===t.mode?t.gatewayClient.setClientRole("host",function(e){if(e)return a&&a(e);r(n,i,a)}):r(n,i,a)},t._unpublish=function(e,n,i){if(0!==t.highStreamState)return o.default.warning("[".concat(t.clientId,"] Can't unpublish stream when stream not publish")),i&&i(A.STREAM_NOT_YET_PUBLISHED);o.default.info("[".concat(t.clientId,"] Unpublish stream, uid ").concat(e.getId()));var a=function(e,n,i){t.isDualStream&&t.lowStream?(t._unpublishLowStream(null,i),t.gatewayClient.unpublish(e,{streamType:0},null,i),t.highStreamState=2,o.default.info("[".concat(t.clientId,"] Unpublish stream success, uid: ").concat(e.getId()))):(t.gatewayClient.unpublish(e,{streamType:0},null,i),t.highStreamState=2,o.default.info("[".concat(t.clientId,"] Unpublish stream success, uid: ").concat(e.getId()))),n&&n()};"host"===t.gatewayClient.role&&"live"===t.mode?t.gatewayClient.setClientRole("audience",function(t){if(t)return i&&i(t);a(e,n,i)}):a(e,n,i)},t.publish=function(n,i){var o=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return i&&i(e)},name:"Client.publish",tag:"tracer",options:{stream:"too long to show",onFailure:!!i}});2===t.highStreamState?t._publish(n,function(e){return o(null,e)},function(e){return o(e)}):o(A.STREAM_ALREADY_PUBLISHED)},t.unpublish=function(n,i){var o=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return i&&i(e)},name:"Client.unpublish",tag:"tracer",options:{stream:"too long to show",onFailure:!!i}});0===t.highStreamState?t._unpublish(n,function(e){return o(null,e)},function(e){return o(e)}):o(A.STREAM_NOT_YET_PUBLISHED)},t.subscribe=function(n,i,r){var s=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return r&&r(e)},name:"Client.subscribe",tag:"tracer",options:{stream:"too long to show",options:i,onFailure:!!r}});"function"==typeof i&&(r=i,i=null),q(n,"stream"),re(i)||(q(i,"options"),re(i.video)||$(i.video,"options.video"),re(i.audio)||$(i.audio,"options.audio"));var d={video:!0,audio:!0};if(!re(i)){if(Object(p.isSafari)()&&(!i.video||!i.audio)){var c="SAFARI_NOT_SUPPORTED_FOR_TRACK_SUBSCRIPTION";return o.default.error("[".concat(t.clientId,"] "),c),void s(c)}if(!re(i.video)&&!te(i.video)||!re(i.audio)&&!te(i.audio)||!1===i.audio&&!1===i.video){c="INVALID_PARAMETER ".concat(JSON.stringify(i));return o.default.error("[".concat(t.clientId,"] "),c),void s(c)}}n.subscribeOptions?(I()(n.subscribeOptions,d,i),t.gatewayClient.subscribeChange(n,function(e){return s(null,e)},s)):(n.subscribeOptions=I()({},d,i),t.gatewayClient.subscribe(n,function(e){return s(null,e)},s))},t.unsubscribe=function(n,i){var r=a.b.reportApiInvoke(e.sessionId,{callback:function(e,t){if(e)return i&&i(e)},name:"Client.unsubscribe",tag:"tracer",options:{stream:"too long to show",onFailure:!!i}});o.default.info("[".concat(t.clientId,"] Unsubscribe stream, uid: ").concat(n.getId())),t.gatewayClient.unsubscribe(n,function(e){return r(null,e)},r)},t.setRemoteVideoStreamType=function(n,i){var o=a.b.reportApiInvoke(e.sessionId,{name:"Client.setRemoteVideoStreamType",tag:"tracer",options:{stream:"too long to show",streamType:i}});Y(i,"streamType",[0,1]),t.gatewayClient.setRemoteVideoStreamType(n,i),o()},t.setStreamFallbackOption=function(n,i){var o=a.b.reportApiInvoke(e.sessionId,{name:"Client.setStreamFallbackOption",tag:"tracer",options:{stream:"too long to show",fallbackType:i}});Y(i,"fallbackType",[0,1,2]),t.gatewayClient.setStreamFallbackOption(n,i),o()},t.startLiveStreaming=function(n,i){var o=a.b.reportApiInvoke(e.sessionId,{name:"Client.startLiveStreaming",options:arguments,tag:"tracer"});Q(n,"url"),re(i)||$(i,"transcodingEnabled"),t.gatewayClient.startLiveStreaming(n,i),o()},t.stopLiveStreaming=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.stopLiveStreaming",options:arguments,tag:"tracer"});Q(n,"url"),t.gatewayClient.stopLiveStreaming(n),i()},t.setLiveTranscoding=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.setLiveTranscoding",options:arguments,tag:"tracer"});q(n,"transcoding");var o=n.width,r=n.height,s=n.videoBitrate,d=n.videoFramerate,c=n.lowLatency,u=n.audioSampleRate,l=n.audioBitrate,p=n.audioChannels,f=n.videoGop,m=n.videoCodecProfile,g=n.userCount,v=n.backgroundColor,S=n.transcodingUsers;if(re(o)||X(o,"width"),re(r)||X(r,"height"),re(s)||X(s,"videoBitrate",1,1e6),re(d)||X(d,"videoFramerate"),re(c)||$(c,"lowLatency"),re(u)||Y(u,"audioSampleRate",[32e3,44100,48e3]),re(l)||X(l,"audioBitrate",1,128),re(p)||Y(p,"audioChannels",[1,2,3,4,5]),re(f)||X(f,"videoGop"),re(m)||Y(m,"videoCodecProfile",[66,77,100]),re(g)||X(g,"userCount",0,17),re(v)||X(v,"backgroundColor",0,16777215),!re(S)){if(!(S instanceof Array))throw new Error("[transcodingUsers]: transcodingUsers should be Array");if(S.length>17)throw new Error("The length of transcodingUsers cannot greater than 17");S.map(function(e,t){if(!re(e.uid)&&!Object(G.c)(e.uid)&&!Z(e.uid,1,255))throw new Error("[String uid] Length of the string: [1,255]. ASCII characters only. [Number uid] The value range is [0,10000]");if(re(e.x)||X(e.x,"transcodingUser[".concat(t,"].x"),0,1e4),re(e.y)||X(e.y,"transcodingUser[".concat(t,"].y"),0,1e4),re(e.width)||X(e.width,"transcodingUser[".concat(t,"].width"),0,1e4),re(e.height)||X(e.height,"transcodingUser[".concat(t,"].height"),0,1e4),re(e.zOrder)||X(e.zOrder,"transcodingUser[".concat(t,"].zOrder"),0,100),!(re(e.alpha)||"number"==typeof e.alpha&&e.alpha<=1&&e.alpha>=0))throw new Error("transcodingUser[${index}].alpha: The value range is [0, 1]")})}I()(Fe,n),t.gatewayClient.setLiveTranscoding(Fe),i()},t.addInjectStreamUrl=function(n,i){var o=a.b.reportApiInvoke(e.sessionId,{name:"Client.addInjectStreamUrl",options:arguments,tag:"tracer"});Q(n,"url",1,255),q(i,"config"),!re(i&&i.width)&&X(i.width,"config.width",0,1e4),!re(i&&i.height)&&X(i.height,"config.height",0,1e4),!re(i&&i.videoGop)&&X(i.videoGop,"config.videoGop",1,1e4),!re(i&&i.videoFramerate)&&X(i.videoFramerate,"config.videoFramerate",1,1e4),!re(i&&i.videoBitrate)&&X(i.videoBitrate,"config.videoBitrate",1,1e4),!re(i&&i.audioSampleRate)&&Y(i.audioSampleRate,"config.audioSampleRate",[32e3,44100,48e3]),!re(i&&i.audioBitrate)&&X(i.audioBitrate,"config.audioBitrate",1,1e4),!re(i&&i.audioChannels)&&X(i.audioChannels,"config.audioChannels",1,2),I()(Be,i),t.gatewayClient.addInjectStreamUrl(n,Be),o()},t.removeInjectStreamUrl=function(n){var i=a.b.reportApiInvoke(e.sessionId,{name:"Client.removeInjectStreamUrl",options:arguments,tag:"tracer"});Q(n,"url",1,255),t.gatewayClient.removeInjectStreamUrl(n),i()},t.enableAudioVolumeIndicator=function(n,i){var r=a.b.reportApiInvoke(e.sessionId,{name:"Client.enableAudioVolumeIndicator",options:arguments,tag:"tracer"});n=n||2e3,X(i=i||3,"smooth",1,100),X(n,"interval",50,1e5),t.audioVolumeIndication=t.audioVolumeIndication||{enabled:!0},t.audioVolumeIndication.interval=n,t.audioVolumeIndication.smooth=i,t.audioVolumeIndication={interval:n,smooth:i},o.default.info("[".concat(t.clientId,"] enableAudioVolumeIndicator interval ").concat(n," smooth ").concat(i)),t.gatewayClient.enableAudioVolumeIndicator(n,i),r()},t.getNetworkStats=function(e,n){return o.default.deprecate("[".concat(t.clientId,"] client.getNetworkStats is deprecated. Use client.getTransportStats instead.")),xe.getStats(e,n)},t.getSystemStats=function(e,t){return m.getStats(e,t)},t.getRecordingDevices=function(e,t){return K.getRecordingDevices(e,t)},t.getPlayoutDevices=function(e,t){return K.getPlayoutDevices(e,t)},t.getCameras=function(e,t){return K.getCameras(e,t)},t.getRemoteAudioStats=function(e,n){return t.rtcStatsCollector.getRemoteAudioStats(e,n)},t.getLocalAudioStats=function(e,n){return t.rtcStatsCollector.getLocalAudioStats(e,n)},t.getRemoteVideoStats=function(e,n){return t.rtcStatsCollector.getRemoteVideoStats(e,n)},t.getLocalVideoStats=function(e,n){return t.rtcStatsCollector.getLocalVideoStats(e,n)},t._getRemoteVideoQualityStats=function(e,n){return t.rtcStatsCollector.getRemoteVideoQualityStats(e,n)},t._getRemoteAudioQualityStats=function(e,n){return t.rtcStatsCollector.getRemoteAudioQualityStats(e,n)},t.getTransportStats=function(e,n){return t.rtcStatsCollector.getTransportStats(function(t){return xe.getStats(function(n){var i=I()({},t,n);e&&e(i)},n)},n)},t.getSessionStats=function(e,n){return t.rtcStatsCollector.getSessionStats(e,n)},t.onNetworkQuality=function(){return t.rtcStatsCollector.onNetworkQuality(onSuccess,onFailure)},e.clientId=t.clientId,t.gatewayClient=De(e),t.on=t.gatewayClient.on,t.rtcStatsCollector=function(e){var t=r();return t.gatewayClient=e,t.exceptionMonitor=new Le(e),t.localStats={},t.remoteStats={},t.session={sendBytes:0,recvBytes:0,WSSendBytes:0,WSSendBytesDelta:0,WSRecvBytes:0,WSRecvBytesDelta:0,HTTPSendBytes:0,HTTPSendBytesDelta:0,HTTPRecvBytes:0,HTTPRecvBytesDelta:0},t.getRemoteAudioStats=function(e){var n={};for(var i in t.remoteStats){var o={},a=t.remoteStats[i];J(o,"End2EndDelay",a.peer_delay&&a.peer_delay.audio_delay),J(o,"TransportDelay",a.peer_delay&&a.peer_delay.e2e_delay),J(o,"PacketLossRate",a.peer_delay&&a.peer_delay.e2e_audio_lost_ratio_400ms),J(o,"RecvLevel",a.audioStats&&a.audioStats.audioOutputLevel),J(o,"RecvBitrate",a.audioRecvBitrate),J(o,"CodecType",a.audioStats&&a.audioStats.googCodecName),J(o,"MuteState",a.audioDisabled),J(o,"TotalFreezeTime",a.audioStats&&a.audioStats.audioTotalFreezeTime),J(o,"TotalPlayDuration",a.audioStats&&a.audioStats.audioTotalPlayDuration),n[i]=o}e&&e(n)},t.getLocalAudioStats=function(e){var n={};for(var i in t.localStats){var o={},a=t.localStats[i];J(o,"RecordingLevel",a.audioStats&&a.audioStats.audioInputLevel),J(o,"SendLevel",a.audioStats&&a.audioStats.totalAudioEnergy),J(o,"SamplingRate",a.audioStats&&a.audioStats.totalSamplesDuration),J(o,"SendBitrate",a.audioSendBitrate),J(o,"CodecType",a.audioStats&&a.audioStats.googCodecName),J(o,"MuteState",a.audioDisabled);var r=t.gatewayClient.localStreams[i];r&&r.isPlaying()&&J(o,"MuteState",r.userMuteAudio?"1":"0"),n[i]=o}e&&e(n)},t.getRemoteVideoStats=function(e){var n={};for(var i in t.remoteStats){var o={},a=t.remoteStats[i];J(o,"End2EndDelay",a.peer_delay&&a.peer_delay.video_delay),J(o,"TransportDelay",a.peer_delay&&a.peer_delay.e2e_delay),J(o,"PacketLossRate",a.peer_delay&&a.peer_delay.e2e_video_lost_ratio_400ms),J(o,"RecvBitrate",a.videoRecvBitrate),J(o,"RecvResolutionWidth",a.videoStats&&a.videoStats.googFrameWidthReceived),J(o,"RecvResolutionHeight",a.videoStats&&a.videoStats.googFrameHeightReceived),J(o,"RenderResolutionWidth",a.videoStats&&a.videoStats.renderRemoteWidth),J(o,"RenderResolutionHeight",a.videoStats&&a.videoStats.renderRemoteHeight),J(o,"RenderFrameRate",a.videoStats&&a.videoStats.googFrameRateOutput),J(o,"MuteState",a.videoDisabled),J(o,"TotalFreezeTime",a.videoStats&&a.videoStats.videoTotalFreezeTime),J(o,"TotalPlayDuration",a.videoStats&&a.videoStats.videoTotalPlayDuration),n[i]=o}e&&e(n)},t.getLocalVideoStats=function(e){var n={};for(var i in t.localStats){var o={},a=t.localStats[i];J(o,"TargetSendBitrate",a.videoTargetSendBitrate),J(o,"SendFrameRate",a.videoStats&&a.videoStats.googFrameRateSent),J(o,"SendBitrate",a.videoSendBitrate),J(o,"SendResolutionWidth",a.videoStats&&a.videoStats.googFrameWidthSent),J(o,"SendResolutionHeight",a.videoStats&&a.videoStats.googFrameHeightSent),J(o,"CaptureResolutionWidth",a.videoStats&&a.videoStats.renderLocalWidth),J(o,"CaptureResolutionHeight",a.videoStats&&a.videoStats.renderLocalHeight),J(o,"EncodeDelay",a.videoStats&&a.videoStats.googAvgEncodeMs),J(o,"MuteState",a.videoDisabled),J(o,"TotalFreezeTime",a.videoStats&&a.videoStats.videoTotalFreezeTime),J(o,"TotalDuration",a.videoStats&&a.videoStats.videoTotalPlayDuration),J(o,"CaptureFrameRate",a.videoStats&&a.videoStats.googFrameRateSent),n[i]=o,e&&e(n)}},t.getRemoteVideoQualityStats=function(e){var n={};for(var i in t.remoteStats){var o={},a=t.remoteStats[i];J(o,"videoReceiveDelay",a.videoStats&&a.videoStats.googCurrentDelayMs),J(o,"VideoFreezeRate",a.videoStats&&a.videoStats.videoFreezeRate),J(o,"FirstFrameTime",a.firstFrameTime),n[i]=o}e&&e(n)},t.getRemoteAudioQualityStats=function(e){var n={};for(var i in t.remoteStats){var o={},a=t.remoteStats[i];J(o,"audioReceiveDelay",a.audioStats&&a.audioStats.googCurrentDelayMs),J(o,"AudioFreezeRate",a.videoStats&&a.videoStats.videoFreezeRate),n[i]=o}e&&e(n)},t.getTransportStats=function(e){var n={},i={},o=t.gatewayClient.traffic_stats,a=o.peer_delay;if(J(n,"OutgoingAvailableBandwidth",t.gatewayClient.OutgoingAvailableBandwidth/1e3),J(n,"RTT",o&&o.access_delay),a){var r=!0,s=!1,d=void 0;try{for(var c,u=a[Symbol.iterator]();!(r=(c=u.next()).done);r=!0){var l=c.value;l.downlink_estimate_bandwidth&&(i[l.peer_uid]=l.downlink_estimate_bandwidth/1e3+"")}}catch(e){s=!0,d=e}finally{try{r||null==u.return||u.return()}finally{if(s)throw d}}}n.IncomingAvailableBandwidth=i,e&&e(n)},t.getSessionStats=function(e){var n={},i=t.gatewayClient.traffic_stats,o=t.gatewayClient.socket,a=0,r=0;for(var s in t.remoteStats)(d=t.remoteStats[s])&&d.videoStats&&d.videoStats.videoRecvBytesDelta&&(r+=parseInt(d.videoStats.videoRecvBytesDelta)),d&&d.audioStats&&d.audioStats.audioRecvBytesDelta&&(r+=parseInt(d.audioStats.audioRecvBytesDelta));for(var s in t.localStats){var d;(d=t.localStats[s])&&d.videoStats&&d.videoStats.videoSendBytesDelta&&(a+=parseInt(d.videoStats.videoSendBytesDelta)),d&&d.audioStats&&d.audioStats.audioSendBytesDelta&&(a+=parseInt(d.audioStats.audioSendBytesDelta))}var c=a+t.session.WSSendBytesDelta+t.session.HTTPSendBytesDelta,u=r+t.session.WSRecvBytesDelta+t.session.HTTPRecvBytesDelta,l=t.session.sendBytes+Object(fe.b)(),p=t.session.recvBytes+Object(fe.a)();t.gatewayClient.socket&&t.gatewayClient.socket.state===t.gatewayClient.CONNECTED&&(l+=o.getSendBytes(),p+=o.getRecvBytes());var f=1;i.peer_delay&&(f=i.peer_delay.length,f+=1),J(n,"Duration",o.getDuration()),J(n,"UserCount",f),J(n,"SendBytes",l),J(n,"RecvBytes",p),J(n,"SendBitrate",8*c/1e3),J(n,"RecvBitrate",8*u/1e3),e&&e(n)},t.isLocalVideoFreeze=function(e,t){var n=0,i=0;if(!e||!t)return!1;if(Object(p.isChrome)()||Object(p.isOpera)())n=e.googFrameRateInput,i=e.googFrameRateSent;else if(Object(p.isSafari)())n=parseInt(e.framerateMean),i=parseInt(e.framesEncoded)-parseInt(t.framesEncoded);else{if(!Object(p.isFireFox)())return!1;n=parseInt(e.framerateMean),i=parseInt(e.framesEncoded)-parseInt(t.framesEncoded)}return n>5&&i<3},t.isRemoteVideoFreeze=function(e,t){var n=0,i=0;if(!e||!t)return!1;if(Object(p.isChrome)()||Object(p.isOpera)())n=e.googFrameRateReceived,i=e.googFrameRateDecoded;else if(Object(p.isSafari)())n=e.framerateMean,i=parseInt(e.framesDecoded)-parseInt(t.framesDecoded);else{if(!Object(p.isFireFox)())return!1;n=parseInt(e.framesReceived)-parseInt(t.framesReceived),i=parseInt(e.framesDecoded)-parseInt(t.framesDecoded)}return n>5&&n<10&&i<3||n>10&&n<20&&i<4||n>20&&i<5},t.isAudioFreeze=function(e){if(Object(p.isChrome)()&&e){if(e.googDecodingPLC&&e.googDecodingPLCCNG&&e.googDecodingCTN)return(parseInt(e.googDecodingPLC)+parseInt(e.googDecodingPLCCNG))/parseInt(e.googDecodingCTN)>.2}else if((Object(p.isSafari)()||Object(p.isFireFox)())&&e.packetsLost&&e.packetsReceived)return parseInt(e.packetsLost)/(parseInt(e.packetsLost)+parseInt(e.packetsReceived))>.2;return!1},t.isAudioDecodeFailed=function(e){return!!((Object(p.isChrome)()||Object(p.isOpera)())&&e&&parseInt(e.bytesReceived)>0&&0===parseInt(e.googDecodingNormal))},t.networkQualityTimer=setInterval(function(){var e=t.gatewayClient.traffic_stats;t.gatewayClient.dispatchEvent({type:"network-quality",uplinkNetworkQuality:t.networkQualityTrans(e.uplink_network_quality),downlinkNetworkQuality:t.networkQualityTrans(e.downlink_network_quality)})},2e3),t.networkQualityTrans=function(e){return e>=0&&e<.17?1:e>=.17&&e<.36?2:e>=.36&&e<.59?3:e>=.59&&e<=1?4:e>1?5:0},t.getStatsTimer=setInterval(function(){var e=t.gatewayClient.traffic_stats,n=Date.now();t.gatewayClient.dispatchEvent({type:"_testException"}),Object.keys(t.localStats).length&&t.exceptionMonitor.setLocalStats(t.localStats),Object.keys(t.remoteStats).length&&t.exceptionMonitor.setRemoteStats(t.remoteStats);var i={};Object.keys(t.gatewayClient.remoteStreams).forEach(function(o){var a=t.gatewayClient.remoteStreams[o],r=t.remoteStats[o],s={id:o,updatedAt:n};i[o]=s,s.firstFrameTime=a.firstFrameTime,r?(s.audioTotalPlayDuration=r.audioTotalPlayDuration+1,s.audioTotalFreezeTime=r.audioTotalFreezeTime,s.isAudioFreeze=!1,s.isAudioDecodeFailed=!1,s.videoTotalPlayDuration=r.videoTotalPlayDuration+1,s.videoTotalFreezeTime=r.videoTotalFreezeTime,s.isVideoFreeze=!1):(s.audioTotalPlayDuration=1,s.audioTotalFreezeTime=0,s.videoTotalPlayDuration=1,s.videoTotalFreezeTime=0);var d=e&&e.peer_delay&&e.peer_delay.find(function(e){return e.peer_uid==o});d&&(s.peer_delay=d),a&&(a.isPlaying()&&(s.audioDisabled=a.userMuteAudio?"1":"0",s.videoDisabled=a.userMuteVideo?"1":"0"),r&&r.peer_delay&&d&&r.peer_delay.stream_type!==d.stream_type&&t.gatewayClient.dispatchEvent({type:"streamTypeChange",uid:o,streamType:d.stream_type}),a.pc&&"established"==a.pc.state&&a.pc.getStats(function(e){if(s.pcStats=e,s.audioStats=e.find(function(e){return"audio"==e.mediaType&&(e.id.indexOf("_recv")>-1||e.id.toLowerCase().indexOf("inbound")>-1)}),s.videoStats=e.find(function(e){return"video"==e.mediaType&&(e.id.indexOf("_recv")>-1||e.id.toLowerCase().indexOf("inbound")>-1)}),r&&r.audioStats&&s.audioStats){var n=parseInt(s.audioStats.bytesReceived)-parseInt(r.audioStats.bytesReceived),i=parseInt(s.audioStats.googDecodingNormal)-parseInt(r.audioStats.googDecodingNormal);if(s.audioStats.audioRecvBytesDelta=n,s.audioStats.audioDecodingNormalDelta=i,t.session.recvBytes+=n,isFinite(n)&&s.audioStats.timestamp){var o=s.audioStats.timestamp.getTime()-r.audioStats.timestamp.getTime();s.audioRecvBitrate=Math.floor(8*n/o)}t.isAudioFreeze(s.audioStats)&&s.audioTotalPlayDuration>10&&(s.audioTotalFreezeTime++,s.isAudioFreeze=!0),t.isAudioDecodeFailed(s.audioStats)&&s.audioTotalPlayDuration>10&&(s.isAudioDecodeFailed=!0),s.audioStats.audioTotalFreezeTime=s.audioTotalFreezeTime,s.audioStats.audioTotalPlayDuration=s.audioTotalPlayDuration,s.audioStats.audioFreezeRate=Math.ceil(100*s.audioTotalFreezeTime/s.audioTotalPlayDuration)}if(r&&r.videoStats&&s.videoStats){var d=parseInt(s.videoStats.bytesReceived)-parseInt(r.videoStats.bytesReceived);s.videoStats.videoRecvBytesDelta=d,t.session.recvBytes+=d,isFinite(d)&&s.videoStats.timestamp&&(o=s.videoStats.timestamp.getTime()-r.videoStats.timestamp.getTime(),s.videoRecvBitrate=Math.floor(8*d/o)),t.isRemoteVideoFreeze(s.videoStats,r.videoStats)&&(s.videoTotalFreezeTime++,s.isVideoFreeze=!0),s.videoStats.videoTotalFreezeTime=s.videoTotalFreezeTime,s.videoStats.videoTotalPlayDuration=s.videoTotalPlayDuration,s.videoStats.videoFreezeRate=Math.ceil(100*s.videoTotalFreezeTime/s.videoTotalPlayDuration),s.videoStats.renderRemoteWidth=a.videoWidth||s.videoStats.googFrameWidthReceived,s.videoStats.renderRemoteHeight=a.videoHeight||s.videoStats.googFrameHeightReceived}}))}),t.remoteStats=i;var o={};if(Object.keys(t.gatewayClient.localStreams).forEach(function(e){var i=t.gatewayClient.localStreams[e],a=t.localStats[e],r={id:e,updatedAt:n};o[e]=r,a?(r.videoTotalPlayDuration=a.videoTotalPlayDuration+1,r.videoTotalFreezeTime=a.videoTotalFreezeTime,r.isVideoFreeze=!1):(r.videoTotalPlayDuration=1,r.videoTotalFreezeTime=0),i&&(i.isPlaying()&&(r.audioDisabled=i.userMuteAudio?"1":"0",r.videoDisabled=i.userMuteVideo?"1":"0"),i.video&&i.attributes.maxVideoBW?r.videoTargetSendBitrate=i.attributes.maxVideoBW:i.video&&i.screenAttributes&&(r.videoTargetSendBitrate=i.screenAttributes.maxVideoBW),i.pc&&"established"==i.pc.state&&i.pc.getStats(function(e){if(r.pcStats=e.reverse(),r.audioStats=e.find(function(e){return"audio"==e.mediaType&&(e.id.indexOf("_send")>-1||e.id.toLowerCase().indexOf("outbound")>-1)}),r.videoStats=e.find(function(e){return"video"==e.mediaType&&(e.id.indexOf("_send")>-1||e.id.toLowerCase().indexOf("outbound")>-1)}),r.audioStats&&a&&a.audioStats){var n=parseInt(r.audioStats.bytesSent)-parseInt(a.audioStats.bytesSent);if(r.audioStats.audioSendBytesDelta=n,t.session.sendBytes+=n,isFinite(n)&&r.audioStats.timestamp){var o=r.audioStats.timestamp.getTime()-a.audioStats.timestamp.getTime();r.audioSendBitrate=Math.floor(8*n/o)}}if(r.videoStats&&a&&a.videoStats){var s=parseInt(r.videoStats.bytesSent)-parseInt(a.videoStats.bytesSent);r.videoStats.videoSendBytesDelta=s,t.session.sendBytes+=s,isFinite(s)&&r.videoStats.timestamp&&(o=r.videoStats.timestamp.getTime()-a.videoStats.timestamp.getTime(),r.videoSendBitrate=Math.floor(8*s/o)),t.isLocalVideoFreeze(r.videoStats,a.videoStats)&&(r.videoTotalFreezeTime++,r.isVideoFreeze=!0),r.videoStats.videoTotalFreezeTime=r.videoTotalFreezeTime,r.videoStats.videoTotalPlayDuration=r.videoTotalPlayDuration,r.videoStats.videoFreezeRate=Math.ceil(100*r.videoTotalFreezeTime/r.videoTotalPlayDuration),r.videoStats.renderLocalWidth=i.videoWidth||r.videoStats.googFrameWidthSent,r.videoStats.renderLocalHeight=i.videoHeight||r.videoStats.googFrameHeightSent}}))}),t.localStats=o,t.session.HTTPSendBytesDelta=Object(fe.b)()-t.session.HTTPSendBytes,t.session.HTTPSendBytes=Object(fe.b)(),t.session.HTTPRecvBytesDelta=Object(fe.a)()-t.session.HTTPRecvBytes,t.session.HTTPRecvBytes=Object(fe.a)(),t.gatewayClient.socket&&t.gatewayClient.socket.state===t.gatewayClient.CONNECTED){var a=t.gatewayClient.socket;t.session.WSSendBytesDelta=a.getSendBytes()-t.session.WSSendBytes,t.session.WSSendBytes=a.getSendBytes(),t.session.WSRecvBytesDelta=a.getRecvBytes()-t.session.WSRecvBytes,t.session.WSRecvBytes=a.getRecvBytes()}},1e3),t.gatewayClient.on("join",function(){t.session={sendBytes:0,recvBytes:0,WSSendBytes:0,WSSendBytesDelta:0,WSRecvBytes:0,WSRecvBytesDelta:0,HTTPSendBytes:0,HTTPSendBytesDelta:0,HTTPRecvBytes:0,HTTPRecvBytesDelta:0}}),t}(t.gatewayClient),t.configDistributManager=function(e){var t={};return t.client=e,t.client.on("config-distribute",function(n){var o=n.joinInfo,r=n.config;if(r){re(r.uploadLog)||(Object(i.setParameter)("UPLOAD_LOG",r.uploadLog),a.b.reportApiInvoke(o.sid,{name:"_configDistribute",options:{feature:"uploadLog",value:r.uploadLog}})()),re(r.dualStream)||(e.isDualStream=r.dualStream,a.b.reportApiInvoke(o.sid,{name:"_configDistribute",options:{feature:"dualStream",value:r.dualStream}})()),re(r.streamFallbackOption)||t.client.on("stream-subscribed",function(e){var n=e.stream;n?(t.client.gatewayClient.setStreamFallbackOption(n,r.streamFallbackOption),a.b.reportApiInvoke(o.sid,{name:"_configDistribute",options:{feature:"streamFallbackOption",value:r.streamFallbackOption,streamId:n.getId()}})()):a.b.reportApiInvoke(o.sid,{name:"_configDistribute",options:{feature:"streamFallbackOption",value:r.streamFallbackOption,streamId:n.getId(),err:"invalid stream"}})()});try{Object.keys(r).map(function(e){return Object(i.setParameter)(e,r[e])})}catch(e){}}}),t}(t),re(e.turnServer)||t.setTurnServer(e.turnServer),re(e.proxyServer)||t.setProxyServer(e.proxyServer),"live"===t.mode&&(t.gatewayClient.role="audience"),"rtc"===t.mode&&(t.gatewayClient.role="host"),t.on("onMultiIP",function(e){t.gatewayClient.closeGateway(),t.gatewayClient.socket=void 0,t.gatewayClient.hasChangeBGPAddress=!0,t.joinInfo.multiIP=e.arg.option,t.gatewayClient.state=De.CONNECTING,be(t.joinInfo,function(e){o.default.info("[".concat(t.clientId,"] Joining channel: ").concat(t.channel)),t.joinInfo.cid=e.cid,t.joinInfo.uid=e.uid,t.joinInfo.uni_lbs_ip=e.uni_lbs_ip,t.joinInfo.gatewayAddr=e.gateway_addr,t.onSuccess?t.gatewayClient.join(t.joinInfo,t.key,function(e){o.default.info("[".concat(t.clientId,"] Join channel ").concat(t.channel," success"));var n=t.onSuccess;t.onSuccess=null,t.onFailure=null,n(e)},t.onFailure):(t.gatewayClient.joinInfo=I()({},t.joinInfo),t.gatewayClient.rejoin())},t.onFailure)}),t.on("rejoin-start",function(){t._renewSession(),a.b.sessionInit(e.sessionId,{lts:(new Date).getTime(),extend:{rejoin:!0},cname:t.channel,appid:e.appId,mode:e.mode,succ:!0})}),t.on("recover",function(){t._renewSession(),a.b.sessionInit(e.sessionId,{lts:(new Date).getTime(),extend:{recover:!0},cname:t.channel,appid:e.appId,mode:e.mode,succ:!0})}),t.on("rejoin",function(){var e=2===t.highStreamState?2:0;t.highStream&&0===e&&(o.default.info("[".concat(t.clientId,"] publish after rejoin")),t.highStreamState=2,t.lowStreamState=2,t.publish(t.highStream,function(e){e&&o.default.info("[".concat(t.clientId,"] "),e)}))}),t.on("streamPublished",function(e){t.hasPublished||(t.hasPublished=!0,t.gatewayClient.dispatchEvent(d({type:"stream-published",stream:e.stream})))}),t.on("pubP2PLost",function(e){o.default.debug("[".concat(t.clientId,"] Start reconnect local peerConnection: ").concat(t.highStream.getId())),t.gatewayClient.dispatchEvent({type:"stream-reconnect-start",uid:t.highStream.getId()}),1===t.highStreamState&&(t.highStreamState=0,t.lowStreamState=0),t._unpublish(t.highStream,function(){t._publish(t.highStream,function(){o.default.debug("[".concat(t.clientId,"] Reconnect local peerConnection success: ").concat(t.highStream.getId())),t.gatewayClient.dispatchEvent({type:"stream-reconnect-end",uid:t.highStream.getId(),success:!0,reason:""})},function(e){o.default.debug("[".concat(t.clientId,"] Reconnect local peerConnection failed: ").concat(e)),t.gatewayClient.dispatchEvent({type:"stream-reconnect-end",uid:t.highStream.getId(),success:!1,reason:e})})},function(e){o.default.debug("[".concat(t.clientId,"] Reconnect local peerConnection failed: ").concat(e)),t.gatewayClient.dispatchEvent({type:"stream-reconnect-end",uid:t.highStream.getId(),success:!1,reason:e})})}),t.on("subP2PLost",function(e){o.default.debug("[".concat(t.clientId,"] Start reconnect remote peerConnection: ").concat(e.stream.getId())),t.gatewayClient.dispatchEvent({type:"stream-reconnect-start",uid:e.stream.getId()}),t.gatewayClient.unsubscribe(e.stream,function(){t.gatewayClient.subscribe(e.stream,function(){o.default.debug("[".concat(t.clientId,"] Reconnect remote peerConnection success: ").concat(e.stream.getId())),t.gatewayClient.dispatchEvent({type:"stream-reconnect-end",uid:e.stream.getId(),success:!1,reason:""})},function(n){o.default.debug("[".concat(t.clientId,"] Reconnect remote peerConnection failed: "),n),t.gatewayClient.dispatchEvent({type:"stream-reconnect-end",uid:e.stream.getId(),success:!1,reason:n})})},function(n){o.default.debug("[".concat(t.clientId,"] \" + 'Reconnect remote peerConnection failed: "),n),t.gatewayClient.dispatchEvent({type:"stream-reconnect-end",uid:e.stream.getId(),success:!1,reason:n})})}),xe.on("networkTypeChanged",function(e){t.gatewayClient&&t.gatewayClient.dispatchEvent(e);var n=I()({},e,{type:"network-type-changed"});t.gatewayClient.dispatchEvent(n)}),K.on("recordingDeviceChanged",function(e){t.gatewayClient&&t.gatewayClient.dispatchEvent(e);var n=I()({},e,{type:"recording-device-changed"});t.gatewayClient.dispatchEvent(n)}),K.on("playoutDeviceChanged",function(e){t.gatewayClient&&t.gatewayClient.dispatchEvent(e);var n=I()({},e,{type:"playout-device-changed"});t.gatewayClient.dispatchEvent(n)}),K.on("cameraChanged",function(e){t.gatewayClient&&t.gatewayClient.dispatchEvent(e);var n=I()({},e,{type:"camera-changed"});t.gatewayClient.dispatchEvent(n)}),t.gatewayClient.on("streamTypeChange",function(n){var i=I()({},n,{type:"stream-type-changed"});t.gatewayClient.dispatchEvent(i),a.b.reportApiInvoke(e.sessionId,{name:"streamTypeChange"})(null,JSON.stringify(n))}),t},Fe={width:640,height:360,videoBitrate:400,videoFramerate:15,lowLatency:!1,audioSampleRate:48e3,audioBitrate:48,audioChannels:1,videoGop:30,videoCodecProfile:100,userCount:0,userConfigExtraInfo:{},backgroundColor:0,transcodingUsers:[]},Be={width:0,height:0,videoGop:30,videoFramerate:15,videoBitrate:400,audioSampleRate:44100,audioBitrate:48,audioChannels:1},Ue=K.getDevices,je=F;t.default={TranscodingUser:{uid:0,x:0,y:0,width:0,height:0,zOrder:0,alpha:1},LiveTranscoding:Fe,createClient:function(e){var t=a.b.reportApiInvoke(null,{name:"createClient",options:arguments,tag:"tracer"});(e=I()({},e||{})).codec||(e.codec=function(e){switch(e){case"h264_interop":return"h264";default:return"vp8"}}(e.mode));var n=function(e){return ce.includes(e.mode)?ue.includes(e.codec)?"h264_interop"==e.mode&&"h264"!==e.codec&&A.CLIENT_MODE_CODEC_MISMATCH:A.INVALID_CLIENT_CODEC:A.INVALID_CLIENT_MODE}(e);if(n)throw o.default.error("Invalid parameter setting MODE: ".concat(e.mode," CODEC: ").concat(e.codec," ERROR ").concat(n)),t(n),new Error(n);return o.default.info("Creating client, MODE: ".concat(e.mode," CODEC: ").concat(e.codec)),function(e){switch(e.mode){case"interop":case"h264_interop":e.mode="live";break;case"web-only":e.mode="rtc"}}(e),t(null,e),Ve(e)},createStream:function(e){var t=a.b.reportApiInvoke(null,{name:"createStream",options:arguments,tag:"tracer"});q(e,"StreamSpec");var n=e.streamID,i=e.audio,r=e.video,s=e.screen,d=(e.audioSource,e.videoSource,e.cameraId),c=e.microphoneId,u=e.mirror,l=e.extensionId,p=e.mediaSource,f=e.audioProcessing;if(!re(n)&&!Object(G.c)(n)&&!Z(n,1,255))throw new Error("[String streamID] Length of the string: [1,255]. ASCII characters only. [Number streamID] The value range is [0,10000]");if($(i,"audio"),$(r,"video"),re(s)||$(s,"screen"),re(d)||Q(d,"cameraId",0,255,!1),re(c)||Q(c,"microphoneId",0,255,!1),re(l)||Q(l,"extensionId"),re(p)||Y(p,"mediaSource",["screen","application","window"]),re(u)||$(u,"mirror"),!re(f)){var m=f.AGC,g=f.AEC,v=f.ANS;re(m)||$(m,"AGC"),re(g)||$(g,"AEC"),re(v)||$(v,"ANS")}o.default.debug("Create stream");var S=se(e);return t(),S},Logger:o.default,getDevices:Ue,getScreenSources:je,getParameter:i.getParameter,setParameter:i.setParameter,checkSystemRequirements:function(){var e=a.b.reportApiInvoke(null,{name:"checkSystemRequirements",options:arguments,tag:"tracer"}),t=window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection,n=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.msGetUserMedia||navigator.mozGetUserMedia||navigator.mediaDevices&&navigator.mediaDevices.getUserMedia,i=window.WebSocket,r=!!t&&!!n&&!!i,s=!1;o.default.debug(p.getBrowserInfo(),"isAPISupport:"+r),p.isChrome()&&p.getBrowserVersion()>=58&&"iOS"!==p.getBrowserOS()&&(s=!0),p.isFireFox()&&p.getBrowserVersion()>=56&&(s=!0),p.isOpera()&&p.getBrowserVersion()>=45&&(s=!0),p.isSafari()&&p.getBrowserVersion()>=11&&(s=!0),(p.isWeChatBrowser()||p.isQQBrowser())&&"iOS"!==p.getBrowserOS()&&(s=!0),p.isSupportedPC()||p.isSupportedMobile()||(s=!1);var d=r&&s;return e(null,d),d},getSupportedCodec:de.getSupportedCodec,VERSION:i.VERSION,BUILD:i.BUILD,AUDIO_SAMPLE_RATE_32000:32e3,AUDIO_SAMPLE_RATE_44100:44100,AUDIO_SAMPLE_RATE_48000:48e3,VIDEO_CODEC_PROFILE_BASELINE:66,VIDEO_CODEC_PROFILE_MAIN:77,VIDEO_CODEC_PROFILE_HIGH:100,REMOTE_VIDEO_STREAM_HIGH:0,REMOTE_VIDEO_STREAM_LOW:1,REMOTE_VIDEO_STREAM_MEDIUM:2}}]).default});
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/common.css b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/common.css
new file mode 100644
index 00000000..f83d3450
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/common.css
@@ -0,0 +1,8 @@
+/*!
+ * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;font-display:auto;src:url(webfonts/assets/fa-solid-900.eot);src:url(webfonts/assets/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(webfonts/assets/fa-solid-900.woff2) format("woff2"),url(webfonts/assets/fa-solid-900.woff) format("woff"),url(webfonts/assets/fa-solid-900.ttf) format("truetype"),url(webfonts/assets/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:Font Awesome\ 5 Free;font-weight:900}
+/*!
+ * Font Awesome Free 5.8.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ */.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s linear infinite}.fa-pulse{animation:fa-spin 1s steps(8) infinite}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}body,html{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding:0;height:100%;background:#f8f9fa}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}a{text-decoration:none}a,a:focus,a:hover{color:#000}.sections-container{margin-top:15px;width:100%;position:absolute}hr{width:1068px;display:block;border:none;border-bottom:1px solid #e4e4e4;margin:20px 0}.navbar{z-index:99;position:fixed;width:100%;display:flex;flex-direction:row;align-items:center;height:70px;background:#fff;border:1px solid #eee}.navbar .menu-item>a:hover{cursor:pointer;color:#006ad8}.navbar .nav-title{color:#333;width:188px;height:21px;font-size:18px;line-height:22px;letter-spacing:.5px}.navbar .nav-item:first-child{flex:1;display:flex;justify-content:center;align-items:center}.navbar .nav-item:first-child:before{margin-right:11px;width:48px;height:48px;content:" ";background:url(webfonts/assets/logo.png) no-repeat;display:block;background-position:50%;background-repeat:no-repeat;background-size:contain}.navbar .nav-item:last-child{flex:1;display:grid;grid-column:4;grid-gap:51px;grid-template-columns:repeat(5,58px);width:58px;height:20px;font-size:14px;font-weight:400;color:#333;line-height:20px}.section-container{margin-top:15px}.section-container .section-title{position:relative;display:flex;height:33px;font-size:24px;font-weight:500;color:#333;line-height:33px;justify-content:center;align-items:center;margin-bottom:33px}.section-container .section-title .title{min-width:99px;padding:0 31px;margin:0 28px;background:#f8f9fa;z-index:22}.section-container .section-title hr{position:absolute;top:-3px}.section-container .select-items{width:330px;border:1px solid #e4e4e4}.section-container .select-item:hover{background:#999;color:#fff}.section-container .section-body{position:relative;display:flex;flex:1;flex-direction:column;align-items:center}.hide{display:none}.section-form{flex-direction:column;display:flex;align-items:flex-start}.section-form input:focus{outline:none}.section-form .form-row-one{margin-top:20px;margin-left:25px;display:flex;justify-content:center}.section-form .form-row-one .form-item{width:1080px}.section-form .form-row-one .form-item .one-row{min-width:1031px}.section-form .form-row{margin-left:25px;display:grid;grid-gap:20px;grid-template-columns:repeat(3,1fr);grid-template-rows:auto}.section-form .form-row.button-list{margin-left:25px;display:grid;grid-gap:10px;grid-template-columns:repeat(5,1fr);grid-template-rows:auto}.section-form .form-row.button-list .btn{user-select:none;margin-right:10px;cursor:pointer;color:#006ad8;display:inline-block;box-sizing:border-box;text-align:center;line-height:34px;width:160px;height:34px;border:1px solid #ccc;font-size:14px;font-weight:400;border-radius:2px}.section-form .form-row.button-list .btn:hover{background:#006ad8;font-weight:400;color:#fff;border:1px solid #006ad8}.section-form .form-row.button-list .btn.leave{color:#666}.section-form .form-row.button-list .btn.leave:hover{color:#fff}.section-form .form-item{flex-direction:column;display:flex}.section-form .form-item label{width:193px;height:20px;font-size:14px;font-weight:400;color:#666;line-height:20px;padding:10px}.section-form .form-item input{border-radius:2px;border:1px solid #d3d3d3;font-size:13px;font-weight:400;color:#000;line-height:18px;width:330px;height:34px;box-sizing:border-box}.section-form .form-item input :-moz-placeholder,.section-form .form-item input :-ms-input-placeholder,.section-form .form-item input ::-moz-placeholder,.section-form .form-item input ::-webkit-input-placeholder{color:#999}.section-form .form-item input{padding:0 .5rem}.video-grid{margin-left:25px;display:grid;grid-gap:20px;grid-template-columns:repeat(2,auto);grid-template-rows:auto}#local_stream,#local_video_info{width:480px;height:320px}#local_stream{position:relative}#local_video_info{position:absolute}.video{margin:auto auto 25px;position:relative;cursor:pointer}.video .video-placeholder{background:url(webfonts/assets/video-placeholder.png) no-repeat;background-position:50%;background-repeat:no-repeat;width:94px;background-color:#666;background-size:94px 115px}.video #local_video_info{position:absolute;top:0;z-index:22;color:#fff}.video #local_video_info .uid{display:inline-block;margin:10px;position:absolute;bottom:0}.video .remote-video{height:320px;width:200px;position:absolute;top:0;z-index:999}.video .remote-video>div{width:230px;height:130px}.uid{z-index:999;margin:10px;color:#fff;position:absolute}.video-info{position:absolute}.video-info,.video-view{width:480px;height:320px}.video-view{position:relative}.notice{top:-50px;height:65px;display:flex;flex:1;width:100%;text-align:center;position:absolute;border-radius:3px}.notice-alert{border-radius:.25rem;color:#004085;background-color:#cce5ff;border:1px solid #b8daff}.danger-alert,.notice-alert{box-sizing:border-box;position:relative;padding:.75rem 1.25rem;margin-bottom:1rem}.danger-alert{border-radius:.25rem;color:#721c24;background-color:#f8d7da;border:1px solid #f5c6cb}.flex{flex:1;width:100%}.custom-select{user-select:none;position:relative;cursor:pointer;width:330px;height:34px;border-radius:2px;border:1px solid #d3d3d3;background:#fff;font-size:14px;font-weight:400;color:#333;box-sizing:border-box;line-height:20px}.custom-select>span{display:none}.custom-select .select-chevron{position:absolute;right:10px;top:9px}.custom-select .select-items{margin-top:.1rem;left:-1px;box-sizing:border-box;position:relative}.custom-select .item{height:32px;line-height:32px}.custom-select .item,.custom-select .select-item{background:#fff;padding:0 .5rem;width:328px;box-sizing:border-box;display:block;border-radius:2px}.custom-select .select-item{height:34px;line-height:34px}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/common.js b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/common.js
new file mode 100644
index 00000000..6fb42a41
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/common.js
@@ -0,0 +1,430 @@
+console.log("agora sdk version: " + AgoraRTC.VERSION + " compatible: " + AgoraRTC.checkSystemRequirements());
+
+var Toast = {
+ info: function (msg) {
+ Toastify({
+ text: msg,
+ backgroundColor: "#3498db"
+ }).showToast();
+ },
+ notice: function (msg) {
+ Toastify({
+ text: msg,
+ backgroundColor: "#07bc0c"
+ }).showToast();
+ },
+ error: function (msg) {
+ Toastify({
+ text: msg,
+ backgroundColor: "#e74c3c"
+ }).showToast();
+ }
+}
+
+function validator(formData, fields) {
+ var keys = Object.keys(formData);
+ for (let key in keys) {
+ var keyName = keys[key];
+ if (fields.indexOf(keyName) != -1) {
+ if (!formData[keyName]) {
+ Toast.error("Please Enter " + keyName);
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+function serializeFormData() {
+ var formData = $("#form").serializeArray();
+ let obj = {}
+ for (var item in formData) {
+ var key = formData[item].name;
+ var val = formData[item].value;
+ obj[key] = val;
+ }
+ return obj;
+}
+
+function addView (id) {
+ if (!$("#" + id)[0]) {
+ $("", {
+ id: "remote_video_" + id,
+ class: "video-view",
+ }).appendTo("#video");
+ }
+}
+
+function removeView (id) {
+ if ($("#remote_video_" + id)[0]) {
+ $("#remote_video_"+id).remove();
+ }
+}
+
+function getDevices (next) {
+ AgoraRTC.getDevices(function (items) {
+ items.filter(function (item) {
+ return ['audioinput', 'videoinput'].indexOf(item.kind) !== -1
+ })
+ .map(function (item) {
+ return {
+ name: item.label,
+ value: item.deviceId,
+ kind: item.kind,
+ }
+ });
+ var videos = [];
+ var audios = [];
+ for (var i = 0; i < items.length; i++) {
+ var item = items[i];
+ if ('videoinput' == item.kind) {
+ var name = item.label;
+ var value = item.deviceId;
+ if (!name) {
+ name = "camera-" + videos.length;
+ }
+ videos.push({
+ name: name,
+ value: value,
+ kidn: item.kind
+ });
+ }
+ if ('audioinput' == item.kind) {
+ var name = item.label;
+ var value = item.deviceId;
+ if (!name) {
+ name = "microphone-" + audios.length;
+ }
+ audios.push({
+ name: name,
+ value: value,
+ kidn: item.kind
+ });
+ }
+ }
+ next({videos: videos, audios: audios});
+ });
+}
+
+var rtc = {
+ client: null,
+ joined: false,
+ published: false,
+ localStream: null,
+ remoteStreams: [],
+ params: {}
+};
+
+function handleEvents (rtc) {
+ // Occurs when an error message is reported and requires error handling.
+ rtc.client.on("error", (err) => {
+ console.log(err)
+ })
+ // Occurs when the peer user leaves the channel; for example, the peer user calls Client.leave.
+ rtc.client.on("peer-leave", function (evt) {
+ var id = evt.uid;
+ console.log("id", evt);
+ if (id != rtc.params.uid) {
+ removeView(id);
+ }
+ Toast.notice("peer leave")
+ console.log('peer-leave', id);
+ })
+ // Occurs when the local stream is published.
+ rtc.client.on("stream-published", function (evt) {
+ Toast.notice("stream published success")
+ console.log("stream-published");
+ })
+ // Occurs when the remote stream is added.
+ rtc.client.on("stream-added", function (evt) {
+ var remoteStream = evt.stream;
+ var id = remoteStream.getId();
+ Toast.info("stream-added uid: " + id)
+ if (id !== rtc.params.uid) {
+ rtc.client.subscribe(remoteStream, function (err) {
+ console.log("stream subscribe failed", err);
+ })
+ }
+ console.log('stream-added remote-uid: ', id);
+ });
+ // Occurs when a user subscribes to a remote stream.
+ rtc.client.on("stream-subscribed", function (evt) {
+ var remoteStream = evt.stream;
+ var id = remoteStream.getId();
+ rtc.remoteStreams.push(remoteStream);
+ addView(id);
+ remoteStream.play("remote_video_" + id, {fit: "cover", muted: true});
+ Toast.info('stream-subscribed remote-uid: ' + id);
+ console.log('stream-subscribed remote-uid: ', id);
+ })
+ // Occurs when the remote stream is removed; for example, a peer user calls Client.unpublish.
+ rtc.client.on("stream-removed", function (evt) {
+ var remoteStream = evt.stream;
+ var id = remoteStream.getId();
+ Toast.info("stream-removed uid: " + id)
+ remoteStream.stop("remote_video_" + id);
+ rtc.remoteStreams = rtc.remoteStreams.filter(function (stream) {
+ return stream.getId() !== id
+ })
+ removeView(id);
+ console.log('stream-removed remote-uid: ', id);
+ })
+ rtc.client.on("onTokenPrivilegeWillExpire", function(){
+ //After requesting a new token
+ // rtc.client.renewToken(token);
+ Toast.info("onTokenPrivilegeWillExpire")
+ console.log("onTokenPrivilegeWillExpire")
+ });
+ rtc.client.on("onTokenPrivilegeDidExpire", function(){
+ //After requesting a new token
+ // client.renewToken(token);
+ Toast.info("onTokenPrivilegeDidExpire")
+ console.log("onTokenPrivilegeDidExpire")
+ })
+ // Occurs when the live streaming starts.
+ rtc.client.on("liveStreamingStarted", function (evt) {
+ Toast.info("liveStreamingStarted")
+ console.log("liveStreamingStarted", evt)
+ })
+ // Occurs when the live streaming fails.
+ rtc.client.on("liveStreamingFailed", function (evt) {
+ Toast.error("liveStreamingFailed")
+ console.log("liveStreamingFailed", evt)
+ })
+ // Occurs when the live streaming stops.
+ rtc.client.on("liveStreamingStopped", function (evt) {
+ Toast.info("liveStreamingStopped")
+ console.log("liveStreamingStopped", evt)
+ })
+ // Occurs when the live transcoding setting is updated.
+ rtc.client.on("liveTranscodingUpdated", function (evt) {
+ Toast.info("liveTranscodingUpdated")
+ console.log("liveTranscodingUpdated", evt)
+ })
+}
+
+function join (rtc, data, next) {
+ if (rtc.client) {
+ Toast.error("Your already create client");
+ return;
+ }
+
+ if (rtc.joined) {
+ Toast.error("Your already joined");
+ return;
+ }
+
+ /**
+ * A class defining the properties of the config parameter in the createClient method.
+ * Note:
+ * Ensure that you do not leave mode and codec as empty.
+ * Ensure that you set these properties before calling Client.join.
+ * You could find more detail here. https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html
+ **/
+ rtc.client = AgoraRTC.createClient({mode: 'rtc', codec: 'h264'});
+
+ rtc.params = data;
+
+ // handle AgoraRTC client event
+ handleEvents(rtc);
+
+ // init client
+ rtc.client.init(data.appID, function () {
+ console.log("init success");
+
+ // join client
+ rtc.client.join(data.token ? data.token : null, data.channel, data.uid, function (uid) {
+ Toast.notice("join channel: " + data.channel + " success, uid: " + uid);
+ console.log("join channel: " + data.channel + " success, uid: " + uid);
+ rtc.joined = true;
+
+
+ // create local stream
+ rtc.localStream = AgoraRTC.createStream({
+ streamID: data.uid,
+ audio: true,
+ video: true,
+ screen: false,
+ microphoneId: data.microphoneId,
+ cameraId: data.cameraId
+ })
+
+ // init local stream
+ rtc.localStream.init(function () {
+ console.log("init local stream success");
+ // play stream with html element id "local_stream"
+ rtc.localStream.play("local_stream")
+
+ // run callback
+ if (next) {
+ next(rtc)
+ }
+ }, function (err) {
+ console.error("init local stream failed ", err);
+ })
+ }, function(err) {
+ console.error("client join failed", err)
+ })
+ }, (err) => {
+ console.error(err);
+ });
+}
+
+function publish (rtc) {
+ if (!rtc.client) {
+ Toast.error("Please Create Channel First");
+ return;
+ }
+ if (rtc.published) {
+ Toast.error("Your already published");
+ return;
+ }
+ var oldState = rtc.published;
+
+ // publish localStream
+ rtc.client.publish(rtc.localStream, function (err) {
+ rtc.published = oldState;
+ console.log("publish failed");
+ Toast.error("publish failed")
+ console.error(err);
+ })
+ Toast.info("publish")
+ rtc.published = true
+}
+
+function unpublish (rtc) {
+ if (!rtc.client) {
+ Toast.error("Please Create Channel First");
+ return;
+ }
+ if (!rtc.published) {
+ Toast.error("Your didn't unpublished");
+ return;
+ }
+ var oldState = rtc.published;
+ rtc.client.unpublish(rtc.localStream, function (err) {
+ rtc.published = oldState;
+ console.log("unpublish failed");
+ Toast.error("unpublish failed")
+ console.error(err);
+ })
+ Toast.info("unpublish")
+ rtc.published = false;
+}
+
+function leave (rtc) {
+ if (!rtc.client) {
+ Toast.error("Please Join First!");
+ return;
+ }
+ if (!rtc.joined) {
+ Toast.error("You are not in channel");
+ return;
+ }
+ // leave channel
+ rtc.client.leave(function () {
+ // close stream
+ rtc.localStream.close();
+ // stop stream
+ rtc.localStream.stop();
+ while (rtc.remoteStreams.length > 0) {
+ var stream = rtc.remoteStreams.shift();
+ var id = stream.getId()
+ stream.stop();
+ remoteView(id);
+ }
+ rtc.localStream = null;
+ rtc.remoteStreams = [];
+ rtc.client = null;
+ console.log("client leaves channel success");
+ rtc.published = false;
+ rtc.joined = false;
+ Toast.notice("leave success")
+ }, function (err) {
+ console.log("channel leave failed");
+ Toast.error("leave success")
+ console.error(err);
+ })
+}
+
+function startLiveStreaming (rtc) {
+ var uid = rtc.params.uid;
+ var liveTranscoding = {
+ "180p": {
+ width: 320,
+ height: 180,
+ videoBitrate: 140,
+ videoFramerate: 15,
+ lowLatency: false,
+ audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
+ audioBitrate: 48,
+ audioChannels: 1,
+ videoGop: 30,
+ videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
+ userCount: 1,
+ backgroundColor: 0x000000,
+ transcodingUsers: [{
+ uid: uid,
+ alpha: 1,
+ width: 10,
+ height: 10,
+ zOrder: 1,
+ x: 10,
+ y: 10
+ }],
+ },
+ "360p": {
+ width: 640,
+ height: 360,
+ videoBitrate: 400,
+ videoFramerate: 30,
+ lowLatency: false,
+ audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
+ audioBitrate: 48,
+ audioChannels: 1,
+ videoGop: 30,
+ videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
+ userCount: 1,
+ backgroundColor: 0x000000,
+ transcodingUsers: [{
+ uid: uid,
+ alpha: 1,
+ width: 10,
+ height: 10,
+ zOrder: 1,
+ x: 10,
+ y: 10
+ }],
+ },
+ "720p": {
+ width: 1280,
+ height: 720,
+ videoBitrate: 1130,
+ videoFramerate: 24,
+ lowLatency: false,
+ audioSampleRate: AgoraRTC.AUDIO_SAMPLE_RATE_48000,
+ audioBitrate: 48,
+ audioChannels: 1,
+ videoGop: 30,
+ videoCodecProfile: AgoraRTC.VIDEO_CODEC_PROFILE_HIGH,
+ userCount: 1,
+ backgroundColor: 0x000000,
+ transcodingUsers: [{
+ uid: uid,
+ alpha: 1,
+ width: 10,
+ height: 10,
+ zOrder: 1,
+ x: 10,
+ y: 10
+ }],
+ }
+ }
+ var transcodingConfig = liveTranscoding[rtc.params.resolution];
+ rtc.client.setLiveTranscoding(transcodingConfig);
+ rtc.client.startLiveStreaming(rtc.params.url);
+}
+
+function stopLiveStreaming (rtc) {
+ rtc.client.stopLiveStreaming(rtc.params.url);
+}
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/mute48.png b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/mute48.png
deleted file mode 100644
index 64705134..00000000
Binary files a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/mute48.png and /dev/null differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/sound48.png b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/sound48.png
deleted file mode 100644
index c8d6ea30..00000000
Binary files a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/sound48.png and /dev/null differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.eot
new file mode 100644
index 00000000..4f991ad3
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.svg
new file mode 100644
index 00000000..c5f544c7
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.svg
@@ -0,0 +1,3452 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.ttf
new file mode 100644
index 00000000..8836d9ff
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.woff
new file mode 100644
index 00000000..d65148db
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.woff2
new file mode 100644
index 00000000..e2bfe667
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-brands-400.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.eot
new file mode 100644
index 00000000..f9c3418a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.svg
new file mode 100644
index 00000000..38b66718
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.svg
@@ -0,0 +1,803 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.ttf
new file mode 100644
index 00000000..b4abb3df
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.woff
new file mode 100644
index 00000000..b7414354
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.woff2
new file mode 100644
index 00000000..7faee563
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-regular-400.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.eot b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.eot
new file mode 100644
index 00000000..bf4fd60a
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.eot differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.svg b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.svg
new file mode 100644
index 00000000..35b78661
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.svg
@@ -0,0 +1,4527 @@
+
+
+
+
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.ttf b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.ttf
new file mode 100644
index 00000000..9821bea3
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.ttf differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.woff b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.woff
new file mode 100644
index 00000000..49325538
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.woff differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.woff2 b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.woff2
new file mode 100644
index 00000000..92c4d57c
Binary files /dev/null and b/One-to-One-Video/Agora-Web-Tutorial-1to1/assets/webfonts/fa-solid-900.woff2 differ
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/cdn.html b/One-to-One-Video/Agora-Web-Tutorial-1to1/cdn.html
index 33ad35a1..017b2052 100644
--- a/One-to-One-Video/Agora-Web-Tutorial-1to1/cdn.html
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/cdn.html
@@ -1,273 +1,170 @@
-
+
+
-Agora Web Sample
-
-
-
+
+
+
+ CDN StartLiveStreaming
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ $("#leave").on("click", function () {
+ console.log("leave")
+ var params = serializeFormData();
+ if (validator(params, fields)) {
+ leave(rtc);
+ }
+ })
+ })
+
-
+
+
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/index.html b/One-to-One-Video/Agora-Web-Tutorial-1to1/index.html
index 0bb537fd..5300c09b 100644
--- a/One-to-One-Video/Agora-Web-Tutorial-1to1/index.html
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/index.html
@@ -1,226 +1,130 @@
-
+
+
-Agora Web Sample
-
-
-
+
+
+
+ Basic Communication
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ $("#leave").on("click", function () {
+ console.log("leave")
+ var params = serializeFormData();
+ if (validator(params, fields)) {
+ leave(rtc);
+ }
+ })
+ })
+
-
+
+
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/bootstrap.min.css b/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/bootstrap.min.css
deleted file mode 100644
index cd1c616a..00000000
--- a/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/bootstrap.min.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*!
- * Bootstrap v3.3.4 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px \9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px)and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px)and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/toastify.js b/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/toastify.js
new file mode 100644
index 00000000..81babb39
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/toastify.js
@@ -0,0 +1,8 @@
+/**
+ * Minified by jsDelivr using Terser v3.14.1.
+ * Original file: /npm/toastify-js@1.5.0/src/toastify.js
+ *
+ * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
+ */
+!function(t,o){"object"==typeof module&&module.exports?module.exports=o():t.Toastify=o()}(this,function(t){var o=function(t){return new o.lib.init(t)};function i(t,o){return!(!t||"string"!=typeof o)&&!!(t.className&&t.className.trim().split(/\s+/gi).indexOf(o)>-1)}return o.lib=o.prototype={toastify:"1.5.0",constructor:o,init:function(t){return t||(t={}),this.options={},this.toastElement=null,this.options.text=t.text||"Hi there!",this.options.duration=t.duration||3e3,this.options.selector=t.selector,this.options.callback=t.callback||function(){},this.options.destination=t.destination,this.options.newWindow=t.newWindow||!1,this.options.close=t.close||!1,this.options.gravity="bottom"==t.gravity?"toastify-bottom":"toastify-top",this.options.positionLeft=t.positionLeft||!1,this.options.backgroundColor=t.backgroundColor,this.options.avatar=t.avatar||"",this.options.className=t.className||"",this.options.stopOnFocus=t.stopOnFocus||!0,this},buildToast:function(){if(!this.options)throw"Toastify is not initialized";var t=document.createElement("div");if(t.className="toastify on "+this.options.className,!0===this.options.positionLeft?t.className+=" toastify-left":t.className+=" toastify-right",t.className+=" "+this.options.gravity,this.options.backgroundColor&&(t.style.background=this.options.backgroundColor),t.innerHTML=this.options.text,""!==this.options.avatar){var o=document.createElement("img");o.src=this.options.avatar,o.className="toastify-avatar",!0===this.options.positionLeft?t.appendChild(o):t.insertAdjacentElement("beforeend",o)}if(!0===this.options.close){var i=document.createElement("span");if(i.innerHTML="✖",i.className="toast-close",i.addEventListener("click",function(t){t.stopPropagation(),this.removeElement(t.target.parentElement),window.clearTimeout(t.target.parentElement.timeOutValue)}.bind(this)),this.options.stopOnFocus&&this.options.duration>0){const o=this;t.addEventListener("mouseover",function(o){window.clearTimeout(t.timeOutValue)}),t.addEventListener("mouseleave",function(){t.timeOutValue=window.setTimeout(function(){o.removeElement(t)},o.options.duration)})}var e=window.innerWidth>0?window.innerWidth:screen.width;!0===this.options.positionLeft&&e>360?t.insertAdjacentElement("afterbegin",i):t.appendChild(i)}return void 0!==this.options.destination&&t.addEventListener("click",function(t){t.stopPropagation(),!0===this.options.newWindow?window.open(this.options.destination,"_blank"):window.location=this.options.destination}.bind(this)),t},showToast:function(){var t;if(this.toastElement=this.buildToast(),!(t=void 0===this.options.selector?document.body:document.getElementById(this.options.selector)))throw"Root element is not defined";return t.insertBefore(this.toastElement,t.firstChild),o.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout(function(){this.removeElement(this.toastElement)}.bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(t){t.className=t.className.replace(" on",""),window.setTimeout(function(){t.parentNode.removeChild(t),this.options.callback.call(t),o.reposition()}.bind(this),400)}},o.reposition=function(){for(var t,o={top:15,bottom:15},e={top:15,bottom:15},n={top:15,bottom:15},s=document.getElementsByClassName("toastify"),a=0;a0?window.innerWidth:screen.width)<=360?(s[a].style[t]=n[t]+"px",n[t]+=r+15):!0===i(s[a],"toastify-left")?(s[a].style[t]=o[t]+"px",o[t]+=r+15):(s[a].style[t]=e[t]+"px",e[t]+=r+15)}return this},o.lib.init.prototype=o.lib,o});
+//# sourceMappingURL=/sm/e8d0548db6987e3e575494cc5e77d30e1bfc8e6db4e8b732516f3aaf85a28266.map
\ No newline at end of file
diff --git a/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/toastify.min.css b/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/toastify.min.css
new file mode 100644
index 00000000..39b7fc55
--- /dev/null
+++ b/One-to-One-Video/Agora-Web-Tutorial-1to1/vendor/toastify.min.css
@@ -0,0 +1,15 @@
+/**
+ * Minified by jsDelivr using clean-css v4.2.1.
+ * Original file: /npm/toastify-js@1.4.0/src/toastify.css
+ *
+ * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
+ */
+/*!
+ * Toastify js 1.4.0
+ * https://github.com/apvarun/toastify-js
+ * @license MIT licensed
+ *
+ * Copyright (C) 2018 Varun A P
+ */
+.toastify{padding:12px 20px;color:#fff;display:inline-block;box-shadow:0 3px 6px -1px rgba(0,0,0,.12),0 10px 36px -4px rgba(77,96,232,.3);background:-webkit-linear-gradient(315deg,#73a5ff,#5477f5);background:linear-gradient(135deg,#73a5ff,#5477f5);position:fixed;opacity:0;transition:all .4s cubic-bezier(.215,.61,.355,1);border-radius:2px;cursor:pointer;text-decoration:none;max-width:calc(50% - 20px);z-index:2147483647}.toastify.on{opacity:1}.toast-close{opacity:.4;padding:0 5px}.toastify-right{right:15px}.toastify-left{left:15px}.toastify-top{top:-150px}.toastify-bottom{bottom:-150px}.toastify-rounded{border-radius:25px}.toastify-avatar{width:1.5em;height:1.5em;margin:0 5px;border-radius:2px}@media only screen and (max-width:360px){.toastify-left,.toastify-right{margin-left:auto;margin-right:auto;left:0;right:0;max-width:fit-content}}
+/*# sourceMappingURL=/sm/dd1b29cb021fab3da6e0e29d76deaa96e1a7bd7fe963c728f0990e73d8c8be34.map */
\ No newline at end of file