// Basic JavaScript BN library - subset useful for RSA encryption.
// prng4.js - uses Arcfour as a PRNG
// Random number generator - requires a PRNG backend, e.g. prng4.js
// Depends on jsbn.js and rng.js
// Copyright (c) 2005  Tom Wu
// All Rights Reserved.
// See "LICENSE" for details.
// Incapsulated by Francesco Sullo (www.sullof.com), december 2006

// AES Cipher function: use 'key' to encrypt 'input' with Rijndael algorithm
// JavaScript implementation: Chris Veness, Movable Type Ltd: www.movable-type.co.uk
// http://www.movable-type.co.uk/scripts/AES.html
// You are welcome to re-use these scripts [without any warranty express or implied]
// provided you retain my copyright notice and when possible a link to my website.
// If you have any queries or find any problems, please contact Chris Veness.
//
// Incapsulated by Francesco Sullo, www.sullof.com (01 dec 2006)

// aSSL - Ajax Secure Service Layer - version 1.2beta3
// Copyright (c) 2006, 2007 Francesco Sullo, www.sullof.com
//
// aSSL is freely distributable under the terms of the following MIT license:
//
// Permission is hereby granted, free of charge, to any person obtaining a copy 
// of this software and associated documentation files (the "Software"), to 
// deal in the Software without restriction, including without limitation the 
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 
// sell copies of the Software, and to permit persons to whom the Software is 
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in 
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
// IN THE SOFTWARE.
//
// For more information about aSSL look at: http://assl.sullof.com

JSBN={dbits:null,canary:244837814094590,j_lm:((this.canary&16777215)==15715070),BI_FP:52,BI_RM:"0123456789abcdefghijklmnopqrstuvwxyz",BI_RC:new Array(),nbi:function(){return new JSBN.BigInteger(null)},am1:function(E,A,B,D,G,F){while(--F>=0){var C=A*this[E++]+B[D]+G;G=Math.floor(C/67108864);B[D++]=C&67108863}return G},am2:function(E,J,K,D,H,A){var G=J&32767,I=J>>15;while(--A>=0){var C=this[E]&32767;var F=this[E++]>>15;var B=I*C+F*G;C=G*C+((B&32767)<<15)+K[D]+(H&1073741823);H=(C>>>30)+(B>>>15)+I*F+(H>>>30);K[D++]=C&1073741823}return H},am3:function(E,J,K,D,H,A){var G=J&16383,I=J>>14;while(--A>=0){var C=this[E]&16383;var F=this[E++]>>14;var B=I*C+F*G;C=G*C+((B&16383)<<14)+K[D]+H;H=(C>>28)+(B>>14)+I*F;K[D++]=C&268435455}return H},am_init:function(){if(JSBN.j_lm&&(navigator.appName=="Microsoft Internet Explorer")){JSBN.BigInteger.prototype.am=JSBN.am2;JSBN.dbits=30}else{if(JSBN.j_lm&&(navigator.appName!="Netscape")){JSBN.BigInteger.prototype.am=JSBN.am1;JSBN.dbits=26}else{JSBN.BigInteger.prototype.am=JSBN.am3;JSBN.dbits=28}}},digit_conversions:function(){var A,B;A="0".charCodeAt(0);for(B=0;B<=9;++B){JSBN.BI_RC[A++]=B}A="a".charCodeAt(0);for(B=10;B<36;++B){JSBN.BI_RC[A++]=B}A="A".charCodeAt(0);for(B=10;B<36;++B){JSBN.BI_RC[A++]=B}},int2char:function(A){return JSBN.BI_RM.charAt(A)},intAt:function(B,A){var C=JSBN.BI_RC[B.charCodeAt(A)];return(C==null)?-1:C},nbv:function(A){var B=JSBN.nbi();B.fromInt(A);return B},nbits:function(A){var C=1,B;if((B=A>>>16)!=0){A=B;C+=16}if((B=A>>8)!=0){A=B;C+=8}if((B=A>>4)!=0){A=B;C+=4}if((B=A>>2)!=0){A=B;C+=2}if((B=A>>1)!=0){A=B;C+=1}return C}};JSBN.Classic=function(A){this.m=A;this.convert=function B(C){if(C.s<0||C.compareTo(this.m)>=0){return C.mod(this.m)}else{return C}};this.revert=function(C){return C};this.reduce=function(C){C.divRemTo(this.m,null,C)};this.mulTo=function(C,E,D){C.multiplyTo(E,D);this.reduce(D)};this.sqrTo=function(C,D){C.squareTo(D);this.reduce(D)}};JSBN.Montgomery=function(A){this.m=A;this.mp=A.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<(A.DB-15))-1;this.mt2=2*A.t;this.convert=function(B){var C=JSBN.nbi();B.abs().dlShiftTo(this.m.t,C);C.divRemTo(this.m,null,C);if(B.s<0&&C.compareTo(JSBN.BigInteger.ZERO)>0){this.m.subTo(C,C)}return C};this.revert=function(B){var C=JSBN.nbi();B.copyTo(C);this.reduce(C);return C};this.reduce=function(B){while(B.t<=this.mt2){B[B.t++]=0}for(var D=0;D<this.m.t;++D){var C=B[D]&32767;var E=(C*this.mpl+(((C*this.mph+(B[D]>>15)*this.mpl)&this.um)<<15))&B.DM;C=D+this.m.t;B[C]+=this.m.am(0,E,B,D,0,this.m.t);while(B[C]>=B.DV){B[C]-=B.DV;B[++C]++}}B.clamp();B.drShiftTo(this.m.t,B);if(B.compareTo(this.m)>=0){B.subTo(this.m,B)}};this.sqrTo=function(B,C){B.squareTo(C);this.reduce(C)};this.mulTo=function(B,D,C){B.multiplyTo(D,C);this.reduce(C)}};JSBN.BigInteger=function(B,A,C){if(B!=null){if("number"==typeof B){this.fromNumber(B,A,C)}else{if(A==null&&"string"!=typeof B){this.fromString(B,256)}else{this.fromString(B,A)}}}};if(1){var BI=JSBN.BigInteger;JSBN.am_init();BI.prototype.DB=JSBN.dbits;BI.prototype.DM=((1<<JSBN.dbits)-1);BI.prototype.DV=(1<<JSBN.dbits);BI.prototype.FV=Math.pow(2,JSBN.BI_FP);BI.prototype.F1=JSBN.BI_FP-JSBN.dbits;BI.prototype.F2=2*JSBN.dbits-JSBN.BI_FP;JSBN.digit_conversions();BI.prototype.copyTo=function(B){for(var A=this.t-1;A>=0;--A){B[A]=this[A]}B.t=this.t;B.s=this.s};BI.prototype.fromInt=function(A){this.t=1;this.s=(A<0)?-1:0;if(A>0){this[0]=A}else{if(A<-1){this[0]=A+DV}else{this.t=0}}};BI.prototype.fromString=function(G,B){var D;if(B==16){D=4}else{if(B==8){D=3}else{if(B==256){D=8}else{if(B==2){D=1}else{if(B==32){D=5}else{if(B==4){D=2}else{this.fromRadix(G,B);return }}}}}}this.t=0;this.s=0;var F=G.length,C=false,E=0;while(--F>=0){var A=(D==8)?G[F]&255:JSBN.intAt(G,F);if(A<0){if(G.charAt(F)=="-"){C=true}continue}C=false;if(E==0){this[this.t++]=A}else{if(E+D>this.DB){this[this.t-1]|=(A&((1<<(this.DB-E))-1))<<E;this[this.t++]=(A>>(this.DB-E))}else{this[this.t-1]|=A<<E}}E+=D;if(E>=this.DB){E-=this.DB}}if(D==8&&(G[0]&128)!=0){this.s=-1;if(E>0){this[this.t-1]|=((1<<(this.DB-E))-1)<<E}}this.clamp();if(C){JSBN.BigInteger.ZERO.subTo(this,this)}};BI.prototype.clamp=function(){var A=this.s&this.DM;while(this.t>0&&this[this.t-1]==A){--this.t}};BI.prototype.toString=function(B){if(this.s<0){return"-"+this.negate().toString(B)}var C;if(B==16){C=4}else{if(B==8){C=3}else{if(B==2){C=1}else{if(B==32){C=5}else{if(B==4){C=2}else{return this.toRadix(B)}}}}}var E=(1<<C)-1,H,A=false,F="",D=this.t;var G=this.DB-(D*this.DB)%C;if(D-->0){if(G<this.DB&&(H=this[D]>>G)>0){A=true;F=JSBN.int2char(H)}while(D>=0){if(G<C){H=(this[D]&((1<<G)-1))<<(C-G);H|=this[--D]>>(G+=this.DB-C)}else{H=(this[D]>>(G-=C))&E;if(G<=0){G+=this.DB;--D}}if(H>0){A=true}if(A){F+=JSBN.int2char(H)}}}return A?F:"0"};BI.prototype.negate=function(){var A=JSBN.nbi();JSBN.BigInteger.ZERO.subTo(this,A);return A};BI.prototype.abs=function(){return(this.s<0)?this.negate():this};BI.prototype.compareTo=function(A){var C=this.s-A.s;if(C!=0){return C}var B=this.t;C=B-A.t;if(C!=0){return C}while(--B>=0){if((C=this[B]-A[B])!=0){return C}}return 0};BI.prototype.bitLength=function(){if(this.t<=0){return 0}return this.DB*(this.t-1)+JSBN.nbits(this[this.t-1]^(this.s&this.DM))};BI.prototype.dlShiftTo=function(C,B){var A;for(A=this.t-1;A>=0;--A){B[A+C]=this[A]}for(A=C-1;A>=0;--A){B[A]=0}B.t=this.t+C;B.s=this.s};BI.prototype.drShiftTo=function(C,B){for(var A=C;A<this.t;++A){B[A-C]=this[A]}B.t=Math.max(this.t-C,0);B.s=this.s};BI.prototype.lShiftTo=function(H,D){var B=H%this.DB;var A=this.DB-B;var F=(1<<A)-1;var E=Math.floor(H/this.DB),G=(this.s<<B)&this.DM,C;for(C=this.t-1;C>=0;--C){D[C+E+1]=(this[C]>>A)|G;G=(this[C]&F)<<B}for(C=E-1;C>=0;--C){D[C]=0}D[E]=G;D.t=this.t+E+1;D.s=this.s;D.clamp()};BI.prototype.rShiftTo=function(G,D){D.s=this.s;var E=Math.floor(G/this.DB);if(E>=this.t){D.t=0;return }var B=G%this.DB;var A=this.DB-B;var F=(1<<B)-1;D[0]=this[E]>>B;for(var C=E+1;C<this.t;++C){D[C-E-1]|=(this[C]&F)<<A;D[C-E]=this[C]>>B}if(B>0){D[this.t-E-1]|=(this.s&F)<<A}D.t=this.t-E;D.clamp()};BI.prototype.subTo=function(B,D){var C=0,E=0,A=Math.min(B.t,this.t);while(C<A){E+=this[C]-B[C];D[C++]=E&this.DM;E>>=this.DB}if(B.t<this.t){E-=B.s;while(C<this.t){E+=this[C];D[C++]=E&this.DM;E>>=this.DB}E+=this.s}else{E+=this.s;while(C<B.t){E-=B[C];D[C++]=E&this.DM;E>>=this.DB}E-=B.s}D.s=(E<0)?-1:0;if(E<-1){D[C++]=this.DV+E}else{if(E>0){D[C++]=E}}D.t=C;D.clamp()};BI.prototype.multiplyTo=function(B,D){var A=this.abs(),E=B.abs();var C=A.t;D.t=C+E.t;while(--C>=0){D[C]=0}for(C=0;C<E.t;++C){D[C+A.t]=A.am(0,E[C],D,C,0,A.t)}D.s=0;D.clamp();if(this.s!=B.s){JSBN.BigInteger.ZERO.subTo(D,D)}};BI.prototype.squareTo=function(C){var A=this.abs();var B=C.t=2*A.t;while(--B>=0){C[B]=0}for(B=0;B<A.t-1;++B){var D=A.am(B,A[B],C,2*B,0,1);if((C[B+A.t]+=A.am(B+1,2*A[B],C,2*B+1,D,A.t-B-1))>=A.DV){C[B+A.t]-=A.DV;C[B+A.t+1]=1}}if(C.t>0){C[C.t-1]+=A.am(B,A[B],C,2*B,0,1)}C.s=0;C.clamp()};BI.prototype.divRemTo=function(J,G,F){var P=J.abs();if(P.t<=0){return }var H=this.abs();if(H.t<P.t){if(G!=null){G.fromInt(0)}if(F!=null){this.copyTo(F)}return }if(F==null){F=JSBN.nbi()}var D=JSBN.nbi(),A=this.s,I=J.s;var O=this.DB-JSBN.nbits(P[P.t-1]);if(O>0){P.lShiftTo(O,D);H.lShiftTo(O,F)}else{P.copyTo(D);H.copyTo(F)}var L=D.t;var B=D[L-1];if(B==0){return }var K=B*(1<<this.F1)+((L>1)?D[L-2]>>this.F2:0);var S=this.FV/K,R=(1<<this.F1)/K,Q=1<<this.F2;var N=F.t,M=N-L,E=(G==null)?JSBN.nbi():G;D.dlShiftTo(M,E);if(F.compareTo(E)>=0){F[F.t++]=1;F.subTo(E,F)}JSBN.BigInteger.ONE.dlShiftTo(L,E);E.subTo(D,D);while(D.t<L){D[D.t++]=0}while(--M>=0){var C=(F[--N]==B)?this.DM:Math.floor(F[N]*S+(F[N-1]+Q)*R);if((F[N]+=D.am(0,C,F,M,0,L))<C){D.dlShiftTo(M,E);F.subTo(E,F);while(F[N]<--C){F.subTo(E,F)}}}if(G!=null){F.drShiftTo(L,G);if(A!=I){JSBN.BigInteger.ZERO.subTo(G,G)}}F.t=L;F.clamp();if(O>0){F.rShiftTo(O,F)}if(A<0){JSBN.BigInteger.ZERO.subTo(F,F)}};BI.prototype.mod=function(A){var B=JSBN.nbi();this.abs().divRemTo(A,null,B);if(this.s<0&&B.compareTo(JSBN.BigInteger.ZERO)>0){A.subTo(B,B)}return B};BI.prototype.invDigit=function(){if(this.t<1){return 0}var A=this[0];if((A&1)==0){return 0}var B=A&3;B=(B*(2-(A&15)*B))&15;B=(B*(2-(A&255)*B))&255;B=(B*(2-(((A&65535)*B)&65535)))&65535;B=(B*(2-A*B%this.DV))%this.DV;return(B>0)?this.DV-B:-B};BI.prototype.isEven=function(){return((this.t>0)?(this[0]&1):this.s)==0};BI.prototype.exp=function(F,G){if(F>4294967295||F<1){return JSBN.BigInteger.ONE}var E=JSBN.nbi(),A=JSBN.nbi(),D=G.convert(this),C=JSBN.nbits(F)-1;D.copyTo(E);while(--C>=0){G.sqrTo(E,A);if((F&(1<<C))>0){G.mulTo(A,D,E)}else{var B=E;E=A;A=B}}return G.revert(E)};BI.prototype.modPowInt=function(B,A){var C;if(B<256||A.isEven()){C=new JSBN.Classic(A)}else{C=new JSBN.Montgomery(A)}return this.exp(B,C)};BI.ZERO=JSBN.nbv(0);BI.ONE=JSBN.nbv(1)}if(typeof JSBN!="undefined"){JSBN.PRNG4={Arcfour:function(){this.i=0;this.j=0;this.S=new Array();this.init=function(D){var C,A,B;for(C=0;C<256;++C){this.S[C]=C}A=0;for(C=0;C<256;++C){A=(A+this.S[C]+D[C%D.length])&255;B=this.S[C];this.S[C]=this.S[A];this.S[A]=B}this.i=0;this.j=0};this.next=function(){var A;this.i=(this.i+1)&255;this.j=(this.j+this.S[this.i])&255;A=this.S[this.i];this.S[this.i]=this.S[this.j];this.S[this.j]=A;return this.S[(A+this.S[this.i])&255]}},prng_newstate:function(){return new this.Arcfour()},rng_psize:256}}if(typeof JSBN!="undefined"){JSBN.RNG={rng_state:null,rng_pool:[],rng_pptr:0,rng_seed_int:function(A){var B=JSBN.RNG;B.rng_pool[B.rng_pptr++]^=A&255;B.rng_pool[B.rng_pptr++]^=(A>>8)&255;B.rng_pool[B.rng_pptr++]^=(A>>16)&255;B.rng_pool[B.rng_pptr++]^=(A>>24)&255;if(B.rng_pptr>=JSBN.PRNG4.rng_psize){B.rng_pptr-=JSBN.PRNG4.rng_psize}},rng_seed_time:function(){JSBN.RNG.rng_seed_int(new Date().getTime())},pool_init:function(){var A,C=JSBN.RNG;if(navigator.appName=="Netscape"&&navigator.appVersion<"5"&&window.crypto){var B=window.crypto.random(32);for(A=0;A<B.length;++A){C.rng_pool[C.rng_pptr++]=B.charCodeAt(A)&255}}while(C.rng_pptr<JSBN.PRNG4.rng_psize){A=Math.floor(65536*Math.random());C.rng_pool[C.rng_pptr++]=A>>>8;C.rng_pool[C.rng_pptr++]=A&255}C.rng_pptr=0;C.rng_seed_time()},rng_get_byte:function(){var A=JSBN.RNG;if(A.rng_state==null){A.rng_seed_time();A.rng_state=JSBN.PRNG4.prng_newstate();A.rng_state.init(A.rng_pool);for(A.rng_pptr=0;A.rng_pptr<A.rng_pool.length;++A.rng_pptr){A.rng_pool[A.rng_pptr]=0}A.rng_pptr=0}return A.rng_state.next()},SecureRandom:function(){this.nextBytes=function(B){var A;for(A=0;A<B.length;++A){B[A]=JSBN.RNG.rng_get_byte()}}}}}JSBN.RNG.pool_init();if(typeof JSBN!="undefined"){JSBN.RSA={parseBigInt:function(B,A){return new JSBN.BigInteger(B,A)},linebrk:function(C,D){var A="";var B=0;while(B+D<C.length){A+=C.substring(B,B+D)+"\n";B+=D}return A+C.substring(B,C.length)},byte2Hex:function(A){if(A<16){return"0"+A.toString(16)}else{return A.toString(16)}},pkcs1pad2:function(D,F){if(F<D.length+11){return null}var E=new Array();var C=D.length-1;while(C>=0&&F>0){E[--F]=D.charCodeAt(C--)}E[--F]=0;var B=new JSBN.RNG.SecureRandom();var A=new Array();while(F>2){A[0]=0;while(A[0]==0){B.nextBytes(A)}E[--F]=A[0]}E[--F]=2;E[--F]=0;return new JSBN.BigInteger(E)},RSAKey:function(){this.n=null;this.e=0;this.d=null;this.p=null;this.q=null;this.dmp1=null;this.dmq1=null;this.coeff=null;this.setPublic=function(B,A){if(B!=null&&A!=null&&B.length>0&&A.length>0){this.n=JSBN.RSA.parseBigInt(B,16);this.e=parseInt(A,16)}else{alert("Invalid RSA public key")}};this.doPublic=function(A){return A.modPowInt(this.e,this.n)};this.encrypt=function(C){var A=JSBN.RSA.pkcs1pad2(C,(this.n.bitLength()+7)>>3);if(A==null){return null}var D=this.doPublic(A);if(D==null){return null}var B=D.toString(16);if((B.length&1)==0){return B}else{return"0"+B}}}}}AES={Cipher:function(F,H,G){var C=H.length/4;var I=C+6;var E=4;var A=[[],[],[],[]];for(var D=0;D<4*E;D++){A[D%4][Math.floor(D/4)]=F[D]}A=this.AddRoundKey(A,G,0,E);for(var J=1;J<I;J++){A=this.SubBytes(A,E);A=this.ShiftRows(A,E);A=this.MixColumns(A,E);A=this.AddRoundKey(A,G,J,E)}A=this.SubBytes(A,E);A=this.ShiftRows(A,E);A=this.AddRoundKey(A,G,I,E);var B=new Array(4*E);for(var D=0;D<4*E;D++){B[D]=A[D%4][Math.floor(D/4)]}return B},SubBytes:function(B,A){for(var C=0;C<4;C++){for(var D=0;D<A;D++){B[C][D]=this.Sbox[B[C][D]]}}return B},ShiftRows:function(C,A){var B=new Array(4);for(var D=1;D<4;D++){for(var E=0;E<4;E++){B[E]=C[D][(E+D)%A]}for(var E=0;E<4;E++){C[D][E]=B[E]}}return C},MixColumns:function(E,C){for(var F=0;F<4;F++){var B=new Array(4);var A=new Array(4);for(var D=0;D<4;D++){B[D]=E[D][F];A[D]=E[D][F]&128?E[D][F]<<1^283:E[D][F]<<1}E[0][F]=A[0]^B[1]^A[1]^B[2]^B[3];E[1][F]=B[0]^A[1]^B[2]^A[2]^B[3];E[2][F]=B[0]^B[1]^A[2]^B[3]^A[3];E[3][F]=B[0]^A[0]^B[1]^B[2]^A[3]}return E},AddRoundKey:function(E,A,C,B){for(var D=0;D<4;D++){for(var F=0;F<B;F++){E[D][F]^=A[C*4+F][D]}}return E},KeyExpansion:function(F){var B=F.length/4;var G=B+6;var D=4;var E=new Array(D*(G+1));var H=new Array(4);for(var C=0;C<B;C++){var A=[F[4*C],F[4*C+1],F[4*C+2],F[4*C+3]];E[C]=A}for(var C=B;C<(D*(G+1));C++){E[C]=new Array(4);for(var I=0;I<4;I++){H[I]=E[C-1][I]}if(C%B==0){H=this.SubWord(this.RotWord(H));for(var I=0;I<4;I++){H[I]^=this.Rcon[C/B][I]}}else{if(B>6&&C%B==4){H=this.SubWord(H)}}for(var I=0;I<4;I++){E[C][I]=E[C-B][I]^H[I]}}return E},SubWord:function(A){for(var B=0;B<4;B++){A[B]=this.Sbox[A[B]]}return A},RotWord:function(A){A[4]=A[0];for(var B=0;B<4;B++){A[B]=A[B+1]}return A},Sbox:[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],Rcon:[[0,0,0,0],[1,0,0,0],[2,0,0,0],[4,0,0,0],[8,0,0,0],[16,0,0,0],[32,0,0,0],[64,0,0,0],[128,0,0,0],[27,0,0,0],[54,0,0,0]],encrypt:function(F,A){F=escape(F).replace(/%20/g," ");var D=new Array(16);for(var K=0;K<16;K++){D[K]=A.charCodeAt(K)}var M=this.KeyExpansion([0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]);var S=this.Cipher(D,D,M);var B=new Array(16);var L=(new Date()).getTime();for(var K=0;K<8;K++){B[K]=(L>>>K*8)&255}var P=this.KeyExpansion(S);var J=Math.ceil(F.length/16);var R=new Array(J);for(var Q=0;Q<J;Q++){for(var O=0;O<8;O++){B[15-O]=(Q>>>O*8)&255}var E=this.Cipher(B,S,P);var I=Q<J-1?16:(F.length-1)%16+1;var C="";for(var K=0;K<I;K++){var N=F.charCodeAt(Q*16+K);var H=N^E[K];C+=String.fromCharCode(H)}R[Q]=this.escCtrlChars(C)}var G="";for(var K=0;K<4;K++){G+=String.fromCharCode(B[K])}G=this.escCtrlChars(G);return G+"+"+R.join("+")},decrypt:function(D,N){var O=new Array(16);for(var G=0;G<16;G++){O[G]=N.charCodeAt(G)}var F=this.KeyExpansion([0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]);var M=this.Cipher(O,O,F);var C=this.KeyExpansion(M);D=D.split("+");var E=new Array(16);var A=this.unescCtrlChars(D[0]);for(var G=0;G<8;G++){E[G]=A.charCodeAt(G%4)}var B=new Array(D.length-1);for(var L=1;L<D.length;L++){for(var K=0;K<8;K++){E[15-K]=((L-1)>>>K*8)&255}var H=this.Cipher(E,M,C);D[L]=this.unescCtrlChars(D[L]);var P="";for(var G=0;G<D[L].length;G++){var J=D[L].charCodeAt(G);var I=J^H[G];P+=String.fromCharCode(I)}B[L]=P}return unescape(B.join(""))},escCtrlChars:function(A){return A.replace(/[\0\n\v\f\r\xa0+!]/g,function(B){return"!"+B.charCodeAt(0)+"!"})},unescCtrlChars:function(A){return A.replace(/!\d\d?\d?!/g,function(B){return String.fromCharCode(B.slice(1,-1))})},byteArrayToHexStr:function(A){var C="";for(var B=0;B<A.length;B++){C+=A[B].toString(16)+" "}return C}};aSSL={vername:"aSSL",version:"1.2beta3",verdate:"2006-01-08",onlyMantainSession:true,connections:[],_init:function(C){aSSL._current=C?C:"0";var B=aSSL._current,A=aSSL.connections;if(!A[B]){A[B]=[]}return A[B]},keySize:16,_randomKeyGenerator:function(G){var B,F=!G||isNaN(G)?this.keySize:G,C=[];for(var A=0;A<F;A++){B=Math.floor(Math.random()*257);if(B==0||B==257){A--;continue}C[C.length]=B}var E="";for(var D=0;D<C.length;D++){E+=C[D].toString(16)}return E},_getStringFromHex:function(C){var B="";for(var A=0;A<32;A=A+2){B+=String.fromCharCode(parseInt(C.substring(A,A+2),16))}return B},encrypt:function(A,B){var C=this._getStringFromHex(this._init(B).key);return this.encode(AES.encrypt(A,C))},decrypt:function(A,B){var C=this._getStringFromHex(this._init(B).key);return AES.decrypt(this.decode(A),C)},connect:function(C,E,D){var B=this._init(D);var A=new Date();B._startedAt=A.getTime();B.connUrl=C;B.response=E;aSSL._request(C,{aSSLConnName:this._current,aSSLOMS:B.sessionTimeout&&this.onlyMantainSession?1:""},this._connect2)},_connect2:function(C){var B=aSSL.connections[aSSL._current];if(B.sessionTimeout&&aSSL.onlyMantainSession){aSSL._afterConn()}else{B.key=aSSL._randomKeyGenerator();var D=new JSBN.RSA.RSAKey();var A=C.responseText.split("|");D.setPublic(A[0],A[1]);var C=D.encrypt(B.key);var E=JSBN.RSA.linebrk(C,256);aSSL._request(B.connUrl,{aSSLConnName:aSSL._current,aSSLCKey:E},aSSL._afterConn)}},_afterConn:function(B){var A,D=aSSL.connections[aSSL._current];if(B){A=parseInt(B.responseText,10)}if(A){D.sessionTimeout=A}if(D.sessionTimeout){D.timeId=setTimeout("aSSL._autoConnect('"+aSSL._current+"')",1000*(D.sessionTimeout-30))}var C=new Date();D.timeElapsed=C.getTime()-D._startedAt;if(D.response){D.response(B)}},_autoConnect:function(B){var A=aSSL.connections[B];clearTimeout(A.timeId);aSSL.connect(A.connUrl)},debug:function(){},_transport:function(){if(typeof XMLHttpRequest!="undefined"){return new XMLHttpRequest()}else{try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(A){}}return aSSL.debug("XMLHttpRequest not supported")},_request:function(B,D,F){if(!B){return aSSL.debug("Url missing.")}var C=D||{};B=this._setUrl(B)+aSSL.toQuerystr(C);var A=F||function(){};var E=aSSL._transport();aSSL.pendings++;E.onreadystatechange=function(){aSSL.pendings--;if(E.readyState==4){A(E)}};E.open("GET",B,true);E.send(null)},_setUrl:function(A){return A.split("#")[0]+(/(\?|&)$/.test(A)?"":(/&/.test(A)||/\?[^\?]+/.test(A))?"&":"?")},toQuerystr:function(B){var C="";for(var A in B){if(B[A]){C+=(C?"&":"")+A+"="+B[A]}else{break}}return C},querystr:function(B){var A=[];var F=B?B:location.search.replace(/^\?/,"");A[0]=F;var E=F.split("&");for(var C=0;C<E.length;C++){var D=E[C].split("=");A[D[0]]=D[1]}return A},encode:function(A){var B=this._strToLongs(A);var D="";for(var C=0;C<B.length;C++){D+=(D?"x":"")+B[C]}return D},decode:function(A){var C=A.split("x");v=[];str="";for(var B=0;B<C.length;B++){v[B]=parseInt(C[B],10);str+=C[B]+"\n"}return this._longsToStr(v).replace(/\0+$/,"")},_strToLongs:function(C){var D=Math.ceil(C.length/4);var A=new Array(D);for(var B=0;B<D;B++){A[B]=C.charCodeAt(B*4)+(C.charCodeAt(B*4+1)<<8)+(C.charCodeAt(B*4+2)<<16)+(C.charCodeAt(B*4+3)<<24)}return A},_longsToStr:function(B){var A=new Array(B.length);for(var C=0;C<B.length;C++){A[C]=String.fromCharCode(B[C]&255,B[C]>>>8&255,B[C]>>>16&255,B[C]>>>24&255)}return A.join("")}};