( function ( e, t) { var n, r, i= typeof t, o= e. document, a= e. location, s= e. jQuery, u= e. $, l= { } , c= [ ] , p= "1.9.1" , f= c. concat, d= c. push, h= c. slice, g= c. indexOf, m= l. toString, y= l. hasOwnProperty, v= p. trim, b = function ( e, t) { return new b. fn. init ( e, t, r) } , x= /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ . source, w= /\S+/g , T = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g , N = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/ , C = /^<(\w+)\s*\/?>(?:<\/\1>|)$/ , k= /^[\],:{}\s]*$/ , E = /(?:^|:|,)(?:\s*\[)+/g , S = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g , A = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g , j= /^-ms-/ , D = /-([\da-z])/gi , L = function ( e, t) { return t. toUpperCase ( ) } , H = function ( e) { ( o. addEventListener|| "load" === e. type|| "complete" === o. readyState) && ( q ( ) , b. ready ( ) ) } , q = function ( ) { o. addEventListener? ( o. removeEventListener ( "DOMContentLoaded" , H , ! 1 ) , e. removeEventListener ( "load" , H , ! 1 ) ) : ( o. detachEvent ( "onreadystatechange" , H ) , e. detachEvent ( "onload" , H ) ) } ; b. fn= b. prototype= { jquery: p, constructor: b, init: function ( e, n, r) { var i, a; if ( ! e) return this ; if ( "string" == typeof e) { if ( i= "<" === e. charAt ( 0 ) && ">" === e. charAt ( e. length- 1 ) && e. length>= 3 ? [ null , e, null ] : N . exec ( e) , ! i|| ! i[ 1 ] && n) return ! n|| n. jquery? ( n|| r) . find ( e) : this . constructor ( n) . find ( e) ; if ( i[ 1 ] ) { if ( n= n instanceof b ? n[ 0 ] : n, b. merge ( this , b. parseHTML ( i[ 1 ] , n&& n. nodeType? n. ownerDocument|| n: o, ! 0 ) ) , C . test ( i[ 1 ] ) && b. isPlainObject ( n) ) for ( i in n) b. isFunction ( this [ i] ) ? this [ i] ( n[ i] ) : this . attr ( i, n[ i] ) ; return this } if ( a= o. getElementById ( i[ 2 ] ) , a&& a. parentNode) { if ( a. id!== i[ 2 ] ) return r. find ( e) ; this . length= 1 , this [ 0 ] = a} return this . context= o, this . selector= e, this } return e. nodeType? ( this . context= this [ 0 ] = e, this . length= 1 , this ) : b. isFunction ( e) ? r. ready ( e) : ( e. selector!== t&& ( this . selector= e. selector, this . context= e. context) , b. makeArray ( e, this ) ) } , selector: "" , length: 0 , size: function ( ) { return this . length} , toArray: function ( ) { return h. call ( this ) } , get : function ( e) { return null == e? this . toArray ( ) : 0 > e? this [ this . length+ e] : this [ e] } , pushStack: function ( e) { var t= b. merge ( this . constructor ( ) , e) ; return t. prevObject= this , t. context= this . context, t} , each: function ( e, t) { return b. each ( this , e, t) } , ready: function ( e) { return b. ready. promise ( ) . done ( e) , this } , slice: function ( ) { return this . pushStack ( h. apply ( this , arguments) ) } , first: function ( ) { return this . eq ( 0 ) } , last: function ( ) { return this . eq ( - 1 ) } , eq: function ( e) { var t= this . length, n= + e+ ( 0 > e? t: 0 ) ; return this . pushStack ( n>= 0 && t> n? [ this [ n] ] : [ ] ) } , map: function ( e) { return this . pushStack ( b. map ( this , function ( t, n) { return e. call ( t, n, t) } ) ) } , end: function ( ) { return this . prevObject|| this . constructor ( null ) } , push: d, sort: [ ] . sort, splice: [ ] . splice} , b. fn. init. prototype= b. fn, b. extend= b. fn. extend = function ( ) { var e, n, r, i, o, a, s= arguments[ 0 ] || { } , u= 1 , l= arguments. length, c= ! 1 ; for ( "boolean" == typeof s&& ( c= s, s= arguments[ 1 ] || { } , u= 2 ) , "object" == typeof s|| b. isFunction ( s) || ( s= { } ) , l=== u&& ( s= this , -- u) ; l> u; u++ ) if ( null != ( o= arguments[ u] ) ) for ( i in o) e= s[ i] , r= o[ i] , s!== r&& ( c&& r&& ( b. isPlainObject ( r) || ( n= b. isArray ( r) ) ) ? ( n? ( n= ! 1 , a= e&& b. isArray ( e) ? e: [ ] ) : a= e&& b. isPlainObject ( e) ? e: { } , s[ i] = b. extend ( c, a, r) ) : r!== t&& ( s[ i] = r) ) ; return s} , b. extend ( { noConflict: function ( t) { return e. $=== b&& ( e. $= u) , t&& e. jQuery=== b&& ( e. jQuery= s) , b} , isReady: ! 1 , readyWait: 1 , holdReady: function ( e) { e? b. readyWait++ : b. ready ( ! 0 ) } , ready: function ( e) { if ( e=== ! 0 ? ! -- b. readyWait: ! b. isReady) { if ( ! o. body) return setTimeout ( b. ready) ; b. isReady= ! 0 , e!== ! 0 && -- b. readyWait> 0 || ( n. resolveWith ( o, [ b] ) , b. fn. trigger&& b ( o) . trigger ( "ready" ) . off ( "ready" ) ) } } , isFunction: function ( e) { return "function" === b. type ( e) } , isArray: Array. isArray|| function ( e) { return "array" === b. type ( e) } , isWindow: function ( e) { return null != e&& e== e. window} , isNumeric: function ( e) { return ! isNaN ( parseFloat ( e) ) && isFinite ( e) } , type: function ( e) { return null == e? e+ "" : "object" == typeof e|| "function" == typeof e? l[ m. call ( e) ] || "object" : typeof e} , isPlainObject: function ( e) { if ( ! e|| "object" !== b. type ( e) || e. nodeType|| b. isWindow ( e) ) return ! 1 ; try { if ( e. constructor&& ! y. call ( e, "constructor" ) && ! y. call ( e. constructor. prototype, "isPrototypeOf" ) ) return ! 1 } catch ( n) { return ! 1 } var r; for ( r in e) ; return r=== t|| y. call ( e, r) } , isEmptyObject: function ( e) { var t; for ( t in e) return ! 1 ; return ! 0 } , error: function ( e) { throw Error ( e) } , parseHTML: function ( e, t, n) { if ( ! e|| "string" != typeof e) return null ; "boolean" == typeof t&& ( n= t, t= ! 1 ) , t= t|| o; var r= C . exec ( e) , i= ! n&& [ ] ; return r? [ t. createElement ( r[ 1 ] ) ] : ( r= b. buildFragment ( [ e] , t, i) , i&& b ( i) . remove ( ) , b. merge ( [ ] , r. childNodes) ) } , parseJSON: function ( n) { return e. JSON && e. JSON . parse? e. JSON . parse ( n) : null === n? n: "string" == typeof n&& ( n= b. trim ( n) , n&& k. test ( n. replace ( S , "@" ) . replace ( A , "]" ) . replace ( E , "" ) ) ) ? Function ( "return " + n) ( ) : ( b. error ( "Invalid JSON: " + n) , t) } , parseXML: function ( n) { var r, i; if ( ! n|| "string" != typeof n) return null ; try { e. DOMParser? ( i= new DOMParser , r= i. parseFromString ( n, "text/xml" ) ) : ( r= new ActiveXObject ( "Microsoft.XMLDOM" ) , r. async = "false" , r. loadXML ( n) ) } catch ( o) { r= t} return r&& r. documentElement&& ! r. getElementsByTagName ( "parsererror" ) . length|| b. error ( "Invalid XML: " + n) , r} , noop: function ( ) { } , globalEval: function ( t) { t&& b. trim ( t) && ( e. execScript|| function ( t) { e. eval. call ( e, t) } ) ( t) } , camelCase: function ( e) { return e. replace ( j, "ms-" ) . replace ( D , L ) } , nodeName: function ( e, t) { return e. nodeName&& e. nodeName. toLowerCase ( ) === t. toLowerCase ( ) } , each: function ( e, t, n) { var r, i= 0 , o= e. length, a= M ( e) ; if ( n) { if ( a) { for ( ; o> i; i++ ) if ( r= t. apply ( e[ i] , n) , r=== ! 1 ) break } else for ( i in e) if ( r= t. apply ( e[ i] , n) , r=== ! 1 ) break } else if ( a) { for ( ; o> i; i++ ) if ( r= t. call ( e[ i] , i, e[ i] ) , r=== ! 1 ) break } else for ( i in e) if ( r= t. call ( e[ i] , i, e[ i] ) , r=== ! 1 ) break ; return e} , trim: v&& ! v. call ( "\ufeff\u00a0" ) ? function ( e) { return null == e? "" : v. call ( e) } : function ( e) { return null == e? "" : ( e+ "" ) . replace ( T , "" ) } , makeArray: function ( e, t) { var n= t|| [ ] ; return null != e&& ( M ( Object ( e) ) ? b. merge ( n, "string" == typeof e? [ e] : e) : d. call ( n, e) ) , n} , inArray: function ( e, t, n) { var r; if ( t) { if ( g) return g. call ( t, e, n) ; for ( r= t. length, n= n? 0 > n? Math. max ( 0 , r+ n) : n: 0 ; r> n; n++ ) if ( n in t&& t[ n] === e) return n} return - 1 } , merge: function ( e, n) { var r= n. length, i= e. length, o= 0 ; if ( "number" == typeof r) for ( ; r> o; o++ ) e[ i++ ] = n[ o] ; else while ( n[ o] !== t) e[ i++ ] = n[ o++ ] ; return e. length= i, e} , grep: function ( e, t, n) { var r, i= [ ] , o= 0 , a= e. length; for ( n= ! ! n; a> o; o++ ) r= ! ! t ( e[ o] , o) , n!== r&& i. push ( e[ o] ) ; return i} , map: function ( e, t, n) { var r, i= 0 , o= e. length, a= M ( e) , s= [ ] ; if ( a) for ( ; o> i; i++ ) r= t ( e[ i] , i, n) , null != r&& ( s[ s. length] = r) ; else for ( i in e) r= t ( e[ i] , i, n) , null != r&& ( s[ s. length] = r) ; return f. apply ( [ ] , s) } , guid: 1 , proxy: function ( e, n) { var r, i, o; return "string" == typeof n&& ( o= e[ n] , n= e, e= o) , b. isFunction ( e) ? ( r= h. call ( arguments, 2 ) , i = function ( ) { return e. apply ( n|| this , r. concat ( h. call ( arguments) ) ) } , i. guid= e. guid= e. guid|| b. guid++ , i) : t} , access: function ( e, n, r, i, o, a, s) { var u= 0 , l= e. length, c= null == r; if ( "object" === b. type ( r) ) { o= ! 0 ; for ( u in r) b. access ( e, n, u, r[ u] , ! 0 , a, s) } else if ( i!== t&& ( o= ! 0 , b. isFunction ( i) || ( s= ! 0 ) , c&& ( s? ( n. call ( e, i) , n= null ) : ( c= n, n = function ( e, t, n) { return c. call ( b ( e) , n) } ) ) , n) ) for ( ; l> u; u++ ) n ( e[ u] , r, s? i: i. call ( e[ u] , u, n ( e[ u] , r) ) ) ; return o? e: c? n. call ( e) : l? n ( e[ 0 ] , r) : a} , now: function ( ) { return ( new Date ) . getTime ( ) } } ) , b. ready. promise = function ( t) { if ( ! n) if ( n= b. Deferred ( ) , "complete" === o. readyState) setTimeout ( b. ready) ; else if ( o. addEventListener) o. addEventListener ( "DOMContentLoaded" , H , ! 1 ) , e. addEventListener ( "load" , H , ! 1 ) ; else { o. attachEvent ( "onreadystatechange" , H ) , e. attachEvent ( "onload" , H ) ; var r= ! 1 ; try { r= null == e. frameElement&& o. documentElement} catch ( i) { } r&& r. doScroll&& function a ( ) { if ( ! b. isReady) { try { r. doScroll ( "left" ) } catch ( e) { return setTimeout ( a, 50 ) } q ( ) , b. ready ( ) } } ( ) } return n. promise ( t) } , b. each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( e, t) { l[ "[object " + t+ "]" ] = t. toLowerCase ( ) } ) ; function M ( e) { var t= e. length, n= b. type ( e) ; return b. isWindow ( e) ? ! 1 : 1 === e. nodeType&& t? ! 0 : "array" === n|| "function" !== n&& ( 0 === t|| "number" == typeof t&& t> 0 && t- 1 in e) } r= b ( o) ; var _= { } ; function F ( e) { var t= _[ e] = { } ; return b. each ( e. match ( w) || [ ] , function ( e, n) { t[ n] = ! 0 } ) , t} b. Callbacks = function ( e) { e= "string" == typeof e? _[ e] || F ( e) : b. extend ( { } , e) ; var n, r, i, o, a, s, u= [ ] , l= ! e. once&& [ ] , c = function ( t) { for ( r= e. memory&& t, i= ! 0 , a= s|| 0 , s= 0 , o= u. length, n= ! 0 ; u&& o> a; a++ ) if ( u[ a] . apply ( t[ 0 ] , t[ 1 ] ) === ! 1 && e. stopOnFalse) { r= ! 1 ; break } n= ! 1 , u&& ( l? l. length&& c ( l. shift ( ) ) : r? u= [ ] : p. disable ( ) ) } , p= { add: function ( ) { if ( u) { var t= u. length; ( function i ( t) { b. each ( t, function ( t, n) { var r= b. type ( n) ; "function" === r? e. unique&& p. has ( n) || u. push ( n) : n&& n. length&& "string" !== r&& i ( n) } ) } ) ( arguments) , n? o= u. length: r&& ( s= t, c ( r) ) } return this } , remove: function ( ) { return u&& b. each ( arguments, function ( e, t) { var r; while ( ( r= b. inArray ( t, u, r) ) > - 1 ) u. splice ( r, 1 ) , n&& ( o>= r&& o-- , a>= r&& a-- ) } ) , this } , has: function ( e) { return e? b. inArray ( e, u) > - 1 : ! ( ! u|| ! u. length) } , empty: function ( ) { return u= [ ] , this } , disable: function ( ) { return u= l= r= t, this } , disabled: function ( ) { return ! u} , lock: function ( ) { return l= t, r|| p. disable ( ) , this } , locked: function ( ) { return ! l} , fireWith: function ( e, t) { return t= t|| [ ] , t= [ e, t. slice? t. slice ( ) : t] , ! u|| i&& ! l|| ( n? l. push ( t) : c ( t) ) , this } , fire: function ( ) { return p. fireWith ( this , arguments) , this } , fired: function ( ) { return ! ! i} } ; return p} , b. extend ( { Deferred: function ( e) { var t= [ [ "resolve" , "done" , b. Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , b. Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , b. Callbacks ( "memory" ) ] ] , n= "pending" , r= { state: function ( ) { return n} , always: function ( ) { return i. done ( arguments) . fail ( arguments) , this } , then: function ( ) { var e= arguments; return b. Deferred ( function ( n) { b. each ( t, function ( t, o) { var a= o[ 0 ] , s= b. isFunction ( e[ t] ) && e[ t] ; i[ o[ 1 ] ] ( function ( ) { var e= s&& s. apply ( this , arguments) ; e&& b. isFunction ( e. promise) ? e. promise ( ) . done ( n. resolve) . fail ( n. reject) . progress ( n. notify) : n[ a+ "With" ] ( this === r? n. promise ( ) : this , s? [ e] : arguments) } ) } ) , e= null } ) . promise ( ) } , promise: function ( e) { return null != e? b. extend ( e, r) : r} } , i= { } ; return r. pipe= r. then, b. each ( t, function ( e, o) { var a= o[ 2 ] , s= o[ 3 ] ; r[ o[ 1 ] ] = a. add, s&& a. add ( function ( ) { n= s} , t[ 1 ^ e] [ 2 ] . disable, t[ 2 ] [ 2 ] . lock) , i[ o[ 0 ] ] = function ( ) { return i[ o[ 0 ] + "With" ] ( this === i? r: this , arguments) , this } , i[ o[ 0 ] + "With" ] = a. fireWith} ) , r. promise ( i) , e&& e. call ( i, i) , i} , when: function ( e) { var t= 0 , n= h. call ( arguments) , r= n. length, i= 1 !== r|| e&& b. isFunction ( e. promise) ? r: 0 , o= 1 === i? e: b. Deferred ( ) , a = function ( e, t, n) { return function ( r) { t[ e] = this , n[ e] = arguments. length> 1 ? h. call ( arguments) : r, n=== s? o. notifyWith ( t, n) : -- i|| o. resolveWith ( t, n) } } , s, u, l; if ( r> 1 ) for ( s= Array ( r) , u= Array ( r) , l= Array ( r) ; r> t; t++ ) n[ t] && b. isFunction ( n[ t] . promise) ? n[ t] . promise ( ) . done ( a ( t, l, n) ) . fail ( o. reject) . progress ( a ( t, u, s) ) : -- i; return i|| o. resolveWith ( l, n) , o. promise ( ) } } ) , b. support = function ( ) { var t, n, r, a, s, u, l, c, p, f, d= o. createElement ( "div" ) ; if ( d. setAttribute ( "className" , "t" ) , d. innerHTML= " a " , n= d. getElementsByTagName ( "*" ) , r= d. getElementsByTagName ( "a" ) [ 0 ] , ! n|| ! r|| ! n. length) return { } ; s= o. createElement ( "select" ) , l= s. appendChild ( o. createElement ( "option" ) ) , a= d. getElementsByTagName ( "input" ) [ 0 ] , r. style. cssText= "top:1px;float:left;opacity:.5" , t= { getSetAttribute: "t" !== d. className, leadingWhitespace: 3 === d. firstChild. nodeType, tbody: ! d. getElementsByTagName ( "tbody" ) . length, htmlSerialize: ! ! d. getElementsByTagName ( "link" ) . length, style: /top/ . test ( r. getAttribute ( "style" ) ) , hrefNormalized: "/a" === r. getAttribute ( "href" ) , opacity: /^0.5/ . test ( r. style. opacity) , cssFloat: ! ! r. style. cssFloat, checkOn: ! ! a. value, optSelected: l. selected, enctype: ! ! o. createElement ( "form" ) . enctype, html5Clone: "<:nav>" !== o. createElement ( "nav" ) . cloneNode ( ! 0 ) . outerHTML, boxModel: "CSS1Compat" === o. compatMode, deleteExpando: ! 0 , noCloneEvent: ! 0 , inlineBlockNeedsLayout: ! 1 , shrinkWrapBlocks: ! 1 , reliableMarginRight: ! 0 , boxSizingReliable: ! 0 , pixelPosition: ! 1 } , a. checked= ! 0 , t. noCloneChecked= a. cloneNode ( ! 0 ) . checked, s. disabled= ! 0 , t. optDisabled= ! l. disabled; try { delete d. test} catch ( h) { t. deleteExpando= ! 1 } a= o. createElement ( "input" ) , a. setAttribute ( "value" , "" ) , t. input= "" === a. getAttribute ( "value" ) , a. value= "t" , a. setAttribute ( "type" , "radio" ) , t. radioValue= "t" === a. value, a. setAttribute ( "checked" , "t" ) , a. setAttribute ( "name" , "t" ) , u= o. createDocumentFragment ( ) , u. appendChild ( a) , t. appendChecked= a. checked, t. checkClone= u. cloneNode ( ! 0 ) . cloneNode ( ! 0 ) . lastChild. checked, d. attachEvent&& ( d. attachEvent ( "onclick" , function ( ) { t. noCloneEvent= ! 1 } ) , d. cloneNode ( ! 0 ) . click ( ) ) ; for ( f in { submit: ! 0 , change: ! 0 , focusin: ! 0 } ) d. setAttribute ( c= "on" + f, "t" ) , t[ f+ "Bubbles" ] = c in e|| d. attributes[ c] . expando=== ! 1 ; return d. style. backgroundClip= "content-box" , d. cloneNode ( ! 0 ) . style. backgroundClip= "" , t. clearCloneStyle= "content-box" === d. style. backgroundClip, b ( function ( ) { var n, r, a, s= "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;" , u= o. getElementsByTagName ( "body" ) [ 0 ] ; u&& ( n= o. createElement ( "div" ) , n. style. cssText= "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px" , u. appendChild ( n) . appendChild ( d) , d. innerHTML= "" , a= d. getElementsByTagName ( "td" ) , a[ 0 ] . style. cssText= "padding:0;margin:0;border:0;display:none" , p= 0 === a[ 0 ] . offsetHeight, a[ 0 ] . style. display= "" , a[ 1 ] . style. display= "none" , t. reliableHiddenOffsets= p&& 0 === a[ 0 ] . offsetHeight, d. innerHTML= "" , d. style. cssText= "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;" , t. boxSizing= 4 === d. offsetWidth, t. doesNotIncludeMarginInBodyOffset= 1 !== u. offsetTop, e. getComputedStyle&& ( t. pixelPosition= "1%" !== ( e. getComputedStyle ( d, null ) || { } ) . top, t. boxSizingReliable= "4px" === ( e. getComputedStyle ( d, null ) || { width: "4px" } ) . width, r= d. appendChild ( o. createElement ( "div" ) ) , r. style. cssText= d. style. cssText= s, r. style. marginRight= r. style. width= "0" , d. style. width= "1px" , t. reliableMarginRight= ! parseFloat ( ( e. getComputedStyle ( r, null ) || { } ) . marginRight) ) , typeof d. style. zoom!== i&& ( d. innerHTML= "" , d. style. cssText= s+ "width:1px;padding:1px;display:inline;zoom:1" , t. inlineBlockNeedsLayout= 3 === d. offsetWidth, d. style. display= "block" , d. innerHTML= "
" , d. firstChild. style. width= "5px" , t. shrinkWrapBlocks= 3 !== d. offsetWidth, t. inlineBlockNeedsLayout&& ( u. style. zoom= 1 ) ) , u. removeChild ( n) , n= d= a= r= null ) } ) , n= s= u= l= r= a= null , t} ( ) ; var O = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/ , B = /([A-Z])/g ; function P ( e, n, r, i) { if ( b. acceptData ( e) ) { var o, a, s= b. expando, u= "string" == typeof n, l= e. nodeType, p= l? b. cache: e, f= l? e[ s] : e[ s] && s; if ( f&& p[ f] && ( i|| p[ f] . data) || ! u|| r!== t) return f|| ( l? e[ s] = f= c. pop ( ) || b. guid++ : f= s) , p[ f] || ( p[ f] = { } , l|| ( p[ f] . toJSON= b. noop) ) , ( "object" == typeof n|| "function" == typeof n) && ( i? p[ f] = b. extend ( p[ f] , n) : p[ f] . data= b. extend ( p[ f] . data, n) ) , o= p[ f] , i|| ( o. data|| ( o. data= { } ) , o= o. data) , r!== t&& ( o[ b. camelCase ( n) ] = r) , u? ( a= o[ n] , null == a&& ( a= o[ b. camelCase ( n) ] ) ) : a= o, a} } function R ( e, t, n) { if ( b. acceptData ( e) ) { var r, i, o, a= e. nodeType, s= a? b. cache: e, u= a? e[ b. expando] : b. expando; if ( s[ u] ) { if ( t&& ( o= n? s[ u] : s[ u] . data) ) { b. isArray ( t) ? t= t. concat ( b. map ( t, b. camelCase) ) : t in o? t= [ t] : ( t= b. camelCase ( t) , t= t in o? [ t] : t. split ( " " ) ) ; for ( r= 0 , i= t. length; i> r; r++ ) delete o[ t[ r] ] ; if ( ! ( n? $: b. isEmptyObject) ( o) ) return } ( n|| ( delete s[ u] . data, $ ( s[ u] ) ) ) && ( a? b. cleanData ( [ e] , ! 0 ) : b. support. deleteExpando|| s!= s. window? delete s[ u] : s[ u] = null ) } } } b. extend ( { cache: { } , expando: "jQuery" + ( p+ Math. random ( ) ) . replace ( /\D/g , "" ) , noData: { embed: ! 0 , object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" , applet: ! 0 } , hasData: function ( e) { return e= e. nodeType? b. cache[ e[ b. expando] ] : e[ b. expando] , ! ! e&& ! $ ( e) } , data: function ( e, t, n) { return P ( e, t, n) } , removeData: function ( e, t) { return R ( e, t) } , _data: function ( e, t, n) { return P ( e, t, n, ! 0 ) } , _removeData: function ( e, t) { return R ( e, t, ! 0 ) } , acceptData: function ( e) { if ( e. nodeType&& 1 !== e. nodeType&& 9 !== e. nodeType) return ! 1 ; var t= e. nodeName&& b. noData[ e. nodeName. toLowerCase ( ) ] ; return ! t|| t!== ! 0 && e. getAttribute ( "classid" ) === t} } ) , b. fn. extend ( { data: function ( e, n) { var r, i, o= this [ 0 ] , a= 0 , s= null ; if ( e=== t) { if ( this . length&& ( s= b. data ( o) , 1 === o. nodeType&& ! b. _data ( o, "parsedAttrs" ) ) ) { for ( r= o. attributes; r. length> a; a++ ) i= r[ a] . name, i. indexOf ( "data-" ) || ( i= b. camelCase ( i. slice ( 5 ) ) , W ( o, i, s[ i] ) ) ; b. _data ( o, "parsedAttrs" , ! 0 ) } return s} return "object" == typeof e? this . each ( function ( ) { b. data ( this , e) } ) : b. access ( this , function ( n) { return n=== t? o? W ( o, e, b. data ( o, e) ) : null : ( this . each ( function ( ) { b. data ( this , e, n) } ) , t) } , null , n, arguments. length> 1 , null , ! 0 ) } , removeData: function ( e) { return this . each ( function ( ) { b. removeData ( this , e) } ) } } ) ; function W ( e, n, r) { if ( r=== t&& 1 === e. nodeType) { var i= "data-" + n. replace ( B , "-$1" ) . toLowerCase ( ) ; if ( r= e. getAttribute ( i) , "string" == typeof r) { try { r= "true" === r? ! 0 : "false" === r? ! 1 : "null" === r? null : + r+ "" === r? + r: O . test ( r) ? b. parseJSON ( r) : r} catch ( o) { } b. data ( e, n, r) } else r= t} return r} function $ ( e) { var t; for ( t in e) if ( ( "data" !== t|| ! b. isEmptyObject ( e[ t] ) ) && "toJSON" !== t) return ! 1 ; return ! 0 } b. extend ( { queue: function ( e, n, r) { var i; return e? ( n= ( n|| "fx" ) + "queue" , i= b. _data ( e, n) , r&& ( ! i|| b. isArray ( r) ? i= b. _data ( e, n, b. makeArray ( r) ) : i. push ( r) ) , i|| [ ] ) : t} , dequeue: function ( e, t) { t= t|| "fx" ; var n= b. queue ( e, t) , r= n. length, i= n. shift ( ) , o= b. _queueHooks ( e, t) , a = function ( ) { b. dequeue ( e, t) } ; "inprogress" === i&& ( i= n. shift ( ) , r-- ) , o. cur= i, i&& ( "fx" === t&& n. unshift ( "inprogress" ) , delete o. stop, i. call ( e, a, o) ) , ! r&& o&& o. empty. fire ( ) } , _queueHooks: function ( e, t) { var n= t+ "queueHooks" ; return b. _data ( e, n) || b. _data ( e, n, { empty: b. Callbacks ( "once memory" ) . add ( function ( ) { b. _removeData ( e, t+ "queue" ) , b. _removeData ( e, n) } ) } ) } } ) , b. fn. extend ( { queue: function ( e, n) { var r= 2 ; return "string" != typeof e&& ( n= e, e= "fx" , r-- ) , r> arguments. length? b. queue ( this [ 0 ] , e) : n=== t? this : this . each ( function ( ) { var t= b. queue ( this , e, n) ; b. _queueHooks ( this , e) , "fx" === e&& "inprogress" !== t[ 0 ] && b. dequeue ( this , e) } ) } , dequeue: function ( e) { return this . each ( function ( ) { b. dequeue ( this , e) } ) } , delay: function ( e, t) { return e= b. fx? b. fx. speeds[ e] || e: e, t= t|| "fx" , this . queue ( t, function ( t, n) { var r= setTimeout ( t, e) ; n. stop = function ( ) { clearTimeout ( r) } } ) } , clearQueue: function ( e) { return this . queue ( e|| "fx" , [ ] ) } , promise: function ( e, n) { var r, i= 1 , o= b. Deferred ( ) , a= this , s= this . length, u = function ( ) { -- i|| o. resolveWith ( a, [ a] ) } ; "string" != typeof e&& ( n= e, e= t) , e= e|| "fx" ; while ( s-- ) r= b. _data ( a[ s] , e+ "queueHooks" ) , r&& r. empty&& ( i++ , r. empty. add ( u) ) ; return u ( ) , o. promise ( n) } } ) ; var I , z, X = /[\t\r\n]/g , U = /\r/g , V = /^(?:input|select|textarea|button|object)$/i , Y = /^(?:a|area)$/i , J = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i , G = /^(?:checked|selected)$/i , Q = b. support. getSetAttribute, K = b. support. input; b. fn. extend ( { attr: function ( e, t) { return b. access ( this , b. attr, e, t, arguments. length> 1 ) } , removeAttr: function ( e) { return this . each ( function ( ) { b. removeAttr ( this , e) } ) } , prop: function ( e, t) { return b. access ( this , b. prop, e, t, arguments. length> 1 ) } , removeProp: function ( e) { return e= b. propFix[ e] || e, this . each ( function ( ) { try { this [ e] = t, delete this [ e] } catch ( n) { } } ) } , addClass: function ( e) { var t, n, r, i, o, a= 0 , s= this . length, u= "string" == typeof e&& e; if ( b. isFunction ( e) ) return this . each ( function ( t) { b ( this ) . addClass ( e. call ( this , t, this . className) ) } ) ; if ( u) for ( t= ( e|| "" ) . match ( w) || [ ] ; s> a; a++ ) if ( n= this [ a] , r= 1 === n. nodeType&& ( n. className? ( " " + n. className+ " " ) . replace ( X , " " ) : " " ) ) { o= 0 ; while ( i= t[ o++ ] ) 0 > r. indexOf ( " " + i+ " " ) && ( r+= i+ " " ) ; n. className= b. trim ( r) } return this } , removeClass: function ( e) { var t, n, r, i, o, a= 0 , s= this . length, u= 0 === arguments. length|| "string" == typeof e&& e; if ( b. isFunction ( e) ) return this . each ( function ( t) { b ( this ) . removeClass ( e. call ( this , t, this . className) ) } ) ; if ( u) for ( t= ( e|| "" ) . match ( w) || [ ] ; s> a; a++ ) if ( n= this [ a] , r= 1 === n. nodeType&& ( n. className? ( " " + n. className+ " " ) . replace ( X , " " ) : "" ) ) { o= 0 ; while ( i= t[ o++ ] ) while ( r. indexOf ( " " + i+ " " ) >= 0 ) r= r. replace ( " " + i+ " " , " " ) ; n. className= e? b. trim ( r) : "" } return this } , toggleClass: function ( e, t) { var n= typeof e, r= "boolean" == typeof t; return b. isFunction ( e) ? this . each ( function ( n) { b ( this ) . toggleClass ( e. call ( this , n, this . className, t) , t) } ) : this . each ( function ( ) { if ( "string" === n) { var o, a= 0 , s= b ( this ) , u= t, l= e. match ( w) || [ ] ; while ( o= l[ a++ ] ) u= r? u: ! s. hasClass ( o) , s[ u? "addClass" : "removeClass" ] ( o) } else ( n=== i|| "boolean" === n) && ( this . className&& b. _data ( this , "__className__" , this . className) , this . className= this . className|| e=== ! 1 ? "" : b. _data ( this , "__className__" ) || "" ) } ) } , hasClass: function ( e) { var t= " " + e+ " " , n= 0 , r= this . length; for ( ; r> n; n++ ) if ( 1 === this [ n] . nodeType&& ( " " + this [ n] . className+ " " ) . replace ( X , " " ) . indexOf ( t) >= 0 ) return ! 0 ; return ! 1 } , val: function ( e) { var n, r, i, o= this [ 0 ] ; { if ( arguments. length) return i= b. isFunction ( e) , this . each ( function ( n) { var o, a= b ( this ) ; 1 === this . nodeType&& ( o= i? e. call ( this , n, a. val ( ) ) : e, null == o? o= "" : "number" == typeof o? o+= "" : b. isArray ( o) && ( o= b. map ( o, function ( e) { return null == e? "" : e+ "" } ) ) , r= b. valHooks[ this . type] || b. valHooks[ this . nodeName. toLowerCase ( ) ] , r&& "set" in r&& r. set ( this , o, "value" ) !== t|| ( this . value= o) ) } ) ; if ( o) return r= b. valHooks[ o. type] || b. valHooks[ o. nodeName. toLowerCase ( ) ] , r&& "get" in r&& ( n= r. get ( o, "value" ) ) !== t? n: ( n= o. value, "string" == typeof n? n. replace ( U , "" ) : null == n? "" : n) } } } ) , b. extend ( { valHooks: { option: { get : function ( e) { var t= e. attributes. value; return ! t|| t. specified? e. value: e. text} } , select: { get : function ( e) { var t, n, r= e. options, i= e. selectedIndex, o= "select-one" === e. type|| 0 > i, a= o? null : [ ] , s= o? i+ 1 : r. length, u= 0 > i? s: o? i: 0 ; for ( ; s> u; u++ ) if ( n= r[ u] , ! ( ! n. selected&& u!== i|| ( b. support. optDisabled? n. disabled: null !== n. getAttribute ( "disabled" ) ) || n. parentNode. disabled&& b. nodeName ( n. parentNode, "optgroup" ) ) ) { if ( t= b ( n) . val ( ) , o) return t; a. push ( t) } return a} , set : function ( e, t) { var n= b. makeArray ( t) ; return b ( e) . find ( "option" ) . each ( function ( ) { this . selected= b. inArray ( b ( this ) . val ( ) , n) >= 0 } ) , n. length|| ( e. selectedIndex= - 1 ) , n} } } , attr: function ( e, n, r) { var o, a, s, u= e. nodeType; if ( e&& 3 !== u&& 8 !== u&& 2 !== u) return typeof e. getAttribute=== i? b. prop ( e, n, r) : ( a= 1 !== u|| ! b. isXMLDoc ( e) , a&& ( n= n. toLowerCase ( ) , o= b. attrHooks[ n] || ( J . test ( n) ? z: I ) ) , r=== t? o&& a&& "get" in o&& null !== ( s= o. get ( e, n) ) ? s: ( typeof e. getAttribute!== i&& ( s= e. getAttribute ( n) ) , null == s? t: s) : null !== r? o&& a&& "set" in o&& ( s= o. set ( e, r, n) ) !== t? s: ( e. setAttribute ( n, r+ "" ) , r) : ( b. removeAttr ( e, n) , t) ) } , removeAttr: function ( e, t) { var n, r, i= 0 , o= t&& t. match ( w) ; if ( o&& 1 === e. nodeType) while ( n= o[ i++ ] ) r= b. propFix[ n] || n, J . test ( n) ? ! Q && G . test ( n) ? e[ b. camelCase ( "default-" + n) ] = e[ r] = ! 1 : e[ r] = ! 1 : b. attr ( e, n, "" ) , e. removeAttribute ( Q ? n: r) } , attrHooks: { type: { set : function ( e, t) { if ( ! b. support. radioValue&& "radio" === t&& b. nodeName ( e, "input" ) ) { var n= e. value; return e. setAttribute ( "type" , t) , n&& ( e. value= n) , t} } } } , propFix: { tabindex: "tabIndex" , readonly: "readOnly" , "for" : "htmlFor" , "class" : "className" , maxlength: "maxLength" , cellspacing: "cellSpacing" , cellpadding: "cellPadding" , rowspan: "rowSpan" , colspan: "colSpan" , usemap: "useMap" , frameborder: "frameBorder" , contenteditable: "contentEditable" } , prop: function ( e, n, r) { var i, o, a, s= e. nodeType; if ( e&& 3 !== s&& 8 !== s&& 2 !== s) return a= 1 !== s|| ! b. isXMLDoc ( e) , a&& ( n= b. propFix[ n] || n, o= b. propHooks[ n] ) , r!== t? o&& "set" in o&& ( i= o. set ( e, r, n) ) !== t? i: e[ n] = r: o&& "get" in o&& null !== ( i= o. get ( e, n) ) ? i: e[ n] } , propHooks: { tabIndex: { get : function ( e) { var n= e. getAttributeNode ( "tabindex" ) ; return n&& n. specified? parseInt ( n. value, 10 ) : V . test ( e. nodeName) || Y . test ( e. nodeName) && e. href? 0 : t} } } } ) , z= { get : function ( e, n) { var r= b. prop ( e, n) , i= "boolean" == typeof r&& e. getAttribute ( n) , o= "boolean" == typeof r? K && Q ? null != i: G . test ( n) ? e[ b. camelCase ( "default-" + n) ] : ! ! i: e. getAttributeNode ( n) ; return o&& o. value!== ! 1 ? n. toLowerCase ( ) : t} , set : function ( e, t, n) { return t=== ! 1 ? b. removeAttr ( e, n) : K && Q || ! G . test ( n) ? e. setAttribute ( ! Q && b. propFix[ n] || n, n) : e[ b. camelCase ( "default-" + n) ] = e[ n] = ! 0 , n} } , K && Q || ( b. attrHooks. value= { get : function ( e, n) { var r= e. getAttributeNode ( n) ; return b. nodeName ( e, "input" ) ? e. defaultValue: r&& r. specified? r. value: t} , set : function ( e, n, r) { return b. nodeName ( e, "input" ) ? ( e. defaultValue= n, t) : I && I . set ( e, n, r) } } ) , Q || ( I = b. valHooks. button= { get : function ( e, n) { var r= e. getAttributeNode ( n) ; return r&& ( "id" === n|| "name" === n|| "coords" === n? "" !== r. value: r. specified) ? r. value: t} , set : function ( e, n, r) { var i= e. getAttributeNode ( r) ; return i|| e. setAttributeNode ( i= e. ownerDocument. createAttribute ( r) ) , i. value= n+= "" , "value" === r|| n=== e. getAttribute ( r) ? n: t} } , b. attrHooks. contenteditable= { get : I . get , set : function ( e, t, n) { I . set ( e, "" === t? ! 1 : t, n) } } , b. each ( [ "width" , "height" ] , function ( e, n) { b. attrHooks[ n] = b. extend ( b. attrHooks[ n] , { set : function ( e, r) { return "" === r? ( e. setAttribute ( n, "auto" ) , r) : t} } ) } ) ) , b. support. hrefNormalized|| ( b. each ( [ "href" , "src" , "width" , "height" ] , function ( e, n) { b. attrHooks[ n] = b. extend ( b. attrHooks[ n] , { get : function ( e) { var r= e. getAttribute ( n, 2 ) ; return null == r? t: r} } ) } ) , b. each ( [ "href" , "src" ] , function ( e, t) { b. propHooks[ t] = { get : function ( e) { return e. getAttribute ( t, 4 ) } } } ) ) , b. support. style|| ( b. attrHooks. style= { get : function ( e) { return e. style. cssText|| t} , set : function ( e, t) { return e. style. cssText= t+ "" } } ) , b. support. optSelected|| ( b. propHooks. selected= b. extend ( b. propHooks. selected, { get : function ( e) { var t= e. parentNode; return t&& ( t. selectedIndex, t. parentNode&& t. parentNode. selectedIndex) , null } } ) ) , b. support. enctype|| ( b. propFix. enctype= "encoding" ) , b. support. checkOn|| b. each ( [ "radio" , "checkbox" ] , function ( ) { b. valHooks[ this ] = { get : function ( e) { return null === e. getAttribute ( "value" ) ? "on" : e. value} } } ) , b. each ( [ "radio" , "checkbox" ] , function ( ) { b. valHooks[ this ] = b. extend ( b. valHooks[ this ] , { set : function ( e, n) { return b. isArray ( n) ? e. checked= b. inArray ( b ( e) . val ( ) , n) >= 0 : t} } ) } ) ; var Z = /^(?:input|select|textarea)$/i , et= /^key/ , tt= /^(?:mouse|contextmenu)|click/ , nt= /^(?:focusinfocus|focusoutblur)$/ , rt= /^([^.]*)(?:\.(.+)|)$/ ; function it ( ) { return ! 0 } function ot ( ) { return ! 1 } b. event= { global: { } , add: function ( e, n, r, o, a) { var s, u, l, c, p, f, d, h, g, m, y, v= b. _data ( e) ; if ( v) { r. handler&& ( c= r, r= c. handler, a= c. selector) , r. guid|| ( r. guid= b. guid++ ) , ( u= v. events) || ( u= v. events= { } ) , ( f= v. handle) || ( f= v. handle = function ( e) { return typeof b=== i|| e&& b. event. triggered=== e. type? t: b. event. dispatch. apply ( f. elem, arguments) } , f. elem= e) , n= ( n|| "" ) . match ( w) || [ "" ] , l= n. length; while ( l-- ) s= rt. exec ( n[ l] ) || [ ] , g= y= s[ 1 ] , m= ( s[ 2 ] || "" ) . split ( "." ) . sort ( ) , p= b. event. special[ g] || { } , g= ( a? p. delegateType: p. bindType) || g, p= b. event. special[ g] || { } , d= b. extend ( { type: g, origType: y, data: o, handler: r, guid: r. guid, selector: a, needsContext: a&& b. expr. match. needsContext. test ( a) , namespace: m. join ( "." ) } , c) , ( h= u[ g] ) || ( h= u[ g] = [ ] , h. delegateCount= 0 , p. setup&& p. setup. call ( e, o, m, f) !== ! 1 || ( e. addEventListener? e. addEventListener ( g, f, ! 1 ) : e. attachEvent&& e. attachEvent ( "on" + g, f) ) ) , p. add&& ( p. add. call ( e, d) , d. handler. guid|| ( d. handler. guid= r. guid) ) , a? h. splice ( h. delegateCount++ , 0 , d) : h. push ( d) , b. event. global[ g] = ! 0 ; e= null } } , remove: function ( e, t, n, r, i) { var o, a, s, u, l, c, p, f, d, h, g, m= b. hasData ( e) && b. _data ( e) ; if ( m&& ( c= m. events) ) { t= ( t|| "" ) . match ( w) || [ "" ] , l= t. length; while ( l-- ) if ( s= rt. exec ( t[ l] ) || [ ] , d= g= s[ 1 ] , h= ( s[ 2 ] || "" ) . split ( "." ) . sort ( ) , d) { p= b. event. special[ d] || { } , d= ( r? p. delegateType: p. bindType) || d, f= c[ d] || [ ] , s= s[ 2 ] && RegExp ( "(^|\\.)" + h. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , u= o= f. length; while ( o-- ) a= f[ o] , ! i&& g!== a. origType|| n&& n. guid!== a. guid|| s&& ! s. test ( a. namespace) || r&& r!== a. selector&& ( "**" !== r|| ! a. selector) || ( f. splice ( o, 1 ) , a. selector&& f. delegateCount-- , p. remove&& p. remove. call ( e, a) ) ; u&& ! f. length&& ( p. teardown&& p. teardown. call ( e, h, m. handle) !== ! 1 || b. removeEvent ( e, d, m. handle) , delete c[ d] ) } else for ( d in c) b. event. remove ( e, d+ t[ l] , n, r, ! 0 ) ; b. isEmptyObject ( c) && ( delete m. handle, b. _removeData ( e, "events" ) ) } } , trigger: function ( n, r, i, a) { var s, u, l, c, p, f, d, h= [ i|| o] , g= y. call ( n, "type" ) ? n. type: n, m= y. call ( n, "namespace" ) ? n. namespace. split ( "." ) : [ ] ; if ( l= f= i= i|| o, 3 !== i. nodeType&& 8 !== i. nodeType&& ! nt. test ( g+ b. event. triggered) && ( g. indexOf ( "." ) >= 0 && ( m= g. split ( "." ) , g= m. shift ( ) , m. sort ( ) ) , u= 0 > g. indexOf ( ":" ) && "on" + g, n= n[ b. expando] ? n: new b. Event ( g, "object" == typeof n&& n) , n. isTrigger= ! 0 , n. namespace= m. join ( "." ) , n. namespace_re= n. namespace? RegExp ( "(^|\\.)" + m. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , n. result= t, n. target|| ( n. target= i) , r= null == r? [ n] : b. makeArray ( r, [ n] ) , p= b. event. special[ g] || { } , a|| ! p. trigger|| p. trigger. apply ( i, r) !== ! 1 ) ) { if ( ! a&& ! p. noBubble&& ! b. isWindow ( i) ) { for ( c= p. delegateType|| g, nt. test ( c+ g) || ( l= l. parentNode) ; l; l= l. parentNode) h. push ( l) , f= l; f=== ( i. ownerDocument|| o) && h. push ( f. defaultView|| f. parentWindow|| e) } d= 0 ; while ( ( l= h[ d++ ] ) && ! n. isPropagationStopped ( ) ) n. type= d> 1 ? c: p. bindType|| g, s= ( b. _data ( l, "events" ) || { } ) [ n. type] && b. _data ( l, "handle" ) , s&& s. apply ( l, r) , s= u&& l[ u] , s&& b. acceptData ( l) && s. apply&& s. apply ( l, r) === ! 1 && n. preventDefault ( ) ; if ( n. type= g, ! ( a|| n. isDefaultPrevented ( ) || p. _default&& p. _default. apply ( i. ownerDocument, r) !== ! 1 || "click" === g&& b. nodeName ( i, "a" ) || ! b. acceptData ( i) || ! u|| ! i[ g] || b. isWindow ( i) ) ) { f= i[ u] , f&& ( i[ u] = null ) , b. event. triggered= g; try { i[ g] ( ) } catch ( v) { } b. event. triggered= t, f&& ( i[ u] = f) } return n. result} } , dispatch: function ( e) { e= b. event. fix ( e) ; var n, r, i, o, a, s= [ ] , u= h. call ( arguments) , l= ( b. _data ( this , "events" ) || { } ) [ e. type] || [ ] , c= b. event. special[ e. type] || { } ; if ( u[ 0 ] = e, e. delegateTarget= this , ! c. preDispatch|| c. preDispatch. call ( this , e) !== ! 1 ) { s= b. event. handlers. call ( this , e, l) , n= 0 ; while ( ( o= s[ n++ ] ) && ! e. isPropagationStopped ( ) ) { e. currentTarget= o. elem, a= 0 ; while ( ( i= o. handlers[ a++ ] ) && ! e. isImmediatePropagationStopped ( ) ) ( ! e. namespace_re|| e. namespace_re. test ( i. namespace) ) && ( e. handleObj= i, e. data= i. data, r= ( ( b. event. special[ i. origType] || { } ) . handle|| i. handler) . apply ( o. elem, u) , r!== t&& ( e. result= r) === ! 1 && ( e. preventDefault ( ) , e. stopPropagation ( ) ) ) } return c. postDispatch&& c. postDispatch. call ( this , e) , e. result} } , handlers: function ( e, n) { var r, i, o, a, s= [ ] , u= n. delegateCount, l= e. target; if ( u&& 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 ( o= [ ] , a= 0 ; u> a; a++ ) i= n[ a] , r= i. selector+ " " , o[ r] === t&& ( o[ r] = i. needsContext? b ( r, this ) . index ( l) >= 0 : b. find ( r, this , null , [ l] ) . length) , o[ r] && o. push ( i) ; o. length&& s. push ( { elem: l, handlers: o} ) } return n. length> u&& s. push ( { elem: this , handlers: n. slice ( u) } ) , s} , fix: function ( e) { if ( e[ b. expando] ) return e; var t, n, r, i= e. type, a= e, s= this . fixHooks[ i] ; s|| ( this . fixHooks[ i] = s= tt. test ( i) ? this . mouseHooks: et. test ( i) ? this . keyHooks: { } ) , r= s. props? this . props. concat ( s. props) : this . props, e= new b. Event ( a) , t= r. length; while ( t-- ) n= r[ t] , e[ n] = a[ n] ; return e. target|| ( e. target= a. srcElement|| o) , 3 === e. target. nodeType&& ( e. target= e. target. parentNode) , e. metaKey= ! ! e. metaKey, s. filter? s. filter ( e, a) : 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: t. keyCode) , e} } , mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" . split ( " " ) , filter: function ( e, n) { var r, i, a, s= n. button, u= n. fromElement; return null == e. pageX&& null != n. clientX&& ( i= e. target. ownerDocument|| o, a= i. documentElement, r= i. body, e. pageX= n. clientX+ ( a&& a. scrollLeft|| r&& r. scrollLeft|| 0 ) - ( a&& a. clientLeft|| r&& r. clientLeft|| 0 ) , e. pageY= n. clientY+ ( a&& a. scrollTop|| r&& r. scrollTop|| 0 ) - ( a&& a. clientTop|| r&& r. clientTop|| 0 ) ) , ! e. relatedTarget&& u&& ( e. relatedTarget= u=== e. target? n. toElement: u) , e. which|| s=== t|| ( e. which= 1 & s? 1 : 2 & s? 3 : 4 & s? 2 : 0 ) , e} } , special: { load: { noBubble: ! 0 } , click: { trigger: function ( ) { return b. nodeName ( this , "input" ) && "checkbox" === this . type&& this . click? ( this . click ( ) , ! 1 ) : t} } , focus: { trigger: function ( ) { if ( this !== o. activeElement&& this . focus) try { return this . focus ( ) , ! 1 } catch ( e) { } } , delegateType: "focusin" } , blur: { trigger: function ( ) { return this === o. activeElement&& this . blur? ( this . blur ( ) , ! 1 ) : t} , delegateType: "focusout" } , beforeunload: { postDispatch: function ( e) { e. result!== t&& ( e. originalEvent. returnValue= e. result) } } } , simulate: function ( e, t, n, r) { var i= b. extend ( new b. Event , n, { type: e, isSimulated: ! 0 , originalEvent: { } } ) ; r? b. event. trigger ( i, null , t) : b. event. dispatch. call ( t, i) , i. isDefaultPrevented ( ) && n. preventDefault ( ) } } , b. removeEvent= o. removeEventListener? function ( e, t, n) { e. removeEventListener&& e. removeEventListener ( t, n, ! 1 ) } : function ( e, t, n) { var r= "on" + t; e. detachEvent&& ( typeof e[ r] === i&& ( e[ r] = null ) , e. detachEvent ( r, n) ) } , b. Event = function ( e, n) { return this instanceof b. Event ? ( e&& e. type? ( this . originalEvent= e, this . type= e. type, this . isDefaultPrevented= e. defaultPrevented|| e. returnValue=== ! 1 || e. getPreventDefault&& e. getPreventDefault ( ) ? it: ot) : this . type= e, n&& b. extend ( this , n) , this . timeStamp= e&& e. timeStamp|| b. now ( ) , this [ b. expando] = ! 0 , t) : new b. Event ( e, n) } , b. Event. prototype= { isDefaultPrevented: ot, isPropagationStopped: ot, isImmediatePropagationStopped: ot, preventDefault: function ( ) { var e= this . originalEvent; this . isDefaultPrevented= it, e&& ( e. preventDefault? e. preventDefault ( ) : e. returnValue= ! 1 ) } , stopPropagation: function ( ) { var e= this . originalEvent; this . isPropagationStopped= it, e&& ( e. stopPropagation&& e. stopPropagation ( ) , e. cancelBubble= ! 0 ) } , stopImmediatePropagation: function ( ) { this . isImmediatePropagationStopped= it, this . stopPropagation ( ) } } , b. each ( { mouseenter: "mouseover" , mouseleave: "mouseout" } , function ( e, t) { b. event. special[ e] = { delegateType: t, bindType: t, handle: function ( e) { var n, r= this , i= e. relatedTarget, o= e. handleObj;
return ( ! i|| i!== r&& ! b. contains ( r, i) ) && ( e. type= o. origType, n= o. handler. apply ( this , arguments) , e. type= t) , n} } } ) , b. support. submitBubbles|| ( b. event. special. submit= { setup: function ( ) { return b. nodeName ( this , "form" ) ? ! 1 : ( b. event. add ( this , "click._submit keypress._submit" , function ( e) { var n= e. target, r= b. nodeName ( n, "input" ) || b. nodeName ( n, "button" ) ? n. form: t; r&& ! b. _data ( r, "submitBubbles" ) && ( b. event. add ( r, "submit._submit" , function ( e) { e. _submit_bubble= ! 0 } ) , b. _data ( r, "submitBubbles" , ! 0 ) ) } ) , t) } , postDispatch: function ( e) { e. _submit_bubble&& ( delete e. _submit_bubble, this . parentNode&& ! e. isTrigger&& b. event. simulate ( "submit" , this . parentNode, e, ! 0 ) ) } , teardown: function ( ) { return b. nodeName ( this , "form" ) ? ! 1 : ( b. event. remove ( this , "._submit" ) , t) } } ) , b. support. changeBubbles|| ( b. event. special. change= { setup: function ( ) { return Z . test ( this . nodeName) ? ( ( "checkbox" === this . type|| "radio" === this . type) && ( b. event. add ( this , "propertychange._change" , function ( e) { "checked" === e. originalEvent. propertyName&& ( this . _just_changed= ! 0 ) } ) , b. event. add ( this , "click._change" , function ( e) { this . _just_changed&& ! e. isTrigger&& ( this . _just_changed= ! 1 ) , b. event. simulate ( "change" , this , e, ! 0 ) } ) ) , ! 1 ) : ( b. event. add ( this , "beforeactivate._change" , function ( e) { var t= e. target; Z . test ( t. nodeName) && ! b. _data ( t, "changeBubbles" ) && ( b. event. add ( t, "change._change" , function ( e) { ! this . parentNode|| e. isSimulated|| e. isTrigger|| b. event. simulate ( "change" , this . parentNode, e, ! 0 ) } ) , b. _data ( t, "changeBubbles" , ! 0 ) ) } ) , t) } , handle: function ( e) { var n= e. target; return this !== n|| e. isSimulated|| e. isTrigger|| "radio" !== n. type&& "checkbox" !== n. type? e. handleObj. handler. apply ( this , arguments) : t} , teardown: function ( ) { return b. event. remove ( this , "._change" ) , ! Z . test ( this . nodeName) } } ) , b. support. focusinBubbles|| b. each ( { focus: "focusin" , blur: "focusout" } , function ( e, t) { var n= 0 , r = function ( e) { b. event. simulate ( t, e. target, b. event. fix ( e) , ! 0 ) } ; b. event. special[ t] = { setup: function ( ) { 0 === n++ && o. addEventListener ( e, r, ! 0 ) } , teardown: function ( ) { 0 === -- n&& o. removeEventListener ( e, r, ! 0 ) } } } ) , b. fn. extend ( { on: function ( e, n, r, i, o) { var a, s; if ( "object" == typeof e) { "string" != typeof n&& ( r= r|| n, n= t) ; for ( a in e) this . on ( a, n, r, e[ a] , o) ; return this } if ( null == r&& null == i? ( i= n, r= n= t) : null == i&& ( "string" == typeof n? ( i= r, r= t) : ( i= r, r= n, n= t) ) , i=== ! 1 ) i= ot; else if ( ! i) return this ; return 1 === o&& ( s= i, i = function ( e) { return b ( ) . off ( e) , s. apply ( this , arguments) } , i. guid= s. guid|| ( s. guid= b. guid++ ) ) , this . each ( function ( ) { b. event. add ( this , e, i, r, n) } ) } , one: function ( e, t, n, r) { return this . on ( e, t, n, r, 1 ) } , off: function ( e, n, r) { var i, o; if ( e&& e. preventDefault&& e. handleObj) return i= e. handleObj, b ( e. delegateTarget) . off ( i. namespace? i. origType+ "." + i. namespace: i. origType, i. selector, i. handler) , this ; if ( "object" == typeof e) { for ( o in e) this . off ( o, n, e[ o] ) ; return this } return ( n=== ! 1 || "function" == typeof n) && ( r= n, n= t) , r=== ! 1 && ( r= ot) , this . each ( function ( ) { b. event. remove ( this , e, r, n) } ) } , 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, r) { return this . on ( t, e, n, r) } , undelegate: function ( e, t, n) { return 1 === arguments. length? this . off ( e, "**" ) : this . off ( t, e|| "**" , n) } , trigger: function ( e, t) { return this . each ( function ( ) { b. event. trigger ( e, t, this ) } ) } , triggerHandler: function ( e, n) { var r= this [ 0 ] ; return r? b. event. trigger ( e, n, r, ! 0 ) : t} } ) , function ( e, t) { var n, r, i, o, a, s, u, l, c, p, f, d, h, g, m, y, v, x= "sizzle" + - new Date , w= e. document, T = { } , N = 0 , C = 0 , k= it ( ) , E = it ( ) , S = it ( ) , A = typeof t, j= 1 << 31 , D = [ ] , L = D . pop, H = D . push, q= D . slice, M = D . indexOf|| function ( e) { var t= 0 , n= this . length; for ( ; n> t; t++ ) if ( this [ t] === e) return t; return - 1 } , _= "[\\x20\\t\\r\\n\\f]" , F = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" , O = F . replace ( "w" , "w#" ) , B = "([*^$|!~]?=)" , P = "\\[" + _+ "*(" + F + ")" + _+ "*(?:" + B + _+ "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + O + ")|)|)" + _+ "*\\]" , R = ":(" + F + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + P . replace ( 3 , 8 ) + ")*)|.*)\\)|)" , W = RegExp ( "^" + _+ "+|((?:^|[^\\\\])(?:\\\\.)*)" + _+ "+$" , "g" ) , $= RegExp ( "^" + _+ "*," + _+ "*" ) , I = RegExp ( "^" + _+ "*([\\x20\\t\\r\\n\\f>+~])" + _+ "*" ) , z= RegExp ( R ) , X = RegExp ( "^" + O + "$" ) , U = { ID : RegExp ( "^#(" + F + ")" ) , CLASS : RegExp ( "^\\.(" + F + ")" ) , NAME : RegExp ( "^\\[name=['\"]?(" + F + ")['\"]?\\]" ) , TAG : RegExp ( "^(" + F . replace ( "w" , "w*" ) + ")" ) , ATTR : RegExp ( "^" + P ) , PSEUDO : RegExp ( "^" + R ) , CHILD : RegExp ( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + _+ "*(even|odd|(([+-]|)(\\d*)n|)" + _+ "*(?:([+-]|)" + _+ "*(\\d+)|))" + _+ "*\\)|)" , "i" ) , needsContext: RegExp ( "^" + _+ "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + _+ "*((?:-\\d)?\\d*)" + _+ "*\\)|)(?=[^-]|$)" , "i" ) } , V = /[\x20\t\r\n\f]*[+~]/ , Y = /^[^{]+\{\s*\[native code/ , J = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/ , G = /^(?:input|select|textarea|button)$/i , Q = /^h\d$/i , K = /'|\\/g , Z = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g , et= /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g , tt = function ( e, t) { var n= "0x" + t- 65536 ; return n!== n? t: 0 > n? String. fromCharCode ( n+ 65536 ) : String. fromCharCode ( 55296 | n>> 10 , 56320 | 1023 & n) } ; try { q. call ( w. documentElement. childNodes, 0 ) [ 0 ] . nodeType} catch ( nt) { q = function ( e) { var t, n= [ ] ; while ( t= this [ e++ ] ) n. push ( t) ; return n} } function rt ( e) { return Y . test ( e+ "") } function it ( ) { var e, t= [ ] ; return e = function ( n, r) { return t. push ( n+= " ") > i. cacheLength&& delete e[ t. shift ( ) ] , e[ n] = r} } function ot ( e) { return e[ x] = ! 0 , e} function at ( e) { var t= p. createElement ( "div") ; try { return e ( t) } catch ( n) { return ! 1 } finally { t= null } } function st ( e, t, n, r) { var i, o, a, s, u, l, f, g, m, v; if ( ( t? t. ownerDocument|| t: w) !== p&& c ( t) , t= t|| p, n= n|| [ ] , ! e|| "string"!= typeof e) return n; if ( 1 !== ( s= t. nodeType) && 9 !== s) return [ ] ; if ( ! d&& ! r) { if ( i= J . exec ( e) ) if ( a= i[ 1 ] ) { if ( 9 === s) { if ( o= t. getElementById ( a) , ! o|| ! o. parentNode) return n; if ( o. id=== a) return n. push ( o) , n} else if ( t. ownerDocument&& ( o= t. ownerDocument. getElementById ( a) ) && y ( t, o) && o. id=== a) return n. push ( o) , n} else { if ( i[ 2 ] ) return H . apply ( n, q. call ( t. getElementsByTagName ( e) , 0 ) ) , n; if ( ( a= i[ 3 ] ) && T . getByClassName&& t. getElementsByClassName) return H . apply ( n, q. call ( t. getElementsByClassName ( a) , 0 ) ) , n} if ( T . qsa&& ! h. test ( e) ) { if ( f= ! 0 , g= x, m= t, v= 9 === s&& e, 1 === s&& "object"!== t. nodeName. toLowerCase ( ) ) { l= ft ( e) , ( f= t. getAttribute ( "id") ) ? g= f. replace ( K , "\\$& ") : t. setAttribute ( "id", g) , g= "[ id= '"+ g+ "'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(" , ")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute(" id")}}}return wt(e.replace(W," $1 "),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?" HTML "!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment(" ")),!e.getElementsByTagName(" * ").length}),T.attributes=at(function(e){e.innerHTML=" < select> < / select> ";var t=typeof e.lastChild.getAttribute(" multiple");return" boolean"!==t&&" string"!==t}),T.getByClassName=at(function(e){return e.innerHTML=" < div class = 'hidden e' > < / div> < div class = 'hidden' > < / div> ",e.getElementsByClassName&&e.getElementsByClassName(" e").length?(e.lastChild.className=" e",2===e.getElementsByClassName(" e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML=" < a name= '"+x+"' > < / a> < div name= '"+x+"' > < / div> ",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML=" < a href= '#' > < / a> ",e.firstChild&&typeof e.firstChild.getAttribute!==A&&" #"===e.firstChild.getAttribute(" href")})?{}:{href:function(e){return e.getAttribute(" href",2)},type:function(e){return e.getAttribute(" type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute(" id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode(" id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode(" id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(" * "===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[" : focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML=" < select> < option selected= '' > < / option> < / select> ",e.querySelectorAll(" [ selected] ").length||h.push(" \\[ "+_+" * ( ? : checked| disabled| ismap| multiple| readonly| selected| value) "),e.querySelectorAll(" : checked").length||h.push(" : checked")}),at(function(e){e.innerHTML=" < input type= 'hidden' i= '' / > ",e.querySelectorAll(" [ i^= '' ] ").length&&h.push(" [ * ^ $] = "+_+" * ( ? : \"\"|'')" ) , e. querySelectorAll ( ":enabled" ) . length|| h. push ( ":enabled" , ":disabled" ) , e. querySelectorAll ( "*,:x" ) , h. push ( ",.*:" ) } ) ) , ( T . matchesSelector= rt ( m= f. matchesSelector|| f. mozMatchesSelector|| f. webkitMatchesSelector|| f. oMatchesSelector|| f. msMatchesSelector) ) && at ( function ( e) { T . disconnectedMatch= m. call ( e, "div" ) , m. call ( e, "[s!='']:x" ) , g. push ( "!=" , R ) } ) , h= RegExp ( h. join ( "|" ) ) , g= RegExp ( g. join ( "|" ) ) , y= rt ( f. contains) || f. compareDocumentPosition? function ( e, t) { var n= 9 === e. nodeType? e. documentElement: e, r= t&& t. parentNode; return e=== r|| ! ( ! r|| 1 !== r. nodeType|| ! ( n. contains? n. contains ( r) : e. compareDocumentPosition&& 16 & e. compareDocumentPosition ( r) ) ) } : function ( e, t) { if ( t) while ( t= t. parentNode) if ( t=== e) return ! 0 ; return ! 1 } , v= f. compareDocumentPosition? function ( e, t) { var r; return e=== t? ( u= ! 0 , 0 ) : ( r= t. compareDocumentPosition&& e. compareDocumentPosition&& e. compareDocumentPosition ( t) ) ? 1 & r|| e. parentNode&& 11 === e. parentNode. nodeType? e=== n|| y ( w, e) ? - 1 : t=== n|| y ( w, t) ? 1 : 0 : 4 & r? - 1 : 1 : e. compareDocumentPosition? - 1 : 1 } : function ( e, t) { var r, i= 0 , o= e. parentNode, a= t. parentNode, s= [ e] , l= [ t] ; if ( e=== t) return u= ! 0 , 0 ; if ( ! o|| ! a) return e=== n? - 1 : t=== n? 1 : o? - 1 : a? 1 : 0 ; if ( o=== a) return ut ( e, t) ; r= e; while ( r= r. parentNode) s. unshift ( r) ; r= t; while ( r= r. parentNode) l. unshift ( r) ; while ( s[ i] === l[ i] ) i++ ; return i? ut ( s[ i] , l[ i] ) : s[ i] === w? - 1 : l[ i] === w? 1 : 0 } , u= ! 1 , [ 0 , 0 ] . sort ( v) , T . detectDuplicates= u, p) : p} , st. matches = function ( e, t) { return st ( e, null , null , t) } , st. matchesSelector = function ( e, t) { if ( ( e. ownerDocument|| e) !== p&& c ( e) , t= t. replace ( Z , "='$1']" ) , ! ( ! T . matchesSelector|| d|| g&& g. test ( t) || h. test ( t) ) ) try { var n= m. call ( e, t) ; if ( n|| T . disconnectedMatch|| e. document&& 11 !== e. document. nodeType) return n} catch ( r) { } return st ( t, p, null , [ e] ) . length> 0 } , st. contains = function ( e, t) { return ( e. ownerDocument|| e) !== p&& c ( e) , y ( e, t) } , st. attr = function ( e, t) { var n; return ( e. ownerDocument|| e) !== p&& c ( e) , d|| ( t= t. toLowerCase ( ) ) , ( n= i. attrHandle[ t] ) ? n ( e) : d|| T . attributes? e. getAttribute ( t) : ( ( n= e. getAttributeNode ( t) ) || e. getAttribute ( t) ) && e[ t] === ! 0 ? t: n&& n. specified? n. value: null } , st. error = function ( e) { throw Error ( "Syntax error, unrecognized expression: " + e) } , st. uniqueSort = function ( e) { var t, n= [ ] , r= 1 , i= 0 ; if ( u= ! T . detectDuplicates, e. sort ( v) , u) { for ( ; t= e[ r] ; r++ ) t=== e[ r- 1 ] && ( i= n. push ( r) ) ; while ( i-- ) e. splice ( n[ i] , 1 ) } return e} ; function ut ( e, t) { var n= t&& e, r= n&& ( ~ t. sourceIndex|| j) - ( ~ e. sourceIndex|| j) ; if ( r) return r; if ( n) while ( n= n. nextSibling) if ( n=== t) return - 1 ; return e? 1 : - 1 } function lt ( e) { return function ( t) { var n= t. nodeName. toLowerCase ( ) ; return "input" === n&& t. type=== e} } function ct ( e) { return function ( t) { var n= t. nodeName. toLowerCase ( ) ; return ( "input" === n|| "button" === n) && t. type=== e} } function pt ( e) { return ot ( function ( t) { return t= + t, ot ( function ( n, r) { var i, o= e ( [ ] , n. length, t) , a= o. length; while ( a-- ) n[ i= o[ a] ] && ( n[ i] = ! ( r[ i] = n[ i] ) ) } ) } ) } o= st. getText = function ( e) { var t, n= "" , r= 0 , i= e. nodeType; if ( i) { if ( 1 === i|| 9 === i|| 11 === i) { if ( "string" == typeof e. textContent) return e. textContent; for ( e= e. firstChild; e; e= e. nextSibling) n+= o ( e) } else if ( 3 === i|| 4 === i) return e. nodeValue} else for ( ; t= e[ r] ; r++ ) n+= o ( t) ; return n} , i= st. selectors= { cacheLength: 50 , createPseudo: ot, match: U , find: { } , relative: { ">" : { dir: "parentNode" , first: ! 0 } , " " : { dir: "parentNode" } , "+" : { dir: "previousSibling" , first: ! 0 } , "~" : { dir: "previousSibling" } } , preFilter: { ATTR : function ( e) { return e[ 1 ] = e[ 1 ] . replace ( et, tt) , e[ 3 ] = ( e[ 4 ] || e[ 5 ] || "" ) . replace ( et, tt) , "~=" === e[ 2 ] && ( e[ 3 ] = " " + e[ 3 ] + " " ) , e. slice ( 0 , 4 ) } , CHILD : function ( e) { return e[ 1 ] = e[ 1 ] . toLowerCase ( ) , "nth" === e[ 1 ] . slice ( 0 , 3 ) ? ( e[ 3 ] || st. error ( e[ 0 ] ) , e[ 4 ] = + ( e[ 4 ] ? e[ 5 ] + ( e[ 6 ] || 1 ) : 2 * ( "even" === e[ 3 ] || "odd" === e[ 3 ] ) ) , e[ 5 ] = + ( e[ 7 ] + e[ 8 ] || "odd" === e[ 3 ] ) ) : e[ 3 ] && st. error ( e[ 0 ] ) , e} , PSEUDO : function ( e) { var t, n= ! e[ 5 ] && e[ 2 ] ; return U . CHILD . test ( e[ 0 ] ) ? null : ( e[ 4 ] ? e[ 2 ] = e[ 4 ] : n&& z. test ( n) && ( t= ft ( n, ! 0 ) ) && ( t= n. indexOf ( ")" , n. length- t) - n. length) && ( e[ 0 ] = e[ 0 ] . slice ( 0 , t) , e[ 2 ] = n. slice ( 0 , t) ) , e. slice ( 0 , 3 ) ) } } , filter: { TAG : function ( e) { return "*" === e? function ( ) { return ! 0 } : ( e= e. replace ( et, tt) . toLowerCase ( ) , function ( t) { return t. nodeName&& t. nodeName. toLowerCase ( ) === e} ) } , CLASS : function ( e) { var t= k[ e+ " " ] ; return t|| ( t= RegExp ( "(^|" + _+ ")" + e+ "(" + _+ "|$)" ) ) && k ( e, function ( e) { return t. test ( e. className|| typeof e. getAttribute!== A && e. getAttribute ( "class" ) || "" ) } ) } , ATTR : function ( e, t, n) { return function ( r) { var i= st. attr ( r, e) ; return null == i? "!=" === t: t? ( i+= "" , "=" === t? i=== n: "!=" === t? i!== n: "^=" === t? n&& 0 === i. indexOf ( n) : "*=" === t? n&& i. indexOf ( n) > - 1 : "$=" === t? n&& i. slice ( - n. length) === n: "~=" === t? ( " " + i+ " " ) . indexOf ( n) > - 1 : "|=" === t? i=== n|| i. slice ( 0 , n. length+ 1 ) === n+ "-" : ! 1 ) : ! 0 } } , CHILD : function ( e, t, n, r, i) { var o= "nth" !== e. slice ( 0 , 3 ) , a= "last" !== e. slice ( - 4 ) , s= "of-type" === t; return 1 === r&& 0 === i? function ( e) { return ! ! e. parentNode} : function ( t, n, u) { var l, c, p, f, d, h, g= o!== a? "nextSibling" : "previousSibling" , m= t. parentNode, y= s&& t. nodeName. toLowerCase ( ) , v= ! u&& ! s; if ( m) { if ( o) { while ( g) { p= t; while ( p= p[ g] ) if ( s? p. nodeName. toLowerCase ( ) === y: 1 === p. nodeType) return ! 1 ; h= g= "only" === e&& ! h&& "nextSibling" } return ! 0 } if ( h= [ a? m. firstChild: m. lastChild] , a&& v) { c= m[ x] || ( m[ x] = { } ) , l= c[ e] || [ ] , d= l[ 0 ] === N && l[ 1 ] , f= l[ 0 ] === N && l[ 2 ] , p= d&& m. childNodes[ d] ; while ( p= ++ d&& p&& p[ g] || ( f= d= 0 ) || h. pop ( ) ) if ( 1 === p. nodeType&& ++ f&& p=== t) { c[ e] = [ N , d, f] ; break } } else if ( v&& ( l= ( t[ x] || ( t[ x] = { } ) ) [ e] ) && l[ 0 ] === N ) f= l[ 1 ] ; else while ( p= ++ d&& p&& p[ g] || ( f= d= 0 ) || h. pop ( ) ) if ( ( s? p. nodeName. toLowerCase ( ) === y: 1 === p. nodeType) && ++ f&& ( v&& ( ( p[ x] || ( p[ x] = { } ) ) [ e] = [ N , f] ) , p=== t) ) break ; return f-= i, f=== r|| 0 === f% r&& f/ r>= 0 } } } , PSEUDO : function ( e, t) { var n, r= i. pseudos[ e] || i. setFilters[ e. toLowerCase ( ) ] || st. error ( "unsupported pseudo: " + e) ; return r[ x] ? r ( t) : r. length> 1 ? ( n= [ e, e, "" , t] , i. setFilters. hasOwnProperty ( e. toLowerCase ( ) ) ? ot ( function ( e, n) { var i, o= r ( e, t) , a= o. length; while ( a-- ) i= M . call ( e, o[ a] ) , e[ i] = ! ( n[ i] = o[ a] ) } ) : function ( e) { return r ( e, 0 , n) } ) : r} } , pseudos: { not: ot ( function ( e) { var t= [ ] , n= [ ] , r= s ( e. replace ( W , "$1" ) ) ; return r[ x] ? ot ( function ( e, t, n, i) { var o, a= r ( e, null , i, [ ] ) , s= e. length; while ( s-- ) ( o= a[ s] ) && ( e[ s] = ! ( t[ s] = o) ) } ) : function ( e, i, o) { return t[ 0 ] = e, r ( t, null , o, n) , ! n. pop ( ) } } ) , has: ot ( function ( e) { return function ( t) { return st ( e, t) . length> 0 } } ) , contains: ot ( function ( e) { return function ( t) { return ( t. textContent|| t. innerText|| o ( t) ) . indexOf ( e) > - 1 } } ) , lang: ot ( function ( e) { return X . test ( e|| "" ) || st. error ( "unsupported lang: " + e) , e= e. replace ( et, tt) . toLowerCase ( ) , function ( t) { var n; do if ( n= d? t. getAttribute ( "xml:lang" ) || t. getAttribute ( "lang" ) : t. lang) return n= n. toLowerCase ( ) , n=== e|| 0 === n. indexOf ( e+ "-" ) ; while ( ( t= t. parentNode) && 1 === t. nodeType) ; return ! 1 } } ) , target: function ( t) { var n= e. location&& e. location. hash; return n&& n. slice ( 1 ) === t. id} , root: function ( e) { return e=== f} , focus: function ( e) { return e=== p. activeElement&& ( ! p. hasFocus|| p. hasFocus ( ) ) && ! ! ( e. type|| e. href|| ~ e. tabIndex) } , enabled: function ( e) { return e. disabled=== ! 1 } , disabled: function ( e) { return e. disabled=== ! 0 } , checked: function ( e) { var t= e. nodeName. toLowerCase ( ) ; return "input" === t&& ! ! e. checked|| "option" === t&& ! ! e. selected} , selected: function ( e) { return e. parentNode&& e. parentNode. selectedIndex, e. selected=== ! 0 } , empty: function ( e) { for ( e= e. firstChild; e; e= e. nextSibling) if ( e. nodeName> "@" || 3 === e. nodeType|| 4 === e. nodeType) return ! 1 ; return ! 0 } , parent: function ( e) { return ! i. pseudos. empty ( e) } , header: function ( e) { return Q . test ( e. nodeName) } , input: function ( e) { return G . test ( e. nodeName) } , button: function ( e) { var t= e. nodeName. toLowerCase ( ) ; return "input" === t&& "button" === e. type|| "button" === t} , text: function ( e) { var t; return "input" === e. nodeName. toLowerCase ( ) && "text" === e. type&& ( null == ( t= e. getAttribute ( "type" ) ) || t. toLowerCase ( ) === e. type) } , first: pt ( function ( ) { return [ 0 ] } ) , last: pt ( function ( e, t) { return [ t- 1 ] } ) , eq: pt ( function ( e, t, n) { return [ 0 > n? n+ t: n] } ) , even: pt ( function ( e, t) { var n= 0 ; for ( ; t> n; n+= 2 ) e. push ( n) ; return e} ) , odd: pt ( function ( e, t) { var n= 1 ; for ( ; t> n; n+= 2 ) e. push ( n) ; return e} ) , lt: pt ( function ( e, t, n) { var r= 0 > n? n+ t: n; for ( ; -- r>= 0 ; ) e. push ( r) ; return e} ) , gt: pt ( function ( e, t, n) { var r= 0 > n? n+ t: n; for ( ; t> ++ r; ) e. push ( r) ; return e} ) } } ; for ( n in { radio: ! 0 , checkbox: ! 0 , file: ! 0 , password: ! 0 , image: ! 0 } ) i. pseudos[ n] = lt ( n) ; for ( n in { submit: ! 0 , reset: ! 0 } ) i. pseudos[ n] = ct ( n) ; function ft ( e, t) { var n, r, o, a, s, u, l, c= E [ e+ " " ] ; if ( c) return t? 0 : c. slice ( 0 ) ; s= e, u= [ ] , l= i. preFilter; while ( s) { ( ! n|| ( r= $. exec ( s) ) ) && ( r&& ( s= s. slice ( r[ 0 ] . length) || s) , u. push ( o= [ ] ) ) , n= ! 1 , ( r= I . exec ( s) ) && ( n= r. shift ( ) , o. push ( { value: n, type: r[ 0 ] . replace ( W , " " ) } ) , s= s. slice ( n. length) ) ; for ( a in i. filter) ! ( r= U [ a] . exec ( s) ) || l[ a] && ! ( r= l[ a] ( r) ) || ( n= r. shift ( ) , o. push ( { value: n, type: a, matches: r} ) , s= s. slice ( n. length) ) ; if ( ! n) break } return t? s. length: s? st. error ( e) : E ( e, u) . slice ( 0 ) } function dt ( e) { var t= 0 , n= e. length, r= "" ; for ( ; n> t; t++ ) r+= e[ t] . value; return r} function ht ( e, t, n) { var i= t. dir, o= n&& "parentNode" === i, a= C ++ ; return t. first? function ( t, n, r) { while ( t= t[ i] ) if ( 1 === t. nodeType|| o) return e ( t, n, r) } : function ( t, n, s) { var u, l, c, p= N + " " + a; if ( s) { while ( t= t[ i] ) if ( ( 1 === t. nodeType|| o) && e ( t, n, s) ) return ! 0 } else while ( t= t[ i] ) if ( 1 === t. nodeType|| o) if ( c= t[ x] || ( t[ x] = { } ) , ( l= c[ i] ) && l[ 0 ] === p) { if ( ( u= l[ 1 ] ) === ! 0 || u=== r) return u=== ! 0 } else if ( l= c[ i] = [ p] , l[ 1 ] = e ( t, n, s) || r, l[ 1 ] === ! 0 ) return ! 0 } } function gt ( e) { return e. length> 1 ? function ( t, n, r) { var i= e. length; while ( i-- ) if ( ! e[ i] ( t, n, r) ) return ! 1 ; return ! 0 } : e[ 0 ] } function mt ( e, t, n, r, i) { var o, a= [ ] , s= 0 , u= e. length, l= null != t; for ( ; u> s; s++ ) ( o= e[ s] ) && ( ! n|| n ( o, r, i) ) && ( a. push ( o) , l&& t. push ( s) ) ; return a} function yt ( e, t, n, r, i, o) { return r&& ! r[ x] && ( r= yt ( r) ) , i&& ! i[ x] && ( i= yt ( i, o) ) , ot ( function ( o, a, s, u) { var l, c, p, f= [ ] , d= [ ] , h= a. length, g= o|| xt ( t|| "*" , s. nodeType? [ s] : s, [ ] ) , m= ! e|| ! o&& t? g: mt ( g, f, e, s, u) , y= n? i|| ( o? e: h|| r) ? [ ] : a: m; if ( n&& n ( m, y, s, u) , r) { l= mt ( y, d) , r ( l, [ ] , s, u) , c= l. length; while ( c-- ) ( p= l[ c] ) && ( y[ d[ c] ] = ! ( m[ d[ c] ] = p) ) } if ( o) { if ( i|| e) { if ( i) { l= [ ] , c= y. length; while ( c-- ) ( p= y[ c] ) && l. push ( m[ c] = p) ; i ( null , y= [ ] , l, u) } c= y. length; while ( c-- ) ( p= y[ c] ) && ( l= i? M . call ( o, p) : f[ c] ) > - 1 && ( o[ l] = ! ( a[ l] = p) ) } } else y= mt ( y=== a? y. splice ( h, y. length) : y) , i? i ( null , a, y, u) : H . apply ( a, y) } ) } function vt ( e) { var t, n, r, o= e. length, a= i. relative[ e[ 0 ] . type] , s= a|| i. relative[ " " ] , u= a? 1 : 0 , c= ht ( function ( e) { return e=== t} , s, ! 0 ) , p= ht ( function ( e) { return M . call ( t, e) > - 1 } , s, ! 0 ) , f= [ function ( e, n, r) { return ! a&& ( r|| n!== l) || ( ( t= n) . nodeType? c ( e, n, r) : p ( e, n, r) ) } ] ; for ( ; o> u; u++ ) if ( n= i. relative[ e[ u] . type] ) f= [ ht ( gt ( f) , n) ] ; else { if ( n= i. filter[ e[ u] . type] . apply ( null , e[ u] . matches) , n[ x] ) { for ( r= ++ u; o> r; r++ ) if ( i. relative[ e[ r] . type] ) break ; return yt ( u> 1 && gt ( f) , u> 1 && dt ( e. slice ( 0 , u- 1 ) ) . replace ( W , "$1" ) , n, r> u&& vt ( e. slice ( u, r) ) , o> r&& vt ( e= e. slice ( r) ) , o> r&& dt ( e) ) } f. push ( n) } return gt ( f) } function bt ( e, t) { var n= 0 , o= t. length> 0 , a= e. length> 0 , s = function ( s, u, c, f, d) { var h, g, m, y= [ ] , v= 0 , b= "0" , x= s&& [ ] , w= null != d, T = l, C = s|| a&& i. find. TAG ( "*" , d&& u. parentNode|| u) , k= N += null == T ? 1 : Math. random ( ) || .1 ; for ( w&& ( l= u!== p&& u, r= n) ; null != ( h= C [ b] ) ; b++ ) { if ( a&& h) { g= 0 ; while ( m= e[ g++ ] ) if ( m ( h, u, c) ) { f. push ( h) ; break } w&& ( N = k, r= ++ n) } o&& ( ( h= ! m&& h) && v-- , s&& x. push ( h) ) } if ( v+= b, o&& b!== v) { g= 0 ; while ( m= t[ g++ ] ) m ( x, y, u, c) ; if ( s) { if ( v> 0 ) while ( b-- ) x[ b] || y[ b] || ( y[ b] = L . call ( f) ) ; y= mt ( y) } H . apply ( f, y) , w&& ! s&& y. length> 0 && v+ t. length> 1 && st. uniqueSort ( f) } return w&& ( N = k, l= T ) , x} ; return o? ot ( s) : s} s= st. compile = function ( e, t) { var n, r= [ ] , i= [ ] , o= S [ e+ " " ] ; if ( ! o) { t|| ( t= ft ( e) ) , n= t. length; while ( n-- ) o= vt ( t[ n] ) , o[ x] ? r. push ( o) : i. push ( o) ; o= S ( e, bt ( i, r) ) } return o} ; function xt ( e, t, n) { var r= 0 , i= t. length; for ( ; i> r; r++ ) st ( e, t[ r] , n) ; return n} function wt ( e, t, n, r) { var o, a, u, l, c, p= ft ( e) ; if ( ! r&& 1 === p. length) { if ( a= p[ 0 ] = p[ 0 ] . slice ( 0 ) , a. length> 2 && "ID" === ( u= a[ 0 ] ) . type&& 9 === t. nodeType&& ! d&& i. relative[ a[ 1 ] . type] ) { if ( t= i. find. ID ( u. matches[ 0 ] . replace ( et, tt) , t) [ 0 ] , ! t) return n; e= e. slice ( a. shift ( ) . value. length) } o= U . needsContext. test ( e) ? 0 : a. length; while ( o-- ) { if ( u= a[ o] , i. relative[ l= u. type] ) break ; if ( ( c= i. find[ l] ) && ( r= c ( u. matches[ 0 ] . replace ( et, tt) , V . test ( a[ 0 ] . type) && t. parentNode|| t) ) ) { if ( a. splice ( o, 1 ) , e= r. length&& dt ( a) , ! e) return H . apply ( n, q. call ( r, 0 ) ) , n; break } } } return s ( e, p) ( r, t, d, n, V . test ( e) ) , n} i. pseudos. nth= i. pseudos. eq; function Tt ( ) { } i. filters= Tt. prototype= i. pseudos, i. setFilters= new Tt , c ( ) , st. attr= b. attr, b. find= st, b. expr= st. selectors, b. expr[ ":" ] = b. expr. pseudos, b. unique= st. uniqueSort, b. text= st. getText, b. isXMLDoc= st. isXML, b. contains= st. contains} ( e) ; var at= /Until$/ , st= /^(?:parents|prev(?:Until|All))/ , ut= /^.[^:#\[\.,]*$/ , lt= b. expr. match. needsContext, ct= { children: ! 0 , contents: ! 0 , next: ! 0 , prev: ! 0 } ; b. fn. extend ( { find: function ( e) { var t, n, r, i= this . length; if ( "string" != typeof e) return r= this , this . pushStack ( b ( e) . filter ( function ( ) { for ( t= 0 ; i> t; t++ ) if ( b. contains ( r[ t] , this ) ) return ! 0 } ) ) ; for ( n= [ ] , t= 0 ; i> t; t++ ) b. find ( e, this [ t] , n) ; return n= this . pushStack ( i> 1 ? b. unique ( n) : n) , n. selector= ( this . selector? this . selector+ " " : "" ) + e, n} , has: function ( e) { var t, n= b ( e, this ) , r= n. length; return this . filter ( function ( ) { for ( t= 0 ; r> t; t++ ) if ( b. contains ( this , n[ t] ) ) return ! 0 } ) } , not: function ( e) { return this . pushStack ( ft ( this , e, ! 1 ) ) } , filter: function ( e) { return this . pushStack ( ft ( this , e, ! 0 ) ) } , is: function ( e) { return ! ! e&& ( "string" == typeof e? lt. test ( e) ? b ( e, this . context) . index ( this [ 0 ] ) >= 0 : b. filter ( e, this ) . length> 0 : this . filter ( e) . length> 0 ) } , closest: function ( e, t) { var n, r= 0 , i= this . length, o= [ ] , a= lt. test ( e) || "string" != typeof e? b ( e, t|| this . context) : 0 ; for ( ; i> r; r++ ) { n= this [ r] ; while ( n&& n. ownerDocument&& n!== t&& 11 !== n. nodeType) { if ( a? a. index ( n) > - 1 : b. find. matchesSelector ( n, e) ) { o. push ( n) ; break } n= n. parentNode} } return this . pushStack ( o. length> 1 ? b. unique ( o) : o) } , index: function ( e) { return e? "string" == typeof e? b. inArray ( this [ 0 ] , b ( e) ) : b. inArray ( e. jquery? e[ 0 ] : e, this ) : this [ 0 ] && this [ 0 ] . parentNode? this . first ( ) . prevAll ( ) . length: - 1 } , add: function ( e, t) { var n= "string" == typeof e? b ( e, t) : b. makeArray ( e&& e. nodeType? [ e] : e) , r= b. merge ( this . get ( ) , n) ; return this . pushStack ( b. unique ( r) ) } , addBack: function ( e) { return this . add ( null == e? this . prevObject: this . prevObject. filter ( e) ) } } ) , b. fn. andSelf= b. fn. addBack; function pt ( e, t) { do e= e[ t] ; while ( e&& 1 !== e. nodeType) ; return e} b. each ( { parent: function ( e) { var t= e. parentNode; return t&& 11 !== t. nodeType? t: null } , parents: function ( e) { return b. dir ( e, "parentNode" ) } , parentsUntil: function ( e, t, n) { return b. dir ( e, "parentNode" , n) } , next: function ( e) { return pt ( e, "nextSibling" ) } , prev: function ( e) { return pt ( e, "previousSibling" ) } , nextAll: function ( e) { return b. dir ( e, "nextSibling" ) } , prevAll: function ( e) { return b. dir ( e, "previousSibling" ) } , nextUntil: function ( e, t, n) { return b. dir ( e, "nextSibling" , n) } , prevUntil: function ( e, t, n) { return b. dir ( e, "previousSibling" , n) } , siblings: function ( e) { return b. sibling ( ( e. parentNode|| { } ) . firstChild, e) } , children: function ( e) { return b. sibling ( e. firstChild) } , contents: function ( e) { return b. nodeName ( e, "iframe" ) ? e. contentDocument|| e. contentWindow. document: b. merge ( [ ] , e. childNodes) } } , function ( e, t) { b. fn[ e] = function ( n, r) { var i= b. map ( this , t, n) ; return at. test ( e) || ( r= n) , r&& "string" == typeof r&& ( i= b. filter ( r, i) ) , i= this . length> 1 && ! ct[ e] ? b. unique ( i) : i, this . length> 1 && st. test ( e) && ( i= i. reverse ( ) ) , this . pushStack ( i) } } ) , b. extend ( { filter: function ( e, t, n) { return n&& ( e= ":not(" + e+ ")" ) , 1 === t. length? b. find. matchesSelector ( t[ 0 ] , e) ? [ t[ 0 ] ] : [ ] : b. find. matches ( e, t) } , dir: function ( e, n, r) { var i= [ ] , o= e[ n] ; while ( o&& 9 !== o. nodeType&& ( r=== t|| 1 !== o. nodeType|| ! b ( o) . is ( r) ) ) 1 === o. nodeType&& i. push ( o) , o= o[ n] ; return i} , sibling: function ( e, t) { var n= [ ] ; for ( ; e; e= e. nextSibling) 1 === e. nodeType&& e!== t&& n. push ( e) ; return n} } ) ; function ft ( e, t, n) { if ( t= t|| 0 , b. isFunction ( t) ) return b. grep ( e, function ( e, r) { var i= ! ! t. call ( e, r, e) ; return i=== n} ) ; if ( t. nodeType) return b. grep ( e, function ( e) { return e=== t=== n} ) ; if ( "string" == typeof t) { var r= b. grep ( e, function ( e) { return 1 === e. nodeType} ) ; if ( ut. test ( t) ) return b. filter ( t, r, ! n) ; t= b. filter ( t, r) } return b. grep ( e, function ( e) { return b. inArray ( e, t) >= 0 === n} ) } function dt ( e) { var t= ht. split ( "|" ) , n= e. createDocumentFragment ( ) ; if ( n. createElement) while ( t. length) n. createElement ( t. pop ( ) ) ; return n} var ht= "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video" , gt= / jQuery\d+="(?:null|\d+)"/g , mt= RegExp ( "<(?:" + ht+ ")[\\s/>]" , "i" ) , yt= /^\s+/ , vt= /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi , bt= /<([\w:]+)/ , xt= /, wt= /<|?\w+;/ , Tt= /<(?:script|style|link)/i , Nt= /^(?:checkbox|radio)$/i , Ct= /checked\s*(?:[^=]|=\s*.checked.)/i , kt= /^$|\/(?:java|ecma)script/i , Et= /^true\/(.*)/ , St= /^\s*\s*$/g , At= { option: [ 1 , "" , "" ] , legend: [ 1 , "" , "" ] , area: [ 1 , "" , "" ] , param: [ 1 , "" , "" ] , thead: [ 1 , "" ] , tr: [ 2 , "" ] , col: [ 2 , "" ] , td: [ 3 , "" ] , _default: b. support. htmlSerialize? [ 0 , "" , "" ] : [ 1 , "X", "
" ] } , jt= dt ( o) , Dt= jt. appendChild ( o. createElement ( "div" ) ) ; At. optgroup= At. option, At. tbody= At. tfoot= At. colgroup= At. caption= At. thead, At. th= At. td, b. fn. extend ( { text: function ( e) { return b. access ( this , function ( e) { return e=== t? b. text ( this ) : this . empty ( ) . append ( ( this [ 0 ] && this [ 0 ] . ownerDocument|| o) . createTextNode ( e) ) } , null , e, arguments. length) } , wrapAll: function ( e) { if ( b. isFunction ( e) ) return this . each ( function ( t) { b ( this ) . wrapAll ( e. call ( this , t) ) } ) ; if ( this [ 0 ] ) { var t= b ( e, this [ 0 ] . ownerDocument) . eq ( 0 ) . clone ( ! 0 ) ; this [ 0 ] . parentNode&& t. insertBefore ( this [ 0 ] ) , t. map ( function ( ) { var e= this ; while ( e. firstChild&& 1 === e. firstChild. nodeType) e= e. firstChild; return e} ) . append ( this ) } return this } , wrapInner: function ( e) { return b. isFunction ( e) ? this . each ( function ( t) { b ( this ) . wrapInner ( e. call ( this , t) ) } ) : this . each ( function ( ) { var t= b ( this ) , n= t. contents ( ) ; n. length? n. wrapAll ( e) : t. append ( e) } ) } , wrap: function ( e) { var t= b. isFunction ( e) ; return this . each ( function ( n) { b ( this ) . wrapAll ( t? e. call ( this , n) : e) } ) } , unwrap: function ( ) { return this . parent ( ) . each ( function ( ) { b. nodeName ( this , "body" ) || b ( this ) . replaceWith ( this . childNodes) } ) . end ( ) } , append: function ( ) { return this . domManip ( arguments, ! 0 , function ( e) { ( 1 === this . nodeType|| 11 === this . nodeType|| 9 === this . nodeType) && this . appendChild ( e) } ) } , prepend: function ( ) { return this . domManip ( arguments, ! 0 , function ( e) { ( 1 === this . nodeType|| 11 === this . nodeType|| 9 === this . nodeType) && this . insertBefore ( e, this . firstChild) } ) } , before: function ( ) { return this . domManip ( arguments, ! 1 , function ( e) { this . parentNode&& this . parentNode. insertBefore ( e, this ) } ) } , after: function ( ) { return this . domManip ( arguments, ! 1 , function ( e) { this . parentNode&& this . parentNode. insertBefore ( e, this . nextSibling) } ) } , remove: function ( e, t) { var n, r= 0 ; for ( ; null != ( n= this [ r] ) ; r++ ) ( ! e|| b. filter ( e, [ n] ) . length> 0 ) && ( t|| 1 !== n. nodeType|| b. cleanData ( Ot ( n) ) , n. parentNode&& ( t&& b. contains ( n. ownerDocument, n) && Mt ( Ot ( n, "script" ) ) , n. parentNode. removeChild ( n) ) ) ; return this } , empty: function ( ) { var e, t= 0 ; for ( ; null != ( e= this [ t] ) ; t++ ) { 1 === e. nodeType&& b. cleanData ( Ot ( e, ! 1 ) ) ; while ( e. firstChild) e. removeChild ( e. firstChild) ; e. options&& b. nodeName ( e, "select" ) && ( e. options. length= 0 ) } return this } , clone: function ( e, t) { return e= null == e? ! 1 : e, t= null == t? e: t, this . map ( function ( ) { return b. clone ( this , e, t) } ) } , html: function ( e) { return b. access ( this , function ( e) { var n= this [ 0 ] || { } , r= 0 , i= this . length; if ( e=== t) return 1 === n. nodeType? n. innerHTML. replace ( gt, "" ) : t; if ( ! ( "string" != typeof e|| Tt. test ( e) || ! b. support. htmlSerialize&& mt. test ( e) || ! b. support. leadingWhitespace&& yt. test ( e) || At[ ( bt. exec ( e) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ] ) ) { e= e. replace ( vt, "<$1>$2>" ) ; try { for ( ; i> r; r++ ) n= this [ r] || { } , 1 === n. nodeType&& ( b. cleanData ( Ot ( n, ! 1 ) ) , n. innerHTML= e) ; n= 0 } catch ( o) { } } n&& this . empty ( ) . append ( e) } , null , e, arguments. length) } , replaceWith: function ( e) { var t= b. isFunction ( e) ; return t|| "string" == typeof e|| ( e= b ( e) . not ( this ) . detach ( ) ) , this . domManip ( [ e] , ! 0 , function ( e) { var t= this . nextSibling, n= this . parentNode; n&& ( b ( this ) . remove ( ) , n. insertBefore ( e, t) ) } ) } , detach: function ( e) { return this . remove ( e, ! 0 ) } , domManip: function ( e, n, r) { e= f. apply ( [ ] , e) ; var i, o, a, s, u, l, c= 0 , p= this . length, d= this , h= p- 1 , g= e[ 0 ] , m= b. isFunction ( g) ; if ( m|| ! ( 1 >= p|| "string" != typeof g|| b. support. checkClone) && Ct. test ( g) ) return this . each ( function ( i) { var o= d. eq ( i) ; m&& ( e[ 0 ] = g. call ( this , i, n? o. html ( ) : t) ) , o. domManip ( e, n, r) } ) ; if ( p&& ( l= b. buildFragment ( e, this [ 0 ] . ownerDocument, ! 1 , this ) , i= l. firstChild, 1 === l. childNodes. length&& ( l= i) , i) ) { for ( n= n&& b. nodeName ( i, "tr" ) , s= b. map ( Ot ( l, "script" ) , Ht) , a= s. length; p> c; c++ ) o= l, c!== h&& ( o= b. clone ( o, ! 0 , ! 0 ) , a&& b. merge ( s, Ot ( o, "script" ) ) ) , r. call ( n&& b. nodeName ( this [ c] , "table" ) ? Lt ( this [ c] , "tbody" ) : this [ c] , o, c) ; if ( a) for ( u= s[ s. length- 1 ] . ownerDocument, b. map ( s, qt) , c= 0 ; a> c; c++ ) o= s[ c] , kt. test ( o. type|| "" ) && ! b. _data ( o, "globalEval" ) && b. contains ( u, o) && ( o. src? b. ajax ( { url: o. src, type: "GET" , dataType: "script" , async : ! 1 , global: ! 1 , "throws" : ! 0 } ) : b. globalEval ( ( o. text|| o. textContent|| o. innerHTML|| "" ) . replace ( St, "" ) ) ) ; l= i= null } return this } } ) ; function Lt ( e, t) { return e. getElementsByTagName ( t) [ 0 ] || e. appendChild ( e. ownerDocument. createElement ( t) ) } function Ht ( e) { var t= e. getAttributeNode ( "type" ) ; return e. type= ( t&& t. specified) + "/" + e. type, e} function qt ( e) { var t= Et. exec ( e. type) ; return t? e. type= t[ 1 ] : e. removeAttribute ( "type" ) , e} function Mt ( e, t) { var n, r= 0 ; for ( ; null != ( n= e[ r] ) ; r++ ) b. _data ( n, "globalEval" , ! t|| b. _data ( t[ r] , "globalEval" ) ) } function _t ( e, t) { if ( 1 === t. nodeType&& b. hasData ( e) ) { var n, r, i, o= b. _data ( e) , a= b. _data ( t, o) , s= o. events; if ( s) { delete a. handle, a. events= { } ; for ( n in s) for ( r= 0 , i= s[ n] . length; i> r; r++ ) b. event. add ( t, n, s[ n] [ r] ) } a. data&& ( a. data= b. extend ( { } , a. data) ) } } function Ft ( e, t) { var n, r, i; if ( 1 === t. nodeType) { if ( n= t. nodeName. toLowerCase ( ) , ! b. support. noCloneEvent&& t[ b. expando] ) { i= b. _data ( t) ; for ( r in i. events) b. removeEvent ( t, r, i. handle) ; t. removeAttribute ( b. expando) } "script" === n&& t. text!== e. text? ( Ht ( t) . text= e. text, qt ( t) ) : "object" === n? ( t. parentNode&& ( t. outerHTML= e. outerHTML) , b. support. html5Clone&& e. innerHTML&& ! b. trim ( t. innerHTML) && ( t. innerHTML= e. innerHTML) ) : "input" === n&& Nt. test ( e. type) ? ( t. defaultChecked= t. checked= e. checked, t. value!== e. value&& ( t. value= e. value) ) : "option" === n? t. defaultSelected= t. selected= e. defaultSelected: ( "input" === n|| "textarea" === n) && ( t. defaultValue= e. defaultValue) } } b. each ( { appendTo: "append" , prependTo: "prepend" , insertBefore: "before" , insertAfter: "after" , replaceAll: "replaceWith" } , function ( e, t) { b. fn[ e] = function ( e) { var n, r= 0 , i= [ ] , o= b ( e) , a= o. length- 1 ; for ( ; a>= r; r++ ) n= r=== a? this : this . clone ( ! 0 ) , b ( o[ r] ) [ t] ( n) , d. apply ( i, n. get ( ) ) ; return this . pushStack ( i) } } ) ; function Ot ( e, n) { var r, o, a= 0 , s= typeof e. getElementsByTagName!== i? e. getElementsByTagName ( n|| "*" ) : typeof e. querySelectorAll!== i? e. querySelectorAll ( n|| "*" ) : t; if ( ! s) for ( s= [ ] , r= e. childNodes|| e; null != ( o= r[ a] ) ; a++ ) ! n|| b. nodeName ( o, n) ? s. push ( o) : b. merge ( s, Ot ( o, n) ) ; return n=== t|| n&& b. nodeName ( e, n) ? b. merge ( [ e] , s) : s} function Bt ( e) { Nt. test ( e. type) && ( e. defaultChecked= e. checked) } b. extend ( { clone: function ( e, t, n) { var r, i, o, a, s, u= b. contains ( e. ownerDocument, e) ; if ( b. support. html5Clone|| b. isXMLDoc ( e) || ! mt. test ( "<" + e. nodeName+ ">" ) ? o= e. cloneNode ( ! 0 ) : ( Dt. innerHTML= e. outerHTML, Dt. removeChild ( o= Dt. firstChild) ) , ! ( b. support. noCloneEvent&& b. support. noCloneChecked|| 1 !== e. nodeType&& 11 !== e. nodeType|| b. isXMLDoc ( e) ) ) for ( r= Ot ( o) , s= Ot ( e) , a= 0 ; null != ( i= s[ a] ) ; ++ a) r[ a] && Ft ( i, r[ a] ) ; if ( t) if ( n) for ( s= s|| Ot ( e) , r= r|| Ot ( o) , a= 0 ; null != ( i= s[ a] ) ; a++ ) _t ( i, r[ a] ) ; else _t ( e, o) ; return r= Ot ( o, "script" ) , r. length> 0 && Mt ( r, ! u&& Ot ( e, "script" ) ) , r= s= i= null , o} , buildFragment: function ( e, t, n, r) { var i, o, a, s, u, l, c, p= e. length, f= dt ( t) , d= [ ] , h= 0 ; for ( ; p> h; h++ ) if ( o= e[ h] , o|| 0 === o) if ( "object" === b. type ( o) ) b. merge ( d, o. nodeType? [ o] : o) ; else if ( wt. test ( o) ) { s= s|| f. appendChild ( t. createElement ( "div" ) ) , u= ( bt. exec ( o) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) , c= At[ u] || At. _default, s. innerHTML= c[ 1 ] + o. replace ( vt, "<$1>$2>" ) + c[ 2 ] , i= c[ 0 ] ; while ( i-- ) s= s. lastChild; if ( ! b. support. leadingWhitespace&& yt. test ( o) && d. push ( t. createTextNode ( yt. exec ( o) [ 0 ] ) ) , ! b. support. tbody) { o= "table" !== u|| xt. test ( o) ? ""!== c[ 1 ] || xt. test ( o) ? 0 : s: s. firstChild, i= o&& o. childNodes. length; while ( i-- ) b. nodeName ( l= o. childNodes[ i] , "tbody" ) && ! l. childNodes. length&& o. removeChild ( l)
} b. merge ( d, s. childNodes) , s. textContent= "" ; while ( s. firstChild) s. removeChild ( s. firstChild) ; s= f. lastChild} else d. push ( t. createTextNode ( o) ) ; s&& f. removeChild ( s) , b. support. appendChecked|| b. grep ( Ot ( d, "input" ) , Bt) , h= 0 ; while ( o= d[ h++ ] ) if ( ( ! r|| - 1 === b. inArray ( o, r) ) && ( a= b. contains ( o. ownerDocument, o) , s= Ot ( f. appendChild ( o) , "script" ) , a&& Mt ( s) , n) ) { i= 0 ; while ( o= s[ i++ ] ) kt. test ( o. type|| "" ) && n. push ( o) } return s= null , f} , cleanData: function ( e, t) { var n, r, o, a, s= 0 , u= b. expando, l= b. cache, p= b. support. deleteExpando, f= b. event. special; for ( ; null != ( n= e[ s] ) ; s++ ) if ( ( t|| b. acceptData ( n) ) && ( o= n[ u] , a= o&& l[ o] ) ) { if ( a. events) for ( r in a. events) f[ r] ? b. event. remove ( n, r) : b. removeEvent ( n, r, a. handle) ; l[ o] && ( delete l[ o] , p? delete n[ u] : typeof n. removeAttribute!== i? n. removeAttribute ( u) : n[ u] = null , c. push ( o) ) } } } ) ; var Pt, Rt, Wt, $t= /alpha\([^)]*\)/i , It= /opacity\s*=\s*([^)]*)/ , zt= /^(top|right|bottom|left)$/ , Xt= /^(none|table(?!-c[ea]).+)/ , Ut= /^margin/ , Vt= RegExp ( "^(" + x+ ")(.*)$" , "i" ) , Yt= RegExp ( "^(" + x+ ")(?!px)[a-z%]+$" , "i" ) , Jt= RegExp ( "^([+-])=(" + x+ ")" , "i" ) , Gt= { BODY : "block" } , Qt= { position: "absolute" , visibility: "hidden" , display: "block" } , Kt= { letterSpacing: 0 , fontWeight: 400 } , Zt= [ "Top" , "Right" , "Bottom" , "Left" ] , en= [ "Webkit" , "O" , "Moz" , "ms" ] ; function tn ( e, t) { if ( t in e) return t; var n= t. charAt ( 0 ) . toUpperCase ( ) + t. slice ( 1 ) , r= t, i= en. length; while ( i-- ) if ( t= en[ i] + n, t in e) return t; return r} function nn ( e, t) { return e= t|| e, "none" === b. css ( e, "display" ) || ! b. contains ( e. ownerDocument, e) } function rn ( e, t) { var n, r, i, o= [ ] , a= 0 , s= e. length; for ( ; s> a; a++ ) r= e[ a] , r. style&& ( o[ a] = b. _data ( r, "olddisplay" ) , n= r. style. display, t? ( o[ a] || "none" !== n|| ( r. style. display= "" ) , "" === r. style. display&& nn ( r) && ( o[ a] = b. _data ( r, "olddisplay" , un ( r. nodeName) ) ) ) : o[ a] || ( i= nn ( r) , ( n&& "none" !== n|| ! i) && b. _data ( r, "olddisplay" , i? n: b. css ( r, "display" ) ) ) ) ; for ( a= 0 ; s> a; a++ ) r= e[ a] , r. style&& ( t&& "none" !== r. style. display&& "" !== r. style. display|| ( r. style. display= t? o[ a] || "" : "none" ) ) ; return e} b. fn. extend ( { css: function ( e, n) { return b. access ( this , function ( e, n, r) { var i, o, a= { } , s= 0 ; if ( b. isArray ( n) ) { for ( o= Rt ( e) , i= n. length; i> s; s++ ) a[ n[ s] ] = b. css ( e, n[ s] , ! 1 , o) ; return a} return r!== t? b. style ( e, n, r) : b. css ( e, n) } , e, n, arguments. length> 1 ) } , show: function ( ) { return rn ( this , ! 0 ) } , hide: function ( ) { return rn ( this ) } , toggle: function ( e) { var t= "boolean" == typeof e; return this . each ( function ( ) { ( t? e: nn ( this ) ) ? b ( this ) . show ( ) : b ( this ) . hide ( ) } ) } } ) , b. extend ( { cssHooks: { opacity: { get : function ( e, t) { if ( t) { var n= Wt ( e, "opacity" ) ; return "" === n? "1" : n} } } } , cssNumber: { columnCount: ! 0 , fillOpacity: ! 0 , fontWeight: ! 0 , lineHeight: ! 0 , opacity: ! 0 , orphans: ! 0 , widows: ! 0 , zIndex: ! 0 , zoom: ! 0 } , cssProps: { "float" : b. support. cssFloat? "cssFloat" : "styleFloat" } , style: function ( e, n, r, i) { if ( e&& 3 !== e. nodeType&& 8 !== e. nodeType&& e. style) { var o, a, s, u= b. camelCase ( n) , l= e. style; if ( n= b. cssProps[ u] || ( b. cssProps[ u] = tn ( l, u) ) , s= b. cssHooks[ n] || b. cssHooks[ u] , r=== t) return s&& "get" in s&& ( o= s. get ( e, ! 1 , i) ) !== t? o: l[ n] ; if ( a= typeof r, "string" === a&& ( o= Jt. exec ( r) ) && ( r= ( o[ 1 ] + 1 ) * o[ 2 ] + parseFloat ( b. css ( e, n) ) , a= "number" ) , ! ( null == r|| "number" === a&& isNaN ( r) || ( "number" !== a|| b. cssNumber[ u] || ( r+= "px" ) , b. support. clearCloneStyle|| "" !== r|| 0 !== n. indexOf ( "background" ) || ( l[ n] = "inherit" ) , s&& "set" in s&& ( r= s. set ( e, r, i) ) === t) ) ) try { l[ n] = r} catch ( c) { } } } , css: function ( e, n, r, i) { var o, a, s, u= b. camelCase ( n) ; return n= b. cssProps[ u] || ( b. cssProps[ u] = tn ( e. style, u) ) , s= b. cssHooks[ n] || b. cssHooks[ u] , s&& "get" in s&& ( a= s. get ( e, ! 0 , r) ) , a=== t&& ( a= Wt ( e, n, i) ) , "normal" === a&& n in Kt&& ( a= Kt[ n] ) , "" === r|| r? ( o= parseFloat ( a) , r=== ! 0 || b. isNumeric ( o) ? o|| 0 : a) : a} , swap: function ( e, t, n, r) { var i, o, a= { } ; for ( o in t) a[ o] = e. style[ o] , e. style[ o] = t[ o] ; i= n. apply ( e, r|| [ ] ) ; for ( o in t) e. style[ o] = a[ o] ; return i} } ) , e. getComputedStyle? ( Rt = function ( t) { return e. getComputedStyle ( t, null ) } , Wt = function ( e, n, r) { var i, o, a, s= r|| Rt ( e) , u= s? s. getPropertyValue ( n) || s[ n] : t, l= e. style; return s&& ( "" !== u|| b. contains ( e. ownerDocument, e) || ( u= b. style ( e, n) ) , Yt. test ( u) && Ut. test ( n) && ( i= l. width, o= l. minWidth, a= l. maxWidth, l. minWidth= l. maxWidth= l. width= u, u= s. width, l. width= i, l. minWidth= o, l. maxWidth= a) ) , u} ) : o. documentElement. currentStyle&& ( Rt = function ( e) { return e. currentStyle} , Wt = function ( e, n, r) { var i, o, a, s= r|| Rt ( e) , u= s? s[ n] : t, l= e. style; return null == u&& l&& l[ n] && ( u= l[ n] ) , Yt. test ( u) && ! zt. test ( n) && ( i= l. left, o= e. runtimeStyle, a= o&& o. left, a&& ( o. left= e. currentStyle. left) , l. left= "fontSize" === n? "1em" : u, u= l. pixelLeft+ "px" , l. left= i, a&& ( o. left= a) ) , "" === u? "auto" : u} ) ; function on ( e, t, n) { var r= Vt. exec ( t) ; return r? Math. max ( 0 , r[ 1 ] - ( n|| 0 ) ) + ( r[ 2 ] || "px" ) : t} function an ( e, t, n, r, i) { var o= n=== ( r? "border" : "content" ) ? 4 : "width" === t? 1 : 0 , a= 0 ; for ( ; 4 > o; o+= 2 ) "margin" === n&& ( a+= b. css ( e, n+ Zt[ o] , ! 0 , i) ) , r? ( "content" === n&& ( a-= b. css ( e, "padding" + Zt[ o] , ! 0 , i) ) , "margin" !== n&& ( a-= b. css ( e, "border" + Zt[ o] + "Width" , ! 0 , i) ) ) : ( a+= b. css ( e, "padding" + Zt[ o] , ! 0 , i) , "padding" !== n&& ( a+= b. css ( e, "border" + Zt[ o] + "Width" , ! 0 , i) ) ) ; return a} function sn ( e, t, n) { var r= ! 0 , i= "width" === t? e. offsetWidth: e. offsetHeight, o= Rt ( e) , a= b. support. boxSizing&& "border-box" === b. css ( e, "boxSizing" , ! 1 , o) ; if ( 0 >= i|| null == i) { if ( i= Wt ( e, t, o) , ( 0 > i|| null == i) && ( i= e. style[ t] ) , Yt. test ( i) ) return i; r= a&& ( b. support. boxSizingReliable|| i=== e. style[ t] ) , i= parseFloat ( i) || 0 } return i+ an ( e, t, n|| ( a? "border" : "content" ) , r, o) + "px" } function un ( e) { var t= o, n= Gt[ e] ; return n|| ( n= ln ( e, t) , "none" !== n&& n|| ( Pt= ( Pt|| b ( "" ) . css ( "cssText" , "display:block !important" ) ) . appendTo ( t. documentElement) , t= ( Pt[ 0 ] . contentWindow|| Pt[ 0 ] . contentDocument) . document, t. write ( "" ) , t. close ( ) , n= ln ( e, t) , Pt. detach ( ) ) , Gt[ e] = n) , n} function ln ( e, t) { var n= b ( t. createElement ( e) ) . appendTo ( t. body) , r= b. css ( n[ 0 ] , "display" ) ; return n. remove ( ) , r} b. each ( [ "height" , "width" ] , function ( e, n) { b. cssHooks[ n] = { get : function ( e, r, i) { return r? 0 === e. offsetWidth&& Xt. test ( b. css ( e, "display" ) ) ? b. swap ( e, Qt, function ( ) { return sn ( e, n, i) } ) : sn ( e, n, i) : t} , set : function ( e, t, r) { var i= r&& Rt ( e) ; return on ( e, t, r? an ( e, n, r, b. support. boxSizing&& "border-box" === b. css ( e, "boxSizing" , ! 1 , i) , i) : 0 ) } } } ) , b. support. opacity|| ( b. cssHooks. opacity= { get : function ( e, t) { return It. test ( ( t&& e. currentStyle? e. currentStyle. filter: e. style. filter) || "" ) ? .01 * parseFloat ( RegExp. $1 ) + "" : t? "1" : "" } , set : function ( e, t) { var n= e. style, r= e. currentStyle, i= b. isNumeric ( t) ? "alpha(opacity=" + 100 * t+ ")" : "" , o= r&& r. filter|| n. filter|| "" ; n. zoom= 1 , ( t>= 1 || "" === t) && "" === b. trim ( o. replace ( $t, "" ) ) && n. removeAttribute&& ( n. removeAttribute ( "filter" ) , "" === t|| r&& ! r. filter) || ( n. filter= $t. test ( o) ? o. replace ( $t, i) : o+ " " + i) } } ) , b ( function ( ) { b. support. reliableMarginRight|| ( b. cssHooks. marginRight= { get : function ( e, n) { return n? b. swap ( e, { display: "inline-block" } , Wt, [ e, "marginRight" ] ) : t} } ) , ! b. support. pixelPosition&& b. fn. position&& b. each ( [ "top" , "left" ] , function ( e, n) { b. cssHooks[ n] = { get : function ( e, r) { return r? ( r= Wt ( e, n) , Yt. test ( r) ? b ( e) . position ( ) [ n] + "px" : r) : t} } } ) } ) , b. expr&& b. expr. filters&& ( b. expr. filters. hidden = function ( e) { return 0 >= e. offsetWidth&& 0 >= e. offsetHeight|| ! b. support. reliableHiddenOffsets&& "none" === ( e. style&& e. style. display|| b. css ( e, "display" ) ) } , b. expr. filters. visible = function ( e) { return ! b. expr. filters. hidden ( e) } ) , b. each ( { margin: "" , padding: "" , border: "Width" } , function ( e, t) { b. cssHooks[ e+ t] = { expand: function ( n) { var r= 0 , i= { } , o= "string" == typeof n? n. split ( " " ) : [ n] ; for ( ; 4 > r; r++ ) i[ e+ Zt[ r] + t] = o[ r] || o[ r- 2 ] || o[ 0 ] ; return i} } , Ut. test ( e) || ( b. cssHooks[ e+ t] . set = on) } ) ; var cn= /%20/g , pn= /\[\]$/ , fn= /\r?\n/g , dn= /^(?:submit|button|image|reset|file)$/i , hn= /^(?:input|select|textarea|keygen)/i ; b. fn. extend ( { serialize: function ( ) { return b. param ( this . serializeArray ( ) ) } , serializeArray: function ( ) { return this . map ( function ( ) { var e= b. prop ( this , "elements" ) ; return e? b. makeArray ( e) : this } ) . filter ( function ( ) { var e= this . type; return this . name&& ! b ( this ) . is ( ":disabled" ) && hn. test ( this . nodeName) && ! dn. test ( e) && ( this . checked|| ! Nt. test ( e) ) } ) . map ( function ( e, t) { var n= b ( this ) . val ( ) ; return null == n? null : b. isArray ( n) ? b. map ( n, function ( e) { return { name: t. name, value: e. replace ( fn, "\r\n" ) } } ) : { name: t. name, value: n. replace ( fn, "\r\n" ) } } ) . get ( ) } } ) , b. param = function ( e, n) { var r, i= [ ] , o = function ( e, t) { t= b. isFunction ( t) ? t ( ) : null == t? "" : t, i[ i. length] = encodeURIComponent ( e) + "=" + encodeURIComponent ( t) } ; if ( n=== t&& ( n= b. ajaxSettings&& b. ajaxSettings. traditional) , b. isArray ( e) || e. jquery&& ! b. isPlainObject ( e) ) b. each ( e, function ( ) { o ( this . name, this . value)<
你可能感兴趣的:(配置文件)
环境准备系列——使家里的工作站在公网上也可以通过ssh进行访问
music&movie
工具 ssh 运维
一、基础配置:启用SSH服务与端口开放安装SSH服务•Ubuntu/Debian系统:sudoaptupdate&&sudoaptinstallopenssh-server•CentOS系统:sudoyuminstallopenssh-server•启动服务:sudosystemctlstartsshd&&sudosystemctlenablesshd修改默认端口(推荐)•编辑配置文件:sudov
dubbo服务META-INF.dubbo文件夹作用
zhglhy
dubbo java apache
META-INF.dubbo文件夹是ApacheDubbo框架中的一个重要目录,通常用于存放Dubbo的SPI(ServiceProviderInterface)扩展配置文件。Dubbo是一个高性能的JavaRPC框架,支持分布式服务治理,而SPI机制是Dubbo实现可扩展性的核心设计之一。1.SPI机制简介SPI是Java提供的一种服务发现机制,允许框架在运行时动态加载实现类。Dubbo对其进行
android音频概念解析
yyc_audio
android 音视频
音频硬件接口(我们可以理解为ASOC的声卡)官方代码里叫audiohardwareinterface也称为module,定义在services/audiopolicy/config/audio_policy_configuration.xml:分别有primary,a2dp,usb,r_submix(用于音频数据回环);配置文件中的每一个module都被描述为HwModule,保存在mHwModu
springboot自定义封装线程池工具类
k&p
Java spring boot java spring
1.首先配置线程池的配置文件,在此处定义线程池的核心线程数等核心参数:/***核心线程数=cpu核心数+1*/privatefinalintcore=Runtime.getRuntime().availableProcessors()+1;@AutowiredprivateThreadPoolPropertiesthreadPoolProperties;@Bean(name="threadPool
python arm64_PyTorch-aarch64
人类0663号
python arm64
PyTorch源码编译步骤:1、源码编译环境:操作系统:debian9.12交换空间:1GPython版本:3.5硬件:CPU:RK3399(aarch64)内存:4G2、下载依赖包:下载pytorch及其依赖包时,默认从github上下载,如果网络不好、容易断开时,可在gitee上找到对应包克隆链接,然后修改对应配置文件,进行下载。需要细致耐心。3、编译主要参数:设置最大作业数:exportMA
MyBatis学习:基本使用
Landy_Jay
mybatis 学习 java
学习之前:MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。2.1向SQL语句传参2.1.1mybatis日志输出配置MyBatis配置文件详解:官方文档:mybatis–MyBatis3|简介标签:用于选择MyBatis配置环境的标签,如开发、测试和生产环境需要不同的配置。更换环境,只需更开标
某个业务采用【规则引擎】重构大幅降低耗时
sunnyboy_4
java 规则引擎
需求分析需求:由于业务的计算规则比较复杂,经过几年的规则迭代。后续维护维护起来比较麻烦,所以花了2周时间进行重构。本次采用Liteflow规则引擎进行重构,好处在于规则配置在xml配置文件中可以清晰的梳理业务的流向,在每个规则节点只负责各自的业务。将复杂的业务对象化,方便后续的维护与更新。项目已经经过生产数据验证。2、业务流程图,这是根据规则引擎编写的,方便后续定位3、这个方案的优点可以动态组合模
QT中Xml及查看调试中容器的内部数据
苜柠
QT qt
voidChuankouUI::writeFile(){QFilefile(filePath);if(!file.open(QIODevice::WriteOnly)){emiterrData("打开配置文件失败");return;}QDomDocumentdoc;//添加根节点QDomElementroot=doc.createElement("config");doc.appendChild(
LDAP从入门到实战:环境部署与配置指南(下)
磐基Stack专业服务团队
LDAP LDAP
#作者:朱雷接上篇:《LDAP从入门到实战:环境部署与配置指南(上)》链接:link文章目录2.5.添加账号2.6.停止服务2.7.使用TLS证书2.7.1.TLS证书2.7.2.TLS配置2.7.3.服务器配置2.8.使用安全连接的反向代理2.5.添加账号添加管理员账号配置文件[root@localhostopenldap]#catadmin.ldifdn:dc=zltest,dc=comobj
Java File 类与文件操作
代码先锋者
java开发 java 开发语言
一、引言在Java编程中,文件操作是一项非常常见且重要的任务。无论是读取配置文件、保存用户数据,还是进行日志记录,都离不开对文件的操作。Java提供了File类来表示文件和目录的抽象路径名,通过该类可以对文件和目录进行创建、删除、重命名等操作。同时,Java还提供了一系列的输入输出流类,用于对文件内容进行读写操作。本文将详细介绍Java中File类的使用以及相关的文件操作案例。二、File类概述2
linux防火墙多个 多个ip配置,网络中多网卡和多ip中的高可用
没伞请奔跑i
linux防火墙多个 多个ip配置
一、虚拟网卡实现一个网卡多个地址1、单个网卡实现多个ipv4地址,只需要在该网卡的配置文件的目录新增网卡配置文件即可。进入网卡"eth0"的目录下2、新增网卡配置文件"ifcfg-eth0:0"和"ifcfg-eth0:1"3、关掉NetworkManager服务4、重启网卡,让系统重读配置网卡配置文件5、使用ifconfig命令查看在线的网卡ip地址二、多网卡bond,mode11、首先在虚拟机
虚拟机添加多块网卡,重启时,ip绑定错误如何解决
千航@abc
kvm虚拟化 服务器 网络 linux 虚拟化 kvm
在网卡的配置文件添加这一条NAME="ens9"DEVICE=ens9ONBOOT=yesNETBOOT=yesIPV6INIT=yesBOOTPROTO=noneTYPE=EthernetIPADDR=172.17.10.254PREFIX=24DEVICE这个参数的用途是指定配置文件对应的网络设备,每个网络接口都有自己的名称,像ens33、ens36、eth0、ens9等等,而DEVICE=e
ubuntu中的配置文件,bashrc、profile
阿斯顿的风格
ubuntu 服务器 linux bash python
系统级配置文件/etc/profile作用:为所有Bourne兼容shell(包括Bash、sh等)提供登录时的全局环境设置。加载时机:当用户登录(例如在控制台登录或图形界面登录时启动登录shell)时,都会首先加载此文件。常见配置内容:设置全局环境变量(如PATH、LANG等)调用/etc/profile.d/目录下的脚本#/etc/profile示例片段#设置全局PATHPATH="/usr/
ESP32学习 -从STM32工程架构进阶到ESP32架构
古希腊掌握嵌入式的神
学习 stm32 架构 esp32
ESP32与STM32项目文件结构对比解析以下是对你提供的ESP32项目文件结构的详细解释,并与STM32(以STM32CubeIDE为例)的常见结构进行对比,帮助你理解两者的差异:1.ESP32项目文件解析文件/目录作用STM32对应或差异settingsIDE(如VSCode或Eclipse)的用户配置文件,存储个性化设置。STM32CubeIDE中类似配置存储在.settings目录或IDE
编写脚本在Linux下启动、停止SpringBoot工程
流烟默
系统运维 Linux全面入门 linux spring boot shell
【1】启动命令nohupjava-jaryour-application.jar>/dev/null2>&1&>/dev/null2>&1:这条命令将标准输出和标准错误都重定向到/dev/null,这意味着它们不会输出到控制台或任何文件。这样做是因为我们希望所有日志都由Logback处理并写入到配置文件中指定的日志文件里。然而,如果你想要保留控制台输出(例如,对于调试目的),你可以省略这部分重定向
神州数码基础命令
小淮@
网络 运维 数据库
组网小知识1.设备连接:不同种类型设备的连接用:直通线同种或是跨层设备的连接用:交叉线(路由与PC)2.注意设备的叠放次序3.IP地址要先理顺,以便加快速度。先完成基本配置,全网连通后,继续其它。交换机还原配置文件:特权模式下:setdefault/write/后重启reload被加入密码后,起动过程,ctrl+b/deletestartup-config/后重启reload操作系统nos.img
Java 项目 IntelliJ IDEA 多环境配置详解
我真的不想做程序员
java java intellij-idea 开发语言 ide 后端
目录一、使用MavenProfiles实现多环境配置1.在`pom.xml`中配置Profiles2.创建多环境配置文件3.配置文件内容示例`application.properties``application-dev.properties``application-test.properties``application-prod.properties`4.在代码中获取配置5.激活MavenP
Java运行jar包需要读取arguments配置文件
好人静
Java java 配置argument
在项目中有时候要把一些代码打包成jar,只要运行jar就可以执行。同时为了方便设置代码执行的一些外部参数,通常会配置arguments。1、Intelidea配置arguments在菜单栏找到Run->EditConfiguration弹出的窗口中选择配置文件所在的路径即可。2、Eclipse配置arguments在main函数,右击,在弹出的菜单中选择EditConfiguration,在弹出的
一键掌控海量文件!Shell的find命令终极指南 + 高阶组合技
芯有所享
java 前端 android 经验分享
你是否经历过这些崩溃瞬间?想清理3个月前的日志却无从下手要在10万张图片里找出某个版本突然发现服务器被临时文件塞爆…今天介绍的Linux三剑客之find命令,就是你的超级救星!不仅能精准定位文件,结合其他命令更能玩出自动化运维的花样!一、Find基础三连击(新手必看)按图索骥-名称搜索查找当前目录所有.txt文件(精准匹配)find.-name“*.txt”忽略大小写找配置文件(模糊匹配)find
重建容器操作:对基于 docker-compose-project.yaml 配置文件的容器进行重启和更新操作
momopeng~
docker 容器 运维
先停止当前运行的容器,然后删除这些停止的容器,最后重新创建并启动容器。需重建容器但配置不变的具体步骤:(1)修改调整docker-compose-project.yaml文件后保存(2)查看配置文件的容器运行状态:快速查看由docker-compose-project.yaml文件定义的所有容器的运行状态docker-compose-fdocker-compose-project.yamlps(3
云原生大佬重生,记忆逐步复苏(九:systemd进程)
子恒2005
云原生大佬重生 记忆逐步复苏 云原生 linux
目录1:什么是systemd守护进程2:Systemd参与的系统的初始化是怎么样的?3:systemd的单元类型4:具体的单元配置文件解析1:什么是systemd守护进程systemd是现代Linux系统中的一个系统和服务管理器,用于初始化系统、管理系统服务、维护系统状态、控制系统资源,并提供一系列其他功能来简化系统管理。systemd的主要作用和功能-系统初始化:systemd是Linux系统的
【JavaEE】Mybatis 简单启动
鸽鸽程序猿
JavaEE java-ee mybatis 数据库
目录一、Mybatis简介二、MyBatis⼊⻔2.1创建项目2.2准备数据2.3配置文件2.4实体类2.5执行结果一、Mybatis简介Mybatis是一个操作数据库驱动的持久层框架,用来简化JDBC操作的,SpringBoot集成了这个框架。MyBatis本是Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了googlecode,并且改名为MyBatis。2013
SpringBoot配置文件加载优先级
不修×蝙蝠
spring boot 后端 java 优先级
在SpringBoot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低:命令行参数:命令行参数具有最高的优先级。SpringBoot项目被启动时,可以通过命令行传递参数,这些参数将覆盖其他所有配置源中的相同属性。java-jaryour-application.jar--spring.data
如何快速判断nodejs该项目需要哪个版本的node环境
yuanpan
node.js
在接手一个Node.js项目后,判断该项目需要哪个Node.js版本是非常重要的。以下是一些常见的方法来确定项目所需的Node.js版本:1.检查package.json文件package.json是Node.js项目的核心配置文件,通常会包含项目所需的Node.js版本信息。a.engines字段在package.json中,engines字段用于指定项目所需的Node.js版本。例如:json
Debian简单配置FTP
晚安说了吗
debian linux 服务器
Debian简单配置FTP服务器1、安装ftpaptinstallftpvsftpd2、创建ftp共享路径mkdir/ftp#创建路径chmod777/ftp#给予权限3、修改配置文件vi/etc/vsftpd.conf:listen=YES#监听ipv4端口listen_ipv6=NO#关闭监听ipv6anonymous_enable=NO#禁止匿名登录write_enable=YES#允许上传
docker部署nginx+php7.3流程及遇到的坑
匿名用户(192.168.*.*)
linux docker nginx php centos
拉取镜像dockerpullnginx:alpinedockerpullphp:7.3-fpm-alpine创建dockernetwork网络dockernetworkcreatemy_web创建docker容器并拷贝配置文件目录到主机//这一步是为了挂载卷创建主机的挂载目录mkdir~/nginx/{logs,conf.d}创建nginx容器dockerrun-d--rm--namenginxn
python 读取配置文件
Pure Ven
python 编程语言 python
Python读取配置文件并打印文件信息配置文件field_len.conf内容为:[ddl_max_len]NUMBER_MAX_LEN=10VARCHAR2_MAX_LEN=1024[dml_max_len]NUMBER_MAX_LEN=10VARCHAR2_MAX_LEN=1024BLOB_MAX_LEN=500MFLOAT_MAX_LEN=P20S8DATE=12TIMESTAMP(6)=1
python读取配置参数的多种方式
WYRM_GOLD
python
使用多个配置文件:根据不同的环境(如开发、测试、生产)使用不同的配置文件。使用环境变量:利用操作系统的环境变量来获取参数。使用命令行参数:根据传入的命令行参数选择配置。使用JSON或YAML文件:配置文件可以使用JSON或YAML格式,支持多种环境的变量。方法1、使用多个配置文件假设有两个配置文件:config_dev.ini和config_prod.ini。config_dev.ini:[DEF
鸿蒙Next-获取系统权限-获取麦克风权限
试水年华
鸿蒙Next开发 Ark-TS语言 Ark-TS语言 鸿蒙 华为
1.需要先在配置文件中,声明应用需要请求的权限,且设置需要使用的场景+使用原因"requestPermissions":[//申请的网络权限{"name":"ohos.permission.INTERNET"},{//申请麦克风权限"name":"ohos.permission.MICROPHONE","usedScene":{},//申请麦克风权限的原因"reason":"$string:rea
Spring Boot 启动参数终极解析:如何优雅地控制你的应用?
jiajia651304
spring boot 后端 java
SpringBoot启动参数终极解析:如何优雅地控制你的应用?在使用SpringBoot开发应用时,我们通常需要根据不同的环境(开发、测试、生产)或特定需求调整启动参数,例如:修改默认端口指定不同的配置文件控制JVM内存大小传递自定义参数那么,SpringBoot提供了哪些方式来配置这些启动参数?今天我们就来详细解析SpringBoot启动参数的各种用法,并附带代码示例,让你可以灵活掌控应用的启动
深入浅出Java Annotation(元注解和自定义注解)
Josh_Persistence
Java Annotation 元注解 自定义注解
一、基本概述
Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或
mysql优化特定类型的查询
annan211
java 工作 mysql
本节所介绍的查询优化的技巧都是和特定版本相关的,所以对于未来mysql的版本未必适用。
1 优化count查询
对于count这个函数的网上的大部分资料都是错误的或者是理解的都是一知半解的。在做优化之前我们先来看看
真正的count()函数的作用到底是什么。
count()是一个特殊的函数,有两种非常不同的作用,他可以统计某个列值的数量,也可以统计行数。
在统
MAC下安装多版本JDK和切换几种方式
棋子chessman
jdk
环境:
MAC AIR,OS X 10.10,64位
历史:
过去 Mac 上的 Java 都是由 Apple 自己提供,只支持到 Java 6,并且OS X 10.7 开始系统并不自带(而是可选安装)(原自带的是1.6)。
后来 Apple 加入 OpenJDK 继续支持 Java 6,而 Java 7 将由 Oracle 负责提供。
在终端中输入jav
javaScript (1)
Array_06
JavaScript java 浏览器
JavaScript
1、运算符
运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=)、算术运算符(+,-,*,/,++,--,%)、比较运算符(>,<,<=,>=,==,===,!=,!==)、逻辑运算符(||,&&,!)、条件运算(?:)、位
国内顶级代码分享网站
袁潇含
java jdk oracle .net PHP
现在国内很多开源网站感觉都是为了利益而做的
当然利益是肯定的,否则谁也不会免费的去做网站
&
Elasticsearch、MongoDB和Hadoop比较
随意而生
mongodb hadoop 搜索引擎
IT界在过去几年中出现了一个有趣的现象。很多新的技术出现并立即拥抱了“大数据”。稍微老一点的技术也会将大数据添进自己的特性,避免落大部队太远,我们看到了不同技术之间的边际的模糊化。假如你有诸如Elasticsearch或者Solr这样的搜索引擎,它们存储着JSON文档,MongoDB存着JSON文档,或者一堆JSON文档存放在一个Hadoop集群的HDFS中。你可以使用这三种配
mac os 系统科研软件总结
张亚雄
mac os
1.1 Microsoft Office for Mac 2011
大客户版,自行搜索。
1.2 Latex (MacTex):
系统环境:https://tug.org/mactex/
&nb
Maven实战(四)生命周期
AdyZhang
maven
1. 三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site。 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。 以clean生命周期为例,它包含的阶段有pre-clean, clean 和 post
Linux下Jenkins迁移
aijuans
Jenkins
1. 将Jenkins程序目录copy过去 源程序在/export/data/tomcatRoot/ofctest-jenkins.jd.com下面 tar -cvzf jenkins.tar.gz ofctest-jenkins.jd.com &
request.getInputStream()只能获取一次的问题
ayaoxinchao
request Inputstream
问题:在使用HTTP协议实现应用间接口通信时,服务端读取客户端请求过来的数据,会用到request.getInputStream(),第一次读取的时候可以读取到数据,但是接下来的读取操作都读取不到数据
原因: 1. 一个InputStream对象在被读取完成后,将无法被再次读取,始终返回-1; 2. InputStream并没有实现reset方法(可以重
数据库SQL优化大总结之 百万级数据库优化方案
BigBird2012
SQL优化
网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。
这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到、纠正以及补充。
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where
jsonObject的使用
bijian1013
java json
在项目中难免会用java处理json格式的数据,因此封装了一个JSONUtil工具类。
JSONUtil.java
package com.bijian.json.study;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
[Zookeeper学习笔记之六]Zookeeper源代码分析之Zookeeper.WatchRegistration
bit1129
zookeeper
Zookeeper类是Zookeeper提供给用户访问Zookeeper service的主要API,它包含了如下几个内部类
首先分析它的内部类,从WatchRegistration开始,为指定的znode path注册一个Watcher,
/**
* Register a watcher for a particular p
【Scala十三】Scala核心七:部分应用函数
bit1129
scala
何为部分应用函数?
Partially applied function: A function that’s used in an expression and that misses some of its arguments.For instance, if function f has type Int => Int => Int, then f and f(1) are p
Tomcat Error listenerStart 终极大法
ronin47
tomcat
Tomcat报的错太含糊了,什么错都没报出来,只提示了Error listenerStart。为了调试,我们要获得更详细的日志。可以在WEB-INF/classes目录下新建一个文件叫logging.properties,内容如下
Java代码
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHa
不用加减符号实现加减法
BrokenDreams
实现
今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。
分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。
 
读《研磨设计模式》-代码笔记-状态模式-State
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/*
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况
把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化
如果在
CUDA程序block和thread超出硬件允许值时的异常
cherishLC
CUDA
调用CUDA的核函数时指定block 和 thread大小,该大小可以是dim3类型的(三维数组),只用一维时可以是usigned int型的。
以下程序验证了当block或thread大小超出硬件允许值时会产生异常!!!GPU根本不会执行运算!!!
所以验证结果的正确性很重要!!!
在VS中创建CUDA项目会有一个模板,里面有更详细的状态验证。
以下程序在K5000GPU上跑的。
诡异的超长时间GC问题定位
chenchao051
jvm cms GC hbase swap
HBase的GC策略采用PawNew+CMS, 这是大众化的配置,ParNew经常会出现停顿时间特别长的情况,有时候甚至长到令人发指的地步,例如请看如下日志:
2012-10-17T05:54:54.293+0800: 739594.224: [GC 739606.508: [ParNew: 996800K->110720K(996800K), 178.8826900 secs] 3700
maven环境快速搭建
daizj
安装 mavne 环境配置
一 下载maven
安装maven之前,要先安装jdk及配置JAVA_HOME环境变量。这个安装和配置java环境不用多说。
maven下载地址:http://maven.apache.org/download.html,目前最新的是这个apache-maven-3.2.5-bin.zip,然后解压在任意位置,最好地址中不要带中文字符,这个做java 的都知道,地址中出现中文会出现很多
PHP网站安全,避免PHP网站受到攻击的方法
dcj3sjt126com
PHP
对于PHP网站安全主要存在这样几种攻击方式:1、命令注入(Command Injection)2、eval注入(Eval Injection)3、客户端脚本攻击(Script Insertion)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgerie
yii中给CGridView设置默认的排序根据时间倒序的方法
dcj3sjt126com
GridView
public function searchWithRelated() {
$criteria = new CDbCriteria;
$criteria->together = true; //without th
Java集合对象和数组对象的转换
dyy_gusi
java集合
在开发中,我们经常需要将集合对象(List,Set)转换为数组对象,或者将数组对象转换为集合对象。Java提供了相互转换的工具,但是我们使用的时候需要注意,不能乱用滥用。
1、数组对象转换为集合对象
最暴力的方式是new一个集合对象,然后遍历数组,依次将数组中的元素放入到新的集合中,但是这样做显然过
nginx同一主机部署多个应用
geeksun
nginx
近日有一需求,需要在一台主机上用nginx部署2个php应用,分别是wordpress和wiki,探索了半天,终于部署好了,下面把过程记录下来。
1. 在nginx下创建vhosts目录,用以放置vhost文件。
mkdir vhosts
2. 修改nginx.conf的配置, 在http节点增加下面内容设置,用来包含vhosts里的配置文件
#
ubuntu添加admin权限的用户账号
hongtoushizi
ubuntu useradd
ubuntu创建账号的方式通常用到两种:useradd 和adduser . 本人尝试了useradd方法,步骤如下:
1:useradd
使用useradd时,如果后面不加任何参数的话,如:sudo useradd sysadm 创建出来的用户将是默认的三无用户:无home directory ,无密码,无系统shell。
顾应该如下操作:
第五章 常用Lua开发库2-JSON库、编码转换、字符串处理
jinnianshilongnian
nginx lua
JSON库
在进行数据传输时JSON格式目前应用广泛,因此从Lua对象与JSON字符串之间相互转换是一个非常常见的功能;目前Lua也有几个JSON库,本人用过cjson、dkjson。其中cjson的语法严格(比如unicode \u0020\u7eaf),要求符合规范否则会解析失败(如\u002),而dkjson相对宽松,当然也可以通过修改cjson的源码来完成
Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解
yaerfeng1989
timer quartz 定时器
原创整理不易,转载请注明出处:Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解
代码下载地址:http://www.zuidaima.com/share/1772648445103104.htm
有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。
1.Java Timer定时
首先继承jav
Linux下df与du两个命令的差别?
pda158
linux
一、df显示文件系统的使用情况,与du比較,就是更全盘化。 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型。 举比例如以下: [root@localhost ~]# df -T Filesystem Type &n
[转]SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
ctfzh
VO android sqlite 反射 Cursor
在写DAO层时,觉得从Cursor里一个一个的取出字段值再装到VO(值对象)里太麻烦了,就写了一个工具类,用到了反射,可以把查询记录的值装到对应的VO里,也可以生成该VO的List。
使用时需要注意:
考虑到Android的性能问题,VO没有使用Setter和Getter,而是直接用public的属性。
表中的字段名需要和VO的属性名一样,要是不一样就得在查询的SQL中
该学习笔记用到的Employee表
vipbooks
oracle sql 工作
这是我在学习Oracle是用到的Employee表,在该笔记中用到的就是这张表,大家可以用它来学习和练习。
drop table Employee;
-- 员工信息表
create table Employee(
-- 员工编号
EmpNo number(3) primary key,
-- 姓