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 hasOnclick ( 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"
var a ; if ( t ) { if ( J ) return J . call ( t , e , n ) ; for ( a = t . length , n = n ? 0 > n ? Math . max ( 0 , a + n ) : n : 0 ; a > n ; n ++ ) if ( n in t && t [ n ] === e ) return n } return - 1 } , merge : function ( e , t ) { for ( var n = + t . length , a = 0 , i = e . length ; n > a ; ) e [ i ++ ] = t [ a ++ ] ; if ( n !== n ) for ( ; void 0 !== t [ a ] ; ) e [ i ++ ] = t [ a ++ ] ; 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 , p , 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 ( R && ! 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 && ( ! F || ! F . test ( e ) ) ) { if ( m = p = O , g = t , h = 9 === r && e , 1 === r && "object" !== t . nodeName . toLowerCase ( ) ) { for ( c = S ( e ) , ( p = t . getAttribute ( "id" ) ) ? m = p . replace ( be , "\\$&" ) : t . setAttribute ( "id" , m ) , m = "[id='" + m + "'] " , l = c . length ; l -- ; ) c [ l ] = m + u ( 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 { p || 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 [ O ] = ! 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 p ( ) { } function u ( 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 [ O ] || ( t [ O ] = { } ) , ( 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 [ O ] && ( i = _ ( i ) ) , o && ! o [ O ] && ( o = _ ( o , s ) ) , a ( function ( a , s , r , l ) { var c , d , p , u = [ ] , m = [ ] , g = s . length , _ = a || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! a && t ? _ : f ( _ , u , 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 -- ; ) ( p = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = p ) ) ; if ( a ) { if ( o || e ) { if ( o ) { for ( c = [ ] , d = y . length ; d -- ; ) ( p = y [ d ] ) && c . push ( v [ d ] = p ) ; o ( null , y = [ ] , c , l ) } for ( d = y . length ; d -- ; ) ( p = y [ d ] ) && ( c = o ? t
g = ( o [ 2 ] || "" ) . split ( "." ) . sort ( ) , m && ( c = ie . event . special [ m ] || { } , m = ( i ? c . delegateType : c . bindType ) || m , c = ie . event . special [ m ] || { } , p = ie . extend ( { type : m , origType : h , data : a , handler : n , guid : n . guid , selector : i , needsContext : i && ie . expr . match . needsContext . test ( i ) , namespace : g . join ( "." ) } , l ) , ( u = s [ m ] ) || ( u = s [ m ] = [ ] , u . 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 , p ) , p . handler . guid || ( p . handler . guid = n . guid ) ) , i ? u . splice ( u . delegateCount ++ , 0 , p ) : u . push ( p ) , ie . event . global [ m ] = ! 0 ) ; e = null } } , remove : function ( e , t , n , a , i ) { var o , s , r , l , c , d , p , u , 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 = Fe . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( p = ie . event . special [ m ] || { } , m = ( a ? p . delegateType : p . bindType ) || m , u = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = u . length ; o -- ; ) s = u [ o ] , ! i && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || a && a !== s . selector && ( "**" !== a || ! s . selector ) || ( u . splice ( o , 1 ) , s . selector && u . delegateCount -- , p . remove && p . remove . call ( e , s ) ) ; l && ! u . length && ( p . teardown && p . 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 , p , u = [ 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 && ! Re . 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 , Re . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) u . push ( r ) , d = r ; d === ( a . ownerDocument || ge ) && u . push ( d . defaultView || d . parentWindow || e ) } for ( p = 0 ; ( r = u [ p ++ ] ) && ! t . isPropagationStopped ( ) ; ) t . type = p > 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 ( u . 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 [
} , set : wt . set } , ie . attrHooks . contenteditable = { set : function ( e , t , n ) { wt . set ( e , "" !== t && t , n ) } } , ie . each ( [ "width" , "height" ] , function ( e , t ) { ie . attrHooks [ t ] = { set : function ( e , n ) { return "" === n ? ( e . setAttribute ( t , "auto" ) , n ) : void 0 } } } ) ) , ne . style || ( ie . attrHooks . style = { 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 + "" )
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
} , { id : "-1094555409" , predicate : "updateNotifySettings" , params : [ { name : "peer" , type : "NotifyPeer" } , { name : "notify_settings" , type : "PeerNotifySettings" } ] , type : "Update" } , { id : "381645902" , predicate : "sendMessageTypingAction" , 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 : "-337352679" , predicate : "updateServiceNotification" , params : [ { name : "flags" , type : "#" } , { name : "popup" , type : "flags.0?true" } , { name : "inbox_date" , type : "flags.1?int" } , { name : "type" , type : "string" } , { name : "message" , type : "string" } , { name : "media" , type : "MessageMedia" } , { name : "entities" , type : "Vector<MessageEntity>" } ] , 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" , p
type : "#" } , { name : "query_id" , type : "long" } , { name : "user_id" , type : "int" } , { name : "peer" , type : "Peer" } , { name : "msg_id" , type : "int" } , { name : "chat_instance" , type : "long" } , { name : "data" , type : "flags.0?bytes" } , { name : "game_short_name" , type : "flags.1?string" } ] , type : "Update" } , { id : "649453030" , predicate : "messages.messageEditData" , params : [ { name : "flags" , type : "#" } , { name : "caption" , type : "flags.0?true" } ] , type : "messages.MessageEditData" } , { id : "-469536605" , predicate : "updateEditMessage" , params : [ { name : "message" , type : "Message" } , { name : "pts" , type : "int" } , { name : "pts_count" , 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"
params : [ { name : "key" , type : "InputPrivacyKey" } , { name : "rules" , type : "Vector<InputPrivacyRule>" } ] , type : "account.PrivacyRules" } , { id : "1099779595" , method : "account.deleteAccount" , params : [ { name : "reason" , type : "string" } ] , type : "Bool" } , { id : "150761757" , method : "account.getAccountTTL" , params : [ ] , type : "AccountDaysTTL" } , { id : "608323678" , method : "account.setAccountTTL" , params : [ { name : "ttl" , type : "AccountDaysTTL" } ] , type : "Bool" } , { id : "-627372787" , method : "invokeWithLayer" , params : [ { name : "layer" , type : "int" } , { name : "query" , type : "!X" } ] , type : "X" } , { id : "-113456221" , method : "contacts.resolveUsername" , params : [ { name : "username" , type : "string" } ] , type : "contacts.ResolvedPeer" } , { id : "149257707" , method : "account.sendChangePhoneCode" , params : [ { name : "flags" , type : "#" } , { name : "allow_flashcall" , type : "flags.0?true" } , { name : "phone_number" , type : "string" } , { name : "current_number" , type : "flags.0?Bool" } ] , type : "auth.SentCode" } , { id : "1891839707" , method : "account.changePhone" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } , { name : "phone_code" , type : "string" } ] , type : "User" } , { id : "479598769" , method : "messages.getAllStickers" , params : [ { name : "hash" , type : "int" } ] , type : "messages.AllStickers" } , { id : "954152242" , method : "account.updateDeviceLocked" , params : [ { name : "period" , type : "int" } ] , type : "Bool" } , { id : "1738800940" , method : "auth.importBotAuthorization" , params : [ { name : "flags" , type : "int" } , { name : "api_id" , type : "int" } , { name : "api_hash" , type : "string" } , { name : "bot_auth_token" , type : "string" } ] , type : "auth.Authorization" } , { id : "623001124" , method : "messages.getWebPagePreview" , params : [ { name : "message" , type : "string" } ] , type : "MessageMedia" } , { id : "-484392616" , method : "account.getAuthorizations" , params : [ ] , type : "account.Authorizations" } , { id : "-545786948" , method : "account.resetAuthorization" , params : [ { name : "hash" , type : "long" } ] , type : "Bool" } , { id : "1418342645" , method : "account.getPassword" , params : [ ] , type : "account.Password" } , { id : "-1131605573" , method : "account.getPasswordSettings" , params : [ { name : "current_password_hash" , type : "bytes" } ] , type : "account.PasswordSettings" } , { id : "-92517498" , method : "account.updatePasswordSettings" , params : [ { name : "current_password_hash" , type : "bytes" } , { name : "new_settings" , type : "account.PasswordInputSettings" } ] , type : "Bool" } , { id : "174260510" , method : "auth.checkPassword" , params : [ { name : "password_hash" , type : "bytes" } ] , type : "auth.Authorization" } , { id : "-661144474" , method : "auth.requestPasswordRecovery" , params : [ ] , type : "auth.PasswordRecovery" } , { id : "1319464594" , method : "auth.recoverPassword" , params : [ { name : "code" , type : "string" } ] , type : "auth.Authorization" } , { id : "-1080796745" , method : "invokeWithoutUpdates" , params : [ { name : "query" , type : "!X" } ] , type : "X" } , { id : "2106086025" , method : "messages.exportChatInvite" , params : [ { name : "chat_id" , type : "int" } ] , type : "ExportedChatInvite" } , { id : "1051570619" , method : "messages.checkChatInvite" , params : [ { name : "hash" , type : "string" } ] , type : "ChatInvite" } , { id : "1817183516" , method : "messages.importChatInvite" , params : [ { name : "hash" , type : "string" } ] , type : "Updates" } , { id : "639215886" , method : "messages.getStickerSet" , params : [ { name : "stickerset" , type : "InputStickerSet" } ] , type : "messages.StickerSet" } , { id : "-946871200" , method : "messages.installStickerSet" , params : [ { name : "stickerset" , type : "InputStickerSet" } , { name : "archived" , type : "Bool" } ] , type : "messages.StickerSetInstallResult" } , { id : "-110209570" , method : "messages.uninstallStickerSet" , params : [ { name : "stickerset" , type : "InputStickerSet" } ] , type : "Bool" } , { id : "-421563528" , method : "messages.startBot" , params : [ { name : "bot" , type : "InputUser" } , { name : "peer" , type : "InputPeer" } , { name : "random_id" , type : "long" } , { name : "start_param" , type : "string" } ] , type : "Updates" } , { id : "-1189013126" , method : "help.getAppChangelog" , params : [ ] , type : "help.AppChangelog" } , { id : "-993483427" , method : "messages.getMessagesViews" , params : [ { name : "peer" , type : "InputPeer" } , { name : "id" , type : "Vector<int>" } , { name : "increment" , type : "Bool" } ] , type : "Vector<int>" } , { id : "-871347913" , method : "channels.readHistory" , params : [ { name : "channel" , type : "InputChannel" } , { name : "max_id" , type : "int" } ] , type : "Bool" } , { id : "-2067661490" , method : "channels.deleteMessages" , params : [ { name : "channel" , type : "InputChannel" } , { name : "id" , type : "Vector<int>" } ] , type : " messages . AffectedMessag
"1f4a6" : [ "💦" , [ "sweat_drops" ] ] , "1f4a7" : [ "💧" , [ "droplet" ] ] , "1f4a8" : [ "💨" , [ "dash" ] ] , "1f4a9" : [ "💩" , [ "hankey" , "poop" , "shit" ] ] , "1f4aa" : [ "💪" , [ "muscle" ] ] , "1f4ab" : [ "💫" , [ "dizzy" ] ] , "1f4ac" : [ "💬" , [ "speech_balloon" ] ] , "1f4ad" : [ "💭" , [ "thought_balloon" ] ] , "1f4ae" : [ "💮" , [ "white_flower" ] ] , "1f4af" : [ "💯" , [ "100" ] ] , "1f4b0" : [ "💰" , [ "moneybag" ] ] , "1f4b1" : [ "💱" , [ "currency_exchange" ] ] , "1f4b2" : [ "💲" , [ "heavy_dollar_sign" ] ] , "1f4b3" : [ "💳" , [ "credit_card" ] ] , "1f4b4" : [ "💴" , [ "yen" ] ] , "1f4b5" : [ "💵" , [ "dollar" ] ] , "1f4b6" : [ "💶" , [ "euro" ] ] , "1f4b7" : [ "💷" , [ "pound" ] ] , "1f4b8" : [ "💸" , [ "money_with_wings" ] ] , "1f4b9" : [ "💹" , [ "chart" ] ] , "1f4ba" : [ "💺" , [ "seat" ] ] , "1f4bb" : [ "💻" , [ "computer" ] ] , "1f4bc" : [ "💼" , [ "briefcase" ] ] , "1f4bd" : [ "💽" , [ "minidisc" ] ] , "1f4be" : [ "💾" , [ "floppy_disk" ] ] , "1f4bf" : [ "💿" , [ "cd" ] ] , "1f4c0" : [ "📀" , [ "dvd" ] ] , "1f4c1" : [ "📁" , [ "file_folder" ] ] , "1f4c2" : [ "📂" , [ "open_file_folder" ] ] , "1f4c3" : [ "📃" , [ "page_with_curl" ] ] , "1f4c4" : [ "📄" , [ "page_facing_up" ] ] , "1f4c5" : [ "📅" , [ "date" ] ] , "1f4c6" : [ "📆" , [ "calendar" ] ] , "1f4c7" : [ "📇" , [ "card_index" ] ] , "1f4c8" : [ "📈" , [ "chart_with_upwards_trend" ] ] , "1f4c9" : [ "📉" , [ "chart_with_downwards_trend" ] ] , "1f4ca" : [ "📊" , [ "bar_chart" ] ] , "1f4cb" : [ "📋" , [ "clipboard" ] ] , "1f4cc" : [ "📌" , [ "pushpin" ] ] , "1f4cd" : [ "📍" , [ "round_pushpin" ] ] , "1f4ce" : [ "📎" , [ "paperclip" ] ] , "1f4cf" : [ "📏" , [ "straight_ruler" ] ] , "1f4d0" : [ "📐" , [ "triangular_ruler" ] ] , "1f4d1" : [ "📑" , [ "bookmark_tabs" ] ] , "1f4d2" : [ "📒" , [ "ledger" ] ] , "1f4d3" : [ "📓" , [ "notebook" ] ] , "1f4d4" : [ "📔" , [ "notebook_with_decorative_cover" ] ] , "1f4d5" : [ "📕" , [ "closed_book" ] ] , "1f4d6" : [ "📖" , [ "book" , "open_book" ] ] , "1f4d7" : [ "📗" , [ "green_book" ] ] , "1f4d8" : [ "📘" , [ "blue_book" ] ] , "1f4d9" : [ "📙" , [ "orange_book" ] ] , "1f4da" : [ "📚" , [ "books" ] ] , "1f4db" : [ "📛" , [ "name_badge" ] ] , "1f4dc" : [ "📜" , [ "scroll" ] ] , "1f4dd" : [ "📝" , [ "memo" , "pencil" ] ] , "1f4de" : [ "📞" , [ "telephone_receiver" ] ] , "1f4df" : [ "📟" , [ "pager" ] ] , "1f4e0" : [ "📠" , [ "fax" ] ] , "1f4e1" : [ "📡" , [ "satellite" ] ] , "1f4e2" : [ "📢" , [ "loudspeaker" ] ] , "1f4e3" : [ "📣" , [ "mega" ] ] , "1f4e4" : [ "📤" , [ "outbox_tray" ] ] , "1f4e5" : [ "📥" , [ "inbox_tray" ] ] , "1f4e6" : [ "📦" , [ "package" ] ] , "1f4e7" : [ "📧" , [ "e-mail" ] ] , "1f4e8" : [ "📨" , [ "incoming_envelope" ] ] , "1f4e9" : [ "📩" , [ "envelope_with_arrow" ] ] , "1f4ea" : [ "📪" , [ "mailbox_closed" ] ] , "1f4eb" : [ "📫" , [ "mailbox" ] ] , "1f4ec" : [ "📬" , [ "mailbox_with_mail" ] ] , "1f4ed" : [ "📭" , [ "mailbox_with_no_mail" ] ] , "1f4ee" : [ "📮" , [ "postbox" ] ] , "1f4ef" : [ "📯" , [ "postal_horn" ] ] , "1f4f0" : [ "📰" , [ "newspaper" ] ] , "1f4f1" : [ "📱" , [ "iphone" ] ] , "1f4f2" : [ "📲" , [ "calling" ] ] , "1f4f3" : [ "📳" , [ "vibration_mode" ] ] , "1f4f4" : [ "📴" , [ "mobile_phone_off" ] ] , "1f4f5" : [ "📵" , [ "no_mobile_phones" ] ] , "1f4f6" : [ "📶" , [ "signal_strength" ] ] , "1f4f7" : [ "📷" , [ "camera" ] ] , "1f4f9" : [ "📹" , [ "video_camera" ] ] , "1f4fa" : [ "📺" , [ "tv" ] ] , "1f4fb" : [ "📻" , [ "radio" ] ] , "1f4fc" : [ "📼" , [ "vhs" ] ] , "1f500" : [ "🔀" , [ "twisted_rightwards_arrows" ] ] , "1f501" : [ "🔁" , [ "repeat" ] ] , "1f502" : [ "🔂" , [ "repeat_one" ] ] , "1f503" : [ "🔃" , [ "arrows_clockwise" ] ] , "1f504" : [ "🔄" , [ "arrows_counterclockwise" ] ] , "1f505" : [ "🔅" , [ "low_brightness" ] ] , "1f506" : [ "🔆" , [ "high_brightness" ] ] , "1f507" : [ "🔇" , [ "mute" ] ] , "1f508" : [ "🔉" , [ "speaker" ] ] , "1f509" : [ "🔉" , [ "sound" ] ] , "1f50a" : [ "🔊" , [ "loud_sound" ] ] , "1f50b" : [ "🔋" , [ "battery" ] ] , "1f50c" : [ "🔌" , [ "electric_plug" ] ] , "1f50d" : [ "🔍" , [ "mag" ] ] , "1f50e" : [ "🔎" , [ "mag_right" ] ] , "1f50f" : [ "🔏" , [ "lock_with_ink_pen" ] ] , "1f510" : [ "🔐" , [ "closed_lock_with_key" ] ] , "1f511" : [ "🔑" , [ "key" ] ] , "1f512" : [ "🔒" , [ "lock" ] ] , "1f513" : [ "🔓" , [ "unlock" ] ] , "1f514" : [ "🔔" , [ "bell" ] ] , "1f515" : [ "🔕" , [ "no_bell" ] ] , "1f516" : [ "🔖" , [ "bookmark" ] ] , "1f517" : [ "🔗" , [ "link" ] ] , "1f518" : [ "🔘" , [ "radio_button" ] ] , "1f519" : [ "🔙" , [ "back" ] ] , "1f51a" : [ "🔚" , [ "end" ] ] , "1f51b" : [ "🔛" , [ "on" ] ] , "1f51c" : [ "🔜" , [ "soon" ] ] , "1f51d" : [ "🔝" , [ "top" ] ] , "1f51e" : [ "🔞" , [ "underage" ] ] , "1f51f" : [ "🔟" , [ "keycap_ten" ] ] , "1f520" : [ "🔠" , [ "capital_abcd" ] ] , "1f521" : [ "🔡" , [ "abcd" ] ] , "1f522" : [ "🔢" , [ "1234" ] ] , "1f523" : [ "🔣" , [ "symbols" ] ] , "1f524" : [ "🔤" , [ "abc" ] ] , "1f525" : [ "🔥" , [ "fire" ] ] , "1f526" : [ "🔦" , [ "flashlight" ] ] , "1f527" : [ "🔧" , [ "wrench" ] ] , "1f528" : [ "🔨" , [ "hammer" ] ] , "1f529" : [ "🔩" , [ "nut_and_bolt" ] ] , "1f52a" : [ "🔪" , [ "hocho" ] ] , " 1 f52
Config . LangCountries = { es : "ES" , ru : "RU" , en : "US" , de : "DE" , it : "IT" , nl : "NL" , fr : "FR" , ca : "ES" , "es-419" : "MX" , ar : "SA" , he : "IL" , tr : "TR" , id : "ID" , pl : "PL" } , function ( e ) { function t ( e ) { l = e } function n ( ) { c = ! 0 } function a ( ) { return c ? ( c = ! 1 , "" ) : l } function i ( e , t ) { var n = ! 1 ; Array . isArray ( e ) || ( e = Array . prototype . slice . call ( arguments ) , t = e . pop ( ) , n = 1 == e . length ) ; var i , o , s , r = [ ] , l = ! 0 , c = a ( ) ; for ( o = 0 ; o < e . length ; o ++ ) if ( s = e [ o ] = c + e [ o ] , "xt_" != s . substr ( 0 , 3 ) && void 0 !== d [ s ] ) r . push ( d [ s ] ) ; else if ( u ) { try { i = localStorage . getItem ( s ) } catch ( m ) { u = ! 1 } try { i = void 0 !== i && null !== i && JSON . parse ( i ) } catch ( m ) { i = ! 1 } r . push ( d [ s ] = i ) } else p ? l = ! 1 : r . push ( d [ s ] = ! 1 ) ; return l ? t ( n ? r [ 0 ] : r ) : void chrome . storage . local . get ( e , function ( a ) { var i ; for ( r = [ ] , o = 0 ; o < e . length ; o ++ ) s = e [ o ] , i = a [ s ] , i = void 0 !== i && null !== i && JSON . parse ( i ) , r . push ( d [ s ] = i ) ; t ( n ? r [ 0 ] : r ) } ) } function o ( e , t ) { var n , i , o = { } , s = a ( ) ; for ( n in e ) if ( e . hasOwnProperty ( n ) ) if ( i = e [ n ] , n = s + n , d [ n ] = i , i = JSON . stringify ( i ) , u ) try { localStorage . setItem ( n , i ) } catch ( r ) { u = ! 1 } else o [ n ] = i ; return u || ! p ? void ( t && t ( ) ) : void chrome . storage . local . set ( o , t ) } function s ( e , t ) { Array . isArray ( e ) || ( e = Array . prototype . slice . call ( arguments ) , "function" == typeof e [ e . length - 1 ] && ( t = e . pop ( ) ) ) ; var n , i , o = a ( ) ; for ( n = 0 ; n < e . length ; n ++ ) if ( i = e [ n ] = o + e [ n ] , delete d [ i ] , u ) try { localStorage . removeItem ( i ) } catch ( s ) { u = ! 1 } p ? chrome . storage . local . remove ( e , t ) : t && t ( ) } function r ( e ) { if ( u ) try { localStorage . clear ( ) } catch ( t ) { u = ! 1 } p ? chrome . storage . local . clear ( function ( ) { d = { } , e ( ) } ) : ( d = { } , e ( ) ) } var l = "" , c = ! 1 , d = { } , p = ! ! ( e . chrome && chrome . storage && chrome . storage . local ) , u = ! p && ! ! e . localStorage ; e . ConfigStorage = { prefix : t , noPrefix : n , get : i , set : o , remove : s , clear : r } } ( this ) , function ( ) { try { window == window . top || window . chrome && chrome . app && chrome . app . window ? document . documentElement . style . display = "block" : top . location = self . location } catch ( e ) { console . error ( "CJ protection" , e ) } var t = [ Config . Navigator . osX ? "osx" : "non_osx" , Config . Navigator . msie ? "msie" : "non_msie" , Config . Navigator . retina ? "is_2x" : "is_1x" ] ; Config . Modes . ios _standalone && t . push ( "ios_standalone" ) , $ ( document . body ) . addClass ( t . join ( " " ) ) , ConfigStorage . get ( "layout_selected" , "i18n_locale" , function ( e ) { var t = e [ 0 ] , n = e [ 1 ] , a = "en-us" , i = { dom : ! 1 , i18n _ng : ! 1 , i18n _messages : ! 1 , i18n _fallback : ! 1 } , o = function ( ) { var e , t = ! 0 ; for ( e in i ) if ( i . hasOwnProperty ( e ) && i [ e ] === ! 1 ) { t = ! 1 ; break } t && ( i . boot = ! 1 , angular . bootstrap ( document , [ "myApp" ] ) ) } ; switch ( Config . Modes . force _mobile ? t = "mobile" : Config . Modes . force _desktop && ( t = "desktop" ) , t ) { case "mobile" : Config . Mobile = ! 0 ; break ; case "desktop" : Config . Mobile = ! 1 ; break ; default : var s = $ ( window ) . width ( ) ; Config . Mobile = Config . Navigator . mobile || s > 10 && s < 480 } $ ( "head" ) . append ( '<link rel="stylesheet" href="css/' + ( Config . Mobile ? "mobile.css" : "desktop.css" ) + '" />' ) , n || ( n = ( navigator . language || "" ) . toLowerCase ( ) , n = Config . I18n . aliases [ n ] || n ) ; for ( var r = 0 ; r < Config . I18n . supported . length ; r ++ ) if ( Config . I18n . supported [ r ] == n ) { Config . I18n . locale = n ; break } i . i18n _ng = Config . I18n . locale == a , $ . getJSON ( "js/locales/" + Config . I18n . locale + ".json" ) . success ( function ( e ) { Config . I18n . messages = e , i . i18n _messages = ! 0 , Config . I18n . locale == a && ( i . i18n _fallback = ! 0 ) , o ( ) } ) , Config . I18n . locale != a && $ . getJSON ( "js/locales/" + a + ".json" ) . success ( function ( e ) { Config . I18n . fallback _messages = e , i . i18n _fallback = ! 0 , o ( ) } ) , $ ( document ) . ready ( function ( ) { i . dom = ! 0 , i . i18n _ng ? o ( ) : $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { i . i18n _ng = ! 0 , o ( ) } ) . attr ( "src" , "vendor/angular/i18n/angular-locale_" + Config . I18n . locale + ".js" ) } ) } ) } ( ) , function ( ) { function e ( ) { t || safeConfirm ( { type : "WEBOGRAM_UPDATED_RELOAD" , message : "A new version of Webogram is downloaded. Launch it?" } , function ( e ) { e ? window . location . reload ( ) : t = ! 0 } ) } if ( window . safeConfirm = function ( e , t ) { "string" == typeof e && ( e = { message : e } ) ; var n = ! 1 ; try { n = confirm ( e . message ) } catch ( a ) { n = ! 0 } setTimeout ( function ( ) { t ( n ) } , 10 ) } , ( navigator . serviceWorker || window . applicationCache ) && ! Config . Modes . packed && window . addEventListener ) { var t = ! 1 ; if ( navigator . serviceWorker ) navigator . serviceWorker . register ( "service_worker.js" ) . then ( function ( t ) { console . log ( "Offline worker registered" ) , t . addEventListener ( "updatefound" , function ( ) { var t = this . installing ; t . addEventListener ( "statechange" , function ( ) { switch ( t . state ) { case "installed" : navigator . serviceWorker . controller &
} } ; return n . elem = e , n } function Ke ( e , t , n ) { n . call ( e , t ) } function Ye ( e , t , n ) { var a = t . relatedTarget ; a && ( a === e || Si . call ( e , a ) ) || n . call ( e , t ) } function Ze ( ) { this . $get = function ( ) { return c ( Ae , { hasClass : function ( e , t ) { return e . attr && ( e = e [ 0 ] ) , Ne ( e , t ) } , addClass : function ( e , t ) { return e . attr && ( e = e [ 0 ] ) , Ue ( e , t ) } , removeClass : function ( e , t ) { return e . attr && ( e = e [ 0 ] ) , Be ( e , t ) } } ) } } function Xe ( e , t ) { var n = e && e . $$hashKey ; if ( n ) return "function" == typeof n && ( n = e . $$hashKey ( ) ) , n ; var a = typeof e ; return n = "function" == a || "object" == a && null !== e ? e . $$hashKey = a + ":" + ( t || s ) ( ) : a + ":" + e } function Je ( e , t ) { if ( t ) { var n = 0 ; this . nextUid = function ( ) { return ++ n } } a ( e , this . put , this ) } function Qe ( e ) { return Function . prototype . toString . call ( e ) + " " } function et ( e ) { var t = Qe ( e ) . replace ( Fi , "" ) , n = t . match ( Ti ) || t . match ( Di ) ; return n } function tt ( e ) { var t = et ( e ) ; return t ? "function(" + ( t [ 1 ] || "" ) . replace ( /[\s\r\n]+/ , " " ) + ")" : "fn" } function nt ( e , t , n ) { var i , o , s ; if ( "function" == typeof e ) { if ( ! ( i = e . $inject ) ) { if ( i = [ ] , e . length ) { if ( t ) throw w ( n ) && n || ( n = e . name || tt ( e ) ) , Ni ( "strictdi" , "{0} is not using explicit annotation and cannot be invoked in strict mode" , n ) ; o = et ( e ) , a ( o [ 1 ] . split ( Pi ) , function ( e ) { e . replace ( Ri , function ( e , t , n ) { i . push ( n ) } ) } ) } e . $inject = i } } else Ya ( e ) ? ( s = e . length - 1 , de ( e [ s ] , "fn" ) , i = e . slice ( 0 , s ) ) : de ( e , "fn" , ! 0 ) ; return i } function at ( e , t ) { function n ( e ) { return function ( t , n ) { return y ( t ) ? void a ( t , o ( e ) ) : e ( t , n ) } } function i ( e , t ) { if ( pe ( e , "service" ) , ( C ( t ) || Ya ( t ) ) && ( t = $ . instantiate ( t ) ) , ! t . $get ) throw Ni ( "pget" , "Provider '{0}' must define $get factory method." , e ) ; return k [ e + f ] = t } function s ( e , t ) { return function ( ) { var n = x . invoke ( t , this ) ; if ( _ ( n ) ) throw Ni ( "undef" , "Provider '{0}' must return a value from $get factory method." , e ) ; return n } } function r ( e , t , n ) { return i ( e , { $get : n !== ! 1 ? s ( e , t ) : t } ) } function l ( e , t ) { return r ( e , [ "$injector" , function ( e ) { return e . instantiate ( t ) } ] ) } function c ( e , t ) { return r ( e , h ( t ) , ! 1 ) } function d ( e , t ) { pe ( e , "constant" ) , k [ e ] = t , S [ e ] = t } function p ( e , t ) { var n = $ . get ( e + f ) , a = n . $get ; n . $get = function ( ) { var e = x . invoke ( a , n ) ; return x . invoke ( t , null , { $delegate : e } ) } } function u ( e ) { ce ( _ ( e ) || Ya ( e ) , "modulesToLoad" , "not an array" ) ; var t , n = [ ] ; return a ( e , function ( e ) { function a ( e ) { var t , n ; for ( t = 0 , n = e . length ; t < n ; t ++ ) { var a = e [ t ] , i = $ . get ( a [ 0 ] ) ; i [ a [ 1 ] ] . apply ( i , a [ 2 ] ) } } if ( ! b . get ( e ) ) { b . put ( e , ! 0 ) ; try { w ( e ) ? ( t = La ( e ) , n = n . concat ( u ( t . requires ) ) . concat ( t . _runBlocks ) , a ( t . _invokeQueue ) , a ( t . _configBlocks ) ) : C ( e ) ? n . push ( $ . invoke ( e ) ) : Ya ( e ) ? n . push ( $ . invoke ( e ) ) : de ( e , "module" ) } catch ( i ) { throw Ya ( e ) && ( e = e [ e . length - 1 ] ) , i . message && i . stack && i . stack . indexOf ( i . message ) == - 1 && ( i = i . message + "\n" + i . stack ) , Ni ( "modulerr" , "Failed to instantiate module {0} due to:\n{1}" , e , i . stack || i . message || i ) } } } ) , n } function m ( e , n ) { function a ( t , a ) { if ( e . hasOwnProperty ( t ) ) { if ( e [ t ] === g ) throw Ni ( "cdep" , "Circular dependency found: {0}" , t + " <- " + v . join ( " <- " ) ) ; return e [ t ] } try { return v . unshift ( t ) , e [ t ] = g , e [ t ] = n ( t , a ) } catch ( i ) { throw e [ t ] === g && delete e [ t ] , i } finally { v . shift ( ) } } function i ( e , n , i ) { for ( var o = [ ] , s = at . $$annotate ( e , t , i ) , r = 0 , l = s . length ; r < l ; r ++ ) { var c = s [ r ] ; if ( "string" != typeof c ) throw Ni ( "itkn" , "Incorrect injection token! Expected service name as string, got {0}" , c ) ; o . push ( n && n . hasOwnProperty ( c ) ? n [ c ] : a ( c , i ) ) } return o } function o ( e ) { return ! ( Ba <= 11 ) && ( "function" == typeof e && /^(?:class\s|constructor\()/ . test ( Qe ( e ) ) ) } function s ( e , t , n , a ) { "string" == typeof n && ( a = n , n = null ) ; var s = i ( e , n , a ) ; return Ya ( e ) && ( e = e [ e . length - 1 ] ) , o ( e ) ? ( s . unshift ( null ) , new ( Function . prototype . bind . apply ( e , s ) ) ) : e . apply ( t , s ) } function r ( e , t , n ) { var a = Ya ( e ) ? e [ e . length - 1 ] : e , o = i ( e , t , n ) ; return o . unshift ( null ) , new ( Function . prototype . bind . apply ( a , o ) ) } return { invoke : s , instantiate : r , get : a , annotate : at . $$annotate , has : function ( t ) { return k . hasOwnProperty ( t + f ) || e . hasOwnProperty ( t ) } } } t = t === ! 0 ; var g = { } , f = "Provider" , v = [ ] , b = new Je ( [ ] , ( ! 0 ) ) , k = { $provide : { provider : n ( i ) , factory : n ( r ) , service : n ( l ) , value : n ( c ) , constant : n ( d ) , decorator : p } } , $ = k . $injector = m ( k , function ( e , t ) { throw Ga . isString ( t ) && v . push ( t ) , Ni ( "unpr" , "Unknown provider: {0}" , v . join ( " <- " ) ) } ) , S = { } , M = m ( S , function ( e , t ) { var n = $ . get ( e + f , t ) ; return x . invoke ( n . $get , n , void 0 , e ) } ) , x = M ; k [ "$injector" + f ] = { $get : h ( M ) } ; var I = u ( e ) ; return x = M . get ( "$injector" ) , x . strictDi = t , a ( I , function ( e ) { e && x . invoke ( e ) } ) , x } function it (
var l = c ( { method : "get" , transformRequest : e . transformRequest , transformResponse : e . transformResponse , paramSerializer : e . paramSerializer } , n ) ; l . headers = r ( n ) , l . method = Ra ( l . method ) , l . paramSerializer = w ( l . paramSerializer ) ? u . get ( l . paramSerializer ) : l . paramSerializer ; var d = function ( t ) { var n = t . headers , i = Et ( t . data , At ( n ) , void 0 , t . transformRequest ) ; return _ ( i ) && a ( n , function ( e , t ) { "content-type" === Pa ( t ) && delete n [ t ] } ) , _ ( t . withCredentials ) && ! _ ( e . withCredentials ) && ( t . withCredentials = e . withCredentials ) , f ( t , i ) . then ( o , o ) } , m = [ d , void 0 ] , g = p . when ( l ) ; for ( a ( $ , function ( e ) { ( e . request || e . requestError ) && m . unshift ( e . request , e . requestError ) , ( e . response || e . responseError ) && m . push ( e . response , e . responseError ) } ) ; m . length ; ) { var h = m . shift ( ) , v = m . shift ( ) ; g = g . then ( h , v ) } return i ? ( g . success = function ( e ) { return de ( e , "fn" ) , g . then ( function ( t ) { e ( t . data , t . status , t . headers , l ) } ) , g } , g . error = function ( e ) { return de ( e , "fn" ) , g . then ( null , function ( t ) { e ( t . data , t . status , t . headers , l ) } ) , g } ) : ( g . success = io ( "success" ) , g . error = io ( "error" ) ) , g } function g ( e ) { a ( arguments , function ( e ) { m [ e ] = function ( t , n ) { return m ( c ( { } , n || { } , { method : e , url : t } ) ) } } ) } function h ( e ) { a ( arguments , function ( e ) { m [ e ] = function ( t , n , a ) { return m ( c ( { } , a || { } , { method : e , url : t , data : n } ) ) } } ) } function f ( t , i ) { function o ( e ) { if ( e ) { var t = { } ; return a ( e , function ( e , a ) { t [ a ] = function ( t ) { function a ( ) { e ( t ) } n ? d . $applyAsync ( a ) : d . $$phase ? a ( ) : d . $apply ( a ) } } ) , t } } function l ( e , t , a , i ) { function o ( ) { c ( t , e , a , i ) } h && ( Tt ( e ) ? h . put ( S , [ e , t , It ( a ) , i ] ) : h . remove ( S ) ) , n ? d . $applyAsync ( o ) : ( o ( ) , d . $$phase || d . $apply ( ) ) } function c ( e , n , a , i ) { n = n >= - 1 ? n : 0 , ( Tt ( n ) ? w . resolve : w . reject ) ( { data : e , status : n , headers : At ( a ) , config : t , statusText : i } ) } function u ( e ) { c ( e . data , e . status , fe ( e . headers ( ) ) , e . statusText ) } function g ( ) { var e = m . pendingRequests . indexOf ( t ) ; e !== - 1 && m . pendingRequests . splice ( e , 1 ) } var h , f , w = p . defer ( ) , $ = w . promise , C = t . headers , S = b ( t . url , t . paramSerializer ( t . params ) ) ; if ( m . pendingRequests . push ( t ) , $ . then ( g , g ) , ! t . cache && ! e . cache || t . cache === ! 1 || "GET" !== t . method && "JSONP" !== t . method || ( h = y ( t . cache ) ? t . cache : y ( e . cache ) ? e . cache : k ) , h && ( f = h . get ( S ) , v ( f ) ? D ( f ) ? f . then ( u , u ) : Ya ( f ) ? c ( f [ 1 ] , f [ 0 ] , fe ( f [ 2 ] ) , f [ 3 ] ) : c ( f , 200 , { } , "OK" ) : h . put ( S , $ ) ) , _ ( f ) ) { var M = Fn ( t . url ) ? r ( ) [ t . xsrfCookieName || e . xsrfCookieName ] : void 0 ; M && ( C [ t . xsrfHeaderName || e . xsrfHeaderName ] = M ) , s ( t . method , S , i , l , C , t . timeout , t . withCredentials , t . responseType , o ( t . eventHandlers ) , o ( t . uploadEventHandlers ) ) } return $ } function b ( e , t ) { return t . length > 0 && ( e += ( e . indexOf ( "?" ) == - 1 ? "?" : "&" ) + t ) , e } var k = l ( "$http" ) ; e . paramSerializer = w ( e . paramSerializer ) ? u . get ( e . paramSerializer ) : e . paramSerializer ; var $ = [ ] ; return a ( o , function ( e ) { $ . unshift ( w ( e ) ? u . get ( e ) : u . invoke ( e ) ) } ) , m . pendingRequests = [ ] , g ( "get" , "delete" , "head" , "jsonp" ) , h ( "post" , "put" , "patch" ) , m . defaults = e , m } ] } function Pt ( ) { this . $get = function ( ) { return function ( ) { return new e . XMLHttpRequest } } } function Rt ( ) { this . $get = [ "$browser" , "$window" , "$document" , "$xhrFactory" , function ( e , t , n , a ) { return Ft ( e , a , e . defer , t . angular . callbacks , n [ 0 ] ) } ] } function Ft ( e , t , n , i , o ) { function s ( e , t , n ) { var a = o . createElement ( "script" ) , s = null ; return a . type = "text/javascript" , a . src = e , a . async = ! 0 , s = function ( e ) { hi ( a , "load" , s ) , hi ( a , "error" , s ) , o . body . removeChild ( a ) , a = null ; var r = - 1 , l = "unknown" ; e && ( "load" !== e . type || i [ t ] . called || ( e = { type : "error" } ) , l = e . type , r = "error" === e . type ? 404 : 200 ) , n && n ( r , l ) } , gi ( a , "load" , s ) , gi ( a , "error" , s ) , o . body . appendChild ( a ) , s } return function ( o , r , l , c , d , p , u , g , h , f ) { function y ( ) { k && k ( ) , $ && $ . abort ( ) } function b ( t , a , i , o , s ) { v ( M ) && n . cancel ( M ) , k = $ = null , t ( a , i , o , s ) , e . $$completeOutstandingRequest ( m ) } if ( e . $$incOutstandingRequestCount ( ) , r = r || e . url ( ) , "jsonp" == Pa ( o ) ) { var w = "_" + ( i . counter ++ ) . toString ( 36 ) ; i [ w ] = function ( e ) { i [ w ] . data = e , i [ w ] . called = ! 0 } ; var k = s ( r . replace ( "JSON_CALLBACK" , "angular.callbacks." + w ) , w , function ( e , t ) { b ( c , e , i [ w ] . data , "" , t ) , i [ w ] = m } ) } else { var $ = t ( o , r ) ; $ . open ( o , r , ! 0 ) , a ( d , function ( e , t ) { v ( e ) && $ . setRequestHeader ( t , e ) } ) , $ . onload = function ( ) { var e = $ . statusText || "" , t = "response" in $ ? $ . response : $ . responseText , n = 1223 === $ . status ? 204 : $ . status ; 0 === n && ( n = t ? 200 : "file" == Rn ( r ) . protocol ? 404 : 0 ) , b ( c , n , t , $ . getAllResponseHeaders ( ) , e ) } ; var C = function ( ) { b ( c , - 1 , null , null , "" ) } ; if ( $ . onerror = C , $ . onabort = C , a ( h , function ( e , t ) { $ . addEventListener ( t , e ) } ) , a ( f , function ( e , t ) { $ . upload
var n , a , i = { } , o = e . chrome && e . chrome . app && e . chrome . app . runtime , s = ! o && e . history && e . history . pushState , r = p ( ( /android (\d+)/ . exec ( Pa ( ( e . navigator || { } ) . userAgent ) ) || [ ] ) [ 1 ] ) , l = /Boxee/i . test ( ( e . navigator || { } ) . userAgent ) , c = t [ 0 ] || { } , d = /^(Moz|webkit|ms)(?=[A-Z])/ , u = c . body && c . body . style , m = ! 1 , g = ! 1 ; if ( u ) { for ( var h in u ) if ( a = d . exec ( h ) ) { n = a [ 0 ] , n = n [ 0 ] . toUpperCase ( ) + n . substr ( 1 ) ; break } n || ( n = "WebkitOpacity" in u && "webkit" ) , m = ! ! ( "transition" in u || n + "Transition" in u ) , g = ! ! ( "animation" in u || n + "Animation" in u ) , ! r || m && g || ( m = w ( u . webkitTransition ) , g = w ( u . webkitAnimation ) ) } return { history : ! ( ! s || r < 4 || l ) , hasEvent : function ( e ) { if ( "input" === e && Ba <= 11 ) return ! 1 ; if ( _ ( i [ e ] ) ) { var t = c . createElement ( "div" ) ; i [ e ] = "on" + e in t } return i [ e ] } , csp : Qa ( ) , vendorPrefix : n , transitions : m , animations : g , android : r } } ] } function Tn ( ) { var e ; this . httpOptions = function ( t ) { return t ? ( e = t , this ) : e } , this . $get = [ "$templateCache" , "$http" , "$q" , "$sce" , function ( t , n , a , i ) { function o ( s , r ) { function l ( e ) { if ( ! r ) throw $o ( "tpload" , "Failed to load template: {0} (HTTP status: {1} {2})" , s , e . status , e . statusText ) ; return a . reject ( e ) } o . totalPendingRequests ++ , w ( s ) && ! _ ( t . get ( s ) ) || ( s = i . getTrustedResourceUrl ( s ) ) ; var d = n . defaults && n . defaults . transformResponse ; return Ya ( d ) ? d = d . filter ( function ( e ) { return e !== Mt } ) : d === Mt && ( d = null ) , n . get ( s , c ( { cache : t , transformResponse : d } , e ) ) [ "finally" ] ( function ( ) { o . totalPendingRequests -- } ) . then ( function ( e ) { return t . put ( s , e . data ) , e . data } , l ) } return o . totalPendingRequests = 0 , o } ] } function Dn ( ) { this . $get = [ "$rootScope" , "$browser" , "$location" , function ( e , t , n ) { var i = { } ; return i . findBindings = function ( e , t , n ) { var i = e . getElementsByClassName ( "ng-binding" ) , o = [ ] ; return a ( i , function ( e ) { var i = Ga . element ( e ) . data ( "$binding" ) ; i && a ( i , function ( a ) { if ( n ) { var i = new RegExp ( "(^|\\s)" + Ja ( t ) + "(\\s|\\||$)" ) ; i . test ( a ) && o . push ( e ) } else a . indexOf ( t ) != - 1 && o . push ( e ) } ) } ) , o } , i . findModels = function ( e , t , n ) { for ( var a = [ "ng-" , "data-ng-" , "ng\\:" ] , i = 0 ; i < a . length ; ++ i ) { var o = n ? "=" : "*=" , s = "[" + a [ i ] + "model" + o + '"' + t + '"]' , r = e . querySelectorAll ( s ) ; if ( r . length ) return r } } , i . getLocation = function ( ) { return n . url ( ) } , i . setLocation = function ( t ) { t !== n . url ( ) && ( n . url ( t ) , e . $digest ( ) ) } , i . whenStable = function ( e ) { t . notifyWhenNoOutstandingRequests ( e ) } , i } ] } function Pn ( ) { this . $get = [ "$rootScope" , "$browser" , "$q" , "$$q" , "$exceptionHandler" , function ( e , t , n , a , i ) { function o ( o , r , l ) { C ( o ) || ( l = r , r = o , o = m ) ; var c , d = H ( arguments , 3 ) , p = v ( l ) && ! l , u = ( p ? a : n ) . defer ( ) , g = u . promise ; return c = t . defer ( function ( ) { try { u . resolve ( o . apply ( null , d ) ) } catch ( t ) { u . reject ( t ) , i ( t ) } finally { delete s [ g . $$timeoutId ] } p || e . $apply ( ) } , r ) , g . $$timeoutId = c , s [ c ] = u , g } var s = { } ; return o . cancel = function ( e ) { return ! ! ( e && e . $$timeoutId in s ) && ( s [ e . $$timeoutId ] . reject ( "canceled" ) , delete s [ e . $$timeoutId ] , t . defer . cancel ( e . $$timeoutId ) ) } , o } ] } function Rn ( e ) { var t = e ; return Ba && ( Co . setAttribute ( "href" , t ) , t = Co . href ) , Co . setAttribute ( "href" , t ) , { href : Co . href , protocol : Co . protocol ? Co . protocol . replace ( /:$/ , "" ) : "" , host : Co . host , search : Co . search ? Co . search . replace ( /^\?/ , "" ) : "" , hash : Co . hash ? Co . hash . replace ( /^#/ , "" ) : "" , hostname : Co . hostname , port : Co . port , pathname : "/" === Co . pathname . charAt ( 0 ) ? Co . pathname : "/" + Co . pathname } } function Fn ( e ) { var t = w ( e ) ? Rn ( e ) : e ; return t . protocol === So . protocol && t . host === So . host } function Nn ( ) { this . $get = h ( e ) } function Bn ( e ) { function t ( e ) { try { return decodeURIComponent ( e ) } catch ( t ) { return e } } var n = e [ 0 ] || { } , a = { } , i = "" ; return function ( ) { var e , o , s , r , l , c = n . cookie || "" ; if ( c !== i ) for ( i = c , e = i . split ( "; " ) , a = { } , s = 0 ; s < e . length ; s ++ ) o = e [ s ] , r = o . indexOf ( "=" ) , r > 0 && ( l = t ( o . substring ( 0 , r ) ) , _ ( a [ l ] ) && ( a [ l ] = t ( o . substring ( r + 1 ) ) ) ) ; return a } } function Un ( ) { this . $get = Bn } function On ( e ) { function t ( i , o ) { if ( y ( i ) ) { var s = { } ; return a ( i , function ( e , n ) { s [ n ] = t ( n , e ) } ) , s } return e . factory ( i + n , o ) } var n = "Filter" ; this . register = t , this . $get = [ "$injector" , function ( e ) { return function ( t ) { return e . get ( t + n ) } } ] , t ( "currency" , Vn ) , t ( "date" , oa ) , t ( "filter" , Ln ) , t ( "json" , sa ) , t ( "limitTo" , ra ) , t ( "lowercase" , Do ) , t ( "number" , zn ) , t ( "orderBy" , ca ) , t ( "uppercase" , Po ) } function Ln ( ) { return function ( e , a , i ) { if ( ! n ( e ) ) { if ( null == e ) return e ; throw t ( "filter" ) ( "notarray" , "Expected array but received: {0}" , e ) } var o , s , r = qn ( a ) ; switch ( r ) { case "function" : o = a ; break ; case "boolean" : case "null" : case "number" : case "string" : s = ! 0 ; c
var t = so . exec ( e ) ; return ( t [ 1 ] || "" === e ) && this . path ( decodeURIComponent ( t [ 1 ] ) ) , ( t [ 2 ] || t [ 1 ] || "" === e ) && this . search ( t [ 3 ] || "" ) , this . hash ( t [ 5 ] || "" ) , this } , protocol : Zt ( "$$protocol" ) , host : Zt ( "$$host" ) , port : Zt ( "$$port" ) , path : Xt ( "$$path" , function ( e ) { return e = null !== e ? e . toString ( ) : "" , "/" == e . charAt ( 0 ) ? e : "/" + e } ) , search : function ( e , t ) { switch ( arguments . length ) { case 0 : return this . $$search ; case 1 : if ( w ( e ) || k ( e ) ) e = e . toString ( ) , this . $$search = J ( e ) ; else { if ( ! y ( e ) ) throw lo ( "isrcharg" , "The first argument of the `$location#search()` call must be a string or an object." ) ; e = O ( e , { } ) , a ( e , function ( t , n ) { null == t && delete e [ n ] } ) , this . $$search = e } break ; default : _ ( t ) || null === t ? delete this . $$search [ e ] : this . $$search [ e ] = t } return this . $$compose ( ) , this } , hash : Xt ( "$$hash" , function ( e ) { return null !== e ? e . toString ( ) : "" } ) , replace : function ( ) { return this . $$replace = ! 0 , this } } ; a ( [ Yt , Kt , Gt ] , function ( e ) { e . prototype = Object . create ( co ) , e . prototype . state = function ( t ) { if ( ! arguments . length ) return this . $$state ; if ( e !== Gt || ! this . $$html5 ) throw lo ( "nostate" , "History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API" ) ; return this . $$state = _ ( t ) ? null : t , this } } ) ; var po = t ( "$parse" ) , uo = Function . prototype . call , mo = Function . prototype . apply , go = Function . prototype . bind , ho = ge ( ) ; a ( "+ - * / % === !== == != < > <= >= && || ! = |" . split ( " " ) , function ( e ) { ho [ e ] = ! 0 } ) ; var fo = { n : "\n" , f : "\f" , r : "\r" , t : "\t" , v : "\x0B" , "'" : "'" , '"' : '"' } , _o = function ( e ) { this . options = e } ; _o . prototype = { constructor : _o , lex : function ( e ) { for ( this . text = e , this . index = 0 , this . tokens = [ ] ; this . index < this . text . length ; ) { var t = this . text . charAt ( this . index ) ; if ( '"' === t || "'" === t ) this . readString ( t ) ; else if ( this . isNumber ( t ) || "." === t && this . isNumber ( this . peek ( ) ) ) this . readNumber ( ) ; else if ( this . isIdentifierStart ( this . peekMultichar ( ) ) ) this . readIdent ( ) ; else if ( this . is ( t , "(){}[].,;:?" ) ) this . tokens . push ( { index : this . index , text : t } ) , this . index ++ ; else if ( this . isWhitespace ( t ) ) this . index ++ ; else { var n = t + this . peek ( ) , a = n + this . peek ( 2 ) , i = ho [ t ] , o = ho [ n ] , s = ho [ a ] ; if ( i || o || s ) { var r = s ? a : o ? n : t ; this . tokens . push ( { index : this . index , text : r , operator : ! 0 } ) , this . index += r . length } else this . throwError ( "Unexpected next character " , this . index , this . index + 1 ) } } return this . tokens } , is : function ( e , t ) { return t . indexOf ( e ) !== - 1 } , peek : function ( e ) { var t = e || 1 ; return this . index + t < this . text . length && this . text . charAt ( this . index + t ) } , isNumber : function ( e ) { return "0" <= e && e <= "9" && "string" == typeof e } , isWhitespace : function ( e ) { return " " === e || "\r" === e || "\t" === e || "\n" === e || "\x0B" === e || " " === e } , isIdentifierStart : function ( e ) { return this . options . isIdentifierStart ? this . options . isIdentifierStart ( e , this . codePointAt ( e ) ) : this . isValidIdentifierStart ( e ) } , isValidIdentifierStart : function ( e ) { return "a" <= e && e <= "z" || "A" <= e && e <= "Z" || "_" === e || "$" === e } , isIdentifierContinue : function ( e ) { return this . options . isIdentifierContinue ? this . options . isIdentifierContinue ( e , this . codePointAt ( e ) ) : this . isValidIdentifierContinue ( e ) } , isValidIdentifierContinue : function ( e , t ) { return this . isValidIdentifierStart ( e , t ) || this . isNumber ( e ) } , codePointAt : function ( e ) { return 1 === e . length ? e . charCodeAt ( 0 ) : ( e . charCodeAt ( 0 ) << 10 ) + e . charCodeAt ( 1 ) - 56613888 } , peekMultichar : function ( ) { var e = this . text . charAt ( this . index ) , t = this . peek ( ) ; if ( ! t ) return e ; var n = e . charCodeAt ( 0 ) , a = t . charCodeAt ( 0 ) ; return n >= 55296 && n <= 56319 && a >= 56320 && a <= 57343 ? e + t : e } , isExpOperator : function ( e ) { return "-" === e || "+" === e || this . isNumber ( e ) } , throwError : function ( e , t , n ) { n = n || this . index ; var a = v ( t ) ? "s " + t + "-" + this . index + " [" + this . text . substring ( t , n ) + "]" : " " + n ; throw po ( "lexerr" , "Lexer Error: {0} at column{1} in expression [{2}]." , e , a , this . text ) } , readNumber : function ( ) { for ( var e = "" , t = this . index ; this . index < this . text . length ; ) { var n = Pa ( this . text . charAt ( this . index ) ) ; if ( "." == n || this . isNumber ( n ) ) e += n ; else { var a = this . peek ( ) ; if ( "e" == n && this . isExpOperator ( a ) ) e += n ; else if ( this . isExpOperator ( n ) && a && this . isNumber ( a ) && "e" == e . charAt ( e . length - 1 ) ) e += n ; else { if ( ! this . isExpOperator ( n ) || a && this . isNumber ( a ) || "e" != e . charAt ( e . length - 1 ) ) break ; this . throwError ( "Invalid exponent" ) } } this . index ++ } this . tokens . push ( { index : t , text : e , constant : ! 0 , value : Number ( e ) } ) } , readIdent : function ( ) { var e = this . index ; for ( this . index += thi
return { multiElement : ! 0 , transclude : "element" , priority : 600 , terminal : ! 0 , restrict : "A" , $$tlb : ! 0 , link : function ( n , a , i , o , s ) { var r , l , c ; n . $watch ( i . ngIf , function ( n ) { n ? l || s ( function ( n , o ) { l = o , n [ n . length ++ ] = t . $$createComment ( "end ngIf" , i . ngIf ) , r = { clone : n } , e . enter ( n , a . parent ( ) , a ) } ) : ( c && ( c . remove ( ) , c = null ) , l && ( l . $destroy ( ) , l = null ) , r && ( c = me ( r . clone ) , e . leave ( c ) . then ( function ( ) { c = null } ) , r = null ) ) } ) } } } ] , gs = [ "$templateRequest" , "$anchorScroll" , "$animate" , function ( e , t , n ) { return { restrict : "ECA" , priority : 400 , terminal : ! 0 , transclude : "element" , controller : Ga . noop , compile : function ( a , i ) { var o = i . ngInclude || i . src , s = i . onload || "" , r = i . autoscroll ; return function ( a , i , l , c , d ) { var p , u , m , g = 0 , h = function ( ) { u && ( u . remove ( ) , u = null ) , p && ( p . $destroy ( ) , p = null ) , m && ( n . leave ( m ) . then ( function ( ) { u = null } ) , u = m , m = null ) } ; a . $watch ( o , function ( o ) { var l = function ( ) { ! v ( r ) || r && ! a . $eval ( r ) || t ( ) } , u = ++ g ; o ? ( e ( o , ! 0 ) . then ( function ( e ) { if ( ! a . $$destroyed && u === g ) { var t = a . $new ( ) ; c . template = e ; var r = d ( t , function ( e ) { h ( ) , n . enter ( e , null , i ) . then ( l ) } ) ; p = t , m = r , p . $emit ( "$includeContentLoaded" , o ) , a . $eval ( s ) } } , function ( ) { a . $$destroyed || u === g && ( h ( ) , a . $emit ( "$includeContentError" , o ) ) } ) , a . $emit ( "$includeContentRequested" , o ) ) : ( h ( ) , c . template = null ) } ) } } } } ] , hs = [ "$compile" , function ( t ) { return { restrict : "ECA" , priority : - 400 , require : "ngInclude" , link : function ( n , a , i , o ) { return Va . call ( a [ 0 ] ) . match ( /SVG/ ) ? ( a . empty ( ) , void t ( Me ( o . template , e . document ) . childNodes ) ( n , function ( e ) { a . append ( e ) } , { futureParentElement : a } ) ) : ( a . html ( o . template ) , void t ( a . contents ( ) ) ( n ) ) } } } ] , fs = da ( { priority : 450 , compile : function ( ) { return { pre : function ( e , t , n ) { e . $eval ( n . ngInit ) } } } } ) , _s = function ( ) { return { restrict : "A" , priority : 100 , require : "ngModel" , link : function ( e , t , n , i ) { var o = t . attr ( n . $attr . ngList ) || ", " , s = "false" !== n . ngTrim , r = s ? Xa ( o ) : o , l = function ( e ) { if ( ! _ ( e ) ) { var t = [ ] ; return e && a ( e . split ( r ) , function ( e ) { e && t . push ( s ? Xa ( e ) : e ) } ) , t } } ; i . $parsers . push ( l ) , i . $formatters . push ( function ( e ) { if ( Ya ( e ) ) return e . join ( o ) } ) , i . $isEmpty = function ( e ) { return ! e || ! e . length } } } } , vs = "ng-valid" , ys = "ng-invalid" , bs = "ng-pristine" , ws = "ng-dirty" , ks = "ng-untouched" , $s = "ng-touched" , Cs = "ng-pending" , Ss = "ng-empty" , Ms = "ng-not-empty" , xs = t ( "ngModel" ) , Is = [ "$scope" , "$exceptionHandler" , "$attrs" , "$element" , "$parse" , "$animate" , "$timeout" , "$rootScope" , "$q" , "$interpolate" , function ( e , t , n , i , o , s , r , l , c , d ) { this . $viewValue = Number . NaN , this . $modelValue = Number . NaN , this . $$rawModelValue = void 0 , this . $validators = { } , this . $asyncValidators = { } , this . $parsers = [ ] , this . $formatters = [ ] , this . $viewChangeListeners = [ ] , this . $untouched = ! 0 , this . $touched = ! 1 , this . $pristine = ! 0 , this . $dirty = ! 1 , this . $valid = ! 0 , this . $invalid = ! 1 , this . $error = { } , this . $$success = { } , this . $pending = void 0 , this . $name = d ( n . name || "" , ! 1 ) ( e ) , this . $$parentForm = No ; var p , u = o ( n . ngModel ) , g = u . assign , h = u , f = g , y = null , b = this ; this . $$setOptions = function ( e ) { if ( b . $options = e , e && e . getterSetter ) { var t = o ( n . ngModel + "()" ) , a = o ( n . ngModel + "($$$p)" ) ; h = function ( e ) { var n = u ( e ) ; return C ( n ) && ( n = t ( e ) ) , n } , f = function ( e , t ) { C ( u ( e ) ) ? a ( e , { $$$p : t } ) : g ( e , t ) } } else if ( ! u . assign ) throw xs ( "nonassign" , "Expression '{0}' is non-assignable. Element: {1}" , n . ngModel , Z ( i ) ) } , this . $render = m , this . $isEmpty = function ( e ) { return _ ( e ) || "" === e || null === e || e !== e } , this . $$updateEmptyClasses = function ( e ) { b . $isEmpty ( e ) ? ( s . removeClass ( i , Ms ) , s . addClass ( i , Ss ) ) : ( s . removeClass ( i , Ss ) , s . addClass ( i , Ms ) ) } ; var w = 0 ; xa ( { ctrl : this , $element : i , set : function ( e , t ) { e [ t ] = ! 0 } , unset : function ( e , t ) { delete e [ t ] } , $animate : s } ) , this . $setPristine = function ( ) { b . $dirty = ! 1 , b . $pristine = ! 0 , s . removeClass ( i , ws ) , s . addClass ( i , bs ) } , this . $setDirty = function ( ) { b . $dirty = ! 0 , b . $pristine = ! 1 , s . removeClass ( i , bs ) , s . addClass ( i , ws ) , b . $$parentForm . $setDirty ( ) } , this . $setUntouched = function ( ) { b . $touched = ! 1 , b . $untouched = ! 0 , s . setClass ( i , ks , $s ) } , this . $setTouched = function ( ) { b . $touched = ! 0 , b . $untouched = ! 1 , s . setClass ( i , $s , ks ) } , this . $rollbackViewValue = function ( ) { r . cancel ( y ) , b . $viewValue = b . $$lastCommittedViewValue , b . $render ( ) } , this . $validate = function ( ) { if ( ! k ( b . $modelValue ) || ! isNaN ( b . $modelValue ) ) { var e = b . $$lastCommittedViewValue , t = b . $$rawModelValue , n = b . $valid , a = b . $modelValue , i = b . $options && b . $options . allowInvalid ; b . $$runValidators ( t , e , function ( e ) { i || n === e || ( b . $modelValue = e ? t : void 0 , b . $modelValue !== a && b . $$write
transitionDuration : ge , transitionDelay : me , transitionProperty : P + oe , animationDuration : ue , animationDelay : pe , animationIterationCount : F + le } , $e = { transitionDuration : ge , transitionDelay : me , animationDuration : ue , animationDelay : pe } , Ce = [ "$animateProvider" , function ( e ) { var t = T ( ) , n = T ( ) ; this . $get = [ "$window" , "$$jqLite" , "$$AnimateRunner" , "$timeout" , "$$forceReflow" , "$sniffer" , "$$rAFScheduler" , "$$animateQueue" , function ( e , a , r , l , c , d , f , _ ) { function y ( e , t ) { var n = "$$ngAnimateParentKey" , a = e . parentNode , i = a [ n ] || ( a [ n ] = ++ L ) ; return i + "-" + e . getAttribute ( "class" ) + "-" + t } function b ( n , a , i , o ) { var s = t . get ( i ) ; return s || ( s = x ( e , n , o ) , "infinite" === s . animationIterationCount && ( s . animationIterationCount = 1 ) ) , t . put ( i , s ) , s } function C ( i , s , r , l ) { var c ; if ( t . count ( r ) > 0 && ( c = n . get ( r ) , ! c ) ) { var d = o ( s , "-stagger" ) ; a . addClass ( i , d ) , c = x ( e , i , l ) , c . animationDuration = Math . max ( c . animationDuration , 0 ) , c . transitionDuration = Math . max ( c . transitionDuration , 0 ) , a . removeClass ( i , d ) , n . put ( r , c ) } return c || { } } function I ( e ) { q . push ( e ) , f . waitUntilQuiet ( function ( ) { t . flush ( ) , n . flush ( ) ; for ( var e = c ( ) , a = 0 ; a < q . length ; a ++ ) q [ a ] ( e ) ; q . length = 0 } ) } function T ( e , t , n ) { var a = b ( e , t , n , ke ) , i = a . animationDelay , o = a . transitionDelay ; return a . maxDelay = i && o ? Math . max ( i , o ) : i || o , a . maxDuration = Math . max ( a . animationDuration * a . animationIterationCount , a . transitionDuration ) , a } var O = p ( a ) , L = 0 , q = [ ] ; return function ( e , n ) { function c ( ) { f ( ) } function p ( ) { f ( ! 0 ) } function f ( t ) { if ( ! ( G || Y && K ) ) { G = ! 0 , K = ! 1 , V . $$skipPreparationClasses || a . removeClass ( e , ke ) , a . removeClass ( e , Se ) , k ( W , ! 1 ) , w ( W , ! 1 ) , j ( ce , function ( e ) { W . style [ e [ 0 ] ] = "" } ) , O ( e , V ) , m ( e , V ) , Object . keys ( z ) . length && j ( z , function ( e , t ) { e ? W . style . setProperty ( t , e ) : W . style . removeProperty ( t ) } ) , V . onDone && V . onDone ( ) , me && me . length && e . off ( me . join ( " " ) , L ) ; var n = e . data ( ve ) ; n && ( l . cancel ( n [ 0 ] . timer ) , e . removeData ( ve ) ) , ee && ee . complete ( ! t ) } } function b ( e ) { Oe . blockTransition && w ( W , e ) , Oe . blockKeyframeAnimation && k ( W , ! ! e ) } function x ( ) { return ee = new r ( { end : c , cancel : p } ) , I ( B ) , f ( ) , { $$willAnimate : ! 1 , start : function ( ) { return ee } , end : c } } function L ( e ) { e . stopPropagation ( ) ; var t = e . originalEvent || e , n = t . $manualTimeStamp || Date . now ( ) , a = parseFloat ( t . elapsedTime . toFixed ( be ) ) ; Math . max ( n - le , 0 ) >= ae && a >= ie && ( Y = ! 0 , f ( ) ) } function q ( ) { function t ( ) { if ( ! G ) { if ( b ( ! 1 ) , j ( ce , function ( e ) { var t = e [ 0 ] , n = e [ 1 ] ; W . style [ t ] = n } ) , O ( e , V ) , a . addClass ( e , Se ) , Oe . recalculateTimingStyles ) { if ( Ce = W . className + " " + ke , Ie = y ( W , Ce ) , Be = T ( W , Ce , Ie ) , Ue = Be . maxDelay , ne = Math . max ( Ue , 0 ) , ie = Be . maxDuration , 0 === ie ) return void f ( ) ; Oe . hasTransitions = Be . transitionDuration > 0 , Oe . hasAnimations = Be . animationDuration > 0 } if ( Oe . applyAnimationDelay && ( Ue = "boolean" != typeof V . delay && A ( V . delay ) ? parseFloat ( V . delay ) : Ue , ne = Math . max ( Ue , 0 ) , Be . animationDelay = Ue , Le = M ( Ue , ! 0 ) , ce . push ( Le ) , W . style [ Le [ 0 ] ] = Le [ 1 ] ) , ae = ne * ye , se = ie * ye , V . easing ) { var t , i = V . easing ; Oe . hasTransitions && ( t = P + re , ce . push ( [ t , i ] ) , W . style [ t ] = i ) , Oe . hasAnimations && ( t = F + re , ce . push ( [ t , i ] ) , W . style [ t ] = i ) } Be . transitionDuration && me . push ( R ) , Be . animationDuration && me . push ( N ) , le = Date . now ( ) ; var o = ae + we * se , s = le + o , r = e . data ( ve ) || [ ] , c = ! 0 ; if ( r . length ) { var d = r [ 0 ] ; c = s > d . expectedEndTime , c ? l . cancel ( d . timer ) : r . push ( f ) } if ( c ) { var p = l ( n , o , ! 1 ) ; r [ 0 ] = { timer : p , expectedEndTime : s } , r . push ( f ) , e . data ( ve , r ) } me . length && e . on ( me . join ( " " ) , L ) , V . to && ( V . cleanupStyles && D ( z , W , Object . keys ( V . to ) ) , h ( e , V ) ) } } function n ( ) { var t = e . data ( ve ) ; if ( t ) { for ( var n = 1 ; n < t . length ; n ++ ) t [ n ] ( ) ; e . removeData ( ve ) } } if ( ! G ) { if ( ! W . parentNode ) return void f ( ) ; var i = function ( e ) { if ( Y ) K && e && ( K = ! 1 , f ( ) ) ; else if ( K = ! e , Be . animationDuration ) { var t = k ( W , K ) ; K ? ce . push ( t ) : s ( ce , t ) } } , o = Fe > 0 && ( Be . transitionDuration && 0 === Ae . transitionDuration || Be . animationDuration && 0 === Ae . animationDuration ) && Math . max ( Ae . animationDelay , Ae . transitionDelay ) ; o ? l ( t , Math . floor ( o * Fe * ye ) , ! 1 ) : t ( ) , te . resume = function ( ) { i ( ! 0 ) } , te . pause = function ( ) { i ( ! 1 ) } } } var V = n || { } ; V . $$prepared || ( V = u ( U ( V ) ) ) ; var z = { } , W = v ( e ) ; if ( ! W || ! W . parentNode || ! _ . enabled ( ) ) return x ( ) ; var G , K , Y , ee , te , ne , ae , ie , se , le , ce = [ ] , pe = e . attr ( "class" ) , ue = i ( V ) , me = [ ] ; if ( 0 === V . duration || ! d . animations && ! d . transitions ) return x ( ) ; var ge = V . event && H ( V . event ) ? V . event . join ( " " ) : V . event , he = ge && V . structural , fe = "" , _e = "" ; he ? fe = o ( ge , J , ! 0 ) : ge && ( fe = ge ) , V . addClass && ( _e += o ( V . addClass , Z ) ) , V . removeClass && ( _e . length && ( _e += " " ) , _e += o ( V . removeClass , X ) ) , V .
return l . isOpen } , l . getToggleElement = function ( ) { return r . toggleElement } , l . focusToggleElement = function ( ) { r . toggleElement && r . toggleElement [ 0 ] . focus ( ) } , l . $watch ( "isOpen" , function ( t , n ) { o [ t ? "addClass" : "removeClass" ] ( r . $element , c ) , t ? ( l . focusToggleElement ( ) , i . open ( l ) ) : i . close ( l ) , d ( e , t ) , angular . isDefined ( t ) && t !== n && p ( e , { open : ! ! t } ) } ) , e . $on ( "$locationChangeSuccess" , function ( ) { l . isOpen = ! 1 } ) , e . $on ( "$destroy" , function ( ) { l . $destroy ( ) } ) } ] ) . directive ( "dropdown" , function ( ) { return { controller : "DropdownController" , link : function ( e , t , n , a ) { a . init ( t ) } } } ) . directive ( "dropdownToggle" , function ( ) { return { require : "?^dropdown" , link : function ( e , t , n , a ) { if ( a ) { a . toggleElement = t ; var i = function ( i ) { i . preventDefault ( ) , t . hasClass ( "disabled" ) || n . disabled || e . $apply ( function ( ) { a . toggle ( ) } ) } ; t . bind ( "click" , i ) , t . attr ( { "aria-haspopup" : ! 0 , "aria-expanded" : ! 1 } ) , e . $watch ( a . isOpen , function ( e ) { t . attr ( "aria-expanded" , ! ! e ) } ) , e . $on ( "$destroy" , function ( ) { t . unbind ( "click" , i ) } ) } } } } ) , angular . module ( "ui.bootstrap.tooltip" , [ "ui.bootstrap.position" , "ui.bootstrap.bindHtml" ] ) . provider ( "$tooltip" , function ( ) { function e ( e ) { var t = /[A-Z]/g , n = "-" ; return e . replace ( t , function ( e , t ) { return ( t ? n : "" ) + e . toLowerCase ( ) } ) } var t = { placement : "top" , animation : ! 0 , popupDelay : 0 } , n = { mouseenter : "mouseleave" , click : "click" , focus : "blur" } , a = { } ; this . options = function ( e ) { angular . extend ( a , e ) } , this . setTriggers = function ( e ) { angular . extend ( n , e ) } , this . $get = [ "$window" , "$compile" , "$timeout" , "$document" , "$position" , "$interpolate" , function ( i , o , s , r , l , c ) { return function ( i , d , p ) { function u ( e ) { var t = e || m . trigger || p , a = n [ t ] || t ; return { show : t , hide : a } } var m = angular . extend ( { } , t , a ) , g = e ( i ) , h = c . startSymbol ( ) , f = c . endSymbol ( ) , _ = "<div " + g + '-popup title="' + h + "title" + f + '" content="' + h + "content" + f + '" placement="' + h + "placement" + f + '" animation="animation" is-open="isOpen"></div>' ; return { restrict : "EA" , compile : function ( e , t ) { var n = o ( _ ) ; return function ( e , t , a ) { function o ( ) { A . isOpen ? p ( ) : c ( ) } function c ( ) { I && ! e . $eval ( a [ d + "Enable" ] ) || ( v ( ) , A . popupDelay ? S || ( S = s ( g , A . popupDelay , ! 1 ) , S . then ( function ( e ) { e ( ) } ) ) : g ( ) ( ) ) } function p ( ) { e . $apply ( function ( ) { h ( ) } ) } function g ( ) { return S = null , C && ( s . cancel ( C ) , C = null ) , A . content ? ( f ( ) , k . css ( { top : 0 , left : 0 , display : "block" } ) , M ? r . find ( "body" ) . append ( k ) : t . after ( k ) , E ( ) , A . isOpen = ! 0 , A . $digest ( ) , E ) : angular . noop } function h ( ) { A . isOpen = ! 1 , s . cancel ( S ) , S = null , A . animation ? C || ( C = s ( _ , 500 ) ) : _ ( ) } function f ( ) { k && _ ( ) , $ = A . $new ( ) , k = n ( $ , angular . noop ) } function _ ( ) { C = null , k && ( k . remove ( ) , k = null ) , $ && ( $ . $destroy ( ) , $ = null ) } function v ( ) { y ( ) , b ( ) } function y ( ) { var e = a [ d + "Placement" ] ; A . placement = angular . isDefined ( e ) ? e : m . placement } function b ( ) { var e = a [ d + "PopupDelay" ] , t = parseInt ( e , 10 ) ; A . popupDelay = isNaN ( t ) ? m . popupDelay : t } function w ( ) { var e = a [ d + "Trigger" ] ; T ( ) , x = u ( e ) , x . show === x . hide ? t . bind ( x . show , o ) : ( t . bind ( x . show , c ) , t . bind ( x . hide , p ) ) } var k , $ , C , S , M = ! ! angular . isDefined ( m . appendToBody ) && m . appendToBody , x = u ( void 0 ) , I = angular . isDefined ( a [ d + "Enable" ] ) , A = e . $new ( ! 0 ) , E = function ( ) { var e = l . positionElements ( t , k , A . placement , M ) ; e . top += "px" , e . left += "px" , k . css ( e ) } ; A . isOpen = ! 1 , a . $observe ( i , function ( e ) { A . content = e , ! e && A . isOpen && h ( ) } ) , a . $observe ( d + "Title" , function ( e ) { A . title = e } ) ; var T = function ( ) { t . unbind ( x . show , c ) , t . unbind ( x . hide , p ) } ; w ( ) ; var D = e . $eval ( a [ d + "Animation" ] ) ; A . animation = angular . isDefined ( D ) ? ! ! D : m . animation ; var P = e . $eval ( a [ d + "AppendToBody" ] ) ; M = angular . isDefined ( P ) ? P : M , M && e . $on ( "$locationChangeSuccess" , function ( ) { A . isOpen && h ( ) } ) , e . $on ( "$destroy" , function ( ) { s . cancel ( C ) , s . cancel ( S ) , T ( ) , _ ( ) , A = null } ) } } } } } ] } ) . directive ( "tooltipPopup" , function ( ) { return { restrict : "EA" , replace : ! 0 , scope : { content : "@" , placement : "@" , animation : "&" , isOpen : "&" } , templateUrl : "template/tooltip/tooltip-popup.html" } } ) . directive ( "tooltip" , [ "$tooltip" , function ( e ) { return e ( "tooltip" , "tooltip" , "mouseenter" ) } ] ) . directive ( "tooltipHtmlUnsafePopup" , function ( ) { return { restrict : "EA" , replace : ! 0 , scope : { content : "@" , placement : "@" , animation : "&" , isOpen : "&" } , templateUrl : "template/tooltip/tooltip-html-unsafe-popup.html" } } ) . directive ( "tooltipHtmlUnsafe" , [ "$tooltip" , function ( e ) { return e ( "tooltipHtmlUnsafe" , "tooltip" , "mouseenter" ) } ] ) , angular . module ( "ui.bootstrap.position" , [ ] ) . factory ( "$position" , [ "$document" , "$window" , function ( e , t ) { funct
blockSize : e . blockSize , formatter : a . format } ) } , decrypt : function ( e , t , n , a ) { a = this . cfg . extend ( a ) , t = this . _parse ( t , a . format ) ; var i = e . createDecryptor ( n , a ) . finalize ( t . ciphertext ) ; return i } , _parse : function ( e , t ) { return "string" == typeof e ? t . parse ( e , this ) : e } } ) , b = t . kdf = { } , w = b . OpenSSL = { execute : function ( e , t , n , a ) { a || ( a = i . random ( 8 ) ) ; var o = c . create ( { keySize : t + n } ) . compute ( e , a ) , s = i . create ( o . words . slice ( t ) , 4 * n ) ; return o . sigBytes = 4 * t , f . create ( { key : o , iv : s , salt : a } ) } } , k = n . PasswordBasedCipher = y . extend ( { cfg : y . cfg . extend ( { kdf : w } ) , encrypt : function ( e , t , n , a ) { a = this . cfg . extend ( a ) ; var i = a . kdf . execute ( n , e . keySize , e . ivSize ) ; a . iv = i . iv ; var o = y . encrypt . call ( this , e , t , i . key , a ) ; return o . mixIn ( i ) , o } , decrypt : function ( e , t , n , a ) { a = this . cfg . extend ( a ) , t = this . _parse ( t , a . format ) ; var i = a . kdf . execute ( n , e . keySize , e . ivSize , t . salt ) ; a . iv = i . iv ; var o = y . decrypt . call ( this , e , t , i . key , a ) ; return o } } ) } ( ) , function ( ) { var e = CryptoJS , t = e . lib , n = t . BlockCipher , a = e . algo , i = [ ] , o = [ ] , s = [ ] , r = [ ] , l = [ ] , c = [ ] , d = [ ] , p = [ ] , u = [ ] , m = [ ] ; ! function ( ) { for ( var e = [ ] , t = 0 ; t < 256 ; t ++ ) t < 128 ? e [ t ] = t << 1 : e [ t ] = t << 1 ^ 283 ; for ( var n = 0 , a = 0 , t = 0 ; t < 256 ; t ++ ) { var g = a ^ a << 1 ^ a << 2 ^ a << 3 ^ a << 4 ; g = g >>> 8 ^ 255 & g ^ 99 , i [ n ] = g , o [ g ] = n ; var h = e [ n ] , f = e [ h ] , _ = e [ f ] , v = 257 * e [ g ] ^ 16843008 * g ; s [ n ] = v << 24 | v >>> 8 , r [ n ] = v << 16 | v >>> 16 , l [ n ] = v << 8 | v >>> 24 , c [ n ] = v ; var v = 16843009 * _ ^ 65537 * f ^ 257 * h ^ 16843008 * n ; d [ g ] = v << 24 | v >>> 8 , p [ g ] = v << 16 | v >>> 16 , u [ g ] = v << 8 | v >>> 24 , m [ g ] = v , n ? ( n = h ^ e [ e [ e [ _ ^ h ] ] ] , a ^= e [ e [ a ] ] ) : n = a = 1 } } ( ) ; var g = [ 0 , 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 27 , 54 ] , h = a . AES = n . extend ( { _doReset : function ( ) { for ( var e = this . _key , t = e . words , n = e . sigBytes / 4 , a = this . _nRounds = n + 6 , o = 4 * ( a + 1 ) , s = this . _keySchedule = [ ] , r = 0 ; r < o ; r ++ ) if ( r < n ) s [ r ] = t [ r ] ; else { var l = s [ r - 1 ] ; r % n ? n > 6 && r % n == 4 && ( l = i [ l >>> 24 ] << 24 | i [ l >>> 16 & 255 ] << 16 | i [ l >>> 8 & 255 ] << 8 | i [ 255 & l ] ) : ( l = l << 8 | l >>> 24 , l = i [ l >>> 24 ] << 24 | i [ l >>> 16 & 255 ] << 16 | i [ l >>> 8 & 255 ] << 8 | i [ 255 & l ] , l ^= g [ r / n | 0 ] << 24 ) , s [ r ] = s [ r - n ] ^ l } for ( var c = this . _invKeySchedule = [ ] , h = 0 ; h < o ; h ++ ) { var r = o - h ; if ( h % 4 ) var l = s [ r ] ; else var l = s [ r - 4 ] ; h < 4 || r <= 4 ? c [ h ] = l : c [ h ] = d [ i [ l >>> 24 ] ] ^ p [ i [ l >>> 16 & 255 ] ] ^ u [ i [ l >>> 8 & 255 ] ] ^ m [ i [ 255 & l ] ] } } , encryptBlock : function ( e , t ) { this . _doCryptBlock ( e , t , this . _keySchedule , s , r , l , c , i ) } , decryptBlock : function ( e , t ) { var n = e [ t + 1 ] ; e [ t + 1 ] = e [ t + 3 ] , e [ t + 3 ] = n , this . _doCryptBlock ( e , t , this . _invKeySchedule , d , p , u , m , o ) ; var n = e [ t + 1 ] ; e [ t + 1 ] = e [ t + 3 ] , e [ t + 3 ] = n } , _doCryptBlock : function ( e , t , n , a , i , o , s , r ) { for ( var l = this . _nRounds , c = e [ t ] ^ n [ 0 ] , d = e [ t + 1 ] ^ n [ 1 ] , p = e [ t + 2 ] ^ n [ 2 ] , u = e [ t + 3 ] ^ n [ 3 ] , m = 4 , g = 1 ; g < l ; g ++ ) { var h = a [ c >>> 24 ] ^ i [ d >>> 16 & 255 ] ^ o [ p >>> 8 & 255 ] ^ s [ 255 & u ] ^ n [ m ++ ] , f = a [ d >>> 24 ] ^ i [ p >>> 16 & 255 ] ^ o [ u >>> 8 & 255 ] ^ s [ 255 & c ] ^ n [ m ++ ] , _ = a [ p >>> 24 ] ^ i [ u >>> 16 & 255 ] ^ o [ c >>> 8 & 255 ] ^ s [ 255 & d ] ^ n [ m ++ ] , v = a [ u >>> 24 ] ^ i [ c >>> 16 & 255 ] ^ o [ d >>> 8 & 255 ] ^ s [ 255 & p ] ^ n [ m ++ ] ; c = h , d = f , p = _ , u = v } var h = ( r [ c >>> 24 ] << 24 | r [ d >>> 16 & 255 ] << 16 | r [ p >>> 8 & 255 ] << 8 | r [ 255 & u ] ) ^ n [ m ++ ] , f = ( r [ d >>> 24 ] << 24 | r [ p >>> 16 & 255 ] << 16 | r [ u >>> 8 & 255 ] << 8 | r [ 255 & c ] ) ^ n [ m ++ ] , _ = ( r [ p >>> 24 ] << 24 | r [ u >>> 16 & 255 ] << 16 | r [ c >>> 8 & 255 ] << 8 | r [ 255 & d ] ) ^ n [ m ++ ] , v = ( r [ u >>> 24 ] << 24 | r [ c >>> 16 & 255 ] << 16 | r [ d >>> 8 & 255 ] << 8 | r [ 255 & p ] ) ^ n [ m ++ ] ; e [ t ] = h , e [ t + 1 ] = f , e [ t + 2 ] = _ , e [ t + 3 ] = v } , keySize : 8 } ) ; e . AES = n . _createHelper ( h ) } ( ) , function ( e ) { var t = CryptoJS , n = t . lib , a = n . WordArray , i = n . Hasher , o = t . algo , s = [ ] , r = [ ] ; ! function ( ) { function t ( t ) { for ( var n = e . sqrt ( t ) , a = 2 ; a <= n ; a ++ ) if ( ! ( t % a ) ) return ! 1 ; return ! 0 } function n ( e ) { return 4294967296 * ( e - ( 0 | e ) ) | 0 } for ( var a = 2 , i = 0 ; i < 64 ; ) t ( a ) && ( i < 8 && ( s [ i ] = n ( e . pow ( a , . 5 ) ) ) , r [ i ] = n ( e . pow ( a , 1 / 3 ) ) , i ++ ) , a ++ } ( ) ; var l = [ ] , c = o . SHA256 = i . extend ( { _doReset : function ( ) { this . _hash = new a . init ( s . slice ( 0 ) ) } , _doProcessBlock : function ( e , t ) { for ( var n = this . _hash . words , a = n [ 0 ] , i = n [ 1 ] , o = n [ 2 ] , s = n [ 3 ] , c = n [ 4 ] , d = n [ 5 ] , p = n [ 6 ] , u = n [ 7 ] , m = 0 ; m < 64 ; m ++ ) { if ( m < 16 ) l [ m ] = 0 | e [ t + m ] ; else { var g = l [ m - 15 ] , h = ( g << 25 | g >>> 7 ) ^ ( g << 14 | g >>> 18 ) ^ g >>> 3 , f = l [ m - 2 ] , _ = ( f << 15 | f >>> 17 ) ^ ( f << 13 | f >>> 19 ) ^ f >>> 10 ; l [ m ] = h + l [ m - 7 ] + _ + l [ m - 16 ] } var v = c & d ^ ~ c & p , y = a & i ^ a & o ^ i & o , b = ( a << 30 | a >>> 2 ) ^ ( a << 19 | a >>> 13 ) ^ ( a << 10 | a >>> 22 ) , w = ( c << 26 | c >>> 6 ) ^ ( c << 21 | c >>> 11 ) ^ ( c << 7 | c >>> 25 ) , k = u + w + v + r [ m ] + l [ m ] , $ = b + y ; u = p , p = d , d = c , c = s + k | 0 , s = o , o = i , i = a , a = k + $ | 0 } n [ 0 ] = n [ 0 ] + a | 0 , n [ 1 ] = n [ 1 ] + i | 0 , n [ 2 ] = n [ 2 ] + o | 0 , n [ 3 ] = n [ 3 ] + s | 0 , n [ 4 ] = n [ 4 ] + c | 0 , n [ 5 ] = n [ 5 ] + d | 0 , n [ 6 ] = n [ 6 ] + p | 0 , n [ 7 ] = n [ 7 ] + u | 0 } , _doFinalize : function ( ) { var t = this . _data , n = t . words , a = 8 * this . _nDataBytes , i = 8 * t . sigBytes ; return n [ i >>> 5 ] |= 128 << 24 - i % 32 , n [ ( i + 64 >>> 9 << 4 ) + 14 ] = e . floor ( a / 4294967296 ) , n [ ( i + 64 >>> 9 << 4 ) + 15 ] = a , t . sigBytes = 4 * n . length , this . _process ( ) , this . _hash } , c
e . g += t , 8 <= e . g && 8 <= e . g && I ( e ) } else e . fa = 1 ; return n } function T ( e ) { return e . Pa == e . gb } function D ( e , t ) { return u ( e != g ) , 0 == t ? 0 : ( e . gb = 2 * t - 1 , e . Y = d ( e . gb , zn ) , e . Y == g ? 0 : ( e . Y [ 0 ] . s = - 1 , e . Pa = 1 ) ) } function P ( e ) { e != g && ( e . Y = g , e . Y = g , e . gb = 0 , e . Pa = 0 ) } function R ( e , t , n , a ) { for ( var i = e . Y , o = 0 , s = + e . gb ; 0 < a -- ; ) { if ( o >= s ) return 0 ; if ( 0 > i [ o ] . s ) { if ( T ( e ) ) return 0 ; var r = e , l = r . Y , c = + r . Pa ; i [ o ] . s = c - o , r . Pa += 2 , l [ c + 0 ] . s = - 1 , l [ c + 1 ] . s = - 1 } else if ( 0 == i [ o ] . s ) return 0 ; o += i [ o ] . s + ( n >> a & 1 ) } if ( 0 > i [ o ] . s ) i [ o ] . s = 0 ; else if ( 0 != i [ o ] . s ) return 0 ; return i [ o ] . kc = t , 1 } function F ( e , t , n ) { var a = h , i = 0 , o = 0 ; for ( u ( e != g ) , u ( t != g ) , a = 0 ; a < n ; ++ a ) 0 < t [ a ] && ( ++ i , o = a ) ; if ( ! D ( e , i ) ) return 0 ; if ( 1 == i ) return 0 > o || o >= n ? ( P ( e ) , 0 ) : R ( e , o , 0 , 0 ) ; if ( i = 0 , o = c ( n , h ) , o == g ) return ( i = i && T ( e ) ) || P ( e ) , i ; var s = h , s = h , a = c ( Mn + 1 , 0 ) , r = h , l = c ( Mn + 1 , 0 ) , d = 0 ; for ( u ( t != g ) , u ( 0 < n ) , u ( o != g ) , s = 0 ; s < n ; ++ s ) t [ s ] > d && ( d = t [ s ] ) ; if ( d > Mn ) a = 0 ; else { for ( s = 0 ; s < n ; ++ s ) ++ a [ t [ s ] ] ; for ( r = a [ 0 ] = 0 , l [ 0 ] = - 1 , s = 1 ; s <= d ; ++ s ) r = r + a [ s - 1 ] << 1 , l [ s ] = r ; for ( s = 0 ; s < n ; ++ s ) o [ s ] = 0 < t [ s ] ? l [ t [ s ] ] ++ : Gn ; a = 1 } if ( ! a ) return ( i = i && T ( e ) ) || P ( e ) , i ; for ( a = 0 ; a < n ; ++ a ) if ( 0 < t [ a ] && ! R ( e , a , o [ a ] , t [ a ] ) ) return ( i = i && T ( e ) ) || P ( e ) , i ; return ( i = T ( e ) ) || P ( e ) , i } function N ( e , t , n , a , i , o , s ) { for ( var r = h , r = 0 ; r < s ; ++ r ) i [ o + r ] = e [ t + r ] + n [ a + r ] & 255 } function B ( n , a , i ) { var o = n . P . l ; if ( ! ( i = 0 > a || 0 > i || a + i > n . P . v ) && ( i = 0 == a ) ) { e : { var s = n . Ga , r = n . G , l = n . ub ; i = n . P . l ; var d = n . P . v , p = n . Xb , m = [ g ] , f = g , _ = d * i , v = g , y = g , y = "WEBP_FILTER_TYPE" , b = h , m = h , w = 0 , k = h ; if ( u ( 0 < i && 0 < d && o >= i ) , u ( s != g && p != g ) , l <= Rn ) i = 0 ; else if ( k = s [ r + 0 ] >> 0 & 3 , y = s [ r + 0 ] >> 2 & 3 , b = s [ r + 0 ] >> 4 & 3 , m = s [ r + 0 ] >> 6 & 3 , k < Fn || k > Nn || y >= Fa || b > Bn || 0 != m ) i = 0 ; else { if ( k == Fn ) w = l >= _ , m = s , f = r + Rn ; else { if ( m = c ( _ , 0 ) , f = 0 , m == g ) { i = 0 ; break e } var w = r + Rn , l = l - Rn , r = m , v = e ( dn ) , $ = 0 , C = Je ( ) ; C == g ? w = 0 : ( C . l = i , C . v = d , C . N = v , ve ( Bt ) , v . put = xt , v . Mb = Mt , v . Pb = It , v . ka = g , v . ka = r , v . fd = 0 , v . width = i , v . height = d , C . a = Qt , x ( C . o , s , w , l ) , C . Wa = Aa , et ( i , d , 1 , C , g ) && tt ( C , i ) && ( C . Wa = Ia , $ = Ze ( C , C . V , C . Ha , C . l , C . v , nt ) ) , C != g && Qe ( C ) , w = $ ) } if ( w ) { for ( s = Na [ y ] , s != g ? ( v = c ( _ , 0 ) , y = 0 , v == g && ( w = 0 , k != Fn && ( f = m = g ) ) , s ( m , f , i , d , 1 , i , v , y ) , _ = v , k = y ) : ( _ = m , k = f ) , s = 0 ; 0 < d -- ; ) t ( p , s , _ , k , i ) , k += i , s += o ; b == Bn && ( w = m == g || 0 >= f || 0 >= i ? 0 : 1 ) } i = w } } i = ! i } return i ? g : 0 == a ? n . Xb : + a * o } function U ( e ) { var t = e . width , n = e . height , a = e . J ; if ( 0 >= t || 0 >= n || ! ( a >= Ut && a < Xt ) ) return tn ; if ( ! e . Fc && e . Jb == g ) { var i = g , o = 0 , s = 0 , r = 0 , l = 0 , i = y , d = t * Ba [ a ] , p = d * n ; if ( a < Yt || ( o = parseInt ( ( t + 1 ) / 2 , 10 ) , r = o * parseInt ( ( n + 1 ) / 2 , 10 ) , a == Zt && ( s = t , l = s * n ) ) , i = p + 2 * r + l , i != i ) return tn ; if ( i = c ( i , 205 ) , i == g ) return en ; e . Jb = i , e . jc = g , a < Yt ? ( t = e . c . RGBA , t . ma = i , t . Sa = g , t . f = d , t . size = p ) : ( t = e . c . Va , t . y = i , t . D = g , t . F = d , t . Wc = p , t . c = i , t . B = g + p , t . nb = o , t . Rc = r , t . S = i , t . C = g + p + r , t . rb = o , t . Uc = r , a == Zt && ( t . p = i , t . q = g + p + 2 * r ) , t . Wb = l , t . Fa = s ) } return a = 1 , o = e . J , s = e . width , r = e . height , o >= Ut && o < Xt ? o < Yt ? ( e = e . c . RGBA , a &= e . f * r <= e . size , a &= e . f >= s * Ba [ o ] , a &= e . ma != g ) : ( e = e . c . Va , l = e . nb * parseInt ( ( r + 1 ) / 2 , 10 ) , d = e . rb * parseInt ( ( r + 1 ) / 2 , 10 ) , p = e . Fa * r , a &= e . F * r <= e . Wc , a &= l <= e . Rc , a &= d <= e . Uc , a &= p <= e . Wb , a &= e . F >= s , a &= e . nb >= parseInt ( ( s + 1 ) / 2 , 10 ) , a &= e . rb >= parseInt ( ( s + 1 ) / 2 , 10 ) , a &= e . y != g , a &= e . c != g , a &= e . S != g , o == Zt && ( a &= e . Fa >= s , a &= p <= e . Wb , a &= e . p != g ) ) : a = 0 , a ? Qt : tn } function O ( e , t , n , a ) { if ( a == g || 0 >= e || 0 >= t ) return tn ; if ( n != g ) { if ( n . Ua ) { var i = n . wc , o = n . vc , s = n . t & - 2 , r = n . k & - 2 ; if ( 0 > s || 0 > r || 0 >= i || 0 >= o || s + i > e || r + o > t ) return tn ; e = i , t = o } if ( n . I ) { if ( 0 >= n . Ba || 0 >= n . Aa ) return tn ; e = n . Ba , t = n . Aa } } return a . width = e , a . height = t , U ( a ) } function L ( e ) { return e & - 256 ? 0 > e ? 0 : 255 : e } function H ( e , t , n , a ) { var i , o = c ( 16 , 0 ) ; i = 0 ; var s ; for ( s = 0 ; 4 > s ; ++ s ) { var r = e [ t + 0 ] + e [ t + 8 ] , l = e [ t + 0 ] - e [ t + 8 ] , d = ( e [ t + 4 ] * ri >> 16 ) - ( e [ t + 12 ] * si >> 16 ) , p = ( e [ t + 4 ] * si >> 16 ) + ( e [ t + 12 ] * ri >> 16 ) ; o [ i + 0 ] = r + p , o [ i + 1 ] = l + d , o [ i + 2 ] = l - d , o [ i + 3 ] = r - p , i += 4 , t ++ } for ( s = i = 0 ; 4 > s ; ++ s ) e = o [ i + 0 ] + 4 , r = e + o [ i + 8 ] , l = e - o [ i + 8 ] , d = ( o [ i + 4 ] * ri >> 16 ) - ( o [ i + 12 ] * si >> 16 ) , p = ( o [ i + 4 ] * si >> 16 ) + ( o [ i + 12 ] * ri >> 16 ) , n [ a + 0 + 0 * ua ] = L ( n [ a + 0 + 0 * ua ] + ( r + p >> 3 ) ) , n [ a + 1 + 0 * ua ] = L ( n [ a + 1 + 0 * ua ] + ( l + d >> 3 ) ) , n [ a + 2 + 0 * ua ] = L ( n [ a + 2 + 0 * ua ] + ( l - d >> 3 ) ) , n [ a + 3 + 0 * ua ] = L ( n [ a + 3 + 0 * ua ] + ( r - p >> 3 ) ) , i ++ , a += ua } function q ( e , t , n , a , i ) { H ( e , t , n , a ) , i && H ( e , t + 16 , n , a + 4 ) } function V ( e , t , n , a ) { Ua ( e , t + 0 , n , a + 0 , 1 ) , Ua ( e , t + 32 , n , a + 4 * ua , 1 ) } function z ( e , t , n , a ) { e = e [ t + 0 ] + 4 ; var i ; for ( i = 0 ; 4 > i ; ++ i ) for ( t = 0 ; 4 > t ; ++ t ) n [ a + t + i * ua ] = L ( n [ a + t + i * ua ] + ( e >> 3 ) ) } function W ( e , t , n , a ) { e [ t + 0 ] && z ( e , t + 0 , n , a + 0 ) , e [ t + 16 ] && z ( e , t + 16 , n , a + 4 ) , e [ t + 32 ] && z ( e , t + 32 , n , a + 4 * ua ) , e [ t + 48 ] && z ( e , t + 48 , n , a + 4 * ua + 4 ) } function G ( e , t , n ) { var a , i = t - ua , o = ii , s = 255 - e [ i - 1 ] ; for ( a = 0 ; a < n ; ++ a ) { var r , l = o , c = s + e [ t - 1 ] ; for ( r = 0 ; r < n ; ++ r ) e [ t + r ] =
} return 0 } function St ( e , t ) { var n = e . p , a = [ e . q ] ; if ( n != g ) { var i = e . m , o = t . j . J , s = t . j . c . RGBA , r = [ h ] , l = $t ( e , a , r ) , a = a [ 0 ] , c = s . ma , l = s . Sa + l * s . f , d = l + 1 , p = 15 , u = h ; for ( j = 0 ; j < r [ 0 ] ; ++ j ) { for ( u = 0 ; u < i ; ++ u ) { var m = n [ a + u ] >> 4 ; c [ d + 2 * u ] = 240 & c [ d + 2 * u ] | m , p &= m } a += e . width , d += s . f } 15 != p && w ( o ) && WebPApplyAlphaMultiply4444 ( c , l , i , r , s . f ) } return 0 } function Mt ( e ) { var t = e . ka , n = t . j . J , a = n < Yt , i = n == Ot || n == jt || n == Ht || n == qt || n == Zt || w ( n ) ; if ( t . memory = g , t . $a = g , t . zb = g , t . ad = g , ! Nt ( t . Qa , e , i ? Yt : Zt ) ) return 0 ; if ( e . I ) { if ( ! ( a ? InitRGBRescaler ( e , t ) : InitYUVRescaler ( e , t ) ) ) return alert ( "memory error #1" ) , 0 } else { if ( a ) { if ( t . $a = bt , e . Bb ) { var o , s = e . m + 1 >> 1 , r = e . m + 2 * s , l = [ ] ; for ( o = 0 ; o < r ; ++ o ) l . push ( 205 ) ; if ( l . push ( 0 ) , t . memory = l , t . memory == g ) return alert ( "memory error #2" ) , 0 ; t . Sb = t . memory , t . Tb = 0 , t . Qb = t . Sb , t . Rb = t . Tb + e . m , t . lc = t . Qb , t . mc = t . Rb + s , t . $a = wt , no [ Ut ] = st , no [ Ot ] = lt , no [ Lt ] = rt , no [ jt ] = ct , no [ Ht ] = dt , no [ qt ] = pt , no [ Vt ] = ut } } else t . $a = yt ; i && ( w ( n ) && ( WebPApplyAlphaMultiply = vt , no [ zt ] = lt , no [ Wt ] = ct , no [ Gt ] = dt , no [ Kt ] = pt ) , t . zb = n == qt || n == Kt ? St : a ? Ct : kt ) } if ( a && ! to ) { for ( e = 0 ; 256 > e ; ++ e ) Yi [ e ] = 89858 * ( e - 128 ) + Ki >> Ii , Ji [ e ] = - 22014 * ( e - 128 ) + Ki , Xi [ e ] = - 45773 * ( e - 128 ) , Zi [ e ] = 113618 * ( e - 128 ) + Ki >> Ii ; for ( e = Ai ; e < Ei ; ++ e ) t = 76283 * ( e - 16 ) + Ki >> Ii , Qi [ e - Ai ] = fe ( t , 255 ) , eo [ e - Ai ] = fe ( t + 8 >> 4 , 15 ) ; to = 1 } return 1 } function xt ( e ) { var t = e . ka , n = e . m , a = e . h ; return u ( ! ( 1 & e . w ) ) , 0 >= n || 0 >= a ? 0 : ( n = t . $a ( e , t ) , t . ec += n , t . zb && t . zb ( e , t ) , 1 ) } function It ( e ) { e = e . ka , e . memory = "" , e . memory = g } function At ( e , t ) { return e [ t + 0 ] | e [ t + 1 ] << 8 | e [ t + 2 ] << 16 } function Et ( e , t ) { return ( At ( e , t ) | e [ t + 3 ] << 24 ) >>> 0 } function Tt ( t , n , a , i , o , s , r ) { var c = 0 , d = [ 0 ] , p = "VP8StatusCode" , _ = e ( un ) ; if ( t == g || a [ 0 ] < Ln ) return rn ; _ . data = t , _ . b = [ n [ 0 ] ] , _ . e = [ a [ 0 ] ] , _ . na = [ _ . na ] ; e : { if ( c = _ . na , u ( t != g ) , u ( a != g ) , u ( c != g ) , c [ 0 ] = 0 , a [ 0 ] >= Ln && ! l ( t , n [ 0 ] , "RIFF" , Un ) ) { if ( l ( t , n [ 0 ] + 8 , "WEBP" , Un ) ) { p = nn ; break e } var y = Et ( t , n [ 0 ] + Un ) ; if ( y < Un + On ) { p = nn ; break e } c [ 0 ] = y , n [ 0 ] += Ln , a [ 0 ] -= Ln } else c [ 0 ] = 0 ; p = Qt } if ( _ . na = _ . na [ 0 ] , p != Qt ) return p ; c = 0 < _ . na , y = [ 0 ] ; e : if ( p = On + jn , u ( t != g ) , u ( a != g ) , u ( d != g ) , d [ 0 ] = 0 , a [ 0 ] < On ) p = rn ; else { if ( ! l ( t , n [ 0 ] , "VP8X" , Un ) ) { var w = h , k = h , $ = v ; if ( Et ( t , n [ 0 ] + Un ) != jn ) { p = nn ; break e } if ( a [ 0 ] < p ) { p = rn ; break e } if ( $ = Et ( t , n [ 0 ] + 8 ) , w = 1 + At ( t , n [ 0 ] + 12 ) , k = 1 + At ( t , n [ 0 ] + 15 ) , w * k >= qn ) { p = nn ; break e } y != g && ( y [ 0 ] = $ ) , i != g && ( i [ 0 ] = w ) , o != g && ( o [ 0 ] = k ) , n [ 0 ] += p , a [ 0 ] -= p , d [ 0 ] = 1 } p = Qt } if ( p != Qt ) return p ; if ( ! c && d [ 0 ] ) return nn ; if ( s != g && ( s [ 0 ] = ! ! ( y [ 0 ] & Hn ) ) , d && r == g ) return Qt ; if ( a < Un ) return rn ; if ( c && d [ 0 ] || ! c && ! d [ 0 ] && ! l ( t , n [ 0 ] , "ALPH" , Un ) ) { _ . $ = [ _ . $ ] , _ . G = [ _ . G ] , _ . pa = [ _ . pa ] ; e : { var d = _ . na , c = _ . $ , y = _ . G , p = _ . pa , w = f , k = 0 , $ = b , C = Un + On + jn ; for ( u ( t != g ) , u ( a != g ) , w = t , k = n [ 0 ] , $ = a [ 0 ] , u ( c != g ) , u ( p != g ) , c [ 0 ] = g , y [ 0 ] = g , p [ 0 ] = 0 ; ; ) { var S = v , M = v ; if ( n [ 0 ] = k , a [ 0 ] = $ , $ < On ) { p = rn ; break e } if ( S = Et ( w , k + Un ) , M = On + S + 1 & - 2 , C += M , 0 < d && C > d ) { p = nn ; break e } if ( $ < M ) { p = rn ; break e } if ( l ( w , k , "ALPH" , Un ) ) { if ( ! l ( w , k , "VP8 " , Un ) || ! l ( w , "VP8L" , Un ) ) { p = Qt ; break e } } else c [ 0 ] = w , y [ 0 ] = k + On , p [ 0 ] = S ; k += M , $ -= M } p = m } if ( _ . $ = _ . $ [ 0 ] , _ . G = _ . G [ 0 ] , _ . pa = _ . pa [ 0 ] , p != Qt ) return p } _ . ta = [ _ . ta ] , _ . ia = [ _ . ia ] ; e : if ( d = _ . na , c = _ . ta , y = _ . ia , k = ! l ( t , n [ 0 ] , "VP8 " , Un ) , p = ! l ( t , n [ 0 ] , "VP8L" , Un ) , w = Un + On , u ( t != g ) , u ( a != g ) , u ( c != g ) , u ( y != g ) , a [ 0 ] < On ) p = rn ; else { if ( k || p ) { if ( k = Et ( t , n [ 0 ] + Un ) , d >= w && k > d - w ) { p = nn ; break e } c [ 0 ] = k , n [ 0 ] += On , a [ 0 ] -= On , y [ 0 ] = p } else y [ 0 ] = 1 <= a && t [ n + 0 ] == vn , c [ 0 ] = a [ 0 ] ; p = Qt } if ( _ . ta = _ . ta [ 0 ] , _ . ia = _ . ia [ 0 ] , p != Qt ) return p ; if ( _ . ta > Vn ) return nn ; if ( _ . ia ) { if ( a [ 0 ] < wn ) return rn ; d = n [ 0 ] , c = a [ 0 ] , i = i ? i [ 0 ] : g , o = o ? o [ 0 ] : g , y = s ? s [ 0 ] : g , t == g || c < wn ? t = 0 : ( p = [ h ] , w = [ h ] , k = [ h ] , $ = e ( gn ) , x ( $ , t , d , c ) , qe ( $ , p , w , k ) ? ( i != g && ( i [ 0 ] = p [ 0 ] ) , o != g && ( o [ 0 ] = w [ 0 ] ) , y != g && ( y [ 0 ] = k [ 0 ] ) , t = 1 ) : t = 0 ) } else { if ( a < _n ) return rn ; d = n [ 0 ] , c = a [ 0 ] , i = i ? i [ 0 ] : g , o = o ? o [ 0 ] : g , ! ( t == g || c < _n ) && 3 <= c - 3 && 157 == t [ d + 3 + 0 ] && 1 == t [ d + 3 + 1 ] && 42 == t [ d + 3 + 2 ] ? ( c = t [ d + 0 ] | t [ d + 1 ] << 8 | t [ d + 2 ] << 16 , y = 16383 & ( t [ d + 7 ] << 8 | t [ d + 6 ] ) , t = 16383 & ( t [ d + 9 ] << 8 | t [ d + 8 ] ) , ! ( ! ( 1 & c ) + 0 ) || 3 < ( c >> 1 & 7 ) || ! ( c >> 4 & 1 ) || c >> 5 >= _ . ta ? t = 0 : ( i && ( i [ 0 ] = y ) , o && ( o [ 0 ] = t ) , t = 1 ) ) : t = 0 } return t ? ( s != g && ( s [ 0 ] |= _ . $ != g ) , r != g && ( r [ 0 ] = _ , r [ 0 ] . offset = n [ 0 ] - r [ 0 ] . b , u ( n [ 0 ] - r [ 0 ] . b < Vn ) , u ( r [ 0 ] . offset == r [ 0 ] . e - a [ 0 ] ) ) , Qt ) : nn } function Dt ( e ) { return u ( e != g ) , Tt ( e [ 0 ] . data , e [ 0 ] . b , e [ 0 ] . e , g , g , g , e ) } function Pt ( t , n , a , i ) { var o = "VP8StatusCode" , s = e ( dn ) , r = e ( un ) ; if ( r . data = t , r . b = n , r . e = a , r . b = [ r . b ] , r . e = [ r . e ] , r = [ r ] , o = Dt ( r ) , o != Qt ) return o ; if ( r = r [ 0 ] , r . b = r . b [ 0 ] , r . e = r . e [ 0 ] , u ( i != g ) , ve ( Bt ) , s . data = r . data , s . b = n + r . offset , s . e = r . e - r . offset , s . put = xt , s . Mb = Mt , s . Pb = It , s . ka = i , r . ia ) { if ( t = Je ( ) , t == g ) return en ; at ( t , s ) ? ( o = O (
var s ; try { s = t . get ( i . $normalize ( o ) + "Directive" ) } catch ( r ) { throw new Error ( o + " could not be found. The name should appear as it exists in the markup, not camelCased as it would appear in the directive declaration, e.g. directive-name not directiveName." ) } var l = s [ 0 ] ; if ( l . scope !== ! 0 && l . scope ) throw new Error ( "Cannot use a directive with an isolated scope. The scope must be either true or falsy (e.g. false/null/undefined). Occurred for directive " + o + "." ) ; if ( l . restrict . indexOf ( "A" ) < 0 ) throw new Error ( 'Directives must be usable as attributes. Add "A" to the restrict option (or remove the option entirely). Occurred for directive ' + o + "." ) ; n . directiveData && ( n . directiveData = angular . fromJson ( n . directiveData ) ) ; var c = e ( "<div " + o + "></div>" ) ( n ) ; a . append ( c ) } ) } } } ] ) . directive ( "toasterContainer" , [ "$parse" , "$rootScope" , "$interval" , "$sce" , "toasterConfig" , "toaster" , "toasterEventRegistry" , function ( e , t , n , a , i , o , s ) { return { replace : ! 0 , restrict : "EA" , scope : ! 0 , link : function ( t , r , l ) { function c ( e , a ) { e . timeoutPromise = n ( function ( ) { t . removeToast ( e . toastId ) } , a , 1 ) } function d ( n , i ) { if ( n . type = g [ "icon-classes" ] [ n . type ] , n . type || ( n . type = g [ "icon-class" ] ) , g [ "prevent-duplicates" ] === ! 0 && t . toasters . length ) { if ( t . toasters [ t . toasters . length - 1 ] . body === n . body ) return ; var o , s , r = ! 1 ; for ( o = 0 , s = t . toasters . length ; o < s ; o ++ ) if ( t . toasters [ o ] . toastId === i ) { r = ! 0 ; break } if ( r ) return } var l = g [ "close-button" ] ; if ( "boolean" == typeof n . showCloseButton ) ; else if ( "boolean" == typeof l ) n . showCloseButton = l ; else if ( "object" == typeof l ) { var c = l [ n . type ] ; "undefined" != typeof c && null !== c && ( n . showCloseButton = c ) } else n . showCloseButton = ! 1 ; switch ( n . showCloseButton && ( n . closeHtml = a . trustAsHtml ( n . closeHtml || t . config . closeHtml ) ) , n . bodyOutputType = n . bodyOutputType || g [ "body-output-type" ] , n . bodyOutputType ) { case "trustedHtml" : n . html = a . trustAsHtml ( n . body ) ; break ; case "template" : n . bodyTemplate = n . body || g [ "body-template" ] ; break ; case "templateWithData" : var d = e ( n . body || g [ "body-template" ] ) , p = d ( t ) ; n . bodyTemplate = p . template , n . data = p . data ; break ; case "directive" : n . html = n . body } t . configureTimer ( n ) , g [ "newest-on-top" ] === ! 0 ? ( t . toasters . unshift ( n ) , g . limit > 0 && t . toasters . length > g . limit && t . toasters . pop ( ) ) : ( t . toasters . push ( n ) , g . limit > 0 && t . toasters . length > g . limit && t . toasters . shift ( ) ) , angular . isFunction ( n . onShowCallback ) && n . onShowCallback ( ) } function p ( e ) { var a = t . toasters [ e ] ; a . timeoutPromise && n . cancel ( a . timeoutPromise ) , t . toasters . splice ( e , 1 ) , angular . isFunction ( a . onHideCallback ) && a . onHideCallback ( ) } function u ( e ) { for ( var n = t . toasters . length - 1 ; n >= 0 ; n -- ) m ( e ) ? p ( n ) : t . toasters [ n ] . toastId == e && p ( n ) } function m ( e ) { return angular . isUndefined ( e ) || null === e } var g ; g = angular . extend ( { } , i , t . $eval ( l . toasterOptions ) ) , t . config = { toasterId : g [ "toaster-id" ] , position : g [ "position-class" ] , title : g [ "title-class" ] , message : g [ "message-class" ] , tap : g [ "tap-to-dismiss" ] , closeButton : g [ "close-button" ] , closeHtml : g [ "close-html" ] , animation : g [ "animation-class" ] , mouseoverTimer : g [ "mouseover-timer-stop" ] } , t . $on ( "$destroy" , function ( ) { s . unsubscribeToNewToastEvent ( t . _onNewToast ) , s . unsubscribeToClearToastsEvent ( t . _onClearToasts ) } ) , t . configureTimer = function ( e ) { var t = angular . isNumber ( e . timeout ) ? e . timeout : g [ "time-out" ] ; "object" == typeof t && ( t = t [ e . type ] ) , t > 0 && c ( e , t ) } , t . removeToast = function ( e ) { var n , a ; for ( n = 0 , a = t . toasters . length ; n < a ; n ++ ) if ( t . toasters [ n ] . toastId === e ) { p ( n ) ; break } } , t . toasters = [ ] , t . _onNewToast = function ( e , n , a ) { ( m ( t . config . toasterId ) && m ( n ) || ! m ( t . config . toasterId ) && ! m ( n ) && t . config . toasterId == n ) && d ( o . toast , a ) } , t . _onClearToasts = function ( e , n , a ) { ( "*" == n || m ( t . config . toasterId ) && m ( n ) || ! m ( t . config . toasterId ) && ! m ( n ) && t . config . toasterId == n ) && u ( a ) } , s . setup ( ) , s . subscribeToNewToastEvent ( t . _onNewToast ) , s . subscribeToClearToastsEvent ( t . _onClearToasts ) } , controller : [ "$scope" , "$element" , "$attrs" , function ( e , t , a ) { e . stopTimer = function ( t ) { e . config . mouseoverTimer === ! 0 && t . timeoutPromise && ( n . cancel ( t . timeoutPromise ) , t . timeoutPromise = null ) } , e . restartTimer = function ( t ) { e . config . mouseoverTimer === ! 0 ? t . timeoutPromise || e . configureTimer ( t ) : null === t . timeoutPromise && e . removeToast ( t . toastId ) } , e . click = function ( t , n ) { if ( e . config . tap === ! 0 || t . showCloseButton === ! 0 && n === ! 0 ) { var a = ! 0 ; t . clickHandler && ( angular . isFunction ( t . clickHandler ) ? a = t . clickH
type : "IDB_CREATE_TIMEOUT" } ) } , 3e3 ) , t . onsuccess = function ( e ) { o = ! 0 ; var a = t . result ; a . onerror = function ( e ) { h = ! 1 , console . error ( "Error creating/accessing IndexedDB database" , e ) , n . reject ( e ) } , n . resolve ( a ) } , t . onerror = function ( e ) { o = ! 0 , h = ! 1 , console . error ( "Error creating/accessing IndexedDB database" , e ) , n . reject ( e ) } , t . onupgradeneeded = function ( e ) { o = ! 0 , console . warn ( "performing idb upgrade from" , e . oldVersion , "to" , e . newVersion ) ; var t = e . target . result ; 1 == e . oldVersion && t . deleteObjectStore ( m ) , a ( t ) } , p = n . promise } function o ( t , n ) { return i ( ) . then ( function ( a ) { if ( ! f ) return s ( a , t , n ) ; n instanceof Blob || ( n = blobConstruct ( [ n ] ) ) ; try { var i = a . transaction ( [ m ] , IDBTransaction . READ _WRITE || "readwrite" ) . objectStore ( m ) , o = i . put ( n , t ) } catch ( r ) { return f ? ( f = ! 1 , s ( a , t , n ) ) : ( h = ! 1 , e . reject ( r ) ) } var l = e . defer ( ) ; return o . onsuccess = function ( e ) { l . resolve ( n ) } , o . onerror = function ( e ) { l . reject ( e ) } , l . promise } ) } function s ( t , n , a ) { if ( l ( a ) > 10485760 ) return e . reject ( ) ; if ( ! ( a instanceof Blob ) ) { var i = blobSafeMimeType ( a . type || "image/jpeg" ) , o = "data:" + i + ";base64," + bytesToBase64 ( a ) ; return r ( t , n , o ) . then ( function ( ) { return a } ) } try { var s = new FileReader } catch ( c ) { return h = ! 1 , e . reject ( ) } var d = e . defer ( ) ; s . onloadend = function ( ) { r ( t , n , s . result ) . then ( function ( ) { d . resolve ( a ) } , function ( e ) { d . reject ( e ) } ) } , s . onerror = function ( e ) { d . reject ( e ) } ; try { s . readAsDataURL ( a ) } catch ( c ) { return h = ! 1 , e . reject ( ) } return d . promise } function r ( t , n , a ) { try { var i = t . transaction ( [ m ] , IDBTransaction . READ _WRITE || "readwrite" ) . objectStore ( m ) , o = i . put ( a , n ) } catch ( s ) { return h = ! 1 , e . reject ( s ) } var r = e . defer ( ) ; return o . onsuccess = function ( e ) { r . resolve ( ) } , o . onerror = function ( e ) { r . reject ( e ) } , r . promise } function l ( e ) { return e . size || e . byteLength || e . length } function c ( t ) { return i ( ) . then ( function ( n ) { var a = e . defer ( ) , i = n . transaction ( [ m ] , IDBTransaction . READ || "readonly" ) . objectStore ( m ) , o = i . get ( t ) ; return o . onsuccess = function ( e ) { var t = e . target . result ; void 0 === t ? a . reject ( ) : "string" == typeof t && "data:" === t . substr ( 0 , 5 ) ? a . resolve ( dataUrlToBlob ( t ) ) : a . resolve ( t ) } , o . onerror = function ( e ) { a . reject ( e ) } , a . promise } ) } function d ( t , a ) { var i = n . getFakeFileWriter ( a , function ( e ) { o ( t , e ) } ) ; return e . when ( i ) } t . indexedDB = t . indexedDB || t . webkitIndexedDB || t . mozIndexedDB || t . OIndexedDB || t . msIndexedDB , t . IDBTransaction = t . IDBTransaction || t . webkitIDBTransaction || t . OIDBTransaction || t . msIDBTransaction ; var p , u = "cachedFiles" , m = "files" , g = 2 , h = void 0 !== t . indexedDB && void 0 !== t . IDBTransaction ; h && navigator . userAgent . indexOf ( "Safari" ) != - 1 && navigator . userAgent . indexOf ( "Chrome" ) == - 1 && navigator . userAgent . match ( /Version\/[678]/ ) && ( h = ! 1 ) ; var f = h || ! 1 ; return i ( ) , { name : "IndexedDB" , isAvailable : a , saveFile : o , getFile : c , getFileWriter : d } } ] ) . service ( "TmpfsFileStorage" , [ "$q" , "$window" , "FileManager" , function ( e , t , n ) { function a ( ) { if ( l ) return l ; if ( ! t . requestFileSystem ) return l = e . reject ( { type : "FS_BROWSER_UNSUPPORTED" , description : "requestFileSystem not present" } ) ; var n = e . defer ( ) ; return t . requestFileSystem ( t . TEMPORARY , 524288e3 , function ( e ) { cachedFs = e , n . resolve ( ) } , function ( e ) { c = ! 1 , n . reject ( e ) } ) , l = n . promise } function i ( ) { return Config . allow _tmpfs && c } function o ( t , n ) { return n = n || 1 , a ( ) . then ( function ( ) { var a = e . defer ( ) ; return cachedFs . root . getFile ( t , { create : ! 1 } , function ( e ) { e . file ( function ( t ) { t . size >= n ? a . resolve ( e ) : a . reject ( new Error ( "FILE_NOT_FOUND" ) ) } , function ( e ) { console . log ( dT ( ) , "error" , e ) , a . reject ( e ) } ) } , function ( ) { a . reject ( new Error ( "FILE_NOT_FOUND" ) ) } ) , a . promise } ) } function s ( e , t ) { return r ( e ) . then ( function ( e ) { return n . write ( e , t ) . then ( function ( ) { return e . finalize ( ) } ) } ) } function r ( t ) { return a ( ) . then ( function ( ) { var a = e . defer ( ) ; return cachedFs . root . getFile ( t , { create : ! 0 } , function ( e ) { n . getFileWriter ( e ) . then ( function ( t ) { t . finalize = function ( ) { return e } , a . resolve ( t ) } , function ( e ) { c = ! 1 , a . reject ( e ) } ) } , function ( e ) { c = ! 1 , a . reject ( e ) } ) , a . promise } ) } t . requestFileSystem = t . requestFileSystem || t . webkitRequestFileSystem ; var l , c = void 0 !== t . requestFileSystem ; return a ( ) , { name : "TmpFS" , isAvailable : i , saveFile : s , getFile : o , getFileWriter : r } } ] ) . service ( "MemoryFileStorage" , [ "$q" , "FileManager" , function ( e , t ) { function n ( ) { return ! 0 } function a ( t , n ) { return s [ t ] ? e . when ( s [ t ] ) : e . reject ( new Error ( "FILE_NOT_FOUND" ) ) } function i ( t , n ) { return e . when ( s [ t ] = n ) } function o ( n , a ) { var o = t . getFakeFi
! 1 ; if ( "server_DH_params_fail" == a . _ ) { var i = sha1BytesSync ( e . newNonce ) . slice ( - 16 ) ; return bytesCmp ( i , a . new _nonce _hash ) ? ( t . reject ( new Error ( "[MT] server_DH_params_fail" ) ) , ! 1 ) : ( t . reject ( new Error ( "[MT] server_DH_params_fail new_nonce_hash mismatch" ) ) , ! 1 ) } try { p ( e , a . encrypted _answer ) } catch ( o ) { return t . reject ( o ) , ! 1 } m ( e ) } , function ( e ) { t . reject ( e ) } ) } function p ( e , t ) { e . localTime = tsNow ( ) , e . tmpAesKey = sha1BytesSync ( e . newNonce . concat ( e . serverNonce ) ) . concat ( sha1BytesSync ( e . serverNonce . concat ( e . newNonce ) ) . slice ( 0 , 12 ) ) , e . tmpAesIv = sha1BytesSync ( e . serverNonce . concat ( e . newNonce ) ) . slice ( 12 ) . concat ( sha1BytesSync ( [ ] . concat ( e . newNonce , e . newNonce ) ) , e . newNonce . slice ( 0 , 4 ) ) ; var n = aesDecryptSync ( t , e . tmpAesKey , e . tmpAesIv ) , i = n . slice ( 0 , 20 ) , o = n . slice ( 20 ) , s = bytesToArrayBuffer ( o ) , r = new TLDeserialization ( s , { mtproto : ! 0 } ) , l = r . fetchObject ( "Server_DH_inner_data" ) ; if ( "server_DH_inner_data" != l . _ ) throw new Error ( "[MT] server_DH_inner_data response invalid: " + constructor ) ; if ( ! bytesCmp ( e . nonce , l . nonce ) ) throw new Error ( "[MT] server_DH_inner_data nonce mismatch" ) ; if ( ! bytesCmp ( e . serverNonce , l . server _nonce ) ) throw new Error ( "[MT] server_DH_inner_data serverNonce mismatch" ) ; console . log ( dT ( ) , "Done decrypting answer" ) , e . g = l . g , e . dhPrime = l . dh _prime , e . gA = l . g _a , e . serverTime = l . server _time , e . retry = 0 , u ( e . g , e . dhPrime , e . gA ) ; var c = r . getOffset ( ) ; if ( ! bytesCmp ( i , sha1BytesSync ( o . slice ( 0 , c ) ) ) ) throw new Error ( "[MT] server_DH_inner_data SHA1-hash mismatch" ) ; a . applyServerTime ( e . serverTime , e . localTime ) } function u ( e , t , n ) { console . log ( dT ( ) , "Verifying DH params" ) ; var a = bytesToHex ( t ) ; if ( 3 != e || "c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b" !== a ) throw new Error ( "[MT] DH params are not verified: unknown dhPrime" ) ; console . log ( dT ( ) , "dhPrime cmp OK" ) ; var i = new BigInteger ( bytesToHex ( n ) , 16 ) , o = new BigInteger ( a , 16 ) ; if ( i . compareTo ( BigInteger . ONE ) <= 0 ) throw new Error ( "[MT] DH params are not verified: gA <= 1" ) ; if ( i . compareTo ( o . subtract ( BigInteger . ONE ) ) >= 0 ) throw new Error ( "[MT] DH params are not verified: gA >= dhPrime - 1" ) ; console . log ( dT ( ) , "1 < gA < dhPrime-1 OK" ) ; var s = new BigInteger ( null ) ; s . fromInt ( 2 ) ; var r = s . pow ( 1984 ) ; if ( i . compareTo ( r ) < 0 ) throw new Error ( "[MT] DH params are not verified: gA < 2^{2048-64}" ) ; if ( i . compareTo ( o . subtract ( r ) ) >= 0 ) throw new Error ( "[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}" ) ; return console . log ( dT ( ) , "2^{2048-64} < gA < dhPrime-2^{2048-64} OK" ) , ! 0 } function m ( e ) { var t = e . deferred , a = bytesFromHex ( e . g . toString ( 16 ) ) ; e . b = new Array ( 256 ) , n . nextBytes ( e . b ) , i . modPow ( a , e . b , e . dhPrime ) . then ( function ( n ) { var a = new TLSerialization ( { mtproto : ! 0 } ) ; a . storeObject ( { _ : "client_DH_inner_data" , nonce : e . nonce , server _nonce : e . serverNonce , retry _id : [ 0 , e . retry ++ ] , g _b : n } , "Client_DH_Inner_Data" ) ; var o = sha1BytesSync ( a . getBuffer ( ) ) . concat ( a . getBytes ( ) ) , s = aesEncryptSync ( o , e . tmpAesKey , e . tmpAesIv ) , r = new TLSerialization ( { mtproto : ! 0 } ) ; r . storeMethod ( "set_client_DH_params" , { nonce : e . nonce , server _nonce : e . serverNonce , encrypted _data : s } ) , console . log ( dT ( ) , "Send set_client_DH_params" ) , l ( e . dcID , r . getBuffer ( ) ) . then ( function ( n ) { var a = n . fetchObject ( "Set_client_DH_params_answer" ) ; return "dh_gen_ok" != a . _ && "dh_gen_retry" != a . _ && "dh_gen_fail" != a . _ ? ( t . reject ( new Error ( "[MT] Set_client_DH_params_answer response invalid: " + a . _ ) ) , ! 1 ) : bytesCmp ( e . nonce , a . nonce ) ? bytesCmp ( e . serverNonce , a . server _nonce ) ? void i . modPow ( e . gA , e . b , e . dhPrime ) . then ( function ( n ) { var i = sha1BytesSync ( n ) , o = i . slice ( 0 , 8 ) , s = i . slice ( - 8 ) ; switch ( console . log ( dT ( ) , "Got Set_client_DH_params_answer" , a . _ ) , a . _ ) { case "dh_gen_ok" : var r = sha1BytesSync ( e . newNonce . concat ( [ 1 ] , o ) ) . slice ( - 16 ) ; if ( ! bytesCmp ( r , a . new _nonce _hash1 ) ) return t . reject ( new Error ( "[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch" ) ) , ! 1 ; var l = bytesXor ( e . n
} function u ( ) { s . remove ( _ ? "xt_instance" : "xt_idle_instance" ) } function m ( ) { if ( _ || y ) return ! 1 ; console . log ( dT ( ) , "deactivate" ) , v = ! 1 , y = ! 0 , u ( ) , o . dismissAll ( ) , document . title = e ( "inactive_tab_title_raw" ) ; var a = n ( "<ng-include src=\"'partials/desktop/inactive.html'\"></ng-include>" ) , i = t . $new ( ! 0 ) ; i . close = function ( ) { r . close ( ) } , i . reload = function ( ) { r . reload ( ) } , a ( i , function ( e ) { $ ( ".page_wrap" ) . hide ( ) , $ ( e ) . appendTo ( $ ( "body" ) ) } ) , t . idle . deactivated = ! 0 } function g ( ) { if ( y ) return ! 1 ; var e = tsNow ( ) , n = t . idle && t . idle . isIDLE , i = { id : h , idle : n , time : e } ; s . get ( "xt_instance" , "xt_idle_instance" ) . then ( function ( t ) { var o = t [ 0 ] , r = t [ 1 ] ; ! n || ! o || o . id == h || o . time < e - 6e4 ? ( r && r . id == h && s . remove ( "xt_idle_instance" ) , s . set ( { xt _instance : i } ) , _ || ( d . startAll ( ) , b ? console . warn ( dT ( ) , "now master instance" , i ) : b = ! 0 ) , _ = ! 0 , v && ( a . cancel ( v ) , v = ! 1 ) ) : ( s . set ( { xt _idle _instance : i } ) , _ && ( d . stopAll ( ) , console . warn ( dT ( ) , "now idle instance" , i ) , v || ( v = a ( m , 3e4 ) ) ) , _ = ! 1 ) } ) } var h = nextRandomInt ( 4294967295 ) , f = ! 1 , _ = ! 1 , v = ! 1 , y = ! 1 , b = ! 1 ; return { start : p } } ] ) ; var extraModules = [ ] ; Config . Modes . animations && extraModules . push ( "ngAnimate" ) , angular . module ( "myApp" , [ "ngRoute" , "ngSanitize" , "ngTouch" , "ui.bootstrap" , "mediaPlayer" , "toaster" , "izhukov.utils" , "izhukov.mtproto" , "izhukov.mtproto.wrapper" , "myApp.filters" , "myApp.services" , "myApp.templates" , "myApp.directives" , "myApp.controllers" ] . concat ( extraModules ) ) . config ( [ "$locationProvider" , "$routeProvider" , "$compileProvider" , "StorageProvider" , function ( e , t , n , a ) { n . imgSrcSanitizationWhitelist ( /^\s*(https?|ftp|file|blob|filesystem|chrome-extension|app):|data:image\// ) , n . aHrefSanitizationWhitelist ( /^\s*(https?|ftp|file|tg|mailto|blob|filesystem|chrome-extension|app):|data:/ ) , n . debugInfoEnabled ( ! 1 ) , Config . Modes . test && a . setPrefix ( "t_" ) , t . when ( "/" , { template : "" , controller : "AppWelcomeController" } ) , t . when ( "/login" , { templateUrl : templateUrl ( "login" ) , controller : "AppLoginController" } ) , t . when ( "/im" , { templateUrl : templateUrl ( "im" ) , controller : "AppIMController" , reloadOnSearch : ! 1 } ) , t . otherwise ( { redirectTo : "/" } ) } ] ) , angular . module ( "myApp.services" , [ "myApp.i18n" , "izhukov.utils" ] ) . service ( "AppUsersManager" , [ "$rootScope" , "$modal" , "$modalStack" , "$filter" , "$q" , "qSync" , "MtpApiManager" , "RichTextProcessor" , "ServerTimeManager" , "Storage" , "_" , function ( e , t , n , a , i , o , s , r , l , c , d ) { function p ( ) { return N ? N : N = s . invokeApi ( "contacts.getContacts" , { hash : "" } ) . then ( function ( e ) { var t , n ; B = [ ] , h ( e . users ) ; for ( var n = 0 ; n < e . contacts . length ; n ++ ) t = e . contacts [ n ] . user _id , B . push ( t ) , SearchIndexManager . indexObject ( t , u ( t ) , q ) ; return B } ) } function u ( e ) { var t = O [ e ] ; return ! ! t && ( t . first _name || "" ) + " " + ( t . last _name || "" ) + " " + ( t . phone || "" ) + " " + ( t . username || "" ) } function m ( e ) { return p ( ) . then ( function ( t ) { if ( angular . isString ( e ) && e . length ) { for ( var n = SearchIndexManager . search ( e , q ) , a = [ ] , i = 0 ; i < t . length ; i ++ ) n [ t [ i ] ] && a . push ( t [ i ] ) ; t = a } return t } ) } function g ( e ) { return L [ e ] || 0 } function h ( e ) { angular . forEach ( e , f ) } function f ( t , n ) { if ( angular . isObject ( t ) && ! ( n && angular . isObject ( O [ t . id ] ) && O [ t . id ] . first _name ) ) { var i = t . id , o = O [ i ] ; if ( void 0 === t . pFlags && ( t . pFlags = { } ) , ! t . pFlags . min || void 0 === o ) { if ( t . phone && ( t . rPhone = a ( "phoneNumber" ) ( t . phone ) ) , t . num = Math . abs ( i ) % 8 + 1 , t . first _name ? ( t . rFirstName = r . wrapRichText ( t . first _name , { noLinks : ! 0 , noLinebreaks : ! 0 } ) , t . rFullName = t . last _name ? r . wrapRichText ( t . first _name + " " + ( t . last _name || "" ) , { noLinks : ! 0 , noLinebreaks : ! 0 } ) : t . rFirstName ) : ( t . rFirstName = r . wrapRichText ( t . last _name , { noLinks : ! 0 , noLinebreaks : ! 0 } ) || t . rPhone || d ( "user_first_name_deleted" ) , t . rFullName = r . wrapRichText ( t . last _name , { noLinks : ! 0 , noLinebreaks : ! 0 } ) || t . rPhone || d ( "user_name_deleted" ) ) , t . username ) { var s = SearchIndexManager . cleanUsername ( t . username ) ; L [ s ] = i } t . sortName = t . pFlags . deleted ? "" : SearchIndexManager . cleanSearchText ( t . first _name + " " + ( t . last _name || "" ) ) ; var c = t . sortName . split ( " " ) , p = c . shift ( ) , u = c . pop ( ) ; t . initials = p . charAt ( 0 ) + ( u ? u . charAt ( 0 ) : p . charAt ( 1 ) ) , t . status && ( t . status . expires && ( t . status . expires -= l . serverTimeOffset ) , t . status . was _online && ( t . status . was _online -= l . serverTimeOffset ) ) , t . pFlags . bot ? t . sortStatus = - 1 : t . sortStatus = v ( t . status ) ; var o = O [ i ] ; void 0 === o ? o = O [ i ] = t : safeReplaceObject ( o , t ) , e . $broadcast ( "user_update" , i ) , void 0 !== H [ i ] && safeReplaceObject ( H [ i ] , t && t . photo && t . photo . photo _small || { empty : ! 0 }
m ( t ) ) , a = ( n . split ( "." , 2 ) || [ ] ) [ 1 ] || "" ; l . chooseSave ( m ( t ) , a , t . mime _type ) . then ( function ( t ) { t && f ( e , t ) } , function ( ) { f ( e ) . then ( function ( e ) { l . download ( e , t . mime _type , n ) } ) } ) } function y ( e ) { var t = g ( e ) , n = Math . min ( $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 60 ) , 542 ) , a = $ ( window ) . height ( ) - ( Config . Mobile ? 92 : 150 ) , i = { placeholder : "img/placeholders/docThumbModal.gif" , width : n , height : a } ; if ( t . w && t . h ) { var o = calcImageInBox ( t . w , t . h , n , a ) ; i . width = o . w , i . height = o . h } else i . height = i . width = Math . min ( n , a ) ; return t . full = i , t . fullThumb = angular . copy ( t . thumb ) , t . fullThumb . width = i . width , t . fullThumb . height = i . height , t } function b ( e , a ) { var i = t . $new ( ! 0 ) ; return i . docID = e , i . messageID = a , n . open ( { templateUrl : templateUrl ( "video_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "VideoModalController" , scope : i , windowClass : "video_modal_window" } ) } var w = { } , k = { } , C = $ ( window ) . width ( ) , S = $ ( window ) . height ( ) ; return { saveDoc : d , getDoc : p , hasDoc : u , wrapForHistory : g , wrapVideoForFull : y , updateDocDownloaded : h , downloadDoc : f , openDoc : _ , openVideo : b , saveDocFile : v } } ] ) . service ( "AppStickersManager" , [ "$q" , "$rootScope" , "$modal" , "_" , "FileManager" , "MtpApiManager" , "AppDocsManager" , "Storage" , "ApiUpdatesManager" , function ( e , t , n , a , i , o , s , r , l ) { function c ( ) { b || ( b = ! 0 , setTimeout ( d , 1e3 ) ) } function d ( e ) { return r . get ( "all_stickers" ) . then ( function ( t ) { var n = Config . Schema . API . layer ; return t . layer != n && ( t = ! 1 ) , t && t . date > tsNow ( ! 0 ) && ! e ? p ( t ) : o . invokeApi ( "messages.getAllStickers" , { hash : t && t . hash || "" } ) . then ( function ( e ) { var a = "messages.allStickersNotModified" == e . _ ; return a && ( e = t ) , e . date = tsNow ( ! 0 ) + 3600 , e . layer = n , delete e . _ , a ? ( r . set ( { all _stickers : e } ) , p ( e ) ) : u ( e , t && t . fullSets ) . then ( function ( ) { return r . set ( { all _stickers : e } ) , p ( e ) } ) } ) } ) } function p ( e ) { if ( w !== e . hash ) { w = e . hash ; var t , n , i , o , r , l , c , d ; for ( k = [ ] , i = e . sets . length , t = 0 ; t < i ; t ++ ) if ( l = e . sets [ t ] , ! l . pFlags . disabled ) { for ( d = e . fullSets [ l . id ] . documents , o = d . length , c = [ ] , n = 0 ; n < o ; n ++ ) r = d [ n ] , s . saveDoc ( r ) , c . push ( r . id ) ; l . docIDs = c , k . push ( l ) } } return m ( ) . then ( function ( e ) { var t = k ; if ( e . length ) { t = k . slice ( ) ; var n , i , o = [ ] ; for ( n = 0 , i = e . length ; n < i ; n ++ ) o . push ( e [ n ] . id ) ; t . unshift ( { id : 0 , title : a ( "im_stickers_tab_recent_raw" ) , short _name : "" , docIDs : o } ) } return t } ) } function u ( t , n ) { var a = [ ] , i = n || t . fullSets || { } ; return t . fullSets = { } , angular . forEach ( t . sets , function ( e ) { var n = i [ e . id ] ; if ( n && n . set . hash == e . hash ) t . fullSets [ e . id ] = n ; else { var s = o . invokeApi ( "messages.getStickerSet" , { stickerset : { _ : "inputStickerSetID" , id : e . id , access _hash : e . access _hash } } ) . then ( function ( n ) { t . fullSets [ e . id ] = n } ) ; a . push ( s ) } } ) , e . all ( a ) } function m ( ) { return r . get ( "stickers_popular" ) . then ( function ( e ) { var t , n , a , i = [ ] ; if ( e && e . length ) for ( t = 0 , n = e . length ; t < n ; t ++ ) a = e [ t ] [ 0 ] , s . hasDoc ( a ) && i . push ( { id : a , rate : e [ t ] [ 1 ] } ) ; return i } ) } function g ( e ) { m ( ) . then ( function ( t ) { for ( var n = ! 1 , a = t . length , i = [ ] , o = 0 ; o < a ; o ++ ) t [ o ] . id == e && ( n = ! 0 , t [ o ] . rate ++ ) , i . push ( [ t [ o ] . id , t [ o ] . rate ] ) ; n ? i . sort ( function ( e , t ) { return t [ 1 ] - e [ 1 ] } ) : ( i . length > 15 && ( i = i . slice ( 0 , 15 ) ) , i . push ( [ e , 1 ] ) ) , ConfigStorage . set ( { stickers _popular : i } ) } ) } function h ( e ) { return o . invokeApi ( "messages.getStickerSet" , { stickerset : e } ) . then ( function ( e ) { for ( var t = 0 ; t < e . documents . length ; t ++ ) s . saveDoc ( e . documents [ t ] ) ; return e } ) } function f ( e , t ) { var n = t ? "messages.uninstallStickerSet" : "messages.installStickerSet" , a = { _ : "inputStickerSetID" , id : e . set . id , access _hash : e . set . access _hash } ; return o . invokeApi ( n , { stickerset : a , disabled : ! 1 } ) . then ( function ( n ) { var a ; a = t ? { _ : "updateDelStickerSet" , id : e . set . id } : { _ : "updateNewStickerSet" , stickerset : e } , l . processUpdateMessage ( { _ : "updateShort" , update : a } ) } ) } function _ ( e ) { return v ( { _ : "inputStickerSetShortName" , short _name : e } ) } function v ( e ) { var a = t . $new ( ! 0 ) ; a . inputStickerset = e ; n . open ( { templateUrl : templateUrl ( "stickerset_modal" ) , controller : "StickersetModalController" , scope : a , windowClass : "stickerset_modal_window mobile_modal" } ) } function y ( e ) { for ( var t , n = 0 , a = 0 ; a < e . length ; a ++ ) t = e [ a ] , ! t . pFlags . disabled && t . pFlags . installed && ( n = ( 20261 * n + 2147483648 + t . hash ) % 2147483648 ) ; return n } var b = ! 1 , w = ! 1 , k = [ ] ; return t . $on ( "apiUpdate" , function ( e , n ) { return ( "updateStickerSets" == n . _ || "updateNewStickerSet" == n . _ || "updateDelStickerSet" == n . _ || "updateStickerSetsOrder" == n . _ ) && r . get ( "all_stickers" ) . then ( function ( e ) { switch ( e && e . layer == Config . Schema . API . layer
t . $broadcast ( "history_focus" , l ) } ) , ! 0 ; if ( o = e . match ( /^join\?invite=(.+)$/ ) ) return y ( o [ 1 ] ) , ! 0 ; if ( o = e . match ( /^addstickers\?set=(.+)$/ ) ) return p . openStickersetLink ( o [ 1 ] ) , ! 0 ; if ( o = e . match ( /^msg_url\?url=([^&]+)(?:&text=(.*))?$/ ) ) { var e = decodeURIComponent ( o [ 1 ] ) , l = o [ 2 ] ? decodeURIComponent ( o [ 2 ] ) : "" ; return v ( e , l ) , ! 0 } if ( n && ( o = e . match ( /^unsafe_url\?url=([^&]+)/ ) ) ) { var e = decodeURIComponent ( o [ 1 ] ) ; return u . confirm ( { type : "JUMP_EXT_URL" , url : e } ) . then ( function ( ) { var t = "_blank" ; 0 !== e . search ( "https://telegram.me/" ) && 0 !== e . search ( "https://t.me/" ) || ( t = "_self" ) ; var n = window . open ( e , t ) ; try { n . opener = null } catch ( a ) { } } ) , ! 0 } if ( o = e . match ( /^search_hashtag\?hashtag=(.+?)$/ ) ) return t . $broadcast ( "dialogs_search" , { query : "#" + decodeURIComponent ( o [ 1 ] ) } ) , Config . Mobile && t . $broadcast ( "history_focus" , { peerString : "" } ) , ! 0 ; if ( n && ( o = e . match ( /^bot_command\?command=(.+?)(?:&bot=(.+))?$/ ) ) ) { var c = t . selectedPeerID , l = "/" + o [ 1 ] ; return c < 0 && o [ 2 ] && ( l += "@" + o [ 2 ] ) , s . sendText ( c , l ) , t . $broadcast ( "history_focus" , { peerString : a . getPeerString ( c ) } ) , ! 0 } return ! 1 } function h ( e , n ) { if ( console . log ( dT ( ) , "Received activity" , e , n ) , "share" == e && n . url ) v ( n . url , "" ) ; else if ( "view" == e && n . url ) { var o = n . url . match ( b ) ; o && g ( o [ 3 ] ) } else if ( "webrtc-call" == e && n . contact ) { var r = n . contact , l = [ ] ; if ( void 0 != r . tel ) for ( var c = 0 ; c < r . tel . length ; c ++ ) l . push ( r . tel [ c ] . value ) ; var p = ( r . givenName || [ ] ) . join ( " " ) , m = ( r . familyName || [ ] ) . join ( " " ) ; l . length && i . importContact ( l [ 0 ] , p , m ) . then ( function ( e ) { if ( e ) { var n = a . getPeerString ( e ) ; t . $broadcast ( "history_focus" , { peerString : n } ) } else u . show ( { error : { code : 404 , type : "USER_NOT_USING_TELEGRAM" } } ) } ) } else "share" === e && n . blobs && n . blobs . length > 0 && d . selectPeers ( { confirm _type : "EXT_SHARE_PEER" , canSend : ! 0 } ) . then ( function ( e ) { angular . forEach ( e , function ( e ) { var t = a . getPeerID ( e ) ; angular . forEach ( n . blobs , function ( e ) { s . sendFile ( t , e , { isMedia : ! 0 } ) } ) } ) , 1 == e . length && t . $broadcast ( "history_focus" , { peerString : e [ 0 ] } ) } ) } function f ( ) { w || ( w = ! 0 , window . navigator . mozSetMessageHandler && ( console . log ( dT ( ) , "Set activity message handler" ) , window . navigator . mozSetMessageHandler ( "activity" , function ( e ) { h ( e . source . name , e . source . data ) } ) ) , $ ( document ) . on ( "click" , function ( e ) { var t = e . target ; if ( t && "A" == t . tagName && ! t . onclick && ! t . onmousedown ) { var n = $ ( t ) . attr ( "href" ) || t . href || "" , a = n . match ( b ) ; if ( a && g ( a [ 3 ] , ! 0 ) ) return cancelEvent ( e ) } } ) , t . $on ( "$routeUpdate" , m ) , m ( ) ) } function _ ( e ) { var t = e . match ( b ) ; if ( t && g ( t [ 3 ] , ! 0 ) ) return ! 0 ; var n = window . open ( e , "_blank" ) ; try { n . opener = null } catch ( a ) { } return ! ! n } function v ( n , a , i ) { var o = { } ; i && ( o . shareLinkPromise = e . when ( n ) ) , d . selectPeer ( o ) . then ( function ( e ) { t . $broadcast ( "history_focus" , { peerString : e , attachment : { _ : "share_url" , url : n , text : a } } ) } ) } function y ( e ) { return l . invokeApi ( "messages.checkChatInvite" , { hash : e } ) . then ( function ( n ) { var a ; if ( "chatInviteAlready" == n . _ ) { o . saveApiChat ( n . chat ) ; var i = ! n . chat . pFlags . left || o . isChannel ( n . chat . id ) && n . chat . username ; if ( i ) return t . $broadcast ( "history_focus" , { peerString : o . getChatString ( n . chat . id ) } ) ; a = n . chat . title } else a = n . title ; u . confirm ( { type : n . pFlags . channel && ! n . pFlags . megagroup ? "JOIN_CHANNEL_BY_LINK" : "JOIN_GROUP_BY_LINK" , title : a } ) . then ( function ( ) { return l . invokeApi ( "messages.importChatInvite" , { hash : e } ) . then ( function ( e ) { if ( c . processUpdateMessage ( e ) , e . chats && 1 == e . chats . length ) t . $broadcast ( "history_focus" , { peerString : o . getChatString ( e . chats [ 0 ] . id ) } ) ; else if ( e . updates && e . updates . length ) for ( var n , a = 0 , i = e . updates . length ; a < i ; a ++ ) if ( n = e . updates [ a ] , "updateNewMessage" == n . _ ) { t . $broadcast ( "history_focus" , { peerString : o . getChatString ( n . message . to _id . chat _id ) } ) ; break } } ) } ) } ) } var b = /^(web\+)?tg:(\/\/)?(.+)/ , w = ! 1 ; return { start : f , shareUrl : v , openUrl : _ } } ] ) . service ( "DraftsManager" , [ "$rootScope" , "qSync" , "MtpApiManager" , "ApiUpdatesManager" , "AppMessagesIDsManager" , "AppChatsManager" , "AppPeersManager" , "RichTextProcessor" , "Storage" , "ServerTimeManager" , function ( e , t , n , a , i , o , s , r , l , c ) { function d ( e , t ) { return l . get ( "draft" + e ) . then ( function ( n ) { "string" == typeof n && ( n = n . length > 0 && { text : n } ) , n || t || ( n = p ( e ) ) ; var a = n && n . replyToMsgID ; if ( a ) { var o = ! ! s . isChannel ( e ) && - e ; n . replyToMsgID = i . getFullMessageID ( a , o ) } return n } ) } function p ( e ) { var t = y [ e ] ; return void 0 !== t && t } function u ( t , n , a ) { a = a || { } ; var i = _ ( n ) ; return y [ t ] = i , a . notify && ( m ( t , i ) , e . $broadcas
bodyOutputType : "trustedHtml" , clickHandler : function ( ) { i . $broadcast ( "history_focus" , { peerString : t [ 0 ] } ) , o . clear ( n ) } , showCloseButton : ! 1 } ) } ) } function j ( t ) { var n = [ ] ; t ? n . push ( t ) : e . selectedCount > 0 && angular . forEach ( e . selectedMsgs , function ( e , t ) { n . push ( t ) } ) , n . length && m . selectPeer ( { canSend : ! 0 } ) . then ( function ( e ) { B ( ) , i . $broadcast ( "history_focus" , { peerString : e , attachment : { _ : "fwd_messages" , id : n } } ) } ) } function H ( t ) { t || 1 != e . selectedCount || angular . forEach ( e . selectedMsgs , function ( e , n ) { t = n } ) , t && ( B ( ) , e . $broadcast ( "reply_selected" , t ) ) } function q ( t ) { t || 1 != e . selectedCount || angular . forEach ( e . selectedMsgs , function ( e , n ) { t = n } ) , t && ( B ( ) , e . $broadcast ( "edit_selected" , t ) ) } function V ( ) { e . historyState . selectActions ? B ( ) : ( e . historyState . selectActions = "selected" , e . $broadcast ( "ui_panel_update" ) ) } function z ( t ) { return "search" == t ? void i . $broadcast ( "history_search" , e . curDialog . peerID ) : ( e . historyFilter . mediaType = t || ! 1 , e . curDialog . messageID = ! 1 , K . messages = [ ] , K . ids = [ ] , e . state . empty = ! 0 , void A ( ) ) } function W ( ) { e . historyFilter . mediaType ? z ( ) : e . curDialog . messageID ? i . $broadcast ( "history_focus" , { peerString : e . curDialog . peer } ) : A ( ! 0 ) } e . $watchCollection ( "curDialog" , y ) , u . attach ( ) , g . start ( ) , h . start ( ) , e . peerHistories = [ ] , e . selectedMsgs = { } , e . selectedCount = 0 , e . historyState . selectActions = ! 1 , e . historyState . botActions = ! 1 , e . historyState . channelActions = ! 1 , e . historyState . canDelete = ! 1 , e . historyState . canReply = ! 1 , e . historyState . missedCount = 0 , e . historyState . skipped = ! 1 , e . state = { } , e . toggleMessage = F , e . selectedDelete = O , e . selectedForward = j , e . selectedReply = H , e . selectedEdit = q , e . selectedCancel = B , e . selectedFlush = U , e . selectInlineBot = N , e . startBot = T , e . cancelBot = D , e . joinChannel = P , e . togglePeerMuted = R , e . toggleEdit = V , e . toggleMedia = z , e . returnToRecent = W , e . $on ( "history_edit_toggle" , V ) , e . $on ( "history_edit_flush" , U ) , e . $on ( "history_media_toggle" , function ( e , t ) { z ( t ) } ) , e . $on ( "history_return_recent" , W ) ; var G , K = ! 1 , Y = ! 1 , Z = ! 1 , X = ! 1 , J = 0 , Q = 0 , ee = ! 1 , te = { photos : "inputMessagesFilterPhotos" , video : "inputMessagesFilterVideo" , documents : "inputMessagesFilterDocument" , audio : "inputMessagesFilterVoice" } , ne = 0 , ae = 0 , ie = ! 1 , oe = ! 1 , se = 0 , re = ! 1 , le = ! 1 ; e . $on ( "history_update" , angular . noop ) ; var ce = ! 1 ; e . $on ( "stateSynchronized" , function ( ) { ce && ( ce == e . curDialog . peerID && A ( ) , ce = ! 1 ) } ) , e . $on ( "reply_button_press" , function ( t , n ) { var a = e . historyState . replyKeyboard ; if ( a ) { var i = { replyToMsgID : G < 0 && a . mid } ; switch ( n . _ ) { case "keyboardButtonRequestPhone" : _ . confirm ( { type : "BOT_ACCESS_PHONE" } ) . then ( function ( ) { var e = l . getSelf ( ) ; d . sendOther ( G , { _ : "inputMediaContact" , phone _number : e . phone , first _name : e . first _name , last _name : e . last _name } , i ) } ) ; break ; case "keyboardButtonRequestGeoLocation" : _ . confirm ( { type : "BOT_ACCESS_GEO" } ) . then ( function ( ) { return v . getPosition ( ) . then ( function ( e ) { d . sendOther ( G , { _ : "inputMediaGeoPoint" , geo _point : { _ : "inputGeoPoint" , lat : e . lat , "long" : e [ "long" ] } } , i ) } , function ( e ) { _ . alert ( s ( "error_modal_bad_request_title_raw" ) , s ( "error_modal_gelocation_na_raw" ) ) } ) } ) ; break ; default : d . sendText ( G , n . text , i ) } } } ) , e . $on ( "history_reload" , function ( t , n ) { n == e . curDialog . peerID && A ( ) } ) , e . $on ( "history_forbidden" , function ( n , a ) { a == e . curDialog . peerID && t . url ( "/im" ) , k ( a ) } ) , e . $on ( "dialog_migrate" , function ( t , n ) { if ( n . migrateFrom == e . curDialog . peerID ) { var a = p . getPeerString ( n . migrateTo ) ; i . $broadcast ( "history_focus" , { peerString : a } ) } k ( n . migrateFrom ) } ) , e . $on ( "notify_settings" , function ( t , n ) { n . peerID == e . curDialog . peerID && S ( ) } ) , e . $on ( "channel_settings" , function ( t , n ) { n . channelID == - e . curDialog . peerID && S ( ) } ) ; var de = { } ; e . $on ( "history_append" , function ( t , a ) { var o = w ( a . peerID ) ; if ( o ) { var s = a . peerID == e . curDialog . peerID ; if ( s ) { if ( e . historyFilter . mediaType || e . historyState . skipped ) return void ( a . my ? W ( ) : e . historyState . missedCount ++ ) ; e . curDialog . messageID && a . my && W ( ) , delete e . state . empty } var r = d . wrapForHistory ( a . messageID ) ; o . messages . push ( r ) , o . ids . push ( a . messageID ) , d . regroupWrappedHistory ( o . messages , - 3 ) && e . $broadcast ( "messages_regroup" ) , s && ( e . historyState . typing . splice ( 0 , e . historyState . typing . length ) , e . $broadcast ( "ui_history_append_new" , { my : a . my , idleScroll : Y && ! r . pFlags . out && i . idle . isIDLE } ) , a . my && e . historyUnreadAfter && ( delete e . historyUnreadAfter , e . $broadcast ( "messages_unread_after" ) ) , i . idle . isIDLE ? ! r . pFlags . unread || r . pFlags . out |
function f ( t ) { m . processUpdateMessage ( t ) , n . $broadcast ( "history_focus" , { peerString : e . chatFull . peerString } ) } function _ ( t ) { t && t . type && 0 === t . type . indexOf ( "image" ) && ( e . photo . updating = ! 0 , c . uploadFile ( t ) . then ( function ( t ) { return l . invokeApi ( "channels.editPhoto" , { channel : o . getChannelInput ( e . chatID ) , photo : { _ : "inputChatUploadedPhoto" , file : t } } ) . then ( f ) } ) [ "finally" ] ( function ( ) { e . photo . updating = ! 1 } ) ) } e . chatFull = o . wrapForFull ( e . chatID , { } ) , e . settings = { notifications : ! 0 } , e . isMegagroup = o . isMegagroup ( e . chatID ) , s . getChannelFull ( e . chatID , ! 0 ) . then ( function ( t ) { e . chatFull = o . wrapForFull ( e . chatID , t ) , e . $broadcast ( "ui_height" ) , d . savePeerSettings ( - e . chatID , t . notify _settings ) , d . getPeerMuted ( - e . chatID ) . then ( function ( t ) { e . settings . notifications = ! t , e . $watch ( "settings.notifications" , function ( t , n ) { return t !== n && void d . getPeerSettings ( - e . chatID ) . then ( function ( n ) { t ? n . mute _until = 0 : n . mute _until = 2e9 , d . updatePeerSettings ( - e . chatID , n ) } ) } ) } ) , e . chatFull . chat && e . chatFull . chat . pFlags . creator && e . chatFull . exported _invite && "chatInviteEmpty" == e . chatFull . exported _invite . _ && s . getChatInviteLink ( e . chatID , ! 0 ) . then ( function ( t ) { e . chatFull . exported _invite = { _ : "chatInviteExported" , link : t } } ) } ) , e . leaveChannel = function ( ) { return h . confirm ( { type : e . isMegagroup ? "MEGAGROUP_LEAVE" : "CHANNEL_LEAVE" } ) . then ( function ( ) { l . invokeApi ( "channels.leaveChannel" , { channel : o . getChannelInput ( e . chatID ) } ) . then ( f ) } ) } , e . deleteChannel = function ( ) { return h . confirm ( { type : e . isMegagroup ? "MEGAGROUP_DELETE" : "CHANNEL_DELETE" } ) . then ( function ( ) { l . invokeApi ( "channels.deleteChannel" , { channel : o . getChannelInput ( e . chatID ) } ) . then ( f ) } ) } , e . joinChannel = function ( ) { l . invokeApi ( "channels.joinChannel" , { channel : o . getChannelInput ( e . chatID ) } ) . then ( f ) } , e . inviteToChannel = function ( ) { var t = [ ] ; angular . forEach ( ( e . chatFull . participants || { } ) . participants || [ ] , function ( e ) { t . push ( e . user _id ) } ) , g . selectContacts ( { disabled : t } ) . then ( function ( t ) { var n = [ ] ; angular . forEach ( t , function ( e ) { n . push ( i . getUserInput ( e ) ) } ) , l . invokeApi ( "channels.inviteToChannel" , { channel : o . getChannelInput ( e . chatID ) , users : n } ) . then ( f ) } ) } , e . kickFromChannel = function ( t ) { l . invokeApi ( "channels.kickFromChannel" , { channel : o . getChannelInput ( e . chatID ) , user _id : i . getUserInput ( t ) , kicked : ! 0 } ) . then ( f ) } , e . shareLink = function ( t ) { var i = n . $new ( ) ; return i . chatID = e . chatID , a . open ( { templateUrl : templateUrl ( "chat_invite_link_modal" ) , controller : "ChatInviteLinkModalController" , scope : i , windowClass : "md_simple_modal_window" } ) , cancelEvent ( t ) } , e . photo = { } , e . $watch ( "photo.file" , _ ) , e . deletePhoto = function ( ) { e . photo . updating = ! 0 , l . invokeApi ( "channels.editPhoto" , { channel : o . getChannelInput ( e . chatID ) , photo : { _ : "inputChatPhotoEmpty" } } ) . then ( f ) [ "finally" ] ( function ( ) { e . photo . updating = ! 1 } ) } , e . editChannel = function ( ) { var t = n . $new ( ) ; t . chatID = e . chatID , a . open ( { templateUrl : templateUrl ( e . isMegagroup ? "megagroup_edit_modal" : "channel_edit_modal" ) , controller : "ChannelEditModalController" , scope : t , windowClass : "md_simple_modal_window mobile_modal" } ) } , e . goToHistory = function ( ) { n . $broadcast ( "history_focus" , { peerString : e . chatFull . peerString } ) } , e . hasRights = function ( t ) { return o . hasRights ( e . chatID , t ) } } ] ) . controller ( "SettingsModalController" , [ "$rootScope" , "$scope" , "$timeout" , "$modal" , "AppUsersManager" , "AppChatsManager" , "AppPhotosManager" , "MtpApiManager" , "Storage" , "NotificationsManager" , "MtpApiFileManager" , "PasswordManager" , "ApiUpdatesManager" , "ChangelogNotifyService" , "LayoutSwitchService" , "WebPushApiManager" , "AppRuntimeManager" , "ErrorService" , "_" , function ( e , t , n , a , i , o , s , r , l , c , d , p , u , m , g , h , f , _ , v ) { function y ( ) { n . cancel ( w ) , w = ! 1 , p . getState ( ) . then ( function ( e ) { t . password = e , "account.noPassword" == e . _ && e . email _unconfirmed _pattern && ! k && ( w = n ( y , 5e3 ) ) } ) } function b ( e ) { e && e . type && 0 === e . type . indexOf ( "image" ) && ( t . photo . updating = ! 0 , d . uploadFile ( e ) . then ( function ( e ) { r . invokeApi ( "photos.uploadProfilePhoto" , { file : e , caption : "" , geo _point : { _ : "inputGeoPointEmpty" } } ) . then ( function ( e ) { i . saveApiUsers ( e . users ) , r . getUserID ( ) . then ( function ( n ) { s . savePhoto ( e . photo , { user _id : n } ) , u . processUpdateMessage ( { _ : "updateShort" , update : { _ : "updateUserPhoto" , user _id : n , date : tsNow ( ! 0 ) , photo : i . getUser ( n ) . photo , previous : ! 0 } } ) , t . photo = { } } ) } ) } ) [ "finally" ] ( function ( ) { delete t . photo . updating } ) ) } t . profile = { } , t .
n -- , e . count -- ) , t < 0 || ! r . isBot ( t ) || n == a && a < e . count ? e : $ . getProfile ( t ) . then ( function ( n ) { var a = n . bot _info && n . bot _info . description ; if ( a ) { var i = Be -- , o = { _ : "messageService" , id : i , from _id : t , to _id : c . getOutputPeer ( t ) , flags : 0 , pFlags : { } , date : tsNow ( ! 0 ) + y . serverTimeOffset , action : { _ : "messageActionBotIntro" , description : a } } ; ee ( [ o ] ) , e . messages . push ( o ) , e . count && e . count ++ } return e } ) } , function ( n ) { switch ( n . type ) { case "CHANNEL_PRIVATE" : var a = l . getChat ( - t ) ; a = { _ : "channelForbidden" , access _hash : a . access _hash , title : a . title } , s . processUpdateMessage ( { _ : "updates" , updates : [ { _ : "updateChannel" , channel _id : - t } ] , chats : [ a ] , users : [ ] } ) } return e . reject ( n ) } ) } function F ( e , n , a , i ) { var o = et [ e ] && ! n ? 1 : 0 ; return R ( e , n , a , o ) . then ( function ( o ) { i . count = o . count || o . messages . length ; var s = 0 ; if ( ! n && o . messages . length && ( n = o . messages [ 0 ] . mid + 1 ) , n > 0 ) for ( s = 0 ; s < i . history . length && ! ( n > i . history [ s ] ) ; s ++ ) ; var r = i . history . length ; i . history . splice ( s , i . history . length - s ) , angular . forEach ( o . messages , function ( n ) { j ( i , n ) && t . $broadcast ( "history_reply_markup" , { peerID : e } ) , i . history . push ( n . mid ) } ) ; var l = i . history . length ; a -= l - r ; var c = et [ e ] , d = tt [ e ] , p = void 0 !== c || void 0 !== d ; if ( p && ( i . count = Math . max ( i . count , l ) + 1 ) , a > 0 ) { if ( n = i . history [ l - 1 ] , p ) { if ( ! o . messages . length ) { if ( ! d ) return i . count = l , ! 0 ; n = 0 , e = d } return F ( e , n , a , i ) } if ( l < i . count ) return F ( e , n , a , i ) } return ! 0 } ) } function N ( t , n ) { var a = n . unreadOffset ; if ( a ) { var i , o ; for ( i = n . history . length - 1 ; i >= 0 ; i -- ) if ( o = Ie [ n . history [ i ] ] , o && ! o . pFlags . out && o . pFlags . unread ) { n . unreadOffset = i + 1 ; break } } return e . when ( n ) } function B ( e , n ) { if ( ! et [ e ] && ! tt [ n ] && l . hasChat ( - n ) ) { var a = l . getChat ( - e ) ; a && a . migrated _to && a . migrated _to . channel _id == - n && ( et [ e ] = n , tt [ n ] = e , i ( function ( ) { var a = A ( e ) ; a . length && ( De . dialogs . splice ( a [ 1 ] , 1 ) , t . $broadcast ( "dialog_drop" , { peerID : e } ) ) , t . $broadcast ( "dialog_migrate" , { migrateFrom : e , migrateTo : n } ) } , 100 ) ) } } function U ( e ) { if ( et [ e ] ) return et [ e ] } function O ( e , t , n , a , i ) { et [ e ] && ( e = et [ e ] ) ; var o = Te [ e ] , s = 0 , r = ! 1 , l = ! 1 , c = ! 1 ; i = i ? Math . min ( 50 , i ) : 0 , void 0 === o && ( o = Te [ e ] = { count : null , history : [ ] , pending : [ ] } ) ; var d = ! 1 , p = e ; if ( tt [ e ] && ( d = ! 0 , t && t < m . fullMsgIDModulus && ( p = tt [ e ] ) ) , ! n && ! t ) { var u = A ( e ) [ 0 ] ; if ( u && u . unread _count > 1 ) { var g = u . unread _count ; ( c = g > 50 ) ? u . read _inbox _max _id ? ( t = u . read _inbox _max _id , a = 16 , l = 16 , n = 4 ) : ( n = 20 , l = 16 , s = g - l ) : ( n = Math . max ( 10 , i , g + 2 ) , l = g ) } else Config . Mobile && ( n = 20 ) } if ( t > 0 ) for ( r = ! 0 , s = 0 ; s < o . history . length ; s ++ ) if ( t > o . history [ s ] ) { r = ! 1 ; break } if ( ! r && ( null !== o . count && o . history . length == o . count || o . history . length >= s + ( n || 1 ) ) ) { a ? ( a = Math . min ( s , a ) , s = Math . max ( 0 , s - a ) , n += a ) : n = n || ( s ? 20 : i || 5 ) ; var h = o . history . slice ( s , s + n ) ; return ! t && o . pending . length && ( h = o . pending . slice ( ) . concat ( h ) ) , N ( e , { count : o . count , history : h , unreadOffset : l , unreadSkip : c } ) } return a || n || ( n = i || 20 ) , r && ( s = 0 ) , a || c || t && o . history . indexOf ( t ) == - 1 ? ( a && ( s = - a , n += a ) , R ( p , t , n , s ) . then ( function ( n ) { o . count = n . count || n . messages . length , d && o . count ++ ; var a = [ ] ; return angular . forEach ( n . messages , function ( e ) { a . push ( e . mid ) } ) , ! t && o . pending . length && ( a = o . pending . slice ( ) . concat ( a ) ) , N ( e , { count : o . count , history : a , unreadOffset : l , unreadSkip : c } ) } ) ) : F ( e , t , n , o ) . then ( function ( ) { if ( s = 0 , t > 0 ) for ( s = 0 ; s < o . history . length && ! ( t > o . history [ s ] ) ; s ++ ) ; var a = o . history . slice ( s , s + n ) ; return ! t && o . pending . length && ( a = o . pending . slice ( ) . concat ( a ) ) , N ( e , { count : o . count , history : a , unreadOffset : l , unreadSkip : c } ) } ) } function L ( e ) { return ( Te [ e ] || { } ) . reply _markup || ! 1 } function j ( e , t ) { if ( ! t . reply _markup && ! t . pFlags . out && ! t . action ) return ! 1 ; if ( t . reply _markup && "replyInlineMarkup" == t . reply _markup . _ ) return ! 1 ; var n = t . reply _markup , a = e . reply _markup ; if ( n ) return ! ( a && a . mid >= t . mid ) && ( ! ( n . pFlags . selective && ! ( 16 & t . flags ) ) && ( e . maxOutID && t . mid < e . maxOutID && n . pFlags . single _use && ( n . pFlags . hidden = ! 0 ) , n = angular . extend ( { mid : t . mid } , n ) , "replyKeyboardHide" != n . _ && ( n . fromID = t . from _id ) , e . reply _markup = n , ! 0 ) ) ; if ( t . pFlags . out ) if ( a ) { if ( a . pFlags . single _use && ! a . pFlags . hidden && ( t . mid > a . mid || t . mid < 0 ) && t . message ) return a . pFlags . hidden = ! 0 , ! 0 } else ( ! e . maxOutID || t . mid > e . maxOutID ) && ( e . maxOutID = t . mid ) ; return ! ( ! t . action || "messageActionChatDeleteUser" != t . action . _ || ( a ? t . action . user _id != a . fromID : ! r . isBot ( t . action . user _id ) ) ) && ( e . reply _markup = { _ : "replyKeyboardHide" , mid : t . mid , flags : 0 , pFlags : { } } , ! 0 ) } function H ( t , n , a , i , o ) { t = t ? parseInt ( t ) : 0 ; var s = [ ] , d = ! n , p = { peer : t , filter : a } , u = d && an
angular . forEach ( rt , function ( t ) { t . isMutedPromise . then ( function ( n ) { var a = t . top _message ; ! n && a . pFlags . unread && setTimeout ( function ( ) { a . pFlags . unread && $e ( a , { fwd _count : t . fwd _count } ) } , e ) } ) } ) , rt = { } } function xe ( e ) { return _ . invokeApi ( "messages.getPeerDialogs" , { peers : [ c . getInputPeerByID ( e ) ] } ) . then ( function ( e ) { r . saveApiUsers ( e . users ) , l . saveApiChats ( e . chats ) , ee ( e . messages ) ; var n = { } , a = ! 1 ; angular . forEach ( e . dialogs , function ( e ) { if ( e . top _message ) { var i = A ( e . peerID ) . length > 0 ; E ( e ) , i ? t . $broadcast ( "dialog_top" , e ) : ( n [ e . peerID ] = e , a = ! 0 ) } else { var o = c . getPeerID ( e . peer ) , s = A ( o ) ; s . length && ( De . dialogs . splice ( s [ 1 ] , 1 ) , t . $broadcast ( "dialog_drop" , { peerID : o } ) ) } } ) , a && t . $broadcast ( "dialogs_multiupdate" , n ) } ) } var Ie = { } , Ae = { } , Ee = { } , Te = { } , De = { count : null , dialogs : [ ] } , Pe = { } , Re = { } , Fe = { } , Ne = e . when ( ) , Be = - 1 , Ue = SearchIndexManager . createIndex ( ) , Oe = { query : ! 1 } , Le = { } , je = [ ] , He = [ ] , qe = ! 1 , Ve = { } , ze = [ ] , We = ! 1 , Ge = ! 1 ; k . get ( "max_seen_msg" ) . then ( function ( e ) { e && ! m . getMessageIDInfo ( e ) [ 1 ] && ( Ge = e ) } ) ; var Ke = a ( "dateOrTime" ) , Ye = x . pluralize ( "conversation_forwarded_X_messages" ) , Ze = x . pluralize ( "conversation_scored_X" ) ; w . start ( ) ; var Xe = ! 1 , Je = 0 , Qe = 0 , et = { } , tt = { } , nt = ! 1 , at = { } , it = ! 1 , ot = { } , st = ! 1 , rt = { } ; return t . $on ( "apiUpdate" , function ( e , n ) { switch ( n . _ ) { case "updateMessageID" : var a = n . random _id , o = Pe [ a ] ; if ( o ) { var s = o [ 0 ] , d = c . isChannel ( s ) ? - s : 0 ; Re [ m . getFullMessageID ( n . id , d ) ] = a } break ; case "updateNewMessage" : case "updateNewChannelMessage" : var p = n . message , s = pe ( p ) , u = Te [ s ] , g = A ( s ) ; if ( ! g . length ) { ot [ s ] = { reload : ! 0 } , it || ( it = i ( Se , 0 ) ) ; break } if ( "updateNewChannelMessage" == n . _ ) { var h = l . getChat ( - s ) ; if ( h . pFlags && ( h . pFlags . left || h . pFlags . kicked ) ) break } if ( ee ( [ p ] , { isNew : ! 0 } ) , void 0 !== u ) { var f = u . history ; if ( f . indexOf ( p . mid ) != - 1 ) return ! 1 ; var _ = f [ 0 ] ; f . unshift ( p . mid ) , p . mid > 0 && p . mid < _ && f . sort ( function ( e , t ) { return t - e } ) , null !== u . count && u . count ++ } else u = Te [ s ] = { count : null , history : [ p . mid ] , pending : [ ] } ; j ( u , p ) && t . $broadcast ( "history_reply_markup" , { peerID : s } ) , ! p . pFlags . out && p . from _id && r . forceUserOnline ( p . from _id ) ; var v , a = Re [ p . mid ] ; a && ( ( v = le ( a , p ) ) && t . $broadcast ( "history_update" , { peerID : s } ) , delete Re [ p . mid ] ) , v || ( void 0 === at [ s ] && ( at [ s ] = [ ] ) , at [ s ] . push ( p . mid ) , nt || ( nt = i ( Ce , 0 ) ) ) ; var y = ! p . pFlags . out && p . pFlags . unread , b = g [ 0 ] ; if ( b . top _message = p . mid , y && b . unread _count ++ , b . index = D ( p . date ) , ot [ s ] = b , it || ( it = i ( Se , 0 ) ) , y && ( t . selectedPeerID != s || t . idle . isIDLE ) ) { var k = 16 & p . flags ? p . from _id : s , $ = rt [ k ] ; void 0 === $ && ( $ = rt [ k ] = { isMutedPromise : w . getPeerMuted ( k ) , fwd _count : 0 , from _id : 0 } ) , $ . from _id != p . from _id && ( $ . from _id = p . from _id , $ . fwd _count = 0 ) , p . fwdFromID && $ . fwd _count ++ , $ . top _message = p , st || ( st = i ( Me , 1e3 ) ) } break ; case "updateEditMessage" : case "updateEditChannelMessage" : var p = n . message , s = pe ( p ) , d = "peerChannel" == p . to _id . _ ? - s : 0 , C = m . getFullMessageID ( p . id , d ) ; if ( void 0 === Ie [ C ] ) break ; ee ( [ p ] , { isEdited : ! 0 } ) , safeReplaceObject ( Ie [ C ] , p ) ; var S = Ae [ C ] ; if ( void 0 !== S ) { delete Ae [ C ] ; var M = he ( C ) ; safeReplaceObject ( S , M ) , Ae [ C ] = S } var g = A ( s ) [ 0 ] , x = g && g . top _message == C ; if ( p . clear _history ) x ? t . $broadcast ( "dialog_flush" , { peerID : s } ) : t . $broadcast ( "history_delete" , { peerID : s , msgs : [ C ] } ) ; else if ( t . $broadcast ( "message_edit" , { peerID : s , id : p . id , mid : C } ) , x ) { var I = { } ; I [ s ] = g , t . $broadcast ( "dialogs_multiupdate" , I ) } break ; case "updateReadHistoryInbox" : case "updateReadHistoryOutbox" : case "updateReadChannelInbox" : case "updateReadChannelOutbox" : var E , p , T , P = "updateReadHistoryOutbox" == n . _ || "updateReadChannelOutbox" == n . _ , d = n . channel _id , R = m . getFullMessageID ( n . max _id , d ) , s = d ? - d : c . getPeerID ( n . peer ) , g = A ( s ) , f = ( Te [ s ] || { } ) . history || [ ] , F = ! 1 , N = f . length , B = ! 1 ; for ( s > 0 && P && r . forceUserOnline ( s ) , T = 0 ; T < N ; T ++ ) if ( E = f [ T ] , ! ( E > R ) && ( p = Ie [ E ] , p . pFlags . out == P ) ) { if ( ! p . pFlags . unread ) break ; p && p . pFlags . unread && ( p . pFlags . unread = ! 1 , Ae [ E ] && ( Ae [ E ] . pFlags . unread = ! 1 , B || ( B = ! 0 ) ) , Ee [ E ] && ( Ee [ E ] . pFlags . unread = ! 1 ) , p . pFlags . out || ( g [ 0 ] && ( F = -- g [ 0 ] . unread _count ) , w . cancel ( "msg" + E ) ) ) } if ( g [ 0 ] ) { ! P && F && g [ 0 ] . top _message <= R && ( F = g [ 0 ] . unread _count = 0 ) ; var U = P ? "read_outbox_max_id" : "read_inbox_max_id" ; g [ 0 ] [ U ] = R } F !== ! 1 && t . $broadcast ( "dialog_unread" , { peerID : s , count : F } ) , B && t . $broadcast ( "messages_read" ) ; break ; case "updateReadMessagesContents" : var T , E , p , O , L = n . messages , H = L . length ; for ( T = 0 ; T < H ; T ++ ) E = L [ T ] , ( p = Ie [ E ] ) && delete p . pFlags . media _unread , ( O = Ae [ E ] ) && delete O . pFlags . media _unread ; break ; case " updateDeleteMe
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-html="chatFull.rAbout"></span>\n </div>\n <div class="md_modal_section_param_name" my-i18n="channel_modal_description"></div>\n </div>\n\n <div class="md_modal_section_param_wrap" ng-if="chatFull.chat.username">\n <div class="md_modal_section_param_value">\n <a 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 </div>\n <div class="md_modal_section_param_name" my-i18n="channel_modal_share_link"></div>\n </div>\n\n <div class="md_modal_section_param_wrap" ng-if="!chatFull.chat.username && chatFull.chat.pFlags.creator">\n <div class="md_modal_section_param_value" ng-switch="chatFull.exported_invite._">\n <a ng-switch-when="chatInviteExported" class="settings_modal_username_link" ng-click="shareLink($event)" ng-bind="chatFull.exported_invite.link" ng-href="{{chatFull.exported_invite.link}}" target="_blank"></a>\n <span ng-switch-default my-i18n="channel_modal_share_loa
e . put ( "partials/desktop/country_select_modal.html" , '<div class="countries_modal_wrap md_modal_wrap" my-modal-position>\n\n <div class="md_modal_head md_modal_head_simple">\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="$dismiss()" my-i18n="modal_close"></a>\n </div>\n </div>\n <div class="md_modal_title" my-i18n="country_select_modal_title"></div>\n </div>\n\n <div class="md_modal_body">\n\n <div class="countries_modal_search">\n <input class="form-control countries_modal_search_field no_outline" my-focused type="search" placeholder="{{\'modal_search\' | i18n}}" ng-model="search.query" autocomplete="off" />\n <a class="countries_modal_search_clear tg_search_clear" ng-click="search.query = \'\'" ng-show="search.query.length">\n <i class="icon icon-search-clear"></i>\n </a>\n\n </div>\n\n <div class="countries_modal_col" my-countries-list>\n\n <div class="countries_wrap nano" my-infinite-scroller>\n <div class="countries_scrollable_wrap nano-content">\n\n <ul class="countries_modal_members_list nav nav-pills nav-stacked">\n\n <li class="countries_modal_country_wrap clearfix" ng-repeat="country in countries | limitTo : slice.limit track by $index">\n <a class="countries_modal_country" ng-click="$close(country)">\n <span class="countries_modal_country_code pull-right" ng-bind="country.code"></span>\n <span class="countries_modal_country_name" ng-bind="country.name"></span>\n </a>\n </li>\n\n </ul>\n\n </div>\n </div>\n\n </div>\n\n </div>\n\n</div>\n' ) , 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 && dialogMess
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-attr-data-name="{{media_file_name_without_ext}}" ng-attr-data-ext="{{media_file_ext}}"></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 " > <
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 <
setRichFocus ( n ) ) } else { var p = this . getEmojiHtml ( e ) ; if ( window . getSelection ) { var u = window . getSelection ( ) ; if ( u . getRangeAt && u . rangeCount ) { var m = document . createElement ( "div" ) ; m . innerHTML = p ; var g = m . firstChild , h = u . 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 ) , u . removeAllRanges ( ) , u . addRange ( h ) } , 0 ) } } else document . selection && "Control" != document . selection . type && document . selection . createRange ( ) . pasteHTML ( p ) } } 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 p ; n ? l . length ? ( this . selId = ( this . selId || 0 ) + 1 , p = this . getRichHtml ( i ) + ' <span id="composer_sel' + this . selId + '"></span>' + this . getRichHtml ( l ) , this . richTextareaEl . html ( p ) , setRichFocus ( a , $ ( "#composer_sel" + this . selId ) [ 0 ] ) ) : ( p = this . getRichHtml ( i ) + " " , this . richTextareaEl . html ( p ) , setRichFocus ( a ) ) : ( this . selId = ( this . selId || 0 ) + 1 , p = this . getRichHtml ( i ) + ' (<span id="composer_sel' + this . selId + '">' + encodeEntities ( t ) + "</span>) " + this . getRichHtml ( l ) , this . richTextareaEl . html ( p ) , setRichFocus ( a , $ ( "#composer_sel" + this . selId ) [ 0 ] , ! 0 ) ) } else { var i , u , 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 ? ( u = i + "@" + e + " " + l , m = d . index + e . length + 2 ) : ( u = i + "@" + e + " (" + t + ") " + l , m = d . index + e . length + 2 , g = m + t . length ) , a . value = u , 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 = EmojiHe
} ) } function v ( e ) { return 38 == e . keyCode ? ( o . $emit ( "last_message_edit" ) , cancelEvent ( e ) ) : ( o . $emit ( "history_direction_key" , e ) , ! 0 ) } function y ( ) { j && ( L . onChange ( ) , b ( ) ) } function b ( ) { var e = j . offsetHeight ; q != e && ( q = e , o . $emit ( "ui_editor_resize" ) ) } function w ( e ) { if ( ! ( 9 != e . keyCode || e . shiftKey || e . ctrlKey || e . metaKey || i . getTop ( ) ) ) return L . focus ( ) , cancelEvent ( e ) } function k ( ) { onContentLoaded ( function ( ) { L . focus ( ) } ) } function C ( e ) { var n = e . type || "" , a = t . when ( ! 1 ) ; [ "image/jpeg" , "image/gif" , "image/png" , "image/bmp" ] . indexOf ( n ) >= 0 && ( a = u . getFileCorrectUrl ( e , n ) ) , a . then ( function ( t ) { t = t || ! 1 , d . confirm ( { type : "FILE_CLIPBOARD_PASTE" , fileUrl : t } ) . then ( function ( ) { o . draftMessage . files = [ e ] , o . draftMessage . isMedia = ! 0 } ) } ) } function S ( e ) { var t , n , a = ( e . originalEvent || e ) . clipboardData , i = a && a . items || [ ] , s = [ ] ; for ( t = 0 ; t < i . length ; t ++ ) "file" == i [ t ] . kind && ( n = i [ t ] . getAsFile ( ) , s . push ( n ) ) ; if ( s . length > 0 ) { if ( 1 == s . length ) return C ( 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 : R . offsetHeight + 2 , width : R . 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 ] , R = $ ( ".im_send_field_wrap" , s ) [ 0 ] , F = $ ( ".im_submit" , s ) [ 0 ] , N = a ( '<a class="composer_sticker_btn" data-sticker="{{::document.id}}" my-load-sticker document="document" thumb="true" img-class="composer_sticker_image"></a>' ) , B = { } , U = new EmojiTooltip ( E , { getStickers : function ( e ) { l . getStickers ( ) . then ( e ) } , getStickerImage : function ( e , t ) { var n = e . attr ( "data-category" ) , a = B [ 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 ) , N ( i , function ( a ) { B [ 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 O ; T && ( O = 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 : C , 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 ( ) : ( R . offsetWidth || 382 ) - 2 , a = 80 ; t && p . 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 ( ) , $ ( F ) . on ( "mousedown touchstart" , f ) ; var q = j && j . offsetHeight ; $ ( document ) . on ( "keydown" , w ) , $ ( "body" ) . on ( "dragenter dragleave dragover drop" , M ) , $ ( document ) . on ( "paste" , S ) , 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
link : e } } ) , angular . module ( "myApp.directives" ) . directive ( "myDialogsListMobile" , [ "$window" , "$timeout" , function ( e , t ) { function n ( n , a , i ) { function o ( ) { return d && d . offsetHeight || ( d = $ ( c ) [ 0 ] ) , i . modal ? void $ ( a ) . css ( { height : $ ( e ) . height ( ) - ( d ? d . offsetHeight : 58 ) - 46 } ) : ( l && l . offsetHeight || ( l = $ ( ".tg_page_head" ) [ 0 ] ) , s && s . offsetHeight || ( s = $ ( ".im_dialogs_col_wrap" ) [ 0 ] ) , void $ ( a ) . css ( { height : $ ( e ) . height ( ) - ( l ? l . offsetHeight : 46 ) - ( d ? d . offsetHeight : 58 ) - parseInt ( $ ( s ) . css ( "paddingBottom" ) || 0 ) } ) ) } var s = $ ( ".im_dialogs_col_wrap" ) [ 0 ] , r = a [ 0 ] , l = $ ( ".tg_page_head" ) [ 0 ] , c = i . modal ? ".mobile_modal_body .im_dialogs_panel" : ".im_dialogs_panel" , d = $ ( c ) [ 0 ] , p = ! 1 ; n . $on ( "ui_dialogs_search" , o ) , n . $on ( "ui_dialogs_update" , o ) , n . $on ( "ui_dialogs_append" , function ( ) { onContentLoaded ( function ( ) { p = ! 1 , t ( function ( ) { $ ( r ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_dialogs_change" , function ( ) { onContentLoaded ( function ( ) { p = ! 1 , t ( function ( ) { $ ( r ) . trigger ( "scroll" ) } ) } ) } ) , $ ( r ) . on ( "scroll" , function ( e ) { a . is ( ":visible" ) && ! p && r . scrollTop >= r . scrollHeight - r . clientHeight - 300 && ( n . $emit ( "dialogs_need_more" ) , p = ! 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" ) ) { $ ( u ) . is ( ":visible" ) && $ ( u ) . css ( { height : $ ( g ) . height ( ) } ) , m && m . offsetHeight || ( m = $ ( ".tg_page_head" ) [ 0 ] ) ; var n = $ ( e ) . height ( ) - p . 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 ] , p = $ ( ".im_bottom_panel_wrap" , a ) [ 0 ] , u = $ ( ".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 ( p ) , u ( ) } , p = setTimeout ( l , 0 ) , u = 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 &