>>32-e}r.RIPEMD160=i._createHelper(h),r.HmacRIPEMD160=i._createHmacHelper(h)}(Math),t.RIPEMD160},"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)},{"./core":52}],76:[function(t,e,r){var n,o;n=this,o=function(t){var e,r,n,o,i,a,s;return r=(e=t).lib,n=r.WordArray,o=r.Hasher,i=e.algo,a=[],s=i.SHA1=o.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],s=r[3],c=r[4],u=0;u<80;u++){if(u<16)a[u]=0|t[e+u];else{var f=a[u-3]^a[u-8]^a[u-14]^a[u-16];a[u]=f<<1|f>>>31}var l=(n<<5|n>>>27)+c+a[u];l+=u<20?1518500249+(o&i|~o&s):u<40?1859775393+(o^i^s):u<60?(o&i|o&s|i&s)-1894007588:(o^i^s)-899497514,c=s,s=i,i=o<<30|o>>>2,o=n,n=l}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+s|0,r[4]=r[4]+c|0},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(r/4294967296),e[15+(n+64>>>9<<4)]=r,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=o.clone.call(this);return t._hash=this._hash.clone(),t}}),e.SHA1=o._createHelper(s),e.HmacSHA1=o._createHmacHelper(s),t.SHA1},"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)},{"./core":52}],77:[function(t,e,r){var n,o;n=this,o=function(t){var e,r,n,o,i;return r=(e=t).lib.WordArray,n=e.algo,o=n.SHA256,i=n.SHA224=o.extend({_doReset:function(){this._hash=new r.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=4,t}}),e.SHA224=o._createHelper(i),e.HmacSHA224=o._createHmacHelper(i),t.SHA224},"object"==typeof r?e.exports=r=o(t("./core"),t("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],o):o(n.CryptoJS)},{"./core":52,"./sha256":78}],78:[function(t,e,r){var n,o;n=this,o=function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.algo,s=[],c=[];!function(){function t(t){for(var r=e.sqrt(t),n=2;n<=r;n++)if(!(t%n))return!1;return!0}function r(t){return 4294967296*(t-(0|t))|0}for(var n=2,o=0;o<64;)t(n)&&(o<8&&(s[o]=r(e.pow(n,.5))),c[o]=r(e.pow(n,1/3)),o++),n++}();var u=[],f=a.SHA256=i.extend({_doReset:function(){this._hash=new o.init(s.slice(0))},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],f=r[5],l=r[6],p=r[7],h=0;h<64;h++){if(h<16)u[h]=0|t[e+h];else{var d=u[h-15],m=(d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3,y=u[h-2],g=(y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10;u[h]=m+u[h-7]+g+u[h-16]}var v=n&o^n&i^o&i,b=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=p+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&f^~s&l)+c[h]+u[h];p=l,l=f,f=s,s=a+_|0,a=i,i=o,o=n,n=_+(b+v)|0}r[0]=r[0]+n|0,r[1]=r[1]+o|0,r[2]=r[2]+i|0,r[3]=r[3]+a|0,r[4]=r[4]+s|0,r[5]=r[5]+f|0,r[6]=r[6]+l|0,r[7]=r[7]+p|0},_doFinalize:function(){var t=this._data,r=t.words,n=8*this._nDataBytes,o=8*t.sigBytes;return r[o>>>5]|=128<<24-o%32,r[14+(o+64>>>9<<4)]=e.floor(n/4294967296),r[15+(o+64>>>9<<4)]=n,t.sigBytes=4*r.length,this._process(),this._hash},clone:function(){var t=i.clone.call(this);return t._hash=this._hash.clone(),t}});r.SHA256=i._createHelper(f),r.HmacSHA256=i._createHmacHelper(f)}(Math),t.SHA256},"object"==typeof r?e.exports=r=o(t("./core")):"function"==typeof define&&define.amd?define(["./core"],o):o(n.CryptoJS)},{"./core":52}],79:[function(t,e,r){var n,o;n=this,o=function(t){return function(e){var r=t,n=r.lib,o=n.WordArray,i=n.Hasher,a=r.x64.Word,s=r.algo,c=[],u=[],f=[];!function(){for(var t=1,e=0,r=0;r<24;r++){c[t+5*e]=(r+1)*(r+2)/2%64;var n=(2*t+3*e)%5;t=e%5,e=n}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var o=1,i=0;i<24;i++){for(var s=0,l=0,p=0;p<7;p++){if(1&o){var h=(1<>>24)|4278255360&(i<<24|i>>>8),a=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),(F=r[o]).high^=a,F.low^=i}for(var s=0;s<24;s++){for(var p=0;p<5;p++){for(var h=0,d=0,m=0;m<5;m++){h^=(F=r[p+5*m]).high,d^=F.low}var y=l[p];y.high=h,y.low=d}for(p=0;p<5;p++){var g=l[(p+4)%5],v=l[(p+1)%5],b=v.high,_=v.low;for(h=g.high^(b<<1|_>>>31),d=g.low^(_<<1|b>>>31),m=0;m<5;m++){(F=r[p+5*m]).high^=h,F.low^=d}}for(var w=1;w<25;w++){var x=(F=r[w]).high,k=F.low,B=c[w];if(B<32)h=x<>>32-B,d=k<>>32-B;else h=k<>>64-B,d=x<>>64-B;var S=l[u[w]];S.high=h,S.low=d}var A=l[0],C=r[0];A.high=C.high,A.low=C.low;for(p=0;p<5;p++)for(m=0;m<5;m++){var F=r[w=p+5*m],O=l[w],I=l[(p+1)%5+5*m],N=l[(p+2)%5+5*m];F.high=O.high^~I.high&N.high,F.low=O.low^~I.low&N.low}F=r[0];var T=f[s];F.high^=T.high,F.low^=T.low}},_doFinalize:function(){var t=this._data,r=t.words,n=(this._nDataBytes,8*t.sigBytes),i=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(e.ceil((n+1)/i)*i>>>5)-1]|=128,t.sigBytes=4*r.length,this._process();for(var a=this._state,s=this.cfg.outputLength/8,c=s/8,u=[],f=0;f>>24)|4278255360&(p<<24|p>>>8),h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),u.push(h),u.push(p)}return new o.init(u,s)},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}});r.SHA3=i._createHelper(p),r.HmacSHA3=i._createHmacHelper(p)}(Math),t.SHA3},"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)},{"./core":52,"./x64-core":83}],80:[function(t,e,r){var n,o;n=this,o=function(t){var e,r,n,o,i,a,s;return r=(e=t).x64,n=r.Word,o=r.WordArray,i=e.algo,a=i.SHA512,s=i.SHA384=a.extend({_doReset:function(){this._hash=new o.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=16,t}}),e.SHA384=a._createHelper(s),e.HmacSHA384=a._createHmacHelper(s),t.SHA384},"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core"),t("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],o):o(n.CryptoJS)},{"./core":52,"./sha512":81,"./x64-core":83}],81:[function(t,e,r){var n,o;n=this,o=function(t){return function(){var e=t,r=e.lib.Hasher,n=e.x64,o=n.Word,i=n.WordArray,a=e.algo;function s(){return o.create.apply(o,arguments)}var c=[s(1116352408,3609767458),s(1899447441,602891725),s(3049323471,3964484399),s(3921009573,2173295548),s(961987163,4081628472),s(1508970993,3053834265),s(2453635748,2937671579),s(2870763221,3664609560),s(3624381080,2734883394),s(310598401,1164996542),s(607225278,1323610764),s(1426881987,3590304994),s(1925078388,4068182383),s(2162078206,991336113),s(2614888103,633803317),s(3248222580,3479774868),s(3835390401,2666613458),s(4022224774,944711139),s(264347078,2341262773),s(604807628,2007800933),s(770255983,1495990901),s(1249150122,1856431235),s(1555081692,3175218132),s(1996064986,2198950837),s(2554220882,3999719339),s(2821834349,766784016),s(2952996808,2566594879),s(3210313671,3203337956),s(3336571891,1034457026),s(3584528711,2466948901),s(113926993,3758326383),s(338241895,168717936),s(666307205,1188179964),s(773529912,1546045734),s(1294757372,1522805485),s(1396182291,2643833823),s(1695183700,2343527390),s(1986661051,1014477480),s(2177026350,1206759142),s(2456956037,344077627),s(2730485921,1290863460),s(2820302411,3158454273),s(3259730800,3505952657),s(3345764771,106217008),s(3516065817,3606008344),s(3600352804,1432725776),s(4094571909,1467031594),s(275423344,851169720),s(430227734,3100823752),s(506948616,1363258195),s(659060556,3750685593),s(883997877,3785050280),s(958139571,3318307427),s(1322822218,3812723403),s(1537002063,2003034995),s(1747873779,3602036899),s(1955562222,1575990012),s(2024104815,1125592928),s(2227730452,2716904306),s(2361852424,442776044),s(2428436474,593698344),s(2756734187,3733110249),s(3204031479,2999351573),s(3329325298,3815920427),s(3391569614,3928383900),s(3515267271,566280711),s(3940187606,3454069534),s(4118630271,4000239992),s(116418474,1914138554),s(174292421,2731055270),s(289380356,3203993006),s(460393269,320620315),s(685471733,587496836),s(852142971,1086792851),s(1017036298,365543100),s(1126000580,2618297676),s(1288033470,3409855158),s(1501505948,4234509866),s(1607167915,987167468),s(1816402316,1246189591)],u=[];!function(){for(var t=0;t<80;t++)u[t]=s()}();var f=a.SHA512=r.extend({_doReset:function(){this._hash=new i.init([new o.init(1779033703,4089235720),new o.init(3144134277,2227873595),new o.init(1013904242,4271175723),new o.init(2773480762,1595750129),new o.init(1359893119,2917565137),new o.init(2600822924,725511199),new o.init(528734635,4215389547),new o.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var r=this._hash.words,n=r[0],o=r[1],i=r[2],a=r[3],s=r[4],f=r[5],l=r[6],p=r[7],h=n.high,d=n.low,m=o.high,y=o.low,g=i.high,v=i.low,b=a.high,_=a.low,w=s.high,x=s.low,k=f.high,B=f.low,S=l.high,A=l.low,C=p.high,F=p.low,O=h,I=d,N=m,T=y,P=g,D=v,R=b,E=_,M=w,H=x,j=k,q=B,z=S,L=A,U=C,W=F,J=0;J<80;J++){var K=u[J];if(J<16)var G=K.high=0|t[e+2*J],X=K.low=0|t[e+2*J+1];else{var $=u[J-15],V=$.high,Z=$.low,Y=(V>>>1|Z<<31)^(V>>>8|Z<<24)^V>>>7,Q=(Z>>>1|V<<31)^(Z>>>8|V<<24)^(Z>>>7|V<<25),tt=u[J-2],et=tt.high,rt=tt.low,nt=(et>>>19|rt<<13)^(et<<3|rt>>>29)^et>>>6,ot=(rt>>>19|et<<13)^(rt<<3|et>>>29)^(rt>>>6|et<<26),it=u[J-7],at=it.high,st=it.low,ct=u[J-16],ut=ct.high,ft=ct.low;G=(G=(G=Y+at+((X=Q+st)>>>0>>0?1:0))+nt+((X=X+ot)>>>0>>0?1:0))+ut+((X=X+ft)>>>0>>0?1:0);K.high=G,K.low=X}var lt,pt=M&j^~M&z,ht=H&q^~H&L,dt=O&N^O&P^N&P,mt=I&T^I&D^T&D,yt=(O>>>28|I<<4)^(O<<30|I>>>2)^(O<<25|I>>>7),gt=(I>>>28|O<<4)^(I<<30|O>>>2)^(I<<25|O>>>7),vt=(M>>>14|H<<18)^(M>>>18|H<<14)^(M<<23|H>>>9),bt=(H>>>14|M<<18)^(H>>>18|M<<14)^(H<<23|M>>>9),_t=c[J],wt=_t.high,xt=_t.low,kt=U+vt+((lt=W+bt)>>>0>>0?1:0),Bt=gt+mt;U=z,W=L,z=j,L=q,j=M,q=H,M=R+(kt=(kt=(kt=kt+pt+((lt=lt+ht)>>>0>>0?1:0))+wt+((lt=lt+xt)>>>0>>0?1:0))+G+((lt=lt+X)>>>0>>0?1:0))+((H=E+lt|0)>>>0>>0?1:0)|0,R=P,E=D,P=N,D=T,N=O,T=I,O=kt+(yt+dt+(Bt>>>0>>0?1:0))+((I=lt+Bt|0)>>>0>>0?1:0)|0}d=n.low=d+I,n.high=h+O+(d>>>0>>0?1:0),y=o.low=y+T,o.high=m+N+(y>>>0>>0?1:0),v=i.low=v+D,i.high=g+P+(v>>>0>>0?1:0),_=a.low=_+E,a.high=b+R+(_>>>0>>0?1:0),x=s.low=x+H,s.high=w+M+(x>>>0>>0?1:0),B=f.low=B+q,f.high=k+j+(B>>>0>>0?1:0),A=l.low=A+L,l.high=S+z+(A>>>0>>0?1:0),F=p.low=F+W,p.high=C+U+(F>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,r=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(r/4294967296),e[31+(n+128>>>10<<5)]=r,t.sigBytes=4*e.length,this._process(),this._hash.toX32()},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=r._createHelper(f),e.HmacSHA512=r._createHmacHelper(f)}(),t.SHA512},"object"==typeof r?e.exports=r=o(t("./core"),t("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],o):o(n.CryptoJS)},{"./core":52,"./x64-core":83}],82:[function(t,e,r){var n,o;n=this,o=function(t){return function(){var e=t,r=e.lib,n=r.WordArray,o=r.BlockCipher,i=e.algo,a=[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],s=[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],c=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],u=[{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}],f=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],l=i.DES=o.extend({_doReset:function(){for(var t=this._key.words,e=[],r=0;r<56;r++){var n=a[r]-1;e[r]=t[n>>>5]>>>31-n%32&1}for(var o=this._subKeys=[],i=0;i<16;i++){var u=o[i]=[],f=c[i];for(r=0;r<24;r++)u[r/6|0]|=e[(s[r]-1+f)%28]<<31-r%6,u[4+(r/6|0)]|=e[28+(s[r+24]-1+f)%28]<<31-r%6;u[0]=u[0]<<1|u[0]>>>31;for(r=1;r<7;r++)u[r]=u[r]>>>4*(r-1)+3;u[7]=u[7]<<5|u[7]>>>27}var l=this._invSubKeys=[];for(r=0;r<16;r++)l[r]=o[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),h.call(this,2,858993459),h.call(this,8,16711935),p.call(this,1,1431655765);for(var n=0;n<16;n++){for(var o=r[n],i=this._lBlock,a=this._rBlock,s=0,c=0;c<8;c++)s|=u[c][((a^o[c])&f[c])>>>0];this._lBlock=a,this._rBlock=i^s}var l=this._lBlock;this._lBlock=this._rBlock,this._rBlock=l,p.call(this,1,1431655765),h.call(this,8,16711935),h.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){var r=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=r,this._lBlock^=r<>>t^this._lBlock)&e;this._lBlock^=r,this._rBlock^=r<=55296&&e<=56319&&o=55296&&t<=57343)throw Error("Lone surrogate U+"+t.toString(16).toUpperCase()+" is not a scalar value")}function p(t,e){return u(t>>e&63|128)}function h(t){if(0==(4294967168&t))return u(t);var e="";return 0==(4294965248&t)?e=u(t>>6&31|192):0==(4294901760&t)?(l(t),e=u(t>>12&15|224),e+=p(t,6)):0==(4292870144&t)&&(e=u(t>>18&7|240),e+=p(t,12),e+=p(t,6)),e+=u(63&t|128)}function d(){if(c>=s)throw Error("Invalid byte index");var t=255&a[c];if(c++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function m(){var t,e;if(c>s)throw Error("Invalid byte index");if(c==s)return!1;if(t=255&a[c],c++,0==(128&t))return t;if(192==(224&t)){if((e=(31&t)<<6|d())>=128)return e;throw Error("Invalid continuation byte")}if(224==(240&t)){if((e=(15&t)<<12|d()<<6|d())>=2048)return l(e),e;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=(7&t)<<18|d()<<12|d()<<6|d())>=65536&&e<=1114111)return e;throw Error("Invalid UTF-8 detected")}var y={version:"2.1.2",encode:function(t){for(var e=f(t),r=e.length,n=-1,o="";++n65535&&(o+=u((e-=65536)>>>10&1023|55296),e=56320|1023&e),o+=u(e);return o}(r)}};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return y});else if(n&&!n.nodeType)if(o)o.exports=y;else{var g={}.hasOwnProperty;for(var v in y)g.call(y,v)&&(n[v]=y[v])}else t.utf8=y}(this)},{}],85:[function(t,e,r){e.exports=XMLHttpRequest},{}],"bignumber.js":[function(t,e,r){!function(t){"use strict";var r,n=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,o=Math.ceil,i=Math.floor,a=" not a boolean or binary digit",s="rounding mode",c="number type has more than 15 significant digits",u="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",f=1e14,l=14,p=9007199254740991,h=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],d=1e7,m=1e9;function y(t){var e=0|t;return t>0||t===e?e:e-1}function g(t){for(var e,r,n=1,o=t.length,i=t[0]+"";nu^r?1:-1;for(s=(c=o.length)<(u=i.length)?c:u,a=0;ai[a]^r?1:-1;return c==u?0:c>u^r?1:-1}function b(t,e,r){return(t=B(t))>=e&&t<=r}function _(t){return"[object Array]"==Object.prototype.toString.call(t)}function w(t,e,r){for(var n,o,i=[0],a=0,s=t.length;ar-1&&(null==i[n+1]&&(i[n+1]=0),i[n+1]+=i[n]/r|0,i[n]%=r)}return i.reverse()}function x(t,e){return(t.length>1?t.charAt(0)+"."+t.slice(1):t)+(e<0?"e":"e+")+e}function k(t,e){var r,n;if(e<0){for(n="0.";++e;n+="0");t=n+t}else if(++e>(r=t.length)){for(n="0",e-=r;--e;n+="0");t+=n}else e15&&tt(P,c,t),s=!1):d.s=45===h.charCodeAt(0)?(h=h.slice(1),-1):1,h=$(h,10,e,d.s)}else{if(t instanceof X)return d.s=t.s,d.e=t.e,d.c=(t=t.c)?t.slice():t,void(P=0);if((s="number"==typeof t)&&0*t==0){if(d.s=1/t<0?(t=-t,-1):1,t===~~t){for(o=0,a=t;a>=10;a/=10,o++);return d.e=o,d.c=[t],void(P=0)}h=t+""}else{if(!n.test(h=t+""))return S(d,h,s);d.s=45===h.charCodeAt(0)?(h=h.slice(1),-1):1}}for((o=h.indexOf("."))>-1&&(h=h.replace(".","")),(a=h.search(/e/i))>0?(o<0&&(o=a),o+=+h.slice(a+1),h=h.substring(0,a)):o<0&&(o=h.length),a=0;48===h.charCodeAt(a);a++);for(f=h.length;48===h.charCodeAt(--f););if(h=h.slice(a,f+1))if(f=h.length,s&&L&&f>15&&(t>p||t!==i(t))&&tt(P,c,d.s*t),(o=o-a-1)>z)d.c=d.e=null;else if(o=0&&(s=K,K=0,t=t.replace(".",""),f=(p=new X(n)).pow(t.length-h),K=s,p.c=w(k(g(f.c),f.e),10,e),p.e=p.c.length),a=s=(l=w(t,n,e)).length;0==l[--s];l.pop());if(!l[0])return"0";if(h<0?--a:(f.c=l,f.e=a,f.s=o,l=(f=r(f,p,d,m,e)).c,c=f.r,a=f.e),h=l[i=a+d+1],s=e/2,c=c||i<0||null!=l[i+1],c=m<4?(null!=h||c)&&(0==m||m==(f.s<0?3:2)):h>s||h==s&&(4==m||c||6==m&&1&l[i-1]||m==(f.s<0?8:7)),i<1||!l[0])t=c?k("1",-d):"0";else{if(l.length=i,c)for(--e;++l[--i]>e;)l[i]=0,i||(++a,l=[1].concat(l));for(s=l.length;!l[--s];);for(h=0,t="";h<=s;t+=u.charAt(l[h++]));t=k(t,a)}return t}function V(t,e,r,n){var o,i,a,c,u;if(r=null!=r&&U(r,0,8,n,s)?0|r:M,!t.c)return t.toString();if(o=t.c[0],a=t.e,null==e)u=g(t.c),u=19==n||24==n&&a<=H?x(u,a):k(u,a);else if(i=(t=et(new X(t),e,r)).e,c=(u=g(t.c)).length,19==n||24==n&&(e<=i||i<=H)){for(;cc){if(--e>0)for(u+=".";e--;u+="0");}else if((e+=i-c)>0)for(i+1==c&&(u+=".");e--;u+="0");return t.s<0&&o?"-"+u:u}function Z(t,e){var r,n,o=0;for(_(t[0])&&(t=t[0]),r=new X(t[0]);++or||t!=B(t))&&tt(n,(o||"decimal places")+(tr?" out of range":" not an integer"),t),!0}function Q(t,e,r){for(var n=1,o=e.length;!e[--o];e.pop());for(o=e[0];o>=10;o/=10,n++);return(r=n+r*l-1)>z?t.c=t.e=null:r=10;u/=10,a++);if((s=e-a)<0)s+=l,c=e,m=(p=y[d=0])/g[a-c-1]%10|0;else if((d=o((s+1)/l))>=y.length){if(!n)break t;for(;y.length<=d;y.push(0));p=m=0,a=1,c=(s%=l)-l+1}else{for(p=u=y[d],a=1;u>=10;u/=10,a++);m=(c=(s%=l)-l+a)<0?0:p/g[a-c-1]%10|0}if(n=n||e<0||null!=y[d+1]||(c<0?p:p%g[a-c-1]),n=r<4?(m||n)&&(0==r||r==(t.s<0?3:2)):m>5||5==m&&(4==r||n||6==r&&(s>0?c>0?p/g[a-c]:0:y[d-1])%10&1||r==(t.s<0?8:7)),e<1||!y[0])return y.length=0,n?(e-=t.e+1,y[0]=g[(l-e%l)%l],t.e=-e||0):y[0]=t.e=0,t;if(0==s?(y.length=d,u=1,d--):(y.length=d+1,u=g[l-s],y[d]=c>0?i(p/g[a-c]%g[c])*u:0),n)for(;;){if(0==d){for(s=1,c=y[0];c>=10;c/=10,s++);for(c=y[0]+=u,u=1;c>=10;c/=10,u++);s!=u&&(t.e++,y[0]==f&&(y[0]=1));break}if(y[d]+=u,y[d]!=f)break;y[d--]=0,u=1}for(s=y.length;0===y[--s];y.pop());}t.e>z?t.c=t.e=null:t.er)return null!=(t=o[r++])};return s(e="DECIMAL_PLACES")&&U(t,0,m,2,e)&&(E=0|t),n[e]=E,s(e="ROUNDING_MODE")&&U(t,0,8,2,e)&&(M=0|t),n[e]=M,s(e="EXPONENTIAL_AT")&&(_(t)?U(t[0],-m,0,2,e)&&U(t[1],0,m,2,e)&&(H=0|t[0],j=0|t[1]):U(t,-m,m,2,e)&&(H=-(j=0|(t<0?-t:t)))),n[e]=[H,j],s(e="RANGE")&&(_(t)?U(t[0],-m,-1,2,e)&&U(t[1],1,m,2,e)&&(q=0|t[0],z=0|t[1]):U(t,-m,m,2,e)&&(0|t?q=-(z=0|(t<0?-t:t)):L&&tt(2,e+" cannot be zero",t))),n[e]=[q,z],s(e="ERRORS")&&(t===!!t||1===t||0===t?(P=0,U=(L=!!t)?Y:b):L&&tt(2,e+a,t)),n[e]=L,s(e="CRYPTO")&&(!0===t||!1===t||1===t||0===t?t?!(t="undefined"==typeof crypto)&&crypto&&(crypto.getRandomValues||crypto.randomBytes)?W=!0:L?tt(2,"crypto unavailable",t?void 0:crypto):W=!1:W=!1:L&&tt(2,e+a,t)),n[e]=W,s(e="MODULO_MODE")&&U(t,0,9,2,e)&&(J=0|t),n[e]=J,s(e="POW_PRECISION")&&U(t,0,m,2,e)&&(K=0|t),n[e]=K,s(e="FORMAT")&&("object"==typeof t?G=t:L&&tt(2,e+" not an object",t)),n[e]=G,n},X.max=function(){return Z(arguments,D.lt)},X.min=function(){return Z(arguments,D.gt)},X.random=(A=9007199254740992,C=Math.random()*A&2097151?function(){return i(Math.random()*A)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(t){var e,r,n,a,s,c=0,u=[],f=new X(R);if(t=null!=t&&U(t,0,m,14)?0|t:E,a=o(t/l),W)if(crypto.getRandomValues){for(e=crypto.getRandomValues(new Uint32Array(a*=2));c>>11))>=9e15?(r=crypto.getRandomValues(new Uint32Array(2)),e[c]=r[0],e[c+1]=r[1]):(u.push(s%1e14),c+=2);c=a/2}else if(crypto.randomBytes){for(e=crypto.randomBytes(a*=7);c=9e15?crypto.randomBytes(7).copy(e,c):(u.push(s%1e14),c+=7);c=a/7}else W=!1,L&&tt(14,"crypto unavailable",crypto);if(!W)for(;c=10;s/=10,c++);cn?1:-1;else for(o=i=0;oe[o]?1:-1;break}return i}function r(t,e,r,n){for(var o=0;r--;)t[r]-=o,o=t[r]1;t.splice(0,1));}return function(n,o,a,s,c){var u,p,h,d,m,g,v,b,_,w,x,k,B,S,A,C,F,O=n.s==o.s?1:-1,I=n.c,N=o.c;if(!(I&&I[0]&&N&&N[0]))return new X(n.s&&o.s&&(I?!N||I[0]!=N[0]:N)?I&&0==I[0]||!N?0*O:O/0:NaN);for(_=(b=new X(O)).c=[],O=a+(p=n.e-o.e)+1,c||(c=f,p=y(n.e/l)-y(o.e/l),O=O/l|0),h=0;N[h]==(I[h]||0);h++);if(N[h]>(I[h]||0)&&p--,O<0)_.push(1),d=!0;else{for(S=I.length,C=N.length,h=0,O+=2,(m=i(c/(N[0]+1)))>1&&(N=t(N,m,c),I=t(I,m,c),C=N.length,S=I.length),B=C,x=(w=I.slice(0,C)).length;x=c/2&&A++;do{if(m=0,(u=e(N,w,C,x))<0){if(k=w[0],C!=x&&(k=k*c+(w[1]||0)),(m=i(k/A))>1)for(m>=c&&(m=c-1),v=(g=t(N,m,c)).length,x=w.length;1==e(g,w,v,x);)m--,r(g,C=10;O/=10,h++);et(b,a+(b.e=h+p*l-1)+1,s,d)}else b.e=p,b.r=+d;return b}}(),F=/^(-?)0([xbo])(?=\w[\w.]*$)/i,O=/^([^.]+)\.$/,I=/^\.([^.]+)$/,N=/^-?(Infinity|NaN)$/,T=/^\s*\+(?=[\w.])|^\s+|\s+$/g,S=function(t,e,r,n){var o,i=r?e:e.replace(T,"");if(N.test(i))t.s=isNaN(i)?null:i<0?-1:1;else{if(!r&&(i=i.replace(F,function(t,e,r){return o="x"==(r=r.toLowerCase())?16:"b"==r?2:8,n&&n!=o?t:e}),n&&(o=n,i=i.replace(O,"$1").replace(I,"0.$1")),e!=i))return new X(i,o);L&&tt(P,"not a"+(n?" base "+n:"")+" number",e),t.s=null}t.c=t.e=null,P=0},D.absoluteValue=D.abs=function(){var t=new X(this);return t.s<0&&(t.s=1),t},D.ceil=function(){return et(new X(this),this.e+1,2)},D.comparedTo=D.cmp=function(t,e){return P=1,v(this,new X(t,e))},D.decimalPlaces=D.dp=function(){var t,e,r=this.c;if(!r)return null;if(t=((e=r.length-1)-y(this.e/l))*l,e=r[e])for(;e%10==0;e/=10,t--);return t<0&&(t=0),t},D.dividedBy=D.div=function(t,e){return P=3,r(this,new X(t,e),E,M)},D.dividedToIntegerBy=D.divToInt=function(t,e){return P=4,r(this,new X(t,e),0,1)},D.equals=D.eq=function(t,e){return P=5,0===v(this,new X(t,e))},D.floor=function(){return et(new X(this),this.e+1,3)},D.greaterThan=D.gt=function(t,e){return P=6,v(this,new X(t,e))>0},D.greaterThanOrEqualTo=D.gte=function(t,e){return P=7,1===(e=v(this,new X(t,e)))||0===e},D.isFinite=function(){return!!this.c},D.isInteger=D.isInt=function(){return!!this.c&&y(this.e/l)>this.c.length-2},D.isNaN=function(){return!this.s},D.isNegative=D.isNeg=function(){return this.s<0},D.isZero=function(){return!!this.c&&0==this.c[0]},D.lessThan=D.lt=function(t,e){return P=8,v(this,new X(t,e))<0},D.lessThanOrEqualTo=D.lte=function(t,e){return P=9,-1===(e=v(this,new X(t,e)))||0===e},D.minus=D.sub=function(t,e){var r,n,o,i,a=this,s=a.s;if(P=10,e=(t=new X(t,e)).s,!s||!e)return new X(NaN);if(s!=e)return t.s=-e,a.plus(t);var c=a.e/l,u=t.e/l,p=a.c,h=t.c;if(!c||!u){if(!p||!h)return p?(t.s=-e,t):new X(h?a:NaN);if(!p[0]||!h[0])return h[0]?(t.s=-e,t):new X(p[0]?a:3==M?-0:0)}if(c=y(c),u=y(u),p=p.slice(),s=c-u){for((i=s<0)?(s=-s,o=p):(u=c,o=h),o.reverse(),e=s;e--;o.push(0));o.reverse()}else for(n=(i=(s=p.length)<(e=h.length))?s:e,s=e=0;e0)for(;e--;p[r++]=0);for(e=f-1;n>s;){if(p[--n]0?(a=i,r=c):(o=-o,r=s),r.reverse();o--;r.push(0));r.reverse()}for((o=s.length)-(e=c.length)<0&&(r=c,c=s,s=r,e=o),o=0;e;)o=(s[--e]=s[e]+c[e]+o)/f|0,s[e]=f===s[e]?0:s[e]%f;return o&&(s=[o].concat(s),++a),Q(t,s,a)},D.precision=D.sd=function(t){var e,r,n=this.c;if(null!=t&&t!==!!t&&1!==t&&0!==t&&(L&&tt(13,"argument"+a,t),t!=!!t&&(t=null)),!n)return null;if(e=(r=n.length-1)*l+1,r=n[r]){for(;r%10==0;r/=10,e--);for(r=n[0];r>=10;r/=10,e++);}return t&&this.e+1>e&&(e=this.e+1),e},D.round=function(t,e){var r=new X(this);return(null==t||U(t,0,m,15))&&et(r,~~t+this.e+1,null!=e&&U(e,0,8,15,s)?0|e:M),r},D.shift=function(t){var e=this;return U(t,-p,p,16,"argument")?e.times("1e"+B(t)):new X(e.c&&e.c[0]&&(t<-p||t>p)?e.s*(t<0?0:1/0):e)},D.squareRoot=D.sqrt=function(){var t,e,n,o,i,a=this,s=a.c,c=a.s,u=a.e,f=E+4,l=new X("0.5");if(1!==c||!s||!s[0])return new X(!c||c<0&&(!s||s[0])?NaN:s?a:1/0);if(0==(c=Math.sqrt(+a))||c==1/0?(((e=g(s)).length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=y((u+1)/2)-(u<0||u%2),n=new X(e=c==1/0?"1e"+u:(e=c.toExponential()).slice(0,e.indexOf("e")+1)+u)):n=new X(c+""),n.c[0])for((c=(u=n.e)+f)<3&&(c=0);;)if(i=n,n=l.times(i.plus(r(a,i,f,1))),g(i.c).slice(0,c)===(e=g(n.c)).slice(0,c)){if(n.e=0;){for(r=0,m=k[o]%_,g=k[o]/_|0,i=o+(a=c);i>o;)r=((u=m*(u=x[--a]%_)+(s=g*u+(p=x[a]/_|0)*m)%_*_+v[i]+r)/b|0)+(s/_|0)+g*p,v[i--]=u%b;v[i]=r}return r?++n:v.splice(0,1),Q(t,v,n)},D.toDigits=function(t,e){var r=new X(this);return t=null!=t&&U(t,1,m,18,"precision")?0|t:null,e=null!=e&&U(e,0,8,18,s)?0|e:M,t?et(r,t,e):r},D.toExponential=function(t,e){return V(this,null!=t&&U(t,0,m,19)?1+~~t:null,e,19)},D.toFixed=function(t,e){return V(this,null!=t&&U(t,0,m,20)?~~t+this.e+1:null,e,20)},D.toFormat=function(t,e){var r=V(this,null!=t&&U(t,0,m,21)?~~t+this.e+1:null,e,21);if(this.c){var n,o=r.split("."),i=+G.groupSize,a=+G.secondaryGroupSize,s=G.groupSeparator,c=o[0],u=o[1],f=this.s<0,l=f?c.slice(1):c,p=l.length;if(a&&(n=i,i=a,a=n,p-=n),i>0&&p>0){for(n=p%i||i,c=l.substr(0,n);n0&&(c+=s+l.slice(n)),f&&(c="-"+c)}r=u?c+G.decimalSeparator+((a=+G.fractionGroupSize)?u.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+G.fractionGroupSeparator):u):c}return r},D.toFraction=function(t){var e,n,o,i,a,s,c,u,f,p=L,d=this,m=d.c,y=new X(R),v=n=new X(R),b=c=new X(R);if(null!=t&&(L=!1,s=new X(t),L=p,(p=s.isInt())&&!s.lt(R)||(L&&tt(22,"max denominator "+(p?"out of range":"not an integer"),t),t=!p&&s.c&&et(s,s.e+1,1).gte(R)?s:null)),!m)return d.toString();for(f=g(m),i=y.e=f.length-d.e-1,y.c[0]=h[(a=i%l)<0?l+a:a],t=!t||s.cmp(y)>0?i>0?y:v:s,a=z,z=1/0,s=new X(f),c.c[0]=0;u=r(s,y,0,1),1!=(o=n.plus(u.times(b))).cmp(t);)n=b,b=o,v=c.plus(u.times(o=v)),c=o,y=s.minus(u.times(o=y)),s=o;return o=r(t.minus(n),b,0,1),c=c.plus(o.times(v)),n=n.plus(o.times(b)),c.s=v.s=d.s,e=r(v,b,i*=2,M).minus(d).abs().cmp(r(c,n,i,M).minus(d).abs())<1?[v.toString(),b.toString()]:[c.toString(),n.toString()],z=a,e},D.toNumber=function(){return+this},D.toPower=D.pow=function(t,e){var r,n,a,s=i(t<0?-t:+t),c=this;if(null!=e&&(P=23,e=new X(e)),!U(t,-p,p,23,"exponent")&&(!isFinite(t)||s>p&&(t/=0)||parseFloat(t)!=t&&!(t=NaN))||0==t)return r=Math.pow(+c,t),new X(e?r%e:r);for(e?t>1&&c.gt(R)&&c.isInt()&&e.gt(R)&&e.isInt()?c=c.mod(e):(a=e,e=null):K&&(r=o(K/l+2)),n=new X(R);;){if(s%2){if(!(n=n.times(c)).c)break;r?n.c.length>r&&(n.c.length=r):e&&(n=n.mod(e))}if(!(s=i(s/2)))break;c=c.times(c),r?c.c&&c.c.length>r&&(c.c.length=r):e&&(c=c.mod(e))}return e?n:(t<0&&(n=R.div(n)),a?n.mod(a):r?et(n,K,M):n)},D.toPrecision=function(t,e){return V(this,null!=t&&U(t,1,m,24,"precision")?0|t:null,e,24)},D.toString=function(t){var e,r=this.s,n=this.e;return null===n?r?(e="Infinity",r<0&&(e="-"+e)):e="NaN":(e=g(this.c),e=null!=t&&U(t,2,64,25,"base")?$(k(e,n),0|t,10,r):n<=H||n>=j?x(e,n):k(e,n),r<0&&this.c[0]&&(e="-"+e)),e},D.truncated=D.trunc=function(){return et(new X(this),this.e+1,1)},D.valueOf=D.toJSON=function(){var t,e=this.e;return null===e?this.toString():(t=g(this.c),t=e<=H||e>=j?x(t,e):k(t,e),this.s<0?"-"+t:t)},D.isBigNumber=!0,null!=e&&X.config(e),X}()).default=r.BigNumber=r,"function"==typeof define&&define.amd?define(function(){return r}):void 0!==e&&e.exports?e.exports=r:(t||(t="undefined"!=typeof self?self:Function("return this")()),t.BigNumber=r)}(this)},{}],web3:[function(t,e,r){var n=t("./lib/web3");"undefined"!=typeof window&&void 0===window.Web3&&(window.Web3=n),e.exports=n},{"./lib/web3":22}]},{},["web3"]);
\ No newline at end of file
diff --git a/erc20-generator-master/erc20-generator-master/test/token/BaseToken.behaviour.js b/erc20-generator-master/erc20-generator-master/test/token/BaseToken.behaviour.js
new file mode 100644
index 00000000..d86b7c15
--- /dev/null
+++ b/erc20-generator-master/erc20-generator-master/test/token/BaseToken.behaviour.js
@@ -0,0 +1,75 @@
+const { shouldBehaveLikeERC20Mintable } = require('openzeppelin-solidity/test/token/ERC20/behaviors/ERC20Mintable.behavior'); // eslint-disable-line max-len
+const { shouldBehaveLikeERC20Capped } = require('openzeppelin-solidity/test/token/ERC20/behaviors/ERC20Capped.behavior'); // eslint-disable-line max-len
+const { shouldBehaveLikeERC20Burnable } = require('openzeppelin-solidity/test/token/ERC20/behaviors/ERC20Burnable.behavior'); // eslint-disable-line max-len
+const { shouldBehaveLikeERC1363 } = require('erc-payable-token/test/token/ERC1363/ERC1363.behaviour');
+const { shouldBehaveLikeTokenRecover } = require('eth-token-recover/test/TokenRecover.behaviour');
+
+const { shouldBehaveLikeERC20Detailed } = require('./behaviours/ERC20Detailed.behaviour');
+const { shouldBehaveLikeERC20 } = require('./behaviours/ERC20.behaviour');
+
+const BigNumber = web3.BigNumber;
+
+require('chai')
+ .use(require('chai-bignumber')(BigNumber))
+ .should();
+
+function shouldBehaveLikeBaseToken (
+ [owner, anotherAccount, minter, operator, recipient, thirdParty],
+ [_name, _symbol, _decimals, _cap, _initialBalance]
+) {
+ context('like a ERC20Detailed', function () {
+ shouldBehaveLikeERC20Detailed(_name, _symbol, _decimals);
+ });
+
+ context('like a ERC20Mintable', function () {
+ beforeEach(async function () {
+ await this.token.addMinter(minter, { from: owner });
+ });
+ shouldBehaveLikeERC20Mintable(minter, [anotherAccount]);
+ });
+
+ context('like a ERC20Capped', function () {
+ beforeEach(async function () {
+ await this.token.addMinter(minter, { from: owner });
+ });
+ shouldBehaveLikeERC20Capped(minter, [anotherAccount], _cap);
+ });
+
+ context('like a ERC20Burnable', function () {
+ beforeEach(async function () {
+ await this.token.addMinter(minter, { from: owner });
+ await this.token.mint(owner, _initialBalance, { from: minter });
+ });
+ shouldBehaveLikeERC20Burnable(owner, _initialBalance, [owner]);
+ });
+
+ context('like a ERC20', function () {
+ beforeEach(async function () {
+ await this.token.addMinter(minter, { from: owner });
+ await this.token.mint(owner, _initialBalance, { from: minter });
+ // await this.token.finishMinting({ from: owner });
+ });
+ shouldBehaveLikeERC20([owner, anotherAccount, recipient], _initialBalance);
+ });
+
+ context('like a ERC1363', function () {
+ beforeEach(async function () {
+ await this.token.addMinter(minter, { from: owner });
+ await this.token.mint(owner, _initialBalance, { from: minter });
+ // await this.token.finishMinting({ from: owner });
+ });
+ shouldBehaveLikeERC1363([owner, anotherAccount, recipient], _initialBalance);
+ });
+
+ context('like a TokenRecover', function () {
+ beforeEach(async function () {
+ this.instance = this.token;
+ });
+
+ shouldBehaveLikeTokenRecover([owner, thirdParty]);
+ });
+}
+
+module.exports = {
+ shouldBehaveLikeBaseToken,
+};
diff --git a/erc20-generator-master/erc20-generator-master/test/token/BaseToken.test.js b/erc20-generator-master/erc20-generator-master/test/token/BaseToken.test.js
new file mode 100644
index 00000000..007f5fbd
--- /dev/null
+++ b/erc20-generator-master/erc20-generator-master/test/token/BaseToken.test.js
@@ -0,0 +1,72 @@
+const shouldFail = require('openzeppelin-solidity/test/helpers/shouldFail');
+
+const { shouldBehaveLikeBaseToken } = require('./BaseToken.behaviour');
+
+const BigNumber = web3.BigNumber;
+
+const BaseToken = artifacts.require('BaseToken');
+
+contract('BaseToken', function ([owner, anotherAccount, minter, operator, recipient, thirdParty]) {
+ const _name = 'BaseToken';
+ const _symbol = 'ERC20';
+ const _decimals = 18;
+ const _cap = new BigNumber(1000000);
+ const _initialBalance = 1000;
+
+ context('creating valid token', function () {
+ describe('as a ERC20Capped', function () {
+ it('requires a non-zero cap', async function () {
+ await shouldFail.reverting(
+ BaseToken.new(_name, _symbol, _decimals, 0, 0, { from: owner })
+ );
+ });
+ });
+
+ describe('as a BaseToken', function () {
+ it('requires cap greater than initial balance', async function () {
+ await shouldFail.reverting(
+ BaseToken.new(_name, _symbol, _decimals, _cap, _cap.add(1), { from: owner })
+ );
+ });
+ });
+ });
+
+ context('testing behaviours', function () {
+ beforeEach(async function () {
+ this.token = await BaseToken.new(_name, _symbol, _decimals, _cap, 0, { from: owner });
+ });
+
+ shouldBehaveLikeBaseToken(
+ [owner, anotherAccount, minter, operator, recipient, thirdParty],
+ [_name, _symbol, _decimals, _cap, _initialBalance]
+ );
+ });
+
+ context('like a BaseToken', function () {
+ describe('once deployed', function () {
+ describe('if initial amount greater than zero', function () {
+ beforeEach(async function () {
+ this.token = await BaseToken.new(_name, _symbol, _decimals, _cap, _initialBalance, { from: owner });
+ });
+
+ it('total supply should be initial balance', async function () {
+ (await this.token.totalSupply()).should.be.bignumber.equal(_initialBalance);
+ });
+
+ it('should mint initial balance of tokens to owner', async function () {
+ (await this.token.balanceOf(owner)).should.be.bignumber.equal(_initialBalance);
+ });
+ });
+
+ describe('if initial amount is equal to zero', function () {
+ beforeEach(async function () {
+ this.token = await BaseToken.new(_name, _symbol, _decimals, _cap, 0, { from: owner });
+ });
+
+ it('total supply should be zero', async function () {
+ (await this.token.totalSupply()).should.be.bignumber.equal(0);
+ });
+ });
+ });
+ });
+});
diff --git a/erc20-generator-master/erc20-generator-master/test/token/behaviours/ERC20.behaviour.js b/erc20-generator-master/erc20-generator-master/test/token/behaviours/ERC20.behaviour.js
new file mode 100644
index 00000000..349ab163
--- /dev/null
+++ b/erc20-generator-master/erc20-generator-master/test/token/behaviours/ERC20.behaviour.js
@@ -0,0 +1,533 @@
+const shouldFail = require('openzeppelin-solidity/test/helpers/shouldFail');
+const expectEvent = require('openzeppelin-solidity/test/helpers/expectEvent');
+const { ZERO_ADDRESS } = require('openzeppelin-solidity/test/helpers/constants');
+
+const BigNumber = web3.BigNumber;
+
+require('chai')
+ .use(require('chai-bignumber')(BigNumber))
+ .should();
+
+function shouldBehaveLikeERC20 ([owner, recipient, anotherAccount], initialBalance) {
+ describe('total supply', function () {
+ it('returns the total amount of tokens', async function () {
+ (await this.token.totalSupply()).should.be.bignumber.equal(initialBalance);
+ });
+ });
+
+ describe('balanceOf', function () {
+ describe('when the requested account has no tokens', function () {
+ it('returns zero', async function () {
+ (await this.token.balanceOf(anotherAccount)).should.be.bignumber.equal(0);
+ });
+ });
+
+ describe('when the requested account has some tokens', function () {
+ it('returns the total amount of tokens', async function () {
+ (await this.token.balanceOf(owner)).should.be.bignumber.equal(initialBalance);
+ });
+ });
+ });
+
+ describe('transfer', function () {
+ describe('when the recipient is not the zero address', function () {
+ const to = recipient;
+
+ describe('when the sender does not have enough balance', function () {
+ const amount = initialBalance + 1;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.transfer(to, amount, { from: owner }));
+ });
+ });
+
+ describe('when the sender has enough balance', function () {
+ const amount = initialBalance;
+
+ it('transfers the requested amount', async function () {
+ await this.token.transfer(to, amount, { from: owner });
+
+ (await this.token.balanceOf(owner)).should.be.bignumber.equal(0);
+
+ (await this.token.balanceOf(to)).should.be.bignumber.equal(amount);
+ });
+
+ it('emits a transfer event', async function () {
+ const { logs } = await this.token.transfer(to, amount, { from: owner });
+
+ expectEvent.inLogs(logs, 'Transfer', {
+ from: owner,
+ to: to,
+ value: amount,
+ });
+ });
+ });
+ });
+
+ describe('when the recipient is the zero address', function () {
+ const to = ZERO_ADDRESS;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.transfer(to, initialBalance, { from: owner }));
+ });
+ });
+ });
+
+ describe('approve', function () {
+ describe('when the spender is not the zero address', function () {
+ const spender = recipient;
+
+ describe('when the sender has enough balance', function () {
+ const amount = initialBalance;
+
+ it('emits an approval event', async function () {
+ const { logs } = await this.token.approve(spender, amount, { from: owner });
+
+ expectEvent.inLogs(logs, 'Approval', {
+ owner: owner,
+ spender: spender,
+ value: amount,
+ });
+ });
+
+ describe('when there was no approved amount before', function () {
+ it('approves the requested amount', async function () {
+ await this.token.approve(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount);
+ });
+ });
+
+ describe('when the spender had an approved amount', function () {
+ beforeEach(async function () {
+ await this.token.approve(spender, 1, { from: owner });
+ });
+
+ it('approves the requested amount and replaces the previous one', async function () {
+ await this.token.approve(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount);
+ });
+ });
+ });
+
+ describe('when the sender does not have enough balance', function () {
+ const amount = initialBalance + 1;
+
+ it('emits an approval event', async function () {
+ const { logs } = await this.token.approve(spender, amount, { from: owner });
+
+ expectEvent.inLogs(logs, 'Approval', {
+ owner: owner,
+ spender: spender,
+ value: amount,
+ });
+ });
+
+ describe('when there was no approved amount before', function () {
+ it('approves the requested amount', async function () {
+ await this.token.approve(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount);
+ });
+ });
+
+ describe('when the spender had an approved amount', function () {
+ beforeEach(async function () {
+ await this.token.approve(spender, 1, { from: owner });
+ });
+
+ it('approves the requested amount and replaces the previous one', async function () {
+ await this.token.approve(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount);
+ });
+ });
+ });
+ });
+
+ describe('when the spender is the zero address', function () {
+ const amount = initialBalance;
+ const spender = ZERO_ADDRESS;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.approve(spender, amount, { from: owner }));
+ });
+ });
+ });
+
+ describe('transfer from', function () {
+ const spender = recipient;
+
+ describe('when the recipient is not the zero address', function () {
+ const to = anotherAccount;
+
+ describe('when the spender has enough approved balance', function () {
+ beforeEach(async function () {
+ await this.token.approve(spender, initialBalance, { from: owner });
+ });
+
+ describe('when the owner has enough balance', function () {
+ const amount = initialBalance;
+
+ it('transfers the requested amount', async function () {
+ await this.token.transferFrom(owner, to, amount, { from: spender });
+
+ (await this.token.balanceOf(owner)).should.be.bignumber.equal(0);
+
+ (await this.token.balanceOf(to)).should.be.bignumber.equal(amount);
+ });
+
+ it('decreases the spender allowance', async function () {
+ await this.token.transferFrom(owner, to, amount, { from: spender });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(0);
+ });
+
+ it('emits a transfer event', async function () {
+ const { logs } = await this.token.transferFrom(owner, to, amount, { from: spender });
+
+ expectEvent.inLogs(logs, 'Transfer', {
+ from: owner,
+ to: to,
+ value: amount,
+ });
+ });
+ });
+
+ describe('when the owner does not have enough balance', function () {
+ const amount = initialBalance + 1;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.transferFrom(owner, to, amount, { from: spender }));
+ });
+ });
+ });
+
+ describe('when the spender does not have enough approved balance', function () {
+ beforeEach(async function () {
+ await this.token.approve(spender, 99, { from: owner });
+ });
+
+ describe('when the owner has enough balance', function () {
+ const amount = initialBalance;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.transferFrom(owner, to, amount, { from: spender }));
+ });
+ });
+
+ describe('when the owner does not have enough balance', function () {
+ const amount = initialBalance + 1;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.transferFrom(owner, to, amount, { from: spender }));
+ });
+ });
+ });
+ });
+
+ describe('when the recipient is the zero address', function () {
+ const amount = initialBalance;
+ const to = ZERO_ADDRESS;
+
+ beforeEach(async function () {
+ await this.token.approve(spender, amount, { from: owner });
+ });
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.transferFrom(owner, to, amount, { from: spender }));
+ });
+ });
+ });
+
+ describe('decrease allowance', function () {
+ describe('when the spender is not the zero address', function () {
+ const spender = recipient;
+
+ function shouldDecreaseApproval (amount) {
+ describe('when there was no approved amount before', function () {
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.decreaseAllowance(spender, amount, { from: owner }));
+ });
+ });
+
+ describe('when the spender had an approved amount', function () {
+ const approvedAmount = amount;
+
+ beforeEach(async function () {
+ ({ logs: this.logs } = await this.token.approve(spender, approvedAmount, { from: owner }));
+ });
+
+ it('emits an approval event', async function () {
+ const { logs } = await this.token.decreaseAllowance(spender, approvedAmount, { from: owner });
+
+ expectEvent.inLogs(logs, 'Approval', {
+ owner: owner,
+ spender: spender,
+ value: 0,
+ });
+ });
+
+ it('decreases the spender allowance subtracting the requested amount', async function () {
+ await this.token.decreaseAllowance(spender, approvedAmount - 1, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(1);
+ });
+
+ it('sets the allowance to zero when all allowance is removed', async function () {
+ await this.token.decreaseAllowance(spender, approvedAmount, { from: owner });
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(0);
+ });
+
+ it('reverts when more than the full allowance is removed', async function () {
+ await shouldFail.reverting(this.token.decreaseAllowance(spender, approvedAmount + 1, { from: owner }));
+ });
+ });
+ }
+
+ describe('when the sender has enough balance', function () {
+ const amount = initialBalance;
+
+ shouldDecreaseApproval(amount);
+ });
+
+ describe('when the sender does not have enough balance', function () {
+ const amount = initialBalance + 1;
+
+ shouldDecreaseApproval(amount);
+ });
+ });
+
+ describe('when the spender is the zero address', function () {
+ const amount = initialBalance;
+ const spender = ZERO_ADDRESS;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.decreaseAllowance(spender, amount, { from: owner }));
+ });
+ });
+ });
+
+ describe('increase allowance', function () {
+ const amount = initialBalance;
+
+ describe('when the spender is not the zero address', function () {
+ const spender = recipient;
+
+ describe('when the sender has enough balance', function () {
+ it('emits an approval event', async function () {
+ const { logs } = await this.token.increaseAllowance(spender, amount, { from: owner });
+
+ expectEvent.inLogs(logs, 'Approval', {
+ owner: owner,
+ spender: spender,
+ value: amount,
+ });
+ });
+
+ describe('when there was no approved amount before', function () {
+ it('approves the requested amount', async function () {
+ await this.token.increaseAllowance(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount);
+ });
+ });
+
+ describe('when the spender had an approved amount', function () {
+ beforeEach(async function () {
+ await this.token.approve(spender, 1, { from: owner });
+ });
+
+ it('increases the spender allowance adding the requested amount', async function () {
+ await this.token.increaseAllowance(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount + 1);
+ });
+ });
+ });
+
+ describe('when the sender does not have enough balance', function () {
+ const amount = initialBalance + 1;
+
+ it('emits an approval event', async function () {
+ const { logs } = await this.token.increaseAllowance(spender, amount, { from: owner });
+
+ expectEvent.inLogs(logs, 'Approval', {
+ owner: owner,
+ spender: spender,
+ value: amount,
+ });
+ });
+
+ describe('when there was no approved amount before', function () {
+ it('approves the requested amount', async function () {
+ await this.token.increaseAllowance(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount);
+ });
+ });
+
+ describe('when the spender had an approved amount', function () {
+ beforeEach(async function () {
+ await this.token.approve(spender, 1, { from: owner });
+ });
+
+ it('increases the spender allowance adding the requested amount', async function () {
+ await this.token.increaseAllowance(spender, amount, { from: owner });
+
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(amount + 1);
+ });
+ });
+ });
+ });
+
+ describe('when the spender is the zero address', function () {
+ const spender = ZERO_ADDRESS;
+
+ it('reverts', async function () {
+ await shouldFail.reverting(this.token.increaseAllowance(spender, amount, { from: owner }));
+ });
+ });
+ });
+
+ describe('_mint', function () {
+ const initialSupply = new BigNumber(initialBalance);
+ const amount = new BigNumber(50);
+
+ it('rejects a null account', async function () {
+ await shouldFail.reverting(this.token.mint(ZERO_ADDRESS, amount));
+ });
+
+ describe('for a non null account', function () {
+ beforeEach('minting', async function () {
+ const { logs } = await this.token.mint(recipient, amount);
+ this.logs = logs;
+ });
+
+ it('increments totalSupply', async function () {
+ const expectedSupply = initialSupply.plus(amount);
+ (await this.token.totalSupply()).should.be.bignumber.equal(expectedSupply);
+ });
+
+ it('increments recipient balance', async function () {
+ (await this.token.balanceOf(recipient)).should.be.bignumber.equal(amount);
+ });
+
+ it('emits Transfer event', async function () {
+ const event = expectEvent.inLogs(this.logs, 'Transfer', {
+ from: ZERO_ADDRESS,
+ to: recipient,
+ });
+
+ event.args.value.should.be.bignumber.equal(amount);
+ });
+ });
+ });
+
+ describe('_burn', function () {
+ const initialSupply = new BigNumber(initialBalance);
+
+ describe('for a non null account', function () {
+ it('rejects burning more than balance', async function () {
+ await shouldFail.reverting(this.token.burn(initialSupply.plus(1), { from: owner }));
+ });
+
+ const describeBurn = function (description, amount) {
+ describe(description, function () {
+ beforeEach('burning', async function () {
+ const { logs } = await this.token.burn(amount, { from: owner });
+ this.logs = logs;
+ });
+
+ it('decrements totalSupply', async function () {
+ const expectedSupply = initialSupply.minus(amount);
+ (await this.token.totalSupply()).should.be.bignumber.equal(expectedSupply);
+ });
+
+ it('decrements owner balance', async function () {
+ const expectedBalance = initialSupply.minus(amount);
+ (await this.token.balanceOf(owner)).should.be.bignumber.equal(expectedBalance);
+ });
+
+ it('emits Transfer event', async function () {
+ const event = expectEvent.inLogs(this.logs, 'Transfer', {
+ from: owner,
+ to: ZERO_ADDRESS,
+ });
+
+ event.args.value.should.be.bignumber.equal(amount);
+ });
+ });
+ };
+
+ describeBurn('for entire balance', initialSupply);
+ describeBurn('for less amount than balance', initialSupply.sub(1));
+ });
+ });
+
+ describe('_burnFrom', function () {
+ const initialSupply = new BigNumber(initialBalance);
+ const allowance = new BigNumber(initialBalance / 2);
+
+ const spender = anotherAccount;
+
+ beforeEach('approving', async function () {
+ await this.token.approve(spender, allowance, { from: owner });
+ });
+
+ it('rejects a null account', async function () {
+ await shouldFail.reverting(this.token.burnFrom(ZERO_ADDRESS, 1));
+ });
+
+ describe('for a non null account', function () {
+ it('rejects burning more than allowance', async function () {
+ await shouldFail.reverting(this.token.burnFrom(owner, allowance.plus(1)));
+ });
+
+ it('rejects burning more than balance', async function () {
+ await shouldFail.reverting(this.token.burnFrom(owner, initialSupply.plus(1)));
+ });
+
+ const describeBurnFrom = function (description, amount) {
+ describe(description, function () {
+ beforeEach('burning', async function () {
+ const { logs } = await this.token.burnFrom(owner, amount, { from: spender });
+ this.logs = logs;
+ });
+
+ it('decrements totalSupply', async function () {
+ const expectedSupply = initialSupply.minus(amount);
+ (await this.token.totalSupply()).should.be.bignumber.equal(expectedSupply);
+ });
+
+ it('decrements owner balance', async function () {
+ const expectedBalance = initialSupply.minus(amount);
+ (await this.token.balanceOf(owner)).should.be.bignumber.equal(expectedBalance);
+ });
+
+ it('decrements spender allowance', async function () {
+ const expectedAllowance = allowance.minus(amount);
+ (await this.token.allowance(owner, spender)).should.be.bignumber.equal(expectedAllowance);
+ });
+
+ it('emits Transfer event', async function () {
+ const event = expectEvent.inLogs(this.logs, 'Transfer', {
+ from: owner,
+ to: ZERO_ADDRESS,
+ });
+
+ event.args.value.should.be.bignumber.equal(amount);
+ });
+ });
+ };
+
+ describeBurnFrom('for entire allowance', allowance);
+ describeBurnFrom('for less amount than allowance', allowance.sub(1));
+ });
+ });
+}
+
+module.exports = {
+ shouldBehaveLikeERC20,
+};
diff --git a/erc20-generator-master/erc20-generator-master/test/token/behaviours/ERC20Detailed.behaviour.js b/erc20-generator-master/erc20-generator-master/test/token/behaviours/ERC20Detailed.behaviour.js
new file mode 100644
index 00000000..bf4482aa
--- /dev/null
+++ b/erc20-generator-master/erc20-generator-master/test/token/behaviours/ERC20Detailed.behaviour.js
@@ -0,0 +1,23 @@
+const BigNumber = web3.BigNumber;
+
+require('chai')
+ .use(require('chai-bignumber')(BigNumber))
+ .should();
+
+function shouldBehaveLikeERC20Detailed (_name, _symbol, _decimals) {
+ it('has a name', async function () {
+ (await this.token.name()).should.be.equal(_name);
+ });
+
+ it('has a symbol', async function () {
+ (await this.token.symbol()).should.be.equal(_symbol);
+ });
+
+ it('has an amount of decimals', async function () {
+ (await this.token.decimals()).should.be.bignumber.equal(_decimals);
+ });
+}
+
+module.exports = {
+ shouldBehaveLikeERC20Detailed,
+};
diff --git a/erc20-generator-master/erc20-generator-master/truffle-config.js b/erc20-generator-master/erc20-generator-master/truffle-config.js
new file mode 100644
index 00000000..cf684433
--- /dev/null
+++ b/erc20-generator-master/erc20-generator-master/truffle-config.js
@@ -0,0 +1,30 @@
+require('dotenv').config();
+
+module.exports = {
+ networks: {
+ develop: {
+ host: '127.0.0.1',
+ port: 9545,
+ network_id: '*', // eslint-disable-line camelcase
+ gas: 6000000, // Gas limit used for deploys
+ },
+ coverage: {
+ host: 'localhost',
+ network_id: '*', // eslint-disable-line camelcase
+ port: 8555,
+ gas: 0xfffffffffff,
+ gasPrice: 0x01,
+ },
+ ganache: {
+ host: 'localhost',
+ port: 8545,
+ network_id: '*', // eslint-disable-line camelcase
+ },
+ },
+ solc: {
+ optimizer: {
+ enabled: true,
+ runs: 200,
+ },
+ },
+};