function BigInteger ( e , t , n ) { null != e && ( "number" == typeof e ? this . fromNumber ( e , t , n ) : null == t && "string" != typeof e ? this . fromString ( e , 256 ) : this . fromString ( e , t ) ) } function nbi ( ) { return new BigInteger ( null ) } function am1 ( e , t , n , a , i , o ) { for ( ; -- o >= 0 ; ) { var s = t * this [ e ++ ] + n [ a ] + i ; i = Math . floor ( s / 67108864 ) , n [ a ++ ] = 67108863 & s } return i } function am2 ( e , t , n , a , i , o ) { for ( var s = 32767 & t , r = t >> 15 ; -- o >= 0 ; ) { var l = 32767 & this [ e ] , c = this [ e ++ ] >> 15 , d = r * l + c * s ; l = s * l + ( ( 32767 & d ) << 15 ) + n [ a ] + ( 1073741823 & i ) , i = ( l >>> 30 ) + ( d >>> 15 ) + r * c + ( i >>> 30 ) , n [ a ++ ] = 1073741823 & l } return i } function am3 ( e , t , n , a , i , o ) { for ( var s = 16383 & t , r = t >> 14 ; -- o >= 0 ; ) { var l = 16383 & this [ e ] , c = this [ e ++ ] >> 14 , d = r * l + c * s ; l = s * l + ( ( 16383 & d ) << 14 ) + n [ a ] + i , i = ( l >> 28 ) + ( d >> 14 ) + r * c , n [ a ++ ] = 268435455 & l } return i } function int2char ( e ) { return BI _RM . charAt ( e ) } function intAt ( e , t ) { var n = BI _RC [ e . charCodeAt ( t ) ] ; return null == n ? - 1 : n } function bnpCopyTo ( e ) { for ( var t = this . t - 1 ; t >= 0 ; -- t ) e [ t ] = this [ t ] ; e . t = this . t , e . s = this . s } function bnpFromInt ( e ) { this . t = 1 , this . s = e < 0 ? - 1 : 0 , e > 0 ? this [ 0 ] = e : e < - 1 ? this [ 0 ] = e + this . DV : this . t = 0 } function nbv ( e ) { var t = nbi ( ) ; return t . fromInt ( e ) , t } function bnpFromString ( e , t , n ) { var a ; if ( 16 == t ) a = 4 ; else if ( 8 == t ) a = 3 ; else if ( 256 == t ) a = 8 ; else if ( 2 == t ) a = 1 ; else if ( 32 == t ) a = 5 ; else { if ( 4 != t ) return void this . fromRadix ( e , t ) ; a = 2 } this . t = 0 , this . s = 0 ; for ( var i = e . length , o = ! 1 , s = 0 ; -- i >= 0 ; ) { var r = 8 == a ? 255 & e [ i ] : intAt ( e , i ) ; r < 0 ? "-" == e . charAt ( i ) && ( o = ! 0 ) : ( o = ! 1 , 0 == s ? this [ this . t ++ ] = r : s + a > this . DB ? ( this [ this . t - 1 ] |= ( r & ( 1 << this . DB - s ) - 1 ) << s , this [ this . t ++ ] = r >> this . DB - s ) : this [ this . t - 1 ] |= r << s , s += a , s >= this . DB && ( s -= this . DB ) ) } 8 == a && 0 != ( 128 & e [ 0 ] ) && n && ( this . s = - 1 , s > 0 && ( this [ this . t - 1 ] |= ( 1 << this . DB - s ) - 1 << s ) ) , this . clamp ( ) , o && BigInteger . ZERO . subTo ( this , this ) } function bnpClamp ( ) { for ( var e = this . s & this . DM ; this . t > 0 && this [ this . t - 1 ] == e ; ) -- this . t } function bnToString ( e ) { if ( this . s < 0 ) return "-" + this . negate ( ) . toString ( e ) ; var t ; if ( 16 == e ) t = 4 ; else if ( 8 == e ) t = 3 ; else if ( 2 == e ) t = 1 ; else if ( 32 == e ) t = 5 ; else { if ( 4 != e ) return this . toRadix ( e ) ; t = 2 } var n , a = ( 1 << t ) - 1 , i = ! 1 , o = "" , s = this . t , r = this . DB - s * this . DB % t ; if ( s -- > 0 ) for ( r < this . DB && ( n = this [ s ] >> r ) > 0 && ( i = ! 0 , o = int2char ( n ) ) ; s >= 0 ; ) r < t ? ( n = ( this [ s ] & ( 1 << r ) - 1 ) << t - r , n |= this [ -- s ] >> ( r += this . DB - t ) ) : ( n = this [ s ] >> ( r -= t ) & a , r <= 0 && ( r += this . DB , -- s ) ) , n > 0 && ( i = ! 0 ) , i && ( o += int2char ( n ) ) ; return i ? o : "0" } function bnNegate ( ) { var e = nbi ( ) ; return BigInteger . ZERO . subTo ( this , e ) , e } function bnAbs ( ) { return this . s < 0 ? this . negate ( ) : this } function bnCompareTo ( e ) { var t = this . s - e . s ; if ( 0 != t ) return t ; var n = this . t ; if ( t = n - e . t , 0 != t ) return this . s < 0 ? - t : t ; for ( ; -- n >= 0 ; ) if ( 0 != ( t = this [ n ] - e [ n ] ) ) return t ; return 0 } function nbits ( e ) { var t , n = 1 ; return 0 != ( t = e >>> 16 ) && ( e = t , n += 16 ) , 0 != ( t = e >> 8 ) && ( e = t , n += 8 ) , 0 != ( t = e >> 4 ) && ( e = t , n += 4 ) , 0 != ( t = e >> 2 ) && ( e = t , n += 2 ) , 0 != ( t = e >> 1 ) && ( e = t , n += 1 ) , n } function bnBitLength ( ) { return this . t <= 0 ? 0 : this . DB * ( this . t - 1 ) + nbits ( this [ this . t - 1 ] ^ this . s & this . DM ) } function bnpDLShiftTo ( e , t ) { var n ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + e ] = this [ n ] ; for ( n = e - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t . t = this . t + e , t . s = this . s } function bnpDRShiftTo ( e , t ) { for ( var n = e ; n < this . t ; ++ n ) t [ n - e ] = this [ n ] ; t . t = Math . max ( this . t - e , 0 ) , t . s = this . s } function bnpLShiftTo ( e , t ) { var n , a = e % this . DB , i = this . DB - a , o = ( 1 << i ) - 1 , s = Math . floor ( e / this . DB ) , r = this . s << a & this . DM ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + s + 1 ] = this [ n ] >> i | r , r = ( this [ n ] & o ) << a ; for ( n = s - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t [ s ] = r , t . t = this . t + s + 1 , t . s = this . s , t . clamp ( ) } function bnpRShiftTo ( e , t ) { t . s = this . s ; var n = Math . floor ( e / this . DB ) ; if ( n >= this . t ) return void ( t . t = 0 ) ; var a = e % this . DB , i = this . DB - a , o = ( 1 << a ) - 1 ; t [ 0 ] = this [ n ] >> a ; for ( var s = n + 1 ; s < this . t ; ++ s ) t [ s - n - 1 ] |= ( this [ s ] & o ) << i , t [ s - n ] = this [ s ] >> a ; a > 0 && ( t [ this . t - n - 1 ] |= ( this . s & o ) << i ) , t . t = this . t - n , t . clamp ( ) } function bnpSubTo ( e , t ) { for ( var n = 0 , a = 0 , i = Math . min ( e . t , this . t ) ; n < i ; ) a += this [ n ] - e [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; if ( e . t < this . t ) { for ( a -= e . s ; n < this . t ; ) a += this [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; a += this . s } else { for ( a += this . s ; n < e . t ; ) a -= e [ n ] , t [ n ++ ] = a & this . DM , a >>= this . DB ; a -= e . s } t . s = a < 0 ? - 1 : 0 , a < - 1 ? t [ n ++ ] = this . DV + a : a > 0 && ( t [ n ++ ] = a ) , t . t = n , t . clamp ( ) } function bnpMultiplyTo ( e , t ) { var n = this . abs ( ) , a = e . abs ( ) , i = n . t ; for ( t . t = i + a . t ; -- i >= 0 ; ) t [ i ] = 0 ; for ( i = 0 ; i < a . t ; ++ i ) t [ i + n . t ] = n . am ( 0 , a [ i ] , t , i , 0 , n . t ) ; t . s = 0 , t . clamp ( ) , this . s != e . s && BigInteger . ZERO . subTo ( t , t ) } function bnpSquareTo ( e ) { for ( var t = this . abs ( ) , n = e . t = 2 * t . t ; -- n >= 0 ; ) e [ n ] = 0 ; for ( n = 0 ; n < t . t - 1 ; ++ n ) { var a = t .
return ! 1 } function cancelEvent ( e ) { return e = e || window . event , e && ( e = e . originalEvent || e , e . stopPropagation && e . stopPropagation ( ) , e . preventDefault && e . preventDefault ( ) , e . returnValue = ! 1 , e . cancelBubble = ! 0 ) , ! 1 } function hasOnlick ( e ) { if ( e . onclick || e . getAttribute ( "ng-click" ) ) return ! 0 ; var t = $ . _data ( e , "events" ) ; return ! ( ! t || ! t . click && ! t . mousedown ) } function getScrollWidth ( ) { var e = $ ( "<div>" ) . css ( { position : "absolute" , width : 100 , height : 100 , overflow : "scroll" , top : - 9999 } ) . appendTo ( $ ( document . body ) ) , t = e [ 0 ] . offsetWidth - e [ 0 ] . clientWidth ; return e . remove ( ) , t } function onCtrlEnter ( e , t ) { $ ( e ) . on ( "keydown" , function ( e ) { if ( 13 == e . keyCode && ( e . ctrlKey || e . metaKey ) ) return t ( ) , cancelEvent ( e ) } ) } function setFieldSelection ( e , t , n ) { e = $ ( e ) [ 0 ] ; try { if ( e . focus ( ) , void 0 !== t && t !== ! 1 || ( t = e . value . length ) , void 0 !== n && n !== ! 1 || ( n = t ) , e . createTextRange ) { var a = e . createTextRange ( ) ; a . collapse ( ! 0 ) , a . moveEnd ( "character" , n ) , a . moveStart ( "character" , t ) , a . select ( ) } else e . setSelectionRange && e . setSelectionRange ( t , n ) } catch ( i ) { } } function getFieldSelection ( e ) { if ( e . selectionStart ) return e . selectionStart ; if ( ! document . selection ) return 0 ; var t = " " , n = document . selection . createRange ( ) , a = n . text , i = n . duplicate ( ) , o = 0 ; try { i . moveToElementText ( e ) } catch ( s ) { return 0 } return n . text = a + t , o = i . text . indexOf ( t ) , n . moveStart ( "character" , - 1 ) , n . text = "" , o } function getRichValue ( e ) { if ( ! e ) return "" ; var t = [ ] , n = [ ] ; getRichElementValue ( e , t , n ) , n . length && t . push ( n . join ( "" ) ) ; var a = t . join ( "\n" ) ; return a = a . replace ( /\u00A0/g , " " ) } function getRichValueWithCaret ( e ) { if ( ! e ) return [ ] ; var t , n , a = [ ] , i = [ ] , o = ! ! window . getSelection && window . getSelection ( ) ; if ( o && o . rangeCount ) { var s = o . getRangeAt ( 0 ) ; s . startContainer && s . startContainer == s . endContainer && s . startOffset == s . endOffset && ( t = s . startContainer , n = s . startOffset ) } getRichElementValue ( e , a , i , t , n ) , i . length && a . push ( i . join ( "" ) ) ; var r = a . join ( "\n" ) , l = r . indexOf ( " " ) ; return l != - 1 && ( r = r . substr ( 0 , l ) + r . substr ( l + 1 ) ) , r = r . replace ( /\u00A0/g , " " ) , [ r , l ] } function getRichElementValue ( e , t , n , a , i ) { if ( 3 != e . nodeType ) { if ( 1 == e . nodeType ) { var o , s = a === e , r = "DIV" == e . tagName || "P" == e . tagName ; r && n . length || "BR" == e . tagName ? ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) : "IMG" == e . tagName && e . alt && n . push ( e . alt ) , s && ! i && n . push ( " " ) ; for ( var o = e . firstChild ; o ; ) getRichElementValue ( o , t , n , a , i ) , o = o . nextSibling ; s && i && n . push ( " " ) , r && n . length && ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) } } else if ( a === e ) { var l = e . nodeValue ; n . push ( l . substr ( 0 , i ) + " " + l . substr ( i ) ) } else n . push ( e . nodeValue ) } function setRichFocus ( e , t , n ) { if ( e . focus ( ) , ! t || t . parentNode != e || t . nextSibling || n || ( e . removeChild ( t ) , t = null ) , window . getSelection && document . createRange ) { var a = document . createRange ( ) ; t ? a . selectNode ( t ) : a . selectNodeContents ( e ) , n || a . collapse ( ! 1 ) ; var i = window . getSelection ( ) ; i . removeAllRanges ( ) , i . addRange ( a ) } else if ( void 0 !== document . body . createTextRange ) { var o = document . body . createTextRange ( ) ; o . moveToElementText ( t || e ) , n || o . collapse ( ! 1 ) , o . select ( ) } } function getSelectedText ( ) { var e = ( window . getSelection && window . getSelection ( ) || document . getSelection && document . getSelection ( ) || document . selection && document . selection . createRange ( ) . text || "" ) . toString ( ) . replace ( /^\s+|\s+$/g , "" ) ; return e } function scrollToNode ( e , t , n ) { var a = t . offsetTop - 15 , i = t . offsetHeight + 30 , o = e . scrollTop , s = e . clientHeight ; o > a ? ( e . scrollTop = a , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) : o < a + i - s && ( e . scrollTop = a + i - s , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) } function onContentLoaded ( e ) { e = onAnimationFrameCallback ( e ) , setZeroTimeout ( e ) } function tsNow ( e ) { var t = + new Date + ( window . tsOffset || 0 ) ; return e ? Math . floor ( t / 1e3 ) : t } function safeReplaceObject ( e , t ) { for ( var n in e ) t . hasOwnProperty ( n ) || "$" == n . charAt ( 0 ) || delete e [ n ] ; for ( var n in t ) t . hasOwnProperty ( n ) && ( e [ n ] = t [ n ] ) } function listMergeSorted ( e , t ) { e = e || [ ] , t = t || [ ] ; for ( var n = angular . copy ( e ) , a = e . length ? e [ e . length - 1 ] : 4294967295 , i = 0 ; i < t . length ; i ++ ) t [ i ] < a && n . push ( t [ i ] ) ; return n } function listUniqSorted ( e ) { e = e || [ ] ; for ( var t = [ ] , n = ! 1 , a = 0 ; a < e . length ; a ++ ) e [ a ] !== n && t . push ( e [ a ] ) , n = e [ a ] ; return t } function templateUrl ( e ) { var t = { confirm _modal : "desktop" , error _modal : "desktop" , media _modal _layout : "desktop" , slider : "desktop" , reply _message : "desktop" , message _body : "desktop" , message _media : "desktop" , message _attach _game : "desktop" , forwarded _messages : "desktop" ,
return e . length = i , e } , grep : function ( e , t , n ) { for ( var a , i = [ ] , o = 0 , s = e . length , r = ! n ; s > o ; o ++ ) a = ! t ( e [ o ] , o ) , a !== r && i . push ( e [ o ] ) ; return i } , map : function ( e , t , a ) { var i , o = 0 , s = e . length , r = n ( e ) , l = [ ] ; if ( r ) for ( ; s > o ; o ++ ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; else for ( o in e ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; return Z . apply ( [ ] , l ) } , guid : 1 , proxy : function ( e , t ) { var n , a , i ; return "string" == typeof t && ( i = e [ t ] , t = e , e = i ) , ie . isFunction ( e ) ? ( n = Y . call ( arguments , 2 ) , a = function ( ) { return e . apply ( t || this , n . concat ( Y . call ( arguments ) ) ) } , a . guid = e . guid = e . guid || ie . guid ++ , a ) : void 0 } , now : function ( ) { return + new Date } , support : ne } ) , ie . each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( e , t ) { Q [ "[object " + t + "]" ] = t . toLowerCase ( ) } ) ; var ce = function ( e ) { function t ( e , t , n , a ) { var i , o , s , r , l , c , u , m , g , h ; if ( ( t ? t . ownerDocument || t : L ) !== D && T ( t ) , t = t || D , n = n || [ ] , ! e || "string" != typeof e ) return n ; if ( 1 !== ( r = t . nodeType ) && 9 !== r ) return [ ] ; if ( F && ! a ) { if ( i = ve . exec ( e ) ) if ( s = i [ 1 ] ) { if ( 9 === r ) { if ( o = t . getElementById ( s ) , ! o || ! o . parentNode ) return n ; if ( o . id === s ) return n . push ( o ) , n } else if ( t . ownerDocument && ( o = t . ownerDocument . getElementById ( s ) ) && U ( t , o ) && o . id === s ) return n . push ( o ) , n } else { if ( i [ 2 ] ) return Q . apply ( n , t . getElementsByTagName ( e ) ) , n ; if ( ( s = i [ 3 ] ) && w . getElementsByClassName && t . getElementsByClassName ) return Q . apply ( n , t . getElementsByClassName ( s ) ) , n } if ( w . qsa && ( ! N || ! N . test ( e ) ) ) { if ( m = u = B , g = t , h = 9 === r && e , 1 === r && "object" !== t . nodeName . toLowerCase ( ) ) { for ( c = C ( e ) , ( u = t . getAttribute ( "id" ) ) ? m = u . replace ( be , "\\$&" ) : t . setAttribute ( "id" , m ) , m = "[id='" + m + "'] " , l = c . length ; l -- ; ) c [ l ] = m + p ( c [ l ] ) ; g = ye . test ( e ) && d ( t . parentNode ) || t , h = c . join ( "," ) } if ( h ) try { return Q . apply ( n , g . querySelectorAll ( h ) ) , n } catch ( f ) { } finally { u || t . removeAttribute ( "id" ) } } } return x ( e . replace ( le , "$1" ) , t , n , a ) } function n ( ) { function e ( n , a ) { return t . push ( n + " " ) > k . cacheLength && delete e [ t . shift ( ) ] , e [ n + " " ] = a } var t = [ ] ; return e } function a ( e ) { return e [ B ] = ! 0 , e } function i ( e ) { var t = D . createElement ( "div" ) ; try { return ! ! e ( t ) } catch ( n ) { return ! 1 } finally { t . parentNode && t . parentNode . removeChild ( t ) , t = null } } function o ( e , t ) { for ( var n = e . split ( "|" ) , a = e . length ; a -- ; ) k . attrHandle [ n [ a ] ] = t } function s ( e , t ) { var n = t && e , a = n && 1 === e . nodeType && 1 === t . nodeType && ( ~ t . sourceIndex || K ) - ( ~ e . sourceIndex || K ) ; if ( a ) return a ; if ( n ) for ( ; n = n . nextSibling ; ) if ( n === t ) return - 1 ; return e ? 1 : - 1 } function r ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return "input" === n && t . type === e } } function l ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return ( "input" === n || "button" === n ) && t . type === e } } function c ( e ) { return a ( function ( t ) { return t = + t , a ( function ( n , a ) { for ( var i , o = e ( [ ] , n . length , t ) , s = o . length ; s -- ; ) n [ i = o [ s ] ] && ( n [ i ] = ! ( a [ i ] = n [ i ] ) ) } ) } ) } function d ( e ) { return e && typeof e . getElementsByTagName !== G && e } function u ( ) { } function p ( e ) { for ( var t = 0 , n = e . length , a = "" ; n > t ; t ++ ) a += e [ t ] . value ; return a } function m ( e , t , n ) { var a = t . dir , i = n && "parentNode" === a , o = H ++ ; return t . first ? function ( t , n , o ) { for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) return e ( t , n , o ) } : function ( t , n , s ) { var r , l , c = [ j , o ] ; if ( s ) { for ( ; t = t [ a ] ; ) if ( ( 1 === t . nodeType || i ) && e ( t , n , s ) ) return ! 0 } else for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) { if ( l = t [ B ] || ( t [ B ] = { } ) , ( r = l [ a ] ) && r [ 0 ] === j && r [ 1 ] === o ) return c [ 2 ] = r [ 2 ] ; if ( l [ a ] = c , c [ 2 ] = e ( t , n , s ) ) return ! 0 } } } function g ( e ) { return e . length > 1 ? function ( t , n , a ) { for ( var i = e . length ; i -- ; ) if ( ! e [ i ] ( t , n , a ) ) return ! 1 ; return ! 0 } : e [ 0 ] } function h ( e , n , a ) { for ( var i = 0 , o = n . length ; o > i ; i ++ ) t ( e , n [ i ] , a ) ; return a } function f ( e , t , n , a , i ) { for ( var o , s = [ ] , r = 0 , l = e . length , c = null != t ; l > r ; r ++ ) ( o = e [ r ] ) && ( ! n || n ( o , a , i ) ) && ( s . push ( o ) , c && t . push ( r ) ) ; return s } function _ ( e , t , n , i , o , s ) { return i && ! i [ B ] && ( i = _ ( i ) ) , o && ! o [ B ] && ( o = _ ( o , s ) ) , a ( function ( a , s , r , l ) { var c , d , u , p = [ ] , m = [ ] , g = s . length , _ = a || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! a && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( a ? e : g || i ) ? [ ] : s : v ; if ( n && n ( v , y , r , l ) , i ) for ( c = f ( y , m ) , i ( c , [ ] , r , l ) , d = c . length ; d -- ; ) ( u = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = u ) ) ; if ( a ) { if ( o || e ) { if ( o ) { for ( c = [ ] , d = y . length ; d -- ; ) ( u = y [ d ] ) && c . push ( v [ d ] = u ) ; o ( null , y = [ ] , c , l ) } for ( d = y . length ; d -- ; ) ( u = y [ d ] ) && ( c = o ? te . call ( a , u ) : p [ d ] ) > - 1 && ( a [ c ] = ! ( s [ c ] = u ) ) } } else y = f ( y === s ? y . splice ( g , y . length ) : y ) , o ? o ( null , s , y , l ) : Q . apply ( s , y ) } ) } function v ( e ) { for ( var t , n , a , i = e . length , o = k . relative [ e [ 0 ] . type ] , s = o || k . relative [ " " ] , r = o ? 1 : 0 , l = m ( function ( e ) { return e === t } , s , ! 0 ) , c = m ( fun
namespace : g . join ( "." ) } , l ) , ( p = s [ m ] ) || ( p = s [ m ] = [ ] , p . delegateCount = 0 , c . setup && c . setup . call ( e , a , g , d ) !== ! 1 || ( e . addEventListener ? e . addEventListener ( m , d , ! 1 ) : e . attachEvent && e . attachEvent ( "on" + m , d ) ) ) , c . add && ( c . add . call ( e , u ) , u . handler . guid || ( u . handler . guid = n . guid ) ) , i ? p . splice ( p . delegateCount ++ , 0 , u ) : p . push ( u ) , ie . event . global [ m ] = ! 0 ) ; e = null } } , remove : function ( e , t , n , a , i ) { var o , s , r , l , c , d , u , p , m , g , h , f = ie . hasData ( e ) && ie . _data ( e ) ; if ( f && ( d = f . events ) ) { for ( t = ( t || "" ) . match ( ye ) || [ "" ] , c = t . length ; c -- ; ) if ( r = Ne . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( u = ie . event . special [ m ] || { } , m = ( a ? u . delegateType : u . bindType ) || m , p = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = p . length ; o -- ; ) s = p [ o ] , ! i && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || a && a !== s . selector && ( "**" !== a || ! s . selector ) || ( p . splice ( o , 1 ) , s . selector && p . delegateCount -- , u . remove && u . remove . call ( e , s ) ) ; l && ! p . length && ( u . teardown && u . teardown . call ( e , g , f . handle ) !== ! 1 || ie . removeEvent ( e , m , f . handle ) , delete d [ m ] ) } else for ( m in d ) ie . event . remove ( e , m + t [ c ] , n , a , ! 0 ) ; ie . isEmptyObject ( d ) && ( delete f . handle , ie . _removeData ( e , "events" ) ) } } , trigger : function ( t , n , a , i ) { var o , s , r , l , c , d , u , p = [ a || ge ] , m = te . call ( t , "type" ) ? t . type : t , g = te . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = a = a || ge , 3 !== a . nodeType && 8 !== a . nodeType && ! Fe . test ( m + ie . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( g = m . split ( "." ) , m = g . shift ( ) , g . sort ( ) ) , s = m . indexOf ( ":" ) < 0 && "on" + m , t = t [ ie . expando ] ? t : new ie . Event ( m , "object" == typeof t && t ) , t . isTrigger = i ? 2 : 3 , t . namespace = g . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , t . result = void 0 , t . target || ( t . target = a ) , n = null == n ? [ t ] : ie . makeArray ( n , [ t ] ) , c = ie . event . special [ m ] || { } , i || ! c . trigger || c . trigger . apply ( a , n ) !== ! 1 ) ) { if ( ! i && ! c . noBubble && ! ie . isWindow ( a ) ) { for ( l = c . delegateType || m , Fe . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( a . ownerDocument || ge ) && p . push ( d . defaultView || d . parentWindow || e ) } for ( u = 0 ; ( r = p [ u ++ ] ) && ! t . isPropagationStopped ( ) ; ) t . type = u > 1 ? l : c . bindType || m , o = ( ie . _data ( r , "events" ) || { } ) [ t . type ] && ie . _data ( r , "handle" ) , o && o . apply ( r , n ) , o = s && r [ s ] , o && o . apply && ie . acceptData ( r ) && ( t . result = o . apply ( r , n ) , t . result === ! 1 && t . preventDefault ( ) ) ; if ( t . type = m , ! i && ! t . isDefaultPrevented ( ) && ( ! c . _default || c . _default . apply ( p . pop ( ) , n ) === ! 1 ) && ie . acceptData ( a ) && s && a [ m ] && ! ie . isWindow ( a ) ) { d = a [ s ] , d && ( a [ s ] = null ) , ie . event . triggered = m ; try { a [ m ] ( ) } catch ( h ) { } ie . event . triggered = void 0 , d && ( a [ s ] = d ) } return t . result } } , dispatch : function ( e ) { e = ie . event . fix ( e ) ; var t , n , a , i , o , s = [ ] , r = Y . call ( arguments ) , l = ( ie . _data ( this , "events" ) || { } ) [ e . type ] || [ ] , c = ie . event . special [ e . type ] || { } ; if ( r [ 0 ] = e , e . delegateTarget = this , ! c . preDispatch || c . preDispatch . call ( this , e ) !== ! 1 ) { for ( s = ie . event . handlers . call ( this , e , l ) , t = 0 ; ( i = s [ t ++ ] ) && ! e . isPropagationStopped ( ) ; ) for ( e . currentTarget = i . elem , o = 0 ; ( a = i . handlers [ o ++ ] ) && ! e . isImmediatePropagationStopped ( ) ; ) ( ! e . namespace _re || e . namespace _re . test ( a . namespace ) ) && ( e . handleObj = a , e . data = a . data , n = ( ( ie . event . special [ a . origType ] || { } ) . handle || a . handler ) . apply ( i . elem , r ) , void 0 !== n && ( e . result = n ) === ! 1 && ( e . preventDefault ( ) , e . stopPropagation ( ) ) ) ; return c . postDispatch && c . postDispatch . call ( this , e ) , e . result } } , handlers : function ( e , t ) { var n , a , i , o , s = [ ] , r = t . delegateCount , l = e . target ; if ( r && l . nodeType && ( ! e . button || "click" !== e . type ) ) for ( ; l != this ; l = l . parentNode || this ) if ( 1 === l . nodeType && ( l . disabled !== ! 0 || "click" !== e . type ) ) { for ( i = [ ] , o = 0 ; r > o ; o ++ ) a = t [ o ] , n = a . selector + " " , void 0 === i [ n ] && ( i [ n ] = a . needsContext ? ie ( n , this ) . index ( l ) >= 0 : ie . find ( n , this , null , [ l ] ) . length ) , i [ n ] && i . push ( a ) ; i . length && s . push ( { elem : l , handlers : i } ) } return r < t . length && s . push ( { elem : this , handlers : t . slice ( r ) } ) , s } , fix : function ( e ) { if ( e [ ie . expando ] ) return e ; var t , n , a , i = e . type , o = e , s = this . fixHooks [ i ] ; for ( s || ( this . fixHooks [ i ] = s = Pe . test ( i ) ? this . mouseHooks : De . test ( i ) ? this . keyHooks : { } ) , a = s . props ? this . props . concat ( s . props ) : this . props , e = new ie . Event ( o ) , t = a . length ; t -- ; ) n = a [ t ] , e [ n ] = o [ n ] ; return e . target || ( e . target = o . srcElement || ge ) , 3 === e . target . nodeType && ( e . target = e . target . parentNode ) , e . metaKey = ! ! e . metaKey , s . filter ? s . filter ( e , o ) : e } , props : " altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftK
get : function ( e ) { return e . style . cssText || void 0 } , set : function ( e , t ) { return e . style . cssText = t + "" } } ) ; var xt = /^(?:input|select|textarea|button|object)$/i , It = /^(?:a|area)$/i ; ie . fn . extend ( { prop : function ( e , t ) { return Ae ( this , ie . prop , e , t , arguments . length > 1 ) } , removeProp : function ( e ) { return e = ie . propFix [ e ] || e , this . each ( function ( ) { try { this [ e ] = void 0 , delete this [ e ] } catch ( t ) { } } ) } } ) , ie . extend ( { propFix : { "for" : "htmlFor" , "class" : "className" } , prop : function ( e , t , n ) { var a , i , o , s = e . nodeType ; if ( e && 3 !== s && 8 !== s && 2 !== s ) return o = 1 !== s || ! ie . isXMLDoc ( e ) , o && ( t = ie . propFix [ t ] || t , i = ie . propHooks [ t ] ) , void 0 !== n ? i && "set" in i && void 0 !== ( a = i . set ( e , n , t ) ) ? a : e [ t ] = n : i && "get" in i && null !== ( a = i . get ( e , t ) ) ? a : e [ t ] } , propHooks : { tabIndex : { get : function ( e ) { var t = ie . find . attr ( e , "tabindex" ) ; return t ? parseInt ( t , 10 ) : xt . test ( e . nodeName ) || It . test ( e . nodeName ) && e . href ? 0 : - 1 } } } } ) , ne . hrefNormalized || ie . each ( [ "href" , "src" ] , function ( e , t ) { ie . propHooks [ t ] = { get : function ( e ) { return e . getAttribute ( t , 4 ) } } } ) , ne . optSelected || ( ie . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && ( t . selectedIndex , t . parentNode && t . parentNode . selectedIndex ) , null } } ) , ie . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { ie . propFix [ this . toLowerCase ( ) ] = this } ) , ne . enctype || ( ie . propFix . enctype = "encoding" ) ; var At = /[\t\r\n\f]/g ; ie . fn . extend ( { addClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( At , " " ) : " " ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) a . indexOf ( " " + i + " " ) < 0 && ( a += i + " " ) ; s = ie . trim ( a ) , n . className !== s && ( n . className = s ) } return this } , removeClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = 0 === arguments . length || "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( At , " " ) : "" ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) for ( ; a . indexOf ( " " + i + " " ) >= 0 ; ) a = a . replace ( " " + i + " " , " " ) ; s = e ? ie . trim ( a ) : "" , n . className !== s && ( n . className = s ) } return this } , toggleClass : function ( e , t ) { var n = typeof e ; return "boolean" == typeof t && "string" === n ? t ? this . addClass ( e ) : this . removeClass ( e ) : this . each ( ie . isFunction ( e ) ? function ( n ) { ie ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } : function ( ) { if ( "string" === n ) for ( var t , a = 0 , i = ie ( this ) , o = e . match ( ye ) || [ ] ; t = o [ a ++ ] ; ) i . hasClass ( t ) ? i . removeClass ( t ) : i . addClass ( t ) ; else ( n === $e || "boolean" === n ) && ( this . className && ie . _data ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : ie . _data ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { for ( var t = " " + e + " " , n = 0 , a = this . length ; a > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( At , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } } ) , ie . each ( "blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu" . split ( " " ) , function ( e , t ) { ie . fn [ t ] = function ( e , n ) { return arguments . length > 0 ? this . on ( t , null , e , n ) : this . trigger ( t ) } } ) , ie . fn . extend ( { hover : function ( e , t ) { return this . mouseenter ( e ) . mouseleave ( t || e ) } , bind : function ( e , t , n ) { return this . on ( e , null , t , n ) } , unbind : function ( e , t ) { return this . off ( e , null , t ) } , delegate : function ( e , t , n , a ) { return this . on ( t , e , n , a ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var Et = ie . now ( ) , Tt = /\?/ , Dt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g ; ie . parseJSON = function ( t ) { if ( e . JSON && e . JSON . parse ) return e . JSON . parse ( t + "" ) ; var n , a = null , i = ie . trim ( t + "" ) ; return i && ! ie . trim ( i . replace ( Dt , function ( e , t , i , o ) { return n && t && ( a = 0 ) , 0 === a ? e : ( n = i || t , a += ! o - ! i , "" ) } ) ) ? Function ( "return " + i ) ( ) : ie . error ( "Invalid JSON: " + t ) } , ie . parseXML = function ( t ) { var n , a ; if ( ! t || "string" != typeof t ) return null ; try { e . DOMParser ? ( a = new
Config . Schema . API = { constructors : [ { id : "-1132882121" , predicate : "boolFalse" , params : [ ] , type : "Bool" } , { id : "-1720552011" , predicate : "boolTrue" , params : [ ] , type : "Bool" } , { id : "1072550713" , predicate : "true" , params : [ ] , type : "True" } , { id : "481674261" , predicate : "vector" , params : [ ] , type : "Vector t" } , { id : "-994444869" , predicate : "error" , params : [ { name : "code" , type : "int" } , { name : "text" , type : "string" } ] , type : "Error" } , { id : "1450380236" , predicate : "null" , params : [ ] , type : "Null" } , { id : "2134579434" , predicate : "inputPeerEmpty" , params : [ ] , type : "InputPeer" } , { id : "2107670217" , predicate : "inputPeerSelf" , params : [ ] , type : "InputPeer" } , { id : "396093539" , predicate : "inputPeerChat" , params : [ { name : "chat_id" , type : "int" } ] , type : "InputPeer" } , { id : "-1182234929" , predicate : "inputUserEmpty" , params : [ ] , type : "InputUser" } , { id : "-138301121" , predicate : "inputUserSelf" , params : [ ] , type : "InputUser" } , { id : "-208488460" , predicate : "inputPhoneContact" , params : [ { name : "client_id" , type : "long" } , { name : "phone" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "InputContact" } , { id : "-181407105" , predicate : "inputFile" , params : [ { name : "id" , type : "long" } , { name : "parts" , type : "int" } , { name : "name" , type : "string" } , { name : "md5_checksum" , type : "string" } ] , type : "InputFile" } , { id : "-1771768449" , predicate : "inputMediaEmpty" , params : [ ] , type : "InputMedia" } , { id : "1661770481" , predicate : "inputMediaUploadedPhoto" , params : [ { name : "flags" , type : "#" } , { name : "file" , type : "InputFile" } , { name : "caption" , type : "string" } , { name : "stickers" , type : "flags.0?Vector<InputDocument>" } ] , type : "InputMedia" } , { id : "-373312269" , predicate : "inputMediaPhoto" , params : [ { name : "id" , type : "InputPhoto" } , { name : "caption" , type : "string" } ] , type : "InputMedia" } , { id : "-104578748" , predicate : "inputMediaGeoPoint" , params : [ { name : "geo_point" , type : "InputGeoPoint" } ] , type : "InputMedia" } , { id : "-1494984313" , predicate : "inputMediaContact" , params : [ { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "InputMedia" } , { id : "480546647" , predicate : "inputChatPhotoEmpty" , params : [ ] , type : "InputChatPhoto" } , { id : "-1837345356" , predicate : "inputChatUploadedPhoto" , params : [ { name : "file" , type : "InputFile" } ] , type : "InputChatPhoto" } , { id : "-1991004873" , predicate : "inputChatPhoto" , params : [ { name : "id" , type : "InputPhoto" } ] , type : "InputChatPhoto" } , { id : "-457104426" , predicate : "inputGeoPointEmpty" , params : [ ] , type : "InputGeoPoint" } , { id : "-206066487" , predicate : "inputGeoPoint" , params : [ { name : "lat" , type : "double" } , { name : "long" , type : "double" } ] , type : "InputGeoPoint" } , { id : "483901197" , predicate : "inputPhotoEmpty" , params : [ ] , type : "InputPhoto" } , { id : "-74070332" , predicate : "inputPhoto" , params : [ { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputPhoto" } , { id : "342061462" , predicate : "inputFileLocation" , params : [ { name : "volume_id" , type : "long" } , { name : "local_id" , type : "int" } , { name : "secret" , type : "long" } ] , type : "InputFileLocation" } , { id : "1996904104" , predicate : "inputAppEvent" , params : [ { name : "time" , type : "double" } , { name : "type" , type : "string" } , { name : "peer" , type : "long" } , { name : "data" , type : "string" } ] , type : "InputAppEvent" } , { id : "-1649296275" , predicate : "peerUser" , params : [ { name : "user_id" , type : "int" } ] , type : "Peer" } , { id : "-1160714821" , predicate : "peerChat" , params : [ { name : "chat_id" , type : "int" } ] , type : "Peer" } , { id : "-1432995067" , predicate : "storage.fileUnknown" , params : [ ] , type : "storage.FileType" } , { id : "8322574" , predicate : "storage.fileJpeg" , params : [ ] , type : "storage.FileType" } , { id : "-891180321" , predicate : "storage.fileGif" , params : [ ] , type : "storage.FileType" } , { id : "172975040" , predicate : "storage.filePng" , params : [ ] , type : "storage.FileType" } , { id : "-1373745011" , predicate : "storage.filePdf" , params : [ ] , type : "storage.FileType" } , { id : "1384777335" , predicate : "storage.fileMp3" , params : [ ] , type : "storage.FileType" } , { id : "1258941372" , predicate : "storage.fileMov" , params : [ ] , type : "storage.FileType" } , { id : "1086091090" , predicate : "storage.filePartial" , params : [ ] , type : "storage.FileType" } , { id : "-1278304028" , predicate : "storage.fileMp4" , params : [ ] , type : "storage.FileType" } , { id : "276907596" , predicate : "storage.fileWebp" , params : [ ] , type : "storage.FileType" } , { id : "2086234950" , predicate : "fileLocationUnavailable" , params : [ { name : "volume_id" , type : "long" } , { name : " local _id
params : [ ] , type : "SendMessageAction" } , { id : "-44119819" , predicate : "sendMessageCancelAction" , params : [ ] , type : "SendMessageAction" } , { id : "-1584933265" , predicate : "sendMessageRecordVideoAction" , params : [ ] , type : "SendMessageAction" } , { id : "-378127636" , predicate : "sendMessageUploadVideoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-718310409" , predicate : "sendMessageRecordAudioAction" , params : [ ] , type : "SendMessageAction" } , { id : "-212740181" , predicate : "sendMessageUploadAudioAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-774682074" , predicate : "sendMessageUploadPhotoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-1441998364" , predicate : "sendMessageUploadDocumentAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "393186209" , predicate : "sendMessageGeoLocationAction" , params : [ ] , type : "SendMessageAction" } , { id : "1653390447" , predicate : "sendMessageChooseContactAction" , params : [ ] , type : "SendMessageAction" } , { id : "446822276" , predicate : "contacts.found" , params : [ { name : "results" , type : "Vector<Peer>" } , { name : "chats" , type : "Vector<Chat>" } , { name : "users" , type : "Vector<User>" } ] , type : "contacts.Found" } , { id : "942527460" , predicate : "updateServiceNotification" , params : [ { name : "type" , type : "string" } , { name : "message" , type : "string" } , { name : "media" , type : "MessageMedia" } , { name : "popup" , type : "Bool" } ] , type : "Update" } , { id : "-496024847" , predicate : "userStatusRecently" , params : [ ] , type : "UserStatus" } , { id : "129960444" , predicate : "userStatusLastWeek" , params : [ ] , type : "UserStatus" } , { id : "2011940674" , predicate : "userStatusLastMonth" , params : [ ] , type : "UserStatus" } , { id : "-298113238" , predicate : "updatePrivacy" , params : [ { name : "key" , type : "PrivacyKey" } , { name : "rules" , type : "Vector<PrivacyRule>" } ] , type : "Update" } , { id : "1335282456" , predicate : "inputPrivacyKeyStatusTimestamp" , params : [ ] , type : "InputPrivacyKey" } , { id : "-1137792208" , predicate : "privacyKeyStatusTimestamp" , params : [ ] , type : "PrivacyKey" } , { id : "218751099" , predicate : "inputPrivacyValueAllowContacts" , params : [ ] , type : "InputPrivacyRule" } , { id : "407582158" , predicate : "inputPrivacyValueAllowAll" , params : [ ] , type : "InputPrivacyRule" } , { id : "320652927" , predicate : "inputPrivacyValueAllowUsers" , params : [ { name : "users" , type : "Vector<InputUser>" } ] , type : "InputPrivacyRule" } , { id : "195371015" , predicate : "inputPrivacyValueDisallowContacts" , params : [ ] , type : "InputPrivacyRule" } , { id : "-697604407" , predicate : "inputPrivacyValueDisallowAll" , params : [ ] , type : "InputPrivacyRule" } , { id : "-1877932953" , predicate : "inputPrivacyValueDisallowUsers" , params : [ { name : "users" , type : "Vector<InputUser>" } ] , type : "InputPrivacyRule" } , { id : "-123988" , predicate : "privacyValueAllowContacts" , params : [ ] , type : "PrivacyRule" } , { id : "1698855810" , predicate : "privacyValueAllowAll" , params : [ ] , type : "PrivacyRule" } , { id : "1297858060" , predicate : "privacyValueAllowUsers" , params : [ { name : "users" , type : "Vector<int>" } ] , type : "PrivacyRule" } , { id : "-125240806" , predicate : "privacyValueDisallowContacts" , params : [ ] , type : "PrivacyRule" } , { id : "-1955338397" , predicate : "privacyValueDisallowAll" , params : [ ] , type : "PrivacyRule" } , { id : "209668535" , predicate : "privacyValueDisallowUsers" , params : [ { name : "users" , type : "Vector<int>" } ] , type : "PrivacyRule" } , { id : "1430961007" , predicate : "account.privacyRules" , params : [ { name : "rules" , type : "Vector<PrivacyRule>" } , { name : "users" , type : "Vector<User>" } ] , type : "account.PrivacyRules" } , { id : "-1194283041" , predicate : "accountDaysTTL" , params : [ { name : "days" , type : "int" } ] , type : "AccountDaysTTL" } , { id : "314130811" , predicate : "updateUserPhone" , params : [ { name : "user_id" , type : "int" } , { name : "phone" , type : "string" } ] , type : "Update" } , { id : "1815593308" , predicate : "documentAttributeImageSize" , params : [ { name : "w" , type : "int" } , { name : "h" , type : "int" } ] , type : "DocumentAttribute" } , { id : "297109817" , predicate : "documentAttributeAnimated" , params : [ ] , type : "DocumentAttribute" } , { id : "1662637586" , predicate : "documentAttributeSticker" , params : [ { name : "flags" , type : "#" } , { name : "mask" , type : "flags.1?true" } , { name : "alt" , type : "string" } , { name : "stickerset" , type : "InputStickerSet" } , { name : "mask_coords" , type : "flags.0?MaskCoords" } ] , type : "DocumentAttribute" } , { id : "1494273227" , predicate : "documentAttributeVideo" , params : [ { name : "duration" , type : " in
type : "int" } ] , type : "Update" } , { id : "-190472735" , predicate : "inputBotInlineMessageMediaGeo" , params : [ { name : "flags" , type : "#" } , { name : "geo_point" , type : "InputGeoPoint" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "InputBotInlineMessage" } , { id : "-1431327288" , predicate : "inputBotInlineMessageMediaVenue" , params : [ { name : "flags" , type : "#" } , { name : "geo_point" , type : "InputGeoPoint" } , { name : "title" , type : "string" } , { name : "address" , type : "string" } , { name : "provider" , type : "string" } , { name : "venue_id" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "InputBotInlineMessage" } , { id : "766443943" , predicate : "inputBotInlineMessageMediaContact" , params : [ { name : "flags" , type : "#" } , { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "InputBotInlineMessage" } , { id : "982505656" , predicate : "botInlineMessageMediaGeo" , params : [ { name : "flags" , type : "#" } , { name : "geo" , type : "GeoPoint" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "BotInlineMessage" } , { id : "1130767150" , predicate : "botInlineMessageMediaVenue" , params : [ { name : "flags" , type : "#" } , { name : "geo" , type : "GeoPoint" } , { name : "title" , type : "string" } , { name : "address" , type : "string" } , { name : "provider" , type : "string" } , { name : "venue_id" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "BotInlineMessage" } , { id : "904770772" , predicate : "botInlineMessageMediaContact" , params : [ { name : "flags" , type : "#" } , { name : "phone_number" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } ] , type : "BotInlineMessage" } , { id : "-1462213465" , predicate : "inputBotInlineResultPhoto" , params : [ { name : "id" , type : "string" } , { name : "type" , type : "string" } , { name : "photo" , type : "InputPhoto" } , { name : "send_message" , type : "InputBotInlineMessage" } ] , type : "InputBotInlineResult" } , { id : "-459324" , predicate : "inputBotInlineResultDocument" , params : [ { name : "flags" , type : "#" } , { name : "id" , type : "string" } , { name : "type" , type : "string" } , { name : "title" , type : "flags.1?string" } , { name : "description" , type : "flags.2?string" } , { name : "document" , type : "InputDocument" } , { name : "send_message" , type : "InputBotInlineMessage" } ] , type : "InputBotInlineResult" } , { id : "400266251" , predicate : "botInlineMediaResult" , params : [ { name : "flags" , type : "#" } , { name : "id" , type : "string" } , { name : "type" , type : "string" } , { name : "photo" , type : "flags.0?Photo" } , { name : "document" , type : "flags.1?Document" } , { name : "title" , type : "flags.2?string" } , { name : "description" , type : "flags.3?string" } , { name : "send_message" , type : "BotInlineMessage" } ] , type : "BotInlineResult" } , { id : "-1995686519" , predicate : "inputBotInlineMessageID" , params : [ { name : "dc_id" , type : "int" } , { name : "id" , type : "long" } , { name : "access_hash" , type : "long" } ] , type : "InputBotInlineMessageID" } , { id : "-103646630" , predicate : "updateInlineBotCallbackQuery" , params : [ { name : "flags" , type : "#" } , { name : "query_id" , type : "long" } , { name : "user_id" , type : "int" } , { name : "msg_id" , type : "InputBotInlineMessageID" } , { name : "chat_instance" , type : "long" } , { name : "data" , type : "flags.0?bytes" } , { name : "game_short_name" , type : "flags.1?string" } ] , type : "Update" } , { id : "1008755359" , predicate : "inlineBotSwitchPM" , params : [ { name : "text" , type : "string" } , { name : "start_param" , type : "string" } ] , type : "InlineBotSwitchPM" } , { id : "863093588" , predicate : "messages.peerDialogs" , params : [ { name : "dialogs" , type : "Vector<Dialog>" } , { name : "messages" , type : "Vector<Message>" } , { name : "chats" , type : "Vector<Chat>" } , { name : "users" , type : "Vector<User>" } , { name : "state" , type : "updates.State" } ] , type : "messages.PeerDialogs" } , { id : "-305282981" , predicate : "topPeer" , params : [ { name : "peer" , type : "Peer" } , { name : "rating" , type : "double" } ] , type : "TopPeer" } , { id : "-1419371685" , predicate : "topPeerCategoryBotsPM" , params : [ ] , type : "TopPeerCategory" } , { id : "344356834" , predicate : "topPeerCategoryBotsInline" , params : [ ] , type : "TopPeerCategory" } , { id : "104314861" , predicate : "topPeerCategoryCorrespondents" , params : [ ] , type : "TopPeerCategory" } , { id : "-1122524854" , predicate : "topPeerCategoryGroups" , params : [ ] , type : "TopPeerCategory" } , { id : "371037736" , predicate : "topPeerCategoryChannels" , params : [ ] , type : "TopPeerCategory" } , { id : "-75283823" , predicate : "topPeerCategoryPeers" , par
type : "long" } , { name : "results" , type : "Vector<InputBotInlineResult>" } , { name : "cache_time" , type : "int" } , { name : "next_offset" , type : "flags.2?string" } , { name : "switch_pm" , type : "flags.3?InlineBotSwitchPM" } ] , type : "Bool" } , { id : "-1318189314" , method : "messages.sendInlineBotResult" , params : [ { name : "flags" , type : "#" } , { name : "silent" , type : "flags.5?true" } , { name : "background" , type : "flags.6?true" } , { name : "clear_draft" , type : "flags.7?true" } , { name : "peer" , type : "InputPeer" } , { name : "reply_to_msg_id" , type : "flags.0?int" } , { name : "random_id" , type : "long" } , { name : "query_id" , type : "long" } , { name : "id" , type : "string" } ] , type : "Updates" } , { id : "1231065863" , method : "channels.toggleInvites" , params : [ { name : "channel" , type : "InputChannel" } , { name : "enabled" , type : "Bool" } ] , type : "Updates" } , { id : "-934882771" , method : "channels.exportMessageLink" , params : [ { name : "channel" , type : "InputChannel" } , { name : "id" , type : "int" } ] , type : "ExportedMessageLink" } , { id : "527021574" , method : "channels.toggleSignatures" , params : [ { name : "channel" , type : "InputChannel" } , { name : "enabled" , type : "Bool" } ] , type : "Updates" } , { id : "-1490162350" , method : "channels.updatePinnedMessage" , params : [ { name : "flags" , type : "#" } , { name : "silent" , type : "flags.0?true" } , { name : "channel" , type : "InputChannel" } , { name : "id" , type : "int" } ] , type : "Updates" } , { id : "1056025023" , method : "auth.resendCode" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } ] , type : "auth.SentCode" } , { id : "520357240" , method : "auth.cancelCode" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } ] , type : "Bool" } , { id : "-39416522" , method : "messages.getMessageEditData" , params : [ { name : "peer" , type : "InputPeer" } , { name : "id" , type : "int" } ] , type : "messages.MessageEditData" } , { id : "-829299510" , method : "messages.editMessage" , params : [ { name : "flags" , type : "#" } , { name : "no_webpage" , type : "flags.1?true" } , { name : "peer" , type : "InputPeer" } , { name : "id" , type : "int" } , { name : "message" , type : "flags.11?string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } , { name : "entities" , type : "flags.3?Vector<MessageEntity>" } ] , type : "Updates" } , { id : "319564933" , method : "messages.editInlineBotMessage" , params : [ { name : "flags" , type : "#" } , { name : "no_webpage" , type : "flags.1?true" } , { name : "id" , type : "InputBotInlineMessageID" } , { name : "message" , type : "flags.11?string" } , { name : "reply_markup" , type : "flags.2?ReplyMarkup" } , { name : "entities" , type : "flags.3?Vector<MessageEntity>" } ] , type : "Bool" } , { id : "-2130010132" , method : "messages.getBotCallbackAnswer" , params : [ { name : "flags" , type : "#" } , { name : "game" , type : "flags.1?true" } , { name : "peer" , type : "InputPeer" } , { name : "msg_id" , type : "int" } , { name : "data" , type : "flags.0?bytes" } ] , type : "messages.BotCallbackAnswer" } , { id : "-920136629" , method : "messages.setBotCallbackAnswer" , params : [ { name : "flags" , type : "#" } , { name : "alert" , type : "flags.1?true" } , { name : "query_id" , type : "long" } , { name : "message" , type : "flags.0?string" } , { name : "url" , type : "flags.2?string" } ] , type : "Bool" } , { id : "-728224331" , method : "contacts.getTopPeers" , params : [ { name : "flags" , type : "#" } , { name : "correspondents" , type : "flags.0?true" } , { name : "bots_pm" , type : "flags.1?true" } , { name : "bots_inline" , type : "flags.2?true" } , { name : "groups" , type : "flags.10?true" } , { name : "channels" , type : "flags.15?true" } , { name : "offset" , type : "int" } , { name : "limit" , type : "int" } , { name : "hash" , type : "int" } ] , type : "contacts.TopPeers" } , { id : "451113900" , method : "contacts.resetTopPeerRating" , params : [ { name : "category" , type : "TopPeerCategory" } , { name : "peer" , type : "InputPeer" } ] , type : "Bool" } , { id : "764901049" , method : "messages.getPeerDialogs" , params : [ { name : "peers" , type : "Vector<InputPeer>" } ] , type : "messages.PeerDialogs" } , { id : "-1137057461" , method : "messages.saveDraft" , params : [ { name : "flags" , type : "#" } , { name : "no_webpage" , type : "flags.1?true" } , { name : "reply_to_msg_id" , type : "flags.0?int" } , { name : "peer" , type : "InputPeer" } , { name : "message" , type : "string" } , { name : "entities" , type : "flags.3?Vector<MessageEntity>" } ] , type : "Bool" } , { id : "1782549861" , method : "messages.getAllDrafts" , params : [ ] , type : "Updates" } , { id : "766298703" , method : "messages.getFeaturedStickers" , params : [ { name : "hash" , type : "int" } ] , type : "messages.FeaturedStickers" } , { id : "1527873830" , method : "messages.readFeaturedStickers" , params : [ { name : "id" , type : "Vector<long>" } ] , type : "Bool" } , { id : "1587647177" , method : " me
Config . EmojiCategorySpritesheetDimens = [ [ 7 , 27 ] , [ 4 , 29 ] , [ 7 , 33 ] , [ 3 , 34 ] , [ 7 , 34 ] ] , Config . LatinizeMap = { "Á" : "A" , "Ă" : "A" , "Ắ" : "A" , "Ặ" : "A" , "Ằ" : "A" , "Ẳ" : "A" , "Ẵ" : "A" , "Ǎ" : "A" , "Â" : "A" , "Ấ" : "A" , "Ậ" : "A" , "Ầ" : "A" , "Ẩ" : "A" , "Ẫ" : "A" , "Ä" : "A" , "Ǟ" : "A" , "Ȧ" : "A" , "Ǡ" : "A" , "Ạ" : "A" , "Ȁ" : "A" , "À" : "A" , "Ả" : "A" , "Ȃ" : "A" , "Ā" : "A" , "Ą" : "A" , "Å" : "A" , "Ǻ" : "A" , "Ḁ" : "A" , "Ⱥ" : "A" , "Ã" : "A" , "Ꜳ" : "AA" , "Æ" : "AE" , "Ǽ" : "AE" , "Ǣ" : "AE" , "Ꜵ" : "AO" , "Ꜷ" : "AU" , "Ꜹ" : "AV" , "Ꜻ" : "AV" , "Ꜽ" : "AY" , "Ḃ" : "B" , "Ḅ" : "B" , "Ɓ" : "B" , "Ḇ" : "B" , "Ƀ" : "B" , "Ƃ" : "B" , "Ć" : "C" , "Č" : "C" , "Ç" : "C" , "Ḉ" : "C" , "Ĉ" : "C" , "Ċ" : "C" , "Ƈ" : "C" , "Ȼ" : "C" , "Ď" : "D" , "Ḑ" : "D" , "Ḓ" : "D" , "Ḋ" : "D" , "Ḍ" : "D" , "Ɗ" : "D" , "Ḏ" : "D" , "Dz" : "D" , "Dž" : "D" , "Đ" : "D" , "Ƌ" : "D" , "DZ" : "DZ" , "DŽ" : "DZ" , "É" : "E" , "Ĕ" : "E" , "Ě" : "E" , "Ȩ" : "E" , "Ḝ" : "E" , "Ê" : "E" , "Ế" : "E" , "Ệ" : "E" , "Ề" : "E" , "Ể" : "E" , "Ễ" : "E" , "Ḙ" : "E" , "Ë" : "E" , "Ė" : "E" , "Ẹ" : "E" , "Ȅ" : "E" , "È" : "E" , "Ẻ" : "E" , "Ȇ" : "E" , "Ē" : "E" , "Ḗ" : "E" , "Ḕ" : "E" , "Ę" : "E" , "Ɇ" : "E" , "Ẽ" : "E" , "Ḛ" : "E" , "Ꝫ" : "ET" , "Ḟ" : "F" , "Ƒ" : "F" , "Ǵ" : "G" , "Ğ" : "G" , "Ǧ" : "G" , "Ģ" : "G" , "Ĝ" : "G" , "Ġ" : "G" , "Ɠ" : "G" , "Ḡ" : "G" , "Ǥ" : "G" , "Ḫ" : "H" , "Ȟ" : "H" , "Ḩ" : "H" , "Ĥ" : "H" , "Ⱨ" : "H" , "Ḧ" : "H" , "Ḣ" : "H" , "Ḥ" : "H" , "Ħ" : "H" , "Í" : "I" , "Ĭ" : "I" , "Ǐ" : "I" , "Î" : "I" , "Ï" : "I" , "Ḯ" : "I" , "İ" : "I" , "Ị" : "I" , "Ȉ" : "I" , "Ì" : "I" , "Ỉ" : "I" , "Ȋ" : "I" , "Ī" : "I" , "Į" : "I" , "Ɨ" : "I" , "Ĩ" : "I" , "Ḭ" : "I" , "Ꝺ" : "D" , "Ꝼ" : "F" , "Ᵹ" : "G" , "Ꞃ" : "R" , "Ꞅ" : "S" , "Ꞇ" : "T" , "Ꝭ" : "IS" , "Ĵ" : "J" , "Ɉ" : "J" , "Ḱ" : "K" , "Ǩ" : "K" , "Ķ" : "K" , "Ⱪ" : "K" , "Ꝃ" : "K" , "Ḳ" : "K" , "Ƙ" : "K" , "Ḵ" : "K" , "Ꝁ" : "K" , "Ꝅ" : "K" , "Ĺ" : "L" , "Ƚ" : "L" , "Ľ" : "L" , "Ļ" : "L" , "Ḽ" : "L" , "Ḷ" : "L" , "Ḹ" : "L" , "Ⱡ" : "L" , "Ꝉ" : "L" , "Ḻ" : "L" , "Ŀ" : "L" , "Ɫ" : "L" , "Lj" : "L" , "Ł" : "L" , "LJ" : "LJ" , "Ḿ" : "M" , "Ṁ" : "M" , "Ṃ" : "M" , "Ɱ" : "M" , "Ń" : "N" , "Ň" : "N" , "Ņ" : "N" , "Ṋ" : "N" , "Ṅ" : "N" , "Ṇ" : "N" , "Ǹ" : "N" , "Ɲ" : "N" , "Ṉ" : "N" , "Ƞ" : "N" , "Nj" : "N" , "Ñ" : "N" , "NJ" : "NJ" , "Ó" : "O" , "Ŏ" : "O" , "Ǒ" : "O" , "Ô" : "O" , "Ố" : "O" , "Ộ" : "O" , "Ồ" : "O" , "Ổ" : "O" , "Ỗ" : "O" , "Ö" : "O" , "Ȫ" : "O" , "Ȯ" : "O" , "Ȱ" : "O" , "Ọ" : "O" , "Ő" : "O" , "Ȍ" : "O" , "Ò" : "O" , "Ỏ" : "O" , "Ơ" : "O" , "Ớ" : "O" , "Ợ" : "O" , "Ờ" : "O" , "Ở" : "O" , "Ỡ" : "O" , "Ȏ" : "O" , "Ꝋ" : "O" , "Ꝍ" : "O" , "Ō" : "O" , "Ṓ" : "O" , "Ṑ" : "O" , "Ɵ" : "O" , "Ǫ" : "O" , "Ǭ" : "O" , "Ø" : "O" , "Ǿ" : "O" , "Õ" : "O" , "Ṍ" : "O" , "Ṏ" : "O" , "Ȭ" : "O" , "Ƣ" : "OI" , "Ꝏ" : "OO" , "Ɛ" : "E" , "Ɔ" : "O" , "Ȣ" : "OU" , "Ṕ" : "P" , "Ṗ" : "P" , "Ꝓ" : "P" , "Ƥ" : "P" , "Ꝕ" : "P" , "Ᵽ" : "P" , "Ꝑ" : "P" , "Ꝙ" : "Q" , "Ꝗ" : "Q" , "Ŕ" : "R" , "Ř" : "R" , "Ŗ" : "R" , "Ṙ" : "R" , "Ṛ" : "R" , "Ṝ" : "R" , "Ȑ" : "R" , "Ȓ" : "R" , "Ṟ" : "R" , "Ɍ" : "R" , "Ɽ" : "R" , "Ꜿ" : "C" , "Ǝ" : "E" , "Ś" : "S" , "Ṥ" : "S" , "Š" : "S" , "Ṧ" : "S" , "Ş" : "S" , "Ŝ" : "S" , "Ș" : "S" , "Ṡ" : "S" , "Ṣ" : "S" , "Ṩ" : "S" , "ẞ" : "SS" , "Ť" : "T" , "Ţ" : "T" , "Ṱ" : "T" , "Ț" : "T" , "Ⱦ" : "T" , "Ṫ" : "T" , "Ṭ" : "T" , "Ƭ" : "T" , "Ṯ" : "T" , "Ʈ" : "T" , "Ŧ" : "T" , "Ɐ" : "A" , "Ꞁ" : "L" , "Ɯ" : "M" , "Ʌ" : "V" , "Ꜩ" : "TZ" , "Ú" : "U" , "Ŭ" : "U" , "Ǔ" : "U" , "Û" : "U" , "Ṷ" : "U" , "Ü" : "U" , "Ǘ" : "U" , "Ǚ" : "U" , "Ǜ" : "U" , "Ǖ" : "U" , "Ṳ" : "U" , "Ụ" : "U" , "Ű" : "U" , "Ȕ" : "U" , "Ù" : "U" , "Ủ" : "U" , "Ư" : "U" , "Ứ" : "U" , "Ự" : "U" , "Ừ" : "U" , "Ử" : "U" , "Ữ" : "U" , "Ȗ" : "U" , "Ū" : "U" , "Ṻ" : "U" , "Ų" : "U" , "Ů" : "U" , "Ũ" : "U" , "Ṹ" : "U" , "Ṵ" : "U" , "Ꝟ" : "V" , "Ṿ" : "V" , "Ʋ" : "V" , "Ṽ" : "V" , "Ꝡ" : "VY" , "Ẃ" : "W" , "Ŵ" : "W" , "Ẅ" : "W" , "Ẇ" : "W" , "Ẉ" : "W" , "Ẁ" : "W" , "Ⱳ" : "W" , "Ẍ" : "X" , "Ẋ" : "X" , "Ý" : "Y" , "Ŷ" : "Y" , "Ÿ" : "Y" , "Ẏ" : "Y" , "Ỵ" : "Y" , "Ỳ" : "Y" , "Ƴ" : "Y" , "Ỷ" : "Y" , "Ỿ" : "Y" , "Ȳ" : "Y" , "Ɏ" : "Y" , "Ỹ" : "Y" , "Ź" : "Z" , "Ž" : "Z" , "Ẑ" : "Z" , "Ⱬ" : "Z" , "Ż" : "Z" , "Ẓ" : "Z" , "Ȥ" : "Z" , "Ẕ" : "Z" , "Ƶ" : "Z" , "IJ" : "IJ" , "Œ" : "OE" , "ᴀ" : "A" , "ᴁ" : "AE" , "ʙ" : "B" , "ᴃ" : "B" , "ᴄ" : "C" , "ᴅ" : "D" , "ᴇ" : "E" , "ꜰ" : "F" , "ɢ" : "G" , "ʛ" : "G" , "ʜ" : "H" , "ɪ" : "I" , "ʁ" : "R" , "ᴊ" : "J" , "ᴋ" : "K" , "ʟ" : "L" , "ᴌ" : "L" , "ᴍ" : "M" , "ɴ" : "N" , "ᴏ" : "O" , "ɶ" : "OE" , "ᴐ" : "O" , "ᴕ" : "OU" , "ᴘ" : "P" , "ʀ" : "R" , "ᴎ" : "N" , "ᴙ" : "R" , "ꜱ" : "S" , "ᴛ" : "T" , "ⱻ" : "E" , "ᴚ" : "R" , "ᴜ" : "U" , "ᴠ" : "V" , "ᴡ" : "W" , "ʏ" : "Y" , "ᴢ" : "Z" , "á" : "a" , "ă" : "a" , "ắ" : "a" , "ặ" : "a" , "ằ" : "a" , "ẳ" : "a" , "ẵ" : "a" , "ǎ" : "a" , "â" : "a" , "ấ" : "a" , "ậ" : "a" , "ầ" : "a" , "ẩ" : "a" , "ẫ" : "a" , "ä" : "a" , "ǟ" : "a" , "ȧ" : "a" , "ǡ" : "a" , "ạ" : "a" , "ȁ" : "a" , "à" : "a" , "ả" : "a" , "ȃ" : "a" , "ā" : "a" , "ą" : "a" , "ᶏ" : "a" , "ẚ" : "a" , "å" : "a" , "ǻ" : "a" , "ḁ" : "a" , "ⱥ" : "a" , "ã" : "a" , "ꜳ" : "aa" , "æ" : "ae" , "ǽ" : "ae" , "ǣ" : "ae" , "ꜵ" : "ao" , "ꜷ" : "au" , "ꜹ" : "av" , "ꜻ" : "av" , " ꜽ
} ) ) , this ) } , c . prototype . scroll = function ( ) { if ( this . isActive ) return this . sliderY = Math . max ( 0 , this . sliderY ) , this . sliderY = Math . min ( this . maxSliderTop , this . sliderY ) , this . $content . scrollTop ( this . maxScrollTop * this . sliderY / this . maxSliderTop ) , this . iOSNativeScrolling || ( this . updateScrollValues ( ) , this . setOnScrollStyles ( ) ) , this } , c . prototype . scrollBottom = function ( e ) { if ( this . isActive ) return this . $content . scrollTop ( this . contentHeight - this . $content . height ( ) - e ) . trigger ( h ) , this . stop ( ) . restore ( ) , this } , c . prototype . scrollTop = function ( e ) { if ( this . isActive ) return this . $content . scrollTop ( + e ) . trigger ( h ) , this . stop ( ) . restore ( ) , this } , c . prototype . scrollTo = function ( e ) { if ( this . isActive ) return this . scrollTop ( this . $el . find ( e ) . get ( 0 ) . offsetTop ) , this } , c . prototype . stop = function ( ) { return S && this . scrollRAF && ( S ( this . scrollRAF ) , this . scrollRAF = null ) , this . stopped = ! 0 , this . removeEvents ( ) , this . iOSNativeScrolling || this . pane . hide ( ) , this } , c . prototype . destroy = function ( ) { return this . stopped || this . stop ( ) , ! this . iOSNativeScrolling && this . pane . length && this . pane . remove ( ) , a && this . $content . height ( "" ) , this . $content . removeAttr ( "tabindex" ) , this . $el . hasClass ( "has-scrollbar" ) && ( this . $el . removeClass ( "has-scrollbar" ) , this . $content . css ( { right : "" } ) ) , this } , c . prototype . flash = function ( ) { if ( ! this . iOSNativeScrolling && this . isActive ) return this . reset ( ) , this . pane . addClass ( "flashed" ) , setTimeout ( function ( e ) { return function ( ) { e . pane . removeClass ( "flashed" ) } } ( this ) , this . options . flashDelay ) , this } , c } ( ) , e . fn . nanoScroller = function ( t ) { return this . each ( function ( ) { var n , a ; if ( ( a = this . nanoscroller ) || ( n = e . extend ( { } , C , t ) , this . nanoscroller = a = new f ( this , n ) ) , t && "object" == typeof t ) { if ( e . extend ( a . options , t ) , null != t . scrollBottom ) return a . scrollBottom ( t . scrollBottom ) ; if ( null != t . scrollTop ) return a . scrollTop ( t . scrollTop ) ; if ( t . scrollTo ) return a . scrollTo ( t . scrollTo ) ; if ( "bottom" === t . scroll ) return a . scrollBottom ( 0 ) ; if ( "top" === t . scroll ) return a . scrollTop ( 0 ) ; if ( t . scroll && t . scroll instanceof e ) return a . scrollTo ( t . scroll ) ; if ( t . stop ) return a . stop ( ) ; if ( t . destroy ) return a . destroy ( ) ; if ( t . flash ) return a . flash ( ) } return a . reset ( ) } ) } , e . fn . nanoScroller . Constructor = f } ( jQuery , window , document ) , function ( e ) { "use strict" ; function t ( e , t ) { return t = t || Error , function ( ) { var n , a , i = 2 , o = arguments , s = o [ 0 ] , r = "[" + ( e ? e + ":" : "" ) + s + "] " , l = o [ 1 ] ; for ( r += l . replace ( /\{\d+\}/g , function ( e ) { var t = + e . slice ( 1 , - 1 ) , n = t + i ; return n < o . length ? ve ( o [ n ] ) : e } ) , r += "\nhttp://errors.angularjs.org/1.5.7/" + ( e ? e + "/" : "" ) + s , a = i , n = "?" ; a < o . length ; a ++ , n = "&" ) r += n + "p" + ( a - i ) + "=" + encodeURIComponent ( ve ( o [ a ] ) ) ; return new t ( r ) } } function n ( e ) { if ( null == e || M ( e ) ) return ! 1 ; if ( Ya ( e ) || w ( e ) || Ua && e instanceof Ua ) return ! 0 ; var t = "length" in Object ( e ) && e . length ; return k ( t ) && ( t >= 0 && ( t - 1 in e || e instanceof Array ) || "function" == typeof e . item ) } function a ( e , t , i ) { var o , s ; if ( e ) if ( S ( e ) ) for ( o in e ) "prototype" == o || "length" == o || "name" == o || e . hasOwnProperty && ! e . hasOwnProperty ( o ) || t . call ( i , e [ o ] , o , e ) ; else if ( Ya ( e ) || n ( e ) ) { var r = "object" != typeof e ; for ( o = 0 , s = e . length ; o < s ; o ++ ) ( r || o in e ) && t . call ( i , e [ o ] , o , e ) } else if ( e . forEach && e . forEach !== a ) e . forEach ( t , i , e ) ; else if ( b ( e ) ) for ( o in e ) t . call ( i , e [ o ] , o , e ) ; else if ( "function" == typeof e . hasOwnProperty ) for ( o in e ) e . hasOwnProperty ( o ) && t . call ( i , e [ o ] , o , e ) ; else for ( o in e ) Da . call ( e , o ) && t . call ( i , e [ o ] , o , e ) ; return e } function i ( e , t , n ) { for ( var a = Object . keys ( e ) . sort ( ) , i = 0 ; i < a . length ; i ++ ) t . call ( n , e [ a [ i ] ] , a [ i ] ) ; return a } function o ( e ) { return function ( t , n ) { e ( n , t ) } } function s ( ) { return ++ Ka } function r ( e , t ) { t ? e . $$hashKey = t : delete e . $$hashKey } function l ( e , t , n ) { for ( var a = e . $$hashKey , i = 0 , o = t . length ; i < o ; ++ i ) { var s = t [ i ] ; if ( y ( s ) || S ( s ) ) for ( var c = Object . keys ( s ) , d = 0 , u = c . length ; d < u ; d ++ ) { var p = c [ d ] , m = s [ p ] ; n && y ( m ) ? $ ( m ) ? e [ p ] = new Date ( m . valueOf ( ) ) : C ( m ) ? e [ p ] = new RegExp ( m ) : m . nodeName ? e [ p ] = m . cloneNode ( ! 0 ) : N ( m ) ? e [ p ] = m . clone ( ) : ( y ( e [ p ] ) || ( e [ p ] = Ya ( m ) ? [ ] : { } ) , l ( e [ p ] , [ m ] , ! 0 ) ) : e [ p ] = m } } return r ( e , a ) , e } function c ( e ) { return l ( e , ja . call ( arguments , 1 ) , ! 1 ) } function d ( e ) { return l ( e , ja . call ( arguments , 1 ) , ! 0 ) } function u ( e ) { return parseInt ( e , 10 ) } function p ( e , t ) { return c ( Object . create ( e ) , t ) } function m ( ) { } function g ( e ) { return e } function h ( e ) { return function ( ) { return e } } function f ( e ) { return S ( e . toString ) && e . toString !== Va } function _ ( e ) { return " undefine
var t = e && e [ 0 ] ; return t && "foreignobject" !== O ( t ) && Va . call ( t ) . match ( /SVG/ ) ? "svg" : "html" } function V ( e , t , n , a , i , o ) { function s ( e , n , a , i ) { var o , s , r , l , c , d , u , p , h ; if ( m ) { var f = n . length ; for ( h = new Array ( f ) , c = 0 ; c < g . length ; c += 3 ) u = g [ c ] , h [ u ] = n [ u ] } else h = n ; for ( c = 0 , d = g . length ; c < d ; ) r = h [ g [ c ++ ] ] , o = g [ c ++ ] , s = g [ c ++ ] , o ? ( o . scope ? ( l = e . $new ( ) , B . $$addScopeInfo ( Ua ( r ) , l ) ) : l = e , p = o . transcludeOnThisElement ? z ( e , o . transclude , i ) : ! o . templateOnThisElement && i ? i : ! i && t ? z ( e , t ) : null , o ( s , l , r , a , p ) ) : s && s ( e , r . childNodes , void 0 , i ) } for ( var r , l , c , d , u , p , m , g = [ ] , h = 0 ; h < e . length ; h ++ ) r = new F , l = W ( e [ h ] , [ ] , r , 0 === h ? a : void 0 , i ) , c = l . length ? X ( l , e [ h ] , r , t , n , null , [ ] , [ ] , o ) : null , c && c . scope && B . $$addScopeClass ( r . $$element ) , u = c && c . terminal || ! ( d = e [ h ] . childNodes ) || ! d . length ? null : V ( d , c ? ( c . transcludeOnThisElement || ! c . templateOnThisElement ) && c . transclude : t ) , ( c || u ) && ( g . push ( h , c , u ) , p = ! 0 , m = m || c ) , o = null ; return p ? s : null } function z ( e , t , n ) { function a ( a , i , o , s , r ) { return a || ( a = e . $new ( ! 1 , r ) , a . $$transcluded = ! 0 ) , t ( a , i , { parentBoundTranscludeFn : n , transcludeControllers : o , futureParentElement : s } ) } var i = a . $$slots = ge ( ) ; for ( var o in t . $$slots ) t . $$slots [ o ] ? i [ o ] = z ( e , t . $$slots [ o ] , n ) : i [ o ] = null ; return a } function W ( e , t , n , a , i ) { var o , s , r = e . nodeType , l = n . $attr ; switch ( r ) { case oi : te ( t , ft ( O ( e ) ) , "E" , a , i ) ; for ( var c , d , u , p , m , g , h = e . attributes , _ = 0 , v = h && h . length ; _ < v ; _ ++ ) { var k = ! 1 , $ = ! 1 ; c = h [ _ ] , d = c . name , m = Xa ( c . value ) , p = ft ( d ) , ( g = Me . test ( p ) ) && ( d = d . replace ( Ki , "" ) . substr ( 8 ) . replace ( /_(.)/g , function ( e , t ) { return t . toUpperCase ( ) } ) ) ; var S = p . match ( xe ) ; S && ne ( S [ 1 ] ) && ( k = d , $ = d . substr ( 0 , d . length - 5 ) + "end" , d = d . substr ( 0 , d . length - 6 ) ) , u = ft ( d . toLowerCase ( ) ) , l [ u ] = d , ! g && n . hasOwnProperty ( u ) || ( n [ u ] = m , ze ( e , u ) && ( n [ u ] = ! 0 ) ) , pe ( e , t , m , u , g ) , te ( t , u , "A" , a , i , k , $ ) } if ( s = e . className , y ( s ) && ( s = s . animVal ) , w ( s ) && "" !== s ) for ( ; o = b . exec ( s ) ; ) u = ft ( o [ 2 ] ) , te ( t , u , "C" , a , i ) && ( n [ u ] = Xa ( o [ 3 ] ) ) , s = s . substr ( o . index + o [ 0 ] . length ) ; break ; case ri : if ( 11 === Oa ) for ( ; e . parentNode && e . nextSibling && e . nextSibling . nodeType === ri ; ) e . nodeValue = e . nodeValue + e . nextSibling . nodeValue , e . parentNode . removeChild ( e . nextSibling ) ; le ( t , e . nodeValue ) ; break ; case li : try { o = f . exec ( e . nodeValue ) , o && ( u = ft ( o [ 1 ] ) , te ( t , u , "M" , a , i ) && ( n [ u ] = Xa ( o [ 2 ] ) ) ) } catch ( C ) { } } return t . sort ( oe ) , t } function G ( e , t , n ) { var a = [ ] , i = 0 ; if ( t && e . hasAttribute && e . hasAttribute ( t ) ) { do { if ( ! e ) throw Wi ( "uterdir" , "Unterminated attribute, found '{0}' but no matching '{1}' found." , t , n ) ; e . nodeType == oi && ( e . hasAttribute ( t ) && i ++ , e . hasAttribute ( n ) && i -- ) , a . push ( e ) , e = e . nextSibling } while ( i > 0 ) } else a . push ( e ) ; return Ua ( a ) } function K ( e , t , n ) { return function ( a , i , o , s , r ) { return i = G ( i [ 0 ] , t , n ) , e ( a , i , o , s , r ) } } function Y ( e , t , n , a , i , o ) { var s ; return e ? B ( t , n , a , i , o ) : function ( ) { return s || ( s = B ( t , n , a , i , o ) , t = n = o = null ) , s . apply ( this , arguments ) } } function X ( e , t , n , o , s , r , l , d , u ) { function p ( e , t , n , a ) { e && ( n && ( e = K ( e , n , a ) ) , e . require = g . require , e . directiveName = h , ( C === g || g . $$isolateScope ) && ( e = he ( e , { isolateScope : ! 0 } ) ) , l . push ( e ) ) , t && ( n && ( t = K ( t , n , a ) ) , t . require = g . require , t . directiveName = h , ( C === g || g . $$isolateScope ) && ( t = he ( t , { isolateScope : ! 0 } ) ) , d . push ( t ) ) } function m ( e , o , s , r , u ) { function p ( e , t , n , a ) { var i ; if ( x ( e ) || ( a = n , n = t , t = e , e = void 0 ) , T && ( i = b ) , n || ( n = T ? I . parent ( ) : I ) , ! a ) return u ( e , t , i , n , U ) ; var o = u . $$slots [ a ] ; if ( o ) return o ( e , t , i , n , U ) ; if ( _ ( o ) ) throw Wi ( "noslot" , 'No parent directive that requires a transclusion with slot name "{0}". Element: {1}' , a , Z ( I ) ) } var m , g , h , f , v , b , w , I , A , E ; t === s ? ( A = n , I = n . $$element ) : ( I = Ua ( s ) , A = new F ( I , n ) ) , v = o , C ? f = o . $new ( ! 0 ) : k && ( v = o . $parent ) , u && ( w = p , w . $$boundTransclude = u , w . isSlotFilled = function ( e ) { return ! ! u . $$slots [ e ] } ) , $ && ( b = Q ( I , A , w , $ , f , o , C ) ) , C && ( B . $$addScopeInfo ( I , f , ! 0 , ! ( M && ( M === C || M === C . $$originalDirective ) ) ) , B . $$addScopeClass ( I , ! 0 ) , f . $$isolateBindings = C . $$isolateBindings , E = _e ( o , A , f , f . $$isolateBindings , C ) , E . removeWatches && f . $on ( "$destroy" , E . removeWatches ) ) ; for ( var D in b ) { var P = $ [ D ] , N = b [ D ] , R = P . $$bindings . bindToController ; N . identifier && R ? N . bindingInfo = _e ( v , A , N . instance , R , P ) : N . bindingInfo = { } ; var O = N ( ) ; O !== N . instance && ( N . instance = O , I . data ( "$" + P . name + "Controller" , O ) , N . bindingInfo . removeWatches && N . bindingInfo . removeWatches ( ) , N . bindingInfo = _e ( v , A , N . instance , R , P ) ) } for ( a ( $ , function ( e , t ) { var n = e . require ; e . bindToController && ! Ya ( n ) && y ( n ) && c ( b [ t ] . instance , J ( t , n , I , b ) ) } ) , a ( b , function ( e ) { var t = e . instance ; if ( S ( t . $onChanges ) ) try {
if ( e . children && ( e . nodeName || e . prop && e . attr && e . find ) ) throw uo ( "isecdom" , "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}" , t ) ; if ( e === Object ) throw uo ( "isecobj" , "Referencing Object in Angular expressions is disallowed! Expression: {0}" , t ) } return e } function an ( e , t ) { if ( e ) { if ( e . constructor === e ) throw uo ( "isecfn" , "Referencing Function in Angular expressions is disallowed! Expression: {0}" , t ) ; if ( e === po || e === mo || e === go ) throw uo ( "isecff" , "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}" , t ) } } function on ( e , t ) { if ( e && ( e === ( 0 ) . constructor || e === ( ! 1 ) . constructor || e === "" . constructor || e === { } . constructor || e === [ ] . constructor || e === Function . constructor ) ) throw uo ( "isecaf" , "Assigning to a constructor is disallowed! Expression: {0}" , t ) } function sn ( e , t ) { return "undefined" != typeof e ? e : t } function rn ( e , t ) { return "undefined" == typeof e ? t : "undefined" == typeof t ? e : e + t } function ln ( e , t ) { var n = e ( t ) ; return ! n . $stateful } function cn ( e , t ) { var n , i ; switch ( e . type ) { case vo . Program : n = ! 0 , a ( e . body , function ( e ) { cn ( e . expression , t ) , n = n && e . expression . constant } ) , e . constant = n ; break ; case vo . Literal : e . constant = ! 0 , e . toWatch = [ ] ; break ; case vo . UnaryExpression : cn ( e . argument , t ) , e . constant = e . argument . constant , e . toWatch = e . argument . toWatch ; break ; case vo . BinaryExpression : cn ( e . left , t ) , cn ( e . right , t ) , e . constant = e . left . constant && e . right . constant , e . toWatch = e . left . toWatch . concat ( e . right . toWatch ) ; break ; case vo . LogicalExpression : cn ( e . left , t ) , cn ( e . right , t ) , e . constant = e . left . constant && e . right . constant , e . toWatch = e . constant ? [ ] : [ e ] ; break ; case vo . ConditionalExpression : cn ( e . test , t ) , cn ( e . alternate , t ) , cn ( e . consequent , t ) , e . constant = e . test . constant && e . alternate . constant && e . consequent . constant , e . toWatch = e . constant ? [ ] : [ e ] ; break ; case vo . Identifier : e . constant = ! 1 , e . toWatch = [ e ] ; break ; case vo . MemberExpression : cn ( e . object , t ) , e . computed && cn ( e . property , t ) , e . constant = e . object . constant && ( ! e . computed || e . property . constant ) , e . toWatch = [ e ] ; break ; case vo . CallExpression : n = ! ! e . filter && ln ( t , e . callee . name ) , i = [ ] , a ( e . arguments , function ( e ) { cn ( e , t ) , n = n && e . constant , e . constant || i . push . apply ( i , e . toWatch ) } ) , e . constant = n , e . toWatch = e . filter && ln ( t , e . callee . name ) ? i : [ e ] ; break ; case vo . AssignmentExpression : cn ( e . left , t ) , cn ( e . right , t ) , e . constant = e . left . constant && e . right . constant , e . toWatch = [ e ] ; break ; case vo . ArrayExpression : n = ! 0 , i = [ ] , a ( e . elements , function ( e ) { cn ( e , t ) , n = n && e . constant , e . constant || i . push . apply ( i , e . toWatch ) } ) , e . constant = n , e . toWatch = i ; break ; case vo . ObjectExpression : n = ! 0 , i = [ ] , a ( e . properties , function ( e ) { cn ( e . value , t ) , n = n && e . value . constant && ! e . computed , e . value . constant || i . push . apply ( i , e . value . toWatch ) } ) , e . constant = n , e . toWatch = i ; break ; case vo . ThisExpression : e . constant = ! 1 , e . toWatch = [ ] ; break ; case vo . LocalsExpression : e . constant = ! 1 , e . toWatch = [ ] } } function dn ( e ) { if ( 1 == e . length ) { var t = e [ 0 ] . expression , n = t . toWatch ; return 1 !== n . length ? n : n [ 0 ] !== t ? n : void 0 } } function un ( e ) { return e . type === vo . Identifier || e . type === vo . MemberExpression } function pn ( e ) { if ( 1 === e . body . length && un ( e . body [ 0 ] . expression ) ) return { type : vo . AssignmentExpression , left : e . body [ 0 ] . expression , right : { type : vo . NGValueParameter } , operator : "=" } } function mn ( e ) { return 0 === e . body . length || 1 === e . body . length && ( e . body [ 0 ] . expression . type === vo . Literal || e . body [ 0 ] . expression . type === vo . ArrayExpression || e . body [ 0 ] . expression . type === vo . ObjectExpression ) } function gn ( e ) { return e . constant } function hn ( e , t ) { this . astBuilder = e , this . $filter = t } function fn ( e , t ) { this . astBuilder = e , this . $filter = t } function _n ( e ) { return "constructor" == e } function vn ( e ) { return S ( e . valueOf ) ? e . valueOf ( ) : bo . call ( e ) } function yn ( ) { var e , t , n = ge ( ) , i = ge ( ) , o = { "true" : ! 0 , "false" : ! 1 , "null" : null , undefined : void 0 } ; this . addLiteral = function ( e , t ) { o [ e ] = t } , this . setIdentifierFns = function ( n , a ) { return e = n , t = a , this } , this . $get = [ "$filter" , function ( s ) { function r ( e , t , a ) { var o , r , c ; switch ( a = a || b , typeof e ) { case "string" : e = e . trim ( ) , c = e ; var f = a ? i : n ; if ( o = f [ c ] , ! o ) { ":" === e . charAt ( 0 ) && ":" === e . charAt ( 1 ) && ( r = ! 0 , e = e . substring ( 2 ) ) ; var v = a ? y : _ , w = new _o ( v ) , k = new yo ( w , s , v ) ; o = k . parse ( e ) , o . constant ? o . $$watchDelegate = g : r ? o . $$watchDelegate = o . literal ? p : u : o . inputs && ( o . $$watchDelegate = d ) , a && ( o = l ( o ) ) , f [ c ] = o } return h ( o , t ) ; case "function" :
var t = e . keyCode ; 91 === t || 15 < t && t < 19 || 37 <= t && t <= 40 || d ( e , this , this . value ) } ) , i . hasEvent ( "paste" ) && t . on ( "paste cut" , d ) } t . on ( "change" , c ) , Xo [ s ] && a . $$hasNativeValidators && s === n . type && t . on ( Zo , function ( e ) { if ( ! l ) { var t = this [ Ta ] , n = t . badInput , a = t . typeMismatch ; l = o . defer ( function ( ) { l = null , t . badInput === n && t . typeMismatch === a || c ( e ) } ) } } ) , a . $render = function ( ) { var e = a . $isEmpty ( a . $viewValue ) ? "" : a . $viewValue ; t . val ( ) !== e && t . val ( e ) } } function fa ( e , t ) { if ( $ ( e ) ) return e ; if ( w ( e ) ) { Go . lastIndex = 0 ; var n = Go . exec ( e ) ; if ( n ) { var a = + n [ 1 ] , i = + n [ 2 ] , o = 0 , s = 0 , r = 0 , l = 0 , c = Qn ( a ) , d = 7 * ( i - 1 ) ; return t && ( o = t . getHours ( ) , s = t . getMinutes ( ) , r = t . getSeconds ( ) , l = t . getMilliseconds ( ) ) , new Date ( a , 0 , c . getDate ( ) + d , o , s , r , l ) } } return NaN } function _a ( e , t ) { return function ( n , i ) { var o , s ; if ( $ ( n ) ) return n ; if ( w ( n ) ) { if ( '"' == n . charAt ( 0 ) && '"' == n . charAt ( n . length - 1 ) && ( n = n . substring ( 1 , n . length - 1 ) ) , jo . test ( n ) ) return new Date ( n ) ; if ( e . lastIndex = 0 , o = e . exec ( n ) ) return o . shift ( ) , s = i ? { yyyy : i . getFullYear ( ) , MM : i . getMonth ( ) + 1 , dd : i . getDate ( ) , HH : i . getHours ( ) , mm : i . getMinutes ( ) , ss : i . getSeconds ( ) , sss : i . getMilliseconds ( ) / 1e3 } : { yyyy : 1970 , MM : 1 , dd : 1 , HH : 0 , mm : 0 , ss : 0 , sss : 0 } , a ( o , function ( e , n ) { n < t . length && ( s [ t [ n ] ] = + e ) } ) , new Date ( s . yyyy , s . MM - 1 , s . dd , s . HH , s . mm , s . ss || 0 , 1e3 * s . sss || 0 ) } return NaN } } function va ( e , t , n , a ) { return function ( i , o , s , r , l , c , d ) { function u ( e ) { return e && ! ( e . getTime && e . getTime ( ) !== e . getTime ( ) ) } function p ( e ) { return v ( e ) && ! $ ( e ) ? n ( e ) || void 0 : e } ya ( i , o , s , r ) , ha ( i , o , s , r , l , c ) ; var m , g = r && r . $options && r . $options . timezone ; if ( r . $$parserName = e , r . $parsers . push ( function ( e ) { if ( r . $isEmpty ( e ) ) return null ; if ( t . test ( e ) ) { var a = n ( e , m ) ; return g && ( a = Y ( a , g ) ) , a } } ) , r . $formatters . push ( function ( e ) { if ( e && ! $ ( e ) ) throw xs ( "datefmt" , "Expected `{0}` to be a date" , e ) ; return u ( e ) ? ( m = e , m && g && ( m = Y ( m , g , ! 0 ) ) , d ( "date" ) ( e , a , g ) ) : ( m = null , "" ) } ) , v ( s . min ) || s . ngMin ) { var h ; r . $validators . min = function ( e ) { return ! u ( e ) || _ ( h ) || n ( e ) >= h } , s . $observe ( "min" , function ( e ) { h = p ( e ) , r . $validate ( ) } ) } if ( v ( s . max ) || s . ngMax ) { var f ; r . $validators . max = function ( e ) { return ! u ( e ) || _ ( f ) || n ( e ) <= f } , s . $observe ( "max" , function ( e ) { f = p ( e ) , r . $validate ( ) } ) } } } function ya ( e , t , n , a ) { var i = t [ 0 ] , o = a . $$hasNativeValidators = y ( i . validity ) ; o && a . $parsers . push ( function ( e ) { var n = t . prop ( Ta ) || { } ; return n . badInput || n . typeMismatch ? void 0 : e } ) } function ba ( e , t , n , a , i , o ) { if ( ya ( e , t , n , a ) , ha ( e , t , n , a , i , o ) , a . $$parserName = "number" , a . $parsers . push ( function ( e ) { return a . $isEmpty ( e ) ? null : Vo . test ( e ) ? parseFloat ( e ) : void 0 } ) , a . $formatters . push ( function ( e ) { if ( ! a . $isEmpty ( e ) ) { if ( ! k ( e ) ) throw xs ( "numfmt" , "Expected `{0}` to be a number" , e ) ; e = e . toString ( ) } return e } ) , v ( n . min ) || n . ngMin ) { var s ; a . $validators . min = function ( e ) { return a . $isEmpty ( e ) || _ ( s ) || e >= s } , n . $observe ( "min" , function ( e ) { v ( e ) && ! k ( e ) && ( e = parseFloat ( e , 10 ) ) , s = k ( e ) && ! isNaN ( e ) ? e : void 0 , a . $validate ( ) } ) } if ( v ( n . max ) || n . ngMax ) { var r ; a . $validators . max = function ( e ) { return a . $isEmpty ( e ) || _ ( r ) || e <= r } , n . $observe ( "max" , function ( e ) { v ( e ) && ! k ( e ) && ( e = parseFloat ( e , 10 ) ) , r = k ( e ) && ! isNaN ( e ) ? e : void 0 , a . $validate ( ) } ) } } function wa ( e , t , n , a , i , o ) { ha ( e , t , n , a , i , o ) , ma ( a ) , a . $$parserName = "url" , a . $validators . url = function ( e , t ) { var n = e || t ; return a . $isEmpty ( n ) || Ho . test ( n ) } } function ka ( e , t , n , a , i , o ) { ha ( e , t , n , a , i , o ) , ma ( a ) , a . $$parserName = "email" , a . $validators . email = function ( e , t ) { var n = e || t ; return a . $isEmpty ( n ) || qo . test ( n ) } } function $a ( e , t , n , a ) { _ ( n . name ) && t . attr ( "name" , s ( ) ) ; var i = function ( e ) { t [ 0 ] . checked && a . $setViewValue ( n . value , e && e . type ) } ; t . on ( "click" , i ) , a . $render = function ( ) { var e = n . value ; t [ 0 ] . checked = e == a . $viewValue } , n . $observe ( "value" , a . $render ) } function Sa ( e , t , n , a , i ) { var o ; if ( v ( a ) ) { if ( o = e ( a ) , ! o . constant ) throw xs ( "constexpr" , "Expected constant expression for `{0}`, but saw `{1}`." , n , a ) ; return o ( t ) } return i } function Ca ( e , t , n , a , i , o , s , r ) { var l = Sa ( r , e , "ngTrueValue" , n . ngTrueValue , ! 0 ) , c = Sa ( r , e , "ngFalseValue" , n . ngFalseValue , ! 1 ) , d = function ( e ) { a . $setViewValue ( t [ 0 ] . checked , e && e . type ) } ; t . on ( "click" , d ) , a . $render = function ( ) { t [ 0 ] . checked = a . $viewValue } , a . $isEmpty = function ( e ) { return e === ! 1 } , a . $formatters . push ( function ( e ) { return L ( e , l ) } ) , a . $parsers . push ( function ( e ) { return e ? l : c } ) } function Ma ( e , t ) { return e = "ngClass" + e , [ "$animate" , function ( n ) { function i ( e , t ) { var n = [ ] ; e : for ( var a = 0 ; a < e . length ; a ++ ) { for ( var i = e [ a ] , o = 0 ; o < t . length ; o ++ ) if ( i == t [ o ] ) cont
} , recurse : function ( e , t , n , i , o , s ) { var r , l , c , d , u , p = this ; if ( i = i || m , ! s && v ( e . watchId ) ) return t = t || this . nextId ( ) , void this . if _ ( "i" , this . lazyAssign ( t , this . computedMember ( "i" , e . watchId ) ) , this . lazyRecurse ( e , t , n , i , o , ! 0 ) ) ; switch ( e . type ) { case vo . Program : a ( e . body , function ( t , n ) { p . recurse ( t . expression , void 0 , void 0 , function ( e ) { l = e } ) , n !== e . body . length - 1 ? p . current ( ) . body . push ( l , ";" ) : p . return _ ( l ) } ) ; break ; case vo . Literal : d = this . escape ( e . value ) , this . assign ( t , d ) , i ( d ) ; break ; case vo . UnaryExpression : this . recurse ( e . argument , void 0 , void 0 , function ( e ) { l = e } ) , d = e . operator + "(" + this . ifDefined ( l , 0 ) + ")" , this . assign ( t , d ) , i ( d ) ; break ; case vo . BinaryExpression : this . recurse ( e . left , void 0 , void 0 , function ( e ) { r = e } ) , this . recurse ( e . right , void 0 , void 0 , function ( e ) { l = e } ) , d = "+" === e . operator ? this . plus ( r , l ) : "-" === e . operator ? this . ifDefined ( r , 0 ) + e . operator + this . ifDefined ( l , 0 ) : "(" + r + ")" + e . operator + "(" + l + ")" , this . assign ( t , d ) , i ( d ) ; break ; case vo . LogicalExpression : t = t || this . nextId ( ) , p . recurse ( e . left , t ) , p . if _ ( "&&" === e . operator ? t : p . not ( t ) , p . lazyRecurse ( e . right , t ) ) , i ( t ) ; break ; case vo . ConditionalExpression : t = t || this . nextId ( ) , p . recurse ( e . test , t ) , p . if _ ( t , p . lazyRecurse ( e . alternate , t ) , p . lazyRecurse ( e . consequent , t ) ) , i ( t ) ; break ; case vo . Identifier : t = t || this . nextId ( ) , n && ( n . context = "inputs" === p . stage ? "s" : this . assign ( this . nextId ( ) , this . getHasOwnProperty ( "l" , e . name ) + "?l:s" ) , n . computed = ! 1 , n . name = e . name ) , en ( e . name ) , p . if _ ( "inputs" === p . stage || p . not ( p . getHasOwnProperty ( "l" , e . name ) ) , function ( ) { p . if _ ( "inputs" === p . stage || "s" , function ( ) { o && 1 !== o && p . if _ ( p . not ( p . nonComputedMember ( "s" , e . name ) ) , p . lazyAssign ( p . nonComputedMember ( "s" , e . name ) , "{}" ) ) , p . assign ( t , p . nonComputedMember ( "s" , e . name ) ) } ) } , t && p . lazyAssign ( t , p . nonComputedMember ( "l" , e . name ) ) ) , ( p . state . expensiveChecks || _n ( e . name ) ) && p . addEnsureSafeObject ( t ) , i ( t ) ; break ; case vo . MemberExpression : r = n && ( n . context = this . nextId ( ) ) || this . nextId ( ) , t = t || this . nextId ( ) , p . recurse ( e . object , r , void 0 , function ( ) { p . if _ ( p . notNull ( r ) , function ( ) { o && 1 !== o && p . addEnsureSafeAssignContext ( r ) , e . computed ? ( l = p . nextId ( ) , p . recurse ( e . property , l ) , p . getStringValue ( l ) , p . addEnsureSafeMemberName ( l ) , o && 1 !== o && p . if _ ( p . not ( p . computedMember ( r , l ) ) , p . lazyAssign ( p . computedMember ( r , l ) , "{}" ) ) , d = p . ensureSafeObject ( p . computedMember ( r , l ) ) , p . assign ( t , d ) , n && ( n . computed = ! 0 , n . name = l ) ) : ( en ( e . property . name ) , o && 1 !== o && p . if _ ( p . not ( p . nonComputedMember ( r , e . property . name ) ) , p . lazyAssign ( p . nonComputedMember ( r , e . property . name ) , "{}" ) ) , d = p . nonComputedMember ( r , e . property . name ) , ( p . state . expensiveChecks || _n ( e . property . name ) ) && ( d = p . ensureSafeObject ( d ) ) , p . assign ( t , d ) , n && ( n . computed = ! 1 , n . name = e . property . name ) ) } , function ( ) { p . assign ( t , "undefined" ) } ) , i ( t ) } , ! ! o ) ; break ; case vo . CallExpression : t = t || this . nextId ( ) , e . filter ? ( l = p . filter ( e . callee . name ) , c = [ ] , a ( e . arguments , function ( e ) { var t = p . nextId ( ) ; p . recurse ( e , t ) , c . push ( t ) } ) , d = l + "(" + c . join ( "," ) + ")" , p . assign ( t , d ) , i ( t ) ) : ( l = p . nextId ( ) , r = { } , c = [ ] , p . recurse ( e . callee , l , r , function ( ) { p . if _ ( p . notNull ( l ) , function ( ) { p . addEnsureSafeFunction ( l ) , a ( e . arguments , function ( e ) { p . recurse ( e , p . nextId ( ) , void 0 , function ( e ) { c . push ( p . ensureSafeObject ( e ) ) } ) } ) , r . name ? ( p . state . expensiveChecks || p . addEnsureSafeObject ( r . context ) , d = p . member ( r . context , r . name , r . computed ) + "(" + c . join ( "," ) + ")" ) : d = l + "(" + c . join ( "," ) + ")" , d = p . ensureSafeObject ( d ) , p . assign ( t , d ) } , function ( ) { p . assign ( t , "undefined" ) } ) , i ( t ) } ) ) ; break ; case vo . AssignmentExpression : if ( l = this . nextId ( ) , r = { } , ! un ( e . left ) ) throw uo ( "lval" , "Trying to assign a value to a non l-value" ) ; this . recurse ( e . left , void 0 , r , function ( ) { p . if _ ( p . notNull ( r . context ) , function ( ) { p . recurse ( e . right , l ) , p . addEnsureSafeObject ( p . member ( r . context , r . name , r . computed ) ) , p . addEnsureSafeAssignContext ( r . context ) , d = p . member ( r . context , r . name , r . computed ) + e . operator + l , p . assign ( t , d ) , i ( t || d ) } ) } , 1 ) ; break ; case vo . ArrayExpression : c = [ ] , a ( e . elements , function ( e ) { p . recurse ( e , p . nextId ( ) , void 0 , function ( e ) { c . push ( e ) } ) } ) , d = "[" + c . join ( "," ) + "]" , this . assign ( t , d ) , i ( d ) ; break ; case vo . ObjectExpression : c = [ ] , u = ! 1 , a ( e . properties , function ( e ) { e . computed && ( u = ! 0 ) } ) , u ? ( t = t || this . nextId ( ) , this . assign ( t , "{}" ) , a ( e . properties , function ( e ) { e . computed ? ( r = p . nextId ( ) , p . recurse ( e . key , r ) ) : r = e . key . type === vo . Identifier ? e . key . name : "" + e . key . value , l = p . nextId
e [ n ] = a , i && ( e [ i ] = o ) , e . $index = t , e . $first = 0 === t , e . $last = t === s - 1 , e . $middle = ! ( e . $first || e . $last ) , e . $odd = ! ( e . $even = 0 === ( 1 & t ) ) } , c = function ( e ) { return e . clone [ 0 ] } , d = function ( e ) { return e . clone [ e . clone . length - 1 ] } ; return { restrict : "A" , multiElement : ! 0 , transclude : "element" , priority : 1e3 , terminal : ! 0 , $$tlb : ! 0 , compile : function ( t , u ) { var p = u . ngRepeat , m = o . $$createComment ( "end ngRepeat" , p ) , g = p . match ( /^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/ ) ; if ( ! g ) throw r ( "iexp" , "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'." , p ) ; var h = g [ 1 ] , f = g [ 2 ] , _ = g [ 3 ] , v = g [ 4 ] ; if ( g = h . match ( /^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/ ) , ! g ) throw r ( "iidexp" , "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'." , h ) ; var y = g [ 3 ] || g [ 1 ] , b = g [ 2 ] ; if ( _ && ( ! /^[$a-zA-Z_][$a-zA-Z0-9_]*$/ . test ( _ ) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/ . test ( _ ) ) ) throw r ( "badident" , "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name." , _ ) ; var w , k , $ , S , C = { $id : Xe } ; return v ? w = e ( v ) : ( $ = function ( e , t ) { return Xe ( t ) } , S = function ( e ) { return e } ) , function ( e , t , o , u , g ) { w && ( k = function ( t , n , a ) { return b && ( C [ b ] = t ) , C [ y ] = n , C . $index = a , w ( e , C ) } ) ; var h = ge ( ) ; e . $watchCollection ( f , function ( o ) { var u , f , v , w , C , M , x , I , A , E , T , D , P = t [ 0 ] , F = ge ( ) ; if ( _ && ( e [ _ ] = o ) , n ( o ) ) A = o , I = k || $ ; else { I = k || S , A = [ ] ; for ( var N in o ) Da . call ( o , N ) && "$" !== N . charAt ( 0 ) && A . push ( N ) } for ( w = A . length , T = new Array ( w ) , u = 0 ; u < w ; u ++ ) if ( C = o === A ? u : A [ u ] , M = o [ C ] , x = I ( C , M , u ) , h [ x ] ) E = h [ x ] , delete h [ x ] , F [ x ] = E , T [ u ] = E ; else { if ( F [ x ] ) throw a ( T , function ( e ) { e && e . scope && ( h [ e . id ] = e ) } ) , r ( "dupes" , "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}" , p , x , M ) ; T [ u ] = { id : x , scope : void 0 , clone : void 0 } , F [ x ] = ! 0 } for ( var R in h ) { if ( E = h [ R ] , D = me ( E . clone ) , i . leave ( D ) , D [ 0 ] . parentNode ) for ( u = 0 , f = D . length ; u < f ; u ++ ) D [ u ] [ s ] = ! 0 ; E . scope . $destroy ( ) } for ( u = 0 ; u < w ; u ++ ) if ( C = o === A ? u : A [ u ] , M = o [ C ] , E = T [ u ] , E . scope ) { v = P ; do v = v . nextSibling ; while ( v && v [ s ] ) ; c ( E ) != v && i . move ( me ( E . clone ) , null , P ) , P = d ( E ) , l ( E . scope , u , y , M , b , C , w ) } else g ( function ( e , t ) { E . scope = t ; var n = m . cloneNode ( ! 1 ) ; e [ e . length ++ ] = n , i . enter ( e , null , P ) , P = n , E . clone = e , F [ E . id ] = E , l ( E . scope , u , y , M , b , C , w ) } ) ; h = F } ) } } } } ] , Us = "ng-hide" , Bs = "ng-hide-animate" , Ls = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , a ) { t . $watch ( a . ngShow , function ( t ) { e [ t ? "removeClass" : "addClass" ] ( n , Us , { tempClasses : Bs } ) } ) } } } ] , js = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , a ) { t . $watch ( a . ngHide , function ( t ) { e [ t ? "addClass" : "removeClass" ] ( n , Us , { tempClasses : Bs } ) } ) } } } ] , Hs = da ( function ( e , t , n ) { e . $watch ( n . ngStyle , function ( e , n ) { n && e !== n && a ( n , function ( e , n ) { t . css ( n , "" ) } ) , e && t . css ( e ) } , ! 0 ) } ) , qs = [ "$animate" , "$compile" , function ( e , t ) { return { require : "ngSwitch" , controller : [ "$scope" , function ( ) { this . cases = { } } ] , link : function ( n , i , o , s ) { var r = o . ngSwitch || o . on , l = [ ] , c = [ ] , d = [ ] , u = [ ] , p = function ( e , t ) { return function ( ) { e . splice ( t , 1 ) } } ; n . $watch ( r , function ( n ) { var i , o ; for ( i = 0 , o = d . length ; i < o ; ++ i ) e . cancel ( d [ i ] ) ; for ( d . length = 0 , i = 0 , o = u . length ; i < o ; ++ i ) { var r = me ( c [ i ] . clone ) ; u [ i ] . $destroy ( ) ; var m = d [ i ] = e . leave ( r ) ; m . then ( p ( d , i ) ) } c . length = 0 , u . length = 0 , ( l = s . cases [ "!" + n ] || s . cases [ "?" ] ) && a ( l , function ( n ) { n . transclude ( function ( a , i ) { u . push ( i ) ; var o = n . element ; a [ a . length ++ ] = t . $$createComment ( "end ngSwitchWhen" ) ; var s = { clone : a } ; c . push ( s ) , e . enter ( a , o . parent ( ) , o ) } ) } ) } ) } } } ] , Vs = da ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , a , i ) { a . cases [ "!" + n . ngSwitchWhen ] = a . cases [ "!" + n . ngSwitchWhen ] || [ ] , a . cases [ "!" + n . ngSwitchWhen ] . push ( { transclude : i , element : t } ) } } ) , zs = da ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , a , i ) { a . cases [ "?" ] = a . cases [ "?" ] || [ ] , a . cases [ "?" ] . push ( { transclude : i , element : t } ) } } ) , Ws = t ( "ngTransclude" ) , Gs = da ( { restrict : "EAC" , link : function ( e , t , n , a , i ) { function o ( e ) { e . length && ( t . empty ( ) , t . append ( e ) ) } if ( n . ngTransclude === n . $attr . ngTransclude && ( n . ngTransclude = "" ) , ! i ) throw Ws ( "orphan" , " Illegal use of ngTransclude directive
return ! ( z ( a ) && z ( i ) || z ( s ) && z ( r ) ) && ( o ( a , r ) || o ( i , s ) ) } ) , this . $get = [ "$$rAF" , "$rootScope" , "$rootElement" , "$document" , "$$HashMap" , "$$animation" , "$$AnimateRunner" , "$templateRequest" , "$$jqLite" , "$$forceReflow" , function ( i , o , h , _ , w , k , $ , S , C , M ) { function x ( ) { var e = ! 1 ; return function ( t ) { e ? t ( ) : o . $$postDigest ( function ( ) { e = ! 0 , t ( ) } ) } } function I ( e , t ) { return f ( e , t , { } ) } function A ( e , t , n ) { var a = v ( t ) , i = v ( e ) , o = [ ] , s = Q [ n ] ; return s && j ( s , function ( e ) { ie . call ( e . node , a ) ? o . push ( e . callback ) : "leave" === n && ie . call ( e . node , i ) && o . push ( e . callback ) } ) , o } function E ( e , t , n ) { var a = l ( t ) ; return e . filter ( function ( e ) { var t = e . node === a && ( ! n || e . callback === n ) ; return ! t } ) } function T ( e , t ) { "close" !== e || t [ 0 ] . parentNode || oe . off ( t ) } function D ( e , t , n ) { function a ( t , n , a , o ) { C ( function ( ) { var t = A ( h , e , n ) ; t . length ? i ( function ( ) { j ( t , function ( t ) { t ( e , a , o ) } ) , T ( a , e ) } ) : T ( a , e ) } ) , t . progress ( n , a , o ) } function l ( t ) { b ( e , w ) , ae ( e , w ) , m ( e , w ) , w . domOperation ( ) , S . complete ( ! t ) } var u , h , w = U ( n ) ; e = r ( e ) , e && ( u = v ( e ) , h = e . parent ( ) ) , w = p ( w ) ; var S = new $ , C = x ( ) ; if ( H ( w . addClass ) && ( w . addClass = w . addClass . join ( " " ) ) , w . addClass && ! q ( w . addClass ) && ( w . addClass = null ) , H ( w . removeClass ) && ( w . removeClass = w . removeClass . join ( " " ) ) , w . removeClass && ! q ( w . removeClass ) && ( w . removeClass = null ) , w . from && ! V ( w . from ) && ( w . from = null ) , w . to && ! V ( w . to ) && ( w . to = null ) , ! u ) return l ( ) , S ; var M = [ u . className , w . addClass , w . removeClass ] . join ( " " ) ; if ( ! te ( M ) ) return l ( ) , S ; var E = [ "enter" , "move" , "leave" ] . indexOf ( t ) >= 0 , D = _ [ 0 ] . hidden , N = ! X || D || Z . get ( u ) , B = ! N && G . get ( u ) || { } , L = ! ! B . state ; if ( N || L && B . state == d || ( N = ! R ( e , h , t ) ) , N ) return D && a ( S , t , "start" ) , l ( ) , D && a ( S , t , "close" ) , S ; E && P ( e ) ; var z = { structural : E , element : e , event : t , addClass : w . addClass , removeClass : w . removeClass , close : l , options : w , runner : S } ; if ( L ) { var W = s ( "skip" , e , z , B ) ; if ( W ) return B . state === g ? ( l ( ) , S ) : ( f ( e , B , z ) , B . runner ) ; var K = s ( "cancel" , e , z , B ) ; if ( K ) if ( B . state === g ) B . runner . end ( ) ; else { if ( ! B . structural ) return f ( e , B , z ) , B . runner ; B . close ( ) } else { var Y = s ( "join" , e , z , B ) ; if ( Y ) { if ( B . state !== g ) return y ( e , E ? t : null , w ) , t = z . event = B . event , w = f ( e , B , z ) , B . runner ; I ( e , z ) } } } else I ( e , z ) ; var J = z . structural ; if ( J || ( J = "animate" === z . event && Object . keys ( z . options . to || { } ) . length > 0 || c ( z ) ) , ! J ) return l ( ) , F ( e ) , S ; var Q = ( B . counter || 0 ) + 1 ; return z . counter = Q , O ( e , d , z ) , o . $$postDigest ( function ( ) { var n = G . get ( u ) , i = ! n ; n = n || { } ; var o = e . parent ( ) || [ ] , s = o . length > 0 && ( "animate" === n . event || n . structural || c ( n ) ) ; if ( i || n . counter !== Q || ! s ) return i && ( ae ( e , w ) , m ( e , w ) ) , ( i || E && n . event !== t ) && ( w . domOperation ( ) , S . end ( ) ) , void ( s || F ( e ) ) ; t = ! n . structural && c ( n , ! 0 ) ? "setClass" : n . event , O ( e , g ) ; var r = k ( e , t , n . options ) ; S . setHost ( r ) , a ( S , t , "start" , { } ) , r . done ( function ( n ) { l ( ! n ) ; var i = G . get ( u ) ; i && i . counter === Q && F ( v ( e ) ) , a ( S , t , "close" , { } ) } ) } ) , S } function P ( e ) { var t = v ( e ) , n = t . querySelectorAll ( "[" + Ie + "]" ) ; j ( n , function ( e ) { var t = parseInt ( e . getAttribute ( Ie ) ) , n = G . get ( e ) ; if ( n ) switch ( t ) { case g : n . runner . end ( ) ; case d : G . remove ( e ) } } ) } function F ( e ) { var t = v ( e ) ; t . removeAttribute ( Ie ) , G . remove ( t ) } function N ( e , t ) { return v ( e ) === v ( t ) } function R ( e , t , n ) { var a , i = L ( _ [ 0 ] . body ) , o = N ( e , i ) || "HTML" === e [ 0 ] . nodeName , s = N ( e , h ) , r = ! 1 , l = Z . get ( v ( e ) ) , c = L . data ( e [ 0 ] , Ae ) ; for ( c && ( t = c ) , t = v ( t ) ; t && ( s || ( s = N ( t , h ) ) , t . nodeType === Y ) ; ) { var d = G . get ( t ) || { } ; if ( ! r ) { var u = Z . get ( t ) ; if ( u === ! 0 && l !== ! 1 ) { l = ! 0 ; break } u === ! 1 && ( l = ! 1 ) , r = d . structural } if ( z ( a ) || a === ! 0 ) { var p = L . data ( t , ne ) ; W ( p ) && ( a = p ) } if ( r && a === ! 1 ) break ; if ( o || ( o = N ( t , i ) ) , o && s ) break ; t = s || ! ( c = L . data ( t , Ae ) ) ? t . parentNode : v ( c ) } var m = ( ! r || a ) && l !== ! 0 ; return m && s && o } function O ( e , t , n ) { n = n || { } , n . state = t ; var a = v ( e ) ; a . setAttribute ( Ie , t ) ; var i = G . get ( a ) , o = i ? B ( i , n ) : n ; G . put ( a , o ) } var G = new w , Z = new w , X = null , J = o . $watch ( function ( ) { return 0 === S . totalPendingRequests } , function ( e ) { e && ( J ( ) , o . $$postDigest ( function ( ) { o . $$postDigest ( function ( ) { null === X && ( X = ! 0 ) } ) } ) ) } ) , Q = { } , ee = a . classNameFilter ( ) , te = ee ? function ( e ) { return ee . test ( e ) } : function ( ) { return ! 0 } , ae = u ( C ) , ie = e . Node . prototype . contains || function ( e ) { return this === e || ! ! ( 16 & this . compareDocumentPosition ( e ) ) } , oe = { on : function ( e , t , n ) { var a = l ( t ) ; Q [ e ] = Q [ e ] || [ ] , Q [ e ] . push ( { node : a , callback : n } ) , L ( t ) . on ( "$destroy" , function ( ) { var i = G . get ( a ) ; i || oe . off ( e , t , n ) } ) } , off : function ( e , n , a ) { if ( 1 !== arguments . length || t . isString ( arguments [ 0 ] ) ) { var i = Q [ e ] ; i && ( Q [ e ] = 1 === arguments . length ? null : E ( i , n , a ) ) } else { n = arguments [ 0 ] ; for ( var o in Q ) Q [ o ] = E
} ] ) , angular . module ( "template/modal/backdrop.html" , [ ] ) . run ( [ "$templateCache" , function ( e ) { e . put ( "template/modal/backdrop.html" , '<div class="modal-backdrop fade {{ backdropClass }}"\n ng-class="{in: animate}"\n ng-style="{\'z-index\': 1040 + (index && 1 || 0) + index*10}"\n></div>\n' ) } ] ) , angular . module ( "template/modal/window.html" , [ ] ) . run ( [ "$templateCache" , function ( e ) { e . put ( "template/modal/window.html" , '<div tabindex="-1" role="dialog" class="modal fade" ng-class="{in: animate}" ng-style="{\'z-index\': 1050 + index*10, display: hiddenBySingle ? \'none\' : \'block\'}">\n <div class="modal_close_wrap" ng-click="close($event)">\n <div class="modal_close"></div>\n </div>\n <div class="modal-dialog" ng-class="{\'modal-sm\': size == \'sm\', \'modal-lg\': size == \'lg\'}"><div class="modal-content" modal-transclude></div></div>\n</div>' ) } ] ) , angular . module ( "mediaPlayer" , [ "mediaPlayer.helpers" ] ) . constant ( "mp.playerDefaults" , { currentTrack : 0 , ended : void 0 , network : void 0 , playing : ! 1 , seeking : ! 1 , tracks : 0 , volume : 1 , formatDuration : "00:00" , formatTime : "00:00" , loadPercent : 0 } ) . directive ( "mediaPlayer" , [ "$rootScope" , "$interpolate" , "$timeout" , "mp.throttle" , "mp.playerDefaults" , function ( e , t , n , a , i ) { function o ( e ) { return function ( t , a , i ) { var o , s = null ; if ( e . $attachPlaylist ( t ) , void 0 === t && void 0 !== a ) return e . pause ( ) ; if ( e . currentTrack ) { o = a ? a [ e . currentTrack - 1 ] : - 1 ; for ( var r = 0 ; r < t . length ; r ++ ) if ( angular . equals ( t [ r ] , o ) ) { s = r ; break } null !== s ? ( e . currentTrack = s + 1 , e . tracks = t . length ) : ( e . pause ( ) , t . length ? n ( function ( ) { e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length } ) : e . reset ( ) ) } else t . length ? ( e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length ) : e . reset ( ) } } var s = { load : function ( e , t ) { "boolean" == typeof e ? ( t = e , e = null ) : "object" == typeof e && ( this . $clearSourceList ( ) , this . $addSourceList ( e ) ) , this . $domEl . load ( ) , this . ended = void 0 , t && this . $element . one ( "canplay" , this . play . bind ( this ) ) } , reset : function ( e ) { angular . extend ( this , i ) , this . $clearSourceList ( ) , this . load ( this . $playlist , e ) } , play : function ( e , t ) { return "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , this . $playlist . length > e ? ( this . currentTrack = e + 1 , this . load ( this . $playlist [ e ] , ! 0 ) ) : ( ! this . currentTrack && this . $domEl . readyState && this . currentTrack ++ , void ( this . ended ? this . load ( ! 0 ) : this . $domEl . play ( ) ) ) } , playPause : function ( e , t ) { "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , "number" == typeof e && e + 1 !== this . currentTrack ? this . play ( e ) : this . playing ? this . pause ( ) : this . play ( ) } , pause : function ( ) { this . $domEl . pause ( ) } , stop : function ( ) { this . reset ( ) } , toggleMute : function ( ) { this . muted = this . $domEl . muted = ! this . $domEl . muted } , next : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack < t . tracks ) { var a = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack ] ) , t . load ( a ) , t . currentTrack ++ } ) } } , prev : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack - 1 ) { var a = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack - 2 ] ) , t . load ( a ) , t . currentTrack -- } ) } } , setPlaybackRate : function ( e ) { this . $domEl . playbackRate = e } , setVolume : function ( e ) { this . $domEl . volume = e } , seek : function ( e ) { var t , n = 0 ; return "string" != typeof e ? this . $domEl . currentTime = e : ( t = e . split ( ":" ) , n += parseInt ( t . pop ( ) , 10 ) , t . length && ( n += 60 * parseInt ( t . pop ( ) , 10 ) ) , t . length && ( n += 3600 * parseInt ( t . pop ( ) , 10 ) ) , isNaN ( n ) ? void 0 : this . $domEl . currentTime = n ) } , on : function ( e , t ) { return this . $element . on ( e , t ) } , off : function ( e , t ) { return this . $element . off ( e , t ) } , one : function ( e , t ) { return this . $element . one ( e , t ) } , $addSourceList : function ( e ) { var t = this ; if ( angular . isArray ( e ) ) angular . forEach ( e , function ( e , n ) { var a = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && a . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( a ) } ) ; else if ( angular . isObject ( e ) ) { var n = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && n . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( n ) } } , $clearSourceList : function ( ) { this . $element . contents ( ) . remove ( ) } , $formatTime : function ( e ) { if ( e === 1 / 0 ) return "∞" ; var t , n = parseInt ( e / 3600 , 10 ) % 24 , a = parseInt ( e / 60 , 10 ) % 60 , i = parseInt (
a . prototype . getName = function ( ) { return this . name } , a . prototype . getData = function ( ) { return this . data } , a . prototype . G = function ( ) { return this . H } , t ( "Zlib.GunzipMember" , a ) , t ( "Zlib.GunzipMember.prototype.getName" , a . prototype . getName ) , t ( "Zlib.GunzipMember.prototype.getData" , a . prototype . getData ) , t ( "Zlib.GunzipMember.prototype.getMtime" , a . prototype . G ) ; var v , y = [ ] ; for ( v = 0 ; 288 > v ; v ++ ) switch ( ! 0 ) { case 143 >= v : y . push ( [ v + 48 , 8 ] ) ; break ; case 255 >= v : y . push ( [ v - 144 + 400 , 9 ] ) ; break ; case 279 >= v : y . push ( [ v - 256 + 0 , 7 ] ) ; break ; case 287 >= v : y . push ( [ v - 280 + 192 , 8 ] ) ; break ; default : e ( "invalid literal: " + v ) } var b = function ( ) { function t ( t ) { switch ( ! 0 ) { case 3 === t : return [ 257 , t - 3 , 0 ] ; case 4 === t : return [ 258 , t - 4 , 0 ] ; case 5 === t : return [ 259 , t - 5 , 0 ] ; case 6 === t : return [ 260 , t - 6 , 0 ] ; case 7 === t : return [ 261 , t - 7 , 0 ] ; case 8 === t : return [ 262 , t - 8 , 0 ] ; case 9 === t : return [ 263 , t - 9 , 0 ] ; case 10 === t : return [ 264 , t - 10 , 0 ] ; case 12 >= t : return [ 265 , t - 11 , 1 ] ; case 14 >= t : return [ 266 , t - 13 , 1 ] ; case 16 >= t : return [ 267 , t - 15 , 1 ] ; case 18 >= t : return [ 268 , t - 17 , 1 ] ; case 22 >= t : return [ 269 , t - 19 , 2 ] ; case 26 >= t : return [ 270 , t - 23 , 2 ] ; case 30 >= t : return [ 271 , t - 27 , 2 ] ; case 34 >= t : return [ 272 , t - 31 , 2 ] ; case 42 >= t : return [ 273 , t - 35 , 3 ] ; case 50 >= t : return [ 274 , t - 43 , 3 ] ; case 58 >= t : return [ 275 , t - 51 , 3 ] ; case 66 >= t : return [ 276 , t - 59 , 3 ] ; case 82 >= t : return [ 277 , t - 67 , 4 ] ; case 98 >= t : return [ 278 , t - 83 , 4 ] ; case 114 >= t : return [ 279 , t - 99 , 4 ] ; case 130 >= t : return [ 280 , t - 115 , 4 ] ; case 162 >= t : return [ 281 , t - 131 , 5 ] ; case 194 >= t : return [ 282 , t - 163 , 5 ] ; case 226 >= t : return [ 283 , t - 195 , 5 ] ; case 257 >= t : return [ 284 , t - 227 , 5 ] ; case 258 === t : return [ 285 , t - 258 , 0 ] ; default : e ( "invalid length: " + t ) } } var n , a , i = [ ] ; for ( n = 3 ; 258 >= n ; n ++ ) a = t ( n ) , i [ n ] = a [ 2 ] << 24 | a [ 1 ] << 16 | a [ 0 ] ; return i } ( ) ; p && new Uint32Array ( b ) ; var w = 0 , k = 1 ; o . prototype . g = function ( ) { for ( ; ! this . o ; ) { var t = s ( this , 3 ) ; switch ( 1 & t && ( this . o = ! 0 ) , t >>>= 1 ) { case 0 : var n = this . input , a = this . c , i = this . b , o = this . a , r = d , c = d , u = d , m = i . length , g = d ; switch ( this . d = this . f = 0 , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (first byte)" ) ) , c = r , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (second byte)" ) ) , c |= r << 8 , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (first byte)" ) ) , u = r , r = n [ a ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (second byte)" ) ) , u |= r << 8 , c === ~ u && e ( Error ( "invalid uncompressed block header: length verify" ) ) , a + c > n . length && e ( Error ( "input buffer is broken" ) ) , this . k ) { case w : for ( ; o + c > i . length ; ) { if ( g = m - o , c -= g , p ) i . set ( n . subarray ( a , a + g ) , o ) , o += g , a += g ; else for ( ; g -- ; ) i [ o ++ ] = n [ a ++ ] ; this . a = o , i = this . e ( ) , o = this . a } break ; case k : for ( ; o + c > i . length ; ) i = this . e ( { t : 2 } ) ; break ; default : e ( Error ( "invalid inflate mode" ) ) } if ( p ) i . set ( n . subarray ( a , a + c ) , o ) , o += c , a += c ; else for ( ; c -- ; ) i [ o ++ ] = n [ a ++ ] ; this . c = a , this . a = o , this . b = i ; break ; case 1 : this . l ( U , L ) ; break ; case 2 : l ( this ) ; break ; default : e ( Error ( "unknown BTYPE: " + t ) ) } } return this . q ( ) } ; var $ , S , C = [ 16 , 17 , 18 , 0 , 8 , 7 , 9 , 6 , 10 , 5 , 11 , 4 , 12 , 3 , 13 , 2 , 14 , 1 , 15 ] , M = p ? new Uint16Array ( C ) : C , x = [ 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 13 , 15 , 17 , 19 , 23 , 27 , 31 , 35 , 43 , 51 , 59 , 67 , 83 , 99 , 115 , 131 , 163 , 195 , 227 , 258 , 258 , 258 ] , I = p ? new Uint16Array ( x ) : x , A = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 0 , 0 , 0 ] , E = p ? new Uint8Array ( A ) : A , T = [ 1 , 2 , 3 , 4 , 5 , 7 , 9 , 13 , 17 , 25 , 33 , 49 , 65 , 97 , 129 , 193 , 257 , 385 , 513 , 769 , 1025 , 1537 , 2049 , 3073 , 4097 , 6145 , 8193 , 12289 , 16385 , 24577 ] , D = p ? new Uint16Array ( T ) : T , P = [ 0 , 0 , 0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 ] , F = p ? new Uint8Array ( P ) : P , N = new ( p ? Uint8Array : Array ) ( 288 ) ; for ( $ = 0 , S = N . length ; $ < S ; ++ $ ) N [ $ ] = 143 >= $ ? 8 : 255 >= $ ? 9 : 279 >= $ ? 7 : 8 ; var R , O , U = i ( N ) , B = new ( p ? Uint8Array : Array ) ( 30 ) ; for ( R = 0 , O = B . length ; R < O ; ++ R ) B [ R ] = 5 ; var L = i ( B ) ; o . prototype . l = function ( e , t ) { var n = this . b , a = this . a ; this . r = e ; for ( var i , o , l , c , d = n . length - 258 ; 256 !== ( i = r ( this , e ) ) ; ) if ( 256 > i ) a >= d && ( this . a = a , n = this . e ( ) , a = this . a ) , n [ a ++ ] = i ; else for ( o = i - 257 , c = I [ o ] , 0 < E [ o ] && ( c += s ( this , E [ o ] ) ) , i = r ( this , t ) , l = D [ i ] , 0 < F [ i ] && ( l += s ( this , F [ i ] ) ) , a >= d && ( this . a = a , n = this . e ( ) , a = this . a ) ; c -- ; ) n [ a ] = n [ a ++ - l ] ; for ( ; 8 <= this . d ; ) this . d -= 8 , this . c -- ; this . a = a } , o . prototype . C = function ( e , t ) { var n = this . b , a = this . a ; this . r = e ; for ( var i , o , l , c , d = n . length ; 256 !== ( i = r ( this , e ) ) ; ) if ( 256 > i ) a >= d && ( n = this . e ( ) , d = n . length ) , n [ a ++ ] = i ; else for ( o = i - 257 , c = I [ o ] , 0 < E [ o ] && ( c += s ( this , E [ o ] ) ) , i = r ( this , t ) , l = D [ i ] , 0 < F [ i ] && ( l += s ( this , F [ i ] ) ) , a + c > d && ( n = this . e ( ) , d = n . length ) ; c
Te [ 2 * Ue + Oe ] = ( 1 < Qe ) + 0 , Ae [ Ae . length - 1 ] += 16 ; Fe [ Be + Ue ] = Je } Re |= ke ( De , 8 - 2 * Be ) , Ne |= ke ( Te , 8 - 2 * Be ) } $e |= ke ( Pe , 20 ) , Ce |= ke ( Fe , 20 ) , Y . X = $e , Ee . X = Ce , j . z = Ae , j . Oa = Ne + 0 , j . ja = Ne | Re , Y . Nb = ! j . ja + 0 } L = ! H . Ab } if ( ! L ) { l = ye ( e , "VP8_STATUS_NOT_ENOUGH_DATA" , "Premature end-of-file encountered." + e . i + " " + e . d ) ; break e } var et = e , tt = et . Ea , nt = ga , at = et . Ea , it = ha , ot = et . Ea , st = fa ; if ( 0 < et . i ) { for ( var rt = m , rt = - 1 ; 16 > rt ; ++ rt ) he ( tt , nt + rt * pa - 4 , tt , nt + rt * pa + 12 ) ; for ( rt = - 1 ; 8 > rt ; ++ rt ) he ( at , it + rt * pa - 4 , at , it + rt * pa + 4 ) , he ( ot , st + rt * pa - 4 , ot , st + rt * pa + 4 ) } else { for ( rt = 0 ; 16 > rt ; ++ rt ) tt [ nt + rt * pa - 1 ] = 129 ; for ( rt = 0 ; 8 > rt ; ++ rt ) at [ it + rt * pa - 1 ] = 129 , ot [ st + rt * pa - 1 ] = 129 ; 0 < et . d && ( tt [ nt - 1 - pa ] = at [ it - 1 - pa ] = ot [ st - 1 - pa ] = 129 ) } var lt = et . Xc , ct = 16 * + et . i , dt = et . Sc , ut = 8 * + et . i , pt = et . Vc , mt = 8 * + et . i , gt = et . z , ht = m ; if ( 0 < et . d ) t ( tt , nt - pa , lt , ct , 16 ) , t ( at , it - pa , dt , ut , 8 ) , t ( ot , st - pa , pt , mt , 8 ) ; else if ( 0 == et . i ) { for ( i = 0 ; 21 > i ; ++ i ) tt [ nt - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) at [ it - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) ot [ st - pa - 1 + i ] = 127 } if ( et . wa ) { var ft = nt - pa + 16 ; 0 < et . d && ( et . i >= et . Ma - 1 ? tt [ ft + 0 ] = tt [ ft + 1 ] = tt [ ft + 2 ] = tt [ ft + 3 ] = lt [ ct + 15 ] : t ( tt , ft + 0 , lt , ct + 16 , 4 ) ) ; for ( var _t = 0 ; 4 > _t ; ++ _t ) tt [ _t + ft + 4 * pa ] = tt [ _t + ft + 4 * pa ] = tt [ _t + ft + 8 * pa ] = tt [ _t + ft + 12 * pa ] = tt [ _t + ft + 0 ] ; for ( ht = 0 ; 16 > ht ; ht ++ ) { var vt = tt , yt = nt + hi [ ht ] ; li [ et . Eb [ ht ] ] ( vt , yt ) , et . Oa & 1 << ht ? Ua ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && La ( gt , 16 * + ht , vt , yt ) } } else { var bt = ge ( et , et . Eb [ 0 ] ) ; if ( ci [ bt ] ( tt , nt ) , et . ja ) for ( ht = 0 ; 16 > ht ; ht ++ ) vt = tt , yt = nt + hi [ ht ] , et . Oa & 1 << ht ? Ua ( gt , 16 * + ht , vt , yt , 0 ) : et . ja & 1 << ht && La ( gt , 16 * + ht , vt , yt ) } if ( bt = ge ( et , et . Tc ) , di [ bt ] ( at , it ) , di [ bt ] ( ot , st ) , 983040 & et . ja ) { var wt = et . z , kt = 256 ; 983040 & et . Oa ? Ba ( wt , kt , at , it ) : ja ( wt , kt , at , it ) } if ( 15728640 & et . ja ) { var $t = et . z , kt = 320 ; 15728640 & et . Oa ? Ba ( $t , kt , ot , st ) : ja ( $t , kt , ot , st ) } et . d < et . hb - 1 && ( t ( lt , ct , tt , nt + 15 * pa , 16 ) , t ( dt , ut , at , it + 7 * pa , 8 ) , t ( pt , mt , ot , st + 7 * pa , 8 ) ) ; var St = e ; if ( 0 < St . A ) { var Ct = St . M [ 1 + St . i ] , Mt = St . La [ 1 + St . i ] . Nb , xt = St . Zb [ St . Lb ] ; St . ga . oc && ( xt += St . ga . Lc [ 0 ] , St . wa && ( xt += St . ga . Gc [ 0 ] ) ) , xt = 0 > xt ? 0 : 63 < xt ? 63 : xt , Ct . zc = xt , 0 < St . ga . kb && ( xt = 4 < St . ga . kb ? xt >> 2 : xt >> 1 , xt > 9 - St . ga . kb && ( xt = 9 - St . ga . kb ) ) , Ct . yc = 1 > xt ? 1 : xt , Ct . ab = ( ! Mt || St . wa ) + 0 } for ( var It = m , At = 8 * St . Ja * St . r , Et = St . ca , Tt = St . da + 16 * St . i + 16 * St . Ja * St . H , Dt = St . aa , Pt = St . ba + 8 * St . i + At , Ft = St . ra , Nt = St . sa + 8 * St . i + At , It = 0 ; 16 > It ; ++ It ) t ( Et , Tt + It * St . H , St . Ea , + ga + It * pa , 16 ) ; for ( It = 0 ; 8 > It ; ++ It ) t ( Dt , Pt + It * St . r , St . Ea , + ha + It * pa , 8 ) , t ( Ft , Nt + It * St . r , St . Ea , + fa + It * pa , 8 ) } var Rt = e , Ot = s , Ut = 1 , Bt = Rt . oa ; if ( Rt . qb ) { var Lt = Rt . rc , Ut = Ut & WebPWorkerSync ( Lt ) ; if ( p ( Lt . a == OK ) , Ut ) { if ( Bt . N = Ot , Bt . ha = Rt . Ja , Bt . d = Rt . d , Bt . W = Rt . W , Bt . W ) { var jt = Bt . M ; Bt . M = Rt . M , Rt . M = jt } WebPWorkerLaunch ( Lt ) , ++ Rt . Ja == Rt . jb && ( Rt . Ja = 0 ) } } else { Bt . d = Rt . d , Bt . W = Rt . W ; t : { var Ht = 1 , qt = Rt . oa , Vt = pi [ Rt . A ] , zt = Vt * Rt . H , Wt = parseInt ( Vt / 2 ) * Rt . r , Gt = 16 * qt . ha * Rt . H , Kt = 8 * qt . ha * Rt . r , Yt = Rt . ca , Zt = Rt . da - zt + Gt , Xt = Rt . aa , Jt = Rt . ba - Wt + Kt , tn = Rt . ra , an = Rt . sa - Wt + Kt , on = 0 == qt . d , rn = ( qt . d >= Rt . hb - 1 ) + 0 , ln = 16 * qt . d , cn = 16 * ( qt . d + 1 ) ; if ( qt . W ) { var dn = Rt , un = h , pn = dn . oa . d ; for ( p ( dn . oa . W ) , un = dn . lb ; un < dn . wb ; ++ un ) { var mn = dn , gn = un , hn = pn , fn = mn . oa , _n = mn . H , vn = fn . M [ 1 + gn ] , yn = mn . ca , bn = mn . da + 16 * fn . ha * _n + 16 * gn , wn = vn . zc , kn = vn . yc , $n = 2 * wn + kn ; if ( 0 != wn ) if ( 1 == mn . A ) 0 < gn && Xa ( yn , bn , _n , $n + 4 ) , vn . ab && Qa ( yn , bn , _n , $n ) , 0 < hn && Za ( yn , bn , _n , $n + 4 ) , vn . ab && Ja ( yn , bn , _n , $n ) ; else { var Sn = mn . r , Cn = mn . aa , Mn = mn . ba + 8 * fn . ha * Sn + 8 * gn , xn = mn . ra , In = mn . sa + 8 * fn . ha * Sn + 8 * gn , An = mn . Ac . fb ? 40 <= wn ? 2 : 15 <= wn ? 1 : 0 : 40 <= wn ? 3 : 20 <= wn ? 2 : 15 <= wn ? 1 : 0 ; 0 < gn && ( qa ( yn , bn , _n , $n + 4 , kn , An ) , za ( Cn , Mn , xn , In , Sn , $n + 4 , kn , An ) ) , vn . ab && ( Ga ( yn , bn , _n , $n , kn , An ) , Ya ( Cn , Mn , xn , In , Sn , $n , kn , An ) ) , 0 < hn && ( Ha ( yn , bn , _n , $n + 4 , kn , An ) , Va ( Cn , Mn , xn , In , Sn , $n + 4 , kn , An ) ) , vn . ab && ( Wa ( yn , bn , _n , $n , kn , An ) , Ka ( Cn , Mn , xn , In , Sn , $n , kn , An ) ) } } } if ( Ot . put ) { if ( on ? ( Ot . y = Rt . ca , Ot . D = Rt . da + Gt , Ot . c = Rt . aa , Ot . B = Rt . ba + Kt , Ot . S = Rt . ra , Ot . C = Rt . sa + Kt ) : ( ln -= Vt , Ot . y = Yt , Ot . D = Zt , Ot . c = Xt , Ot . B = Jt , Ot . S = tn , Ot . C = an ) , rn || ( cn -= Vt ) , cn > Ot . K && ( cn = Ot . K ) , Rt . Ga != g && ln < cn && ( 0 == ln ? ( Ot . p = O ( Rt , ln , cn - ln ) , Ot . q = 0 ) : Ot . q = O ( Rt , ln , cn - ln ) , Ot . p == g ) ) { Ut = ye ( Rt , nn , "Could not decode alpha data." ) ; break t } if ( ln < Ot . k ) { var En = Ot . k - ln , ln = Ot . k ; p ( ! ( 1 & En ) ) , Ot . D += Rt . H * En , Ot . B += Rt . r * ( En >> 1 ) , Ot . C += Rt . r * ( En >> 1 ) , Ot . p != g && ( Ot . q += Ot . width * En ) } ln < cn && ( Ot . D += Ot . t , Ot . B += Ot . t >> 1 , Ot . C += Ot . t >> 1 , Ot . p != g && ( Ot . q += Ot . t ) , Ot . w = ln - Ot . k , Ot . m = Ot . Ka - Ot . t , Ot . h = cn - ln , Ht = Ot . put ( Ot ) ) } qt . ha + 1 == Rt . jb && ! rn && ( t ( Rt . ca , Rt . da - zt , Yt , Zt + 16 * Rt . H , zt ) , t ( Rt . aa , Rt . ba - Wt , Xt , Jt + 8 * Rt . r , Wt ) , t ( Rt . ra , Rt . sa - W
this . WebPGetDecoderVersion = this . Ld = function ( ) { return 512 } ; var ki = [ 0 , 1 , 2 , 3 , 6 , 4 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 0 ] , $i = [ [ 173 , 148 , 140 , 0 ] , [ 176 , 155 , 140 , 135 , 0 ] , [ 180 , 157 , 141 , 134 , 130 , 0 ] , [ 254 , 254 , 243 , 230 , 196 , 177 , 153 , 140 , 133 , 130 , 129 , 0 ] ] , Si = [ 0 , 1 , 4 , 8 , 5 , 2 , 3 , 6 , 9 , 12 , 13 , 10 , 7 , 11 , 14 , 15 ] , Ci = u ( [ da , ua ] , "" ) ; c ( 4 , f ) ; var Mi = [ [ 0 , 0 , 0 , 0 ] , [ 1 , 0 , 0 , 0 ] , [ 0 , 1 , 0 , 0 ] , [ 1 , 1 , 0 , 0 ] , [ 0 , 0 , 1 , 0 ] , [ 1 , 0 , 1 , 0 ] , [ 0 , 1 , 1 , 0 ] , [ 1 , 1 , 1 , 0 ] , [ 0 , 0 , 0 , 1 ] , [ 1 , 0 , 0 , 1 ] , [ 0 , 1 , 0 , 1 ] , [ 1 , 1 , 0 , 1 ] , [ 0 , 0 , 1 , 1 ] , [ 1 , 0 , 1 , 1 ] , [ 0 , 1 , 1 , 1 ] , [ 1 , 1 , 1 , 1 ] ] , xi = 134480385 , Ii = 16 , Ai = - 227 , Ei = 482 , Ti = [ Oe , function ( e ) { return e } , function ( e , t , n ) { return t [ n + 0 ] } , function ( e , t , n ) { return t [ n + 1 ] } , function ( e , t , n ) { return t [ n - 1 ] } , function ( e , t , n ) { return Fe ( Fe ( e , t [ n + 1 ] ) , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( e , t [ n - 1 ] ) } , function ( e , t , n ) { return Fe ( e , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( t [ n - 1 ] , t [ n + 0 ] ) } , function ( e , t , n ) { return Fe ( t [ n + 0 ] , t [ n + 1 ] ) } , function ( e , t , n ) { return Fe ( Fe ( e , t [ n - 1 ] ) , Fe ( t [ n + 0 ] , t [ n + 1 ] ) ) } , function ( e , t , n ) { return 0 >= Math . abs ( ( e >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) + ( Math . abs ( ( e >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) ) + ( Math . abs ( ( e >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) ) + ( Math . abs ( ( 255 & e ) - ( 255 & t [ n - 1 ] ) ) - Math . abs ( ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) ? t [ n + 0 ] : e } , function ( e , t , n ) { return ( Ne ( ( e >> 24 & 255 ) + ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) << 24 | Ne ( ( e >> 16 & 255 ) + ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) << 16 | Ne ( ( e >> 8 & 255 ) + ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) << 8 | Ne ( ( 255 & e ) + ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) >>> 0 } , function ( e , t , n ) { var a = t [ n - 1 ] ; return e = Fe ( e , t [ n + 0 ] ) , ( Re ( e >> 24 & 255 , a >> 24 & 255 ) << 24 | Re ( e >> 16 & 255 , a >> 16 & 255 ) << 16 | Re ( e >> 8 & 255 , a >> 8 & 255 ) << 8 | Re ( e >> 0 & 255 , a >> 0 & 255 ) ) >>> 0 } , Oe , Oe ] , Di = { Cc : f , Bc : f , Kc : f } , Pi = 16 , Fi = 16 , Ni = 16 , Ri = [ 2 , 3 , 7 ] , Oi = [ 3 , 3 , 11 ] , Ui = 0 , Bi = 1 , Li = 2 , ji = 3 , Hi = 4 , qi = [ xn + In , xn , xn , xn , 40 ] , Vi = 19 , zi = [ 17 , 18 , 0 , 1 , 2 , 3 , 4 , 5 , 16 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] , Wi = 120 , Gi = [ 24 , 7 , 23 , 25 , 40 , 6 , 39 , 41 , 22 , 26 , 38 , 42 , 56 , 5 , 55 , 57 , 21 , 27 , 54 , 58 , 37 , 43 , 72 , 4 , 71 , 73 , 20 , 28 , 53 , 59 , 70 , 74 , 36 , 44 , 88 , 69 , 75 , 52 , 60 , 3 , 87 , 89 , 19 , 29 , 86 , 90 , 35 , 45 , 68 , 76 , 85 , 91 , 51 , 61 , 104 , 2 , 103 , 105 , 18 , 30 , 102 , 106 , 34 , 46 , 84 , 92 , 67 , 77 , 101 , 107 , 50 , 62 , 120 , 1 , 119 , 121 , 83 , 93 , 17 , 31 , 100 , 108 , 66 , 78 , 118 , 122 , 33 , 47 , 117 , 123 , 49 , 63 , 99 , 109 , 82 , 94 , 0 , 116 , 124 , 65 , 79 , 16 , 32 , 98 , 110 , 48 , 115 , 125 , 81 , 95 , 64 , 114 , 126 , 97 , 111 , 80 , 113 , 127 , 96 , 112 ] , Ki = 1 << Ii - 1 , Yi = c ( 256 , 0 ) , Zi = c ( 256 , 0 ) , Xi = c ( 256 , _ ) , Ji = c ( 256 , _ ) , Qi = c ( Ei - Ai , f ) , eo = c ( Ei - Ai , f ) , to = 0 , no = Array ( Xt ) , ao = [ function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Me , 3 ) } , gt , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Ee , 3 ) } , ht , ft , _t , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , xe , 2 ) } , gt , ht , ft , _t ] ; this . Hd = function ( e , t , n , a ) { return Ft ( Ut , e , t , n , a ) } , this . Id = function ( e , t , n , a ) { return Ft ( Bt , e , t , n , a ) } , this . Jd = function ( e , t , n , a ) { return Ft ( qt , e , t , n , a ) } , this . Ed = function ( e , t , n , a ) { return Ft ( Ht , e , t , n , a ) } , this . Fd = function ( e , t , n , a ) { return Ft ( Lt , e , t , n , a ) } , this . Gd = function ( e , t , n , a ) { return Ft ( jt , e , t , n , a ) } , this . WebPDecode = this . Dd = function ( t , n , a ) { var i = e ( un ) , o = "VP8StatusCode" ; return a == g ? tn : ( o = Nt ( t , [ 0 ] , [ n ] , a . input ) , o != Qt ? o == rn ? nn : o : ( i . j = a . j , i . Qa = a . Qa , o = Pt ( t , 0 , [ n ] , i ) ) ) } } } ( ) , function ( e , t ) { "use strict" ; angular . module ( "toaster" , [ ] ) . constant ( "toasterConfig" , { limit : 0 , "tap-to-dismiss" : ! 0 , "close-button" : ! 1 , "close-html" : '<button class="toast-close-button" type="button">×</button>' , "newest-on-top" : ! 0 , "time-out" : 5e3 , "icon-classes" : { error : "toast-error" , info : "toast-info" , wait : "toast-wait" , success : "toast-success" , warning : "toast-warning" } , "body-output-type" : "" , "body-template" : "toasterBodyTmpl.html" , "icon-class" : "toast-info" , "position-class" : "toast-top-right" , "title-class" : "toast-title" , "message-class" : "toast-message" , "prevent-duplicates" : ! 1 , "mouseover-timer-stop" : ! 0 } ) . service ( "toaster" , [ "$rootScope" , "toasterConfig" , function ( e , t ) { function n ( e ) { return function ( t , n , a , i , o , s , r , l , c ) { return angular . isString ( t ) ? this . pop ( e , t , n , a , i , o , s , r , l , c ) : this . pop ( angular . extend ( t , { type : e } ) ) } } var a = function ( ) { var e = { } ; return e . newGuid = function ( ) { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" . replace ( /[xy]/g , function ( e ) { var t = 16 * Math . random ( ) | 0 , n = "x" == e ? t : 3 & t | 8 ; return n . toString ( 16 ) } ) } , e } ( ) ; this . pop = function ( t , n , i , o , s , r , l , c , d , u ) { if ( angular . isObject ( t ) ) { var p = t ; this . toast = { type : p . type , title : p
} else if ( e . charAt ( 0 ) >= 97 && e . charAt ( 0 ) <= 122 ) { for ( var u = 0 ; u < p . constructors . length ; u ++ ) if ( p . constructors [ u ] . predicate == e ) { g = p . constructors [ u ] ; break } if ( ! g ) throw new Error ( "Constructor not found for predicate: " + e ) } else { var n = this . readInt ( t + "[id]" ) , a = uintToInt ( n ) ; if ( 812830625 == a ) { var i = this . fetchBytes ( t + "[packed_string]" ) , o = gzipUncompress ( i ) , s = bytesToArrayBuffer ( o ) , r = new TLDeserialization ( s ) ; return r . fetchObject ( e , t ) } var f = p . constructorsIndex ; if ( ! f ) { p . constructorsIndex = f = { } ; for ( var u = 0 ; u < p . constructors . length ; u ++ ) f [ p . constructors [ u ] . id ] = u } var u = f [ a ] ; u && ( g = p . constructors [ u ] ) ; var _ = ! 1 ; if ( ! g && this . mtproto ) { var v = Config . Schema . API ; for ( u = 0 ; u < v . constructors . length ; u ++ ) if ( v . constructors [ u ] . id == a ) { g = v . constructors [ u ] , delete this . mtproto , _ = ! 0 ; break } } if ( ! g ) throw new Error ( "Constructor not found: " + n + " " + this . fetchInt ( ) + " " + this . fetchInt ( ) ) } m = g . predicate ; var c = { _ : m } , y = ( this . mtproto ? "mt_" : "" ) + m , b = this ; if ( this . override [ y ] ) this . override [ y ] . apply ( this , [ c , t + "[" + m + "]" ] ) ; else { var u , w , e , k , $ , S , C , l = g . params . length ; for ( u = 0 ; u < l ; u ++ ) { if ( w = g . params [ u ] , e = w . type , "#" == e && void 0 === c . pFlags && ( c . pFlags = { } ) , k = e . indexOf ( "?" ) !== - 1 ) { if ( $ = e . split ( "?" ) , S = $ [ 0 ] . split ( "." ) , ! ( c [ S [ 0 ] ] & 1 << S [ 1 ] ) ) continue ; e = $ [ 1 ] } C = b . fetchObject ( e , t + "[" + m + "][" + w . name + "]" ) , k && "true" === e ? c . pFlags [ w . name ] = C : c [ w . name ] = C } } return _ && ( this . mtproto = ! 0 ) , c } , TLDeserialization . prototype . getOffset = function ( ) { return this . offset } , TLDeserialization . prototype . fetchEnd = function ( ) { if ( this . offset != this . byteView . length ) throw new Error ( "Fetch end with non-empty buffer" ) ; return ! 0 } , angular . module ( "izhukov.utils" , [ ] ) . provider ( "Storage" , function ( ) { this . setPrefix = function ( e ) { ConfigStorage . prefix ( e ) } , this . $get = [ "$q" , function ( e ) { var t = { } ; return angular . forEach ( [ "get" , "set" , "remove" , "clear" ] , function ( n ) { t [ n ] = function ( ) { var t = e . defer ( ) , a = Array . prototype . slice . call ( arguments ) ; return a . push ( function ( e ) { t . resolve ( e ) } ) , ConfigStorage [ n ] . apply ( ConfigStorage , a ) , t . promise } } ) , t . noPrefix = function ( ) { ConfigStorage . noPrefix ( ) } , t } ] } ) . service ( "qSync" , function ( ) { return { when : function ( e ) { return { then : function ( t ) { return t ( e ) } } } , reject : function ( e ) { return { then : function ( t , n ) { if ( n ) return n ( e ) } } } } } ) . service ( "FileManager" , [ "$window" , "$q" , "$timeout" , "qSync" , function ( e , t , n , a ) { function i ( ) { return f } function o ( e , n ) { return l ( n ) . then ( function ( n ) { return s ( n , e ) . then ( function ( ) { return n } , function ( e ) { try { n . truncate ( 0 ) } catch ( a ) { } return t . reject ( e ) } ) } ) } function s ( e , n ) { var a = t . defer ( ) ; if ( e . onwriteend = function ( e ) { a . resolve ( ) } , e . onerror = function ( e ) { a . reject ( e ) } , n . file ) n . file ( function ( t ) { e . write ( t ) } , function ( e ) { a . reject ( e ) } ) ; else if ( n instanceof Blob ) e . write ( n ) ; else try { var i = blobConstruct ( [ bytesToArrayBuffer ( n ) ] ) ; e . write ( i ) } catch ( o ) { a . reject ( o ) } return a . promise } function r ( n , i , o ) { if ( ! e . chrome || ! chrome . fileSystem || ! chrome . fileSystem . chooseEntry ) return a . reject ( ) ; var s = t . defer ( ) ; return chrome . fileSystem . chooseEntry ( { type : "saveFile" , suggestedName : n , accepts : [ { mimeTypes : [ o ] , extensions : [ i ] } ] } , function ( e ) { s . resolve ( e ) } ) , s . promise } function l ( e ) { var n = t . defer ( ) ; return e . createWriter ( function ( e ) { n . resolve ( e ) } , function ( e ) { n . reject ( e ) } ) , n . promise } function c ( e , t ) { var n = [ ] , a = { write : function ( e ) { return f ? ( n . push ( e ) , void setZeroTimeout ( function ( ) { a . onwriteend && a . onwriteend ( ) } ) ) : ( a . onerror && a . onerror ( new Error ( "Blob not supported by browser" ) ) , ! 1 ) } , truncate : function ( ) { n = [ ] } , finalize : function ( ) { var a = blobConstruct ( n , e ) ; return t && t ( a ) , a } } ; return a } function d ( e , t ) { return void 0 !== e . toURL ? e . toURL ( t ) : e instanceof Blob ? URL . createObjectURL ( e ) : "data:" + t + ";base64," + bytesToBase64 ( e ) } function u ( e ) { if ( e instanceof Blob ) { var n = t . defer ( ) ; try { var a = new FileReader ; return a . onloadend = function ( e ) { n . resolve ( new Uint8Array ( e . target . result ) ) } , a . onerror = function ( e ) { n . reject ( e ) } , a . readAsArrayBuffer ( e ) , n . promise } catch ( i ) { return t . reject ( i ) } } else if ( e . file ) { var n = t . defer ( ) ; return e . file ( function ( e ) { u ( e ) . then ( function ( e ) { n . resolve ( e ) } , function ( e ) { n . reject ( e ) } ) } , function ( e ) { n . reject ( e ) } ) , n . promise } return t . when ( e ) } function p ( e ) { var n ; try { var a = new FileReader ; a . onloadend = function ( ) { n . resolve ( a . result ) } , a . readAsDataURL ( e ) } catch ( i ) { return t . reject ( i ) } return n = t . defer ( ) , n . promise } function m ( e , t ) { if ( h && e in
n [ angular . element ( t ) . attr ( "my-i18n-param" ) || angular . element ( t ) . attr ( "name" ) ] = t . outerHTML } ) , t . children ( "my-i18n-param" ) . remove ( ) ; var a = t . attr ( "my-i18n" ) || t . attr ( "msgid" ) ? t : t . children ( "my-i18n-format, [my-i18n-format]" ) ; a . each ( function ( t , a ) { var i = angular . element ( a ) , o = i . attr ( "my-i18n" ) || i . attr ( "msgid" ) || i . attr ( "my-i18n-format" ) || i . html ( ) . replace ( /\s+/g , " " ) . trim ( ) ; if ( i . hasClass ( "nocopy" ) ) { var s = e ( o + "_raw" , n ) ; i . attr ( "data-content" , s ) } else { var s = e ( o , n ) ; i . html ( s ) } } ) } } } ] ) , angular . module ( "izhukov.mtproto" , [ "izhukov.utils" ] ) . factory ( "MtpDcConfigurator" , function ( ) { function e ( e , i ) { if ( void 0 === a [ e ] ) { var o , s , r = ! 1 ; if ( Config . Modes . ssl || ! Config . Modes . http ) { var l = t [ e - 1 ] + ( i ? "-1" : "" ) , c = Config . Modes . test ? "apiw_test1" : "apiw1" ; return r = "https://" + l + ".web.telegram.org/" + c } for ( o = 0 ; o < n . length ; o ++ ) if ( s = n [ o ] , s . id == e ) { r = "http://" + s . host + ( 80 != s . port ? ":" + s . port : "" ) + "/apiw1" ; break } a [ e ] = r } return a [ e ] } var t = [ "pluto" , "venus" , "aurora" , "vesta" , "flora" ] , n = Config . Modes . test ? [ { id : 1 , host : "149.154.175.10" , port : 80 } , { id : 2 , host : "149.154.167.40" , port : 80 } , { id : 3 , host : "149.154.175.117" , port : 80 } ] : [ { id : 1 , host : "149.154.175.50" , port : 80 } , { id : 2 , host : "149.154.167.51" , port : 80 } , { id : 3 , host : "149.154.175.100" , port : 80 } , { id : 4 , host : "149.154.167.91" , port : 80 } , { id : 5 , host : "149.154.171.5" , port : 80 } ] , a = { } ; return { chooseServer : e } } ) . factory ( "MtpRsaKeysManager" , function ( ) { function e ( ) { if ( ! i ) { for ( var e = 0 ; e < n . length ; e ++ ) { var t = n [ e ] , o = new TLSerialization ; o . storeBytes ( bytesFromHex ( t . modulus ) , "n" ) , o . storeBytes ( bytesFromHex ( t . exponent ) , "e" ) ; var s = o . getBuffer ( ) , r = sha1BytesSync ( s ) . slice ( - 8 ) ; r . reverse ( ) , a [ bytesToHex ( r ) ] = { modulus : t . modulus , exponent : t . exponent } } i = ! 0 } } function t ( t ) { e ( ) ; var n , i , o ; for ( o = 0 ; o < t . length ; o ++ ) if ( n = bigStringInt ( t [ o ] ) . toString ( 16 ) , i = a [ n ] ) return angular . extend ( { fingerprint : t [ o ] } , i ) ; return ! 1 } var n = [ { modulus : "c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f" , exponent : "010001" } ] , a = { } , i = ! 1 ; return { prepare : e , select : t } } ) . service ( "MtpSecureRandom" , [ "$window" , function ( e ) { return $ ( e ) . on ( "click keydown" , rng _seed _time ) , new SecureRandom } ] ) . factory ( "MtpTimeManager" , [ "Storage" , function ( e ) { function t ( ) { var e = tsNow ( ) , t = Math . floor ( e / 1e3 ) + i , n = e % 1e3 , o = nextRandomInt ( 65535 ) , s = [ t , n << 21 | o << 3 | 4 ] ; return ( a [ 0 ] > s [ 0 ] || a [ 0 ] == s [ 0 ] && a [ 1 ] >= s [ 1 ] ) && ( s = [ a [ 0 ] , a [ 1 ] + 4 ] ) , a = s , longFromInts ( s [ 0 ] , s [ 1 ] ) } function n ( t , n ) { var o = t - Math . floor ( ( n || tsNow ( ) ) / 1e3 ) , s = Math . abs ( i - o ) > 10 ; return e . set ( { server _time _offset : o } ) , a = [ 0 , 0 ] , i = o , console . log ( dT ( ) , "Apply server time" , t , n , o , s ) , s } var a = [ 0 , 0 ] , i = 0 ; return e . get ( "server_time_offset" ) . then ( function ( e ) { e && ( i = e ) } ) , { generateID : t , applyServerTime : n } } ] ) . factory ( "MtpAuthorizer" , [ "MtpDcConfigurator" , "MtpRsaKeysManager" , "MtpSecureRandom" , "MtpTimeManager" , "CryptoWorker" , "$http" , "$q" , "$timeout" , function ( e , t , n , a , i , o , s , r ) { function l ( t , n ) { var i = n . byteLength , r = new Int32Array ( n ) , l = new TLSerialization ; l . storeLongP ( 0 , 0 , "auth_key_id" ) , l . storeLong ( a . generateID ( ) , "msg_id" ) , l . storeInt ( i , "request_length" ) ; var c = l . getBuffer ( ) , d = new Int32Array ( c ) , u = c . byteLength , p = new ArrayBuffer ( u + i ) , m = new Int32Array ( p ) ; m . set ( d ) , m . set ( r , d . length ) ; var g , h = _ ? p : m , f = e . chooseServer ( t ) , v = { code : 406 , type : "NETWORK_BAD_RESPONSE" , url : f } ; try { g = o . post ( f , h , { responseType : "arraybuffer" , transformRequest : null } ) } catch ( y ) { g = s . reject ( angular . extend ( v , { originalError : y } ) ) } return g . then ( function ( e ) { if ( ! e . data || ! e . data . byteLength ) return s . reject ( v ) ; try { var t = new TLDeserialization ( e . data , { mtproto : ! 0 } ) ; t . fetchLong ( "auth_key_id" ) , t . fetchLong ( "msg_id" ) , t . fetchInt ( "msg_len" ) } catch ( n ) { return s . reject ( angular . extend ( v , { originalError : n } ) ) } return t } , function ( e ) { return e . message || e . type || ( e = angular . extend ( v , { originalError : e } ) ) , s . reject ( e ) } ) } function c ( e ) { var n = e . deferred , a = new TLSerialization ( { mtproto : ! 0 } ) ; a . stor
e . wrapApiCall ( t , n , a ) . then ( function ( e ) { c . resolve ( e ) } , u ) } , u ) ) } else if ( a . rawError || 420 != o . code ) if ( a . rawError || 500 != o . code && "MSG_WAIT_FAILED" != o . type ) u ( o ) ; else { var _ = tsNow ( ) ; if ( a . stopTime ) { if ( _ >= a . stopTime ) return u ( o ) } else a . stopTime = _ + 1e3 * ( void 0 !== a . timeout ? a . timeout : 10 ) ; a . waitTime = a . waitTime ? Math . min ( 60 , 1.5 * a . waitTime ) : 1 , setTimeout ( function ( ) { f ( r ) } , 1e3 * a . waitTime ) } else { var v = o . type . match ( /^FLOOD_WAIT_(\d+)/ ) [ 1 ] || 10 ; if ( v > ( a . timeout || 60 ) ) return u ( o ) ; setTimeout ( function ( ) { f ( r ) } , 1e3 * v ) } } ) } ; return ( s = a . dcID || k ) ? g ( s , a ) . then ( f , u ) : e . get ( "dc" ) . then ( function ( e ) { g ( s = e || 2 , a ) . then ( f , u ) } ) , c . promise } function f ( ) { return e . get ( "user_auth" ) . then ( function ( e ) { return d ( e && e . id > 0 || ! 1 ) , e . id || 0 } ) } function _ ( ) { return k || ! 1 } var v , y = { } , b = { } , w = { } , k = ! 1 ; return a . start ( ) , e . get ( "dc" ) . then ( function ( e ) { e && ( k = e ) } ) , { getBaseDcID : _ , getUserID : f , invokeApi : h , getNetworker : g , setUserAuth : u , logOut : p } } ] ) . factory ( "MtpApiFileManager" , [ "MtpApiManager" , "$q" , "qSync" , "FileManager" , "IdbFileStorage" , "TmpfsFileStorage" , "MemoryFileStorage" , "WebpManager" , function ( e , t , n , a , i , o , s , r ) { function l ( e , n , a ) { void 0 === w [ e ] && ( w [ e ] = [ ] , k [ e ] = 0 ) ; var i = w [ e ] , o = t . defer ( ) ; return i . push ( { cb : n , deferred : o , activeDelta : a } ) , setZeroTimeout ( function ( ) { c ( e ) } ) , o . promise } function c ( e ) { var t = w [ e ] , n = "upload" == e ? 11 : 5 ; if ( k [ e ] >= n || ! t || ! t . length ) return ! 1 ; var a = t . shift ( ) , i = a . activeDelta || 1 ; k [ e ] += i ; $ ++ ; a . cb ( ) . then ( function ( t ) { k [ e ] -= i , c ( e ) , a . deferred . resolve ( t ) } , function ( t ) { k [ e ] -= i , c ( e ) , a . deferred . reject ( t ) } ) } function d ( e ) { switch ( e . _ ) { case "inputDocumentFileLocation" : var t = ( e . file _name || "" ) . split ( "." , 2 ) , n = t [ 1 ] || "" ; e . sticker && ! r . isWebpSupported ( ) && ( n += ".png" ) ; var a = e . version ? "v" + e . version : "" ; return t [ 0 ] + "_" + e . id + a + "." + n ; default : e . volume _id || console . trace ( "Empty location" , e ) ; var n = "jpg" ; return e . sticker && ( n = r . isWebpSupported ( ) ? "webp" : "png" ) , e . volume _id + "_" + e . local _id + "_" + e . secret + "." + n } } function u ( e ) { if ( ! e ) return ! 1 ; var t = d ( e ) ; return b [ t ] || ! 1 } function p ( ) { if ( ! Config . Modes . memory _only ) { if ( o . isAvailable ( ) ) return o ; if ( i . isAvailable ( ) ) return i } return s } function m ( e , t ) { var n = d ( e ) ; return v [ n ] || ( v [ n ] = p ( ) . saveFile ( n , t ) . then ( function ( e ) { return b [ n ] = e } , function ( e ) { delete v [ n ] } ) ) , v [ n ] } function g ( i ) { if ( ! a . isAvailable ( ) ) return t . reject ( { type : "BROWSER_BLOB_NOT_SUPPORTED" } ) ; var o = d ( i ) , s = i . sticker ? "image/webp" : "image/jpeg" , c = v [ o ] || y [ o ] ; if ( c ) return c ; var u = p ( ) ; return y [ o ] = u . getFile ( o ) . then ( function ( e ) { return b [ o ] = e } , function ( ) { var t = l ( i . dc _id , function ( ) { var t = i ; return t . _ && "fileLocation" != t . _ || ( t = angular . extend ( { } , i , { _ : "inputFileLocation" } ) ) , e . invokeApi ( "upload.getFile" , { location : t , offset : 0 , limit : 1048576 } , { dcID : i . dc _id , fileDownload : ! 0 , createNetworker : ! 0 , noErrorBox : ! 0 } ) } ) , c = function ( e ) { return ! i . sticker || r . isWebpSupported ( ) ? n . when ( e ) : r . getPngBlobFromWebp ( e ) } ; return u . getFileWriter ( o , s ) . then ( function ( e ) { return t . then ( function ( t ) { return c ( t . bytes ) . then ( function ( t ) { return a . write ( e , t ) . then ( function ( ) { return b [ o ] = e . finalize ( ) } ) } ) } ) } ) } ) } function h ( e , t ) { var n = p ( ) , a = d ( e ) ; return n . getFile ( a , t ) } function f ( i , o , s , c ) { if ( ! a . isAvailable ( ) ) return t . reject ( { type : "BROWSER_BLOB_NOT_SUPPORTED" } ) ; c = c || { } ; var u = ! 1 ; o . sticker && ! r . isWebpSupported ( ) && ( c . toFileEntry || s > 524288 ? delete o . sticker : ( u = ! 0 , c . mime = "image/png" ) ) ; var m = d ( o ) , g = c . toFileEntry || null , h = v [ m ] || y [ m ] , f = p ( ) ; if ( h ) return g ? h . then ( function ( e ) { return a . copy ( e , g ) } ) : h ; var _ , w = t . defer ( ) , k = ! 1 , $ = ! 1 , S = c . mime || "image/jpeg" , C = function ( e ) { w . reject ( e ) , C = angular . noop , ! _ || e && "DOWNLOAD_CANCELED" == e . type || _ . truncate ( 0 ) } ; return f . getFile ( m , s ) . then ( function ( e ) { g ? a . copy ( e , g ) . then ( function ( ) { w . resolve ( ) } , C ) : w . resolve ( b [ m ] = e ) } , function ( ) { var c = g ? a . getFileWriter ( g ) : f . getFileWriter ( m , S ) , d = function ( e ) { return u ? r . getPngBlobFromWebp ( e ) : n . when ( e ) } ; c . then ( function ( n ) { _ = n ; var r , c , u = 524288 , p = 0 , h = t . when ( ) ; if ( n . length ) { if ( p = n . length , p >= s ) return void ( g ? w . resolve ( ) : w . resolve ( b [ m ] = n . finalize ( ) ) ) ; n . seek ( p ) , w . notify ( { done : p , total : s } ) } for ( r = p ; r < s ; r += u ) c = t . defer ( ) , function ( r , c , p , h ) { return l ( i , function ( ) { return k ? t . when ( ) : e . invokeApi ( "upload.getFile" , { location : o , offset : c , limit : u } , { dcID : i , fileDownload : ! 0 , singleInRequest : void 0 !== window . safari , createNetworker : ! 0 } ) } , 2 ) . then ( function ( e ) { h . then ( function ( ) { return k ? t . when ( ) : d ( e . bytes ) . then ( function ( e
return s . html = t . trustAs ( "html" , u ) , a . full = s , a } var p = { } , m = { } ; return a . $on ( "apiUpdate" , function ( e , t ) { switch ( t . _ ) { case "updateWebPage" : l ( t . webpage ) } } ) , { saveWebPage : l , openEmbed : c , wrapForFull : u , wrapForHistory : d } } ] ) . service ( "AppGamesManager" , [ "$modal" , "$sce" , "$window" , "$rootScope" , "MtpApiManager" , "AppPhotosManager" , "AppDocsManager" , "RichTextProcessor" , function ( e , t , n , a , i , o , s , r ) { function l ( e , t , n ) { e . photo && "photo" === e . photo . _ ? o . savePhoto ( e . photo , n ) : delete e . photo , e . document && "document" === e . document . _ ? s . saveDoc ( e . document , n ) : delete e . document , e . rTitle = r . wrapRichText ( e . title , { noLinks : ! 0 , noLinebreaks : ! 0 } ) , e . rDescription = r . wrapRichText ( e . description || "" , { } ) , void 0 === p [ e . id ] ? p [ e . id ] = e : safeReplaceObject ( p [ e . id ] , e ) } function c ( t , n , i ) { var o = a . $new ( ! 0 ) ; o . gameID = t , o . messageID = n , o . embedUrl = i , e . open ( { templateUrl : templateUrl ( "game_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "GameModalController" , scope : o , windowClass : "photo_modal_window mobile_modal" } ) } function d ( e ) { var t = angular . copy ( p [ e ] ) || { _ : "gameEmpty" } ; return t . photo && t . photo . id && ( t . photo = o . wrapForHistory ( t . photo . id ) ) , t . document && t . document . id && ( t . document = s . wrapForHistory ( t . document . id ) ) , t } function u ( e , a , i ) { var o = d ( e ) , s = $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 10 ) , r = $ ( n ) . height ( ) - ( Config . Mobile ? 51 : 150 ) ; ! Config . Mobile && s > 800 && ( s -= 208 ) ; var l = { width : s , height : r } , c = Config . Modes . chrome _packed ? "webview" : "iframe" , u = "text/html" , p = "<" + c + ' src="' + encodeEntities ( i ) + '" type="' + encodeEntities ( u ) + '" frameborder="0" border="0" webkitallowfullscreen mozallowfullscreen allowfullscreen width="' + l . width + '" height="' + l . height + '" style="width: ' + l . width + "px; height: " + l . height + 'px;" sandbox="allow-scripts allow-same-origin"></' + c + ">" ; return l . html = t . trustAs ( "html" , p ) , o . full = l , o } var p = { } ; return { saveGame : l , openGame : c , wrapForFull : u , wrapForHistory : d } } ] ) . service ( "AppDocsManager" , [ "$sce" , "$rootScope" , "$modal" , "$window" , "$q" , "$timeout" , "RichTextProcessor" , "MtpApiFileManager" , "FileManager" , "qSync" , function ( e , t , n , a , i , o , s , r , l , c ) { function d ( e , t ) { if ( w [ e . id ] = e , t && angular . extend ( e , t ) , e . thumb && "photoCachedSize" == e . thumb . _ && ( r . saveSmallFile ( e . thumb . location , e . thumb . bytes ) , e . thumb . size = e . thumb . bytes . length , delete e . thumb . bytes , e . thumb . _ = "photoSize" ) , e . thumb && "photoSizeEmpty" == e . thumb . _ && delete e . thumb , angular . forEach ( e . attributes , function ( t ) { switch ( t . _ ) { case "documentAttributeFilename" : e . file _name = t . file _name ; break ; case "documentAttributeAudio" : e . duration = t . duration , e . audioTitle = t . title , e . audioPerformer = t . performer , e . type = t . pFlags . voice ? "voice" : "audio" ; break ; case "documentAttributeVideo" : e . duration = t . duration , e . w = t . w , e . h = t . h , e . thumb && ( e . type = "video" ) ; break ; case "documentAttributeSticker" : e . sticker = ! 0 , void 0 !== t . alt && ( e . stickerEmojiRaw = t . alt , e . stickerEmoji = s . wrapRichText ( e . stickerEmojiRaw , { noLinks : ! 0 , noLinebreaks : ! 0 } ) ) , t . stickerset && ( "inputStickerSetEmpty" == t . stickerset . _ ? delete t . stickerset : "inputStickerSetID" == t . stickerset . _ && ( e . stickerSetInput = t . stickerset ) ) , e . thumb && "image/webp" == e . mime _type && ( e . type = "sticker" ) ; break ; case "documentAttributeImageSize" : e . w = t . w , e . h = t . h ; break ; case "documentAttributeAnimated" : "image/gif" != e . mime _type && "video/mp4" != e . mime _type || ! e . thumb || ( e . type = "gif" ) , e . animated = ! 0 } } ) , ! e . mime _type ) switch ( e . type ) { case "gif" : e . mime _type = "video/mp4" ; break ; case "video" : e . mime _type = "video/mp4" ; break ; case "sticker" : e . mime _type = "image/webp" ; break ; case "audio" : e . mime _type = "audio/mpeg" ; break ; case "voice" : e . mime _type = "audio/ogg" ; break ; default : e . mime _type = "application/octet-stream" } e . file _name || ( e . file _name = "" ) , "documentEmpty" == e . _ && ( e . size = 0 ) } function u ( e ) { return w [ e ] || { _ : "documentEmpty" } } function p ( e ) { return void 0 !== w [ e ] } function m ( e ) { if ( e . file _name ) return e . file _name ; var t = "." + e . mime _type . split ( "/" ) [ 1 ] ; return ".octet-stream" == t && ( t = "" ) , "t_" + ( e . type || "file" ) + e . id + t } function g ( e ) { if ( void 0 !== k [ e ] ) return k [ e ] ; var t , n , a , i , o = angular . copy ( w [ e ] ) , s = o . thumb , r = ! 1 ; switch ( o . type ) { case "video" : t = Math . min ( S - 80 , Config . Mobile ? 210 : 150 ) , n = Math . min ( C - 100 , Config . Mobile ? 210 : 150 ) ; break ; case "sticker" : r = ! 0 , t = Math . min ( S - 80 , Config . Mobile ? 128 : 192 ) , n = Math . min ( C - 100 , Config . Mobile ? 128 : 192 ) ; break ; case "gif" : r = ! 0 , t = Math . min ( S - 80 , Config . Mobile ? 21
} , n ) } ) } function c ( e , t ) { return a . invokeApi ( "auth.requestPasswordRecovery" , { } , t ) } function d ( e , t ) { return a . invokeApi ( "auth.recoverPassword" , { code : e } , t ) } function u ( e , t ) { for ( var n = unescape ( encodeURIComponent ( t ) ) , a = new ArrayBuffer ( n . length ) , o = new Uint8Array ( a ) , s = 0 , r = n . length ; s < r ; s ++ ) o [ s ] = n . charCodeAt ( s ) ; return a = bufferConcat ( bufferConcat ( e , o ) , e ) , i . sha256Hash ( a ) } return { check : l , getState : s , requestRecovery : c , recover : d , updateSettings : r } } ] ) . service ( "ErrorService" , [ "$rootScope" , "$modal" , "$window" , function ( e , t , n ) { function a ( n , a ) { if ( s >= 1 ) return console . log ( "Skip error box, too many open" , s , n , a ) , ! 1 ; a = a || { } ; var i = e . $new ( ) ; angular . extend ( i , n ) , s ++ ; var o = t . open ( { templateUrl : templateUrl ( "error_modal" ) , scope : i , windowClass : a . windowClass || "error_modal_window" } ) ; return o . result [ "finally" ] ( function ( ) { s -- } ) , o } function i ( e , t ) { return a ( { title : e , description : t } ) } function o ( n , a ) { a = a || { } ; var i = e . $new ( ) ; angular . extend ( i , n ) ; var o = t . open ( { templateUrl : templateUrl ( "confirm_modal" ) , scope : i , windowClass : a . windowClass || "confirm_modal_window" } ) ; return o . result } var s = 0 ; return n . safeConfirm = function ( e , t ) { "string" == typeof e && ( e = { message : e } ) , o ( e ) . then ( function ( e ) { t ( e || ! 0 ) } , function ( ) { t ( ! 1 ) } ) } , { show : a , alert : i , confirm : o } } ] ) . service ( "PeersSelectService" , [ "$rootScope" , "$modal" , function ( e , t ) { function n ( n ) { var a = e . $new ( ) ; return a . multiSelect = ! 1 , a . noMessages = ! 0 , n && angular . extend ( a , n ) , t . open ( { templateUrl : templateUrl ( "peer_select" ) , controller : "PeerSelectController" , scope : a , windowClass : "peer_select_window mobile_modal" , backdrop : "single" } ) . result } function a ( a ) { if ( Config . Mobile ) return n ( a ) . then ( function ( e ) { return [ e ] } ) ; var i = e . $new ( ) ; return i . multiSelect = ! 0 , i . noMessages = ! 0 , a && angular . extend ( i , a ) , t . open ( { templateUrl : templateUrl ( "peer_select" ) , controller : "PeerSelectController" , scope : i , windowClass : "peer_select_window mobile_modal" , backdrop : "single" } ) . result } return { selectPeer : n , selectPeers : a } } ] ) . service ( "ContactsSelectService" , [ "$rootScope" , "$modal" , function ( e , t ) { function n ( n , a ) { a = a || { } ; var i = e . $new ( ) ; return i . multiSelect = n , angular . extend ( i , a ) , ! i . action && n && ( i . action = "select" ) , t . open ( { templateUrl : templateUrl ( "contacts_modal" ) , controller : "ContactsModalController" , scope : i , windowClass : "contacts_modal_window mobile_modal" , backdrop : "single" } ) . result } return { selectContacts : function ( e ) { return n ( ! 0 , e ) } , selectContact : function ( e ) { return n ( ! 1 , e ) } } } ] ) . service ( "ChangelogNotifyService" , [ "Storage" , "$rootScope" , "$modal" , function ( e , t , n ) { function a ( ) { e . get ( "last_version" ) . then ( function ( t ) { t != Config . App . version && ( t && i ( t ) , e . set ( { last _version : Config . App . version } ) ) } ) } function i ( e ) { var a = t . $new ( ) ; a . lastVersion = e , n . open ( { controller : "ChangelogModalController" , templateUrl : templateUrl ( "changelog_modal" ) , scope : a , windowClass : "changelog_modal_window mobile_modal" } ) } return { checkUpdate : a , showChangelog : i } } ] ) . service ( "HttpsMigrateService" , [ "ErrorService" , "Storage" , function ( e , t ) { function n ( ) { t . get ( "https_dismiss" ) . then ( function ( n ) { ( ! n || tsNow ( ) > n + 432e5 ) && e . confirm ( { type : "MIGRATE_TO_HTTPS" } ) . then ( function ( ) { var e ; try { e = window . open ( "https://web.telegram.org" , "_blank" ) } catch ( t ) { } e || ( location . href = "https://web.telegram.org" ) } , function ( ) { t . set ( { https _dismiss : tsNow ( ) } ) } ) } ) } function a ( ) { i || "http:" != location . protocol || Config . Modes . http || Config . App . domains . indexOf ( location . hostname ) == - 1 || ( i = ! 0 , setTimeout ( n , 12e4 ) ) } var i = ! 1 ; return { start : a , check : n } } ] ) . service ( "LayoutSwitchService" , [ "ErrorService" , "Storage" , "AppRuntimeManager" , "$window" , function ( e , t , n , a ) { function i ( e ) { ConfigStorage . noPrefix ( ) , t . set ( { layout _selected : e ? "mobile" : "desktop" , layout _width : $ ( window ) . width ( ) } ) . then ( function ( ) { n . reload ( ) } ) } function o ( n ) { if ( ! l ) { var a = $ ( window ) . width ( ) , o = a < 600 ; ! a || ! n && ( Config . Navigator . mobile ? a <= 800 : o ) || o != Config . Mobile && ( ConfigStorage . noPrefix ( ) , t . get ( "layout_width" ) . then ( function ( n ) { return a != n && ( l = ! 0 , void e . confirm ( { type : o ? "SWITCH_MOBILE_VERSION" : "SWITCH_DESKTOP_VERSION" } ) . then ( function ( ) { i ( o ) } , function ( ) { ConfigStorage . noPrefix ( ) , t . set ( { layout _width : a } ) , l = ! 1 } ) ) } ) ) } } function s ( ) { r || Config . Navigator . mobile || ( r = ! 0 , o ( ) , $ ( a ) . on ( "resize" , o ) ) } var r = ! 1 , l = ! 1 ; return { start : s , switchLayout : i } } ] ) . service ( "TelegramMeWebService" , [ "Storage" , function ( e ) { func
d . regroupWrappedHistory ( K . messages , - i ) && e . $broadcast ( "messages_regroup" ) , delete e . state . empty , e . $broadcast ( "ui_history_append" ) ) : Q = 0 , e . historyState . skipped = X = Q > 0 , oe && I ( ) } } ) } } function I ( ) { if ( Z ) { if ( re ) return void ( oe = ! 0 ) ; oe = ! 1 , e . state . moreActive = ie = ! 0 ; var t = ne , n = ++ ae , a = e . historyFilter . mediaType && { _ : te [ e . historyFilter . mediaType ] } , i = Config . Mobile ? 20 : 0 , o = a ? d . getSearch ( e . curDialog . peerID , "" , a , J , i ) : d . getHistory ( e . curDialog . peerID , J , i ) ; o . then ( function ( a ) { e . state . moreActive = ie = ! 1 , t == ne && n == ae && ( angular . forEach ( a . history , function ( e ) { K . messages . unshift ( d . wrapForHistory ( e ) ) , K . ids . unshift ( e ) } ) , Z = null === a . count || a . history . length && K . messages . length < a . count , a . history . length && ( delete e . state . empty , J = a . history [ a . history . length - 1 ] , e . $broadcast ( "ui_history_prepend" ) , d . regroupWrappedHistory ( K . messages , a . history . length + 1 ) && e . $broadcast ( "messages_regroup" ) ) , le && x ( ) ) } ) } } function A ( t ) { e . historyState . missedCount = 0 , Z = ! 1 , e . historyState . skipped = X = ! 1 , J = 0 , Q = 0 , K = b ( G ) ; var n = 0 , a = 0 ; e . curDialog . messageID ? ( J = parseInt ( e . curDialog . messageID ) , n = 20 , a = 20 ) : t && ( n = 10 ) , e . state . moreActive = ie = ! 1 , oe = ! 1 , e . state . lessActive = re = ! 1 , le = ! 1 ; var o = K . messages . length ; o && ( J || a ) && ( o = 0 , K . messages = [ ] , K . ids = [ ] , e . state . empty = ! 0 ) ; var s = ++ ne , r = e . historyFilter . mediaType && { _ : te [ e . historyFilter . mediaType ] } , l = r ? d . getSearch ( e . curDialog . peerID , "" , r , J ) : d . getHistory ( e . curDialog . peerID , J , n , a , o ) ; e . state . mayBeHasMore = ! 0 , l . then ( function ( t ) { if ( s == ne ) { var n = t . history . length ; Q = t . unreadSkip || J && t . history . indexOf ( J ) >= a - 1 ? t . history [ 0 ] : 0 , J = t . history [ t . history . length - 1 ] , e . historyState . skipped = X = Q > 0 , Z = null === t . count || n && n < t . count , $ ( ) , safeReplaceObject ( e . state , { loaded : ! 0 , empty : ! n } ) , K . messages = [ ] , K . ids = [ ] , angular . forEach ( t . history , function ( n ) { var a = d . wrapForHistory ( n ) ; e . historyState . skipped && delete a . pFlags . unread , t . unreadOffset && ( a . unreadAfter = ! 0 ) , K . messages . push ( a ) , K . ids . push ( n ) } ) , K . messages . reverse ( ) , K . ids . reverse ( ) , d . regroupWrappedHistory ( K . messages ) && e . $broadcast ( "messages_regroup" ) , t . unreadOffset ? e . historyUnreadAfter = t . history [ t . unreadOffset - 1 ] : e . historyUnreadAfter && delete e . historyUnreadAfter , e . $broadcast ( "messages_unread_after" ) ; var o = e . curDialog . messageID || 0 ; onContentLoaded ( function ( ) { e . $broadcast ( "messages_focus" , o ) } ) , e . $broadcast ( "ui_history_change" ) , i . idle . isIDLE || d . readHistory ( e . curDialog . peerID ) , S ( ) , C ( ) } } , function ( ) { safeReplaceObject ( e . state , { error : ! 0 , loaded : ! 0 } ) } ) } function E ( ) { ne ++ , safeReplaceObject ( e . historyPeer , { } ) , safeReplaceObject ( e . state , { notSelected : ! 0 } ) , K = ! 1 , Z = ! 1 , e . $broadcast ( "ui_history_change" ) } function T ( ) { d . startBot ( G , 0 , e . curDialog . startParam ) , e . curDialog . startParam = ! 1 } function D ( ) { delete e . curDialog . startParam } function P ( ) { r . invokeApi ( "channels.joinChannel" , { channel : c . getChannelInput ( - G ) } ) . then ( function ( e ) { p . processUpdateMessage ( e ) } ) } function F ( e ) { f . getPeerSettings ( G ) . then ( function ( t ) { t . mute _until = e ? 2e9 : 0 , f . updatePeerSettings ( G , t ) } ) } function N ( t , n ) { if ( e . historyState . botActions || i . idle . afterFocus ) return ! 1 ; var o = d . getMessage ( t ) ; if ( "messageService" == o . _ ) return ! 1 ; if ( ! e . historyState . selectActions ) { if ( getSelectedText ( ) ) return ! 1 ; for ( var s = n . target ; s ; ) if ( s instanceof SVGElement ) s = s . parentNode ; else { if ( s . className && s . className . indexOf ( "im_message_outer_wrap" ) != - 1 ) { if ( Config . Mobile ) return ! 1 ; break } if ( s . className && s . className . indexOf ( "im_message_date" ) != - 1 ) return u . isBroadcast ( G ) ? L ( t ) : H ( t ) , ! 1 ; if ( Config . Mobile && s . className && s . className . indexOf ( "im_message_body" ) != - 1 ) break ; if ( "A" == s . tagName || hasOnlick ( s ) ) return ! 1 ; s = s . parentNode } if ( Config . Mobile ) return e . historyState . canEdit = d . canEditMessage ( t ) , a . open ( { templateUrl : templateUrl ( "message_actions_modal" ) , windowClass : "message_actions_modal_window" , scope : e . $new ( ) } ) . result . then ( function ( n ) { switch ( n ) { case "reply" : H ( t ) ; break ; case "edit" : q ( t ) ; break ; case "delete" : B ( t ) ; break ; case "forward" : j ( t ) ; break ; case "select" : e . historyState . selectActions = "selected" , e . $broadcast ( "ui_panel_update" ) , N ( t ) } } ) , ! 1 } var r = n && n . shiftKey ; if ( r && e . $broadcast ( "ui_selection_clear" ) , e . selectedMsgs [ t ] ) ee = ! 1 , delete e . selectedMsgs [ t ] , e . selectedCount -- , e . selectedCount || ( e . historyState . selectActions = ! 1 , e . $broadcast ( "ui_panel_update" ) ) ; else { if ( r ) { if ( ee != t ) { var l , c , p , m = ee > t ; for ( l = 0 ; l < K . messages . lengt
n . mute _until = t ? 0 : 2e9 , l . updatePeerSettings ( e . userID , n ) } ) } ) } ) } ) , e . goToHistory = function ( ) { n . $broadcast ( "history_focus" , { peerString : g } ) } , e . flushHistory = function ( n ) { m . confirm ( { type : n ? "HISTORY_FLUSH" : "HISTORY_FLUSH_AND_DELETE" } ) . then ( function ( ) { d . flushHistory ( e . userID , n ) . then ( function ( ) { n ? e . goToHistory ( ) : ( a . close ( ) , t . url ( "/im" ) ) } ) } ) } , e . importContact = function ( t ) { var a = n . $new ( ) ; a . importContact = { phone : e . user . phone , first _name : e . user . first _name , last _name : e . user . last _name } , o . open ( { templateUrl : templateUrl ( t ? "edit_contact_modal" : "import_contact_modal" ) , controller : "ImportContactModalController" , windowClass : "md_simple_modal_window mobile_modal" , scope : a } ) . result . then ( function ( t ) { e . userID == t && ( e . user = s . getUser ( e . userID ) ) } ) } , e . deleteContact = function ( ) { s . deleteContacts ( [ e . userID ] ) . then ( function ( ) { e . user = s . getUser ( e . userID ) } ) } , e . inviteToGroup = function ( ) { p . selectPeer ( { confirm _type : "INVITE_TO_GROUP" , noUsers : ! 0 } ) . then ( function ( t ) { var a = u . getPeerID ( t ) , i = a < 0 ? - a : 0 ; d . startBot ( e . user . id , i ) . then ( function ( ) { n . $broadcast ( "history_focus" , { peerString : t } ) } ) } ) } , e . sendCommand = function ( t ) { d . sendText ( e . userID , "/" + t ) , n . $broadcast ( "history_focus" , { peerString : g } ) } , e . toggleBlock = function ( t ) { r . invokeApi ( t ? "contacts.block" : "contacts.unblock" , { id : s . getUserInput ( e . userID ) } ) . then ( function ( ) { e . blocked = t } ) } , e . shareContact = function ( ) { p . selectPeer ( { confirm _type : "SHARE_CONTACT_PEER" , canSend : ! 0 } ) . then ( function ( t ) { var a = u . getPeerID ( t ) ; d . sendOther ( a , { _ : "inputMediaContact" , phone _number : e . user . phone , first _name : e . user . first _name , last _name : e . user . last _name , user _id : e . user . id } ) , n . $broadcast ( "history_focus" , { peerString : t } ) } ) } } ] ) . controller ( "ChatModalController" , [ "$scope" , "$modalInstance" , "$location" , "$timeout" , "$rootScope" , "$modal" , "AppUsersManager" , "AppChatsManager" , "AppProfileManager" , "AppPhotosManager" , "MtpApiManager" , "MtpApiFileManager" , "NotificationsManager" , "AppMessagesManager" , "AppPeersManager" , "ApiUpdatesManager" , "ContactsSelectService" , "ErrorService" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , _ ) { function v ( t ) { h . processUpdateMessage ( t ) , i . $broadcast ( "history_focus" , { peerString : e . chatFull . peerString } ) } function y ( t ) { t && t . type && 0 === t . type . indexOf ( "image" ) && ( e . photo . updating = ! 0 , u . uploadFile ( t ) . then ( function ( t ) { return d . invokeApi ( "messages.editChatPhoto" , { chat _id : r . getChatInput ( e . chatID ) , photo : { _ : "inputChatUploadedPhoto" , file : t } } ) . then ( v ) } ) [ "finally" ] ( function ( ) { e . photo . updating = ! 1 } ) ) } e . chatFull = r . wrapForFull ( e . chatID , { } ) , e . settings = { notifications : ! 0 } , e . maxParticipants = 200 , l . getChatFull ( e . chatID ) . then ( function ( t ) { e . chatFull = r . wrapForFull ( e . chatID , t ) , e . $broadcast ( "ui_height" ) , e . needMigrate = e . chatFull && e . chatFull . participants && e . chatFull . participants . participants && e . chatFull . participants . participants . length >= 200 , ( Config . Modes . test || Config . Modes . debug ) && ( e . needMigrate = ! 0 ) , p . savePeerSettings ( - e . chatID , t . notify _settings ) , p . getPeerMuted ( - e . chatID ) . then ( function ( t ) { e . settings . notifications = ! t , e . $watch ( "settings.notifications" , function ( t , n ) { return t !== n && void p . getPeerSettings ( - e . chatID ) . then ( function ( n ) { t ? n . mute _until = 0 : n . mute _until = 2e9 , p . updatePeerSettings ( - e . chatID , n ) } ) } ) } ) } ) , e . leaveGroup = function ( ) { _ . confirm ( { type : "HISTORY_LEAVE_AND_FLUSH" } ) . then ( function ( ) { d . invokeApi ( "messages.deleteChatUser" , { chat _id : r . getChatInput ( e . chatID ) , user _id : { _ : "inputUserSelf" } } ) . then ( function ( a ) { h . processUpdateMessage ( a ) , m . flushHistory ( - e . chatID ) . then ( function ( ) { t . close ( ) , n . url ( "/im" ) } ) } ) } ) } , e . inviteToGroup = function ( ) { var t = [ ] ; angular . forEach ( e . chatFull . participants . participants , function ( e ) { t . push ( e . user _id ) } ) , f . selectContacts ( { disabled : t } ) . then ( function ( t ) { angular . forEach ( t , function ( t ) { d . invokeApi ( "messages.addChatUser" , { chat _id : r . getChatInput ( e . chatID ) , user _id : s . getUserInput ( t ) , fwd _limit : 100 } ) . then ( function ( e ) { h . processUpdateMessage ( e ) } ) } ) , i . $broadcast ( "history_focus" , { peerString : e . chatFull . peerString } ) } ) } , e . migrateToSuperGroup = function ( ) { _ . confirm ( { type : "SUPERGROUP_MIGRATE" } ) . then ( function ( ) { d . invokeApi ( "messages.migrateChat" , { chat _id : r . getChatInput ( e . chatID ) } ) . then ( v ) } ) } , e . kickFromGroup = function ( t ) { d . invokeApi ( "messages.deleteChatUser" , { chat _id : r . getChatInput ( e . chatID ) , user _id : s . getUserInput ( t ) } ) . then
return function ( e ) { var t = " " ; return e = ( e || "" ) . replace ( /\D/g , "" ) , "7" == e . charAt ( 0 ) && 11 == e . length ? "+" + e . charAt ( 0 ) + t + "(" + e . substr ( 1 , 3 ) + ")" + t + e . substr ( 4 , 3 ) + "-" + e . substr ( 7 , 2 ) + "-" + e . substr ( 9 , 2 ) : "+" + e } } ] ) . filter ( "formatSize" , [ function ( ) { return function ( e , t ) { if ( ! e ) return "0" ; if ( e < 1024 ) return e + " b" ; if ( e < 1048576 ) return Math . round ( e / 1024 ) + " KB" ; var n = e / 1048576 ; return n = t ? n . toFixed ( 1 ) : Math . round ( 10 * n ) / 10 , n + " MB" } } ] ) . filter ( "formatSizeProgress" , [ "$filter" , "_" , function ( e , t ) { var n = e ( "formatSize" ) ; return function ( e ) { if ( ! e . total ) return "" ; var a = n ( e . done , ! 0 ) , i = a . split ( " " ) , o = n ( e . total ) , s = o . split ( " " ) ; return s [ 1 ] === i [ 1 ] ? t ( "format_size_progress_mulitple" , { done : i [ 0 ] , total : s [ 0 ] , parts : i [ 1 ] || "" } ) : t ( "format_size_progress" , { done : a , total : o } ) } } ] ) . filter ( "formatShortNumber" , [ function ( ) { return function ( e ) { if ( ! e ) return "0" ; if ( e < 1e3 ) return e . toString ( ) ; if ( e < 9e5 ) { var t = e > 1e4 ? 1 : 10 ; return Math . round ( e / 1e3 * t ) / t + "K" } var t = e > 1e7 ? 1 : 10 ; return Math . round ( e / 1e6 * t ) / t + "M" } } ] ) . filter ( "nl2br" , [ function ( ) { return function ( e ) { return e . replace ( /\n/g , "<br/>" ) } } ] ) . filter ( "shortUrl" , [ function ( ) { return function ( e ) { return "string" != typeof e ? e : e . replace ( /^https?:\/\// , "" ) . replace ( /^www\./ , "" ) } } ] ) . filter ( "richText" , [ "$filter" , function ( e ) { var t = e ( "linky" ) ; return function ( e ) { return t ( e , "_blank" ) . replace ( /\n| /g , "<br/>" ) } } ] ) . filter ( "relativeTime" , [ "$filter" , "_" , function ( e , t ) { var n = t . pluralize ( "relative_time_pluralize_minutes_ago" ) , a = t . pluralize ( "relative_time_pluralize_hours_ago" ) , i = e ( "dateOrTime" ) ; return function ( e ) { var o = Math . abs ( tsNow ( ! 0 ) - e ) ; if ( o < 60 ) return t ( "relative_time_just_now" ) ; if ( o < 3600 ) { var s = Math . floor ( o / 60 ) ; return n ( s ) } if ( o < 86400 ) { var r = Math . floor ( o / 3600 ) ; return a ( r ) } return i ( e , ! 0 ) } } ] ) , angular . module ( "myApp.services" ) . service ( "AppMessagesManager" , [ "$q" , "$rootScope" , "$location" , "$filter" , "$timeout" , "$sce" , "ApiUpdatesManager" , "AppUsersManager" , "AppChatsManager" , "AppPeersManager" , "AppPhotosManager" , "AppDocsManager" , "AppStickersManager" , "AppMessagesIDsManager" , "DraftsManager" , "AppWebPagesManager" , "AppGamesManager" , "MtpApiManager" , "MtpApiFileManager" , "ServerTimeManager" , "RichTextProcessor" , "NotificationsManager" , "Storage" , "AppProfileManager" , "TelegramMeWebService" , "ErrorService" , "StatusManager" , "_" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , _ , v , y , b , w , k , $ , S , C , M , x ) { function I ( t , n , a ) { var i = Te , o = angular . isString ( t ) && t . length ; if ( o ) { if ( ! a || Ue . query !== t ) { Ue . query = t ; var s = SearchIndexManager . search ( t , Oe ) ; Ue . dialogs = [ ] , angular . forEach ( Te . dialogs , function ( e ) { s [ e . peerID ] && Ue . dialogs . push ( e ) } ) , Ue . count = Ue . dialogs . length } i = Ue } else Ue . query = ! 1 ; var r = 0 ; if ( n > 0 ) for ( r = 0 ; r < i . dialogs . length && ! ( n > i . dialogs [ r ] . index ) ; r ++ ) ; return a = a || 20 , o || Ze || i . dialogs . length >= r + a ? e . when ( { dialogs : i . dialogs . slice ( r , r + a ) } ) : T ( a ) . then ( function ( ) { if ( r = 0 , n > 0 ) for ( r = 0 ; r < i . dialogs . length && ! ( n > i . dialogs [ r ] . index ) ; r ++ ) ; return { dialogs : i . dialogs . slice ( r , r + a ) } } ) } function A ( e ) { for ( var t = 0 ; t < Te . dialogs . length ; t ++ ) if ( Te . dialogs [ t ] . peerID == e ) return [ Te . dialogs [ t ] , t ] ; return [ ] } function E ( e ) { var n = c . getPeerID ( e . peer ) ; if ( ! n ) return ! 1 ; var a = c . isChannel ( n ) ? - n : 0 , i = c . getPeerSearchText ( n ) ; SearchIndexManager . indexObject ( n , i , Oe ) ; var o = ( c . isMegagroup ( a ) , m . getFullMessageID ( e . top _message , a ) ) , r = q ( o ) , d = r . date ; if ( ! a && n < 0 ) { var u = l . getChat ( - n ) ; if ( u && u . migrated _to && u . pFlags . deactivated ) { var p = c . getPeerID ( u . migrated _to ) ; return Qe [ n ] = p , void ( et [ p ] = n ) } } e . top _message = o , e . read _inbox _max _id = m . getFullMessageID ( e . read _inbox _max _id , a ) , e . read _outbox _max _id = m . getFullMessageID ( e . read _outbox _max _id , a ) ; var h = r . date ; if ( a ) { var f = l . getChat ( a ) ; ( ! h || f . date && f . date > h ) && ( h = f . date ) } var _ = g . saveDraft ( n , e . draft ) ; _ && _ . date > h && ( h = _ . date ) , e . index = D ( h ) , e . peerID = n , P ( e , d ) ; var v = r . pFlags . out ? "read_outbox_max_id" : "read_inbox_max_id" ; if ( r . mid && r . mid > e [ v ] && ( r . pFlags . unread = ! 0 ) , void 0 === Ee [ n ] && ! r . deleted ) { var y = { count : null , history : [ o ] , pending : [ ] } ; Ee [ n ] = y , j ( y , r ) && t . $broadcast ( "history_reply_markup" , { peerID : n } ) } if ( w . savePeerSettings ( n , e . notify _settings ) , a && e . pts && s . addChannelState ( a , e . pts ) , Config . Modes . packed && ! a && e . unread _count > 0 && We && e . top _message > We && r . pFlags . unread && ! r . pFlags . out && ! r . pFlags . silent ) { var b = 16 & r . flags ? r . from _id : n ; w . getPeerMuted ( b ) . then ( function ( e ) { e || ke ( r ) } ) } } function
a === i ? o . needDate && ( delete o . needDate , p = ! 0 ) : n && ! s || o . needDate || ( o . needDate = ! 0 , p = ! 0 ) , o . fwdFromID && o . media && o . media . document && ( o . media . document . sticker || o . media . document . audioTitle ) && ( o . fromID != ( s || { } ) . fromID || ! ( s || { } ) . fwdFromID ) && ( delete o . fwdFromID , o . _ = "message" ) , o . views && ! qe [ o . mid ] && ( qe [ o . mid ] = ! 0 , Ve . push ( o . mid ) , ze === ! 1 && ( ze = setTimeout ( ve , 1e4 ) ) ) , s && s . fromID == o . fromID && ! s . fwdFromID == ! o . fwdFromID && s . viaBotID == o . viaBotID && ! s . action && ! o . action && o . date < s . date + 900 ) { var g = o . message && o . message . length < 70 && o . message . indexOf ( "\n" ) == - 1 && ! o . reply _to _mid ; m && o . fwdFromID && o . fwdFromID == s . fwdFromID && o . viaBotID == s . viaBotID ? o . grouped = g ? "im_grouped_fwd_short" : "im_grouped_fwd" : o . grouped = ! o . fwdFromID && g ? "im_grouped_short" : "im_grouped" , m && o . fwdFromID && ( s . grouped || ( s . grouped = "im_grouped_fwd_start" ) , o . grouped && n == d - 1 && ( o . grouped += " im_grouped_fwd_end" ) ) } else ! s && n || ( delete o . grouped , m && s && s . grouped && s . fwdFromID && ( s . grouped += " im_grouped_fwd_end" ) ) ; p || l == ( s && s . grouped ) || ( p = ! 0 ) , s = o , i = a } return p || r == ( s && s . grouped ) || ( p = ! 0 ) , p } function be ( e , t , n ) { var a , i = ! 1 ; if ( e . media ) switch ( e . media . _ ) { case "messageMediaPhoto" : a = d . choosePhotoSize ( e . media . photo , t , n ) ; break ; case "messageMediaDocument" : a = e . media . document . thumb , e . media . document . sticker && ( i = ! 0 ) } if ( a && "photoSizeEmpty" != a . _ ) { var o = calcImageInBox ( a . w , a . h , t , n , ! 0 ) , s = { width : o . w , height : o . h , location : a . location , size : a . size } ; return i && ( s . location . sticker = ! 0 ) , s } return ! 1 } function we ( e ) { return ! ( ! e || We && ! ( e > We ) ) && ( k . set ( { max _seen _msg : e } ) , void _ . invokeApi ( "messages.receivedMessages" , { max _id : e } ) ) } function ke ( e , n ) { n = n || { } ; var a , i , o = de ( e ) , s = { } , c = ! 1 , d = w . getNotifySettings ( ) ; if ( e . fwdFromID && n . fwd _count ) c = Ke ( n . fwd _count ) ; else if ( e . message ) c = d . nopreview ? x ( "conversation_message_sent" ) : b . wrapPlainText ( e . message ) ; else if ( e . media ) { var u = ! 1 ; switch ( e . media . _ ) { case "messageMediaPhoto" : c = x ( "conversation_media_photo_raw" ) , u = "🖼" ; break ; case "messageMediaDocument" : switch ( e . media . document . type ) { case "gif" : c = x ( "conversation_media_gif_raw" ) , u = "🎬" ; break ; case "sticker" : c = x ( "conversation_media_sticker" ) ; var p = e . media . document . stickerEmojiRaw ; void 0 !== p && ( c = b . wrapPlainText ( p ) + " " + c ) ; break ; case "video" : c = x ( "conversation_media_video_raw" ) , u = "📹" ; break ; case "voice" : case "audio" : c = x ( "conversation_media_audio_raw" ) ; break ; default : e . media . document . file _name ? c = b . wrapPlainText ( "📎 " + e . media . document . file _name ) : ( c = x ( "conversation_media_document_raw" ) , u = "📎" ) } break ; case "messageMediaGeo" : case "messageMediaVenue" : c = x ( "conversation_media_location_raw" ) , u = "📍" ; break ; case "messageMediaContact" : c = x ( "conversation_media_contact_raw" ) ; break ; case "messageMediaGame" : c = b . wrapPlainText ( "🎮 " + e . media . game . title ) ; break ; default : c = x ( "conversation_media_attachment_raw" ) } u !== ! 1 && e . media . caption && ( c = b . wrapPlainText ( u + " " + e . media . caption ) ) } else if ( "messageService" == e . _ ) switch ( e . action . _ ) { case "messageActionChatCreate" : c = x ( "conversation_group_created_raw" ) ; break ; case "messageActionChatEditTitle" : c = x ( "conversation_group_renamed_raw" ) ; break ; case "messageActionChatEditPhoto" : c = x ( "conversation_group_photo_updated_raw" ) ; break ; case "messageActionChatDeletePhoto" : c = x ( "conversation_group_photo_removed_raw" ) ; break ; case "messageActionChatAddUser" : case "messageActionChatAddUsers" : c = x ( "conversation_invited_user_message_raw" ) ; break ; case "messageActionChatReturn" : c = x ( "conversation_returned_to_group_raw" ) ; break ; case "messageActionChatJoined" : c = x ( "conversation_joined_group_raw" ) ; break ; case "messageActionChatDeleteUser" : c = x ( "conversation_kicked_user_message_raw" ) ; break ; case "messageActionChatLeave" : c = x ( "conversation_left_group_raw" ) ; break ; case "messageActionChatJoinedByLink" : c = x ( "conversation_joined_by_link_raw" ) ; break ; case "messageActionChannelCreate" : c = x ( "conversation_created_channel_raw" ) ; break ; case "messageActionChannelEditTitle" : c = x ( "conversation_changed_channel_name_raw" ) ; break ; case "messageActionChannelEditPhoto" : c = x ( "conversation_changed_channel_photo_raw" ) ; break ; case "messageActionChannelDeletePhoto" : c = x ( "conversation_removed_channel_photo_raw" ) ; break ; case "messageActionPinMessage" : c = x ( "conversation_pinned_message_raw" ) ; break ; case "messageActionGameScore" : c = Ye ( e . action . score ) } if ( o > 0 ) { var m = r . getUser ( e . fr
e . put ( "partials/desktop/channel_edit_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="updateChannel()">\n\n <h4 my-i18n="channel_edit_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="channel_edit_name"></label>\n <input class="md-input" my-focused type="text" ng-model="channel.title" />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="channel_edit_about"></label>\n <input class="md-input" type="text" ng-model="channel.about" />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: channel.updating}" ng-click="updateChannel()" ng-bind="channel.updating ? \'channel_edit_submit_active\' : \'channel_edit_submit\' | i18n" ng-disabled="channel.updating"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/channel_modal.html" , '<div class="chat_modal_wrap md_modal_wrap" my-modal-position>\n\n <div class="md_modal_head">\n <div class="md_modal_title_wrap">\n <div class="md_modal_actions_wrap clearfix">\n <a class="md_modal_action md_modal_action_close" ng-click="$close()" my-i18n="modal_close"></a>\n <a class="md_modal_action" ng-if="hasRights(\'edit_title\')" ng-click="editChannel()" my-i18n="modal_edit"></a>\n </div>\n <div class="md_modal_title" ng-switch="isMegagroup">\n <span ng-switch-when="true" my-i18n="group_modal_info"></span>\n <span ng-switch-default my-i18n="channel_modal_info"></span>\n </div>\n </div>\n\n <div class="peer_modal_profile_wrap clearfix">\n <div class="peer_modal_photo_wrap pull-left" ng-switch="photo.updating">\n <div ng-switch-when="true" class="peer_modal_photo md_photo_loading loading_dots">\n <i></i><i></i><i></i>\n </div>\n <a ng-switch-default ng-click="openPhoto(chatFull.chat_photo.id, {p: -chatFull.chat.id})" class="peer_modal_photo" my-peer-photolink="::-chatFull.chat.id" img-class="peer_modal_photo" no-open="true" watch="true" ng-class="{disabled: !chatFull.chat.photo.photo_small}" ng-disabled="!chatFull.chat.photo.photo_small"></a>\n </div>\n <div class="peer_modal_profile">\n <div class="peer_modal_profile_name" my-peer-link="-chatFull.chat.id" verified="true"></div>\n <div class="peer_modal_profile_description" ng-if="chatFull.participants_count > 0">\n <ng-pluralize count="chatFull.participants_count"\n when="group_modal_pluralize_participants">\n </ng-pluralize>\n </div>\n </div>\n </div>\n </div>\n\n <div class="md_modal_split_actions_wrap">\n <div class="md_modal_split_actions" ng-switch="hasRights(\'edit_photo\')">\n <div ng-switch-when="true" class="md_modal_split_action">\n <input my-file-upload type="file" multiple="false" class="im_attach_input" size="120" multiple="false" accept="image/x-png, image/png, image/gif, image/jpeg" title="{{\'group_modal_update_photo\' | i18n}}" />\n <i class="md_modal_split_action_camera"></i>\n </div>\n <a ng-switch-default class="md_modal_split_action" href="" ng-click="goToHistory()" title="{{\'user_modal_send_message\' | i18n } } ">\n <i class=" md _modal _split _action _msg "></i>\n </a>\n </div>\n </div>\n\n <div class=" md _modal _body ">\n\n <div class=" md _modal _sections clearfix ">\n\n <div class=" md _modal _iconed _section _wrap md _modal _iconed _section _number " ng-if=" chatFull . rAbout || chatFull . chat . username || chatFull . chat . pFlags . creator ">\n <i class=" md _modal _section _icon md _modal _section _icon _about "></i>\n\n <div class=" md _modal _section _param _wrap " ng-if=" chatFull . about . length > 0 ">\n <div class=" md _modal _section _param _value " > \ n < span ng - bind - htm
e . put ( "partials/desktop/dialog.html" , '<a class="im_dialog" ng-mousedown="dialogSelect(dialogMessage.peerString, dialogMessage.unreadCount == -1 && dialogMessage.mid)">\n\n <div class="im_dialog_meta pull-right text-right">\n <div class="im_dialog_date" ng-bind="dialogMessage.dateText"></div>\n <span\n class="im_dialog_badge badge ng-hide"\n ng-show="dialogMessage.unreadCount > 0 && !dialogMessage.pFlags.out"\n ng-bind="dialogMessage.unreadCount"\n my-peer-muted="dialogMessage.peerID" muted-class="im_dialog_badge_muted"\n ></span>\n <i\n class="im_dialog_unread ng-hide"\n ng-show="dialogMessage.pFlags.out && dialogMessage.pFlags.unread"\n ></i>\n </div>\n\n <div class="im_dialog_photo pull-left" my-peer-photolink="::dialogMessage.peerID" img-class="im_dialog_photo" watch="true"></div>\n\n <div class="im_dialog_message_wrap">\n\n <div class="im_dialog_peer">\n <span my-peer-link="dialogMessage.peerID" verified="true"></span>\n </div>\n\n <div ng-switch="dialogMessage.typing ? \'typing\' : (!dialogMessage.unreadCount && dialogMessage.draft ? \'draft\' : (dialogMessage.deleted ? \'deleted\' : \'message\'))">\n\n <div ng-switch-when="typing" class="im_dialog_message">\n <span class="im_short_message_service" my-i18n="im_conversation_group_typing">\n <my-i18n-param name="name"><span my-peer-link="dialogMessage.typing" short="true" class="im_dialog_chat_from_wrap"></span></my-i18n-param><my-i18n-param name="dots"><span my-loading-dots></span></my-i18n-param>\n </span>\n </div>\n\n <div ng-switch-when="draft" class="im_dialog_message">\n <span class="im_dialog_chat_from_wrap">\n <span class="im_dialog_draft_from" my-i18n="conversation_draft"></span>\n </span>\n <span class="im_short_message_text" ng-bind-html="dialogMessage.draft.richMessage"></span>\n </div>\n\n <div ng-switch-when="deleted" class="im_dialog_message">\n <span class="im_short_message_text"> </span>\n </div>\n\n <div ng-switch-when="message" class="im_dialog_message">\n <span ng-switch="dialogMessage.peerID > 0 || dialogMessage.fromID < 0">\n <span ng-switch-when="true">\n <span class="im_dialog_chat_from_wrap" ng-if="dialogMessage.pFlags.out && dialogMessage.fromID > 0">\n <span\n class="im_dialog_chat_from"\n my-i18n="conversation_you"\n ></span><span ng-if="dialogMessage.message.length > 0 || !!dialogMessage.media">:</span>\n </span>\n </span>\n <span ng-switch-default>\n <span class="im_dialog_chat_from_wrap" ng-switch="dialogMessage.pFlags.out && dialogMessage._ != \'messageService\'">\n <span\n ng-switch-when="false"\n class="im_dialog_chat_from"\n my-peer-link="dialogMessage.from_id" short="true" peer-watch="true"\n ></span><span\n ng-switch-when="true"\n class="im_dialog_chat_from"\n my-i18n="conversation_you"\n ></span><span ng-if="dialogMessage.message.length || dialogMessage.media">:</span>\n </span>\n </span>\n </span>\n\n <span my-short-message="dialogMessage"></span>\n </div>\n </div>\n\n </div>\n\n</a>\n' ) , e . put ( "partials/desktop/document_modal.html" , '<div class="modal_close_wrap" ng-click="$close()">\n <div class="modal_close"></div>\n</div>\n\n<div class="media_modal_bottom_panel_wrap">\n <div class="media_modal_bottom_panel">\n <div class="media_modal_bottom_actions pull-right">\n <a class="media_modal_action_btn" ng-click="download()" title="{{\'media_modal_download\' | i18n}}">\n <i class="media_modal_action_btn_download"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="forward()" title="{{\'media_modal_forward\' | i18n } } ">\n <i class=" media _modal _action _btn _forward "></i>\n </a>\n <a class=" media _modal _action _btn " ng-if=" m
e . put ( "partials/desktop/import_contact_modal.html" , '<div class="md_simple_modal_wrap" my-modal-position>\n\n <div class="md_simple_modal_body">\n\n <form class="modal_simple_form" ng-submit="doImport()" name="importContactForm">\n\n <h4 my-i18n="contact_import_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input ng-class="{\'md-input-error\': importContactForm.phone.$invalid && importContactForm.phone.$touched}" my-labeled-input>\n <label class="md-input-label" ng-switch="importContactForm.phone.$invalid && importContactForm.phone.$touched">\n <span ng-switch-when="true" my-i18n="login_incorrect_number"></span>\n <span ng-switch-default my-i18n="contact_import_modal_phone"></span>\n </label>\n <input class="md-input" my-focused type="tel" ng-model="importContact.phone" ng-pattern="/^[-\\+\\(\\)\\d\\s]{7,32}$/" my-submit-on-enter name="phone" />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_edit_modal_first_name"></label>\n <input class="md-input" type="text" ng-model="importContact.first_name" my-submit-on-enter />\n </div>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_edit_modal_last_name"></label>\n <input class="md-input" type="text" ng-model="importContact.last_name" my-submit-on-enter />\n </div>\n\n </form>\n\n </div>\n\n <div class="md_simple_modal_footer">\n <button class="btn btn-md" ng-click="$dismiss()" my-i18n="modal_cancel"></button>\n <button class="btn btn-md btn-md-primary" ng-class="{disabled: progress.enabled}" ng-click="doImport()" ng-bind="progress.enabled ? \'contact_import_modal_submit_active\' : \'contact_import_modal_submit\' | i18n" ng-disabled="progress.enabled"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/inactive.html" , '<div class="inactive_page_wrap">\n <div class="tg_head_split inactive_head"></div>\n <div class="im_page_wrap">\n <div class="inactive_page_content" my-vertical-position="0.35">\n <a class="inactive_image" ng-click="reload()"></a>\n <h3 class="inactive_title" my-i18n="inactive_title"></h3>\n <div class="inactive_description" my-i18n="inactive_description_md"></div>\n <div class="inactive_actions">\n <button class="btn btn-lg btn-md btn-md-primary" ng-click="reload()" my-i18n="inactive_reload_btn" my-focused></button>\n </div>\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/inline_results.html" , '<a ng-if="botResults.switch_pm !== undefined" class="inline_switch_pm" ng-bind-html="botResults.switch_pm.rText" data-inlineid="_switch_pm_{{botResults.switch_pm.start_param}}"></a>\n\n<ul class="inline_results_wrap composer_dropdown">\n <li class="inline_result_wrap" ng-class="\'inline_result_\' + result.type" ng-repeat="result in botResults.results track by result.qID" ng-switch="result.type">\n\n <a ng-switch-when="gif" class="img_gif_with_progress_wrap" data-inlineid="{{result.qID}}" ng-style="::{width: result.thumbW, height: result.thumbH}" ng-switch="result._">\n <div class="inline_result_ind"></div>\n <div ng-switch-when="botInlineMediaResult" ng-switch="result.document.url !== undefined" class="inline_result_gif_mtproto">\n <div ng-switch-when="true" ng-switch="result.document.mime_type == \'video/mp4\' ">\n <video ng-switch-when=" true " width=" { { result . thumbW } } " height=" { { result . thumbH } } " loop autoplay class=" img _gif _video ">\n <source ng-src=" { { result . document . url } } " type=" video / mp4 ">\n </video>\n <img ng-switch-default class=" img _gif _image " ng-src=" { { result . document . url } } " width=" { { result . thumbW } } " height=" { { result . thumbH } } " />\n </div>\n <div ng-switch-default class=" img _gif _image _wrap ">\n <img class=" img _gif _thumb " my-load-thumb thumb=" result . document . thumb " width=" { { result . thumbW } } " height=" { { result . thumbH } } " />\n </div>\n </div>\n <div ng-switch-default ng-switch=" result . content
e . put ( "partials/desktop/message_attach_photo.html" , '<a class="im_message_photo_thumb" ng-click="openPhoto(media.photo.id, {m: messageId})" ng-style="::{width: media.photo.thumb.width + \'px\'}" ng-mouseover="preloadPhoto(media.photo.id)">\n <img\n class="im_message_photo_thumb"\n my-load-thumb\n thumb="media.photo.thumb"\n alt="[{{::\'conversation_media_photo\' | i18n}}]"\n />\n</a>\n<div ng-if="::media.rCaption" class="im_message_photo_caption" ng-bind-html="::media.rCaption"></div>' ) , e . put ( "partials/desktop/message_attach_venue.html" , '<div class="im_message_venue clearfix">\n\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_venue_geopoint_wrap">\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="100"\n height="100"\n alt="[{{::\'conversation_media_location\' | i18n}} {{::media.mapUrl}}]"\n />\n </a>\n\n <div class="im_message_venue_info">\n <div class="im_message_venue_title_wrap">\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_document_name" ng-bind="::media.title"></a>\n </div>\n <div class="im_message_venue_address" ng-bind="::media.address"></div>\n </div>\n\n</div>\n' ) , e . put ( "partials/desktop/message_attach_webpage.html" , '<div ng-show="media.webpage._ == \'webPage\'" class="im_message_webpage_wrap clearfix" ng-switch="media.webpage.type">\n <div ng-switch-when="photo" class="im_message_webpage_photo">\n <div class="im_message_webpage_title">\n <a href="{{media.webpage.url}}" target="_blank" rel="noopener noreferrer" ng-bind-html="media.webpage.rTitle"></a>\n </div>\n <div ng-if="media.webpage.description.length" class="im_message_webpage_description" ng-bind-html="media.webpage.rDescription"></div>\n <a class="im_message_photo_thumb" ng-click="openPhoto(media.webpage.photo.id, {w: media.webpage.id, m: messageId})" ng-style="::{width: media.webpage.photo.thumb.width + \'px\'}" ng-mouseover="preloadPhoto(media.webpage.photo.id)">\n <img\n class="im_message_photo_thumb"\n my-load-thumb\n thumb="media.webpage.photo.thumb"\n alt="[{{::\'conversation_media_photo\' | i18n}}]"\n />\n </a>\n </div>\n <div ng-switch-when="video" class="im_message_webpage_video">\n <div class="im_message_webpage_site" ng-bind="media.webpage.site_name || media.webpage.display_url"></div>\n <div class="im_message_webpage_title">\n <a ng-click="openEmbed($event)" href="{{media.webpage.url}}" target="_blank" rel="noopener noreferrer" ng-bind-html="media.webpage.rTitle"></a>\n </div>\n <div ng-if="media.webpage.description.length" class="im_message_webpage_description" ng-bind-html="media.webpage.rDescription"></div>\n <a class="im_message_video_thumb" ng-click="openEmbed($event)" ng-href="{{media.webpage.url}}" target="_blank" rel="noopener noreferrer" ng-style="::{width: video.thumb.width + \'px\'}">\n <span ng-if="media.webpage.duration > 0" class="im_message_video_duration nocopy" data-content="{{::media.webpage.duration | duration}}"></span>\n <i class="icon icon-videoplay"></i>\n <img\n class="im_message_video_thumb"\n my-load-thumb\n thumb="media.webpage.photo.thumb"\n alt="[{{::\'conversation_media_video\' | i18n } } ] "\n />\n </a>\n </div>\n\n <div ng-switch-when=" document " class=" im _message _webpage _document ">\n <div my-message-document=" media . webpage " message-id=" messageId "></div>\n </div>\n\n <div ng-switch-when=" gif " class=" im _message _webpage _gif ">\n <div class=" im _message _webpage _title ">\n <a href=" { { media . webpage . url } } " target=" _blank " rel=" noopener noreferrer " ng-bind-html=" media . webpage . rTitle "></a>\n </div>\n <div my-message-document=" media . webpage " message-id=" messageId "></div>\n </div>\n\n <div ng-switch-default class=" im _message _webpage _article ">\n <a ng-if=" media . webpage . photo " href=" { { media . webpage . url } } " target=" _blank " rel=" noopener noreferrer " class=" im _message _webpage _article _ph
e . put ( "partials/desktop/short_message.html" , '<span class="im_short_message_media" ng-if="message.media" ng-switch="message.media._">\n <span ng-switch-when="messageMediaPhoto" my-i18n="conversation_media_photo"></span>\n <span ng-switch-when="messageMediaDocument" ng-switch="message.media.document.type || false">\n <span ng-switch-when="sticker">\n <span ng-bind-html="message.media.document.stickerEmoji"></span>\n <my-i18n msgid="conversation_media_sticker"></my-i18n>\n </span>\n <span ng-switch-when="gif" my-i18n="conversation_media_gif"></span>\n <span ng-switch-when="audio" my-i18n="conversation_media_audio"></span>\n <span ng-switch-when="voice" my-i18n="conversation_media_audio"></span>\n <span ng-switch-when="video" my-i18n="conversation_media_video"></span>\n <span ng-switch-default ng-bind="message.media.document.file_name"></span>\n </span>\n <span ng-switch-when="messageMediaGeo" my-i18n="conversation_media_location"></span>\n <span ng-switch-when="messageMediaVenue" my-i18n="conversation_media_location"></span>\n <span ng-switch-when="messageMediaContact" my-i18n="conversation_media_contact"></span>\n <span ng-switch-when="messageMediaGame">\n <span my-emoji-image="🎮"></span>\n <span ng-bind-html="message.media.game.rTitle"></span>\n </span>\n</span><span class="im_short_message_service" ng-if="message._ == \'messageService\'" ng-switch="message.action._">\n <span ng-switch-when="messageActionChatCreate" my-i18n="conversation_group_created"></span>\n <span ng-switch-when="messageActionChatEditTitle" my-i18n="conversation_group_renamed"></span>\n <span ng-switch-when="messageActionChatEditPhoto" my-i18n="conversation_group_photo_updated"></span>\n <span ng-switch-when="messageActionChatDeletePhoto" my-i18n="conversation_group_photo_removed"></span>\n <span ng-switch-when="messageActionChatJoinedByLink" my-i18n="conversation_joined_by_link"></span>\n <span ng-switch-when="messageActionChatReturn" my-i18n="conversation_returned_to_group"></span>\n <span ng-switch-when="messageActionChatJoined" my-i18n="conversation_joined_group"></span>\n <span ng-switch-when="messageActionChatAddUser" my-i18n="conversation_invited_user">\n <my-i18n-param name="user"><span my-peer-link="message.action.user_id"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatAddUsers" my-i18n="">\n <ng-pluralize count="message.action.users.length"\n when="conversation_invited_users">\n </ng-pluralize>\n </span>\n <span ng-switch-when="messageActionChatLeave" my-i18n="conversation_left_group"></span>\n <span ng-switch-when="messageActionChatDeleteUser" my-i18n="conversation_kicked_user">\n <my-i18n-param name="user"><span my-peer-link="message.action.user_id"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatMigrateTo" my-i18n="conversation_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelMigrateFrom" my-i18n="conversation_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelCreate" my-i18n="conversation_created_channel"></span>\n <span ng-switch-when="messageActionChannelEditTitle" my-i18n="conversation_changed_channel_name"></span>\n <span ng-switch-when="messageActionChannelEditPhoto" my-i18n="conversation_changed_channel_photo"></span>\n <span ng-switch-when="messageActionPinMessage" my-i18n="conversation_pinned_message"></span>\n <span ng-switch-when="messageActionGameScore">\n <ng-pluralize count="message.action.score"\n when="conversation_scored_X"></ng-pluralize>\n </my-i18n-param>\n </span>\n\n</span><span class="im_short_message_text" ng-if="message.message.length && (!message.media || message.media._ == \'messageMediaWebPage\')" ng-bind-html="message.richMessage"></span>' ) , e . put ( "partials/desktop/slider.html" , '<div class="tg_slider_wrap">\n\t<div class="tg_slider_thumb"></div>\n\t<div class="tg_slider_track">\n\t\t<div class="tg_slider_track_fill"></div>\n\t</div>\n</div>' ) , e . put ( " partials / desktop / stickerset
e . put ( "partials/mobile/channel_modal.html" , '<div class="chat_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-toggle-wrap dropdown" dropdown ng-if="chatFull.chat.pFlags.creator || !chatFull.chat.pFlags.left && !chatFull.chat.pFlags.kicked">\n <a class="dropdown-toggle navbar-toggle" dropdown-toggle>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n </a>\n <ul class="dropdown-menu">\n <li ng-if="hasRights(\'edit_photo\')">\n <a ng-click="deletePhoto()" my-i18n="group_modal_menu_delete_photo"></a>\n </li>\n <li ng-if="hasRights(\'edit_title\')">\n <a ng-click="editChannel()" my-i18n="modal_edit"></a>\n </li>\n <li ng-if="chatFull.chat.pFlags.creator">\n <a ng-click="deleteChannel()" my-i18n="channel_modal_delete_channel"></a>\n </li>\n <li ng-if="!chatFull.chat.pFlags.creator && !chatFull.chat.pFlags.left && !chatFull.chat.pFlags.kicked">\n <a ng-click="leaveChannel()" my-i18n="group_modal_menu_leave"></a>\n </li>\n </ul>\n </div>\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li>\n <a ng-click="$close()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 my-i18n="channel_modal_info"></h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body mobile_modal_body">\n\n <div class="mobile_user_modal_photo_profile_wrap">\n\n <a ng-click="openPhoto(chatFull.chat_photo.id, {p: -chatFull.chat.id})" class="mobile_user_modal_image_wrap pull-left" my-peer-photolink="::-chatFull.chat.id" img-class="mobile_user_modal_image mobile_chat_modal_image" no-open="true" watch="true" ng-class="{disabled: !chatFull.chat.photo.photo_small}" ng-disabled="!chatFull.chat.photo.photo_small"></a>\n\n <div class="mobile_user_modal_info_wrap clearfix">\n <h4 class="mobile_user_modal_header" my-peer-link="-chatFull.chat.id" verified="true"></h4>\n <p class="mobile_user_modal_status" ng-if="chatFull.participants_count > 0">\n <ng-pluralize count="chatFull.participants_count"\n when="group_modal_pluralize_participants">\n </ng-pluralize>\n </p>\n </div>\n\n </div>\n\n <div class="mobile_modal_section" ng-if="chatFull.rAbout">\n <h4 class="mobile_modal_section_header" my-i18n="channel_modal_description"></h4>\n <div class="mobile_modal_section_value" ng-bind-html="chatFull.rAbout"></div>\n </div>\n\n <div class="mobile_modal_section" ng-if="chatFull.chat.username || chatFull.chat.pFlags.creator">\n <h4 class="mobile_modal_section_header" my-i18n="channel_modal_share_link"></h4>\n <div class="mobile_modal_section_value" ng-switch="chatFull.chat.username.length > 0">\n <a ng-switch-when="true" class="settings_modal_username_link" ng-click="shareLink($event)" ng-bind="\'https://t.me/\' + chatFull.chat.username" ng-href="https://t.me/{{chatFull.chat.username}}" target="_blank"></a>\n <a ng-switch-default ng-click="shareLink($event)" ng-bind="chatFull.exported_invite.link" ng-href="{{chatFull.exported_invite.link}}" target="_blank"></a>\n </div>\n </div>\n\n <div class="mobile_modal_action_wrap" ng-if="hasRights(\'invite\' ) ">\n <a class=" mobile _modal _action " ng-click=" inviteToChannel ( ) " my-i18n=" channel _modal _add _member "></a>\n </div>\n\n <div class=" mobile _modal _action _wrap " ng-if=" chatFull . chat . pFlags . left ">\n <a class=" mobile _modal _action " ng-click=" joinChannel ( ) " my-i18n=" channel _modal _join " > < / a > \ n < / d i v > \ n < d i v c l a s
e . put ( "partials/mobile/im.html" , '<div my-head></div>\n\n<div class="im_page_wrap" ng-class="{im_page_peer_not_selected: !curDialog.peer}">\n\n <div class="im_page_split clearfix">\n\n <div ng-controller="AppImDialogsController" my-dialogs class="im_dialogs_col_wrap" ng-class="search.query.length > 0 ? \'im_dialogs_col_search\' : \'\'">\n <div class="im_dialogs_panel">\n <div class="im_dialogs_search">\n <input class="form-control im_dialogs_search_field no_outline" type="search" placeholder="{{\'modal_search\' | i18n}}" ng-model="search.query" autocomplete="off" />\n <a class="im_dialogs_search_clear tg_search_clear" ng-click="searchClear()" ng-show="search.query.length">\n <i class="icon icon-search-clear"></i>\n </a>\n </div>\n </div>\n\n <div my-dialogs-list-mobile class="im_dialogs_col im_dialogs_scrollable_wrap mobile_scrollable_wrap">\n\n <div class="im_dialogs_empty_wrap" ng-if="isEmpty.contacts" my-vertical-position="0.4">\n <h3 class="im_dialogs_empty_header" my-i18n="im_no_contacts"></h3>\n <p class="im_dialogs_empty_lead" my-i18n="im_get_started_long"></p>\n <button type="button" class="btn btn-primary btn-block im_dialogs_add_contact" ng-click="importContact()" my-i18n="im_add_contact"></button>\n <button ng-if="phonebookAvailable" type="button" class="btn btn-primary btn-block im_dialogs_import_phonebook" ng-click="importPhonebook()" my-i18n="im_import_phonebook"></button>\n </div>\n\n <ul class="nav nav-pills nav-stacked">\n <li class="im_dialog_wrap" my-dialog dialog-message="dialogMessage" ng-repeat="dialogMessage in dialogs track by dialogMessage.peerID" ng-class="{active: curDialog.peerID == dialogMessage.peerID}"></li>\n </ul>\n\n <div class="im_dialogs_contacts_wrap" ng-show="contacts.length > 0">\n <h5 my-i18n="im_contacts_title"></h5>\n <ul class="nav nav-pills nav-stacked">\n <li class="im_dialog_wrap" ng-repeat="contact in contacts | orderBy:\'user.sortName\' track by contact.userID" ng-class="{active: curDialog.peerID == contact.userID}">\n <a class="im_dialog" ng-mousedown="dialogSelect(contact.peerString)">\n <div class="im_dialog_photo pull-left" my-peer-photolink="contact.userID" img-class="im_dialog_photo" watch="true"></div>\n <div class="im_dialog_message_wrap">\n <div class="im_dialog_peer">\n <span class="im_dialog_user" my-peer-link="contact.userID" verified="true"></span>\n </div>\n <div class="im_dialog_message">\n <span class="im_dialog_message_text" my-user-status="::contact.userID"></span>\n </div>\n </div>\n </a>\n </li>\n </ul>\n </div>\n\n <div class="im_dialogs_contacts_wrap" ng-show="foundPeers.length > 0">\n <h5 my-i18n="im_found_title"></h5>\n <ul class="nav nav-pills nav-stacked">\n <li class="im_dialog_wrap" ng-repeat="foundPeer in foundPeers track by foundPeer.id" ng-class="{active: curDialog.peerID == foundPeer.id}">\n <a class="im_dialog" ng-mousedown="dialogSelect(foundPeer.peerString)">\n <div class="im_dialog_photo pull-left" my-peer-photolink="foundPeer.id" img-class="im_dialog_photo" watch="true"></div>\n <div class="im_dialog_message_wrap">\n <div class="im_dialog_peer">\n <span class="im_dialog_user" my-peer-link="foundPeer.id" verified="true"></span>\n </div>\n <div class="im_dialog_message">\n <span class="im_dialog_message_text" ng-bind="::\'@\' + foundPeer . username "></span>\n </div>\n </div>\n </a>\n </li>\n </ul>\n </div>\n\n <div class=" im _dialogs _messages _wrap " ng-show=" foundMessages . length > 0 ">\n <h5 my-i18n=" im _messages " > <
e . put ( "partials/mobile/message_attach_geo.html" , '<a ng-href="{{::media.mapUrl}}" target="_blank" class="im_message_geopoint">\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="200"\n height="100"\n />\n</a>' ) , e . put ( "partials/mobile/message_attach_pending.html" , '<div class="im_message_document im_message_upload_file" ng-class="::\'im_message_upload_\' + media.type">\n <div class="im_message_file_button im_message_file_button_upload">\n <i class="im_message_file_button_icon"></i>\n </div>\n <div class="im_message_document_info">\n <div class="im_message_document_name_wrap">\n <span class="im_message_document_name" ng-bind="::media.file_name"></span>\n <span class="im_message_document_size" ng-if="media.progress" ng-bind="media.progress | formatSizeProgress"></span>\n </div>\n <div class="clearfix im_message_cancelable_progress_wrap">\n <a class="im_message_media_progress_cancel pull-right" ng-click="media.progress.cancel()" my-i18n="modal_cancel"></a>\n <div class="im_message_download_progress_wrap">\n <div class="progress tg_down_progress">\n <div class="progress-bar progress-bar-success" role="progressbar" ng-style="{width: media.progress.percent + \'%\'}"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n' ) , e . put ( "partials/mobile/message_attach_photo.html" , '<a class="im_message_photo_thumb" ng-click="openPhoto(media.photo.id, {m: messageId})" ng-style="::{width: media.photo.thumb.width + \'px\'}" ng-mouseover="preloadPhoto(media.photo.id)">\n <img\n class="im_message_photo_thumb"\n my-load-thumb\n thumb="media.photo.thumb"\n />\n</a>\n<div ng-if="::media.rCaption" class="im_message_photo_caption" ng-bind-html="::media.rCaption"></div>' ) , e . put ( "partials/mobile/message_attach_venue.html" , '<div class="im_message_venue clearfix">\n\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_venue_geopoint_wrap">\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="100"\n height="100"\n alt="[{{::\'conversation_media_location\' | i18n}} {{::media.mapUrl}}]"\n />\n </a>\n\n <div class="im_message_venue_info">\n <div class="im_message_venue_title_wrap">\n <a ng-href="{{::media.mapUrl}}" target="_blank" rel="noopener noreferrer" class="im_message_document_name" ng-bind="::media.title"></a>\n </div>\n <div class="im_message_venue_address" ng-bind="::media.address"></div>\n </div>\n\n</div>\n' ) , e . put ( "partials/mobile/message_attach_webpage.html" , '<div ng-show="webpage._ == \'webPage\'" class="im_message_webpage_wrap clearfix" ng-switch="webpage.type">\n <div ng-switch-when="photo" class="im_message_webpage_photo">\n <div class="im_message_webpage_site" ng-bind="webpage.site_name || webpage.display_url"></div>\n <div class="im_message_webpage_title">\n <a href="{{webpage.url}}" target="_blank" rel="noopener noreferrer" ng-bind-html="webpage.rTitle"></a>\n </div>\n <div ng-if="webpage.description.length" class="im_message_webpage_description" ng-bind-html="webpage.rDescription"></div>\n <a class="im_message_photo_thumb" ng-click="openPhoto(webpage.photo.id, {w: webpage.id, m: messageId})" ng-style="::{width: webpage.photo.thumb.width + \'px\' } " ng-mouseover=" preloadPhoto ( webpage . photo . id ) ">\n <img\n class=" im _message _photo _thumb "\n my-load-thumb\n thumb=" webpage . photo . thumb "\n />\n </a>\n </div>\n <div ng-switch-when=" video " class=" im _message _webpage _video ">\n <div class=" im _message _webpage _site " ng-bind=" webpage . site _name || webpage . display _url "></div>\n <div class=" im _message _webpage _title ">\n <a ng-click=" openEmbed ( $event ) " href=" { { webpage . url } } " target=" _blank " rel=" noopener noreferrer " ng-bind-html=" webpage . rTitle "></a>\n </div>\n <div ng-if=" webpage . description . length " class=" im _message _webpage _description " ng-bind-html=" webpage . rDescription "></div>\n <a class=" im _message _video _thumb " ng-click=" openEmb
e . put ( "partials/mobile/stickerset_modal.html" , '<div class="stickerset_modal_wrap">\n\n <div class="tg_page_head tg_modal_head">\n <div class="navbar navbar-static-top navbar-inverse">\n <div class="container">\n\n <div class="navbar-header">\n\n <ul class="nav navbar-nav navbar-quick-nav">\n <li class="navbar-quick-right" ng-if="stickersetLoaded" ng-switch="stickersetInstalled">\n <a ng-switch-when="true" my-i18n="stickerset_modal_uninstall" ng-click="toggleInstalled(false)"></a>\n <a ng-switch-when="false" my-i18n="stickerset_modal_install" ng-click="toggleInstalled(true)"></a>\n </li>\n <li>\n <a ng-click="$dismiss()" class="navbar-quick-media-back">\n <i class="icon icon-back"></i>\n <div class="navbar-quick-back-title">\n <h4 ng-switch="!stickersetLoaded">\n <span ng-switch-when="true" my-i18n="stickerset_modal_title_loading"></span>\n <span ng-switch-default ng-bind="stickerset.title"></span>\n </h4>\n </div>\n </a>\n </li>\n </ul>\n\n </div>\n\n </div>\n </div>\n </div>\n\n <div class="modal-body">\n\n <div my-stickers-list class="stickerset_modal_col">\n\n <div class="stickerset_wrap nano" my-infinite-scroller>\n <div class="stickerset_scrollable_wrap nano-content" ng-switch="!stickersetLoaded">\n\n <div ng-switch-when="true" class="stickerset_modal_loading" my-vertical-position="0.2" padding="true" my-i18n="stickerset_modal_loading">\n <my-i18n-param name="dots">\n <span my-loading-dots></span>\n </my-i18n-param>\n </div>\n\n <div ng-switch-default class="stickerset_modal_stickers_list clearfix">\n <div class="stickerset_modal_sticker_wrap" ng-repeat="sticker in documents | limitTo: slice.limit">\n <div class="stickerset_modal_sticker" my-load-sticker document="sticker" thumb="true"></div>\n <div class="stickerset_modal_sticker_alt" ng-bind-html="sticker.stickerEmoji"></div>\n </div>\n </div>\n\n </div>\n </div>\n\n </div>\n\n </div>\n\n</div>' ) , e . put ( "partials/mobile/user_modal.html" , ' < div class = "mobile_user_modal_wrap" > \ n \ n < div class = "tg_page_head tg_modal_head" > \ n < div class = "navbar navbar-static-top navbar-inverse" > \ n < div class = "container" > \ n \ n < div class = "navbar-toggle-wrap dropdown" dropdown > \ n < a class = "dropdown-toggle navbar-toggle" dropdown - toggle > \ n < span class = "icon-bar" > < / s p a n > \ n < s p a n c l a s s = " i c o n - b a r " > < / s p a n > \ n < s p a n c l a s s = " i c o n - b a r " > < / s p a n > \ n < / a > \ n < u l c l a s s = " d r o p d o w n - m e n u " > \ n < l i n g - i f = " u s e r . p F l a g s . c o n t a c t " > \ n < a n g - c l i c k = " i m p o r t C o n t a c t ( t r u e ) " m y - i 1 8 n = " u s e r _ m o d a l _ e d i t _ c o n t a c t " > < / a > \ n < / l i > \ n < l i n g - i f = " u s e r . p F l a g s . c o n t a c t " > \ n < a n g - c l i c k = " d e l e t e C o n t a c t ( ) " m y - i 1 8 n = " u s e r _ m o d a l _ d e l e t e _ c o n t a c t " > < / a > \ n < / l i > \ n < l i n g - i f = " u s e r . p h o n e . l e n g t h > 0 & a m p ; & a m p ; ! u s e r . p F l a g s . c o n t a c t & a m p ; & a m p ; ! u s e r . p F l a g s . s e l f " > \ n < a n g - c l i c k = " i m p o r t C o n t a c t ( ) " m y - i 1 8 n = " u s e r _ m o d a l _ a d d _ c o n t a c t " > < / a > \ n < / l i > \ n < l i > \ n < a n g - c l i c k = " f l u s h H i s t o r y ( t r u e ) " m y - i 1 8 n = " u s e r _ m o d a l _ c l e a r _ h i s t o r y " > < / a > \ n < / l i > \ n < l i > \ n < a n g - c l i c k = " f l u s h H i s t o r y ( ) " m y - i 1 8 n = " u s e r _ m o d a l _ d e l e t e _ c h a t " > < / a > \ n < / l i > \ n < / u l > \ n < / d i v > \ n \ n < d i v c l a s s = " n a v b a r - h e a d e r " > \ n \ n < u l c l a s s = " n a v n a v b a r - n a v n a v b a r - q u i c k - n a v " > \ n < l i > \ n < a n g - c l i c k = " $ c l o s e ( ) " c l a s s = " n a v b a r - q u i c k - m e d i a - b a c k " > \ n < i c l a s s = " i c o n i c o n - b a c k " > < / i > \ n < d i v c l a s s = " n a v b a r - q u i c k - b a c k - t i t l e " > \ n < h 4 m y - i 1 8 n = " u s e r _ m o d a l _ c o n t a c t _ i n f o " > < / h 4 > \ n < / d i v > \ n < / a > \ n < / l i > \ n < / u l > \ n \ n < / d i v > \ n \ n < / d i v > \ n <
if ( p . getRangeAt && p . rangeCount ) { var m = document . createElement ( "div" ) ; m . innerHTML = u ; var g = m . firstChild , h = p . getRangeAt ( 0 ) ; h . deleteContents ( ) , h . insertNode ( document . createTextNode ( " " ) ) , h . insertNode ( g ) , h . setStart ( g , 0 ) , setTimeout ( function ( ) { h = document . createRange ( ) , h . setStartAfter ( g ) , h . collapse ( ! 0 ) , p . removeAllRanges ( ) , p . addRange ( h ) } , 0 ) } } else document . selection && "Control" != document . selection . type && document . selection . createRange ( ) . pasteHTML ( u ) } } else { var n = this . textareaEl [ 0 ] , o = n . value , s = this . isActive ? getFieldSelection ( n ) : o . length , r = o . substr ( s ) , l = o . substr ( 0 , s ) , c = t && l . match ( /:([\S]*)$/ ) , d = EmojiHelper . emojis [ e ] ; if ( c && c [ 0 ] ) var f = l . substr ( 0 , c . index ) + ":" + d [ 1 ] + ": " + r , _ = c . index + d [ 1 ] . length + 3 ; else var f = l + ":" + d [ 1 ] + ": " + r , _ = l . length + d [ 1 ] . length + 3 ; n . value = f , setFieldSelection ( n , _ ) } this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onMentionsUpdated = function ( e ) { delete this . previousQuery , this . isActive && this . checkAutocomplete ( ) } , MessageComposer . prototype . onMentionSelected = function ( e , t ) { var n = ! 0 ; if ( "#" == e . charAt ( 0 ) && ( n = ! 1 , e = e . substr ( 1 ) , t = t . replace ( /\(\)@/ , "" ) ) , this . richTextareaEl ) { var a = this . richTextareaEl [ 0 ] ; this . isActive || this . restoreSelection ( ) || setRichFocus ( a ) ; var i , o = getRichValueWithCaret ( a ) , s = o [ 0 ] , r = o [ 1 ] >= 0 ? o [ 1 ] : s . length , l = s . substr ( r ) , c = s . substr ( 0 , r ) , d = c . match ( /@([\S]*)$/ ) ; i = d && d [ 0 ] ? c . substr ( 0 , d . index ) + "@" + e : c + "@" + e ; var u ; n ? l . length ? ( this . selId = ( this . selId || 0 ) + 1 , u = this . getRichHtml ( i ) + ' <span id="composer_sel' + this . selId + '"></span>' + this . getRichHtml ( l ) , this . richTextareaEl . html ( u ) , setRichFocus ( a , $ ( "#composer_sel" + this . selId ) [ 0 ] ) ) : ( u = this . getRichHtml ( i ) + " " , this . richTextareaEl . html ( u ) , setRichFocus ( a ) ) : ( this . selId = ( this . selId || 0 ) + 1 , u = this . getRichHtml ( i ) + ' (<span id="composer_sel' + this . selId + '">' + encodeEntities ( t ) + "</span>) " + this . getRichHtml ( l ) , this . richTextareaEl . html ( u ) , setRichFocus ( a , $ ( "#composer_sel" + this . selId ) [ 0 ] , ! 0 ) ) } else { var i , p , m , g , a = this . textareaEl [ 0 ] , s = a . value , r = this . isActive ? getFieldSelection ( a ) : s . length , l = s . substr ( r ) , c = s . substr ( 0 , r ) , d = c . match ( /@([\S]*)$/ ) ; i = d && d [ 0 ] ? c . substr ( 0 , d . index ) + "@" + e : c + "@" + e , n ? ( p = i + "@" + e + " " + l , m = d . index + e . length + 2 ) : ( p = i + "@" + e + " (" + t + ") " + l , m = d . index + e . length + 2 , g = m + t . length ) , a . value = p , setFieldSelection ( a , m , g ) } this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onCommandSelected = function ( e , t ) { if ( t ) if ( this . richTextareaEl ) this . richTextareaEl . html ( encodeEntities ( e ) + " " ) , setRichFocus ( this . richTextareaEl [ 0 ] ) ; else { var n = this . textareaEl [ 0 ] ; n . value = e + " " , setFieldSelection ( n ) } else this . onCommandSend ( e ) ; this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onChange = function ( e ) { if ( this . richTextareaEl ) { delete this . keyupStarted ; var t = getRichValue ( this . richTextareaEl [ 0 ] ) ; this . textareaEl . val ( t ) . trigger ( "change" ) } this . updateInlinePlaceholder ( ) } , MessageComposer . prototype . getEmojiHtml = function ( e , t ) { t = t || EmojiHelper . emojis [ e ] ; var n = 20 , a = EmojiHelper . spritesheetPositions [ e ] , i = a [ 0 ] , o = ( a [ 1 ] , n * a [ 3 ] ) , s = n * a [ 2 ] ; return '<img src="img/blank.gif" alt=":' + encodeEntities ( t [ 1 ] ) + ':" data-code="' + encodeEntities ( e ) + '" class="emoji emoji-w20 emoji-spritesheet-' + i + '" style="background-position: -' + o + "px -" + s + 'px;" onresizestart="return false" />' } , MessageComposer . prototype . setValue = function ( e ) { this . richTextareaEl ? ( this . richTextareaEl . html ( this . getRichHtml ( e ) ) , this . lastLength = e . length , this . wasEmpty = ! e . length , this . onKeyEvent ( { type : "keyup" } ) ) : this . textareaEl . val ( e ) } , MessageComposer . prototype . setFocusedValue = function ( e ) { var t = e [ 0 ] , n = e [ 1 ] , a = e [ 2 ] ; if ( this . richTextareaEl ) { this . selId = ( this . selId || 0 ) + 1 ; var i = this . getRichHtml ( t ) + '<span id="composer_sel' + this . selId + '">' + this . getRichHtml ( n ) + "</span>" + this . getRichHtml ( a ) ; this . richTextareaEl . html ( i ) , setRichFocus ( this . richTextareaEl [ 0 ] , $ ( "#composer_sel" + this . selId ) [ 0 ] , ! 0 ) } else this . textareaEl . val ( t + n + a ) , setFieldSelection ( this . textareaEl [ 0 ] , t . length , t . length + n . length ) } , MessageComposer . prototype . getRichHtml = function ( e ) { var t = $ ( "<div>" ) . text ( e ) . html ( ) ; return t = t . replace ( /\n/g , "<br/>" ) , t = t . replace ( /:([A-Za-z0-9\-\+\*_]+?):/gi , function ( e , t ) { var n = EmojiHelper . shortcuts [ t ] ; return void 0 !== n ? this . getEmojiHtml ( n ) : e } . bind ( this ) ) , t = t . replace ( / /g , " " ) . repl
for ( n = 0 ; n < i . length ; n ++ ) "file" == i [ n ] . kind && ( t = i [ n ] . getAsFile ( ) , s . push ( t ) ) ; if ( s . length > 0 ) { if ( 1 == s . length ) return S ( s [ 0 ] ) ; d . confirm ( { type : "FILES_CLIPBOARD_PASTE" , files : s } ) . then ( function ( ) { o . draftMessage . files = s , o . draftMessage . isMedia = ! 0 } ) } } function M ( e ) { var t = ! 1 ; return x && 1 != x || ( x = checkDragEvent ( e ) ? 2 : 1 , t = ! 0 ) , 2 == x && ( I && setTimeout ( function ( ) { clearTimeout ( I ) , I = ! 1 } , 0 ) , "dragenter" == e . type || "dragover" == e . type ? t && ( Config . Mobile || $ ( E ) . hide ( ) , $ ( P ) . css ( { height : F . offsetHeight + 2 , width : F . offsetWidth } ) . show ( ) ) : ( "drop" == e . type && o . $apply ( function ( ) { o . draftMessage . files = Array . prototype . slice . call ( e . originalEvent . dataTransfer . files ) , o . draftMessage . isMedia = ! 0 } ) , I = setTimeout ( function ( ) { $ ( P ) . hide ( ) , Config . Mobile || $ ( E ) . show ( ) , x = ! 1 , I = ! 1 } , 300 ) ) ) , cancelEvent ( e ) } var x , I , A = $ ( "textarea" , s ) [ 0 ] , E = $ ( ".composer_emoji_insert_btn" , s ) [ 0 ] , T = $ ( ".composer_emoji_panel" , s ) [ 0 ] , D = $ ( "input" , s ) , P = $ ( ".im_send_dropbox_wrap" , s ) [ 0 ] , F = $ ( ".im_send_field_wrap" , s ) [ 0 ] , N = $ ( ".im_submit" , s ) [ 0 ] , R = a ( '<a class="composer_sticker_btn" data-sticker="{{::document.id}}" my-load-sticker document="document" thumb="true" img-class="composer_sticker_image"></a>' ) , O = { } , U = new EmojiTooltip ( E , { getStickers : function ( e ) { l . getStickers ( ) . then ( e ) } , getStickerImage : function ( e , t ) { var n = e . attr ( "data-category" ) , a = O [ t ] ; if ( a && ! isInDOM ( a [ 0 ] ) ) return a . attr ( "data-category" , n ) , void e . replaceWith ( a ) ; var i = o . $new ( ! 0 ) ; i . document = c . getDoc ( t ) , R ( i , function ( a ) { O [ t ] = a , a . attr ( "data-category" , n ) , e . replaceWith ( a ) } ) } , onStickersetSelected : function ( e ) { l . openStickersetLink ( e ) } , onEmojiSelected : function ( e ) { o . $apply ( function ( ) { L . onEmojiSelected ( e ) } ) } , onStickerSelected : function ( e ) { o . $apply ( function ( ) { o . draftMessage . sticker = e } ) } , langpack : { im _emoji _tab : e ( "im_emoji_tab" ) , im _stickers _tab : e ( "im_stickers_tab" ) } } ) ; o . $on ( "stickers_changed" , function ( ) { U . onStickersChanged ( ) } ) ; var B ; T && ( B = new EmojiPanel ( T , { onEmojiSelected : function ( e ) { L . onEmojiSelected ( e ) } } ) ) ; var L = new MessageComposer ( A , { onTyping : function ( ) { o . $emit ( "ui_typing" ) } , getSendOnEnter : function ( ) { return H } , dropdownDirective : function ( e , t ) { var n = o . $new ( ! 0 ) ; a ( "<div><div my-composer-dropdown></div></div>" ) ( n , function ( n , a ) { e . replaceWith ( n ) , t ( a , n ) } ) } , mentions : o . mentions , commands : o . commands , onMessageSubmit : f , onDirectionKey : v , onInlineResultSend : _ , onFilePaste : S , onCommandSend : function ( e ) { o . $apply ( function ( ) { o . draftMessage . command = e } ) } } ) , j = L . richTextareaEl && L . richTextareaEl [ 0 ] ; j && $ ( j ) . on ( "keydown keyup" , b ) , o . $on ( "inline_results" , function ( e , t ) { var n = Config . Mobile ? $ ( window ) . width ( ) : ( F . offsetWidth || 382 ) - 2 , a = 80 ; t && u . regroupWrappedResults ( t . results , n , a ) , setZeroTimeout ( function ( ) { L . setInlineSuggestions ( t ) } ) } ) , o . $on ( "inline_placeholder" , function ( e , t ) { L . setInlinePlaceholder ( t . prefix , t . placeholder ) } ) , D . on ( "change" , function ( ) { var e = this ; o . $apply ( function ( ) { o . draftMessage . files = Array . prototype . slice . call ( e . files ) , o . draftMessage . isMedia = $ ( e ) . hasClass ( "im_media_attach_input" ) || Config . Mobile , setTimeout ( function ( ) { try { e . value = "" } catch ( t ) { } } , 1e3 ) } ) } ) ; var H = ! 0 ; o . $on ( "settings_changed" , h ) , h ( ) , $ ( N ) . on ( "mousedown touchstart" , f ) ; var q = j && j . offsetHeight ; $ ( document ) . on ( "keydown" , w ) , $ ( "body" ) . on ( "dragenter dragleave dragover drop" , M ) , $ ( document ) . on ( "paste" , C ) , m && ( o . $on ( "ui_peer_change" , k ) , o . $on ( "ui_history_focus" , k ) , o . $on ( "ui_history_change" , k ) ) , o . $on ( "ui_peer_change" , L . resetTyping . bind ( L ) ) , o . $on ( "ui_peer_draft" , function ( t , n ) { n = n || { } ; var a = o . draftMessage . isBroadcast ; L . setPlaceholder ( e ( a ? "im_broadcast_field_placeholder_raw" : "im_message_field_placeholder_raw" ) ) , n . customSelection ? ( L . setFocusedValue ( n . customSelection ) , b ( ) ) : ( j && ( L . setValue ( o . draftMessage . text || "" ) , b ( ) ) , ( m || n && n . focus ) && L . focus ( ) ) , onContentLoaded ( function ( ) { L . checkAutocomplete ( ! 0 ) } ) , U && Config . Mobile && U . hide ( ) } ) , o . $on ( "ui_peer_reply" , function ( ) { onContentLoaded ( function ( ) { o . $emit ( "ui_editor_resize" ) , m && L . focus ( ) } ) } ) , o . $on ( "mentions_update" , function ( ) { L . onMentionsUpdated ( ) } ) , o . $on ( "ui_message_before_send" , function ( ) { y ( ) } ) , o . $on ( "ui_message_send" , function ( ) { m && k ( ) } ) , o . $on ( "ui_message_blur" , function ( ) { L . blur ( ) } ) , o . $on ( "$destroy" , function ( ) { $ ( document ) . off ( "paste" , C ) , $ ( document ) . off ( "keydown" , w ) , $ ( "body" ) . off ( "dragenter dragleave dragover drop" , M ) , $ ( N ) . off ( " mouse
$ ( r ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_dialogs_change" , function ( ) { onContentLoaded ( function ( ) { u = ! 1 , t ( function ( ) { $ ( r ) . trigger ( "scroll" ) } ) } ) } ) , $ ( r ) . on ( "scroll" , function ( e ) { a . is ( ":visible" ) && ! u && r . scrollTop >= r . scrollHeight - r . clientHeight - 300 && ( n . $emit ( "dialogs_need_more" ) , u = ! 0 ) } ) , $ ( e ) . on ( "resize" , o ) , o ( ) , setTimeout ( o , 1e3 ) } return { link : n } } ] ) . directive ( "myHistoryMobile" , [ "$window" , "$timeout" , "$rootScope" , "$transition" , function ( e , t , n , a ) { function i ( n , a , i ) { function o ( ) { var e , n ; if ( n = $ ( ".im_message_focus:visible" , c ) [ 0 ] ) { var a = c . clientHeight , i = c . scrollTop , o = n . offsetTop , s = n . clientHeight ; ( ! i || i + a < o || i > o + s ) && ( c . scrollTop = Math . max ( 0 , o - Math . floor ( a / 2 ) + 26 ) ) , _ = ! 1 } else ( e = $ ( ".im_message_unread_split:visible" , c ) [ 0 ] ) ? ( c . scrollTop = Math . max ( 0 , e . offsetTop - 52 ) , _ = ! 1 ) : ( c . scrollTop = c . scrollHeight , _ = ! 0 ) ; t ( function ( ) { $ ( c ) . trigger ( "scroll" ) , v = c . scrollTop } ) } function s ( t ) { if ( a . is ( ":visible" ) || $ ( a [ 0 ] . parentNode . parentNode ) . is ( ":visible" ) ) { $ ( p ) . is ( ":visible" ) && $ ( p ) . css ( { height : $ ( g ) . height ( ) } ) , m && m . offsetHeight || ( m = $ ( ".tg_page_head" ) [ 0 ] ) ; var n = $ ( e ) . height ( ) - u . offsetHeight - ( m ? m . offsetHeight : 46 ) ; $ ( l ) . css ( { height : n } ) , r ( ) , t !== ! 0 && _ && onContentLoaded ( function ( ) { c . scrollTop = c . scrollHeight } ) } } function r ( ) { } var l = $ ( ".im_history_wrap" , a ) [ 0 ] , c = ( $ ( ".im_history_messages" , a ) [ 0 ] , $ ( ".im_history_scrollable_wrap" , a ) [ 0 ] ) , d = $ ( ".im_history_scrollable" , a ) [ 0 ] , u = $ ( ".im_bottom_panel_wrap" , a ) [ 0 ] , p = $ ( ".im_send_form_wrap" , a ) [ 0 ] , m = $ ( ".tg_page_head" ) [ 0 ] , g = $ ( ".im_send_form" , a ) [ 0 ] , h = ! 1 , f = ! 1 ; onContentLoaded ( function ( ) { c . scrollTop = c . scrollHeight } ) , n . $on ( "ui_history_append_new" , function ( e , t ) { if ( _ || t . my ) { var n = parseInt ( $ ( c ) . css ( "paddingRight" ) ) ; $ ( c ) . addClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : 0 , marginLeft : - Math . ceil ( n / 2 ) } ) , onContentLoaded ( function ( ) { $ ( c ) . removeClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : "" , marginLeft : "" } ) , c . scrollTop = c . scrollHeight , r ( ) } ) } } ) , n . $on ( "ui_history_change" , function ( ) { var e = parseInt ( $ ( c ) . css ( "paddingRight" ) ) ; $ ( c ) . addClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : 0 , marginLeft : - Math . ceil ( e / 2 ) } ) , onContentLoaded ( function ( ) { $ ( c ) . removeClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : "" , marginLeft : "" } ) , s ( ! 0 ) , h = ! 1 , f = ! 1 , o ( ) } ) } ) , n . $on ( "ui_history_change_scroll" , function ( ) { onContentLoaded ( o ) } ) , n . $on ( "ui_history_focus" , function ( ) { _ || ( c . scrollTop = c . scrollHeight , _ = ! 0 ) } ) , n . $on ( "ui_history_prepend" , function ( ) { var e = c . scrollHeight , a = c . scrollTop , i = parseInt ( $ ( c ) . css ( "paddingRight" ) ) , s = c . clientHeight ; $ ( c ) . addClass ( "im_history_to_bottom" ) , c . scrollHeight , $ ( d ) . css ( { bottom : - ( e - a - s ) , marginLeft : - Math . ceil ( i / 2 ) } ) ; var l = function ( ) { $ ( c ) . removeClass ( "im_history_to_bottom" ) , $ ( d ) . css ( { bottom : "" , marginLeft : "" } ) , v >= 0 ? o ( ) : c . scrollTop = a + c . scrollHeight - e , r ( ) , h = ! 1 , t ( function ( ) { c . scrollHeight != e && $ ( c ) . trigger ( "scroll" ) } ) , clearTimeout ( u ) , p ( ) } , u = setTimeout ( l , 0 ) , p = n . $on ( "$viewContentLoaded" , l ) } ) , n . $on ( "ui_history_append" , function ( ) { var e = c . scrollHeight ; onContentLoaded ( function ( ) { _ = ! 1 , r ( ) , f = ! 1 , v >= 0 && o ( ) , t ( function ( ) { c . scrollHeight != e && $ ( c ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_panel_update" , function ( e , a ) { onContentLoaded ( function ( ) { s ( ) , a && a . blur ? n . $broadcast ( "ui_message_blur" ) : n . $broadcast ( "ui_message_send" ) , t ( function ( ) { $ ( c ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_selection_clear" , function ( ) { window . getSelection ? window . getSelection ( ) . empty ? window . getSelection ( ) . empty ( ) : window . getSelection ( ) . removeAllRanges && window . getSelection ( ) . removeAllRanges ( ) : document . selection && document . selection . empty ( ) } ) , n . $on ( "ui_editor_resize" , s ) , n . $on ( "ui_height" , function ( ) { onContentLoaded ( s ) } ) ; var _ = ! 0 , v = - 1 ; $ ( c ) . on ( "scroll" , function ( e ) { if ( a . is ( ":visible" ) && ! $ ( c ) . hasClass ( "im_history_to_bottom" ) ) { var t = c . scrollTop ; _ = t >= c . scrollHeight - c . clientHeight , v >= 0 && v != t && ( v = - 1 ) , ! h && t <= 300 ? ( h = ! 0 , n . $emit ( "history_need_more" ) ) : ! f && t >= c . scrollHeight - c . clientHeight - 300 && ( f = ! 0 , n . $emit ( "history_need_less" ) ) } } ) , $ ( e ) . on ( "resize" , s ) , s ( ) , onContentLoaded ( s ) } return { link : i } } ] ) . directive ( "myContactsListMobile" , [ "$window" , "$timeout" , function ( e , t ) { function n ( t , n , a ) { function i ( ) { $ ( n ) . css ( { height : $ ( e ) . height ( ) - ( s && s . offsetHeight || 0 ) - ( o && o . offsetHeight || 0 ) - 64 } ) } var o = $ ( ".contacts_modal_search" ) [ 0 ] , s = $ ( ".contacts_modal_panel" ) [ 0 ] ; $ ( e ) . on ( "resize" , i ) , t . $on ( " contacts _cha