金山打字
【金山打字】这是一个练习打字的游戏,当游戏开始后,界面从顶部不断落下内容为随机字母的方块,当按下相对应的按键时,就会清除对应方块。游戏难度会随着落下的速度加快而提高。玩家每次成功清除字母方块,都会获得一定的分数。
运行效果:
HTML
源码-demo.html
:
doctype html >
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< title> 金山打字游戏 title>
< script src = " jquery.js" > script>
< script src = " js.js" > script>
< script>
$ ( function ( ) {
new typegame ( ) ;
} ) ;
script>
head>
< style>
body {
margin : 0;
background : url ( game.jpg) no-repeat;
background-size : cover;
font-family : "幼圆" ;
background : #E8F0F0;
overflow : hidden;
}
.stop1 {
width : 130px;
height : 50px;
background : red;
position : absolute;
bottom : 0;
left : 30px;
text-align : center;
cursor : pointer;
background : url ( "stop.png" ) ;
background-size : 130px 50px;
line-height : 50px;
color : #392112;
font-size : 16px;
z-index : 6666666;
font-weight : bold;
}
.screen1 {
width : 100%;
height : 100%;
background : url ( img/dz2.jpg) no-repeat;
background-size : cover;
margin : 0 auto;
padding : 0;
position : relative;
overflow : hidden;
}
.xiabian {
width : 100%;
height : 40px;
background : #000;
position : absolute;
bottom : 0;
right : 0;
opacity : 0.8;
filter : alpha ( opacity=80) ;
}
@keyframes cg{
0% {
transform : translateY ( -50%) ;
}
100% {
transform : translateY ( 0%) ;
}
}
@keyframes cgfont{
0% {
transform : scale ( 0, 0) ;
}
100% {
transform : scale ( 1, 1) ;
}
}
body {
background : #84B526;
}
style>
< body>
< div class = " screen1" >
div>
< div class = " stop1" > 暂停游戏 div>
< div class = " xiabian" > div>
body>
html>
js
源码
(1)js.js
:
function typegame ( ) {
this . objletter= { } ;
this . creatGame ( ) ;
this . num= 3 ;
this . check ( ) ;
this . creatScore ( ) ;
this . score= 0 ;
this . stage= 1 ;
this . startGame ( ) ;
this . stopGame ( ) ;
}
typegame. prototype= {
creatGame : function ( ) {
var height= $ ( window) . height ( ) ;
var width1= $ ( window) . width ( ) ;
$ ( ".screen1" ) . css ( {
width : width1,
height : $ ( window) . height ( ) - 10 ,
overflow : "hidden"
} ) ;
} ,
creatletter : function ( ) {
var that= this ;
do {
var randomnum= Math. floor ( Math. random ( ) * 26 + 65 ) ;
var randomletter= String. fromCharCode ( randomnum) ;
} while ( this . objletter[ randomletter] ) ;
var top1= - Math. round ( Math. random ( ) * 100 ) ;
do {
var left1= Math. round ( Math. random ( ) * 740 ) ;
} while ( this . check ( left1) ) ;
var time= new Date ( ) . getTime ( ) ;
var ele= $ ( "+time+ ">
" ) . css ( {
width : "100px" , height : "100px" ,
background : "url(img/" + randomletter+ ".png) center no-repeat" , backgroundSize : "contain"
, lineHeight : "60px" , fontSize : "30px" , color : "#fff" ,
textAlign : "center" , position : "absolute" , left : left1, top : top1
} ) . appendTo ( ".screen1" ) . animate ( { top : $ ( window) . height ( ) } , 6000 , "linear" , function ( ) {
if ( $ ( "div[data-time=" + time+ "]" ) [ 0 ] ) {
that. num = 3 ;
that. score= 0 ;
that. stage= 1 ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. createFail ( ) ;
}
} ) ;
this . objletter[ randomletter] = { start : left1- 60 , end : left1+ 60 , keycode : randomnum, el : ele}
} ,
palyGame : function ( ) {
this . keydown ( ) ;
for ( var i= 0 ; i< this . num; ++ i) {
this . creatletter ( ) ;
}
} ,
check : function ( left ) {
var flag= false ;
$. each ( this . objletter, function ( index, value ) {
if ( left> value. start&& left< value. end) {
flag= true ;
}
} ) ;
return flag;
} ,
keydown : function ( ) {
var that= this ;
$ ( document) . keydown ( function ( e ) {
var code= e. keyCode;
$. each ( that. objletter, function ( index, value ) {
if ( code== value. keycode) {
value. el. remove ( ) ;
delete that. objletter[ index] ;
that. creatletter ( ) ;
that. score++ ;
$ ( ".score" ) . html ( that. score) ;
if ( that. score>= that. stage* 10 ) {
that. score= 0 ;
$ ( ".score" ) . html ( 0 ) ;
that. num++ ;
that. stage++ ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. creatStage ( ) ;
}
}
} ) ;
} ) ;
} ,
creatScore : function ( ) {
$ ( "0
" ) . css ( {
background : "url(fs.png) no-repeat" ,
backgroundSize : "150px 180px" ,
width : 150 , height : 180 ,
position : "absolute" , right : 25 , bottom : 60 , color : "#522E1A" ,
fontSize : "60px" , lineHeight : "140px" , textAlign : "center"
} ) . appendTo ( "body" ) ;
} ,
creatStage : function ( ) {
var that= this ;
$ ( "
" ) . css ( {
position : "absolute" , top : "-50%" , bottom : 0 , right : 0 , left : 0 ,
background : "url(cg.png)" ,
width : 520 , height : 400 , backgroundSize : "contain no-repeat" ,
margin : "auto" ,
borderRadius : "5%" ,
animation : "cg 2s linear"
} ) . appendTo ( "body" ) ;
var btn= $ ( "
" ) . css ( {
position : "absolute" , top : "235px" , right : 0 , left : "65px" , margin : "auto" ,
background : "url(xy.png)" ,
zIndex : 9999 ,
fontFamily : "幼圆" ,
fontSize : "22px" ,
width : 100 , height : 40 , margin : "0 auto" ,
marginTop : "200" ,
color : "#fff" ,
lineHeight : "40px" ,
backgroundSize : "240px 300px" ,
cursor : "pointer"
} ) . appendTo ( ".stage" ) . click ( function ( ) {
that. palyGame ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
} ) ;
} ,
createFail : function ( ) {
var that= this ;
if ( this . failbord) {
this . failbord. remove ( ) ;
}
var btn= $ ( "
" ) . css ( {
width : 160 , height : 35 , textAlign : "center" , lineHeight : "30px" ,
margin : "0 auto" , cursor : "pointer" ,
position : "absolute" , right : 0 , left : 0 , margin : "auto" , bottom : "70px"
} ) . click ( function ( ) {
$ ( ".scor" ) . html ( 0 ) ;
that. palyGame ( ) ;
$ ( this ) . parent ( ) . remove ( ) ;
} ) ;
this . failbord= $ ( "
" ) . css ( {
position : "absolute" , top : "-50%" , bottom : 0 , right : 0 , left : 0 ,
background : "url(sp1.png)" ,
width : 500 , height : 350 , backgroundSize : "400px 340px" ,
margin : "auto" ,
borderRadius : "5%" ,
backgroundSize : "contain no-repeat" ,
animation : "cg 2s linear"
} ) . appendTo ( "body" ) . append ( btn) ;
} ,
startGame : function ( ) {
var that= this ;
$ ( "开始游戏
" ) . css ( {
width : 130 , height : 50 , textAlign : "center" , lineHeight : "50px" ,
margin : "0 auto" , cursor : "pointer" ,
background : "url(stop.png) no-repeat" ,
backgroundSize : "130px 50px" ,
color : "#392112" ,
position : "absolute" ,
left : "175px" , bottom : 0 ,
fontWeight : "bold" ,
marginTop : "55px"
} ) . appendTo ( "body" ) . click ( function ( ) {
that. palyGame ( ) ;
} )
} ,
stopGame : function ( ) {
var that= this ;
$ ( ".stop1" ) . click ( function ( ) {
$. each ( that. objletter, function ( index, value ) {
value. el. stop ( ) ;
} ) ;
if ( $ ( ".stop1" ) . html ( ) == "暂停游戏" ) {
$ ( ".stop1" ) . html ( "继续游戏" ) ;
} else if ( $ ( ".stop1" ) . html ( ) == "继续游戏" ) {
$ ( ".stop1" ) . html ( "暂停游戏" ) ;
$. each ( that. objletter, function ( index, value ) {
value. el. animate ( { top : $ ( window) . height ( ) } , 6000 , "linear" , function ( ) {
that. num= 3 ;
that. stage= 1 ;
that. score= 0 ;
$. each ( that. objletter, function ( index, value ) {
value. el. remove ( ) ;
} ) ;
that. objletter= { } ;
that. createFail ( ) ;
} )
} )
}
} )
}
} ;
(2)juery.js
! function ( a, b ) { "object" == typeof module&& "object" == typeof module. exports? module. exports= a. document? b ( a, ! 0 ) : function ( a ) { if ( ! a. document) throw new Error ( "jQuery requires a window with a document" ) ; return b ( a) } : b ( a) } ( "undefined" != typeof window? window: this , function ( a, b ) { var c= [ ] , d= a. document, e= c. slice, f= c. concat, g= c. push, h= c. indexOf, i= { } , j= i. toString, k= i. hasOwnProperty, l= { } , m= "1.12.2" , n = function ( a, b ) { return new n. fn. init ( a, b) } , o= / ^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$ / g , p= / ^-ms- / , q= / -([\da-z]) / gi , r = function ( a, b ) { return b. toUpperCase ( ) } ; n. fn= n. prototype= { jquery : m, constructor : n, selector : "" , length : 0 , toArray : function ( ) { return e . call ( this ) } , get : function ( a ) { return null != a? 0 > a? this [ a+ this . length] : this [ a] : e . call ( this ) } , pushStack : function ( a ) { var b= n. merge ( this . constructor ( ) , a) ; return b. prevObject= this , b. context= this . context, b} , each : function ( a ) { return n. each ( this , a) } , map : function ( a ) { return this . pushStack ( n. map ( this , function ( b, c ) { return a . call ( b, c, b) } ) ) } , slice : function ( ) { return this . pushStack ( e . apply ( this , arguments) ) } , first : function ( ) { return this . eq ( 0 ) } , last : function ( ) { return this . eq ( - 1 ) } , eq : function ( a ) { var b= this . length, c= + a+ ( 0 > a? b: 0 ) ; return this . pushStack ( c>= 0 && b> c? [ this [ c] ] : [ ] ) } , end : function ( ) { return this . prevObject|| this . constructor ( ) } , push : g, sort : c. sort, splice : c. splice} , n. extend= n. fn. extend = function ( ) { var a, b, c, d, e, f, g= arguments[ 0 ] || { } , h= 1 , i= arguments. length, j= ! 1 ; for ( "boolean" == typeof g&& ( j= g, g= arguments[ h] || { } , h++ ) , "object" == typeof g|| n. isFunction ( g) || ( g= { } ) , h=== i&& ( g= this , h-- ) ; i> h; h++ ) if ( null != ( e= arguments[ h] ) ) for ( d in e) a= g[ d] , c= e[ d] , g!== c&& ( j&& c&& ( n. isPlainObject ( c) || ( b= n. isArray ( c) ) ) ? ( b? ( b= ! 1 , f= a&& n. isArray ( a) ? a: [ ] ) : f= a&& n. isPlainObject ( a) ? a: { } , g[ d] = n. extend ( j, f, c) ) : void 0 !== c&& ( g[ d] = c) ) ; return g} , n. extend ( { expando : "jQuery" + ( m+ Math. random ( ) ) . replace ( / \D / g , "" ) , isReady : ! 0 , error : function ( a ) { throw new Error ( a) } , noop : function ( ) { } , isFunction : function ( a ) { return "function" === n. type ( a) } , isArray : Array. isArray|| function ( a ) { return "array" === n. type ( a) } , isWindow : function ( a ) { return null != a&& a== a. window} , isNumeric : function ( a ) { var b= a&& a. toString ( ) ; return ! n. isArray ( a) && b- parseFloat ( b) + 1 >= 0 } , isEmptyObject : function ( a ) { var b; for ( b in a) return ! 1 ; return ! 0 } , isPlainObject : function ( a ) { var b; if ( ! a|| "object" !== n. type ( a) || a. nodeType|| n. isWindow ( a) ) return ! 1 ; try { if ( a. constructor&& ! k . call ( a, "constructor" ) && ! k . call ( a. constructor. prototype, "isPrototypeOf" ) ) return ! 1 } catch ( c) { return ! 1 } if ( ! l. ownFirst) for ( b in a) return k . call ( a, b) ; for ( b in a) ; return void 0 === b|| k . call ( a, b) } , type : function ( a ) { return null == a? a+ "" : "object" == typeof a|| "function" == typeof a? i[ j . call ( a) ] || "object" : typeof a} , globalEval : function ( b ) { b&& n. trim ( b) && ( a. execScript|| function ( b ) { a. eval . call ( a, b) } ) ( b) } , camelCase : function ( a ) { return a. replace ( p, "ms-" ) . replace ( q, r) } , nodeName : function ( a, b ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b. toLowerCase ( ) } , each : function ( a, b ) { var c, d= 0 ; if ( s ( a) ) { for ( c= a. length; c> d; d++ ) if ( b . call ( a[ d] , d, a[ d] ) === ! 1 ) break } else for ( d in a) if ( b . call ( a[ d] , d, a[ d] ) === ! 1 ) break ; return a} , trim : function ( a ) { return null == a? "" : ( a+ "" ) . replace ( o, "" ) } , makeArray : function ( a, b ) { var c= b|| [ ] ; return null != a&& ( s ( Object ( a) ) ? n. merge ( c, "string" == typeof a? [ a] : a) : g . call ( c, a) ) , c} , inArray : function ( a, b, c ) { var d; if ( b) { if ( h) return h . call ( b, a, c) ; for ( d= b. length, c= c? 0 > c? Math. max ( 0 , d+ c) : c: 0 ; d> c; c++ ) if ( c in b&& b[ c] === a) return c} return - 1 } , merge : function ( a, b ) { var c= + b. length, d= 0 , e= a. length; while ( c> d) a[ e++ ] = b[ d++ ] ; if ( c!== c) while ( void 0 !== b[ d] ) a[ e++ ] = b[ d++ ] ; return a. length= e, a} , grep : function ( a, b, c ) { for ( var d, e= [ ] , f= 0 , g= a. length, h= ! c; g> f; f++ ) d= ! b ( a[ f] , f) , d!== h&& e. push ( a[ f] ) ; return e} , map : function ( a, b, c ) { var d, e, g= 0 , h= [ ] ; if ( s ( a) ) for ( d= a. length; d> g; g++ ) e= b ( a[ g] , g, c) , null != e&& h. push ( e) ; else for ( g in a) e= b ( a[ g] , g, c) , null != e&& h. push ( e) ; return f . apply ( [ ] , h) } , guid : 1 , proxy : function ( a, b ) { var c, d, f; return "string" == typeof b&& ( f= a[ b] , b= a, a= f) , n. isFunction ( a) ? ( c= e . call ( arguments, 2 ) , d = function ( ) { return a . apply ( b|| this , c. concat ( e . call ( arguments) ) ) } , d. guid= a. guid= a. guid|| n. guid++ , d) : void 0 } , now : function ( ) { return + new Date } , support : l} ) , "function" == typeof Symbol&& ( n. fn[ Symbol. iterator] = c[ Symbol. iterator] ) , n. each ( "Boolean Number String Function Array Date RegExp Object Error Symbol" . split ( " " ) , function ( a, b ) { i[ "[object " + b+ "]" ] = b. toLowerCase ( ) } ) ; function s ( a ) { var b= ! ! a&& "length" in a&& a. length, c= n. type ( a) ; return "function" === c|| n. isWindow ( a) ? ! 1 : "array" === c|| 0 === b|| "number" == typeof b&& b> 0 && b- 1 in a} var t = function ( a ) { var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u= "sizzle" + 1 * new Date , v= a. document, w= 0 , x= 0 , y= ga ( ) , z= ga ( ) , A = ga ( ) , B = function ( a, b ) { return a=== b&& ( l= ! 0 ) , 0 } , C = 1 << 31 , D = { } . hasOwnProperty, E = [ ] , F = E . pop, G = E . push, H = E . push, I = E . slice, J = function ( a, b ) { for ( var c= 0 , d= a. length; d> c; c++ ) if ( a[ c] === b) return c; return - 1 } , K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped" , L = "[\\x20\\t\\r\\n\\f]" , M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" , N = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + M + "))|)" + L + "*\\]" , O = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + N + ")*)|.*)\\)|)" , P = new RegExp ( L + "+" , "g" ) , Q = new RegExp ( "^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$" , "g" ) , R = new RegExp ( "^" + L + "*," + L + "*" ) , S = new RegExp ( "^" + L + "*([>+~]|" + L + ")" + L + "*" ) , T = new RegExp ( "=" + L + "*([^\\]'\"]*?)" + L + "*\\]" , "g" ) , U = new RegExp ( O ) , V = new RegExp ( "^" + M + "$" ) , W = { ID : new RegExp ( "^#(" + M + ")" ) , CLASS : new RegExp ( "^\\.(" + M + ")" ) , TAG : new RegExp ( "^(" + M + "|[*])" ) , ATTR : new RegExp ( "^" + N ) , PSEUDO : new RegExp ( "^" + O ) , CHILD : new RegExp ( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)" , "i" ) , bool : new RegExp ( "^(?:" + K + ")$" , "i" ) , needsContext : new RegExp ( "^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)" , "i" ) } , X = / ^(?:input|select|textarea|button)$ / i , Y = / ^h\d$ / i , Z = / ^[^{]+\{\s*\[native \w / , $= / ^(?:#([\w-]+)|(\w+)|\.([\w-]+))$ / , _= / [+~] / , aa= / '|\\ / g , ba= new RegExp ( "\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)" , "ig" ) , ca = function ( a, b, c ) { var d= "0x" + b- 65536 ; return d!== d|| c? b: 0 > d? String. fromCharCode ( d+ 65536 ) : String. fromCharCode ( d>> 10 | 55296 , 1023 & d| 56320 ) } , da = function ( ) { m ( ) } ; try { H . apply ( E = I . call ( v. childNodes) , v. childNodes) , E [ v. childNodes. length] . nodeType} catch ( ea) { H = { apply : E . length? function ( a, b ) { G . apply ( a, I . call ( b) ) } : function ( a, b ) { var c= a. length, d= 0 ; while ( a[ c++ ] = b[ d++ ] ) ; a. length= c- 1 } } } function fa ( a, b, d, e ) { var f, h, j, k, l, o, r, s, w= b&& b. ownerDocument, x= b? b. nodeType: 9 ; if ( d= d|| [ ] , "string" != typeof a|| ! a|| 1 !== x&& 9 !== x&& 11 !== x) return d; if ( ! e&& ( ( b? b. ownerDocument|| b: v) !== n&& m ( b) , b= b|| n, p) ) { if ( 11 !== x&& ( o= $. exec ( a) ) ) if ( f= o[ 1 ] ) { if ( 9 === x) { if ( ! ( j= b. getElementById ( f) ) ) return d; if ( j. id=== f) return d. push ( j) , d} else if ( w&& ( j= w. getElementById ( f) ) && t ( b, j) && j. id=== f) return d. push ( j) , d} else { if ( o[ 2 ] ) return H . apply ( d, b. getElementsByTagName ( a) ) , d; if ( ( f= o[ 3 ] ) && c. getElementsByClassName&& b. getElementsByClassName) return H . apply ( d, b. getElementsByClassName ( f) ) , d} if ( c. qsa&& ! A [ a+ " " ] && ( ! q|| ! q. test ( a) ) ) { if ( 1 !== x) w= b, s= a; else if ( "object" !== b. nodeName. toLowerCase ( ) ) { ( k= b. getAttribute ( "id" ) ) ? k= k. replace ( aa, "\\$&" ) : b. setAttribute ( "id" , k= u) , r= g ( a) , h= r. length, l= V . test ( k) ? "#" + k: "[id='" + k+ "']" ; while ( h-- ) r[ h] = l+ " " + qa ( r[ h] ) ; s= r. join ( "," ) , w= _. test ( a) && oa ( b. parentNode) || b} if ( s) try { return H . apply ( d, w. querySelectorAll ( s) ) , d} catch ( y) { } finally { k=== u&& b. removeAttribute ( "id" ) } } } return i ( a. replace ( Q , "$1" ) , b, d, e) } function ga ( ) { var a= [ ] ; function b ( c, e ) { return a. push ( c+ " " ) > d. cacheLength&& delete b[ a. shift ( ) ] , b[ c+ " " ] = e} return b} function ha ( a ) { return a[ u] = ! 0 , a} function ia ( a ) { var b= n. createElement ( "div" ) ; try { return ! ! a ( b) } catch ( c) { return ! 1 } finally { b. parentNode&& b. parentNode. removeChild ( b) , b= null } } function ja ( a, b ) { var c= a. split ( "|" ) , e= c. length; while ( e-- ) d. attrHandle[ c[ e] ] = b} function ka ( a, b ) { var c= b&& a, d= c&& 1 === a. nodeType&& 1 === b. nodeType&& ( ~ b. sourceIndex|| C ) - ( ~ a. sourceIndex|| C ) ; if ( d) return d; if ( c) while ( c= c. nextSibling) if ( c=== b) return - 1 ; return a? 1 : - 1 } function la ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return "input" === c&& b. type=== a} } function ma ( a ) { return function ( b ) { var c= b. nodeName. toLowerCase ( ) ; return ( "input" === c|| "button" === c) && b. type=== a} } function na ( a ) { return ha ( function ( b ) { return b= + b, ha ( function ( c, d ) { var e, f= a ( [ ] , c. length, b) , g= f. length; while ( g-- ) c[ e= f[ g] ] && ( c[ e] = ! ( d[ e] = c[ e] ) ) } ) } ) } function oa ( a ) { return a&& "undefined" != typeof a. getElementsByTagName&& a} c= fa. support= { } , f= fa. isXML = function ( a ) { var b= a&& ( a. ownerDocument|| a) . documentElement; return b? "HTML" !== b. nodeName: ! 1 } , m= fa. setDocument = function ( a ) { var b, e, g= a? a. ownerDocument|| a: v; return g!== n&& 9 === g. nodeType&& g. documentElement? ( n= g, o= n. documentElement, p= ! f ( n) , ( e= n. defaultView) && e. top!== e&& ( e. addEventListener? e. addEventListener ( "unload" , da, ! 1 ) : e. attachEvent&& e. attachEvent ( "onunload" , da) ) , c. attributes= ia ( function ( a ) { return a. className= "i" , ! a. getAttribute ( "className" ) } ) , c. getElementsByTagName= ia ( function ( a ) { return a. appendChild ( n. createComment ( "" ) ) , ! a. getElementsByTagName ( "*" ) . length} ) , c. getElementsByClassName= Z . test ( n. getElementsByClassName) , c. getById= ia ( function ( a ) { return o. appendChild ( a) . id= u, ! n. getElementsByName|| ! n. getElementsByName ( u) . length} ) , c. getById? ( d. find. ID = function ( a, b ) { if ( "undefined" != typeof b. getElementById&& p) { var c= b. getElementById ( a) ; return c? [ c] : [ ] } } , d. filter. ID = function ( a ) { var b= a. replace ( ba, ca) ; return function ( a ) { return a. getAttribute ( "id" ) === b} } ) : ( delete d. find. ID , d. filter. ID = function ( a ) { var b= a. replace ( ba, ca) ; return function ( a ) { var c= "undefined" != typeof a. getAttributeNode&& a. getAttributeNode ( "id" ) ; return c&& c. value=== b} } ) , d. find. TAG = c. getElementsByTagName? function ( a, b ) { return "undefined" != typeof b. getElementsByTagName? b. getElementsByTagName ( a) : c. qsa? b. querySelectorAll ( a) : void 0 } : function ( a, b ) { var c, d= [ ] , e= 0 , f= b. getElementsByTagName ( a) ; if ( "*" === a) { while ( c= f[ e++ ] ) 1 === c. nodeType&& d. push ( c) ; return d} return f} , d. find. CLASS = c. getElementsByClassName&& function ( a, b ) { return "undefined" != typeof b. getElementsByClassName&& p? b. getElementsByClassName ( a) : void 0 } , r= [ ] , q= [ ] , ( c. qsa= Z . test ( n. querySelectorAll) ) && ( ia ( function ( a ) { o. appendChild ( a) . innerHTML= " " , a. querySelectorAll ( "[msallowcapture^='']" ) . length&& q. push ( "[*^$]=" + L + "*(?:''|\"\")" ) , a. querySelectorAll ( "[selected]" ) . length|| q. push ( "\\[" + L + "*(?:value|" + K + ")" ) , a. querySelectorAll ( "[id~=" + u+ "-]" ) . length|| q. push ( "~=" ) , a. querySelectorAll ( ":checked" ) . length|| q. push ( ":checked" ) , a. querySelectorAll ( "a#" + u+ "+*" ) . length|| q. push ( ".#.+[+~]" ) } ) , ia ( function ( a ) { var b= n. createElement ( "input" ) ; b. setAttribute ( "type" , "hidden" ) , a. appendChild ( b) . setAttribute ( "name" , "D" ) , a. querySelectorAll ( "[name=d]" ) . length&& q. push ( "name" + L + "*[*^$|!~]?=" ) , a. querySelectorAll ( ":enabled" ) . length|| q. push ( ":enabled" , ":disabled" ) , a. querySelectorAll ( "*,:x" ) , q. push ( ",.*:" ) } ) ) , ( c. matchesSelector= Z . test ( s= o. matches|| o. webkitMatchesSelector|| o. mozMatchesSelector|| o. oMatchesSelector|| o. msMatchesSelector) ) && ia ( function ( a ) { c. disconnectedMatch= s . call ( a, "div" ) , s . call ( a, "[s!='']:x" ) , r. push ( "!=" , O ) } ) , q= q. length&& new RegExp ( q. join ( "|" ) ) , r= r. length&& new RegExp ( r. join ( "|" ) ) , b= Z . test ( o. compareDocumentPosition) , t= b|| Z . test ( o. contains) ? function ( a, b ) { var c= 9 === a. nodeType? a. documentElement: a, d= b&& b. parentNode; return a=== d|| ! ( ! d|| 1 !== d. nodeType|| ! ( c. contains? c. contains ( d) : a. compareDocumentPosition&& 16 & a. compareDocumentPosition ( d) ) ) } : function ( a, b ) { if ( b) while ( b= b. parentNode) if ( b=== a) return ! 0 ; return ! 1 } , B = b? function ( a, b ) { if ( a=== b) return l= ! 0 , 0 ; var d= ! a. compareDocumentPosition- ! b. compareDocumentPosition; return d? d: ( d= ( a. ownerDocument|| a) === ( b. ownerDocument|| b) ? a. compareDocumentPosition ( b) : 1 , 1 & d|| ! c. sortDetached&& b. compareDocumentPosition ( a) === d? a=== n|| a. ownerDocument=== v&& t ( v, a) ? - 1 : b=== n|| b. ownerDocument=== v&& t ( v, b) ? 1 : k? J ( k, a) - J ( k, b) : 0 : 4 & d? - 1 : 1 ) } : function ( a, b ) { if ( a=== b) return l= ! 0 , 0 ; var c, d= 0 , e= a. parentNode, f= b. parentNode, g= [ a] , h= [ b] ; if ( ! e|| ! f) return a=== n? - 1 : b=== n? 1 : e? - 1 : f? 1 : k? J ( k, a) - J ( k, b) : 0 ; if ( e=== f) return ka ( a, b) ; c= a; while ( c= c. parentNode) g. unshift ( c) ; c= b; while ( c= c. parentNode) h. unshift ( c) ; while ( g[ d] === h[ d] ) d++ ; return d? ka ( g[ d] , h[ d] ) : g[ d] === v? - 1 : h[ d] === v? 1 : 0 } , n) : n} , fa. matches = function ( a, b ) { return fa ( a, null , null , b) } , fa. matchesSelector = function ( a, b ) { if ( ( a. ownerDocument|| a) !== n&& m ( a) , b= b. replace ( T , "='$1']" ) , c. matchesSelector&& p&& ! A [ b+ " " ] && ( ! r|| ! r. test ( b) ) && ( ! q|| ! q. test ( b) ) ) try { var d= s . call ( a, b) ; if ( d|| c. disconnectedMatch|| a. document&& 11 !== a. document. nodeType) return d} catch ( e) { } return fa ( b, n, null , [ a] ) . length> 0 } , fa. contains = function ( a, b ) { return ( a. ownerDocument|| a) !== n&& m ( a) , t ( a, b) } , fa. attr = function ( a, b ) { ( a. ownerDocument|| a) !== n&& m ( a) ; var e= d. attrHandle[ b. toLowerCase ( ) ] , f= e&& D . call ( d. attrHandle, b. toLowerCase ( ) ) ? e ( a, b, ! p) : void 0 ; return void 0 !== f? f: c. attributes|| ! p? a. getAttribute ( b) : ( f= a. getAttributeNode ( b) ) && f. specified? f. value: null } , fa. error = function ( a ) { throw new Error ( "Syntax error, unrecognized expression: " + a) } , fa. uniqueSort = function ( a ) { var b, d= [ ] , e= 0 , f= 0 ; if ( l= ! c. detectDuplicates, k= ! c. sortStable&& a. slice ( 0 ) , a. sort ( B ) , l) { while ( b= a[ f++ ] ) b=== a[ f] && ( e= d. push ( f) ) ; while ( e-- ) a. splice ( d[ e] , 1 ) } return k= null , a} , e= fa. getText = function ( a ) { var b, c= "" , d= 0 , f= a. nodeType; if ( f) { if ( 1 === f|| 9 === f|| 11 === f) { if ( "string" == typeof a. textContent) return a. textContent; for ( a= a. firstChild; a; a= a. nextSibling) c+= e ( a) } else if ( 3 === f|| 4 === f) return a. nodeValue} else while ( b= a[ d++ ] ) c+= e ( b) ; return c} , d= fa. selectors= { cacheLength : 50 , createPseudo : ha, match : W , attrHandle : { } , find : { } , relative : { ">" : { dir : "parentNode" , first : ! 0 } , " " : { dir : "parentNode" } , "+" : { dir : "previousSibling" , first : ! 0 } , "~" : { dir : "previousSibling" } } , preFilter : { ATTR : function ( a ) { return a[ 1 ] = a[ 1 ] . replace ( ba, ca) , a[ 3 ] = ( a[ 3 ] || a[ 4 ] || a[ 5 ] || "" ) . replace ( ba, ca) , "~=" === a[ 2 ] && ( a[ 3 ] = " " + a[ 3 ] + " " ) , a. slice ( 0 , 4 ) } , CHILD : function ( a ) { return a[ 1 ] = a[ 1 ] . toLowerCase ( ) , "nth" === a[ 1 ] . slice ( 0 , 3 ) ? ( a[ 3 ] || fa. error ( a[ 0 ] ) , a[ 4 ] = + ( a[ 4 ] ? a[ 5 ] + ( a[ 6 ] || 1 ) : 2 * ( "even" === a[ 3 ] || "odd" === a[ 3 ] ) ) , a[ 5 ] = + ( a[ 7 ] + a[ 8 ] || "odd" === a[ 3 ] ) ) : a[ 3 ] && fa. error ( a[ 0 ] ) , a} , PSEUDO : function ( a ) { var b, c= ! a[ 6 ] && a[ 2 ] ; return W . CHILD . test ( a[ 0 ] ) ? null : ( a[ 3 ] ? a[ 2 ] = a[ 4 ] || a[ 5 ] || "" : c&& U . test ( c) && ( b= g ( c, ! 0 ) ) && ( b= c. indexOf ( ")" , c. length- b) - c. length) && ( a[ 0 ] = a[ 0 ] . slice ( 0 , b) , a[ 2 ] = c. slice ( 0 , b) ) , a. slice ( 0 , 3 ) ) } } , filter : { TAG : function ( a ) { var b= a. replace ( ba, ca) . toLowerCase ( ) ; return "*" === a? function ( ) { return ! 0 } : function ( a ) { return a. nodeName&& a. nodeName. toLowerCase ( ) === b} } , CLASS : function ( a ) { var b= y[ a+ " " ] ; return b|| ( b= new RegExp ( "(^|" + L + ")" + a+ "(" + L + "|$)" ) ) && y ( a, function ( a ) { return b. test ( "string" == typeof a. className&& a. className|| "undefined" != typeof a. getAttribute&& a. getAttribute ( "class" ) || "" ) } ) } , ATTR : function ( a, b, c ) { return function ( d ) { var e= fa. attr ( d, a) ; return null == e? "!=" === b: b? ( e+= "" , "=" === b? e=== c: "!=" === b? e!== c: "^=" === b? c&& 0 === e. indexOf ( c) : "*=" === b? c&& e. indexOf ( c) > - 1 : "$=" === b? c&& e. slice ( - c. length) === c: "~=" === b? ( " " + e. replace ( P , " " ) + " " ) . indexOf ( c) > - 1 : "|=" === b? e=== c|| e. slice ( 0 , c. length+ 1 ) === c+ "-" : ! 1 ) : ! 0 } } , CHILD : function ( a, b, c, d, e ) { var f= "nth" !== a. slice ( 0 , 3 ) , g= "last" !== a. slice ( - 4 ) , h= "of-type" === b; return 1 === d&& 0 === e? function ( a ) { return ! ! a. parentNode} : function ( b, c, i ) { var j, k, l, m, n, o, p= f!== g? "nextSibling" : "previousSibling" , q= b. parentNode, r= h&& b. nodeName. toLowerCase ( ) , s= ! i&& ! h, t= ! 1 ; if ( q) { if ( f) { while ( p) { m= b; while ( m= m[ p] ) if ( h? m. nodeName. toLowerCase ( ) === r: 1 === m. nodeType) return ! 1 ; o= p= "only" === a&& ! o&& "nextSibling" } return ! 0 } if ( o= [ g? q. firstChild: q. lastChild] , g&& s) { m= q, l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , t= n&& j[ 2 ] , m= n&& q. childNodes[ n] ; while ( m= ++ n&& m&& m[ p] || ( t= n= 0 ) || o. pop ( ) ) if ( 1 === m. nodeType&& ++ t&& m=== b) { k[ a] = [ w, n, t] ; break } } else if ( s&& ( m= b, l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , j= k[ a] || [ ] , n= j[ 0 ] === w&& j[ 1 ] , t= n) , t=== ! 1 ) while ( m= ++ n&& m&& m[ p] || ( t= n= 0 ) || o. pop ( ) ) if ( ( h? m. nodeName. toLowerCase ( ) === r: 1 === m. nodeType) && ++ t&& ( s&& ( l= m[ u] || ( m[ u] = { } ) , k= l[ m. uniqueID] || ( l[ m. uniqueID] = { } ) , k[ a] = [ w, t] ) , m=== b) ) break ; return t-= e, t=== d|| t% d=== 0 && t/ d>= 0 } } } , PSEUDO : function ( a, b ) { var c, e= d. pseudos[ a] || d. setFilters[ a. toLowerCase ( ) ] || fa. error ( "unsupported pseudo: " + a) ; return e[ u] ? e ( b) : e. length> 1 ? ( c= [ a, a, "" , b] , d. setFilters. hasOwnProperty ( a. toLowerCase ( ) ) ? ha ( function ( a, c ) { var d, f= e ( a, b) , g= f. length; while ( g-- ) d= J ( a, f[ g] ) , a[ d] = ! ( c[ d] = f[ g] ) } ) : function ( a ) { return e ( a, 0 , c) } ) : e} } , pseudos : { not : ha ( function ( a ) { var b= [ ] , c= [ ] , d= h ( a. replace ( Q , "$1" ) ) ; return d[ u] ? ha ( function ( a, b, c, e ) { var f, g= d ( a, null , e, [ ] ) , h= a. length; while ( h-- ) ( f= g[ h] ) && ( a[ h] = ! ( b[ h] = f) ) } ) : function ( a, e, f ) { return b[ 0 ] = a, d ( b, null , f, c) , b[ 0 ] = null , ! c. pop ( ) } } ) , has : ha ( function ( a ) { return function ( b ) { return fa ( a, b) . length> 0 } } ) , contains : ha ( function ( a ) { return a= a. replace ( ba, ca) , function ( b ) { return ( b. textContent|| b. innerText|| e ( b) ) . indexOf ( a) > - 1 } } ) , lang : ha ( function ( a ) { return V . test ( a|| "" ) || fa. error ( "unsupported lang: " + a) , a= a. replace ( ba, ca) . toLowerCase ( ) , function ( b ) { var c; do if ( c= p? b. lang: b. getAttribute ( "xml:lang" ) || b. getAttribute ( "lang" ) ) return c= c. toLowerCase ( ) , c=== a|| 0 === c. indexOf ( a+ "-" ) ; while ( ( b= b. parentNode) && 1 === b. nodeType) ; return ! 1 } } ) , target : function ( b ) { var c= a. location&& a. location. hash; return c&& c. slice ( 1 ) === b. id} , root : function ( a ) { return a=== o} , focus : function ( a ) { return a=== n. activeElement&& ( ! n. hasFocus|| n. hasFocus ( ) ) && ! ! ( a. type|| a. href|| ~ a. tabIndex) } , enabled : function ( a ) { return a. disabled=== ! 1 } , disabled : function ( a ) { return a. disabled=== ! 0 } , checked : function ( a ) { var b= a. nodeName. toLowerCase ( ) ; return "input" === b&& ! ! a. checked|| "option" === b&& ! ! a. selected} , selected : function ( a ) { return a. parentNode&& a. parentNode. selectedIndex, a. selected=== ! 0 } , empty : function ( a ) { for ( a= a. firstChild; a; a= a. nextSibling) if ( a. nodeType< 6 ) return ! 1 ; return ! 0 } , parent : function ( a ) { return ! d. pseudos. empty ( a) } , header : function ( a ) { return Y . test ( a. nodeName) } , input : function ( a ) { return X . test ( a. nodeName) } , button : function ( a ) { var b= a. nodeName. toLowerCase ( ) ; return "input" === b&& "button" === a. type|| "button" === b} , text : function ( a ) { var b; return "input" === a. nodeName. toLowerCase ( ) && "text" === a. type&& ( null == ( b= a. getAttribute ( "type" ) ) || "text" === b. toLowerCase ( ) ) } , first : na ( function ( ) { return [ 0 ] } ) , last : na ( function ( a, b ) { return [ b- 1 ] } ) , eq : na ( function ( a, b, c ) { return [ 0 > c? c+ b: c] } ) , even : na ( function ( a, b ) { for ( var c= 0 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , odd : na ( function ( a, b ) { for ( var c= 1 ; b> c; c+= 2 ) a. push ( c) ; return a} ) , lt : na ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; -- d>= 0 ; ) a. push ( d) ; return a} ) , gt : na ( function ( a, b, c ) { for ( var d= 0 > c? c+ b: c; ++ d< b; ) a. push ( d) ; return a} ) } } , d. pseudos. nth= d. pseudos. eq; for ( b in { radio : ! 0 , checkbox : ! 0 , file : ! 0 , password : ! 0 , image : ! 0 } ) d. pseudos[ b] = la ( b) ; for ( b in { submit : ! 0 , reset : ! 0 } ) d. pseudos[ b] = ma ( b) ; function pa ( ) { } pa. prototype= d. filters= d. pseudos, d. setFilters= new pa , g= fa. tokenize = function ( a, b ) { var c, e, f, g, h, i, j, k= z[ a+ " " ] ; if ( k) return b? 0 : k. slice ( 0 ) ; h= a, i= [ ] , j= d. preFilter; while ( h) { c&& ! ( e= R . exec ( h) ) || ( e&& ( h= h. slice ( e[ 0 ] . length) || h) , i. push ( f= [ ] ) ) , c= ! 1 , ( e= S . exec ( h) ) && ( c= e. shift ( ) , f. push ( { value : c, type : e[ 0 ] . replace ( Q , " " ) } ) , h= h. slice ( c. length) ) ; for ( g in d. filter) ! ( e= W [ g] . exec ( h) ) || j[ g] && ! ( e= j[ g] ( e) ) || ( c= e. shift ( ) , f. push ( { value : c, type : g, matches : e} ) , h= h. slice ( c. length) ) ; if ( ! c) break } return b? h. length: h? fa. error ( a) : z ( a, i) . slice ( 0 ) } ; function qa ( a ) { for ( var b= 0 , c= a. length, d= "" ; c> b; b++ ) d+= a[ b] . value; return d} function ra ( a, b, c ) { var d= b. dir, e= c&& "parentNode" === d, f= x++ ; return b. first? function ( b, c, f ) { while ( b= b[ d] ) if ( 1 === b. nodeType|| e) return a ( b, c, f) } : function ( b, c, g ) { var h, i, j, k= [ w, f] ; if ( g) { while ( b= b[ d] ) if ( ( 1 === b. nodeType|| e) && a ( b, c, g) ) return ! 0 } else while ( b= b[ d] ) if ( 1 === b. nodeType|| e) { if ( j= b[ u] || ( b[ u] = { } ) , i= j[ b. uniqueID] || ( j[ b. uniqueID] = { } ) , ( h= i[ d] ) && h[ 0 ] === w&& h[ 1 ] === f) return k[ 2 ] = h[ 2 ] ; if ( i[ d] = k, k[ 2 ] = a ( b, c, g) ) return ! 0 } } } function sa ( a ) { return a. length> 1 ? function ( b, c, d ) { var e= a. length; while ( e-- ) if ( ! a[ e] ( b, c, d) ) return ! 1 ; return ! 0 } : a[ 0 ] } function ta ( a, b, c ) { for ( var d= 0 , e= b. length; e> d; d++ ) fa ( a, b[ d] , c) ; return c} function ua ( a, b, c, d, e ) { for ( var f, g= [ ] , h= 0 , i= a. length, j= null != b; i> h; h++ ) ( f= a[ h] ) && ( c&& ! c ( f, d, e) || ( g. push ( f) , j&& b. push ( h) ) ) ; return g} function va ( a, b, c, d, e, f ) { return d&& ! d[ u] && ( d= va ( d) ) , e&& ! e[ u] && ( e= va ( e, f) ) , ha ( function ( f, g, h, i ) { var j, k, l, m= [ ] , n= [ ] , o= g. length, p= f|| ta ( b|| "*" , h. nodeType? [ h] : h, [ ] ) , q= ! a|| ! f&& b? p: ua ( p, m, a, h, i) , r= c? e|| ( f? a: o|| d) ? [ ] : g: q; if ( c&& c ( q, r, h, i) , d) { j= ua ( r, n) , d ( j, [ ] , h, i) , k= j. length; while ( k-- ) ( l= j[ k] ) && ( r[ n[ k] ] = ! ( q[ n[ k] ] = l) ) } if ( f) { if ( e|| a) { if ( e) { j= [ ] , k= r. length; while ( k-- ) ( l= r[ k] ) && j. push ( q[ k] = l) ; e ( null , r= [ ] , j, i) } k= r. length; while ( k-- ) ( l= r[ k] ) && ( j= e? J ( f, l) : m[ k] ) > - 1 && ( f[ j] = ! ( g[ j] = l) ) } } else r= ua ( r=== g? r. splice ( o, r. length) : r) , e? e ( null , g, r, i) : H . apply ( g, r) } ) } function wa ( a ) { for ( var b, c, e, f= a. length, g= d. relative[ a[ 0 ] . type] , h= g|| d. relative[ " " ] , i= g? 1 : 0 , k= ra ( function ( a ) { return a=== b} , h, ! 0 ) , l= ra ( function ( a ) { return J ( b, a) > - 1 } , h, ! 0 ) , m= [ function ( a, c, d ) { var e= ! g&& ( d|| c!== j) || ( ( b= c) . nodeType? k ( a, c, d) : l ( a, c, d) ) ; return b= null , e} ] ; f> i; i++ ) if ( c= d. relative[ a[ i] . type] ) m= [ ra ( sa ( m) , c) ] ; else { if ( c= d. filter[ a[ i] . type] . apply ( null , a[ i] . matches) , c[ u] ) { for ( e= ++ i; f> e; e++ ) if ( d. relative[ a[ e] . type] ) break ; return va ( i> 1 && sa ( m) , i> 1 && qa ( a. slice ( 0 , i- 1 ) . concat ( { value : " " === a[ i- 2 ] . type? "*" : "" } ) ) . replace ( Q , "$1" ) , c, e> i&& wa ( a. slice ( i, e) ) , f> e&& wa ( a= a. slice ( e) ) , f> e&& qa ( a) ) } m. push ( c) } return sa ( m) } function xa ( a, b ) { var c= b. length> 0 , e= a. length> 0 , f = function ( f, g, h, i, k ) { var l, o, q, r= 0 , s= "0" , t= f&& [ ] , u= [ ] , v= j, x= f|| e&& d. find. TAG ( "*" , k) , y= w+= null == v? 1 : Math. random ( ) || .1 , z= x. length; for ( k&& ( j= g=== n|| g|| k) ; s!== z&& null != ( l= x[ s] ) ; s++ ) { if ( e&& l) { o= 0 , g|| l. ownerDocument=== n|| ( m ( l) , h= ! p) ; while ( q= a[ o++ ] ) if ( q ( l, g|| n, h) ) { i. push ( l) ; break } k&& ( w= y) } c&& ( ( l= ! q&& l) && r-- , f&& t. push ( l) ) } if ( r+= s, c&& s!== r) { o= 0 ; while ( q= b[ o++ ] ) q ( t, u, g, h) ; if ( f) { if ( r> 0 ) while ( s-- ) t[ s] || u[ s] || ( u[ s] = F . call ( i) ) ; u= ua ( u) } H . apply ( i, u) , k&& ! f&& u. length> 0 && r+ b. length> 1 && fa. uniqueSort ( i) } return k&& ( w= y, j= v) , t} ; return c? ha ( f) : f} return h= fa. compile = function ( a, b ) { var c, d= [ ] , e= [ ] , f= A [ a+ " " ] ; if ( ! f) { b|| ( b= g ( a) ) , c= b. length; while ( c-- ) f= wa ( b[ c] ) , f[ u] ? d. push ( f) : e. push ( f) ; f= A ( a, xa ( e, d) ) , f. selector= a} return f} , i= fa. select = function ( a, b, e, f ) { var i, j, k, l, m, n= "function" == typeof a&& a, o= ! f&& g ( a= n. selector|| a) ; if ( e= e|| [ ] , 1 === o. length) { if ( j= o[ 0 ] = o[ 0 ] . slice ( 0 ) , j. length> 2 && "ID" === ( k= j[ 0 ] ) . type&& c. getById&& 9 === b. nodeType&& p&& d. relative[ j[ 1 ] . type] ) { if ( b= ( d. find. ID ( k. matches[ 0 ] . replace ( ba, ca) , b) || [ ] ) [ 0 ] , ! b) return e; n&& ( b= b. parentNode) , a= a. slice ( j. shift ( ) . value. length) } i= W . needsContext. test ( a) ? 0 : j. length; while ( i-- ) { if ( k= j[ i] , d. relative[ l= k. type] ) break ; if ( ( m= d. find[ l] ) && ( f= m ( k. matches[ 0 ] . replace ( ba, ca) , _. test ( j[ 0 ] . type) && oa ( b. parentNode) || b) ) ) { if ( j. splice ( i, 1 ) , a= f. length&& qa ( j) , ! a) return H . apply ( e, f) , e; break } } } return ( n|| h ( a, o) ) ( f, b, ! p, e, ! b|| _. test ( a) && oa ( b. parentNode) || b) , e} , c. sortStable= u. split ( "" ) . sort ( B ) . join ( "" ) === u, c. detectDuplicates= ! ! l, m ( ) , c. sortDetached= ia ( function ( a ) { return 1 & a. compareDocumentPosition ( n. createElement ( "div" ) ) } ) , ia ( function ( a ) { return a. innerHTML= " " , "#" === a. firstChild. getAttribute ( "href" ) } ) || ja ( "type|href|height|width" , function ( a, b, c ) { return c? void 0 : a. getAttribute ( b, "type" === b. toLowerCase ( ) ? 1 : 2 ) } ) , c. attributes&& ia ( function ( a ) { return a. innerHTML= " " , a. firstChild. setAttribute ( "value" , "" ) , "" === a. firstChild. getAttribute ( "value" ) } ) || ja ( "value" , function ( a, b, c ) { return c|| "input" !== a. nodeName. toLowerCase ( ) ? void 0 : a. defaultValue} ) , ia ( function ( a ) { return null == a. getAttribute ( "disabled" ) } ) || ja ( K , function ( a, b, c ) { var d; return c? void 0 : a[ b] === ! 0 ? b. toLowerCase ( ) : ( d= a. getAttributeNode ( b) ) && d. specified? d. value: null } ) , fa} ( a) ; n. find= t, n. expr= t. selectors, n. expr[ ":" ] = n. expr. pseudos, n. uniqueSort= n. unique= t. uniqueSort, n. text= t. getText, n. isXMLDoc= t. isXML, n. contains= t. contains; var u = function ( a, b, c ) { var d= [ ] , e= void 0 !== c; while ( ( a= a[ b] ) && 9 !== a. nodeType) if ( 1 === a. nodeType) { if ( e&& n ( a) . is ( c) ) break ; d. push ( a) } return d} , v = function ( a, b ) { for ( var c= [ ] ; a; a= a. nextSibling) 1 === a. nodeType&& a!== b&& c. push ( a) ; return c} , w= n. expr. match. needsContext, x= / ^<([\w-]+)\s*\/?>(?:<\/\1>|)$ / , y= / ^.[^:#\[\.,]*$ / ; function z ( a, b, c ) { if ( n. isFunction ( b) ) return n. grep ( a, function ( a, d ) { return ! ! b . call ( a, d, a) !== c} ) ; if ( b. nodeType) return n. grep ( a, function ( a ) { return a=== b!== c} ) ; if ( "string" == typeof b) { if ( y. test ( b) ) return n. filter ( b, a, c) ; b= n. filter ( b, a) } return n. grep ( a, function ( a ) { return n. inArray ( a, b) > - 1 !== c} ) } n. filter = function ( a, b, c ) { var d= b[ 0 ] ; return c&& ( a= ":not(" + a+ ")" ) , 1 === b. length&& 1 === d. nodeType? n. find. matchesSelector ( d, a) ? [ d] : [ ] : n. find. matches ( a, n. grep ( b, function ( a ) { return 1 === a. nodeType} ) ) } , n. fn. extend ( { find : function ( a ) { var b, c= [ ] , d= this , e= d. length; if ( "string" != typeof a) return this . pushStack ( n ( a) . filter ( function ( ) { for ( b= 0 ; e> b; b++ ) if ( n. contains ( d[ b] , this ) ) return ! 0 } ) ) ; for ( b= 0 ; e> b; b++ ) n. find ( a, d[ b] , c) ; return c= this . pushStack ( e> 1 ? n. unique ( c) : c) , c. selector= this . selector? this . selector+ " " + a: a, c} , filter : function ( a ) { return this . pushStack ( z ( this , a|| [ ] , ! 1 ) ) } , not : function ( a ) { return this . pushStack ( z ( this , a|| [ ] , ! 0 ) ) } , is : function ( a ) { return ! ! z ( this , "string" == typeof a&& w. test ( a) ? n ( a) : a|| [ ] , ! 1 ) . length} } ) ; var A , B = / ^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$ / , C = n. fn. init = function ( a, b, c ) { var e, f; if ( ! a) return this ; if ( c= c|| A , "string" == typeof a) { if ( e= "<" === a. charAt ( 0 ) && ">" === a. charAt ( a. length- 1 ) && a. length>= 3 ? [ null , a, null ] : B . exec ( a) , ! e|| ! e[ 1 ] && b) return ! b|| b. jquery? ( b|| c) . find ( a) : this . constructor ( b) . find ( a) ; if ( e[ 1 ] ) { if ( b= b instanceof n ? b[ 0 ] : b, n. merge ( this , n. parseHTML ( e[ 1 ] , b&& b. nodeType? b. ownerDocument|| b: d, ! 0 ) ) , x. test ( e[ 1 ] ) && n. isPlainObject ( b) ) for ( e in b) n. isFunction ( this [ e] ) ? this [ e] ( b[ e] ) : this . attr ( e, b[ e] ) ; return this } if ( f= d. getElementById ( e[ 2 ] ) , f&& f. parentNode) { if ( f. id!== e[ 2 ] ) return A . find ( a) ; this . length= 1 , this [ 0 ] = f} return this . context= d, this . selector= a, this } return a. nodeType? ( this . context= this [ 0 ] = a, this . length= 1 , this ) : n. isFunction ( a) ? "undefined" != typeof c. ready? c. ready ( a) : a ( n) : ( void 0 !== a. selector&& ( this . selector= a. selector, this . context= a. context) , n. makeArray ( a, this ) ) } ; C . prototype= n. fn, A = n ( d) ; var D = / ^(?:parents|prev(?:Until|All)) / , E = { children : ! 0 , contents : ! 0 , next : ! 0 , prev : ! 0 } ; n. fn. extend ( { has : function ( a ) { var b, c= n ( a, this ) , d= c. length; return this . filter ( function ( ) { for ( b= 0 ; d> b; b++ ) if ( n. contains ( this , c[ b] ) ) return ! 0 } ) } , closest : function ( a, b ) { for ( var c, d= 0 , e= this . length, f= [ ] , g= w. test ( a) || "string" != typeof a? n ( a, b|| this . context) : 0 ; e> d; d++ ) for ( c= this [ d] ; c&& c!== b; c= c. parentNode) if ( c. nodeType< 11 && ( g? g. index ( c) > - 1 : 1 === c. nodeType&& n. find. matchesSelector ( c, a) ) ) { f. push ( c) ; break } return this . pushStack ( f. length> 1 ? n. uniqueSort ( f) : f) } , index : function ( a ) { return a? "string" == typeof a? n. inArray ( this [ 0 ] , n ( a) ) : n. inArray ( a. jquery? a[ 0 ] : a, this ) : this [ 0 ] && this [ 0 ] . parentNode? this . first ( ) . prevAll ( ) . length: - 1 } , add : function ( a, b ) { return this . pushStack ( n. uniqueSort ( n. merge ( this . get ( ) , n ( a, b) ) ) ) } , addBack : function ( a ) { return this . add ( null == a? this . prevObject: this . prevObject. filter ( a) ) } } ) ; function F ( a, b ) { do a= a[ b] ; while ( a&& 1 !== a. nodeType) ; return a} n. each ( { parent : function ( a ) { var b= a. parentNode; return b&& 11 !== b. nodeType? b: null } , parents : function ( a ) { return u ( a, "parentNode" ) } , parentsUntil : function ( a, b, c ) { return u ( a, "parentNode" , c) } , next : function ( a ) { return F ( a, "nextSibling" ) } , prev : function ( a ) { return F ( a, "previousSibling" ) } , nextAll : function ( a ) { return u ( a, "nextSibling" ) } , prevAll : function ( a ) { return u ( a, "previousSibling" ) } , nextUntil : function ( a, b, c ) { return u ( a, "nextSibling" , c) } , prevUntil : function ( a, b, c ) { return u ( a, "previousSibling" , c) } , siblings : function ( a ) { return v ( ( a. parentNode|| { } ) . firstChild, a) } , children : function ( a ) { return v ( a. firstChild) } , contents : function ( a ) { return n. nodeName ( a, "iframe" ) ? a. contentDocument|| a. contentWindow. document: n. merge ( [ ] , a. childNodes) } } , function ( a, b ) { n. fn[ a] = function ( c, d ) { var e= n. map ( this , b, c) ; return "Until" !== a. slice ( - 5 ) && ( d= c) , d&& "string" == typeof d&& ( e= n. filter ( d, e) ) , this . length> 1 && ( E [ a] || ( e= n. uniqueSort ( e) ) , D . test ( a) && ( e= e. reverse ( ) ) ) , this . pushStack ( e) } } ) ; var G = / \S+ / g ; function H ( a ) { var b= { } ; return n. each ( a. match ( G ) || [ ] , function ( a, c ) { b[ c] = ! 0 } ) , b} n. Callbacks = function ( a ) { a= "string" == typeof a? H ( a) : n. extend ( { } , a) ; var b, c, d, e, f= [ ] , g= [ ] , h= - 1 , i = function ( ) { for ( e= a. once, d= b= ! 0 ; g. length; h= - 1 ) { c= g. shift ( ) ; while ( ++ h< f. length) f[ h] . apply ( c[ 0 ] , c[ 1 ] ) === ! 1 && a. stopOnFalse&& ( h= f. length, c= ! 1 ) } a. memory|| ( c= ! 1 ) , b= ! 1 , e&& ( f= c? [ ] : "" ) } , j= { add : function ( ) { return f&& ( c&& ! b&& ( h= f. length- 1 , g. push ( c) ) , function d ( b ) { n. each ( b, function ( b, c ) { n. isFunction ( c) ? a. unique&& j. has ( c) || f. push ( c) : c&& c. length&& "string" !== n. type ( c) && d ( c) } ) } ( arguments) , c&& ! b&& i ( ) ) , this } , remove : function ( ) { return n. each ( arguments, function ( a, b ) { var c; while ( ( c= n. inArray ( b, f, c) ) > - 1 ) f. splice ( c, 1 ) , h>= c&& h-- } ) , this } , has : function ( a ) { return a? n. inArray ( a, f) > - 1 : f. length> 0 } , empty : function ( ) { return f&& ( f= [ ] ) , this } , disable : function ( ) { return e= g= [ ] , f= c= "" , this } , disabled : function ( ) { return ! f} , lock : function ( ) { return e= ! 0 , c|| j. disable ( ) , this } , locked : function ( ) { return ! ! e} , fireWith : function ( a, c ) { return e|| ( c= c|| [ ] , c= [ a, c. slice? c. slice ( ) : c] , g. push ( c) , b|| i ( ) ) , this } , fire : function ( ) { return j. fireWith ( this , arguments) , this } , fired : function ( ) { return ! ! d} } ; return j} , n. extend ( { Deferred : function ( a ) { var b= [ [ "resolve" , "done" , n. Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , n. Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , n. Callbacks ( "memory" ) ] ] , c= "pending" , d= { state : function ( ) { return c} , always : function ( ) { return e. done ( arguments) . fail ( arguments) , this } , then : function ( ) { var a= arguments; return n. Deferred ( function ( c ) { n. each ( b, function ( b, f ) { var g= n. isFunction ( a[ b] ) && a[ b] ; e[ f[ 1 ] ] ( function ( ) { var a= g&& g . apply ( this , arguments) ; a&& n. isFunction ( a. promise) ? a. promise ( ) . progress ( c. notify) . done ( c. resolve) . fail ( c. reject) : c[ f[ 0 ] + "With" ] ( this === d? c. promise ( ) : this , g? [ a] : arguments) } ) } ) , a= null } ) . promise ( ) } , promise : function ( a ) { return null != a? n. extend ( a, d) : d} } , e= { } ; return d. pipe= d. then, n. each ( b, function ( a, f ) { var g= f[ 2 ] , h= f[ 3 ] ; d[ f[ 1 ] ] = g. add, h&& g. add ( function ( ) { c= h} , b[ 1 ^ a] [ 2 ] . disable, b[ 2 ] [ 2 ] . lock) , e[ f[ 0 ] ] = function ( ) { return e[ f[ 0 ] + "With" ] ( this === e? d: this , arguments) , this } , e[ f[ 0 ] + "With" ] = g. fireWith} ) , d. promise ( e) , a&& a . call ( e, e) , e} , when : function ( a ) { var b= 0 , c= e . call ( arguments) , d= c. length, f= 1 !== d|| a&& n. isFunction ( a. promise) ? d: 0 , g= 1 === f? a: n. Deferred ( ) , h = function ( a, b, c ) { return function ( d ) { b[ a] = this , c[ a] = arguments. length> 1 ? e . call ( arguments) : d, c=== i? g. notifyWith ( b, c) : -- f|| g. resolveWith ( b, c) } } , i, j, k; if ( d> 1 ) for ( i= new Array ( d) , j= new Array ( d) , k= new Array ( d) ; d> b; b++ ) c[ b] && n. isFunction ( c[ b] . promise) ? c[ b] . promise ( ) . progress ( h ( b, j, i) ) . done ( h ( b, k, c) ) . fail ( g. reject) : -- f; return f|| g. resolveWith ( k, c) , g. promise ( ) } } ) ; var I ; n. fn. ready = function ( a ) { return n. ready. promise ( ) . done ( a) , this } , n. extend ( { isReady : ! 1 , readyWait : 1 , holdReady : function ( a ) { a? n. readyWait++ : n. ready ( ! 0 ) } , ready : function ( a ) { ( a=== ! 0 ? -- n. readyWait: n. isReady) || ( n. isReady= ! 0 , a!== ! 0 && -- n. readyWait> 0 || ( I . resolveWith ( d, [ n] ) , n. fn. triggerHandler&& ( n ( d) . triggerHandler ( "ready" ) , n ( d) . off ( "ready" ) ) ) ) } } ) ; function J ( ) { d. addEventListener? ( d. removeEventListener ( "DOMContentLoaded" , K ) , a. removeEventListener ( "load" , K ) ) : ( d. detachEvent ( "onreadystatechange" , K ) , a. detachEvent ( "onload" , K ) ) } function K ( ) { ( d. addEventListener|| "load" === a. event. type|| "complete" === d. readyState) && ( J ( ) , n. ready ( ) ) } n. ready. promise = function ( b ) { if ( ! I ) if ( I = n. Deferred ( ) , "complete" === d. readyState|| "loading" !== d. readyState&& ! d. documentElement. doScroll) a. setTimeout ( n. ready) ; else if ( d. addEventListener) d. addEventListener ( "DOMContentLoaded" , K ) , a. addEventListener ( "load" , K ) ; else { d. attachEvent ( "onreadystatechange" , K ) , a. attachEvent ( "onload" , K ) ; var c= ! 1 ; try { c= null == a. frameElement&& d. documentElement} catch ( e) { } c&& c. doScroll&& ! function f ( ) { if ( ! n. isReady) { try { c. doScroll ( "left" ) } catch ( b) { return a. setTimeout ( f, 50 ) } J ( ) , n. ready ( ) } } ( ) } return I . promise ( b) } , n. ready. promise ( ) ; var L ; for ( L in n ( l) ) break ; l. ownFirst= "0" === L , l. inlineBlockNeedsLayout= ! 1 , n ( function ( ) { var a, b, c, e; c= d. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style&& ( b= d. createElement ( "div" ) , e= d. createElement ( "div" ) , e. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( e) . appendChild ( b) , "undefined" != typeof b. style. zoom&& ( b. style. cssText= "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1" , l. inlineBlockNeedsLayout= a= 3 === b. offsetWidth, a&& ( c. style. zoom= 1 ) ) , c. removeChild ( e) ) } ) , function ( ) { var a= d. createElement ( "div" ) ; l. deleteExpando= ! 0 ; try { delete a. test} catch ( b) { l. deleteExpando= ! 1 } a= null } ( ) ; var M = function ( a ) { var b= n. noData[ ( a. nodeName+ " " ) . toLowerCase ( ) ] , c= + a. nodeType|| 1 ; return 1 !== c&& 9 !== c? ! 1 : ! b|| b!== ! 0 && a. getAttribute ( "classid" ) === b} , N = / ^(?:\{[\w\W]*\}|\[[\w\W]*\])$ / , O = / ([A-Z]) / g ; function P ( a, b, c ) { if ( void 0 === c&& 1 === a. nodeType) { var d= "data-" + b. replace ( O , "-$1" ) . toLowerCase ( ) ; if ( c= a. getAttribute ( d) , "string" == typeof c) { try { c= "true" === c? ! 0 : "false" === c? ! 1 : "null" === c? null : + c+ "" === c? + c: N . test ( c) ? n. parseJSON ( c) : c} catch ( e) { } n. data ( a, b, c) } else c= void 0 ;
} return c} function Q ( a ) { var b; for ( b in a) if ( ( "data" !== b|| ! n. isEmptyObject ( a[ b] ) ) && "toJSON" !== b) return ! 1 ; return ! 0 } function R ( a, b, d, e ) { if ( M ( a) ) { var f, g, h= n. expando, i= a. nodeType, j= i? n. cache: a, k= i? a[ h] : a[ h] && h; if ( k&& j[ k] && ( e|| j[ k] . data) || void 0 !== d|| "string" != typeof b) return k|| ( k= i? a[ h] = c. pop ( ) || n. guid++ : h) , j[ k] || ( j[ k] = i? { } : { toJSON : n. noop} ) , "object" != typeof b&& "function" != typeof b|| ( e? j[ k] = n. extend ( j[ k] , b) : j[ k] . data= n. extend ( j[ k] . data, b) ) , g= j[ k] , e|| ( g. data|| ( g. data= { } ) , g= g. data) , void 0 !== d&& ( g[ n. camelCase ( b) ] = d) , "string" == typeof b? ( f= g[ b] , null == f&& ( f= g[ n. camelCase ( b) ] ) ) : f= g, f} } function S ( a, b, c ) { if ( M ( a) ) { var d, e, f= a. nodeType, g= f? n. cache: a, h= f? a[ n. expando] : n. expando; if ( g[ h] ) { if ( b&& ( d= c? g[ h] : g[ h] . data) ) { n. isArray ( b) ? b= b. concat ( n. map ( b, n. camelCase) ) : b in d? b= [ b] : ( b= n. camelCase ( b) , b= b in d? [ b] : b. split ( " " ) ) , e= b. length; while ( e-- ) delete d[ b[ e] ] ; if ( c? ! Q ( d) : ! n. isEmptyObject ( d) ) return } ( c|| ( delete g[ h] . data, Q ( g[ h] ) ) ) && ( f? n. cleanData ( [ a] , ! 0 ) : l. deleteExpando|| g!= g. window? delete g[ h] : g[ h] = void 0 ) } } } n. extend ( { cache : { } , noData : { "applet " : ! 0 , "embed " : ! 0 , "object " : "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" } , hasData : function ( a ) { return a= a. nodeType? n. cache[ a[ n. expando] ] : a[ n. expando] , ! ! a&& ! Q ( a) } , data : function ( a, b, c ) { return R ( a, b, c) } , removeData : function ( a, b ) { return S ( a, b) } , _data : function ( a, b, c ) { return R ( a, b, c, ! 0 ) } , _removeData : function ( a, b ) { return S ( a, b, ! 0 ) } } ) , n. fn. extend ( { data : function ( a, b ) { var c, d, e, f= this [ 0 ] , g= f&& f. attributes; if ( void 0 === a) { if ( this . length&& ( e= n. data ( f) , 1 === f. nodeType&& ! n. _data ( f, "parsedAttrs" ) ) ) { c= g. length; while ( c-- ) g[ c] && ( d= g[ c] . name, 0 === d. indexOf ( "data-" ) && ( d= n. camelCase ( d. slice ( 5 ) ) , P ( f, d, e[ d] ) ) ) ; n. _data ( f, "parsedAttrs" , ! 0 ) } return e} return "object" == typeof a? this . each ( function ( ) { n. data ( this , a) } ) : arguments. length> 1 ? this . each ( function ( ) { n. data ( this , a, b) } ) : f? P ( f, a, n. data ( f, a) ) : void 0 } , removeData : function ( a ) { return this . each ( function ( ) { n. removeData ( this , a) } ) } } ) , n. extend ( { queue : function ( a, b, c ) { var d; return a? ( b= ( b|| "fx" ) + "queue" , d= n. _data ( a, b) , c&& ( ! d|| n. isArray ( c) ? d= n. _data ( a, b, n. makeArray ( c) ) : d. push ( c) ) , d|| [ ] ) : void 0 } , dequeue : function ( a, b ) { b= b|| "fx" ; var c= n. queue ( a, b) , d= c. length, e= c. shift ( ) , f= n. _queueHooks ( a, b) , g = function ( ) { n. dequeue ( a, b) } ; "inprogress" === e&& ( e= c. shift ( ) , d-- ) , e&& ( "fx" === b&& c. unshift ( "inprogress" ) , delete f. stop, e . call ( a, g, f) ) , ! d&& f&& f. empty. fire ( ) } , _queueHooks : function ( a, b ) { var c= b+ "queueHooks" ; return n. _data ( a, c) || n. _data ( a, c, { empty : n. Callbacks ( "once memory" ) . add ( function ( ) { n. _removeData ( a, b+ "queue" ) , n. _removeData ( a, c) } ) } ) } } ) , n. fn. extend ( { queue : function ( a, b ) { var c= 2 ; return "string" != typeof a&& ( b= a, a= "fx" , c-- ) , arguments. length< c? n. queue ( this [ 0 ] , a) : void 0 === b? this : this . each ( function ( ) { var c= n. queue ( this , a, b) ; n. _queueHooks ( this , a) , "fx" === a&& "inprogress" !== c[ 0 ] && n. dequeue ( this , a) } ) } , dequeue : function ( a ) { return this . each ( function ( ) { n. dequeue ( this , a) } ) } , clearQueue : function ( a ) { return this . queue ( a|| "fx" , [ ] ) } , promise : function ( a, b ) { var c, d= 1 , e= n. Deferred ( ) , f= this , g= this . length, h = function ( ) { -- d|| e. resolveWith ( f, [ f] ) } ; "string" != typeof a&& ( b= a, a= void 0 ) , a= a|| "fx" ; while ( g-- ) c= n. _data ( f[ g] , a+ "queueHooks" ) , c&& c. empty&& ( d++ , c. empty. add ( h) ) ; return h ( ) , e. promise ( b) } } ) , function ( ) { var a; l. shrinkWrapBlocks = function ( ) { if ( null != a) return a; a= ! 1 ; var b, c, e; return c= d. getElementsByTagName ( "body" ) [ 0 ] , c&& c. style? ( b= d. createElement ( "div" ) , e= d. createElement ( "div" ) , e. style. cssText= "position:absolute;border:0;width:0;height:0;top:0;left:-9999px" , c. appendChild ( e) . appendChild ( b) , "undefined" != typeof b. style. zoom&& ( b. style. cssText= "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1" , b. appendChild ( d. createElement ( "div" ) ) . style. width= "5px" , a= 3 !== b. offsetWidth) , c. removeChild ( e) , a) : void 0 } } ( ) ; var T = / [+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|) / . source, U = new RegExp ( "^(?:([+-])=|)(" + T + ")([a-z%]*)$" , "i" ) , V = [ "Top" , "Right" , "Bottom" , "Left" ] , W = function ( a, b ) { return a= b|| a, "none" === n. css ( a, "display" ) || ! n. contains ( a. ownerDocument, a) } ; function X ( a, b, c, d ) { var e, f= 1 , g= 20 , h= d? function ( ) { return d. cur ( ) } : function ( ) { return n. css ( a, b, "" ) } , i= h ( ) , j= c&& c[ 3 ] || ( n. cssNumber[ b] ? "" : "px" ) , k= ( n. cssNumber[ b] || "px" !== j&& + i) && U . exec ( n. css ( a, b) ) ; if ( k&& k[ 3 ] !== j) { j= j|| k[ 3 ] , c= c|| [ ] , k= + i|| 1 ; do f= f|| ".5" , k/= f, n. style ( a, b, k+ j) ; while ( f!== ( f= h ( ) / i) && 1 !== f&& -- g) } return c&& ( k= + k|| + i|| 0 , e= c[ 1 ] ? k+ ( c[ 1 ] + 1 ) * c[ 2 ] : + c[ 2 ] , d&& ( d. unit= j, d. start= k, d. end= e) ) , e} var Y = function ( a, b, c, d, e, f, g ) { var h= 0 , i= a. length, j= null == c; if ( "object" === n. type ( c) ) { e= ! 0 ; for ( h in c) Y ( a, b, h, c[ h] , ! 0 , f, g) } else if ( void 0 !== d&& ( e= ! 0 , n. isFunction ( d) || ( g= ! 0 ) , j&& ( g? ( b . call ( a, d) , b= null ) : ( j= b, b = function ( a, b, c ) { return j . call ( n ( a) , c) } ) ) , b) ) for ( ; i> h; h++ ) b ( a[ h] , c, g? d: d . call ( a[ h] , h, b ( a[ h] , c) ) ) ; return e? a: j? b . call ( a) : i? b ( a[ 0 ] , c) : f} , Z = / ^(?:checkbox|radio)$ / i , $= / <([\w:-]+) / , _= / ^$|\/(?:java|ecma)script / i , aa= / ^\s+ / , ba= "abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video" ; function ca ( a ) { var b= ba. split ( "|" ) , c= a. createDocumentFragment ( ) ; if ( c. createElement) while ( b. length) c. createElement ( b. pop ( ) ) ; return c} ! function ( ) { var a= d. createElement ( "div" ) , b= d. createDocumentFragment ( ) , c= d. createElement ( "input" ) ; a. innerHTML= " a " , l. leadingWhitespace= 3 === a. firstChild. nodeType, l. tbody= ! a. getElementsByTagName ( "tbody" ) . length, l. htmlSerialize= ! ! a. getElementsByTagName ( "link" ) . length, l. html5Clone= "<:nav>" !== d. createElement ( "nav" ) . cloneNode ( ! 0 ) . outerHTML, c. type= "checkbox" , c. checked= ! 0 , b. appendChild ( c) , l. appendChecked= c. checked, a. innerHTML= "" , l. noCloneChecked= ! ! a. cloneNode ( ! 0 ) . lastChild. defaultValue, b. appendChild ( a) , c= d. createElement ( "input" ) , c. setAttribute ( "type" , "radio" ) , c. setAttribute ( "checked" , "checked" ) , c. setAttribute ( "name" , "t" ) , a. appendChild ( c) , l. checkClone= a. cloneNode ( ! 0 ) . cloneNode ( ! 0 ) . lastChild. checked, l. noCloneEvent= ! ! a. addEventListener, a[ n. expando] = 1 , l. attributes= ! a. getAttribute ( n. expando) } ( ) ; var da= { option : [ 1 , "" , "" ] , legend : [ 1 , "" , "" ] , area : [ 1 , "" , "" ] , param : [ 1 , "" , "" ] , thead : [ 1 , "" ] , tr : [ 2 , "" ] , col : [ 2 , "" ] , td : [ 3 , "" ] , _default : l. htmlSerialize? [ 0 , "" , "" ] : [ 1 , "X", "
" ] } ; da. optgroup= da. option, da. tbody= da. tfoot= da. colgroup= da. caption= da. thead, da. th= da. td; function ea ( a, b ) { var c, d, e= 0 , f= "undefined" != typeof a. getElementsByTagName? a. getElementsByTagName ( b|| "*" ) : "undefined" != typeof a. querySelectorAll? a. querySelectorAll ( b|| "*" ) : void 0 ; if ( ! f) for ( f= [ ] , c= a. childNodes|| a; null != ( d= c[ e] ) ; e++ ) ! b|| n. nodeName ( d, b) ? f. push ( d) : n. merge ( f, ea ( d, b) ) ; return void 0 === b|| b&& n. nodeName ( a, b) ? n. merge ( [ a] , f) : f} function fa ( a, b ) { for ( var c, d= 0 ; null != ( c= a[ d] ) ; d++ ) n. _data ( c, "globalEval" , ! b|| n. _data ( b[ d] , "globalEval" ) ) } var ga= / <|?\w+; / , ha= / / i ; function ia ( a ) { Z . test ( a. type) && ( a. defaultChecked= a. checked) } function ja ( a, b, c, d, e ) { for ( var f, g, h, i, j, k, m, o= a. length, p= ca ( b) , q= [ ] , r= 0 ; o> r; r++ ) if ( g= a[ r] , g|| 0 === g) if ( "object" === n. type ( g) ) n. merge ( q, g. nodeType? [ g] : g) ; else if ( ga. test ( g) ) { i= i|| p. appendChild ( b. createElement ( "div" ) ) , j= ( $. exec ( g) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) , m= da[ j] || da. _default, i. innerHTML= m[ 1 ] + n. htmlPrefilter ( g) + m[ 2 ] , f= m[ 0 ] ; while ( f-- ) i= i. lastChild; if ( ! l. leadingWhitespace&& aa. test ( g) && q. push ( b. createTextNode ( aa. exec ( g) [ 0 ] ) ) , ! l. tbody) { g= "table" !== j|| ha. test ( g) ? ""!== m[ 1 ] || ha. test ( g) ? 0 : i: i. firstChild, f= g&& g. childNodes. length; while ( f-- ) n. nodeName ( k= g. childNodes[ f] , "tbody" ) && ! k. childNodes. length&& g. removeChild ( k) } n. merge ( q, i. childNodes) , i. textContent= "" ; while ( i. firstChild) i. removeChild ( i. firstChild) ; i= p. lastChild} else q. push ( b. createTextNode ( g) ) ; i&& p. removeChild ( i) , l. appendChecked|| n. grep ( ea ( q, "input" ) , ia) , r= 0 ; while ( g= q[ r++ ] ) if ( d&& n. inArray ( g, d) > - 1 ) e&& e. push ( g) ; else if ( h= n. contains ( g. ownerDocument, g) , i= ea ( p. appendChild ( g) , "script" ) , h&& fa ( i) , c) { f= 0 ; while ( g= i[ f++ ] ) _. test ( g. type|| "" ) && c. push ( g) } return i= null , p} ! function ( ) { var b, c, e= d. createElement ( "div" ) ; for ( b in { submit : ! 0 , change : ! 0 , focusin : ! 0 } ) c= "on" + b, ( l[ b] = c in a) || ( e. setAttribute ( c, "t" ) , l[ b] = e. attributes[ c] . expando=== ! 1 ) ; e= null } ( ) ; var ka= / ^(?:input|select|textarea)$ / i , la= / ^key / , ma= / ^(?:mouse|pointer|contextmenu|drag|drop)|click / , na= / ^(?:focusinfocus|focusoutblur)$ / , oa= / ^([^.]*)(?:\.(.+)|) / ; function pa ( ) { return ! 0 } function qa ( ) { return ! 1 } function ra ( ) { try { return d. activeElement} catch ( a) { } } function sa ( a, b, c, d, e, f ) { var g, h; if ( "object" == typeof b) { "string" != typeof c&& ( d= d|| c, c= void 0 ) ; for ( h in b) sa ( a, h, c, d, b[ h] , f) ; return a} if ( null == d&& null == e? ( e= c, d= c= void 0 ) : null == e&& ( "string" == typeof c? ( e= d, d= void 0 ) : ( e= d, d= c, c= void 0 ) ) , e=== ! 1 ) e= qa; else if ( ! e) return a; return 1 === f&& ( g= e, e = function ( a ) { return n ( ) . off ( a) , g . apply ( this , arguments) } , e. guid= g. guid|| ( g. guid= n. guid++ ) ) , a. each ( function ( ) { n. event. add ( this , b, e, d, c) } ) } n. event= { global : { } , add : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, m, o, p, q, r= n. _data ( a) ; if ( r) { c. handler&& ( i= c, c= i. handler, e= i. selector) , c. guid|| ( c. guid= n. guid++ ) , ( g= r. events) || ( g= r. events= { } ) , ( k= r. handle) || ( k= r. handle = function ( a ) { return "undefined" == typeof n|| a&& n. event. triggered=== a. type? void 0 : n. event. dispatch . apply ( k. elem, arguments) } , k. elem= a) , b= ( b|| "" ) . match ( G ) || [ "" ] , h= b. length; while ( h-- ) f= oa. exec ( b[ h] ) || [ ] , o= q= f[ 1 ] , p= ( f[ 2 ] || "" ) . split ( "." ) . sort ( ) , o&& ( j= n. event. special[ o] || { } , o= ( e? j. delegateType: j. bindType) || o, j= n. event. special[ o] || { } , l= n. extend ( { type : o, origType : q, data : d, handler : c, guid : c. guid, selector : e, needsContext : e&& n. expr. match. needsContext. test ( e) , namespace : p. join ( "." ) } , i) , ( m= g[ o] ) || ( m= g[ o] = [ ] , m. delegateCount= 0 , j. setup&& j. setup . call ( a, d, p, k) !== ! 1 || ( a. addEventListener? a. addEventListener ( o, k, ! 1 ) : a. attachEvent&& a. attachEvent ( "on" + o, k) ) ) , j. add&& ( j. add . call ( a, l) , l. handler. guid|| ( l. handler. guid= c. guid) ) , e? m. splice ( m. delegateCount++ , 0 , l) : m. push ( l) , n. event. global[ o] = ! 0 ) ; a= null } } , remove : function ( a, b, c, d, e ) { var f, g, h, i, j, k, l, m, o, p, q, r= n. hasData ( a) && n. _data ( a) ; if ( r&& ( k= r. events) ) { b= ( b|| "" ) . match ( G ) || [ "" ] , j= b. length; while ( j-- ) if ( h= oa. exec ( b[ j] ) || [ ] , o= q= h[ 1 ] , p= ( h[ 2 ] || "" ) . split ( "." ) . sort ( ) , o) { l= n. event. special[ o] || { } , o= ( d? l. delegateType: l. bindType) || o, m= k[ o] || [ ] , h= h[ 2 ] && new RegExp ( "(^|\\.)" + p. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , i= f= m. length; while ( f-- ) g= m[ f] , ! e&& q!== g. origType|| c&& c. guid!== g. guid|| h&& ! h. test ( g. namespace) || d&& d!== g. selector&& ( "**" !== d|| ! g. selector) || ( m. splice ( f, 1 ) , g. selector&& m. delegateCount-- , l. remove&& l. remove . call ( a, g) ) ; i&& ! m. length&& ( l. teardown&& l. teardown . call ( a, p, r. handle) !== ! 1 || n. removeEvent ( a, o, r. handle) , delete k[ o] ) } else for ( o in k) n. event. remove ( a, o+ b[ j] , c, d, ! 0 ) ; n. isEmptyObject ( k) && ( delete r. handle, n. _removeData ( a, "events" ) ) } } , trigger : function ( b, c, e, f ) { var g, h, i, j, l, m, o, p= [ e|| d] , q= k . call ( b, "type" ) ? b. type: b, r= k . call ( b, "namespace" ) ? b. namespace. split ( "." ) : [ ] ; if ( i= m= e= e|| d, 3 !== e. nodeType&& 8 !== e. nodeType&& ! na. test ( q+ n. event. triggered) && ( q. indexOf ( "." ) > - 1 && ( r= q. split ( "." ) , q= r. shift ( ) , r. sort ( ) ) , h= q. indexOf ( ":" ) < 0 && "on" + q, b= b[ n. expando] ? b: new n. Event ( q, "object" == typeof b&& b) , b. isTrigger= f? 2 : 3 , b. namespace= r. join ( "." ) , b. rnamespace= b. namespace? new RegExp ( "(^|\\.)" + r. join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , b. result= void 0 , b. target|| ( b. target= e) , c= null == c? [ b] : n. makeArray ( c, [ b] ) , l= n. event. special[ q] || { } , f|| ! l. trigger|| l. trigger . apply ( e, c) !== ! 1 ) ) { if ( ! f&& ! l. noBubble&& ! n. isWindow ( e) ) { for ( j= l. delegateType|| q, na. test ( j+ q) || ( i= i. parentNode) ; i; i= i. parentNode) p. push ( i) , m= i; m=== ( e. ownerDocument|| d) && p. push ( m. defaultView|| m. parentWindow|| a) } o= 0 ; while ( ( i= p[ o++ ] ) && ! b. isPropagationStopped ( ) ) b. type= o> 1 ? j: l. bindType|| q, g= ( n. _data ( i, "events" ) || { } ) [ b. type] && n. _data ( i, "handle" ) , g&& g . apply ( i, c) , g= h&& i[ h] , g&& g. apply&& M ( i) && ( b. result= g . apply ( i, c) , b. result=== ! 1 && b. preventDefault ( ) ) ; if ( b. type= q, ! f&& ! b. isDefaultPrevented ( ) && ( ! l. _default|| l. _default . apply ( p. pop ( ) , c) === ! 1 ) && M ( e) && h&& e[ q] && ! n. isWindow ( e) ) { m= e[ h] , m&& ( e[ h] = null ) , n. event. triggered= q; try { e[ q] ( ) } catch ( s) { } n. event. triggered= void 0 , m&& ( e[ h] = m) } return b. result} } , dispatch : function ( a ) { a= n. event. fix ( a) ; var b, c, d, f, g, h= [ ] , i= e . call ( arguments) , j= ( n. _data ( this , "events" ) || { } ) [ a. type] || [ ] , k= n. event. special[ a. type] || { } ; if ( i[ 0 ] = a, a. delegateTarget= this , ! k. preDispatch|| k. preDispatch . call ( this , a) !== ! 1 ) { h= n. event. handlers . call ( this , a, j) , b= 0 ; while ( ( f= h[ b++ ] ) && ! a. isPropagationStopped ( ) ) { a. currentTarget= f. elem, c= 0 ; while ( ( g= f. handlers[ c++ ] ) && ! a. isImmediatePropagationStopped ( ) ) a. rnamespace&& ! a. rnamespace. test ( g. namespace) || ( a. handleObj= g, a. data= g. data, d= ( ( n. event. special[ g. origType] || { } ) . handle|| g. handler) . apply ( f. elem, i) , void 0 !== d&& ( a. result= d) === ! 1 && ( a. preventDefault ( ) , a. stopPropagation ( ) ) ) } return k. postDispatch&& k. postDispatch . call ( this , a) , a. result} } , handlers : function ( a, b ) { var c, d, e, f, g= [ ] , h= b. delegateCount, i= a. target; if ( h&& i. nodeType&& ( "click" !== a. type|| isNaN ( a. button) || a. button< 1 ) ) for ( ; i!= this ; i= i. parentNode|| this ) if ( 1 === i. nodeType&& ( i. disabled!== ! 0 || "click" !== a. type) ) { for ( d= [ ] , c= 0 ; h> c; c++ ) f= b[ c] , e= f. selector+ " " , void 0 === d[ e] && ( d[ e] = f. needsContext? n ( e, this ) . index ( i) > - 1 : n. find ( e, this , null , [ i] ) . length) , d[ e] && d. push ( f) ; d. length&& g. push ( { elem : i, handlers : d} ) } return h< b. length&& g. push ( { elem : this , handlers : b. slice ( h) } ) , g} , fix : function ( a ) { if ( a[ n. expando] ) return a; var b, c, e, f= a. type, g= a, h= this . fixHooks[ f] ; h|| ( this . fixHooks[ f] = h= ma. test ( f) ? this . mouseHooks: la. test ( f) ? this . keyHooks: { } ) , e= h. props? this . props. concat ( h. props) : this . props, a= new n. Event ( g) , b= e. length; while ( b-- ) c= e[ b] , a[ c] = g[ c] ; return a. target|| ( a. target= g. srcElement|| d) , 3 === a. target. nodeType&& ( a. target= a. target. parentNode) , a. metaKey= ! ! a. metaKey, h. filter? h. filter ( a, g) : a} , props : "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which" . split ( " " ) , fixHooks : { } , keyHooks : { props : "char charCode key keyCode" . split ( " " ) , filter : function ( a, b ) { return null == a. which&& ( a. which= null != b. charCode? b. charCode: b. keyCode) , a} } , mouseHooks : { props : "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" . split ( " " ) , filter : function ( a, b ) { var c, e, f, g= b. button, h= b. fromElement; return null == a. pageX&& null != b. clientX&& ( e= a. target. ownerDocument|| d, f= e. documentElement, c= e. body, a. pageX= b. clientX+ ( f&& f. scrollLeft|| c&& c. scrollLeft|| 0 ) - ( f&& f. clientLeft|| c&& c. clientLeft|| 0 ) , a. pageY= b. clientY+ ( f&& f. scrollTop|| c&& c. scrollTop|| 0 ) - ( f&& f. clientTop|| c&& c. clientTop|| 0 ) ) , ! a. relatedTarget&& h&& ( a. relatedTarget= h=== a. target? b. toElement: h) , a. which|| void 0 === g|| ( a. which= 1 & g? 1 : 2 & g? 3 : 4 & g? 2 : 0 ) , a} } , special : { load : { noBubble : ! 0 } , focus : { trigger : function ( ) { if ( this !== ra ( ) && this . focus) try { return this . focus ( ) , ! 1 } catch ( a) { } } , delegateType : "focusin" }
注意:
由于博客字数限制,本篇文章只展示了部分代码。本项目的完整代码及素材包关注+私信我获取
你可能感兴趣的:(web前端项目-源码自取,前端,游戏,javascript,html)
关于自动化测试
AIZHINAN
log4j
B站讲的最好的自动化测试教程,工具+框架附项目实战一套速通,零基础完全轻松掌握!自动化测试课程、web/app/接口概述常见的三类自动化测试有:单元测试,集成测试以及功能测试。单元测试单元测试是一个白盒测试,一般是针对一个方法单元进行的测试,单元测试要求运行快,编写简单。所以一般单元测试有这么一些特质:不连接数据库不访问磁盘文件不访问远程网络能够在很短时间内运行完毕(比如三秒内)集成测试集成测试可
Python网安-zip文件暴力破解(仅供学习)
Whoisshutiao
python网安 python 开发语言 网络安全
目录源码在这里需要的模块准备一个密码本和需要破解的ZIP文件一行一行地从密码文件中读取每个密码。核心部分注意,需要修改上段代码注释里的这段具有编码问题的代码:源码在这里https://github.com/Wist-fully/Attack/tree/cracker需要的模块fromtqdmimporttqdmimportzipfileimportpyzipper准备一个密码本和需要破解的ZIP文
编译UltraleapTrackingWebSocket
cheniie
解决方案 leapmotion websocket
最近要在项目中用到LeapMotion,无意中发现了一个Go语言的LeapMotion库:https://gobot.io/documentation/platforms/leapmotion/示例代码看起来很简单,但是要实际运行起来还需要一些条件。在示例代码中,我们看到它连接的是6437端口,这其实是一种比较老的LeapMotion使用方式了,6437实际上是一个websocket端口,Leap
python 爬虫 selenium作用_详解python爬虫利器Selenium使用方法
weixin_39585974
python 爬虫 selenium作用
简介:用pyhon爬取动态页面时普通的urllib2无法实现,例如下面的京东首页,随着滚动条的下拉会加载新的内容,而urllib2就无法抓取这些内容,此时就需要今天的主角selenium。Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、MozillaFirefox、MozillaSuite等。使用它爬取页面
政企终端安全综合治理方案(无技术人员)
兢谨网安
企业安全 政务 安全 网络安全 网络攻击模型 渗透测试 网络
核心原则:制度管理为主,技术工具为辅,全员参与共治一、管理机制建设(关键措施,占比70%)行政指令强制规范发布《办公终端软件安装白名单制度》仅允许安装政务版杀毒软件、办公软件(如WPS政务版)、专用业务系统。白名单示例:360安全卫士政务版、奇安信、金山毒霸企业版(政务)、微软Office(正版授权)、企业微信政务版。明确禁止行为(纳入员工守则):禁止安装娱乐软件(如视频播放器、游戏)、破解软件、
EXILIUM×亚矩云手机:重构Web3虚拟生存法则,开启多端跨链元宇宙自由征途
云云321
智能手机 重构 web3
在链游与元宇宙赛道竞争加剧的当下,EXILIUM凭借其去中心化开放世界、链上资产确权与玩家自治经济系统,成为Web3原住民逃离“中心化牢笼”的首选之地。然而,其多链交互门槛高、跨设备身份管理复杂、链上安全风险频发等问题,让普通玩家与工作室陷入“自由与风险”的双重困境。亚矩云手机通过云端虚拟化架构、跨链协议兼容与零信任安全体系,为EXILIUM用户提供“链上自由”与“现实可控”的平衡方案,让元宇宙探
webdriver常用方法+鼠标键盘事件+浏览器高级操作
要站在顶端
UI自动化 selenium
文章目录webdriver操作元素、获取元素常用方法浏览器控制浏览器cookies鼠标事件键盘事件**常用方法**上传文件内嵌网页iframe切换浏览器标签页切换页面滚动截图警告框处理下拉框处理webdriver操作元素、获取元素常用方法常用方法clear():清除文本。send_keys(value):模拟按键输入(被操作元素需要是个文本输入框)。click():单击元素。其他方法#size:返
Python网安-ftp服务暴力破解(仅供学习)
Whoisshutiao
python 网络安全 开发语言
目录源码在这里需要导入的模块连接ftp,并设置密码本和线程核心代码设置线程源码在这里https://github.com/Wist-fully/Attack/tree/cracker需要导入的模块importftplibfromthreadingimportThreadimportqueue连接ftp,并设置密码本和线程host="192.168.6.6"user="student"port=21
Charles中文版抓包工具:如何加速API调试与网络优化
2501_91592143
http udp https websocket 网络安全 网络协议 tcp/ip
在软件开发的过程中,网络请求和API接口的调试与优化是最常见的挑战之一。无论是Web开发、移动应用调试,还是后端API性能优化,开发者都需要一个高效的工具来帮助诊断和解决网络流量中的潜在问题。Charles抓包工具作为一款行业领先的网络调试软件,凭借其强大的功能和简便的操作,帮助开发者提升开发效率、优化网络请求。本文将探讨如何通过Charles中文版抓包工具加速API调试与网络优化,确保开发过程中
探索适用于鸿蒙原生应用的跨平台开发框架
harmonyos
探索适用于鸿蒙原生应用的跨平台开发框架在移动应用开发领域,跨平台开发框架的出现为开发者带来了极大的便利。本文将介绍几种适用于开发鸿蒙原生应用的跨平台应用开发技术框架。Uni-appUni-app是基于Vue.js开发前端应用的框架,它的优势在于一套代码能编译到iOS、Android、Web以及各种小程序等多个平台。在鸿蒙原生应用开发方面,它借助华为开发者联盟的开发工具和SDK来开发鸿蒙应用。对于熟
基于人工智能的图表生成器
警世龙
开发记录 人工智能 自然语言处理
基于人工智能的图表生成器软件需求分析本项目旨在开发一个基于Web的图表生成工具,利用人工智能技术将自然语言描述转换为专业的流程图、时序图等可视化图表。具体需求如下:支持用户输入自然语言描述来生成图表。提供实时预览功能,让用户能够即时看到生成的图表。允许用户对生成的Mermaid代码进行编辑。支持图表的缩放和平移操作。提供代码保存和图片导出功能。具备快捷键支持,提高用户操作效率。技术选型前端HTML
深入解析 Cookie、LocalStorage 和 SessionStorage
浪裡遊
杂文 前端 服务器 后端 信息与通信 tcp/ip 交互
浏览器数据存储三剑客:深入解析Cookie、LocalStorage和SessionStorage在现代Web应用开发中,经常需要在用户的浏览器端存储数据,以实现用户状态管理、个性化设置、离线功能等。浏览器为此提供了几种主要的客户端存储机制,其中Cookie、LocalStorage和SessionStorage是最常用且核心的三种。虽然它们都用于在浏览器端存储数据,但它们在设计目的、生命周期、作
解决报错:org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
天黑请闭眼
Java异常处理 java
目录一、场景二、报错信息三、原因四、解决一、场景1、前端调用后端接口报错2、接口功能为导出excel二、报错信息org.apache.catalina.connector.ClientAbortException:java.io.IOException:Brokenpipeatorg.apache.catalina.connector.OutputBuffer.realWriteBytes(Out
Java猜拳小游戏
wp_tao
Java从入门到精通 java 开发语言
Java猜拳小游戏使用java设计一个猜拳小游戏,要求如下:在控制台提示用户输入出拳结果(1:石头,2:剪刀,3:布)。计算机生成出拳结果。裁判判断出拳结果。输出游戏结果。com.game.Judge.java。packagecom.game;publicclassJudge{privateintplayer1;//选手一的出拳结果:1为石头,2为剪刀,3为布
golang游戏开发学习笔记-开发一个简单的2D游戏(基础篇)
2.人物运动图(只展示第一帧)2.方块纹理图将资源准备完成之后,就能开始代码的开发了五.开始实现!1.资源管理在上一篇文章中我们将纹理和着色器分别封装成了两个类,这里我们创建一个资源管理类对这两个类进行管理,由于golang中是没有静态变量的,需要用包内变量对其进行模拟shader.gopackageresourceimport(“github.com/go-gl/gl/v4.1-core/gl”
next-hexagonal-starter:前端六边形架构的简约实践
翟珊兰
next-hexagonal-starter:前端六边形架构的简约实践next-hexagonal-starter项目地址:https://gitcode.com/gh_mirrors/ne/next-hexagonal-starter项目介绍在软件开发中,六边形架构(HexagonalArchitecture)是一种设计模式,它通过将应用程序的业务逻辑与外部关注点(如UI、数据库、框架等)解耦,
string s = new string(“java“)这个几个对象?
扣棣编程
# 面试复习 java spring boot 开发语言
(❁´◡`❁)您的点赞➕评论➕收藏⭐是作者创作的最大动力支持我:点赞+收藏⭐️+留言欢迎留言讨论(源码+调试运行+问题答疑)有兴趣可以联系我文末有往期免费源码,直接领取获取(无删减,无套路)在Java中,代码Strings=newString("java");(注意:正确的类名是String,首字母大写)会创建1个或2个对象,具体取决于字符串常量池(StringPool)的当前状态。以下是详细分析
基于springboot的社会志愿者管理系统
QQ242219979
spring boot 后端 java
目录部分效果实现截图本系统介绍关于我开发技术详细介绍开发思路核心代码参考示例基于springboot的社会志愿者管理系统论文提纲参考系统测试源码获取详细视频演示或者查看其他版本:文章底部获取博主联系方式!部分效果实现截图本系统介绍基于springboot的社会志愿者管理系统采用的开发工具:IntelliJIDEA,VScode;数据库管理软件:Navicat;服务器运行平台:Tomcat;开发技术
Flask(四) 模板渲染render_template
@昵称不存在
Flask flask python 后端
文章目录过程详解(路由HTML模板)数据是怎么传过去的?多变量示例✅Jinja2支持条件判断、循环、模板继承:✅安全性Flask默认也会对变量进行HTML转义:{{chart|safe}}在pyecharts中怎么用?模板继承文件结构示例base.html(母板模板)index.html(子模板)login.html(子模板)过滤器宏和模板包含Flask-Login登录系统1、安装Flask-Lo
Flask(二) 路由routes
@昵称不存在
Flask flask
文章目录基本路由定义路由参数路由规则设置请求方法(GET/POST)路由函数返回静态文件和模板Blueprint(模块化路由)显示当前所有路由Flask路由是Web应用程序中将URL映射到Python函数的机制。定义路由:使用@app.route(‘/path’)装饰器定义URL和视图函数的映射。路由参数:通过动态部分在URL中传递参数。路由规则:使用类型转换器指定URL参数的类型。请求方法:指定
前端开发中的AI辅助测试:从手动到智能的转变
喜葵
人工智能
前端开发中的AI辅助测试:从手动到智能的转变作者:喜葵更新时间:2025-05-16前言前端测试一直是开发流程中的痛点:写测试代码耗时、维护成本高、覆盖率难提升。随着AI技术的发展,前端测试正在经历一场从"手动编写"到"AI辅助生成"的革命性转变。本文将探讨AI如何改变前端测试的现状,以及实际应用中的最佳实践。文章目录前端测试的现状与挑战AI辅助测试的核心技术实战案例:AI生成单元测试智能测试的优
Python Flask Web教程004:Flask 变量规则
若北辰
flask python 前端
FlaskWeb教程004:Flask变量规则1.Flask变量规则2.实例3.转换器构建规则4.规范的URL5.路由尾部有无斜杠的区别路由尾部斜杠的影响推荐使用带尾斜杠的路由结论1.Flask变量规则通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为。它作为关键字参数传递给与规则相关联的函数。2.实例在以下示例中,route()装饰器的规则参数包含附加到URL'/hello’的。因
Club_IntelliMatch_Development_Guide
Joseit
python python pygame django flask
ClubIntelliMatch系统-全栈开发流程文档概述ClubIntelliMatch系统是一个现代化的社团活动智能匹配平台,采用前后端分离架构。系统基于PythonFlask构建RESTfulAPI后端,Vue.js3+Vite构建现代化前端,MySQL作为持久化数据存储。本文档深入分析了整个开发流程的技术架构、设计原则和实现细节。系统架构流程图后端API架构前端组件架构app.pyFlas
Python实例题:基于 Flask 的博客系统
狐凄
实例 python 开发语言
目录Python实例题题目要求:解题思路:代码实现:1.base.html2.index.html3.post.html4.create_post.html5.login.html6.register.htmlPython实例题题目基于Flask的博客系统要求:使用Flask框架构建一个简单的博客系统。实现用户认证(注册、登录、注销)。支持博客文章的创建、编辑、删除和查看。使用SQLite数据库存
WebRTC(十一):RTCP和SRTCP
却道天凉_好个秋
WebRTC webrtc
RTCP基本概念RTCP是RTP的控制协议,用于监控媒体传输质量和参与者状态,并与RTP一起工作。RTP用于传输媒体数据(如音视频),RTCP则用于传输控制信息。RTCP通常和RTP同时使用,并通过不同端口(通常RTP使用偶数端口,RTCP使用其下一个奇数端口)。主要用于:传输质量反馈:丢包率、时延、抖动等统计信息。媒体源身份识别:包括CNAME(CanonicalName)标识每个参与者。带宽控
tensorRT 与 torchserve-GPU性能对比
joker-G
计算机视觉 pytorch python
实验对比前端时间搭建了TensorRT、Torchserve-GPU,最近抽时间将这两种方案做一个简单的实验对比。实验数据Cuda11.0、Xeon®62423.1*80、RTX309024G、Resnet50TensorRT、Torchserve-GPU各自一张卡搭建10进程接口,感兴趣的可以查看我个人其他文章。30进程并发、2000张1200*720像素图像的总量数据TensorRT的部署使用
JSON数据格式及其在WEB开发中的应用
m0_70273331
Web前端 经验分享 前端 前端框架
json与xml互相转换JSON的格式必须是数组或者对象,其属性支持一下类型:boolean:true,falsenumber:0,1,2,3string:“abc”object:null,{},{“a”:“b”}array:[],[1,2]严格的语法约束不能有ascii之外的字符,汉字应使用”\u6c49”格式;然而在utf-8流行的时代,汉字不编码已不是啥大问题了;不能有注释,行注释与块注释都
2021-07-08 转载Cesium中文网
liuqun69
java python linux 人工智能 html
Cesium更新日志英文完整更新日志:https://github.com/CesiumGS/cesium/blob/master/CHANGES.md中文:http://cesium.coinidea.com/site/download.html中文更新日志由Cesium中文网(京ICP备15014655号)提供1.83-2021-07-01:Cesium-1.83.zip新增对KTX2和基本通
前端微前端架构的探索与实践
大厂前端小白菜
前端 架构 ai
前端微前端架构的探索与实践关键词:微前端、前端架构、模块化、独立部署、团队协作、技术栈隔离、渐进式迁移摘要:本文将深入探讨微前端架构的概念、原理和实践。我们将从微前端的起源讲起,分析其核心设计思想,并通过实际案例展示如何实现一个完整的微前端解决方案。文章将涵盖微前端的多种实现方式、技术选型考量、以及在实际项目中的应用场景和挑战,帮助读者全面理解这一现代前端架构模式。背景介绍目的和范围本文旨在为前端
JSON简介及其应用
Jackson@ML
MongoDB JavaScript Node.js json JavaScript Node.js
JSON简介及其应用
[email protected] 的概念JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,采用键值对(key-value)的方式组织数据,语法类似JavaScript对象,易于人阅读和机器解析。2.JSON的作用JSON有几方面的作用如下:•在前后端数据交互中传
mongodb3.03开启认证
21jhf
mongodb
下载了最新mongodb3.03版本,当使用--auth 参数命令行开启mongodb用户认证时遇到很多问题,现总结如下:
(百度上搜到的基本都是老版本的,看到db.addUser的就是,请忽略)
Windows下我做了一个bat文件,用来启动mongodb,命令行如下:
mongod --dbpath db\data --port 27017 --directoryperdb --logp
【Spark103】Task not serializable
bit1129
Serializable
Task not serializable是Spark开发过程最令人头疼的问题之一,这里记录下出现这个问题的两个实例,一个是自己遇到的,另一个是stackoverflow上看到。等有时间了再仔细探究出现Task not serialiazable的各种原因以及出现问题后如何快速定位问题的所在,至少目前阶段碰到此类问题,没有什么章法
1.
package spark.exampl
你所熟知的 LRU(最近最少使用)
dalan_123
java
关于LRU这个名词在很多地方或听说,或使用,接下来看下lru缓存回收的实现
1、大体的想法
a、查询出最近最晚使用的项
b、给最近的使用的项做标记
通过使用链表就可以完成这两个操作,关于最近最少使用的项只需要返回链表的尾部;标记最近使用的项,只需要将该项移除并放置到头部,那么难点就出现 你如何能够快速在链表定位对应的该项?
这时候多
Javascript 跨域
周凡杨
JavaScript jsonp 跨域 cross-domain
 
linux下安装apache服务器
g21121
apache
安装apache
下载windows版本apache,下载地址:http://httpd.apache.org/download.cgi
1.windows下安装apache
Windows下安装apache比较简单,注意选择路径和端口即可,这里就不再赘述了。 2.linux下安装apache:
下载之后上传到linux的相关目录,这里指定为/home/apach
FineReport的JS编辑框和URL地址栏语法简介
老A不折腾
finereport web报表 报表软件 语法总结
JS编辑框:
1.FineReport的js。
作为一款BS产品,browser端的JavaScript是必不可少的。
FineReport中的js是已经调用了finereport.js的。
大家知道,预览报表时,报表servlet会将cpt模板转为html,在这个html的head头部中会引入FineReport的js,这个finereport.js中包含了许多内置的fun
根据STATUS信息对MySQL进行优化
墙头上一根草
status
mysql 查看当前正在执行的操作,即正在执行的sql语句的方法为:
show processlist 命令
mysql> show global status;可以列出MySQL服务器运行各种状态值,我个人较喜欢的用法是show status like '查询值%';一、慢查询mysql> show variab
我的spring学习笔记7-Spring的Bean配置文件给Bean定义别名
aijuans
Spring 3
本文介绍如何给Spring的Bean配置文件的Bean定义别名?
原始的
<bean id="business" class="onlyfun.caterpillar.device.Business">
<property name="writer">
<ref b
高性能mysql 之 性能剖析
annan211
性能 mysql mysql 性能剖析 剖析
1 定义性能优化
mysql服务器性能,此处定义为 响应时间。
在解释性能优化之前,先来消除一个误解,很多人认为,性能优化就是降低cpu的利用率或者减少对资源的使用。
这是一个陷阱。
资源时用来消耗并用来工作的,所以有时候消耗更多的资源能够加快查询速度,保持cpu忙绿,这是必要的。很多时候发现
编译进了新版本的InnoDB之后,cpu利用率上升的很厉害,这并不
主外键和索引唯一性约束
百合不是茶
索引 唯一性约束 主外键约束 联机删除
目标;第一步;创建两张表 用户表和文章表
第二步;发表文章
1,建表;
---用户表 BlogUsers
--userID唯一的
--userName
--pwd
--sex
create
线程的调度
bijian1013
java 多线程 thread 线程的调度 java多线程
1. Java提供一个线程调度程序来监控程序中启动后进入可运行状态的所有线程。线程调度程序按照线程的优先级决定应调度哪些线程来执行。
2. 多数线程的调度是抢占式的(即我想中断程序运行就中断,不需要和将被中断的程序协商)
a) 
查看日志常用命令
bijian1013
linux 命令 unix
一.日志查找方法,可以用通配符查某台主机上的所有服务器grep "关键字" /wls/applogs/custom-*/error.log
二.查看日志常用命令1.grep '关键字' error.log:在error.log中搜索'关键字'2.grep -C10 '关键字' error.log:显示关键字前后10行记录3.grep '关键字' error.l
【持久化框架MyBatis3一】MyBatis版HelloWorld
bit1129
helloworld
MyBatis这个系列的文章,主要参考《Java Persistence with MyBatis 3》。
样例数据
本文以MySQL数据库为例,建立一个STUDENTS表,插入两条数据,然后进行单表的增删改查
CREATE TABLE STUDENTS
(
stud_id int(11) NOT NULL AUTO_INCREMENT,
【Hadoop十五】Hadoop Counter
bit1129
hadoop
1. 只有Map任务的Map Reduce Job
File System Counters
FILE: Number of bytes read=3629530
FILE: Number of bytes written=98312
FILE: Number of read operations=0
FILE: Number of lar
解决Tomcat数据连接池无法释放
ronin47
tomcat 连接池 优化
近段时间,公司的检测中心报表系统(SMC)的开发人员时不时找到我,说用户老是出现无法登录的情况。前些日子因为手头上 有Jboss集群的测试工作,发现用户不能登录时,都是在Tomcat中将这个项目Reload一下就好了,不过只是治标而已,因为大概几个小时之后又会 再次出现无法登录的情况。
今天上午,开发人员小毛又找到我,要我协助将这个问题根治一下,拖太久用户难保不投诉。
简单分析了一
java-75-二叉树两结点的最低共同父结点
bylijinnan
java
import java.util.LinkedList;
import java.util.List;
import ljn.help.*;
public class BTreeLowestParentOfTwoNodes {
public static void main(String[] args) {
/*
* node data is stored in
行业垂直搜索引擎网页抓取项目
carlwu
Lucene Nutch Heritrix Solr
公司有一个搜索引擎项目,希望各路高人有空来帮忙指导,谢谢!
这是详细需求:
(1) 通过提供的网站地址(大概100-200个网站),网页抓取程序能不断抓取网页和其它类型的文件(如Excel、PDF、Word、ppt及zip类型),并且程序能够根据事先提供的规则,过滤掉不相干的下载内容。
(2) 程序能够搜索这些抓取的内容,并能对这些抓取文件按照油田名进行分类,然后放到服务器不同的目录中。
[通讯与服务]在总带宽资源没有大幅增加之前,不适宜大幅度降低资费
comsci
资源
降低通讯服务资费,就意味着有更多的用户进入,就意味着通讯服务提供商要接待和服务更多的用户,在总体运维成本没有由于技术升级而大幅下降的情况下,这种降低资费的行为将导致每个用户的平均带宽不断下降,而享受到的服务质量也在下降,这对用户和服务商都是不利的。。。。。。。。
&nbs
Java时区转换及时间格式
Cwind
java
本文介绍Java API 中 Date, Calendar, TimeZone和DateFormat的使用,以及不同时区时间相互转化的方法和原理。
问题描述:
向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于东八区(北京时间,GMT+8:00),而身处东四区的用户想要查询当天的销售记录。则需把东四区的“今天”这个时间范围转换为服务器所在时区的时间范围。
readonly,只读,不可用
dashuaifu
js jsp disable readOnly readOnly
readOnly 和 readonly 不同,在做js开发时一定要注意函数大小写和jsp黄线的警告!!!我就经历过这么一件事:
使用readOnly在某些浏览器或同一浏览器不同版本有的可以实现“只读”功能,有的就不行,而且函数readOnly有黄线警告!!!就这样被折磨了不短时间!!!(期间使用过disable函数,但是发现disable函数之后后台接收不到前台的的数据!!!)
LABjs、RequireJS、SeaJS 介绍
dcj3sjt126com
js Web
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更
[应用结构]入口脚本
dcj3sjt126com
PHP yii2
入口脚本
入口脚本是应用启动流程中的第一环,一个应用(不管是网页应用还是控制台应用)只有一个入口脚本。终端用户的请求通过入口脚本实例化应用并将将请求转发到应用。
Web 应用的入口脚本必须放在终端用户能够访问的目录下,通常命名为 index.php,也可以使用 Web 服务器能定位到的其他名称。
控制台应用的入口脚本一般在应用根目录下命名为 yii(后缀为.php),该文
haoop shell命令
eksliang
hadoop hadoop shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
MultiStateView不同的状态下显示不同的界面
gundumw100
android
只要将指定的view放在该控件里面,可以该view在不同的状态下显示不同的界面,这对ListView很有用,比如加载界面,空白界面,错误界面。而且这些见面由你指定布局,非常灵活。
PS:ListView虽然可以设置一个EmptyView,但使用起来不方便,不灵活,有点累赘。
<com.kennyc.view.MultiStateView xmlns:android=&qu
jQuery实现页面内锚点平滑跳转
ini
JavaScript html jquery html5 css
平时我们做导航滚动到内容都是通过锚点来做,刷的一下就直接跳到内容了,没有一丝的滚动效果,而且 url 链接最后会有“小尾巴”,就像#keleyi,今天我就介绍一款 jquery 做的滚动的特效,既可以设置滚动速度,又可以在 url 链接上没有“小尾巴”。
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/37.htmHTML文件代码:
&
kafka offset迁移
kane_xie
kafka
在早前的kafka版本中(0.8.0),offset是被存储在zookeeper中的。
到当前版本(0.8.2)为止,kafka同时支持offset存储在zookeeper和offset manager(broker)中。
从官方的说明来看,未来offset的zookeeper存储将会被弃用。因此现有的基于kafka的项目如果今后计划保持更新的话,可以考虑在合适
android > 搭建 cordova 环境
mft8899
android
1 , 安装 node.js
http://nodejs.org
node -v 查看版本
2, 安装 npm
可以先从 https://github.com/isaacs/npm/tags 下载 源码 解压到
java封装的比较器,比较是否全相同,获取不同字段名字
qifeifei
非常实用的java比较器,贴上代码:
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
i
记录一些函数用法
.Aky.
位运算 PHP 数据库 函数 IP
高手们照旧忽略。
想弄个全天朝IP段数据库,找了个今天最新更新的国内所有运营商IP段,copy到文件,用文件函数,字符串函数把玩下。分割出startIp和endIp这样格式写入.txt文件,直接用phpmyadmin导入.csv文件的形式导入。(生命在于折腾,也许你们觉得我傻X,直接下载人家弄好的导入不就可以,做自己的菜鸟,让别人去说吧)
当然用到了ip2long()函数把字符串转为整型数
sublime text 3 rust
wudixiaotie
Sublime Text
1.sublime text 3 => install package => Rust
2.cd ~/.config/sublime-text-3/Packages
3.mkdir rust
4.git clone https://github.com/sp0/rust-style
5.cd rust-style
6.cargo build --release
7.ctrl