diff --git a/formatters/phpCB b/formatters/phpCB
new file mode 100755
index 0000000..55cd2b9
Binary files /dev/null and b/formatters/phpCB differ
diff --git a/plugin/.autoformat.vim.swp b/plugin/.autoformat.vim.swp
new file mode 100644
index 0000000..c74802a
Binary files /dev/null and b/plugin/.autoformat.vim.swp differ
diff --git a/plugin/autoformat.vim b/plugin/autoformat.vim
new file mode 100644
index 0000000..82c375c
--- /dev/null
+++ b/plugin/autoformat.vim
@@ -0,0 +1,16 @@
+"Set the format programs for the right filetypes
+au filetype javascript let &formatexpr="JsBeautify()"
+au filetype html let &formatexpr="HtmlBeautify()"
+au filetype css let &formatexpr="CSSBeautify()"
+au filetype php let &formatprg="phpCB --space-after-if --space-after-switch --space-after-while --space-before-start-angle-bracket --space-after-end-angle-bracket --one-true-brace-function-declaration --glue-amperscore --change-shell-comment-to-double-slashes-comment --force-large-php-code-tag --force-true-false-null-contant-lowercase --align-equal-statements --comment-rendering-style PEAR --equal-align-position 50 --padding-char-count 4"
+
+"Function for formatting the entire buffer
+function g:WebideAutoformat()
+ "Save window state
+ let winview=winsaveview()
+ "Autoformat code
+ :silent exe "normal gggqG"
+ "Recall window state
+ call winrestview(winview)
+endfunction
+
diff --git a/tests/1.json b/tests/1.json
new file mode 100644
index 0000000..70e2685
--- /dev/null
+++ b/tests/1.json
@@ -0,0 +1,58 @@
+[
+ "JSON Test Pattern pass1",
+ {"object with 1 member":["array with 1 element"]},
+ {},
+ [],
+ -42,
+ true,
+ false,
+ null,
+ {
+ "integer": 1234567890,
+ "real": -9876.543210,
+ "e": 0.123456789e-12,
+ "E": 1.234567890E+34,
+ "": 23456789012E66,
+ "zero": 0,
+ "one": 1,
+ "space": " ",
+ "quote": "\"",
+ "backslash": "\\",
+ "controls": "\b\f\n\r\t",
+ "slash": "/ & \/",
+ "alpha": "abcdefghijklmnopqrstuvwyz",
+ "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
+ "digit": "0123456789",
+ "0123456789": "digit",
+ "special": "`1~!@#$%^&*()_+-={':[,]}|;.>?",
+ "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
+ "true": true,
+ "false": false,
+ "null": null,
+ "array":[ ],
+ "object":{ },
+ "address": "50 St. James Street",
+ "url": "http://www.JSON.org/",
+ "comment": "// /* */": " ",
+ " s p a c e d " :[1,2 , 3
+
+,
+
+4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
+ "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
+ "quotes": "" \u0022 %22 0x22 034 "",
+ "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
+: "A key can be any string"
+ },
+ 0.5 ,98.6
+,
+99.44
+,
+
+1066,
+1e1,
+0.1e1,
+1e-1,
+1e00,2e+00,2e-00
+,"rosebud"]
\ No newline at end of file
diff --git a/tests/css.css b/tests/css.css
new file mode 100644
index 0000000..1678791
--- /dev/null
+++ b/tests/css.css
@@ -0,0 +1 @@
+.esw{background-color:transparent;background-repeat:no-repeat;border:0;cursor:pointer;display:inline;height:15px;outline-style:none;overflow:hidden;width:24px;border-style:inset;-webkit-box-align:center;-webkit-appearance:button}.eswd{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1off6.png)}.eswd:hover{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1offhover6.png)}.eswd:active{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1offclick6.png)}.eswa{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1on6.png)}.eswa:hover{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1onhover6.png)}.eswa:active{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1onclick6.png)}.eswe{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/SRP/p1err5.png)}.esww{background-image:url(//ssl.gstatic.com/s2/oz/images/stars/po/Publisher/24x14-spinner.gif);cursor:default}.Ik{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_bluegreen_348x65.png) no-repeat;height:65px;width:348px}.Jk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_bluegreen_348x65_b.png) no-repeat;height:65px;width:348px}.Kk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_bluered_348x65.png) no-repeat;height:65px;width:348px}.Lk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_bluered_348x65_b.png) no-repeat;height:65px;width:348px}.Mk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_blueyellow_348x65.png) no-repeat;height:65px;width:348px}.Nk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_blueyellow_348x65_b.png) no-repeat;height:65px;width:348px}.Ok{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_greenblue_348x65.png) no-repeat;height:65px;width:348px}.Pk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_greenblue_348x65_b.png) no-repeat;height:65px;width:348px}.Qk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_greenred_348x65.png) no-repeat;height:65px;width:348px}.Rk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_greenred_348x65_b.png) no-repeat;height:65px;width:348px}.Sk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_greenyellow_348x65.png) no-repeat;height:65px;width:348px}.Tk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_greenyellow_348x65_b.png) no-repeat;height:65px;width:348px}.Uk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_yellowblue_348x65.png) no-repeat;height:65px;width:348px}.Vk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_yellowblue_348x65_b.png) no-repeat;height:65px;width:348px}.Wk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_yellowgreen_348x65.png) no-repeat;height:65px;width:348px}.Xk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_yellowgreen_348x65_b.png) no-repeat;height:65px;width:348px}.Yk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_yellowred_348x65.png) no-repeat;height:65px;width:348px}.Zk{background:url(//ssl.gstatic.com/s2/oz/images/hovercard/defaultimage_yellowred_348x65_b.png) no-repeat;height:65px;width:348px}.nl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_bluegreen_940x180.png) no-repeat;height:180px;width:940px}.ol{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_bluegreen_940x180_b.png) no-repeat;height:180px;width:940px}.pl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_bluered_940x180.png) no-repeat;height:180px;width:940px}.ql{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_bluered_940x180_b.png) no-repeat;height:180px;width:940px}.rl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_blueyellow_940x180.png) no-repeat;height:180px;width:940px}.sl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_blueyellow_940x180_b.png) no-repeat;height:180px;width:940px}.tl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_greenblue_940x180.png) no-repeat;height:180px;width:940px}.ul{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_greenblue_940x180_b.png) no-repeat;height:180px;width:940px}.vl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_greenred_940x180.png) no-repeat;height:180px;width:940px}.wl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_greenred_940x180_b.png) no-repeat;height:180px;width:940px}.xl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_greenyellow_940x180.png) no-repeat;height:180px;width:940px}.yl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_greenyellow_940x180_b.png) no-repeat;height:180px;width:940px}.zl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_yellowblue_940x180.png) no-repeat;height:180px;width:940px}.Al{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_yellowblue_940x180_b.png) no-repeat;height:180px;width:940px}.Bl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_yellowgreen_940x180.png) no-repeat;height:180px;width:940px}.Cl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_yellowgreen_940x180_b.png) no-repeat;height:180px;width:940px}.Dl{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_yellowred_940x180.png) no-repeat;height:180px;width:940px}.El{background:url(//ssl.gstatic.com/s2/oz/images/profiles/defaultimage_yellowred_940x180_b.png) no-repeat;height:180px;width:940px}.sFb{font:13px arial,sans-serif;margin:0}.pFb{padding:80px 0;text-align:center}.jRa{position:relative}#notify-widget-pane{position:fixed;width:100%}.a-f-e{position:relative;display:-moz-inline-box;display:inline-block}* html .a-f-e,*:first-child+html .a-f-e{display:inline}.a-p-b{margin:0;border:0;padding:0;text-decoration:none;list-style:none;vertical-align:middle;cursor:default;outline:none;font:70% arial,sans-serif;color:#000}.a-p-b-ea-w,.a-p-b-P-w{padding:0;border-style:solid;border-color:#bbb;border-top-color:#ccc;border-bottom-color:#a0a0a0}.a-p-b-ea-w{margin:0;border-width:1px 0}.a-p-b-P-w{margin:0 -1px;cursor:pointer;border-width:0 1px;background:#e3e3e3}.a-p-b-Be{position:relative;height:100%}.a-p-b-Va-Fb{position:absolute;left:0;right:0;top:0;height:.9em;overflow:hidden;background:#f9f9f9;border-bottom:.2em solid #EEEEEE}.a-p-b-y{position:relative;padding:0 8px;text-align:center;vertical-align:middle;line-height:1.8em;white-space:nowrap;color:#000}.a-p-b-F-Ha .a-p-b-P-w{border-left:1px solid #fff}.a-p-b-F-Ha.a-p-b-Q .a-p-b-P-w{border-left:1px solid #999}.a-p-b-F-Ha.a-p-b-Ka .a-p-b-P-w{border-left:1px solid #888}.a-p-b-F-yb .a-p-b-P-w{border-right-color:#bbb!important}.a-p-b-E .a-p-b-ea-w,.a-p-b-E .a-p-b-P-w{border-color:#939393}.a-p-b-Sa .a-p-b-ea-w,.a-p-b-Sa .a-p-b-P-w{border-color:#444}.a-p-b-ga .a-p-b-Va-Fb{background:#e3e3e3;border-color:#EEEEEE}.a-p-b-D .a-p-b-y{color:#888}.a-p-b-Ka .a-p-b-ea-w,.a-p-b-Ka .a-p-b-P-w{border-color:#888}.a-p-b-Ka .a-p-b-ea-w{border-bottom-color:#f7f7f7}.a-p-b-Q .a-p-b-P-w,.a-p-b-Ka .a-p-b-P-w{background:#999}.a-p-b-Q .a-p-b-Va-Fb,.a-p-b-Ka .a-p-b-Va-Fb{background:#777;border-color:#888888}.a-p-b-Q .a-p-b-y,.a-p-b-Ka .a-p-b-y{color:#fff}.a-p-b-Ma{font-weight:bold}.a-p-b,.a-p-b-ea-w{line-height:0}.a-p-b-P-w{line-height:normal}.a-p-b-F-yb,.a-p-b-F-yb .a-p-b-ea-w,.a-p-b-F-yb .a-p-b-P-w{margin-right:0!important}.a-p-b-F-Ha,.a-p-b-F-Ha .a-p-b-ea-w,.a-p-b-F-Ha .a-p-b-P-w{margin-left:0!important}.a-oa-b{margin:0 8px 0 0;padding:3px 8px;text-align:center;vertical-align:middle;white-space:nowrap;cursor:default;outline:none;font:70% arial,sans-serif;color:#000;border:1px solid #bbb;border-top-color:#ccc;border-bottom-color:#a0a0a0;border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px}.a-oa-b-E{border-color:#939393!important}.a-oa-b-Sa,.a-oa-b-ga{border-color:#444!important}.a-oa-b-Ka{border-color:#888!important;color:#fff}.a-oa-b-D{color:#888}.a-oa-b-Ma{font-weight:bold}.a-oa-b-F-yb{margin-right:0!important;border-right:1px solid #bbb;border-top-right-radius:0;border-bottom-right-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.a-oa-b-F-Ha{border-left-width:0;margin-left:0!important;border-top-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0}.a-oa-b-F-Ha.a-oa-b-E,.a-oa-b-F-Ha.a-oa-b-Sa,.a-oa-b-F-Ha.a-oa-b-ga{border-left-width:1px;padding-left:7px}.a-oa-b{background:-webkit-gradient(linear,0% 40%,0% 70%,from(#f9f9f9),to(#e3e3e3))}.a-oa-b-ga{background:-webkit-gradient(linear,0% 40%,0% 70%,from(#e3e3e3),to(#f9f9f9))}.a-oa-b-Ka{background:-webkit-gradient(linear,0% 40%,0% 70%,from(#777),to(#999))}.Kh{-webkit-box-shadow:0 4px 10px #8b8b8b;-moz-box-shadow:0 4px 10px #8b8b8b;box-shadow:0 4px 10px #8b8b8b;padding:5px}.c-s{-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);-moz-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2);background-color:#fff;border:1px solid;border-color:#bbb #bbb #a8a8a8;padding:16px;position:absolute;z-index:1201!important}.c-s-od{background:url("//ssl.gstatic.com/ui/v1/icons/common/x_8px.png") no-repeat;border:1px solid transparent;height:21px;opacity:.4;outline:0;position:absolute;right:2px;top:2px;width:21px}.c-s-od:focus{border:1px solid #4d90fe;opacity:.8}.c-s-Na{position:absolute}.c-s-Na .c-s-pa,.c-s-Na .c-s-ta{display:block;height:0;position:absolute;width:0}.c-s-Na .c-s-pa{border:9px solid}.c-s-Na .c-s-ta{border:8px solid}.c-s-eb{bottom:0}.c-s-nb{top:-9px}.c-s-lb{left:-9px}.c-s-mb{right:0}.c-s-eb .c-s-pa{left:-9px}.c-s-nb .c-s-pa{border-color:#bbb transparent;left:-9px}.c-s-eb .c-s-pa{border-color:#a8a8a8 transparent}.c-s-eb .c-s-ta,.c-s-nb .c-s-ta{border-color:#fff transparent;left:-8px}.c-s-eb .c-s-pa,.c-s-eb .c-s-ta{border-bottom-width:0}.c-s-nb .c-s-pa{border-top-width:0}.c-s-nb .c-s-ta{border-top-width:0;top:1px}.c-s-lb .c-s-pa,.c-s-mb .c-s-pa{border-color:transparent #bbb;top:-9px}.c-s-lb .c-s-ta,.c-s-mb .c-s-ta{border-color:transparent #fff;top:-8px}.c-s-lb .c-s-pa{border-left-width:0}.c-s-lb .c-s-ta{border-left-width:0;left:1px}.c-s-mb .c-s-pa,.c-s-mb .c-s-ta{border-right-width:0}.c-b{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;cursor:default;font-size:11px;font-weight:bold;text-align:center;margin-right:16px;height:27px;line-height:27px;min-width:54px;outline:0;padding:0 8px}.c-b-E{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1)}.c-b-X{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.c-b .c-b-la{margin-top:-3px;vertical-align:middle}.c-b-Ca{margin-left:5px}.c-b-De{min-width:34px;padding:0}.c-b-F-sa,.c-b-F-Da{z-index:1}.c-b-F-sa.c-b-D{z-index:0}.c-b-Q.c-b-F-sa,.c-b-Q.c-b-F-Da{z-index:2}.c-b-F-sa:focus,.c-b-F-Da:focus,.c-b-E.c-b-F-sa,.c-b-E.c-b-F-Da{z-index:3}.c-b-F-sa{margin-left:-1px;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-bottom-left-radius:0;border-top-left-radius:0}.c-b-F-Da{margin-right:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.c-b.c-b-D:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.c-b-J{background-color:#4d90fe;background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;color:#fff}.c-b-J.c-b-E{background-color:#357ae8;background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7}.c-b-J:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:1px solid rgba(0,0,0,0);outline:1px solid #4d90fe;outline:0 rgba(0,0,0,0)}.c-b-J.c-b-V-Ja{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.c-b-J:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3)}.c-b-J.c-b-D{background:#4d90fe;filter:alpha(opacity=50);opacity:.5}.c-b-fa{background-color:#3d9400;background-image:-webkit-linear-gradient(top,#3d9400,#398a00);background-image:-moz-linear-gradient(top,#3d9400,#398a00);background-image:-ms-linear-gradient(top,#3d9400,#398a00);background-image:-o-linear-gradient(top,#3d9400,#398a00);background-image:linear-gradient(top,#3d9400,#398a00);border:1px solid #29691d;color:#fff;text-shadow:0 1px rgba(0,0,0,0.1)}.c-b-fa.c-b-E{background-color:#368200;background-image:-webkit-linear-gradient(top,#3d9400,#368200);background-image:-moz-linear-gradient(top,#3d9400,#368200);background-image:-ms-linear-gradient(top,#3d9400,#368200);background-image:-o-linear-gradient(top,#3d9400,#368200);background-image:linear-gradient(top,#3d9400,#368200);border:1px solid #2d6200;text-shadow:0 1px rgba(0,0,0,0.3)}.c-b-fa:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:1px solid rgba(0,0,0,0);outline:1px solid #3d9400;outline:0 rgba(0,0,0,0)}.c-b-fa.c-b-V-Ja{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.c-b-fa:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3)}.c-b-fa.c-b-D{background:#3d9400;filter:alpha(opacity=50);opacity:.5}.c-b-Ma{background-color:#d14836;background-image:-webkit-linear-gradient(top,#dd4b39,#d14836);background-image:-moz-linear-gradient(top,#dd4b39,#d14836);background-image:-ms-linear-gradient(top,#dd4b39,#d14836);background-image:-o-linear-gradient(top,#dd4b39,#d14836);background-image:linear-gradient(top,#dd4b39,#d14836);border:1px solid transparent;color:#fff;text-shadow:0 1px rgba(0,0,0,0.1);text-transform:uppercase}.c-b-Ma.c-b-E{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.2);box-shadow:0 1px 1px rgba(0,0,0,0.2);background-color:#c53727;background-image:-webkit-linear-gradient(top,#dd4b39,#c53727);background-image:-moz-linear-gradient(top,#dd4b39,#c53727);background-image:-ms-linear-gradient(top,#dd4b39,#c53727);background-image:-o-linear-gradient(top,#dd4b39,#c53727);background-image:linear-gradient(top,#dd4b39,#c53727);border:1px solid #b0281a;border-bottom-color:#af301f}.c-b-Ma:focus{-webkit-box-shadow:inset 0 0 0 1px #fff;-moz-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;border:1px solid #fff;border:1px solid rgba(0,0,0,0);outline:1px solid #d14836;outline:0 rgba(0,0,0,0)}.c-b-Ma.c-b-V-Ja{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.c-b-Ma:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);background-color:#b0281a;background-image:-webkit-linear-gradient(top,#dd4b39,#b0281a);background-image:-moz-linear-gradient(top,#dd4b39,#b0281a);background-image:-ms-linear-gradient(top,#dd4b39,#b0281a);background-image:-o-linear-gradient(top,#dd4b39,#b0281a);background-image:linear-gradient(top,#dd4b39,#b0281a);border:1px solid #992a1b}.c-b-Ma.c-b-D{background:#d14836;filter:alpha(opacity=50);opacity:.5}.c-b-T{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);color:#444;border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1)}.c-b-T.c-b-E,.c-b-T.c-b-V-Ja.c-b-E{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;color:#333}.c-b-T:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.c-b-T.c-b-X,.c-b-T.c-b-V-Ja.c-b-X{background-color:#eee;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #ccc;color:#333}.c-b-T.c-b-Q,.c-b-T.c-b-V-Ja.c-b-Q{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333}.c-b-T:focus{border:1px solid #4d90fe}.c-b-T.c-b-V-Ja{border:1px solid #dcdcdc}.c-b-T.c-b-D{background:#fff;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);color:#b8b8b8}.c-b-T .c-b-la{opacity:.55}.c-b-T.c-b-Q .c-b-la,.c-b-T.c-b-X .c-b-la,.c-b-T.c-b-E .c-b-la{opacity:.9}.c-b-T.c-b-D .c-b-la{filter:alpha(opacity=33);opacity:.333}.c-b-x{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:1px solid transparent;font-size:13px;font-weight:normal;height:21px;line-height:21px;margin-right:1px;min-width:0;padding:0}.c-b-x.c-b-E,.c-b-x.c-b-X,.c-b-x:focus,.c-b-x:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.c-b-x .c-b-la{height:21px;opacity:.55;width:21px}.c-b-x .c-b-Ca{display:inline-block;margin:0;padding:0 1px}.c-b-x.c-b-X .c-b-la,.c-b-x.c-b-E .c-b-la{opacity:.9}.c-b-x.c-b-D .c-b-la{filter:alpha(opacity=33);opacity:.333}.c-b-x:focus{border:1px solid #4d90fe}.c-b-x.c-b-V-Ja{border:1px solid transparent}.c-b-La{background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;border:1px solid rgba(0,0,0,0.1);color:#444;height:17px;line-height:17px;min-width:22px;text-shadow:0 1px rgba(0,0,0,0.1)}.c-b-La.c-b-E,.c-b-La.c-b-V-Ja.c-b-E{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #c6c6c6;text-shadow:0 1px rgba(0,0,0,0.3)}.c-b-La:active{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.c-b-La.c-b-Q,.c-b-La.c-b-V-Ja.c-b-Q{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#e0e0e0;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333}.c-b-La:focus{border:1px solid #4d90fe}.c-b-La.c-b-V-Ja{border:1px solid #dcdcdc}.c-b-La.c-b-D{background:#fff;border:1px solid #f3f3f3;border:1px solid rgba(0,0,0,0.05);color:#b8b8b8}.c-G{max-width:300px;z-index:1100}.a-v{z-index:20000}.Ct{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hangouts-4923bdd399b20dbb832fefd7b274d8fc.png) 0 0;background-size:77px 73px;width:77px;height:73px}.pm{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -157px;background-size:16px 256px;width:13px;height:13px}.dk{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -129px;background-size:16px 256px;width:13px;height:13px}.ek{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -115px;background-size:16px 256px;width:13px;height:13px}.AZ0Wkb{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -14px;background-size:16px 256px;width:16px;height:16px}.fk{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -87px;background-size:16px 256px;width:13px;height:13px}.Kf{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -241px;background-size:16px 256px;width:15px;height:15px}.gk{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/hovercard-0af0adcac69cbc45a6c314720953b4e0.png) 0 -31px;background-size:16px 256px;width:13px;height:13px}.c-b-fa.u-qa-Ba-b .u-qa-Ba-ed{background:url(//ssl.gstatic.com/s2/oz/images/circles/cpw.png) no-repeat scroll 0 -28px;height:13px;margin-right:5px;top:3px;width:13px}.c-b-fa.u-qa-Ba-Kg .u-qa-Ba-ed{background-position:0 -42px;height:10px;top:1px;width:10px}.u-qa-Ba-b{margin:0;overflow:hidden;text-overflow:ellipsis;text-transform:none;white-space:nowrap;word-wrap:normal}.u-qa-Ba-Kg{height:16px!important;line-height:16px!important}.u-qa-Lc-Kc{background:url(//www.google.com/images/spin-10.gif) no-repeat center;position:absolute;border:0;left:0;height:10px;width:100%}.u-qa-Lc-Ge{background-color:#9b9b9b;background-image:-webkit-linear-gradient(top,#9e9e9e,#989898);background-image:-moz-linear-gradient(top,#9e9e9e,#989898);background-image:-ms-linear-gradient(top,#9e9e9e,#989898);background-image:-o-linear-gradient(top,#9e9e9e,#989898);background-image:linear-gradient(top,#9e9e9e,#989898);border:1px solid #989898;color:white}.u-qa-Lc-Ge:hover{background-color:#969696;background-image:-webkit-linear-gradient(top,#9e9e9e,#8e8e8e);background-image:-moz-linear-gradient(top,#9e9e9e,#8e8e8e);background-image:-ms-linear-gradient(top,#9e9e9e,#8e8e8e);background-image:-o-linear-gradient(top,#9e9e9e,#8e8e8e);background-image:linear-gradient(top,#9e9e9e,#8e8e8e);border:1px solid #888888}.u-qa-Lc-Ge.a-b-X{background-color:#8e8e8e;background-image:-webkit-linear-gradient(top,#9e9e9e,#7e7e7e);background-image:-moz-linear-gradient(top,#9e9e9e,#7e7e7e);background-image:-ms-linear-gradient(top,#9e9e9e,#7e7e7e);background-image:-o-linear-gradient(top,#9e9e9e,#7e7e7e);background-image:linear-gradient(top,#9e9e9e,#7e7e7e);border:1px solid #787878}.c-mc{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;border:1px solid #d9d9d9;border-top:1px solid #c0c0c0;font-size:13px;height:25px;padding:1px 8px}.c-mc:focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);border:1px solid #4d90fe;outline:none}.vi{margin-top:16px;width:320px}.Fs{margin:10px 0 5px 0}.Gs{font:normal 13px arial,sans-serif;padding:2px 0}.am{float:right;padding-left:5px}.Hs{background-color:#fff;border:0;color:#000;margin-top:0}.Is{padding:0!important;width:125px}.Th{font:normal 13px arial,sans-serif;height:20px;margin-bottom:2px;width:294px}.Es{padding:0}.Ls{color:#444;font-weight:normal;margin-bottom:8px}.Wl,.Vl{padding:0 10px 0 0}.vi .ye{margin-top:10px;width:302px}.Ms{cursor:default;font-size:13px;list-style:none;margin:0;outline:none;padding:0}.ob{color:#666;cursor:pointer;height:18px;padding:8px 11px;position:relative}.Ns .ob{float:left}.ob-E{background-color:#eee;color:#333;padding:8px 11px 7px 11px;z-index:1}.ob-D{background-color:#ccc;color:#d14836}.ob-X{color:#d14836;font-weight:bold;z-index:1}.ob-X.ob-E{padding:8px 11px}.ip .ob-X{background:url("//ssl.gstatic.com/s2/oz/images/sge/tab_arrow.png") no-repeat scroll center bottom transparent}.hp .ob-X{background:url("//ssl.gstatic.com/s2/oz/images/nav_arrow_down.gif") no-repeat scroll center top transparent}.ye{background-color:#fff;padding:0 3px;width:204px}.un{max-height:146px;overflow-y:auto}.rn{-moz-user-select:none;-o-text-overflow:ellipsis;-o-user-select:none;-webkit-user-select:none;cursor:pointer;line-height:17px;overflow:hidden;padding:2px 0 3px 6px;text-overflow:ellipsis;user-select:none;white-space:nowrap}.sn{margin-bottom:1px!important;margin-right:8px!important;outline:none}.tn{-o-text-overflow:ellipsis;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.qg{background-color:#fff;color:#333;float:right;padding:0 5px 0 8px;position:relative}.Ze{border-top:1px solid #ebebeb;margin:3px 0}.kn{border-top:1px solid #ebebeb;padding:5px 6px 5px 6px}.ln{border-bottom:1px solid #ebebeb;margin-bottom:3px;padding:0 6px 5px 6px}.on{color:#36c!important;cursor:pointer;font-size:13px!important;outline:none;padding:1px 2px}.nn{margin:3px 0!important;padding:0 0 0 5px!important}.mn{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;float:right;height:27px;margin:3px 0 0 0;padding:0 4px;vertical-align:top}.pn{position:relative;top:10px;vertical-align:top}.Js{color:#f00;font-style:italic;margin-top:10px}.h-sb-Vm{background:url(//ssl.gstatic.com/s2/oz/images/circles/circle-logo.png) no-repeat scroll right bottom;width:395px;padding:15px}.h-sb-Xm{font-weight:bold}.h-sb-Wm{margin-left:0;padding-left:15px}.h-sb-Qd{margin-bottom:10px}.af{height:100px;margin:10px 10px 10px 0;width:310px}.ac{height:100px;width:310px;margin:0;margin-left:100px}.kt{margin-right:12px}.bf{color:#666;font:13px arial,sans-serif;overflow:hidden;padding:2px 0;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:200px}.ac .bf{max-width:126px;text-overflow:ellipsis}.Tc{color:#36c;font-weight:bold;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:200px}.ac .Tc{width:126px;text-overflow:ellipsis;color:#000}.Ii{line-height:18px;overflow:hidden;text-overflow:ellipsis}.ac .Ii{margin-top:10px;white-space:normal;max-height:36px}.Hi{margin-top:10px}.ac .Hi{margin:0;float:right}.ac .u-qa-Ba-b{min-width:0;padding:0 15px}.jt{color:#666;font-size:8pt;margin-top:6px}.Ki{color:#999;font-size:12px;font-weight:bold}.Je{background:url(//ssl.gstatic.com/s2/oz/images/sge/x_icon.png) no-repeat center center;cursor:pointer;height:15px;position:absolute;right:15px;top:12px;width:15px;z-index:10000}.Mb{height:60px;width:195px}.Ji{margin-top:10px}.Mb .af{height:50px}.Mb .Tc{width:110px}.be .Ji{margin-top:0}.be .Mb{background-color:#eee;height:120px;width:320px}.be .Mb .af{height:100px;margin:10px 0;padding-left:10px}.be .Mb .Tc{width:185px}.zb{width:744px;background-color:#eee;margin-left:100px;margin-bottom:46px;height:110px}.zb .Ki{color:#777;padding:10px}.zb .Mb{width:430px;margin-left:-90px}.zb .dd{margin-right:60px}.zb .dd .Tc{width:100px}.zb .dd .bf{max-width:116px}.zb .dd .ac{width:300px}.zb .Je{top:0;right:0}.zb .dd .Je{right:10px}.Ks{border-color:#d6d6d6;border-width:1px;height:20px;width:360px}.c-H{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;background-color:rgba(255,255,255,.05);border:1px solid #c6c6c6;border:1px solid rgba(155,155,155,.57);font-size:1px;height:11px;margin:0 4px 0 1px;outline:0;vertical-align:text-bottom;width:11px}.c-H-oe{background-color:#fff;background-color:rgba(255,255,255,.65)}.c-H-Q{background-color:#fff;background-color:rgba(255,255,255,.65)}.c-H-E{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1);border:1px solid #b2b2b2}.c-H-ga{background-color:#ebebeb}.c-H-Sa{border:1px solid #4d90fe}.c-H-Vf.c-H-Sa{border:1px solid #c6c6c6;border:1px solid rgba(155,155,155,.57)}.c-H-D,.c-H-Vf.c-H-D{background-color:#fff;border:1px solid #f1f1f1;cursor:default}.c-H-qc{height:15px;outline:0;width:15px;left:0;position:relative;top:-3px}.c-H-oe .c-H-qc{background:url(//ssl.gstatic.com/ui/v1/menu/checkmark-partial.png) no-repeat -5px -3px}.c-H-Q .c-H-qc{background:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png) no-repeat -5px -3px}.h-Kb-H{background:url('//ssl.gstatic.com/s2/oz/images/list-checkbox-sprite.png') no-repeat 0;cursor:pointer;display:-moz-inline-box;display:inline-block;font-size:1px;height:13px;margin:0 4px 0 1px;padding-top:1px;vertical-align:text-bottom;width:12px}.h-Kb-H-Q{background-position:-12px}.a-H{border:1px solid #1c5180;cursor:pointer;display:-moz-inline-box;display:inline-block;font-size:1px;height:11px;margin:0 4px 0 1px;vertical-align:text-bottom;width:11px}.a-H-Q{background:#fff url('//ssl.gstatic.com/s2/oz/images/check-sprite.gif') no-repeat 2px center}.a-H-yf{background:#fff}.a-H-D{border:1px solid lightgray;cursor:default!important;background-position:-7px}.Cn{-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.3);-moz-box-shadow:0 2px 2px rgba(0,0,0,0.3);box-shadow:0 2px 2px rgba(0,0,0,0.3);background:#fff;border:1px solid #aaa;cursor:default;font:normal 13px arial,sans-serif;outline:none;position:absolute;z-index:20000}.Dn{position:absolute}.yn{line-height:0;vertical-align:top}.An{padding-top:5px;width:210px}.wn{padding:10px;width:175px}.xn{margin-bottom:10px}.vn{position:absolute;left:auto;top:-9000px;width:1px;height:1px;overflow:hidden}.En{border-bottom:1px solid #aaa;line-height:1.4;padding-bottom:10px;margin-bottom:10px}.Wg{padding:10px;width:190px}.Re{color:#36c;cursor:pointer}.Re:hover{text-decoration:underline}.Bn{color:#aaa}.qn{padding:0 5px 0 5px}.c-A::-webkit-scrollbar{height:16px;overflow:visible;width:16px}.c-A::-webkit-scrollbar-button{height:0;width:0}.c-A::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent;border-width:0 0 0 4px}.c-A::-webkit-scrollbar-track:horizontal{border-width:4px 0 0}.c-A::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}.c-A::-webkit-scrollbar-track:horizontal:hover{box-shadow:inset 0 1px 0 rgba(0,0,0,.1)}.c-A::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07)}.c-A::-webkit-scrollbar-track:horizontal:active{box-shadow:inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07)}.c-A-Aa.c-A::-webkit-scrollbar-track:hover{background-color:rgba(255,255,255,.1);box-shadow:inset 1px 0 0 rgba(255,255,255,.2)}.c-A-Aa.c-A::-webkit-scrollbar-track:horizontal:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.2)}.c-A-Aa.c-A::-webkit-scrollbar-track:active{background-color:rgba(255,255,255,.1);box-shadow:inset 1px 0 0 rgba(255,255,255,.25),inset -1px 0 0 rgba(255,255,255,.15)}.c-A-Aa.c-A::-webkit-scrollbar-track:horizontal:active{box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -1px 0 rgba(255,255,255,.15)}.c-A::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.2);background-clip:padding-box;border:solid transparent;border-width:1px 1px 1px 6px;min-height:28px;padding:100px 0 0;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}.c-A::-webkit-scrollbar-thumb:horizontal{border-width:6px 1px 1px;padding:0 0 0 100px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset -1px 0 0 rgba(0,0,0,.07)}.c-A::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}.c-A::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,0.5);box-shadow:inset 1px 1px 3px rgba(0,0,0,0.35)}.c-A-Aa.c-A::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.3);box-shadow:inset 1px 1px 0 rgba(255,255,255,.15),inset 0 -1px 0 rgba(255,255,255,.1)}.c-A-Aa.c-A::-webkit-scrollbar-thumb:horizontal{box-shadow:inset 1px 1px 0 rgba(255,255,255,.15),inset -1px 0 0 rgba(255,255,255,.1)}.c-A-Aa.c-A::-webkit-scrollbar-thumb:hover{background-color:rgba(255,255,255,.6);box-shadow:inset 1px 1px 1px rgba(255,255,255,.37)}.c-A-Aa.c-A::-webkit-scrollbar-thumb:active{background-color:rgba(255,255,255,.75);box-shadow:inset 1px 1px 3px rgba(255,255,255,.5)}.c-A-Eb.c-A::-webkit-scrollbar-track{border-width:0 1px 0 6px}.c-A-Eb.c-A::-webkit-scrollbar-track:horizontal{border-width:6px 0 1px}.c-A-Eb.c-A::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 1px 1px 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}.c-A-Eb.c-A-Aa.c-A::-webkit-scrollbar-track:hover{background-color:rgba(255,255,255,.07);box-shadow:inset 1px 1px 0 rgba(255,255,255,.25),inset -1px -1px 0 rgba(255,255,255,.15)}.c-A-Eb.c-A::-webkit-scrollbar-thumb{border-width:0 1px 0 6px}.c-A-Eb.c-A::-webkit-scrollbar-thumb:horizontal{border-width:6px 0 1px}.c-A::-webkit-scrollbar-corner{background:transparent}body.c-A::-webkit-scrollbar-track-piece{background-clip:padding-box;background-color:#f5f5f5;border:solid #fff;border-width:0 0 0 3px;box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px 0 0 rgba(0,0,0,.07)}body.c-A::-webkit-scrollbar-track-piece:horizontal{border-width:3px 0 0;box-shadow:inset 0 1px 0 rgba(0,0,0,.14),inset 0 -1px 0 rgba(0,0,0,.07)}body.c-A::-webkit-scrollbar-thumb{border-width:1px 1px 1px 5px}body.c-A::-webkit-scrollbar-thumb:horizontal{border-width:5px 1px 1px}body.c-A::-webkit-scrollbar-corner{background-clip:padding-box;background-color:#f5f5f5;border:solid #fff;border-width:3px 0 0 3px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.14)}.Qf{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.Zb{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.cc{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.fh{max-height:300px;overflow-x:hidden;overflow-y:auto;text-overflow:ellipsis}.Li{padding-top:1px;overflow:hidden;white-space:nowrap}.Wi{border:0;margin-right:4px;vertical-align:middle}.Xi{width:220px}.Yi{font-weight:bold;margin-bottom:10px;padding:0 20px 0 0}.Bp{margin-top:5px}.Fw{float:left;max-width:100px;margin-right:10px;margin-top:3px;text-align:center}.Qw{margin-left:110px}.Kw{margin-top:5px}.Lw{padding-left:3px;font-size:11px;color:#515151}.Pw{display:inline-block}.Dh{background:transparent no-repeat center left;padding-left:12px}.Ow{background-image:url(//ssl.gstatic.com/s2/tt/images/rating-star-on.png)}.Nw{background-image:url(//ssl.gstatic.com/s2/tt/images/rating-star-off.png)}.Mw{background-image:url(//ssl.gstatic.com/s2/tt/images/rating-star-half.png)}.Hw{margin-top:10px;margin-right:10px;border:1px solid #dddcdc;white-space:nowrap}.Iw{cursor:pointer;font-size:11px;color:#fff;line-height:1.4;text-transform:uppercase}.Jw{display:block;padding:3px 7px;border:1px solid #fff;background-color:#a5a5a5}.Gw{color:#36c}.n-m-pc{border-width:0;cursor:pointer;margin:7px 7px 7px 0;position:relative}.n-m-pc-aa{color:#0152a6;height:1.5em;overflow:hidden;white-space:nowrap}.n-m-Av{float:left;margin-right:8px;position:relative}.n-m-pc-Vb{display:block;max-height:120px;position:relative;top:0;width:auto}.n-m-zv{margin:0;padding:0}.n-m-jv{color:#000;font-size:13px;margin-bottom:.5em}.n-m-ad{color:#799add;font-size:13px}.n-m-pc-db{margin-bottom:.5em}.n-m-Ce-Rg{color:#080;font-size:13px}.n-m-he{background:url(//ssl.gstatic.com/s2/tt/images/media-external-icon.png);bottom:0;display:none;height:22px;position:absolute;right:0;width:22px}.n-m-E .n-m-he{display:block}.Aw{margin-left:60px;min-height:52px;padding-bottom:6px}.um{color:#999}.Cw{font-weight:bold;vertical-align:top}.zw{background:url(//ssl.gstatic.com/s2/oz/images/stream/location_checkin.png) no-repeat;display:inline-block;height:13px;margin-top:1px;padding-right:5px;width:13px}.Dw{border:1px solid transparent;float:left;height:48px;margin-left:-59px;margin-top:1px;width:48px}.Ew{border:1px solid #ddd;float:left;height:50px;margin-left:-60px;width:50px}.Bw{background:url(//ssl.gstatic.com/s2/oz/images/stream/location_map_pin_shadow.png) no-repeat;float:left;height:20px;margin-left:-40px;margin-top:10px;position:relative;width:25px}.n-m-ia{margin-bottom:7px;margin-top:5px}.n-m-Z{font-size:13px;font-weight:bold;line-height:1.4;margin-bottom:4px}.n-m-Z-o{vertical-align:middle}.n-m-Xj{margin-right:5px;margin-top:2px;width:16px;height:16px;float:left}.n-m{border-width:0;cursor:pointer}.n-m-fb{max-width:402px;overflow:hidden;position:relative}.n-m-Ce-Ap,.n-m-za-Of .n-m-za-aa{color:#000;line-height:1.4;margin-bottom:3px;margin-top:5px;max-width:402px}.n-m-Ce-o{margin-top:5px;line-height:1.4}.n-m-Pf-db,.n-m-Nb-db{line-height:1.4}.n-m-Pf-db,.n-m-Nb-db{display:table}.n-m-Y-aa{max-width:402px;padding:3px 5px}.n-m-za{display:inline-block;max-width:402px}.n-m-Uc-Y{margin-bottom:5px;max-height:301px;max-width:402px}.n-m-rb-Y{float:left;margin-right:5px;max-height:46px;max-width:62px}.n-m-Mh-Y{float:left;margin-bottom:5px;margin-right:10px;max-height:147px;max-width:196px}.n-m-If-Y{float:left;margin-bottom:5px;margin-right:5px;max-height:98px;max-width:131px}.n-m-Mh-Y-Mc,.n-m-If-Y-Mc,.n-m-rb-Y-Mc{margin-right:0}.n-m-Nb-Y,.n-m-Pf-Y,.n-m-za-Nm .n-m-za{float:left;margin-right:10px;margin-top:3px;max-height:120px;max-width:402px}.n-m-Jc{background:url(//ssl.gstatic.com/s2/tt/images/play-overlay.png) no-repeat;height:77px;left:50%;margin-left:-38px;opacity:.8;position:absolute;top:50%;margin-top:-38px;width:77px}.n-m-za-Nm .n-m-Jc{background:url(//ssl.gstatic.com/s2/tt/images/play-overlay-mini.png) no-repeat;bottom:5px;height:24px;left:auto;margin:0;opacity:1;right:5px;top:auto;width:24px}.n-m-V,.n-m-se{clear:both}.n-m .Yg{left:0;position:absolute;top:0;z-index:1}.n-m-O-ia{border-top:2px solid #e68034;font-family:arial,sans-serif;max-width:402px;padding-top:7px}.n-m-O-Hv{margin-top:7px;max-width:402px}.n-m-O-Ia-ia{border:1px solid #d7d7d7;float:left;height:100px;margin-right:7px;padding:1px;width:100px}.n-m-O-Ia-ia:hover{border-color:#999}.n-m-O-Ia-Gv{display:block;margin:auto}.n-m-O-b-Oe{border:1px solid #ddd;display:block;float:left;margin-right:5px;margin-top:5px;padding:1px;text-transform:uppercase}.n-m-O-b-Oe:hover{text-decoration:none}.n-m-O-b{background-color:#a5a5a5;color:#fff;font-size:11px;font-weight:bold;height:22px;line-height:22px;padding:0 10px}.n-m-O-b-Gd{color:#fff;font-size:11px;font-weight:bold;height:22px;line-height:22px;padding:0 10px}.n-m-O-b:hover,.n-m-O-b-Gd{background-color:#56b4c9}.n-m-O-ud-o,.n-m-O-ud-o:hover{text-decoration:none}.n-m-O-vw{margin-top:7px}.n-m-O-Z,.n-m-O-Jm,.n-m-O-Ia{overflow:hidden;white-space:nowrap}.n-m-O-Z{color:#333;font-size:16px;font-weight:bold;line-height:20px}.n-m-O-Jm{color:#333;font-size:10.5px;line-height:18px;text-transform:uppercase}.n-m-O-Ia{color:#7f7f7f;font-size:10.5px;line-height:18px;text-transform:uppercase;margin-bottom:6px}.n-m-O-Sm{color:#f00;font-size:10.5px;line-height:11px;text-transform:uppercase}.n-m-O-Gc-Hc-y{float:left;max-width:99%;overflow:hidden}.n-m-O-Gc-Hc-Cf-Uc{background:url(//ssl.gstatic.com/music/fe/plus/9c4d7f70c3c7ea7230d23089e5a30451f0f93f31/fade_out_white.png);float:right;height:20px;margin-left:-15px;padding:0;width:15px}.n-m-O-Gc-Hc-Cf-rb{background:url(//ssl.gstatic.com/music/fe/plus/9c4d7f70c3c7ea7230d23089e5a30451f0f93f31/fade_out_white.png);float:right;margin-left:-15px;padding:0;width:15px;height:18px}.n-m-O-ce{background:url(//ssl.gstatic.com/music/fe/plus/9c4d7f70c3c7ea7230d23089e5a30451f0f93f31/preview_music_logo_play.png);float:right;height:23px;margin-top:7px;width:97px}.n-m-O-Km{color:#8e}.n-m-O-Lm{color:#d77428}.n-m-O-Km,.n-m-O-Lm{border:1px solid;font-size:9px;line-height:11px;margin-top:12px;padding:0 2px;text-transform:uppercase;float:left}.Gb{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff;clear:both;font-size:13px;line-height:1.4;margin:20px 0 20px 68px;outline:none;position:relative;width:497px;word-wrap:break-word}.Jd,.Gg,.Gg.h-J-o,.Jd .Gl,.fe{color:#999;font-size:11px}.Gg{margin-left:10px}.cG{height:20em;width:50em}.bG{white-space:pre;color:#008000;clear:both}.Op{border-bottom:1px solid #ccc;min-height:0;padding:0 0 12px 0}.RG{color:#999;padding-bottom:3px;padding-top:12px}.QG{float:left;height:32px;margin:3px 12px 12px 0;width:32px}.sm .Hn,.sm .In{margin-left:44px}.FI.c-s{z-index:2!important}.XG{float:left;font-weight:bold;margin-right:15px}.UG{border:1px solid #ececec}.TG,.WG{font-weight:bold}.SG{position:relative;padding-bottom:8px}.VG{padding-bottom:10px}.TF{margin:10px 0;min-height:183px;position:relative}.UF{border-spacing:0}.Xu{background-image:url('//ssl.gstatic.com/s2/oz/images/sge/new_circle_open.png');background-repeat:no-repeat;height:183px;margin-right:16px;width:183px}.VF{filter:alpha(opacity=50);opacity:.5;color:#777;font-weight:bold;font-size:18px;position:absolute;top:104px;text-align:center;width:183px}.YF{position:relative}.XF{-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;background-position:center center;background-repeat:no-repeat;background-size:30px;height:30px;overflow:hidden;position:absolute;width:30px;-moz-background-size:30px;-webkit-background-size:30px}.ZF{font-size:13px;line-height:1.35}.FG{color:#999;margin-bottom:8px}.Xu .jq{bottom:87px;color:#36c;outline:0;padding-left:45px;position:absolute;text-align:center;width:93px}.WF{margin-bottom:8px}.MF{float:left;font-weight:bold;margin:0 15px 10px 0}.LF{margin-bottom:12px;overflow:hidden}.NF{margin-bottom:8px}.IF,.KF{font-weight:bold}.HF{padding-bottom:8px}.JF{border-bottom:1px solid #ccc;margin-bottom:16px;padding:3px 0 4px}.GE{margin-top:10px}.pq{font-weight:bold;line-height:1.4;margin-bottom:16px}.nq{text-decoration:none}.oq{color:#656565;font-weight:normal;line-height:1.4;margin:16px 0 0 0}.tG{float:left;width:48px;height:16px;margin-left:-67px;margin-top:51px;background:url(//ssl.gstatic.com/s2/oz/images/stream/icon_live_active.png) no-repeat}.pG{font-size:0;margin-top:12px;position:relative;width:402px}.qG{height:226px;width:402px}.kj{background:#f4f4f4;padding:12px 16px}.mq{line-height:1.4;padding-bottom:8px}.go{color:#666;font-weight:bold;margin-bottom:1px;width:380px}.rG{position:absolute;right:0;top:8px}.hq{color:#999}.Fg{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;margin-bottom:1px;margin-right:1px}.sG{margin-bottom:10px}.PF{margin-bottom:6px}.vG{color:#999;margin-bottom:8px}.wG{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/spark-b3c1eadba68535768b138cf1c9923875.png) 0 0;height:12px;padding-right:5px;width:12px}.OF{font-style:italic;margin:5px 0}.xG{background:url(//ssl.gstatic.com/s2/oz/images/interest/sparks-a0da3cc9b7901b10e9cc446c0ab09d38.png) no-repeat;border:0;float:left;height:48px;margin-left:-68px;width:48px}.IG{margin-bottom:10px;min-height:0}.Ch{color:#999}.HG{margin-top:10px}.GG{margin-bottom:3px}.MG{clear:left;float:left;padding:0 5px 5px 0;text-align:left}.LG{padding-right:5px;vertical-align:middle}.NG{font-weight:bold;vertical-align:middle}.KG{float:left;line-height:0;margin-left:-68px;width:48px}.JG{float:none;margin-left:0;margin-bottom:1px}.uF{padding-bottom:4px;padding-top:4px}.rF{font-size:13px;font-weight:bold;margin-bottom:3px}.pF{display:table}.qF{color:#999;margin-bottom:8px;max-width:357px;overflow:hidden;text-overflow:ellipsis}.tF{background:url(//ssl.gstatic.com/s2/oz/images/pluspages/product-icon-tiny-cb4dec5be33ee657b769ec5efad78f5b.png) no-repeat;height:15px;margin-right:2px;top:4px;width:15px}.sF{color:#999;margin-bottom:6px}.aq{float:left;margin-right:10px;margin-top:3px;max-height:147px;max-width:402px}.oF{min-height:29px}.ij{margin:5px 0}.QF{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/search/share_this_search_5d0f9c2951d38d3cec2c2bb4bc564446.png);height:13px;margin-right:5px;width:13px}.eA{min-height:100px}.IU{float:left;cursor:pointer;margin-right:1px}.DU{min-height:270px}.JU{margin-bottom:4px;margin-right:8px}.KU{margin-right:-20px}.zs{background-color:#666;background-color:rgba(0,0,0,0.5);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:max-height .5s .2s;-moz-transition:max-height .5s .2s;-ms-transition:max-height .5s .2s;-o-transition:max-height .5s .2s;transition:max-height .5s .2s;bottom:-4px;color:#fff;left:16px;line-height:1.4;max-height:80px;position:absolute;right:16px}.zs:hover{max-height:270px}.WA{margin-top:12px;max-height:224px;overflow-y:hidden;padding-left:16px}.zs:hover>.WA{overflow-y:auto}.HU{padding-bottom:12px}.LU{color:#fff;display:block;overflow:hidden;padding:12px 16px 0 16px;text-overflow:ellipsis;white-space:nowrap}.EU{height:36px;padding:15px 10px;overflow:hidden}.GU{color:#ccc}.FU{background-color:rgba(0,0,0,0.3);margin-right:8px;text-align:center;vertical-align:top}.kV{cursor:pointer;min-height:100px}.h-Fc{height:1px;overflow:hidden;position:absolute;top:-1000em;width:1px}.a-o-D{color:#ccc;cursor:default!important}.a-o,.h-J-o{color:#36c;cursor:pointer}.a-o:hover,.h-J-o:hover{text-decoration:underline}.a-o.a-o-fd:hover,.h-J-o.h-J-o-fd:hover{text-decoration:none}.me .a-o,.me .a-o-D{outline:none}.Ud{font-size:13px!important}.h-V-ib{clear:both}.Kh{-webkit-box-shadow:0 4px 10px #8b8b8b;-moz-box-shadow:0 4px 10px #8b8b8b;box-shadow:0 4px 10px #8b8b8b;padding:5px}.h-z-I{border:1px solid #d9d9d9;border-top:1px solid #c0c0c0}.h-z-I:hover,.h-z-I:focus{-webkit-box-shadow:inset inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset inset 0 1px 2px rgba(0,0,0,0.3);border:1px solid #4d90fe;outline:none}h1,h2{border:0;margin:0}img{border:0}a{color:#36c;cursor:pointer;text-decoration:none}a:hover,a:active{text-decoration:underline}.Pv{height:30px;left:-100px;position:absolute;top:-100px;width:30px}#apps-debug-tracers{display:none}.oh{clear:both;overflow:hidden}.Om{clear:both;line-height:0;overflow:hidden;position:relative}.ro,.so{border-left:1px solid rgba(0,0,0,.2);height:100%;position:absolute;top:0;width:0}.ro{left:0}.so{right:0}.qu,.pu{height:4px;left:0;position:absolute;width:100%}.qu{-webkit-mask-image:-webkit-linear-gradient(left,transparent 0%,rgba(0,0,0,.8) 50%,transparent 100%),-webkit-linear-gradient(top,#000 1px,transparent 1px);background-color:transparent;background-image:-webkit-linear-gradient(top,rgba(0,0,0,.2),transparent);background-image:-moz-linear-gradient(top,rgba(0,0,0,.2),transparent);background-image:-ms-linear-gradient(top,rgba(0,0,0,.2),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.2),transparent);background-image:linear-gradient(top,rgba(0,0,0,.2),transparent);border-top:1px solid rgba(0,0,0,.2);top:0}.pu{-webkit-mask-image:-webkit-linear-gradient(left,transparent 0%,rgba(0,0,0,.8) 50%,transparent 100%),-webkit-linear-gradient(bottom,#000 1px,transparent 1px);background-color:transparent;background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.2),transparent);background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.2),transparent);background-image:-ms-linear-gradient(bottom,rgba(0,0,0,.2),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.2),transparent);background-image:linear-gradient(bottom,rgba(0,0,0,.2),transparent);border-bottom:1px solid rgba(0,0,0,.2);bottom:0}.Mg,.Mj{background-color:#666;background-color:rgba(0,0,0,0.5);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border:1px solid rgba(0,0,0,0.2);color:#fff;cursor:auto;left:16px;position:absolute;right:16px}.Mg{-webkit-transition:max-height .5s .2s;-moz-transition:max-height .5s .2s;-ms-transition:max-height .5s .2s;-o-transition:max-height .5s .2s;transition:max-height .5s .2s;bottom:-4px;max-height:0}.fA.Mg{max-height:35px}.Mj{bottom:16px}.Id{line-height:1.4}.Hk{padding:10px 16px}.Wt{height:1.4em;overflow:hidden;padding-top:8px;text-overflow:ellipsis;white-space:nowrap}.Id .uc,.Id .a-o{color:#fff!important}.Id .Dp{color:#ccc!important}.Id .ld,.Id .Ch{color:#fff!important}.Mi:hover>.Mg{max-height:150px}.Fj{clear:both}.bF{line-height:1.4;overflow:hidden}.ZE{display:block;font-weight:bold;overflow:hidden;text-overflow:ellipsis}.Ug{display:block;font-weight:bold;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.Xf{line-height:1.4}.Ag{background-color:#0a0a0a;line-height:0;overflow:hidden;position:relative}.cF{bottom:0;display:block;left:0;margin:auto;position:absolute;right:0;top:0}.XE{float:left;margin-right:5px;margin-top:1px;height:16px;width:16px}.aF{background:url(//ssl.gstatic.com/s2/oz/images/stream/pinstripe.png) repeat;float:left;margin-right:16px}.YE{padding-top:.4em}.RU{filter:alpha(opacity=80);opacity:.8;background:url(//ssl.gstatic.com/s2/tt/images/play-overlay.png) no-repeat;height:77px;left:50%;margin-left:-38px;margin-top:-38px;position:absolute;top:50%;width:77px}.a-v{-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.2);box-shadow:0 2px 4px rgba(0,0,0,0.2);-webkit-transition:opacity .218s;-moz-transition:opacity .218s;-ms-transition:opacity .218s;-o-transition:opacity .218s;transition:opacity .218s;background:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);cursor:default;font-size:13px;margin:0;outline:none;padding:6px 0;position:absolute}.a-C,.a-dp{position:relative;color:#333;cursor:pointer;list-style:none;margin:0;padding:6px 7em 6px 30px;white-space:nowrap}.a-v-Us .a-C{padding-left:16px;vertical-align:middle}.a-v-pi .a-C{padding-right:44px}.a-C-D{cursor:default}.a-C-D .a-C-je,.a-C-D .a-C-y{color:#ccc!important}.a-C-D .a-C-r{filter:alpha(opacity=30);opacity:.3}.a-C-ub,.a-C-E{background-color:#eee;border-color:#eee;border-style:dotted;border-width:1px 0;padding-top:5px;padding-bottom:5px}.a-C-ub .a-C-y,.a-C-E .a-C-y{color:#333}.a-C-H,.a-C-r{background-repeat:no-repeat;height:21px;left:3px;position:absolute;right:auto;top:3px;vertical-align:middle;width:21px}.a-S-X{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png);background-repeat:no-repeat;background-position:left center}.a-S-X .a-C-y{color:#333}.a-C-je{color:#777;direction:ltr;left:auto;padding:0 6px;position:absolute;right:0;text-align:right}.a-C-cg-Zc{color:#777;font-size:12px;padding-left:4px}.u-ic-wd-cr{clear:both}.u-ic-wd{background:#d32f40;background:-webkit-gradient(linear,left top,left bottom,from(#d32f40),to(#bf1730));background:-moz-linear-gradient(top,#d32f40,#bf1730);background:-o-linear-gradient(top,#d32f40,#bf1730);;border:solid 1px #b1212d;border-radius:3px;color:#fff;-moz-border-radius:3px;-webkit-border-radius:3px;margin-top:20px;padding:4px 6px;text-align:center}.R-N-uf{background-color:#fff;left:0;position:absolute;top:0;z-index:1100}.R-N{-webkit-box-shadow:0 4px 16px rgba(0,0,0,0.2);-moz-box-shadow:0 4px 16px rgba(0,0,0,0.2);box-shadow:0 4px 16px rgba(0,0,0,0.2);-webkit-outline:0;background-color:#fff;border:solid 1px #acacac;border-bottom-color:#999;color:#000;outline:0;padding:35px 40px;position:absolute;top:0;width:450px;z-index:1101}.R-N-cf{border:solid 3px #acacac}.R-N-Z{background-color:#fff;color:#000;cursor:default;font:normal 20px arial,sans-serif;padding-bottom:10px;position:relative;word-wrap:break-word}.R-N-Z-xb{background:url(//ssl.gstatic.com/s2/oz/images/dialogx.png) no-repeat;cursor:pointer;height:15px;position:absolute;right:-20px;top:-16px;width:15px}.R-N-y{background-color:#fff;font:normal 13px arial,sans-serif;line-height:1.4em}.R-N-y .jg,.R-N-y a{color:#36c!important}.R-N-Ta{background-color:#fff;font-size:13px;padding-top:25px;text-align:right}.R-N-Ta button{background:#f3f3f3;background:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));background:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background:-o-linear-gradient(top,#f5f5f5,#f1f1f1);;border:solid 1px #d9d9d9;border-radius:2px;-moz-border-radius:2px;-webkit-border-radius:2px;color:#666;float:right;font-weight:bold;margin:0 0 0 16px;padding:6px 12px;transition:all .218s ease;-o-transition:all .218s ease;-moz-transition:all .218s ease;-webkit-transition:all .218s ease}.R-N-Ta button:hover{background:#f5f5f5;background:-webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));background:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background:-o-linear-gradient(top,#f8f8f8,#f1f1f1);;border:solid 1px #c0c0c0;box-shadow:0 1px 1px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);color:#333}.R-N-Ta button:active{background:#f4f4f4;background:-webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#f1f1f1));background:-moz-linear-gradient(top,#f6f6f6,#f1f1f1);background:-o-linear-gradient(top,#f6f6f6,#f1f1f1);;border:solid 1px #bbb;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.1);color:#333}.R-N-Ta button[disabled]{background-color:#f6f6f6;border:solid 1px #ddd;color:#bbb}.R-N-Ta .a-dc-fa{background:#4d90fe;background:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));background:-moz-linear-gradient(top,#4d90fe,#4787ed);background:-o-linear-gradient(top,#4d90fe,#4787ed);;border:solid 1px #3079ed;color:#fff}.R-N-Ta .a-dc-fa:hover{background:#357ae8;background:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));background:-moz-linear-gradient(top,#4d90fe,#357ae8);background:-o-linear-gradient(top,#4d90fe,#357ae8);;border:solid 1px #2f5bb7;box-shadow:0 1px 1px rgba(0,0,0,0.2);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.2);color:#fff}.R-N-Ta .a-dc-fa:active{background:#357ae8;background:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));background:-moz-linear-gradient(top,#4d90fe,#357ae8);background:-o-linear-gradient(top,#4d90fe,#357ae8);;border:solid 1px #2f5bb7;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.3);color:#fff}.R-N-Ta .a-dc-fa[disabled]{background:#c9c9c9;background:-webkit-gradient(linear,left top,left bottom,from(#cacaca),to(#c8c8c8));background:-moz-linear-gradient(top,#cacaca,#c8c8c8);background:-o-linear-gradient(top,#cacaca,#c8c8c8);;border:solid 1px #c8c8c8;color:#fff;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;text-shadow:none;-moz-text-shadow:none;-webkit-text-shadow:none}.h-di-bi{-webkit-box-shadow:0 2px 8px rgba(0,0,0,0.2);-moz-box-shadow:0 2px 8px rgba(0,0,0,0.2);box-shadow:0 2px 8px rgba(0,0,0,0.2);-webkit-transition:opacity .13s linear;-moz-transition:opacity .13s linear;-ms-transition:opacity .13s linear;-o-transition:opacity .13s linear;transition:opacity .13s linear;color:#8e8e8e;font-size:12px;position:absolute;z-index:2201}.an{background-color:#fff;border:1px solid #ccc;border-bottom-color:#bbb;overflow:hidden;padding:15px;position:relative;width:318px}.zo{color:#333;font-size:16px;line-height:20px;margin-bottom:11px;margin-top:-4px;padding-left:2px;word-wrap:break-word}.Ao{color:#333}.Kf{margin:2px 0 0 8px;vertical-align:top}.Go{margin:2px 0 0 8px;vertical-align:top;background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/sg-d36ad9eb003b75ff844815e5e90c6745.png) -106px -31px;height:15px;width:15px}.Vo{width:100px}.Do{float:right;width:100px;margin-left:15px;margin-top:-27px}.Co{-webkit-box-shadow:1px 2px 3px rgba(0,0,0,0.1);-moz-box-shadow:1px 2px 3px rgba(0,0,0,0.1);box-shadow:1px 2px 3px rgba(0,0,0,0.1);background-color:#fff;border:1px solid #e3e3e3;height:90px;padding:4px;position:relative;width:90px;z-index:1}.Bo{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;height:90px;width:90px}.ph{margin-top:9px}.uo{height:65px;line-height:0;margin:0 -130px 0 -15px;white-space:nowrap;width:348px}.to,.To{height:100%}.xo{background-color:#eee}.th{background-color:#eee;border:1px solid #ddd}.qh{background-color:#f5f5f5;border:1px solid #e5e5e5}.th{height:63px}.Eo{background-color:#ddd;margin:4px 0 4px 4px}.Fo{width:49px}.Ah{filter:alpha(opacity=0);opacity:0;-webkit-transition:opacity .13s linear;-moz-transition:opacity .13s linear;-ms-transition:opacity .13s linear;-o-transition:opacity .13s linear;transition:opacity .13s linear;left:-10000px;padding:19px 8px 16px 15px;position:absolute;width:210px}.ve .Ah{filter:alpha(opacity=100);opacity:1;left:0}.yo{margin-right:6px}.Bh{display:none}.ve .Bh{display:block;height:46px}.sh{filter:alpha(opacity=100);opacity:1;-webkit-transition:opacity .13s linear;-moz-transition:opacity .13s linear;-ms-transition:opacity .13s linear;-o-transition:opacity .13s linear;transition:opacity .13s linear;padding-top:5px}.ve .sh{filter:alpha(opacity=0);opacity:0;left:-10000px;position:absolute}.rh{margin-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rh .fc{filter:alpha(opacity=45);opacity:.45;margin:0 7px 1px 0;vertical-align:middle}.zc{vertical-align:middle}.qh{margin:-8px -130px 0 -15px;min-height:49px;padding:9px 16px 13px}.vo{color:#222;min-height:22px}.h-di-bi .a-lc-b{cursor:pointer;outline:0}.a-lc-b-E .zc{color:#777;text-decoration:underline}.a-lc-b-ga .zc{color:#555}.Rd{background-color:#f9f9f9;border:1px solid #ccc;border-bottom-color:#bbb;border-top:0;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:348px}.Rd .fc{margin-right:7px;vertical-align:middle}.Rd .zc{line-height:21px}.Ni,.wo{margin-left:16px;padding:4px 0}.Rd .fc{filter:alpha(opacity=40);opacity:.4}.Wd .a-lc-b-E .fc{filter:alpha(opacity=50);opacity:.5}.Wd .a-lc-b-ga .fc{filter:alpha(opacity=60);opacity:.6}.Wd{float:right}.Wd .Ni{margin-left:2px}.oya{overflow-y:auto}.oya.c-A::-webkit-scrollbar{width:12px}.oya.c-A::-webkit-scrollbar-thumb{border-width:1px 1px 1px 2px}.oya.c-A::-webkit-scrollbar-track{border-width:0}.Oc,.yd,.xd{position:relative;line-height:100%}.Oc,.yd,.xd{min-height:1.375em}.Oc .bd,.yd .bd,.xd .bd{font-weight:bold;text-align:center}.Jf{text-decoration:underline;cursor:pointer}.yy{z-index:7;position:absolute;outline:none;text-align:left;cursor:default}.Oc .Rl,.Oc .Ql{border-top-color:#fff1a8;border-bottom-color:#fff1a8}.Oc .bd{background:#fff1a8;border-color:#fff1a8;color:#000}.Oc .Jf{color:#0065cc}.yd .Rl,.yd .Ql{border-top-color:#c00;border-bottom-color:#c00}.yd .bd{background:#c00;border-color:#c00;color:#fff}.yd .Jf{color:#c3d9ff}.xd .Rl,.xd .Ql{border-top-color:#d6e9f8;border-bottom-color:#d6e9f8}.xd .bd{background:#d6e9f8;border-color:#d6e9f8;color:#000}.xd .Jf{color:#0065cc}.Oc,.yd,.xd{padding:0;z-index:auto}.Oc .bd,.yd .bd,.xd .bd{font-size:13px;padding:2px 15px}.Oc .a-f-e,.yd .a-f-e,.xd .a-f-e{z-index:1004}.kB{color:#999}.D6LlEd{border-top:1px solid #dddfe7}span.mm{margin:0 10px 0 5px}div.mm{float:right;margin-left:10px}.mm{display:inline-block;height:16px;vertical-align:middle;width:16px}.Mr{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/nots-01f32c4591432178f7d86fb1c49cf421.png) -33px 0}.Qh,.qC{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/nots-01f32c4591432178f7d86fb1c49cf421.png) -16px 0}.M0{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/nots-01f32c4591432178f7d86fb1c49cf421.png) -132px 0}.qx{position:relative}.Xt{position:absolute;height:42px;width:42px}.w2{background:#e0e0e0;border:1px solid #888;top:2px;left:2px}.v2{background:#bebebe;border:1px solid #888;top:4px;left:4px}span.Dm,img.Dm{border:1px solid #444;height:42px;width:42px;position:relative;margin:0;z-index:1}.nY{filter:alpha(opacity=0);opacity:0;display:none;overflow:hidden;position:absolute;z-index:10}.nY .xk{position:relative}.s2{display:block;float:none;margin:0;padding-bottom:1px}.t2{background:url('//ssl.gstatic.com/s2/oz/images/notifications/gradient.png') repeat-x;cursor:pointer;height:42px;position:absolute;width:100%}.u2{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/nots-01f32c4591432178f7d86fb1c49cf421.png) -115px 0}.rC{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/nots-01f32c4591432178f7d86fb1c49cf421.png) -16px 0}.lm{float:left;margin:0}.P0 .a-f-e{z-index:auto}.Ksa{border:1px solid #f5f5f5!important}.x2{background-image:url(//ssl.gstatic.com/s2/profiles/images/silhouette48.png);background-repeat:no-repeat;float:left;height:48px;margin:0;width:48px}.Vz{text-align:center}.bd{border:3px solid transparent;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}.Tq.Xt{height:26px;width:26px}.Tq img.Dm{height:26px;width:26px;margin-right:6px;z-index:10}div.Tq.Dg{display:inline-block;float:left;height:32px;margin-right:10px;vertical-align:middle}a.Tq.W0{float:none;position:static}.F4{overflow:hidden;width:100%}.uE{overflow-y:auto;overflow-x:hidden;width:100%}.G4{float:right;line-height:35px}.B4{outline:none;background:#fff1a8;padding:10px 19px 10px 9px;font-size:110%;font-weight:bold}.Yl{background:#f0f0f0;color:#666}.we{font-weight:bold}.kT{color:#777}.Yl .we{font-weight:normal}.tj{display:table-cell;height:32px;overflow:hidden;padding:0 0;vertical-align:middle;width:auto}.H4{padding:10px;padding-top:0;border-top:1px solid #dddfe7}.y4{background-image:url('//ssl.gstatic.com/s2/oz/images/notifications/sprite1.png');background-position:-80px 0;display:inline-block;margin:13px 2px 0 2px;height:7px;vertical-align:middle;visibility:hidden;width:7px;float:left}.pY{overflow:visible}span.mm{float:right;margin-top:9px;margin-right:8px}.Y0{padding:20px}.oY{background-color:#f4f5f9;border-top:1px solid #dddfe7;height:51px}.s4{background-color:#f4f5f9;background-image:-webkit-linear-gradient(top,#eee,#f4f5f9);background-image:-moz-linear-gradient(top,#eee,#f4f5f9);background-image:-ms-linear-gradient(top,#eee,#f4f5f9);background-image:-o-linear-gradient(top,#eee,#f4f5f9);background-image:linear-gradient(top,#eee,#f4f5f9);height:10px;margin-bottom:10px}.o4{background-color:#f4f5f9;background-image:-webkit-linear-gradient(top,#f4f5f9,#eee);background-image:-moz-linear-gradient(top,#f4f5f9,#eee);background-image:-ms-linear-gradient(top,#f4f5f9,#eee);background-image:-o-linear-gradient(top,#f4f5f9,#eee);background-image:linear-gradient(top,#f4f5f9,#eee);border-bottom:1px solid #dddfe7;height:10px;margin-top:10px}.p4{padding:0 20px}.q4{text-overflow:ellipsis;white-space:nowrap;float:left}.r4{font-weight:bold}.pY .oY{cursor:pointer;height:0;overflow:hidden;padding:10px 0 0}.d4{width:415px}.s0{padding-right:20px}.uE.c-A::-webkit-scrollbar{width:12px}.uE.c-A::-webkit-scrollbar-thumb{border-width:1px 1px 1px 2px}.uE.c-A::-webkit-scrollbar-track{border-width:0}.h-Xb-ni-b{background:url(//ssl.gstatic.com/s2/oz/images/stars/flag_off.png);height:13px;outline:none;width:13px}.h-Xb-ni-b-E{background:url(//ssl.gstatic.com/s2/oz/images/stars/flag_hover.png);cursor:pointer}.h-Xb-ni-b-Q,.h-Xb-ni-b-Q .h-Xb-ni-b-E{background:url(//ssl.gstatic.com/s2/oz/images/stars/flag_on.png)}.h-Xb-ws-vq{color:#36c;cursor:pointer}.NI{font-size:11px}.PI{width:196px}.ys{border-bottom:1px solid #ccc;padding-bottom:10px;width:176px}.QI{margin-left:15px}.Gk{margin-top:10px}.OI{margin-top:2px}.zG{margin-left:60px;min-height:52px;padding-bottom:6px}.qq{color:#999}.ju{font-weight:bold;vertical-align:top}.yG{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -153px 0;display:inline-block;height:13px;margin-top:1px;padding-right:5px;width:13px}.BG{border:1px solid transparent;float:left;height:48px;margin-left:-59px;margin-top:1px;width:48px}.CG{border:1px solid #ddd;float:left;height:50px;margin-left:-60px;width:50px}.AG{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -107px -74px;float:left;height:20px;margin-left:-40px;margin-top:10px;position:relative;width:21px}.EC{position:relative}.HC{margin-right:3px;overflow-y:auto}.FC{padding-bottom:18px}.Fm,.EE,.Xr{background-color:#f8f8f8;margin:0 16px;padding:0 0 10px 0}.Fm,.Xr{cursor:pointer}.IE{color:#95afe4}.Ot,.uw{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;background-color:#f8f8f8;color:#222;padding-right:10px}.CC{background-color:#f8f8f8;color:#222;font-weight:bold;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:1.4em}.mp,.np{overflow:hidden;vertical-align:top}.DE{border-bottom:0;cursor:pointer;display:block;padding:7px;text-align:center}.Ti{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -164px -52px;height:7px;float:right;margin-top:5px;width:7px}.rm{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -96px 0}.Zq{background-color:#f8f8f8;position:absolute;vertical-align:top}.tK{background:url(//ssl.gstatic.com/ui/v1/activityindicator/loading_16.gif);height:16px;float:right;margin-top:0;width:16px}.uK{position:absolute;top:0;right:0;left:0;z-index:2}.rK{overflow:hidden}.uv{margin-top:-3px}.lp{position:relative}.me .lp{outline:none}.re .le{text-decoration:line-through;color:#999}.re .qm,.re .a-o,.re .h-J-o{color:#36c}.re .Sj{cursor:text;text-decoration:none}.ap{background-color:#fff;border:1px solid #ccc;margin-bottom:7px;padding:6px}.JB{margin:-5px 16px 0 16px;padding:0 0 18px 40px}.lq{position:relative}.kq{max-height:8.4em;overflow:hidden}.le{border-bottom:0;vertical-align:top;padding:0 14px 20px 56px}.eu.le{padding-left:56px}.fu{bottom:2px;position:absolute;top:1px}.Wr{margin:-6px 16px 0 16px;padding:0 0 8px 0}.Wr>.Ti{cursor:pointer;margin-top:12px}.LB{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff;border:1px solid #ddd;color:#999;cursor:text;margin:1px 0 8px 0;padding:5px 7px}.rM{margin-right:22px}.df{float:left;margin:2px 0 0 -40px}.CE{display:block}.Si{color:#555;padding-top:2px}.Lj8jUd{clear:both;display:block}.KB{font-size:11px}.Sj{margin-left:10px}.MB{color:#dd4b39;cursor:pointer;font-style:italic;font-weight:bold;margin-left:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.AE{vertical-align:bottom}.DC{vertical-align:text-bottom;margin-left:10px}.IB{float:left;margin-left:12px;margin-top:2px}.cm{background:url(//ssl.gstatic.com/s2/oz/images/stars/alert_rest.png);float:left;height:14px;margin-left:8px;outline:none;width:16px}.cm-E{background:url(//ssl.gstatic.com/s2/oz/images/stars/alert_hover.png)}.Yc,.Yc .ld,.Yc .Gg,.Yc .proflink,.Yc .proflinkPrefix,.Yc .Si{color:#d5d5d5!important}.Yc .ld:hover,.Yc .proflink:hover{cursor:default;text-decoration:none}.HE{text-decoration:line-through}.Yc .df{filter:alpha(opacity=10);opacity:.1}.GC{float:right}.zE{float:left;margin-top:2px}.jp{background:url(//ssl.gstatic.com/s2/oz/images/stars/alert_rest.png);display:inline-block;height:14px;outline:none;width:16px}.qm,.Sj.a-o{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;color:#222}.Gb.tb .qm,.Gb.tb .Ot,.Gb.tb .uw,.Gb.tb .Sj.a-o{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;color:#36c}.Gb.tb .Ti{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -164px -60px}.Gb.tb .rm{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -130px -38px}.ld{text-decoration:none}.Np{color:#999}.Gn{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.05);-moz-box-shadow:0 2px 4px rgba(0,0,0,.05);box-shadow:0 2px 4px rgba(0,0,0,.05);background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;margin:0;vertical-align:top;position:relative;z-index:1}.FE{margin:0;padding:16px 16px 0 16px;text-overflow:ellipsis}.EG{margin:0;border:0;font-weight:normal;font-size:100%;display:inline}.Zo{float:left;margin:0 0 0 -68px;padding:0}.SF{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -96px -22px;display:block;left:-10px;top:15px}.NB{-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-box-shadow:0 1px 0 rgba(101,101,101,.1);-moz-box-shadow:0 1px 0 rgba(101,101,101,.1);box-shadow:0 1px 0 rgba(101,101,101,.1);background-color:#f8f8f8;border-color:#d5d5d5;border-style:solid;border-width:1px;margin:0 2px;position:relative;top:-3px}.Gm{padding:3px 16px 0;text-overflow:ellipsis}.Hn,.In{padding-bottom:12px}.eg{clear:both;display:block;padding:0}.gu{min-height:0;padding:0}.DG{color:#c42b2c}.md{font-weight:bold}.BE{border-top:1px solid #ddd;height:38px}.Yd.esw,.Tj{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-transition:border .218s;-moz-transition:border .218s;-ms-transition:border .218s;-o-transition:border .218s;transition:border .218s;border:1px solid #fff;cursor:pointer;float:left;height:22px;margin-top:7px;margin-left:7px;outline:none;position:relative;width:32px}.Yd.esw,.Yd.eswd:hover{background-image:none;vertical-align:top;-webkit-appearance:none}.Gb.tb .Tj,.Gb.tb .Yd.eswd{background-color:#fff;background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:-ms-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);-webkit-transition:border .218s;-moz-transition:border .218s;-ms-transition:border .218s;-o-transition:border .218s;transition:border .218s;border:1px solid #ddd}.Tj:hover,.Yd.eswd:hover{border:1px solid #bbb!important}.Gb .Tj:active,.wk:active{background-image:none;background-color:#eee;background-image:-webkit-linear-gradient(top,rgba(0,0,0,.1),transparent 4px);background-image:-moz-linear-gradient(top,rgba(0,0,0,.1),transparent 4px);background-image:-ms-linear-gradient(top,rgba(0,0,0,.1),transparent 4px);background-image:-o-linear-gradient(top,rgba(0,0,0,.1),transparent 4px);background-image:linear-gradient(top,rgba(0,0,0,.1),transparent 4px)}.iq{margin:auto;position:absolute;left:0;right:0;top:0;bottom:0;height:14px;width:22px}.Yd.eswa{-webkit-box-shadow:inset 0 1px #ec705f;-moz-box-shadow:inset 0 1px #ec705f;box-shadow:inset 0 1px #ec705f;background-color:#d14228;background-image:-webkit-linear-gradient(top,#d94f31,#d14228);background-image:-moz-linear-gradient(top,#d94f31,#d14228);background-image:-ms-linear-gradient(top,#d94f31,#d14228);background-image:-o-linear-gradient(top,#d94f31,#d14228);background-image:linear-gradient(top,#d94f31,#d14228);border:1px solid #832014}.Gb.tb .Yd.eswa{border:1px solid #832014}.Yd.eswa:hover{background-image:none;-webkit-box-shadow:inset 0 1px #f69489;-moz-box-shadow:inset 0 1px #f69489;box-shadow:inset 0 1px #f69489;background-color:#d04028;background-image:-webkit-linear-gradient(top,#ec7045,#d04028);background-image:-moz-linear-gradient(top,#ec7045,#d04028);background-image:-ms-linear-gradient(top,#ec7045,#d04028);background-image:-o-linear-gradient(top,#ec7045,#d04028);background-image:linear-gradient(top,#ec7045,#d04028)}.Yd.eswa:active{-webkit-box-shadow:inset 0 2px 2px #b02811;-moz-box-shadow:inset 0 2px 2px #b02811;box-shadow:inset 0 2px 2px #b02811;background-color:#db5434;background-image:-webkit-linear-gradient(top,#cf3f27,#db5434);background-image:-moz-linear-gradient(top,#cf3f27,#db5434);background-image:-ms-linear-gradient(top,#cf3f27,#db5434);background-image:-o-linear-gradient(top,#cf3f27,#db5434);background-image:linear-gradient(top,#cf3f27,#db5434)}.cv{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -130px -86px}.Yd.eswa .cv{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -107px -37px;margin-top:3px}.OG{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -107px -22px;margin-top:5px}.oG{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -130px -15px;margin-top:6px}.kp,.RF{-webkit-border-radius:0 0 3px 0;-moz-border-radius:0 0 3px 0;border-radius:0 0 3px 0;height:100%;line-height:38px;outline:none;overflow:hidden;padding-left:10px;padding-right:16px;position:relative}.kp{color:#999;float:right;font-weight:bold}.wk{cursor:pointer}.Gb.tb .kp{color:#dd4b39}.Gb.tb .wk{border-left:1px solid #ddd}.wk:hover{background-color:#fff;background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:-moz-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:-ms-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px);background-image:linear-gradient(bottom,rgba(0,0,0,.05),transparent 20px)}.PG,.IC{float:right;margin-left:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dv{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -153px -14px;height:11px;width:14px;margin-right:4px;margin-top:-3px;vertical-align:middle}.Gb.tb .dv{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -153px -26px}.mG{max-width:200px;padding-top:7px}.nG{margin-right:4px}.rs{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -138px -38px;cursor:pointer;float:right;height:13px;margin:16px 16px 0 0;width:13px}.rs:hover{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -153px -38px}.dG{margin-top:10px}.rq{display:inline!important;height:20px;max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ld,.eg.a-o,.bv{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;color:#222}.Gb.tb .ld,.Gb.tb .bv,.Gb.tb .eg.a-o{-webkit-transition:color .218s;-moz-transition:color .218s;-ms-transition:color .218s;-o-transition:color .218s;transition:color .218s;color:#36c}.Gn .g{margin:16px 16px}.Gn .ze{margin-left:-17px;margin-right:-17px}.Gm .oh{border-top:1px solid #e9e9e9;padding:16px 0}.Gm .Om{margin:0 -17px}.Zr{position:absolute;visibility:hidden;z-index:100}.eG{color:#999;height:40px;margin:0 2px;position:relative;bottom:-3px}.Yu{background-color:#f8f8f8;border:1px solid #ccc}.me .Yu{outline:none}.sq{float:left;height:18px;width:20px}.gG,.hG{position:relative}.lG{padding:9px 14px}.fG{padding-top:0 14px 9px 14px}.kG{font-weight:bold}.Zu{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -130px 0;height:14px;margin-right:10px;margin-top:2px;width:11px}.iG{margin-bottom:-1px}.jG{float:right}.op,.op:hover{color:#999;font-size:11px;font-weight:bold;text-decoration:none;text-transform:uppercase}.av:hover>.op{color:#36c}.av:hover>.Zu{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/stream-e001443aa61c5529c1aa133a9c12bb49.png) -96px -8px;height:13px;width:11px}.aG{display:block;margin-bottom:6px;overflow:hidden}.jj{padding-top:6px}.EI{background-color:#f8f8f8;cursor:pointer;font-weight:bold;margin:0 16px;overflow:hidden;padding:0 0 13px 0;text-overflow:ellipsis;white-space:nowrap;vertical-align:top;height:1.4em}.nM{overflow-y:auto;padding:0 16px 16px 16px}.tf{max-height:250px;overflow:hidden}.cu{vertical-align:top;width:215px}.pM{margin-right:21px}.du{color:#999;margin-bottom:10px;vertical-align:top}.oM{margin-top:8px}.tf>.fh{overflow:hidden}.Ri{background:url(//ssl.gstatic.com/s2/oz/images/stars/x_off.png);height:10px;outline:none;width:10px}.Ri-E{background:url(//ssl.gstatic.com/s2/oz/images/stars/x_hover.png);cursor:pointer}.Ri-Q{background:url(//ssl.gstatic.com/s2/oz/images/stars/x_on.png)}.Ri-Q .Ri-E{background:url(//ssl.gstatic.com/s2/oz/images/stars/x_on.png);cursor:default}.Jh{padding:10px 16px;text-align:center}.ku{min-height:48px;margin-left:60px;text-align:left}.sM{float:left;margin-left:-60px}.tM{float:right}.iu{padding-bottom:12px;padding-top:3px}.qM{padding-right:15px;padding-top:8px}.vM{padding-right:10px}.uM{padding-left:8px;vertical-align:top}.lM{margin:10px 0}.jM{display:table-cell;width:100%}.iM{border:1px solid #bababa;font-size:13pt;height:16px;padding:12px;width:100%}.kM{color:#36c;display:table-cell;font-size:14pt;font-weight:bold;padding-left:36px;white-space:nowrap}.Zz{border:0;width:16px;height:16px;background-image:url(//ssl.gstatic.com/ui/v1/activityindicator/loading_16.gif);background-repeat:no-repeat;padding-left:20px}.aA{color:#ccc;display:block;text-align:center;padding:10px 0}.Zm{vertical-align:top}.ak{height:13px;overflow:hidden;white-space:nowrap;line-height:1.1}.h-va-Wa-Mz{color:#5ba333;font-weight:bold}.h-va-Wa-bb-Lh{background-color:#fff;margin-top:-3px;margin-right:12px}.h-va-Wa-bb-Z{font-weight:bold}.h-va-Wa-bb-Ll-e{margin-top:8px}.h-va-Wa-bb-Nc-e{display:block}.h-va-Wa-bb-Vb{margin-right:1px}.h-va-Wa-bb-o-D{color:#000}.h-va-Wa-bb-Ek-e{color:#999;margin-top:6px}.h-va-Wa-bb-Cb{margin-top:8px}.Cp{width:300px}.me .Cp{outline:none}.Py{margin-top:5px;font-weight:normal;color:#999}.a-x-v-b{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-moz-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-ms-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:-o-linear-gradient(top,#f5f5f5,#f1f1f1);background-image:linear-gradient(top,#f5f5f5,#f1f1f1);border:1px solid #dcdcdc;color:#444;cursor:default;font-size:11px;font-weight:bold;line-height:27px;list-style:none;margin:0 2px;min-width:46px;outline:none;padding:0 18px 0 6px;text-align:center;text-decoration:none;vertical-align:middle}.a-x-v-b-D{background-color:#fff;border-color:#f3f3f3;color:#b8b8b8}.a-x-v-b.a-x-v-b-E{background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.1);-moz-box-shadow:0 1px 1px rgba(0,0,0,.1);box-shadow:0 1px 1px rgba(0,0,0,.1);border-color:#c6c6c6;color:#333}.a-x-v-b.a-x-v-b-Sa{border-color:#4d90fe}.a-x-v-b.a-x-v-b-Ka,.a-x-v-b.a-x-v-b-ga{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);background-color:#eee;background-image:-webkit-linear-gradient(top,#eee,#e0e0e0);background-image:-moz-linear-gradient(top,#eee,#e0e0e0);background-image:-ms-linear-gradient(top,#eee,#e0e0e0);background-image:-o-linear-gradient(top,#eee,#e0e0e0);background-image:linear-gradient(top,#eee,#e0e0e0);border:1px solid #ccc;color:#333;z-index:2}.a-x-v-b-aa{vertical-align:top;white-space:nowrap}.a-x-v-b-wa{border-color:#777 transparent;border-style:solid;border-width:4px 4px 0 4px;height:0;width:0;position:absolute;right:5px;top:12px}.a-x-v-b .a-x-v-b-la{margin-top:-3px;opacity:.55;vertical-align:middle}.a-x-v-b-ga .a-x-v-b-la,.a-x-v-b-Ka .a-x-v-b-la,.a-x-v-b-X .a-x-v-b-la,.a-x-v-b-E .a-x-v-b-la{opacity:.9}.a-x-v-b-ga .a-x-v-b-wa,.a-x-v-b-Ka .a-x-v-b-wa,.a-x-v-b-X .a-x-v-b-wa,.a-x-v-b-E .a-x-v-b-wa{border-color:#595959 transparent}.a-x-v-b-sa,.a-x-v-b-Da{z-index:1}.a-x-v-b-sa.a-x-v-b-D{z-index:0}.a-x-v-b-Da:focus,.a-x-v-b-E.a-x-v-b-F-Da,.a-x-v-b-sa:focus,.a-x-v-b-E.a-x-v-b-F-sa{z-index:2}.a-x-v-b-F-sa{margin-left:-1px;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-bottom-left-radius:0;border-top-left-radius:0;min-width:0;padding-left:0;vertical-align:top}.a-x-v-b-F-Da{margin-right:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.a-xf{border-top:1px solid #ebebeb;margin-top:6px;margin-bottom:6px}.c-Pb .a-x-v-b-aa{overflow:hidden;width:100%}.c-Pb .a-x-v-b-wa{background:url(//ssl.gstatic.com/ui/v1/disclosure/grey-disclosure-arrow-up-down.png) center no-repeat;border:none;height:11px;margin-top:-4px;width:7px}.i-k-j-U-y{background:#fff;border:1px solid #bdbdbd;border-top-color:#bbb;border-bottom-color:#cecece;padding:3px;-webkit-box-shadow:0 2px #f7f7f7;-moz-box-shadow:0 2px #f7f7f7;box-shadow:0 2px #f7f7f7;background-color:white;background-image:-webkit-linear-gradient(top,#f6f6f6,white);background-image:-moz-linear-gradient(top,#f6f6f6,white);background-image:-ms-linear-gradient(top,#f6f6f6,white);background-image:-o-linear-gradient(top,#f6f6f6,white);background-image:linear-gradient(top,#f6f6f6,white)}.i-k-j-ka{background:#1da1d8;background:-moz-linear-gradient(top,#28afe7,#1192c8);background:-o-linear-gradient(top,#28afe7,#1192c8);background:-webkit-gradient(linear,left top,left bottom,from(#28afe7),to(#1192c8));border:1px solid #057bac;border-radius:3px;display:inline-block;-moz-border-radius:3px;-webkit-border-radius:3px;color:#fff;margin:2px;outline:none;padding:0 1px;vertical-align:middle;cursor:default}.i-k-j-ka-ub{display:inline-block;padding:0 2px 2px 5px;border-top:1px solid #61c8ee}.i-k-j-ka-y{vertical-align:middle;padding-left:5px}.i-k-j-ka-ji{background:#67ae3f;background:-moz-linear-gradient(top,#77bb4e,#57a02f);background:-o-linear-gradient(top,#77bb4e,#57a02f);background:-webkit-gradient(linear,left top,left bottom,from(#77bb4e),to(#57a02f));border:1px solid #3f980e}.i-k-j-ka-ji .i-k-j-ka-ub{border-color:#9bce7c}.i-k-j-ka-he{background:#67ae3f;background:-moz-linear-gradient(top,#77bb4e,#57a02f);background:-o-linear-gradient(top,#77bb4e,#57a02f);background:-webkit-gradient(linear,left top,left bottom,from(#77bb4e),to(#57a02f));border:1px solid #3f980e}.i-k-j-ka-he .i-k-j-ka-ub{border-color:#9bce7c}.i-k-j-ka-ec{background:#4cc;background:-moz-linear-gradient(top,#666,#333);background:-o-linear-gradient(top,#666,#333);background:-webkit-gradient(linear,left top,left bottom,from(#666),to(#333));border:1px solid #333}.i-k-j-ka-ec .i-k-j-ka-ub{border-color:#666}.i-k-j-ka-wc{background:#d63f44;background:-moz-linear-gradient(top,#d65d63,#d73137);background:-o-linear-gradient(top,#d65d63,#d73137);background:-webkit-gradient(linear,left top,left bottom,from(#d65d63),to(#d73137));border:1px solid #db0d14;color:#fff}.i-k-j-ka-wc .i-k-j-ka-ub{border-color:#e38a8e}.i-k-j-I{_width:40%;display:inline-block;min-width:40%;margin:1px 4px;overflow:hidden;vertical-align:middle}.i-k-j-I-o{cursor:pointer;margin-left:2px}.i-k-j-I-o-z{color:#888;vertical-align:middle}.i-k-j-I-I{background:none;border:0;font-family:Arial,sans-serif;font-size:inherit;height:23px;outline:0;padding:0;width:2px}.i-k-j-I-Sa{width:40%}.i-k-j-I-Sa .i-k-j-I-o{display:none}.i-k-j-I-Sa .i-k-j-I-I{position:static;width:100%}.i-k-j-G{z-index:30000}.i-k-j-G-P{max-width:195px;background:#fff;padding:10px;font-size:13px;-moz-box-shadow:0 0 3px rgba(0,0,0,.3);-webkit-box-shadow:0 0 3px rgba(0,0,0,.3);box-shadow:0 0 3px rgba(0,0,0,.3);border:1px solid #aaa;margin-bottom:5px}.i-k-j-G-bs{height:9px;width:15px;position:absolute;bottom:-3px;left:15px;background:url(//ssl.gstatic.com/s2/oz/images/sge/white-arrow-down.png) no-repeat scroll}.i-k-j-G-Z{float:left;font-weight:bold}.i-k-j-G-Z-z{float:left;max-width:140px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.i-k-j-G-Z-o{color:#36c;cursor:pointer;float:left}.i-k-j-G-y{color:#999;clear:both;padding-top:2px}.i-k-j-G-y-Vd{padding-top:0}.i-k-j-G-NC{margin-top:5px}.i-k-j-wc-s{width:190px}.i-k-j-zk-wc-Z{color:red;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.i-k-j-zk-wc-y{color:#999}.i-k-j-ME{background:#fff;border:1px solid #bdbdbd;border-top-color:#ddd;padding:3px 5px;margin-top:.5em}.i-k-j-NE{background:#fff;border:0;color:#000;font-family:Arial,sans-serif;font-size:inherit;margin:0;padding:0;width:100%}.i-k-j-PE{margin-left:0;margin-bottom:.5em}.i-k-j-ep .i-k-j-U{margin-right:28px}.i-k-j-qp{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -220px;cursor:pointer;display:inline-block;float:right;height:20px;margin-top:8px;width:20px}.i-k-j-ba-ge{position:relative;background:#fff}.i-k-j-f .i-k-j-ba-ge{position:relative;height:160px;border-style:solid;border-color:#bdbdbd;border-width:0 1px 1px 1px;-webkit-box-shadow:0 2px white;-moz-box-shadow:0 2px white;box-shadow:0 2px white}.i-k-j-U.i-k-j-f .i-k-j-ba{left:0;overflow-y:scroll;position:static;top:3px;width:100%;z-index:10}.i-k-j-ba{left:0;position:absolute;top:3px;width:250px;max-height:160px;overflow-y:auto;z-index:10}.i-k-j-ba-rc{padding-top:6px;padding-bottom:6px}.i-k-j-f .i-k-j-ba-rc{padding-top:0;padding-bottom:0}.i-k-j-ba-rc .a-C{padding-left:16px}.i-k-j-ba-Ak .a-C{padding-top:10px;padding-bottom:10px}.i-k-j-ba-Ak .a-C-ub{padding-top:9px;padding-bottom:9px}.i-k-j-ba-rZHfQe,.i-k-j-ba-Ak{width:330px}.i-k-j-ba-rZHfQe{color:#999;font-weight:bold;padding-bottom:10px;padding-left:21px;padding-top:10px}.i-k-j-ba .a-C-y{overflow:hidden}.i-k-j-ba-Kc{margin:9px 0 0 22px}.i-k-j-ba-JE{color:#999;vertical-align:middle}.i-k-j-ba-lUA1tb{text-transform:uppercase}.i-k-j-ba-F3eugb .i-k-j-ba-JE{color:#666;vertical-align:top}.i-k-j-ba-F3eugb{color:#666}.i-k-j-ba-Gd{font-weight:bold}.i-k-j-ba-Zc-Ca{color:#999;margin-left:8px;margin-top:-1em}.i-k-j-ba-Zc-Ca-z{background:#fff;padding-right:.5em}.i-k-j-ba-Ym{color:#999;padding:9px 22px 0 22px}.i-k-j-ba-Nc-o:hover{text-decoration:underline}.i-k-j-ba-Pc{background:url(//ssl.gstatic.com/s2/tt/images/sharebox/x.png) no-repeat scroll;cursor:pointer;position:absolute;height:20px;width:20px;right:16px;top:10px;z-index:1}.i-k-j-L-W{float:left;padding-right:5px}.j-L-zg{color:#222;font-weight:bold;overflow:hidden;padding-left:5px}.j-L-z{color:#666}.j-L-Dd{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:5px}.j-L-ed{background:url(//ssl.gstatic.com/s2/oz/images/ac-sprite.png) no-repeat scroll -13px 0;height:13px;top:2px;width:13px}.i-k-j-r{background-repeat:no-repeat;display:inline-block;height:14px;vertical-align:middle;width:14px}.a-C-r.i-k-j-r{margin:3px 7px}.i-k-j-r-ab{background-repeat:no-repeat;display:inline-block;height:26px;vertical-align:middle;width:26px;float:left;margin:3px 8px 3px 3px}.i-k-j-r-ee{display:none}.i-k-j-r-gd{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -393px}.i-k-j-r-gd-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -515px}.i-k-j-r-gd-ab-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -650px}.i-k-j-r-RC-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -8px -206px}.i-k-j-r-id{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -5px -88px}.i-k-j-r-id-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -605px}.i-k-j-r-id-ab-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -367px}.i-k-j-r-Pc{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -15px -407px;height:7px;width:7px;margin:3px;cursor:pointer}.i-k-j-r-Pc:hover{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -206px;height:7px;width:7px;cursor:pointer}.i-k-j-r-Pc-ge{height:17px;width:14px}.i-k-j-r-ec{background:url(//ssl.gstatic.com/docs/documents/share/images/chips/external/youtube.png) no-repeat!important}.i-k-j-r-jb{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -9px -564px}.i-k-j-r-jb-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -456px}.i-k-j-r-jb-ab-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -145px}.i-k-j-r-Cc-jb{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -25px}.i-k-j-r-Cc-jb-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -407px}.i-k-j-r-Cc-jb-ab-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 0}.i-k-j-r-jd{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -708px}.i-k-j-r-jd-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -693px}.i-k-j-r-jd-ab-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -61px}.i-k-j-r-hc-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -456px}.i-k-j-r-hc-ab-z{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -145px}.i-u-g-U{background:transparent;position:relative;min-height:3.9em}.i-u-g-U-zM .i-u-g-U-Lb{border:none;margin:0;min-height:3.9em;padding:0;resize:none;width:100%}.i-u-g-U-BM{background:transparent;border:0;margin:0;outline:0;padding:0;position:absolute;z-index:2001}.i-u-g-U-Lb{outline:0;position:relative}.i-u-g-lo-U-Lb{font:normal 13px/1.4 Arial,sans-serif}.i-u-g-U-Bv-s{width:230px}.i-u-g-U-GK .u-L-rf{padding:0}.g-U-pe-z{color:#aaa;position:absolute;left:1px;line-height:1.4em;height:1.4em;overflow:hidden;right:1px;top:0;white-space:nowrap}.u-L-w{-moz-box-shadow:2px 2px 2px rgba(102,102,102,0.4);background:none repeat scroll 0 0 #fff;border:1px solid #c6d2eb;font:13px arial,sans-serif;position:absolute;width:280px;z-index:900}.u-L-w-nu{position:fixed;z-index:1201}.u-L-w-N{z-index:1201}.u-L-w .ba-kb{padding:8px 16px 8px 16px}.u-L-ed{background:url(//ssl.gstatic.com/s2/oz/images/ac-sprite.png) no-repeat scroll -13px 0;height:13px;top:2px;width:13px}.u-L-W{float:left;padding:0 10px 0 0}.u-L-zg{color:#222;font-weight:bold;overflow:hidden}.u-L-z{color:#666}.u-L-Dd{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.u-L-rf{padding:5px}.u-L-hv{background-color:#f5f5f5;border-bottom:1px solid #ebebeb;border-top:1px solid #ebebeb;cursor:default;font-size:11px;font-weight:bold;margin:-8px -16px 10px -16px;padding:5px 0 5px 16px}.u-L-yv{margin-right:5px;vertical-align:top;top:3px}.u-L-UM-yv-bYHpTb{margin-right:5px;vertical-align:top;top:1px}.u-L-Jn{background:url(//ssl.gstatic.com/s2/oz/images/pluspages/product-icon-tiny-cb4dec5be33ee657b769ec5efad78f5b.png) no-repeat 0 2px;height:13px;margin-left:3px;padding:1px;vertical-align:top;width:13px}.u-L-Dv{background:no-repeat url(//ssl.gstatic.com/s2/oz/images/sprites/sg-3f32d68a543f6737e4b12f934d021014.png) -14px -27px;height:15px;margin-left:3px;margin-top:1px;vertical-align:top;width:15px}.u-L-gv{width:10px}.u-L-w .ba-ga{background-color:#eee;color:#222}.ba-ga .u-L-z{color:#222}.u-L-w .ba-ga.u-L-D{background-color:#fff!important;cursor:auto!important}.ba-ga.u-L-D .u-L-z{color:#666!important}.u-fv{padding:5px;text-align:center}.eo{color:#ccc;position:absolute;padding:8px 12px;width:100%;height:100%;left:0;top:-1px;z-index:-1}.zB{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -471px;width:22px;height:16px;margin:0 10px}.yB{visibility:hidden}.AB{margin-right:8px;position:relative;z-index:1;background:white}.jh{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%;height:29px;padding-left:8px;position:relative;left:0;top:0;border:1px solid #d9d9d9;border-top:1px solid silver;vertical-align:top;-webkit-border-radius:1px;z-index:0}.jh:focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);outline:none;border:1px solid #4d90fe}.xB{position:relative;white-space:nowrap}.do{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -16px -275px;width:9px;height:9px;cursor:pointer;margin-right:13px;vertical-align:middle}.Pr{display:none;left:50%;top:50%;position:absolute;margin-left:-8px;margin-top:-8px;width:16px;height:16px}.vj .wB{visibility:hidden}.vj .Pr{display:block}.ze{position:relative}.FB{position:absolute;left:0;top:0;width:100%;height:100%}.ze .Op{display:none}.g-ae .Hn,.g-ae .In{padding-bottom:0}.EB{color:#999;font-weight:bold;margin:6px}.Ur{background:rgba(0,0,0,0.6);filter:alpha(opacity=0);opacity:0;font-size:11px;line-height:normal;z-index:1;top:0;left:0;position:absolute;padding:4px 8px;right:0;height:14px}.wZ{filter:alpha(opacity=0);opacity:0;position:relative}.Rr .wZ{z-index:1;filter:alpha(opacity=80);opacity:1;-webkit-transition:opacity .25s;-moz-transition:opacity .25s;-ms-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.ii{color:#ddd;cursor:pointer;display:inline;width:10px;vertical-align:top}.Tr{right:8px}.GB{overflow-x:hidden;overflow-y:auto;position:relative}.kh{position:absolute;left:0;top:0;width:100%;background:#000;background:rgba(0,0,0,0.6);color:#fff;vertical-align:middle;text-align:right;filter:alpha(opacity=0);opacity:0}.Sr .kh{background:none}.ze .oh{margin-left:16px;margin-right:28px}.ze .sm .oh{margin:0}.DB .Jd{margin-left:16px}.BB{display:inline-block;cursor:pointer;padding:4px 13px}.Qr{font-size:11px;font-weight:bold;margin-right:20px;text-transform:uppercase;vertical-align:top}.Sr .Qr{display:none}.CB{right:13px;background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -16px -275px;display:inline-block;height:9px;width:9px;position:absolute;top:6px}.Tr{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -16px -275px;display:inline-block;height:9px;width:9px;position:absolute;top:6px}.Rr .kh,.Rr .Ur{filter:alpha(opacity=80);opacity:1;-webkit-transition:opacity .25s;-moz-transition:opacity .25s;-ms-transition:opacity .25s;-o-transition:opacity .25s;transition:opacity .25s}.c-s.c-s-oc{background-color:#f9edbe;border:1px solid #f0c36d}.c-s-oc .c-s-eb .c-s-pa,.c-s-oc .c-s-nb .c-s-pa{border-color:#f0c36d transparent}.c-s-oc .c-s-eb .c-s-ta,.c-s-oc .c-s-nb .c-s-ta{border-color:#f9edbe transparent}.c-s-oc .c-s-lb .c-s-pa,.c-s-oc .c-s-mb .c-s-pa{border-color:transparent #f0c36d}.c-s-oc .c-s-lb .c-s-ta,.c-s-oc .c-s-mb .c-s-ta{border-color:transparent #f9edbe}.g-ha-xc-TB{display:inline-block;margin-left:1px;padding:5px 5px 4px}.g-ha-xc-H{margin:0 5px 0 0;padding:0;position:relative;vertical-align:middle;top:-1px}.g-ha-Ic-o{color:#36c;cursor:pointer}.g-ha-k-H-Ca{cursor:pointer}.g-ha-Ic-s{width:300px}.g-ha-Ic-s-pb{margin-bottom:1em}.g-ha-Ic-s-y{color:#777;max-height:100px;overflow-y:auto}.g-ha-Ec-pb{font-weight:bold}.g-ha-Ec-y{color:#777;padding:4px 0 8px 0}.g-ha-Yj-s{-moz-box-shadow:0 0 0;-webkit-box-shadow:0 0 0;-ms-box-shadow:0 0 0;box-shadow:0 0 0;position:relative;margin-bottom:7px}.Md{cursor:default;font-size:inherit;height:auto;padding:7px 20px;position:relative}.Fe{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -16px -275px;height:9px;width:9px;cursor:pointer;position:absolute;right:7px;top:12px;margin-right:5px;z-index:1}.Zh{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -40px;height:20px;width:23px;left:11px;position:absolute;top:9px}.PA{background:url(//ssl.gstatic.com/docs/documents/share/images/spinner-1.gif) no-repeat;height:16px;width:16px;left:6px;position:absolute;top:8px}.Nf{color:#777;margin:4px 0 4px 30px;max-width:450px}.g-t-Ea-ya{padding:20px 10px!important}.g-t-Ea-ya .Ea-Ca{margin-right:10px;white-space:nowrap}.g-t-Ea-ya .Ea-ya-Ab{background:#e1e1e1;height:16px;position:relative}.g-t-Ea-ya .Ea-ya-Hb{background:#2c75ec;height:100%;overflow:hidden;position:relative;-moz-transition:width .5s;-o-transition:width .5s;-webkit-transition:width .5s;transition:width .5s}.g-ma-Ya-Va,.g-ma-Ya-sa,.g-ma-Ya-Da,.g-ma-Ya-kd{position:absolute;display:none;z-index:100;background-color:#ffce3f}.g-ma-Ya-Va,.g-ma-Ya-kd{height:3px;width:100%;left:0}.g-ma-Ya-sa,.g-ma-Ya-Da{height:100%;width:3px;top:0}.g-ma-Ya-Va{top:0}.g-ma-Ya-sa{left:0}.g-ma-Ya-Da{right:0}.g-ma-Ya-kd{bottom:0}.g-ma-ga .g-ma-Ya-Va,.g-ma-ga .g-ma-Ya-sa,.g-ma-ga .g-ma-Ya-Da,.g-ma-ga .g-ma-Ya-kd{display:block}.g-ma-G{position:absolute;display:none;padding:0;z-index:100;left:50%;width:300px;margin-left:-150px;top:50%;height:22px;margin-top:-11px;background-color:#ffc;border:#ffce3f 1px solid;-moz-box-shadow:rgba(0,0,0,0.5) 0 1px 3px;-webkit-box-shadow:rgba(0,0,0,0.5) 0 1px 3px;box-shadow:rgba(0,0,0,0.5) 0 1px 3px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;color:#222;font-weight:bold;font-size:11px;text-align:center}.g-ma-ga .g-ma-G{display:table}.g-ma-G-P{display:table-cell;vertical-align:middle}.g-ma-Ef{display:none;position:absolute;height:100%;width:100%;z-index:100}.g-ma-ga .g-ma-Ef{display:block}.g-Jb{position:relative}.g-cd-I-hs{overflow:hidden;position:absolute;z-index:1202}.g-cd-I-hs-P{height:400px;width:100px;cursor:pointer}.ko{height:15px;margin:6px 6px 6px 0;display:inline-block;float:right}.SB{position:absolute;visibility:hidden;z-index:3}.yj{background-image:url(//ssl.gstatic.com/s2/tt/images/sharebox/down-arrow-dark.png);background-repeat:no-repeat;background-position:center;width:7px;height:4px;cursor:pointer;padding:6px 4px;float:right}.yj:hover{background-image:url(//ssl.gstatic.com/s2/tt/images/sharebox/down-arrow-dark.png)}.PB{width:200px}.RB{color:#666;font-weight:bold;margin-bottom:7px}.QB{color:#666}.io{margin:7px 0}.Tf{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -275px;width:15px;height:14px;margin:0 4px;float:right;cursor:pointer}.Uf{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -677px;width:15px;height:15px;margin:0 4px;float:right;cursor:pointer}.jo{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -351px}.yg .zj,.Aj{display:none}.yg .Aj,.zj{display:block}.Hg .Bj,.Cj{display:none}.Hg .Cj,.Bj{display:block}.QA{color:#000}.g .n-m-Z{margin-right:20px}.gc{color:#36c;cursor:pointer}.gc:hover{text-decoration:underline}.br{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -16px -275px;height:9px;width:9px;cursor:pointer;right:11px;margin:1px;position:absolute;top:11px}.g{font-size:13px;position:relative}.g-J-yc,.g-J-Wc{margin-right:8px}.xj.g-Vc .g-Jb{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.xj .g-Jb{padding:6px;position:relative;background-color:#f9f9f9;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;border:1px solid #c4c4c4}.g-Vc .g-Jb{background-color:#f9f9f9;background-image:-webkit-linear-gradient(top,white,#f7f7f7);background-image:-moz-linear-gradient(top,white,#f7f7f7);background-image:-ms-linear-gradient(top,white,#f7f7f7);background-image:-o-linear-gradient(top,white,#f7f7f7);background-image:linear-gradient(top,white,#f7f7f7)}.xj .ze{margin-left:-7px;margin-right:-7px}.g-mo .g-Jb{overflow:hidden;-webkit-transition:height .125s;-moz-transition:height .125s;-ms-transition:height .125s;-o-transition:height .125s;transition:height .125s}.g-Oa{display:table;width:100%}.g-ae .g-Oa{margin-top:6px}.g-Ac{color:#999;cursor:text;display:table-cell;font-size:14px;height:35px;line-height:normal;overflow:hidden;padding-left:10px;white-space:nowrap;vertical-align:middle}.g-ae .g-Ac{display:none}.g-Cb .g-as{display:none}.g-as{margin-right:-1000px;overflow:hidden;text-overflow:ellipsis;width:100%}.g-dr{margin-right:-1000px;overflow:hidden;text-overflow:ellipsis;width:100%;display:none}.g-Cb .g-dr{display:block}.g-Vc .g-U-pd,.g-Vc .g-td-Oa,.g-Vc .qf,.uB .g-U-pd,.vB .qf{height:1px;overflow:hidden;position:absolute;top:-1000em;width:1px}.g-cb-ei-Oa{display:table-cell;padding-left:12px;padding-top:1px;text-align:right;white-space:nowrap}.g-cb-r{display:inline-block;margin:8px 10px 6px}.me .g-cb-r{outline:none}.eh{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -189px;height:16px;width:21px;margin-left:0;cursor:default}.eh-E{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -290px;cursor:pointer}.eh-ga{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -739px}.mh{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -773px;height:16px;width:22px;cursor:default}.mh-E{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -258px;cursor:pointer}.mh-ga{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -530px}.lh{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -471px;width:22px;height:16px;cursor:default}.lh-E{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -334px;cursor:pointer}.lh-ga{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -102px}.xj .qf{border-style:solid;border-color:#c4c4c4;border-width:0 1px 1px 1px;padding:13px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;background-color:#dbdbdb;background-image:-webkit-linear-gradient(top,#f5f5f5,#f0f0f0);background-image:-moz-linear-gradient(top,#f5f5f5,#f0f0f0);background-image:-ms-linear-gradient(top,#f5f5f5,#f0f0f0);background-image:-o-linear-gradient(top,#f5f5f5,#f0f0f0);background-image:linear-gradient(top,#f5f5f5,#f0f0f0);-webkit-box-shadow:0 1px 1px #e2e2e2;-moz-box-shadow:0 1px 1px #e2e2e2;box-shadow:0 1px 1px #e2e2e2}.g-Fa-M-Oa{display:inline-block}.g-RA-Fa-M{display:inline-block;border:1px solid #ccc;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#f5f5f5;background-image:-webkit-linear-gradient(top,#ddd,#f0f0f0);background-image:-moz-linear-gradient(top,#ddd,#f0f0f0);background-image:-ms-linear-gradient(top,#ddd,#f0f0f0);background-image:-o-linear-gradient(top,#ddd,#f0f0f0);background-image:linear-gradient(top,#ddd,#f0f0f0)}.g-Fa-M{cursor:pointer;display:inline-block;position:relative;vertical-align:top;margin-right:6px}.g-Fa-M-D{cursor:default!important}.g-Fa-M-Na{display:none}.g-Fa-M-Sg{color:#888;display:inline-block;font-size:13px;font-weight:bold;height:33px;padding:0 7px;line-height:33px;margin-right:6px;vertical-align:middle;border-right:1px solid #ccc;border-top-color:#d6d6d6;background-color:#f4f4f4;background-image:-webkit-linear-gradient(top,#fff,#f4f4f4);background-image:-moz-linear-gradient(top,#fff,#f4f4f4);background-image:-ms-linear-gradient(top,#fff,#f4f4f4);background-image:-o-linear-gradient(top,#fff,#f4f4f4);background-image:linear-gradient(top,#fff,#f4f4f4)}.g-Fa-M-Sg:active{-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1);background-color:#f4f4f4;background-image:-webkit-linear-gradient(top,#f6f6f6,#f4f4f4);background-image:-moz-linear-gradient(top,#f6f6f6,#f4f4f4);background-image:-ms-linear-gradient(top,#f6f6f6,#f4f4f4);background-image:-o-linear-gradient(top,#f6f6f6,#f4f4f4);background-image:linear-gradient(top,#f6f6f6,#f4f4f4)}.g-Fa-M-Vb-Oa{display:inline-block;height:23px;position:relative;width:23px;vertical-align:top;margin:4px 2px 4px 0;border:1px solid #888}.g-Fa-M-Vb{height:23px;position:absolute;vertical-align:top;width:23px;left:0;top:0;-webkit-transition:all .125s;-moz-transition:all .125s;-ms-transition:all .125s;-o-transition:all .125s;transition:all .125s;z-index:9}.g-Fa-M-Ee-r{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -636px;height:13px;width:13px;left:-5px;opacity:0;position:absolute;top:-5px;-webkit-transition:all .125s;-moz-transition:all .125s;-ms-transition:all .125s;-o-transition:all .125s;transition:all .125s;z-index:11}.g-Fa-M-Vb-E{-webkit-box-shadow:0 2px 6px #aaa;-moz-box-shadow:0 2px 6px #aaa;box-shadow:0 2px 6px #aaa;height:38px;left:-8px;top:-8px;width:38px;z-index:10;border:1px solid #888}.g-Fa-M-Ee-r-E{left:-10px;opacity:1;top:-10px}.g-J-b-ia{white-space:nowrap}.g-Ub .g-Oa,.g-Ub .g-Pa-ya-xb{display:none}.g-U-pd .i-u-g-U{border:0;margin-right:20px;overflow:auto}.g-U-pd .g-U-pe-z{color:#ccc;font-size:14px}.g-Ub .g-U-pd .i-u-g-U{min-height:20px;margin-right:0;max-height:120px}.g-U-pd{border:1px solid #c4c4c4;padding:8px 9px;cursor:text;position:relative;-webkit-box-shadow:inset 0 1px 2px #ddd;-moz-box-shadow:inset 0 1px 2px #ddd;box-shadow:inset 0 1px 2px #ddd;background-color:white}.g-sf-o{float:right;padding-right:6px;font-size:13px;line-height:24px}.g-sf-W{float:right;width:24px;height:24px;background-size:100%;position:relative;margin-right:1px}.OB{font-size:11px;color:#999;clear:both;margin-top:15px}.g-Ac{border:1px solid #c4c4c4;width:330px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-shadow:inset 0 1px 2px #ddd;-moz-box-shadow:inset 0 1px 2px #ddd;box-shadow:inset 0 1px 2px #ddd;background-color:#fafafa;background-image:-webkit-linear-gradient(top,#f7f7f7,white);background-image:-moz-linear-gradient(top,#f7f7f7,white);background-image:-ms-linear-gradient(top,#f7f7f7,white);background-image:-o-linear-gradient(top,#f7f7f7,white);background-image:linear-gradient(top,#f7f7f7,white)}.g-o-bc-Kc{display:block;margin-left:auto;margin-right:auto;padding-top:4px;padding-bottom:4px}.g .i-k-j-yi{margin-bottom:13px;margin-top:0}.g-cb-wa{margin:10px 0}.g-Pa-ya{background:#ffc;font-weight:bold;padding:5px 26px 5px 11px;position:relative}.g-Pa-ya-xb{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -16px -275px;height:9px;width:9px;cursor:pointer;position:absolute;right:10px;top:9px}.g-R{width:497px}.g-t-xc-s{padding:6px 15px;width:auto;text-align:left}.g-t-S{color:#36c;cursor:pointer;font-weight:bold;padding:7px 30px 7px 0;white-space:nowrap}.g-t-S-r{display:inline-block;position:relative;top:3px;margin-right:10px}.g-t-S-r-hd{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -619px;width:16px;height:16px}.g-t-S-r-Ia{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) -8px -422px;width:16px;height:16px}.g-t-S-r-Rc-W{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -439px;width:16px;height:16px}.g-t-S-r-te-M,.g-t-S-r-te-de{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -722px;width:16px;height:16px}.g-t-S-r-ec{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -756px;width:16px;height:16px}.g-t-S-r-Rc-za{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -241px;width:16px;height:16px}.g-t-S-r-Ib-W,.g-t-S-r-Ib-za{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -547px;width:16px;height:16px}.g-se{color:#888;font-size:9px arial,sans-serif;border-top:dashed 1px #ddd;margin-top:20px;padding:15px 0 0 23px;position:relative}.g-se-r{background:no-repeat url(//ssl.gstatic.com/s2/tt/images/sharebox/sharebox-739b83df773fe79be28fcda8eccb064c.png) 0 -172px;width:16px;height:16px;position:absolute;top:16px;left:0}.g-k-Yj{width:438px;background:#fcf6e1;text-align:center;font-size:12px;font-weight:bold;color:#333;border:1px solid #bebebe;border-top:none;-webkit-box-shadow:0 1px 5px #ccc;-moz-box-shadow:0 1px 5px #ccc;box-shadow:0 1px 5px #ccc;padding:8px 0;position:absolute;left:0;top:0}.g-Di-yc-s{background-color:#f9edbe!important;border:1px solid #f0c36d!important;margin:20px 0 8px 0;padding:18px;position:relative}.g-Di-yc-s-Z{font-weight:bold;margin-bottom:5px}.XUa{padding:20px}.u-L-w{width:200px!important}.i-k-j-ba{max-height:160px;overflow:auto}.XUa .i-u-g-U{max-height:120px}sentinel{}
\ No newline at end of file
diff --git a/tests/html.expected.htm b/tests/html.expected.htm
new file mode 100644
index 0000000..9183bfa
--- /dev/null
+++ b/tests/html.expected.htm
@@ -0,0 +1,410 @@
+
+
+
+
+
+ °Ù¶Èһϣ¬Äã¾ÍÖªµÀ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/html.htm b/tests/html.htm
new file mode 100644
index 0000000..d19c348
--- /dev/null
+++ b/tests/html.htm
@@ -0,0 +1,418 @@
+
+
+
+
+
+ °Ù¶Èһϣ¬Äã¾ÍÖªµÀ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/html2.expected.htm b/tests/html2.expected.htm
new file mode 100644
index 0000000..c5231fc
--- /dev/null
+++ b/tests/html2.expected.htm
@@ -0,0 +1,3598 @@
+
+
+
+
+
+ Google
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/html2.htm b/tests/html2.htm
new file mode 100644
index 0000000..fb39974
--- /dev/null
+++ b/tests/html2.htm
@@ -0,0 +1,66 @@
+Google
\ No newline at end of file
diff --git a/tests/js.expected.js b/tests/js.expected.js
new file mode 100644
index 0000000..d24f500
--- /dev/null
+++ b/tests/js.expected.js
@@ -0,0 +1,3902 @@
+(function () {
+ var a, b = window.T,
+ c = "http";
+ scheme = c + "://", host = "open.t.qq.com", a = {
+ name: "Tencent weibo SDK",
+ version: "1.0",
+ appkey: {
+ value: "{APPKEY}",
+ version: "{APPKEY_VERSION}",
+ verified: !1
+ },
+ debug: !0,
+ pingback: !0,
+ _domain: {
+ api: scheme + host + "{API_URI}",
+ auth: scheme + host + "{AUTH_URI}",
+ query: scheme + host + "{QUERY_TOKEN_URI}",
+ exchange: scheme + host + "{EXCHANGE_TOKEN_URI}",
+ flashproxy: scheme + host + "{FLASHPROXY_URI}",
+ serverproxy: scheme + host + "{SERVERPROXY_URI}",
+ clientproxy: "{CLIENTPROXY_URI}"
+ },
+ _const: {
+ AUTH_WINDOW_NAME: "authClientProxy_ee5a0f93",
+ AUTH_WINDOW_WIDTH: 575,
+ AUTH_WINDOW_HEIGHT: 465
+ },
+ _cookie: {
+ names: {
+ accessToken: "QQWBToken",
+ refreshToken: "QQWBRefreshToken"
+ },
+ path: "/",
+ domain: ""
+ },
+ noConflict: function () {
+ return b && (window.T = b), a
+ },
+ copy: function (a, b, c, d) {
+ for (var e in b) if (c || typeof a[e] == "undefined") a[e] = d ? d(b[e]) : b[e];
+ return a
+ },
+ create: function (a, b) {
+ var c = this,
+ d = a ? a.split(".") : [],
+ e = d.length;
+ for (var f = 0; f < e; f++) {
+ var g = d[f],
+ h = c[g];
+ h || (h = b && f + 1 === e ? b : {}, c[g] = h), c = h
+ }
+ return c
+ },
+ extend: function (b, c, d) {
+ return a.copy(typeof b == "string" ? a.create.call(this, b) : b, c, d)
+ },
+ _alias: function (b, c) {
+ c = c || a;
+ if (typeof b == "string") this[b] = c;
+ else if (Object.prototype.toString.call(b) === "[object Array]") for (var d = 0, e = b.length; d < e; d++) this[b[d]] = c
+ },
+ alias: function (b, c) {
+ a._alias(b, a[c])
+ },
+ assign: function (a, b, c) {
+ var d = this,
+ e = d,
+ f = a ? a.split(".") : [],
+ g = f.length;
+ for (var h = 0; h < g; h++) {
+ var i = f[h],
+ j = d[i];
+ if (!j) throw new Error("Tencent weibo SDK: [ERROR] no such name " + i);
+ e = d, d = j
+ }
+ if (typeof d == "string") e[i] = d.replace(new RegExp("\\{" + b + "\\}", "ig"), c);
+ else if (typeof d == "object") for (var k in d) d.hasOwnProperty(k) && typeof d[k] == "string" && (d[k] = d[k].replace(new RegExp("\\{" + b + "\\}", "ig"), c))
+ },
+ uid: function () {
+ return Math.random().toString(16).substr(2)
+ }
+ }, a.alias("provide", "create"), a._alias.call(window, ["QQWB", "T"], a), a.assign("_domain", "API_URI", "/api"), a.assign("_domain", "AUTH_URI", "/oauth2_html/login.php"), a.assign("_domain", "SERVERPROXY_URI", "/open-js/proxy.html"), a.assign("_domain", "FLASHPROXY_URI", "/open-js/proxy_v15.swf"), a.assign("_domain", "EXCHANGE_TOKEN_URI", "/cgi-bin/exchange_token"), a.assign("_domain", "QUERY_TOKEN_URI", "/cgi-bin/auto_token")
+})(), QQWB.extend("String", {
+ _trimLeft: /^\s+/,
+ _trimRight: /\s+$/,
+ isString: function (a) {
+ return typeof a == "string"
+ },
+ ltrim: function (a) {
+ return a == null ? "" : a.toString().replace(this._trimLeft, "")
+ },
+ rtrim: function (a) {
+ return a == null ? "" : a.toString().replace(this._trimRight, "")
+ },
+ trim: String.prototype.trim ?
+ function (a) {
+ return a == null ? "" : String.prototype.trim.call(a)
+ } : function (a) {
+ return a == null ? "" : a.toString().replace(this._trimLeft, "").replace(this._trimRight, "")
+ },
+ startsWith: String.prototype.startsWith ?
+ function (a, b) {
+ return a == null ? !1 : String.prototype.startsWith.call(a, b)
+ } : function (a, b) {
+ return a == null ? !1 : a.toString().indexOf(b) == 0
+ },
+ endsWith: String.prototype.endsWith ?
+ function (a, b) {
+ return a == null ? !1 : String.prototype.endsWith.call(a, b)
+ } : function (a, b) {
+ return a == null ? !1 : a.toString().lastIndexOf(b) >= 0 && a.toString().lastIndexOf(b) + b.length == a.length
+ }
+}), QQWB.extend("_const", {
+ HTTP_METHOD_GET: "GET",
+ HTTP_METHOD_POST: "POST",
+ HTTP_METHOD_GET_OR_POST: "GET | POST",
+ API_CATEGORY_TIMELINE: "时间线",
+ API_CATEGORY_WEIBO: "å¾®åšç›¸å…³",
+ API_CATEGORY_ACCOUNT: "账户相关",
+ API_CATEGORY_RELATION: "关系链相关",
+ API_CATEGORY_SIXIN: "ç§ä¿¡ç›¸å…³",
+ API_CATEGORY_SEARCH: "æœç´¢ç›¸å…³",
+ API_CATEGORY_TRENS: "çƒåº¦è¶‹åŠ¿",
+ API_CATEGORY_QUERY: "查看数æ®",
+ API_CATEGORY_FAVORITE: "æ•°æ®æ”¶è—",
+ API_CATEGORY_TOPIC: "è¯é¢˜ç›¸å…³",
+ API_CATEGORY_TAG: "æ ‡ç¾ç›¸å…³",
+ API_CATEGORY_OTHER: "其他",
+ API_NO_DESCRIPTION: "暂时没有关于æ¤å‚数的说明",
+ API_NO_DEFAULT_VALUE: "",
+ COMMON_NULL: null,
+ COMMON_EMPTY_STRING: ""
+}), QQWB.extend("_apiProvider", {
+ _apiRetError: {
+ 1: "å‚数错误",
+ 2: "频率å—é™",
+ 3: "鉴æƒå¤±è´¥",
+ 4: "内部错误"
+ },
+ _apiErrorCode: {
+ 4: "过多è„è¯",
+ 5: "ç¦æ¢è®¿é—®",
+ 6: "记录ä¸å˜åœ¨",
+ 8: "内容过长",
+ 9: "内容包å«åžƒåœ¾ä¿¡æ¯",
+ 10: "å‘表太快,频率é™åˆ¶",
+ 11: "æºæ¶ˆæ¯ä¸å˜åœ¨",
+ 12: "未知错误",
+ 13: "é‡å¤å‘表"
+ },
+ _apiParseRetCode: function (a) {
+ var b = a.match(/\"ret\":(\d+)\}/) || a.match(/(\d+)<\/ret>/);
+ return b ? parseInt(b[1], 10) : b
+ },
+ _apiParseErrorCode: function (a) {
+ var b = a.match(/\"errcode\":(-?\d+)/) || a.match(/(\d+)<\/errcode>/);
+ return b ? parseInt(b[1], 10) : b
+ },
+ _apiGetErrorMessage: function (a, b) {
+ var c = [],
+ a = a + "",
+ b = b + "",
+ d = QQWB._apiProvider._apiRetError[a],
+ e = QQWB._apiProvider._apiErrorCode[b];
+ return d && c.push(d), e && c.push(e), c.length > 0 ? c.join(",") : "未知错误"
+ },
+ apis: {
+ "/statuses/home_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "主页时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/home_timeline_vip": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "vip用户时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "2",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/public_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "广æ’大厅时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/user_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "其他用户å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/mentions_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "@æ到我的时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "0x1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/ht_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "è¯é¢˜æ—¶é—´çº¿",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ httext: {
+ defaultValue: "pBoard",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageinfo: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/broadcast_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "我å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/special_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "特别收å¬çš„人å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/broadcast_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "我å‘表时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/home_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "首页时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/mentions_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "æåŠæˆ‘的时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/user_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "用户å‘表时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/users_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "多用户å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ names: {
+ defaultValue: "t,api_weibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/users_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "多用户å‘表时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ names: {
+ defaultValue: "t,api_weibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/area_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "åŒåŸŽå‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ country: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ province: {
+ defaultValue: 11,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ city: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/ht_timeline_ext": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "è¯é¢˜æ—¶é—´çº¿(ä¿®å¤ç¿»é¡µé—®é¢˜)",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ flag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ httext: {
+ defaultValue: "iweibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ htid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/show": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–一æ¡å¾®åšæ•°æ®",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ id: {
+ defaultValue: 51545056800467,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/del": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "åˆ é™¤ä¸€æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 94035056272295,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/re_add": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "转æ’一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 77048060858014,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/reply": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "回å¤ä¸€æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 77048060858014,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_pic": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表一æ¡å›¾ç‰‡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pic: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_emotion": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表一æ¡å¿ƒæƒ…å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ signtype: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/re_count": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "转æ’数或点评数",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ ids: {
+ defaultValue: 0xb04fd23c98500000,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ flag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/re_list": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–å•æ¡å¾®åšçš„转å‘和点评列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ flag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ rootid: {
+ defaultValue: 92035070199751,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "2",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ twitterid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/comment": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "点评一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 28135069067568,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_music": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表音频微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ url: {
+ defaultValue: "http://url.cn",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ title: {
+ defaultValue: "æŒå",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ author: {
+ defaultValue: "演唱者",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 12345678,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_video": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表视频微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ url: {
+ defaultValue: "http://url.cn",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_video": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表视频微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ url: {
+ defaultValue: "http://url.cn",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/getvideoinfo": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–视频信æ¯",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ url: {
+ defaultValue: "http://v.youku.com/v_show/id_XMjExODczODM2.html",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/list": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "æ ¹æ®å¾®åšID批é‡å¾—到微åšæ•°æ®",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ids: {
+ defaultValue: "39110101242147,39578069128701",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_video_prev": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "预å‘表一æ¡è§†é¢‘å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ vid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ title: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/sub_re_count": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–转æ’çš„å†æ¬¡è½¬æ’æ•°",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ids: {
+ defaultValue: "8171051658365,55054116813124",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/info": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "获å–自己的详细资料",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/user/update": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "更新个人资料",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ nick: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ sex: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ year: {
+ defaultValue: 2e3,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ month: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ day: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ countrycode: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ provincecode: {
+ defaultValue: 11,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ citycode: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ introduction: {
+ defaultValue: "xxxx",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/update_edu": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "更新个人教育信æ¯",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ year: {
+ defaultValue: 1995,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ level: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ schoolid: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ field: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ departmentid: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/update_head": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "更新个人资料头åƒ",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ pic: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/other_info": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "获å–其他人资料",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/infos": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "多用户信æ¯",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ names: {
+ defaultValue: "t,api_weibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/verify": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "验è¯è´¦æˆ·æ˜¯å¦åˆæ³•ï¼ˆæ˜¯å¦æ³¨å†Œå¾®åšï¼‰",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/emotion": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "获å–心情微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ id: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ timstamp: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ emotiontype: {
+ defaultValue: "0xFFFFFFFF",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/fanslist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "我的å¬ä¼—列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/idollist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "我收å¬çš„人列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/blacklist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "黑åå•åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/speciallist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "特别收å¬åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/add": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/del": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "å–消收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/addspecial": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "特别收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/delspecial": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "å–消特别收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/addblacklist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "æ·»åŠ æŸä¸ªç”¨æˆ·åˆ°é»‘åå•",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/delblacklist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "从黑åå•ä¸åˆ 除æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/check": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "检查是å¦æˆ‘çš„å¬ä¼—或收å¬çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ names: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ flag: {
+ defaultValue: "2",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/user_fanslist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "其他账户å¬ä¼—列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/user_idollist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "其他账户收å¬çš„人列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/user_speciallist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "其他账户特别收å¬çš„人列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/fanslist_s": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "多å¬ä¼—列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 100,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/idollist_s": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "多收å¬äººåˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 100,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/mutual_list": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "互å¬å…³ç³»é“¾åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/add": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "å‘ç§ä¿¡",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "mmplayer",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/del": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "åˆ é™¤ä¸€æ¡ç§ä¿¡",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 26154115313103,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/recv": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "收件箱",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/send": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "å‘件箱",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/search/user": {
+ category: QQWB._const.API_CATEGORY_SEARCH,
+ description: "æœç´¢ç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ keyword: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagesize: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ page: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/search/t": {
+ category: QQWB._const.API_CATEGORY_SEARCH,
+ description: "æœç´¢å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ keyword: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagesize: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ page: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/search/userbytag": {
+ category: QQWB._const.API_CATEGORY_SEARCH,
+ description: "é€šè¿‡æ ‡ç¾æœç´¢ç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ keyword: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagesize: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ page: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/trends/ht": {
+ category: QQWB._const.API_CATEGORY_TRENS,
+ description: "è¯é¢˜çƒæ¦œ",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ type: {
+ defaultValue: "3",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/trends/t": {
+ category: QQWB._const.API_CATEGORY_TRENS,
+ description: "çƒé—¨è½¬æ’",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/info/update": {
+ category: QQWB._const.API_CATEGORY_QUERY,
+ description: "æ›´æ–°æ¡æ•°",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ op: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "9",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/addt": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "收è—一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/delt": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "å–消收è—一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/list_t": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "收è—çš„å¾®åšåˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ nexttime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ prevtime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/addht": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "订阅è¯é¢˜",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/delht": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "å–消收è—è¯é¢˜",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/list_ht": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "获å–已订阅è¯é¢˜åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/ht/ids": {
+ category: QQWB._const.API_CATEGORY_TOPIC,
+ description: "æ ¹æ®è¯é¢˜å称查询è¯é¢˜ID",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ httexts: {
+ defaultValue: "abc,efg",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/ht/info": {
+ category: QQWB._const.API_CATEGORY_TOPIC,
+ description: "æ ¹æ®è¯é¢˜ID获å–è¯é¢˜ç›¸å…³å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ids: {
+ defaultValue: 0xb04fd23c98500000,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/tag/add": {
+ category: QQWB._const.API_CATEGORY_TAG,
+ description: "æ·»åŠ æ ‡ç¾",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ tag: {
+ defaultValue: "snow",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/tag/del": {
+ category: QQWB._const.API_CATEGORY_TAG,
+ description: "åˆ é™¤æ ‡ç¾",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ tagid: {
+ defaultValue: 0x4735d427dffb9400,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/kownperson": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "我å¯èƒ½è®¤è¯†çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ country_code: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ province_code: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ city_code: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/kownperson": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "å¯èƒ½è®¤è¯†çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/other/shorturl": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "çŸURL转长URL",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ url: {
+ defaultValue: "3M6GSa",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/get_emotions": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "获å–表情接å£",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ type: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/kownperson": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "我å¯èƒ½è®¤è¯†çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/videokey": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "获å–è§†é¢‘ä¸Šä¼ çš„key",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/other/gettopreadd": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "一键转æ’çƒé—¨æŽ’è¡Œ",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/other/url_converge": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "çŸurlèšåˆ",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ }
+ },
+ getDescriptor: function (a) {
+ return this.apis[a]
+ },
+ isProvide: function (a) {
+ return !!this.getDescriptor(a)
+ },
+ describe: function (a) {
+ var b = this.getDescriptor(a);
+ return b ? b.category + ">" + b.description : ""
+ },
+ compat: function (a) {
+ return !QQWB.String.startsWith(a, "/") && (a = "/" + a), a.toLowerCase()
+ }
+});
+var JSON;
+JSON || (JSON = {}), function () {
+ function f(a) {
+ return a < 10 ? "0" + a : a
+ }
+ function quote(a) {
+ return escapable.lastIndex = 0, escapable.test(a) ? '"' + a.replace(escapable, function (a) {
+ var b = meta[a];
+ return typeof b == "string" ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
+ }) + '"' : '"' + a + '"'
+ }
+ function str(a, b) {
+ var c, d, e, f, g = gap,
+ h, i = b[a];
+ i && typeof i == "object" && typeof i.toJSON == "function" && (i = i.toJSON(a)), typeof rep == "function" && (i = rep.call(b, a, i));
+ switch (typeof i) {
+ case "string":
+ return quote(i);
+ case "number":
+ return isFinite(i) ? String(i) : "null";
+ case "boolean":
+ case "null":
+ return String(i);
+ case "object":
+ if (!i) return "null";
+ gap += indent, h = [];
+ if (Object.prototype.toString.apply(i) === "[object Array]") {
+ f = i.length;
+ for (c = 0; c < f; c += 1) h[c] = str(c, i) || "null";
+ return e = h.length === 0 ? "[]" : gap ? "[\n" + gap + h.join(",\n" + gap) + "\n" + g + "]" : "[" + h.join(",") + "]", gap = g, e
+ }
+ if (rep && typeof rep == "object") {
+ f = rep.length;
+ for (c = 0; c < f; c += 1) typeof rep[c] == "string" && (d = rep[c], e = str(d, i), e && h.push(quote(d) + (gap ? ": " : ":") + e))
+ } else for (d in i) Object.prototype.hasOwnProperty.call(i, d) && (e = str(d, i), e && h.push(quote(d) + (gap ? ": " : ":") + e));
+ return e = h.length === 0 ? "{}" : gap ? "{\n" + gap + h.join(",\n" + gap) + "\n" + g + "}" : "{" + h.join(",") + "}", gap = g, e
+ }
+ }
+ "use strict", typeof Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function (a) {
+ return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
+ }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (a) {
+ return this.valueOf()
+ });
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap, indent, meta = {
+ "\b": "\\b",
+ "\t": "\\t",
+ "\n": "\\n",
+ "\f": "\\f",
+ "\r": "\\r",
+ '"': '\\"',
+ "\\": "\\\\"
+ },
+ rep;
+ typeof JSON.stringify != "function" && (JSON.stringify = function (a, b, c) {
+ var d;
+ gap = "", indent = "";
+ if (typeof c == "number") for (d = 0; d < c; d += 1) indent += " ";
+ else typeof c == "string" && (indent = c);
+ rep = b;
+ if (!b || typeof b == "function" || typeof b == "object" && typeof b.length == "number") return str("", {
+ "": a
+ });
+ throw new Error("JSON.stringify")
+ }), typeof JSON.parse != "function" && (JSON.parse = function (text, reviver) {
+ function walk(a, b) {
+ var c, d, e = a[b];
+ if (e && typeof e == "object") for (c in e) Object.prototype.hasOwnProperty.call(e, c) && (d = walk(e, c), d !== undefined ? e[c] = d : delete e[c]);
+ return reviver.call(a, b, e)
+ }
+ var j;
+ text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function (a) {
+ return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
+ }));
+ if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"), typeof reviver == "function" ? walk({
+ "": j
+ }, "") : j;
+ throw new SyntaxError("JSON.parse")
+ })
+}(), QQWB.extend("JSON", {
+ fromString: function (a) {
+ if (!a || !QQWB.String.isString(a)) return {};
+ a = a.replace(/^\s+/, "").replace(/\s+$/, "");
+ if (window.JSON && window.JSON.parse) a = window.JSON.parse(a);
+ else if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) a = (new Function("return " + data))();
+ else throw new SyntaxError("Invalid JSON: " + a);
+ return a
+ },
+ stringify: function (a) {
+ return a == null ? "" : window.JSON.stringify(a)
+ },
+ toString: function (a) {
+ return QQWB.JSON.stringify(a)
+ },
+ parse: function (a) {
+ return a == null ? {} : window.JSON.parse(a)
+ }
+}, !0), QQWB.provide("man", function (a) {
+ return a = this._apiProvider.compat(a), this._apiProvider.getDescriptor(a) ? QQWB.JSON.stringify(this._apiProvider.getDescriptor(a)) : "no such api"
+}), QQWB.extend("Array", {
+ isArray: function (a) {
+ return Object.prototype.toString.call(a) === "[object Array]"
+ },
+ inArray: function (a, b) {
+ for (var c = 0, d = a.length; c < d; c++) if (b === a[c]) return !0;
+ return !1
+ },
+ fromString: function (a, b, c) {
+ return QQWB.String.isString(a) ? (b = b || "", c ? a.split(b, c) : a.split(b)) : []
+ },
+ fromArguments: function (a, b) {
+ return typeof a != "object" ? [] : b ? Array.prototype.slice.call(a, b) : Array.prototype.slice.call(a)
+ },
+ toArray: function (a) {
+ return typeof a == "string" ? a.split("") : typeof a == "object" ? Array.prototype.slice.call(a, 0) : this.toArray(a.toString())
+ },
+ each: function (a, b) {
+ for (var c = 0, d = a.length; c < d; c++) if (!1 === b(c, a[c])) break
+ },
+ get: function (a, b) {
+ var c = a.length;
+ if (Math.abs(b) < c) return b >= 0 ? a[b] : a[c + b]
+ }
+}), QQWB.extend("dom", {
+ create: function (a, b) {
+ var c = document.createElement(a + "");
+ if (b && c) for (attr in b) b.hasOwnProperty(attr) && (QQWB.String.startsWith(attr, "data-") ? c.setAttribute(attr, b[attr]) : c[attr] = b[attr]);
+ return c
+ },
+ createHidden: function (a, b, c) {
+ a = a || "div";
+ var d = this.create(a, b);
+ return c ? (d.width = d.height = 0, d.style.width = d.style.height = 0, d.style.position = "absolute", d.style.top = "-9999px") : d.style.display = "none", d
+ },
+ append: function (a, b) {
+ return b = b || document.body, a && a.nodeType && b.appendChild(a), this
+ },
+ html: function (a, b) {
+ return a && a.nodeType && b && (a.innerHTML = b), this
+ },
+ appendHidden: function (a, b, c) {
+ var d = this.createHidden(null, b, c);
+ return this.html(d, a), this.append(d)
+ },
+ remove: function (a) {
+ return a && a.nodeType && a.parentNode && a.parentNode.removeChild(a), this
+ },
+ hasClass: function (a, b) {
+ return (" " + a.className + " ").indexOf(" " + b + " ") >= 0
+ },
+ addClass: function (a, b) {
+ return b = QQWB.String.trim(b), QQWB.Array.isArray(a) ? (QQWB.Array.each(a, function (a, c) {
+ QQWB.dom.addClass(c, b)
+ }), this) : (QQWB.dom.hasClass(a, b) || (a.className = a.className + " " + b), this)
+ },
+ removeClass: function (a, b) {
+ return b = QQWB.String.trim(b), QQWB.Array.isArray(a) ? (QQWB.Array.each(a, function (a, c) {
+ QQWB.dom.removeClass(c, b)
+ }), this) : (QQWB.dom.hasClass(a, b) && (a.className = a.className.replace(b, ""), QQWB.dom.removeClass(a, b)), this)
+ }
+}), QQWB.extend("queryString", {
+ encode: function (a, b, c, d) {
+ var e = /%20/g,
+ f = b || "&",
+ g = c || encodeURIComponent,
+ h = [],
+ i = [],
+ j, k;
+ for (j in a) if (a.hasOwnProperty(j)) {
+ k = a[j];
+ if (k !== null && typeof k != "undefined") {
+ j = g(j).replace(e, "+"), k = g(k).replace(e, "+");
+ if (!d) h.push(j + "=" + k);
+ else for (var l = 0, m = d.length; l < m; l++) d[l] === j && (h[l] = j + "=" + k)
+ }
+ }
+ for (var n = 0, o = h.length; n < o; n++) typeof h[n] != "undefined" && i.push(h[n]);
+ return h = i, i = null, h.join(f)
+ },
+ decode: function (a, b, c) {
+ var d = c || decodeURIComponent,
+ e = b || "&",
+ f = a.split(e),
+ g = {},
+ h;
+ for (var i = 0, j = f.length; i < j; i++) h = f[i].split("=", 2), h && h[0] && (g[d(h[0])] = d(h[1]));
+ return g
+ }
+}), function () {
+ function q(a, b, c, d, e, f) {
+ for (var g = 0, h = d.length; g < h; g++) {
+ var i = d[g];
+ if (i) {
+ var j = !1;
+ i = i[a];
+ while (i) {
+ if (i.sizcache === c) {
+ j = d[i.sizset];
+ break
+ }
+ i.nodeType === 1 && !f && (i.sizcache = c, i.sizset = g);
+ if (i.nodeName.toLowerCase() === b) {
+ j = i;
+ break
+ }
+ i = i[a]
+ }
+ d[g] = j
+ }
+ }
+ }
+ function r(a, b, c, d, e, f) {
+ for (var g = 0, i = d.length; g < i; g++) {
+ var j = d[g];
+ if (j) {
+ var k = !1;
+ j = j[a];
+ while (j) {
+ if (j.sizcache === c) {
+ k = d[j.sizset];
+ break
+ }
+ if (j.nodeType === 1) {
+ f || (j.sizcache = c, j.sizset = g);
+ if (typeof b != "string") {
+ if (j === b) {
+ k = !0;
+ break
+ }
+ } else if (h.filter(b, [j]).length > 0) {
+ k = j;
+ break
+ }
+ }
+ j = j[a]
+ }
+ d[g] = k
+ }
+ }
+ }
+ var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ b = 0,
+ c = Object.prototype.toString,
+ d = !1,
+ e = !0,
+ f = /\\/g,
+ g = /\W/;
+ [0, 0].sort(function () {
+ return e = !1, 0
+ });
+ var h = function (b, d, e, f) {
+ e = e || [], d = d || document;
+ var g = d;
+ if (d.nodeType !== 1 && d.nodeType !== 9) return [];
+ if (!b || typeof b != "string") return e;
+ var k, l, n, o, p, q, r, t, u = !0,
+ v = h.isXML(d),
+ w = [],
+ x = b;
+ do {
+ a.exec(""), k = a.exec(x);
+ if (k) {
+ x = k[3], w.push(k[1]);
+ if (k[2]) {
+ o = k[3];
+ break
+ }
+ }
+ } while (k);
+ if (w.length > 1 && j.exec(b)) if (w.length === 2 && i.relative[w[0]]) l = s(w[0] + w[1], d);
+ else {
+ l = i.relative[w[0]] ? [d] : h(w.shift(), d);
+ while (w.length) b = w.shift(), i.relative[b] && (b += w.shift()), l = s(b, l)
+ } else {
+ !f && w.length > 1 && d.nodeType === 9 && !v && i.match.ID.test(w[0]) && !i.match.ID.test(w[w.length - 1]) && (p = h.find(w.shift(), d, v), d = p.expr ? h.filter(p.expr, p.set)[0] : p.set[0]);
+ if (d) {
+ p = f ? {
+ expr: w.pop(),
+ set: m(f)
+ } : h.find(w.pop(), w.length === 1 && (w[0] === "~" || w[0] === "+") && d.parentNode ? d.parentNode : d, v), l = p.expr ? h.filter(p.expr, p.set) : p.set, w.length > 0 ? n = m(l) : u = !1;
+ while (w.length) q = w.pop(), r = q, i.relative[q] ? r = w.pop() : q = "", r == null && (r = d), i.relative[q](n, r, v)
+ } else n = w = []
+ }
+ n || (n = l), n || h.error(q || b);
+ if (c.call(n) === "[object Array]") if (!u) e.push.apply(e, n);
+ else if (d && d.nodeType === 1) for (t = 0; n[t] != null; t++) n[t] && (n[t] === !0 || n[t].nodeType === 1 && h.contains(d, n[t])) && e.push(l[t]);
+ else for (t = 0; n[t] != null; t++) n[t] && n[t].nodeType === 1 && e.push(l[t]);
+ else m(n, e);
+ return o && (h(o, g, e, f), h.uniqueSort(e)), e
+ };
+ h.uniqueSort = function (a) {
+ if (o) {
+ d = e, a.sort(o);
+ if (d) for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1)
+ }
+ return a
+ }, h.matches = function (a, b) {
+ return h(a, null, null, b)
+ }, h.matchesSelector = function (a, b) {
+ return h(b, null, null, [a]).length > 0
+ }, h.find = function (a, b, c) {
+ var d;
+ if (!a) return [];
+ for (var e = 0, g = i.order.length; e < g; e++) {
+ var h, j = i.order[e];
+ if (h = i.leftMatch[j].exec(a)) {
+ var k = h[1];
+ h.splice(1, 1);
+ if (k.substr(k.length - 1) !== "\\") {
+ h[1] = (h[1] || "").replace(f, ""), d = i.find[j](h, b, c);
+ if (d != null) {
+ a = a.replace(i.match[j], "");
+ break
+ }
+ }
+ }
+ }
+ return d || (d = typeof b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []), {
+ set: d,
+ expr: a
+ }
+ }, h.filter = function (a, b, c, d) {
+ var e, f, g = a,
+ j = [],
+ k = b,
+ l = b && b[0] && h.isXML(b[0]);
+ while (a && b.length) {
+ for (var m in i.filter) if ((e = i.leftMatch[m].exec(a)) != null && e[2]) {
+ var n, o, p = i.filter[m],
+ q = e[1];
+ f = !1, e.splice(1, 1);
+ if (q.substr(q.length - 1) === "\\") continue;
+ k === j && (j = []);
+ if (i.preFilter[m]) {
+ e = i.preFilter[m](e, k, c, j, d, l);
+ if (!e) f = n = !0;
+ else if (e === !0) continue
+ }
+ if (e) for (var r = 0;
+ (o = k[r]) != null; r++) if (o) {
+ n = p(o, e, r, k);
+ var s = d ^ !! n;
+ c && n != null ? s ? f = !0 : k[r] = !1 : s && (j.push(o), f = !0)
+ }
+ if (n !== undefined) {
+ c || (k = j), a = a.replace(i.match[m], "");
+ if (!f) return [];
+ break
+ }
+ }
+ if (a === g) if (f == null) h.error(a);
+ else break;
+ g = a
+ }
+ return k
+ }, h.error = function (a) {
+ throw "Syntax error, unrecognized expression: " + a
+ };
+ var i = h.selectors = {
+ order: ["ID", "NAME", "TAG"],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function (a) {
+ return a.getAttribute("href")
+ },
+ type: function (a) {
+ return a.getAttribute("type")
+ }
+ },
+ relative: {
+ "+": function (a, b) {
+ var c = typeof b == "string",
+ d = c && !g.test(b),
+ e = c && !d;
+ d && (b = b.toLowerCase());
+ for (var f = 0, i = a.length, j; f < i; f++) if (j = a[f]) {
+ while ((j = j.previousSibling) && j.nodeType !== 1);
+ a[f] = e || j && j.nodeName.toLowerCase() === b ? j || !1 : j === b
+ }
+ e && h.filter(b, a, !0)
+ },
+ ">": function (a, b) {
+ var c, d = typeof b == "string",
+ e = 0,
+ f = a.length;
+ if (d && !g.test(b)) {
+ b = b.toLowerCase();
+ for (; e < f; e++) {
+ c = a[e];
+ if (c) {
+ var i = c.parentNode;
+ a[e] = i.nodeName.toLowerCase() === b ? i : !1
+ }
+ }
+ } else {
+ for (; e < f; e++) c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
+ d && h.filter(b, a, !0)
+ }
+ },
+ "": function (a, c, d) {
+ var e, f = b++,
+ h = r;
+ typeof c == "string" && !g.test(c) && (c = c.toLowerCase(), e = c, h = q), h("parentNode", c, f, a, e, d)
+ },
+ "~": function (a, c, d) {
+ var e, f = b++,
+ h = r;
+ typeof c == "string" && !g.test(c) && (c = c.toLowerCase(), e = c, h = q), h("previousSibling", c, f, a, e, d)
+ }
+ },
+ find: {
+ ID: function (a, b, c) {
+ if (typeof b.getElementById != "undefined" && !c) {
+ var d = b.getElementById(a[1]);
+ return d && d.parentNode ? [d] : []
+ }
+ },
+ NAME: function (a, b) {
+ if (typeof b.getElementsByName != "undefined") {
+ var c = [],
+ d = b.getElementsByName(a[1]);
+ for (var e = 0, f = d.length; e < f; e++) d[e].getAttribute("name") === a[1] && c.push(d[e]);
+ return c.length === 0 ? null : c
+ }
+ },
+ TAG: function (a, b) {
+ if (typeof b.getElementsByTagName != "undefined") return b.getElementsByTagName(a[1])
+ }
+ },
+ preFilter: {
+ CLASS: function (a, b, c, d, e, g) {
+ a = " " + a[1].replace(f, "") + " ";
+ if (g) return a;
+ for (var h = 0, i;
+ (i = b[h]) != null; h++) i && (e ^ (i.className && (" " + i.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(i) : c && (b[h] = !1));
+ return !1
+ },
+ ID: function (a) {
+ return a[1].replace(f, "")
+ },
+ TAG: function (a, b) {
+ return a[1].replace(f, "").toLowerCase()
+ },
+ CHILD: function (a) {
+ if (a[1] === "nth") {
+ a[2] || h.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
+ var c = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
+ a[2] = c[1] + (c[2] || 1) - 0, a[3] = c[3] - 0
+ } else a[2] && h.error(a[0]);
+ return a[0] = b++, a
+ },
+ ATTR: function (a, b, c, d, e, g) {
+ var h = a[1] = a[1].replace(f, "");
+ return !g && i.attrMap[h] && (a[1] = i.attrMap[h]), a[4] = (a[4] || a[5] || "").replace(f, ""), a[2] === "~=" && (a[4] = " " + a[4] + " "), a
+ },
+ PSEUDO: function (b, c, d, e, f) {
+ if (b[1] === "not") if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3])) b[3] = h(b[3], null, null, c);
+ else {
+ var g = h.filter(b[3], c, d, !0 ^ f);
+ return d || e.push.apply(e, g), !1
+ } else if (i.match.POS.test(b[0]) || i.match.CHILD.test(b[0])) return !0;
+ return b
+ },
+ POS: function (a) {
+ return a.unshift(!0), a
+ }
+ },
+ filters: {
+ enabled: function (a) {
+ return a.disabled === !1 && a.type !== "hidden"
+ },
+ disabled: function (a) {
+ return a.disabled === !0
+ },
+ checked: function (a) {
+ return a.checked === !0
+ },
+ selected: function (a) {
+ return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
+ },
+ parent: function (a) {
+ return !!a.firstChild
+ },
+ empty: function (a) {
+ return !a.firstChild
+ },
+ has: function (a, b, c) {
+ return !!h(c[3], a).length
+ },
+ header: function (a) {
+ return /h\d/i.test(a.nodeName)
+ },
+ text: function (a) {
+ var b = a.getAttribute("type"),
+ c = a.type;
+ return a.nodeName.toLowerCase() === "input" && "text" === c && (b === c || b === null)
+ },
+ radio: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "radio" === a.type
+ },
+ checkbox: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "checkbox" === a.type
+ },
+ file: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "file" === a.type
+ },
+ password: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "password" === a.type
+ },
+ submit: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return (b === "input" || b === "button") && "submit" === a.type
+ },
+ image: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "image" === a.type
+ },
+ reset: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return (b === "input" || b === "button") && "reset" === a.type
+ },
+ button: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return b === "input" && "button" === a.type || b === "button"
+ },
+ input: function (a) {
+ return /input|select|textarea|button/i.test(a.nodeName)
+ },
+ focus: function (a) {
+ return a === a.ownerDocument.activeElement
+ }
+ },
+ setFilters: {
+ first: function (a, b) {
+ return b === 0
+ },
+ last: function (a, b, c, d) {
+ return b === d.length - 1
+ },
+ even: function (a, b) {
+ return b % 2 === 0
+ },
+ odd: function (a, b) {
+ return b % 2 === 1
+ },
+ lt: function (a, b, c) {
+ return b < c[3] - 0
+ },
+ gt: function (a, b, c) {
+ return b > c[3] - 0
+ },
+ nth: function (a, b, c) {
+ return c[3] - 0 === b
+ },
+ eq: function (a, b, c) {
+ return c[3] - 0 === b
+ }
+ },
+ filter: {
+ PSEUDO: function (a, b, c, d) {
+ var e = b[1],
+ f = i.filters[e];
+ if (f) return f(a, c, b, d);
+ if (e === "contains") return (a.textContent || a.innerText || h.getText([a]) || "").indexOf(b[3]) >= 0;
+ if (e === "not") {
+ var g = b[3];
+ for (var j = 0, k = g.length; j < k; j++) if (g[j] === a) return !1;
+ return !0
+ }
+ h.error(e)
+ },
+ CHILD: function (a, b) {
+ var c = b[1],
+ d = a;
+ switch (c) {
+ case "only":
+ case "first":
+ while (d = d.previousSibling) if (d.nodeType === 1) return !1;
+ if (c === "first") return !0;
+ d = a;
+ case "last":
+ while (d = d.nextSibling) if (d.nodeType === 1) return !1;
+ return !0;
+ case "nth":
+ var e = b[2],
+ f = b[3];
+ if (e === 1 && f === 0) return !0;
+ var g = b[0],
+ h = a.parentNode;
+ if (h && (h.sizcache !== g || !a.nodeIndex)) {
+ var i = 0;
+ for (d = h.firstChild; d; d = d.nextSibling) d.nodeType === 1 && (d.nodeIndex = ++i);
+ h.sizcache = g
+ }
+ var j = a.nodeIndex - f;
+ return e === 0 ? j === 0 : j % e === 0 && j / e >= 0
+ }
+ },
+ ID: function (a, b) {
+ return a.nodeType === 1 && a.getAttribute("id") === b
+ },
+ TAG: function (a, b) {
+ return b === "*" && a.nodeType === 1 || a.nodeName.toLowerCase() === b
+ },
+ CLASS: function (a, b) {
+ return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1
+ },
+ ATTR: function (a, b) {
+ var c = b[1],
+ d = i.attrHandle[c] ? i.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
+ e = d + "",
+ f = b[2],
+ g = b[4];
+ return d == null ? f === "!=" : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
+ },
+ POS: function (a, b, c, d) {
+ var e = b[2],
+ f = i.setFilters[e];
+ if (f) return f(a, c, b, d)
+ }
+ }
+ },
+ j = i.match.POS,
+ k = function (a, b) {
+ return "\\" + (b - 0 + 1)
+ };
+ for (var l in i.match) i.match[l] = new RegExp(i.match[l].source + /(?![^\[]*\])(?![^\(]*\))/.source), i.leftMatch[l] = new RegExp(/(^(?:.|\r|\n)*?)/.source + i.match[l].source.replace(/\\(\d+)/g, k));
+ var m = function (a, b) {
+ return a = Array.prototype.slice.call(a, 0), b ? (b.push.apply(b, a), b) : a
+ };
+ try {
+ Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType
+ } catch (n) {
+ m = function (a, b) {
+ var d = 0,
+ e = b || [];
+ if (c.call(a) === "[object Array]") Array.prototype.push.apply(e, a);
+ else if (typeof a.length == "number") for (var f = a.length; d < f; d++) e.push(a[d]);
+ else for (; a[d]; d++) e.push(a[d]);
+ return e
+ }
+ }
+ var o, p;
+ document.documentElement.compareDocumentPosition ? o = function (a, b) {
+ return a === b ? (d = !0, 0) : !a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition ? -1 : 1 : a.compareDocumentPosition(b) & 4 ? -1 : 1
+ } : (o = function (a, b) {
+ if (a === b) return d = !0, 0;
+ if (a.sourceIndex && b.sourceIndex) return a.sourceIndex - b.sourceIndex;
+ var c, e, f = [],
+ g = [],
+ h = a.parentNode,
+ i = b.parentNode,
+ j = h;
+ if (h === i) return p(a, b);
+ if (!h) return -1;
+ if (!i) return 1;
+ while (j) f.unshift(j), j = j.parentNode;
+ j = i;
+ while (j) g.unshift(j), j = j.parentNode;
+ c = f.length, e = g.length;
+ for (var k = 0; k < c && k < e; k++) if (f[k] !== g[k]) return p(f[k], g[k]);
+ return k === c ? p(a, g[k], -1) : p(f[k], b, 1)
+ }, p = function (a, b, c) {
+ if (a === b) return c;
+ var d = a.nextSibling;
+ while (d) {
+ if (d === b) return -1;
+ d = d.nextSibling
+ }
+ return 1
+ }), h.getText = function (a) {
+ var b = "",
+ c;
+ for (var d = 0; a[d]; d++) c = a[d], c.nodeType === 3 || c.nodeType === 4 ? b += c.nodeValue : c.nodeType !== 8 && (b += h.getText(c.childNodes));
+ return b
+ }, function () {
+ var a = document.createElement("div"),
+ b = "script" + (new Date).getTime(),
+ c = document.documentElement;
+ a.innerHTML = "", c.insertBefore(a, c.firstChild), document.getElementById(b) && (i.find.ID = function (a, b, c) {
+ if (typeof b.getElementById != "undefined" && !c) {
+ var d = b.getElementById(a[1]);
+ return d ? d.id === a[1] || typeof d.getAttributeNode != "undefined" && d.getAttributeNode("id").nodeValue === a[1] ? [d] : undefined : []
+ }
+ }, i.filter.ID = function (a, b) {
+ var c = typeof a.getAttributeNode != "undefined" && a.getAttributeNode("id");
+ return a.nodeType === 1 && c && c.nodeValue === b
+ }), c.removeChild(a), c = a = null
+ }(), function () {
+ var a = document.createElement("div");
+ a.appendChild(document.createComment("")), a.getElementsByTagName("*").length > 0 && (i.find.TAG = function (a, b) {
+ var c = b.getElementsByTagName(a[1]);
+ if (a[1] === "*") {
+ var d = [];
+ for (var e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]);
+ c = d
+ }
+ return c
+ }), a.innerHTML = "", a.firstChild && typeof a.firstChild.getAttribute != "undefined" && a.firstChild.getAttribute("href") !== "#" && (i.attrHandle.href = function (a) {
+ return a.getAttribute("href", 2)
+ }), a = null
+ }(), document.querySelectorAll &&
+ function () {
+ var a = h,
+ b = document.createElement("div"),
+ c = "__sizzle__";
+ b.innerHTML = "";
+ if (b.querySelectorAll && b.querySelectorAll(".TEST").length === 0) return;
+ h = function (b, d, e, f) {
+ d = d || document;
+ if (!f && !h.isXML(d)) {
+ var g = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
+ if (g && (d.nodeType === 1 || d.nodeType === 9)) {
+ if (g[1]) return m(d.getElementsByTagName(b), e);
+ if (g[2] && i.find.CLASS && d.getElementsByClassName) return m(d.getElementsByClassName(g[2]), e)
+ }
+ if (d.nodeType === 9) {
+ if (b === "body" && d.body) return m([d.body], e);
+ if (g && g[3]) {
+ var j = d.getElementById(g[3]);
+ if (!j || !j.parentNode) return m([], e);
+ if (j.id === g[3]) return m([j], e)
+ }
+ try {
+ return m(d.querySelectorAll(b), e)
+ } catch (k) {}
+ } else if (d.nodeType === 1 && d.nodeName.toLowerCase() !== "object") {
+ var l = d,
+ n = d.getAttribute("id"),
+ o = n || c,
+ p = d.parentNode,
+ q = /^\s*[+~]/.test(b);
+ n ? o = o.replace(/'/g, "\\$&") : d.setAttribute("id", o), q && p && (d = d.parentNode);
+ try {
+ if (!q || p) return m(d.querySelectorAll("[id='" + o + "'] " + b), e)
+ } catch (r) {} finally {
+ n || l.removeAttribute("id")
+ }
+ }
+ }
+ return a(b, d, e, f)
+ };
+ for (var d in a) h[d] = a[d];
+ b = null
+ }(), function () {
+ var a = document.documentElement,
+ b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
+ if (b) {
+ var c = !b.call(document.createElement("div"), "div"),
+ d = !1;
+ try {
+ b.call(document.documentElement, "[test!='']:sizzle")
+ } catch (e) {
+ d = !0
+ }
+ h.matchesSelector = function (a, e) {
+ e = e.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+ if (!h.isXML(a)) try {
+ if (d || !i.match.PSEUDO.test(e) && !/!=/.test(e)) {
+ var f = b.call(a, e);
+ if (f || !c || a.document && a.document.nodeType !== 11) return f
+ }
+ } catch (g) {}
+ return h(e, null, null, [a]).length > 0
+ }
+ }
+ }(), function () {
+ var a = document.createElement("div");
+ a.innerHTML = "";
+ if (!a.getElementsByClassName || a.getElementsByClassName("e").length === 0) return;
+ a.lastChild.className = "e";
+ if (a.getElementsByClassName("e").length === 1) return;
+ i.order.splice(1, 0, "CLASS"), i.find.CLASS = function (a, b, c) {
+ if (typeof b.getElementsByClassName != "undefined" && !c) return b.getElementsByClassName(a[1])
+ }, a = null
+ }(), document.documentElement.contains ? h.contains = function (a, b) {
+ return a !== b && (a.contains ? a.contains(b) : !0)
+ } : document.documentElement.compareDocumentPosition ? h.contains = function (a, b) {
+ return !!(a.compareDocumentPosition(b) & 16)
+ } : h.contains = function () {
+ return !1
+ }, h.isXML = function (a) {
+ var b = (a ? a.ownerDocument || a : 0).documentElement;
+ return b ? b.nodeName !== "HTML" : !1
+ };
+ var s = function (a, b) {
+ var c, d = [],
+ e = "",
+ f = b.nodeType ? [b] : b;
+ while (c = i.match.PSEUDO.exec(a)) e += c[0], a = a.replace(i.match.PSEUDO, "");
+ a = i.relative[a] ? a + "*" : a;
+ for (var g = 0, j = f.length; g < j; g++) h(a, f[g], d);
+ return h.filter(e, d)
+ },
+ t = window.Sizzle;
+ h.noConflict = function () {
+ window.Sizzle = t
+ }, window.Sizzle = h
+}(), function () {
+ function b(b) {
+ var c;
+ if (!QQWB.Array.isArray(this)) return this;
+ c = [];
+ for (var d = 0, e = this.length; d < e; d++) c = c.concat(a(b, this[d]));
+ return c
+ }
+ function c(b) {
+ return typeof b != "string" ? this : b.length <= 0 ? this : a.matches(":contains(" + b + ")", this)
+ }
+ function d(b) {
+ return a.matches(b, this)
+ }
+ function e(b) {
+ return a.matches(":not(" + b + ")", this)
+ }
+ function f(a) {
+ return QQWB.Array.get(this, a)
+ }
+ function g(a) {
+ if (!QQWB.Array.isArray(this) || !a) return this;
+ for (var b = 0, c = this.length; b < c; b++) if (a(this[b]) === !1) break;
+ return this
+ }
+ function h(a) {
+ return !a.find && (a.find = function (c) {
+ return h(b.call(a, c))
+ }), !a.contains && (a.contains = function (b) {
+ return h(c.call(a, b))
+ }), !a.keep && (a.keep = function (b) {
+ return h(d.call(a, b))
+ }), !a.tear && (a.tear = function (b) {
+ return h(e.call(a, b))
+ }), !a.get && (a.get = function (b) {
+ return f.call(a, b)
+ }), !a.each && (a.each = function (b) {
+ return g.call(a, b)
+ }), a
+ }
+ var a = window.Sizzle;
+ a.noConflict(), QQWB.provide("dom.find", function (b, c) {
+ return h(a(b, c))
+ }), QQWB._alias("find", QQWB.dom.find)
+}(), function () {
+ var a = function () {
+ function b(a) {
+ return Object.prototype.toString.call(a).slice(8, -1).toLowerCase()
+ }
+ function c(a, b) {
+ for (var c = []; b > 0; c[--b] = a);
+ return c.join("")
+ }
+ var d = function () {
+ return d.cache.hasOwnProperty(arguments[0]) || (d.cache[arguments[0]] = d.parse(arguments[0])), d.format.call(null, d.cache[arguments[0]], arguments)
+ };
+ return d.format = function (d, e) {
+ var f = 1,
+ g = d.length,
+ h = "",
+ i, j = [],
+ k, l, m, n, o, p;
+ for (k = 0; k < g; k++) {
+ h = b(d[k]);
+ if (h === "string") j.push(d[k]);
+ else if (h === "array") {
+ m = d[k];
+ if (m[2]) {
+ i = e[f];
+ for (l = 0; l < m[2].length; l++) {
+ if (!i.hasOwnProperty(m[2][l])) throw a('[sprintf] property "%s" does not exist', m[2][l]);
+ i = i[m[2][l]]
+ }
+ } else m[1] ? i = e[m[1]] : i = e[f++];
+ if (/[^s]/.test(m[8]) && b(i) != "number") throw a("[sprintf] expecting number but found %s", b(i));
+ switch (m[8]) {
+ case "b":
+ i = i.toString(2);
+ break;
+ case "c":
+ i = String.fromCharCode(i);
+ break;
+ case "d":
+ i = parseInt(i, 10);
+ break;
+ case "e":
+ i = m[7] ? i.toExponential(m[7]) : i.toExponential();
+ break;
+ case "f":
+ i = m[7] ? parseFloat(i).toFixed(m[7]) : parseFloat(i);
+ break;
+ case "o":
+ i = i.toString(8);
+ break;
+ case "s":
+ i = (i = i ? String(i) : "") && m[7] ? i.substring(0, m[7]) : i;
+ break;
+ case "u":
+ i = Math.abs(i);
+ break;
+ case "x":
+ i = i.toString(16);
+ break;
+ case "X":
+ i = i.toString(16).toUpperCase()
+ }
+ i = /[def]/.test(m[8]) && m[3] && i >= 0 ? "+" + i : i, o = m[4] ? m[4] == "0" ? "0" : m[4].charAt(1) : " ", p = m[6] - String(i).length, n = m[6] ? c(o, p) : "", j.push(m[5] ? i + n : n + i)
+ }
+ }
+ return j.join("")
+ }, d.cache = {}, d.parse = function (a) {
+ var b = a,
+ c = [],
+ d = [],
+ e = 0;
+ while (b) {
+ if ((c = /^[^\x25]+/.exec(b)) !== null) d.push(c[0]);
+ else if ((c = /^\x25{2}/.exec(b)) !== null) d.push("%");
+ else {
+ if ((c = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b)) === null) throw "[sprintf] huh?";
+ if (c[2]) {
+ e |= 1;
+ var f = [],
+ g = c[2],
+ h = [];
+ if ((h = /^([a-z_][a-z_\d]*)/i.exec(g)) === null) throw "[sprintf] huh?";
+ f.push(h[1]);
+ while ((g = g.substring(h[0].length)) !== "") if ((h = /^\.([a-z_][a-z_\d]*)/i.exec(g)) !== null) f.push(h[1]);
+ else if ((h = /^\[(\d+)\]/.exec(g)) !== null) f.push(h[1]);
+ else throw "[sprintf] huh?";
+ c[2] = f
+ } else e |= 2;
+ if (e === 3) throw "[sprintf] mixing positional and named placeholders is not (yet) supported";
+ d.push(c)
+ }
+ b = b.substring(c[0].length)
+ }
+ return d
+ }, d
+ }(),
+ b = function (b, c) {
+ return c.unshift(b), a.apply(null, c)
+ };
+ QQWB.extend("String.format", {
+ sprintf: a,
+ vsprintf: b
+ }), QQWB._alias("format", QQWB.String.format)
+}(), QQWB.extend("time", {
+ now: function () {
+ return +this.dateNow()
+ },
+ secondsNow: function () {
+ return Math.round(this.now() / 1e3)
+ },
+ dateNow: function () {
+ return new Date
+ },
+ shortTime: function (a, b) {
+ return a instanceof Date || (b = a, a = this.dateNow()), b = b || "%(year)s/%(month)s/%(day)s %(hour)02d:%(minute)02d:%(second)02d", QQWB.format.sprintf(b, {
+ year: a.getFullYear(),
+ month: a.getMonth(),
+ day: a.getDate(),
+ hour: a.getHours(),
+ minute: a.getMinutes(),
+ second: a.getSeconds()
+ })
+ }
+}), QQWB.extend("log", {
+ CRITICAL: 50,
+ ERROR: 40,
+ WARNING: 30,
+ INFO: 20,
+ DEBUG: 10,
+ NOTSET: 0,
+ _level: 0,
+ _format: "%(source)s%(popup)s%(frame)s%(name)s: [%(levelname)s] %(time)s %(message)s",
+ setLevel: function (a) {
+ return this._level = a, this
+ },
+ setFormat: function (a) {
+ return this._format = a, this
+ },
+ debug: function (a) {
+ return this.DEBUG >= this._level && this._out("DEBUG", a), this
+ },
+ info: function (a) {
+ return this.INFO >= this._level && this._out("INFO", a), this
+ },
+ warning: function (a) {
+ return this.WARNING >= this._level && this._out("WARNING", a), this
+ },
+ error: function (a) {
+ return this.ERROR >= this._level && this._out("ERROR", a), this
+ },
+ critical: function (a) {
+ return this.CRITICAL >= this._level && this._out("CRITICAL", a), this
+ },
+ _out: function (a, b) {
+ var c = this._format;
+ c = QQWB.format.sprintf(c, {
+ name: QQWB.name,
+ levelname: a,
+ time: QQWB.time.shortTime(),
+ message: b,
+ frame: window != window.parent ? "*" : "",
+ source: window.name ? window.name : "",
+ popup: window.opener || window.name === QQWB._const.AUTH_WINDOW_NAME ? "#" : ""
+ }), this._capture && typeof this._captureLevel == "number" && this[a] > this._captureLevel && this._capturedMessages && (this._capturedMessages.length >= this._captureMaxSize && this._capturedMessages.shift(), this._capturedMessages.push(c)), QQWB.debug && window.console && window.console.log(c)
+ },
+ startCapture: function (a, b) {
+ return this._captureLevel = a || this.NOTSET, this._captureMaxSize = b || 50, this._capturedMessages = [], this._capture = !0, this
+ },
+ stopCapture: function () {
+ return this._capture && (this._capture = !1), this
+ },
+ lastCaptured: function (a) {
+ return a = a || "\n", this._capturedMessages ? this._capturedMessages.join(a) : ""
+ }
+}), QQWB.extend("cookie", {
+ set: function (a, b, c, d, e, f) {
+ f = f || escape;
+ if (typeof c == "undefined" || c === null) c = -1;
+ var g = e ? "domain=" + e : "",
+ h = d ? "path=" + d : "",
+ i = "";
+ return c === 0 ? i = "expires=" + (new Date(1970, 1, 1)).toUTCString() : c > 0 && (i = "expires=" + (new Date(+(new Date) + c * 1e3)).toUTCString()), document.cookie = [a + "=" + f(b), i, h, g].join("; "), this
+ },
+ get: function (a, b, c) {
+ b = b || unescape;
+ var d = a + "=";
+ cookies = (document.cookie || "").split(/\s*;\s*/);
+ for (var e = 0, f = cookies.length; e < f; e++) {
+ var g = cookies[e];
+ if (g.indexOf(d) === 0) return b(g.substr(d.length))
+ }
+ return c
+ },
+ del: function (a, b, c) {
+ return this.set(a, "", 0, b, c), document.cookie.indexOf(a + "=") >= 0 && QQWB.log.warning("Cookie may not be deleted as you expected"), this
+ }
+}), QQWB.extend("XML", {
+ isXML: function (a) {},
+ toString: function (a) {
+ return this.stringify(a)
+ },
+ stringify: function (a) {
+ var b;
+ return window.ActiveXObject ? b = a.xml : b = (new XMLSerializer).serializeToString(a), b
+ },
+ fromString: function (a) {
+ var b;
+ if (window.ActiveXObject) b = new ActiveXObject("Microsoft.XMLDOM"), b.async = "false", b.loadXML(a);
+ else {
+ var c = new DOMParser;
+ b = c.parseFromString(a, "text/xml")
+ }
+ return b
+ }
+}, !0), QQWB.extend("Function", {
+ isFunction: function (a) {
+ return typeof a == "function"
+ }
+}), QQWB.extend("deferred", {
+ _promiseMethods: "done fail isResolved isRejected promise then always success error complete whatever".split(" "),
+ _deferred: function () {
+ var a = [],
+ b, c, d, e = {
+ done: function () {
+ if (!d) {
+ var c = arguments,
+ f, g;
+ b && (g = b, b = 0);
+ for (var h = 0, i = c.length; h < i; h++) f = c[h], QQWB.Array.isArray(f) ? e.done.apply(e, f) : QQWB.Function.isFunction(f) && a.push(f);
+ g && e.resolveWith(g[0], g[1])
+ }
+ return this
+ },
+ resolveWith: function (e, f) {
+ if (!d && !b && !c) {
+ f = f || [], c = 1;
+ try {
+ while (a[0]) a.shift().apply(e, f)
+ } finally {
+ b = [e, f], c = 0
+ }
+ }
+ return this
+ },
+ resolve: function () {
+ return e.resolveWith(this, arguments), this
+ },
+ isResolved: function () {
+ return !!c || !! b
+ },
+ cancel: function () {
+ return d = 1, a = [], this
+ }
+ };
+ return e
+ },
+ deferred: function (a) {
+ var b, c = QQWB.deferred._deferred(),
+ d = QQWB.deferred._deferred();
+ return QQWB.extend(c, {
+ fail: d.done,
+ then: function (a, b) {
+ return c.done(a).fail(b), this
+ },
+ always: function () {
+ return c.done.apply(c, arguments).fail.apply(this, arguments)
+ },
+ rejectWith: d.resolveWith,
+ reject: d.resolve,
+ isRejected: d.isResolved,
+ promise: function (a) {
+ if (a == null) {
+ if (b) return b;
+ b = a = {}
+ }
+ var d = QQWB.deferred._promiseMethods.length;
+ while (d--) a[QQWB.deferred._promiseMethods[d]] = c[QQWB.deferred._promiseMethods[d]];
+ return a
+ }
+ }), c.success = c.done, c.error = c.fail, c.complete = c.whatever = c.always, c.done(d.cancel).fail(c.cancel), delete c.cancel, a && a.call(c, c), c
+ },
+ when: function (a) {
+ function f(a) {
+ return function (c) {
+ b[a] = arguments.length > 1 ? QQWB.Array.fromArguments(arguments) : c, --d || e.resolveWith(e, QQWB.Array.fromArguments(b))
+ }
+ }
+ var b = arguments,
+ c = b.length,
+ d = c,
+ e = c <= 1 && a && QQWB.Function.isFunction(a.promise) ? a : QQWB.deferred.deferred();
+ if (c > 1) for (var g = 0; g < c; g++) b[g] && QQWB.Function.isFunction(b[g].promise) ? b[g].promise().then(f(g), e.reject) : --d, d || e.resolveWith(e, b);
+ else e !== a && e.resolveWith(e, c ? [a] : []);
+ return e.promise()
+ }
+}), QQWB._alias(["task", "when"], QQWB.deferred.when), QQWB.extend("io", {
+ _globalIOTimeout: 3e4,
+ _IOScript: function (a) {
+ var b, c, d = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
+ return {
+ send: function (e) {
+ var f = QQWB.time.now();
+ b = document.createElement("script"), b.async = "async", a.charset && (b.charset = a.charset), b.src = a.url, c = setTimeout(function () {
+ QQWB.log.warning("script loading timeout"), e(599, "network connect timeout", QQWB.time.now() - f)
+ }, QQWB.io._globalIOTimeout), b.onload = b.onreadystatechange = function (a, g) {
+ if (g || !b.readyState || /loaded|complete/.test(b.readyState)) clearTimeout(c), b.onload = b.onreadystatechange = null, d && b.parentNode && d.removeChild(b), b = null, !g && e && e.apply(QQWB, [200, "success", QQWB.time.now() - f]), g && e && e.apply(QQWB, [-1, "aborted", QQWB.time.now() - f])
+ }, b.onerror = function (a) {
+ clearTimeout(c), e && e.apply(QQWB, [404, a, QQWB.time.now() - f])
+ }, d.insertBefore(b, d.firstChild)
+ },
+ abort: function () {
+ b && b.onload(0, 1)
+ }
+ }
+ },
+ _IOAjax: function (a) {
+ var b, c, a = a || {},
+ d = window.XMLHttpRequest ? new window.XMLHttpRequest : new window.ActiveXObject("Microsoft.XMLHTTP");
+ return a.async || (a.async = "async"), {
+ send: function (e) {
+ var f = QQWB.time.now();
+ a.username ? d.open(a.type, a.url, a.async, a.username, a.password) : d.open(a.type, a.url, a.async);
+ try {
+ a.type == "POST" && d.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), d.setRequestHeader("X-Requested-With", "XMLHttpRequest"), d.setRequestHeader("X-Requested-From", "openjs")
+ } catch (g) {}
+ d.send(a.data || null), c = setTimeout(function () {
+ QQWB.log.warning("request timeout"), e(599, "network connect timeout", QQWB.time.now() - f)
+ }, QQWB.io._globalIOTimeout), b = function (g, h) {
+ var i, j, k, l, m, n;
+ try {
+ if (b && (h || d.readyState === 4)) {
+ b = null;
+ if (h) d.readyState !== 4 && d.abort();
+ else {
+ i = d.status, k = d.getAllResponseHeaders(), l = {}, n = d.responseXML, n && n.documentElement && (l.xml = n), l.text = d.responseText;
+ try {
+ j = d.statusText
+ } catch (o) {
+ j = ""
+ }
+ i === 1223 && (i = 204), a.dataType.toLowerCase() == "json" ? m = QQWB.JSON.fromString(l.text) : a.dataType.toLowerCase() == "xml" ? m = l.xml : m = l.text
+ }
+ clearTimeout(c), e(i, j, QQWB.time.now() - f, m, l.text, k, a.dataType)
+ }
+ } catch (p) {
+ var q = p;
+ i = -2, j = "", j += "Exception [Type:", j += q && q.type ? q.type : "unknown exception type", j += ", Message:", j += q && q.message ? q.message : q, j += "]", QQWB.log.warning("caught " + j + " exception QQWB.io._IOAjax"), h || (clearTimeout(c), e(i, j, QQWB.time.now() - f))
+ }
+ }, !a.async || d.readyState === 4 ? b() : d.onreadystatechange = b
+ },
+ abort: function () {
+ b && b(0, 1)
+ }
+ }
+ },
+ _IOFlash: function (a) {
+ var b, c, d, a = a || {};
+ return {
+ send: function (e) {
+ var f = QQWB.time.now();
+ d = 1, c = setTimeout(function () {
+ QQWB.log.warning("request timeout"), e(599, "network connect timeout", QQWB.time.now() - f)
+ }, QQWB.io._globalIOTimeout), b = function (d, g) {
+ var h, i, j, k, l, m, n = 4;
+ clearTimeout(c);
+ try {
+ b && (g || n == 4) && (b = null, g ? e(-1, "request has aborted", QQWB.time.now() - f) : (h = this.httpStatus, i = this.httpStatus == 200 ? "ok" : "", j = "", k = {}, k.text = this.httpResponseText, a.dataType.toLowerCase() == "json" ? l = QQWB.JSON.fromString(k.text) : a.dataType.toLowerCase() == "xml" ? l = QQWB.XML.fromString(k.text) : l = k.text), e(h, i, QQWB.time.now() - f, l, k.text, j, a.dataType))
+ } catch (o) {
+ var p = o;
+ h = -2, i = "", i += "Exception [Type:", i += p && p.type ? p.type : "unknown exception type", i += ", Message:", i += p && p.message ? p.message : p, i += "]", QQWB.log.warning("caught " + i + " exception QQWB.io._IOFlash"), g || e(h, i, QQWB.time.now() - f)
+ }
+ }, window.onFlashRequestComplete_8df046 || (window.onFlashRequestComplete_8df046 = function (a) {
+ if (!a.ticket) {
+ QQWB.log.error("ticket doesn't exists in response, " + QQWB.JSON.stringify(a));
+ return
+ }
+ var b = window.onFlashRequestComplete_8df046.callbacks.getByTicket(a.ticket),
+ c = a.srcEvent;
+ b.readyState || (b.readyState = 0), /httpStatus/i.test(c.type) ? (b.httpStatus = c.status, b.readyState++) : /error/i.test(c.type) ? (b.httpError = c.type, b.readyState++) : /complete/i.test(c.type) && (b.httpResponseText = c.target.data, b.readyState++), b.readyState == 2 && (b.call(b), window.onFlashRequestComplete_8df046.callbacks.unregister(a.ticket))
+ }, window.onFlashRequestComplete_8df046.callbacks = {
+ _callbackPool: {},
+ _ticketPrefix: "openjstkt",
+ _ticketStartIndex: 0,
+ register: function (a) {
+ var b;
+ return this._ticketStartIndex++, b = this._ticketPrefix + this._ticketStartIndex, this._callbackPool[b] = a, b
+ },
+ getByTicket: function (a) {
+ return this._callbackPool[a] || QQWB.log.error("get callback failed, callback doesn't exist at ticket " + a), this._callbackPool[a]
+ },
+ unregister: function (a) {
+ return this._callbackPool[a] ? (delete this._callbackPool[a], !0) : (QQWB.log.error("unregister callback failed, callback doesn't exist at ticket " + a), !1)
+ }
+ }), QQWBFlashTransport && QQWBFlashTransport.httpRequest ? QQWBFlashTransport.httpRequest(a.url, a.data, a.type, window.onFlashRequestComplete_8df046.callbacks.register(b)) : QQWB.log.critical("flash transportation object error" + QQWBFlashTransportName)
+ },
+ abort: function () {
+ b && b(0, 1)
+ }
+ }
+ },
+ _apiAjax: function (a, b, c, d) {
+ var e = {
+ type: d.toUpperCase(),
+ url: QQWB._domain.api + a,
+ data: QQWB.queryString.encode(b),
+ dataType: c
+ };
+ return e.type == "GET" && (e.url += e.data ? "?" + e.data : "", delete e.data), QQWB.io.ajax(e)
+ },
+ _apiFlashAjax: function (a, b, c, d) {
+ var e = {
+ type: d.toUpperCase(),
+ url: QQWB._domain.api + a,
+ data: QQWB.queryString.encode(b),
+ dataType: c
+ };
+ return e.type == "GET" && (e.url += e.data ? "?" + e.data : "", delete e.data), QQWB.io.flashAjax(e)
+ },
+ _apiResponder: function (a) {
+ return function (b, c, d, e, f, g, h) {
+ var i, j;
+ b !== 200 ? (b = 2e6 + Math.abs(b ? b : 0), a.reject(b, c, d, "")) : typeof (i = QQWB._apiProvider._apiParseRetCode(f)) == "number" && 0 !== i ? (j = QQWB._apiProvider._apiParseErrorCode(f), b = 1e6 + i * 1e3 + 500 + (j ? j : 0), a.reject(b, QQWB._apiProvider._apiGetErrorMessage(i, j), d, f)) : a.resolve(b, c, d, e, g, h)
+ }
+ },
+ _ajaxResponder: function (a) {
+ return function (b, c, d, e, f, g, h) {
+ b !== 200 ? a.reject(b, c, d, "") : a.resolve(e, d, f)
+ }
+ },
+ flashAjax: function (a) {
+ var b = QQWB.deferred.deferred(),
+ c = {
+ type: "get",
+ dataType: "json"
+ };
+ return QQWB.extend(c, a, !0), QQWB.io._IOFlash(c).send(QQWB.io._apiResponder(b)), b.promise()
+ },
+ ajax: function (a) {
+ var b = QQWB.deferred.deferred(),
+ c = {
+ type: "get",
+ dataType: "json"
+ };
+ return QQWB.extend(c, a, !0), QQWB.io._IOAjax(c).send(QQWB.io._apiResponder(b)), b.promise()
+ },
+ ajax2: function (a) {
+ var b = QQWB.deferred.deferred(),
+ c = {
+ type: "get",
+ dataType: "json"
+ };
+ return QQWB.extend(c, a, !0), QQWB.io._IOAjax(c).send(QQWB._ajaxResponder(b)), b.promise()
+ },
+ script: function (a, b) {
+ var b = b || "utf-8",
+ c = QQWB.deferred.deferred();
+ return QQWB.io._IOScript({
+ charset: b,
+ url: a
+ }).send(function (a, b, d) {
+ a !== 200 ? c.reject(a, b, d) : c.resolve(a, b, d)
+ }), c.promise()
+ },
+ jsonp: function (a) {
+ var b = QQWB.deferred.deferred(),
+ c = "callback",
+ d = "jsonp_",
+ e = d + QQWB.uid(),
+ f = window.callbackName,
+ g, h = {
+ dataType: "text",
+ charset: "utf-8",
+ url: ""
+ };
+ return QQWB.extend(h, a, !0), h.data && (h.url += "?" + h.data + "&" + c + "=" + e), window[e] = function (a) {
+ var c = a;
+ h.dataType.toLowerCase() === "json" ? c = QQWB.JSON.fromString(a) : h.dataType.toLowerCase() === "xml" && (c = QQWB.XML.fromString(a)), b.resolve(c, g), window[e] = f
+ }, QQWB.io._IOScript(h).send(function (a, c, d) {
+ a !== 200 && b.reject(a, c, d), g = d
+ }), b.promise()
+ }
+}), QQWB._alias("ajax", QQWB.io.ajax2), QQWB._alias("jsonp", QQWB.io.jsonp), QQWB._alias("script", QQWB.io.script), QQWB.extend("_token", {
+ setAccessToken: function (a, b, c, d) {
+ var e = this.getTokenUser(!0);
+ return QQWB.cookie.set(QQWB._cookie.names.accessToken, [a, QQWB.time.now() + b * 1e3, c || e && e.name || "", d || e && e.nick || ""].join("|"), 31536e3, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ getAccessToken: function (a) {
+ var b = QQWB.cookie.get(QQWB._cookie.names.accessToken);
+ if (b) {
+ b = b.split("|", 2);
+ if (a || parseInt(b[1], 10) > QQWB.time.now()) return b[0]
+ }
+ },
+ getTokenUser: function (a) {
+ var b = QQWB.cookie.get(QQWB._cookie.names.accessToken);
+ if (b) {
+ b = b.split("|", 4);
+ if (a || parseInt(b[1], 10) > QQWB.time.now()) return {
+ name: b[2],
+ nick: b[3]
+ }
+ }
+ },
+ clearAccessToken: function () {
+ return QQWB.cookie.del(QQWB._cookie.names.accessToken, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ setRefreshToken: function (a) {
+ return QQWB.cookie.set(QQWB._cookie.names.refreshToken, a, 31536e3, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ getRefreshToken: function () {
+ return QQWB.cookie.get(QQWB._cookie.names.refreshToken)
+ },
+ clearRefreshToken: function () {
+ return QQWB.cookie.del(QQWB._cookie.names.refreshToken, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ exchangeForToken: function (a) {
+ return QQWB.io.jsonp({
+ url: QQWB._domain.exchange,
+ data: QQWB.queryString.encode({
+ response_type: "token",
+ client_id: QQWB.appkey.value,
+ scope: "all",
+ state: "1",
+ refresh_token: this.getRefreshToken(),
+ access_token: this.getAccessToken(!0)
+ })
+ }).success(function (a) {
+ var b = a;
+ QQWB.String.isString(a) && (a = QQWB.queryString.decode(a)), a.access_token ? (!a.expires_in && QQWB.log.error("token expires_in not retrieved"), !a.wb_name && QQWB.log.warning("weibo username not retrieved, will not update username"), !a.wb_nick && QQWB.log.warning("weibo usernick not retrieved, will not update usernick"), QQWB._token.setAccessToken(a.access_token, parseInt(a.expires_in, 10), a.wb_name, a.wb_nick), a.refresh_token ? QQWB._token.setRefreshToken(a.refresh_token) : QQWB.log.error("refresh token not retrieved"), QQWB.log.info("exchange token succeed")) : a.error ? QQWB.log.error("exchange token error " + a.error) : QQWB.log.error("unexpected result returned from server " + b + " while exchanging for new access token")
+ }).error(function (a, b) {
+ a === 404 ? QQWB.log.error("exchange token has failed, script not found") : QQWB.log.error("exchange token has failed, " + b)
+ }).complete(function (b, c, d) {
+ a && a.apply(QQWB, [b, c, d])
+ }), QQWB
+ },
+ getNewAccessToken: function (a) {
+ return QQWB.io.jsonp({
+ url: QQWB._domain.query,
+ data: QQWB.queryString.encode({
+ response_type: "token",
+ client_id: QQWB.appkey.value,
+ scope: "all",
+ state: "1"
+ })
+ }).success(function (a) {
+ var b = a;
+ QQWB.String.isString(a) && (a = QQWB.queryString.decode(a)), a.access_token ? (!a.expires_in && QQWB.log.error("token expires_in not retrieved"), !a.wb_name && QQWB.log.warning("weibo username not retrieved"), !a.wb_nick && QQWB.log.warning("weibo usernick not retrieved"), QQWB._token.setAccessToken(a.access_token, parseInt(a.expires_in, 10), a.wb_name, a.wb_nick), a.refresh_token ? QQWB._token.setRefreshToken(a.refresh_token) : QQWB.log.error("refresh token not retrieved"), QQWB.log.info("retrieve new access token succeed")) : a.error ? QQWB.log.error("retrieve new access token error " + a.error) : QQWB.log.error("unexpected result returned from server " + b + " while retrieving new access token")
+ }).error(function (a, b) {
+ a === 404 ? QQWB.log.error("get token has failed, script not found") : QQWB.log.error("get token failed, " + b)
+ }).complete(function (b, c, d) {
+ a && a.apply(QQWB, [b, c, d])
+ }), QQWB
+ },
+ resolveResponse: function (a, b) {
+ var c, d = (b || window).QQWB,
+ e = QQWB.String.isString(a) ? d.queryString.decode(a) : a;
+ e.access_token ? (d._token.setAccessToken(e.access_token, parseInt(e.expires_in, 10), e.wb_name, e.wb_nick), e.refresh_token ? d._token.setRefreshToken(e.refresh_token) : d.log.error("refresh token not retrieved"), c = d.loginStatus(), d.log.info("user " + c.name + " logged in"), d.trigger(d.events.USER_LOGGEDIN_EVENT, c)) : e.error ? (d.log.error("login error occurred " + e.error), e.message = e.error, d.trigger(d.events.USER_LOGIN_FAILED_EVENT, e)) : (d.log.error("unexpected result returned from server " + a), e.message = e.error = "server error", d.trigger(d.events.USER_LOGIN_FAILED_EVENT, e))
+ }
+}), QQWB.extend("_eventProvider", {
+ _getEventsMap: function () {
+ return this._eventsMap || (this._eventsMap = {}), this._eventsMap
+ },
+ bind: function (a, b) {
+ var c = this._getEventsMap();
+ c[a] ? QQWB.Array.inArray(c[a], b) || c[a].push(b) : c[a] = [b]
+ },
+ unbind: function (a, b) {
+ var c = this._getEventsMap()[a];
+ if (c) if (b) for (var d = 0, e = c.length; d < e; d++) b === c[d] && (c[d] = null);
+ else delete this._getEventsMap()[a]
+ },
+ trigger: function (a, b) {
+ var c = this._getEventsMap()[a];
+ if (c) for (var d = 0, e = c.length; d < e; d++) {
+ var f = c[d];
+ f && f.call(QQWB, b)
+ }
+ }
+}), QQWB.extend("", {
+ bind: function (a, b) {
+ return a = a.toLowerCase(), this._eventProvider.bind(a, b), this
+ },
+ once: function (a, b) {
+ a = a.toLowerCase();
+ var c = function () {
+ var d = QQWB.Array.fromArguments(arguments);
+ b.apply(QQWB, d), this._eventProvider.unbind(a, c), c = null
+ };
+ return this._eventProvider.bind(a, c), this
+ },
+ unbind: function (a, b) {
+ return a = a.toLowerCase(), this._eventProvider.unbind(a, b), this
+ },
+ trigger: function (a, b) {
+ return a = a.toLowerCase(), this._eventProvider.trigger(a, b), this
+ }
+}), QQWB.extend("events", {
+ USER_LOGGEDIN_EVENT: "UserLoggedIn",
+ USER_LOGIN_FAILED_EVENT: "UserLoginFailed",
+ USER_LOGGEDOUT_EVENT: "UserLoggedOut",
+ TOKEN_READY_EVENT: "tokenReady",
+ DOCUMENT_READY_EVENT: "documentReady",
+ EVERYTHING_READY_EVENT: "everythingReady"
+}), function () {
+ function j(a) {
+ a = a.toLowerCase();
+ var b = e.exec(a) || d.exec(a) || c.exec(a) || a.indexOf("compatible") < 0 && f.exec(a) || [];
+ return {
+ browser: b[1] || "unknown",
+ version: b[2] || "0"
+ }
+ }
+ function k() {
+ for (var a in i) i.hasOwnProperty(a) && i[a]() && (g[a] = !0)
+ }
+ function l() {
+ var a = navigator.userAgent || navigator.vendor || window.opera;
+ return /android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) ? {
+ mobile: !0
+ } : {
+ pc: !0
+ }
+ }
+ function m() {
+ var a = navigator.appVersion,
+ b = {},
+ c = "unknown";
+ return a.indexOf("Win") != -1 && (c = "windows"), a.indexOf("Mac") != -1 && (c = "mac"), a.indexOf("X11") != -1 && (c = "unix"), a.indexOf("Linux") != -1 && (c = "linux"), b[c] = !0, b
+ }
+ var a, b = navigator.userAgent,
+ c = /(msie) ([\w.]+)/,
+ d = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ e = /(webkit)[ \/]([\w.]+)/,
+ f = /(mozilla)(?:.*? rv:([\w.]+))?/,
+ g = {},
+ h = ["Webkit", "Moz", "O", "ms", "khtml"],
+ i = {
+ cookie: function () {
+ var a = navigator.cookieEnabled;
+ if (a && QQWB.browser.webkit) {
+ var b = "COOKIE_TEST_" + QQWB.uid();
+ document.cookie = b + "=" + 1 + "; domain=; path=;", document.cookie.indexOf(b) < 0 ? a = !1 : document.cookie = b + "=" + "; expires=" + (new Date(1970, 1, 1)).toUTCString() + "; domain=; path=;"
+ }
+ return !a && QQWB.log.critical("Your browser doesn't support cookie or cookie isn't enabled"), a
+ },
+ flash: function () {
+ if (typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") {
+ var a = navigator.plugins["Shockwave Flash"].description,
+ b = typeof navigator.mimeTypes != "undefined" && navigator.mimeTypes["application/x-shockwave-flash"] && navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
+ return a && b
+ }
+ if (typeof window.ActiveXObject != "undefined") try {
+ var c = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ if (c) return c.getVariable("$version")
+ } catch (d) {}
+ },
+ userdata: function () {
+ return QQWB.browser.msie
+ },
+ postmessage: function () {
+ return !!window.postMessage && (QQWB.browser.msie && parseInt(QQWB.browser.version, 10) < 8 ? !1 : !0)
+ },
+ canvas: function () {
+ var a = document.createElement("canvas");
+ return !!a.getContext && !! a.getContext("2d")
+ },
+ webgl: function () {
+ return !!window.WebGLRenderingContext
+ },
+ geolocation: function () {
+ return !!navigator.geolocation
+ },
+ websqldatabase: function () {
+ return !!window.openDatabase
+ },
+ indexeddb: function () {
+ for (var a = 0, b = h.length; a < b; a++) if (window[h[a].toLowerCase() + "IndexedDB"]) return !0;
+ return !!window.indexedDB
+ },
+ websocket: function () {
+ for (var a = 0, b = h.length; a < b; a++) if (window[h[a].toLowerCase() + "WebSocket"]) return !0;
+ return !!window.WebSocket
+ },
+ localstorage: function () {
+ return window.localStorage && localStorage.getItem
+ },
+ sessionstorage: function () {
+ return window.sessionStorage && sessionStorage.getItem
+ },
+ webworker: function () {
+ return !!window.Worker
+ },
+ applicationcache: function () {
+ return !!window.applicationCache
+ }
+ };
+ a = j(b), QQWB.extend("browser", {
+ version: a.version
+ }), QQWB.browser[a.browser] = !0, k(), QQWB.extend("browser.feature", g), QQWB.extend("browser.platform", l()), QQWB.extend("browser.os", m())
+}(), QQWB.extend("flash", {
+ NO_CACHE: 1,
+ load: function (a, b, c) {
+ this.loadedSwfs || (this.loadedSwfs = []);
+ if (QQWB.Array.inArray(this.loadedSwfs, a)) {
+ QQWB.log.warning(a + "is already loaded");
+ return
+ }
+ c === this.NO_CACHE && (a += "?" + QQWB.uid());
+ var d = "movieContainer_" + QQWB.uid(),
+ e = "movie_" + QQWB.uid(),
+ f = "onFlashReady_a1f5b4ce",
+ g = window[f];
+ return window[f] = function () {
+ b && b(e), window[f] = g, g = null, b && (b = null), e = null
+ }, QQWB.dom.appendHidden([""].join(" "), {
+ id: d
+ }, !0), document.getElementById(d)
+ },
+ getSWFObjectByName: function (a) {
+ return QQWB.browser.msie ? window[a] : document[a].length ? document[a][1] : document[a]
+ }
+}), QQWB.extend("_solution", {
+ HTML5_SOLUTION: "html5",
+ FLASH_SOLUTION: "flash",
+ SILVER_LIGHT_SOLUTION: "silverlight",
+ initSolution: function (a) {
+ var b, c = QQWB.deferred.deferred();
+ !this[a] && QQWB.Array.inArray([this.HTML5_SOLUTION, this.FLASH_SOLUTION, this.SILVER_LIGHT_SOLUTION], a) && (this[a] = {}, this[a].name = a, this[a].readyState = 0, this[a].id = "solution_" + QQWB.uid(), this[a].deferred = QQWB.deferred.deferred(), this[a].promise = this[a].deferred.promise());
+ if (this[a] && this[a].readyState !== 0) this[a].deferred.success(function () {
+ c.resolve(QQWB.Array.fromArguments(arguments))
+ }).fail(function () {
+ c.reject(QQWB.Array.fromArguments(arguments))
+ });
+ else switch (a) {
+ case this.HTML5_SOLUTION:
+ if (QQWB.browser.feature.postmessage) {
+ b = this[this.HTML5_SOLUTION];
+ var d = function (a) {
+ QQWB._domain.serverproxy.indexOf(a.origin) !== 0 ? QQWB.log.warning("unexpected message arrived from " + a.origin + " with data " + a.data) : (a.data === "success" ? (QQWB.log.info("html5 solution was successfully initialized"), b.readyState = 1, b.deferred.resolve()) : QQWB.log.info("unexpected solution signal " + a.data), window.addEventListener ? window.removeEventListener("message", d, !1) : window.attachEvent && window.detachEvent("onmessage", d), d = null)
+ };
+ window.addEventListener ? window.addEventListener("message", d, !1) : window.attachEvent && window.attachEvent("onmessage", d), QQWB.everythingReady(function () {
+ QQWB.log.info("init html5 solution..."), serverframe = QQWB.dom.createHidden("iframe", {
+ id: b.id,
+ src: QQWB._domain.serverproxy
+ }), QQWB.dom.append(serverframe), serverframe.onload = function (a) {
+ setTimeout(function () {
+ b.readyState !== 1 && (QQWB.log.error("html5 solution initialition has failed, server proxy frame encountered error"), b.readyState = 2, b.deferred.reject(-1, "server proxy frame not working"))
+ }, 1e3)
+ }
+ })
+ } else QQWB.log.error("can't init solution \"" + a) + "\",browser doesn't support postmessage", c.reject("browser not supported");
+ break;
+ case this.FLASH_SOLUTION:
+ QQWB.browser.feature.flash ? (b = this[this.FLASH_SOLUTION], QQWB.everythingReady(function () {
+ QQWB.log.info("init flash solution...");
+ var a, c = 1e4,
+ d = QQWB.flash.load(QQWB._domain.flashproxy, function (c) {
+ QQWB.log.info("flash solution initlized successfully"), b.readyState = 1, window.QQWBFlashTransport = QQWB.flash.getSWFObjectByName(c), a && clearTimeout(a), b.deferred.resolve()
+ }, QQWB.flash.NO_CACHE);
+ a = setTimeout(function () {
+ b.deferred.isResolved() || (b.readyState = 2, b.deferred.reject(-1, "encounter error while loading proxy swf, need newer flash player"), QQWB.dom.remove(d))
+ }, c)
+ })) : (QQWB.log.error("can't init solution \"" + a) + "\",browser doesn't support flash or flash is disabled", c.reject("browser not supported"));
+ break;
+ case this.SILVER_LIGHT_SOLUTION:
+ QQWB.browser.feature.silverlight ? (-2, QQWB.log.error("sorry, silverlight solution is not implemented")) : (QQWB.log.error("can't init solution \"" + a) + "\",browser doesn't support silverlight or silverlight is disabled", c.reject("browser not supported"));
+ break;
+ default:
+ QQWB.log.error("can't init solution \"" + a) + '",not supported', c.reject("solution " + a + " not supported")
+ }
+ return c.promise()
+ }
+}), QQWB.extend("ping", {
+ _pingbackURL: "http://btrace.qq.com/collect",
+ _stupidPingParamsOrder: ["ftime", "sIp", "iQQ", "sBiz", "sOp", "iSta", "iTy", "iFlow"],
+ _paramSeprator: ";",
+ _getBasePingParams: function () {
+ var a = QQWB.cookie.get("uin", null, "0").match(/\d+/)[0],
+ b = "";
+ return {
+ sIp: "",
+ iQQ: a,
+ sBiz: "open-js",
+ sOp: "",
+ iSta: "",
+ iTy: 1183,
+ iFlow: b,
+ iFrom: "",
+ iPubFrom: "",
+ sUrl: "",
+ iUrlType: "",
+ iPos: "",
+ sText: "",
+ iBak1: "",
+ iBak2: "",
+ sBak1: "",
+ sBak2: QQWB.uid()
+ }
+ },
+ pingWith: function (a, b) {
+ a = QQWB.extend(QQWB.ping._getBasePingParams(), a, !0), QQWBPingTransport_18035d19 = new Image(1, 1), QQWBPingTransport_18035d19.src = QQWB.ping._pingbackURL + "?" + QQWB.queryString.encode(a, null, null, b)
+ },
+ pingInit: function () {
+ function a() {
+ var a = 1e6;
+ return feature = 0, QQWB.browser.msie ? a += 100 : QQWB.browser.opera ? a += 200 : QQWB.browser.webkit ? a += 300 : QQWB.browser.mozilla ? a += 400 : a += 500, QQWB.browser.feature.postmessage && (feature += 1), QQWB.browser.feature.flash && (feature += 2), QQWB.browser.feature.cookie && (feature += 4), a += feature, a
+ }
+ function b() {
+ var a = 1e6;
+ return QQWB.browser.platform.mobile ? a += 100 : a += 200, QQWB.browser.os.windows ? a += 10 : QQWB.browser.os.windows ? a += 20 : QQWB.browser.os.mac ? a += 30 : QQWB.browser.os.unix ? a += 40 : QQWB.browser.os.linux ? a += 50 : a += 60, a += parseInt(QQWB.appkey.version, 10), a
+ }
+ return QQWB.ping.pingWith({
+ sOp: "init",
+ iFrom: QQWB.version.replace(/\./g, ""),
+ iPubFrom: b(),
+ sUrl: [document.title, document.location.href].join(QQWB.ping._paramSeprator),
+ sText: QQWB.appkey.value,
+ iBak1: a()
+ }, QQWB.ping._stupidPingParamsOrder.concat("iFrom", "iPubFrom", "sUrl", "iUrlType", "iPos", "sText", "iBak1", "iBak2", "sBak1", "sBak2"))
+ },
+ _pingAuthorize: function (a) {
+ return QQWB.ping.pingWith({
+ sOp: "login",
+ iSta: a ? 1 : 0,
+ iFrom: QQWB.version.replace(/\./g, ""),
+ sUrl: document.location.href,
+ sText: QQWB.appkey.value
+ }, QQWB.ping._stupidPingParamsOrder.concat("iFrom", "iPubFrom", "sUrl", "iUrlType", "iPos", "sText", "iBak1", "iBak2", "sBak1", "sBak2"))
+ },
+ pingLoggedIn: function () {
+ return QQWB.ping._pingAuthorize(!0)
+ },
+ pingLoggedInFailed: function () {
+ return QQWB.ping._pingAuthorize(!1)
+ },
+ pingAPI: function (a, b, c, d, e, f, g, h) {
+ var i = 1e6;
+ a = a || "", b = b || "", c = c || "", d = d || "", e = e || "-2", f = f || "", g = g || "-1", h = h || "";
+ switch (h) {
+ case QQWB._solution.HTML5_SOLUTION:
+ case "postmessage":
+ i += 100;
+ break;
+ case QQWB._solution.FLASH_SOLUTION:
+ i += 200;
+ break;
+ case QQWB._solution.SILVER_LIGHT_SOLUTION:
+ i += 400
+ }
+ d = d.toUpperCase();
+ switch (d) {
+ case "GET":
+ i += 10;
+ break;
+ case "POST":
+ i += 20
+ }
+ return QQWB.ping.pingWith({
+ sOp: "api",
+ iSta: e,
+ iFrom: QQWB.version.replace(/\./g, ""),
+ iPubFrom: i,
+ sUrl: document.location.href,
+ sText: QQWB.appkey.value,
+ iBak1: g,
+ sBak1: [a, b].join(QQWB.ping._paramSeprator)
+ }, QQWB.ping._stupidPingParamsOrder.concat("iFrom", "iPubFrom", "sUrl", "iUrlType", "iPos", "sText", "iBak1", "iBak2", "sBak1", "sBak2"))
+ }
+}), QQWB.extend("door", {
+ doors: 0,
+ door: function (a, b) {
+ var c = 0;
+ return this.doors++, {
+ lock: function () {
+ return c++, a && a.call(QQWB), this
+ },
+ unlock: function () {
+ return c--, c = Math.max(0, c), b && b.call(QQWB), this
+ },
+ isOpen: function () {
+ return c === 0
+ }
+ }
+ },
+ count: function () {
+ return this.doors
+ }
+}), QQWB.extend("", {
+ init: function (a) {
+ if (this._inited === !0) return this.log.warning("already initialized"), this;
+ this.log.info("init signal has arrived"), a = QQWB.extend({
+ callbackurl: document.location.href.replace(location.search, "").replace(location.hash, ""),
+ pingback: !0,
+ synclogin: !0
+ }, a, !0), QQWB.pingback = a.pingback;
+ var b = this._token.getAccessToken(),
+ c = this._token.getAccessToken(!0),
+ d = this._token.getRefreshToken(),
+ e = d && !b && c,
+ f = !d && !b && a.synclogin;
+ return a.appkey && (this.log.info("client id is " + a.appkey), this.assign("appkey.value", "APPKEY", a.appkey)), this.log.info("client proxy uri is " + a.callbackurl), this.assign("_domain", "CLIENTPROXY_URI", a.callbackurl), (e || f) && QQWB._tokenReadyDoor.lock(), e ? (this.log.info("exchanging refresh token to access token..."), QQWB._token.exchangeForToken(function (b) {
+ a.synclogin && b.error && (QQWB.log.warning("exchange token has failed, trying to retrieve a new access_token..."), this._tokenReadyDoor.lock(), QQWB._token.getNewAccessToken(function () {
+ this._tokenReadyDoor.unlock()
+ })), this._tokenReadyDoor.unlock()
+ })) : f && (this.log.info("retrieving new access token..."), QQWB._token.getNewAccessToken(function () {
+ QQWB._tokenReadyDoor.unlock()
+ })), /^[a-z\d][a-z\d]{30}[a-z\d]$/i.test(QQWB.appkey.value) ? this.assign("appkey", "APPKEY_VERSION", 1) : /^[1-9][0-9]{7}[0-9]$/.test(QQWB.appkey.value) ? this.assign("appkey", "APPKEY_VERSION", 2) : this.assign("appkey", "APPKEY_VERSION", 3), this._inited = !0, QQWB._tokenReadyDoor.unlock(), this.pingback && this.ping && this.ping.pingInit(), this.pingback && this.ping && QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, this.ping.pingLoggedIn), this.pingback && this.ping && QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, this.ping.pingLoggedInFailed), this
+ },
+ _tokenReadyDoor: QQWB.door.door(function () {
+ this.log.info("tokenReady is locked")
+ }, function () {
+ this.log.info("tokenReady is unlocked"), this._tokenReadyDoor.isOpen() && this.log.info("token is ready") && this.trigger(this.events.TOKEN_READY_EVENT)
+ }),
+ tokenReady: function (a) {
+ return this._tokenReadyDoor.isOpen() ? a && a() : this.bind(this.events.TOKEN_READY_EVENT, a), this
+ },
+ _isDocumentReady: !1,
+ _tryToTriggerDocumentReadyEvents: function () {
+ if (this._isDocumentReady) return;
+ try {
+ var a = document.getElementsByTagName("body")[0].appendChild(document.createElement("span"));
+ a.parentNode.removeChild(a)
+ } catch (b) {
+ return
+ }
+ this._isDocumentReady = !0, this.log.info("document is ready"), this._everythingReadyDoor.unlock(), this.trigger(this.events.DOCUMENT_READY_EVENT)
+ },
+ documentReady: function (a) {
+ return this._isDocumentReady ? a && a() : (this.bind(this.events.DOCUMENT_READY_EVENT, a), this._tryToTriggerDocumentReadyEvents()), this
+ },
+ _everythingReadyDoor: QQWB.door.door(function () {
+ this.log.info("everythingReady is locked")
+ }, function () {
+ this.log.info("everythingReady is unlocked"), this._everythingReadyDoor.isOpen() && this.log.info("everything is ready") && this.trigger(this.events.EVERYTHING_READY_EVENT)
+ }),
+ everythingReady: function (a) {
+ return this._everythingReadyDoor.isOpen() ? a && a() : this.bind(this.events.EVERYTHING_READY_EVENT, a), this
+ }
+}), T.alias("ready", "everythingReady"), function () {
+ function c() {
+ QQWB.browser.feature.postmessage ? QQWB._solution.initSolution(QQWB._solution.HTML5_SOLUTION) : QQWB.browser.feature.flash ? QQWB._solution.initSolution(QQWB._solution.FLASH_SOLUTION) : QQWB.log.error("init solution is called, but no solution for the browser")
+ }
+ var a = window != window.parent,
+ b = QQWB._domain.serverproxy === window.location.href;
+ QQWB._tokenReadyDoor.lock(), QQWB._everythingReadyDoor.lock(), QQWB._everythingReadyDoor.lock(), QQWB.bind(QQWB.events.TOKEN_READY_EVENT, function () {
+ QQWB._everythingReadyDoor.unlock()
+ });
+ if (a && b && QQWB.browser.feature.postmessage) {
+ QQWB.log.info("library booting at server proxy mode");
+ var d = "*",
+ e = window.parent;
+ e.postMessage("success", d);
+ var f = function (a) {
+ var b = QQWB.JSON.fromString(a.data),
+ c = b.id,
+ f = b.data,
+ g = f[0];
+ f[2].toLowerCase() == "xml" && (f[2] = "xmltext"), g ? QQWB.io._apiAjax.apply(this, f).complete(function () {
+ e.postMessage(QQWB.JSON.stringify({
+ id: c,
+ data: QQWB.Array.fromArguments(arguments)
+ }), d)
+ }) : (e.postMessage(QQWB.JSON.stringify({
+ id: c,
+ data: [-1, "interface can not be empty"]
+ }), d), QQWB.log.error("interface is empty"))
+ };
+ window.addEventListener ? window.addEventListener("message", f, !1) : window.attachEvent && window.attachEvent("onmessage", f);
+ return
+ }
+ QQWB.log.info("library booting at normal mode"), c()
+}(), QQWB._isDocumentReady || (window.addEventListener && document.addEventListener("DOMContentLoaded", function () {
+ QQWB._tryToTriggerDocumentReadyEvents()
+}, !1), window.attachEvent && (document.attachEvent("onreadystatechange", function () {
+ /complete/.test(document.readyState) && (document.detachEvent("onreadystatechange", arguments.callee), QQWB._tryToTriggerDocumentReadyEvents())
+}), window === window.top &&
+function () {
+ if (QQWB._isDocumentReady) return;
+ try {
+ document.documentElement.doScroll("left")
+ } catch (a) {
+ setTimeout(arguments.callee, 0);
+ return
+ }
+ QQWB._tryToTriggerDocumentReadyEvents()
+}()), QQWB.browser.webkit &&
+function () {
+ if (QQWB._isDocumentReady) return;
+ if (!/load|complete/.test(document.readyState)) {
+ setTimeout(arguments.callee, 0);
+ return
+ }
+ QQWB._tryToTriggerDocumentReadyEvents()
+}()), function () {
+ function b() {
+ var c = !! QQWB._token.getAccessToken(),
+ d;
+ a && QQWB.log.info("cancel the **OLD** maintain token schedule"), a && clearTimeout(a), c ? (d = parseInt(QQWB.cookie.get(QQWB._cookie.names.accessToken).split("|")[1], 10) - QQWB.time.now() - 15e3, QQWB.log.info("scheduled to exchange token after " + d + "ms"), a = setTimeout(function () {
+ QQWB._token.exchangeForToken(function () {
+ b()
+ })
+ }, d)) : (a && QQWB.log.info("cancel the exchange token schedule"), a && clearTimeout(a))
+ }
+ var a;
+ QQWB.bind(QQWB.events.TOKEN_READY_EVENT, b), QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, b), QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, b), QQWB.bind(QQWB.events.USER_LOGGEDOUT_EVENT, b)
+}();
+if (QQWB.browser.feature.localstorage) QQWB.extend("localStorage", {
+ set: function (a, b, c) {
+ a = "k" + a;
+ var d = QQWB.time.secondsNow() + (c || 7) * 24 * 3600,
+ e = {
+ value: b,
+ expire: d
+ };
+ return localStorage[a] = JSON.stringify(e), localStorage[a]
+ },
+ get: function (a, b) {
+ a = "k" + a;
+ var c = localStorage[a];
+ return c && (c = JSON.parse(c)) && c.value && QQWB.time.secondsNow() < c.expire ? c.value : b
+ },
+ del: function (a) {
+ return a = "k" + a, localStorage.removeItem(a), !localStorage[a]
+ }
+});
+else if (QQWB.browser.feature.userdata) {
+ var userData, storeName = "QQWBLocalStore";
+ QQWB.documentReady(function () {
+ userData = document.createElement("input"), userData.type = "hidden", userData.style.display = "none", userData.addBehavior("#default#userData"), userData.expires = (new Date(QQWB.time.now() + 31536e7)).toUTCString(), document.body.appendChild(userData)
+ }), QQWB.extend("localStorage", {
+ set: function (a, b, c) {
+ a = "k" + a;
+ var d = QQWB.time.secondsNow() + (c || 7) * 24 * 3600,
+ e = {
+ value: b,
+ expire: d
+ };
+ return !userData && QQWB.log.error("store can't set value for key " + a + ", userData is unavaiable, please try later"), userData && userData.load(storeName), userData && userData.setAttribute(a, JSON.stringify(e)), userData && userData.save(storeName), userData.getAttribute(a)
+ },
+ get: function (a, b) {
+ a = "k" + a, !userData && QQWB.log.error("store can't get value for key " + a + ", userData is unavaiable, please try later"), userData && userData.load(storeName);
+ var c = userData && userData.getAttribute(a);
+ return c && (c = JSON.parse(c)) && c.value && QQWB.time.secondsNow() < c.expire ? c.value : b
+ },
+ del: function (a) {
+ return a = "k" + a, !userData && QQWB.log.error("store can't delete value for key " + a + ", userData is unavaiable, please try later"), userData && userData.load(storeName), userData && userData.removeAttribute(a), userData && userData.save(storeName), !userData.getAttribute(a)
+ }
+ })
+} else QQWB.log.warning("T.localStorage object isn't initialized, do check before use");
+QQWB.localStorage && (QQWB._alias.call(QQWB.localStorage, "save", QQWB.localStorage.set), QQWB._alias.call(QQWB.localStorage, "remove", QQWB.localStorage.del)), QQWB.extend("auth.authWindow", {
+ _width: QQWB._const.AUTH_WINDOW_WIDTH,
+ _height: QQWB._const.AUTH_WINDOW_HEIGHT,
+ _name: QQWB._const.AUTH_WINDOW_NAME,
+ _url: QQWB._domain.auth,
+ _attribs: "toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=yes,status=no",
+ _authorizing: !1,
+ _window: null,
+ show: function () {
+ var a, b, c, d;
+ return this._authorizing ? this.focus() : (a = (window.screenX || window.screenLeft) + ((window.outerWidth || document.documentElement.clientWidth) - this._width) / 2, b = (window.screenY || window.screenTop) + ((window.outerHeight || document.documentElement.clientHeight) - this._height) / 2, c = QQWB.queryString.encode({
+ response_type: "token",
+ client_id: QQWB.appkey.value,
+ redirect_uri: QQWB._domain.clientproxy,
+ scope: "all",
+ status: 0
+ }), d = ["width=" + this._width, "height=" + this._height, "left=" + a, "top=" + b], this._window = window.open(this._url + "?" + c, this._name, d + "," + this._attribs), this._authorizing = !0, function () {
+ var a = QQWB.auth.authWindow,
+ b;
+ if (a._window.closed) {
+ QQWB._token.resolveResponse("error=access_denied"), a.close();
+ return
+ }
+ try {
+ b = a._window.location.hash
+ } catch (c) {
+ b = null
+ }
+ if (b) {
+ b = QQWB.queryString.decode(b.split("#").pop()), parseInt(b.status, 10) == 200 && QQWB._token.resolveResponse(b), a.close();
+ return
+ }
+ setTimeout(arguments.callee, 0)
+ }()), this
+ },
+ close: function () {
+ return this._authorizing = !1, this._window ? this._window.closed ? this : (this._window.close(), this) : this
+ },
+ focus: function () {
+ return this._window && this._window.focus(), this
+ }
+}), QQWB.extend("auth", {
+ login: function (a, b) {
+ QQWB._inited || QQWB.log.critical("Library not initialized, call T.init() to initialize");
+ var c = QQWB.loginStatus(),
+ d;
+ if (c && a) {
+ a(c);
+ return
+ }
+ if (a || b) d = function (c) {
+ c.access_token && a ? a(c) : c.error && b ? b(c) : QQWB.log.warning("confused result of T.login"), QQWB.unbind(QQWB.events.USER_LOGGEDIN_EVENT, d), QQWB.unbind(QQWB.events.USER_LOGIN_FAILED_EVENT, d), d = null
+ }, QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, d), QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, d);
+ return QQWB.auth.authWindow.show().focus(), QQWB
+ },
+ logout: function (a) {
+ var b = QQWB.loginStatus();
+ return QQWB.log.info("logging out user..."), b ? (QQWB._token.clearAccessToken(), QQWB._token.clearRefreshToken(), QQWB.log.info(b.name + " has logged out successfully")) : QQWB.log.warning("oops, user not logged in"), a && a.call(QQWB), QQWB.trigger(QQWB.events.USER_LOGGEDOUT_EVENT), QQWB
+ },
+ loginStatus: function (a) {
+ var b, c = QQWB._token.getAccessToken(),
+ d = QQWB._token.getTokenUser();
+ return c && (b = {
+ access_token: c,
+ name: d.name,
+ nick: d.nick
+ }), a && a.call(QQWB, b), b
+ }
+}), QQWB._alias("login", QQWB.auth.login), QQWB._alias("logout", QQWB.auth.logout), QQWB._alias("loginStatus", QQWB.auth.loginStatus), QQWB.provide("api", function (a, b, c, d, e) {
+ a = this._apiProvider.compat(a), b = b || {}, c = (c || "json").toLowerCase(), d = d || "GET";
+ var f, g, h = c,
+ i = {
+ json: !0,
+ xml: !0
+ },
+ j = QQWB.deferred.deferred();
+ h in i || (h = "json"), b.oauth_consumer_key = QQWB.appkey.value, b.oauth_token = QQWB._token.getAccessToken(), b.oauth_version = "2.0", b.format = h, f = j.promise(), e && QQWB.Array.inArray([QQWB._solution.HTML5_SOLUTION, QQWB._solution.FLASH_SOLUTION, QQWB._solution.SILVER_LIGHT_SOLUTION], e) ? (QQWB.log.warning("forced to use solution " + e), QQWB._solution[e] || (QQWB.log.warning("forced to use solution " + e + ", this solution is not inited, initialzing..."), QQWB._solution.initSolution[e]), g = QQWB._solution[e]) : g = QQWB.browser.feature.postmessage && QQWB._solution[QQWB._solution.HTML5_SOLUTION] || QQWB.browser.feature.flash && QQWB._solution[QQWB._solution.FLASH_SOLUTION] || QQWB.browser.feature.silverlight && QQWB._solution[QQWB._solution.SILVER_LIGHT_SOLUTION];
+ if (!g || g.readyState === 2) return QQWB.log.critical("solution error"), j.reject(-1, "solution error", 0), f;
+ if (g.readyState === 0) return QQWB.log.warning("solution is not ready, your api call request has been cached, will invoke immediately when solution is ready"), g.promise.done(function () {
+ QQWB.log.info('invoking cached api call "QQWB.api( ' + [a, b, c, d].join(",") + ' )"...'), QQWB.api(a, b, c, d).success(function () {
+ j.resolveWith(j, QQWB.Array.fromArguments(arguments))
+ }).error(function () {
+ j.rejectWith(j, QQWB.Array.fromArguments(arguments))
+ })
+ }).fail(function () {
+ QQWB.log.error("can't invoking cached api call \"QQWB.api( " + [a, b, c, d].join(",") + ' )"'), j.rejectWith(j, QQWB.Array.fromArguments(arguments))
+ }), f;
+ QQWB.api.id || QQWB.extend(QQWB.api, {
+ id: 0,
+ total: function () {
+ return QQWB.api.id
+ }
+ }), QQWB.api.id++, QQWB.log.info("[" + QQWB.api.id + '] requesting data "' + QQWB._apiProvider.describe(a) + '" from server...');
+ if (g === QQWB._solution[QQWB._solution.HTML5_SOLUTION]) {
+ var k = document.getElementById(g.id);
+ if (!k) QQWB.log.critical("server proxy not found"), j.reject(-1, "server proxy not found", 0);
+ else if (k.src !== QQWB._domain.serverproxy) QQWB.log.critical("server proxy is not valid, src attribute has unexpected value"), j.reject(-1, "server proxy not valid", 0);
+ else {
+ QQWB.api._deferredCollection || QQWB.extend(QQWB.api, {
+ _deferredCollection: {},
+ deferredAt: function (a) {
+ if (this._deferredCollection[a]) return this._deferredCollection[a];
+ QQWB.log.warning("get deferred object has failed, that object does not exist at index " + a)
+ },
+ uncollect: function (a) {
+ this._deferredCollection[a] ? delete this._deferredCollection[a] : QQWB.log.warning("uncollect deferred object has failed, that object does not exist at index " + a)
+ },
+ collect: function (a) {
+ if (a.promise) return this._deferredCollection[this.id] = a, this.id;
+ QQWB.log.warning("collect a non-deferred object is illegal")
+ }
+ }), QQWB.api.messageHandler || (QQWB.provide("api.messageHandler", function (a) {
+ if (QQWB._domain.serverproxy.indexOf(a.origin) !== 0) QQWB.log.warning("unexpected message arrived from " + a.origin + " with data " + a.data);
+ else {
+ var b = QQWB.JSON.fromString(a.data),
+ c = b.id,
+ d = QQWB.api.deferredAt(c),
+ e = b.data;
+ d ? (e[0] !== 200 ? d.reject.apply(d, e) : (e[5] == "xmltext" && (e[3] = QQWB.XML.fromString(e[3])), d.resolve(e[3], e[2], e[4])), QQWB.api.uncollect(c)) : QQWB.log.warning("related deferred object not found, it shouldn't happen")
+ }
+ }), window.addEventListener ? window.addEventListener("message", QQWB.api.messageHandler, !1) : window.attachEvent && window.attachEvent("onmessage", QQWB.api.messageHandler));
+ try {
+ var l = QQWB.api.collect(j);
+ setTimeout(function () {
+ k.contentWindow.postMessage(QQWB.JSON.stringify({
+ id: l,
+ data: [a, b, c, d]
+ }), QQWB._domain.serverproxy)
+ }, 0)
+ } catch (m) {
+ QQWB.log.critical("post message to server proxy has failed, " + m), j.reject(-1, m, 0)
+ }
+ }
+ } else g === QQWB._solution[QQWB._solution.FLASH_SOLUTION] && QQWB.io._apiFlashAjax(a, b, c, d).complete(function () {
+ var a = QQWB.Array.fromArguments(arguments);
+ a[0] !== 200 ? j.reject.apply(j, a) : j.resolve(a[3], a[2], a[4])
+ });
+ return function () {
+ var e = QQWB.api.id;
+ f.complete(function () {
+ QQWB.log.info("*[" + e + "] done"), e = null
+ });
+ if (QQWB.pingback && QQWB.ping) {
+ function h(e, f, h) {
+ QQWB.ping.pingAPI(a, QQWB.queryString.encode(b), c, d, e, f, h, g.name)
+ }
+ f.success(function (a, b) {
+ h(200, "ok", b)
+ }), f.fail(function (a, b, c) {
+ h(a, b, c)
+ })
+ }
+ }(), f
+}) /* |xGv00|6d5d6ce9717937b567ca32a7f3d7c7d0 */
+
diff --git a/tests/js.js b/tests/js.js
new file mode 100644
index 0000000..ab84eb1
--- /dev/null
+++ b/tests/js.js
@@ -0,0 +1,4699 @@
+(function() {
+ var a, b = window.T,
+ c = "http";
+ scheme = c + "://", host = "open.t.qq.com", a = {
+ name: "Tencent
+weibo
+SDK",
+ version: "1.0",
+ appkey: {
+ value: "{APPKEY}",
+ version: "{APPKEY_VERSION}",
+ verified: !1
+ },
+ debug: !0,
+ pingback: !0,
+ _domain: {
+ api: scheme + host + "{API_URI}",
+ auth: scheme + host + "{AUTH_URI}",
+ query: scheme + host + "{QUERY_TOKEN_URI}",
+ exchange: scheme + host + "{EXCHANGE_TOKEN_URI}",
+ flashproxy: scheme + host + "{FLASHPROXY_URI}",
+ serverproxy: scheme + host + "{SERVERPROXY_URI}",
+ clientproxy: "{CLIENTPROXY_URI}"
+ },
+ _const: {
+ AUTH_WINDOW_NAME: "authClientProxy_ee5a0f93",
+ AUTH_WINDOW_WIDTH: 575,
+ AUTH_WINDOW_HEIGHT: 465
+ },
+ _cookie: {
+ names: {
+ accessToken: "QQWBToken",
+ refreshToken: "QQWBRefreshToken"
+ },
+ path: "/",
+ domain: ""
+ },
+ noConflict: function() {
+ return
+ b && (window.T = b), a
+ },
+ copy: function(a, b, c, d) {
+ for (var e in b) if (c || typeof
+ a[e] == "undefined") a[e] = d ? d(b[e]) : b[e];
+ return a
+ },
+ create: function(a, b) {
+ var
+ c = this,
+ d = a ? a.split(".") : [],
+ e = d.length;
+ for (var f = 0; f < e; f++) {
+ var
+ g = d[f],
+ h = c[g];
+ h || (h = b && f + 1 === e ? b : {}, c[g] = h), c = h
+ }
+ return
+ c
+ },
+ extend: function(b, c, d) {
+ return a.copy(typeof
+ b == "string" ? a.create.call(this, b) : b, c, d)
+ },
+ _alias: function(b, c) {
+ c = c || a;
+ if (typeof
+ b == "string") this[b] = c;
+ else if (Object.prototype.toString.call(b) === "[object
+Array]") for (var
+ d = 0, e = b.length; d < e; d++) this[b[d]] = c
+ },
+ alias: function(b, c) {
+ a._alias(b, a[c])
+ },
+ assign: function(a, b, c) {
+ var
+ d = this,
+ e = d,
+ f = a ? a.split(".") : [],
+ g = f.length;
+ for (var h = 0; h < g; h++) {
+ var
+ i = f[h],
+ j = d[i];
+ if (!j) throw new Error("Tencent weibo SDK: [ERROR] no such name
+" + i);
+ e = d, d = j
+ }
+ if (typeof d == "string") e[i] = d.replace(new
+ RegExp("\\{" + b + "\\}", "ig"), c);
+ else if (typeof d == "object") for (var k in d) d.hasOwnProperty(k) && typeof d[k] == "string" && (d[k] = d[k].replace(new
+ RegExp("\\{" + b + "\\}", "ig"), c))
+ },
+ uid: function() {
+ return
+ Math.random().toString(16).substr(2)
+ }
+ }, a.alias("provide", "create"), a._alias.call(window, ["QQWB", "T"], a), a.assign("_domain", "API_URI", "/api"), a.assign("_domain", "AUTH_URI", "/oauth2_html/login.php"), a.assign("_domain", "SERVERPROXY_URI", "/open-js/proxy.html"), a.assign("_domain", "FLASHPROXY_URI", "/open-js/proxy_v15.swf"), a.assign("_domain", "EXCHANGE_TOKEN_URI", "/cgi-bin/exchange_token"), a.assign("_domain", "QUERY_TOKEN_URI", "/cgi-bin/auto_token")
+})(), QQWB.extend("String", {
+ _trimLeft: /^\s+/,
+ _trimRight: /\s+$/,
+ isString: function(a) {
+ return
+ typeof a == "string"
+ },
+ ltrim: function(a) {
+ return
+ a == null ? "" : a.toString().replace(this._trimLeft, "")
+ },
+ rtrim: function(a) {
+ return
+ a == null ? "" : a.toString().replace(this._trimRight, "")
+ },
+ trim: String.prototype.trim ?
+ function(a) {
+ return
+ a == null ? "" : String.prototype.trim.call(a)
+ } : function(a) {
+ return
+ a == null ? "" : a.toString().replace(this._trimLeft, "").replace(this._trimRight, "")
+ },
+ startsWith: String.prototype.startsWith ?
+ function(a, b) {
+ return
+ a == null ? !1 : String.prototype.startsWith.call(a, b)
+ } : function(a, b) {
+ return
+ a == null ? !1 : a.toString().indexOf(b) == 0
+ },
+ endsWith: String.prototype.endsWith ?
+ function(a, b) {
+ return
+ a == null ? !1 : String.prototype.endsWith.call(a, b)
+ } : function(a, b) {
+ return
+ a == null ? !1 : a.toString().lastIndexOf(b) >= 0 && a.toString().lastIndexOf(b) + b.length == a.length
+ }
+}), QQWB.extend("_const", {
+ HTTP_METHOD_GET: "GET",
+ HTTP_METHOD_POST: "POST",
+ HTTP_METHOD_GET_OR_POST: "GET
+|
+POST",
+ API_CATEGORY_TIMELINE: "时间线",
+ API_CATEGORY_WEIBO: "å¾®åšç›¸å…³",
+ API_CATEGORY_ACCOUNT: "账户相关",
+ API_CATEGORY_RELATION: "关系链相关",
+ API_CATEGORY_SIXIN: "ç§ä¿¡ç›¸å…³",
+ API_CATEGORY_SEARCH: "æœç´¢ç›¸å…³",
+ API_CATEGORY_TRENS: "çƒåº¦è¶‹åŠ¿",
+ API_CATEGORY_QUERY: "查看数æ®",
+ API_CATEGORY_FAVORITE: "æ•°æ®æ”¶è—",
+ API_CATEGORY_TOPIC: "è¯é¢˜ç›¸å…³",
+ API_CATEGORY_TAG: "æ ‡ç¾ç›¸å…³",
+ API_CATEGORY_OTHER: "其他",
+ API_NO_DESCRIPTION: "暂时没有关于æ¤å‚数的说明",
+ API_NO_DEFAULT_VALUE: "",
+ COMMON_NULL: null,
+ COMMON_EMPTY_STRING: ""
+}), QQWB.extend("_apiProvider", {
+ _apiRetError: {
+ 1: "å‚数错误",
+ 2: "频率å—é™",
+ 3: "鉴æƒå¤±è´¥",
+ 4: "内部错误"
+ },
+ _apiErrorCode: {
+ 4: "过多è„è¯",
+ 5: "ç¦æ¢è®¿é—®",
+ 6: "记录ä¸å˜åœ¨",
+ 8: "内容过长",
+ 9: "内容包å«åžƒåœ¾ä¿¡æ¯",
+ 10: "å‘表太快,频率é™åˆ¶",
+ 11: "æºæ¶ˆæ¯ä¸å˜åœ¨",
+ 12: "未知错误",
+ 13: "é‡å¤å‘表"
+ },
+ _apiParseRetCode: function(a) {
+ var
+ b = a.match(/\"ret\":(\d+)\}/) || a.match(/(\d+)<\/ret>/);
+ return
+ b ? parseInt(b[1], 10) : b
+ },
+ _apiParseErrorCode: function(a) {
+ var
+ b = a.match(/\"errcode\":(-?\d+)/) || a.match(/(\d+)<\/errcode>/);
+ return
+ b ? parseInt(b[1], 10) : b
+ },
+ _apiGetErrorMessage: function(a, b) {
+ var
+ c = [],
+ a = a + "",
+ b = b + "",
+ d = QQWB._apiProvider._apiRetError[a],
+ e = QQWB._apiProvider._apiErrorCode[b];
+ return
+ d && c.push(d), e && c.push(e), c.length > 0 ? c.join(",") : "未知错误"
+ },
+ apis: {
+ "/statuses/home_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "主页时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/home_timeline_vip": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "vip用户时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "2",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/public_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "广æ’大厅时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/user_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "其他用户å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/mentions_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "@æ到我的时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "0x1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/ht_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "è¯é¢˜æ—¶é—´çº¿",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ httext: {
+ defaultValue: "pBoard",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageinfo: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/broadcast_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "我å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/special_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "特别收å¬çš„人å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/broadcast_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "我å‘表时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/home_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "首页时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/mentions_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "æåŠæˆ‘的时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/user_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "用户å‘表时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/users_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "多用户å‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ names: {
+ defaultValue: "t,api_weibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/users_timeline_ids": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "多用户å‘表时间线索引",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ names: {
+ defaultValue: "t,api_weibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/area_timeline": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "åŒåŸŽå‘表时间线",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ country: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ province: {
+ defaultValue: 11,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ city: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/statuses/ht_timeline_ext": {
+ category: QQWB._const.API_CATEGORY_TIMELINE,
+ description: "è¯é¢˜æ—¶é—´çº¿(ä¿®å¤ç¿»é¡µé—®é¢˜)",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ flag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ httext: {
+ defaultValue: "iweibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ htid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/show": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–一æ¡å¾®åšæ•°æ®",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ id: {
+ defaultValue: 51545056800467,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/del": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "åˆ é™¤ä¸€æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 94035056272295,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/re_add": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "转æ’一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 77048060858014,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/reply": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "回å¤ä¸€æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 77048060858014,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_pic": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表一æ¡å›¾ç‰‡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pic: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_emotion": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表一æ¡å¿ƒæƒ…å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ signtype: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/re_count": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "转æ’数或点评数",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ ids: {
+ defaultValue: 0xb04fd23c98500000,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ flag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/re_list": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–å•æ¡å¾®åšçš„转å‘和点评列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ flag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ rootid: {
+ defaultValue: 92035070199751,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: "2",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ twitterid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/comment": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "点评一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 28135069067568,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_music": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表音频微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ url: {
+ defaultValue: "http://url.cn",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ title: {
+ defaultValue: "æŒå",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ author: {
+ defaultValue: "演唱者",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reid: {
+ defaultValue: 12345678,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_video": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表视频微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ url: {
+ defaultValue: "http://url.cn",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_video": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "å‘表视频微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ url: {
+ defaultValue: "http://url.cn",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/getvideoinfo": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–视频信æ¯",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ url: {
+ defaultValue: "http://v.youku.com/v_show/id_XMjExODczODM2.html",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/list": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "æ ¹æ®å¾®åšID批é‡å¾—到微åšæ•°æ®",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ids: {
+ defaultValue: "39110101242147,39578069128701",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/add_video_prev": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "预å‘表一æ¡è§†é¢‘å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ vid: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ title: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/t/sub_re_count": {
+ category: QQWB._const.API_CATEGORY_WEIBO,
+ description: "获å–转æ’çš„å†æ¬¡è½¬æ’æ•°",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ids: {
+ defaultValue: "8171051658365,55054116813124",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/info": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "获å–自己的详细资料",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/user/update": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "更新个人资料",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ nick: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ sex: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ year: {
+ defaultValue: 2e3,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ month: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ day: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ countrycode: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ provincecode: {
+ defaultValue: 11,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ citycode: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ introduction: {
+ defaultValue: "xxxx",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/update_edu": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "更新个人教育信æ¯",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ year: {
+ defaultValue: 1995,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ level: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ schoolid: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ field: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ departmentid: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/update_head": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "更新个人资料头åƒ",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ pic: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/other_info": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "获å–其他人资料",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/infos": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "多用户信æ¯",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ names: {
+ defaultValue: "t,api_weibo",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/verify": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "验è¯è´¦æˆ·æ˜¯å¦åˆæ³•ï¼ˆæ˜¯å¦æ³¨å†Œå¾®åšï¼‰",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/user/emotion": {
+ category: QQWB._const.API_CATEGORY_ACCOUNT,
+ description: "获å–心情微åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ id: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ timstamp: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ contenttype: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ accesslevel: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ emotiontype: {
+ defaultValue: "0xFFFFFFFF",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/fanslist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "我的å¬ä¼—列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/idollist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "我收å¬çš„人列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/blacklist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "黑åå•åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/speciallist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "特别收å¬åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/add": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/del": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "å–消收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/addspecial": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "特别收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/delspecial": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "å–消特别收å¬æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/addblacklist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "æ·»åŠ æŸä¸ªç”¨æˆ·åˆ°é»‘åå•",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/delblacklist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "从黑åå•ä¸åˆ 除æŸä¸ªç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/check": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "检查是å¦æˆ‘çš„å¬ä¼—或收å¬çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ names: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ flag: {
+ defaultValue: "2",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/user_fanslist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "其他账户å¬ä¼—列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/user_idollist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "其他账户收å¬çš„人列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/user_speciallist": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "其他账户特别收å¬çš„人列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/fanslist_s": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "多å¬ä¼—列表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 100,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/idollist_s": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "多收å¬äººåˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 100,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/friends/mutual_list": {
+ category: QQWB._const.API_CATEGORY_RELATION,
+ description: "互å¬å…³ç³»é“¾åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ name: {
+ defaultValue: "t",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ startindex: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 30,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/add": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "å‘ç§ä¿¡",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ content: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ clientip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ jing: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ wei: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ name: {
+ defaultValue: "mmplayer",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/del": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "åˆ é™¤ä¸€æ¡ç§ä¿¡",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 26154115313103,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/recv": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "收件箱",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/private/send": {
+ category: QQWB._const.API_CATEGORY_SIXIN,
+ description: "å‘件箱",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/search/user": {
+ category: QQWB._const.API_CATEGORY_SEARCH,
+ description: "æœç´¢ç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ keyword: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagesize: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ page: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/search/t": {
+ category: QQWB._const.API_CATEGORY_SEARCH,
+ description: "æœç´¢å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ keyword: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagesize: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ page: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/search/userbytag": {
+ category: QQWB._const.API_CATEGORY_SEARCH,
+ description: "é€šè¿‡æ ‡ç¾æœç´¢ç”¨æˆ·",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ keyword: {
+ defaultValue: "test",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagesize: {
+ defaultValue: 10,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ page: {
+ defaultValue: "1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/trends/ht": {
+ category: QQWB._const.API_CATEGORY_TRENS,
+ description: "è¯é¢˜çƒæ¦œ",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ type: {
+ defaultValue: "3",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/trends/t": {
+ category: QQWB._const.API_CATEGORY_TRENS,
+ description: "çƒé—¨è½¬æ’",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pos: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/info/update": {
+ category: QQWB._const.API_CATEGORY_QUERY,
+ description: "æ›´æ–°æ¡æ•°",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ op: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ type: {
+ defaultValue: "9",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/addt": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "收è—一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/delt": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "å–消收è—一æ¡å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/list_t": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "收è—çš„å¾®åšåˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ nexttime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ prevtime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/addht": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "订阅è¯é¢˜",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/delht": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "å–消收è—è¯é¢˜",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ id: {
+ defaultValue: 123456789,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/fav/list_ht": {
+ category: QQWB._const.API_CATEGORY_FAVORITE,
+ description: "获å–已订阅è¯é¢˜åˆ—表",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ reqnum: {
+ defaultValue: 20,
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pageflag: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ pagetime: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ lastid: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/ht/ids": {
+ category: QQWB._const.API_CATEGORY_TOPIC,
+ description: "æ ¹æ®è¯é¢˜å称查询è¯é¢˜ID",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ httexts: {
+ defaultValue: "abc,efg",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/ht/info": {
+ category: QQWB._const.API_CATEGORY_TOPIC,
+ description: "æ ¹æ®è¯é¢˜ID获å–è¯é¢˜ç›¸å…³å¾®åš",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ids: {
+ defaultValue: 0xb04fd23c98500000,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/tag/add": {
+ category: QQWB._const.API_CATEGORY_TAG,
+ description: "æ·»åŠ æ ‡ç¾",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ tag: {
+ defaultValue: "snow",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/tag/del": {
+ category: QQWB._const.API_CATEGORY_TAG,
+ description: "åˆ é™¤æ ‡ç¾",
+ supportMethod: QQWB._const.HTTP_METHOD_POST,
+ supportParams: {
+ tagid: {
+ defaultValue: 0x4735d427dffb9400,
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/kownperson": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "我å¯èƒ½è®¤è¯†çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ country_code: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ province_code: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ },
+ city_code: {
+ defaultValue: "",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/kownperson": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "å¯èƒ½è®¤è¯†çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/other/shorturl": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "çŸURL转长URL",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ url: {
+ defaultValue: "3M6GSa",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/get_emotions": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "获å–表情接å£",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ type: {
+ defaultValue: "0",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/kownperson": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "我å¯èƒ½è®¤è¯†çš„人",
+ supportMethod: QQWB._const.HTTP_METHOD_GET,
+ supportParams: {
+ ip: {
+ defaultValue: "127.0.0.1",
+ description: QQWB._const.API_NO_DESCRIPTION
+ }
+ }
+ },
+ "/other/videokey": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "获å–è§†é¢‘ä¸Šä¼ çš„key",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/other/gettopreadd": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "一键转æ’çƒé—¨æŽ’è¡Œ",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ },
+ "/other/url_converge": {
+ category: QQWB._const.API_CATEGORY_OTHER,
+ description: "çŸurlèšåˆ",
+ supportMethod: QQWB._const.HTTP_METHOD_GET
+ }
+ },
+ getDescriptor: function(a) {
+ return
+ this.apis[a]
+ },
+ isProvide: function(a) {
+ return !!this.getDescriptor(a)
+ },
+ describe: function(a) {
+ var b = this.getDescriptor(a);
+ return
+ b ? b.category + ">" + b.description : ""
+ },
+ compat: function(a) {
+ return !QQWB.String.startsWith(a, "/") && (a = "/" + a), a.toLowerCase()
+ }
+});
+var
+JSON;
+JSON || (JSON = {}), function() {
+ function f(a) {
+ return a < 10 ? "0" + a : a
+ }
+
+ function
+ quote(a) {
+ return
+ escapable.lastIndex = 0, escapable.test(a) ? '"' + a.replace(escapable, function(a) {
+ var
+ b = meta[a];
+ return typeof
+ b == "string" ? b : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
+ }) + '"' : '"' + a + '"'
+ }
+
+ function
+ str(a, b) {
+ var c, d, e, f, g = gap,
+ h, i = b[a];
+ i && typeof i == "object" && typeof
+ i.toJSON == "function" && (i = i.toJSON(a)), typeof
+ rep == "function" && (i = rep.call(b, a, i));
+ switch (typeof i) {
+ case "string":
+ return
+ quote(i);
+ case "number":
+ return
+ isFinite(i) ? String(i) : "null";
+ case "boolean":
+ case "null":
+ return
+ String(i);
+ case "object":
+ if (!i) return "null";
+ gap += indent, h = [];
+ if (Object.prototype.toString.apply(i) === "[object
+Array]") {
+ f = i.length;
+ for (c = 0; c < f; c += 1) h[c] = str(c, i) || "null";
+ return
+ e = h.length === 0 ? "[]" : gap ? "[\n" + gap + h.join(",\n" + gap) + "\n" + g + "]" : "[" + h.join(",") + "]", gap = g, e
+ }
+ if (rep && typeof
+ rep == "object") {
+ f = rep.length;
+ for (c = 0; c < f; c += 1) typeof
+ rep[c] == "string" && (d = rep[c], e = str(d, i), e && h.push(quote(d) + (gap ? ":
+" : ":") + e))
+ } else for (d in i) Object.prototype.hasOwnProperty.call(i, d) && (e = str(d, i), e && h.push(quote(d) + (gap ? ":
+" : ":") + e));
+ return
+ e = h.length === 0 ? "{}" : gap ? "{\n" + gap + h.join(",\n" + gap) + "\n" + g + "}" : "{" + h.join(",") + "}", gap = g, e
+ }
+ }
+ "use
+strict", typeof
+ Date.prototype.toJSON != "function" && (Date.prototype.toJSON = function(a) {
+ return
+ isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
+ }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(a) {
+ return
+ this.valueOf()
+ });
+ var
+ cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap, indent, meta = {
+ "\b": "\\b",
+ "\t": "\\t",
+ "\n": "\\n",
+ "\f": "\\f",
+ "\r": "\\r",
+ '"': '\\"',
+ "\\": "\\\\"
+ },
+ rep;
+ typeof
+ JSON.stringify != "function" && (JSON.stringify = function(a, b, c) {
+ var
+ d;
+ gap = "", indent = "";
+ if (typeof c == "number") for (d = 0; d < c; d += 1) indent += " ";
+ else typeof c == "string" && (indent = c);
+ rep = b;
+ if (!b || typeof b == "function" || typeof
+ b == "object" && typeof b.length == "number") return str("", {
+ "": a
+ });
+ throw new
+ Error("JSON.stringify")
+ }), typeof
+ JSON.parse != "function" && (JSON.parse = function(text, reviver) {
+ function
+ walk(a, b) {
+ var c, d, e = a[b];
+ if (e && typeof e == "object") for (c in e) Object.prototype.hasOwnProperty.call(e, c) && (d = walk(e, c), d !== undefined ? e[c] = d : delete
+ e[c]);
+ return reviver.call(a, b, e)
+ }
+ var
+ j;
+ text = String(text), cx.lastIndex = 0, cx.test(text) && (text = text.replace(cx, function(a) {
+ return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
+ }));
+ if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return
+ j = eval("(" + text + ")"), typeof reviver == "function" ? walk({
+ "": j
+ }, "") : j;
+ throw new
+ SyntaxError("JSON.parse")
+ })
+}(), QQWB.extend("JSON", {
+ fromString: function(a) {
+ if (!a || !QQWB.String.isString(a)) return {};
+ a = a.replace(/^\s+/, "").replace(/\s+$/, "");
+ if (window.JSON && window.JSON.parse) a = window.JSON.parse(a);
+ else if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) a = (new
+ Function("return " + data))();
+ else throw new SyntaxError("Invalid JSON:
+ " + a);
+ return a
+ },
+ stringify: function(a) {
+ return
+ a == null ? "" : window.JSON.stringify(a)
+ },
+ toString: function(a) {
+ return
+ QQWB.JSON.stringify(a)
+ },
+ parse: function(a) {
+ return
+ a == null ? {} : window.JSON.parse(a)
+ }
+}, !0), QQWB.provide("man", function(a) {
+ return
+ a = this._apiProvider.compat(a), this._apiProvider.getDescriptor(a) ? QQWB.JSON.stringify(this._apiProvider.getDescriptor(a)) : "no
+ such api"
+}), QQWB.extend("Array", {
+ isArray: function(a) {
+ return
+ Object.prototype.toString.call(a) === "[object
+ Array]"
+ },
+ inArray: function(a, b) {
+ for (var
+ c = 0, d = a.length; c < d; c++) if (b === a[c]) return !0;
+ return !1
+ },
+ fromString: function(a, b, c) {
+ return
+ QQWB.String.isString(a) ? (b = b || "", c ? a.split(b, c) : a.split(b)) : []
+ },
+ fromArguments: function(a, b) {
+ return
+ typeof
+ a != "object" ? [] : b ? Array.prototype.slice.call(a, b) : Array.prototype.slice.call(a)
+ },
+ toArray: function(a) {
+ return
+ typeof a == "string" ? a.split("") : typeof
+ a == "object" ? Array.prototype.slice.call(a, 0) : this.toArray(a.toString())
+ },
+ each: function(a, b) {
+ for (var
+ c = 0, d = a.length; c < d; c++) if (!1 === b(c, a[c])) break
+ },
+ get: function(a, b) {
+ var
+ c = a.length;
+ if (Math.abs(b) < c) return
+ b >= 0 ? a[b] : a[c + b]
+ }
+}), QQWB.extend("dom", {
+ create: function(a, b) {
+ var
+ c = document.createElement(a + "");
+ if (b && c) for (attr in b) b.hasOwnProperty(attr) && (QQWB.String.startsWith(attr, "data-") ? c.setAttribute(attr, b[attr]) : c[attr] = b[attr]);
+ return
+ c
+ },
+ createHidden: function(a, b, c) {
+ a = a || "div";
+ var d = this.create(a, b);
+ return
+ c ? (d.width = d.height = 0, d.style.width = d.style.height = 0, d.style.position = "absolute", d.style.top = "-9999px") : d.style.display = "none", d
+ },
+ append: function(a, b) {
+ return
+ b = b || document.body, a && a.nodeType && b.appendChild(a), this
+ },
+ html: function(a, b) {
+ return
+ a && a.nodeType && b && (a.innerHTML = b), this
+ },
+ appendHidden: function(a, b, c) {
+ var
+ d = this.createHidden(null, b, c);
+ return
+ this.html(d, a), this.append(d)
+ },
+ remove: function(a) {
+ return
+ a && a.nodeType && a.parentNode && a.parentNode.removeChild(a), this
+ },
+ hasClass: function(a, b) {
+ return ("
+ " + a.className + " ").indexOf(" " + b + " ") >= 0
+ },
+ addClass: function(a, b) {
+ return
+ b = QQWB.String.trim(b), QQWB.Array.isArray(a) ? (QQWB.Array.each(a, function(a, c) {
+ QQWB.dom.addClass(c, b)
+ }), this) : (QQWB.dom.hasClass(a, b) || (a.className = a.className + "
+ " + b), this)
+ },
+ removeClass: function(a, b) {
+ return
+ b = QQWB.String.trim(b), QQWB.Array.isArray(a) ? (QQWB.Array.each(a, function(a, c) {
+ QQWB.dom.removeClass(c, b)
+ }), this) : (QQWB.dom.hasClass(a, b) && (a.className = a.className.replace(b, ""), QQWB.dom.removeClass(a, b)), this)
+ }
+}), QQWB.extend("queryString", {
+ encode: function(a, b, c, d) {
+ var
+ e = /%20/g,
+ f = b || "&",
+ g = c || encodeURIComponent,
+ h = [],
+ i = [],
+ j, k;
+ for (j in a) if (a.hasOwnProperty(j)) {
+ k = a[j];
+ if (k !== null && typeof
+ k != "undefined") {
+ j = g(j).replace(e, "+"), k = g(k).replace(e, "+");
+ if (!d) h.push(j + "=" + k);
+ else for (var l = 0, m = d.length; l < m; l++) d[l] === j && (h[l] = j + "=" + k)
+ }
+ }
+ for (var
+ n = 0, o = h.length; n < o; n++) typeof h[n] != "undefined" && i.push(h[n]);
+ return
+ h = i, i = null, h.join(f)
+ },
+ decode: function(a, b, c) {
+ var
+ d = c || decodeURIComponent,
+ e = b || "&",
+ f = a.split(e),
+ g = {},
+ h;
+ for (var
+ i = 0, j = f.length; i < j; i++) h = f[i].split("=", 2), h && h[0] && (g[d(h[0])] = d(h[1]));
+ return
+ g
+ }
+}), function() {
+ function q(a, b, c, d, e, f) {
+ for (var g = 0, h = d.length; g < h; g++) {
+ var
+ i = d[g];
+ if (i) {
+ var
+ j = !1;
+ i = i[a];
+ while (i) {
+ if (i.sizcache === c) {
+ j = d[i.sizset];
+ break
+ }
+ i.nodeType === 1 && !f && (i.sizcache = c, i.sizset = g);
+ if (i.nodeName.toLowerCase() === b) {
+ j = i;
+ break
+ }
+ i = i[a]
+ }
+ d[g] = j
+ }
+ }
+ }
+
+ function
+ r(a, b, c, d, e, f) {
+ for (var g = 0, i = d.length; g < i; g++) {
+ var j = d[g];
+ if (j) {
+ var
+ k = !1;
+ j = j[a];
+ while (j) {
+ if (j.sizcache === c) {
+ k = d[j.sizset];
+ break
+ }
+ if (j.nodeType === 1) {
+ f || (j.sizcache = c, j.sizset = g);
+ if (typeof
+ b != "string") {
+ if (j === b) {
+ k = !0;
+ break
+ }
+ } else if (h.filter(b, [j]).length > 0) {
+ k = j;
+ break
+ }
+ }
+ j = j[a]
+ }
+ d[g] = k
+ }
+ }
+ }
+ var
+ a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^
+ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ b = 0,
+ c = Object.prototype.toString,
+ d = !1,
+ e = !0,
+ f = /\\/g,
+ g = /\W/;
+ [0, 0].sort(function() {
+ return
+ e = !1, 0
+ });
+ var h = function(b, d, e, f) {
+ e = e || [], d = d || document;
+ var
+ g = d;
+ if (d.nodeType !== 1 && d.nodeType !== 9) return [];
+ if (!b || typeof
+ b != "string") return e;
+ var
+ k, l, n, o, p, q, r, t, u = !0,
+ v = h.isXML(d),
+ w = [],
+ x = b;
+ do {
+ a.exec(""), k = a.exec(x);
+ if (k) {
+ x = k[3], w.push(k[1]);
+ if (k[2]) {
+ o = k[3];
+ break
+ }
+ }
+ } while (k);
+ if (w.length > 1 && j.exec(b)) if (w.length === 2 && i.relative[w[0]]) l = s(w[0] + w[1], d);
+ else {
+ l = i.relative[w[0]] ? [d] : h(w.shift(), d);
+ while (w.length) b = w.shift(), i.relative[b] && (b += w.shift()), l = s(b, l)
+ } else {
+ !f && w.length > 1 && d.nodeType === 9 && !v && i.match.ID.test(w[0]) && !i.match.ID.test(w[w.length - 1]) && (p = h.find(w.shift(), d, v), d = p.expr ? h.filter(p.expr, p.set)[0] : p.set[0]);
+ if (d) {
+ p = f ? {
+ expr: w.pop(),
+ set: m(f)
+ } : h.find(w.pop(), w.length === 1 && (w[0] === "~" || w[0] === "+") && d.parentNode ? d.parentNode : d, v), l = p.expr ? h.filter(p.expr, p.set) : p.set, w.length > 0 ? n = m(l) : u = !1;
+ while (w.length) q = w.pop(), r = q, i.relative[q] ? r = w.pop() : q = "", r == null && (r = d), i.relative[q](n, r, v)
+ } else n = w = []
+ }
+ n || (n = l), n || h.error(q || b);
+ if (c.call(n) === "[object
+ Array]") if (!u) e.push.apply(e, n);
+ else if (d && d.nodeType === 1) for (t = 0; n[t] != null; t++) n[t] && (n[t] === !0 || n[t].nodeType === 1 && h.contains(d, n[t])) && e.push(l[t]);
+ else for (t = 0; n[t] != null; t++) n[t] && n[t].nodeType === 1 && e.push(l[t]);
+ else m(n, e);
+ return
+ o && (h(o, g, e, f), h.uniqueSort(e)), e
+ };
+ h.uniqueSort = function(a) {
+ if (o) {
+ d = e, a.sort(o);
+ if (d) for (var
+ b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1)
+ }
+ return
+ a
+ }, h.matches = function(a, b) {
+ return
+ h(a, null, null, b)
+ }, h.matchesSelector = function(a, b) {
+ return
+ h(b, null, null, [a]).length > 0
+ }, h.find = function(a, b, c) {
+ var
+ d;
+ if (!a) return [];
+ for (var e = 0, g = i.order.length; e < g; e++) {
+ var
+ h, j = i.order[e];
+ if (h = i.leftMatch[j].exec(a)) {
+ var
+ k = h[1];
+ h.splice(1, 1);
+ if (k.substr(k.length - 1) !== "\\") {
+ h[1] = (h[1] || "").replace(f, ""), d = i.find[j](h, b, c);
+ if (d != null) {
+ a = a.replace(i.match[j], "");
+ break
+ }
+ }
+ }
+ }
+ return
+ d || (d = typeof
+ b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []), {
+ set: d,
+ expr: a
+ }
+ }, h.filter = function(a, b, c, d) {
+ var
+ e, f, g = a,
+ j = [],
+ k = b,
+ l = b && b[0] && h.isXML(b[0]);
+ while (a && b.length) {
+ for (var
+ m in i.filter) if ((e = i.leftMatch[m].exec(a)) != null && e[2]) {
+ var
+ n, o, p = i.filter[m],
+ q = e[1];
+ f = !1, e.splice(1, 1);
+ if (q.substr(q.length - 1) === "\\") continue;
+ k === j && (j = []);
+ if (i.preFilter[m]) {
+ e = i.preFilter[m](e, k, c, j, d, l);
+ if (!e) f = n = !0;
+ else if (e === !0) continue
+ }
+ if (e) for (var
+ r = 0;
+ (o = k[r]) != null; r++) if (o) {
+ n = p(o, e, r, k);
+ var
+ s = d ^ !! n;
+ c && n != null ? s ? f = !0 : k[r] = !1 : s && (j.push(o), f = !0)
+ }
+ if (n !== undefined) {
+ c || (k = j), a = a.replace(i.match[m], "");
+ if (!f) return [];
+ break
+ }
+ }
+ if (a === g) if (f == null) h.error(a);
+ else break;
+ g = a
+ }
+ return k
+ }, h.error = function(a) {
+ throw "Syntax error,
+ unrecognized expression: " + a
+ };
+ var
+ i = h.selectors = {
+ order: ["ID", "NAME", "TAG"],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function(a) {
+ return
+ a.getAttribute("href")
+ },
+ type: function(a) {
+ return
+ a.getAttribute("type")
+ }
+ },
+ relative: {
+ "+": function(a, b) {
+ var c = typeof
+ b == "string",
+ d = c && !g.test(b),
+ e = c && !d;
+ d && (b = b.toLowerCase());
+ for (var
+ f = 0, i = a.length, j; f < i; f++) if (j = a[f]) {
+ while ((j = j.previousSibling) && j.nodeType !== 1);
+ a[f] = e || j && j.nodeName.toLowerCase() === b ? j || !1 : j === b
+ }
+ e && h.filter(b, a, !0)
+ },
+ ">": function(a, b) {
+ var
+ c, d = typeof
+ b == "string",
+ e = 0,
+ f = a.length;
+ if (d && !g.test(b)) {
+ b = b.toLowerCase();
+ for (; e < f; e++) {
+ c = a[e];
+ if (c) {
+ var
+ i = c.parentNode;
+ a[e] = i.nodeName.toLowerCase() === b ? i : !1
+ }
+ }
+ } else {
+ for (; e < f; e++) c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
+ d && h.filter(b, a, !0)
+ }
+ },
+ "": function(a, c, d) {
+ var
+ e, f = b++,
+ h = r;
+ typeof
+ c == "string" && !g.test(c) && (c = c.toLowerCase(), e = c, h = q), h("parentNode", c, f, a, e, d)
+ },
+ "~": function(a, c, d) {
+ var
+ e, f = b++,
+ h = r;
+ typeof
+ c == "string" && !g.test(c) && (c = c.toLowerCase(), e = c, h = q), h("previousSibling", c, f, a, e, d)
+ }
+ },
+ find: {
+ ID: function(a, b, c) {
+ if (typeof
+ b.getElementById != "undefined" && !c) {
+ var
+ d = b.getElementById(a[1]);
+ return
+ d && d.parentNode ? [d] : []
+ }
+ },
+ NAME: function(a, b) {
+ if (typeof
+ b.getElementsByName != "undefined") {
+ var
+ c = [],
+ d = b.getElementsByName(a[1]);
+ for (var
+ e = 0, f = d.length; e < f; e++) d[e].getAttribute("name") === a[1] && c.push(d[e]);
+ return
+ c.length === 0 ? null : c
+ }
+ },
+ TAG: function(a, b) {
+ if (typeof
+ b.getElementsByTagName != "undefined") return
+ b.getElementsByTagName(a[1])
+ }
+ },
+ preFilter: {
+ CLASS: function(a, b, c, d, e, g) {
+ a = "
+ " + a[1].replace(f, "") + " ";
+ if (g) return a;
+ for (var
+ h = 0, i;
+ (i = b[h]) != null; h++) i && (e ^ (i.className && (" " + i.className + "
+ ").replace(/[\t\n\r]/g, "
+ ").indexOf(a) >= 0) ? c || d.push(i) : c && (b[h] = !1));
+ return !1
+ },
+ ID: function(a) {
+ return
+ a[1].replace(f, "")
+ },
+ TAG: function(a, b) {
+ return
+ a[1].replace(f, "").toLowerCase()
+ },
+ CHILD: function(a) {
+ if (a[1] === "nth") {
+ a[2] || h.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
+ var
+ c = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
+ a[2] = c[1] + (c[2] || 1) - 0, a[3] = c[3] - 0
+ } else a[2] && h.error(a[0]);
+ return
+ a[0] = b++, a
+ },
+ ATTR: function(a, b, c, d, e, g) {
+ var
+ h = a[1] = a[1].replace(f, "");
+ return !g && i.attrMap[h] && (a[1] = i.attrMap[h]), a[4] = (a[4] || a[5] || "").replace(f, ""), a[2] === "~=" && (a[4] = "
+ " + a[4] + "
+ "), a
+ },
+ PSEUDO: function(b, c, d, e, f) {
+ if (b[1] === "not") if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3])) b[3] = h(b[3], null, null, c);
+ else {
+ var
+ g = h.filter(b[3], c, d, !0 ^ f);
+ return d || e.push.apply(e, g), !1
+ } else if (i.match.POS.test(b[0]) || i.match.CHILD.test(b[0])) return !0;
+ return
+ b
+ },
+ POS: function(a) {
+ return
+ a.unshift(!0), a
+ }
+ },
+ filters: {
+ enabled: function(a) {
+ return
+ a.disabled === !1 && a.type !== "hidden"
+ },
+ disabled: function(a) {
+ return
+ a.disabled === !0
+ },
+ checked: function(a) {
+ return
+ a.checked === !0
+ },
+ selected: function(a) {
+ return
+ a.parentNode && a.parentNode.selectedIndex, a.selected === !0
+ },
+ parent: function(a) {
+ return !!a.firstChild
+ },
+ empty: function(a) {
+ return !a.firstChild
+ },
+ has: function(a, b, c) {
+ return !!h(c[3], a).length
+ },
+ header: function(a) {
+ return /h\d/i.test(a.nodeName)
+ },
+ text: function(a) {
+ var
+ b = a.getAttribute("type"),
+ c = a.type;
+ return
+ a.nodeName.toLowerCase() === "input" && "text" === c && (b === c || b === null)
+ },
+ radio: function(a) {
+ return
+ a.nodeName.toLowerCase() === "input" && "radio" === a.type
+ },
+ checkbox: function(a) {
+ return
+ a.nodeName.toLowerCase() === "input" && "checkbox" === a.type
+ },
+ file: function(a) {
+ return
+ a.nodeName.toLowerCase() === "input" && "file" === a.type
+ },
+ password: function(a) {
+ return
+ a.nodeName.toLowerCase() === "input" && "password" === a.type
+ },
+ submit: function(a) {
+ var
+ b = a.nodeName.toLowerCase();
+ return (b === "input" || b === "button") && "submit" === a.type
+ },
+ image: function(a) {
+ return
+ a.nodeName.toLowerCase() === "input" && "image" === a.type
+ },
+ reset: function(a) {
+ var
+ b = a.nodeName.toLowerCase();
+ return (b === "input" || b === "button") && "reset" === a.type
+ },
+ button: function(a) {
+ var
+ b = a.nodeName.toLowerCase();
+ return
+ b === "input" && "button" === a.type || b === "button"
+ },
+ input: function(a) {
+ return /input|select|textarea|button/i.test(a.nodeName)
+ },
+ focus: function(a) {
+ return
+ a === a.ownerDocument.activeElement
+ }
+ },
+ setFilters: {
+ first: function(a, b) {
+ return
+ b === 0
+ },
+ last: function(a, b, c, d) {
+ return
+ b === d.length - 1
+ },
+ even: function(a, b) {
+ return
+ b % 2 === 0
+ },
+ odd: function(a, b) {
+ return
+ b % 2 === 1
+ },
+ lt: function(a, b, c) {
+ return
+ b < c[3] - 0
+ },
+ gt: function(a, b, c) {
+ return
+ b > c[3] - 0
+ },
+ nth: function(a, b, c) {
+ return
+ c[3] - 0 === b
+ },
+ eq: function(a, b, c) {
+ return
+ c[3] - 0 === b
+ }
+ },
+ filter: {
+ PSEUDO: function(a, b, c, d) {
+ var
+ e = b[1],
+ f = i.filters[e];
+ if (f) return
+ f(a, c, b, d);
+ if (e === "contains") return (a.textContent || a.innerText || h.getText([a]) || "").indexOf(b[3]) >= 0;
+ if (e === "not") {
+ var
+ g = b[3];
+ for (var
+ j = 0, k = g.length; j < k; j++) if (g[j] === a) return !1;
+ return !0
+ }
+ h.error(e)
+ },
+ CHILD: function(a, b) {
+ var
+ c = b[1],
+ d = a;
+ switch (c) {
+ case "only":
+ case "first":
+ while (d = d.previousSibling) if (d.nodeType === 1) return !1;
+ if (c === "first") return !0;
+ d = a;
+ case "last":
+ while (d = d.nextSibling) if (d.nodeType === 1) return !1;
+ return !0;
+ case "nth":
+ var
+ e = b[2],
+ f = b[3];
+ if (e === 1 && f === 0) return !0;
+ var
+ g = b[0],
+ h = a.parentNode;
+ if (h && (h.sizcache !== g || !a.nodeIndex)) {
+ var
+ i = 0;
+ for (d = h.firstChild; d; d = d.nextSibling) d.nodeType === 1 && (d.nodeIndex = ++i);
+ h.sizcache = g
+ }
+ var
+ j = a.nodeIndex - f;
+ return
+ e === 0 ? j === 0 : j % e === 0 && j / e >= 0
+ }
+ },
+ ID: function(a, b) {
+ return
+ a.nodeType === 1 && a.getAttribute("id") === b
+ },
+ TAG: function(a, b) {
+ return
+ b === "*" && a.nodeType === 1 || a.nodeName.toLowerCase() === b
+ },
+ CLASS: function(a, b) {
+ return ("
+ " + (a.className || a.getAttribute("class")) + "
+ ").indexOf(b) > -1
+ },
+ ATTR: function(a, b) {
+ var
+ c = b[1],
+ d = i.attrHandle[c] ? i.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
+ e = d + "",
+ f = b[2],
+ g = b[4];
+ return
+ d == null ? f === "!=" : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? ("
+ " + e + "
+ ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
+ },
+ POS: function(a, b, c, d) {
+ var
+ e = b[2],
+ f = i.setFilters[e];
+ if (f) return
+ f(a, c, b, d)
+ }
+ }
+ },
+ j = i.match.POS,
+ k = function(a, b) {
+ return "\\" + (b - 0 + 1)
+ };
+ for (var
+ l in i.match) i.match[l] = new
+ RegExp(i.match[l].source + /(?![^\[]*\])(?![^\(]*\))/.source), i.leftMatch[l] = new
+ RegExp(/(^(?:.|\r|\n)*?)/.source + i.match[l].source.replace(/\\(\d+)/g, k));
+ var
+ m = function(a, b) {
+ return
+ a = Array.prototype.slice.call(a, 0), b ? (b.push.apply(b, a), b) : a
+ };
+ try {
+ Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType
+ } catch (n) {
+ m = function(a, b) {
+ var
+ d = 0,
+ e = b || [];
+ if (c.call(a) === "[object
+ Array]") Array.prototype.push.apply(e, a);
+ else if (typeof
+ a.length == "number") for (var f = a.length; d < f; d++) e.push(a[d]);
+ else for (; a[d]; d++) e.push(a[d]);
+ return e
+ }
+ }
+ var
+ o, p;
+ document.documentElement.compareDocumentPosition ? o = function(a, b) {
+ return
+ a === b ? (d = !0, 0) : !a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition ? -1 : 1 : a.compareDocumentPosition(b) & 4 ? -1 : 1
+ } : (o = function(a, b) {
+ if (a === b) return
+ d = !0, 0;
+ if (a.sourceIndex && b.sourceIndex) return
+ a.sourceIndex - b.sourceIndex;
+ var
+ c, e, f = [],
+ g = [],
+ h = a.parentNode,
+ i = b.parentNode,
+ j = h;
+ if (h === i) return
+ p(a, b);
+ if (!h) return -1;
+ if (!i) return
+ 1;
+ while (j) f.unshift(j), j = j.parentNode;
+ j = i;
+ while (j) g.unshift(j), j = j.parentNode;
+ c = f.length, e = g.length;
+ for (var
+ k = 0; k < c && k < e; k++) if (f[k] !== g[k]) return p(f[k], g[k]);
+ return
+ k === c ? p(a, g[k], -1) : p(f[k], b, 1)
+ }, p = function(a, b, c) {
+ if (a === b) return
+ c;
+ var
+ d = a.nextSibling;
+ while (d) {
+ if (d === b) return -1;
+ d = d.nextSibling
+ }
+ return
+ 1
+ }), h.getText = function(a) {
+ var b = "",
+ c;
+ for (var
+ d = 0; a[d]; d++) c = a[d], c.nodeType === 3 || c.nodeType === 4 ? b += c.nodeValue : c.nodeType !== 8 && (b += h.getText(c.childNodes));
+ return
+ b
+ }, function() {
+ var
+ a = document.createElement("div"),
+ b = "script" + (new
+ Date).getTime(),
+ c = document.documentElement;
+ a.innerHTML = "", c.insertBefore(a, c.firstChild), document.getElementById(b) && (i.find.ID = function(a, b, c) {
+ if (typeof
+ b.getElementById != "undefined" && !c) {
+ var
+ d = b.getElementById(a[1]);
+ return d ? d.id === a[1] || typeof
+ d.getAttributeNode != "undefined" && d.getAttributeNode("id").nodeValue === a[1] ? [d] : undefined : []
+ }
+ }, i.filter.ID = function(a, b) {
+ var
+ c = typeof
+ a.getAttributeNode != "undefined" && a.getAttributeNode("id");
+ return
+ a.nodeType === 1 && c && c.nodeValue === b
+ }), c.removeChild(a), c = a = null
+ }(), function() {
+ var
+ a = document.createElement("div");
+ a.appendChild(document.createComment("")), a.getElementsByTagName("*").length > 0 && (i.find.TAG = function(a, b) {
+ var
+ c = b.getElementsByTagName(a[1]);
+ if (a[1] === "*") {
+ var d = [];
+ for (var
+ e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]);
+ c = d
+ }
+ return
+ c
+ }), a.innerHTML = "", a.firstChild && typeof
+ a.firstChild.getAttribute != "undefined" && a.firstChild.getAttribute("href") !== "#" && (i.attrHandle.href = function(a) {
+ return
+ a.getAttribute("href", 2)
+ }), a = null
+ }(), document.querySelectorAll &&
+ function() {
+ var
+ a = h,
+ b = document.createElement("div"),
+ c = "__sizzle__";
+ b.innerHTML = "";
+ if (b.querySelectorAll && b.querySelectorAll(".TEST").length === 0) return;
+ h = function(b, d, e, f) {
+ d = d || document;
+ if (!f && !h.isXML(d)) {
+ var
+ g = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
+ if (g && (d.nodeType === 1 || d.nodeType === 9)) {
+ if (g[1]) return
+ m(d.getElementsByTagName(b), e);
+ if (g[2] && i.find.CLASS && d.getElementsByClassName) return
+ m(d.getElementsByClassName(g[2]), e)
+ }
+ if (d.nodeType === 9) {
+ if (b === "body" && d.body) return
+ m([d.body], e);
+ if (g && g[3]) {
+ var
+ j = d.getElementById(g[3]);
+ if (!j || !j.parentNode) return
+ m([], e);
+ if (j.id === g[3]) return m([j], e)
+ }
+ try {
+ return
+ m(d.querySelectorAll(b), e)
+ } catch (k) {}
+ } else if (d.nodeType === 1 && d.nodeName.toLowerCase() !== "object") {
+ var
+ l = d,
+ n = d.getAttribute("id"),
+ o = n || c,
+ p = d.parentNode,
+ q = /^\s*[+~]/.test(b);
+ n ? o = o.replace(/'/g, "\\$&") : d.setAttribute("id", o), q && p && (d = d.parentNode);
+ try {
+ if (!q || p) return
+ m(d.querySelectorAll("[id='" + o + "']
+ " + b), e)
+ } catch (r) {} finally {
+ n || l.removeAttribute("id")
+ }
+ }
+ }
+ return
+ a(b, d, e, f)
+ };
+ for (var d in a) h[d] = a[d];
+ b = null
+ }(), function() {
+ var
+ a = document.documentElement,
+ b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
+ if (b) {
+ var
+ c = !b.call(document.createElement("div"), "div"),
+ d = !1;
+ try {
+ b.call(document.documentElement, "[test!='']:sizzle")
+ } catch (e) {
+ d = !0
+ }
+ h.matchesSelector = function(a, e) {
+ e = e.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+ if (!h.isXML(a)) try {
+ if (d || !i.match.PSEUDO.test(e) && !/!=/.test(e)) {
+ var
+ f = b.call(a, e);
+ if (f || !c || a.document && a.document.nodeType !== 11) return
+ f
+ }
+ } catch (g) {}
+ return
+ h(e, null, null, [a]).length > 0
+ }
+ }
+ }(), function() {
+ var
+ a = document.createElement("div");
+ a.innerHTML = "";
+ if (!a.getElementsByClassName || a.getElementsByClassName("e").length === 0) return;
+ a.lastChild.className = "e";
+ if (a.getElementsByClassName("e").length === 1) return;
+ i.order.splice(1, 0, "CLASS"), i.find.CLASS = function(a, b, c) {
+ if (typeof
+ b.getElementsByClassName != "undefined" && !c) return
+ b.getElementsByClassName(a[1])
+ }, a = null
+ }(), document.documentElement.contains ? h.contains = function(a, b) {
+ return
+ a !== b && (a.contains ? a.contains(b) : !0)
+ } : document.documentElement.compareDocumentPosition ? h.contains = function(a, b) {
+ return !!(a.compareDocumentPosition(b) & 16)
+ } : h.contains = function() {
+ return !1
+ }, h.isXML = function(a) {
+ var
+ b = (a ? a.ownerDocument || a : 0).documentElement;
+ return
+ b ? b.nodeName !== "HTML" : !1
+ };
+ var s = function(a, b) {
+ var
+ c, d = [],
+ e = "",
+ f = b.nodeType ? [b] : b;
+ while (c = i.match.PSEUDO.exec(a)) e += c[0], a = a.replace(i.match.PSEUDO, "");
+ a = i.relative[a] ? a + "*" : a;
+ for (var
+ g = 0, j = f.length; g < j; g++) h(a, f[g], d);
+ return
+ h.filter(e, d)
+ },
+ t = window.Sizzle;
+ h.noConflict = function() {
+ window.Sizzle = t
+ }, window.Sizzle = h
+}(), function() {
+ function
+ b(b) {
+ var c;
+ if (!QQWB.Array.isArray(this)) return
+ this;
+ c = [];
+ for (var
+ d = 0, e = this.length; d < e; d++) c = c.concat(a(b, this[d]));
+ return
+ c
+ }
+
+ function c(b) {
+ return typeof
+ b != "string" ? this : b.length <= 0 ? this : a.matches(":contains(" + b + ")", this)
+ }
+
+ function
+ d(b) {
+ return a.matches(b, this)
+ }
+
+ function e(b) {
+ return
+ a.matches(":not(" + b + ")", this)
+ }
+
+ function f(a) {
+ return
+ QQWB.Array.get(this, a)
+ }
+
+ function
+ g(a) {
+ if (!QQWB.Array.isArray(this) || !a) return this;
+ for (var
+ b = 0, c = this.length; b < c; b++) if (a(this[b]) === !1) break;
+ return
+ this
+ }
+
+ function h(a) {
+ return !a.find && (a.find = function(c) {
+ return
+ h(b.call(a, c))
+ }), !a.contains && (a.contains = function(b) {
+ return
+ h(c.call(a, b))
+ }), !a.keep && (a.keep = function(b) {
+ return
+ h(d.call(a, b))
+ }), !a.tear && (a.tear = function(b) {
+ return
+ h(e.call(a, b))
+ }), !a.get && (a.get = function(b) {
+ return
+ f.call(a, b)
+ }), !a.each && (a.each = function(b) {
+ return
+ g.call(a, b)
+ }), a
+ }
+ var
+ a = window.Sizzle;
+ a.noConflict(), QQWB.provide("dom.find", function(b, c) {
+ return
+ h(a(b, c))
+ }), QQWB._alias("find", QQWB.dom.find)
+}(), function() {
+ var
+ a = function() {
+ function b(a) {
+ return
+ Object.prototype.toString.call(a).slice(8, -1).toLowerCase()
+ }
+
+ function
+ c(a, b) {
+ for (var c = []; b > 0; c[--b] = a);
+ return c.join("")
+ }
+ var
+ d = function() {
+ return
+ d.cache.hasOwnProperty(arguments[0]) || (d.cache[arguments[0]] = d.parse(arguments[0])), d.format.call(null, d.cache[arguments[0]], arguments)
+ };
+ return
+ d.format = function(d, e) {
+ var
+ f = 1,
+ g = d.length,
+ h = "",
+ i, j = [],
+ k, l, m, n, o, p;
+ for (k = 0; k < g; k++) {
+ h = b(d[k]);
+ if (h === "string") j.push(d[k]);
+ else if (h === "array") {
+ m = d[k];
+ if (m[2]) {
+ i = e[f];
+ for (l = 0; l < m[2].length; l++) {
+ if (!i.hasOwnProperty(m[2][l])) throw
+ a('[sprintf] property "%s" does not
+ exist', m[2][l]);
+ i = i[m[2][l]]
+ }
+ } else m[1] ? i = e[m[1]] : i = e[f++];
+ if (/[^s]/.test(m[8]) && b(i) != "number") throw
+ a("[sprintf] expecting number but found
+ %s", b(i));
+ switch (m[8]) {
+ case "b":
+ i = i.toString(2);
+ break;
+ case "c":
+ i = String.fromCharCode(i);
+ break;
+ case "d":
+ i = parseInt(i, 10);
+ break;
+ case "e":
+ i = m[7] ? i.toExponential(m[7]) : i.toExponential();
+ break;
+ case "f":
+ i = m[7] ? parseFloat(i).toFixed(m[7]) : parseFloat(i);
+ break;
+ case "o":
+ i = i.toString(8);
+ break;
+ case "s":
+ i = (i = i ? String(i) : "") && m[7] ? i.substring(0, m[7]) : i;
+ break;
+ case "u":
+ i = Math.abs(i);
+ break;
+ case "x":
+ i = i.toString(16);
+ break;
+ case "X":
+ i = i.toString(16).toUpperCase()
+ }
+ i = /[def]/.test(m[8]) && m[3] && i >= 0 ? "+" + i : i, o = m[4] ? m[4] == "0" ? "0" : m[4].charAt(1) : "
+ ", p = m[6] - String(i).length, n = m[6] ? c(o, p) : "", j.push(m[5] ? i + n : n + i)
+ }
+ }
+ return
+ j.join("")
+ }, d.cache = {}, d.parse = function(a) {
+ var
+ b = a,
+ c = [],
+ d = [],
+ e = 0;
+ while (b) {
+ if ((c = /^[^\x25]+/.exec(b)) !== null) d.push(c[0]);
+ else if ((c = /^\x25{2}/.exec(b)) !== null) d.push("%");
+ else {
+ if ((c = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b)) === null) throw "[sprintf]
+ huh?";
+ if (c[2]) {
+ e |= 1;
+ var
+ f = [],
+ g = c[2],
+ h = [];
+ if ((h = /^([a-z_][a-z_\d]*)/i.exec(g)) === null) throw "[sprintf]
+ huh?";
+ f.push(h[1]);
+ while ((g = g.substring(h[0].length)) !== "") if ((h = /^\.([a-z_][a-z_\d]*)/i.exec(g)) !== null) f.push(h[1]);
+ else if ((h = /^\[(\d+)\]/.exec(g)) !== null) f.push(h[1]);
+ else throw "[sprintf] huh?";
+ c[2] = f
+ } else e |= 2;
+ if (e === 3) throw "[sprintf] mixing positional and
+ named placeholders is not (yet)
+ supported";
+ d.push(c)
+ }
+ b = b.substring(c[0].length)
+ }
+ return
+ d
+ }, d
+ }(),
+ b = function(b, c) {
+ return
+ c.unshift(b), a.apply(null, c)
+ };
+ QQWB.extend("String.format", {
+ sprintf: a,
+ vsprintf: b
+ }), QQWB._alias("format", QQWB.String.format)
+}(), QQWB.extend("time", {
+ now: function() {
+ return +this.dateNow()
+ },
+ secondsNow: function() {
+ return
+ Math.round(this.now() / 1e3)
+ },
+ dateNow: function() {
+ return
+ new Date
+ },
+ shortTime: function(a, b) {
+ return a instanceof
+ Date || (b = a, a = this.dateNow()), b = b || "%(year)s/%(month)s/%(day)s
+ %(hour)02d:%(minute)02d:%(second)02d", QQWB.format.sprintf(b, {
+ year: a.getFullYear(),
+ month: a.getMonth(),
+ day: a.getDate(),
+ hour: a.getHours(),
+ minute: a.getMinutes(),
+ second: a.getSeconds()
+ })
+ }
+}), QQWB.extend("log", {
+ CRITICAL: 50,
+ ERROR: 40,
+ WARNING: 30,
+ INFO: 20,
+ DEBUG: 10,
+ NOTSET: 0,
+ _level: 0,
+ _format: "%(source)s%(popup)s%(frame)s%(name)s:
+ [%(levelname)s] %(time)s
+ %(message)s",
+ setLevel: function(a) {
+ return
+ this._level = a, this
+ },
+ setFormat: function(a) {
+ return
+ this._format = a, this
+ },
+ debug: function(a) {
+ return
+ this.DEBUG >= this._level && this._out("DEBUG", a), this
+ },
+ info: function(a) {
+ return
+ this.INFO >= this._level && this._out("INFO", a), this
+ },
+ warning: function(a) {
+ return
+ this.WARNING >= this._level && this._out("WARNING", a), this
+ },
+ error: function(a) {
+ return
+ this.ERROR >= this._level && this._out("ERROR", a), this
+ },
+ critical: function(a) {
+ return
+ this.CRITICAL >= this._level && this._out("CRITICAL", a), this
+ },
+ _out: function(a, b) {
+ var
+ c = this._format;
+ c = QQWB.format.sprintf(c, {
+ name: QQWB.name,
+ levelname: a,
+ time: QQWB.time.shortTime(),
+ message: b,
+ frame: window != window.parent ? "*" : "",
+ source: window.name ? window.name : "",
+ popup: window.opener || window.name === QQWB._const.AUTH_WINDOW_NAME ? "#" : ""
+ }), this._capture && typeof
+ this._captureLevel == "number" && this[a] > this._captureLevel && this._capturedMessages && (this._capturedMessages.length >= this._captureMaxSize && this._capturedMessages.shift(), this._capturedMessages.push(c)), QQWB.debug && window.console && window.console.log(c)
+ },
+ startCapture: function(a, b) {
+ return
+ this._captureLevel = a || this.NOTSET, this._captureMaxSize = b || 50, this._capturedMessages = [], this._capture = !0, this
+ },
+ stopCapture: function() {
+ return
+ this._capture && (this._capture = !1), this
+ },
+ lastCaptured: function(a) {
+ return
+ a = a || "\n", this._capturedMessages ? this._capturedMessages.join(a) : ""
+ }
+}), QQWB.extend("cookie", {
+ set: function(a, b, c, d, e, f) {
+ f = f || escape;
+ if (typeof
+ c == "undefined" || c === null) c = -1;
+ var
+ g = e ? "domain=" + e : "",
+ h = d ? "path=" + d : "",
+ i = "";
+ return
+ c === 0 ? i = "expires=" + (new
+ Date(1970, 1, 1)).toUTCString() : c > 0 && (i = "expires=" + (new
+ Date(+(new
+ Date) + c * 1e3)).toUTCString()), document.cookie = [a + "=" + f(b), i, h, g].join(";
+ "), this
+ },
+ get: function(a, b, c) {
+ b = b || unescape;
+ var
+ d = a + "=";
+ cookies = (document.cookie || "").split(/\s*;\s*/);
+ for (var
+ e = 0, f = cookies.length; e < f; e++) {
+ var
+ g = cookies[e];
+ if (g.indexOf(d) === 0) return
+ b(g.substr(d.length))
+ }
+ return
+ c
+ },
+ del: function(a, b, c) {
+ return
+ this.set(a, "", 0, b, c), document.cookie.indexOf(a + "=") >= 0 && QQWB.log.warning("Cookie
+ may not be deleted as you
+ expected"), this
+ }
+}), QQWB.extend("XML", {
+ isXML: function(a) {},
+ toString: function(a) {
+ return
+ this.stringify(a)
+ },
+ stringify: function(a) {
+ var b;
+ return
+ window.ActiveXObject ? b = a.xml : b = (new
+ XMLSerializer).serializeToString(a), b
+ },
+ fromString: function(a) {
+ var
+ b;
+ if (window.ActiveXObject) b = new
+ ActiveXObject("Microsoft.XMLDOM"), b.async = "false", b.loadXML(a);
+ else {
+ var
+ c = new
+ DOMParser;
+ b = c.parseFromString(a, "text/xml")
+ }
+ return
+ b
+ }
+}, !0), QQWB.extend("Function", {
+ isFunction: function(a) {
+ return
+ typeof
+ a == "function"
+ }
+}), QQWB.extend("deferred", {
+ _promiseMethods: "done
+ fail isResolved isRejected promise then always success
+ error complete whatever".split("
+ "),
+ _deferred: function() {
+ var
+ a = [],
+ b, c, d, e = {
+ done: function() {
+ if (!d) {
+ var
+ c = arguments,
+ f, g;
+ b && (g = b, b = 0);
+ for (var
+ h = 0, i = c.length; h < i; h++) f = c[h], QQWB.Array.isArray(f) ? e.done.apply(e, f) : QQWB.Function.isFunction(f) && a.push(f);
+ g && e.resolveWith(g[0], g[1])
+ }
+ return
+ this
+ },
+ resolveWith: function(e, f) {
+ if (!d && !b && !c) {
+ f = f || [], c = 1;
+ try {
+ while (a[0]) a.shift().apply(e, f)
+ } finally {
+ b = [e, f], c = 0
+ }
+ }
+ return
+ this
+ },
+ resolve: function() {
+ return
+ e.resolveWith(this, arguments), this
+ },
+ isResolved: function() {
+ return !!c || !! b
+ },
+ cancel: function() {
+ return
+ d = 1, a = [], this
+ }
+ };
+ return e
+ },
+ deferred: function(a) {
+ var
+ b, c = QQWB.deferred._deferred(),
+ d = QQWB.deferred._deferred();
+ return
+ QQWB.extend(c, {
+ fail: d.done,
+ then: function(a, b) {
+ return
+ c.done(a).fail(b), this
+ },
+ always: function() {
+ return
+ c.done.apply(c, arguments).fail.apply(this, arguments)
+ },
+ rejectWith: d.resolveWith,
+ reject: d.resolve,
+ isRejected: d.isResolved,
+ promise: function(a) {
+ if (a == null) {
+ if (b) return
+ b;
+ b = a = {}
+ }
+ var
+ d = QQWB.deferred._promiseMethods.length;
+ while (d--) a[QQWB.deferred._promiseMethods[d]] = c[QQWB.deferred._promiseMethods[d]];
+ return
+ a
+ }
+ }), c.success = c.done, c.error = c.fail, c.complete = c.whatever = c.always, c.done(d.cancel).fail(c.cancel), delete
+ c.cancel, a && a.call(c, c), c
+ },
+ when: function(a) {
+ function
+ f(a) {
+ return
+
+ function(c) {
+ b[a] = arguments.length > 1 ? QQWB.Array.fromArguments(arguments) : c, --d || e.resolveWith(e, QQWB.Array.fromArguments(b))
+ }
+ }
+ var
+ b = arguments,
+ c = b.length,
+ d = c,
+ e = c <= 1 && a && QQWB.Function.isFunction(a.promise) ? a : QQWB.deferred.deferred();
+ if (c > 1) for (var
+ g = 0; g < c; g++) b[g] && QQWB.Function.isFunction(b[g].promise) ? b[g].promise().then(f(g), e.reject) : --d, d || e.resolveWith(e, b);
+ else e !== a && e.resolveWith(e, c ? [a] : []);
+ return
+ e.promise()
+ }
+}), QQWB._alias(["task", "when"], QQWB.deferred.when), QQWB.extend("io", {
+ _globalIOTimeout: 3e4,
+ _IOScript: function(a) {
+ var
+ b, c, d = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
+ return {
+ send: function(e) {
+ var
+ f = QQWB.time.now();
+ b = document.createElement("script"), b.async = "async", a.charset && (b.charset = a.charset), b.src = a.url, c = setTimeout(function() {
+ QQWB.log.warning("script
+ loading timeout"), e(599, "network connect
+ timeout", QQWB.time.now() - f)
+ }, QQWB.io._globalIOTimeout), b.onload = b.onreadystatechange = function(a, g) {
+ if (g || !b.readyState || /loaded|complete/.test(b.readyState)) clearTimeout(c), b.onload = b.onreadystatechange = null, d && b.parentNode && d.removeChild(b), b = null, !g && e && e.apply(QQWB, [200, "success", QQWB.time.now() - f]), g && e && e.apply(QQWB, [-1, "aborted", QQWB.time.now() - f])
+ }, b.onerror = function(a) {
+ clearTimeout(c), e && e.apply(QQWB, [404, a, QQWB.time.now() - f])
+ }, d.insertBefore(b, d.firstChild)
+ },
+ abort: function() {
+ b && b.onload(0, 1)
+ }
+ }
+ },
+ _IOAjax: function(a) {
+ var
+ b, c, a = a || {},
+ d = window.XMLHttpRequest ? new
+ window.XMLHttpRequest : new
+ window.ActiveXObject("Microsoft.XMLHTTP");
+ return
+ a.async || (a.async = "async"), {
+ send: function(e) {
+ var
+ f = QQWB.time.now();
+ a.username ? d.open(a.type, a.url, a.async, a.username, a.password) : d.open(a.type, a.url, a.async);
+ try {
+ a.type == "POST" && d.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), d.setRequestHeader("X-Requested-With", "XMLHttpRequest"), d.setRequestHeader("X-Requested-From", "openjs")
+ } catch (g) {}
+ d.send(a.data || null), c = setTimeout(function() {
+ QQWB.log.warning("request
+ timeout"), e(599, "network connect
+ timeout", QQWB.time.now() - f)
+ }, QQWB.io._globalIOTimeout), b = function(g, h) {
+ var
+ i, j, k, l, m, n;
+ try {
+ if (b && (h || d.readyState === 4)) {
+ b = null;
+ if (h) d.readyState !== 4 && d.abort();
+ else {
+ i = d.status, k = d.getAllResponseHeaders(), l = {}, n = d.responseXML, n && n.documentElement && (l.xml = n), l.text = d.responseText;
+ try {
+ j = d.statusText
+ } catch (o) {
+ j = ""
+ }
+ i === 1223 && (i = 204), a.dataType.toLowerCase() == "json" ? m = QQWB.JSON.fromString(l.text) : a.dataType.toLowerCase() == "xml" ? m = l.xml : m = l.text
+ }
+ clearTimeout(c), e(i, j, QQWB.time.now() - f, m, l.text, k, a.dataType)
+ }
+ } catch (p) {
+ var
+ q = p;
+ i = -2, j = "", j += "Exception
+ [Type:", j += q && q.type ? q.type : "unknown exception
+ type", j += ",
+ Message:", j += q && q.message ? q.message : q, j += "]", QQWB.log.warning("caught
+ " + j + " exception
+ QQWB.io._IOAjax"), h || (clearTimeout(c), e(i, j, QQWB.time.now() - f))
+ }
+ }, !a.async || d.readyState === 4 ? b() : d.onreadystatechange = b
+ },
+ abort: function() {
+ b && b(0, 1)
+ }
+ }
+ },
+ _IOFlash: function(a) {
+ var
+ b, c, d, a = a || {};
+ return {
+ send: function(e) {
+ var
+ f = QQWB.time.now();
+ d = 1, c = setTimeout(function() {
+ QQWB.log.warning("request
+ timeout"), e(599, "network connect
+ timeout", QQWB.time.now() - f)
+ }, QQWB.io._globalIOTimeout), b = function(d, g) {
+ var
+ h, i, j, k, l, m, n = 4;
+ clearTimeout(c);
+ try {
+ b && (g || n == 4) && (b = null, g ? e(-1, "request
+ has
+ aborted", QQWB.time.now() - f) : (h = this.httpStatus, i = this.httpStatus == 200 ? "ok" : "", j = "", k = {}, k.text = this.httpResponseText, a.dataType.toLowerCase() == "json" ? l = QQWB.JSON.fromString(k.text) : a.dataType.toLowerCase() == "xml" ? l = QQWB.XML.fromString(k.text) : l = k.text), e(h, i, QQWB.time.now() - f, l, k.text, j, a.dataType))
+ } catch (o) {
+ var
+ p = o;
+ h = -2, i = "", i += "Exception
+ [Type:", i += p && p.type ? p.type : "unknown exception
+ type", i += ",
+ Message:", i += p && p.message ? p.message : p, i += "]", QQWB.log.warning("caught
+ " + i + " exception
+ QQWB.io._IOFlash"), g || e(h, i, QQWB.time.now() - f)
+ }
+ }, window.onFlashRequestComplete_8df046 || (window.onFlashRequestComplete_8df046 = function(a) {
+ if (!a.ticket) {
+ QQWB.log.error("ticket
+ doesn't exists in response,
+ " + QQWB.JSON.stringify(a));
+ return
+ }
+ var
+ b = window.onFlashRequestComplete_8df046.callbacks.getByTicket(a.ticket),
+ c = a.srcEvent;
+ b.readyState || (b.readyState = 0), /httpStatus/i.test(c.type) ? (b.httpStatus = c.status, b.readyState++) : /error/i.test(c.type) ? (b.httpError = c.type, b.readyState++) : /complete/i.test(c.type) && (b.httpResponseText = c.target.data, b.readyState++), b.readyState == 2 && (b.call(b), window.onFlashRequestComplete_8df046.callbacks.unregister(a.ticket))
+ }, window.onFlashRequestComplete_8df046.callbacks = {
+ _callbackPool: {},
+ _ticketPrefix: "openjstkt",
+ _ticketStartIndex: 0,
+ register: function(a) {
+ var
+ b;
+ return
+ this._ticketStartIndex++, b = this._ticketPrefix + this._ticketStartIndex, this._callbackPool[b] = a, b
+ },
+ getByTicket: function(a) {
+ return
+ this._callbackPool[a] || QQWB.log.error("get callback
+ failed, callback doesn't exist at ticket
+ " + a), this._callbackPool[a]
+ },
+ unregister: function(a) {
+ return
+ this._callbackPool[a] ? (delete
+ this._callbackPool[a], !0) : (QQWB.log.error("unregister
+ callback failed, callback doesn't exist at ticket
+ " + a), !1)
+ }
+ }), QQWBFlashTransport && QQWBFlashTransport.httpRequest ? QQWBFlashTransport.httpRequest(a.url, a.data, a.type, window.onFlashRequestComplete_8df046.callbacks.register(b)) : QQWB.log.critical("flash
+ transportation object
+ error" + QQWBFlashTransportName)
+ },
+ abort: function() {
+ b && b(0, 1)
+ }
+ }
+ },
+ _apiAjax: function(a, b, c, d) {
+ var
+ e = {
+ type: d.toUpperCase(),
+ url: QQWB._domain.api + a,
+ data: QQWB.queryString.encode(b),
+ dataType: c
+ };
+ return
+ e.type == "GET" && (e.url += e.data ? "?" + e.data : "", delete
+ e.data), QQWB.io.ajax(e)
+ },
+ _apiFlashAjax: function(a, b, c, d) {
+ var
+ e = {
+ type: d.toUpperCase(),
+ url: QQWB._domain.api + a,
+ data: QQWB.queryString.encode(b),
+ dataType: c
+ };
+ return
+ e.type == "GET" && (e.url += e.data ? "?" + e.data : "", delete
+ e.data), QQWB.io.flashAjax(e)
+ },
+ _apiResponder: function(a) {
+ return
+
+ function(b, c, d, e, f, g, h) {
+ var
+ i, j;
+ b !== 200 ? (b = 2e6 + Math.abs(b ? b : 0), a.reject(b, c, d, "")) : typeof(i = QQWB._apiProvider._apiParseRetCode(f)) == "number" && 0 !== i ? (j = QQWB._apiProvider._apiParseErrorCode(f), b = 1e6 + i * 1e3 + 500 + (j ? j : 0), a.reject(b, QQWB._apiProvider._apiGetErrorMessage(i, j), d, f)) : a.resolve(b, c, d, e, g, h)
+ }
+ },
+ _ajaxResponder: function(a) {
+ return
+
+ function(b, c, d, e, f, g, h) {
+ b !== 200 ? a.reject(b, c, d, "") : a.resolve(e, d, f)
+ }
+ },
+ flashAjax: function(a) {
+ var
+ b = QQWB.deferred.deferred(),
+ c = {
+ type: "get",
+ dataType: "json"
+ };
+ return
+ QQWB.extend(c, a, !0), QQWB.io._IOFlash(c).send(QQWB.io._apiResponder(b)), b.promise()
+ },
+ ajax: function(a) {
+ var
+ b = QQWB.deferred.deferred(),
+ c = {
+ type: "get",
+ dataType: "json"
+ };
+ return
+ QQWB.extend(c, a, !0), QQWB.io._IOAjax(c).send(QQWB.io._apiResponder(b)), b.promise()
+ },
+ ajax2: function(a) {
+ var
+ b = QQWB.deferred.deferred(),
+ c = {
+ type: "get",
+ dataType: "json"
+ };
+ return
+ QQWB.extend(c, a, !0), QQWB.io._IOAjax(c).send(QQWB._ajaxResponder(b)), b.promise()
+ },
+ script: function(a, b) {
+ var
+ b = b || "utf-8",
+ c = QQWB.deferred.deferred();
+ return
+ QQWB.io._IOScript({
+ charset: b,
+ url: a
+ }).send(function(a, b, d) {
+ a !== 200 ? c.reject(a, b, d) : c.resolve(a, b, d)
+ }), c.promise()
+ },
+ jsonp: function(a) {
+ var
+ b = QQWB.deferred.deferred(),
+ c = "callback",
+ d = "jsonp_",
+ e = d + QQWB.uid(),
+ f = window.callbackName,
+ g, h = {
+ dataType: "text",
+ charset: "utf-8",
+ url: ""
+ };
+ return
+ QQWB.extend(h, a, !0), h.data && (h.url += "?" + h.data + "&" + c + "=" + e), window[e] = function(a) {
+ var
+ c = a;
+ h.dataType.toLowerCase() === "json" ? c = QQWB.JSON.fromString(a) : h.dataType.toLowerCase() === "xml" && (c = QQWB.XML.fromString(a)), b.resolve(c, g), window[e] = f
+ }, QQWB.io._IOScript(h).send(function(a, c, d) {
+ a !== 200 && b.reject(a, c, d), g = d
+ }), b.promise()
+ }
+}), QQWB._alias("ajax", QQWB.io.ajax2), QQWB._alias("jsonp", QQWB.io.jsonp), QQWB._alias("script", QQWB.io.script), QQWB.extend("_token", {
+ setAccessToken: function(a, b, c, d) {
+ var
+ e = this.getTokenUser(!0);
+ return
+ QQWB.cookie.set(QQWB._cookie.names.accessToken, [a, QQWB.time.now() + b * 1e3, c || e && e.name || "", d || e && e.nick || ""].join("|"), 31536e3, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ getAccessToken: function(a) {
+ var
+ b = QQWB.cookie.get(QQWB._cookie.names.accessToken);
+ if (b) {
+ b = b.split("|", 2);
+ if (a || parseInt(b[1], 10) > QQWB.time.now()) return
+ b[0]
+ }
+ },
+ getTokenUser: function(a) {
+ var
+ b = QQWB.cookie.get(QQWB._cookie.names.accessToken);
+ if (b) {
+ b = b.split("|", 4);
+ if (a || parseInt(b[1], 10) > QQWB.time.now()) return {
+ name: b[2],
+ nick: b[3]
+ }
+ }
+ },
+ clearAccessToken: function() {
+ return
+ QQWB.cookie.del(QQWB._cookie.names.accessToken, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ setRefreshToken: function(a) {
+ return
+ QQWB.cookie.set(QQWB._cookie.names.refreshToken, a, 31536e3, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ getRefreshToken: function() {
+ return
+ QQWB.cookie.get(QQWB._cookie.names.refreshToken)
+ },
+ clearRefreshToken: function() {
+ return
+ QQWB.cookie.del(QQWB._cookie.names.refreshToken, QQWB._cookie.path, QQWB._cookie.domain), QQWB
+ },
+ exchangeForToken: function(a) {
+ return
+ QQWB.io.jsonp({
+ url: QQWB._domain.exchange,
+ data: QQWB.queryString.encode({
+ response_type: "token",
+ client_id: QQWB.appkey.value,
+ scope: "all",
+ state: "1",
+ refresh_token: this.getRefreshToken(),
+ access_token: this.getAccessToken(!0)
+ })
+ }).success(function(a) {
+ var
+ b = a;
+ QQWB.String.isString(a) && (a = QQWB.queryString.decode(a)), a.access_token ? (!a.expires_in && QQWB.log.error("token
+ expires_in not
+ retrieved"), !a.wb_name && QQWB.log.warning("weibo
+ username not retrieved, will not update
+ username"), !a.wb_nick && QQWB.log.warning("weibo usernick
+ not retrieved, will not update
+ usernick"), QQWB._token.setAccessToken(a.access_token, parseInt(a.expires_in, 10), a.wb_name, a.wb_nick), a.refresh_token ? QQWB._token.setRefreshToken(a.refresh_token) : QQWB.log.error("refresh
+ token not retrieved"), QQWB.log.info("exchange token
+ succeed")) : a.error ? QQWB.log.error("exchange token error
+ " + a.error) : QQWB.log.error("unexpected result returned
+ from server " + b + " while exchanging for new access
+ token")
+ }).error(function(a, b) {
+ a === 404 ? QQWB.log.error("exchange
+ token has failed, script not
+ found") : QQWB.log.error("exchange token has failed,
+ " + b)
+ }).complete(function(b, c, d) {
+ a && a.apply(QQWB, [b, c, d])
+ }), QQWB
+ },
+ getNewAccessToken: function(a) {
+ return
+ QQWB.io.jsonp({
+ url: QQWB._domain.query,
+ data: QQWB.queryString.encode({
+ response_type: "token",
+ client_id: QQWB.appkey.value,
+ scope: "all",
+ state: "1"
+ })
+ }).success(function(a) {
+ var
+ b = a;
+ QQWB.String.isString(a) && (a = QQWB.queryString.decode(a)), a.access_token ? (!a.expires_in && QQWB.log.error("token
+ expires_in not
+ retrieved"), !a.wb_name && QQWB.log.warning("weibo
+ username not
+ retrieved"), !a.wb_nick && QQWB.log.warning("weibo
+ usernick not
+ retrieved"), QQWB._token.setAccessToken(a.access_token, parseInt(a.expires_in, 10), a.wb_name, a.wb_nick), a.refresh_token ? QQWB._token.setRefreshToken(a.refresh_token) : QQWB.log.error("refresh
+ token not retrieved"), QQWB.log.info("retrieve new
+ access token
+ succeed")) : a.error ? QQWB.log.error("retrieve new access
+ token error " + a.error) : QQWB.log.error("unexpected
+ result returned from server " + b + " while retrieving new
+ access
+ token")
+ }).error(function(a, b) {
+ a === 404 ? QQWB.log.error("get
+ token has failed, script not
+ found") : QQWB.log.error("get token failed,
+ " + b)
+ }).complete(function(b, c, d) {
+ a && a.apply(QQWB, [b, c, d])
+ }), QQWB
+ },
+ resolveResponse: function(a, b) {
+ var
+ c, d = (b || window).QQWB,
+ e = QQWB.String.isString(a) ? d.queryString.decode(a) : a;
+ e.access_token ? (d._token.setAccessToken(e.access_token, parseInt(e.expires_in, 10), e.wb_name, e.wb_nick), e.refresh_token ? d._token.setRefreshToken(e.refresh_token) : d.log.error("refresh
+ token not
+ retrieved"), c = d.loginStatus(), d.log.info("user
+ " + c.name + " logged
+ in"), d.trigger(d.events.USER_LOGGEDIN_EVENT, c)) : e.error ? (d.log.error("login
+ error occurred
+ " + e.error), e.message = e.error, d.trigger(d.events.USER_LOGIN_FAILED_EVENT, e)) : (d.log.error("unexpected
+ result returned from server
+ " + a), e.message = e.error = "server
+ error", d.trigger(d.events.USER_LOGIN_FAILED_EVENT, e))
+ }
+}), QQWB.extend("_eventProvider", {
+ _getEventsMap: function() {
+ return
+ this._eventsMap || (this._eventsMap = {}), this._eventsMap
+ },
+ bind: function(a, b) {
+ var
+ c = this._getEventsMap();
+ c[a] ? QQWB.Array.inArray(c[a], b) || c[a].push(b) : c[a] = [b]
+ },
+ unbind: function(a, b) {
+ var
+ c = this._getEventsMap()[a];
+ if (c) if (b) for (var
+ d = 0, e = c.length; d < e; d++) b === c[d] && (c[d] = null);
+ else delete
+ this._getEventsMap()[a]
+ },
+ trigger: function(a, b) {
+ var
+ c = this._getEventsMap()[a];
+ if (c) for (var
+ d = 0, e = c.length; d < e; d++) {
+ var
+ f = c[d];
+ f && f.call(QQWB, b)
+ }
+ }
+}), QQWB.extend("", {
+ bind: function(a, b) {
+ return
+ a = a.toLowerCase(), this._eventProvider.bind(a, b), this
+ },
+ once: function(a, b) {
+ a = a.toLowerCase();
+ var
+ c = function() {
+ var
+ d = QQWB.Array.fromArguments(arguments);
+ b.apply(QQWB, d), this._eventProvider.unbind(a, c), c = null
+ };
+ return
+ this._eventProvider.bind(a, c), this
+ },
+ unbind: function(a, b) {
+ return
+ a = a.toLowerCase(), this._eventProvider.unbind(a, b), this
+ },
+ trigger: function(a, b) {
+ return
+ a = a.toLowerCase(), this._eventProvider.trigger(a, b), this
+ }
+}), QQWB.extend("events", {
+ USER_LOGGEDIN_EVENT: "UserLoggedIn",
+ USER_LOGIN_FAILED_EVENT: "UserLoginFailed",
+ USER_LOGGEDOUT_EVENT: "UserLoggedOut",
+ TOKEN_READY_EVENT: "tokenReady",
+ DOCUMENT_READY_EVENT: "documentReady",
+ EVERYTHING_READY_EVENT: "everythingReady"
+}), function() {
+ function
+ j(a) {
+ a = a.toLowerCase();
+ var
+ b = e.exec(a) || d.exec(a) || c.exec(a) || a.indexOf("compatible") < 0 && f.exec(a) || [];
+ return {
+ browser: b[1] || "unknown",
+ version: b[2] || "0"
+ }
+ }
+
+ function
+ k() {
+ for (var a in i) i.hasOwnProperty(a) && i[a]() && (g[a] = !0)
+ }
+
+ function
+ l() {
+ var
+ a = navigator.userAgent || navigator.vendor || window.opera;
+ return /android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge
+ |maemo|midp|mmp|opera m(ob|in)i|palm(
+ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows
+ (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a
+ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r
+ |s
+ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1
+ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(
+ i|ip)|hs\-c|ht(c(\-|
+ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(
+ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(
+ |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg(
+ g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|
+ |o|v)|zz)|mt(50|p1|v
+ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v
+ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|
+ )|webc|whit|wi(g
+ |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) ? {
+ mobile: !0
+ } : {
+ pc: !0
+ }
+ }
+
+ function
+ m() {
+ var a = navigator.appVersion,
+ b = {},
+ c = "unknown";
+ return
+ a.indexOf("Win") != -1 && (c = "windows"), a.indexOf("Mac") != -1 && (c = "mac"), a.indexOf("X11") != -1 && (c = "unix"), a.indexOf("Linux") != -1 && (c = "linux"), b[c] = !0, b
+ }
+ var
+ a, b = navigator.userAgent,
+ c = /(msie)
+ ([\w.]+)/,
+ d = /(opera)(?:.*version)?[
+ \/]([\w.]+)/,
+ e = /(webkit)[
+ \/]([\w.]+)/,
+ f = /(mozilla)(?:.*?
+ rv:([\w.]+))?/,
+ g = {},
+ h = ["Webkit", "Moz", "O", "ms", "khtml"],
+ i = {
+ cookie: function() {
+ var
+ a = navigator.cookieEnabled;
+ if (a && QQWB.browser.webkit) {
+ var
+ b = "COOKIE_TEST_" + QQWB.uid();
+ document.cookie = b + "=" + 1 + ";
+ domain=;
+ path=;", document.cookie.indexOf(b) < 0 ? a = !1 : document.cookie = b + "=" + ";
+ expires=" + (new Date(1970, 1, 1)).toUTCString() + ";
+ domain=; path=;"
+ }
+ return !a && QQWB.log.critical("Your
+ browser doesn't support cookie or cookie isn't
+ enabled"), a
+ },
+ flash: function() {
+ if (typeof
+ navigator.plugins != "undefined" && typeof
+ navigator.plugins["Shockwave Flash"] == "object") {
+ var
+ a = navigator.plugins["Shockwave
+ Flash"].description,
+ b = typeof
+ navigator.mimeTypes != "undefined" && navigator.mimeTypes["application/x-shockwave-flash"] && navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
+ return
+ a && b
+ }
+ if (typeof
+ window.ActiveXObject != "undefined") try {
+ var c = new
+ ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ if (c) return
+ c.getVariable("$version")
+ } catch (d) {}
+ },
+ userdata: function() {
+ return
+ QQWB.browser.msie
+ },
+ postmessage: function() {
+ return !!window.postMessage && (QQWB.browser.msie && parseInt(QQWB.browser.version, 10) < 8 ? !1 : !0)
+ },
+ canvas: function() {
+ var
+ a = document.createElement("canvas");
+ return !!a.getContext && !! a.getContext("2d")
+ },
+ webgl: function() {
+ return !!window.WebGLRenderingContext
+ },
+ geolocation: function() {
+ return !!navigator.geolocation
+ },
+ websqldatabase: function() {
+ return !!window.openDatabase
+ },
+ indexeddb: function() {
+ for (var
+ a = 0, b = h.length; a < b; a++) if (window[h[a].toLowerCase() + "IndexedDB"]) return !0;
+ return !!window.indexedDB
+ },
+ websocket: function() {
+ for (var
+ a = 0, b = h.length; a < b; a++) if (window[h[a].toLowerCase() + "WebSocket"]) return !0;
+ return !!window.WebSocket
+ },
+ localstorage: function() {
+ return
+ window.localStorage && localStorage.getItem
+ },
+ sessionstorage: function() {
+ return
+ window.sessionStorage && sessionStorage.getItem
+ },
+ webworker: function() {
+ return !!window.Worker
+ },
+ applicationcache: function() {
+ return !!window.applicationCache
+ }
+ };
+ a = j(b), QQWB.extend("browser", {
+ version: a.version
+ }), QQWB.browser[a.browser] = !0, k(), QQWB.extend("browser.feature", g), QQWB.extend("browser.platform", l()), QQWB.extend("browser.os", m())
+}(), QQWB.extend("flash", {
+ NO_CACHE: 1,
+ load: function(a, b, c) {
+ this.loadedSwfs || (this.loadedSwfs = []);
+ if (QQWB.Array.inArray(this.loadedSwfs, a)) {
+ QQWB.log.warning(a + "is
+ already
+ loaded");
+ return
+ }
+ c === this.NO_CACHE && (a += "?" + QQWB.uid());
+ var
+ d = "movieContainer_" + QQWB.uid(),
+ e = "movie_" + QQWB.uid(),
+ f = "onFlashReady_a1f5b4ce",
+ g = window[f];
+ return
+ window[f] = function() {
+ b && b(e), window[f] = g, g = null, b && (b = null), e = null
+ }, QQWB.dom.appendHidden([""].join("
+ "), {
+ id: d
+ }, !0), document.getElementById(d)
+ },
+ getSWFObjectByName: function(a) {
+ return
+ QQWB.browser.msie ? window[a] : document[a].length ? document[a][1] : document[a]
+ }
+}), QQWB.extend("_solution", {
+ HTML5_SOLUTION: "html5",
+ FLASH_SOLUTION: "flash",
+ SILVER_LIGHT_SOLUTION: "silverlight",
+ initSolution: function(a) {
+ var
+ b, c = QQWB.deferred.deferred();
+ !this[a] && QQWB.Array.inArray([this.HTML5_SOLUTION, this.FLASH_SOLUTION, this.SILVER_LIGHT_SOLUTION], a) && (this[a] = {}, this[a].name = a, this[a].readyState = 0, this[a].id = "solution_" + QQWB.uid(), this[a].deferred = QQWB.deferred.deferred(), this[a].promise = this[a].deferred.promise());
+ if (this[a] && this[a].readyState !== 0) this[a].deferred.success(function() {
+ c.resolve(QQWB.Array.fromArguments(arguments))
+ }).fail(function() {
+ c.reject(QQWB.Array.fromArguments(arguments))
+ });
+ else switch (a) {
+ case
+ this.HTML5_SOLUTION:
+ if (QQWB.browser.feature.postmessage) {
+ b = this[this.HTML5_SOLUTION];
+ var
+ d = function(a) {
+ QQWB._domain.serverproxy.indexOf(a.origin) !== 0 ? QQWB.log.warning("unexpected
+ message arrived from " + a.origin + " with data
+ " + a.data) : (a.data === "success" ? (QQWB.log.info("html5
+ solution was successfully
+ initialized"), b.readyState = 1, b.deferred.resolve()) : QQWB.log.info("unexpected
+ solution signal
+ " + a.data), window.addEventListener ? window.removeEventListener("message", d, !1) : window.attachEvent && window.detachEvent("onmessage", d), d = null)
+ };
+ window.addEventListener ? window.addEventListener("message", d, !1) : window.attachEvent && window.attachEvent("onmessage", d), QQWB.everythingReady(function() {
+ QQWB.log.info("init
+ html5
+ solution..."), serverframe = QQWB.dom.createHidden("iframe", {
+ id: b.id,
+ src: QQWB._domain.serverproxy
+ }), QQWB.dom.append(serverframe), serverframe.onload = function(a) {
+ setTimeout(function() {
+ b.readyState !== 1 && (QQWB.log.error("html5
+ solution initialition has failed, server proxy frame
+ encountered
+ error"), b.readyState = 2, b.deferred.reject(-1, "server
+ proxy frame not working"))
+ }, 1e3)
+ }
+ })
+ } else QQWB.log.error("can't init solution
+ \"" + a) + "\",browser doesn't support
+ postmessage", c.reject("browser not
+ supported");
+ break;
+ case
+ this.FLASH_SOLUTION:
+ QQWB.browser.feature.flash ? (b = this[this.FLASH_SOLUTION], QQWB.everythingReady(function() {
+ QQWB.log.info("init
+ flash solution...");
+ var
+ a, c = 1e4,
+ d = QQWB.flash.load(QQWB._domain.flashproxy, function(c) {
+ QQWB.log.info("flash
+ solution initlized
+ successfully"), b.readyState = 1, window.QQWBFlashTransport = QQWB.flash.getSWFObjectByName(c), a && clearTimeout(a), b.deferred.resolve()
+ }, QQWB.flash.NO_CACHE);
+ a = setTimeout(function() {
+ b.deferred.isResolved() || (b.readyState = 2, b.deferred.reject(-1, "encounter
+ error while loading proxy swf, need newer flash
+ player"), QQWB.dom.remove(d))
+ }, c)
+ })) : (QQWB.log.error("can't
+ init solution \"" + a) + "\",browser doesn't support
+ flash or flash is disabled", c.reject("browser not
+ supported"));
+ break;
+ case
+ this.SILVER_LIGHT_SOLUTION:
+ QQWB.browser.feature.silverlight ? (-2, QQWB.log.error("sorry,
+ silverlight solution is not
+ implemented")) : (QQWB.log.error("can't init solution
+ \"" + a) + "\",browser doesn't support silverlight or
+ silverlight is disabled", c.reject("browser not
+ supported"));
+ break;
+ default:
+ QQWB.log.error("can't init
+ solution \"" + a) + '",not supported', c.reject("solution
+ " + a + " not supported")
+ }
+ return
+ c.promise()
+ }
+}), QQWB.extend("ping", {
+ _pingbackURL: "http://btrace.qq.com/collect",
+ _stupidPingParamsOrder: ["ftime", "sIp", "iQQ", "sBiz", "sOp", "iSta", "iTy", "iFlow"],
+ _paramSeprator: ";",
+ _getBasePingParams: function() {
+ var
+ a = QQWB.cookie.get("uin", null, "0").match(/\d+/)[0],
+ b = "";
+ return {
+ sIp: "",
+ iQQ: a,
+ sBiz: "open-js",
+ sOp: "",
+ iSta: "",
+ iTy: 1183,
+ iFlow: b,
+ iFrom: "",
+ iPubFrom: "",
+ sUrl: "",
+ iUrlType: "",
+ iPos: "",
+ sText: "",
+ iBak1: "",
+ iBak2: "",
+ sBak1: "",
+ sBak2: QQWB.uid()
+ }
+ },
+ pingWith: function(a, b) {
+ a = QQWB.extend(QQWB.ping._getBasePingParams(), a, !0), QQWBPingTransport_18035d19 = new
+ Image(1, 1), QQWBPingTransport_18035d19.src = QQWB.ping._pingbackURL + "?" + QQWB.queryString.encode(a, null, null, b)
+ },
+ pingInit: function() {
+ function
+ a() {
+ var a = 1e6;
+ return
+ feature = 0, QQWB.browser.msie ? a += 100 : QQWB.browser.opera ? a += 200 : QQWB.browser.webkit ? a += 300 : QQWB.browser.mozilla ? a += 400 : a += 500, QQWB.browser.feature.postmessage && (feature += 1), QQWB.browser.feature.flash && (feature += 2), QQWB.browser.feature.cookie && (feature += 4), a += feature, a
+ }
+
+ function
+ b() {
+ var a = 1e6;
+ return
+ QQWB.browser.platform.mobile ? a += 100 : a += 200, QQWB.browser.os.windows ? a += 10 : QQWB.browser.os.windows ? a += 20 : QQWB.browser.os.mac ? a += 30 : QQWB.browser.os.unix ? a += 40 : QQWB.browser.os.linux ? a += 50 : a += 60, a += parseInt(QQWB.appkey.version, 10), a
+ }
+ return
+ QQWB.ping.pingWith({
+ sOp: "init",
+ iFrom: QQWB.version.replace(/\./g, ""),
+ iPubFrom: b(),
+ sUrl: [document.title, document.location.href].join(QQWB.ping._paramSeprator),
+ sText: QQWB.appkey.value,
+ iBak1: a()
+ }, QQWB.ping._stupidPingParamsOrder.concat("iFrom", "iPubFrom", "sUrl", "iUrlType", "iPos", "sText", "iBak1", "iBak2", "sBak1", "sBak2"))
+ },
+ _pingAuthorize: function(a) {
+ return
+ QQWB.ping.pingWith({
+ sOp: "login",
+ iSta: a ? 1 : 0,
+ iFrom: QQWB.version.replace(/\./g, ""),
+ sUrl: document.location.href,
+ sText: QQWB.appkey.value
+ }, QQWB.ping._stupidPingParamsOrder.concat("iFrom", "iPubFrom", "sUrl", "iUrlType", "iPos", "sText", "iBak1", "iBak2", "sBak1", "sBak2"))
+ },
+ pingLoggedIn: function() {
+ return
+ QQWB.ping._pingAuthorize(!0)
+ },
+ pingLoggedInFailed: function() {
+ return
+ QQWB.ping._pingAuthorize(!1)
+ },
+ pingAPI: function(a, b, c, d, e, f, g, h) {
+ var
+ i = 1e6;
+ a = a || "", b = b || "", c = c || "", d = d || "", e = e || "-2", f = f || "", g = g || "-1", h = h || "";
+ switch (h) {
+ case
+ QQWB._solution.HTML5_SOLUTION:
+ case "postmessage":
+ i += 100;
+ break;
+ case
+ QQWB._solution.FLASH_SOLUTION:
+ i += 200;
+ break;
+ case
+ QQWB._solution.SILVER_LIGHT_SOLUTION:
+ i += 400
+ }
+ d = d.toUpperCase();
+ switch (d) {
+ case "GET":
+ i += 10;
+ break;
+ case "POST":
+ i += 20
+ }
+ return
+ QQWB.ping.pingWith({
+ sOp: "api",
+ iSta: e,
+ iFrom: QQWB.version.replace(/\./g, ""),
+ iPubFrom: i,
+ sUrl: document.location.href,
+ sText: QQWB.appkey.value,
+ iBak1: g,
+ sBak1: [a, b].join(QQWB.ping._paramSeprator)
+ }, QQWB.ping._stupidPingParamsOrder.concat("iFrom", "iPubFrom", "sUrl", "iUrlType", "iPos", "sText", "iBak1", "iBak2", "sBak1", "sBak2"))
+ }
+}), QQWB.extend("door", {
+ doors: 0,
+ door: function(a, b) {
+ var
+ c = 0;
+ return this.doors++, {
+ lock: function() {
+ return
+ c++, a && a.call(QQWB), this
+ },
+ unlock: function() {
+ return
+ c--, c = Math.max(0, c), b && b.call(QQWB), this
+ },
+ isOpen: function() {
+ return
+ c === 0
+ }
+ }
+ },
+ count: function() {
+ return
+ this.doors
+ }
+}), QQWB.extend("", {
+ init: function(a) {
+ if (this._inited === !0) return
+ this.log.warning("already
+ initialized"), this;
+ this.log.info("init signal has
+ arrived"), a = QQWB.extend({
+ callbackurl: document.location.href.replace(location.search, "").replace(location.hash, ""),
+ pingback: !0,
+ synclogin: !0
+ }, a, !0), QQWB.pingback = a.pingback;
+ var
+ b = this._token.getAccessToken(),
+ c = this._token.getAccessToken(!0),
+ d = this._token.getRefreshToken(),
+ e = d && !b && c,
+ f = !d && !b && a.synclogin;
+ return
+ a.appkey && (this.log.info("client id is
+ " + a.appkey), this.assign("appkey.value", "APPKEY", a.appkey)), this.log.info("client
+ proxy uri is
+ " + a.callbackurl), this.assign("_domain", "CLIENTPROXY_URI", a.callbackurl), (e || f) && QQWB._tokenReadyDoor.lock(), e ? (this.log.info("exchanging
+ refresh token to access
+ token..."), QQWB._token.exchangeForToken(function(b) {
+ a.synclogin && b.error && (QQWB.log.warning("exchange
+ token has failed, trying to retrieve a new
+ access_token..."), this._tokenReadyDoor.lock(), QQWB._token.getNewAccessToken(function() {
+ this._tokenReadyDoor.unlock()
+ })), this._tokenReadyDoor.unlock()
+ })) : f && (this.log.info("retrieving
+ new access
+ token..."), QQWB._token.getNewAccessToken(function() {
+ QQWB._tokenReadyDoor.unlock()
+ })), /^[a-z\d][a-z\d]{30}[a-z\d]$/i.test(QQWB.appkey.value) ? this.assign("appkey", "APPKEY_VERSION", 1) : /^[1-9][0-9]{7}[0-9]$/.test(QQWB.appkey.value) ? this.assign("appkey", "APPKEY_VERSION", 2) : this.assign("appkey", "APPKEY_VERSION", 3), this._inited = !0, QQWB._tokenReadyDoor.unlock(), this.pingback && this.ping && this.ping.pingInit(), this.pingback && this.ping && QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, this.ping.pingLoggedIn), this.pingback && this.ping && QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, this.ping.pingLoggedInFailed), this
+ },
+ _tokenReadyDoor: QQWB.door.door(function() {
+ this.log.info("tokenReady
+ is locked")
+ }, function() {
+ this.log.info("tokenReady is
+ unlocked"), this._tokenReadyDoor.isOpen() && this.log.info("token
+ is
+ ready") && this.trigger(this.events.TOKEN_READY_EVENT)
+ }),
+ tokenReady: function(a) {
+ return
+ this._tokenReadyDoor.isOpen() ? a && a() : this.bind(this.events.TOKEN_READY_EVENT, a), this
+ },
+ _isDocumentReady: !1,
+ _tryToTriggerDocumentReadyEvents: function() {
+ if (this._isDocumentReady) return;
+ try {
+ var
+ a = document.getElementsByTagName("body")[0].appendChild(document.createElement("span"));
+ a.parentNode.removeChild(a)
+ } catch (b) {
+ return
+ }
+ this._isDocumentReady = !0, this.log.info("document
+ is
+ ready"), this._everythingReadyDoor.unlock(), this.trigger(this.events.DOCUMENT_READY_EVENT)
+ },
+ documentReady: function(a) {
+ return
+ this._isDocumentReady ? a && a() : (this.bind(this.events.DOCUMENT_READY_EVENT, a), this._tryToTriggerDocumentReadyEvents()), this
+ },
+ _everythingReadyDoor: QQWB.door.door(function() {
+ this.log.info("everythingReady
+ is
+ locked")
+ }, function() {
+ this.log.info("everythingReady
+ is
+ unlocked"), this._everythingReadyDoor.isOpen() && this.log.info("everything
+ is
+ ready") && this.trigger(this.events.EVERYTHING_READY_EVENT)
+ }),
+ everythingReady: function(a) {
+ return
+ this._everythingReadyDoor.isOpen() ? a && a() : this.bind(this.events.EVERYTHING_READY_EVENT, a), this
+ }
+}), T.alias("ready", "everythingReady"), function() {
+ function
+ c() {
+ QQWB.browser.feature.postmessage ? QQWB._solution.initSolution(QQWB._solution.HTML5_SOLUTION) : QQWB.browser.feature.flash ? QQWB._solution.initSolution(QQWB._solution.FLASH_SOLUTION) : QQWB.log.error("init
+ solution is called, but no solution for the
+ browser")
+ }
+ var
+ a = window != window.parent,
+ b = QQWB._domain.serverproxy === window.location.href;
+ QQWB._tokenReadyDoor.lock(), QQWB._everythingReadyDoor.lock(), QQWB._everythingReadyDoor.lock(), QQWB.bind(QQWB.events.TOKEN_READY_EVENT, function() {
+ QQWB._everythingReadyDoor.unlock()
+ });
+ if (a && b && QQWB.browser.feature.postmessage) {
+ QQWB.log.info("library
+ booting at server proxy mode");
+ var
+ d = "*",
+ e = window.parent;
+ e.postMessage("success", d);
+ var
+ f = function(a) {
+ var
+ b = QQWB.JSON.fromString(a.data),
+ c = b.id,
+ f = b.data,
+ g = f[0];
+ f[2].toLowerCase() == "xml" && (f[2] = "xmltext"), g ? QQWB.io._apiAjax.apply(this, f).complete(function() {
+ e.postMessage(QQWB.JSON.stringify({
+ id: c,
+ data: QQWB.Array.fromArguments(arguments)
+ }), d)
+ }) : (e.postMessage(QQWB.JSON.stringify({
+ id: c,
+ data: [-1, "interface
+ can not be empty"]
+ }), d), QQWB.log.error("interface is
+ empty"))
+ };
+ window.addEventListener ? window.addEventListener("message", f, !1) : window.attachEvent && window.attachEvent("onmessage", f);
+ return
+ }
+ QQWB.log.info("library
+ booting at normal
+ mode"), c()
+}(), QQWB._isDocumentReady || (window.addEventListener && document.addEventListener("DOMContentLoaded", function() {
+ QQWB._tryToTriggerDocumentReadyEvents()
+}, !1), window.attachEvent && (document.attachEvent("onreadystatechange", function() {
+ /complete/.test(document.readyState) && (document.detachEvent("onreadystatechange", arguments.callee), QQWB._tryToTriggerDocumentReadyEvents())
+}), window === window.top &&
+function() {
+ if (QQWB._isDocumentReady) return;
+ try {
+ document.documentElement.doScroll("left")
+ } catch (a) {
+ setTimeout(arguments.callee, 0);
+ return
+ }
+ QQWB._tryToTriggerDocumentReadyEvents()
+}()), QQWB.browser.webkit &&
+function() {
+ if (QQWB._isDocumentReady) return;
+ if (!/load|complete/.test(document.readyState)) {
+ setTimeout(arguments.callee, 0);
+ return
+ }
+ QQWB._tryToTriggerDocumentReadyEvents()
+}()), function() {
+ function
+ b() {
+ var
+ c = !! QQWB._token.getAccessToken(),
+ d;
+ a && QQWB.log.info("cancel
+ the **OLD** maintain token
+ schedule"), a && clearTimeout(a), c ? (d = parseInt(QQWB.cookie.get(QQWB._cookie.names.accessToken).split("|")[1], 10) - QQWB.time.now() - 15e3, QQWB.log.info("scheduled
+ to exchange token after
+ " + d + "ms"), a = setTimeout(function() {
+ QQWB._token.exchangeForToken(function() {
+ b()
+ })
+ }, d)) : (a && QQWB.log.info("cancel
+ the exchange token schedule"), a && clearTimeout(a))
+ }
+ var
+ a;
+ QQWB.bind(QQWB.events.TOKEN_READY_EVENT, b), QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, b), QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, b), QQWB.bind(QQWB.events.USER_LOGGEDOUT_EVENT, b)
+}();
+if (QQWB.browser.feature.localstorage) QQWB.extend("localStorage", {
+ set: function(a, b, c) {
+ a = "k" + a;
+ var
+ d = QQWB.time.secondsNow() + (c || 7) * 24 * 3600,
+ e = {
+ value: b,
+ expire: d
+ };
+ return
+ localStorage[a] = JSON.stringify(e), localStorage[a]
+ },
+ get: function(a, b) {
+ a = "k" + a;
+ var
+ c = localStorage[a];
+ return
+ c && (c = JSON.parse(c)) && c.value && QQWB.time.secondsNow() < c.expire ? c.value : b
+ },
+ del: function(a) {
+ return
+ a = "k" + a, localStorage.removeItem(a), !localStorage[a]
+ }
+});
+else if (QQWB.browser.feature.userdata) {
+ var
+ userData, storeName = "QQWBLocalStore";
+ QQWB.documentReady(function() {
+ userData = document.createElement("input"), userData.type = "hidden", userData.style.display = "none", userData.addBehavior("#default#userData"), userData.expires = (new
+ Date(QQWB.time.now() + 31536e7)).toUTCString(), document.body.appendChild(userData)
+ }), QQWB.extend("localStorage", {
+ set: function(a, b, c) {
+ a = "k" + a;
+ var
+ d = QQWB.time.secondsNow() + (c || 7) * 24 * 3600,
+ e = {
+ value: b,
+ expire: d
+ };
+ return !userData && QQWB.log.error("store
+ can't set value for key " + a + ", userData is
+ unavaiable, please try
+ later"), userData && userData.load(storeName), userData && userData.setAttribute(a, JSON.stringify(e)), userData && userData.save(storeName), userData.getAttribute(a)
+ },
+ get: function(a, b) {
+ a = "k" + a, !userData && QQWB.log.error("store
+ can't get value for key " + a + ", userData is
+ unavaiable, please try
+ later"), userData && userData.load(storeName);
+ var
+ c = userData && userData.getAttribute(a);
+ return
+ c && (c = JSON.parse(c)) && c.value && QQWB.time.secondsNow() < c.expire ? c.value : b
+ },
+ del: function(a) {
+ return
+ a = "k" + a, !userData && QQWB.log.error("store can't
+ delete value for key " + a + ", userData is unavaiable,
+ please try
+ later"), userData && userData.load(storeName), userData && userData.removeAttribute(a), userData && userData.save(storeName), !userData.getAttribute(a)
+ }
+ })
+} else QQWB.log.warning("T.localStorage object isn't
+ initialized, do check before
+ use");
+QQWB.localStorage && (QQWB._alias.call(QQWB.localStorage, "save", QQWB.localStorage.set), QQWB._alias.call(QQWB.localStorage, "remove", QQWB.localStorage.del)), QQWB.extend("auth.authWindow", {
+ _width: QQWB._const.AUTH_WINDOW_WIDTH,
+ _height: QQWB._const.AUTH_WINDOW_HEIGHT,
+ _name: QQWB._const.AUTH_WINDOW_NAME,
+ _url: QQWB._domain.auth,
+ _attribs: "toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=yes,status=no",
+ _authorizing: !1,
+ _window: null,
+ show: function() {
+ var
+ a, b, c, d;
+ return
+ this._authorizing ? this.focus() : (a = (window.screenX || window.screenLeft) + ((window.outerWidth || document.documentElement.clientWidth) - this._width) / 2, b = (window.screenY || window.screenTop) + ((window.outerHeight || document.documentElement.clientHeight) - this._height) / 2, c = QQWB.queryString.encode({
+ response_type: "token",
+ client_id: QQWB.appkey.value,
+ redirect_uri: QQWB._domain.clientproxy,
+ scope: "all",
+ status: 0
+ }), d = ["width=" + this._width, "height=" + this._height, "left=" + a, "top=" + b], this._window = window.open(this._url + "?" + c, this._name, d + "," + this._attribs), this._authorizing = !0, function() {
+ var
+ a = QQWB.auth.authWindow,
+ b;
+ if (a._window.closed) {
+ QQWB._token.resolveResponse("error=access_denied"), a.close();
+ return
+ }
+ try {
+ b = a._window.location.hash
+ } catch (c) {
+ b = null
+ }
+ if (b) {
+ b = QQWB.queryString.decode(b.split("#").pop()), parseInt(b.status, 10) == 200 && QQWB._token.resolveResponse(b), a.close();
+ return
+ }
+ setTimeout(arguments.callee, 0)
+ }()), this
+ },
+ close: function() {
+ return
+ this._authorizing = !1, this._window ? this._window.closed ? this : (this._window.close(), this) : this
+ },
+ focus: function() {
+ return
+ this._window && this._window.focus(), this
+ }
+}), QQWB.extend("auth", {
+ login: function(a, b) {
+ QQWB._inited || QQWB.log.critical("Library
+ not initialized, call T.init() to initialize");
+ var
+ c = QQWB.loginStatus(),
+ d;
+ if (c && a) {
+ a(c);
+ return
+ }
+ if (a || b) d = function(c) {
+ c.access_token && a ? a(c) : c.error && b ? b(c) : QQWB.log.warning("confused
+ result of
+ T.login"), QQWB.unbind(QQWB.events.USER_LOGGEDIN_EVENT, d), QQWB.unbind(QQWB.events.USER_LOGIN_FAILED_EVENT, d), d = null
+ }, QQWB.bind(QQWB.events.USER_LOGGEDIN_EVENT, d), QQWB.bind(QQWB.events.USER_LOGIN_FAILED_EVENT, d);
+ return
+ QQWB.auth.authWindow.show().focus(), QQWB
+ },
+ logout: function(a) {
+ var
+ b = QQWB.loginStatus();
+ return QQWB.log.info("logging
+ out
+ user..."), b ? (QQWB._token.clearAccessToken(), QQWB._token.clearRefreshToken(), QQWB.log.info(b.name + "
+ has logged out
+ successfully")) : QQWB.log.warning("oops, user not
+ logged
+ in"), a && a.call(QQWB), QQWB.trigger(QQWB.events.USER_LOGGEDOUT_EVENT), QQWB
+ },
+ loginStatus: function(a) {
+ var
+ b, c = QQWB._token.getAccessToken(),
+ d = QQWB._token.getTokenUser();
+ return
+ c && (b = {
+ access_token: c,
+ name: d.name,
+ nick: d.nick
+ }), a && a.call(QQWB, b), b
+ }
+}), QQWB._alias("login", QQWB.auth.login), QQWB._alias("logout", QQWB.auth.logout), QQWB._alias("loginStatus", QQWB.auth.loginStatus), QQWB.provide("api", function(a, b, c, d, e) {
+ a = this._apiProvider.compat(a), b = b || {}, c = (c || "json").toLowerCase(), d = d || "GET";
+ var
+ f, g, h = c,
+ i = {
+ json: !0,
+ xml: !0
+ },
+ j = QQWB.deferred.deferred();
+ h in i || (h = "json"), b.oauth_consumer_key = QQWB.appkey.value, b.oauth_token = QQWB._token.getAccessToken(), b.oauth_version = "2.0", b.format = h, f = j.promise(), e && QQWB.Array.inArray([QQWB._solution.HTML5_SOLUTION, QQWB._solution.FLASH_SOLUTION, QQWB._solution.SILVER_LIGHT_SOLUTION], e) ? (QQWB.log.warning("forced
+ to use solution
+ " + e), QQWB._solution[e] || (QQWB.log.warning("forced
+ to use solution " + e + ", this solution is not inited,
+ initialzing..."), QQWB._solution.initSolution[e]), g = QQWB._solution[e]) : g = QQWB.browser.feature.postmessage && QQWB._solution[QQWB._solution.HTML5_SOLUTION] || QQWB.browser.feature.flash && QQWB._solution[QQWB._solution.FLASH_SOLUTION] || QQWB.browser.feature.silverlight && QQWB._solution[QQWB._solution.SILVER_LIGHT_SOLUTION];
+ if (!g || g.readyState === 2) return
+ QQWB.log.critical("solution
+ error"), j.reject(-1, "solution
+ error", 0), f;
+ if (g.readyState === 0) return
+ QQWB.log.warning("solution is not ready, your api
+ call request has been cached, will invoke
+ immediately when solution is
+ ready"), g.promise.done(function() {
+ QQWB.log.info('invoking
+ cached api call "QQWB.api( ' + [a, b, c, d].join(",") + '
+ )"...'), QQWB.api(a, b, c, d).success(function() {
+ j.resolveWith(j, QQWB.Array.fromArguments(arguments))
+ }).error(function() {
+ j.rejectWith(j, QQWB.Array.fromArguments(arguments))
+ })
+ }).fail(function() {
+ QQWB.log.error("can't
+ invoking cached api call \"QQWB.api(
+ " + [a, b, c, d].join(",") + '
+ )"'), j.rejectWith(j, QQWB.Array.fromArguments(arguments))
+ }), f;
+ QQWB.api.id || QQWB.extend(QQWB.api, {
+ id: 0,
+ total: function() {
+ return
+ QQWB.api.id
+ }
+ }), QQWB.api.id++, QQWB.log.info("[" + QQWB.api.id + ']
+ requesting data "' + QQWB._apiProvider.describe(a) + '"
+ from
+ server...');
+ if (g === QQWB._solution[QQWB._solution.HTML5_SOLUTION]) {
+ var
+ k = document.getElementById(g.id);
+ if (!k) QQWB.log.critical("server
+ proxy not found"), j.reject(-1, "server proxy not
+ found", 0);
+ else if (k.src !== QQWB._domain.serverproxy) QQWB.log.critical("server
+ proxy is not valid, src attribute has unexpected
+ value"), j.reject(-1, "server proxy not
+ valid", 0);
+ else {
+ QQWB.api._deferredCollection || QQWB.extend(QQWB.api, {
+ _deferredCollection: {},
+ deferredAt: function(a) {
+ if (this._deferredCollection[a]) return
+ this._deferredCollection[a];
+ QQWB.log.warning("get
+ deferred object has failed, that object does not
+ exist at index
+ " + a)
+ },
+ uncollect: function(a) {
+ this._deferredCollection[a] ? delete
+ this._deferredCollection[a] : QQWB.log.warning("uncollect
+ deferred object has failed, that object does not
+ exist at index
+ " + a)
+ },
+ collect: function(a) {
+ if (a.promise) return
+ this._deferredCollection[this.id] = a, this.id;
+ QQWB.log.warning("collect
+ a non-deferred object is
+ illegal")
+ }
+ }), QQWB.api.messageHandler || (QQWB.provide("api.messageHandler", function(a) {
+ if (QQWB._domain.serverproxy.indexOf(a.origin) !== 0) QQWB.log.warning("unexpected
+ message arrived from " + a.origin + " with data
+ " + a.data);
+ else {
+ var
+ b = QQWB.JSON.fromString(a.data),
+ c = b.id,
+ d = QQWB.api.deferredAt(c),
+ e = b.data;
+ d ? (e[0] !== 200 ? d.reject.apply(d, e) : (e[5] == "xmltext" && (e[3] = QQWB.XML.fromString(e[3])), d.resolve(e[3], e[2], e[4])), QQWB.api.uncollect(c)) : QQWB.log.warning("related
+ deferred object not found, it shouldn't
+ happen")
+ }
+ }), window.addEventListener ? window.addEventListener("message", QQWB.api.messageHandler, !1) : window.attachEvent && window.attachEvent("onmessage", QQWB.api.messageHandler));
+ try {
+ var
+ l = QQWB.api.collect(j);
+ setTimeout(function() {
+ k.contentWindow.postMessage(QQWB.JSON.stringify({
+ id: l,
+ data: [a, b, c, d]
+ }), QQWB._domain.serverproxy)
+ }, 0)
+ } catch (m) {
+ QQWB.log.critical("post
+ message to server proxy has failed,
+ " + m), j.reject(-1, m, 0)
+ }
+ }
+ } else g === QQWB._solution[QQWB._solution.FLASH_SOLUTION] && QQWB.io._apiFlashAjax(a, b, c, d).complete(function() {
+ var
+ a = QQWB.Array.fromArguments(arguments);
+ a[0] !== 200 ? j.reject.apply(j, a) : j.resolve(a[3], a[2], a[4])
+ });
+ return
+
+ function() {
+ var
+ e = QQWB.api.id;
+ f.complete(function() {
+ QQWB.log.info("*[" + e + "]
+ done"), e = null
+ });
+ if (QQWB.pingback && QQWB.ping) {
+ function
+ h(e, f, h) {
+ QQWB.ping.pingAPI(a, QQWB.queryString.encode(b), c, d, e, f, h, g.name)
+ }
+ f.success(function(a, b) {
+ h(200, "ok", b)
+ }), f.fail(function(a, b, c) {
+ h(a, b, c)
+ })
+ }
+ }(), f
+})
+/*
+ |xGv00|6d5d6ce9717937b567ca32a7f3d7c7d0 */
+
diff --git a/tests/js2.expected.js b/tests/js2.expected.js
new file mode 100644
index 0000000..80e3413
--- /dev/null
+++ b/tests/js2.expected.js
@@ -0,0 +1,3657 @@
+/*! jQuery v1.7.2 jquery.com | jquery.org/license */
+(function (a, b) {
+ function cy(a) {
+ return f.isWindow(a) ? a : a.nodeType === 9 ? a.defaultView || a.parentWindow : !1
+ }
+ function cu(a) {
+ if (!cj[a]) {
+ var b = c.body,
+ d = f("<" + a + ">").appendTo(b),
+ e = d.css("display");
+ d.remove();
+ if (e === "none" || e === "") {
+ ck || (ck = c.createElement("iframe"), ck.frameBorder = ck.width = ck.height = 0), b.appendChild(ck);
+ if (!cl || !ck.createElement) cl = (ck.contentWindow || ck.contentDocument).document, cl.write((f.support.boxModel ? "" : "") + ""), cl.close();
+ d = cl.createElement(a), cl.body.appendChild(d), e = f.css(d, "display"), b.removeChild(ck)
+ }
+ cj[a] = e
+ }
+ return cj[a]
+ }
+ function ct(a, b) {
+ var c = {};
+ f.each(cp.concat.apply([], cp.slice(0, b)), function () {
+ c[this] = a
+ });
+ return c
+ }
+ function cs() {
+ cq = b
+ }
+ function cr() {
+ setTimeout(cs, 0);
+ return cq = f.now()
+ }
+ function ci() {
+ try {
+ return new a.ActiveXObject("Microsoft.XMLHTTP")
+ } catch (b) {}
+ }
+ function ch() {
+ try {
+ return new a.XMLHttpRequest
+ } catch (b) {}
+ }
+ function cb(a, c) {
+ a.dataFilter && (c = a.dataFilter(c, a.dataType));
+ var d = a.dataTypes,
+ e = {},
+ g, h, i = d.length,
+ j, k = d[0],
+ l, m, n, o, p;
+ for (g = 1; g < i; g++) {
+ if (g === 1) for (h in a.converters) typeof h == "string" && (e[h.toLowerCase()] = a.converters[h]);
+ l = k, k = d[g];
+ if (k === "*") k = l;
+ else if (l !== "*" && l !== k) {
+ m = l + " " + k, n = e[m] || e["* " + k];
+ if (!n) {
+ p = b;
+ for (o in e) {
+ j = o.split(" ");
+ if (j[0] === l || j[0] === "*") {
+ p = e[j[1] + " " + k];
+ if (p) {
+ o = e[o], o === !0 ? n = p : p === !0 && (n = o);
+ break
+ }
+ }
+ }
+ }!n && !p && f.error("No conversion from " + m.replace(" ", " to ")), n !== !0 && (c = n ? n(c) : p(o(c)))
+ }
+ }
+ return c
+ }
+ function ca(a, c, d) {
+ var e = a.contents,
+ f = a.dataTypes,
+ g = a.responseFields,
+ h, i, j, k;
+ for (i in g) i in d && (c[g[i]] = d[i]);
+ while (f[0] === "*") f.shift(), h === b && (h = a.mimeType || c.getResponseHeader("content-type"));
+ if (h) for (i in e) if (e[i] && e[i].test(h)) {
+ f.unshift(i);
+ break
+ }
+ if (f[0] in d) j = f[0];
+ else {
+ for (i in d) {
+ if (!f[0] || a.converters[i + " " + f[0]]) {
+ j = i;
+ break
+ }
+ k || (k = i)
+ }
+ j = j || k
+ }
+ if (j) {
+ j !== f[0] && f.unshift(j);
+ return d[j]
+ }
+ }
+ function b_(a, b, c, d) {
+ if (f.isArray(b)) f.each(b, function (b, e) {
+ c || bD.test(a) ? d(a, e) : b_(a + "[" + (typeof e == "object" ? b : "") + "]", e, c, d)
+ });
+ else if (!c && f.type(b) === "object") for (var e in b) b_(a + "[" + e + "]", b[e], c, d);
+ else d(a, b)
+ }
+ function b$(a, c) {
+ var d, e, g = f.ajaxSettings.flatOptions || {};
+ for (d in c) c[d] !== b && ((g[d] ? a : e || (e = {}))[d] = c[d]);
+ e && f.extend(!0, a, e)
+ }
+ function bZ(a, c, d, e, f, g) {
+ f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
+ var h = a[f],
+ i = 0,
+ j = h ? h.length : 0,
+ k = a === bS,
+ l;
+ for (; i < j && (k || !l); i++) l = h[i](c, d, e), typeof l == "string" && (!k || g[l] ? l = b : (c.dataTypes.unshift(l), l = bZ(a, c, d, e, l, g)));
+ (k || !l) && !g["*"] && (l = bZ(a, c, d, e, "*", g));
+ return l
+ }
+ function bY(a) {
+ return function (b, c) {
+ typeof b != "string" && (c = b, b = "*");
+ if (f.isFunction(c)) {
+ var d = b.toLowerCase().split(bO),
+ e = 0,
+ g = d.length,
+ h, i, j;
+ for (; e < g; e++) h = d[e], j = /^\+/.test(h), j && (h = h.substr(1) || "*"), i = a[h] = a[h] || [], i[j ? "unshift" : "push"](c)
+ }
+ }
+ }
+ function bB(a, b, c) {
+ var d = b === "width" ? a.offsetWidth : a.offsetHeight,
+ e = b === "width" ? 1 : 0,
+ g = 4;
+ if (d > 0) {
+ if (c !== "border") for (; e < g; e += 2) c || (d -= parseFloat(f.css(a, "padding" + bx[e])) || 0), c === "margin" ? d += parseFloat(f.css(a, c + bx[e])) || 0 : d -= parseFloat(f.css(a, "border" + bx[e] + "Width")) || 0;
+ return d + "px"
+ }
+ d = by(a, b);
+ if (d < 0 || d == null) d = a.style[b];
+ if (bt.test(d)) return d;
+ d = parseFloat(d) || 0;
+ if (c) for (; e < g; e += 2) d += parseFloat(f.css(a, "padding" + bx[e])) || 0, c !== "padding" && (d += parseFloat(f.css(a, "border" + bx[e] + "Width")) || 0), c === "margin" && (d += parseFloat(f.css(a, c + bx[e])) || 0);
+ return d + "px"
+ }
+ function bo(a) {
+ var b = c.createElement("div");
+ bh.appendChild(b), b.innerHTML = a.outerHTML;
+ return b.firstChild
+ }
+ function bn(a) {
+ var b = (a.nodeName || "").toLowerCase();
+ b === "input" ? bm(a) : b !== "script" && typeof a.getElementsByTagName != "undefined" && f.grep(a.getElementsByTagName("input"), bm)
+ }
+ function bm(a) {
+ if (a.type === "checkbox" || a.type === "radio") a.defaultChecked = a.checked
+ }
+ function bl(a) {
+ return typeof a.getElementsByTagName != "undefined" ? a.getElementsByTagName("*") : typeof a.querySelectorAll != "undefined" ? a.querySelectorAll("*") : []
+ }
+ function bk(a, b) {
+ var c;
+ b.nodeType === 1 && (b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase(), c === "object" ? b.outerHTML = a.outerHTML : c !== "input" || a.type !== "checkbox" && a.type !== "radio" ? c === "option" ? b.selected = a.defaultSelected : c === "input" || c === "textarea" ? b.defaultValue = a.defaultValue : c === "script" && b.text !== a.text && (b.text = a.text) : (a.checked && (b.defaultChecked = b.checked = a.checked), b.value !== a.value && (b.value = a.value)), b.removeAttribute(f.expando), b.removeAttribute("_submit_attached"), b.removeAttribute("_change_attached"))
+ }
+ function bj(a, b) {
+ if (b.nodeType === 1 && !! f.hasData(a)) {
+ var c, d, e, g = f._data(a),
+ h = f._data(b, g),
+ i = g.events;
+ if (i) {
+ delete h.handle, h.events = {};
+ for (c in i) for (d = 0, e = i[c].length; d < e; d++) f.event.add(b, c, i[c][d])
+ }
+ h.data && (h.data = f.extend({}, h.data))
+ }
+ }
+ function bi(a, b) {
+ return f.nodeName(a, "table") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
+ }
+ function U(a) {
+ var b = V.split("|"),
+ c = a.createDocumentFragment();
+ if (c.createElement) while (b.length) c.createElement(b.pop());
+ return c
+ }
+ function T(a, b, c) {
+ b = b || 0;
+ if (f.isFunction(b)) return f.grep(a, function (a, d) {
+ var e = !! b.call(a, d, a);
+ return e === c
+ });
+ if (b.nodeType) return f.grep(a, function (a, d) {
+ return a === b === c
+ });
+ if (typeof b == "string") {
+ var d = f.grep(a, function (a) {
+ return a.nodeType === 1
+ });
+ if (O.test(b)) return f.filter(b, d, !c);
+ b = f.filter(b, d)
+ }
+ return f.grep(a, function (a, d) {
+ return f.inArray(a, b) >= 0 === c
+ })
+ }
+ function S(a) {
+ return !a || !a.parentNode || a.parentNode.nodeType === 11
+ }
+ function K() {
+ return !0
+ }
+ function J() {
+ return !1
+ }
+ function n(a, b, c) {
+ var d = b + "defer",
+ e = b + "queue",
+ g = b + "mark",
+ h = f._data(a, d);
+ h && (c === "queue" || !f._data(a, e)) && (c === "mark" || !f._data(a, g)) && setTimeout(function () {
+ !f._data(a, e) && !f._data(a, g) && (f.removeData(a, d, !0), h.fire())
+ }, 0)
+ }
+ function m(a) {
+ for (var b in a) {
+ if (b === "data" && f.isEmptyObject(a[b])) continue;
+ if (b !== "toJSON") return !1
+ }
+ return !0
+ }
+ function l(a, c, d) {
+ if (d === b && a.nodeType === 1) {
+ var e = "data-" + c.replace(k, "-$1").toLowerCase();
+ d = a.getAttribute(e);
+ if (typeof d == "string") {
+ try {
+ d = d === "true" ? !0 : d === "false" ? !1 : d === "null" ? null : f.isNumeric(d) ? +d : j.test(d) ? f.parseJSON(d) : d
+ } catch (g) {}
+ f.data(a, c, d)
+ } else d = b
+ }
+ return d
+ }
+ function h(a) {
+ var b = g[a] = {},
+ c, d;
+ a = a.split(/\s+/);
+ for (c = 0, d = a.length; c < d; c++) b[a[c]] = !0;
+ return b
+ }
+ var c = a.document,
+ d = a.navigator,
+ e = a.location,
+ f = function () {
+ function J() {
+ if (!e.isReady) {
+ try {
+ c.documentElement.doScroll("left")
+ } catch (a) {
+ setTimeout(J, 1);
+ return
+ }
+ e.ready()
+ }
+ }
+ var e = function (a, b) {
+ return new e.fn.init(a, b, h)
+ },
+ f = a.jQuery,
+ g = a.$,
+ h, i = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+ j = /\S/,
+ k = /^\s+/,
+ l = /\s+$/,
+ m = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+ n = /^[\],:{}\s]*$/,
+ o = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ p = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ q = /(?:^|:|,)(?:\s*\[)+/g,
+ r = /(webkit)[ \/]([\w.]+)/,
+ s = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ t = /(msie) ([\w.]+)/,
+ u = /(mozilla)(?:.*? rv:([\w.]+))?/,
+ v = /-([a-z]|[0-9])/ig,
+ w = /^-ms-/,
+ x = function (a, b) {
+ return (b + "").toUpperCase()
+ },
+ y = d.userAgent,
+ z, A, B, C = Object.prototype.toString,
+ D = Object.prototype.hasOwnProperty,
+ E = Array.prototype.push,
+ F = Array.prototype.slice,
+ G = String.prototype.trim,
+ H = Array.prototype.indexOf,
+ I = {};
+ e.fn = e.prototype = {
+ constructor: e,
+ init: function (a, d, f) {
+ var g, h, j, k;
+ if (!a) return this;
+ if (a.nodeType) {
+ this.context = this[0] = a, this.length = 1;
+ return this
+ }
+ if (a === "body" && !d && c.body) {
+ this.context = c, this[0] = c.body, this.selector = a, this.length = 1;
+ return this
+ }
+ if (typeof a == "string") {
+ a.charAt(0) !== "<" || a.charAt(a.length - 1) !== ">" || a.length < 3 ? g = i.exec(a) : g = [null, a, null];
+ if (g && (g[1] || !d)) {
+ if (g[1]) {
+ d = d instanceof e ? d[0] : d, k = d ? d.ownerDocument || d : c, j = m.exec(a), j ? e.isPlainObject(d) ? (a = [c.createElement(j[1])], e.fn.attr.call(a, d, !0)) : a = [k.createElement(j[1])] : (j = e.buildFragment([g[1]], [k]), a = (j.cacheable ? e.clone(j.fragment) : j.fragment).childNodes);
+ return e.merge(this, a)
+ }
+ h = c.getElementById(g[2]);
+ if (h && h.parentNode) {
+ if (h.id !== g[2]) return f.find(a);
+ this.length = 1, this[0] = h
+ }
+ this.context = c, this.selector = a;
+ return this
+ }
+ return !d || d.jquery ? (d || f).find(a) : this.constructor(d).find(a)
+ }
+ if (e.isFunction(a)) return f.ready(a);
+ a.selector !== b && (this.selector = a.selector, this.context = a.context);
+ return e.makeArray(a, this)
+ },
+ selector: "",
+ jquery: "1.7.2",
+ length: 0,
+ size: function () {
+ return this.length
+ },
+ toArray: function () {
+ return F.call(this, 0)
+ },
+ get: function (a) {
+ return a == null ? this.toArray() : a < 0 ? this[this.length + a] : this[a]
+ },
+ pushStack: function (a, b, c) {
+ var d = this.constructor();
+ e.isArray(a) ? E.apply(d, a) : e.merge(d, a), d.prevObject = this, d.context = this.context, b === "find" ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")");
+ return d
+ },
+ each: function (a, b) {
+ return e.each(this, a, b)
+ },
+ ready: function (a) {
+ e.bindReady(), A.add(a);
+ return this
+ },
+ eq: function (a) {
+ a = +a;
+ return a === -1 ? this.slice(a) : this.slice(a, a + 1)
+ },
+ first: function () {
+ return this.eq(0)
+ },
+ last: function () {
+ return this.eq(-1)
+ },
+ slice: function () {
+ return this.pushStack(F.apply(this, arguments), "slice", F.call(arguments).join(","))
+ },
+ map: function (a) {
+ return this.pushStack(e.map(this, function (b, c) {
+ return a.call(b, c, b)
+ }))
+ },
+ end: function () {
+ return this.prevObject || this.constructor(null)
+ },
+ push: E,
+ sort: [].sort,
+ splice: [].splice
+ }, e.fn.init.prototype = e.fn, e.extend = e.fn.extend = function () {
+ var a, c, d, f, g, h, i = arguments[0] || {},
+ j = 1,
+ k = arguments.length,
+ l = !1;
+ typeof i == "boolean" && (l = i, i = arguments[1] || {}, j = 2), typeof i != "object" && !e.isFunction(i) && (i = {}), k === j && (i = this, --j);
+ for (; j < k; j++) if ((a = arguments[j]) != null) for (c in a) {
+ d = i[c], f = a[c];
+ if (i === f) continue;
+ l && f && (e.isPlainObject(f) || (g = e.isArray(f))) ? (g ? (g = !1, h = d && e.isArray(d) ? d : []) : h = d && e.isPlainObject(d) ? d : {}, i[c] = e.extend(l, h, f)) : f !== b && (i[c] = f)
+ }
+ return i
+ }, e.extend({
+ noConflict: function (b) {
+ a.$ === e && (a.$ = g), b && a.jQuery === e && (a.jQuery = f);
+ return e
+ },
+ isReady: !1,
+ readyWait: 1,
+ holdReady: function (a) {
+ a ? e.readyWait++ : e.ready(!0)
+ },
+ ready: function (a) {
+ if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {
+ if (!c.body) return setTimeout(e.ready, 1);
+ e.isReady = !0;
+ if (a !== !0 && --e.readyWait > 0) return;
+ A.fireWith(c, [e]), e.fn.trigger && e(c).trigger("ready").off("ready")
+ }
+ },
+ bindReady: function () {
+ if (!A) {
+ A = e.Callbacks("once memory");
+ if (c.readyState === "complete") return setTimeout(e.ready, 1);
+ if (c.addEventListener) c.addEventListener("DOMContentLoaded", B, !1), a.addEventListener("load", e.ready, !1);
+ else if (c.attachEvent) {
+ c.attachEvent("onreadystatechange", B), a.attachEvent("onload", e.ready);
+ var b = !1;
+ try {
+ b = a.frameElement == null
+ } catch (d) {}
+ c.documentElement.doScroll && b && J()
+ }
+ }
+ },
+ isFunction: function (a) {
+ return e.type(a) === "function"
+ },
+ isArray: Array.isArray ||
+ function (a) {
+ return e.type(a) === "array"
+ },
+ isWindow: function (a) {
+ return a != null && a == a.window
+ },
+ isNumeric: function (a) {
+ return !isNaN(parseFloat(a)) && isFinite(a)
+ },
+ type: function (a) {
+ return a == null ? String(a) : I[C.call(a)] || "object"
+ },
+ isPlainObject: function (a) {
+ if (!a || e.type(a) !== "object" || a.nodeType || e.isWindow(a)) return !1;
+ try {
+ if (a.constructor && !D.call(a, "constructor") && !D.call(a.constructor.prototype, "isPrototypeOf")) return !1
+ } catch (c) {
+ return !1
+ }
+ var d;
+ for (d in a);
+ return d === b || D.call(a, d)
+ },
+ isEmptyObject: function (a) {
+ for (var b in a) return !1;
+ return !0
+ },
+ error: function (a) {
+ throw new Error(a)
+ },
+ parseJSON: function (b) {
+ if (typeof b != "string" || !b) return null;
+ b = e.trim(b);
+ if (a.JSON && a.JSON.parse) return a.JSON.parse(b);
+ if (n.test(b.replace(o, "@").replace(p, "]").replace(q, ""))) return (new Function("return " + b))();
+ e.error("Invalid JSON: " + b)
+ },
+ parseXML: function (c) {
+ if (typeof c != "string" || !c) return null;
+ var d, f;
+ try {
+ a.DOMParser ? (f = new DOMParser, d = f.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
+ } catch (g) {
+ d = b
+ }(!d || !d.documentElement || d.getElementsByTagName("parsererror").length) && e.error("Invalid XML: " + c);
+ return d
+ },
+ noop: function () {},
+ globalEval: function (b) {
+ b && j.test(b) && (a.execScript ||
+ function (b) {
+ a.eval.call(a, b)
+ })(b)
+ },
+ camelCase: function (a) {
+ return a.replace(w, "ms-").replace(v, x)
+ },
+ nodeName: function (a, b) {
+ return a.nodeName && a.nodeName.toUpperCase() === b.toUpperCase()
+ },
+ each: function (a, c, d) {
+ var f, g = 0,
+ h = a.length,
+ i = h === b || e.isFunction(a);
+ if (d) {
+ if (i) {
+ for (f in a) if (c.apply(a[f], d) === !1) break
+ } else for (; g < h;) if (c.apply(a[g++], d) === !1) break
+ } else if (i) {
+ for (f in a) if (c.call(a[f], f, a[f]) === !1) break
+ } else for (; g < h;) if (c.call(a[g], g, a[g++]) === !1) break;
+ return a
+ },
+ trim: G ?
+ function (a) {
+ return a == null ? "" : G.call(a)
+ } : function (a) {
+ return a == null ? "" : (a + "").replace(k, "").replace(l, "")
+ },
+ makeArray: function (a, b) {
+ var c = b || [];
+ if (a != null) {
+ var d = e.type(a);
+ a.length == null || d === "string" || d === "function" || d === "regexp" || e.isWindow(a) ? E.call(c, a) : e.merge(c, a)
+ }
+ return c
+ },
+ inArray: function (a, b, c) {
+ var d;
+ if (b) {
+ if (H) return H.call(b, a, c);
+ d = b.length, c = c ? c < 0 ? Math.max(0, d + c) : c : 0;
+ for (; c < d; c++) if (c in b && b[c] === a) return c
+ }
+ return -1
+ },
+ merge: function (a, c) {
+ var d = a.length,
+ e = 0;
+ if (typeof c.length == "number") for (var f = c.length; e < f; e++) a[d++] = c[e];
+ else while (c[e] !== b) a[d++] = c[e++];
+ a.length = d;
+ return a
+ },
+ grep: function (a, b, c) {
+ var d = [],
+ e;
+ c = !! c;
+ for (var f = 0, g = a.length; f < g; f++) e = !! b(a[f], f), c !== e && d.push(a[f]);
+ return d
+ },
+ map: function (a, c, d) {
+ var f, g, h = [],
+ i = 0,
+ j = a.length,
+ k = a instanceof e || j !== b && typeof j == "number" && (j > 0 && a[0] && a[j - 1] || j === 0 || e.isArray(a));
+ if (k) for (; i < j; i++) f = c(a[i], i, d), f != null && (h[h.length] = f);
+ else for (g in a) f = c(a[g], g, d), f != null && (h[h.length] = f);
+ return h.concat.apply([], h)
+ },
+ guid: 1,
+ proxy: function (a, c) {
+ if (typeof c == "string") {
+ var d = a[c];
+ c = a, a = d
+ }
+ if (!e.isFunction(a)) return b;
+ var f = F.call(arguments, 2),
+ g = function () {
+ return a.apply(c, f.concat(F.call(arguments)))
+ };
+ g.guid = a.guid = a.guid || g.guid || e.guid++;
+ return g
+ },
+ access: function (a, c, d, f, g, h, i) {
+ var j, k = d == null,
+ l = 0,
+ m = a.length;
+ if (d && typeof d == "object") {
+ for (l in d) e.access(a, c, l, d[l], 1, h, f);
+ g = 1
+ } else if (f !== b) {
+ j = i === b && e.isFunction(f), k && (j ? (j = c, c = function (a, b, c) {
+ return j.call(e(a), c)
+ }) : (c.call(a, f), c = null));
+ if (c) for (; l < m; l++) c(a[l], d, j ? f.call(a[l], l, c(a[l], d)) : f, i);
+ g = 1
+ }
+ return g ? a : k ? c.call(a) : m ? c(a[0], d) : h
+ },
+ now: function () {
+ return (new Date).getTime()
+ },
+ uaMatch: function (a) {
+ a = a.toLowerCase();
+ var b = r.exec(a) || s.exec(a) || t.exec(a) || a.indexOf("compatible") < 0 && u.exec(a) || [];
+ return {
+ browser: b[1] || "",
+ version: b[2] || "0"
+ }
+ },
+ sub: function () {
+ function a(b, c) {
+ return new a.fn.init(b, c)
+ }
+ e.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function (d, f) {
+ f && f instanceof e && !(f instanceof a) && (f = a(f));
+ return e.fn.init.call(this, d, f, b)
+ }, a.fn.init.prototype = a.fn;
+ var b = a(c);
+ return a
+ },
+ browser: {}
+ }), e.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (a, b) {
+ I["[object " + b + "]"] = b.toLowerCase()
+ }), z = e.uaMatch(y), z.browser && (e.browser[z.browser] = !0, e.browser.version = z.version), e.browser.webkit && (e.browser.safari = !0), j.test("Â ") && (k = /^[\s\xA0]+/, l = /[\s\xA0]+$/), h = e(c), c.addEventListener ? B = function () {
+ c.removeEventListener("DOMContentLoaded", B, !1), e.ready()
+ } : c.attachEvent && (B = function () {
+ c.readyState === "complete" && (c.detachEvent("onreadystatechange", B), e.ready())
+ });
+ return e
+ }(),
+ g = {};
+ f.Callbacks = function (a) {
+ a = a ? g[a] || h(a) : {};
+ var c = [],
+ d = [],
+ e, i, j, k, l, m, n = function (b) {
+ var d, e, g, h, i;
+ for (d = 0, e = b.length; d < e; d++) g = b[d], h = f.type(g), h === "array" ? n(g) : h === "function" && (!a.unique || !p.has(g)) && c.push(g)
+ },
+ o = function (b, f) {
+ f = f || [], e = !a.memory || [b, f], i = !0, j = !0, m = k || 0, k = 0, l = c.length;
+ for (; c && m < l; m++) if (c[m].apply(b, f) === !1 && a.stopOnFalse) {
+ e = !0;
+ break
+ }
+ j = !1, c && (a.once ? e === !0 ? p.disable() : c = [] : d && d.length && (e = d.shift(), p.fireWith(e[0], e[1])))
+ },
+ p = {
+ add: function () {
+ if (c) {
+ var a = c.length;
+ n(arguments), j ? l = c.length : e && e !== !0 && (k = a, o(e[0], e[1]))
+ }
+ return this
+ },
+ remove: function () {
+ if (c) {
+ var b = arguments,
+ d = 0,
+ e = b.length;
+ for (; d < e; d++) for (var f = 0; f < c.length; f++) if (b[d] === c[f]) {
+ j && f <= l && (l--, f <= m && m--), c.splice(f--, 1);
+ if (a.unique) break
+ }
+ }
+ return this
+ },
+ has: function (a) {
+ if (c) {
+ var b = 0,
+ d = c.length;
+ for (; b < d; b++) if (a === c[b]) return !0
+ }
+ return !1
+ },
+ empty: function () {
+ c = [];
+ return this
+ },
+ disable: function () {
+ c = d = e = b;
+ return this
+ },
+ disabled: function () {
+ return !c
+ },
+ lock: function () {
+ d = b, (!e || e === !0) && p.disable();
+ return this
+ },
+ locked: function () {
+ return !d
+ },
+ fireWith: function (b, c) {
+ d && (j ? a.once || d.push([b, c]) : (!a.once || !e) && o(b, c));
+ return this
+ },
+ fire: function () {
+ p.fireWith(this, arguments);
+ return this
+ },
+ fired: function () {
+ return !!i
+ }
+ };
+ return p
+ };
+ var i = [].slice;
+ f.extend({
+ Deferred: function (a) {
+ var b = f.Callbacks("once memory"),
+ c = f.Callbacks("once memory"),
+ d = f.Callbacks("memory"),
+ e = "pending",
+ g = {
+ resolve: b,
+ reject: c,
+ notify: d
+ },
+ h = {
+ done: b.add,
+ fail: c.add,
+ progress: d.add,
+ state: function () {
+ return e
+ },
+ isResolved: b.fired,
+ isRejected: c.fired,
+ then: function (a, b, c) {
+ i.done(a).fail(b).progress(c);
+ return this
+ },
+ always: function () {
+ i.done.apply(i, arguments).fail.apply(i, arguments);
+ return this
+ },
+ pipe: function (a, b, c) {
+ return f.Deferred(function (d) {
+ f.each({
+ done: [a, "resolve"],
+ fail: [b, "reject"],
+ progress: [c, "notify"]
+ }, function (a, b) {
+ var c = b[0],
+ e = b[1],
+ g;
+ f.isFunction(c) ? i[a](function () {
+ g = c.apply(this, arguments), g && f.isFunction(g.promise) ? g.promise().then(d.resolve, d.reject, d.notify) : d[e + "With"](this === i ? d : this, [g])
+ }) : i[a](d[e])
+ })
+ }).promise()
+ },
+ promise: function (a) {
+ if (a == null) a = h;
+ else for (var b in h) a[b] = h[b];
+ return a
+ }
+ },
+ i = h.promise({}),
+ j;
+ for (j in g) i[j] = g[j].fire, i[j + "With"] = g[j].fireWith;
+ i.done(function () {
+ e = "resolved"
+ }, c.disable, d.lock).fail(function () {
+ e = "rejected"
+ }, b.disable, d.lock), a && a.call(i, i);
+ return i
+ },
+ when: function (a) {
+ function m(a) {
+ return function (b) {
+ e[a] = arguments.length > 1 ? i.call(arguments, 0) : b, j.notifyWith(k, e)
+ }
+ }
+ function l(a) {
+ return function (c) {
+ b[a] = arguments.length > 1 ? i.call(arguments, 0) : c, --g || j.resolveWith(j, b)
+ }
+ }
+ var b = i.call(arguments, 0),
+ c = 0,
+ d = b.length,
+ e = Array(d),
+ g = d,
+ h = d,
+ j = d <= 1 && a && f.isFunction(a.promise) ? a : f.Deferred(),
+ k = j.promise();
+ if (d > 1) {
+ for (; c < d; c++) b[c] && b[c].promise && f.isFunction(b[c].promise) ? b[c].promise().then(l(c), j.reject, m(c)) : --g;
+ g || j.resolveWith(j, b)
+ } else j !== a && j.resolveWith(j, d ? [a] : []);
+ return k
+ }
+ }), f.support = function () {
+ var b, d, e, g, h, i, j, k, l, m, n, o, p = c.createElement("div"),
+ q = c.documentElement;
+ p.setAttribute("className", "t"), p.innerHTML = " a", d = p.getElementsByTagName("*"), e = p.getElementsByTagName("a")[0];
+ if (!d || !d.length || !e) return {};
+ g = c.createElement("select"), h = g.appendChild(c.createElement("option")), i = p.getElementsByTagName("input")[0], b = {
+ leadingWhitespace: p.firstChild.nodeType === 3,
+ tbody: !p.getElementsByTagName("tbody").length,
+ htmlSerialize: !! p.getElementsByTagName("link").length,
+ style: /top/.test(e.getAttribute("style")),
+ hrefNormalized: e.getAttribute("href") === "/a",
+ opacity: /^0.55/.test(e.style.opacity),
+ cssFloat: !! e.style.cssFloat,
+ checkOn: i.value === "on",
+ optSelected: h.selected,
+ getSetAttribute: p.className !== "t",
+ enctype: !! c.createElement("form").enctype,
+ html5Clone: c.createElement("nav").cloneNode(!0).outerHTML !== "<:nav>",
+ submitBubbles: !0,
+ changeBubbles: !0,
+ focusinBubbles: !1,
+ deleteExpando: !0,
+ noCloneEvent: !0,
+ inlineBlockNeedsLayout: !1,
+ shrinkWrapBlocks: !1,
+ reliableMarginRight: !0,
+ pixelMargin: !0
+ }, f.boxModel = b.boxModel = c.compatMode === "CSS1Compat", i.checked = !0, b.noCloneChecked = i.cloneNode(!0).checked, g.disabled = !0, b.optDisabled = !h.disabled;
+ try {
+ delete p.test
+ } catch (r) {
+ b.deleteExpando = !1
+ }!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", function () {
+ b.noCloneEvent = !1
+ }), p.cloneNode(!0).fireEvent("onclick")), i = c.createElement("input"), i.value = "t", i.setAttribute("type", "radio"), b.radioValue = i.value === "t", i.setAttribute("checked", "checked"), i.setAttribute("name", "t"), p.appendChild(i), j = c.createDocumentFragment(), j.appendChild(p.lastChild), b.checkClone = j.cloneNode(!0).cloneNode(!0).lastChild.checked, b.appendChecked = i.checked, j.removeChild(i), j.appendChild(p);
+ if (p.attachEvent) for (n in {
+ submit: 1,
+ change: 1,
+ focusin: 1
+ }) m = "on" + n, o = m in p, o || (p.setAttribute(m, "return;"), o = typeof p[m] == "function"), b[n + "Bubbles"] = o;
+ j.removeChild(p), j = g = h = p = i = null, f(function () {
+ var d, e, g, h, i, j, l, m, n, q, r, s, t, u = c.getElementsByTagName("body")[0];
+ !u || (m = 1, t = "padding:0;margin:0;border:", r = "position:absolute;top:0;left:0;width:1px;height:1px;", s = t + "0;visibility:hidden;", n = "style='" + r + t + "5px solid #000;", q = "" + "", d = c.createElement("div"), d.style.cssText = s + "width:0;height:0;position:static;top:0;margin-top:" + m + "px", u.insertBefore(d, u.firstChild), p = c.createElement("div"), d.appendChild(p), p.innerHTML = "", k = p.getElementsByTagName("td"), o = k[0].offsetHeight === 0, k[0].style.display = "", k[1].style.display = "none", b.reliableHiddenOffsets = o && k[0].offsetHeight === 0, a.getComputedStyle && (p.innerHTML = "", l = c.createElement("div"), l.style.width = "0", l.style.marginRight = "0", p.style.width = "2px", p.appendChild(l), b.reliableMarginRight = (parseInt((a.getComputedStyle(l, null) || {
+ marginRight: 0
+ }).marginRight, 10) || 0) === 0), typeof p.style.zoom != "undefined" && (p.innerHTML = "", p.style.width = p.style.padding = "1px", p.style.border = 0, p.style.overflow = "hidden", p.style.display = "inline", p.style.zoom = 1, b.inlineBlockNeedsLayout = p.offsetWidth === 3, p.style.display = "block", p.style.overflow = "visible", p.innerHTML = "", b.shrinkWrapBlocks = p.offsetWidth !== 3), p.style.cssText = r + s, p.innerHTML = q, e = p.firstChild, g = e.firstChild, i = e.nextSibling.firstChild.firstChild, j = {
+ doesNotAddBorder: g.offsetTop !== 5,
+ doesAddBorderForTableAndCells: i.offsetTop === 5
+ }, g.style.position = "fixed", g.style.top = "20px", j.fixedPosition = g.offsetTop === 20 || g.offsetTop === 15, g.style.position = g.style.top = "", e.style.overflow = "hidden", e.style.position = "relative", j.subtractsBorderForOverflowNotVisible = g.offsetTop === -5, j.doesNotIncludeMarginInBodyOffset = u.offsetTop !== m, a.getComputedStyle && (p.style.marginTop = "1%", b.pixelMargin = (a.getComputedStyle(p, null) || {
+ marginTop: 0
+ }).marginTop !== "1%"), typeof d.style.zoom != "undefined" && (d.style.zoom = 1), u.removeChild(d), l = p = d = null, f.extend(b, j))
+ });
+ return b
+ }();
+ var j = /^(?:\{.*\}|\[.*\])$/,
+ k = /([A-Z])/g;
+ f.extend({
+ cache: {},
+ uuid: 0,
+ expando: "jQuery" + (f.fn.jquery + Math.random()).replace(/\D/g, ""),
+ noData: {
+ embed: !0,
+ object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ applet: !0
+ },
+ hasData: function (a) {
+ a = a.nodeType ? f.cache[a[f.expando]] : a[f.expando];
+ return !!a && !m(a)
+ },
+ data: function (a, c, d, e) {
+ if ( !! f.acceptData(a)) {
+ var g, h, i, j = f.expando,
+ k = typeof c == "string",
+ l = a.nodeType,
+ m = l ? f.cache : a,
+ n = l ? a[j] : a[j] && j,
+ o = c === "events";
+ if ((!n || !m[n] || !o && !e && !m[n].data) && k && d === b) return;
+ n || (l ? a[j] = n = ++f.uuid : n = j), m[n] || (m[n] = {}, l || (m[n].toJSON = f.noop));
+ if (typeof c == "object" || typeof c == "function") e ? m[n] = f.extend(m[n], c) : m[n].data = f.extend(m[n].data, c);
+ g = h = m[n], e || (h.data || (h.data = {}), h = h.data), d !== b && (h[f.camelCase(c)] = d);
+ if (o && !h[c]) return g.events;
+ k ? (i = h[c], i == null && (i = h[f.camelCase(c)])) : i = h;
+ return i
+ }
+ },
+ removeData: function (a, b, c) {
+ if ( !! f.acceptData(a)) {
+ var d, e, g, h = f.expando,
+ i = a.nodeType,
+ j = i ? f.cache : a,
+ k = i ? a[h] : h;
+ if (!j[k]) return;
+ if (b) {
+ d = c ? j[k] : j[k].data;
+ if (d) {
+ f.isArray(b) || (b in d ? b = [b] : (b = f.camelCase(b), b in d ? b = [b] : b = b.split(" ")));
+ for (e = 0, g = b.length; e < g; e++) delete d[b[e]];
+ if (!(c ? m : f.isEmptyObject)(d)) return
+ }
+ }
+ if (!c) {
+ delete j[k].data;
+ if (!m(j[k])) return
+ }
+ f.support.deleteExpando || !j.setInterval ? delete j[k] : j[k] = null, i && (f.support.deleteExpando ? delete a[h] : a.removeAttribute ? a.removeAttribute(h) : a[h] = null)
+ }
+ },
+ _data: function (a, b, c) {
+ return f.data(a, b, c, !0)
+ },
+ acceptData: function (a) {
+ if (a.nodeName) {
+ var b = f.noData[a.nodeName.toLowerCase()];
+ if (b) return b !== !0 && a.getAttribute("classid") === b
+ }
+ return !0
+ }
+ }), f.fn.extend({
+ data: function (a, c) {
+ var d, e, g, h, i, j = this[0],
+ k = 0,
+ m = null;
+ if (a === b) {
+ if (this.length) {
+ m = f.data(j);
+ if (j.nodeType === 1 && !f._data(j, "parsedAttrs")) {
+ g = j.attributes;
+ for (i = g.length; k < i; k++) h = g[k].name, h.indexOf("data-") === 0 && (h = f.camelCase(h.substring(5)), l(j, h, m[h]));
+ f._data(j, "parsedAttrs", !0)
+ }
+ }
+ return m
+ }
+ if (typeof a == "object") return this.each(function () {
+ f.data(this, a)
+ });
+ d = a.split(".", 2), d[1] = d[1] ? "." + d[1] : "", e = d[1] + "!";
+ return f.access(this, function (c) {
+ if (c === b) {
+ m = this.triggerHandler("getData" + e, [d[0]]), m === b && j && (m = f.data(j, a), m = l(j, a, m));
+ return m === b && d[1] ? this.data(d[0]) : m
+ }
+ d[1] = c, this.each(function () {
+ var b = f(this);
+ b.triggerHandler("setData" + e, d), f.data(this, a, c), b.triggerHandler("changeData" + e, d)
+ })
+ }, null, c, arguments.length > 1, null, !1)
+ },
+ removeData: function (a) {
+ return this.each(function () {
+ f.removeData(this, a)
+ })
+ }
+ }), f.extend({
+ _mark: function (a, b) {
+ a && (b = (b || "fx") + "mark", f._data(a, b, (f._data(a, b) || 0) + 1))
+ },
+ _unmark: function (a, b, c) {
+ a !== !0 && (c = b, b = a, a = !1);
+ if (b) {
+ c = c || "fx";
+ var d = c + "mark",
+ e = a ? 0 : (f._data(b, d) || 1) - 1;
+ e ? f._data(b, d, e) : (f.removeData(b, d, !0), n(b, c, "mark"))
+ }
+ },
+ queue: function (a, b, c) {
+ var d;
+ if (a) {
+ b = (b || "fx") + "queue", d = f._data(a, b), c && (!d || f.isArray(c) ? d = f._data(a, b, f.makeArray(c)) : d.push(c));
+ return d || []
+ }
+ },
+ dequeue: function (a, b) {
+ b = b || "fx";
+ var c = f.queue(a, b),
+ d = c.shift(),
+ e = {};
+ d === "inprogress" && (d = c.shift()), d && (b === "fx" && c.unshift("inprogress"), f._data(a, b + ".run", e), d.call(a, function () {
+ f.dequeue(a, b)
+ }, e)), c.length || (f.removeData(a, b + "queue " + b + ".run", !0), n(a, b, "queue"))
+ }
+ }), f.fn.extend({
+ queue: function (a, c) {
+ var d = 2;
+ typeof a != "string" && (c = a, a = "fx", d--);
+ if (arguments.length < d) return f.queue(this[0], a);
+ return c === b ? this : this.each(function () {
+ var b = f.queue(this, a, c);
+ a === "fx" && b[0] !== "inprogress" && f.dequeue(this, a)
+ })
+ },
+ dequeue: function (a) {
+ return this.each(function () {
+ f.dequeue(this, a)
+ })
+ },
+ delay: function (a, b) {
+ a = f.fx ? f.fx.speeds[a] || a : a, b = b || "fx";
+ return this.queue(b, function (b, c) {
+ var d = setTimeout(b, a);
+ c.stop = function () {
+ clearTimeout(d)
+ }
+ })
+ },
+ clearQueue: function (a) {
+ return this.queue(a || "fx", [])
+ },
+ promise: function (a, c) {
+ function m() {
+ --h || d.resolveWith(e, [e])
+ }
+ typeof a != "string" && (c = a, a = b), a = a || "fx";
+ var d = f.Deferred(),
+ e = this,
+ g = e.length,
+ h = 1,
+ i = a + "defer",
+ j = a + "queue",
+ k = a + "mark",
+ l;
+ while (g--) if (l = f.data(e[g], i, b, !0) || (f.data(e[g], j, b, !0) || f.data(e[g], k, b, !0)) && f.data(e[g], i, f.Callbacks("once memory"), !0)) h++, l.add(m);
+ m();
+ return d.promise(c)
+ }
+ });
+ var o = /[\n\t\r]/g,
+ p = /\s+/,
+ q = /\r/g,
+ r = /^(?:button|input)$/i,
+ s = /^(?:button|input|object|select|textarea)$/i,
+ t = /^a(?:rea)?$/i,
+ u = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ v = f.support.getSetAttribute,
+ w, x, y;
+ f.fn.extend({
+ attr: function (a, b) {
+ return f.access(this, f.attr, a, b, arguments.length > 1)
+ },
+ removeAttr: function (a) {
+ return this.each(function () {
+ f.removeAttr(this, a)
+ })
+ },
+ prop: function (a, b) {
+ return f.access(this, f.prop, a, b, arguments.length > 1)
+ },
+ removeProp: function (a) {
+ a = f.propFix[a] || a;
+ return this.each(function () {
+ try {
+ this[a] = b, delete this[a]
+ } catch (c) {}
+ })
+ },
+ addClass: function (a) {
+ var b, c, d, e, g, h, i;
+ if (f.isFunction(a)) return this.each(function (b) {
+ f(this).addClass(a.call(this, b, this.className))
+ });
+ if (a && typeof a == "string") {
+ b = a.split(p);
+ for (c = 0, d = this.length; c < d; c++) {
+ e = this[c];
+ if (e.nodeType === 1) if (!e.className && b.length === 1) e.className = a;
+ else {
+ g = " " + e.className + " ";
+ for (h = 0, i = b.length; h < i; h++)~g.indexOf(" " + b[h] + " ") || (g += b[h] + " ");
+ e.className = f.trim(g)
+ }
+ }
+ }
+ return this
+ },
+ removeClass: function (a) {
+ var c, d, e, g, h, i, j;
+ if (f.isFunction(a)) return this.each(function (b) {
+ f(this).removeClass(a.call(this, b, this.className))
+ });
+ if (a && typeof a == "string" || a === b) {
+ c = (a || "").split(p);
+ for (d = 0, e = this.length; d < e; d++) {
+ g = this[d];
+ if (g.nodeType === 1 && g.className) if (a) {
+ h = (" " + g.className + " ").replace(o, " ");
+ for (i = 0, j = c.length; i < j; i++) h = h.replace(" " + c[i] + " ", " ");
+ g.className = f.trim(h)
+ } else g.className = ""
+ }
+ }
+ return this
+ },
+ toggleClass: function (a, b) {
+ var c = typeof a,
+ d = typeof b == "boolean";
+ if (f.isFunction(a)) return this.each(function (c) {
+ f(this).toggleClass(a.call(this, c, this.className, b), b)
+ });
+ return this.each(function () {
+ if (c === "string") {
+ var e, g = 0,
+ h = f(this),
+ i = b,
+ j = a.split(p);
+ while (e = j[g++]) i = d ? i : !h.hasClass(e), h[i ? "addClass" : "removeClass"](e)
+ } else if (c === "undefined" || c === "boolean") this.className && f._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : f._data(this, "__className__") || ""
+ })
+ },
+ hasClass: function (a) {
+ var b = " " + a + " ",
+ c = 0,
+ d = this.length;
+ for (; c < d; c++) if (this[c].nodeType === 1 && (" " + this[c].className + " ").replace(o, " ").indexOf(b) > -1) return !0;
+ return !1
+ },
+ val: function (a) {
+ var c, d, e, g = this[0]; {
+ if ( !! arguments.length) {
+ e = f.isFunction(a);
+ return this.each(function (d) {
+ var g = f(this),
+ h;
+ if (this.nodeType === 1) {
+ e ? h = a.call(this, d, g.val()) : h = a, h == null ? h = "" : typeof h == "number" ? h += "" : f.isArray(h) && (h = f.map(h, function (a) {
+ return a == null ? "" : a + ""
+ })), c = f.valHooks[this.type] || f.valHooks[this.nodeName.toLowerCase()];
+ if (!c || !("set" in c) || c.set(this, h, "value") === b) this.value = h
+ }
+ })
+ }
+ if (g) {
+ c = f.valHooks[g.type] || f.valHooks[g.nodeName.toLowerCase()];
+ if (c && "get" in c && (d = c.get(g, "value")) !== b) return d;
+ d = g.value;
+ return typeof d == "string" ? d.replace(q, "") : d == null ? "" : d
+ }
+ }
+ }
+ }), f.extend({
+ valHooks: {
+ option: {
+ get: function (a) {
+ var b = a.attributes.value;
+ return !b || b.specified ? a.value : a.text
+ }
+ },
+ select: {
+ get: function (a) {
+ var b, c, d, e, g = a.selectedIndex,
+ h = [],
+ i = a.options,
+ j = a.type === "select-one";
+ if (g < 0) return null;
+ c = j ? g : 0, d = j ? g + 1 : i.length;
+ for (; c < d; c++) {
+ e = i[c];
+ if (e.selected && (f.support.optDisabled ? !e.disabled : e.getAttribute("disabled") === null) && (!e.parentNode.disabled || !f.nodeName(e.parentNode, "optgroup"))) {
+ b = f(e).val();
+ if (j) return b;
+ h.push(b)
+ }
+ }
+ if (j && !h.length && i.length) return f(i[g]).val();
+ return h
+ },
+ set: function (a, b) {
+ var c = f.makeArray(b);
+ f(a).find("option").each(function () {
+ this.selected = f.inArray(f(this).val(), c) >= 0
+ }), c.length || (a.selectedIndex = -1);
+ return c
+ }
+ }
+ },
+ attrFn: {
+ val: !0,
+ css: !0,
+ html: !0,
+ text: !0,
+ data: !0,
+ width: !0,
+ height: !0,
+ offset: !0
+ },
+ attr: function (a, c, d, e) {
+ var g, h, i, j = a.nodeType;
+ if ( !! a && j !== 3 && j !== 8 && j !== 2) {
+ if (e && c in f.attrFn) return f(a)[c](d);
+ if (typeof a.getAttribute == "undefined") return f.prop(a, c, d);
+ i = j !== 1 || !f.isXMLDoc(a), i && (c = c.toLowerCase(), h = f.attrHooks[c] || (u.test(c) ? x : w));
+ if (d !== b) {
+ if (d === null) {
+ f.removeAttr(a, c);
+ return
+ }
+ if (h && "set" in h && i && (g = h.set(a, d, c)) !== b) return g;
+ a.setAttribute(c, "" + d);
+ return d
+ }
+ if (h && "get" in h && i && (g = h.get(a, c)) !== null) return g;
+ g = a.getAttribute(c);
+ return g === null ? b : g
+ }
+ },
+ removeAttr: function (a, b) {
+ var c, d, e, g, h, i = 0;
+ if (b && a.nodeType === 1) {
+ d = b.toLowerCase().split(p), g = d.length;
+ for (; i < g; i++) e = d[i], e && (c = f.propFix[e] || e, h = u.test(e), h || f.attr(a, e, ""), a.removeAttribute(v ? e : c), h && c in a && (a[c] = !1))
+ }
+ },
+ attrHooks: {
+ type: {
+ set: function (a, b) {
+ if (r.test(a.nodeName) && a.parentNode) f.error("type property can't be changed");
+ else if (!f.support.radioValue && b === "radio" && f.nodeName(a, "input")) {
+ var c = a.value;
+ a.setAttribute("type", b), c && (a.value = c);
+ return b
+ }
+ }
+ },
+ value: {
+ get: function (a, b) {
+ if (w && f.nodeName(a, "button")) return w.get(a, b);
+ return b in a ? a.value : null
+ },
+ set: function (a, b, c) {
+ if (w && f.nodeName(a, "button")) return w.set(a, b, c);
+ a.value = b
+ }
+ }
+ },
+ 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 (a, c, d) {
+ var e, g, h, i = a.nodeType;
+ if ( !! a && i !== 3 && i !== 8 && i !== 2) {
+ h = i !== 1 || !f.isXMLDoc(a), h && (c = f.propFix[c] || c, g = f.propHooks[c]);
+ return d !== b ? g && "set" in g && (e = g.set(a, d, c)) !== b ? e : a[c] = d : g && "get" in g && (e = g.get(a, c)) !== null ? e : a[c]
+ }
+ },
+ propHooks: {
+ tabIndex: {
+ get: function (a) {
+ var c = a.getAttributeNode("tabindex");
+ return c && c.specified ? parseInt(c.value, 10) : s.test(a.nodeName) || t.test(a.nodeName) && a.href ? 0 : b
+ }
+ }
+ }
+ }), f.attrHooks.tabindex = f.propHooks.tabIndex, x = {
+ get: function (a, c) {
+ var d, e = f.prop(a, c);
+ return e === !0 || typeof e != "boolean" && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b
+ },
+ set: function (a, b, c) {
+ var d;
+ b === !1 ? f.removeAttr(a, c) : (d = f.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase()));
+ return c
+ }
+ }, v || (y = {
+ name: !0,
+ id: !0,
+ coords: !0
+ }, w = f.valHooks.button = {
+ get: function (a, c) {
+ var d;
+ d = a.getAttributeNode(c);
+ return d && (y[c] ? d.nodeValue !== "" : d.specified) ? d.nodeValue : b
+ },
+ set: function (a, b, d) {
+ var e = a.getAttributeNode(d);
+ e || (e = c.createAttribute(d), a.setAttributeNode(e));
+ return e.nodeValue = b + ""
+ }
+ }, f.attrHooks.tabindex.set = w.set, f.each(["width", "height"], function (a, b) {
+ f.attrHooks[b] = f.extend(f.attrHooks[b], {
+ set: function (a, c) {
+ if (c === "") {
+ a.setAttribute(b, "auto");
+ return c
+ }
+ }
+ })
+ }), f.attrHooks.contenteditable = {
+ get: w.get,
+ set: function (a, b, c) {
+ b === "" && (b = "false"), w.set(a, b, c)
+ }
+ }), f.support.hrefNormalized || f.each(["href", "src", "width", "height"], function (a, c) {
+ f.attrHooks[c] = f.extend(f.attrHooks[c], {
+ get: function (a) {
+ var d = a.getAttribute(c, 2);
+ return d === null ? b : d
+ }
+ })
+ }), f.support.style || (f.attrHooks.style = {
+ get: function (a) {
+ return a.style.cssText.toLowerCase() || b
+ },
+ set: function (a, b) {
+ return a.style.cssText = "" + b
+ }
+ }), f.support.optSelected || (f.propHooks.selected = f.extend(f.propHooks.selected, {
+ get: function (a) {
+ var b = a.parentNode;
+ b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex);
+ return null
+ }
+ })), f.support.enctype || (f.propFix.enctype = "encoding"), f.support.checkOn || f.each(["radio", "checkbox"], function () {
+ f.valHooks[this] = {
+ get: function (a) {
+ return a.getAttribute("value") === null ? "on" : a.value
+ }
+ }
+ }), f.each(["radio", "checkbox"], function () {
+ f.valHooks[this] = f.extend(f.valHooks[this], {
+ set: function (a, b) {
+ if (f.isArray(b)) return a.checked = f.inArray(f(a).val(), b) >= 0
+ }
+ })
+ });
+ var z = /^(?:textarea|input|select)$/i,
+ A = /^([^\.]*)?(?:\.(.+))?$/,
+ B = /(?:^|\s)hover(\.\S+)?\b/,
+ C = /^key/,
+ D = /^(?:mouse|contextmenu)|click/,
+ E = /^(?:focusinfocus|focusoutblur)$/,
+ F = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
+ G = function (
+ a) {
+ var b = F.exec(a);
+ b && (b[1] = (b[1] || "").toLowerCase(), b[3] = b[3] && new RegExp("(?:^|\\s)" + b[3] + "(?:\\s|$)"));
+ return b
+ },
+ H = function (a, b) {
+ var c = a.attributes || {};
+ return (!b[1] || a.nodeName.toLowerCase() === b[1]) && (!b[2] || (c.id || {}).value === b[2]) && (!b[3] || b[3].test((c["class"] || {}).value))
+ },
+ I = function (a) {
+ return f.event.special.hover ? a : a.replace(B, "mouseenter$1 mouseleave$1")
+ };
+ f.event = {
+ add: function (a, c, d, e, g) {
+ var h, i, j, k, l, m, n, o, p, q, r, s;
+ if (!(a.nodeType === 3 || a.nodeType === 8 || !c || !d || !(h = f._data(a)))) {
+ d.handler && (p = d, d = p.handler, g = p.selector), d.guid || (d.guid = f.guid++), j = h.events, j || (h.events = j = {}), i = h.handle, i || (h.handle = i = function (a) {
+ return typeof f != "undefined" && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments) : b
+ }, i.elem = a), c = f.trim(I(c)).split(" ");
+ for (k = 0; k < c.length; k++) {
+ l = A.exec(c[k]) || [], m = l[1], n = (l[2] || "").split(".").sort(), s = f.event.special[m] || {}, m = (g ? s.delegateType : s.bindType) || m, s = f.event.special[m] || {}, o = f.extend({
+ type: m,
+ origType: l[1],
+ data: e,
+ handler: d,
+ guid: d.guid,
+ selector: g,
+ quick: g && G(g),
+ namespace: n.join(".")
+ }, p), r = j[m];
+ if (!r) {
+ r = j[m] = [], r.delegateCount = 0;
+ if (!s.setup || s.setup.call(a, e, n, i) === !1) a.addEventListener ? a.addEventListener(m, i, !1) : a.attachEvent && a.attachEvent("on" + m, i)
+ }
+ s.add && (s.add.call(a, o), o.handler.guid || (o.handler.guid = d.guid)), g ? r.splice(r.delegateCount++, 0, o) : r.push(o), f.event.global[m] = !0
+ }
+ a = null
+ }
+ },
+ global: {},
+ remove: function (a, b, c, d, e) {
+ var g = f.hasData(a) && f._data(a),
+ h, i, j, k, l, m, n, o, p, q, r, s;
+ if ( !! g && !! (o = g.events)) {
+ b = f.trim(I(b || "")).split(" ");
+ for (h = 0; h < b.length; h++) {
+ i = A.exec(b[h]) || [], j = k = i[1], l = i[2];
+ if (!j) {
+ for (j in o) f.event.remove(a, j + b[h], c, d, !0);
+ continue
+ }
+ p = f.event.special[j] || {}, j = (d ? p.delegateType : p.bindType) || j, r = o[j] || [], m = r.length, l = l ? new RegExp("(^|\\.)" + l.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
+ for (n = 0; n < r.length; n++) s = r[n], (e || k === s.origType) && (!c || c.guid === s.guid) && (!l || l.test(s.namespace)) && (!d || d === s.selector || d === "**" && s.selector) && (r.splice(n--, 1), s.selector && r.delegateCount--, p.remove && p.remove.call(a, s));
+ r.length === 0 && m !== r.length && ((!p.teardown || p.teardown.call(a, l) === !1) && f.removeEvent(a, j, g.handle), delete o[j])
+ }
+ f.isEmptyObject(o) && (q = g.handle, q && (q.elem = null), f.removeData(a, ["events", "handle"], !0))
+ }
+ },
+ customEvent: {
+ getData: !0,
+ setData: !0,
+ changeData: !0
+ },
+ trigger: function (c, d, e, g) {
+ if (!e || e.nodeType !== 3 && e.nodeType !== 8) {
+ var h = c.type || c,
+ i = [],
+ j, k, l, m, n, o, p, q, r, s;
+ if (E.test(h + f.event.triggered)) return;
+ h.indexOf("!") >= 0 && (h = h.slice(0, -1), k = !0), h.indexOf(".") >= 0 && (i = h.split("."), h = i.shift(), i.sort());
+ if ((!e || f.event.customEvent[h]) && !f.event.global[h]) return;
+ c = typeof c == "object" ? c[f.expando] ? c : new f.Event(h, c) : new f.Event(h), c.type = h, c.isTrigger = !0, c.exclusive = k, c.namespace = i.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + i.join("\\.(?:.*\\.)?") + "(\\.|$)") : null, o = h.indexOf(":") < 0 ? "on" + h : "";
+ if (!e) {
+ j = f.cache;
+ for (l in j) j[l].events && j[l].events[h] && f.event.trigger(c, d, j[l].handle.elem, !0);
+ return
+ }
+ c.result = b, c.target || (c.target = e), d = d != null ? f.makeArray(d) : [], d.unshift(c), p = f.event.special[h] || {};
+ if (p.trigger && p.trigger.apply(e, d) === !1) return;
+ r = [
+ [e, p.bindType || h]
+ ];
+ if (!g && !p.noBubble && !f.isWindow(e)) {
+ s = p.delegateType || h, m = E.test(s + h) ? e : e.parentNode, n = null;
+ for (; m; m = m.parentNode) r.push([m, s]), n = m;
+ n && n === e.ownerDocument && r.push([n.defaultView || n.parentWindow || a, s])
+ }
+ for (l = 0; l < r.length && !c.isPropagationStopped(); l++) m = r[l][0], c.type = r[l][1], q = (f._data(m, "events") || {})[c.type] && f._data(m, "handle"), q && q.apply(m, d), q = o && m[o], q && f.acceptData(m) && q.apply(m, d) === !1 && c.preventDefault();
+ c.type = h, !g && !c.isDefaultPrevented() && (!p._default || p._default.apply(e.ownerDocument, d) === !1) && (h !== "click" || !f.nodeName(e, "a")) && f.acceptData(e) && o && e[h] && (h !== "focus" && h !== "blur" || c.target.offsetWidth !== 0) && !f.isWindow(e) && (n = e[o], n && (e[o] = null), f.event.triggered = h, e[h](), f.event.triggered = b, n && (e[o] = n));
+ return c.result
+ }
+ },
+ dispatch: function (c) {
+ c = f.event.fix(c || a.event);
+ var d = (f._data(this, "events") || {})[c.type] || [],
+ e = d.delegateCount,
+ g = [].slice.call(arguments, 0),
+ h = !c.exclusive && !c.namespace,
+ i = f.event.special[c.type] || {},
+ j = [],
+ k, l, m, n, o, p, q, r, s, t, u;
+ g[0] = c, c.delegateTarget = this;
+ if (!i.preDispatch || i.preDispatch.call(this, c) !== !1) {
+ if (e && (!c.button || c.type !== "click")) {
+ n = f(this), n.context = this.ownerDocument || this;
+ for (m = c.target; m != this; m = m.parentNode || this) if (m.disabled !== !0) {
+ p = {}, r = [], n[0] = m;
+ for (k = 0; k < e; k++) s = d[k], t = s.selector, p[t] === b && (p[t] = s.quick ? H(m, s.quick) : n.is(t)), p[t] && r.push(s);
+ r.length && j.push({
+ elem: m,
+ matches: r
+ })
+ }
+ }
+ d.length > e && j.push({
+ elem: this,
+ matches: d.slice(e)
+ });
+ for (k = 0; k < j.length && !c.isPropagationStopped(); k++) {
+ q = j[k], c.currentTarget = q.elem;
+ for (l = 0; l < q.matches.length && !c.isImmediatePropagationStopped(); l++) {
+ s = q.matches[l];
+ if (h || !c.namespace && !s.namespace || c.namespace_re && c.namespace_re.test(s.namespace)) c.data = s.data, c.handleObj = s, o = ((f.event.special[s.origType] || {}).handle || s.handler).apply(q.elem, g), o !== b && (c.result = o, o === !1 && (c.preventDefault(), c.stopPropagation()))
+ }
+ }
+ i.postDispatch && i.postDispatch.call(this, c);
+ return c.result
+ }
+ },
+ props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+ fixHooks: {},
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function (a, b) {
+ a.which == null && (a.which = b.charCode != null ? b.charCode : b.keyCode);
+ return a
+ }
+ },
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (a, d) {
+ var e, f, g, h = d.button,
+ i = d.fromElement;
+ a.pageX == null && d.clientX != null && (e = a.target.ownerDocument || c, f = e.documentElement, g = e.body, a.pageX = d.clientX + (f && f.scrollLeft || g && g.scrollLeft || 0) - (f && f.clientLeft || g && g.clientLeft || 0), a.pageY = d.clientY + (f && f.scrollTop || g && g.scrollTop || 0) - (f && f.clientTop || g && g.clientTop || 0)), !a.relatedTarget && i && (a.relatedTarget = i === a.target ? d.toElement : i), !a.which && h !== b && (a.which = h & 1 ? 1 : h & 2 ? 3 : h & 4 ? 2 : 0);
+ return a
+ }
+ },
+ fix: function (a) {
+ if (a[f.expando]) return a;
+ var d, e, g = a,
+ h = f.event.fixHooks[a.type] || {},
+ i = h.props ? this.props.concat(h.props) : this.props;
+ a = f.Event(g);
+ for (d = i.length; d;) e = i[--d], a[e] = g[e];
+ a.target || (a.target = g.srcElement || c), a.target.nodeType === 3 && (a.target = a.target.parentNode), a.metaKey === b && (a.metaKey = a.ctrlKey);
+ return h.filter ? h.filter(a, g) : a
+ },
+ special: {
+ ready: {
+ setup: f.bindReady
+ },
+ load: {
+ noBubble: !0
+ },
+ focus: {
+ delegateType: "focusin"
+ },
+ blur: {
+ delegateType: "focusout"
+ },
+ beforeunload: {
+ setup: function (a, b, c) {
+ f.isWindow(this) && (this.onbeforeunload = c)
+ },
+ teardown: function (a, b) {
+ this.onbeforeunload === b && (this.onbeforeunload = null)
+ }
+ }
+ },
+ simulate: function (a, b, c, d) {
+ var e = f.extend(new f.Event, c, {
+ type: a,
+ isSimulated: !0,
+ originalEvent: {}
+ });
+ d ? f.event.trigger(e, null, b) : f.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
+ }
+ }, f.event.handle = f.event.dispatch, f.removeEvent = c.removeEventListener ?
+ function (a, b, c) {
+ a.removeEventListener && a.removeEventListener(b, c, !1)
+ } : function (a, b, c) {
+ a.detachEvent && a.detachEvent("on" + b, c)
+ }, f.Event = function (a, b) {
+ if (!(this instanceof f.Event)) return new f.Event(a, b);
+ a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? K : J) : this.type = a, b && f.extend(this, b), this.timeStamp = a && a.timeStamp || f.now(), this[f.expando] = !0
+ }, f.Event.prototype = {
+ preventDefault: function () {
+ this.isDefaultPrevented = K;
+ var a = this.originalEvent;
+ !a || (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
+ },
+ stopPropagation: function () {
+ this.isPropagationStopped = K;
+ var a = this.originalEvent;
+ !a || (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
+ },
+ stopImmediatePropagation: function () {
+ this.isImmediatePropagationStopped = K, this.stopPropagation()
+ },
+ isDefaultPrevented: J,
+ isPropagationStopped: J,
+ isImmediatePropagationStopped: J
+ }, f.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ }, function (a, b) {
+ f.event.special[a] = {
+ delegateType: b,
+ bindType: b,
+ handle: function (a) {
+ var c = this,
+ d = a.relatedTarget,
+ e = a.handleObj,
+ g = e.selector,
+ h;
+ if (!d || d !== c && !f.contains(c, d)) a.type = e.origType, h = e.handler.apply(this, arguments), a.type = b;
+ return h
+ }
+ }
+ }), f.support.submitBubbles || (f.event.special.submit = {
+ setup: function () {
+ if (f.nodeName(this, "form")) return !1;
+ f.event.add(this, "click._submit keypress._submit", function (a) {
+ var c = a.target,
+ d = f.nodeName(c, "input") || f.nodeName(c, "button") ? c.form : b;
+ d && !d._submit_attached && (f.event.add(d, "submit._submit", function (a) {
+ a._submit_bubble = !0
+ }), d._submit_attached = !0)
+ })
+ },
+ postDispatch: function (a) {
+ a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && f.event.simulate("submit", this.parentNode, a, !0))
+ },
+ teardown: function () {
+ if (f.nodeName(this, "form")) return !1;
+ f.event.remove(this, "._submit")
+ }
+ }), f.support.changeBubbles || (f.event.special.change = {
+ setup: function () {
+ if (z.test(this.nodeName)) {
+ if (this.type === "checkbox" || this.type === "radio") f.event.add(this, "propertychange._change", function (a) {
+ a.originalEvent.propertyName === "checked" && (this._just_changed = !0)
+ }), f.event.add(this, "click._change", function (a) {
+ this._just_changed && !a.isTrigger && (this._just_changed = !1, f.event.simulate("change", this, a, !0))
+ });
+ return !1
+ }
+ f.event.add(this, "beforeactivate._change", function (a) {
+ var b = a.target;
+ z.test(b.nodeName) && !b._change_attached && (f.event.add(b, "change._change", function (a) {
+ this.parentNode && !a.isSimulated && !a.isTrigger && f.event.simulate("change", this.parentNode, a, !0)
+ }), b._change_attached = !0)
+ })
+ },
+ handle: function (a) {
+ var b = a.target;
+ if (this !== b || a.isSimulated || a.isTrigger || b.type !== "radio" && b.type !== "checkbox") return a.handleObj.handler.apply(this, arguments)
+ },
+ teardown: function () {
+ f.event.remove(this, "._change");
+ return z.test(this.nodeName)
+ }
+ }), f.support.focusinBubbles || f.each({
+ focus: "focusin",
+ blur: "focusout"
+ }, function (a, b) {
+ var d = 0,
+ e = function (a) {
+ f.event.simulate(b, a.target, f.event.fix(a), !0)
+ };
+ f.event.special[b] = {
+ setup: function () {
+ d++ === 0 && c.addEventListener(a, e, !0)
+ },
+ teardown: function () {
+ --d === 0 && c.removeEventListener(a, e, !0)
+ }
+ }
+ }), f.fn.extend({
+ on: function (a, c, d, e, g) {
+ var h, i;
+ if (typeof a == "object") {
+ typeof c != "string" && (d = d || c, c = b);
+ for (i in a) this.on(i, c, d, a[i], g);
+ return this
+ }
+ d == null && e == null ? (e = c, d = c = b) : e == null && (typeof c == "string" ? (e = d, d = b) : (e = d, d = c, c = b));
+ if (e === !1) e = J;
+ else if (!e) return this;
+ g === 1 && (h = e, e = function (a) {
+ f().off(a);
+ return h.apply(this, arguments)
+ }, e.guid = h.guid || (h.guid = f.guid++));
+ return this.each(function () {
+ f.event.add(this, a, e, d, c)
+ })
+ },
+ one: function (a, b, c, d) {
+ return this.on(a, b, c, d, 1)
+ },
+ off: function (a, c, d) {
+ if (a && a.preventDefault && a.handleObj) {
+ var e = a.handleObj;
+ f(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler);
+ return this
+ }
+ if (typeof a == "object") {
+ for (var g in a) this.off(g, c, a[g]);
+ return this
+ }
+ if (c === !1 || typeof c == "function") d = c, c = b;
+ d === !1 && (d = J);
+ return this.each(function () {
+ f.event.remove(this, a, d, c)
+ })
+ },
+ bind: function (a, b, c) {
+ return this.on(a, null, b, c)
+ },
+ unbind: function (a, b) {
+ return this.off(a, null, b)
+ },
+ live: function (a, b, c) {
+ f(this.context).on(a, this.selector, b, c);
+ return this
+ },
+ die: function (a, b) {
+ f(this.context).off(a, this.selector || "**", b);
+ return this
+ },
+ delegate: function (a, b, c, d) {
+ return this.on(b, a, c, d)
+ },
+ undelegate: function (a, b, c) {
+ return arguments.length == 1 ? this.off(a, "**") : this.off(b, a, c)
+ },
+ trigger: function (a, b) {
+ return this.each(function () {
+ f.event.trigger(a, b, this)
+ })
+ },
+ triggerHandler: function (a, b) {
+ if (this[0]) return f.event.trigger(a, b, this[0], !0)
+ },
+ toggle: function (a) {
+ var b = arguments,
+ c = a.guid || f.guid++,
+ d = 0,
+ e = function (c) {
+ var e = (f._data(this, "lastToggle" + a.guid) || 0) % d;
+ f._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault();
+ return b[e].apply(this, arguments) || !1
+ };
+ e.guid = c;
+ while (d < b.length) b[d++].guid = c;
+ return this.click(e)
+ },
+ hover: function (a, b) {
+ return this.mouseenter(a).mouseleave(b || a)
+ }
+ }), f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
+ f.fn[b] = function (a, c) {
+ c == null && (c = a, a = null);
+ return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
+ }, f.attrFn && (f.attrFn[b] = !0), C.test(b) && (f.event.fixHooks[b] = f.event.keyHooks), D.test(b) && (f.event.fixHooks[b] = f.event.mouseHooks)
+ }), function () {
+ function x(a, b, c, e, f, g) {
+ for (var h = 0, i = e.length; h < i; h++) {
+ var j = e[h];
+ if (j) {
+ var k = !1;
+ j = j[a];
+ while (j) {
+ if (j[d] === c) {
+ k = e[j.sizset];
+ break
+ }
+ if (j.nodeType === 1) {
+ g || (j[d] = c, j.sizset = h);
+ if (typeof b != "string") {
+ if (j === b) {
+ k = !0;
+ break
+ }
+ } else if (m.filter(b, [j]).length > 0) {
+ k = j;
+ break
+ }
+ }
+ j = j[a]
+ }
+ e[h] = k
+ }
+ }
+ }
+ function w(a, b, c, e, f, g) {
+ for (var h = 0, i = e.length; h < i; h++) {
+ var j = e[h];
+ if (j) {
+ var k = !1;
+ j = j[a];
+ while (j) {
+ if (j[d] === c) {
+ k = e[j.sizset];
+ break
+ }
+ j.nodeType === 1 && !g && (j[d] = c, j.sizset = h);
+ if (j.nodeName.toLowerCase() === b) {
+ k = j;
+ break
+ }
+ j = j[a]
+ }
+ e[h] = k
+ }
+ }
+ }
+ var a = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ d = "sizcache" + (Math.random() + "").replace(".", ""),
+ e = 0,
+ g = Object.prototype.toString,
+ h = !1,
+ i = !0,
+ j = /\\/g,
+ k = /\r\n/g,
+ l = /\W/;
+ [0, 0].sort(function () {
+ i = !1;
+ return 0
+ });
+ var m = function (b, d, e, f) {
+ e = e || [], d = d || c;
+ var h = d;
+ if (d.nodeType !== 1 && d.nodeType !== 9) return [];
+ if (!b || typeof b != "string") return e;
+ var i, j, k, l, n, q, r, t, u = !0,
+ v = m.isXML(d),
+ w = [],
+ x = b;
+ do {
+ a.exec(""), i = a.exec(x);
+ if (i) {
+ x = i[3], w.push(i[1]);
+ if (i[2]) {
+ l = i[3];
+ break
+ }
+ }
+ } while (i);
+ if (w.length > 1 && p.exec(b)) if (w.length === 2 && o.relative[w[0]]) j = y(w[0] + w[1], d, f);
+ else {
+ j = o.relative[w[0]] ? [d] : m(w.shift(), d);
+ while (w.length) b = w.shift(), o.relative[b] && (b += w.shift()), j = y(b, j, f)
+ } else {
+ !f && w.length > 1 && d.nodeType === 9 && !v && o.match.ID.test(w[0]) && !o.match.ID.test(w[w.length - 1]) && (n = m.find(w.shift(), d, v), d = n.expr ? m.filter(n.expr, n.set)[0] : n.set[0]);
+ if (d) {
+ n = f ? {
+ expr: w.pop(),
+ set: s(f)
+ } : m.find(w.pop(), w.length === 1 && (w[0] === "~" || w[0] === "+") && d.parentNode ? d.parentNode : d, v), j = n.expr ? m.filter(n.expr, n.set) : n.set, w.length > 0 ? k = s(j) : u = !1;
+ while (w.length) q = w.pop(), r = q, o.relative[q] ? r = w.pop() : q = "", r == null && (r = d), o.relative[q](k, r, v)
+ } else k = w = []
+ }
+ k || (k = j), k || m.error(q || b);
+ if (g.call(k) === "[object Array]") if (!u) e.push.apply(e, k);
+ else if (d && d.nodeType === 1) for (t = 0; k[t] != null; t++) k[t] && (k[t] === !0 || k[t].nodeType === 1 && m.contains(d, k[t])) && e.push(j[t]);
+ else for (t = 0; k[t] != null; t++) k[t] && k[t].nodeType === 1 && e.push(j[t]);
+ else s(k, e);
+ l && (m(l, h, e, f), m.uniqueSort(e));
+ return e
+ };
+ m.uniqueSort = function (a) {
+ if (u) {
+ h = i, a.sort(u);
+ if (h) for (var b = 1; b < a.length; b++) a[b] === a[b - 1] && a.splice(b--, 1)
+ }
+ return a
+ }, m.matches = function (a, b) {
+ return m(a, null, null, b)
+ }, m.matchesSelector = function (a, b) {
+ return m(b, null, null, [a]).length > 0
+ }, m.find = function (a, b, c) {
+ var d, e, f, g, h, i;
+ if (!a) return [];
+ for (e = 0, f = o.order.length; e < f; e++) {
+ h = o.order[e];
+ if (g = o.leftMatch[h].exec(a)) {
+ i = g[1], g.splice(1, 1);
+ if (i.substr(i.length - 1) !== "\\") {
+ g[1] = (g[1] || "").replace(j, ""), d = o.find[h](g, b, c);
+ if (d != null) {
+ a = a.replace(o.match[h], "");
+ break
+ }
+ }
+ }
+ }
+ d || (d = typeof b.getElementsByTagName != "undefined" ? b.getElementsByTagName("*") : []);
+ return {
+ set: d,
+ expr: a
+ }
+ }, m.filter = function (a, c, d, e) {
+ var f, g, h, i, j, k, l, n, p, q = a,
+ r = [],
+ s = c,
+ t = c && c[0] && m.isXML(c[0]);
+ while (a && c.length) {
+ for (h in o.filter) if ((f = o.leftMatch[h].exec(a)) != null && f[2]) {
+ k = o.filter[h], l = f[1], g = !1, f.splice(1, 1);
+ if (l.substr(l.length - 1) === "\\") continue;
+ s === r && (r = []);
+ if (o.preFilter[h]) {
+ f = o.preFilter[h](f, s, d, r, e, t);
+ if (!f) g = i = !0;
+ else if (f === !0) continue
+ }
+ if (f) for (n = 0;
+ (j = s[n]) != null; n++) j && (i = k(j, f, n, s), p = e ^ i, d && i != null ? p ? g = !0 : s[n] = !1 : p && (r.push(j), g = !0));
+ if (i !== b) {
+ d || (s = r), a = a.replace(o.match[h], "");
+ if (!g) return [];
+ break
+ }
+ }
+ if (a === q) if (g == null) m.error(a);
+ else break;
+ q = a
+ }
+ return s
+ }, m.error = function (a) {
+ throw new Error("Syntax error, unrecognized expression: " + a)
+ };
+ var n = m.getText = function (a) {
+ var b, c, d = a.nodeType,
+ e = "";
+ if (d) {
+ if (d === 1 || d === 9 || d === 11) {
+ if (typeof a.textContent == "string") return a.textContent;
+ if (typeof a.innerText == "string") return a.innerText.replace(k, "");
+ for (a = a.firstChild; a; a = a.nextSibling) e += n(a)
+ } else if (d === 3 || d === 4) return a.nodeValue
+ } else for (b = 0; c = a[b]; b++) c.nodeType !== 8 && (e += n(c));
+ return e
+ },
+ o = m.selectors = {
+ order: ["ID", "NAME", "TAG"],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function (a) {
+ return a.getAttribute("href")
+ },
+ type: function (a) {
+ return a.getAttribute("type")
+ }
+ },
+ relative: {
+ "+": function (a, b) {
+ var c = typeof b == "string",
+ d = c && !l.test(b),
+ e = c && !d;
+ d && (b = b.toLowerCase());
+ for (var f = 0, g = a.length, h; f < g; f++) if (h = a[f]) {
+ while ((h = h.previousSibling) && h.nodeType !== 1);
+ a[f] = e || h && h.nodeName.toLowerCase() === b ? h || !1 : h === b
+ }
+ e && m.filter(b, a, !0)
+ },
+ ">": function (a, b) {
+ var c, d = typeof b == "string",
+ e = 0,
+ f = a.length;
+ if (d && !l.test(b)) {
+ b = b.toLowerCase();
+ for (; e < f; e++) {
+ c = a[e];
+ if (c) {
+ var g = c.parentNode;
+ a[e] = g.nodeName.toLowerCase() === b ? g : !1
+ }
+ }
+ } else {
+ for (; e < f; e++) c = a[e], c && (a[e] = d ? c.parentNode : c.parentNode === b);
+ d && m.filter(b, a, !0)
+ }
+ },
+ "": function (a, b, c) {
+ var d, f = e++,
+ g = x;
+ typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("parentNode", b, f, a, d, c)
+ },
+ "~": function (a, b, c) {
+ var d, f = e++,
+ g = x;
+ typeof b == "string" && !l.test(b) && (b = b.toLowerCase(), d = b, g = w), g("previousSibling", b, f, a, d, c)
+ }
+ },
+ find: {
+ ID: function (a, b, c) {
+ if (typeof b.getElementById != "undefined" && !c) {
+ var d = b.getElementById(a[1]);
+ return d && d.parentNode ? [d] : []
+ }
+ },
+ NAME: function (a, b) {
+ if (typeof b.getElementsByName != "undefined") {
+ var c = [],
+ d = b.getElementsByName(a[1]);
+ for (var e = 0, f = d.length; e < f; e++) d[e].getAttribute("name") === a[1] && c.push(d[e]);
+ return c.length === 0 ? null : c
+ }
+ },
+ TAG: function (a, b) {
+ if (typeof b.getElementsByTagName != "undefined") return b.getElementsByTagName(a[1])
+ }
+ },
+ preFilter: {
+ CLASS: function (a, b, c, d, e, f) {
+ a = " " + a[1].replace(j, "") + " ";
+ if (f) return a;
+ for (var g = 0, h;
+ (h = b[g]) != null; g++) h && (e ^ (h.className && (" " + h.className + " ").replace(/[\t\n\r]/g, " ").indexOf(a) >= 0) ? c || d.push(h) : c && (b[g] = !1));
+ return !1
+ },
+ ID: function (a) {
+ return a[1].replace(j, "")
+ },
+ TAG: function (a, b) {
+ return a[1].replace(j, "").toLowerCase()
+ },
+ CHILD: function (a) {
+ if (a[1] === "nth") {
+ a[2] || m.error(a[0]), a[2] = a[2].replace(/^\+|\s*/g, "");
+ var b = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2] === "even" && "2n" || a[2] === "odd" && "2n+1" || !/\D/.test(a[2]) && "0n+" + a[2] || a[2]);
+ a[2] = b[1] + (b[2] || 1) - 0, a[3] = b[3] - 0
+ } else a[2] && m.error(a[0]);
+ a[0] = e++;
+ return a
+ },
+ ATTR: function (a, b, c, d, e, f) {
+ var g = a[1] = a[1].replace(j, "");
+ !f && o.attrMap[g] && (a[1] = o.attrMap[g]), a[4] = (a[4] || a[5] || "").replace(j, ""), a[2] === "~=" && (a[4] = " " + a[4] + " ");
+ return a
+ },
+ PSEUDO: function (b, c, d, e, f) {
+ if (b[1] === "not") if ((a.exec(b[3]) || "").length > 1 || /^\w/.test(b[3])) b[3] = m(b[3], null, null, c);
+ else {
+ var g = m.filter(b[3], c, d, !0 ^ f);
+ d || e.push.apply(e, g);
+ return !1
+ } else if (o.match.POS.test(b[0]) || o.match.CHILD.test(b[0])) return !0;
+ return b
+ },
+ POS: function (a) {
+ a.unshift(!0);
+ return a
+ }
+ },
+ filters: {
+ enabled: function (a) {
+ return a.disabled === !1 && a.type !== "hidden"
+ },
+ disabled: function (a) {
+ return a.disabled === !0
+ },
+ checked: function (a) {
+ return a.checked === !0
+ },
+ selected: function (a) {
+ a.parentNode && a.parentNode.selectedIndex;
+ return a.selected === !0
+ },
+ parent: function (a) {
+ return !!a.firstChild
+ },
+ empty: function (a) {
+ return !a.firstChild
+ },
+ has: function (a, b, c) {
+ return !!m(c[3], a).length
+ },
+ header: function (a) {
+ return /h\d/i.test(a.nodeName)
+ },
+ text: function (a) {
+ var b = a.getAttribute("type"),
+ c = a.type;
+ return a.nodeName.toLowerCase() === "input" && "text" === c && (b === c || b === null)
+ },
+ radio: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "radio" === a.type
+ },
+ checkbox: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "checkbox" === a.type
+ },
+ file: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "file" === a.type
+ },
+ password: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "password" === a.type
+ },
+ submit: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return (b === "input" || b === "button") && "submit" === a.type
+ },
+ image: function (a) {
+ return a.nodeName.toLowerCase() === "input" && "image" === a.type
+ },
+ reset: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return (b === "input" || b === "button") && "reset" === a.type
+ },
+ button: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return b === "input" && "button" === a.type || b === "button"
+ },
+ input: function (a) {
+ return /input|select|textarea|button/i.test(a.nodeName)
+ },
+ focus: function (a) {
+ return a === a.ownerDocument.activeElement
+ }
+ },
+ setFilters: {
+ first: function (a, b) {
+ return b === 0
+ },
+ last: function (a, b, c, d) {
+ return b === d.length - 1
+ },
+ even: function (a, b) {
+ return b % 2 === 0
+ },
+ odd: function (a, b) {
+ return b % 2 === 1
+ },
+ lt: function (a, b, c) {
+ return b < c[3] - 0
+ },
+ gt: function (a, b, c) {
+ return b > c[3] - 0
+ },
+ nth: function (a, b, c) {
+ return c[3] - 0 === b
+ },
+ eq: function (a, b, c) {
+ return c[3] - 0 === b
+ }
+ },
+ filter: {
+ PSEUDO: function (a, b, c, d) {
+ var e = b[1],
+ f = o.filters[e];
+ if (f) return f(a, c, b, d);
+ if (e === "contains") return (a.textContent || a.innerText || n([a]) || "").indexOf(b[3]) >= 0;
+ if (e === "not") {
+ var g = b[3];
+ for (var h = 0, i = g.length; h < i; h++) if (g[h] === a) return !1;
+ return !0
+ }
+ m.error(e)
+ },
+ CHILD: function (a, b) {
+ var c, e, f, g, h, i, j, k = b[1],
+ l = a;
+ switch (k) {
+ case "only":
+ case "first":
+ while (l = l.previousSibling) if (l.nodeType === 1) return !1;
+ if (k === "first") return !0;
+ l = a;
+ case "last":
+ while (l = l.nextSibling) if (l.nodeType === 1) return !1;
+ return !0;
+ case "nth":
+ c = b[2], e = b[3];
+ if (c === 1 && e === 0) return !0;
+ f = b[0], g = a.parentNode;
+ if (g && (g[d] !== f || !a.nodeIndex)) {
+ i = 0;
+ for (l = g.firstChild; l; l = l.nextSibling) l.nodeType === 1 && (l.nodeIndex = ++i);
+ g[d] = f
+ }
+ j = a.nodeIndex - e;
+ return c === 0 ? j === 0 : j % c === 0 && j / c >= 0
+ }
+ },
+ ID: function (a, b) {
+ return a.nodeType === 1 && a.getAttribute("id") === b
+ },
+ TAG: function (a, b) {
+ return b === "*" && a.nodeType === 1 || !! a.nodeName && a.nodeName.toLowerCase() === b
+ },
+ CLASS: function (a, b) {
+ return (" " + (a.className || a.getAttribute("class")) + " ").indexOf(b) > -1
+ },
+ ATTR: function (a, b) {
+ var c = b[1],
+ d = m.attr ? m.attr(a, c) : o.attrHandle[c] ? o.attrHandle[c](a) : a[c] != null ? a[c] : a.getAttribute(c),
+ e = d + "",
+ f = b[2],
+ g = b[4];
+ return d == null ? f === "!=" : !f && m.attr ? d != null : f === "=" ? e === g : f === "*=" ? e.indexOf(g) >= 0 : f === "~=" ? (" " + e + " ").indexOf(g) >= 0 : g ? f === "!=" ? e !== g : f === "^=" ? e.indexOf(g) === 0 : f === "$=" ? e.substr(e.length - g.length) === g : f === "|=" ? e === g || e.substr(0, g.length + 1) === g + "-" : !1 : e && d !== !1
+ },
+ POS: function (a, b, c, d) {
+ var e = b[2],
+ f = o.setFilters[e];
+ if (f) return f(a, c, b, d)
+ }
+ }
+ },
+ p = o.match.POS,
+ q = function (a, b) {
+ return "\\" + (b - 0 + 1)
+ };
+ for (var r in o.match) o.match[r] = new RegExp(o.match[r].source + /(?![^\[]*\])(?![^\(]*\))/.source), o.leftMatch[r] = new RegExp(/(^(?:.|\r|\n)*?)/.source + o.match[r].source.replace(/\\(\d+)/g, q));
+ o.match.globalPOS = p;
+ var s = function (a, b) {
+ a = Array.prototype.slice.call(a, 0);
+ if (b) {
+ b.push.apply(b, a);
+ return b
+ }
+ return a
+ };
+ try {
+ Array.prototype.slice.call(c.documentElement.childNodes, 0)[0].nodeType
+ } catch (t) {
+ s = function (a, b) {
+ var c = 0,
+ d = b || [];
+ if (g.call(a) === "[object Array]") Array.prototype.push.apply(d, a);
+ else if (typeof a.length == "number") for (var e = a.length; c < e; c++) d.push(a[c]);
+ else for (; a[c]; c++) d.push(a[c]);
+ return d
+ }
+ }
+ var u, v;
+ c.documentElement.compareDocumentPosition ? u = function (a, b) {
+ if (a === b) {
+ h = !0;
+ return 0
+ }
+ if (!a.compareDocumentPosition || !b.compareDocumentPosition) return a.compareDocumentPosition ? -1 : 1;
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1
+ } : (u = function (a, b) {
+ if (a === b) {
+ h = !0;
+ return 0
+ }
+ if (a.sourceIndex && b.sourceIndex) return a.sourceIndex - b.sourceIndex;
+ var c, d, e = [],
+ f = [],
+ g = a.parentNode,
+ i = b.parentNode,
+ j = g;
+ if (g === i) return v(a, b);
+ if (!g) return -1;
+ if (!i) return 1;
+ while (j) e.unshift(j), j = j.parentNode;
+ j = i;
+ while (j) f.unshift(j), j = j.parentNode;
+ c = e.length, d = f.length;
+ for (var k = 0; k < c && k < d; k++) if (e[k] !== f[k]) return v(e[k], f[k]);
+ return k === c ? v(a, f[k], -1) : v(e[k], b, 1)
+ }, v = function (a, b, c) {
+ if (a === b) return c;
+ var d = a.nextSibling;
+ while (d) {
+ if (d === b) return -1;
+ d = d.nextSibling
+ }
+ return 1
+ }), function () {
+ var a = c.createElement("div"),
+ d = "script" + (new Date).getTime(),
+ e = c.documentElement;
+ a.innerHTML = "", e.insertBefore(a, e.firstChild), c.getElementById(d) && (o.find.ID = function (a, c, d) {
+ if (typeof c.getElementById != "undefined" && !d) {
+ var e = c.getElementById(a[1]);
+ return e ? e.id === a[1] || typeof e.getAttributeNode != "undefined" && e.getAttributeNode("id").nodeValue === a[1] ? [e] : b : []
+ }
+ }, o.filter.ID = function (a, b) {
+ var c = typeof a.getAttributeNode != "undefined" && a.getAttributeNode("id");
+ return a.nodeType === 1 && c && c.nodeValue === b
+ }), e.removeChild(a), e = a = null
+ }(), function () {
+ var a = c.createElement("div");
+ a.appendChild(c.createComment("")), a.getElementsByTagName("*").length > 0 && (o.find.TAG = function (a, b) {
+ var c = b.getElementsByTagName(a[1]);
+ if (a[1] === "*") {
+ var d = [];
+ for (var e = 0; c[e]; e++) c[e].nodeType === 1 && d.push(c[e]);
+ c = d
+ }
+ return c
+ }), a.innerHTML = "", a.firstChild && typeof a.firstChild.getAttribute != "undefined" && a.firstChild.getAttribute("href") !== "#" && (o.attrHandle.href = function (a) {
+ return a.getAttribute("href", 2)
+ }), a = null
+ }(), c.querySelectorAll &&
+ function () {
+ var a = m,
+ b = c.createElement("div"),
+ d = "__sizzle__";
+ b.innerHTML = "";
+ if (!b.querySelectorAll || b.querySelectorAll(".TEST").length !== 0) {
+ m = function (b, e, f, g) {
+ e = e || c;
+ if (!g && !m.isXML(e)) {
+ var h = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);
+ if (h && (e.nodeType === 1 || e.nodeType === 9)) {
+ if (h[1]) return s(e.getElementsByTagName(b), f);
+ if (h[2] && o.find.CLASS && e.getElementsByClassName) return s(e.getElementsByClassName(h[2]), f)
+ }
+ if (e.nodeType === 9) {
+ if (b === "body" && e.body) return s([e.body], f);
+ if (h && h[3]) {
+ var i = e.getElementById(h[3]);
+ if (!i || !i.parentNode) return s([], f);
+ if (i.id === h[3]) return s([i], f)
+ }
+ try {
+ return s(e.querySelectorAll(b), f)
+ } catch (j) {}
+ } else if (e.nodeType === 1 && e.nodeName.toLowerCase() !== "object") {
+ var k = e,
+ l = e.getAttribute("id"),
+ n = l || d,
+ p = e.parentNode,
+ q = /^\s*[+~]/.test(b);
+ l ? n = n.replace(/'/g, "\\$&") : e.setAttribute("id", n), q && p && (e = e.parentNode);
+ try {
+ if (!q || p) return s(e.querySelectorAll("[id='" + n + "'] " + b), f)
+ } catch (r) {} finally {
+ l || k.removeAttribute("id")
+ }
+ }
+ }
+ return a(b, e, f, g)
+ };
+ for (var e in a) m[e] = a[e];
+ b = null
+ }
+ }(), function () {
+ var a = c.documentElement,
+ b = a.matchesSelector || a.mozMatchesSelector || a.webkitMatchesSelector || a.msMatchesSelector;
+ if (b) {
+ var d = !b.call(c.createElement("div"), "div"),
+ e = !1;
+ try {
+ b.call(c.documentElement, "[test!='']:sizzle")
+ } catch (f) {
+ e = !0
+ }
+ m.matchesSelector = function (a, c) {
+ c = c.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+ if (!m.isXML(a)) try {
+ if (e || !o.match.PSEUDO.test(c) && !/!=/.test(c)) {
+ var f = b.call(a, c);
+ if (f || !d || a.document && a.document.nodeType !== 11) return f
+ }
+ } catch (g) {}
+ return m(c, null, null, [a]).length > 0
+ }
+ }
+ }(), function () {
+ var a = c.createElement("div");
+ a.innerHTML = "";
+ if ( !! a.getElementsByClassName && a.getElementsByClassName("e").length !== 0) {
+ a.lastChild.className = "e";
+ if (a.getElementsByClassName("e").length === 1) return;
+ o.order.splice(1, 0, "CLASS"), o.find.CLASS = function (a, b, c) {
+ if (typeof b.getElementsByClassName != "undefined" && !c) return b.getElementsByClassName(a[1])
+ }, a = null
+ }
+ }(), c.documentElement.contains ? m.contains = function (a, b) {
+ return a !== b && (a.contains ? a.contains(b) : !0)
+ } : c.documentElement.compareDocumentPosition ? m.contains = function (a, b) {
+ return !!(a.compareDocumentPosition(b) & 16)
+ } : m.contains = function () {
+ return !1
+ }, m.isXML = function (a) {
+ var b = (a ? a.ownerDocument || a : 0).documentElement;
+ return b ? b.nodeName !== "HTML" : !1
+ };
+ var y = function (a, b, c) {
+ var d, e = [],
+ f = "",
+ g = b.nodeType ? [b] : b;
+ while (d = o.match.PSEUDO.exec(a)) f += d[0], a = a.replace(o.match.PSEUDO, "");
+ a = o.relative[a] ? a + "*" : a;
+ for (var h = 0, i = g.length; h < i; h++) m(a, g[h], e, c);
+ return m.filter(f, e)
+ };
+ m.attr = f.attr, m.selectors.attrMap = {}, f.find = m, f.expr = m.selectors, f.expr[":"] = f.expr.filters, f.unique = m.uniqueSort, f.text = m.getText, f.isXMLDoc = m.isXML, f.contains = m.contains
+ }();
+ var L = /Until$/,
+ M = /^(?:parents|prevUntil|prevAll)/,
+ N = /,/,
+ O = /^.[^:#\[\.,]*$/,
+ P = Array.prototype.slice,
+ Q = f.expr.match.globalPOS,
+ R = {
+ children: !0,
+ contents: !0,
+ next: !0,
+ prev: !0
+ };
+ f.fn.extend({
+ find: function (a) {
+ var b = this,
+ c, d;
+ if (typeof a != "string") return f(a).filter(function () {
+ for (c = 0, d = b.length; c < d; c++) if (f.contains(b[c], this)) return !0
+ });
+ var e = this.pushStack("", "find", a),
+ g, h, i;
+ for (c = 0, d = this.length; c < d; c++) {
+ g = e.length, f.find(a, this[c], e);
+ if (c > 0) for (h = g; h < e.length; h++) for (i = 0; i < g; i++) if (e[i] === e[h]) {
+ e.splice(h--, 1);
+ break
+ }
+ }
+ return e
+ },
+ has: function (a) {
+ var b = f(a);
+ return this.filter(function () {
+ for (var a = 0, c = b.length; a < c; a++) if (f.contains(this, b[a])) return !0
+ })
+ },
+ not: function (a) {
+ return this.pushStack(T(this, a, !1), "not", a)
+ },
+ filter: function (a) {
+ return this.pushStack(T(this, a, !0), "filter", a)
+ },
+ is: function (a) {
+ return !!a && (typeof a == "string" ? Q.test(a) ? f(a, this.context).index(this[0]) >= 0 : f.filter(a, this).length > 0 : this.filter(a).length > 0)
+ },
+ closest: function (a, b) {
+ var c = [],
+ d, e, g = this[0];
+ if (f.isArray(a)) {
+ var h = 1;
+ while (g && g.ownerDocument && g !== b) {
+ for (d = 0; d < a.length; d++) f(g).is(a[d]) && c.push({
+ selector: a[d],
+ elem: g,
+ level: h
+ });
+ g = g.parentNode, h++
+ }
+ return c
+ }
+ var i = Q.test(a) || typeof a != "string" ? f(a, b || this.context) : 0;
+ for (d = 0, e = this.length; d < e; d++) {
+ g = this[d];
+ while (g) {
+ if (i ? i.index(g) > -1 : f.find.matchesSelector(g, a)) {
+ c.push(g);
+ break
+ }
+ g = g.parentNode;
+ if (!g || !g.ownerDocument || g === b || g.nodeType === 11) break
+ }
+ }
+ c = c.length > 1 ? f.unique(c) : c;
+ return this.pushStack(c, "closest", a)
+ },
+ index: function (a) {
+ if (!a) return this[0] && this[0].parentNode ? this.prevAll().length : -1;
+ if (typeof a == "string") return f.inArray(this[0], f(a));
+ return f.inArray(a.jquery ? a[0] : a, this)
+ },
+ add: function (a, b) {
+ var c = typeof a == "string" ? f(a, b) : f.makeArray(a && a.nodeType ? [a] : a),
+ d = f.merge(this.get(), c);
+ return this.pushStack(S(c[0]) || S(d[0]) ? d : f.unique(d))
+ },
+ andSelf: function () {
+ return this.add(this.prevObject)
+ }
+ }), f.each({
+ parent: function (a) {
+ var b = a.parentNode;
+ return b && b.nodeType !== 11 ? b : null
+ },
+ parents: function (a) {
+ return f.dir(a, "parentNode")
+ },
+ parentsUntil: function (a, b, c) {
+ return f.dir(a, "parentNode", c)
+ },
+ next: function (a) {
+ return f.nth(a, 2, "nextSibling")
+ },
+ prev: function (a) {
+ return f.nth(a, 2, "previousSibling")
+ },
+ nextAll: function (a) {
+ return f.dir(a, "nextSibling")
+ },
+ prevAll: function (a) {
+ return f.dir(a, "previousSibling")
+ },
+ nextUntil: function (a, b, c) {
+ return f.dir(a, "nextSibling", c)
+ },
+ prevUntil: function (a, b, c) {
+ return f.dir(a, "previousSibling", c)
+ },
+ siblings: function (a) {
+ return f.sibling((a.parentNode || {}).firstChild, a)
+ },
+ children: function (a) {
+ return f.sibling(a.firstChild)
+ },
+ contents: function (a) {
+ return f.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : f.makeArray(a.childNodes)
+ }
+ }, function (a, b) {
+ f.fn[a] = function (c, d) {
+ var e = f.map(this, b, c);
+ L.test(a) || (d = c), d && typeof d == "string" && (e = f.filter(d, e)), e = this.length > 1 && !R[a] ? f.unique(e) : e, (this.length > 1 || N.test(d)) && M.test(a) && (e = e.reverse());
+ return this.pushStack(e, a, P.call(arguments).join(","))
+ }
+ }), f.extend({
+ filter: function (a, b, c) {
+ c && (a = ":not(" + a + ")");
+ return b.length === 1 ? f.find.matchesSelector(b[0], a) ? [b[0]] : [] : f.find.matches(a, b)
+ },
+ dir: function (a, c, d) {
+ var e = [],
+ g = a[c];
+ while (g && g.nodeType !== 9 && (d === b || g.nodeType !== 1 || !f(g).is(d))) g.nodeType === 1 && e.push(g), g = g[c];
+ return e
+ },
+ nth: function (a, b, c, d) {
+ b = b || 1;
+ var e = 0;
+ for (; a; a = a[c]) if (a.nodeType === 1 && ++e === b) break;
+ return a
+ },
+ sibling: function (a, b) {
+ var c = [];
+ for (; a; a = a.nextSibling) a.nodeType === 1 && a !== b && c.push(a);
+ return c
+ }
+ });
+ var V = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ W = / jQuery\d+="(?:\d+|null)"/g,
+ X = /^\s+/,
+ Y = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ Z = /<([\w:]+)/,
+ $ = /]", "i"),
+ bd = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ be = /\/(java|ecma)script/i,
+ bf = /^\s*", ""],
+ legend: [1, ""],
+ thead: [1, ""],
+ tr: [2, ""],
+ td: [3, ""],
+ col: [2, ""],
+ area: [1, ""],
+ _default: [0, "", ""]
+ },
+ bh = U(c);
+ bg.optgroup = bg.option, bg.tbody = bg.tfoot = bg.colgroup = bg.caption = bg.thead, bg.th = bg.td, f.support.htmlSerialize || (bg._default = [1, "div", "
"]), f.fn.extend({
+ text: function (a) {
+ return f.access(this, function (a) {
+ return a === b ? f.text(this) : this.empty().append((this[0] && this[0].ownerDocument || c).createTextNode(a))
+ }, null, a, arguments.length)
+ },
+ wrapAll: function (a) {
+ if (f.isFunction(a)) return this.each(function (b) {
+ f(this).wrapAll(a.call(this, b))
+ });
+ if (this[0]) {
+ var b = f(a, this[0].ownerDocument).eq(0).clone(!0);
+ this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
+ var a = this;
+ while (a.firstChild && a.firstChild.nodeType === 1) a = a.firstChild;
+ return a
+ }).append(this)
+ }
+ return this
+ },
+ wrapInner: function (a) {
+ if (f.isFunction(a)) return this.each(function (b) {
+ f(this).wrapInner(a.call(this, b))
+ });
+ return this.each(function () {
+ var b = f(this),
+ c = b.contents();
+ c.length ? c.wrapAll(a) : b.append(a)
+ })
+ },
+ wrap: function (a) {
+ var b = f.isFunction(a);
+ return this.each(function (c) {
+ f(this).wrapAll(b ? a.call(this, c) : a)
+ })
+ },
+ unwrap: function () {
+ return this.parent().each(function () {
+ f.nodeName(this, "body") || f(this).replaceWith(this.childNodes)
+ }).end()
+ },
+ append: function () {
+ return this.domManip(arguments, !0, function (a) {
+ this.nodeType === 1 && this.appendChild(a)
+ })
+ },
+ prepend: function () {
+ return this.domManip(arguments, !0, function (a) {
+ this.nodeType === 1 && this.insertBefore(a, this.firstChild)
+ })
+ },
+ before: function () {
+ if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
+ this.parentNode.insertBefore(a, this)
+ });
+ if (arguments.length) {
+ var a = f.clean(arguments);
+ a.push.apply(a, this.toArray());
+ return this.pushStack(a, "before", arguments)
+ }
+ },
+ after: function () {
+ if (this[0] && this[0].parentNode) return this.domManip(arguments, !1, function (a) {
+ this.parentNode.insertBefore(a, this.nextSibling)
+ });
+ if (arguments.length) {
+ var a = this.pushStack(this, "after", arguments);
+ a.push.apply(a, f.clean(arguments));
+ return a
+ }
+ },
+ remove: function (a, b) {
+ for (var c = 0, d;
+ (d = this[c]) != null; c++) if (!a || f.filter(a, [d]).length)!b && d.nodeType === 1 && (f.cleanData(d.getElementsByTagName("*")), f.cleanData([d])), d.parentNode && d.parentNode.removeChild(d);
+ return this
+ },
+ empty: function () {
+ for (var a = 0, b;
+ (b = this[a]) != null; a++) {
+ b.nodeType === 1 && f.cleanData(b.getElementsByTagName("*"));
+ while (b.firstChild) b.removeChild(b.firstChild)
+ }
+ return this
+ },
+ clone: function (a, b) {
+ a = a == null ? !1 : a, b = b == null ? a : b;
+ return this.map(function () {
+ return f.clone(this, a, b)
+ })
+ },
+ html: function (a) {
+ return f.access(this, function (a) {
+ var c = this[0] || {},
+ d = 0,
+ e = this.length;
+ if (a === b) return c.nodeType === 1 ? c.innerHTML.replace(W, "") : null;
+ if (typeof a == "string" && !ba.test(a) && (f.support.leadingWhitespace || !X.test(a)) && !bg[(Z.exec(a) || ["", ""])[1].toLowerCase()]) {
+ a = a.replace(Y, "<$1>$2>");
+ try {
+ for (; d < e; d++) c = this[d] || {}, c.nodeType === 1 && (f.cleanData(c.getElementsByTagName("*")), c.innerHTML = a);
+ c = 0
+ } catch (g) {}
+ }
+ c && this.empty().append(a)
+ }, null, a, arguments.length)
+ },
+ replaceWith: function (a) {
+ if (this[0] && this[0].parentNode) {
+ if (f.isFunction(a)) return this.each(function (b) {
+ var c = f(this),
+ d = c.html();
+ c.replaceWith(a.call(this, b, d))
+ });
+ typeof a != "string" && (a = f(a).detach());
+ return this.each(function () {
+ var b = this.nextSibling,
+ c = this.parentNode;
+ f(this).remove(), b ? f(b).before(a) : f(c).append(a)
+ })
+ }
+ return this.length ? this.pushStack(f(f.isFunction(a) ? a() : a), "replaceWith", a) : this
+ },
+ detach: function (a) {
+ return this.remove(a, !0)
+ },
+ domManip: function (a, c, d) {
+ var e, g, h, i, j = a[0],
+ k = [];
+ if (!f.support.checkClone && arguments.length === 3 && typeof j == "string" && bd.test(j)) return this.each(function () {
+ f(this).domManip(a, c, d, !0)
+ });
+ if (f.isFunction(j)) return this.each(function (e) {
+ var g = f(this);
+ a[0] = j.call(this, e, c ? g.html() : b), g.domManip(a, c, d)
+ });
+ if (this[0]) {
+ i = j && j.parentNode, f.support.parentNode && i && i.nodeType === 11 && i.childNodes.length === this.length ? e = {
+ fragment: i
+ } : e = f.buildFragment(a, this, k), h = e.fragment, h.childNodes.length === 1 ? g = h = h.firstChild : g = h.firstChild;
+ if (g) {
+ c = c && f.nodeName(g, "tr");
+ for (var l = 0, m = this.length, n = m - 1; l < m; l++) d.call(c ? bi(this[l], g) : this[l], e.cacheable || m > 1 && l < n ? f.clone(h, !0, !0) : h)
+ }
+ k.length && f.each(k, function (a, b) {
+ b.src ? f.ajax({
+ type: "GET",
+ global: !1,
+ url: b.src,
+ async: !1,
+ dataType: "script"
+ }) : f.globalEval((b.text || b.textContent || b.innerHTML || "").replace(bf, "/*$0*/")), b.parentNode && b.parentNode.removeChild(b)
+ })
+ }
+ return this
+ }
+ }), f.buildFragment = function (a, b, d) {
+ var e, g, h, i, j = a[0];
+ b && b[0] && (i = b[0].ownerDocument || b[0]), i.createDocumentFragment || (i = c), a.length === 1 && typeof j == "string" && j.length < 512 && i === c && j.charAt(0) === "<" && !bb.test(j) && (f.support.checkClone || !bd.test(j)) && (f.support.html5Clone || !bc.test(j)) && (g = !0, h = f.fragments[j], h && h !== 1 && (e = h)), e || (e = i.createDocumentFragment(), f.clean(a, i, e, d)), g && (f.fragments[j] = h ? e : 1);
+ return {
+ fragment: e,
+ cacheable: g
+ }
+ }, f.fragments = {}, f.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (a, b) {
+ f.fn[a] = function (c) {
+ var d = [],
+ e = f(c),
+ g = this.length === 1 && this[0].parentNode;
+ if (g && g.nodeType === 11 && g.childNodes.length === 1 && e.length === 1) {
+ e[b](this[0]);
+ return this
+ }
+ for (var h = 0, i = e.length; h < i; h++) {
+ var j = (h > 0 ? this.clone(!0) : this).get();
+ f(e[h])[b](j), d = d.concat(j)
+ }
+ return this.pushStack(d, a, e.selector)
+ }
+ }), f.extend({
+ clone: function (a, b, c) {
+ var d, e, g, h = f.support.html5Clone || f.isXMLDoc(a) || !bc.test("<" + a.nodeName + ">") ? a.cloneNode(!0) : bo(a);
+ if ((!f.support.noCloneEvent || !f.support.noCloneChecked) && (a.nodeType === 1 || a.nodeType === 11) && !f.isXMLDoc(a)) {
+ bk(a, h), d = bl(a), e = bl(h);
+ for (g = 0; d[g]; ++g) e[g] && bk(d[g], e[g])
+ }
+ if (b) {
+ bj(a, h);
+ if (c) {
+ d = bl(a), e = bl(h);
+ for (g = 0; d[g]; ++g) bj(d[g], e[g])
+ }
+ }
+ d = e = null;
+ return h
+ },
+ clean: function (a, b, d, e) {
+ var g, h, i, j = [];
+ b = b || c, typeof b.createElement == "undefined" && (b = b.ownerDocument || b[0] && b[0].ownerDocument || c);
+ for (var k = 0, l;
+ (l = a[k]) != null; k++) {
+ typeof l == "number" && (l += "");
+ if (!l) continue;
+ if (typeof l == "string") if (!_.test(l)) l = b.createTextNode(l);
+ else {
+ l = l.replace(Y, "<$1>$2>");
+ var m = (Z.exec(l) || ["", ""])[1].toLowerCase(),
+ n = bg[m] || bg._default,
+ o = n[0],
+ p = b.createElement("div"),
+ q = bh.childNodes,
+ r;
+ b === c ? bh.appendChild(p) : U(b).appendChild(p), p.innerHTML = n[1] + l + n[2];
+ while (o--) p = p.lastChild;
+ if (!f.support.tbody) {
+ var s = $.test(l),
+ t = m === "table" && !s ? p.firstChild && p.firstChild.childNodes : n[1] === "" && !s ? p.childNodes : [];
+ for (i = t.length - 1; i >= 0; --i) f.nodeName(t[i], "tbody") && !t[i].childNodes.length && t[i].parentNode.removeChild(t[i])
+ }!f.support.leadingWhitespace && X.test(l) && p.insertBefore(b.createTextNode(X.exec(l)[0]), p.firstChild), l = p.childNodes, p && (p.parentNode.removeChild(p), q.length > 0 && (r = q[q.length - 1], r && r.parentNode && r.parentNode.removeChild(r)))
+ }
+ var u;
+ if (!f.support.appendChecked) if (l[0] && typeof (u = l.length) == "number") for (i = 0; i < u; i++) bn(l[i]);
+ else bn(l);
+ l.nodeType ? j.push(l) : j = f.merge(j, l)
+ }
+ if (d) {
+ g = function (a) {
+ return !a.type || be.test(a.type)
+ };
+ for (k = 0; j[k]; k++) {
+ h = j[k];
+ if (e && f.nodeName(h, "script") && (!h.type || be.test(h.type))) e.push(h.parentNode ? h.parentNode.removeChild(h) : h);
+ else {
+ if (h.nodeType === 1) {
+ var v = f.grep(h.getElementsByTagName("script"), g);
+ j.splice.apply(j, [k + 1, 0].concat(v))
+ }
+ d.appendChild(h)
+ }
+ }
+ }
+ return j
+ },
+ cleanData: function (a) {
+ var b, c, d = f.cache,
+ e = f.event.special,
+ g = f.support.deleteExpando;
+ for (var h = 0, i;
+ (i = a[h]) != null; h++) {
+ if (i.nodeName && f.noData[i.nodeName.toLowerCase()]) continue;
+ c = i[f.expando];
+ if (c) {
+ b = d[c];
+ if (b && b.events) {
+ for (var j in b.events) e[j] ? f.event.remove(i, j) : f.removeEvent(i, j, b.handle);
+ b.handle && (b.handle.elem = null)
+ }
+ g ? delete i[f.expando] : i.removeAttribute && i.removeAttribute(f.expando), delete d[c]
+ }
+ }
+ }
+ });
+ var bp = /alpha\([^)]*\)/i,
+ bq = /opacity=([^)]*)/,
+ br = /([A-Z]|^ms)/g,
+ bs = /^[\-+]?(?:\d*\.)?\d+$/i,
+ bt = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
+ bu = /^([\-+])=([\-+.\de]+)/,
+ bv = /^margin/,
+ bw = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ },
+ bx = ["Top", "Right", "Bottom", "Left"],
+ by, bz, bA;
+ f.fn.css = function (a, c) {
+ return f.access(this, function (a, c, d) {
+ return d !== b ? f.style(a, c, d) : f.css(a, c)
+ }, a, c, arguments.length > 1)
+ }, f.extend({
+ cssHooks: {
+ opacity: {
+ get: function (a, b) {
+ if (b) {
+ var c = by(a, "opacity");
+ return c === "" ? "1" : c
+ }
+ return a.style.opacity
+ }
+ }
+ },
+ cssNumber: {
+ fillOpacity: !0,
+ fontWeight: !0,
+ lineHeight: !0,
+ opacity: !0,
+ orphans: !0,
+ widows: !0,
+ zIndex: !0,
+ zoom: !0
+ },
+ cssProps: {
+ "float": f.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+ style: function (a, c, d, e) {
+ if ( !! a && a.nodeType !== 3 && a.nodeType !== 8 && !! a.style) {
+ var g, h, i = f.camelCase(c),
+ j = a.style,
+ k = f.cssHooks[i];
+ c = f.cssProps[i] || i;
+ if (d === b) {
+ if (k && "get" in k && (g = k.get(a, !1, e)) !== b) return g;
+ return j[c]
+ }
+ h = typeof d, h === "string" && (g = bu.exec(d)) && (d = +(g[1] + 1) * +g[2] + parseFloat(f.css(a, c)), h = "number");
+ if (d == null || h === "number" && isNaN(d)) return;
+ h === "number" && !f.cssNumber[i] && (d += "px");
+ if (!k || !("set" in k) || (d = k.set(a, d)) !== b) try {
+ j[c] = d
+ } catch (l) {}
+ }
+ },
+ css: function (a, c, d) {
+ var e, g;
+ c = f.camelCase(c), g = f.cssHooks[c], c = f.cssProps[c] || c, c === "cssFloat" && (c = "float");
+ if (g && "get" in g && (e = g.get(a, !0, d)) !== b) return e;
+ if (by) return by(a, c)
+ },
+ swap: function (a, b, c) {
+ var d = {},
+ e, f;
+ for (f in b) d[f] = a.style[f], a.style[f] = b[f];
+ e = c.call(a);
+ for (f in b) a.style[f] = d[f];
+ return e
+ }
+ }), f.curCSS = f.css, c.defaultView && c.defaultView.getComputedStyle && (bz = function (a, b) {
+ var c, d, e, g, h = a.style;
+ b = b.replace(br, "-$1").toLowerCase(), (d = a.ownerDocument.defaultView) && (e = d.getComputedStyle(a, null)) && (c = e.getPropertyValue(b), c === "" && !f.contains(a.ownerDocument.documentElement, a) && (c = f.style(a, b))), !f.support.pixelMargin && e && bv.test(b) && bt.test(c) && (g = h.width, h.width = c, c = e.width, h.width = g);
+ return c
+ }), c.documentElement.currentStyle && (bA = function (a, b) {
+ var c, d, e, f = a.currentStyle && a.currentStyle[b],
+ g = a.style;
+ f == null && g && (e = g[b]) && (f = e), bt.test(f) && (c = g.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), g.left = b === "fontSize" ? "1em" : f, f = g.pixelLeft + "px", g.left = c, d && (a.runtimeStyle.left = d));
+ return f === "" ? "auto" : f
+ }), by = bz || bA, f.each(["height", "width"], function (a, b) {
+ f.cssHooks[b] = {
+ get: function (a, c, d) {
+ if (c) return a.offsetWidth !== 0 ? bB(a, b, d) : f.swap(a, bw, function () {
+ return bB(a, b, d)
+ })
+ },
+ set: function (a, b) {
+ return bs.test(b) ? b + "px" : b
+ }
+ }
+ }), f.support.opacity || (f.cssHooks.opacity = {
+ get: function (a, b) {
+ return bq.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? parseFloat(RegExp.$1) / 100 + "" : b ? "1" : ""
+ },
+ set: function (a, b) {
+ var c = a.style,
+ d = a.currentStyle,
+ e = f.isNumeric(b) ? "alpha(opacity=" + b * 100 + ")" : "",
+ g = d && d.filter || c.filter || "";
+ c.zoom = 1;
+ if (b >= 1 && f.trim(g.replace(bp, "")) === "") {
+ c.removeAttribute("filter");
+ if (d && !d.filter) return
+ }
+ c.filter = bp.test(g) ? g.replace(bp, e) : g + " " + e
+ }
+ }), f(function () {
+ f.support.reliableMarginRight || (f.cssHooks.marginRight = {
+ get: function (a, b) {
+ return f.swap(a, {
+ display: "inline-block"
+ }, function () {
+ return b ? by(a, "margin-right") : a.style.marginRight
+ })
+ }
+ })
+ }), f.expr && f.expr.filters && (f.expr.filters.hidden = function (a) {
+ var b = a.offsetWidth,
+ c = a.offsetHeight;
+ return b === 0 && c === 0 || !f.support.reliableHiddenOffsets && (a.style && a.style.display || f.css(a, "display")) === "none"
+ }, f.expr.filters.visible = function (a) {
+ return !f.expr.filters.hidden(a)
+ }), f.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function (a, b) {
+ f.cssHooks[a + b] = {
+ expand: function (c) {
+ var d, e = typeof c == "string" ? c.split(" ") : [c],
+ f = {};
+ for (d = 0; d < 4; d++) f[a + bx[d] + b] = e[d] || e[d - 2] || e[0];
+ return f
+ }
+ }
+ });
+ var bC = /%20/g,
+ bD = /\[\]$/,
+ bE = /\r?\n/g,
+ bF = /#.*$/,
+ bG = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
+ bH = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ bI = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+ bJ = /^(?:GET|HEAD)$/,
+ bK = /^\/\//,
+ bL = /\?/,
+ bM = /