>>0?1:0),w=c.low=w+P,c.high=B+F+(w>>>0>>0?1:0),m=a.low=m+O,a.high=k+W+(m>>>0>>0?1:0),x=h.low=x+U,h.high=S+I+(x>>>0>>0?1:0),r=l.low=r+X,l.high=b+K+(r>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[30+(128+i>>>10<<5)]=Math.floor(r/4294967296),e[31+(128+i>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=e.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});t.SHA512=e._createHelper(r),t.HmacSHA512=e._createHmacHelper(r)}(),P=(M=U).x64,c=P.Word,f=P.WordArray,P=M.algo,d=P.SHA512,P=P.SHA384=d.extend({_doReset:function(){this._hash=new f.init([new c.init(3418070365,3238371032),new c.init(1654270250,914150663),new c.init(2438529370,812702999),new c.init(355462360,4144912697),new c.init(1731405415,4290775857),new c.init(2394180231,1750603025),new c.init(3675008525,1694076839),new c.init(1203062813,3204075428)])},_doFinalize:function(){var t=d._doFinalize.call(this);return t.sigBytes-=16,t}}),M.SHA384=d._createHelper(P),M.HmacSHA384=d._createHmacHelper(P),function(l){var t=U,e=t.lib,f=e.WordArray,i=e.Hasher,d=t.x64.Word,e=t.algo,A=[],H=[],z=[];!function(){for(var t=1,e=0,r=0;r<24;r++){A[t+5*e]=(r+1)*(r+2)/2%64;var i=(2*t+3*e)%5;t=e%5,e=i}for(t=0;t<5;t++)for(e=0;e<5;e++)H[t+5*e]=e+(2*t+3*e)%5*5;for(var n=1,o=0;o<24;o++){for(var s,c=0,a=0,h=0;h<7;h++)1&n&&((s=(1<>>24)|4278255360&(o<<24|o>>>8);(m=r[n]).high^=s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),m.low^=o}for(var c=0;c<24;c++){for(var a=0;a<5;a++){for(var h=0,l=0,f=0;f<5;f++)h^=(m=r[a+5*f]).high,l^=m.low;var d=C[a];d.high=h,d.low=l}for(a=0;a<5;a++)for(var u=C[(a+4)%5],p=C[(a+1)%5],_=p.high,p=p.low,h=u.high^(_<<1|p>>>31),l=u.low^(p<<1|_>>>31),f=0;f<5;f++)(m=r[a+5*f]).high^=h,m.low^=l;for(var y=1;y<25;y++){var v=(m=r[y]).high,g=m.low,B=A[y];l=B<32?(h=v<>>32-B,g<>>32-B):(h=g<>>64-B,v<>>64-B);B=C[H[y]];B.high=h,B.low=l}var w=C[0],k=r[0];w.high=k.high,w.low=k.low;for(a=0;a<5;a++)for(f=0;f<5;f++){var m=r[y=a+5*f],S=C[y],x=C[(a+1)%5+5*f],b=C[(a+2)%5+5*f];m.high=S.high^~x.high&b.high,m.low=S.low^~x.low&b.low}m=r[0],k=z[c];m.high^=k.high,m.low^=k.low}},_doFinalize:function(){var t=this._data,e=t.words,r=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;e[r>>>5]|=1<<24-r%32,e[(l.ceil((1+r)/i)*i>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var n=this._state,e=this.cfg.outputLength/8,o=e/8,s=[],c=0;c>>24)|4278255360&(h<<24|h>>>8);s.push(a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)),s.push(h)}return new f.init(s,e)},clone:function(){for(var t=i.clone.call(this),e=t._state=this._state.slice(0),r=0;r<25;r++)e[r]=e[r].clone();return t}});t.SHA3=i._createHelper(e),t.HmacSHA3=i._createHmacHelper(e)}(Math),Math,F=(w=U).lib,u=F.WordArray,p=F.Hasher,F=w.algo,S=u.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),x=u.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),b=u.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),A=u.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),H=u.create([0,1518500249,1859775393,2400959708,2840853838]),z=u.create([1352829926,1548603684,1836072691,2053994217,0]),F=F.RIPEMD160=p.extend({_doReset:function(){this._hash=u.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=0;r<16;r++){var i=e+r,n=t[i];t[i]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}for(var o,s,c,a,h,l,f=this._hash.words,d=H.words,u=z.words,p=S.words,_=x.words,y=b.words,v=A.words,g=o=f[0],B=s=f[1],w=c=f[2],k=a=f[3],m=h=f[4],r=0;r<80;r+=1)l=o+t[e+p[r]]|0,l+=r<16?(s^c^a)+d[0]:r<32?K(s,c,a)+d[1]:r<48?((s|~c)^a)+d[2]:r<64?X(s,c,a)+d[3]:(s^(c|~a))+d[4],l=(l=L(l|=0,y[r]))+h|0,o=h,h=a,a=L(c,10),c=s,s=l,l=g+t[e+_[r]]|0,l+=r<16?(B^(w|~k))+u[0]:r<32?X(B,w,k)+u[1]:r<48?((B|~w)^k)+u[2]:r<64?K(B,w,k)+u[3]:(B^w^k)+u[4],l=(l=L(l|=0,v[r]))+m|0,g=m,m=k,k=L(w,10),w=B,B=l;l=f[1]+c+k|0,f[1]=f[2]+a+m|0,f[2]=f[3]+h+g|0,f[3]=f[4]+o+B|0,f[4]=f[0]+s+w|0,f[0]=l},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32,e[14+(64+i>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var e=this._hash,n=e.words,o=0;o<5;o++){var s=n[o];n[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return e},clone:function(){var t=p.clone.call(this);return t._hash=this._hash.clone(),t}}),w.RIPEMD160=p._createHelper(F),w.HmacRIPEMD160=p._createHmacHelper(F),P=(M=U).lib.Base,_=M.enc.Utf8,M.algo.HMAC=P.extend({init:function(t,e){t=this._hasher=new t.init,"string"==typeof e&&(e=_.parse(e));var r=t.blockSize,i=4*r;(e=e.sigBytes>i?t.finalize(e):e).clamp();for(var t=this._oKey=e.clone(),e=this._iKey=e.clone(),n=t.words,o=e.words,s=0;s>>2];t.sigBytes-=e}},d=(e.BlockCipher=a.extend({cfg:a.cfg.extend({mode:n,padding:l}),reset:function(){var t;a.reset.call(this);var e=this.cfg,r=e.iv,e=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=e.createEncryptor:(t=e.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,r&&r.words):(this._mode=t.call(e,this,r&&r.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),e.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),l=(t.format={}).OpenSSL={stringify:function(t){var e=t.ciphertext,t=t.salt,e=t?s.create([1398893684,1701076831]).concat(t).concat(e):e;return e.toString(o)},parse:function(t){var e,r=o.parse(t),t=r.words;return 1398893684==t[0]&&1701076831==t[1]&&(e=s.create(t.slice(2,4)),t.splice(0,4),r.sigBytes-=16),d.create({ciphertext:r,salt:e})}},u=e.SerializableCipher=r.extend({cfg:r.extend({format:l}),encrypt:function(t,e,r,i){i=this.cfg.extend(i);var n=t.createEncryptor(r,i),e=n.finalize(e),n=n.cfg;return d.create({ciphertext:e,key:r,iv:n.iv,algorithm:t,mode:n.mode,padding:n.padding,blockSize:t.blockSize,formatter:i.format})},decrypt:function(t,e,r,i){return i=this.cfg.extend(i),e=this._parse(e,i.format),t.createDecryptor(r,i).finalize(e.ciphertext)},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),t=(t.kdf={}).OpenSSL={execute:function(t,e,r,i){i=i||s.random(8);t=c.create({keySize:e+r}).compute(t,i),r=s.create(t.words.slice(e),4*r);return t.sigBytes=4*e,d.create({key:t,iv:r,salt:i})}},p=e.PasswordBasedCipher=u.extend({cfg:u.cfg.extend({kdf:t}),encrypt:function(t,e,r,i){r=(i=this.cfg.extend(i)).kdf.execute(r,t.keySize,t.ivSize);i.iv=r.iv;i=u.encrypt.call(this,t,e,r.key,i);return i.mixIn(r),i},decrypt:function(t,e,r,i){i=this.cfg.extend(i),e=this._parse(e,i.format);r=i.kdf.execute(r,t.keySize,t.ivSize,e.salt);return i.iv=r.iv,u.decrypt.call(this,t,e,r.key,i)}})}(),U.mode.CFB=((F=U.lib.BlockCipherMode.extend()).Encryptor=F.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize;j.call(this,t,e,i,r),this._prevBlock=t.slice(e,e+i)}}),F.Decryptor=F.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=t.slice(e,e+i);j.call(this,t,e,i,r),this._prevBlock=n}}),F),U.mode.CTR=(M=U.lib.BlockCipherMode.extend(),P=M.Encryptor=M.extend({processBlock:function(t,e){var r=this._cipher,i=r.blockSize,n=this._iv,o=this._counter;n&&(o=this._counter=n.slice(0),this._iv=void 0);var s=o.slice(0);r.encryptBlock(s,0),o[i-1]=o[i-1]+1|0;for(var c=0;c>>2]|=e<<24-r%4*8,t.sigBytes+=e},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},U.pad.Iso10126={pad:function(t,e){e*=4,e-=t.sigBytes%e;t.concat(U.lib.WordArray.random(e-1)).concat(U.lib.WordArray.create([e<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},U.pad.Iso97971={pad:function(t,e){t.concat(U.lib.WordArray.create([2147483648],1)),U.pad.ZeroPadding.pad(t,e)},unpad:function(t){U.pad.ZeroPadding.unpad(t),t.sigBytes--}},U.pad.ZeroPadding={pad:function(t,e){e*=4;t.clamp(),t.sigBytes+=e-(t.sigBytes%e||e)},unpad:function(t){for(var e=t.words,r=t.sigBytes-1,r=t.sigBytes-1;0<=r;r--)if(e[r>>>2]>>>24-r%4*8&255){t.sigBytes=r+1;break}}},U.pad.NoPadding={pad:function(){},unpad:function(){}},m=(P=U).lib.CipherParams,C=P.enc.Hex,P.format.Hex={stringify:function(t){return t.ciphertext.toString(C)},parse:function(t){t=C.parse(t);return m.create({ciphertext:t})}},function(){var t=U,e=t.lib.BlockCipher,r=t.algo,h=[],l=[],f=[],d=[],u=[],p=[],_=[],y=[],v=[],g=[];!function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;for(var r=0,i=0,e=0;e<256;e++){var n=i^i<<1^i<<2^i<<3^i<<4;h[r]=n=n>>>8^255&n^99;var o=t[l[n]=r],s=t[o],c=t[s],a=257*t[n]^16843008*n;f[r]=a<<24|a>>>8,d[r]=a<<16|a>>>16,u[r]=a<<8|a>>>24,p[r]=a,_[n]=(a=16843009*c^65537*s^257*o^16843008*r)<<24|a>>>8,y[n]=a<<16|a>>>16,v[n]=a<<8|a>>>24,g[n]=a,r?(r=o^t[t[t[c^o]]],i^=t[t[i]]):r=i=1}}();var B=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=e.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,r=t.sigBytes/4,i=4*(1+(this._nRounds=6+r)),n=this._keySchedule=[],o=0;o>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a]):(a=h[(a=a<<8|a>>>24)>>>24]<<24|h[a>>>16&255]<<16|h[a>>>8&255]<<8|h[255&a],a^=B[o/r|0]<<24),n[o]=n[o-r]^a);for(var s=this._invKeySchedule=[],c=0;c>>24]]^y[h[a>>>16&255]]^v[h[a>>>8&255]]^g[h[255&a]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,f,d,u,p,h)},decryptBlock:function(t,e){var r=t[e+1];t[e+1]=t[e+3],t[e+3]=r,this._doCryptBlock(t,e,this._invKeySchedule,_,y,v,g,l);r=t[e+1];t[e+1]=t[e+3],t[e+3]=r},_doCryptBlock:function(t,e,r,i,n,o,s,c){for(var a=this._nRounds,h=t[e]^r[0],l=t[e+1]^r[1],f=t[e+2]^r[2],d=t[e+3]^r[3],u=4,p=1;p>>24]^n[l>>>16&255]^o[f>>>8&255]^s[255&d]^r[u++],y=i[l>>>24]^n[f>>>16&255]^o[d>>>8&255]^s[255&h]^r[u++],v=i[f>>>24]^n[d>>>16&255]^o[h>>>8&255]^s[255&l]^r[u++],g=i[d>>>24]^n[h>>>16&255]^o[l>>>8&255]^s[255&f]^r[u++],h=_,l=y,f=v,d=g;_=(c[h>>>24]<<24|c[l>>>16&255]<<16|c[f>>>8&255]<<8|c[255&d])^r[u++],y=(c[l>>>24]<<24|c[f>>>16&255]<<16|c[d>>>8&255]<<8|c[255&h])^r[u++],v=(c[f>>>24]<<24|c[d>>>16&255]<<16|c[h>>>8&255]<<8|c[255&l])^r[u++],g=(c[d>>>24]<<24|c[h>>>16&255]<<16|c[l>>>8&255]<<8|c[255&f])^r[u++];t[e]=_,t[e+1]=y,t[e+2]=v,t[e+3]=g},keySize:8});t.AES=e._createHelper(r)}(),function(){var t=U,e=t.lib,i=e.WordArray,r=e.BlockCipher,e=t.algo,h=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],l=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],f=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],n=e.DES=r.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var i=h[r]-1;e[r]=t[i>>>5]>>>31-i%32&1}for(var n=this._subKeys=[],o=0;o<16;o++){for(var s=n[o]=[],c=f[o],r=0;r<24;r++)s[r/6|0]|=e[(l[r]-1+c)%28]<<31-r%6,s[4+(r/6|0)]|=e[28+(l[r+24]-1+c)%28]<<31-r%6;s[0]=s[0]<<1|s[0]>>>31;for(r=1;r<7;r++)s[r]=s[r]>>>4*(r-1)+3;s[7]=s[7]<<5|s[7]>>>27}for(var a=this._invSubKeys=[],r=0;r<16;r++)a[r]=n[15-r]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,r){this._lBlock=t[e],this._rBlock=t[e+1],p.call(this,4,252645135),p.call(this,16,65535),_.call(this,2,858993459),_.call(this,8,16711935),p.call(this,1,1431655765);for(var i=0;i<16;i++){for(var n=r[i],o=this._lBlock,s=this._rBlock,c=0,a=0;a<8;a++)c|=d[a][((s^n[a])&u[a])>>>0];this._lBlock=s,this._rBlock=o^c}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,p.call(this,1,1431655765),_.call(this,8,16711935),_.call(this,2,858993459),p.call(this,16,65535),p.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function p(t,e){e=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=e,this._lBlock^=e<>>t^this._lBlock)&e;this._lBlock^=e,this._rBlock^=e<192.");var e=t.slice(0,2),r=t.length<4?t.slice(0,2):t.slice(2,4),t=t.length<6?t.slice(0,2):t.slice(4,6);this._des1=n.createEncryptor(i.create(e)),this._des2=n.createEncryptor(i.create(r)),this._des3=n.createEncryptor(i.create(t))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});t.TripleDES=r._createHelper(e)}(),function(){var t=U,e=t.lib.StreamCipher,r=t.algo,i=r.RC4=e.extend({_doReset:function(){for(var t=this._key,e=t.words,r=t.sigBytes,i=this._S=[],n=0;n<256;n++)i[n]=n;for(var n=0,o=0;n<256;n++){var s=n%r,s=e[s>>>2]>>>24-s%4*8&255,o=(o+i[n]+s)%256,s=i[n];i[n]=i[o],i[o]=s}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var t=this._S,e=this._i,r=this._j,i=0,n=0;n<4;n++){var r=(r+t[e=(e+1)%256])%256,o=t[e];t[e]=t[r],t[r]=o,i|=t[(t[e]+t[r])%256]<<24-8*n}return this._i=e,this._j=r,i}t.RC4=e._createHelper(i);r=r.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var t=this.cfg.drop;0>>24)|4278255360&(t[r]<<24|t[r]>>>8);for(var i=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],r=this._b=0;r<4;r++)N.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var o=e.words,s=o[0],c=o[1],e=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),o=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),s=e>>>16|4294901760&o,c=o<<16|65535&e;n[0]^=e,n[1]^=s,n[2]^=o,n[3]^=c,n[4]^=e,n[5]^=s,n[6]^=o,n[7]^=c;for(r=0;r<4;r++)N.call(this)}},_doProcessBlock:function(t,e){var r=this._X;N.call(this),D[0]=r[0]^r[5]>>>16^r[3]<<16,D[1]=r[2]^r[7]>>>16^r[5]<<16,D[2]=r[4]^r[1]>>>16^r[7]<<16,D[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)D[i]=16711935&(D[i]<<8|D[i]>>>24)|4278255360&(D[i]<<24|D[i]>>>8),t[e+i]^=D[i]},blockSize:4,ivSize:2}),M.Rabbit=F._createHelper(P),F=(M=U).lib.StreamCipher,P=M.algo,W=[],O=[],I=[],P=P.RabbitLegacy=F.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,r=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],i=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]],n=this._b=0;n<4;n++)q.call(this);for(n=0;n<8;n++)i[n]^=r[n+4&7];if(e){var o=e.words,s=o[0],t=o[1],e=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),o=16711935&(t<<8|t>>>24)|4278255360&(t<<24|t>>>8),s=e>>>16|4294901760&o,t=o<<16|65535&e;i[0]^=e,i[1]^=s,i[2]^=o,i[3]^=t,i[4]^=e,i[5]^=s,i[6]^=o,i[7]^=t;for(n=0;n<4;n++)q.call(this)}},_doProcessBlock:function(t,e){var r=this._X;q.call(this),W[0]=r[0]^r[5]>>>16^r[3]<<16,W[1]=r[2]^r[7]>>>16^r[5]<<16,W[2]=r[4]^r[1]>>>16^r[7]<<16,W[3]=r[6]^r[3]>>>16^r[1]<<16;for(var i=0;i<4;i++)W[i]=16711935&(W[i]<<8|W[i]>>>24)|4278255360&(W[i]<<24|W[i]>>>8),t[e+i]^=W[i]},blockSize:4,ivSize:2}),M.RabbitLegacy=F._createHelper(P),U});
2 |
3 |
4 |
5 | // if (typeof exports != 'undefined'){
6 | // CryptoJS = exports
7 | // }
8 | // function aes_enc(data, key, iv){
9 | // var srcs = CryptoJS.enc.Utf8.parse(data)
10 | // var key = CryptoJS.enc.Utf8.parse(key);
11 | // var iv = CryptoJS.enc.Utf8.parse(iv);
12 | // var encrypted = CryptoJS.AES.encrypt(srcs, key, {
13 | // iv: iv,
14 | // mode: CryptoJS.mode.CBC,
15 | // padding: CryptoJS.pad.Pkcs7
16 | // }).toString()
17 | // return encrypted
18 | // }
19 |
20 | // function aes_dec(data, key, iv){
21 | // var key = CryptoJS.enc.Utf8.parse(key);
22 | // var iv = CryptoJS.enc.Utf8.parse(iv);
23 | // var decrypted = CryptoJS.AES.decrypt(data, key, {
24 | // iv: iv,
25 | // mode: CryptoJS.mode.CBC,
26 | // padding: CryptoJS.pad.Pkcs7
27 | // }).toString(CryptoJS.enc.Utf8)
28 | // return decrypted
29 | // }
30 |
31 | // var enc_data = aes_enc('123', '0123456789012345', '0123456789012345')
32 | // var dec_data = aes_dec(enc_data, '0123456789012345', '0123456789012345')
33 | // console.log(enc_data)
34 | // console.log(dec_data)
--------------------------------------------------------------------------------
/tools/diff_text.js:
--------------------------------------------------------------------------------
1 | var value = '';
2 | var orig1 = '';
3 | var orig2 = '';
4 | var dv
5 | var panes = 2
6 | var highlight = false
7 | var connect = false
8 | var collapse = false;
9 | function initUI() {
10 | if (value == null) return;
11 | var target = document.getElementById("view");
12 | target.innerHTML = "";
13 | if(dv){
14 | var left = dv.leftOriginal()
15 | var curr = dv.editor()
16 | var right = dv.rightOriginal()
17 | value = curr.getValue()
18 | if (left){ orig1 = left.getValue() }
19 | if (right){ orig2 = right.getValue() }
20 | }
21 | dv = CodeMirror.MergeView(target, {
22 | value: value,
23 | origLeft: panes == 2 ? null : orig1,
24 | orig: orig2,
25 | lineNumbers: true,
26 | mode: "text/html",
27 | highlightDifferences: highlight,
28 | // viewportMargin: Infinity,
29 | // connect: connect,
30 | collapseIdentical: false,
31 | allowEditingOriginals: true,
32 | // onChange: function (cm) {
33 | // console.log(cm.getValue());
34 | // },
35 | });
36 | var left = dv.leftOriginal()
37 | var curr = dv.editor()
38 | var right = dv.rightOriginal()
39 | function changer(_saver, cm) {
40 | chrome.storage.local.set({
41 | [_saver]: cm.getValue(),
42 | })
43 | }
44 | curr.on('change', changer.bind(null, 'diff_value'))
45 | if (left){ left.on('change', changer.bind(null, 'diff_orig1')) }
46 | if (right){ right.on('change', changer.bind(null, 'diff_orig2')) }
47 | resize(dv, window.innerHeight-100)
48 | }
49 |
50 | window.onload = function(){
51 | chrome.storage.local.get([
52 | 'diff_value',
53 | 'diff_orig1',
54 | 'diff_orig2',
55 | ], function (result) {
56 | value = result['diff_value'] || ''
57 | orig1 = result['diff_orig1'] || ''
58 | orig2 = result['diff_orig2'] || ''
59 | initUI();
60 | })
61 | }
62 | window.onresize = function(){
63 | resize(dv, window.innerHeight-100)
64 | }
65 |
66 | function resize(mergeView, height) {
67 | if (mergeView.leftOriginal()){
68 | mergeView.leftOriginal().setSize(null, height);
69 | }
70 | mergeView.editor().setSize(null, height);
71 | if (mergeView.rightOriginal()){
72 | mergeView.rightOriginal().setSize(null, height);
73 | }
74 | mergeView.wrap.style.height = height + "px";
75 | }
76 |
77 | var diff_0 = document.getElementById('diff_0')
78 | if(diff_0){
79 | diff_0.addEventListener('click', function(){
80 | initUI()
81 | })
82 | }
83 | var diff_1 = document.getElementById('diff_1')
84 | if(diff_1){
85 | diff_1.addEventListener('click', function(){
86 | panes=2;initUI()
87 | })
88 | }
89 | var diff_2 = document.getElementById('diff_2')
90 | if(diff_2){
91 | diff_2.addEventListener('click', function(){
92 | panes=3;initUI()
93 | })
94 | }
--------------------------------------------------------------------------------
/tools/error_front.js:
--------------------------------------------------------------------------------
1 | function send_error_info_to_front(e, tid, url){
2 | chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
3 | chrome.tabs.sendMessage(tid, {action: {type:'error', info: url + '\n' + e}}, function(response) {});
4 | });
5 | }
--------------------------------------------------------------------------------
/tools/merge.css:
--------------------------------------------------------------------------------
1 | .CodeMirror{font-family:monospace;height:360px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.CodeMirror-foldmarker{color:#00f;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.7em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}
2 |
3 |
4 | .CodeMirror-merge {
5 | position: relative;
6 | border: 1px solid #ddd;
7 | white-space: pre;
8 | box-sizing: content-box;
9 | -webkit-box-sizing: content-box;
10 | }
11 |
12 | .CodeMirror-merge, .CodeMirror-merge .CodeMirror {
13 | height: 350px;
14 | }
15 |
16 | .CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; }
17 | .CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; }
18 | .CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }
19 | .CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }
20 |
21 | .CodeMirror-merge-pane {
22 | display: inline-block;
23 | white-space: normal;
24 | vertical-align: top;
25 | }
26 | .CodeMirror-merge-pane-rightmost {
27 | position: absolute;
28 | right: 0px;
29 | z-index: 1;
30 | }
31 |
32 | .CodeMirror-merge-gap {
33 | z-index: 2;
34 | display: inline-block;
35 | height: 100%;
36 | -moz-box-sizing: border-box;
37 | box-sizing: border-box;
38 | overflow: hidden;
39 | border-left: 1px solid #ddd;
40 | border-right: 1px solid #ddd;
41 | position: relative;
42 | background: #f8f8f8;
43 | }
44 |
45 | .CodeMirror-merge-scrolllock-wrap {
46 | position: absolute;
47 | bottom: 0; left: 50%;
48 | }
49 | .CodeMirror-merge-scrolllock {
50 | position: relative;
51 | left: -50%;
52 | cursor: pointer;
53 | color: #555;
54 | line-height: 1;
55 | }
56 | .CodeMirror-merge-scrolllock:after {
57 | content: "\21db\00a0\00a0\21da";
58 | }
59 | .CodeMirror-merge-scrolllock.CodeMirror-merge-scrolllock-enabled:after {
60 | content: "\21db\21da";
61 | }
62 |
63 | .CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {
64 | position: absolute;
65 | left: 0; top: 0;
66 | right: 0; bottom: 0;
67 | line-height: 1;
68 | }
69 |
70 | .CodeMirror-merge-copy {
71 | position: absolute;
72 | cursor: pointer;
73 | color: #44c;
74 | z-index: 3;
75 | }
76 |
77 | .CodeMirror-merge-copy-reverse {
78 | position: absolute;
79 | cursor: pointer;
80 | color: #44c;
81 | }
82 |
83 | .CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }
84 | .CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }
85 |
86 | .CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {
87 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
88 | background-position: bottom left;
89 | background-repeat: repeat-x;
90 | }
91 |
92 | .CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {
93 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
94 | background-position: bottom left;
95 | background-repeat: repeat-x;
96 | }
97 |
98 | .CodeMirror-merge-r-chunk { background: #ffffe0; }
99 | .CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; }
100 | .CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; }
101 | .CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; }
102 |
103 | .CodeMirror-merge-l-chunk { background: #eef; }
104 | .CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }
105 | .CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }
106 | .CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }
107 |
108 | .CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }
109 | .CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }
110 | .CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }
111 |
112 | .CodeMirror-merge-collapsed-widget:before {
113 | content: "(...)";
114 | }
115 | .CodeMirror-merge-collapsed-widget {
116 | cursor: pointer;
117 | color: #88b;
118 | background: #eef;
119 | border: 1px solid #ddf;
120 | font-size: 90%;
121 | padding: 0 3px;
122 | border-radius: 4px;
123 | }
124 | .CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }
125 |
--------------------------------------------------------------------------------
/tools/mod_code_getter.js:
--------------------------------------------------------------------------------
1 | function errorHandler(e){
2 | console.log(e)
3 | }
4 |
5 | function get_file(filename, callback, errcallback){
6 | chrome.runtime.getPackageDirectoryEntry(function(root) {
7 | root.getFile(filename, {}, function(fileEntry) {
8 | fileEntry.file(function(file) {
9 | var reader = new FileReader();
10 | reader.onloadend = function(e) {
11 | // console.log(e, this.result)
12 | callback(this.result)
13 | }
14 | reader.readAsText(file);
15 | }, (errcallback||errorHandler));
16 | }, (errcallback||errorHandler));
17 | });
18 | }
19 |
20 | var test_get_model_code = document.getElementById('test_get_model_code')
21 | if (test_get_model_code){
22 | test_get_model_code.addEventListener('click', function(e){
23 | function callback(text){
24 | document.getElementById('my_code_dec').value = text
25 | }
26 | get_file('tools/mod_code_getter.js', callback)
27 | })
28 | }
29 |
30 | var get_code_babel_ast = document.getElementById('get_code_babel_ast')
31 | if (get_code_babel_ast){
32 | get_code_babel_ast.addEventListener('click', function(e){
33 | function callback(text){
34 | document.getElementById('my_code_dec').value = text
35 | }
36 | get_file('tools/babel_asttool.js', callback)
37 | })
38 | }
39 |
40 | var get_code_cryptojs = document.getElementById('get_code_cryptojs')
41 | if (get_code_cryptojs){
42 | get_code_cryptojs.addEventListener('click', function(e){
43 | function callback(text){
44 | document.getElementById('my_code_dec').value = text
45 | }
46 | get_file('tools/cryptojs.js', callback)
47 | })
48 | }
49 |
50 | var get_code_uglifyjs = document.getElementById('get_code_uglifyjs')
51 | if (get_code_uglifyjs){
52 | get_code_uglifyjs.addEventListener('click', function(e){
53 | function callback(text){
54 | document.getElementById('my_code_dec').value = text
55 | }
56 | get_file('tools/uglify_es.js', callback)
57 | })
58 | }
59 |
60 | var get_code_request = document.getElementById('get_code_request')
61 | if (get_code_request){
62 | get_code_request.addEventListener('click', function(e){
63 | function callback(text){
64 | document.getElementById('my_code_dec').value = text
65 | }
66 | get_file('tools/request.js', callback)
67 | })
68 | }
69 |
70 | var get_code_jsencrypt = document.getElementById('get_code_jsencrypt')
71 | if (get_code_jsencrypt){
72 | get_code_jsencrypt.addEventListener('click', function(e){
73 | function callback(text){
74 | document.getElementById('my_code_dec').value = text
75 | }
76 | get_file('tools/jsencrypt.js', callback)
77 | })
78 | }
79 |
80 | var get_code_cheerio = document.getElementById('get_code_cheerio')
81 | if (get_code_cheerio){
82 | get_code_cheerio.addEventListener('click', function(e){
83 | function callback(text){
84 | document.getElementById('my_code_dec').value = text
85 | }
86 | get_file('tools/cheerio.js', callback)
87 | })
88 | }
89 |
90 | var get_code_terser = document.getElementById('get_code_terser')
91 | if (get_code_terser){
92 | get_code_terser.addEventListener('click', function(e){
93 | function callback(text){
94 | document.getElementById('my_code_dec').value = text
95 | }
96 | get_file('tools/terser.js', callback)
97 | })
98 | }
99 |
100 | var get_code_parse5 = document.getElementById('get_code_parse5')
101 | if (get_code_parse5){
102 | get_code_parse5.addEventListener('click', function(e){
103 | function callback(text){
104 | document.getElementById('my_code_dec').value = text
105 | }
106 | get_file('tools/parse5.js', callback)
107 | })
108 | }
--------------------------------------------------------------------------------
/tools/redirect.js:
--------------------------------------------------------------------------------
1 | chrome.storage.local.get(["config-hook-new-tab"], function(e) {
2 | if(!e['config-hook-new-tab']) {
3 | chrome.tabs.update({ url: "chrome-search://local-ntp/local-ntp.html" })
4 | }else{
5 | var option_page = chrome.runtime.getURL('options.html')
6 | chrome.tabs.update({ url: option_page })
7 | }
8 | })
--------------------------------------------------------------------------------
/tools/replacer.js:
--------------------------------------------------------------------------------
1 | function html_script_replacer(body, replacer, url){
2 | var html = cheerio.load(body)
3 | var scripts = html("script");
4 | if (!scripts.length){
5 | return
6 | }
7 | for (var i = 0; i < scripts.length; i++) {
8 | var script = scripts[i]
9 | if (script.attribs.src){
10 | continue
11 | }
12 | if (!script.children.length){
13 | continue
14 | }
15 | if (script.attribs.type != 'text/javascript' && script.attribs.type !== undefined){
16 | continue
17 | }
18 | var jscode = ''
19 | for (var j = 0; j < script.children.length; j++) {
20 | jscode += script.children[j].data
21 | }
22 | if (!jscode){
23 | return
24 | }
25 | var newscript = cheerio.load("")("script");
26 | newscript.attribs = script.attribs;
27 | html(script).replaceWith(newscript);
28 | }
29 | return html.html()
30 | }
--------------------------------------------------------------------------------
/tools/sub_logger.js:
--------------------------------------------------------------------------------
1 | function sub_logger(){
2 | chrome.storage.local.get([
3 | 'config-hook-global',
4 | 'config-myinject_toggle',
5 | 'config-replacer_toggle',
6 | 'config-pac_proxy',
7 | ], function(e){
8 | chrome.browserAction.setBadgeBackgroundColor({color: '#BC1717'});
9 | var info = ''
10 | if (e['config-hook-global']){
11 | info += 'H'
12 | }
13 | if (e['config-myinject_toggle']){
14 | info += 'I'
15 | }
16 | if (e['config-pac_proxy']){
17 | info += 'P'
18 | }
19 | if (e['config-replacer_toggle']){
20 | info += 'R'
21 | localStorage.webRedirect_toggle = JSON.stringify(true)
22 | }else{
23 | localStorage.webRedirect_toggle = JSON.stringify(false)
24 | }
25 |
26 | chrome.browserAction.setBadgeText({text: info});
27 | })
28 | }
--------------------------------------------------------------------------------
/tools/window_hooker.js:
--------------------------------------------------------------------------------
1 | // 暂时还在考虑的一种 window hook 方式。需要配合全局 ast 代码修改的方式
2 | function fetch_hook(code){
3 | var newn = t.ConditionalExpression(
4 | t.BinaryExpression('===', t.ThisExpression(), t.Identifier('v_window')),
5 | t.Identifier('v_win'),
6 | t.ThisExpression()
7 | )
8 | function protect_this(path){
9 | var node = path.node
10 | path.replaceWith(newn)
11 | path.stop()
12 | }
13 | var ast = parser.parse(code, {allowReturnOutsideFunction: true});
14 | traverse(ast, {ThisExpression: protect_this});
15 | var { code } = generator(ast, { jsescOption: { minimal: true, } });
16 | return `
17 |
18 | // 暂时还在考虑的一种 window hook 方式。需要配合全局 ast 代码修改的方式
19 | ;(function(){
20 | var cache = {}
21 | function make_cache_hooker(obj, name){
22 | if (name in cache){ return cache[name] }
23 | return cache[name] = new Proxy(obj, {
24 | set: function(a,b,c){ return filter_log('set', b, c), obj[b]=c },
25 | get: function(a,b){
26 | var r = obj[b]
27 | if (!(b == Symbol.unscopables || b == Symbol.toStringTag || b == Symbol.toPrimitive)){ filter_log(name, 'get', b, r) }
28 | if (typeof r == 'function'){ return r.bind(obj) }
29 | return r
30 | },
31 | })
32 | }
33 | var filter_log = console.log
34 | !function make_fake_window(){
35 | if (window.v_win){ return }
36 | var _win = {}
37 | function mainobj(b, r){
38 | switch(b){
39 | case 'window':
40 | case 'self':
41 | case 'top':
42 | case 'frames': // 这两个可能存在问题
43 | case 'parent': // 这两个可能存在问题
44 | case 'globalThis': r = win; break
45 | case 'clientInformation': r = make_cache_hooker(clientInformation, 'window.clientInformation'); break
46 | case 'crypto': r = make_cache_hooker(crypto, 'window.crypto'); break
47 | case 'customElements': r = make_cache_hooker(customElements, 'window.customElements'); break
48 | case 'document': r = make_cache_hooker(document, 'window.document'); break
49 | case 'external': r = make_cache_hooker(external, 'window.external'); break
50 | case 'history': r = make_cache_hooker(history, 'window.history'); break
51 | case 'indexedDB': r = make_cache_hooker(indexedDB, 'window.indexedDB'); break
52 | case 'localStorage': r = make_cache_hooker(localStorage, 'window.localStorage'); break
53 | case 'locationbar': r = make_cache_hooker(locationbar, 'window.locationbar'); break
54 | case 'menubar': r = make_cache_hooker(menubar, 'window.menubar'); break
55 | case 'navigator': r = make_cache_hooker(navigator, 'window.navigator'); break
56 | case 'performance': r = make_cache_hooker(performance, 'window.performance'); break
57 | case 'personalbar': r = make_cache_hooker(personalbar, 'window.personalbar'); break
58 | case 'screen': r = make_cache_hooker(screen, 'window.screen'); break
59 | case 'scrollbars': r = make_cache_hooker(scrollbars, 'window.scrollbars'); break
60 | case 'sessionStorage': r = make_cache_hooker(sessionStorage, 'window.sessionStorage'); break
61 | case 'statusbar': r = make_cache_hooker(statusbar, 'window.statusbar'); break
62 | case 'toolbar': r = make_cache_hooker(toolbar, 'window.toolbar'); break
63 | case 'trustedTypes': r = make_cache_hooker(trustedTypes, 'window.trustedTypes'); break
64 | case 'visualViewport': r = make_cache_hooker(visualViewport, 'window.visualViewport'); break
65 | case 'location': r = make_cache_hooker(location, 'window.location'); break
66 | default: r = window[b]; break
67 | }
68 | return r
69 | }
70 | var unlogs = [
71 | 'undefined',
72 | 'v_window',
73 | ]
74 | var localeval = eval
75 | var win = new Proxy(_win, {
76 | has: function(a,b){ return true },
77 | set: function(a,b,c){ return filter_log('window set', b, c), window[b]=c },
78 | get: function(a,b){
79 | var r = mainobj(b)
80 | if (!(b == Symbol.unscopables || b == Symbol.toStringTag || b == Symbol.toPrimitive || unlogs.indexOf(b) != -1)){ filter_log('window', 'get', b, r) }
81 | if (typeof r == 'function' && !r.prototype){ return r.bind(window) }
82 | return r
83 | },
84 | })
85 | var interceptor = new Proxy(_win, {
86 | has: function(a,b){ return b in window }, // win 和 interceptor 的区别在这里
87 | set: function(a,b,c){ return filter_log('window set', b, c), window[b]=c },
88 | get: function(a,b){
89 | if (!(b in window) && typeof b != 'symbol'){ throw ReferenceError(b + ' is not defined') } // win 和 interceptor 的区别在这里
90 | var r = mainobj(b)
91 | if (!(b == Symbol.unscopables || b == Symbol.toStringTag || b == Symbol.toPrimitive || unlogs.indexOf(b) != -1)){ filter_log('window', 'get', b, r) }
92 | if (typeof r == 'function' && !r.prototype){ return r.bind(window) }
93 | return r
94 | },
95 | })
96 | window.v_win = win
97 | window.v_interceptor = interceptor
98 | window.v_window = window
99 | // window.v_eval = eval
100 | }()
101 | })()
102 |
103 |
104 | with (window.v_interceptor){
105 | ${code}
106 | }
107 |
108 | `
109 | }
110 |
--------------------------------------------------------------------------------