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 = 0 > e ? - 1 : 0 , e > 0 ? this [ 0 ] = e : - 1 > e ? 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 ) ; 0 > r ? "-" == 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 ; ) t > r ? ( n = ( this [ s ] & ( 1 << r ) - 1 ) << t - r , n |= this [ -- s ] >> ( r += this . DB - t ) ) : ( n = this [ s ] >> ( r -= t ) & a , 0 >= r && ( 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 ) ; i > n ; ) 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 = 0 > a ? - 1 : 0 , - 1 > a ? 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 . a
return ! 1 } function cancelEvent ( e ) { return e = e || window . event , e && ( e = e . originalEvent || e , e . stopPropagation && e . stopPropagation ( ) , e . preventDefault && e . preventDefault ( ) , e . returnValue = ! 1 , e . cancelBubble = ! 0 ) , ! 1 } function hasOnlick ( e ) { if ( e . onclick || e . getAttribute ( "ng-click" ) ) return ! 0 ; var t = $ . _data ( e , "events" ) ; return t && ( t . click || t . mousedown ) ? ! 0 : ! 1 } 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 ) { return 13 == e . keyCode && ( e . ctrlKey || e . metaKey ) ? ( t ( ) , cancelEvent ( e ) ) : void 0 } ) } 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 ( ) : ! 1 ; 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 - 1 != l && ( 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 } ) ) : a + i - s > o && ( 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" , forwarded _messages : "desktop" , chat _invite _link _m
a !== r && i . push ( e [ o ] ) ; return i } , map : function ( e , t , a ) { var i , o = 0 , s = e . length , r = n ( e ) , l = [ ] ; if ( r ) for ( ; s > o ; o ++ ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; else for ( o in e ) i = t ( e [ o ] , o , a ) , null != i && l . push ( i ) ; return Z . apply ( [ ] , l ) } , guid : 1 , proxy : function ( e , t ) { var n , a , i ; return "string" == typeof t && ( i = e [ t ] , t = e , e = i ) , ie . isFunction ( e ) ? ( n = Y . call ( arguments , 2 ) , a = function ( ) { return e . apply ( t || this , n . concat ( Y . call ( arguments ) ) ) } , a . guid = e . guid = e . guid || ie . guid ++ , a ) : void 0 } , now : function ( ) { return + new Date } , support : ne } ) , ie . each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( e , t ) { Q [ "[object " + t + "]" ] = t . toLowerCase ( ) } ) ; var ce = function ( e ) { function t ( e , t , n , a ) { var i , o , s , r , l , c , u , m , g , h ; if ( ( t ? t . ownerDocument || t : L ) !== D && T ( t ) , t = t || D , n = n || [ ] , ! e || "string" != typeof e ) return n ; if ( 1 !== ( r = t . nodeType ) && 9 !== r ) return [ ] ; if ( F && ! a ) { if ( i = ve . exec ( e ) ) if ( s = i [ 1 ] ) { if ( 9 === r ) { if ( o = t . getElementById ( s ) , ! o || ! o . parentNode ) return n ; if ( o . id === s ) return n . push ( o ) , n } else if ( t . ownerDocument && ( o = t . ownerDocument . getElementById ( s ) ) && O ( 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 && ( ! R || ! R . test ( e ) ) ) { if ( m = u = B , g = t , h = 9 === r && e , 1 === r && "object" !== t . nodeName . toLowerCase ( ) ) { for ( c = S ( e ) , ( u = t . getAttribute ( "id" ) ) ? m = u . replace ( be , "\\$&" ) : t . setAttribute ( "id" , m ) , m = "[id='" + m + "'] " , l = c . length ; l -- ; ) c [ l ] = m + p ( c [ l ] ) ; g = ye . test ( e ) && d ( t . parentNode ) || t , h = c . join ( "," ) } if ( h ) try { return Q . apply ( n , g . querySelectorAll ( h ) ) , n } catch ( f ) { } finally { u || t . removeAttribute ( "id" ) } } } return x ( e . replace ( le , "$1" ) , t , n , a ) } function n ( ) { function e ( n , a ) { return t . push ( n + " " ) > k . cacheLength && delete e [ t . shift ( ) ] , e [ n + " " ] = a } var t = [ ] ; return e } function a ( e ) { return e [ B ] = ! 0 , e } function i ( e ) { var t = D . createElement ( "div" ) ; try { return ! ! e ( t ) } catch ( n ) { return ! 1 } finally { t . parentNode && t . parentNode . removeChild ( t ) , t = null } } function o ( e , t ) { for ( var n = e . split ( "|" ) , a = e . length ; a -- ; ) k . attrHandle [ n [ a ] ] = t } function s ( e , t ) { var n = t && e , a = n && 1 === e . nodeType && 1 === t . nodeType && ( ~ t . sourceIndex || K ) - ( ~ e . sourceIndex || K ) ; if ( a ) return a ; if ( n ) for ( ; n = n . nextSibling ; ) if ( n === t ) return - 1 ; return e ? 1 : - 1 } function r ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return "input" === n && t . type === e } } function l ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return ( "input" === n || "button" === n ) && t . type === e } } function c ( e ) { return a ( function ( t ) { return t = + t , a ( function ( n , a ) { for ( var i , o = e ( [ ] , n . length , t ) , s = o . length ; s -- ; ) n [ i = o [ s ] ] && ( n [ i ] = ! ( a [ i ] = n [ i ] ) ) } ) } ) } function d ( e ) { return e && typeof e . getElementsByTagName !== G && e } function u ( ) { } function p ( e ) { for ( var t = 0 , n = e . length , a = "" ; n > t ; t ++ ) a += e [ t ] . value ; return a } function m ( e , t , n ) { var a = t . dir , i = n && "parentNode" === a , o = q ++ ; return t . first ? function ( t , n , o ) { for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) return e ( t , n , o ) } : function ( t , n , s ) { var r , l , c = [ j , o ] ; if ( s ) { for ( ; t = t [ a ] ; ) if ( ( 1 === t . nodeType || i ) && e ( t , n , s ) ) return ! 0 } else for ( ; t = t [ a ] ; ) if ( 1 === t . nodeType || i ) { if ( l = t [ B ] || ( t [ B ] = { } ) , ( r = l [ a ] ) && r [ 0 ] === j && r [ 1 ] === o ) return c [ 2 ] = r [ 2 ] ; if ( l [ a ] = c , c [ 2 ] = e ( t , n , s ) ) return ! 0 } } } function g ( e ) { return e . length > 1 ? function ( t , n , a ) { for ( var i = e . length ; i -- ; ) if ( ! e [ i ] ( t , n , a ) ) return ! 1 ; return ! 0 } : e [ 0 ] } function h ( e , n , a ) { for ( var i = 0 , o = n . length ; o > i ; i ++ ) t ( e , n [ i ] , a ) ; return a } function f ( e , t , n , a , i ) { for ( var o , s = [ ] , r = 0 , l = e . length , c = null != t ; l > r ; r ++ ) ( o = e [ r ] ) && ( ! n || n ( o , a , i ) ) && ( s . push ( o ) , c && t . push ( r ) ) ; return s } function _ ( e , t , n , i , o , s ) { return i && ! i [ B ] && ( i = _ ( i ) ) , o && ! o [ B ] && ( o = _ ( o , s ) ) , a ( function ( a , s , r , l ) { var c , d , u , p = [ ] , m = [ ] , g = s . length , _ = a || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! a && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( a ? e : g || i ) ? [ ] : s : v ; if ( n && n ( v , y , r , l ) , i ) for ( c = f ( y , m ) , i ( c , [ ] , r , l ) , d = c . length ; d -- ; ) ( u = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = u ) ) ; if ( a ) { if ( o || e ) { if ( o ) { for ( c = [ ] , d = y . length ; d -- ; ) ( u = y [ d ] ) && c . push ( v [ d ] = u ) ; o ( null , y = [ ] , c , l ) } for ( d = y . length ; d -- ; ) ( u = y [ d ] ) && ( c = o ? te . call ( a , u ) : p [ d ] ) > - 1 && ( a [ c ] = ! ( s [ c ] = u ) ) } } else y = f ( y === s ? y . splice ( g , y . length ) : y ) , o ? o ( null , s , y , l ) : Q . apply ( s , y ) } ) } function v ( e ) { for ( var t , n , a , i = e . length , o = k . relative [ e [ 0 ] . type ] , s = o || k . relative [ " " ] , r = o ? 1 : 0 , l = m ( function ( e ) { return e === t } , s , ! 0 ) , c = m ( function ( e ) { return te . call ( t , e ) > - 1 } , s , ! 0 ) , d = [ function ( e , n , a ) { return ! o && ( a || n !== I ) || ( ( t = n ) . nodeType ? l (
c . add && ( c . add . call ( e , u ) , u . handler . guid || ( u . handler . guid = n . guid ) ) , i ? p . splice ( p . delegateCount ++ , 0 , u ) : p . push ( u ) , ie . event . global [ m ] = ! 0 ) ; e = null } } , remove : function ( e , t , n , a , i ) { var o , s , r , l , c , d , u , p , m , g , h , f = ie . hasData ( e ) && ie . _data ( e ) ; if ( f && ( d = f . events ) ) { for ( t = ( t || "" ) . match ( ye ) || [ "" ] , c = t . length ; c -- ; ) if ( r = Re . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( u = ie . event . special [ m ] || { } , m = ( a ? u . delegateType : u . bindType ) || m , p = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = p . length ; o -- ; ) s = p [ o ] , ! i && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || a && a !== s . selector && ( "**" !== a || ! s . selector ) || ( p . splice ( o , 1 ) , s . selector && p . delegateCount -- , u . remove && u . remove . call ( e , s ) ) ; l && ! p . length && ( u . teardown && u . teardown . call ( e , g , f . handle ) !== ! 1 || ie . removeEvent ( e , m , f . handle ) , delete d [ m ] ) } else for ( m in d ) ie . event . remove ( e , m + t [ c ] , n , a , ! 0 ) ; ie . isEmptyObject ( d ) && ( delete f . handle , ie . _removeData ( e , "events" ) ) } } , trigger : function ( t , n , a , i ) { var o , s , r , l , c , d , u , p = [ a || ge ] , m = te . call ( t , "type" ) ? t . type : t , g = te . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = a = a || ge , 3 !== a . nodeType && 8 !== a . nodeType && ! Fe . test ( m + ie . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( g = m . split ( "." ) , m = g . shift ( ) , g . sort ( ) ) , s = m . indexOf ( ":" ) < 0 && "on" + m , t = t [ ie . expando ] ? t : new ie . Event ( m , "object" == typeof t && t ) , t . isTrigger = i ? 2 : 3 , t . namespace = g . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , t . result = void 0 , t . target || ( t . target = a ) , n = null == n ? [ t ] : ie . makeArray ( n , [ t ] ) , c = ie . event . special [ m ] || { } , i || ! c . trigger || c . trigger . apply ( a , n ) !== ! 1 ) ) { if ( ! i && ! c . noBubble && ! ie . isWindow ( a ) ) { for ( l = c . delegateType || m , Fe . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( a . ownerDocument || ge ) && p . push ( d . defaultView || d . parentWindow || e ) } for ( u = 0 ; ( r = p [ u ++ ] ) && ! t . isPropagationStopped ( ) ; ) t . type = u > 1 ? l : c . bindType || m , o = ( ie . _data ( r , "events" ) || { } ) [ t . type ] && ie . _data ( r , "handle" ) , o && o . apply ( r , n ) , o = s && r [ s ] , o && o . apply && ie . acceptData ( r ) && ( t . result = o . apply ( r , n ) , t . result === ! 1 && t . preventDefault ( ) ) ; if ( t . type = m , ! i && ! t . isDefaultPrevented ( ) && ( ! c . _default || c . _default . apply ( p . pop ( ) , n ) === ! 1 ) && ie . acceptData ( a ) && s && a [ m ] && ! ie . isWindow ( a ) ) { d = a [ s ] , d && ( a [ s ] = null ) , ie . event . triggered = m ; try { a [ m ] ( ) } catch ( h ) { } ie . event . triggered = void 0 , d && ( a [ s ] = d ) } return t . result } } , dispatch : function ( e ) { e = ie . event . fix ( e ) ; var t , n , a , i , o , s = [ ] , r = Y . call ( arguments ) , l = ( ie . _data ( this , "events" ) || { } ) [ e . type ] || [ ] , c = ie . event . special [ e . type ] || { } ; if ( r [ 0 ] = e , e . delegateTarget = this , ! c . preDispatch || c . preDispatch . call ( this , e ) !== ! 1 ) { for ( s = ie . event . handlers . call ( this , e , l ) , t = 0 ; ( i = s [ t ++ ] ) && ! e . isPropagationStopped ( ) ; ) for ( e . currentTarget = i . elem , o = 0 ; ( a = i . handlers [ o ++ ] ) && ! e . isImmediatePropagationStopped ( ) ; ) ( ! e . namespace _re || e . namespace _re . test ( a . namespace ) ) && ( e . handleObj = a , e . data = a . data , n = ( ( ie . event . special [ a . origType ] || { } ) . handle || a . handler ) . apply ( i . elem , r ) , void 0 !== n && ( e . result = n ) === ! 1 && ( e . preventDefault ( ) , e . stopPropagation ( ) ) ) ; return c . postDispatch && c . postDispatch . call ( this , e ) , e . result } } , handlers : function ( e , t ) { var n , a , i , o , s = [ ] , r = t . delegateCount , l = e . target ; if ( r && l . nodeType && ( ! e . button || "click" !== e . type ) ) for ( ; l != this ; l = l . parentNode || this ) if ( 1 === l . nodeType && ( l . disabled !== ! 0 || "click" !== e . type ) ) { for ( i = [ ] , o = 0 ; r > o ; o ++ ) a = t [ o ] , n = a . selector + " " , void 0 === i [ n ] && ( i [ n ] = a . needsContext ? ie ( n , this ) . index ( l ) >= 0 : ie . find ( n , this , null , [ l ] ) . length ) , i [ n ] && i . push ( a ) ; i . length && s . push ( { elem : l , handlers : i } ) } return r < t . length && s . push ( { elem : this , handlers : t . slice ( r ) } ) , s } , fix : function ( e ) { if ( e [ ie . expando ] ) return e ; var t , n , a , i = e . type , o = e , s = this . fixHooks [ i ] ; for ( s || ( this . fixHooks [ i ] = s = Pe . test ( i ) ? this . mouseHooks : De . test ( i ) ? this . keyHooks : { } ) , a = s . props ? this . props . concat ( s . props ) : this . props , e = new ie . Event ( o ) , t = a . length ; t -- ; ) n = a [ t ] , e [ n ] = o [ n ] ; return e . target || ( e . target = o . srcElement || ge ) , 3 === e . target . nodeType && ( e . target = e . target . parentNode ) , e . metaKey = ! ! e . metaKey , s . filter ? s . filter ( e , o ) : e } , props : "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which" . split ( " " ) , fixHooks : { } , keyHooks : { props : "char charCode key keyCode" . split ( " " ) , filter : function ( e , t ) { return null == e . which && ( e . which = null != t . charCode ? t . charCode :
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 ; return e && 3 !== s && 8 !== s && 2 !== s ? ( 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 ] ) : void 0 } , propHooks : { tabIndex : { get : function ( e ) { var t = ie . find . attr ( e , "tabindex" ) ; return t ? parseInt ( t , 10 ) : xt . test ( e . nodeName ) || It . test ( e . nodeName ) && e . href ? 0 : - 1 } } } } ) , ne . hrefNormalized || ie . each ( [ "href" , "src" ] , function ( e , t ) { ie . propHooks [ t ] = { get : function ( e ) { return e . getAttribute ( t , 4 ) } } } ) , ne . optSelected || ( ie . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && ( t . selectedIndex , t . parentNode && t . parentNode . selectedIndex ) , null } } ) , ie . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { ie . propFix [ this . toLowerCase ( ) ] = this } ) , ne . enctype || ( ie . propFix . enctype = "encoding" ) ; var At = /[\t\r\n\f]/g ; ie . fn . extend ( { addClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( At , " " ) : " " ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) a . indexOf ( " " + i + " " ) < 0 && ( a += i + " " ) ; s = ie . trim ( a ) , n . className !== s && ( n . className = s ) } return this } , removeClass : function ( e ) { var t , n , a , i , o , s , r = 0 , l = this . length , c = 0 === arguments . length || "string" == typeof e && e ; if ( ie . isFunction ( e ) ) return this . each ( function ( t ) { ie ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( ye ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , a = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( At , " " ) : "" ) ) { for ( o = 0 ; i = t [ o ++ ] ; ) for ( ; a . indexOf ( " " + i + " " ) >= 0 ; ) a = a . replace ( " " + i + " " , " " ) ; s = e ? ie . trim ( a ) : "" , n . className !== s && ( n . className = s ) } return this } , toggleClass : function ( e , t ) { var n = typeof e ; return "boolean" == typeof t && "string" === n ? t ? this . addClass ( e ) : this . removeClass ( e ) : this . each ( ie . isFunction ( e ) ? function ( n ) { ie ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } : function ( ) { if ( "string" === n ) for ( var t , a = 0 , i = ie ( this ) , o = e . match ( ye ) || [ ] ; t = o [ a ++ ] ; ) i . hasClass ( t ) ? i . removeClass ( t ) : i . addClass ( t ) ; else ( n === $e || "boolean" === n ) && ( this . className && ie . _data ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : ie . _data ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { for ( var t = " " + e + " " , n = 0 , a = this . length ; a > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( At , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } } ) , ie . each ( "blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu" . split ( " " ) , function ( e , t ) { ie . fn [ t ] = function ( e , n ) { return arguments . length > 0 ? this . on ( t , null , e , n ) : this . trigger ( t ) } } ) , ie . fn . extend ( { hover : function ( e , t ) { return this . mouseenter ( e ) . mouseleave ( t || e ) } , bind : function ( e , t , n ) { return this . on ( e , null , t , n ) } , unbind : function ( e , t ) { return this . off ( e , null , t ) } , delegate : function ( e , t , n , a ) { return this . on ( t , e , n , a ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var Et = ie . now ( ) , Tt = /\?/ , Dt = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g ; ie . parseJSON = function ( t ) { if ( e . JSON && e . JSON . parse ) return e . JSON . parse ( t + "" ) ; var n , a = null , i = ie . trim ( t + "" ) ; return i && ! ie . trim ( i . replace ( Dt , function ( e , t , i , o ) { return n && t && ( a = 0 ) , 0 === a ? e : ( n = i || t , a += ! o - ! i , "" ) } ) ) ? Function ( "return " + i ) ( ) : ie . error ( "Invalid JSON: " + t ) } , ie . parseXML = function ( t ) { var n , a ; if ( ! t || "string" != typeof t ) return null ; try { e . DOMParser ? ( a = new DOMParser , n = a . parseFromString ( t , "text/xml" ) ) : ( n = new ActiveXObject ( "Microsoft.XMLDOM" ) , n . async = "false" , n . loadXML ( t ) ) } catch ( i ) { n = void 0 } return n && n . documentElement &
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 : "-139464256" , predicate : "inputMediaUploadedPhoto" , params : [ { name : "file" , type : "InputFile" } , { name : "caption" , type : "string" } ] , 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 : "-1809496270" , predicate : "inputChatUploadedPhoto" , params : [ { name : "file" , type : "InputFile" } , { name : "crop" , type : "InputPhotoCrop" } ] , type : "InputChatPhoto" } , { id : "-1293828344" , predicate : "inputChatPhoto" , params : [ { name : "id" , type : "InputPhoto" } , { name : "crop" , type : "InputPhotoCrop" } ] , 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 : "-1377390588" , predicate : "inputPhotoCropAuto" , params : [ ] , type : "InputPhotoCrop" } , { id : "-644787419" , predicate : "inputPhotoCrop" , params : [ { name : "crop_left" , type : "double" } , { name : "crop_top" , type : "double" } , { name : "crop_width" , type : "double" } ] , type : "InputPhotoCrop" } , { 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" ,
} , { id : "-378127636" , predicate : "sendMessageUploadVideoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-718310409" , predicate : "sendMessageRecordAudioAction" , params : [ ] , type : "SendMessageAction" } , { id : "-212740181" , predicate : "sendMessageUploadAudioAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-774682074" , predicate : "sendMessageUploadPhotoAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "-1441998364" , predicate : "sendMessageUploadDocumentAction" , params : [ { name : "progress" , type : "int" } ] , type : "SendMessageAction" } , { id : "393186209" , predicate : "sendMessageGeoLocationAction" , params : [ ] , type : "SendMessageAction" } , { id : "1653390447" , predicate : "sendMessageChooseContactAction" , params : [ ] , type : "SendMessageAction" } , { id : "446822276" , predicate : "contacts.found" , params : [ { name : "results" , type : "Vector<Peer>" } , { name : "chats" , type : "Vector<Chat>" } , { name : "users" , type : "Vector<User>" } ] , type : "contacts.Found" } , { id : "942527460" , predicate : "updateServiceNotification" , params : [ { name : "type" , type : "string" } , { name : "message" , type : "string" } , { name : "media" , type : "MessageMedia" } , { name : "popup" , type : "Bool" } ] , type : "Update" } , { id : "-496024847" , predicate : "userStatusRecently" , params : [ ] , type : "UserStatus" } , { id : "129960444" , predicate : "userStatusLastWeek" , params : [ ] , type : "UserStatus" } , { id : "2011940674" , predicate : "userStatusLastMonth" , params : [ ] , type : "UserStatus" } , { id : "-298113238" , predicate : "updatePrivacy" , params : [ { name : "key" , type : "PrivacyKey" } , { name : "rules" , type : "Vector<PrivacyRule>" } ] , type : "Update" } , { id : "1335282456" , predicate : "inputPrivacyKeyStatusTimestamp" , params : [ ] , type : "InputPrivacyKey" } , { id : "-1137792208" , predicate : "privacyKeyStatusTimestamp" , params : [ ] , type : "PrivacyKey" } , { id : "218751099" , predicate : "inputPrivacyValueAllowContacts" , params : [ ] , type : "InputPrivacyRule" } , { id : "407582158" , predicate : "inputPrivacyValueAllowAll" , params : [ ] , type : "InputPrivacyRule" } , { id : "320652927" , predicate : "inputPrivacyValueAllowUsers" , params : [ { name : "users" , type : "Vector<InputUser>" } ] , type : "InputPrivacyRule" } , { id : "195371015" , predicate : "inputPrivacyValueDisallowContacts" , params : [ ] , type : "InputPrivacyRule" } , { id : "-697604407" , predicate : "inputPrivacyValueDisallowAll" , params : [ ] , type : "InputPrivacyRule" } , { id : "-1877932953" , predicate : "inputPrivacyValueDisallowUsers" , params : [ { name : "users" , type : "Vector<InputUser>" } ] , type : "InputPrivacyRule" } , { id : "-123988" , predicate : "privacyValueAllowContacts" , params : [ ] , type : "PrivacyRule" } , { id : "1698855810" , predicate : "privacyValueAllowAll" , params : [ ] , type : "PrivacyRule" } , { id : "1297858060" , predicate : "privacyValueAllowUsers" , params : [ { name : "users" , type : "Vector<int>" } ] , type : "PrivacyRule" } , { id : "-125240806" , predicate : "privacyValueDisallowContacts" , params : [ ] , type : "PrivacyRule" } , { id : "-1955338397" , predicate : "privacyValueDisallowAll" , params : [ ] , type : "PrivacyRule" } , { id : "209668535" , predicate : "privacyValueDisallowUsers" , params : [ { name : "users" , type : "Vector<int>" } ] , type : "PrivacyRule" } , { id : "1430961007" , predicate : "account.privacyRules" , params : [ { name : "rules" , type : "Vector<PrivacyRule>" } , { name : "users" , type : "Vector<User>" } ] , type : "account.PrivacyRules" } , { id : "-1194283041" , predicate : "accountDaysTTL" , params : [ { name : "days" , type : "int" } ] , type : "AccountDaysTTL" } , { id : "314130811" , predicate : "updateUserPhone" , params : [ { name : "user_id" , type : "int" } , { name : "phone" , type : "string" } ] , type : "Update" } , { id : "1815593308" , predicate : "documentAttributeImageSize" , params : [ { name : "w" , type : "int" } , { name : "h" , type : "int" } ] , type : "DocumentAttribute" } , { id : "297109817" , predicate : "documentAttributeAnimated" , params : [ ] , type : "DocumentAttribute" } , { id : "978674434" , predicate : "documentAttributeSticker" , params : [ { name : "alt" , type : "string" } , { name : "stickerset" , type : "InputStickerSet" } ] , type : "DocumentAttribute" } , { id : "1494273227" , predicate : "documentAttributeVideo" , params : [ { name : "duration" , type : "int" } , { name : "w" , type : "int" } , { name : "h" , type : "int" } ] , type : "DocumentAttribute" } , { id : "-1739392570" , predicate : "documentAttributeAudio" , params : [ { name : "flags" , type : "#" } , { name : "voice" , type : "flags.10?true" } , { name : "duration" , type : "int" } , { name : "title" , type : "flags.0?string" } , { name : "performer" , type : "flags.1?string" } , { name : "waveform" , typ
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 : "750622127" , predicate : "updateInlineBotCallbackQuery" , params : [ { name : "query_id" , type : "long" } , { name : "user_id" , type : "int" } , { name : "msg_id" , type : "InputBotInlineMessageID" } , { name : "data" , type : "bytes" } ] , type : "Update" } , { id : "1008755359" , predicate : "inlineBotSwitchPM" , params : [ { name : "text" , type : "string" } , { name : "start_param" , type : "string" } ] , type : "InlineBotSwitchPM" } ] , methods : [ { id : "-878758099" , method : "invokeAfterMsg" , params : [ { name : "msg_id" , type : "long" } , { name : "query" , type : "!X" } ] , type : "X" } , { id : "1036301552" , method : "invokeAfterMsgs" , params : [ { name : "msg_ids" , type : "Vector<long>" } , { name : "query" , type : "!X" } ] , type : "X" } , { id : "1877286395" , method : "auth.checkPhone" , params : [ { name : "phone_number" , type : "string" } ] , type : "auth.CheckedPhone" } , { id : "-855805745" , method : "auth.sendCode" , params : [ { name : "flags" , type : "#" } , { name : "allow_flashcall" , type : "flags.0?true" } , { name : "phone_number" , type : "string" } , { name : "current_number" , type : "flags.0?Bool" } , { name : "api_id" , type : "int" } , { name : "api_hash" , type : "string" } , { name : "lang_code" , type : "string" } ] , type : "auth.SentCode" } , { id : "453408308" , method : "auth.signUp" , params : [ { name : "phone_number" , type : "string" } , { name : "phone_code_hash" , type : "string" } , { name : "phone_code" , type : "string" } , { name : "first_name" , type : "string" } , { name : "last_name" , type : "string" } ] , type : "auth.Authorization" } , { id
2734 : [ "✴" , [ "eight_pointed_black_star" ] ] , 2744 : [ "❄" , [ "snowflake" ] ] , 2747 : [ "❇" , [ "sparkle" ] ] , "274c" : [ "❌" , [ "x" ] ] , "274e" : [ "❎" , [ "negative_squared_cross_mark" ] ] , 2753 : [ "❓" , [ "question" ] ] , 2754 : [ "❔" , [ "grey_question" ] ] , 2755 : [ "❕" , [ "grey_exclamation" ] ] , 2757 : [ "❗" , [ "exclamation" , "heavy_exclamation_mark" ] ] , 2764 : [ "❤" , [ "heart" ] , "<3" ] , 2795 : [ "➕" , [ "heavy_plus_sign" ] ] , 2796 : [ "➖" , [ "heavy_minus_sign" ] ] , 2797 : [ "➗" , [ "heavy_division_sign" ] ] , "27a1" : [ "➡" , [ "arrow_right" ] ] , "27b0" : [ "➰" , [ "curly_loop" ] ] , "27bf" : [ "➿" , [ "loop" ] ] , 2934 : [ "⤴" , [ "arrow_heading_up" ] ] , 2935 : [ "⤵" , [ "arrow_heading_down" ] ] , "2b05" : [ "⬅" , [ "arrow_left" ] ] , "2b06" : [ "⬆" , [ "arrow_up" ] ] , "2b07" : [ "⬇" , [ "arrow_down" ] ] , "2b1b" : [ "⬛" , [ "black_large_square" ] ] , "2b1c" : [ "⬜" , [ "white_large_square" ] ] , "2b50" : [ "⭐" , [ "star" ] ] , "2b55" : [ "⭕" , [ "o" ] ] , 3030 : [ "〰" , [ "wavy_dash" ] ] , "303d" : [ "〽" , [ "part_alternation_mark" ] ] , 3297 : [ "㊗" , [ "congratulations" ] ] , 3299 : [ "㊙" , [ "secret" ] ] , "1f004" : [ "🀄" , [ "mahjong" ] ] , "1f0cf" : [ "🃏" , [ "black_joker" ] ] , "1f170" : [ "🅰" , [ "a" ] ] , "1f171" : [ "🅱" , [ "b" ] ] , "1f17e" : [ "🅾" , [ "o2" ] ] , "1f17f" : [ "🅿" , [ "parking" ] ] , "1f18e" : [ "🆎" , [ "ab" ] ] , "1f191" : [ "🆑" , [ "cl" ] ] , "1f192" : [ "🆒" , [ "cool" ] ] , "1f193" : [ "🆓" , [ "free" ] ] , "1f194" : [ "🆔" , [ "id" ] ] , "1f195" : [ "🆕" , [ "new" ] ] , "1f196" : [ "🆖" , [ "ng" ] ] , "1f197" : [ "🆗" , [ "ok" ] ] , "1f198" : [ "🆘" , [ "sos" ] ] , "1f199" : [ "🆙" , [ "up" ] ] , "1f19a" : [ "🆚" , [ "vs" ] ] , "1f201" : [ "🈁" , [ "koko" ] ] , "1f202" : [ "🈂" , [ "sa" ] ] , "1f21a" : [ "🈚" , [ "u7121" ] ] , "1f22f" : [ "🈯" , [ "u6307" ] ] , "1f232" : [ "🈲" , [ "u7981" ] ] , "1f233" : [ "🈳" , [ "u7a7a" ] ] , "1f234" : [ "🈴" , [ "u5408" ] ] , "1f235" : [ "🈵" , [ "u6e80" ] ] , "1f236" : [ "🈶" , [ "u6709" ] ] , "1f237" : [ "🈷" , [ "u6708" ] ] , "1f238" : [ "🈸" , [ "u7533" ] ] , "1f239" : [ "🈹" , [ "u5272" ] ] , "1f23a" : [ "🈺" , [ "u55b6" ] ] , "1f250" : [ "🉐" , [ "ideograph_advantage" ] ] , "1f251" : [ "🉑" , [ "accept" ] ] , "1f300" : [ "🌀" , [ "cyclone" ] ] , "1f301" : [ "🌁" , [ "foggy" ] ] , "1f302" : [ "🌂" , [ "closed_umbrella" ] ] , "1f303" : [ "🌃" , [ "night_with_stars" ] ] , "1f304" : [ "🌄" , [ "sunrise_over_mountains" ] ] , "1f305" : [ "🌅" , [ "sunrise" ] ] , "1f306" : [ "🌆" , [ "city_sunset" ] ] , "1f307" : [ "🌇" , [ "city_sunrise" ] ] , "1f308" : [ "🌈" , [ "rainbow" ] ] , "1f309" : [ "🌉" , [ "bridge_at_night" ] ] , "1f30a" : [ "🌊" , [ "ocean" ] ] , "1f30b" : [ "🌋" , [ "volcano" ] ] , "1f30c" : [ "🌌" , [ "milky_way" ] ] , "1f30d" : [ "🌍" , [ "earth_africa" ] ] , "1f30e" : [ "🌎" , [ "earth_americas" ] ] , "1f30f" : [ "🌏" , [ "earth_asia" ] ] , "1f310" : [ "🌐" , [ "globe_with_meridians" ] ] , "1f311" : [ "🌑" , [ "new_moon" ] ] , "1f312" : [ "🌒" , [ "waxing_crescent_moon" ] ] , "1f313" : [ "🌓" , [ "first_quarter_moon" ] ] , "1f314" : [ "🌔" , [ "moon" , "waxing_gibbous_moon" ] ] , "1f315" : [ "🌕" , [ "full_moon" ] ] , "1f316" : [ "🌖" , [ "waning_gibbous_moon" ] ] , "1f317" : [ "🌗" , [ "last_quarter_moon" ] ] , "1f318" : [ "🌘" , [ "waning_crescent_moon" ] ] , "1f319" : [ "🌙" , [ "crescent_moon" ] ] , "1f320" : [ "🌠" , [ "stars" ] ] , "1f31a" : [ "🌚" , [ "new_moon_with_face" ] ] , "1f31b" : [ "🌛" , [ "first_quarter_moon_with_face" ] ] , "1f31c" : [ "🌜" , [ "last_quarter_moon_with_face" ] ] , "1f31d" : [ "🌝" , [ "full_moon_with_face" ] ] , "1f31e" : [ "🌞" , [ "sun_with_face" ] ] , "1f31f" : [ "🌟" , [ "star2" ] ] , "1f330" : [ "🌰" , [ "chestnut" ] ] , "1f331" : [ "🌱" , [ "seedling" ] ] , "1f332" : [ "🌲" , [ "evergreen_tree" ] ] , "1f333" : [ "🌳" , [ "deciduous_tree" ] ] , "1f334" : [ "🌴" , [ "palm_tree" ] ] , "1f335" : [ "🌵" , [ "cactus" ] ] , "1f337" : [ "🌷" , [ "tulip" ] ] , "1f338" : [ "🌸" , [ "cherry_blossom" ] ] , "1f339" : [ "🌹" , [ "rose" ] ] , "1f33a" : [ "🌺" , [ "hibiscus" ] ] , "1f33b" : [ "🌻" , [ "sunflower" ] ] , "1f33c" : [ "🌼" , [ "blossom" ] ] , "1f33d" : [ "🌽" , [ "corn" ] ] , "1f33e" : [ "🌾" , [ "ear_of_rice" ] ] , "1f33f" : [ "🌿" , [ "herb" ] ] , "1f340" : [ "🍀" , [ "four_leaf_clover" ] ] , "1f341" : [ "🍁" , [ "maple_leaf" ] ] , "1f342" : [ "🍂" , [ "fallen_leaf" ] ] , "1f343" : [ "🍃" , [ "leaves" ] ] , "1f344" : [ "🍄" , [ "mushroom" ] ] , "1f345" : [ "🍅" , [ "tomato" ] ] , "1f346" : [ "🍆" , [ "eggplant" ] ] , "1f347" : [ "🍇" , [ "grapes" ] ] , "1f348" : [ "🍈" , [ "melon" ] ] , "1f349" : [ "🍉" , [ "watermelon" ] ] , "1f34a" : [ "🍊" , [ "tangerine" ] ] , "1f34b" : [ "🍋" , [ "lemon" ] ] , "1f34c" : [ "🍌" , [ "banana" ] ] , "1f34d" : [ "🍍" , [ "pineapple" ] ] , "1f34e" : [ "🍎" , [ "apple" ] ] , "1f34f" : [ "🍏" , [ "green_apple" ] ] , "1f350" : [ "🍐" , [ "pear" ] ] , "1f351" : [ "🍑" , [ "peach" ] ] , "1f352" : [ "🍒" , [ "cherries" ] ] , "1f353" : [ "🍓" , [ "strawberry" ] ] , "1f354" : [ "🍔" , [ "hamburger" ] ] , "1f355" : [ "🍕" , [ "pizza" ] ] , "1f356" : [ "🍖" , [ " meat _o
"ᴎ" : "N" , "ᴙ" : "R" , "ꜱ" : "S" , "ᴛ" : "T" , "ⱻ" : "E" , "ᴚ" : "R" , "ᴜ" : "U" , "ᴠ" : "V" , "ᴡ" : "W" , "ʏ" : "Y" , "ᴢ" : "Z" , "á" : "a" , "ă" : "a" , "ắ" : "a" , "ặ" : "a" , "ằ" : "a" , "ẳ" : "a" , "ẵ" : "a" , "ǎ" : "a" , "â" : "a" , "ấ" : "a" , "ậ" : "a" , "ầ" : "a" , "ẩ" : "a" , "ẫ" : "a" , "ä" : "a" , "ǟ" : "a" , "ȧ" : "a" , "ǡ" : "a" , "ạ" : "a" , "ȁ" : "a" , "à" : "a" , "ả" : "a" , "ȃ" : "a" , "ā" : "a" , "ą" : "a" , "ᶏ" : "a" , "ẚ" : "a" , "å" : "a" , "ǻ" : "a" , "ḁ" : "a" , "ⱥ" : "a" , "ã" : "a" , "ꜳ" : "aa" , "æ" : "ae" , "ǽ" : "ae" , "ǣ" : "ae" , "ꜵ" : "ao" , "ꜷ" : "au" , "ꜹ" : "av" , "ꜻ" : "av" , "ꜽ" : "ay" , "ḃ" : "b" , "ḅ" : "b" , "ɓ" : "b" , "ḇ" : "b" , "ᵬ" : "b" , "ᶀ" : "b" , "ƀ" : "b" , "ƃ" : "b" , "ɵ" : "o" , "ć" : "c" , "č" : "c" , "ç" : "c" , "ḉ" : "c" , "ĉ" : "c" , "ɕ" : "c" , "ċ" : "c" , "ƈ" : "c" , "ȼ" : "c" , "ď" : "d" , "ḑ" : "d" , "ḓ" : "d" , "ȡ" : "d" , "ḋ" : "d" , "ḍ" : "d" , "ɗ" : "d" , "ᶑ" : "d" , "ḏ" : "d" , "ᵭ" : "d" , "ᶁ" : "d" , "đ" : "d" , "ɖ" : "d" , "ƌ" : "d" , "ı" : "i" , "ȷ" : "j" , "ɟ" : "j" , "ʄ" : "j" , "dz" : "dz" , "dž" : "dz" , "é" : "e" , "ĕ" : "e" , "ě" : "e" , "ȩ" : "e" , "ḝ" : "e" , "ê" : "e" , "ế" : "e" , "ệ" : "e" , "ề" : "e" , "ể" : "e" , "ễ" : "e" , "ḙ" : "e" , "ë" : "e" , "ė" : "e" , "ẹ" : "e" , "ȅ" : "e" , "è" : "e" , "ẻ" : "e" , "ȇ" : "e" , "ē" : "e" , "ḗ" : "e" , "ḕ" : "e" , "ⱸ" : "e" , "ę" : "e" , "ᶒ" : "e" , "ɇ" : "e" , "ẽ" : "e" , "ḛ" : "e" , "ꝫ" : "et" , "ḟ" : "f" , "ƒ" : "f" , "ᵮ" : "f" , "ᶂ" : "f" , "ǵ" : "g" , "ğ" : "g" , "ǧ" : "g" , "ģ" : "g" , "ĝ" : "g" , "ġ" : "g" , "ɠ" : "g" , "ḡ" : "g" , "ᶃ" : "g" , "ǥ" : "g" , "ḫ" : "h" , "ȟ" : "h" , "ḩ" : "h" , "ĥ" : "h" , "ⱨ" : "h" , "ḧ" : "h" , "ḣ" : "h" , "ḥ" : "h" , "ɦ" : "h" , "ẖ" : "h" , "ħ" : "h" , "ƕ" : "hv" , "í" : "i" , "ĭ" : "i" , "ǐ" : "i" , "î" : "i" , "ï" : "i" , "ḯ" : "i" , "ị" : "i" , "ȉ" : "i" , "ì" : "i" , "ỉ" : "i" , "ȋ" : "i" , "ī" : "i" , "į" : "i" , "ᶖ" : "i" , "ɨ" : "i" , "ĩ" : "i" , "ḭ" : "i" , "ꝺ" : "d" , "ꝼ" : "f" , "ᵹ" : "g" , "ꞃ" : "r" , "ꞅ" : "s" , "ꞇ" : "t" , "ꝭ" : "is" , "ǰ" : "j" , "ĵ" : "j" , "ʝ" : "j" , "ɉ" : "j" , "ḱ" : "k" , "ǩ" : "k" , "ķ" : "k" , "ⱪ" : "k" , "ꝃ" : "k" , "ḳ" : "k" , "ƙ" : "k" , "ḵ" : "k" , "ᶄ" : "k" , "ꝁ" : "k" , "ꝅ" : "k" , "ĺ" : "l" , "ƚ" : "l" , "ɬ" : "l" , "ľ" : "l" , "ļ" : "l" , "ḽ" : "l" , "ȴ" : "l" , "ḷ" : "l" , "ḹ" : "l" , "ⱡ" : "l" , "ꝉ" : "l" , "ḻ" : "l" , "ŀ" : "l" , "ɫ" : "l" , "ᶅ" : "l" , "ɭ" : "l" , "ł" : "l" , "lj" : "lj" , "ſ" : "s" , "ẜ" : "s" , "ẛ" : "s" , "ẝ" : "s" , "ḿ" : "m" , "ṁ" : "m" , "ṃ" : "m" , "ɱ" : "m" , "ᵯ" : "m" , "ᶆ" : "m" , "ń" : "n" , "ň" : "n" , "ņ" : "n" , "ṋ" : "n" , "ȵ" : "n" , "ṅ" : "n" , "ṇ" : "n" , "ǹ" : "n" , "ɲ" : "n" , "ṉ" : "n" , "ƞ" : "n" , "ᵰ" : "n" , "ᶇ" : "n" , "ɳ" : "n" , "ñ" : "n" , "nj" : "nj" , "ó" : "o" , "ŏ" : "o" , "ǒ" : "o" , "ô" : "o" , "ố" : "o" , "ộ" : "o" , "ồ" : "o" , "ổ" : "o" , "ỗ" : "o" , "ö" : "o" , "ȫ" : "o" , "ȯ" : "o" , "ȱ" : "o" , "ọ" : "o" , "ő" : "o" , "ȍ" : "o" , "ò" : "o" , "ỏ" : "o" , "ơ" : "o" , "ớ" : "o" , "ợ" : "o" , "ờ" : "o" , "ở" : "o" , "ỡ" : "o" , "ȏ" : "o" , "ꝋ" : "o" , "ꝍ" : "o" , "ⱺ" : "o" , "ō" : "o" , "ṓ" : "o" , "ṑ" : "o" , "ǫ" : "o" , "ǭ" : "o" , "ø" : "o" , "ǿ" : "o" , "õ" : "o" , "ṍ" : "o" , "ṏ" : "o" , "ȭ" : "o" , "ƣ" : "oi" , "ꝏ" : "oo" , "ɛ" : "e" , "ᶓ" : "e" , "ɔ" : "o" , "ᶗ" : "o" , "ȣ" : "ou" , "ṕ" : "p" , "ṗ" : "p" , "ꝓ" : "p" , "ƥ" : "p" , "ᵱ" : "p" , "ᶈ" : "p" , "ꝕ" : "p" , "ᵽ" : "p" , "ꝑ" : "p" , "ꝙ" : "q" , "ʠ" : "q" , "ɋ" : "q" , "ꝗ" : "q" , "ŕ" : "r" , "ř" : "r" , "ŗ" : "r" , "ṙ" : "r" , "ṛ" : "r" , "ṝ" : "r" , "ȑ" : "r" , "ɾ" : "r" , "ᵳ" : "r" , "ȓ" : "r" , "ṟ" : "r" , "ɼ" : "r" , "ᵲ" : "r" , "ᶉ" : "r" , "ɍ" : "r" , "ɽ" : "r" , "ↄ" : "c" , "ꜿ" : "c" , "ɘ" : "e" , "ɿ" : "r" , "ś" : "s" , "ṥ" : "s" , "š" : "s" , "ṧ" : "s" , "ş" : "s" , "ŝ" : "s" , "ș" : "s" , "ṡ" : "s" , "ṣ" : "s" , "ṩ" : "s" , "ʂ" : "s" , "ᵴ" : "s" , "ᶊ" : "s" , "ȿ" : "s" , "ɡ" : "g" , "ß" : "ss" , "ᴑ" : "o" , "ᴓ" : "o" , "ᴝ" : "u" , "ť" : "t" , "ţ" : "t" , "ṱ" : "t" , "ț" : "t" , "ȶ" : "t" , "ẗ" : "t" , "ⱦ" : "t" , "ṫ" : "t" , "ṭ" : "t" , "ƭ" : "t" , "ṯ" : "t" , "ᵵ" : "t" , "ƫ" : "t" , "ʈ" : "t" , "ŧ" : "t" , "ᵺ" : "th" , "ɐ" : "a" , "ᴂ" : "ae" , "ǝ" : "e" , "ᵷ" : "g" , "ɥ" : "h" , "ʮ" : "h" , "ʯ" : "h" , "ᴉ" : "i" , "ʞ" : "k" , "ꞁ" : "l" , "ɯ" : "m" , "ɰ" : "m" , "ᴔ" : "oe" , "ɹ" : "r" , "ɻ" : "r" , "ɺ" : "r" , "ⱹ" : "r" , "ʇ" : "t" , "ʌ" : "v" , "ʍ" : "w" , "ʎ" : "y" , "ꜩ" : "tz" , "ú" : "u" , "ŭ" : "u" , "ǔ" : "u" , "û" : "u" , "ṷ" : "u" , "ü" : "u" , "ǘ" : "u" , "ǚ" : "u" , "ǜ" : "u" , "ǖ" : "u" , "ṳ" : "u" , "ụ" : "u" , "ű" : "u" , "ȕ" : "u" , "ù" : "u" , "ủ" : "u" , "ư" : "u" , "ứ" : "u" , "ự" : "u" , "ừ" : "u" , "ử" : "u" , "ữ" : "u" , "ȗ" : "u" , "ū" : "u" , "ṻ" : "u" , "ų" : "u" , "ᶙ" : "u" , "ů" : "u" , "ũ" : "u" , "ṹ" : "u" , "ṵ" : "u" , "ᵫ" : "ue" , "ꝸ" : "um" , "ⱴ" : "v" , "ꝟ" : "v" , "ṿ" : "v" , "ʋ" : "v" , "ᶌ" : "v" , "ⱱ" : "v" , "ṽ" : "v" , "ꝡ" : "vy" , "ẃ" : "w" , "ŵ" : "w" , "ẅ" : "w" , "ẇ" : "w" , "ẉ" : "w" , "ẁ" : "w" , "ⱳ" : "w" , "ẘ" : "w" , "ẍ" : "x" , "ẋ" : "x" , "ᶍ" : "x" , "ý" : "y" , "ŷ" : "y" , "ÿ" : "y" , "ẏ" : "y" , "ỵ" : "y" , "ỳ" : "y" , "ƴ" : "y" , "ỷ" : "y" , "ỿ" : "y" , "ȳ" : "y" , "ẙ" : "y" , "ɏ" : "
return d ( e , Aa . call ( arguments , 1 ) , ! 0 ) } function m ( e ) { return parseInt ( e , 10 ) } function g ( e , t ) { return u ( Object . create ( e ) , t ) } function h ( ) { } function f ( e ) { return e } function _ ( e ) { return function ( ) { return e } } function v ( e ) { return M ( e . toString ) && e . toString !== Object . prototype . toString } function y ( e ) { return "undefined" == typeof e } function b ( e ) { return "undefined" != typeof e } function w ( e ) { return null !== e && "object" == typeof e } function k ( e ) { return null !== e && "object" == typeof e && ! Pa ( e ) } function $ ( e ) { return "string" == typeof e } function C ( e ) { return "number" == typeof e } function S ( e ) { return "[object Date]" === Da . call ( e ) } function M ( e ) { return "function" == typeof e } function x ( e ) { return "[object RegExp]" === Da . call ( e ) } function I ( e ) { return e && e . window === e } function A ( e ) { return e && e . $evalAsync && e . $watch } function E ( e ) { return "[object File]" === Da . call ( e ) } function T ( e ) { return "[object FormData]" === Da . call ( e ) } function D ( e ) { return "[object Blob]" === Da . call ( e ) } function P ( e ) { return "boolean" == typeof e } function F ( e ) { return e && M ( e . then ) } function R ( e ) { return Ba . test ( Da . call ( e ) ) } function N ( e ) { return ! ( ! e || ! ( e . nodeName || e . prop && e . attr && e . find ) ) } function U ( e ) { var t , n = { } , a = e . split ( "," ) ; for ( t = 0 ; t < a . length ; t ++ ) n [ a [ t ] ] = ! 0 ; return n } function O ( e ) { return ba ( e . nodeName || e [ 0 ] && e [ 0 ] . nodeName ) } function B ( e , t ) { var n = e . indexOf ( t ) ; return n >= 0 && e . splice ( n , 1 ) , n } function L ( e , t , n , a ) { if ( I ( e ) || A ( e ) ) throw Fa ( "cpws" , "Can't copy! Making copies of Window or Scope instances is not supported." ) ; if ( R ( t ) ) throw Fa ( "cpta" , "Can't copy! TypedArray destination cannot be mutated." ) ; if ( t ) { if ( e === t ) throw Fa ( "cpi" , "Can't copy! Source and destination are identical." ) ; n = n || [ ] , a = a || [ ] , w ( e ) && ( n . push ( e ) , a . push ( t ) ) ; var i ; if ( Oa ( e ) ) { t . length = 0 ; for ( var s = 0 ; s < e . length ; s ++ ) t . push ( L ( e [ s ] , null , n , a ) ) } else { var r = t . $$hashKey ; if ( Oa ( t ) ? t . length = 0 : o ( t , function ( e , n ) { delete t [ n ] } ) , k ( e ) ) for ( i in e ) t [ i ] = L ( e [ i ] , null , n , a ) ; else if ( e && "function" == typeof e . hasOwnProperty ) for ( i in e ) e . hasOwnProperty ( i ) && ( t [ i ] = L ( e [ i ] , null , n , a ) ) ; else for ( i in e ) wa . call ( e , i ) && ( t [ i ] = L ( e [ i ] , null , n , a ) ) ; c ( t , r ) } } else if ( t = e , w ( e ) ) { var l ; if ( n && - 1 !== ( l = n . indexOf ( e ) ) ) return a [ l ] ; if ( Oa ( e ) ) return L ( e , [ ] , n , a ) ; if ( R ( e ) ) t = new e . constructor ( e ) ; else if ( S ( e ) ) t = new Date ( e . getTime ( ) ) ; else if ( x ( e ) ) t = new RegExp ( e . source , e . toString ( ) . match ( /[^\/]*$/ ) [ 0 ] ) , t . lastIndex = e . lastIndex ; else { if ( ! M ( e . cloneNode ) ) { var d = Object . create ( Pa ( e ) ) ; return L ( e , d , n , a ) } t = e . cloneNode ( ! 0 ) } a && ( n . push ( e ) , a . push ( t ) ) } return t } function j ( e , t ) { if ( Oa ( e ) ) { t = t || [ ] ; for ( var n = 0 , a = e . length ; a > n ; n ++ ) t [ n ] = e [ n ] } else if ( w ( e ) ) { t = t || { } ; for ( var i in e ) ( "$" !== i . charAt ( 0 ) || "$" !== i . charAt ( 1 ) ) && ( t [ i ] = e [ i ] ) } return t || e } function q ( e , t ) { if ( e === t ) return ! 0 ; if ( null === e || null === t ) return ! 1 ; if ( e !== e && t !== t ) return ! 0 ; var n , a , i , o = typeof e , s = typeof t ; if ( o == s && "object" == o ) { if ( ! Oa ( e ) ) { if ( S ( e ) ) return S ( t ) ? q ( e . getTime ( ) , t . getTime ( ) ) : ! 1 ; if ( x ( e ) ) return x ( t ) ? e . toString ( ) == t . toString ( ) : ! 1 ; if ( A ( e ) || A ( t ) || I ( e ) || I ( t ) || Oa ( t ) || S ( t ) || x ( t ) ) return ! 1 ; i = fe ( ) ; for ( a in e ) if ( "$" !== a . charAt ( 0 ) && ! M ( e [ a ] ) ) { if ( ! q ( e [ a ] , t [ a ] ) ) return ! 1 ; i [ a ] = ! 0 } for ( a in t ) if ( ! ( a in i ) && "$" !== a . charAt ( 0 ) && b ( t [ a ] ) && ! M ( t [ a ] ) ) return ! 1 ; return ! 0 } if ( ! Oa ( t ) ) return ! 1 ; if ( ( n = e . length ) == t . length ) { for ( a = 0 ; n > a ; a ++ ) if ( ! q ( e [ a ] , t [ a ] ) ) return ! 1 ; return ! 0 } } return ! 1 } function H ( e , t , n ) { return e . concat ( Aa . call ( t , n ) ) } function V ( e , t ) { return Aa . call ( e , t || 0 ) } function z ( e , t ) { var n = arguments . length > 2 ? V ( arguments , 2 ) : [ ] ; return ! M ( t ) || t instanceof RegExp ? t : n . length ? function ( ) { return arguments . length ? t . apply ( e , H ( n , arguments , 0 ) ) : t . apply ( e , n ) } : function ( ) { return arguments . length ? t . apply ( e , arguments ) : t . call ( e ) } } function W ( e , a ) { var i = a ; return "string" == typeof e && "$" === e . charAt ( 0 ) && "$" === e . charAt ( 1 ) ? i = n : I ( a ) ? i = "$WINDOW" : a && t === a ? i = "$DOCUMENT" : A ( a ) && ( i = "$SCOPE" ) , i } function G ( e , t ) { return "undefined" == typeof e ? n : ( C ( t ) || ( t = t ? 2 : null ) , JSON . stringify ( e , W , t ) ) } function K ( e ) { return $ ( e ) ? JSON . parse ( e ) : e } function Y ( e , t ) { var n = Date . parse ( "Jan 01, 1970 00:00:00 " + e ) / 6e4 ; return isNaN ( n ) ? t : n } function Z ( e , t ) { return e = new Date ( e . getTime ( ) ) , e . setMinutes ( e . getMinutes ( ) + t ) , e } function X ( e , t , n ) { n = n ? - 1 : 1 ; var a = Y ( t , e . getTimezoneOffset ( ) ) ; return Z ( e , n * ( a - e . getTimezoneOffset ( ) ) ) } function J ( e ) { e = Ma ( e ) . clone ( ) ; try { e . empty ( ) } catch ( t ) { } var n = Ma ( "<div>" ) . append ( e ) . html ( ) ; t
n . multiElement ) return ! 0 ; return ! 1 } function G ( e , t ) { var n = t . $attr , a = e . $attr , i = e . $$element ; o ( e , function ( a , i ) { "$" != i . charAt ( 0 ) && ( t [ i ] && t [ i ] !== a && ( a += ( "style" === i ? ";" : " " ) + t [ i ] ) , e . $set ( i , a , ! 0 , n [ i ] ) ) } ) , o ( t , function ( t , o ) { "class" == o ? ( T ( i , t ) , e [ "class" ] = ( e [ "class" ] ? e [ "class" ] + " " : "" ) + t ) : "style" == o ? ( i . attr ( "style" , i . attr ( "style" ) + ";" + t ) , e . style = ( e . style ? e . style + ";" : "" ) + t ) : "$" == o . charAt ( 0 ) || e . hasOwnProperty ( o ) || ( e [ o ] = t , a [ o ] = n [ o ] ) } ) } function K ( e , t , n , a , i , r , l , c ) { var d , u , p = [ ] , m = t [ 0 ] , h = e . shift ( ) , f = g ( h , { templateUrl : null , transclude : null , replace : null , $$originalDirective : h } ) , _ = M ( h . templateUrl ) ? h . templateUrl ( t , n ) : h . templateUrl , v = h . templateNamespace ; return t . empty ( ) , s ( _ ) . then ( function ( s ) { var g , y , b , k ; if ( s = de ( s ) , h . replace ) { if ( b = $e ( s ) ? [ ] : ut ( Q ( v , La ( s ) ) ) , g = b [ 0 ] , 1 != b . length || g . nodeType !== Ga ) throw Ei ( "tplrt" , "Template for directive '{0}' must have exactly one root element. {1}" , h . name , _ ) ; y = { $attr : { } } , ne ( a , t , g ) ; var $ = N ( g , [ ] , y ) ; w ( h . scope ) && H ( $ ) , e = $ . concat ( e ) , G ( n , y ) } else g = m , t . html ( s ) ; for ( e . unshift ( f ) , d = j ( e , g , n , i , t , h , r , l , c ) , o ( a , function ( e , n ) { e == g && ( a [ n ] = t [ 0 ] ) } ) , u = F ( t [ 0 ] . childNodes , i ) ; p . length ; ) { var C = p . shift ( ) , S = p . shift ( ) , M = p . shift ( ) , x = p . shift ( ) , I = t [ 0 ] ; if ( ! C . $$destroyed ) { if ( S !== m ) { var A = S . className ; c . hasElementTranscludeDirective && h . replace || ( I = Ae ( g ) ) , ne ( M , Ma ( S ) , I ) , T ( Ma ( I ) , A ) } k = d . transcludeOnThisElement ? R ( C , d . transclude , x ) : x , d ( u , C , I , a , k , d ) } } p = null } ) , function ( e , t , n , a , i ) { var o = i ; t . $$destroyed || ( p ? p . push ( t , n , a , o ) : ( d . transcludeOnThisElement && ( o = R ( t , d . transclude , i ) ) , d ( u , t , n , a , o , d ) ) ) } } function Y ( e , t ) { var n = t . priority - e . priority ; return 0 !== n ? n : e . name !== t . name ? e . name < t . name ? - 1 : 1 : e . index - t . index } function Z ( e , t , n , a ) { function i ( e ) { return e ? " (module: " + e + ")" : "" } if ( t ) throw Ei ( "multidir" , "Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}" , t . name , i ( t . $$moduleName ) , n . name , i ( n . $$moduleName ) , e , J ( a ) ) } function X ( e , t ) { var n = a ( t , ! 0 ) ; n && e . push ( { priority : 0 , compile : function ( e ) { var t = e . parent ( ) , a = ! ! t . length ; return a && D . $$addBindingClass ( t ) , function ( e , t ) { var i = t . parent ( ) ; a || D . $$addBindingClass ( i ) , D . $$addBindingInfo ( i , n . expressions ) , e . $watch ( n , function ( e ) { t [ 0 ] . nodeValue = e } ) } } } ) } function Q ( e , n ) { switch ( e = ba ( e || "html" ) ) { case "svg" : case "math" : var a = t . createElement ( "div" ) ; return a . innerHTML = "<" + e + ">" + n + "</" + e + ">" , a . childNodes [ 0 ] . childNodes ; default : return n } } function ee ( e , t ) { if ( "srcdoc" == t ) return x . HTML ; var n = O ( e ) ; return "xlinkHref" == t || "form" == n && "action" == t || "img" != n && ( "src" == t || "ngSrc" == t ) ? x . RESOURCE _URL : void 0 } function te ( e , t , n , i , o ) { var s = ee ( e , i ) ; o = v [ i ] || o ; var r = a ( n , ! 0 , s , o ) ; if ( r ) { if ( "multiple" === i && "select" === O ( e ) ) throw Ei ( "selmulti" , "Binding to the 'multiple' attribute is not supported. Element: {0}" , J ( e ) ) ; t . push ( { priority : 100 , compile : function ( ) { return { pre : function ( e , t , l ) { var c = l . $$observers || ( l . $$observers = fe ( ) ) ; if ( C . test ( i ) ) throw Ei ( "nodomevents" , "Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead." ) ; var d = l [ i ] ; d !== n && ( r = d && a ( d , ! 0 , s , o ) , n = d ) , r && ( l [ i ] = r ( e ) , ( c [ i ] || ( c [ i ] = [ ] ) ) . $$inter = ! 0 , ( l . $$observers && l . $$observers [ i ] . $$scope || e ) . $watch ( r , function ( e , t ) { "class" === i && e != t ? l . $updateClass ( e , t ) : l . $set ( i , e ) } ) ) } } } } ) } } function ne ( e , n , a ) { var i , o , s = n [ 0 ] , r = n . length , l = s . parentNode ; if ( e ) for ( i = 0 , o = e . length ; o > i ; i ++ ) if ( e [ i ] == s ) { e [ i ++ ] = a ; for ( var c = i , d = c + r - 1 , u = e . length ; u > c ; c ++ , d ++ ) u > d ? e [ c ] = e [ d ] : delete e [ c ] ; e . length -= r - 1 , e . context === s && ( e . context = a ) ; break } l && l . replaceChild ( a , s ) ; var p = t . createDocumentFragment ( ) ; p . appendChild ( s ) , Ma . hasData ( s ) && ( Ma ( a ) . data ( Ma ( s ) . data ( ) ) , xa ? ( Ua = ! 0 , xa . cleanData ( [ s ] ) ) : delete Ma . cache [ s [ Ma . expando ] ] ) ; for ( var m = 1 , g = n . length ; g > m ; m ++ ) { var h = n [ m ] ; Ma ( h ) . remove ( ) , p . appendChild ( h ) , delete n [ m ] } n [ 0 ] = a , n . length = 1 } function ae ( e , t ) { return u ( function ( ) { return e . apply ( null , arguments ) } , e , t ) } function ie ( e , t , n , a , o , s ) { try { e ( t , n , a , o , s ) } catch ( r ) { i ( r , J ( n ) ) } } function oe ( e , t , n , i , s , l ) { var c ; o ( i , function ( i , o ) { var l , d , u , p , m = i . attrName , g = i . optional , f = i . mode ; switch ( f ) { case "@" : g || wa . call ( t , m ) || ( n [ o ] = t [ m ] = void 0 ) , t . $observe ( m , function ( e ) { $ ( e ) && ( n [ o ] = e ) } ) , t . $$observers [ m ] . $$scope = e , $ ( t [ m ] ) && ( n [ o ] = a ( t [ m ] ) ( e ) ) ; break ; case "=" : if ( ! wa . call ( t , m ) ) { if ( g ) break ; t [ m ] = void 0 } if ( g && ! t [ m ] ) break ; d = r ( t [ m ] ) , p = d . literal ? q : function (
C . $$phase = e } function f ( ) { C . $$phase = null } function _ ( e , t ) { do e . $$watchersCount += t ; while ( e = e . $parent ) } function v ( e , t , n ) { do e . $$listenerCount [ n ] -= t , 0 === e . $$listenerCount [ n ] && delete e . $$listenerCount [ n ] ; while ( e = e . $parent ) } function b ( ) { } function k ( ) { for ( ; I . length ; ) try { I . shift ( ) ( ) } catch ( e ) { c ( e ) } r = null } function $ ( ) { null === r && ( r = u . defer ( function ( ) { C . $apply ( k ) } ) ) } m . prototype = { constructor : m , $new : function ( t , n ) { var a ; return n = n || this , t ? ( a = new m , a . $root = this . $root ) : ( this . $$ChildScope || ( this . $$ChildScope = e ( this ) ) , a = new this . $$ChildScope ) , a . $parent = n , a . $$prevSibling = n . $$childTail , n . $$childHead ? ( n . $$childTail . $$nextSibling = a , n . $$childTail = a ) : n . $$childHead = n . $$childTail = a , ( t || n != this ) && a . $on ( "$destroy" , p ) , a } , $watch : function ( e , t , n , a ) { var i = d ( e ) ; if ( i . $$watchDelegate ) return i . $$watchDelegate ( this , t , n , i , e ) ; var o = this , r = o . $$watchers , l = { fn : t , last : b , get : i , exp : a || e , eq : ! ! n } ; return s = null , M ( t ) || ( l . fn = h ) , r || ( r = o . $$watchers = [ ] ) , r . unshift ( l ) , _ ( this , 1 ) , function ( ) { B ( r , l ) >= 0 && _ ( o , - 1 ) , s = null } } , $watchGroup : function ( e , t ) { function n ( ) { l = ! 1 , c ? ( c = ! 1 , t ( i , i , r ) ) : t ( i , a , r ) } var a = new Array ( e . length ) , i = new Array ( e . length ) , s = [ ] , r = this , l = ! 1 , c = ! 0 ; if ( ! e . length ) { var d = ! 0 ; return r . $evalAsync ( function ( ) { d && t ( i , i , r ) } ) , function ( ) { d = ! 1 } } return 1 === e . length ? this . $watch ( e [ 0 ] , function ( e , n , o ) { i [ 0 ] = e , a [ 0 ] = n , t ( i , e === n ? i : a , o ) } ) : ( o ( e , function ( e , t ) { var o = r . $watch ( e , function ( e , o ) { i [ t ] = e , a [ t ] = o , l || ( l = ! 0 , r . $evalAsync ( n ) ) } ) ; s . push ( o ) } ) , function ( ) { for ( ; s . length ; ) s . shift ( ) ( ) } ) } , $watchCollection : function ( e , t ) { function n ( e ) { o = e ; var t , n , a , r , l ; if ( ! y ( o ) ) { if ( w ( o ) ) if ( i ( o ) ) { s !== m && ( s = m , f = s . length = 0 , u ++ ) , t = o . length , f !== t && ( u ++ , s . length = f = t ) ; for ( var c = 0 ; t > c ; c ++ ) l = s [ c ] , r = o [ c ] , a = l !== l && r !== r , a || l === r || ( u ++ , s [ c ] = r ) } else { s !== g && ( s = g = { } , f = 0 , u ++ ) , t = 0 ; for ( n in o ) wa . call ( o , n ) && ( t ++ , r = o [ n ] , l = s [ n ] , n in s ? ( a = l !== l && r !== r , a || l === r || ( u ++ , s [ n ] = r ) ) : ( f ++ , s [ n ] = r , u ++ ) ) ; if ( f > t ) { u ++ ; for ( n in s ) wa . call ( o , n ) || ( f -- , delete s [ n ] ) } } else s !== o && ( s = o , u ++ ) ; return u } } function a ( ) { if ( h ? ( h = ! 1 , t ( o , o , l ) ) : t ( o , r , l ) , c ) if ( w ( o ) ) if ( i ( o ) ) { r = new Array ( o . length ) ; for ( var e = 0 ; e < o . length ; e ++ ) r [ e ] = o [ e ] } else { r = { } ; for ( var n in o ) wa . call ( o , n ) && ( r [ n ] = o [ n ] ) } else r = o } n . $stateful = ! 0 ; var o , s , r , l = this , c = t . length > 1 , u = 0 , p = d ( e , n ) , m = [ ] , g = { } , h = ! 0 , f = 0 ; return this . $watch ( p , a ) } , $digest : function ( ) { var e , a , i , o , l , d , p , m , h , _ , v = t , y = this , w = [ ] ; g ( "$digest" ) , u . $$checkUrlChange ( ) , this === C && null !== r && ( u . defer . cancel ( r ) , k ( ) ) , s = null ; do { for ( d = ! 1 , m = y ; S . length ; ) { try { _ = S . shift ( ) , _ . scope . $eval ( _ . expression , _ . locals ) } catch ( $ ) { c ( $ ) } s = null } e : do { if ( o = m . $$watchers ) for ( l = o . length ; l -- ; ) try { if ( e = o [ l ] ) if ( ( a = e . get ( m ) ) === ( i = e . last ) || ( e . eq ? q ( a , i ) : "number" == typeof a && "number" == typeof i && isNaN ( a ) && isNaN ( i ) ) ) { if ( e === s ) { d = ! 1 ; break e } } else d = ! 0 , s = e , e . last = e . eq ? L ( a , null ) : a , e . fn ( a , i === b ? a : i , m ) , 5 > v && ( h = 4 - v , w [ h ] || ( w [ h ] = [ ] ) , w [ h ] . push ( { msg : M ( e . exp ) ? "fn: " + ( e . exp . name || e . exp . toString ( ) ) : e . exp , newVal : a , oldVal : i } ) ) } catch ( $ ) { c ( $ ) } if ( ! ( p = m . $$watchersCount && m . $$childHead || m !== y && m . $$nextSibling ) ) for ( ; m !== y && ! ( p = m . $$nextSibling ) ; ) m = m . $parent } while ( m = p ) ; if ( ( d || S . length ) && ! v -- ) throw f ( ) , n ( "infdig" , "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}" , t , w ) } while ( d || S . length ) ; for ( f ( ) ; x . length ; ) try { x . shift ( ) ( ) } catch ( $ ) { c ( $ ) } } , $destroy : function ( ) { if ( ! this . $$destroyed ) { var e = this . $parent ; this . $broadcast ( "$destroy" ) , this . $$destroyed = ! 0 , this === C && u . $$applicationDestroyed ( ) , _ ( this , - this . $$watchersCount ) ; for ( var t in this . $$listenerCount ) v ( this , this . $$listenerCount [ t ] , t ) ; e && e . $$childHead == this && ( e . $$childHead = this . $$nextSibling ) , e && e . $$childTail == this && ( e . $$childTail = this . $$prevSibling ) , this . $$prevSibling && ( this . $$prevSibling . $$nextSibling = this . $$nextSibling ) , this . $$nextSibling && ( this . $$nextSibling . $$prevSibling = this . $$prevSibling ) , this . $destroy = this . $digest = this . $apply = this . $evalAsync = this . $applyAsync = h , this . $on = this . $watch = this . $watchGroup = function ( ) { return h } , this . $$listeners = { } , this . $parent = this . $$nextSibling = this . $$prevSibling = this . $$childHead = this . $$childTail = this . $root = this . $$watchers = null } } , $eval : function ( e , t ) { return d ( e ) ( this , t ) } , $evalAsync : function ( e , t ) { C . $$phase || S . length || u . defer ( function ( ) { S . length && C . $digest ( ) } ) , S . push ( { scope : this , expression : e , locals : t } ) } , $$postDigest : fu
var o = t [ a ] ; e . appendChild ( o ) } } } , prepend : function ( e , t ) { if ( e . nodeType === Ga ) { var n = e . firstChild ; o ( new Ie ( t ) , function ( t ) { e . insertBefore ( t , n ) } ) } } , wrap : function ( e , t ) { t = Ma ( t ) . eq ( 0 ) . clone ( ) [ 0 ] ; var n = e . parentNode ; n && n . replaceChild ( t , e ) , t . appendChild ( e ) } , remove : qe , detach : function ( e ) { qe ( e , ! 0 ) } , after : function ( e , t ) { var n = e , a = e . parentNode ; t = new Ie ( t ) ; for ( var i = 0 , o = t . length ; o > i ; i ++ ) { var s = t [ i ] ; a . insertBefore ( s , n . nextSibling ) , n = s } } , addClass : Ue , removeClass : Ne , toggleClass : function ( e , t , n ) { t && o ( t . split ( " " ) , function ( t ) { var a = n ; y ( a ) && ( a = ! Re ( e , t ) ) , ( a ? Ue : Ne ) ( e , t ) } ) } , parent : function ( e ) { var t = e . parentNode ; return t && t . nodeType !== Ja ? t : null } , next : function ( e ) { return e . nextElementSibling } , find : function ( e , t ) { return e . getElementsByTagName ? e . getElementsByTagName ( t ) : [ ] } , clone : Ae , triggerHandler : function ( e , t , n ) { var a , i , s , r = t . type || t , l = Pe ( e ) , c = l && l . events , d = c && c [ r ] ; d && ( a = { preventDefault : function ( ) { this . defaultPrevented = ! 0 } , isDefaultPrevented : function ( ) { return this . defaultPrevented === ! 0 } , stopImmediatePropagation : function ( ) { this . immediatePropagationStopped = ! 0 } , isImmediatePropagationStopped : function ( ) { return this . immediatePropagationStopped === ! 0 } , stopPropagation : h , type : r , target : e } , t . type && ( a = u ( a , t ) ) , i = j ( d ) , s = n ? [ a ] . concat ( n ) : [ a ] , o ( i , function ( t ) { a . isImmediatePropagationStopped ( ) || t . apply ( e , s ) } ) ) } } , function ( e , t ) { Ie . prototype [ t ] = function ( t , n , a ) { for ( var i , o = 0 , s = this . length ; s > o ; o ++ ) y ( i ) ? ( i = e ( this [ o ] , t , n , a ) , b ( i ) && ( i = Ma ( i ) ) ) : Oe ( i , e ( this [ o ] , t , n , a ) ) ; return b ( i ) ? i : this } , Ie . prototype . bind = Ie . prototype . on , Ie . prototype . unbind = Ie . prototype . off } ) , Ye . prototype = { put : function ( e , t ) { this [ Ke ( e , this . nextUid ) ] = t } , get : function ( e ) { return this [ Ke ( e , this . nextUid ) ] } , remove : function ( e ) { var t = this [ e = Ke ( e , this . nextUid ) ] ; return delete this [ e ] , t } } ; var _i = [ function ( ) { this . $get = [ function ( ) { return Ye } ] } ] , vi = /^[^\(]*\(\s*([^\)]*)\)/m , yi = /,/ , bi = /^\s*(_?)(\S+?)\1\s*$/ , wi = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm , ki = a ( "$injector" ) ; Je . $$annotate = Xe ; var $i = a ( "$animate" ) , Ci = 1 , Si = "ng-animate" , Mi = function ( ) { this . $get = [ "$q" , "$$rAF" , function ( e , t ) { function n ( ) { } return n . all = h , n . chain = h , n . prototype = { end : h , cancel : h , resume : h , pause : h , complete : h , then : function ( n , a ) { return e ( function ( e ) { t ( function ( ) { e ( ) } ) } ) . then ( n , a ) } } , n } ] } , xi = function ( ) { var e = new Ye , t = [ ] ; this . $get = [ "$$AnimateRunner" , "$rootScope" , function ( n , a ) { function i ( e , t , n ) { var a = ! 1 ; return t && ( t = $ ( t ) ? t . split ( " " ) : Oa ( t ) ? t : [ ] , o ( t , function ( t ) { t && ( a = ! 0 , e [ t ] = n ) } ) ) , a } function s ( ) { o ( t , function ( t ) { var n = e . get ( t ) ; if ( n ) { var a = nt ( t . attr ( "class" ) ) , i = "" , s = "" ; o ( n , function ( e , t ) { var n = ! ! a [ t ] ; e !== n && ( e ? i += ( i . length ? " " : "" ) + t : s += ( s . length ? " " : "" ) + t ) } ) , o ( t , function ( e ) { i && Ue ( e , i ) , s && Ne ( e , s ) } ) , e . remove ( t ) } } ) , t . length = 0 } function r ( n , o , r ) { var l = e . get ( n ) || { } , c = i ( l , o , ! 0 ) , d = i ( l , r , ! 1 ) ; ( c || d ) && ( e . put ( n , l ) , t . push ( n ) , 1 === t . length && a . $$postDigest ( s ) ) } return { enabled : h , on : h , off : h , pin : h , push : function ( e , t , a , i ) { return i && i ( ) , a = a || { } , a . from && e . css ( a . from ) , a . to && e . css ( a . to ) , ( a . addClass || a . removeClass ) && r ( e , a . addClass , a . removeClass ) , new n } } } ] } , Ii = [ "$provide" , function ( e ) { var t = this ; this . $$registeredAnimations = Object . create ( null ) , this . register = function ( n , a ) { if ( n && "." !== n . charAt ( 0 ) ) throw $i ( "notcsel" , "Expecting class selector starting with '.' got '{0}'." , n ) ; var i = n + "-animation" ; t . $$registeredAnimations [ n . substr ( 1 ) ] = i , e . factory ( i , a ) } , this . classNameFilter = function ( e ) { if ( 1 === arguments . length && ( this . $$classNameFilter = e instanceof RegExp ? e : null , this . $$classNameFilter ) ) { var t = new RegExp ( "(\\s+|\\/)" + Si + "(\\s+|\\/)" ) ; if ( t . test ( this . $$classNameFilter . toString ( ) ) ) throw $i ( "nongcls" , '$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.' , Si ) } return this . $$classNameFilter } , this . $get = [ "$$animateQueue" , function ( e ) { function t ( e , t , n ) { if ( n ) { var a = tt ( n ) ; ! a || a . parentNode || a . previousElementSibling || ( n = null ) } n ? n . after ( e ) : t . prepend ( e ) } return { on : e . on , off : e . off , pin : e . pin , enabled : e . enabled , cancel : function ( e ) { e . end && e . end ( ) } , enter : function ( n , a , i , o ) { return a = a && Ma ( a ) , i = i && Ma ( i ) , a = a || i . parent ( ) , t ( n , a , i ) , e . push ( n , "enter" , at ( o ) ) } , move : function ( n , a , i , o ) { return a = a && Ma ( a ) , i = i && Ma ( i ) , a = a || i . parent ( ) , t ( n , a , i ) , e . push ( n , "move" , at ( o ) ) } , leave : function ( t , n ) { return e . push ( t , "leave" , a
ho [ t ] = function ( ) { return { priority : 99 , link : function ( n , a , i ) { var o = e , s = e ; "href" === e && "[object SVGAnimatedString]" === Da . call ( a . prop ( "href" ) ) && ( s = "xlinkHref" , i . $attr [ s ] = "xlink:href" , o = null ) , i . $observe ( t , function ( t ) { return t ? ( i . $set ( s , t ) , void ( Sa && o && a . prop ( o , i [ s ] ) ) ) : void ( "href" === e && i . $set ( s , null ) ) } ) } } } } ) ; var fo = { $addControl : h , $$renameControl : ea , $removeControl : h , $setValidity : h , $setDirty : h , $setPristine : h , $setSubmitted : h } , _o = "ng-submitted" ; ta . $inject = [ "$element" , "$attrs" , "$scope" , "$animate" , "$interpolate" ] ; var vo = function ( e ) { return [ "$timeout" , "$parse" , function ( t , a ) { function i ( e ) { return "" === e ? a ( 'this[""]' ) . assign : a ( e ) . assign || h } var o = { name : "form" , restrict : e ? "EAC" : "E" , require : [ "form" , "^^?form" ] , controller : ta , compile : function ( a , o ) { a . addClass ( Jo ) . addClass ( Zo ) ; var s = o . name ? "name" : e && o . ngForm ? "ngForm" : ! 1 ; return { pre : function ( e , a , o , r ) { var l = r [ 0 ] ; if ( ! ( "action" in o ) ) { var c = function ( t ) { e . $apply ( function ( ) { l . $commitViewValue ( ) , l . $setSubmitted ( ) } ) , t . preventDefault ( ) } ; ni ( a [ 0 ] , "submit" , c ) , a . on ( "$destroy" , function ( ) { t ( function ( ) { ai ( a [ 0 ] , "submit" , c ) } , 0 , ! 1 ) } ) } var d = r [ 1 ] || l . $$parentForm ; d . $addControl ( l ) ; var p = s ? i ( l . $name ) : h ; s && ( p ( e , l ) , o . $observe ( s , function ( t ) { l . $name !== t && ( p ( e , n ) , l . $$parentForm . $$renameControl ( l , t ) , ( p = i ( l . $name ) ) ( e , l ) ) } ) ) , a . on ( "$destroy" , function ( ) { l . $$parentForm . $removeControl ( l ) , p ( e , n ) , u ( l , fo ) } ) } } } } ; return o } ] } , yo = vo ( ) , bo = vo ( ! 0 ) , wo = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/ , ko = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/ , $o = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i , Co = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/ , So = /^(\d{4})-(\d{2})-(\d{2})$/ , Mo = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/ , xo = /^(\d{4})-W(\d\d)$/ , Io = /^(\d{4})-(\d\d)$/ , Ao = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/ , Eo = { text : aa , date : ra ( "date" , So , sa ( So , [ "yyyy" , "MM" , "dd" ] ) , "yyyy-MM-dd" ) , "datetime-local" : ra ( "datetimelocal" , Mo , sa ( Mo , [ "yyyy" , "MM" , "dd" , "HH" , "mm" , "ss" , "sss" ] ) , "yyyy-MM-ddTHH:mm:ss.sss" ) , time : ra ( "time" , Ao , sa ( Ao , [ "HH" , "mm" , "ss" , "sss" ] ) , "HH:mm:ss.sss" ) , week : ra ( "week" , xo , oa , "yyyy-Www" ) , month : ra ( "month" , Io , sa ( Io , [ "yyyy" , "MM" ] ) , "yyyy-MM" ) , number : ca , url : da , email : ua , radio : pa , checkbox : ga , hidden : h , button : h , submit : h , reset : h , file : h } , To = [ "$browser" , "$sniffer" , "$filter" , "$parse" , function ( e , t , n , a ) { return { restrict : "E" , require : [ "?ngModel" ] , link : { pre : function ( i , o , s , r ) { r [ 0 ] && ( Eo [ ba ( s . type ) ] || Eo . text ) ( i , o , s , r [ 0 ] , t , e , n , a ) } } } } ] , Do = /^(true|false|\d+)$/ , Po = function ( ) { return { restrict : "A" , priority : 100 , compile : function ( e , t ) { return Do . test ( t . ngValue ) ? function ( e , t , n ) { n . $set ( "value" , e . $eval ( n . ngValue ) ) } : function ( e , t , n ) { e . $watch ( n . ngValue , function ( e ) { n . $set ( "value" , e ) } ) } } } } , Fo = [ "$compile" , function ( e ) { return { restrict : "AC" , compile : function ( t ) { return e . $$addBindingClass ( t ) , function ( t , n , a ) { e . $$addBindingInfo ( n , a . ngBind ) , n = n [ 0 ] , t . $watch ( a . ngBind , function ( e ) { n . textContent = y ( e ) ? "" : e } ) } } } } ] , Ro = [ "$interpolate" , "$compile" , function ( e , t ) { return { compile : function ( n ) { return t . $$addBindingClass ( n ) , function ( n , a , i ) { var o = e ( a . attr ( i . $attr . ngBindTemplate ) ) ; t . $$addBindingInfo ( a , o . expressions ) , a = a [ 0 ] , i . $observe ( "ngBindTemplate" , function ( e ) { a . textContent = y ( e ) ? "" : e } ) } } } } ] , No = [ "$sce" , "$parse" , "$compile" , function ( e , t , n ) { return { restrict : "A" , compile : function ( a , i ) { var o = t ( i . ngBindHtml ) , s = t ( i . ngBindHtml , function ( e ) { return ( e || "" ) . toString ( ) } ) ; return n . $$addBindingClass ( a ) , function ( t , a , i ) { n . $$addBindingInfo ( a , i . ngBindHtml ) , t . $watch ( s , function ( ) { a . html ( e . getTrustedHtml ( o ( t ) ) || "" ) } ) } } } } ] , Uo = _ ( { restrict : "A" , require : "ngModel" , link : function ( e , t , n , a ) { a . $viewChangeListeners . push ( function ( ) { e . $eval ( n . ngChange ) } ) } } ) , Oo = ha ( "" , ! 0 ) , Bo = ha ( "Odd" , 0 ) , Lo = ha ( "Even" , 1 ) , jo = Qn ( { compile : function ( e , t ) { t . $set ( "ngCloak" , n ) , e . removeClass ( "ng-cloak" ) } } ) , qo = [ function ( ) { return { restrict : "A" , scope : ! 0 , controller : "@" , priority : 500 } } ] , Ho = { } , Vo = { blur : ! 0 , focus : ! 0 } ; o ( "click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste" . split ( " " ) , function ( e ) { var t = ct ( "ng-" + e ) ; Ho [ t ] = [ "$parse" , "$rootScope" , function ( n , a ) { return { restric
n . preparationClasses && ( t . preparationClasses = S ( n . preparationClasses , t . preparationClasses ) , delete n . preparationClasses ) ; var s = t . domOperation !== O ? t . domOperation : null ; return B ( t , n ) , s && ( t . domOperation = s ) , t . addClass = o . addClass ? o . addClass : null , t . removeClass = o . removeClass ? o . removeClass : null , t } function v ( e , t , n ) { function a ( e ) { H ( e ) && ( e = e . split ( " " ) ) ; var t = { } ; return j ( e , function ( e ) { e . length && ( t [ e ] = ! 0 ) } ) , t } var i = 1 , o = - 1 , s = { } ; e = a ( e ) , t = a ( t ) , j ( t , function ( e , t ) { s [ t ] = i } ) , n = a ( n ) , j ( n , function ( e , t ) { s [ t ] = s [ t ] === i ? null : o } ) ; var r = { addClass : "" , removeClass : "" } ; return j ( s , function ( t , n ) { var a , s ; t === i ? ( a = "addClass" , s = ! e [ n ] ) : t === o && ( a = "removeClass" , s = e [ n ] ) , s && ( r [ a ] . length && ( r [ a ] += " " ) , r [ a ] += n ) } ) , r } function y ( e ) { return e instanceof t . element ? e [ 0 ] : e } function b ( e , t , n ) { var a = "" ; t && ( a = s ( t , J , ! 0 ) ) , n . addClass && ( a = S ( a , s ( n . addClass , Z ) ) ) , n . removeClass && ( a = S ( a , s ( n . removeClass , X ) ) ) , a . length && ( n . preparationClasses = a , e . addClass ( a ) ) } function w ( e , t ) { t . preparationClasses && ( e . removeClass ( t . preparationClasses ) , t . preparationClasses = null ) , t . activeClasses && ( e . removeClass ( t . activeClasses ) , t . activeClasses = null ) } function k ( e , t ) { var n = t ? "-" + t + "s" : "" ; return C ( e , [ pe , n ] ) , [ pe , n ] } function $ ( e , t ) { var n = t ? "paused" : "" , a = N + le ; return C ( e , [ a , n ] ) , [ a , n ] } function C ( e , t ) { var n = t [ 0 ] , a = t [ 1 ] ; e . style [ n ] = a } function S ( e , t ) { return e ? t ? e + " " + t : e : t } function M ( e ) { return [ ue , e + "s" ] } function x ( e , t ) { var n = t ? de : pe ; return [ n , e + "s" ] } function I ( e , t , n ) { var a = Object . create ( null ) , i = e . getComputedStyle ( t ) || { } ; return j ( n , function ( e , t ) { var n = i [ e ] ; if ( n ) { var o = n . charAt ( 0 ) ; ( "-" === o || "+" === o || o >= 0 ) && ( n = A ( n ) ) , 0 === n && ( n = null ) , a [ t ] = n } } ) , a } function A ( e ) { var t = 0 , n = e . split ( /\s*,\s*/ ) ; return j ( n , function ( e ) { "s" == e . charAt ( e . length - 1 ) && ( e = e . substring ( 0 , e . length - 1 ) ) , e = parseFloat ( e ) || 0 , t = t ? Math . max ( e , t ) : e } ) , t } function E ( e ) { return 0 === e || null != e } function T ( e , t ) { var n = F , a = e + "s" ; return t ? n += ae : a += " linear all" , [ n , a ] } function D ( ) { var e = Object . create ( null ) ; return { flush : function ( ) { e = Object . create ( null ) } , count : function ( t ) { var n = e [ t ] ; return n ? n . total : 0 } , get : function ( t ) { var n = e [ t ] ; return n && n . value } , put : function ( t , n ) { e [ t ] ? e [ t ] . total ++ : e [ t ] = { total : 1 , value : n } } } } function P ( e , t , n ) { j ( n , function ( n ) { e [ n ] = W ( e [ n ] ) ? e [ n ] : t . style . getPropertyValue ( n ) } ) } var F , R , N , U , O = t . noop , B = t . extend , L = t . element , j = t . forEach , q = t . isArray , H = t . isString , V = t . isObject , z = t . isUndefined , W = t . isDefined , G = t . isFunction , K = t . isElement , Y = 1 , Z = "-add" , X = "-remove" , J = "ng-" , Q = "-active" , ee = "ng-animate" , te = "$$ngAnimateChildren" , ne = "" ; z ( e . ontransitionend ) && W ( e . onwebkittransitionend ) ? ( ne = "-webkit-" , F = "WebkitTransition" , R = "webkitTransitionEnd transitionend" ) : ( F = "transition" , R = "transitionend" ) , z ( e . onanimationend ) && W ( e . onwebkitanimationend ) ? ( ne = "-webkit-" , N = "WebkitAnimation" , U = "webkitAnimationEnd animationend" ) : ( N = "animation" , U = "animationend" ) ; var ae = "Duration" , ie = "Property" , oe = "Delay" , se = "TimingFunction" , re = "IterationCount" , le = "PlayState" , ce = 9999 , de = N + oe , ue = N + ae , pe = F + oe , me = F + ae , ge = [ "$$rAF" , function ( e ) { function t ( e ) { a = a . concat ( e ) , n ( ) } function n ( ) { if ( a . length ) { for ( var t = a . shift ( ) , o = 0 ; o < t . length ; o ++ ) t [ o ] ( ) ; i || e ( function ( ) { i || n ( ) } ) } } var a , i ; return a = t . queue = [ ] , t . waitUntilQuiet = function ( t ) { i && i ( ) , i = e ( function ( ) { i = null , t ( ) , n ( ) } ) } , t } ] , he = [ function ( ) { return function ( e , n , a ) { var i = a . ngAnimateChildren ; t . isString ( i ) && 0 === i . length ? n . data ( te , ! 0 ) : a . $observe ( "ngAnimateChildren" , function ( e ) { e = "on" === e || "true" === e , n . data ( te , e ) } ) } } ] , fe = "$$animateCss" , _e = 1e3 , ve = 3 , ye = 1.5 , be = { transitionDuration : me , transitionDelay : pe , transitionProperty : F + ie , animationDuration : ue , animationDelay : de , animationIterationCount : N + re } , we = { transitionDuration : me , transitionDelay : pe , animationDuration : ue , animationDelay : de } , ke = [ "$animateProvider" , function ( e ) { var t = D ( ) , n = D ( ) ; this . $get = [ "$window" , "$$jqLite" , "$$AnimateRunner" , "$timeout" , "$$forceReflow" , "$sniffer" , "$$rAFScheduler" , "$animate" , function ( e , a , i , l , c , d , u , _ ) { function v ( e , t ) { var n = "$$ngAnimateParentKey" , a = e . parentNode , i = a [ n ] || ( a [ n ] = ++ B ) ; return i + "-" + e . getAttribute ( "class" ) + "-" + t } function b ( n , a , i , o ) { var s = t . get ( i ) ; return s || ( s = I ( e , n , o ) , "infinite" === s . animationIterationCount && ( s . animationIterationCount = 1 ) ) , t . put ( i , s ) , s } function w ( i , o , r , l ) { var c ; if ( t . count ( r ) > 0 && ( c = n . get ( r ) , ! c ) ) { var d = s ( o , "-stagger" ) ; a .
e } ] ) } ] ) , i . directive ( "ngClick" , [ "$parse" , "$timeout" , "$rootElement" , function ( e , n , a ) { function i ( e , t , n , a ) { return Math . abs ( e - n ) < h && Math . abs ( t - a ) < h } function o ( e , t , n ) { for ( var a = 0 ; a < e . length ; a += 2 ) if ( i ( e [ a ] , e [ a + 1 ] , t , n ) ) return e . splice ( a , a + 2 ) , ! 0 ; return ! 1 } function s ( e ) { if ( ! ( Date . now ( ) - c > g ) ) { var t = e . touches && e . touches . length ? e . touches : [ e ] , n = t [ 0 ] . clientX , a = t [ 0 ] . clientY ; 1 > n && 1 > a || u && u [ 0 ] === n && u [ 1 ] === a || ( u && ( u = null ) , "label" === e . target . tagName . toLowerCase ( ) && ( u = [ n , a ] ) , o ( d , n , a ) || ( e . stopPropagation ( ) , e . preventDefault ( ) , e . target && e . target . blur ( ) ) ) } } function r ( e ) { var t = e . touches && e . touches . length ? e . touches : [ e ] , a = t [ 0 ] . clientX , i = t [ 0 ] . clientY ; d . push ( a , i ) , n ( function ( ) { for ( var e = 0 ; e < d . length ; e += 2 ) if ( d [ e ] == a && d [ e + 1 ] == i ) return void d . splice ( e , e + 2 ) } , g , ! 1 ) } function l ( e , t ) { d || ( a [ 0 ] . addEventListener ( "click" , s , ! 0 ) , a [ 0 ] . addEventListener ( "touchstart" , r , ! 0 ) , d = [ ] ) , c = Date . now ( ) , o ( d , e , t ) } var c , d , u , p = 750 , m = 12 , g = 2500 , h = 25 , f = "ng-click-active" ; return function ( n , a , i ) { function o ( ) { g = ! 1 , a . removeClass ( f ) } var s , r , c , d , u = e ( i . ngClick ) , g = ! 1 ; a . on ( "touchstart" , function ( e ) { g = ! 0 , s = e . target ? e . target : e . srcElement , 3 == s . nodeType && ( s = s . parentNode ) , a . addClass ( f ) , r = Date . now ( ) ; var t = e . touches && e . touches . length ? e . touches : [ e ] , n = t [ 0 ] . originalEvent || t [ 0 ] ; c = n . clientX , d = n . clientY } ) , a . on ( "touchmove" , function ( e ) { o ( ) } ) , a . on ( "touchcancel" , function ( e ) { o ( ) } ) , a . on ( "touchend" , function ( e ) { var n = Date . now ( ) - r , u = e . changedTouches && e . changedTouches . length ? e . changedTouches : e . touches && e . touches . length ? e . touches : [ e ] , h = u [ 0 ] . originalEvent || u [ 0 ] , f = h . clientX , _ = h . clientY , v = Math . sqrt ( Math . pow ( f - c , 2 ) + Math . pow ( _ - d , 2 ) ) ; g && p > n && m > v && ( l ( f , _ ) , s && s . blur ( ) , t . isDefined ( i . disabled ) && i . disabled !== ! 1 || a . triggerHandler ( "click" , [ e ] ) ) , o ( ) } ) , a . onclick = function ( e ) { } , a . on ( "click" , function ( e , t ) { n . $apply ( function ( ) { u ( n , { $event : t || e } ) } ) } ) , a . on ( "mousedown" , function ( e ) { a . addClass ( f ) } ) , a . on ( "mousemove mouseup" , function ( e ) { a . removeClass ( f ) } ) } } ] ) , a ( "ngSwipeLeft" , - 1 , "swipeleft" ) , a ( "ngSwipeRight" , 1 , "swiperight" ) } ( window , window . angular ) , angular . module ( "ui.bootstrap" , [ "ui.bootstrap.tpls" , "ui.bootstrap.dropdown" , "ui.bootstrap.tooltip" , "ui.bootstrap.position" , "ui.bootstrap.bindHtml" , "ui.bootstrap.modal" , "ui.bootstrap.transition" ] ) , angular . module ( "ui.bootstrap.tpls" , [ "template/tooltip/tooltip-html-unsafe-popup.html" , "template/tooltip/tooltip-popup.html" , "template/modal/backdrop.html" , "template/modal/window.html" ] ) , angular . module ( "ui.bootstrap.dropdown" , [ ] ) . constant ( "dropdownConfig" , { openClass : "open" } ) . service ( "dropdownService" , [ "$document" , function ( e ) { var t = null ; this . open = function ( i ) { t || ( e . bind ( "click" , n ) , e . bind ( "keydown" , a ) ) , t && t !== i && ( t . isOpen = ! 1 ) , t = i } , this . close = function ( i ) { t === i && ( t = null , e . unbind ( "click" , n ) , e . unbind ( "keydown" , a ) ) } ; var n = function ( e ) { if ( t ) { var n = t . getToggleElement ( ) ; e && n && n [ 0 ] . contains ( e . target ) || t . $apply ( function ( ) { t . isOpen = ! 1 } ) } } , a = function ( e ) { 27 === e . which && ( t . focusToggleElement ( ) , n ( ) ) } } ] ) . controller ( "DropdownController" , [ "$scope" , "$attrs" , "$parse" , "dropdownConfig" , "dropdownService" , "$animate" , function ( e , t , n , a , i , o ) { var s , r = this , l = e . $new ( ) , c = a . openClass , d = angular . noop , u = t . onToggle ? n ( t . onToggle ) : angular . noop ; this . init = function ( a ) { r . $element = a , t . isOpen && ( s = n ( t . isOpen ) , d = s . assign , e . $watch ( s , function ( e ) { l . isOpen = ! ! e } ) ) } , this . toggle = function ( e ) { return l . isOpen = arguments . length ? ! ! e : ! l . isOpen } , this . isOpen = function ( ) { 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 && u ( 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 . $watc
_DEC _XFORM _MODE : 2 , _createHelper : function ( ) { function e ( e ) { return "string" == typeof e ? k : y } return function ( t ) { return { encrypt : function ( n , a , i ) { return e ( a ) . encrypt ( t , n , a , i ) } , decrypt : function ( n , a , i ) { return e ( a ) . decrypt ( t , n , a , i ) } } } } ( ) } ) , u = ( n . StreamCipher = d . extend ( { _doFinalize : function ( ) { var e = this . _process ( ! 0 ) ; return e } , blockSize : 1 } ) , t . mode = { } ) , p = n . BlockCipherMode = a . extend ( { createEncryptor : function ( e , t ) { return this . Encryptor . create ( e , t ) } , createDecryptor : function ( e , t ) { return this . Decryptor . create ( e , t ) } , init : function ( e , t ) { this . _cipher = e , this . _iv = t } } ) , m = u . CBC = function ( ) { function t ( t , n , a ) { var i = this . _iv ; if ( i ) { var o = i ; this . _iv = e } else var o = this . _prevBlock ; for ( var s = 0 ; a > s ; s ++ ) t [ n + s ] ^= o [ s ] } var n = p . extend ( ) ; return n . Encryptor = n . extend ( { processBlock : function ( e , n ) { var a = this . _cipher , i = a . blockSize ; t . call ( this , e , n , i ) , a . encryptBlock ( e , n ) , this . _prevBlock = e . slice ( n , n + i ) } } ) , n . Decryptor = n . extend ( { processBlock : function ( e , n ) { var a = this . _cipher , i = a . blockSize , o = e . slice ( n , n + i ) ; a . decryptBlock ( e , n ) , t . call ( this , e , n , i ) , this . _prevBlock = o } } ) , n } ( ) , g = ( u . IGE = function ( ) { function t ( e , t , n , a ) { for ( var i = 0 ; a > i ; i ++ ) e [ n + i ] ^= t [ i ] } var n = p . extend ( ) ; return n . Encryptor = n . extend ( { processBlock : function ( n , a ) { var i = this . _cipher , o = i . blockSize ; this . _ivp === e && ( this . _ivp = this . _iv . slice ( 0 , o ) , this . _iv2p = this . _iv . slice ( o , o + o ) ) ; var s = n . slice ( a , a + o ) ; t ( n , this . _ivp , a , o ) , i . encryptBlock ( n , a ) , t ( n , this . _iv2p , a , o ) , this . _ivp = n . slice ( a , a + o ) , this . _iv2p = s } } ) , n . Decryptor = n . extend ( { processBlock : function ( n , a ) { var i = this . _cipher , o = i . blockSize ; this . _ivp === e && ( this . _ivp = this . _iv . slice ( 0 , o ) , this . _iv2p = this . _iv . slice ( o , 2 * o ) ) ; var s = n . slice ( a , a + o ) ; t ( n , this . _iv2p , a , o ) , i . decryptBlock ( n , a ) , t ( n , this . _ivp , a , o ) , this . _ivp = s , this . _iv2p = n . slice ( a , a + o ) } } ) , n } ( ) , t . pad = { } ) , h = g . Pkcs7 = { pad : function ( e , t ) { for ( var n = 4 * t , a = n - e . sigBytes % n , o = a << 24 | a << 16 | a << 8 | a , s = [ ] , r = 0 ; a > r ; r += 4 ) s . push ( o ) ; var l = i . create ( s , a ) ; e . concat ( l ) } , unpad : function ( e ) { var t = 255 & e . words [ e . sigBytes - 1 >>> 2 ] ; e . sigBytes -= t } } , f = ( g . NoPadding = { pad : function ( ) { } , unpad : function ( ) { } } , n . BlockCipher = d . extend ( { cfg : d . cfg . extend ( { mode : m , padding : h } ) , reset : function ( ) { d . reset . call ( this ) ; var e = this . cfg , t = e . iv , n = e . mode ; if ( this . _xformMode == this . _ENC _XFORM _MODE ) var a = n . createEncryptor ; else { var a = n . createDecryptor ; this . _minBufferSize = 1 } this . _mode = a . call ( n , this , t && t . words ) } , _doProcessBlock : function ( e , t ) { this . _mode . processBlock ( e , t ) } , _doFinalize : function ( ) { var e = this . cfg . padding ; if ( this . _xformMode == this . _ENC _XFORM _MODE ) { e . pad ( this . _data , this . blockSize ) ; var t = this . _process ( ! 0 ) } else { var t = this . _process ( ! 0 ) ; e . unpad ( t ) } return t } , blockSize : 4 } ) , n . CipherParams = a . extend ( { init : function ( e ) { this . mixIn ( e ) } , toString : function ( e ) { return ( e || this . formatter ) . stringify ( this ) } } ) ) , _ = t . format = { } , v = _ . OpenSSL = { stringify : function ( e ) { var t = e . ciphertext , n = e . salt ; if ( n ) var a = i . create ( [ 1398893684 , 1701076831 ] ) . concat ( n ) . concat ( t ) ; else var a = t ; return a . toString ( r ) } , parse : function ( e ) { var t = r . parse ( e ) , n = t . words ; if ( 1398893684 == n [ 0 ] && 1701076831 == n [ 1 ] ) { var a = i . create ( n . slice ( 2 , 4 ) ) ; n . splice ( 0 , 4 ) , t . sigBytes -= 16 } return f . create ( { ciphertext : t , salt : a } ) } } , y = n . SerializableCipher = a . extend ( { cfg : a . extend ( { format : v } ) , encrypt : function ( e , t , n , a ) { a = this . cfg . extend ( a ) ; var i = e . createEncryptor ( n , a ) , o = i . finalize ( t ) , s = i . cfg ; return f . create ( { ciphertext : o , key : n , iv : s . iv , algorithm : e , mode : s . mode , padding : s . padding , 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 } } ) } (
} , goog . math . Long . prototype . or = function ( e ) { return goog . math . Long . fromBits ( this . low _ | e . low _ , this . high _ | e . high _ ) } , goog . math . Long . prototype . xor = function ( e ) { return goog . math . Long . fromBits ( this . low _ ^ e . low _ , this . high _ ^ e . high _ ) } , goog . math . Long . prototype . shiftLeft = function ( e ) { if ( e &= 63 , 0 == e ) return this ; var t = this . low _ ; if ( 32 > e ) { var n = this . high _ ; return goog . math . Long . fromBits ( t << e , n << e | t >>> 32 - e ) } return goog . math . Long . fromBits ( 0 , t << e - 32 ) } , goog . math . Long . prototype . shiftRight = function ( e ) { if ( e &= 63 , 0 == e ) return this ; var t = this . high _ ; if ( 32 > e ) { var n = this . low _ ; return goog . math . Long . fromBits ( n >>> e | t << 32 - e , t >> e ) } return goog . math . Long . fromBits ( t >> e - 32 , t >= 0 ? 0 : - 1 ) } , goog . math . Long . prototype . shiftRightUnsigned = function ( e ) { if ( e &= 63 , 0 == e ) return this ; var t = this . high _ ; if ( 32 > e ) { var n = this . low _ ; return goog . math . Long . fromBits ( n >>> e | t << 32 - e , t >>> e ) } return 32 == e ? goog . math . Long . fromBits ( t , 0 ) : goog . math . Long . fromBits ( t >>> e - 32 , 0 ) } , bpe = 0 , mask = 0 , radix = mask + 1 , digitsStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-" ; for ( bpe = 0 ; 1 << bpe + 1 > 1 << bpe ; bpe ++ ) ; bpe >>= 1 , mask = ( 1 << bpe ) - 1 , radix = mask + 1 , one = int2bigInt ( 1 , 1 , 1 ) , t = new Array ( 0 ) , ss = t , s0 = t , s1 = t , s2 = t , s3 = t , s4 = t , s5 = t , s6 = t , s7 = t , T = t , sa = t , mr _x1 = t , mr _r = t , mr _a = t , eg _v = t , eg _u = t , eg _A = t , eg _B = t , eg _C = t , eg _D = t , md _q1 = t , md _q2 = t , md _q3 = t , md _r = t , md _r1 = t , md _r2 = t , md _tt = t , primes = t , pows = t , s _i = t , s _i2 = t , s _R = t , s _rm = t , s _q = t , s _n1 = t , s _a = t , s _r2 = t , s _n = t , s _b = t , s _d = t , s _x1 = t , s _x2 = t , s _aa = t , rpprb = t , function ( ) { function e ( e ) { return JSON . parse ( JSON . stringify ( e ) ) } function t ( e , t , n , a , o ) { for ( i = 0 ; i < o ; ++ i ) e [ t + i ] = n [ a + i ] } function n ( e ) { var t , n = [ ] , a = e . length ; for ( t = 0 ; a > t ; ++ t ) n . push ( e [ t ] ) ; return n } function a ( t , n ) { var a = [ ] ; a . push ( e ( t ) ) ; var i ; for ( i = 0 ; n > i ; ++ i ) a . push ( e ( t ) ) ; return a . push ( 0 ) , a } function o ( e , t ) { var n , a = [ ] ; for ( n = 0 ; t > n ; ++ n ) a . push ( e ) ; return a . push ( 0 ) , a } function s ( e , t , n , a , i ) { var o ; for ( o = 0 ; i > o ; o ++ ) e [ t + o ] = n [ a + o ] } function r ( e , t , n , a ) { var i ; for ( i = 0 ; a > i ; ++ i ) e [ t + i ] = n } function l ( e , t , n , a ) { var i , o = "" ; for ( i = 0 ; a > i ; ++ i ) o += String . fromCharCode ( e [ t + i ] ) ; return n == o ? 0 : 1 } function c ( e , t ) { var n , a = [ ] ; for ( n = 0 ; e > n ; ++ n ) a . push ( t ) ; return a } function d ( t , n ) { var a , i = [ ] ; for ( a = 0 ; t > a ; ++ a ) i . push ( e ( n ) ) ; return i } function u ( t , n ) { var a ; for ( a = t . length - 1 ; a >= 0 ; -- a ) n = e ( c ( t [ a ] , n ) ) ; return n } function p ( e ) { if ( ! e ) throw Error ( "assert :P" ) } var m = void 0 , g = null , h = 0 , f = 0 , _ = h , v = h , y = 0 , b = 0 ; window . WebPDecoder = function ( ) { function w ( e ) { return e == zt || e == Wt || e == Gt || e == Kt } function k ( e ) { return S ( e , 1 ) } function $ ( e , t ) { var n = 1 + ( ( e . la - 1 ) * t >> 8 ) , a = n << 8 , i = h ; for ( e . Z >= a ? ( i = 1 , e . la -= n , e . Z -= a ) : ( i = 0 , e . la = n ) ; 128 > e . la ; ) e . Z <<= 1 , e . la <<= 1 , 8 == ++ e . gc && ( e . gc = 0 , e . bc && ( e . Z += e . qa [ e . Ia ++ ] , e . bc -- ) ) ; return i } function C ( e , t , n , a ) { a -= n , a >= 2 ? ( e . Z = t [ n + 0 ] << 8 | t [ n + 1 ] , e . qa = t , e . Ia = n + 2 , e . bc = a - 2 ) : ( e . Z = 0 , e . qa = g , e . bc = 0 ) , e . la = 255 , e . gc = 0 } function S ( e , t ) { for ( var n = 0 , a = h , a = t - 1 ; a >= 0 ; a -- ) n |= $ ( e , 128 ) << a ; return n } function M ( e , t ) { var n = S ( e , t ) ; return k ( e ) ? - n : n } function x ( e , t , n , a ) { var i = b ; for ( p ( e != g ) , p ( t != g ) , p ( 4294967288 > a ) , e . qa = t , e . Ia = n , e . ya = a , e . T = 0 , e . Q = 0 , e . g = 0 , e . L = 0 , i = e . fa = 0 ; 4 > i && i < e . ya ; ++ i ) e . T |= e . qa [ e . Ia + e . Q ] << 8 * i , ++ e . Q } function I ( e ) { for ( ; 8 <= e . g && e . Q < e . ya ; ) e . T >>>= 8 , e . T += e . qa [ e . Ia + e . Q ] << 24 >>> 0 , ++ e . Q , e . g -= 8 } function A ( e ) { 8 <= e . g && I ( e ) , e . Q == e . ya && 32 == e . g && ( e . L = 1 ) } function E ( e , t ) { var n = 0 ; if ( p ( t >= 0 ) , ! e . L && hn > t ) { if ( e . Q == e . ya && 32 <= e . g + t && ( e . L = 1 , 32 < e . g + t ) ) return n ; n = e . T >> e . g & fn [ t ] , 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 p ( 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 F ( 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 R ( e , t , n ) { var a = h , i = 0 , o = 0 ; for ( p ( e != g ) , p ( t != g ) , a = 0 ; n > a ; ++ a ) 0 < t [ a ] && ( ++ i , o = a ) ; if ( ! D ( e , i ) ) return 0 ; if ( 1 == i ) return 0 > o || o >= n ? ( P ( e ) , 0 ) : F ( 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 ( p ( t != g ) , p ( n > 0 ) , p ( o != g ) , s = 0 ; n > s ; ++ s ) t [ s ] > d && ( d = t [ s ] ) ; if ( d > Mn ) a = 0 ; else { for ( s = 0 ; n > s ; ++ s ) ++ a [ t [ s ] ] ; for ( r = a [ 0 ] = 0 , l [ 0 ] = - 1 , s = 1 ; d >= s
_ ( n [ a + f - 1 ] , 255 & $ , $ >> 16 , g , h + ( f - 1 ) * v ) ) ) } function st ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , Me , 3 ) } function rt ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , Ee , 3 ) } function lt ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , De , 4 ) } function ct ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , Te , 4 ) } function dt ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , Ie , 4 ) } function ut ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , Ae , 2 ) } function pt ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f ) { ot ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , xe , 2 ) } function mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g ) { var h ; for ( h = 0 ; p - 1 > h ; h += 2 ) m ( e [ t + 0 ] , i [ o + 0 ] , s [ r + 0 ] , l , c ) , m ( e [ t + 1 ] , i [ o + 0 ] , s [ r + 0 ] , l , c + g ) , m ( n [ a + 0 ] , i [ o + 0 ] , s [ r + 0 ] , d , u ) , m ( n [ a + 1 ] , i [ o + 0 ] , s [ r + 0 ] , d , u + g ) , t += 2 , a += 2 , o ++ , r ++ , c += 2 * g , u += 2 * g ; h == p - 1 && ( m ( e [ t + 0 ] , i [ o + 0 ] , s [ r + 0 ] , l , c ) , m ( n [ a + 0 ] , i [ o + 0 ] , s [ r + 0 ] , d , u ) ) } function gt ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , De , 4 ) } function ht ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Te , 4 ) } function ft ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Ie , 4 ) } function _t ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { mt ( e , t , n , a , i , o , s , r , l , c , d , u , p , Ae , 2 ) } function vt ( e , t , n , a , i , o ) { for ( ; 0 < i -- ; ) { for ( var s = e , r = t + ( n ? 1 : 0 ) , l = e , c = t + ( n ? 0 : 3 ) , d = h , d = 0 ; a > d ; ++ d ) { var u = l [ c + 4 * d ] ; if ( 255 != u ) { var u = 32897 * u , p = s , g = r + 4 * d + 0 ; s [ r + 4 * d + 0 ] * u >>> 23 , p [ g ] = m , p = s , g = r + 4 * d + 1 , s [ r + 4 * d + 1 ] * u >>> 23 , p [ g ] = m , p = s , g = r + 4 * d + 2 , s [ r + 4 * d + 2 ] * u >>> 23 , p [ g ] = m } } t += o } } function yt ( e , n ) { var a , i = n . j . c . Va , o = i . y , s = i . D + e . w * i . F , r = i . c , l = i . B + ( e . w >> 1 ) * i . nb , c = i . S , d = i . C + ( e . w >> 1 ) * i . rb , u = e . m , p = e . h , m = parseInt ( ( u + 1 ) / 2 , 10 ) , g = parseInt ( ( p + 1 ) / 2 , 10 ) ; for ( a = 0 ; p > a ; ++ a ) t ( o , s + a * i . F , e . y , e . D + a * e . F , u ) ; for ( a = 0 ; g > a ; ++ a ) t ( r , l + a * i . nb , e . c , e . B + a * e . Da , m ) , t ( c , d + a * i . rb , e . S , e . C + a * e . Da , m ) ; return e . h } function bt ( e , t ) { var n , a = t . j , i = a . c . RGBA , o = i . ma , s = i . Sa + e . w * i . f , r = e . y , l = e . D , c = e . c , d = e . B , u = e . S , p = e . C , a = ao [ a . J ] , m = e . m , g = e . h - 1 ; for ( n = 0 ; g > n ; n += 2 ) a ( r , l , r , l + e . F , c , d , u , p , o , s , o , s + i . f , m ) , l += 2 * e . F , d += e . Da , p += e . Da , s += 2 * i . f ; return n == g && a ( r , l , r , l , c , d , u , p , o , s , o , s , m ) , e . h } function wt ( e , n ) { var a = e . h , i = n . j . c . RGBA , o = i . ma , s = i . Sa + e . w * i . f , r = no [ n . j . J ] , l = e . y , c = e . D , d = e . c , u = e . B , p = e . S , m = e . C , h = n . Qb , f = n . Rb , _ = n . lc , v = n . mc , y = e . w , b = e . w + e . h , w = e . m , k = parseInt ( ( w + 1 ) / 2 , 10 ) ; for ( 0 == y ? r ( g , g , l , c , d , u , p , m , d , u , p , m , g , g , o , s , w ) : ( r ( n . Sb , n . Tb , l , c , h , f , _ , v , d , u , p , m , o , s - i . f , o , s , w ) , ++ a ) ; b > y + 2 ; y += 2 ) h = d , f = u , _ = p , v = m , u += e . Da , m += e . Da , s += 2 * i . f , c += 2 * e . F , r ( l , c - e . F , l , c , h , f , _ , v , d , u , p , m , o , s - i . f , o , s , w ) ; return c += e . F , e . k + b < e . K ? ( t ( n . Sb , n . Tb , l , c , 1 * w ) , t ( n . Qb , n . Rb , d , u , 1 * k ) , t ( n . lc , n . mc , p , m , 1 * k ) , a -- ) : 1 & b || r ( l , c , g , g , d , u , p , m , d , u , p , m , o , s + i . f , g , g , w ) , a } function kt ( e , n ) { var a = e . p , i = e . q , o = n . j . c . Va , s = e . m , l = e . h , c = o . p , d = o . q + e . w * o . Fa , a = e . p , i = e . q , u = h ; if ( a != g ) for ( u = 0 ; l > u ; ++ u ) t ( c , d , a , i , 1 * s ) , i += e . width , d += o . Fa ; else if ( o . p != g ) for ( u = 0 ; l > u ; ++ u ) r ( c , d , 255 , s ) , d += o . Fa ; return 0 } function $t ( e , t , n ) { var a = e . w ; return n [ 0 ] = e . h , e . Bb && ( 0 == a ? -- n [ 0 ] : ( -- a , t [ 0 ] -= e . width ) , e . k + e . w + e . h == e . K && ( n [ 0 ] = e . K - e . k - a ) ) , a } function Ct ( e , t ) { var n = e . p , a = [ e . q ] ; if ( n != g ) { for ( var i = e . m , o = t . j . J , s = o == qt || o == Gt , r = t . j . c . RGBA , l = [ h ] , c = $t ( e , a , l ) , a = a [ 0 ] , d = r . ma , c = r . Sa + c * r . f , u = c + ( s ? 0 : 3 ) , p = 255 , m = h , f = h , f = 0 ; f < l [ 0 ] ; ++ f ) { for ( m = 0 ; i > m ; ++ m ) { var _ = n [ a + m ] ; d [ u + 4 * m ] = _ , p &= _ } a += e . width , u += r . f } 255 != p && w ( o ) && WebPApplyAlphaMultiply ( d , c , s , i , l , r . f ) } 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 , u = 15 , p = h ; for ( j = 0 ; j < r [ 0 ] ; ++ j ) { for ( p = 0 ; i > p ; ++ p ) { var m = n [ a + p ] >> 4 ; c [ d + 2 * p ] = 240 & c [ d + 2 * p ] | m , u &= m } a += e . width , d += s . f } 15 != u && w ( o ) && WebPApplyAlphaMultiply4444 ( c , l , i , r , s . f ) } return 0 } function Mt ( e ) { var t = e . ka , n = t . j . J , a = Yt > n , i = n == Bt || n == jt || n == qt || n == Ht || 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 ; r > o ; ++ 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 [ Ot ] = st , no [ Bt ] = lt , no [ Lt ] = rt , no [ jt ] = ct , no [ qt ] = dt , no [ Ht ] = ut , no [ Vt ] = pt } } else t . $a = yt ; i && ( w ( n ) && ( Web
} , this . WebPDecode = this . Dd = function ( t , n , a ) { var i = e ( un ) , o = "VP8StatusCode" ; return a == g ? tn : ( o = Rt ( t , [ 0 ] , [ n ] , a . input ) , o != Qt ? o == rn ? nn : o : ( i . j = a . j , i . Qa = a . Qa , o = Pt ( t , 0 , [ n ] , i ) ) ) } } } ( ) , function ( e , t ) { "use strict" ; angular . module ( "toaster" , [ ] ) . constant ( "toasterConfig" , { limit : 0 , "tap-to-dismiss" : ! 0 , "close-button" : ! 1 , "close-html" : '<button class="toast-close-button" type="button">×</button>' , "newest-on-top" : ! 0 , "time-out" : 5e3 , "icon-classes" : { error : "toast-error" , info : "toast-info" , wait : "toast-wait" , success : "toast-success" , warning : "toast-warning" } , "body-output-type" : "" , "body-template" : "toasterBodyTmpl.html" , "icon-class" : "toast-info" , "position-class" : "toast-top-right" , "title-class" : "toast-title" , "message-class" : "toast-message" , "prevent-duplicates" : ! 1 , "mouseover-timer-stop" : ! 0 } ) . service ( "toaster" , [ "$rootScope" , "toasterConfig" , function ( e , t ) { function n ( e ) { return function ( t , n , a , i , o , s , r , l , c ) { return angular . isString ( t ) ? this . pop ( e , t , n , a , i , o , s , r , l , c ) : this . pop ( angular . extend ( t , { type : e } ) ) } } var a = function ( ) { var e = { } ; return e . newGuid = function ( ) { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" . replace ( /[xy]/g , function ( e ) { var t = 16 * Math . random ( ) | 0 , n = "x" == e ? t : 3 & t | 8 ; return n . toString ( 16 ) } ) } , e } ( ) ; this . pop = function ( t , n , i , o , s , r , l , c , d , u ) { if ( angular . isObject ( t ) ) { var p = t ; this . toast = { type : p . type , title : p . title , body : p . body , timeout : p . timeout , bodyOutputType : p . bodyOutputType , clickHandler : p . clickHandler , showCloseButton : p . showCloseButton , closeHtml : p . closeHtml , toastId : p . toastId , onShowCallback : p . onShowCallback , onHideCallback : p . onHideCallback , directiveData : p . directiveData } , l = p . toasterId } else this . toast = { type : t , title : n , body : i , timeout : o , bodyOutputType : s , clickHandler : r , showCloseButton : c , toastId : d , onHideCallback : u } ; return this . toast . toastId && this . toast . toastId . length || ( this . toast . toastId = a . newGuid ( ) ) , e . $emit ( "toaster-newToast" , l , this . toast . toastId ) , { toasterId : l , toastId : this . toast . toastId } } , this . clear = function ( t , n ) { angular . isObject ( t ) ? e . $emit ( "toaster-clearToasts" , t . toasterId , t . toastId ) : e . $emit ( "toaster-clearToasts" , t , n ) } ; for ( var i in t [ "icon-classes" ] ) this [ i ] = n ( i ) } ] ) . factory ( "toasterEventRegistry" , [ "$rootScope" , function ( e ) { var t , n = null , a = null , i = [ ] , o = [ ] ; return t = { setup : function ( ) { n || ( n = e . $on ( "toaster-newToast" , function ( e , t , n ) { for ( var a = 0 , o = i . length ; o > a ; a ++ ) i [ a ] ( e , t , n ) } ) ) , a || ( a = e . $on ( "toaster-clearToasts" , function ( e , t , n ) { for ( var a = 0 , i = o . length ; i > a ; a ++ ) o [ a ] ( e , t , n ) } ) ) } , subscribeToNewToastEvent : function ( e ) { i . push ( e ) } , subscribeToClearToastsEvent : function ( e ) { o . push ( e ) } , unsubscribeToNewToastEvent : function ( e ) { var t = i . indexOf ( e ) ; t >= 0 && i . splice ( t , 1 ) , 0 === i . length && ( n ( ) , n = null ) } , unsubscribeToClearToastsEvent : function ( e ) { var t = o . indexOf ( e ) ; t >= 0 && o . splice ( t , 1 ) , 0 === o . length && ( a ( ) , a = null ) } } , { setup : t . setup , subscribeToNewToastEvent : t . subscribeToNewToastEvent , subscribeToClearToastsEvent : t . subscribeToClearToastsEvent , unsubscribeToNewToastEvent : t . unsubscribeToNewToastEvent , unsubscribeToClearToastsEvent : t . unsubscribeToClearToastsEvent } } ] ) . directive ( "directiveTemplate" , [ "$compile" , "$injector" , function ( e , t ) { return { restrict : "A" , scope : { directiveName : "@directiveName" , directiveData : "@directiveData" } , replace : ! 0 , link : function ( n , a , i ) { n . $watch ( "directiveName" , function ( o ) { if ( angular . isUndefined ( o ) || o . length <= 0 ) throw new Error ( "A valid directive name must be provided via the toast body argument when using bodyOutputType: directive" ) ; 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" , " $r
console . error ( "Crypto digest error" , e ) , l = ! 1 , a . resolve ( sha1HashSync ( n ) ) } ) , a . promise } return e ( function ( ) { return sha1HashSync ( n ) } ) } , sha256Hash : function ( n ) { if ( c ) { var a = t . defer ( ) , i = Array . isArray ( n ) ? convertToUint8Array ( n ) : n ; return r . digest ( { name : "SHA-256" } , i ) . then ( function ( e ) { a . resolve ( e ) } , function ( e ) { console . error ( "Crypto digest error" , e ) , c = ! 1 , a . resolve ( sha256HashSync ( n ) ) } ) , a . promise } return e ( function ( ) { return sha256HashSync ( n ) } ) } , aesEncrypt : function ( t , a , o ) { return i ? n ( "aes-encrypt" , { bytes : addPadding ( convertToArrayBuffer ( t ) ) , keyBytes : convertToArrayBuffer ( a ) , ivBytes : convertToArrayBuffer ( o ) } , i ) : e ( function ( ) { return convertToArrayBuffer ( aesEncryptSync ( t , a , o ) ) } ) } , aesDecrypt : function ( t , a , o ) { return i ? n ( "aes-decrypt" , { encryptedBytes : addPadding ( convertToArrayBuffer ( t ) ) , keyBytes : convertToArrayBuffer ( a ) , ivBytes : convertToArrayBuffer ( o ) } , i ) : e ( function ( ) { return convertToArrayBuffer ( aesDecryptSync ( t , a , o ) ) } ) } , factorize : function ( t ) { return t = convertToByteArray ( t ) , i && t . length <= 8 ? n ( "factorize" , { bytes : t } , i ) : a ? n ( "factorize" , { bytes : t } ) : e ( function ( ) { return pqPrimeFactorization ( t ) } ) } , modPow : function ( t , i , o ) { return a ? n ( "mod-pow" , { x : t , y : i , m : o } ) : e ( function ( ) { return bytesModPow ( t , i , o ) } ) } } } ] ) . service ( "ExternalResourcesManager" , [ "$q" , "$http" , "$sce" , function ( e , t , n ) { function a ( a ) { return void 0 !== i [ a ] ? i [ a ] : i [ a ] = t . get ( a , { responseType : "blob" , transformRequest : null } ) . then ( function ( e ) { window . URL = window . URL || window . webkitURL ; var t = window . URL . createObjectURL ( e . data ) ; return n . trustAsResourceUrl ( t ) } , function ( t ) { return Config . Modes . chrome _packed ? e . reject ( t ) : e . when ( n . trustAsResourceUrl ( a ) ) } ) } var i = { } ; return { downloadByURL : a } } ] ) . service ( "IdleManager" , [ "$rootScope" , "$window" , "$timeout" , function ( e , t , n ) { function a ( ) { s || ( s = ! 0 , $ ( t ) . on ( l + " blur focus keydown mousedown touchstart" , i ) , setTimeout ( function ( ) { i ( { type : "blur" } ) } , 0 ) ) } function i ( a ) { if ( "mousemove" == a . type ) { var a = a . originalEvent || a ; if ( a && 0 === a . movementX && 0 === a . movementY ) return ; $ ( t ) . off ( "mousemove" , i ) } var s = "blur" == a . type || "timeout" == a . type ? ! 0 : ! 1 ; r && document [ r ] && ( s = ! 0 ) , n . cancel ( o ) , s || ( o = n ( function ( ) { i ( { type : "timeout" } ) } , 3e4 ) ) , "focus" != a . type || e . idle . afterFocus || ( e . idle . afterFocus = ! 0 , setTimeout ( function ( ) { delete e . idle . afterFocus } , 10 ) ) , e . idle . isIDLE != s && ( e . $apply ( function ( ) { e . idle . isIDLE = s } ) , s && "timeout" == a . type && $ ( t ) . on ( "mousemove" , i ) ) } e . idle = { isIDLE : ! 1 } ; var o , s = ! 1 , r = "hidden" , l = "visibilitychange" ; return "undefined" != typeof document . hidden || ( "undefined" != typeof document . mozHidden ? ( r = "mozHidden" , l = "mozvisibilitychange" ) : "undefined" != typeof document . msHidden ? ( r = "msHidden" , l = "msvisibilitychange" ) : "undefined" != typeof document . webkitHidden && ( r = "webkitHidden" , l = "webkitvisibilitychange" ) ) , { start : a } } ] ) . service ( "GeoLocationManager" , [ "$q" , function ( e ) { function t ( ) { return void 0 !== navigator . geolocation } function n ( n ) { if ( ! n && a ) return e . when ( a ) ; if ( ! t ( ) ) return e . reject ( ) ; var i = e . defer ( ) ; return navigator . geolocation . getCurrentPosition ( function ( e ) { a = { lat : e . coords . latitude , "long" : e . coords . longitude } , i . resolve ( a ) } , function ( e ) { i . reject ( e ) } ) , i . promise } var a = ! 1 ; return { getPosition : n , isAvailable : t } } ] ) . service ( "AppRuntimeManager" , [ "$window" , function ( e ) { return { reload : function ( ) { try { location . reload ( ) } catch ( t ) { } e . chrome && chrome . runtime && chrome . runtime . reload && chrome . runtime . reload ( ) } , close : function ( ) { try { e . close ( ) } catch ( t ) { } } , focus : function ( ) { window . navigator . mozApps && document . hidden ? window . navigator . mozApps . getSelf ( ) . onsuccess = function ( ) { this . result . launch ( ) } : ( window . chrome && chrome . app && chrome . app . window && chrome . app . window . current ( ) . focus ( ) , window . focus ( ) ) } } } ] ) . service ( "RichTextProcessor" , [ "$sce" , "$sanitize" , function ( e , t ) { function n ( e ) { for ( var t , n , a , i , o = 0 ; o < Config . EmojiCategories . length ; o ++ ) if ( i = Config . EmojiCategorySpritesheetDimens [ o ] [ 1 ] , t = Config . EmojiCategories [ o ] . indexOf ( e ) , t > - 1 ) return n = Math . floor ( t / i ) , a = t % i , { category : o , row : n , column : a } ; return console . error ( "emoji not found in spritesheet" , e ) , null } function a ( e , t ) { t = t || { } ; for ( var a , i , o , s , r , l = e , d = [ ] , u = 0 ; a = l . match ( C ) ; ) { if ( r = u + a . index , a [ 3 ] ) d . push ( { _ : "messageEntityMention" , offset : r + a [ 1 ] . length , length : a [ 2 ] . length + a [ 3 ] . length } ) ; else if ( a [ 4 ] ) if ( S . test ( a [ 4 ] ) ) d . push ( { _ : "messageEntityEmail" , offset : r , length : a [ 4 ]
if ( ! o . notContentRelated && r && r + n > 655360 ) return void ( u = ! 0 ) ; if ( o . singleInRequest && ( p ++ , p > 1 ) ) return ; s . push ( o ) , r += n , o . isAPI ? c = ! 0 : o . longPoll && ( d = ! 0 ) } delete m . pendingMessages [ t ] } } ) , c && ! d ) { var g = new TLSerialization ( { mtproto : ! 0 } ) ; g . storeMethod ( "http_wait" , { max _delay : 500 , wait _after : 150 , max _wait : 3e3 } ) , s . push ( { msg _id : t . generateID ( ) , seq _no : this . generateSeqNo ( ) , body : g . getBytes ( ) } ) } if ( s . length ) { var h = [ ] ; if ( s . length > 1 ) { var f = new TLSerialization ( { mtproto : ! 0 , startMaxLength : r + 64 } ) ; f . storeInt ( 1945237724 , "CONTAINER[id]" ) , f . storeInt ( s . length , "CONTAINER[count]" ) ; for ( var v = [ ] , n = 0 ; n < s . length ; n ++ ) f . storeLong ( s [ n ] . msg _id , "CONTAINER[" + n + "][msg_id]" ) , v . push ( s [ n ] . msg _id ) , f . storeInt ( s [ n ] . seq _no , "CONTAINER[" + n + "][seq_no]" ) , f . storeInt ( s [ n ] . body . length , "CONTAINER[" + n + "][bytes]" ) , f . storeRawBytes ( s [ n ] . body , "CONTAINER[" + n + "][body]" ) , s [ n ] . noResponse && h . push ( s [ n ] . msg _id ) ; var y = { msg _id : t . generateID ( ) , seq _no : this . generateSeqNo ( ! 0 ) , container : ! 0 , inner : v } ; o = angular . extend ( { body : f . getBytes ( ! 0 ) } , y ) , this . sentMessages [ o . msg _id ] = y , Config . Modes . debug && console . log ( dT ( ) , "Container" , v , o . msg _id , o . seq _no ) } else o . noResponse && h . push ( o . msg _id ) , this . sentMessages [ o . msg _id ] = o ; this . pendingAcks = [ ] ; var m = this ; this . sendEncryptedRequest ( o ) . then ( function ( e ) { m . toggleOffline ( ! 1 ) , m . parseResponse ( e . data ) . then ( function ( e ) { Config . Modes . debug && console . log ( dT ( ) , "Server response" , m . dcID , e ) , m . processMessage ( e . response , e . messageID , e . sessionID ) , angular . forEach ( h , function ( e ) { if ( m . sentMessages [ e ] ) { var t = m . sentMessages [ e ] . deferred ; delete m . sentMessages [ e ] , t . resolve ( ) } } ) , m . checkLongPoll ( ) , this . checkConnectionPeriod = Math . max ( 1.1 , Math . sqrt ( this . checkConnectionPeriod ) ) } ) } , function ( e ) { console . log ( "Encrypted request failed" , e ) , o . container ? ( angular . forEach ( o . inner , function ( e ) { m . pendingMessages [ e ] = 0 } ) , delete m . sentMessages [ o . msg _id ] ) : m . pendingMessages [ o . msg _id ] = 0 , angular . forEach ( h , function ( e ) { if ( m . sentMessages [ e ] ) { var t = m . sentMessages [ e ] . deferred ; delete m . sentMessages [ e ] , delete m . pendingMessages [ e ] , t . reject ( ) } } ) , m . toggleOffline ( ! 0 ) } ) , ( u || p > 1 ) && this . sheduleRequest ( ) } } , u . prototype . getEncryptedMessage = function ( e ) { var t = this ; return i . sha1Hash ( e ) . then ( function ( n ) { var a = new Uint8Array ( n ) . subarray ( 4 , 20 ) ; return t . getMsgKeyIv ( a , ! 0 ) . then ( function ( t ) { return i . aesEncrypt ( e , t [ 0 ] , t [ 1 ] ) . then ( function ( e ) { return { bytes : e , msgKey : a } } ) } ) } ) } , u . prototype . getDecryptedMessage = function ( e , t ) { return this . getMsgKeyIv ( e , ! 1 ) . then ( function ( e ) { return i . aesDecrypt ( t , e [ 0 ] , e [ 1 ] ) } ) } , u . prototype . sendEncryptedRequest = function ( t , n ) { var i = this ; n = n || { } ; var l = new TLSerialization ( { startMaxLength : t . body . length + 64 } ) ; return l . storeIntBytes ( this . serverSalt , 64 , "salt" ) , l . storeIntBytes ( this . sessionID , 64 , "session_id" ) , l . storeLong ( t . msg _id , "message_id" ) , l . storeInt ( t . seq _no , "seq_no" ) , l . storeInt ( t . body . length , "message_data_length" ) , l . storeRawBytes ( t . body , "message_data" ) , this . getEncryptedMessage ( l . getBuffer ( ) ) . then ( function ( t ) { var l = new TLSerialization ( { startMaxLength : t . bytes . byteLength + 256 } ) ; l . storeIntBytes ( i . authKeyID , 64 , "auth_key_id" ) , l . storeIntBytes ( t . msgKey , 128 , "msg_key" ) , l . storeRawBytes ( t . bytes , "encrypted_data" ) ; var c , d = b ? l . getBuffer ( ) : l . getArray ( ) , u = e . chooseServer ( i . dcID , i . upload ) , p = { code : 406 , type : "NETWORK_BAD_RESPONSE" , url : u } ; try { n = angular . extend ( n || { } , { responseType : "arraybuffer" , transformRequest : null } ) , c = s . post ( u , d , n ) } catch ( m ) { c = r . reject ( m ) } return c . then ( function ( e ) { return e . data && e . data . byteLength ? e : r . reject ( p ) } , function ( e ) { return 404 == e . status && - 1 != ( e . data || "" ) . indexOf ( "nginx/0.3.33" ) && a . remove ( "dc" + i . dcID + "_server_salt" , "dc" + i . dcID + "_auth_key" ) . then ( function ( ) { o . reload ( ) } ) , e . message || e . type || ( e = angular . extend ( p , { type : "NETWORK_BAD_REQUEST" , originalError : e } ) ) , r . reject ( e ) } ) } ) } , u . prototype . parseResponse = function ( e ) { var t = this , n = new TLDeserialization ( e ) , a = n . fetchIntBytes ( 64 , ! 1 , "auth_key_id" ) ; if ( ! bytesCmp ( a , this . authKeyID ) ) throw new Error ( "Invalid server auth_key_id: " + bytesToHex ( a ) ) ; var o = n . fetchIntBytes ( 128 , ! 0 , "msg_key" ) , s = n . fetchRawBytes ( e . byteLength - n . getOffset ( ) , ! 0 , "encrypted_data" ) ; return this . getDecryptedMessage ( o , s ) . then ( function ( e ) { var n = new TLDeserialization ( e , { mtproto : ! 0 } ) , a = ( n . fetchIntBytes ( 64 , ! 1 , "salt" ) , n . fetchIntBytes ( 64 , ! 1 , "session_id" ) ) , s = n .
access _hash : n . getUser ( e ) . access _hash || 0 } } function r ( e ) { var t ; if ( e > 0 ) t = "%pu " + n . getUserSearchText ( e ) ; else if ( 0 > e ) { var i = a . getChat ( - e ) ; t = "%pg " + ( i . title || "" ) } return t } function l ( e ) { return e > 0 ? n . getUserString ( e ) : a . getChatString ( - e ) } function c ( e ) { if ( e > 0 ) return { _ : "peerUser" , user _id : e } ; var t = - e ; return a . isChannel ( t ) ? { _ : "peerChannel" , channel _id : t } : { _ : "peerChat" , chat _id : t } } function d ( e ) { var o , s , r , l = SearchIndexManager . cleanUsername ( e ) ; return ( o = n . resolveUsername ( l ) ) && ( r = n . getUser ( o ) . username , SearchIndexManager . cleanUsername ( r ) == l ) ? t . when ( o ) : ( s = a . resolveUsername ( l ) ) && ( r = a . getChat ( s ) . username , SearchIndexManager . cleanUsername ( r ) == l ) ? t . when ( - s ) : i . invokeApi ( "contacts.resolveUsername" , { username : e } ) . then ( function ( e ) { return n . saveApiUsers ( e . users ) , a . saveApiChats ( e . chats ) , u ( e . peer ) } ) } function u ( e ) { if ( angular . isObject ( e ) ) return e . user _id ? e . user _id : - ( e . channel _id || e . chat _id ) ; var t = "u" == e . charAt ( 0 ) , n = e . substr ( 1 ) . split ( "_" ) ; return t ? n [ 0 ] : - n [ 0 ] || 0 } function p ( e ) { return e > 0 ? n . getUser ( e ) : a . getChat ( - e ) } function m ( e ) { return e > 0 ? n . getUserPhoto ( e ) : a . getChatPhoto ( - e ) } function g ( e ) { return 0 > e && a . isChannel ( - e ) } function h ( e ) { return 0 > e && a . isMegagroup ( - e ) } function f ( e ) { return e > 0 && n . isBot ( e ) } return { getInputPeer : o , getInputPeerByID : s , getPeerSearchText : r , getPeerString : l , getOutputPeer : c , getPeerID : u , getPeer : p , getPeerPhoto : m , resolveUsername : d , isChannel : g , isMegagroup : h , isBot : f } } ] ) . service ( "AppProfileManager" , [ "$q" , "$rootScope" , "AppUsersManager" , "AppChatsManager" , "AppPeersManager" , "AppPhotosManager" , "NotificationsManager" , "MtpApiManager" , "ApiUpdatesManager" , "RichTextProcessor" , function ( e , t , n , a , i , o , s , r , l , c ) { function d ( e ) { var t = e && e . user _id ; if ( ! t ) return ! 1 ; var n = { } ; return angular . forEach ( e . commands , function ( e ) { n [ e . command ] = e . description } ) , _ [ t ] = { id : t , version : e . version , shareText : e . share _text , description : e . description , commands : n } } function u ( e , t ) { return r . invokeApi ( "users.getFullUser" , { id : n . getUserInput ( e ) } ) . then ( function ( a ) { return t && t . phone _number ? ( a . user . phone = t . phone _number , ( t . first _name || t . last _name ) && ( a . user . first _name = t . first _name , a . user . last _name = t . last _name ) , n . saveApiUser ( a . user ) ) : n . saveApiUser ( a . user , ! 0 ) , a . profile _photo && o . savePhoto ( a . profile _photo , { user _id : e } ) , void 0 !== a . about && ( a . rAbout = c . wrapRichText ( a . about , { noLinebreaks : ! 0 } ) ) , s . savePeerSettings ( e , a . notify _settings ) , a . bot _info && ( a . bot _info = d ( a . bot _info ) ) , a } ) } function p ( t ) { var a = [ ] ; return t >= 0 && ! n . isBot ( t ) || i . isChannel ( t ) && ! i . isMegagroup ( t ) ? e . when ( a ) : t >= 0 ? u ( t ) . then ( function ( e ) { var t = e . bot _info ; return t && "botInfoEmpty" != t . _ && a . push ( t ) , a } ) : m ( - t ) . then ( function ( e ) { return angular . forEach ( e . bot _info , function ( e ) { a . push ( d ( e ) ) } ) , a } ) } function m ( i ) { if ( a . isChannel ( i ) ) return f ( i ) ; if ( void 0 !== v [ i ] ) { var l = a . getChat ( i ) ; if ( l . version == v [ i ] . participants . version || l . pFlags . left ) return e . when ( v [ i ] ) } return void 0 !== y [ i ] ? y [ i ] : ( console . trace ( dT ( ) , "Get chat full" , i , a . getChat ( i ) ) , y [ i ] = r . invokeApi ( "messages.getFullChat" , { chat _id : a . getChatInput ( i ) } ) . then ( function ( e ) { a . saveApiChats ( e . chats ) , n . saveApiUsers ( e . users ) ; var r = e . full _chat ; return r && r . chat _photo . id && o . savePhoto ( r . chat _photo ) , s . savePeerSettings ( - i , r . notify _settings ) , delete y [ i ] , v [ i ] = r , t . $broadcast ( "chat_full_update" , i ) , r } ) ) } function g ( e , t ) { return m ( e ) . then ( function ( n ) { if ( ! t && n . exported _invite && "chatInviteExported" == n . exported _invite . _ ) return n . exported _invite . link ; var i ; return i = a . isChannel ( e ) ? r . invokeApi ( "channels.exportInvite" , { channel : a . getChannelInput ( e ) } ) : r . invokeApi ( "messages.exportChatInvite" , { chat _id : a . getChatInput ( e ) } ) , i . then ( function ( t ) { return void 0 !== v [ e ] && ( v [ e ] . exported _invite = t ) , t . link } ) } ) } function h ( e ) { return r . invokeApi ( "channels.getParticipants" , { channel : a . getChannelInput ( e ) , filter : { _ : "channelParticipantsRecent" } , offset : 0 , limit : a . isMegagroup ( e ) ? 50 : 200 } ) . then ( function ( t ) { n . saveApiUsers ( t . users ) ; var i = t . participants , o = a . getChat ( e ) ; if ( ! o . pFlags . kicked && ! o . pFlags . left ) { for ( var s , r = n . getSelf ( ) . id , l = ! 1 , c = 0 , d = i . length ; d > c ; c ++ ) if ( i [ c ] . user _id == r ) { l = c ; break } l !== ! 1 ? ( s = i [ c ] , i . splice ( c , 1 ) ) : s = { _ : "channelParticipantSelf" , user _id : r } , i . unshift ( s ) } return i } ) } function f ( i , c ) { return void 0 === v [ i ] || c ? void 0 !== y [ i ] ? y [ i ] : y [ i ] = r . invokeApi ( "channels.getFullChannel" , { channel : a . getChanne
var y , b ; if ( e . pts ) { var w = c . pts + ( e . pts _count || 0 ) ; if ( w < e . pts ) return console . warn ( dT ( ) , "Pts hole" , c , e , o && a . getChat ( o ) ) , c . pendingPtsUpdates . push ( e ) , c . syncPending || ( c . syncPending = { timeout : setTimeout ( function ( ) { o ? u ( o ) : d ( ) } , 5e3 ) } ) , c . syncPending . ptsAwaiting = ! 0 , ! 1 ; if ( e . pts > c . pts ) c . pts = e . pts , y = ! 0 ; else if ( e . pts _count ) return ! 1 ; o && t . date && _ . date < t . date && ( _ . date = t . date ) } else if ( ! o && t . seq > 0 ) { var k = t . seq , $ = t . seqStart || k ; if ( $ != c . seq + 1 && $ > c . seq ) return console . warn ( dT ( ) , "Seq hole" , c , c . syncPending && c . syncPending . seqAwaiting ) , void 0 === c . pendingSeqUpdates [ $ ] && ( c . pendingSeqUpdates [ $ ] = { seq : k , date : t . date , updates : [ ] } ) , c . pendingSeqUpdates [ $ ] . updates . push ( e ) , c . syncPending || ( c . syncPending = { timeout : setTimeout ( function ( ) { d ( ) } , 5e3 ) } ) , ( ! c . syncPending . seqAwaiting || c . syncPending . seqAwaiting < $ ) && ( c . syncPending . seqAwaiting = $ ) , ! 1 ; c . seq != k && ( c . seq = k , t . date && c . date < t . date && ( c . date = t . date ) , b = ! 0 ) } h ( e ) , y ? r ( o ) : b && s ( ) } function h ( t ) { e . $broadcast ( "apiUpdate" , t ) } function f ( ) { t . setUpdatesProcessor ( c ) , o . invokeApi ( "updates.getState" , { } , { noErrorBox : ! 0 } ) . then ( function ( e ) { _ . seq = e . seq , _ . pts = e . pts , _ . date = e . date , setTimeout ( function ( ) { _ . syncLoading = ! 1 } , 1e3 ) } ) } var _ = { pendingPtsUpdates : [ ] , pendingSeqUpdates : { } , syncPending : ! 1 , syncLoading : ! 0 } , v = { } , y = 0 ; return o . getUserID ( ) . then ( function ( e ) { y = e } ) , { processUpdateMessage : c , addChannelState : p , attach : f } } ] ) . service ( "StatusManager" , [ "$timeout" , "$rootScope" , "MtpApiManager" , "AppUsersManager" , "IdleManager" , function ( e , t , n , a , i ) { function o ( ) { u || ( u = ! 0 , t . $watch ( "idle.isIDLE" , r ) , t . $watch ( "offline" , r ) ) } function s ( e ) { var i = tsNow ( ) ; if ( ! ( e && ! d || ! e && 5e4 > i - d || t . offline ) ) return d = e ? 0 : i , a . setUserStatus ( p , e ) , n . invokeApi ( "account.updateStatus" , { offline : e } , { noErrorBox : ! 0 } ) } function r ( ) { c && e . cancel ( c ) , t . idle . isIDLE ? c = e ( function ( ) { s ( ! 0 ) } , 5e3 ) : ( s ( ! 1 ) , c = e ( r , 6e4 ) ) } function l ( ) { return m ? tsNow ( ) > m ? ( m = ! 1 , ! 1 ) : ! 0 : ! 1 } var c , d = 0 , u = ! 1 , p = 0 , m = ! 1 ; return n . getUserID ( ) . then ( function ( e ) { p = e } ) , t . $on ( "apiUpdate" , function ( e , t ) { "updateUserStatus" == t . _ && t . user _id == p && ( m = tsNow ( ) + ( "userStatusOnline" == t . status . _ ? 3e5 : 0 ) ) } ) , { start : o , isOtherDeviceActive : l } } ] ) . service ( "NotificationsManager" , [ "$rootScope" , "$window" , "$interval" , "$q" , "_" , "MtpApiManager" , "AppPeersManager" , "IdleManager" , "Storage" , "AppRuntimeManager" , "FileManager" , function ( e , t , n , a , i , o , s , r , l , c , d ) { function u ( ) { l . get ( "notify_nodesktop" , "notify_volume" , "notify_novibrate" , "notify_nopreview" ) . then ( function ( e ) { K . nodesktop = e [ 0 ] , K . volume = e [ 1 ] === ! 1 ? . 5 : e [ 1 ] , K . novibrate = e [ 2 ] , K . nopreview = e [ 3 ] } ) } function p ( ) { return K } function m ( e ) { return void 0 !== q [ e ] ? q [ e ] : q [ e ] = o . invokeApi ( "account.getNotifySettings" , { peer : { _ : "inputNotifyPeer" , peer : s . getInputPeerByID ( e ) } } ) } function g ( e ) { if ( e = e || "favicon.ico" , P !== e ) { var t = document . createElement ( "link" ) ; t . rel = "shortcut icon" , t . type = "image/x-icon" , t . href = e , H . parentNode . replaceChild ( t , H ) , H = t , P = e } } function h ( t , n ) { q [ t ] = a . when ( n ) , e . $broadcast ( "notify_settings" , { peerID : t } ) } function f ( e , t ) { h ( e , t ) ; var n = angular . copy ( t ) ; return n . _ = "inputPeerNotifySettings" , o . invokeApi ( "account.updateNotifySettings" , { peer : { _ : "inputNotifyPeer" , peer : s . getInputPeerByID ( e ) } , settings : n } ) } function _ ( e ) { return m ( e ) . then ( function ( e ) { return "peerNotifySettings" == e . _ && 1e3 * e . mute _until > tsNow ( ) } ) } function v ( ) { if ( u ( ) , e . $on ( "settings_changed" , u ) , I ( ) , ! F ) return ! 1 ; "Notification" in window && "granted" !== Notification . permission && "denied" !== Notification . permission && $ ( t ) . on ( "click" , b ) ; try { "onbeforeunload" in window && $ ( t ) . on ( "beforeunload" , x ) } catch ( n ) { } } function y ( ) { x ( ) , n . cancel ( D ) , g ( ) , G = ! 0 } function b ( ) { Notification . requestPermission ( ) , $ ( t ) . off ( "click" , b ) } function w ( e ) { if ( ! G ) { if ( Config . Navigator . ffos && ! Config . Navigator . ffos2p ) e . image = "https://telegram.org/img/t_logo.png" ; else if ( e . image && ! angular . isString ( e . image ) ) { if ( Config . Navigator . ffos2p ) return d . getDataUrl ( e . image , "image/jpeg" ) . then ( function ( t ) { e . image = t , w ( e ) } ) , ! 1 ; e . image = d . getUrl ( e . image , "image/jpeg" ) } else e . image || ( e . image = "img/icons/icon60.png" ) ; U ++ ; var t = tsNow ( ) ; if ( K . volume > 0 && ( ! e . tag || ! O [ e . tag ] || t > O [ e . tag ] + 6e4 ) && ( k ( K . volume ) , O [ e . tag ] = t ) , ! F || "Notification" in window && "granted" !== Notification . permission ) return ! 1 ; if ( K . nodesktop ) { if ( B && ! K . novibrate ) return void navigator . vibrate ( [ 200 , 100 , 200 ] ) } else { var n , a = ++ N , i =
} , 6e3 ) ; break } } } ) , e . $watchCollection ( "search" , function ( ) { e . dialogs = [ ] , e . foundMessages = [ ] , b = ! 1 , S ++ , f ( ) } ) , Config . Mobile && e . $watch ( "curDialog.peer" , function ( ) { e . $broadcast ( "ui_dialogs_update" ) } ) , e . importPhonebook = function ( ) { u . openPhonebookImport ( ) } , e . $on ( "contacts_update" , function ( ) { y && v ( ) } ) , e . $on ( "ui_dialogs_search_clear" , e . searchClear ) , e . noMessages || e . $on ( "dialogs_search" , function ( t , n ) { e . search . query = n . query || "" , e . toggleSearch ( ) } ) ; var I } ] ) . controller ( "AppImHistoryController" , [ "$scope" , "$location" , "$timeout" , "$modal" , "$rootScope" , "toaster" , "_" , "MtpApiManager" , "AppUsersManager" , "AppChatsManager" , "AppMessagesManager" , "AppPeersManager" , "ApiUpdatesManager" , "PeersSelectService" , "IdleManager" , "StatusManager" , "NotificationsManager" , "ErrorService" , "GeoLocationManager" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , _ , v ) { function y ( t , n ) { W = i . selectedPeerID = t . peerID , e . historyFilter . mediaType = ! 1 , u . getInputPeer ( t . peer || e . curDialog . peer || "" ) , C ( ) , U ( ! 0 ) , n . peer && n . peer == t . peer && t . messageID ? M ( ) : t . peerID ? ( $ ( ! 0 ) , A ( ) ) : E ( ) } function b ( t ) { var n , a , i , o = - 1 , s = 10 ; for ( n = 0 ; n < e . peerHistories . length ; n ++ ) if ( e . peerHistories [ n ] . peerID == t ) { o = n ; break } return o > - 1 ? a = e . peerHistories [ o ] : ( a = { peerID : t , messages : [ ] , ids : [ ] } , e . peerHistories . unshift ( a ) , i = e . peerHistories . length - s , i > 0 && e . peerHistories . splice ( s - 1 , i ) , a ) } function w ( t ) { var n ; for ( n = 0 ; n < e . peerHistories . length ; n ++ ) if ( e . peerHistories [ n ] . peerID == t ) return e . peerHistories [ n ] ; return ! 1 } function k ( t ) { var n ; for ( n = 0 ; n < e . peerHistories . length ; n ++ ) if ( e . peerHistories [ n ] . peerID == t ) return e . peerHistories . splice ( n , 1 ) , ! 0 ; return ! 1 } function $ ( t ) { var n = u . getPeer ( W ) ; return ! n || n . deleted ? ( safeReplaceObject ( e . state , { loaded : ! 1 } ) , ! 1 ) : ( K = b ( W ) , safeReplaceObject ( e . historyPeer , { id : W , data : n } ) , r . getUserID ( ) . then ( function ( t ) { e . ownID = t } ) , void ( t && ( e . historyState . typing . splice ( 0 , e . historyState . typing . length ) , e . $broadcast ( "ui_peer_change" ) , e . $broadcast ( "ui_history_change" ) , safeReplaceObject ( e . state , { loaded : ! 0 , empty : ! K . messages . length , mayBeHasMore : ! 0 } ) , C ( ) , S ( ) ) ) ) } function C ( ) { var t = e . historyState . botActions ; e . historyState . botActions = ! W || 0 > W || ! l . isBot ( W ) || e . historyFilter . mediaType || e . curDialog . messageID ? ! 1 : e . state . empty || K && 1 == K . messages . length && K . messages [ 0 ] . action && "messageActionBotIntro" == K . messages [ 0 ] . action . _ ? "start" : e . curDialog . startParam ? "param" : ! 1 , t != e . historyState . botActions && e . $broadcast ( "ui_panel_update" ) } function S ( ) { var t , n = e . historyState . channelActions ; if ( W && u . isChannel ( W ) && ( t = c . getChat ( - W ) ) ) { var a = c . hasRights ( - W , "send" ) ; a ? e . historyState . channelActions = ! 1 : t . pFlags . left ? e . historyState . channelActions = "join" : ( e . historyState . channelActions || ( e . historyState . channelActions = "mute" ) , f . getPeerMuted ( W ) . then ( function ( t ) { e . historyState . channelActions = t ? "unmute" : "mute" } ) ) , e . historyState . canReply = a , e . historyState . canDelete = a || t . pFlags . moderator } else e . historyState . channelActions = ! 1 , e . historyState . canReply = ! 0 , e . historyState . canDelete = ! 0 ; n != e . historyState . channelActions && e . $broadcast ( "ui_panel_update" ) } function M ( ) { var t = w ( W ) ; if ( t && - 1 != t . ids . indexOf ( e . curDialog . messageID ) ) { e . historyUnread = { } ; var a = e . curDialog . messageID || 0 ; e . $broadcast ( "messages_focus" , a ) , e . $broadcast ( "ui_history_change_scroll" , ! 0 ) , n . cancel ( G ) , a && ( G = n ( function ( ) { e . curDialog . messageID == a && e . $broadcast ( "messages_focus" , 0 ) } , 2800 ) ) } else A ( ) } function x ( ) { if ( X ) { if ( ie ) return void ( le = ! 0 ) ; le = ! 1 , e . state . lessActive = re = ! 0 ; var t = ne , n = ++ se , a = 0 , i = 20 ; d . getHistory ( e . curDialog . peerID , Q , a , i ) . then ( function ( a ) { if ( e . state . lessActive = re = ! 1 , t == ne && n == se ) { var o , s ; for ( o = a . history . length - 1 ; o >= 0 ; o -- ) s = a . history [ o ] , s > Q && ( K . messages . push ( d . wrapForHistory ( s ) ) , K . ids . push ( s ) ) ; a . history . length ? ( Q = a . history . length >= i ? a . history [ 0 ] : 0 , d . regroupWrappedHistory ( K . messages , - i ) && e . $broadcast ( "messages_regroup" ) , delete e . state . empty , e . $broadcast ( "ui_history_append" ) ) : Q = 0 , e . historyState . skipped = X = Q > 0 , oe && I ( ) } } ) } } function I ( ) { if ( Z ) { if ( re ) return void ( oe = ! 0 ) ; oe = ! 1 , e . state . moreActive = ie = ! 0 ; var t = ne , n = ++ ae , a = e . historyFilter . mediaType && { _ : te [ e . historyFilter . mediaType ] } , i = Config . Mobile ? 20 : 0 , o = a ? d . getSearch ( e . curDialog . peerID , "" , a , J , i ) : d . getHistory ( e . curDialog . peerID , J , i ) ; o . then ( function ( a ) { e . state . moreActive = ie = ! 1 , t == ne && n == ae && ( angular . forEac
} ) } ] ) . controller ( "EmbedModalController" , [ "$q" , "$scope" , "$rootScope" , "$modalInstance" , "AppPhotosManager" , "AppMessagesManager" , "AppPeersManager" , "AppWebPagesManager" , "PeersSelectService" , "ErrorService" , function ( e , t , n , a , i , o , s , r , l , c ) { t . webpage = r . wrapForFull ( t . webpageID ) , t . nav = { } , t . forward = function ( ) { var e = t . messageID ; l . selectPeer ( { canSend : ! 0 } ) . then ( function ( t ) { n . $broadcast ( "history_focus" , { peerString : t , attachment : { _ : "fwd_messages" , id : [ e ] } } ) } ) } , t [ "delete" ] = function ( ) { var e = t . messageID ; c . confirm ( { type : "MESSAGE_DELETE" } ) . then ( function ( ) { o . deleteMessages ( [ e ] ) } ) } } ] ) . controller ( "UserModalController" , [ "$scope" , "$location" , "$rootScope" , "AppProfileManager" , "$modal" , "AppUsersManager" , "MtpApiManager" , "NotificationsManager" , "AppPhotosManager" , "AppMessagesManager" , "AppPeersManager" , "PeersSelectService" , "ErrorService" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p ) { var m = o . getUserString ( e . userID ) ; e . user = o . getUser ( e . userID ) , e . blocked = ! 1 , e . settings = { notifications : ! 0 } , a . getProfile ( e . userID , e . override ) . then ( function ( t ) { e . blocked = t . pFlags . blocked , e . bot _info = t . bot _info , e . rAbout = t . rAbout , r . getPeerMuted ( e . userID ) . then ( function ( t ) { e . settings . notifications = ! t , e . $watch ( "settings.notifications" , function ( t , n ) { return t === n ? ! 1 : void r . getPeerSettings ( e . userID ) . then ( function ( n ) { n . mute _until = t ? 0 : 2e9 , r . updatePeerSettings ( e . userID , n ) } ) } ) } ) } ) , e . goToHistory = function ( ) { n . $broadcast ( "history_focus" , { peerString : m } ) } , e . flushHistory = function ( ) { p . confirm ( { type : "HISTORY_FLUSH" } ) . then ( function ( ) { c . flushHistory ( e . userID ) . then ( function ( ) { e . goToHistory ( ) } ) } ) } , e . importContact = function ( t ) { var a = n . $new ( ) ; a . importContact = { phone : e . user . phone , first _name : e . user . first _name , last _name : e . user . last _name } , i . open ( { templateUrl : templateUrl ( t ? "edit_contact_modal" : "import_contact_modal" ) , controller : "ImportContactModalController" , windowClass : "md_simple_modal_window mobile_modal" , scope : a } ) . result . then ( function ( t ) { e . userID == t && ( e . user = o . getUser ( e . userID ) ) } ) } , e . deleteContact = function ( ) { o . deleteContacts ( [ e . userID ] ) . then ( function ( ) { e . user = o . getUser ( e . userID ) } ) } , e . inviteToGroup = function ( ) { u . selectPeer ( { confirm _type : "INVITE_TO_GROUP" , noUsers : ! 0 } ) . then ( function ( t ) { var a = d . getPeerID ( t ) , i = 0 > a ? - a : 0 ; c . startBot ( e . user . id , i ) . then ( function ( ) { n . $broadcast ( "history_focus" , { peerString : t } ) } ) } ) } , e . sendCommand = function ( t ) { c . sendText ( e . userID , "/" + t ) , n . $broadcast ( "history_focus" , { peerString : m } ) } , e . toggleBlock = function ( t ) { s . invokeApi ( t ? "contacts.block" : "contacts.unblock" , { id : o . getUserInput ( e . userID ) } ) . then ( function ( ) { e . blocked = t } ) } , e . shareContact = function ( ) { u . selectPeer ( { confirm _type : "SHARE_CONTACT_PEER" , canSend : ! 0 } ) . then ( function ( t ) { var a = d . getPeerID ( t ) ; c . sendOther ( a , { _ : "inputMediaContact" , phone _number : e . user . phone , first _name : e . user . first _name , last _name : e . user . last _name , user _id : e . user . id } ) , n . $broadcast ( "history_focus" , { peerString : t } ) } ) } } ] ) . controller ( "ChatModalController" , [ "$scope" , "$timeout" , "$rootScope" , "$modal" , "AppUsersManager" , "AppChatsManager" , "AppProfileManager" , "AppPhotosManager" , "MtpApiManager" , "MtpApiFileManager" , "NotificationsManager" , "AppMessagesManager" , "AppPeersManager" , "ApiUpdatesManager" , "ContactsSelectService" , "ErrorService" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h ) { 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 ( "messages.editChatPhoto" , { chat _id : o . getChatInput ( e . chatID ) , photo : { _ : "inputChatUploadedPhoto" , file : t , crop : { _ : "inputPhotoCropAuto" } } } ) . then ( f ) } ) [ "finally" ] ( function ( ) { e . photo . updating = ! 1 } ) ) } e . chatFull = o . wrapForFull ( e . chatID , { } ) , e . settings = { notifications : ! 0 } , e . maxParticipants = 200 , s . getChatFull ( e . chatID ) . then ( function ( t ) { e . chatFull = o . wrapForFull ( e . chatID , t ) , e . $broadcast ( "ui_height" ) , e . canMigrate = e . chatFull && e . chatFull . participants && e . chatFull . participants . participants && e . chatFull . participants . participants . length >= 200 , ( Config . Modes . test || Config . Modes . debug ) && ( e . canMigrate = ! 0 ) , d . savePeerSettings ( - e . chatID , t . notify _settings ) , d . getPeerMuted ( - e . chatID ) . then ( function ( t ) { e . settings . notifications = ! t , e . $watch ( " settings . notificati
return function ( e ) { e = parseInt ( e ) , isNaN ( e ) && ( e = 0 ) ; var t = e % 60 , n = Math . floor ( ( e - t ) / 60 ) ; return 10 > t && ( t = "0" + t ) , n + ":" + t } } ] ) . filter ( "durationRemains" , [ "$filter" , function ( e ) { var t = e ( "duration" ) ; return function ( e , n ) { return "-" + t ( n - e ) } } ] ) . filter ( "phoneNumber" , [ function ( ) { return function ( e ) { var t = " " ; return e = ( e || "" ) . replace ( /\D/g , "" ) , "7" == e . charAt ( 0 ) && 11 == e . length ? "+" + e . charAt ( 0 ) + t + "(" + e . substr ( 1 , 3 ) + ")" + t + e . substr ( 4 , 3 ) + "-" + e . substr ( 7 , 2 ) + "-" + e . substr ( 9 , 2 ) : "+" + e } } ] ) . filter ( "formatSize" , [ function ( ) { return function ( e , t ) { if ( ! e ) return "0" ; if ( 1024 > e ) return e + " b" ; if ( 1048576 > e ) return Math . round ( e / 1024 ) + " KB" ; var n = e / 1048576 ; return n = t ? n . toFixed ( 1 ) : Math . round ( 10 * n ) / 10 , n + " MB" } } ] ) . filter ( "formatSizeProgress" , [ "$filter" , "_" , function ( e , t ) { var n = e ( "formatSize" ) ; return function ( e ) { if ( ! e . total ) return "" ; var a = n ( e . done , ! 0 ) , i = a . split ( " " ) , o = n ( e . total ) , s = o . split ( " " ) ; return s [ 1 ] === i [ 1 ] ? t ( "format_size_progress_mulitple" , { done : i [ 0 ] , total : s [ 0 ] , parts : i [ 1 ] || "" } ) : t ( "format_size_progress" , { done : a , total : o } ) } } ] ) . filter ( "formatShortNumber" , [ function ( ) { return function ( e ) { if ( ! e ) return "0" ; if ( 1e3 > e ) return e . toString ( ) ; if ( 9e5 > e ) { var t = e > 1e4 ? 1 : 10 ; return Math . round ( e / 1e3 * t ) / t + "K" } var t = e > 1e7 ? 1 : 10 ; return Math . round ( e / 1e6 * t ) / t + "M" } } ] ) . filter ( "nl2br" , [ function ( ) { return function ( e ) { return e . replace ( /\n/g , "<br/>" ) } } ] ) . filter ( "richText" , [ "$filter" , function ( e ) { var t = e ( "linky" ) ; return function ( e ) { return t ( e , "_blank" ) . replace ( /\n| /g , "<br/>" ) } } ] ) . filter ( "relativeTime" , [ "$filter" , "_" , function ( e , t ) { var n = t . pluralize ( "relative_time_pluralize_minutes_ago" ) , a = t . pluralize ( "relative_time_pluralize_hours_ago" ) , i = e ( "dateOrTime" ) ; return function ( e ) { var o = Math . abs ( tsNow ( ! 0 ) - e ) ; if ( 60 > o ) return t ( "relative_time_just_now" ) ; if ( 3600 > o ) { var s = Math . floor ( o / 60 ) ; return n ( s ) } if ( 86400 > o ) { var r = Math . floor ( o / 3600 ) ; return a ( r ) } return i ( e , ! 0 ) } } ] ) , angular . module ( "myApp.services" ) . service ( "AppMessagesManager" , [ "$q" , "$rootScope" , "$location" , "$filter" , "$timeout" , "$sce" , "ApiUpdatesManager" , "AppUsersManager" , "AppChatsManager" , "AppPeersManager" , "AppPhotosManager" , "AppDocsManager" , "AppStickersManager" , "AppWebPagesManager" , "MtpApiManager" , "MtpApiFileManager" , "RichTextProcessor" , "NotificationsManager" , "Storage" , "AppProfileManager" , "TelegramMeWebService" , "ErrorService" , "StatusManager" , "_" , function ( e , t , n , a , i , o , s , r , l , c , d , u , p , m , g , h , f , _ , v , y , b , w , k , $ ) { function C ( t , n , a ) { var i = Ce , o = angular . isString ( t ) && t . length ; if ( o ) { if ( ! a || Te . query !== t ) { Te . query = t ; var s = SearchIndexManager . search ( t , Ee ) ; Te . dialogs = [ ] , angular . forEach ( Ce . dialogs , function ( e ) { s [ e . peerID ] && Te . dialogs . push ( e ) } ) , Te . count = Te . dialogs . length } i = Te } else Te . query = ! 1 ; var r = 0 ; if ( n > 0 ) for ( r = 0 ; r < i . dialogs . length && ! ( n > i . dialogs [ r ] . index ) ; r ++ ) ; return a = a || 20 , o || We || i . dialogs . length >= r + a ? e . when ( { dialogs : i . dialogs . slice ( r , r + a ) } ) : x ( a ) . then ( function ( ) { if ( r = 0 , n > 0 ) for ( r = 0 ; r < i . dialogs . length && ! ( n > i . dialogs [ r ] . index ) ; r ++ ) ; return { dialogs : i . dialogs . slice ( r , r + a ) } } ) } function S ( e ) { for ( var t = 0 ; t < Ce . dialogs . length ; t ++ ) if ( Ce . dialogs [ t ] . peerID == e ) return [ Ce . dialogs [ t ] , t ] ; return [ ] } function M ( e , t ) { var n = - e , a = c . getPeerSearchText ( n ) ; SearchIndexManager . indexObject ( n , a , Ee ) ; var i = l . isMegagroup ( e ) , o = T ( t . top _message , e ) , r = H ( o ) , d = r . date ; i || ( o = T ( t . top _important _message , e ) , r = H ( o ) , t . unread _count = t . unread _important _count ) , t . top _message = o , t . read _inbox _max _id = T ( t . read _inbox _max _id , e ) ; var u = r . date , p = l . getChat ( e ) ; if ( ( ! u || p . date && p . date > u ) && ( u = p . date ) , t . index = I ( u ) , t . peerID = n , A ( t , d ) , r . mid && r . mid > t . read _inbox _max _id && ( r . pFlags . unread = ! 0 ) , void 0 === $e [ n ] ) { var m = { count : null , history : [ o ] , pending : [ ] } ; $e [ n ] = m } _ . savePeerSettings ( n , t . notify _settings ) , t . pts && s . addChannelState ( e , t . pts ) } function x ( e ) { var n = Ce . dialogs , a = 0 , i = 0 , o = 0 ; return Ge && ( a = Ge + Be ) , g . invokeApi ( "messages.getDialogs" , { offset _date : a , offset _id : P ( i ) , offset _peer : c . getInputPeerByID ( o ) , limit : e } , { timeout : 300 } ) . then ( function ( e ) { a || b . setAuthorized ( ! 0 ) , r . saveApiUsers ( e . users ) , l . saveApiChats ( e . chats ) , Y ( e . messages ) ; var i = a ? ! 0 : ! 1 ; angular . forEach ( e . dialogs , function ( e ) { var n = c . getPeerID ( e . peer ) ; if ( "dialogChannel" == e . _ ) { var a = - n ; M ( a , e ) , s . addChannelState ( a , e . pts ) } else { if ( 0 > n ) { var o = l . getChat ( - n ) ; if ( o && o . migrated _to && o . pFlags . deactivated ) { var r = c . getPeerID ( o . migrated _to ) ; re
break ; case "messageActionChatEditTitle" : c = $ ( "conversation_group_renamed_raw" ) ; break ; case "messageActionChatEditPhoto" : c = $ ( "conversation_group_photo_updated_raw" ) ; break ; case "messageActionChatDeletePhoto" : c = $ ( "conversation_group_photo_removed_raw" ) ; break ; case "messageActionChatAddUser" : case "messageActionChatAddUsers" : c = $ ( "conversation_invited_user_message_raw_raw" ) ; break ; case "messageActionChatReturn" : c = $ ( "conversation_returned_to_group_raw" ) ; break ; case "messageActionChatJoined" : c = $ ( "conversation_joined_group_raw" ) ; break ; case "messageActionChatDeleteUser" : c = $ ( "conversation_kicked_user_message_raw" ) ; break ; case "messageActionChatLeave" : c = $ ( "conversation_left_group_raw" ) ; break ; case "messageActionChatJoinedByLink" : c = $ ( "conversation_joined_by_link_raw" ) ; break ; case "messageActionChannelCreate" : c = $ ( "conversation_created_channel_raw" ) ; break ; case "messageActionChannelEditTitle" : c = $ ( "conversation_changed_channel_name_raw" ) ; break ; case "messageActionChannelEditPhoto" : c = $ ( "conversation_changed_channel_photo_raw" ) ; break ; case "messageActionChannelDeletePhoto" : c = $ ( "conversation_removed_channel_photo_raw" ) } if ( o > 0 ) { var p = r . getUser ( e . from _id ) , m = r . getUserPhoto ( e . from _id ) ; s . title = ( p . first _name || "" ) + ( p . first _name && p . last _name ? " " : "" ) + ( p . last _name || "" ) , s . title || ( s . title = p . phone || $ ( "conversation_unknown_user_raw" ) ) , i = m , a = r . getUserString ( o ) } else { if ( s . title = l . getChat ( - o ) . title || $ ( "conversation_unknown_chat_raw" ) , e . from _id > 0 ) { var p = r . getUser ( e . from _id ) ; s . title = ( p . first _name || p . last _name || $ ( "conversation_unknown_user_raw" ) ) + " @ " + s . title } i = l . getChatPhoto ( - o ) , a = l . getChatString ( - o ) } s . title = f . wrapPlainText ( s . title ) , s . onclick = function ( ) { t . $broadcast ( "history_focus" , { peerString : a , messageID : 16 & e . flags ? e . mid : 0 } ) } , s . message = c , s . key = "msg" + e . mid , s . tag = a , i . location && ! i . location . empty ? h . downloadSmallFile ( i . location , i . size ) . then ( function ( t ) { e . pFlags . unread && ( s . image = t , _ . notify ( s ) ) } ) : _ . notify ( s ) } function he ( ) { i . cancel ( tt ) , tt = ! 1 , t . $broadcast ( "history_multiappend" , nt ) , nt = { } } function fe ( ) { i . cancel ( at ) , at = ! 1 , angular . forEach ( it , function ( e ) { A ( e ) } ) , t . $broadcast ( "dialogs_multiupdate" , it ) , it = { } } function _e ( ) { i . cancel ( ot ) , ot = ! 1 ; var e = t . idle . isIDLE && k . isOtherDeviceActive ( ) ? 3e4 : 1e3 ; angular . forEach ( st , function ( t ) { t . isMutedPromise . then ( function ( n ) { var a = t . top _message ; ! n && a . pFlags . unread && setTimeout ( function ( ) { a . pFlags . unread && ge ( a , { fwd _count : t . fwd _count } ) } , e ) } ) } ) , st = { } } function ve ( n ) { var a = - n ; return e . all ( [ y . getChannelFull ( n , ! 0 ) , B ( a , 0 ) ] ) . then ( function ( e ) { var i = e [ 0 ] , o = e [ 1 ] , s = o . history [ 0 ] , r = { _ : "dialogChannel" , peer : c . getOutputPeer ( a ) , top _message : s , top _important _message : s , read _inbox _max _id : i . read _inbox _max _id , unread _count : i . unread _count , unread _important _count : i . unread _important _count , notify _settings : i . notify _settings } ; M ( n , r ) ; var l = { } ; l [ a ] = r , t . $broadcast ( "dialogs_multiupdate" , l ) } ) } var ye , be = { } , we = { } , ke = { } , $e = { } , Ce = { count : null , dialogs : [ ] } , Se = { } , Me = { } , xe = { } , Ie = e . when ( ) , Ae = - 1 , Ee = SearchIndexManager . createIndex ( ) , Te = { query : ! 1 } , De = { } , Pe = [ ] , Fe = [ ] , Re = ! 1 , Ne = { } , Ue = [ ] , Oe = ! 1 , Be = 0 , Le = tsNow ( ! 0 ) , je = Le - Le % 86400 , qe = new Date ; v . get ( "server_time_offset" ) . then ( function ( e ) { e && ( Be = e ) } ) ; var He = ! 1 ; Config . Modes . packed && v . get ( "max_seen_msg" ) . then ( function ( e ) { He = e || 0 } ) ; var Ve = a ( "dateOrTime" ) , ze = $ . pluralize ( "conversation_forwarded_X_messages" ) ; qe . setHours ( 0 ) , qe . setMinutes ( 0 ) , qe . setSeconds ( 0 ) , ye = je - Math . floor ( + qe / 1e3 ) , _ . start ( ) ; var We = ! 1 , Ge = 0 , Ke = 0 , Ye = { } , Ze = { } , Xe = { } , Je = { } , Qe = 0 , et = 4294967296 , tt = ! 1 , nt = { } , at = ! 1 , it = { } , ot = ! 1 , st = { } ; return t . $on ( "apiUpdate" , function ( e , n ) { switch ( n . _ ) { case "updateMessageID" : var a = n . random _id , o = Se [ a ] ; if ( o ) { var s = o [ 0 ] , d = c . isChannel ( s ) ? - s : 0 ; Me [ T ( n . id , d ) ] = a } break ; case "updateNewMessage" : case "updateNewChannelMessage" : var u = n . message , s = ie ( u ) , p = $e [ s ] ; if ( "updateNewChannelMessage" == n . _ ) { if ( ! l . isMegagroup ( - s ) && ! ( u . pFlags . out || u . pFlags . mention || u . pFlags . post ) ) break ; var m = l . getChat ( - s ) ; if ( m . pFlags && ( m . pFlags . left || m . pFlags . kicked ) ) break } if ( Y ( [ u ] ) , void 0 !== p ) { var g = p . history ; if ( - 1 != g . indexOf ( u . mid ) ) return ! 1 ; var h = g [ 0 ] ; g . unshift ( u . mid ) , u . mid > 0 && u . mid < h && g . sort ( function ( e , t ) { return t - e } ) , null !== p . count && p . count ++ } else p = $e [ s ] = { count : null , history : [ u . mid ] , pending : [ ] } ; j ( p , u ) && t . $broadcast ( "history_reply_markup" , { peerID
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://telegram.me/\' + chatFull . chat . username " ng-href=" https : //telegram.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_m
e . put ( "partials/desktop/document_modal.html" , '<div class="modal_close_wrap" ng-click="$close()">\n <div class="modal_close"></div>\n</div>\n\n<div class="media_modal_bottom_panel_wrap">\n <div class="media_modal_bottom_panel">\n <div class="media_modal_bottom_actions pull-right">\n <a class="media_modal_action_btn" ng-click="download()" title="{{\'media_modal_download\' | i18n}}">\n <i class="media_modal_action_btn_download"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="forward()" title="{{\'media_modal_forward\' | i18n}}">\n <i class="media_modal_action_btn_forward"></i>\n </a>\n <a class="media_modal_action_btn" ng-if="messageID" ng-click="delete()" title="{{\'media_modal_delete\' | i18n}}">\n <i class="media_modal_action_btn_delete"></i>\n </a>\n </div>\n\n <div class="media_modal_info_wrap pull-left" ng-if="document.user_id > 0" ng-switch="messageID > 0">\n <a class="media_modal_author_photo pull-left" my-peer-photolink="document.user_id" img-class="media_modal_author_photo" watch="true"></a>\n <div class="media_modal_author_name">\n <a class="media_modal_author" my-peer-link="document.user_id" peer-watch="true"></a>\n </div>\n <div class="media_modal_date" ng-if="document.date > 0">\n <a ng-switch-when="true" class="media_modal_date" ng-click="goToMessage()" ng-bind="document.date | dateOrTime :true"></a>\n <span ng-switch-default ng-bind="document.date | dateOrTime :true"></span>\n </div>\n </div>\n\n <div class="media_modal_title_wrap" ng-bind="document.file_name"></div>\n\n </div>\n</div>\n\n<div class="modal-dialog">\n <div class="modal-content">\n <div my-modal-width="{{photo.full.modalWidth}}" class="media_modal_wrap photo_modal_wrap" my-modal-position animation="no">\n\n <div class="modal-body">\n\n <div my-load-document="document"></div>\n\n </div>\n\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/edit_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()">\n\n <h4 my-i18n="contact_edit_modal_title"></h4>\n\n <div class="md-input-group md-input-disabled" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_import_modal_phone"></label>\n <span class="md-input" ng-bind="importContact.phone | phoneNumber"></span>\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" my-focused 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_edit_modal_submit_active\' : \'contact_edit_modal_submit\'| i18n" ng-disabled="progress.enabled"></button>\n </div>\n\n</div>' ) , e . put ( "partials/desktop/embed_modal.html" , '<div class="modal_close_wrap" ng-click="$close()">\n <div class="modal_close"></div>\n</div>\n\n<div class="media_modal_bottom_panel_wrap">\n <div class="media_modal_bottom_panel">\n <div class="media_modal_bottom_actions pull-right">\n <a class="media_modal_action_btn" ng-click="forward()" title="{{\'media_modal_forward\' | i18n}}">\n <i class="media_modal_action_btn_forward"></i>\n </a>\n <a class="media_modal_action_btn" ng-click="delete()" title="{{\'media_modal_delete\' | i18n } } ">\n <i class=" media _modal _action _btn _delete " > < / i > \ n <
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()">\n\n <h4 my-i18n="contact_import_modal_title"></h4>\n\n <div class="md-input-group" my-labeled-input>\n <label class="md-input-label" my-i18n="contact_import_modal_phone"></label>\n <input class="md-input" my-focused type="text" ng-model="importContact.phone" 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_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.contentUrl !== undefined" class="inline_result_gif_http">\n <div ng-switch-when="true" ng-switch="result.content_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 . contentUrl } } " type=" video / mp4 ">\n </video>\n <img ng-switch-default class=" img _gif _image "
e . put ( "partials/desktop/message_media.html" , '<div ng-switch="::media._">\n <div ng-switch-when="messageMediaPhoto" my-message-photo="media" message-id="messageId"></div>\n <div ng-switch-when="messageMediaDocument" my-message-document="media" message-id="messageId"></div>\n <div ng-switch-when="messageMediaGeo" my-message-geo="media"></div>\n <div ng-switch-when="messageMediaVenue" my-message-venue="media"></div>\n <div ng-switch-when="messageMediaContact" my-message-contact="media"></div>\n <div ng-switch-when="messageMediaWebPage" my-message-webpage="media" message-id="messageId"></div>\n <div ng-switch-when="messageMediaPending" my-message-pending="media"></div>\n <div ng-switch-when="messageMediaUnsupported">\n <div class="im_message_text" my-i18n="message_attach_unsupported">\n <my-i18n-param name="link"><a href="https://web.telegram.org" target="_blank">web.telegram.org</a></my-i18n-param>\n </div>\n </div>\n</div>' ) , e . put ( "partials/desktop/message_service.html" , '<span ng-switch="::historyMessage.action._">\n <my-i18n>\n <span ng-switch-when="messageActionChatCreate" my-i18n-format="message_service_created_group"></span>\n <span ng-switch-when="messageActionChatEditTitle" my-i18n-format="message_service_changed_group_name"></span>\n <my-i18n-param name="group-name">«<strong ng-bind-html="::historyMessage.action.rTitle"></strong>»</my-i18n-param>\n </my-i18n>\n <span ng-switch-when="messageActionChatEditPhoto" my-i18n="message_service_changed_group_photo"></span>\n <span ng-switch-when="messageActionChatDeletePhoto" my-i18n="message_service_removed_group_photo"></span>\n <span ng-switch-when="messageActionChatJoinedByLink" my-i18n="message_service_joined_by_link"></span>\n <span ng-switch-when="messageActionChatReturn" my-i18n="message_service_returned_to_group"></span>\n <span ng-switch-when="messageActionChatJoined" my-i18n="message_service_joined"></span>\n <span ng-switch-when="messageActionChatAddUser" my-i18n="message_service_invited_user">\n <my-i18n-param name="user"><a my-peer-link="historyMessage.action.user_id" color="true"></a></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatAddUsers" my-i18n="message_service_invited_users">\n <my-i18n-param name="user"><a my-peer-link="historyMessage.action.user_id" color="true"></a></my-i18n-param>\n <my-i18n-param name="num-more"><span ng-bind="historyMessage.action.users.length - 1"></span></my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChatLeave" my-i18n="message_service_left_group"></span>\n <span ng-switch-when="messageActionChatDeleteUser" my-i18n="message_service_kicked_user">\n <my-i18n-param name="user"><a my-peer-link="historyMessage.action.user_id" color="true"></a></my-i18n-param>\n </span>\n\n <span ng-switch-when="messageActionChatMigrateTo" my-i18n="message_service_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelMigrateFrom" my-i18n="message_service_converted_to_supergroup"></span>\n <span ng-switch-when="messageActionChannelCreate" my-i18n="message_service_created_channel"></span>\n <span ng-switch-when="messageActionChannelEditTitle" my-i18n="message_service_changed_channel_name">\n <my-i18n-param name="channel-name">«<strong ng-bind-html="::historyMessage.action.rTitle"></strong>»</my-i18n-param>\n </span>\n <span ng-switch-when="messageActionChannelEditPhoto" my-i18n="message_service_changed_channel_photo"></span>\n <span ng-switch-when="messageActionChannelDeletePhoto" my-i18n="message_service_removed_channel_photo"></span>\n\n <span ng-switch-when="messageActionPinMessage" my-i18n="message_service_pinned_message">\n <my-i18n-param name="message"><a class="im_service_message_pinned" my-pinned-message="historyMessage.reply_to_msg"></a></my-i18n-param>\n </span>\n\n\n <span ng-switch-default my-i18n="message_service_unsupported_action">\n <my-i18n-param name="action"><span ng-bind="historyMessage.action._"></span></my-i18n-param>\n </span>\n</span>\n' ) , e . put ( " partials / d
e . put ( "partials/desktop/slider.html" , '<div class="tg_slider_wrap">\n <div class="tg_slider_thumb"></div>\n <div class="tg_slider_track">\n <div class="tg_slider_track_fill"></div>\n </div>\n</div>' ) , e . put ( "partials/desktop/stickerset_modal.html" , '<div class="stickerset_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" 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 </div>\n </div>\n\n <div class="md_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 <a class="stickerset_modal_sticker_wrap" ng-repeat="sticker in documents | limitTo: slice.limit" ng-click="chooseSticker(sticker.id)">\n <div class="stickerset_modal_sticker" my-load-sticker document="sticker" dim="stickerDimensions[sticker.id]"></div>\n <div class="stickerset_modal_sticker_alt" ng-bind-html="stickerEmojis[sticker.id]"></div>\n </a>\n </div>\n\n </div>\n </div>\n\n </div>\n\n <div class="stickerset_actions_wrap">\n <div class="stickerset_actions" ng-switch="stickersetInstalled">\n <button ng-if="stickersetLoaded" class="btn btn-md btn-md-primary pull-left" my-i18n="stickerset_modal_share" ng-click="share()"></button>\n <button ng-switch-when="true" class="btn btn-md btn-md-danger" my-i18n="stickerset_modal_uninstall" ng-click="toggleInstalled(false)"></button>\n <button ng-switch-when="false" class="btn btn-md btn-md-primary" my-i18n="stickerset_modal_install" ng-click="toggleInstalled(true)"></button>\n </div>\n </div>\n\n </div>\n\n</div>\n' ) , e . put ( "partials/desktop/user_modal.html" , '<div class="user_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="user.pFlags.contact" ng-click="importContact(true)" my-i18n="modal_edit"></a>\n </div>\n <div class="md_modal_title" my-i18n="user_modal_contact_info"></div>\n </div>\n\n <div class="peer_modal_profile_wrap clearfix">\n <div class="peer_modal_photo_wrap pull-left">\n <a ng-click="openPhoto(user.photo.photo_id, {p: user.id})" class="peer_modal_photo" ng-class="{disabled: !user.photo.photo_id}" ng-disabled="!user.photo.photo_id" my-peer-photolink="::user.id" img-class="peer_modal_photo" no-open="true"></a>\n </div>\n <div class="peer_modal_profile">\n <div class="peer_modal_profile_name" my-peer-link="user.id" verified="true"></div>\n <div class="peer_modal_profile_description" my-user-status="::user.id"></div>\n </div>\n </div>\n </div>\n\n <div class="md_modal_split_actions_wrap">\n <div class="md_modal_split_actions">\n <a 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\n <div class=" md _modal _body ">\n\n <div class=" md _modal _sections clearfi
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://telegram.me/\' + chatFull.chat.username" ng-href="https://telegram.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 > \
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 <i class="icon icon-geo-point"></i>\n <img\n class="im_message_venue_geopoint_image"\n my-geo-point-map="media.geo"\n width="200"\n height="100"\n />\n</a>' ) , e . put ( "partials/mobile/message_attach_pending.html" , '<div class="im_message_document im_message_upload_file" ng-class="::\'im_message_upload_\' + media.type">\n <div class="im_message_file_button im_message_file_button_upload">\n <i class="im_message_file_button_icon"></i>\n </div>\n <div class="im_message_document_info">\n <div class="im_message_document_name_wrap">\n <span class="im_message_document_name" ng-bind="::media.file_name"></span>\n <span class="im_message_document_size" ng-if="media.progress" ng-bind="media.progress | formatSizeProgress"></span>\n </div>\n <div class="clearfix im_message_cancelable_progress_wrap">\n <a class="im_message_media_progress_cancel pull-right" ng-click="media.progress.cancel()" my-i18n="modal_cancel"></a>\n <div class="im_message_download_progress_wrap">\n <div class="progress tg_down_progress">\n <div class="progress-bar progress-bar-success" role="progressbar" ng-style="{width: media.progress.percent + \'%\'}"></div>\n </div>\n </div>\n </div>\n </div>\n</div>\n' ) , e . put ( "partials/mobile/message_attach_photo.html" , '<a class="im_message_photo_thumb" ng-click="openPhoto(media.photo.id, {m: messageId})" ng-style="::{width: media.photo.thumb.width + \'px\'}" ng-mouseover="preloadPhoto(media.photo.id)">\n <img\n class="im_message_photo_thumb"\n my-load-thumb\n thumb="media.photo.thumb"\n />\n</a>\n<div ng-if="::media.rCaption" class="im_message_photo_caption" ng-bind-html="::media.rCaption"></div>' ) , e . put ( "partials/mobile/message_attach_venue.html" , '<div class="im_message_venue clearfix">\n\n <a ng-href="{{::media.mapUrl}}" target="_blank" class="im_message_venue_geopoint_wrap">\n <i class="icon icon-geo-point"></i>\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" 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" 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 " ng-bind-html=" webpage . rTitle "></a>\n </div>\n <div ng-if=" webpage . description . length " class=" im _message _webpage _description " ng-bind-html=" webpage . rDescription "></div>\n <a class=" im _message _video _thumb " ng-click=" openEmbed ( $event ) " ng-href=" { { w
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 ( ) " 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 < / d i v > \ n < / d i v > \ n \ n < d i v c l a s s = " m o d a l - b o d y m o b i l e _ m o d a l _ b o d y " > \ n \ n < d i v c l a s s = " m o b i l e _ u s e r _ m o d a l _ p h o t o _ p r o f i l e _ w r a p " > \ n \ n
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 ) { if ( this . richTextareaEl ) { var t = this . richTextareaEl [ 0 ] ; this . isActive || this . restoreSelection ( ) || setRichFocus ( t ) ; var n , a = getRichValueWithCaret ( t ) , i = a [ 0 ] , o = a [ 1 ] >= 0 ? a [ 1 ] : i . length , s = i . substr ( o ) , r = i . substr ( 0 , o ) , l = r . match ( /@([A-Za-z0-9\-\+\*_]*)$/ ) ; n = l && l [ 0 ] ? r . substr ( 0 , l . index ) + "@" + e : r + "@" + e , t . value = d ; var c ; s . length ? ( this . selId = ( this . selId || 0 ) + 1 , c = this . getRichHtml ( n ) + ' <span id="composer_sel' + this . selId + '"></span>' + this . getRichHtml ( s ) , this . richTextareaEl . html ( c ) , setRichFocus ( t , $ ( "#composer_sel" + this . selId ) [ 0 ] ) ) : ( c = this . getRichHtml ( n ) + " " , this . richTextareaEl . html ( c ) , setRichFocus ( t ) ) } else { var t = this . textareaEl [ 0 ] , i = t . value , o = this . isActive ? getFieldSelection ( t ) : i . length , s = i . substr ( o ) , r = i . substr ( 0 , o ) , l = r . match ( /@([A-Za-z0-9\-\+\*_]*)$/ ) ; if ( l && l [ 0 ] ) var d = r . substr ( 0 , l . index ) + "@" + e + " " + s , u = l . index + e . length + 2 ; else var d = r + ":" + e + ": " + s , u = r . length + e . length + 2 ; t . value = d , setFieldSelection ( t , u ) } this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onCommandSelected = function ( e , t ) { if ( t ) if ( this . richTextareaEl ) this . richTextareaEl . html ( encodeEntities ( e ) + " " ) , setRichFocus ( this . richTextareaEl [ 0 ] ) ; else { var n = this . textareaEl [ 0 ] ; n . value = e + " " , setFieldSelection ( n ) } else this . onCommandSend ( e ) ; this . hideSuggestions ( ) , this . onChange ( ) } , MessageComposer . prototype . onChange = function ( e ) { if ( this . richTextareaEl ) { delete this . keyupStarted ; var t = getRichValue ( this . richTextareaEl [ 0 ] ) ; this . textareaEl . val ( t ) . trigger ( "change" ) } this . updateInlinePlaceholder ( ) } , MessageComposer . prototype . getEmojiHtml = function ( e , t ) { t = t || EmojiHelper . emojis [ e ] ; var n = 20 , a = EmojiHelper . spritesheetPositions [ e ] , i = a [ 0 ] , o = ( a [ 1 ] , n * a [ 3 ] ) , s = n * a [ 2 ] ; return '<img src="img/blank.gif" alt=":' + encodeEntities ( t [ 1 ] ) + ':" data-code="' + encodeEntities ( e ) + '" class="emoji emoji-w20 emoji-spritesheet-' + i + '" style="background-position: -' + o + "px -" + s + 'px;" onresizestart="return false" />' } , MessageComposer . prototype . setValue = function ( e ) { this . richTextareaEl ? ( this . richTextareaEl . html ( this . getRichHtml ( e ) ) , this . lastLength = e . length , this . wasEmpty = ! e . length , this . onKeyEvent ( { type : "keyup" } ) ) : this . textareaEl . val ( e ) } , MessageComposer . prototype . setFocusedValue = function ( e ) { var t = e [ 0 ] , n = e [ 1 ] , a = e [ 2 ] ; if ( this . richTextareaEl ) { this . selId = ( this . selId || 0 ) + 1 ; var i = this . getRichHtml ( t ) + '<span id="composer_sel' + this . selId + '">' + this . getRichHtml ( n ) + "</span>" + this . getRichHtml ( a ) ; this . richTextareaEl . html ( i ) , setRichFocus ( this . richTextareaEl [ 0 ] , $ ( "#composer_sel" + this . selId ) [ 0 ] , ! 0 ) } else this . textareaEl . val ( t + n + a ) , setFieldSelection ( this . textareaEl [ 0 ] , t . length , t . length + n . length ) } , MessageComposer . prototype . getRichHtml = function ( e ) { var t = $ ( "<div>" ) . text ( e ) . html ( ) ; return t = t . replace ( /\n/g , "<br/>" ) , t = t . replace ( /:([A-Za-z0-9\-\+\*_]+?):/gi , function ( e , t ) { var n = EmojiHelper . shortcuts [ t ] ; return void 0 !== n ? this . getEmojiHtml ( n ) : e } . bind ( this ) ) , t = t . replace ( / /g , " " ) . replace ( /^ | $/g , " " ) } , MessageComposer . prototype . focus = function ( ) { this . richTextareaEl ? setZeroTimeout ( function ( ) { setRichFocus ( this . richTextareaEl [ 0 ] ) } . bind ( this ) ) : setFieldSelection ( this . textareaEl [ 0 ] ) } , MessageComposer . prototype . blur = function ( ) { this . richTextareaEl ? this . richTextareaEl [ 0 ] . blur ( ) : this . textareaEl [ 0 ] . blur ( ) } , MessageComposer . prototype . renderSuggestions = function ( ) { this . autoCompleteWrapEl . show ( ) , this . scroller . reinit ( ) , this . updatePosition ( ) , this . autocompleteShown = ! 0 } , MessageComposer . prototype . showEmojiSuggestions = function ( e ) { var t = this ; setZeroTimeout ( function ( ) { t . autoCompleteScope . $apply ( function ( ) { t . autoCompleteScope . type = "emoji" , t . autoCompleteScope . emojiCodes = e } ) , onContentLoaded ( function ( ) { t . renderSuggestions ( ) } ) } ) } , MessageComposer . prototype . showMentionSuggestions = function ( e ) { var t = this ; setZeroTimeout ( function ( ) { t . autoCompleteScope . $apply ( function ( ) { t . autoCompleteScope . type = "mentions" , t . autoCompleteScope . mentionUsers = e } ) , onContentLoaded ( function ( ) { t . renderSuggestions ( ) } ) } ) } , MessageComposer . prototype . showCommandsSuggestions = func
n = n || { } ; var a = o . draftMessage . isBroadcast ; B . setPlaceholder ( e ( a ? "im_broadcast_field_placeholder_raw" : "im_message_field_placeholder_raw" ) ) , n . customSelection ? ( B . setFocusedValue ( n . customSelection ) , y ( ) ) : ( L && ( B . setValue ( o . draftMessage . text || "" ) , y ( ) ) , ( m || n && n . focus ) && B . focus ( ) ) , onContentLoaded ( function ( ) { B . checkAutocomplete ( ! 0 ) } ) , U && Config . Mobile && U . hide ( ) } ) , o . $on ( "ui_peer_reply" , function ( ) { onContentLoaded ( function ( ) { o . $emit ( "ui_editor_resize" ) , m && B . focus ( ) } ) } ) , o . $on ( "mentions_update" , function ( ) { B . onMentionsUpdated ( ) } ) , o . $on ( "ui_message_before_send" , function ( ) { v ( ) } ) , o . $on ( "ui_message_send" , function ( ) { m && w ( ) } ) , o . $on ( "ui_message_blur" , function ( ) { B . blur ( ) } ) , o . $on ( "$destroy" , function ( ) { $ ( document ) . off ( "paste" , C ) , $ ( document ) . off ( "keydown" , b ) , $ ( "body" ) . off ( "dragenter dragleave dragover drop" , S ) , $ ( F ) . off ( "mousedown touchstart" ) , T . off ( "change" ) } ) , m && w ( ) } return { link : g , scope : { draftMessage : "=" , mentions : "=" , commands : "=" } } } ] ) . directive ( "myLoadThumb" , [ "MtpApiFileManager" , "FileManager" , function ( e , t ) { function n ( n , a , i ) { var o = 0 , s = e . getCachedFile ( n . thumb && n . thumb . location && ! n . thumb . location . empty && n . thumb . location ) ; s && a . attr ( "src" , t . getUrl ( s , "image/jpeg" ) ) , n . thumb && n . thumb . width && n . thumb . height && ( a . attr ( "width" , n . thumb . width ) , a . attr ( "height" , n . thumb . height ) ) ; var r = n . $watchCollection ( "thumb.location" , function ( i ) { n . thumb && n . thumb . width && n . thumb . height && ( a . attr ( "width" , n . thumb . width ) , a . attr ( "height" , n . thumb . height ) , n . $emit ( "ui_height" ) ) ; var s = ++ o ; if ( ! i || i . empty ) return a . attr ( "src" , n . thumb && n . thumb . placeholder || "img/blank.gif" ) , void l ( ) ; var r = e . getCachedFile ( i ) ; return r ? ( a . attr ( "src" , t . getUrl ( r , "image/jpeg" ) ) , void l ( ) ) : ( a . attr ( "src" ) || a . attr ( "src" , n . thumb . placeholder || "img/blank.gif" ) , void e . downloadSmallFile ( n . thumb . location ) . then ( function ( e ) { s == o && ( a . attr ( "src" , t . getUrl ( e , "image/jpeg" ) ) , l ( ) ) } , function ( e ) { console . log ( "Download image failed" , e , n . thumb . location , a [ 0 ] ) , s == o && ( a . attr ( "src" , n . thumb . placeholder || "img/blank.gif" ) , l ( ) ) } ) ) } ) , l = i . watch ? angular . noop : function ( ) { setTimeout ( function ( ) { n . $destroy ( ) , r ( ) } , 0 ) } } return { link : n , scope : { thumb : "=" } } } ] ) . directive ( "myLoadFullPhoto" , [ "MtpApiFileManager" , "FileManager" , "_" , function ( e , t , n ) { function a ( a , i , o ) { var s = $ ( "img" , i ) [ 0 ] , r = $ ( ".img_fullsize_with_progress_wrap" , i ) . add ( ".img_fullsize_progress_wrap" , i ) . add ( $ ( s ) ) , l = function ( ) { r . css ( { width : a . fullPhoto . width , height : a . fullPhoto . height } ) , a . $emit ( "ui_height" , ! 0 ) } , c = 0 ; a . $watchCollection ( "fullPhoto.location" , function ( ) { var i = e . getCachedFile ( a . thumbLocation ) , o = ++ c ; if ( i ? ( s . src = t . getUrl ( i , "image/jpeg" ) , l ( ) ) : s . src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" , a . fullPhoto . location ) { var r ; if ( a . fullPhoto . size ) { var d = { _ : "inputFileLocation" , volume _id : a . fullPhoto . location . volume _id , local _id : a . fullPhoto . location . local _id , secret : a . fullPhoto . location . secret } ; r = e . downloadFile ( a . fullPhoto . location . dc _id , d , a . fullPhoto . size ) } else r = e . downloadSmallFile ( a . fullPhoto . location ) ; a . progress = { enabled : ! 0 , percent : 0 } , r . then ( function ( e ) { o == c && ( a . progress . enabled = ! 1 , s . src = t . getUrl ( e , "image/jpeg" ) , l ( ) ) } , function ( e ) { console . log ( "Download image failed" , e , a . fullPhoto . location ) , a . progress . enabled = ! 1 , a . error = e && "FS_BROWSER_UNSUPPORTED" == e . type ? { html : n ( "error_browser_no_local_file_system_image_md" , { "moz-link" : '<a href="{0}" target="_blank">{1}</a>' , "chrome-link" : '<a href="{0}" target="_blank">{1}</a>' , "telegram-link" : '<a href="{0}" target="_blank">{1}</a>' } ) } : { text : n ( "error_image_download_failed" ) , error : e } } , function ( e ) { a . progress . percent = Math . max ( 1 , Math . floor ( 100 * e . done / e . total ) ) } ) } } ) , l ( ) } return { link : a , transclude : ! 0 , templateUrl : templateUrl ( "full_photo" ) , scope : { fullPhoto : "=" , thumbLocation : "=" } } } ] ) . directive ( "myLoadVideo" , [ "$sce" , "AppDocsManager" , "ErrorService" , "_" , function ( e , t , n , a ) { function i ( e , i , o ) { var s = t . downloadDoc ( e . video . id ) ; s . then ( function ( ) { e . $emit ( "ui_height" ) , onContentLoaded ( function ( ) { var e = $ ( "video" , i ) [ 0 ] ; if ( e ) { var t = ! 1 , a = function ( e ) { t || e . target && e . target . error && e . target . error . code != e . target . error . MEDIA _ERR _DECODE && e . target . error . code != e . target . error . MEDIA _ERR _SRC _NOT _SUPPORTED || ( t = ! 0 , n . show ( { error : { type : "MEDIA_TYPE_NOT_SUPPORTED" , originalError : e . target && e . targ