text: ["^ ","~:resource-id",["~:shadow.build.npm/resource","node_modules/bn_DOT_js/lib/bn.js"],"~:js","shadow$provide.module$node_modules$bn_DOT_js$lib$bn=function(global,require,module$jscomp$0,exports$jscomp$0){(function(module,exports){function assert(val,msg){if(!val)throw Error(msg||\"Assertion failed\");}function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}function BN(number,base,endian){if(BN.isBN(number))return number;this.negative=0;this.words=null;this.length=0;this.red=\nnull;if(null!==number){if(\"le\"===base||\"be\"===base)endian=base,base=10;this._init(number||0,base||10,endian||\"be\")}}function parseHex4Bits(string,index){string=string.charCodeAt(index);return 65<=string&&70>=string?string-55:97<=string&&102>=string?string-87:string-48&15}function parseHexByte(string,lowerBound,index){var r=parseHex4Bits(string,index);index-1>=lowerBound&&(r|=parseHex4Bits(string,index-1)<<4);return r}function parseBase(str,start,end,mul){var r=0;for(end=Math.min(str.length,end);start<\nend;start++){var c=str.charCodeAt(start)-48;r*=mul;r=49<=c?r+(c-49+10):17<=c?r+(c-17+10):r+c}return r}function smallMulTo(self,num,out){out.negative=num.negative^self.negative;var len=self.length+num.length|0;out.length=len;len=len-1|0;var a=self.words[0]|0,b=num.words[0]|0;a*=b;var carry=a/67108864|0;out.words[0]=a&67108863;for(var k=1;k<len;k++){var ncarry=carry>>>26,rword=carry&67108863;carry=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=carry;j++)a=self.words[k-j|0]|0,b=num.words[j]|\n0,a=a*b+rword,ncarry+=a/67108864|0,rword=a&67108863;out.words[k]=rword|0;carry=ncarry|0}0!==carry?out.words[k]=carry|0:out.length--;return out.strip()}function FFTM(x,y){this.x=x;this.y=y}function MPrime(name,p){this.name=name;this.p=new BN(p,16);this.n=this.p.bitLength();this.k=(new BN(1)).iushln(this.n).isub(this.p);this.tmp=this._tmp()}function K256(){MPrime.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function P224(){MPrime.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}\nfunction P192(){MPrime.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function P25519(){MPrime.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function Red(m){\"string\"===typeof m?(m=BN._prime(m),this.m=m.p,this.prime=m):(assert(m.gtn(1),\"modulus must be greater than 1\"),this.m=m,this.prime=null)}function Mont(m){Red.call(this,m);this.shift=this.m.bitLength();0!==this.shift%26&&(this.shift+=26-this.shift%26);this.r=(new BN(1)).iushln(this.shift);\nthis.r2=this.imod(this.r.sqr());this.rinv=this.r._invmp(this.m);this.minv=this.rinv.mul(this.r).isubn(1).div(this.m);this.minv=this.minv.umod(this.r);this.minv=this.r.sub(this.minv)}\"object\"===typeof module?module.exports=BN:exports.BN=BN;BN.BN=BN;BN.wordSize=26;try{var Buffer=\"undefined\"!==typeof window&&\"undefined\"!==typeof window.Buffer?window.Buffer:require(\"module$node_modules$buffer$index\").Buffer}catch(e){}BN.isBN=function(num){return num instanceof BN?!0:null!==num&&\"object\"===typeof num&&\nnum.constructor.wordSize===BN.wordSize&&Array.isArray(num.words)};BN.max=function(left,right){return 0<left.cmp(right)?left:right};BN.min=function(left,right){return 0>left.cmp(right)?left:right};BN.prototype._init=function(number,base,endian){if(\"number\"===typeof number)return this._initNumber(number,base,endian);if(\"object\"===typeof number)return this._initArray(number,base,endian);\"hex\"===base&&(base=16);assert(base===(base|0)&&2<=base&&36>=base);number=number.toString().replace(/\\s+/g,\"\");var start=\n0;\"-\"===number[0]&&(start++,this.negative=1);start<number.length&&(16===base?this._parseHex(number,start,endian):(this._parseBase(number,base,start),\"le\"===endian&&this._initArray(this.toArray(),base,endian)))};BN.prototype._initNumber=function(number,base,endian){0>number&&(this.negative=1,number=-number);67108864>number?(this.words=[number&67108863],this.length=1):4503599627370496>number?(this.words=[number&67108863,number/67108864&67108863],this.length=2):(assert(9007199254740992>number),this.words=\n[number&67108863,number/67108864&67108863,1],this.length=3);\"le\"===endian&&this._initArray(this.toArray(),base,endian)};BN.prototype._initArray=function(number,base,endian){assert(\"number\"===typeof number.length);if(0>=number.length)return this.words=[0],this.length=1,this;this.length=Math.ceil(number.length/3);this.words=Array(this.length);for(base=0;base<this.length;base++)this.words[base]=0;var off=0;if(\"be\"===endian)for(base=number.length-1,endian=0;0<=base;base-=3){var w=number[base]|number[base-\n1]<<8|number[base-2]<<16;this.words[endian]|=w<<off&67108863;this.words[endian+1]=w>>>26-off&67108863;off+=24;26<=off&&(off-=26,endian++)}else if(\"le\"===endian)for(endian=base=0;base<number.length;base+=3)w=number[base]|number[base+1]<<8|number[base+2]<<16,this.words[endian]|=w<<off&67108863,this.words[endian+1]=w>>>26-off&67108863,off+=24,26<=off&&(off-=26,endian++);return this.strip()};BN.prototype._parseHex=function(number,start,endian){this.length=Math.ceil((number.length-start)/6);this.words=\nArray(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var off=0,j=0;if(\"be\"===endian)for(i=number.length-1;i>=start;i-=2)endian=parseHexByte(number,start,i)<<off,this.words[j]|=endian&67108863,18<=off?(off-=18,j+=1,this.words[j]|=endian>>>26):off+=8;else for(i=0===(number.length-start)%2?start+1:start;i<number.length;i+=2)endian=parseHexByte(number,start,i)<<off,this.words[j]|=endian&67108863,18<=off?(off-=18,j+=1,this.words[j]|=endian>>>26):off+=8;this.strip()};BN.prototype._parseBase=\nfunction(number,base,start){this.words=[0];this.length=1;for(var limbLen=0,limbPow=1;67108863>=limbPow;limbPow*=base)limbLen++;limbLen--;limbPow=limbPow/base|0;var total=number.length-start,mod=total%limbLen;total=Math.min(total,total-mod)+start;for(var i=start;i<total;i+=limbLen)start=parseBase(number,i,i+limbLen,base),this.imuln(limbPow),67108864>this.words[0]+start?this.words[0]+=start:this._iaddn(start);if(0!==mod){limbLen=1;start=parseBase(number,i,number.length,base);for(i=0;i<mod;i++)limbLen*=\nbase;this.imuln(limbLen);67108864>this.words[0]+start?this.words[0]+=start:this._iaddn(start)}this.strip()};BN.prototype.copy=function(dest){dest.words=Array(this.length);for(var i=0;i<this.length;i++)dest.words[i]=this.words[i];dest.length=this.length;dest.negative=this.negative;dest.red=this.red};BN.prototype.clone=function(){var r=new BN(null);this.copy(r);return r};BN.prototype._expand=function(size){for(;this.length<size;)this.words[this.length++]=0;return this};BN.prototype.strip=function(){for(;1<\nthis.length&&0===this.words[this.length-1];)this.length--;return this._normSign()};BN.prototype._normSign=function(){1===this.length&&0===this.words[0]&&(this.negative=0);return this};BN.prototype.inspect=function(){return(this.red?\"\\x3cBN-R: \":\"\\x3cBN: \")+this.toString(16)+\"\\x3e\"};var zeros=\" 0 00 000 0000 00000 000000 0000000 00000000 000000000 0000000000 00000000000 000000000000 0000000000000 00000000000000 000000000000000 0000000000000000 00000000000000000 000000000000000000 0000000000000000000 00000000000000000000 000000000000000000000 0000000000000000000000 00000000000000000000000 000000000000000000000000 0000000000000000000000000\".split(\" \"),\ngroupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1E7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64E6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243E5,28629151,33554432,39135393,45435424,52521875,60466176];BN.prototype.toString=function(base,padding){base=base||10;padding=padding|0||1;if(16===base||\"hex\"===\nbase){var out=\"\";for(var carry=base=0,i=0;i<this.length;i++){var w=this.words[i],word=((w<<base|carry)&16777215).toString(16);carry=w>>>24-base&16777215;out=0!==carry||i!==this.length-1?zeros[6-word.length]+word+out:word+out;base+=2;26<=base&&(base-=26,i--)}for(0!==carry&&(out=carry.toString(16)+out);0!==out.length%padding;)out=\"0\"+out;0!==this.negative&&(out=\"-\"+out);return out}if(base===(base|0)&&2<=base&&36>=base){carry=groupSizes[base];i=groupBases[base];out=\"\";w=this.clone();for(w.negative=0;!w.isZero();)word=\nw.modn(i).toString(base),w=w.idivn(i),out=w.isZero()?word+out:zeros[carry-word.length]+word+out;for(this.isZero()&&(out=\"0\"+out);0!==out.length%padding;)out=\"0\"+out;0!==this.negative&&(out=\"-\"+out);return out}assert(!1,\"Base should be between 2 and 36\")};BN.prototype.toNumber=function(){var ret=this.words[0];2===this.length?ret+=67108864*this.words[1]:3===this.length&&1===this.words[2]?ret+=4503599627370496+67108864*this.words[1]:2<this.length&&assert(!1,\"Number can only safely store up to 53 bits\");\nreturn 0!==this.negative?-ret:ret};BN.prototype.toJSON=function(){return this.toString(16)};BN.prototype.toBuffer=function(endian,length){assert(\"undefined\"!==typeof Buffer);return this.toArrayLike(Buffer,endian,length)};BN.prototype.toArray=function(endian,length){return this.toArrayLike(Array,endian,length)};BN.prototype.toArrayLike=function(ArrayType,endian,length){var byteLength=this.byteLength();length=length||Math.max(1,byteLength);assert(byteLength<=length,\"byte array longer than desired length\");\nassert(0<length,\"Requested array length \\x3c\\x3d 0\");this.strip();var littleEndian=\"le\"===endian;ArrayType=new ArrayType(length);endian=this.clone();if(littleEndian){for(littleEndian=0;!endian.isZero();littleEndian++)byteLength=endian.andln(255),endian.iushrn(8),ArrayType[littleEndian]=byteLength;for(;littleEndian<length;littleEndian++)ArrayType[littleEndian]=0}else{for(littleEndian=0;littleEndian<length-byteLength;littleEndian++)ArrayType[littleEndian]=0;for(littleEndian=0;!endian.isZero();littleEndian++)byteLength=\nendian.andln(255),endian.iushrn(8),ArrayType[length-littleEndian-1]=byteLength}return ArrayType};BN.prototype._countBits=Math.clz32?function(w){return 32-Math.clz32(w)}:function(w){var r=0;4096<=w&&(r+=13,w>>>=13);64<=w&&(r+=7,w>>>=7);8<=w&&(r+=4,w>>>=4);2<=w&&(r+=2,w>>>=2);return r+w};BN.prototype._zeroBits=function(w){if(0===w)return 26;var r=0;0===(w&8191)&&(r+=13,w>>>=13);0===(w&127)&&(r+=7,w>>>=7);0===(w&15)&&(r+=4,w>>>=4);0===(w&3)&&(r+=2,w>>>=2);0===(w&1)&&r++;return r};BN.prototype.bitLength=\nfunction(){var hi=this._countBits(this.words[this.length-1]);return 26*(this.length-1)+hi};BN.prototype.zeroBits=function(){if(this.isZero())return 0;for(var r=0,i=0;i<this.length;i++){var b=this._zeroBits(this.words[i]);r+=b;if(26!==b)break}return r};BN.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)};BN.prototype.toTwos=function(width){return 0!==this.negative?this.abs().inotn(width).iaddn(1):this.clone()};BN.prototype.fromTwos=function(width){return this.testn(width-1)?this.notn(width).iaddn(1).ineg():\nthis.clone()};BN.prototype.isNeg=function(){return 0!==this.negative};BN.prototype.neg=function(){return this.clone().ineg()};BN.prototype.ineg=function(){this.isZero()||(this.negative^=1);return this};BN.prototype.iuor=function(num){for(;this.length<num.length;)this.words[this.length++]=0;for(var i=0;i<num.length;i++)this.words[i]|=num.words[i];return this.strip()};BN.prototype.ior=function(num){assert(0===(this.negative|num.negative));return this.iuor(num)};BN.prototype.or=function(num){return this.length>\nnum.length?this.clone().ior(num):num.clone().ior(this)};BN.prototype.uor=function(num){return this.length>num.length?this.clone().iuor(num):num.clone().iuor(this)};BN.prototype.iuand=function(num){var b=this.length>num.length?num:this;for(var i=0;i<b.length;i++)this.words[i]&=num.words[i];this.length=b.length;return this.strip()};BN.prototype.iand=function(num){assert(0===(this.negative|num.negative));return this.iuand(num)};BN.prototype.and=function(num){return this.length>num.length?this.clone().iand(num):\nnum.clone().iand(this)};BN.prototype.uand=function(num){return this.length>num.length?this.clone().iuand(num):num.clone().iuand(this)};BN.prototype.iuxor=function(num){if(this.length>num.length)var a=this;else a=num,num=this;for(var i=0;i<num.length;i++)this.words[i]=a.words[i]^num.words[i];if(this!==a)for(;i<a.length;i++)this.words[i]=a.words[i];this.length=a.length;return this.strip()};BN.prototype.ixor=function(num){assert(0===(this.negative|num.negative));return this.iuxor(num)};BN.prototype.xor=\nfunction(num){return this.length>num.length?this.clone().ixor(num):num.clone().ixor(this)};BN.prototype.uxor=function(num){return this.length>num.length?this.clone().iuxor(num):num.clone().iuxor(this)};BN.prototype.inotn=function(width){assert(\"number\"===typeof width&&0<=width);var bytesNeeded=Math.ceil(width/26)|0;width%=26;this._expand(bytesNeeded);0<width&&bytesNeeded--;for(var i=0;i<bytesNeeded;i++)this.words[i]=~this.words[i]&67108863;0<width&&(this.words[i]=~this.words[i]&67108863>>26-width);\nreturn this.strip()};BN.prototype.notn=function(width){return this.clone().inotn(width)};BN.prototype.setn=function(bit,val){assert(\"number\"===typeof bit&&0<=bit);var off=bit/26|0;bit%=26;this._expand(off+1);this.words[off]=val?this.words[off]|1<<bit:this.words[off]&~(1<<bit);return this.strip()};BN.prototype.iadd=function(num){if(0!==this.negative&&0===num.negative)return this.negative=0,this.isub(num),this.negative^=1,this._normSign();if(0===this.negative&&0!==num.negative){num.negative=0;var r=\nthis.isub(num);num.negative=1;return r._normSign()}if(this.length>num.length)var a=this;else a=num,num=this;for(var i=r=0;i<num.length;i++)r=(a.words[i]|0)+(num.words[i]|0)+r,this.words[i]=r&67108863,r>>>=26;for(;0!==r&&i<a.length;i++)r=(a.words[i]|0)+r,this.words[i]=r&67108863,r>>>=26;this.length=a.length;if(0!==r)this.words[this.length]=r,this.length++;else if(a!==this)for(;i<a.length;i++)this.words[i]=a.words[i];return this};BN.prototype.add=function(num){if(0!==num.negative&&0===this.negative){num.negative=\n0;var res=this.sub(num);num.negative^=1;return res}return 0===num.negative&&0!==this.negative?(this.negative=0,res=num.sub(this),this.negative=1,res):this.length>num.length?this.clone().iadd(num):num.clone().iadd(this)};BN.prototype.isub=function(num){if(0!==num.negative){num.negative=0;var r=this.iadd(num);num.negative=1;return r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(num),this.negative=1,this._normSign();r=this.cmp(num);if(0===r)return this.negative=0,this.length=1,this.words[0]=\n0,this;if(0<r)var a=this;else a=num,num=this;for(var carry=0,i=0;i<num.length;i++)r=(a.words[i]|0)-(num.words[i]|0)+carry,carry=r>>26,this.words[i]=r&67108863;for(;0!==carry&&i<a.length;i++)r=(a.words[i]|0)+carry,carry=r>>26,this.words[i]=r&67108863;if(0===carry&&i<a.length&&a!==this)for(;i<a.length;i++)this.words[i]=a.words[i];this.length=Math.max(this.length,i);a!==this&&(this.negative=1);return this.strip()};BN.prototype.sub=function(num){return this.clone().isub(num)};var comb10MulTo=function(self,\nnum,out){var a=self.words,b=num.words,o=out.words,c=0,a0=a[0]|0,al0=a0&8191,ah0=a0>>>13,a1=a[1]|0;a0=a1&8191;var ah1=a1>>>13,a2=a[2]|0;a1=a2&8191;var ah2=a2>>>13,a3=a[3]|0;a2=a3&8191;var ah3=a3>>>13,a4=a[4]|0;a3=a4&8191;var ah4=a4>>>13,a5=a[5]|0;a4=a5&8191;var ah5=a5>>>13,a6=a[6]|0;a5=a6&8191;var ah6=a6>>>13,a7=a[7]|0;a6=a7&8191;var ah7=a7>>>13,a8=a[8]|0;a7=a8&8191;a8>>>=13;var a9=a[9]|0;a=a9&8191;a9>>>=13;var b0=b[0]|0,bl0=b0&8191,bh0=b0>>>13,b1=b[1]|0;b0=b1&8191;var bh1=b1>>>13,b2=b[2]|0;b1=b2&\n8191;var bh2=b2>>>13,b3=b[3]|0;b2=b3&8191;var bh3=b3>>>13,b4=b[4]|0;b3=b4&8191;var bh4=b4>>>13,b5=b[5]|0;b4=b5&8191;var bh5=b5>>>13,b6=b[6]|0;b5=b6&8191;var bh6=b6>>>13,b7=b[7]|0;b6=b7&8191;var bh7=b7>>>13,b8=b[8]|0;b7=b8&8191;b8>>>=13;var b9=b[9]|0;b=b9&8191;b9>>>=13;out.negative=self.negative^num.negative;out.length=19;var lo=Math.imul(al0,bl0);self=Math.imul(al0,bh0);self=self+Math.imul(ah0,bl0)|0;num=Math.imul(ah0,bh0);var w0=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w0>>>26)|0;w0&=\n67108863;lo=Math.imul(a0,bl0);self=Math.imul(a0,bh0);self=self+Math.imul(ah1,bl0)|0;num=Math.imul(ah1,bh0);lo=lo+Math.imul(al0,b0)|0;self=self+Math.imul(al0,bh1)|0;self=self+Math.imul(ah0,b0)|0;num=num+Math.imul(ah0,bh1)|0;var w1=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w1>>>26)|0;w1&=67108863;lo=Math.imul(a1,bl0);self=Math.imul(a1,bh0);self=self+Math.imul(ah2,bl0)|0;num=Math.imul(ah2,bh0);lo=lo+Math.imul(a0,b0)|0;self=self+Math.imul(a0,bh1)|0;self=self+Math.imul(ah1,b0)|0;num=num+Math.imul(ah1,\nbh1)|0;lo=lo+Math.imul(al0,b1)|0;self=self+Math.imul(al0,bh2)|0;self=self+Math.imul(ah0,b1)|0;num=num+Math.imul(ah0,bh2)|0;var w2=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w2>>>26)|0;w2&=67108863;lo=Math.imul(a2,bl0);self=Math.imul(a2,bh0);self=self+Math.imul(ah3,bl0)|0;num=Math.imul(ah3,bh0);lo=lo+Math.imul(a1,b0)|0;self=self+Math.imul(a1,bh1)|0;self=self+Math.imul(ah2,b0)|0;num=num+Math.imul(ah2,bh1)|0;lo=lo+Math.imul(a0,b1)|0;self=self+Math.imul(a0,bh2)|0;self=self+Math.imul(ah1,b1)|\n0;num=num+Math.imul(ah1,bh2)|0;lo=lo+Math.imul(al0,b2)|0;self=self+Math.imul(al0,bh3)|0;self=self+Math.imul(ah0,b2)|0;num=num+Math.imul(ah0,bh3)|0;var w3=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w3>>>26)|0;w3&=67108863;lo=Math.imul(a3,bl0);self=Math.imul(a3,bh0);self=self+Math.imul(ah4,bl0)|0;num=Math.imul(ah4,bh0);lo=lo+Math.imul(a2,b0)|0;self=self+Math.imul(a2,bh1)|0;self=self+Math.imul(ah3,b0)|0;num=num+Math.imul(ah3,bh1)|0;lo=lo+Math.imul(a1,b1)|0;self=self+Math.imul(a1,bh2)|0;self=\nself+Math.imul(ah2,b1)|0;num=num+Math.imul(ah2,bh2)|0;lo=lo+Math.imul(a0,b2)|0;self=self+Math.imul(a0,bh3)|0;self=self+Math.imul(ah1,b2)|0;num=num+Math.imul(ah1,bh3)|0;lo=lo+Math.imul(al0,b3)|0;self=self+Math.imul(al0,bh4)|0;self=self+Math.imul(ah0,b3)|0;num=num+Math.imul(ah0,bh4)|0;var w4=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w4>>>26)|0;w4&=67108863;lo=Math.imul(a4,bl0);self=Math.imul(a4,bh0);self=self+Math.imul(ah5,bl0)|0;num=Math.imul(ah5,bh0);lo=lo+Math.imul(a3,b0)|0;self=self+Math.imul(a3,\nbh1)|0;self=self+Math.imul(ah4,b0)|0;num=num+Math.imul(ah4,bh1)|0;lo=lo+Math.imul(a2,b1)|0;self=self+Math.imul(a2,bh2)|0;self=self+Math.imul(ah3,b1)|0;num=num+Math.imul(ah3,bh2)|0;lo=lo+Math.imul(a1,b2)|0;self=self+Math.imul(a1,bh3)|0;self=self+Math.imul(ah2,b2)|0;num=num+Math.imul(ah2,bh3)|0;lo=lo+Math.imul(a0,b3)|0;self=self+Math.imul(a0,bh4)|0;self=self+Math.imul(ah1,b3)|0;num=num+Math.imul(ah1,bh4)|0;lo=lo+Math.imul(al0,b4)|0;self=self+Math.imul(al0,bh5)|0;self=self+Math.imul(ah0,b4)|0;num=num+\nMath.imul(ah0,bh5)|0;var w5=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w5>>>26)|0;w5&=67108863;lo=Math.imul(a5,bl0);self=Math.imul(a5,bh0);self=self+Math.imul(ah6,bl0)|0;num=Math.imul(ah6,bh0);lo=lo+Math.imul(a4,b0)|0;self=self+Math.imul(a4,bh1)|0;self=self+Math.imul(ah5,b0)|0;num=num+Math.imul(ah5,bh1)|0;lo=lo+Math.imul(a3,b1)|0;self=self+Math.imul(a3,bh2)|0;self=self+Math.imul(ah4,b1)|0;num=num+Math.imul(ah4,bh2)|0;lo=lo+Math.imul(a2,b2)|0;self=self+Math.imul(a2,bh3)|0;self=self+Math.imul(ah3,\nb2)|0;num=num+Math.imul(ah3,bh3)|0;lo=lo+Math.imul(a1,b3)|0;self=self+Math.imul(a1,bh4)|0;self=self+Math.imul(ah2,b3)|0;num=num+Math.imul(ah2,bh4)|0;lo=lo+Math.imul(a0,b4)|0;self=self+Math.imul(a0,bh5)|0;self=self+Math.imul(ah1,b4)|0;num=num+Math.imul(ah1,bh5)|0;lo=lo+Math.imul(al0,b5)|0;self=self+Math.imul(al0,bh6)|0;self=self+Math.imul(ah0,b5)|0;num=num+Math.imul(ah0,bh6)|0;var w6=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w6>>>26)|0;w6&=67108863;lo=Math.imul(a6,bl0);self=Math.imul(a6,\nbh0);self=self+Math.imul(ah7,bl0)|0;num=Math.imul(ah7,bh0);lo=lo+Math.imul(a5,b0)|0;self=self+Math.imul(a5,bh1)|0;self=self+Math.imul(ah6,b0)|0;num=num+Math.imul(ah6,bh1)|0;lo=lo+Math.imul(a4,b1)|0;self=self+Math.imul(a4,bh2)|0;self=self+Math.imul(ah5,b1)|0;num=num+Math.imul(ah5,bh2)|0;lo=lo+Math.imul(a3,b2)|0;self=self+Math.imul(a3,bh3)|0;self=self+Math.imul(ah4,b2)|0;num=num+Math.imul(ah4,bh3)|0;lo=lo+Math.imul(a2,b3)|0;self=self+Math.imul(a2,bh4)|0;self=self+Math.imul(ah3,b3)|0;num=num+Math.imul(ah3,\nbh4)|0;lo=lo+Math.imul(a1,b4)|0;self=self+Math.imul(a1,bh5)|0;self=self+Math.imul(ah2,b4)|0;num=num+Math.imul(ah2,bh5)|0;lo=lo+Math.imul(a0,b5)|0;self=self+Math.imul(a0,bh6)|0;self=self+Math.imul(ah1,b5)|0;num=num+Math.imul(ah1,bh6)|0;lo=lo+Math.imul(al0,b6)|0;self=self+Math.imul(al0,bh7)|0;self=self+Math.imul(ah0,b6)|0;num=num+Math.imul(ah0,bh7)|0;var w7=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w7>>>26)|0;w7&=67108863;lo=Math.imul(a7,bl0);self=Math.imul(a7,bh0);self=self+Math.imul(a8,\nbl0)|0;num=Math.imul(a8,bh0);lo=lo+Math.imul(a6,b0)|0;self=self+Math.imul(a6,bh1)|0;self=self+Math.imul(ah7,b0)|0;num=num+Math.imul(ah7,bh1)|0;lo=lo+Math.imul(a5,b1)|0;self=self+Math.imul(a5,bh2)|0;self=self+Math.imul(ah6,b1)|0;num=num+Math.imul(ah6,bh2)|0;lo=lo+Math.imul(a4,b2)|0;self=self+Math.imul(a4,bh3)|0;self=self+Math.imul(ah5,b2)|0;num=num+Math.imul(ah5,bh3)|0;lo=lo+Math.imul(a3,b3)|0;self=self+Math.imul(a3,bh4)|0;self=self+Math.imul(ah4,b3)|0;num=num+Math.imul(ah4,bh4)|0;lo=lo+Math.imul(a2,\nb4)|0;self=self+Math.imul(a2,bh5)|0;self=self+Math.imul(ah3,b4)|0;num=num+Math.imul(ah3,bh5)|0;lo=lo+Math.imul(a1,b5)|0;self=self+Math.imul(a1,bh6)|0;self=self+Math.imul(ah2,b5)|0;num=num+Math.imul(ah2,bh6)|0;lo=lo+Math.imul(a0,b6)|0;self=self+Math.imul(a0,bh7)|0;self=self+Math.imul(ah1,b6)|0;num=num+Math.imul(ah1,bh7)|0;lo=lo+Math.imul(al0,b7)|0;self=self+Math.imul(al0,b8)|0;self=self+Math.imul(ah0,b7)|0;num=num+Math.imul(ah0,b8)|0;var w8=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(w8>>>\n26)|0;w8&=67108863;lo=Math.imul(a,bl0);self=Math.imul(a,bh0);self=self+Math.imul(a9,bl0)|0;num=Math.imul(a9,bh0);lo=lo+Math.imul(a7,b0)|0;self=self+Math.imul(a7,bh1)|0;self=self+Math.imul(a8,b0)|0;num=num+Math.imul(a8,bh1)|0;lo=lo+Math.imul(a6,b1)|0;self=self+Math.imul(a6,bh2)|0;self=self+Math.imul(ah7,b1)|0;num=num+Math.imul(ah7,bh2)|0;lo=lo+Math.imul(a5,b2)|0;self=self+Math.imul(a5,bh3)|0;self=self+Math.imul(ah6,b2)|0;num=num+Math.imul(ah6,bh3)|0;lo=lo+Math.imul(a4,b3)|0;self=self+Math.imul(a4,\nbh4)|0;self=self+Math.imul(ah5,b3)|0;num=num+Math.imul(ah5,bh4)|0;lo=lo+Math.imul(a3,b4)|0;self=self+Math.imul(a3,bh5)|0;self=self+Math.imul(ah4,b4)|0;num=num+Math.imul(ah4,bh5)|0;lo=lo+Math.imul(a2,b5)|0;self=self+Math.imul(a2,bh6)|0;self=self+Math.imul(ah3,b5)|0;num=num+Math.imul(ah3,bh6)|0;lo=lo+Math.imul(a1,b6)|0;self=self+Math.imul(a1,bh7)|0;self=self+Math.imul(ah2,b6)|0;num=num+Math.imul(ah2,bh7)|0;lo=lo+Math.imul(a0,b7)|0;self=self+Math.imul(a0,b8)|0;self=self+Math.imul(ah1,b7)|0;num=num+Math.imul(ah1,\nb8)|0;lo=lo+Math.imul(al0,b)|0;self=self+Math.imul(al0,b9)|0;self=self+Math.imul(ah0,b)|0;num=num+Math.imul(ah0,b9)|0;al0=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(al0>>>26)|0;al0&=67108863;lo=Math.imul(a,b0);self=Math.imul(a,bh1);self=self+Math.imul(a9,b0)|0;num=Math.imul(a9,bh1);lo=lo+Math.imul(a7,b1)|0;self=self+Math.imul(a7,bh2)|0;self=self+Math.imul(a8,b1)|0;num=num+Math.imul(a8,bh2)|0;lo=lo+Math.imul(a6,b2)|0;self=self+Math.imul(a6,bh3)|0;self=self+Math.imul(ah7,b2)|0;num=num+Math.imul(ah7,\nbh3)|0;lo=lo+Math.imul(a5,b3)|0;self=self+Math.imul(a5,bh4)|0;self=self+Math.imul(ah6,b3)|0;num=num+Math.imul(ah6,bh4)|0;lo=lo+Math.imul(a4,b4)|0;self=self+Math.imul(a4,bh5)|0;self=self+Math.imul(ah5,b4)|0;num=num+Math.imul(ah5,bh5)|0;lo=lo+Math.imul(a3,b5)|0;self=self+Math.imul(a3,bh6)|0;self=self+Math.imul(ah4,b5)|0;num=num+Math.imul(ah4,bh6)|0;lo=lo+Math.imul(a2,b6)|0;self=self+Math.imul(a2,bh7)|0;self=self+Math.imul(ah3,b6)|0;num=num+Math.imul(ah3,bh7)|0;lo=lo+Math.imul(a1,b7)|0;self=self+Math.imul(a1,\nb8)|0;self=self+Math.imul(ah2,b7)|0;num=num+Math.imul(ah2,b8)|0;lo=lo+Math.imul(a0,b)|0;self=self+Math.imul(a0,b9)|0;self=self+Math.imul(ah1,b)|0;num=num+Math.imul(ah1,b9)|0;a0=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(a0>>>26)|0;a0&=67108863;lo=Math.imul(a,b1);self=Math.imul(a,bh2);self=self+Math.imul(a9,b1)|0;num=Math.imul(a9,bh2);lo=lo+Math.imul(a7,b2)|0;self=self+Math.imul(a7,bh3)|0;self=self+Math.imul(a8,b2)|0;num=num+Math.imul(a8,bh3)|0;lo=lo+Math.imul(a6,b3)|0;self=self+Math.imul(a6,\nbh4)|0;self=self+Math.imul(ah7,b3)|0;num=num+Math.imul(ah7,bh4)|0;lo=lo+Math.imul(a5,b4)|0;self=self+Math.imul(a5,bh5)|0;self=self+Math.imul(ah6,b4)|0;num=num+Math.imul(ah6,bh5)|0;lo=lo+Math.imul(a4,b5)|0;self=self+Math.imul(a4,bh6)|0;self=self+Math.imul(ah5,b5)|0;num=num+Math.imul(ah5,bh6)|0;lo=lo+Math.imul(a3,b6)|0;self=self+Math.imul(a3,bh7)|0;self=self+Math.imul(ah4,b6)|0;num=num+Math.imul(ah4,bh7)|0;lo=lo+Math.imul(a2,b7)|0;self=self+Math.imul(a2,b8)|0;self=self+Math.imul(ah3,b7)|0;num=num+Math.imul(ah3,\nb8)|0;lo=lo+Math.imul(a1,b)|0;self=self+Math.imul(a1,b9)|0;self=self+Math.imul(ah2,b)|0;num=num+Math.imul(ah2,b9)|0;a1=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(a1>>>26)|0;a1&=67108863;lo=Math.imul(a,b2);self=Math.imul(a,bh3);self=self+Math.imul(a9,b2)|0;num=Math.imul(a9,bh3);lo=lo+Math.imul(a7,b3)|0;self=self+Math.imul(a7,bh4)|0;self=self+Math.imul(a8,b3)|0;num=num+Math.imul(a8,bh4)|0;lo=lo+Math.imul(a6,b4)|0;self=self+Math.imul(a6,bh5)|0;self=self+Math.imul(ah7,b4)|0;num=num+Math.imul(ah7,\nbh5)|0;lo=lo+Math.imul(a5,b5)|0;self=self+Math.imul(a5,bh6)|0;self=self+Math.imul(ah6,b5)|0;num=num+Math.imul(ah6,bh6)|0;lo=lo+Math.imul(a4,b6)|0;self=self+Math.imul(a4,bh7)|0;self=self+Math.imul(ah5,b6)|0;num=num+Math.imul(ah5,bh7)|0;lo=lo+Math.imul(a3,b7)|0;self=self+Math.imul(a3,b8)|0;self=self+Math.imul(ah4,b7)|0;num=num+Math.imul(ah4,b8)|0;lo=lo+Math.imul(a2,b)|0;self=self+Math.imul(a2,b9)|0;self=self+Math.imul(ah3,b)|0;num=num+Math.imul(ah3,b9)|0;a2=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>\n13)|0)+(a2>>>26)|0;a2&=67108863;lo=Math.imul(a,b3);self=Math.imul(a,bh4);self=self+Math.imul(a9,b3)|0;num=Math.imul(a9,bh4);lo=lo+Math.imul(a7,b4)|0;self=self+Math.imul(a7,bh5)|0;self=self+Math.imul(a8,b4)|0;num=num+Math.imul(a8,bh5)|0;lo=lo+Math.imul(a6,b5)|0;self=self+Math.imul(a6,bh6)|0;self=self+Math.imul(ah7,b5)|0;num=num+Math.imul(ah7,bh6)|0;lo=lo+Math.imul(a5,b6)|0;self=self+Math.imul(a5,bh7)|0;self=self+Math.imul(ah6,b6)|0;num=num+Math.imul(ah6,bh7)|0;lo=lo+Math.imul(a4,b7)|0;self=self+Math.imul(a4,\nb8)|0;self=self+Math.imul(ah5,b7)|0;num=num+Math.imul(ah5,b8)|0;lo=lo+Math.imul(a3,b)|0;self=self+Math.imul(a3,b9)|0;self=self+Math.imul(ah4,b)|0;num=num+Math.imul(ah4,b9)|0;a3=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(a3>>>26)|0;a3&=67108863;lo=Math.imul(a,b4);self=Math.imul(a,bh5);self=self+Math.imul(a9,b4)|0;num=Math.imul(a9,bh5);lo=lo+Math.imul(a7,b5)|0;self=self+Math.imul(a7,bh6)|0;self=self+Math.imul(a8,b5)|0;num=num+Math.imul(a8,bh6)|0;lo=lo+Math.imul(a6,b6)|0;self=self+Math.imul(a6,\nbh7)|0;self=self+Math.imul(ah7,b6)|0;num=num+Math.imul(ah7,bh7)|0;lo=lo+Math.imul(a5,b7)|0;self=self+Math.imul(a5,b8)|0;self=self+Math.imul(ah6,b7)|0;num=num+Math.imul(ah6,b8)|0;lo=lo+Math.imul(a4,b)|0;self=self+Math.imul(a4,b9)|0;self=self+Math.imul(ah5,b)|0;num=num+Math.imul(ah5,b9)|0;a4=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(a4>>>26)|0;a4&=67108863;lo=Math.imul(a,b5);self=Math.imul(a,bh6);self=self+Math.imul(a9,b5)|0;num=Math.imul(a9,bh6);lo=lo+Math.imul(a7,b6)|0;self=self+Math.imul(a7,\nbh7)|0;self=self+Math.imul(a8,b6)|0;num=num+Math.imul(a8,bh7)|0;lo=lo+Math.imul(a6,b7)|0;self=self+Math.imul(a6,b8)|0;self=self+Math.imul(ah7,b7)|0;num=num+Math.imul(ah7,b8)|0;lo=lo+Math.imul(a5,b)|0;self=self+Math.imul(a5,b9)|0;self=self+Math.imul(ah6,b)|0;num=num+Math.imul(ah6,b9)|0;a5=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(a5>>>26)|0;a5&=67108863;lo=Math.imul(a,b6);self=Math.imul(a,bh7);self=self+Math.imul(a9,b6)|0;num=Math.imul(a9,bh7);lo=lo+Math.imul(a7,b7)|0;self=self+Math.imul(a7,\nb8)|0;self=self+Math.imul(a8,b7)|0;num=num+Math.imul(a8,b8)|0;lo=lo+Math.imul(a6,b)|0;self=self+Math.imul(a6,b9)|0;self=self+Math.imul(ah7,b)|0;num=num+Math.imul(ah7,b9)|0;a6=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(a6>>>26)|0;a6&=67108863;lo=Math.imul(a,b7);self=Math.imul(a,b8);self=self+Math.imul(a9,b7)|0;num=Math.imul(a9,b8);lo=lo+Math.imul(a7,b)|0;self=self+Math.imul(a7,b9)|0;self=self+Math.imul(a8,b)|0;num=num+Math.imul(a8,b9)|0;a7=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+\n(a7>>>26)|0;a7&=67108863;lo=Math.imul(a,b);self=Math.imul(a,b9);self=self+Math.imul(a9,b)|0;num=Math.imul(a9,b9);ah0=(c+lo|0)+((self&8191)<<13)|0;c=(num+(self>>>13)|0)+(ah0>>>26)|0;o[0]=w0;o[1]=w1;o[2]=w2;o[3]=w3;o[4]=w4;o[5]=w5;o[6]=w6;o[7]=w7;o[8]=w8;o[9]=al0;o[10]=a0;o[11]=a1;o[12]=a2;o[13]=a3;o[14]=a4;o[15]=a5;o[16]=a6;o[17]=a7;o[18]=ah0&67108863;0!==c&&(o[19]=c,out.length++);return out};Math.imul||(comb10MulTo=smallMulTo);BN.prototype.mulTo=function(num,out){var len=this.length+num.length;if(10===\nthis.length&&10===num.length)num=comb10MulTo(this,num,out);else if(63>len)num=smallMulTo(this,num,out);else if(1024>len){out.negative=num.negative^this.negative;out.length=this.length+num.length;for(var carry=0,k=len=0;k<out.length-1;k++){var ncarry=len;len=0;carry&=67108863;for(var maxJ=Math.min(k,num.length-1),j=Math.max(0,k-this.length+1);j<=maxJ;j++){var r=(this.words[k-j]|0)*(num.words[j]|0),lo=r&67108863;ncarry=ncarry+(r/67108864|0)|0;lo=lo+carry|0;carry=lo&67108863;ncarry=ncarry+(lo>>>26)|\n0;len+=ncarry>>>26;ncarry&=67108863}out.words[k]=carry;carry=ncarry}0!==carry?out.words[k]=carry:out.length--;num=out.strip()}else num=(new FFTM).mulp(this,num,out);return num};FFTM.prototype.makeRBT=function(N){for(var t=Array(N),l=BN.prototype._countBits(N)-1,i=0;i<N;i++)t[i]=this.revBin(i,l,N);return t};FFTM.prototype.revBin=function(x,l,N){if(0===x||x===N-1)return x;for(var i=N=0;i<l;i++)N|=(x&1)<<l-i-1,x>>=1;return N};FFTM.prototype.permute=function(rbt,rws,iws,rtws,itws,N){for(var i=0;i<N;i++)rtws[i]=\nrws[rbt[i]],itws[i]=iws[rbt[i]]};FFTM.prototype.transform=function(rws,iws,rtws,itws,N,rbt){this.permute(rbt,rws,iws,rtws,itws,N);for(rws=1;rws<N;rws<<=1){iws=rws<<1;rbt=Math.cos(2*Math.PI/iws);for(var itwdf=Math.sin(2*Math.PI/iws),p=0;p<N;p+=iws)for(var rtwdf_=rbt,itwdf_=itwdf,j=0;j<rws;j++){var re=rtws[p+j],ie=itws[p+j],ro=rtws[p+j+rws],io=itws[p+j+rws],rx=rtwdf_*ro-itwdf_*io;io=rtwdf_*io+itwdf_*ro;ro=rx;rtws[p+j]=re+ro;itws[p+j]=ie+io;rtws[p+j+rws]=re-ro;itws[p+j+rws]=ie-io;j!==iws&&(rx=rbt*rtwdf_-\nitwdf*itwdf_,itwdf_=rbt*itwdf_+itwdf*rtwdf_,rtwdf_=rx)}}};FFTM.prototype.guessLen13b=function(n,m){n=Math.max(m,n)|1;m=n&1;var i=0;for(n=n/2|0;n;n>>>=1)i++;return 1<<i+1+m};FFTM.prototype.conjugate=function(rws,iws,N){if(!(1>=N))for(var i=0;i<N/2;i++){var t=rws[i];rws[i]=rws[N-i-1];rws[N-i-1]=t;t=iws[i];iws[i]=-iws[N-i-1];iws[N-i-1]=-t}};FFTM.prototype.normalize13b=function(ws,N){for(var carry=0,i=0;i<N/2;i++)carry=8192*Math.round(ws[2*i+1]/N)+Math.round(ws[2*i]/N)+carry,ws[i]=carry&67108863,carry=\n67108864>carry?0:carry/67108864|0;return ws};FFTM.prototype.convert13b=function(ws,len,rws,N){for(var carry=0,i=0;i<len;i++)carry+=ws[i]|0,rws[2*i]=carry&8191,carry>>>=13,rws[2*i+1]=carry&8191,carry>>>=13;for(i=2*len;i<N;++i)rws[i]=0;assert(0===carry);assert(0===(carry&-8192))};FFTM.prototype.stub=function(N){for(var ph=Array(N),i=0;i<N;i++)ph[i]=0;return ph};FFTM.prototype.mulp=function(x,y,out){var N=2*this.guessLen13b(x.length,y.length),rbt=this.makeRBT(N),_=this.stub(N),rws=Array(N),rwst=Array(N),\niwst=Array(N),nrws=Array(N),nrwst=Array(N),niwst=Array(N),rmws=out.words;rmws.length=N;this.convert13b(x.words,x.length,rws,N);this.convert13b(y.words,y.length,nrws,N);this.transform(rws,_,rwst,iwst,N,rbt);this.transform(nrws,_,nrwst,niwst,N,rbt);for(rws=0;rws<N;rws++)nrws=rwst[rws]*nrwst[rws]-iwst[rws]*niwst[rws],iwst[rws]=rwst[rws]*niwst[rws]+iwst[rws]*nrwst[rws],rwst[rws]=nrws;this.conjugate(rwst,iwst,N);this.transform(rwst,iwst,rmws,_,N,rbt);this.conjugate(rmws,_,N);this.normalize13b(rmws,N);\nout.negative=x.negative^y.negative;out.length=x.length+y.length;return out.strip()};BN.prototype.mul=function(num){var out=new BN(null);out.words=Array(this.length+num.length);return this.mulTo(num,out)};BN.prototype.mulf=function(num){var out=new BN(null);out.words=Array(this.length+num.length);return(new FFTM).mulp(this,num,out)};BN.prototype.imul=function(num){return this.clone().mulTo(num,this)};BN.prototype.imuln=function(num){assert(\"number\"===typeof num);assert(67108864>num);for(var carry=\n0,i=0;i<this.length;i++){var w=(this.words[i]|0)*num,lo=(w&67108863)+(carry&67108863);carry>>=26;carry+=w/67108864|0;carry+=lo>>>26;this.words[i]=lo&67108863}0!==carry&&(this.words[i]=carry,this.length++);return this};BN.prototype.muln=function(num){return this.clone().imuln(num)};BN.prototype.sqr=function(){return this.mul(this)};BN.prototype.isqr=function(){return this.imul(this.clone())};BN.prototype.pow=function(num){for(var w=Array(num.bitLength()),bit=0;bit<w.length;bit++){var wbit=bit%26;w[bit]=\n(num.words[bit/26|0]&1<<wbit)>>>wbit}if(0===w.length)return new BN(1);num=this;for(bit=0;bit<w.length&&0===w[bit];bit++,num=num.sqr());if(++bit<w.length)for(wbit=num.sqr();bit<w.length;bit++,wbit=wbit.sqr())0!==w[bit]&&(num=num.mul(wbit));return num};BN.prototype.iushln=function(bits){assert(\"number\"===typeof bits&&0<=bits);var r=bits%26;bits=(bits-r)/26;var carryMask=67108863>>>26-r<<26-r,i;if(0!==r){var carry=0;for(i=0;i<this.length;i++){var newCarry=this.words[i]&carryMask;this.words[i]=(this.words[i]|\n0)-newCarry<<r|carry;carry=newCarry>>>26-r}carry&&(this.words[i]=carry,this.length++)}if(0!==bits){for(i=this.length-1;0<=i;i--)this.words[i+bits]=this.words[i];for(i=0;i<bits;i++)this.words[i]=0;this.length+=bits}return this.strip()};BN.prototype.ishln=function(bits){assert(0===this.negative);return this.iushln(bits)};BN.prototype.iushrn=function(bits,hint,extended){assert(\"number\"===typeof bits&&0<=bits);var r=bits%26,s=Math.min((bits-r)/26,this.length);bits=67108863^67108863>>>r<<r;hint=Math.max(0,\n(hint?(hint-hint%26)/26:0)-s);if(extended){for(var i=0;i<s;i++)extended.words[i]=this.words[i];extended.length=s}if(0!==s)if(this.length>s)for(this.length-=s,i=0;i<this.length;i++)this.words[i]=this.words[i+s];else this.words[0]=0,this.length=1;s=0;for(i=this.length-1;0<=i&&(0!==s||i>=hint);i--){var word=this.words[i]|0;this.words[i]=s<<26-r|word>>>r;s=word&bits}extended&&0!==s&&(extended.words[extended.length++]=s);0===this.length&&(this.words[0]=0,this.length=1);return this.strip()};BN.prototype.ishrn=\nfunction(bits,hint,extended){assert(0===this.negative);return this.iushrn(bits,hint,extended)};BN.prototype.shln=function(bits){return this.clone().ishln(bits)};BN.prototype.ushln=function(bits){return this.clone().iushln(bits)};BN.prototype.shrn=function(bits){return this.clone().ishrn(bits)};BN.prototype.ushrn=function(bits){return this.clone().iushrn(bits)};BN.prototype.testn=function(bit){assert(\"number\"===typeof bit&&0<=bit);var r=bit%26;bit=(bit-r)/26;return this.length<=bit?!1:!!(this.words[bit]&\n1<<r)};BN.prototype.imaskn=function(bits){assert(\"number\"===typeof bits&&0<=bits);var r=bits%26;bits=(bits-r)/26;assert(0===this.negative,\"imaskn works only with positive numbers\");if(this.length<=bits)return this;0!==r&&bits++;this.length=Math.min(bits,this.length);0!==r&&(this.words[this.length-1]&=67108863^67108863>>>r<<r);return this.strip()};BN.prototype.maskn=function(bits){return this.clone().imaskn(bits)};BN.prototype.iaddn=function(num){assert(\"number\"===typeof num);assert(67108864>num);\nif(0>num)return this.isubn(-num);if(0!==this.negative){if(1===this.length&&(this.words[0]|0)<num)return this.words[0]=num-(this.words[0]|0),this.negative=0,this;this.negative=0;this.isubn(num);this.negative=1;return this}return this._iaddn(num)};BN.prototype._iaddn=function(num){this.words[0]+=num;for(num=0;num<this.length&&67108864<=this.words[num];num++)this.words[num]-=67108864,num===this.length-1?this.words[num+1]=1:this.words[num+1]++;this.length=Math.max(this.length,num+1);return this};BN.prototype.isubn=\nfunction(num){assert(\"number\"===typeof num);assert(67108864>num);if(0>num)return this.iaddn(-num);if(0!==this.negative)return this.negative=0,this.iaddn(num),this.negative=1,this;this.words[0]-=num;if(1===this.length&&0>this.words[0])this.words[0]=-this.words[0],this.negative=1;else for(num=0;num<this.length&&0>this.words[num];num++)this.words[num]+=67108864,--this.words[num+1];return this.strip()};BN.prototype.addn=function(num){return this.clone().iaddn(num)};BN.prototype.subn=function(num){return this.clone().isubn(num)};\nBN.prototype.iabs=function(){this.negative=0;return this};BN.prototype.abs=function(){return this.clone().iabs()};BN.prototype._ishlnsubmul=function(num,mul,shift){var i;this._expand(num.length+shift);var carry=0;for(i=0;i<num.length;i++){var w=(this.words[i+shift]|0)+carry;carry=(num.words[i]|0)*mul;w-=carry&67108863;carry=(w>>26)-(carry/67108864|0);this.words[i+shift]=w&67108863}for(;i<this.length-shift;i++)w=(this.words[i+shift]|0)+carry,carry=w>>26,this.words[i+shift]=w&67108863;if(0===carry)return this.strip();\nassert(-1===carry);for(i=carry=0;i<this.length;i++)w=-(this.words[i]|0)+carry,carry=w>>26,this.words[i]=w&67108863;this.negative=1;return this.strip()};BN.prototype._wordDiv=function(num,mode){var a=this.clone(),b=num,bhi=b.words[b.length-1]|0;num=26-this._countBits(bhi);0!==num&&(b=b.ushln(num),a.iushln(num),bhi=b.words[b.length-1]|0);var m=a.length-b.length;if(\"mod\"!==mode){var q=new BN(null);q.length=m+1;q.words=Array(q.length);for(var i=0;i<q.length;i++)q.words[i]=0}i=a.clone()._ishlnsubmul(b,\n1,m);0===i.negative&&(a=i,q&&(q.words[m]=1));for(--m;0<=m;m--){i=67108864*(a.words[b.length+m]|0)+(a.words[b.length+m-1]|0);i=Math.min(i/bhi|0,67108863);for(a._ishlnsubmul(b,i,m);0!==a.negative;)i--,a.negative=0,a._ishlnsubmul(b,1,m),a.isZero()||(a.negative^=1);q&&(q.words[m]=i)}q&&q.strip();a.strip();\"div\"!==mode&&0!==num&&a.iushrn(num);return{div:q||null,mod:a}};BN.prototype.divmod=function(num,mode,positive){assert(!num.isZero());if(this.isZero())return{div:new BN(0),mod:new BN(0)};var div;if(0!==\nthis.negative&&0===num.negative){var res=this.neg().divmod(num,mode);\"mod\"!==mode&&(div=res.div.neg());if(\"div\"!==mode){var mod=res.mod.neg();positive&&0!==mod.negative&&mod.iadd(num)}return{div,mod}}return 0===this.negative&&0!==num.negative?(res=this.divmod(num.neg(),mode),\"mod\"!==mode&&(div=res.div.neg()),{div,mod:res.mod}):0!==(this.negative&num.negative)?(res=this.neg().divmod(num.neg(),mode),\"div\"!==mode&&(mod=res.mod.neg(),positive&&0!==mod.negative&&mod.isub(num)),{div:res.div,mod}):num.length>\nthis.length||0>this.cmp(num)?{div:new BN(0),mod:this}:1===num.length?\"div\"===mode?{div:this.divn(num.words[0]),mod:null}:\"mod\"===mode?{div:null,mod:new BN(this.modn(num.words[0]))}:{div:this.divn(num.words[0]),mod:new BN(this.modn(num.words[0]))}:this._wordDiv(num,mode)};BN.prototype.div=function(num){return this.divmod(num,\"div\",!1).div};BN.prototype.mod=function(num){return this.divmod(num,\"mod\",!1).mod};BN.prototype.umod=function(num){return this.divmod(num,\"mod\",!0).mod};BN.prototype.divRound=\nfunction(num){var dm=this.divmod(num);if(dm.mod.isZero())return dm.div;var mod=0!==dm.div.negative?dm.mod.isub(num):dm.mod,half=num.ushrn(1);num=num.andln(1);mod=mod.cmp(half);return 0>mod||1===num&&0===mod?dm.div:0!==dm.div.negative?dm.div.isubn(1):dm.div.iaddn(1)};BN.prototype.modn=function(num){assert(67108863>=num);for(var p=67108864%num,acc=0,i=this.length-1;0<=i;i--)acc=(p*acc+(this.words[i]|0))%num;return acc};BN.prototype.idivn=function(num){assert(67108863>=num);for(var carry=0,i=this.length-\n1;0<=i;i--)carry=(this.words[i]|0)+67108864*carry,this.words[i]=carry/num|0,carry%=num;return this.strip()};BN.prototype.divn=function(num){return this.clone().idivn(num)};BN.prototype.egcd=function(p){assert(0===p.negative);assert(!p.isZero());var x=this,y=p.clone();x=0!==x.negative?x.umod(p):x.clone();p=new BN(1);for(var B=new BN(0),C=new BN(0),D=new BN(1),g=0;x.isEven()&&y.isEven();)x.iushrn(1),y.iushrn(1),++g;for(var yp=y.clone(),xp=x.clone();!x.isZero();){for(var i=0,im=1;0===(x.words[0]&im)&&\n26>i;++i,im<<=1);if(0<i)for(x.iushrn(i);0<i--;){if(p.isOdd()||B.isOdd())p.iadd(yp),B.isub(xp);p.iushrn(1);B.iushrn(1)}i=0;for(im=1;0===(y.words[0]&im)&&26>i;++i,im<<=1);if(0<i)for(y.iushrn(i);0<i--;){if(C.isOdd()||D.isOdd())C.iadd(yp),D.isub(xp);C.iushrn(1);D.iushrn(1)}0<=x.cmp(y)?(x.isub(y),p.isub(C),B.isub(D)):(y.isub(x),C.isub(p),D.isub(B))}return{a:C,b:D,gcd:y.iushln(g)}};BN.prototype._invmp=function(p){assert(0===p.negative);assert(!p.isZero());var a=this,b=p.clone();a=0!==a.negative?a.umod(p):\na.clone();for(var x1=new BN(1),x2=new BN(0),delta=b.clone();0<a.cmpn(1)&&0<b.cmpn(1);){for(var i=0,im=1;0===(a.words[0]&im)&&26>i;++i,im<<=1);if(0<i)for(a.iushrn(i);0<i--;)x1.isOdd()&&x1.iadd(delta),x1.iushrn(1);i=0;for(im=1;0===(b.words[0]&im)&&26>i;++i,im<<=1);if(0<i)for(b.iushrn(i);0<i--;)x2.isOdd()&&x2.iadd(delta),x2.iushrn(1);0<=a.cmp(b)?(a.isub(b),x1.isub(x2)):(b.isub(a),x2.isub(x1))}a=0===a.cmpn(1)?x1:x2;0>a.cmpn(0)&&a.iadd(p);return a};BN.prototype.gcd=function(num){if(this.isZero())return num.abs();\nif(num.isZero())return this.abs();var a=this.clone();num=num.clone();a.negative=0;for(var shift=num.negative=0;a.isEven()&&num.isEven();shift++)a.iushrn(1),num.iushrn(1);do{for(;a.isEven();)a.iushrn(1);for(;num.isEven();)num.iushrn(1);var r=a.cmp(num);if(0>r)r=a,a=num,num=r;else if(0===r||0===num.cmpn(1))break;a.isub(num)}while(1);return num.iushln(shift)};BN.prototype.invm=function(num){return this.egcd(num).a.umod(num)};BN.prototype.isEven=function(){return 0===(this.words[0]&1)};BN.prototype.isOdd=\nfunction(){return 1===(this.words[0]&1)};BN.prototype.andln=function(num){return this.words[0]&num};BN.prototype.bincn=function(bit){assert(\"number\"===typeof bit);var r=bit%26;bit=(bit-r)/26;r=1<<r;if(this.length<=bit)return this._expand(bit+1),this.words[bit]|=r,this;for(;0!==r&&bit<this.length;bit++){var w=this.words[bit]|0;w+=r;r=w>>>26;w&=67108863;this.words[bit]=w}0!==r&&(this.words[bit]=r,this.length++);return this};BN.prototype.isZero=function(){return 1===this.length&&0===this.words[0]};BN.prototype.cmpn=\nfunction(num){var negative=0>num;if(0!==this.negative&&!negative)return-1;if(0===this.negative&&negative)return 1;this.strip();1<this.length?num=1:(negative&&(num=-num),assert(67108863>=num,\"Number is too big\"),negative=this.words[0]|0,num=negative===num?0:negative<num?-1:1);return 0!==this.negative?-num|0:num};BN.prototype.cmp=function(num){if(0!==this.negative&&0===num.negative)return-1;if(0===this.negative&&0!==num.negative)return 1;num=this.ucmp(num);return 0!==this.negative?-num|0:num};BN.prototype.ucmp=\nfunction(num){if(this.length>num.length)return 1;if(this.length<num.length)return-1;for(var res=0,i=this.length-1;0<=i;i--){var a=this.words[i]|0,b=num.words[i]|0;if(a!==b){a<b?res=-1:a>b&&(res=1);break}}return res};BN.prototype.gtn=function(num){return 1===this.cmpn(num)};BN.prototype.gt=function(num){return 1===this.cmp(num)};BN.prototype.gten=function(num){return 0<=this.cmpn(num)};BN.prototype.gte=function(num){return 0<=this.cmp(num)};BN.prototype.ltn=function(num){return-1===this.cmpn(num)};\nBN.prototype.lt=function(num){return-1===this.cmp(num)};BN.prototype.lten=function(num){return 0>=this.cmpn(num)};BN.prototype.lte=function(num){return 0>=this.cmp(num)};BN.prototype.eqn=function(num){return 0===this.cmpn(num)};BN.prototype.eq=function(num){return 0===this.cmp(num)};BN.red=function(num){return new Red(num)};BN.prototype.toRed=function(ctx){assert(!this.red,\"Already a number in reduction context\");assert(0===this.negative,\"red works only with positives\");return ctx.convertTo(this)._forceRed(ctx)};\nBN.prototype.fromRed=function(){assert(this.red,\"fromRed works only with numbers in reduction context\");return this.red.convertFrom(this)};BN.prototype._forceRed=function(ctx){this.red=ctx;return this};BN.prototype.forceRed=function(ctx){assert(!this.red,\"Already a number in reduction context\");return this._forceRed(ctx)};BN.prototype.redAdd=function(num){assert(this.red,\"redAdd works only with red numbers\");return this.red.add(this,num)};BN.prototype.redIAdd=function(num){assert(this.red,\"redIAdd works only with red numbers\");\nreturn this.red.iadd(this,num)};BN.prototype.redSub=function(num){assert(this.red,\"redSub works only with red numbers\");return this.red.sub(this,num)};BN.prototype.redISub=function(num){assert(this.red,\"redISub works only with red numbers\");return this.red.isub(this,num)};BN.prototype.redShl=function(num){assert(this.red,\"redShl works only with red numbers\");return this.red.shl(this,num)};BN.prototype.redMul=function(num){assert(this.red,\"redMul works only with red numbers\");this.red._verify2(this,\nnum);return this.red.mul(this,num)};BN.prototype.redIMul=function(num){assert(this.red,\"redMul works only with red numbers\");this.red._verify2(this,num);return this.red.imul(this,num)};BN.prototype.redSqr=function(){assert(this.red,\"redSqr works only with red numbers\");this.red._verify1(this);return this.red.sqr(this)};BN.prototype.redISqr=function(){assert(this.red,\"redISqr works only with red numbers\");this.red._verify1(this);return this.red.isqr(this)};BN.prototype.redSqrt=function(){assert(this.red,\n\"redSqrt works only with red numbers\");this.red._verify1(this);return this.red.sqrt(this)};BN.prototype.redInvm=function(){assert(this.red,\"redInvm works only with red numbers\");this.red._verify1(this);return this.red.invm(this)};BN.prototype.redNeg=function(){assert(this.red,\"redNeg works only with red numbers\");this.red._verify1(this);return this.red.neg(this)};BN.prototype.redPow=function(num){assert(this.red&&!num.red,\"redPow(normalNum)\");this.red._verify1(this);return this.red.pow(this,num)};\nvar primes={k256:null,p224:null,p192:null,p25519:null};MPrime.prototype._tmp=function(){var tmp=new BN(null);tmp.words=Array(Math.ceil(this.n/13));return tmp};MPrime.prototype.ireduce=function(num){do{this.split(num,this.tmp);num=this.imulK(num);num=num.iadd(this.tmp);var rlen=num.bitLength()}while(rlen>this.n);rlen=rlen<this.n?-1:num.ucmp(this.p);0===rlen?(num.words[0]=0,num.length=1):0<rlen?num.isub(this.p):void 0!==num.strip?num.strip():num._strip();return num};MPrime.prototype.split=function(input,\nout){input.iushrn(this.n,0,out)};MPrime.prototype.imulK=function(num){return num.imul(this.k)};inherits(K256,MPrime);K256.prototype.split=function(input,output){for(var outLen=Math.min(input.length,9),i=0;i<outLen;i++)output.words[i]=input.words[i];output.length=outLen;if(9>=input.length)input.words[0]=0,input.length=1;else{outLen=input.words[9];output.words[output.length++]=outLen&4194303;for(i=10;i<input.length;i++)output=input.words[i]|0,input.words[i-10]=(output&4194303)<<4|outLen>>>22,outLen=\noutput;outLen>>>=22;input.words[i-10]=outLen;input.length=0===outLen&&10<input.length?input.length-10:input.length-9}};K256.prototype.imulK=function(num){num.words[num.length]=0;num.words[num.length+1]=0;num.length+=2;for(var lo=0,i=0;i<num.length;i++){var w=num.words[i]|0;lo+=977*w;num.words[i]=lo&67108863;lo=64*w+(lo/67108864|0)}0===num.words[num.length-1]&&(num.length--,0===num.words[num.length-1]&&num.length--);return num};inherits(P224,MPrime);inherits(P192,MPrime);inherits(P25519,MPrime);P25519.prototype.imulK=\nfunction(num){for(var carry=0,i=0;i<num.length;i++){carry=19*(num.words[i]|0)+carry;var lo=carry&67108863;carry>>>=26;num.words[i]=lo}0!==carry&&(num.words[num.length++]=carry);return num};BN._prime=function(name){if(primes[name])return primes[name];if(\"k256\"===name)var prime=new K256;else if(\"p224\"===name)prime=new P224;else if(\"p192\"===name)prime=new P192;else if(\"p25519\"===name)prime=new P25519;else throw Error(\"Unknown prime \"+name);return primes[name]=prime};Red.prototype._verify1=function(a){assert(0===\na.negative,\"red works only with positives\");assert(a.red,\"red works only with red numbers\")};Red.prototype._verify2=function(a,b){assert(0===(a.negative|b.negative),\"red works only with positives\");assert(a.red&&a.red===b.red,\"red works only with red numbers\")};Red.prototype.imod=function(a){return this.prime?this.prime.ireduce(a)._forceRed(this):a.umod(this.m)._forceRed(this)};Red.prototype.neg=function(a){return a.isZero()?a.clone():this.m.sub(a)._forceRed(this)};Red.prototype.add=function(a,b){this._verify2(a,\nb);a=a.add(b);0<=a.cmp(this.m)&&a.isub(this.m);return a._forceRed(this)};Red.prototype.iadd=function(a,b){this._verify2(a,b);a=a.iadd(b);0<=a.cmp(this.m)&&a.isub(this.m);return a};Red.prototype.sub=function(a,b){this._verify2(a,b);a=a.sub(b);0>a.cmpn(0)&&a.iadd(this.m);return a._forceRed(this)};Red.prototype.isub=function(a,b){this._verify2(a,b);a=a.isub(b);0>a.cmpn(0)&&a.iadd(this.m);return a};Red.prototype.shl=function(a,num){this._verify1(a);return this.imod(a.ushln(num))};Red.prototype.imul=function(a,\nb){this._verify2(a,b);return this.imod(a.imul(b))};Red.prototype.mul=function(a,b){this._verify2(a,b);return this.imod(a.mul(b))};Red.prototype.isqr=function(a){return this.imul(a,a.clone())};Red.prototype.sqr=function(a){return this.mul(a,a)};Red.prototype.sqrt=function(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);assert(1===mod3%2);if(3===mod3)return mod3=this.m.add(new BN(1)).iushrn(2),this.pow(a,mod3);for(var q=this.m.subn(1),s=0;!q.isZero()&&0===q.andln(1);)s++,q.iushrn(1);assert(!q.isZero());\nmod3=(new BN(1)).toRed(this);var nOne=mod3.redNeg(),lpow=this.m.subn(1).iushrn(1),z=this.m.bitLength();for(z=(new BN(2*z*z)).toRed(this);0!==this.pow(z,lpow).cmp(nOne);)z.redIAdd(nOne);lpow=this.pow(z,q);nOne=this.pow(a,q.addn(1).iushrn(1));a=this.pow(a,q);for(q=s;0!==a.cmp(mod3);){z=a;for(s=0;0!==z.cmp(mod3);s++)z=z.redSqr();assert(s<q);lpow=this.pow(lpow,(new BN(1)).iushln(q-s-1));nOne=nOne.redMul(lpow);lpow=lpow.redSqr();a=a.redMul(lpow);q=s}return nOne};Red.prototype.invm=function(a){a=a._invmp(this.m);\nreturn 0!==a.negative?(a.negative=0,this.imod(a).redNeg()):this.imod(a)};Red.prototype.pow=function(a,num){if(num.isZero())return(new BN(1)).toRed(this);if(0===num.cmpn(1))return a.clone();var wnd=Array(16);wnd[0]=(new BN(1)).toRed(this);wnd[1]=a;for(var i=2;i<wnd.length;i++)wnd[i]=this.mul(wnd[i-1],a);a=wnd[0];var current=0,currentLen=0,start=num.bitLength()%26;0===start&&(start=26);for(i=num.length-1;0<=i;i--){var word=num.words[i];for(--start;0<=start;start--){var bit=word>>start&1;a!==wnd[0]&&\n(a=this.sqr(a));if(0===bit&&0===current)currentLen=0;else if(current<<=1,current|=bit,currentLen++,4===currentLen||0===i&&0===start)a=this.mul(a,wnd[current]),current=currentLen=0}start=26}return a};Red.prototype.convertTo=function(num){var r=num.umod(this.m);return r===num?r.clone():r};Red.prototype.convertFrom=function(num){num=num.clone();num.red=null;return num};BN.mont=function(num){return new Mont(num)};inherits(Mont,Red);Mont.prototype.convertTo=function(num){return this.imod(num.ushln(this.shift))};\nMont.prototype.convertFrom=function(num){num=this.imod(num.mul(this.rinv));num.red=null;return num};Mont.prototype.imul=function(a,b){if(a.isZero()||b.isZero())return a.words[0]=0,a.length=1,a;a=a.imul(b);b=a.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);b=a=a.isub(b).iushrn(this.shift);0<=a.cmp(this.m)?b=a.isub(this.m):0>a.cmpn(0)&&(b=a.iadd(this.m));return b._forceRed(this)};Mont.prototype.mul=function(a,b){if(a.isZero()||b.isZero())return(new BN(0))._forceRed(this);a=a.mul(b);\nb=a.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);b=a=a.isub(b).iushrn(this.shift);0<=a.cmp(this.m)?b=a.isub(this.m):0>a.cmpn(0)&&(b=a.iadd(this.m));return b._forceRed(this)};Mont.prototype.invm=function(a){return this.imod(a._invmp(this.m).mul(this.r2))._forceRed(this)}})(\"undefined\"===typeof module$jscomp$0||module$jscomp$0,this)}","~:source","shadow$provide[\"module$node_modules$bn_DOT_js$lib$bn\"] = function(global,require,module,exports) {\n(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n      Buffer = window.Buffer;\n    } else {\n      Buffer = require('buffer').Buffer;\n    }\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n      this.negative = 1;\n    }\n\n    if (start < number.length) {\n      if (base === 16) {\n        this._parseHex(number, start, endian);\n      } else {\n        this._parseBase(number, base, start);\n        if (endian === 'le') {\n          this._initArray(this.toArray(), base, endian);\n        }\n      }\n    }\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex4Bits (string, index) {\n    var c = string.charCodeAt(index);\n    // 'A' - 'F'\n    if (c >= 65 && c <= 70) {\n      return c - 55;\n    // 'a' - 'f'\n    } else if (c >= 97 && c <= 102) {\n      return c - 87;\n    // '0' - '9'\n    } else {\n      return (c - 48) & 0xf;\n    }\n  }\n\n  function parseHexByte (string, lowerBound, index) {\n    var r = parseHex4Bits(string, index);\n    if (index - 1 >= lowerBound) {\n      r |= parseHex4Bits(string, index - 1) << 4;\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    // 24-bits chunks\n    var off = 0;\n    var j = 0;\n\n    var w;\n    if (endian === 'be') {\n      for (i = number.length - 1; i >= start; i -= 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    } else {\n      var parseLength = number.length - start;\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n        w = parseHexByte(number, start, i) << off;\n        this.words[j] |= w & 0x3ffffff;\n        if (off >= 18) {\n          off -= 18;\n          j += 1;\n          this.words[j] |= w >>> 26;\n        } else {\n          off += 8;\n        }\n      }\n    }\n\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    this.strip();\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      if (r.strip !== undefined) {\n        // r is BN v4 instance\n        r.strip();\n      } else {\n        // r is BN v5 instance\n        r._strip();\n      }\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n\n};","~:removed-requires",["~#set",[]],"~:actual-requires",["^5",["~$shadow.js","~$module$node_modules$buffer$index"]],"~:properties",["^5",["iadd","iaddn","toBuffer","n","bitLength","makeRBT","iuxor","minv","_parseHex","imuln","min","redSqrt","redIAdd","lt","super_","isEven","cmpn","toTwos","isZero","_verify2","sub","copy","isqr","uor","byteLength","normalize13b","prototype","BN","isNeg","isubn","maskn","eq","idivn","isub","_invmp","p","convertTo","ushrn","imaskn","ltn","redISub","setn","ior","x","max","umod","ucmp","uxor","gten","modn","negative","eqn","inspect","pow","bincn","permute","stub","transform","toString","k256","imulK","conjugate","redSub","words","guessLen13b","gt","muln","p224","redPow","divmod","_prime","gte","divn","shl","name","shrn","iushln","mulp","_normSign","isOdd","uand","gcd","ushln","egcd","revBin","shift","testn","_zeroBits","fromTwos","imul","wordSize","forceRed","or","p192","addn","invm","sqr","neg","_init","r2","split","toRed","a","ixor","redShl","ineg","_tmp","red","convert13b","sqrt","zeroBits","length","redNeg","_iaddn","and","_expand","redInvm","strip","mod","mul","_initArray","isBN","convertFrom","k","div","rinv","b","r","abs","iushrn","y","iuand","_initNumber","_ishlnsubmul","_forceRed","ireduce","gtn","clone","redMul","lte","iand","_wordDiv","_parseBase","add","toNumber","mont","lten","redAdd","shln","iuor","mulTo","p25519","imod","toArray","notn","subn","iabs","tmp","ishln","_verify1","m","ishrn","redIMul","andln","xor","redISqr","fromRed","toArrayLike","redSqr","inotn","constructor","prime","toJSON","cmp","mulf","divRound","_countBits"]],"~:compiled-at",1644840879741,"~:source-map-json","{\n\"version\":3,\n\"file\":\"module$node_modules$bn_DOT_js$lib$bn.js\",\n\"lineCount\":101,\n\"mappings\":\"AAAAA,cAAA,CAAA,oCAAA,CAAyD,QAAQ,CAACC,MAAD,CAAQC,OAAR,CAAgBC,eAAhB,CAAuBC,gBAAvB,CAAgC,CAChG,SAAS,CAACD,MAAD,CAASC,OAAT,CAAkB,CAI1BC,QAASA,OAAO,CAACC,GAAD,CAAMC,GAAN,CAAW,CACzB,GAAI,CAACD,GAAL,CAAU,KAAUE,MAAJ,CAAUD,GAAV,EAAiB,kBAAjB,CAAN,CADe,CAM3BE,QAASA,SAAS,CAACC,IAAD,CAAOC,SAAP,CAAkB,CAClCD,IAAKE,CAAAA,MAAL,CAAcD,SACd,KAAIE,SAAWA,QAAS,EAAG,EAC3BA,SAASC,CAAAA,SAAT,CAAqBH,SAAUG,CAAAA,SAC/BJ,KAAKI,CAAAA,SAAL,CAAiB,IAAID,QACrBH,KAAKI,CAAAA,SAAUC,CAAAA,WAAf,CAA6BL,IALK,CAUpCM,QAASA,GAAG,CAACC,MAAD,CAASC,IAAT,CAAeC,MAAf,CAAuB,CACjC,GAAIH,EAAGI,CAAAA,IAAH,CAAQH,MAAR,CAAJ,CACE,MAAOA,OAGT,KAAKI,CAAAA,QAAL,CAAgB,CAChB,KAAKC,CAAAA,KAAL,CAAa,IACb,KAAKC,CAAAA,MAAL,CAAc,CAGd,KAAKC,CAAAA,GAAL;AAAW,IAEX,IAAe,IAAf,GAAIP,MAAJ,CAAqB,CACnB,GAAa,IAAb,GAAIC,IAAJ,EAA8B,IAA9B,GAAqBA,IAArB,CACEC,MACA,CADSD,IACT,CAAAA,IAAA,CAAO,EAGT,KAAKO,CAAAA,KAAL,CAAWR,MAAX,EAAqB,CAArB,CAAwBC,IAAxB,EAAgC,EAAhC,CAAoCC,MAApC,EAA8C,IAA9C,CANmB,CAZY,CAqKnCO,QAASA,cAAc,CAACC,MAAD,CAASC,KAAT,CAAgB,CACjCC,MAAAA,CAAIF,MAAOG,CAAAA,UAAP,CAAkBF,KAAlB,CAER,OAAS,GAAT,EAAIC,MAAJ,EAAoB,EAApB,EAAeA,MAAf,CACSA,MADT,CACa,EADb,CAGgB,EAAT,EAAIA,MAAJ,EAAoB,GAApB,EAAeA,MAAf,CACEA,MADF,CACM,EADN,CAIGA,MAJH,CAIO,EAJP,CAIa,EAViB,CAcvCE,QAASA,aAAa,CAACJ,MAAD,CAASK,UAAT,CAAqBJ,KAArB,CAA4B,CAChD,IAAIK,EAAIP,aAAA,CAAcC,MAAd,CAAsBC,KAAtB,CACJA,MAAJ,CAAY,CAAZ,EAAiBI,UAAjB,GACEC,CADF,EACOP,aAAA,CAAcC,MAAd,CAAsBC,KAAtB,CAA8B,CAA9B,CADP,EAC2C,CAD3C,CAGA,OAAOK,EALyC,CAmDlDC,QAASA,UAAU,CAACC,GAAD,CAAMC,KAAN,CAAaC,GAAb,CAAkBC,GAAlB,CAAuB,CACxC,IAAIL,EAAI,CAER,KADIM,GACJ,CADUC,IAAKC,CAAAA,GAAL,CAASN,GAAIZ,CAAAA,MAAb,CAAqBc,GAArB,CACV,CAAoBK,KAApB;AAAwBH,GAAxB,CAA6BG,KAAA,EAA7B,CAAkC,CAChC,IAAIb,EAAIM,GAAIL,CAAAA,UAAJ,CAAeY,KAAf,CAAJb,CAAwB,EAE5BI,EAAA,EAAKK,GAIHL,EAAA,CADO,EAAT,EAAIJ,CAAJ,CACEI,CADF,EACOJ,CADP,CACW,EADX,CACgB,EADhB,EAIgB,EAAT,EAAIA,CAAJ,CACLI,CADK,EACAJ,CADA,CACI,EADJ,CACS,EADT,EAKLI,CALK,CAKAJ,CAfyB,CAkBlC,MAAOI,EArBiC,CAkvB1CU,QAASA,WAAW,CAACC,IAAD,CAAOC,GAAP,CAAYC,GAAZ,CAAiB,CACnCA,GAAIzB,CAAAA,QAAJ,CAAewB,GAAIxB,CAAAA,QAAnB,CAA8BuB,IAAKvB,CAAAA,QACnC,KAAIkB,IAAOK,IAAKrB,CAAAA,MAAZgB,CAAqBM,GAAItB,CAAAA,MAAzBgB,CAAmC,CACvCO,IAAIvB,CAAAA,MAAJ,CAAagB,GACbA,IAAA,CAAOA,GAAP,CAAa,CAAb,CAAkB,CAGlB,KAAIQ,EAAIH,IAAKtB,CAAAA,KAAL,CAAW,CAAX,CAAJyB,CAAoB,CAAxB,CACIC,EAAIH,GAAIvB,CAAAA,KAAJ,CAAU,CAAV,CAAJ0B,CAAmB,CACfD,EAAJd,EAAQe,CAGZ,KAAIC,MAAShB,CAATgB,CAAa,QAAbA,CAA0B,CAC9BH,IAAIxB,CAAAA,KAAJ,CAAU,CAAV,CAAA,CAFSW,CAET,CAFa,QAIb,KAAK,IAAIiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBX,GAApB,CAAyBW,CAAA,EAAzB,CAA8B,CAG5B,IAAIC,OAASF,KAATE,GAAmB,EAAvB,CACIC,MAAQH,KAARG,CAAgB,QAChBC,MAAAA,CAAOb,IAAKC,CAAAA,GAAL,CAASS,CAAT,CAAYL,GAAItB,CAAAA,MAAhB,CAAyB,CAAzB,CACX,KAAK,IAAI+B,EAAId,IAAKe,CAAAA,GAAL,CAAS,CAAT,CAAYL,CAAZ,CAAgBN,IAAKrB,CAAAA,MAArB,CAA8B,CAA9B,CAAb,CAA+C+B,CAA/C,EAAoDD,KAApD,CAA0DC,CAAA,EAA1D,CAEEP,CAIA,CAJIH,IAAKtB,CAAAA,KAAL,CADK4B,CACL,CADSI,CACT,CADc,CACd,CAIJ,CAJoB,CAIpB,CAHAN,CAGA,CAHIH,GAAIvB,CAAAA,KAAJ,CAAUgC,CAAV,CAGJ;AAHmB,CAGnB,CAFArB,CAEA,CAFIc,CAEJ,CAFQC,CAER,CAFYI,KAEZ,CADAD,MACA,EADWlB,CACX,CADe,QACf,CAD4B,CAC5B,CAAAmB,KAAA,CAAQnB,CAAR,CAAY,QAEda,IAAIxB,CAAAA,KAAJ,CAAU4B,CAAV,CAAA,CAAeE,KAAf,CAAuB,CACvBH,MAAA,CAAQE,MAAR,CAAiB,CAfW,CAiBhB,CAAd,GAAIF,KAAJ,CACEH,GAAIxB,CAAAA,KAAJ,CAAU4B,CAAV,CADF,CACiBD,KADjB,CACyB,CADzB,CAGEH,GAAIvB,CAAAA,MAAJ,EAGF,OAAOuB,IAAIU,CAAAA,KAAJ,EAtC4B,CA+qBrCC,QAASA,KAAK,CAACC,CAAD,CAAIC,CAAJ,CAAO,CACnB,IAAKD,CAAAA,CAAL,CAASA,CACT,KAAKC,CAAAA,CAAL,CAASA,CAFU,CA4uCrBC,QAASA,OAAO,CAACC,IAAD,CAAOC,CAAP,CAAU,CAExB,IAAKD,CAAAA,IAAL,CAAYA,IACZ,KAAKC,CAAAA,CAAL,CAAS,IAAI9C,EAAJ,CAAO8C,CAAP,CAAU,EAAV,CACT,KAAKC,CAAAA,CAAL,CAAS,IAAKD,CAAAA,CAAEE,CAAAA,SAAP,EACT,KAAKd,CAAAA,CAAL,CAAmBe,CAAV,IAAIjD,EAAJ,CAAO,CAAP,CAAUiD,EAAAA,MAAV,CAAiB,IAAKF,CAAAA,CAAtB,CAAyBG,CAAAA,IAAzB,CAA8B,IAAKJ,CAAAA,CAAnC,CAET,KAAKK,CAAAA,GAAL,CAAW,IAAKC,CAAAA,IAAL,EAPa,CAwD1BC,QAASA,KAAK,EAAG,CACfT,MAAOU,CAAAA,IAAP,CACE,IADF,CAEE,MAFF,CAGE,yEAHF,CADe,CAmEjBC,QAASA,KAAK,EAAG,CACfX,MAAOU,CAAAA,IAAP,CACE,IADF,CAEE,MAFF,CAGE,gEAHF,CADe;AAQjBE,QAASA,KAAK,EAAG,CACfZ,MAAOU,CAAAA,IAAP,CACE,IADF,CAEE,MAFF,CAGE,uDAHF,CADe,CAQjBG,QAASA,OAAO,EAAG,CAEjBb,MAAOU,CAAAA,IAAP,CACE,IADF,CAEE,OAFF,CAGE,qEAHF,CAFiB,CAmDnBI,QAASA,IAAI,CAACC,CAAD,CAAI,CACE,QAAjB,GAAI,MAAOA,EAAX,EACMC,CAEJ,CAFY5D,EAAG6D,CAAAA,MAAH,CAAUF,CAAV,CAEZ,CADA,IAAKA,CAAAA,CACL,CADSC,CAAMd,CAAAA,CACf,CAAA,IAAKc,CAAAA,KAAL,CAAaA,CAHf,GAKEvE,MAAA,CAAOsE,CAAEG,CAAAA,GAAF,CAAM,CAAN,CAAP,CAAiB,gCAAjB,CAEA,CADA,IAAKH,CAAAA,CACL,CADSA,CACT,CAAA,IAAKC,CAAAA,KAAL,CAAa,IAPf,CADe,CA0OjBG,QAASA,KAAK,CAACJ,CAAD,CAAI,CAChBD,GAAIJ,CAAAA,IAAJ,CAAS,IAAT,CAAeK,CAAf,CAEA,KAAKK,CAAAA,KAAL,CAAa,IAAKL,CAAAA,CAAEX,CAAAA,SAAP,EACW,EAAxB,GAAI,IAAKgB,CAAAA,KAAT,CAAiB,EAAjB,GACE,IAAKA,CAAAA,KADP,EACgB,EADhB,CACsB,IAAKA,CAAAA,KAD3B,CACmC,EADnC,CAIA,KAAK/C,CAAAA,CAAL,CAAmBgC,CAAV,IAAIjD,EAAJ,CAAO,CAAP,CAAUiD,EAAAA,MAAV,CAAiB,IAAKe,CAAAA,KAAtB,CACT;IAAKC,CAAAA,EAAL,CAAU,IAAKC,CAAAA,IAAL,CAAU,IAAKjD,CAAAA,CAAEkD,CAAAA,GAAP,EAAV,CACV,KAAKC,CAAAA,IAAL,CAAY,IAAKnD,CAAAA,CAAEoD,CAAAA,MAAP,CAAc,IAAKV,CAAAA,CAAnB,CAEZ,KAAKW,CAAAA,IAAL,CAAY,IAAKF,CAAAA,IAAK9C,CAAAA,GAAV,CAAc,IAAKL,CAAAA,CAAnB,CAAsBsD,CAAAA,KAAtB,CAA4B,CAA5B,CAA+BC,CAAAA,GAA/B,CAAmC,IAAKb,CAAAA,CAAxC,CACZ,KAAKW,CAAAA,IAAL,CAAY,IAAKA,CAAAA,IAAKG,CAAAA,IAAV,CAAe,IAAKxD,CAAAA,CAApB,CACZ,KAAKqD,CAAAA,IAAL,CAAY,IAAKrD,CAAAA,CAAEyD,CAAAA,GAAP,CAAW,IAAKJ,CAAAA,IAAhB,CAdI,CAtwGI,QAAtB,GAAI,MAAOnF,OAAX,CACEA,MAAOC,CAAAA,OADT,CACmBY,EADnB,CAGEZ,OAAQY,CAAAA,EAHV,CAGeA,EAGfA,GAAGA,CAAAA,EAAH,CAAQA,EACRA,GAAG2E,CAAAA,QAAH,CAAc,EAGd,IAAI,CAEA,IAAAC,OADoB,WAAtB,GAAI,MAAOC,OAAX,EAA8D,WAA9D,GAAqC,MAAOA,OAAOD,CAAAA,MAAnD,CACWC,MAAOD,CAAAA,MADlB,CAGW1F,OAAA,CAAQ,kCAAR,CAAkB0F,CAAAA,MAJ3B,CAMF,MAAOE,CAAP,CAAU,EAGZ9E,EAAGI,CAAAA,IAAH,CAAU2E,QAAc,CAAClD,GAAD,CAAM,CAC5B,MAAIA,IAAJ,WAAmB7B,GAAnB,CACS,CAAA,CADT,CAIe,IAJf,GAIO6B,GAJP,EAIsC,QAJtC,GAIuB,MAAOA,IAJ9B;AAKEA,GAAI9B,CAAAA,WAAY4E,CAAAA,QALlB,GAK+B3E,EAAG2E,CAAAA,QALlC,EAK8CK,KAAMC,CAAAA,OAAN,CAAcpD,GAAIvB,CAAAA,KAAlB,CANlB,CAS9BN,GAAGuC,CAAAA,GAAH,CAAS2C,QAAa,CAACC,IAAD,CAAOC,KAAP,CAAc,CAClC,MAAsB,EAAtB,CAAID,IAAKE,CAAAA,GAAL,CAASD,KAAT,CAAJ,CAAgCD,IAAhC,CACOC,KAF2B,CAKpCpF,GAAGyB,CAAAA,GAAH,CAAS6D,QAAa,CAACH,IAAD,CAAOC,KAAP,CAAc,CAClC,MAAsB,EAAtB,CAAID,IAAKE,CAAAA,GAAL,CAASD,KAAT,CAAJ,CAAgCD,IAAhC,CACOC,KAF2B,CAKpCpF,GAAGF,CAAAA,SAAUW,CAAAA,KAAb,CAAqB8E,QAAc,CAACtF,MAAD,CAASC,IAAT,CAAeC,MAAf,CAAuB,CACxD,GAAsB,QAAtB,GAAI,MAAOF,OAAX,CACE,MAAO,KAAKuF,CAAAA,WAAL,CAAiBvF,MAAjB,CAAyBC,IAAzB,CAA+BC,MAA/B,CAGT,IAAsB,QAAtB,GAAI,MAAOF,OAAX,CACE,MAAO,KAAKwF,CAAAA,UAAL,CAAgBxF,MAAhB,CAAwBC,IAAxB,CAA8BC,MAA9B,CAGI,MAAb,GAAID,IAAJ,GACEA,IADF,CACS,EADT,CAGAb,OAAA,CAAOa,IAAP,IAAiBA,IAAjB,CAAwB,CAAxB,GAAsC,CAAtC,EAA8BA,IAA9B,EAAmD,EAAnD,EAA2CA,IAA3C,CAEAD,OAAA,CAASA,MAAOyF,CAAAA,QAAP,EAAkBC,CAAAA,OAAlB,CAA0B,MAA1B,CAAkC,EAAlC,CACT,KAAIvE;AAAQ,CACM,IAAlB,GAAInB,MAAA,CAAO,CAAP,CAAJ,GACEmB,KAAA,EACA,CAAA,IAAKf,CAAAA,QAAL,CAAgB,CAFlB,CAKIe,MAAJ,CAAYnB,MAAOM,CAAAA,MAAnB,GACe,EAAb,GAAIL,IAAJ,CACE,IAAK0F,CAAAA,SAAL,CAAe3F,MAAf,CAAuBmB,KAAvB,CAA8BjB,MAA9B,CADF,EAGE,IAAK0F,CAAAA,UAAL,CAAgB5F,MAAhB,CAAwBC,IAAxB,CAA8BkB,KAA9B,CACA,CAAe,IAAf,GAAIjB,MAAJ,EACE,IAAKsF,CAAAA,UAAL,CAAgB,IAAKK,CAAAA,OAAL,EAAhB,CAAgC5F,IAAhC,CAAsCC,MAAtC,CALJ,CADF,CArBwD,CAiC1DH,GAAGF,CAAAA,SAAU0F,CAAAA,WAAb,CAA2BO,QAAqB,CAAC9F,MAAD,CAASC,IAAT,CAAeC,MAAf,CAAuB,CACxD,CAAb,CAAIF,MAAJ,GACE,IAAKI,CAAAA,QACL,CADgB,CAChB,CAAAJ,MAAA,CAAS,CAACA,MAFZ,CAIa,SAAb,CAAIA,MAAJ,EACE,IAAKK,CAAAA,KACL,CADa,CAAEL,MAAF,CAAW,QAAX,CACb,CAAA,IAAKM,CAAAA,MAAL,CAAc,CAFhB,EAGoB,gBAAb,CAAIN,MAAJ,EACL,IAAKK,CAAAA,KAIL,CAJa,CACXL,MADW,CACF,QADE,CAEVA,MAFU,CAED,QAFC,CAEY,QAFZ,CAIb,CAAA,IAAKM,CAAAA,MAAL,CAAc,CALT,GAOLlB,MAAA,CAAgB,gBAAhB,CAAOY,MAAP,CAMA,CALA,IAAKK,CAAAA,KAKL;AALa,CACXL,MADW,CACF,QADE,CAEVA,MAFU,CAED,QAFC,CAEY,QAFZ,CAGX,CAHW,CAKb,CAAA,IAAKM,CAAAA,MAAL,CAAc,CAbT,CAgBQ,KAAf,GAAIJ,MAAJ,EAGA,IAAKsF,CAAAA,UAAL,CAAgB,IAAKK,CAAAA,OAAL,EAAhB,CAAgC5F,IAAhC,CAAsCC,MAAtC,CA3BqE,CA8BvEH,GAAGF,CAAAA,SAAU2F,CAAAA,UAAb,CAA0BO,QAAoB,CAAC/F,MAAD,CAASC,IAAT,CAAeC,MAAf,CAAuB,CAEnEd,MAAA,CAAgC,QAAhC,GAAO,MAAOY,OAAOM,CAAAA,MAArB,CACA,IAAqB,CAArB,EAAIN,MAAOM,CAAAA,MAAX,CAGE,MAFA,KAAKD,CAAAA,KAEE,CAFM,CAAE,CAAF,CAEN,CADP,IAAKC,CAAAA,MACE,CADO,CACP,CAAA,IAGT,KAAKA,CAAAA,MAAL,CAAciB,IAAKyE,CAAAA,IAAL,CAAUhG,MAAOM,CAAAA,MAAjB,CAA0B,CAA1B,CACd,KAAKD,CAAAA,KAAL,CAAiB0E,KAAJ,CAAU,IAAKzE,CAAAA,MAAf,CACb,KAASmB,IAAT,CAAa,CAAb,CAAgBA,IAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,CAAiCmB,IAAA,EAAjC,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,IAAX,CAAA,CAAgB,CAGlB,KACIwE,IAAM,CACV,IAAe,IAAf,GAAI/F,MAAJ,CACE,IAAKuB,IAAuB,CAAnBzB,MAAOM,CAAAA,MAAY,CAAH,CAAG,CAAA+B,MAAA,CAAI,CAAhC,CAAwC,CAAxC,EAAmCZ,IAAnC,CAA2CA,IAA3C,EAAgD,CAAhD,CAAmD,CACjD,IAAAyE,EAAIlG,MAAA,CAAOyB,IAAP,CAAJyE,CAAiBlG,MAAA,CAAOyB,IAAP;AAAW,CAAX,CAAjByE,EAAkC,CAAlCA,CAAwClG,MAAA,CAAOyB,IAAP,CAAW,CAAX,CAAxCyE,EAAyD,EACzD,KAAK7F,CAAAA,KAAL,CAAWgC,MAAX,CAAA,EAAkB6D,CAAlB,EAAuBD,GAAvB,CAA8B,QAC9B,KAAK5F,CAAAA,KAAL,CAAWgC,MAAX,CAAe,CAAf,CAAA,CAAqB6D,CAArB,GAA4B,EAA5B,CAAiCD,GAAjC,CAAyC,QACzCA,IAAA,EAAO,EACI,GAAX,EAAIA,GAAJ,GACEA,GACA,EADO,EACP,CAAA5D,MAAA,EAFF,CALiD,CADrD,IAWO,IAAe,IAAf,GAAInC,MAAJ,CACL,IAAYmC,MAAZ,CAAKZ,IAAL,CAAS,CAAT,CAAmBA,IAAnB,CAAuBzB,MAAOM,CAAAA,MAA9B,CAAsCmB,IAAtC,EAA2C,CAA3C,CACEyE,CAIA,CAJIlG,MAAA,CAAOyB,IAAP,CAIJ,CAJiBzB,MAAA,CAAOyB,IAAP,CAAW,CAAX,CAIjB,EAJkC,CAIlC,CAJwCzB,MAAA,CAAOyB,IAAP,CAAW,CAAX,CAIxC,EAJyD,EAIzD,CAHA,IAAKpB,CAAAA,KAAL,CAAWgC,MAAX,CAGA,EAHkB6D,CAGlB,EAHuBD,GAGvB,CAH8B,QAG9B,CAFA,IAAK5F,CAAAA,KAAL,CAAWgC,MAAX,CAAe,CAAf,CAEA,CAFqB6D,CAErB,GAF4B,EAE5B,CAFiCD,GAEjC,CAFyC,QAEzC,CADAA,GACA,EADO,EACP,CAAW,EAAX,EAAIA,GAAJ,GACEA,GACA,EADO,EACP,CAAA5D,MAAA,EAFF,CAMJ,OAAO,KAAKE,CAAAA,KAAL,EAxC4D,CAiErExC,GAAGF,CAAAA,SAAU8F,CAAAA,SAAb,CAAyBQ,QAAmB,CAACnG,MAAD,CAASmB,KAAT,CAAgBjB,MAAhB,CAAwB,CAElE,IAAKI,CAAAA,MAAL,CAAciB,IAAKyE,CAAAA,IAAL,EAAWhG,MAAOM,CAAAA,MAAlB,CAA2Ba,KAA3B,EAAoC,CAApC,CACd,KAAKd,CAAAA,KAAL;AAAiB0E,KAAJ,CAAU,IAAKzE,CAAAA,MAAf,CACb,KAAK,IAAImB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,CAAiCmB,CAAA,EAAjC,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgB,CAIlB,KAAIwE,IAAM,CAAV,CACI5D,EAAI,CAGR,IAAe,IAAf,GAAInC,MAAJ,CACE,IAAKuB,CAAL,CAASzB,MAAOM,CAAAA,MAAhB,CAAyB,CAAzB,CAA4BmB,CAA5B,EAAiCN,KAAjC,CAAwCM,CAAxC,EAA6C,CAA7C,CACEyE,MAEA,CAFIpF,YAAA,CAAad,MAAb,CAAqBmB,KAArB,CAA4BM,CAA5B,CAEJ,EAFsCwE,GAEtC,CADA,IAAK5F,CAAAA,KAAL,CAAWgC,CAAX,CACA,EADiB6D,MACjB,CADqB,QACrB,CAAW,EAAX,EAAID,GAAJ,EACEA,GAEA,EAFO,EAEP,CADA5D,CACA,EADK,CACL,CAAA,IAAKhC,CAAAA,KAAL,CAAWgC,CAAX,CAAA,EAAiB6D,MAAjB,GAAuB,EAHzB,EAKED,GALF,EAKS,CATb,KAcE,KAAKxE,CAAL,CAA6B,CAApB,IADSzB,MAAOM,CAAAA,MAChB,CADyBa,KACzB,EAAc,CAAd,CAAwBA,KAAxB,CAAgC,CAAhC,CAAoCA,KAA7C,CAAoDM,CAApD,CAAwDzB,MAAOM,CAAAA,MAA/D,CAAuEmB,CAAvE,EAA4E,CAA5E,CACEyE,MAEA,CAFIpF,YAAA,CAAad,MAAb,CAAqBmB,KAArB,CAA4BM,CAA5B,CAEJ,EAFsCwE,GAEtC,CADA,IAAK5F,CAAAA,KAAL,CAAWgC,CAAX,CACA,EADiB6D,MACjB,CADqB,QACrB,CAAW,EAAX,EAAID,GAAJ,EACEA,GAEA,EAFO,EAEP,CADA5D,CACA,EADK,CACL,CAAA,IAAKhC,CAAAA,KAAL,CAAWgC,CAAX,CAAA,EAAiB6D,MAAjB,GAAuB,EAHzB,EAKED,GALF,EAKS,CAKb,KAAK1D,CAAAA,KAAL,EAxCkE,CAmEpExC,GAAGF,CAAAA,SAAU+F,CAAAA,UAAb;AAA0BQ,QAAoB,CAACpG,MAAD,CAASC,IAAT,CAAekB,KAAf,CAAsB,CAElE,IAAKd,CAAAA,KAAL,CAAa,CAAE,CAAF,CACb,KAAKC,CAAAA,MAAL,CAAc,CAGd,KANkE,IAMzD+F,QAAU,CAN+C,CAM5CC,QAAU,CAAhC,CAA8C,QAA9C,EAAmCA,OAAnC,CAAyDA,OAAzD,EAAoErG,IAApE,CACEoG,OAAA,EAEFA,QAAA,EACAC,QAAA,CAAWA,OAAX,CAAqBrG,IAArB,CAA6B,CAE7B,KAAIsG,MAAQvG,MAAOM,CAAAA,MAAfiG,CAAwBpF,KAA5B,CACIqF,IAAMD,KAANC,CAAcH,OACdjF,MAAAA,CAAMG,IAAKC,CAAAA,GAAL,CAAS+E,KAAT,CAAgBA,KAAhB,CAAwBC,GAAxB,CAANpF,CAAqCD,KAGzC,KAAK,IAAIM,EAAIN,KAAb,CAAoBM,CAApB,CAAwBL,KAAxB,CAA6BK,CAA7B,EAAkC4E,OAAlC,CACEI,KAGA,CAHOxF,SAAA,CAAUjB,MAAV,CAAkByB,CAAlB,CAAqBA,CAArB,CAAyB4E,OAAzB,CAAkCpG,IAAlC,CAGP,CADA,IAAKyG,CAAAA,KAAL,CAAWJ,OAAX,CACA,CAA2B,QAA3B,CAAI,IAAKjG,CAAAA,KAAL,CAAW,CAAX,CAAJ,CAAoBoG,KAApB,CACE,IAAKpG,CAAAA,KAAL,CAAW,CAAX,CADF,EACmBoG,KADnB,CAGE,IAAKE,CAAAA,MAAL,CAAYF,KAAZ,CAIJ,IAAY,CAAZ,GAAID,GAAJ,CAAe,CACTI,OAAAA,CAAM,CACVH,MAAA,CAAOxF,SAAA,CAAUjB,MAAV,CAAkByB,CAAlB,CAAqBzB,MAAOM,CAAAA,MAA5B,CAAoCL,IAApC,CAEP,KAAKwB,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgB+E,GAAhB,CAAqB/E,CAAA,EAArB,CACEmF,OAAA;AAAO3G,IAGT,KAAKyG,CAAAA,KAAL,CAAWE,OAAX,CAC2B,SAA3B,CAAI,IAAKvG,CAAAA,KAAL,CAAW,CAAX,CAAJ,CAAoBoG,KAApB,CACE,IAAKpG,CAAAA,KAAL,CAAW,CAAX,CADF,EACmBoG,KADnB,CAGE,IAAKE,CAAAA,MAAL,CAAYF,KAAZ,CAZW,CAgBf,IAAKlE,CAAAA,KAAL,EA5CkE,CA+CpExC,GAAGF,CAAAA,SAAUgH,CAAAA,IAAb,CAAoBC,QAAc,CAACC,IAAD,CAAO,CACvCA,IAAK1G,CAAAA,KAAL,CAAiB0E,KAAJ,CAAU,IAAKzE,CAAAA,MAAf,CACb,KAAK,IAAImB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,CAAiCmB,CAAA,EAAjC,CACEsF,IAAK1G,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgB,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAElBsF,KAAKzG,CAAAA,MAAL,CAAc,IAAKA,CAAAA,MACnByG,KAAK3G,CAAAA,QAAL,CAAgB,IAAKA,CAAAA,QACrB2G,KAAKxG,CAAAA,GAAL,CAAW,IAAKA,CAAAA,GAPuB,CAUzCR,GAAGF,CAAAA,SAAUmH,CAAAA,KAAb,CAAqBC,QAAe,EAAG,CACrC,IAAIjG,EAAI,IAAIjB,EAAJ,CAAO,IAAP,CACR,KAAK8G,CAAAA,IAAL,CAAU7F,CAAV,CACA,OAAOA,EAH8B,CAMvCjB,GAAGF,CAAAA,SAAUqH,CAAAA,OAAb,CAAuBC,QAAiB,CAACC,IAAD,CAAO,CAC7C,IAAA,CAAO,IAAK9G,CAAAA,MAAZ,CAAqB8G,IAArB,CAAA,CACE,IAAK/G,CAAAA,KAAL,CAAW,IAAKC,CAAAA,MAAL,EAAX,CAAA,CAA4B,CAE9B,OAAO,KAJsC,CAQ/CP,GAAGF,CAAAA,SAAU0C,CAAAA,KAAb,CAAqB8E,QAAe,EAAG,CACrC,IAAA,CAAqB,CAArB;AAAO,IAAK/G,CAAAA,MAAZ,EAA0D,CAA1D,GAA0B,IAAKD,CAAAA,KAAL,CAAW,IAAKC,CAAAA,MAAhB,CAAyB,CAAzB,CAA1B,CAAA,CACE,IAAKA,CAAAA,MAAL,EAEF,OAAO,KAAKgH,CAAAA,SAAL,EAJ8B,CAOvCvH,GAAGF,CAAAA,SAAUyH,CAAAA,SAAb,CAAyBC,QAAmB,EAAG,CAEzB,CAApB,GAAI,IAAKjH,CAAAA,MAAT,EAA2C,CAA3C,GAAyB,IAAKD,CAAAA,KAAL,CAAW,CAAX,CAAzB,GACE,IAAKD,CAAAA,QADP,CACkB,CADlB,CAGA,OAAO,KALsC,CAQ/CL,GAAGF,CAAAA,SAAU2H,CAAAA,OAAb,CAAuBC,QAAiB,EAAG,CACzC,OAAQ,IAAKlH,CAAAA,GAAL,CAAW,YAAX,CAAuB,UAA/B,EAA0C,IAAKkF,CAAAA,QAAL,CAAc,EAAd,CAA1C,CAA8D,MADrB,CAkC3C,KAAIiC,MAAQ,gWAAA,CAAA,KAAA,CAAA,GAAA,CAAZ;AA6BIC,WAAa,CACf,CADe,CACZ,CADY,CAEf,EAFe,CAEX,EAFW,CAEP,EAFO,CAEH,EAFG,CAEC,EAFD,CAEK,CAFL,CAEQ,CAFR,CAGf,CAHe,CAGZ,CAHY,CAGT,CAHS,CAGN,CAHM,CAGH,CAHG,CAGA,CAHA,CAGG,CAHH,CAIf,CAJe,CAIZ,CAJY,CAIT,CAJS,CAIN,CAJM,CAIH,CAJG,CAIA,CAJA,CAIG,CAJH,CAKf,CALe,CAKZ,CALY,CAKT,CALS,CAKN,CALM,CAKH,CALG,CAKA,CALA,CAKG,CALH,CAMf,CANe,CAMZ,CANY,CAMT,CANS,CAMN,CANM,CAMH,CANG,CAMA,CANA,CAMG,CANH,CA7BjB,CAsCIC,WAAa,CACf,CADe,CACZ,CADY,CAEf,QAFe,CAEL,QAFK,CAEK,QAFL,CAEe,QAFf,CAEyB,QAFzB,CAEmC,QAFnC,CAE6C,QAF7C,CAGf,QAHe,CAGL,GAHK,CAGK,QAHL,CAGe,QAHf,CAGyB,QAHzB,CAGmC,OAHnC,CAG4C,QAH5C,CAIf,QAJe,CAIL,QAJK,CAIK,QAJL,CAIe,QAJf,CAIyB,IAJzB,CAImC,OAJnC,CAI4C,OAJ5C,CAKf,OALe,CAKN,OALM,CAKG,OALH,CAKY,QALZ,CAKsB,QALtB,CAKgC,QALhC,CAK0C,QAL1C,CAMf,KANe,CAML,QANK,CAMK,QANL,CAMe,QANf,CAMyB,QANzB,CAMmC,QANnC,CAM6C,QAN7C,CASjB7H,GAAGF,CAAAA,SAAU4F,CAAAA,QAAb,CAAwBoC,QAAkB,CAAC5H,IAAD,CAAO6H,OAAP,CAAgB,CACxD7H,IAAA,CAAOA,IAAP,EAAe,EACf6H,QAAA,CAAUA,OAAV,CAAoB,CAApB,EAAyB,CAGzB,IAAa,EAAb,GAAI7H,IAAJ,EAA4B,KAA5B;AAAmBA,IAAnB,CAAmC,CACjC,IAAA4B,IAAM,EAGN,KADA,IAAIG,MADAiE,IACAjE,CADM,CACV,CACSP,EAAI,CAAb,CAAgBA,CAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,CAAiCmB,CAAA,EAAjC,CAAsC,CACpC,IAAIyE,EAAI,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAAR,CACIgF,KAAyChB,EAA/BS,CAA+BT,EAA1BQ,IAA0BR,CAAnBzD,KAAmByD,EAAV,QAAUA,EAAAA,QAAlC,CAA2C,EAA3C,CACXzD,MAAA,CAASkE,CAAT,GAAgB,EAAhB,CAAqBD,IAArB,CAA6B,QAE3BpE,IAAA,CADY,CAAd,GAAIG,KAAJ,EAAmBP,CAAnB,GAAyB,IAAKnB,CAAAA,MAA9B,CAAuC,CAAvC,CACQoH,KAAA,CAAM,CAAN,CAAUjB,IAAKnG,CAAAA,MAAf,CADR,CACiCmG,IADjC,CACwC5E,GADxC,CAGQ4E,IAHR,CAGe5E,GAEfoE,KAAA,EAAO,CACI,GAAX,EAAIA,IAAJ,GACEA,IACA,EADO,EACP,CAAAxE,CAAA,EAFF,CAVoC,CAkBtC,IAHc,CAGd,GAHIO,KAGJ,GAFEH,GAEF,CAFQG,KAAMyD,CAAAA,QAAN,CAAe,EAAf,CAER,CAF6B5D,GAE7B,EAAgC,CAAhC,GAAOA,GAAIvB,CAAAA,MAAX,CAAoBwH,OAApB,CAAA,CACEjG,GAAA,CAAM,GAAN,CAAYA,GAEQ,EAAtB,GAAI,IAAKzB,CAAAA,QAAT,GACEyB,GADF,CACQ,GADR,CACcA,GADd,CAGA,OAAOA,IA5B0B,CA+BnC,GAAI5B,IAAJ,IAAcA,IAAd,CAAqB,CAArB,GAAmC,CAAnC,EAA2BA,IAA3B,EAAgD,EAAhD,EAAwCA,IAAxC,CAAoD,CAE9C8H,KAAAA,CAAYJ,UAAA,CAAW1H,IAAX,CAEZ+H,EAAAA,CAAYJ,UAAA,CAAW3H,IAAX,CAChB4B,IAAA,CAAM,EACFjB,EAAAA,CAAI,IAAKoG,CAAAA,KAAL,EAER,KADApG,CAAER,CAAAA,QACF,CADa,CACb,CAAO,CAACQ,CAAEqH,CAAAA,MAAF,EAAR,CAAA,CACMjH,IAMF;AANMJ,CAAEsH,CAAAA,IAAF,CAAOF,CAAP,CAAkBvC,CAAAA,QAAlB,CAA2BxF,IAA3B,CAMN,CALFW,CAKE,CALEA,CAAEuH,CAAAA,KAAF,CAAQH,CAAR,CAKF,CAAAnG,GAAA,CAHGjB,CAAEqH,CAAAA,MAAF,EAAL,CAGQjH,IAHR,CAGYa,GAHZ,CACQ6F,KAAA,CAAMK,KAAN,CAAkB/G,IAAEV,CAAAA,MAApB,CADR,CACsCU,IADtC,CAC0Ca,GAQ5C,KAHI,IAAKoG,CAAAA,MAAL,EAGJ,GAFEpG,GAEF,CAFQ,GAER,CAFcA,GAEd,EAAgC,CAAhC,GAAOA,GAAIvB,CAAAA,MAAX,CAAoBwH,OAApB,CAAA,CACEjG,GAAA,CAAM,GAAN,CAAYA,GAEQ,EAAtB,GAAI,IAAKzB,CAAAA,QAAT,GACEyB,GADF,CACQ,GADR,CACcA,GADd,CAGA,OAAOA,IA3B2C,CA8BpDzC,MAAA,CAAO,CAAA,CAAP,CAAc,iCAAd,CAlEwD,CAqE1DW,GAAGF,CAAAA,SAAUuI,CAAAA,QAAb,CAAwBC,QAAkB,EAAG,CAC3C,IAAIC,IAAM,IAAKjI,CAAAA,KAAL,CAAW,CAAX,CACU,EAApB,GAAI,IAAKC,CAAAA,MAAT,CACEgI,GADF,EACyB,QADzB,CACS,IAAKjI,CAAAA,KAAL,CAAW,CAAX,CADT,CAE2B,CAApB,GAAI,IAAKC,CAAAA,MAAT,EAA2C,CAA3C,GAAyB,IAAKD,CAAAA,KAAL,CAAW,CAAX,CAAzB,CAELiI,GAFK,EAEE,gBAFF,CAEsC,QAFtC,CAEsB,IAAKjI,CAAAA,KAAL,CAAW,CAAX,CAFtB,CAGkB,CAHlB,CAGI,IAAKC,CAAAA,MAHT,EAILlB,MAAA,CAAO,CAAA,CAAP,CAAc,4CAAd,CAEF;MAA0B,EAAnB,GAAC,IAAKgB,CAAAA,QAAN,CAAwB,CAACkI,GAAzB,CAA+BA,GAVK,CAa7CvI,GAAGF,CAAAA,SAAU0I,CAAAA,MAAb,CAAsBC,QAAgB,EAAG,CACvC,MAAO,KAAK/C,CAAAA,QAAL,CAAc,EAAd,CADgC,CAIzC1F,GAAGF,CAAAA,SAAU4I,CAAAA,QAAb,CAAwBC,QAAkB,CAACxI,MAAD,CAASI,MAAT,CAAiB,CACzDlB,MAAA,CAAyB,WAAzB,GAAO,MAAOuF,OAAd,CACA,OAAO,KAAKgE,CAAAA,WAAL,CAAiBhE,MAAjB,CAAyBzE,MAAzB,CAAiCI,MAAjC,CAFkD,CAK3DP,GAAGF,CAAAA,SAAUgG,CAAAA,OAAb,CAAuB+C,QAAiB,CAAC1I,MAAD,CAASI,MAAT,CAAiB,CACvD,MAAO,KAAKqI,CAAAA,WAAL,CAAiB5D,KAAjB,CAAwB7E,MAAxB,CAAgCI,MAAhC,CADgD,CAIzDP,GAAGF,CAAAA,SAAU8I,CAAAA,WAAb,CAA2BE,QAAqB,CAACC,SAAD,CAAY5I,MAAZ,CAAoBI,MAApB,CAA4B,CAC1E,IAAIyI,WAAa,IAAKA,CAAAA,UAAL,EACbC,OAAAA,CAAY1I,MAAZ0I,EAAsBzH,IAAKe,CAAAA,GAAL,CAAS,CAAT,CAAYyG,UAAZ,CAC1B3J,OAAA,CAAO2J,UAAP,EAAqBC,MAArB,CAAgC,uCAAhC,CACA5J;MAAA,CAAmB,CAAnB,CAAO4J,MAAP,CAAsB,mCAAtB,CAEA,KAAKzG,CAAAA,KAAL,EACA,KAAI0G,aAA0B,IAA1BA,GAAe/I,MACfgJ,UAAAA,CAAM,IAAIJ,SAAJ,CAAcE,MAAd,CAGNG,OAAAA,CAAI,IAAKnC,CAAAA,KAAL,EACR,IAAKiC,YAAL,CAYO,CACL,IAAKxH,YAAL,CAAS,CAAT,CAAY,CAAC0H,MAAElB,CAAAA,MAAF,EAAb,CAAyBxG,YAAA,EAAzB,CACEM,UAGA,CAHIoH,MAAEC,CAAAA,KAAF,CAAQ,GAAR,CAGJ,CAFAD,MAAEE,CAAAA,MAAF,CAAS,CAAT,CAEA,CAAAH,SAAA,CAAIzH,YAAJ,CAAA,CAASM,UAGX,KAAA,CAAON,YAAP,CAAWuH,MAAX,CAAsBvH,YAAA,EAAtB,CACEyH,SAAA,CAAIzH,YAAJ,CAAA,CAAS,CATN,CAZP,IAAmB,CAEjB,IAAKA,YAAL,CAAS,CAAT,CAAYA,YAAZ,CAAgBuH,MAAhB,CAA4BD,UAA5B,CAAwCtH,YAAA,EAAxC,CACEyH,SAAA,CAAIzH,YAAJ,CAAA,CAAS,CAGX,KAAKA,YAAL,CAAS,CAAT,CAAY,CAAC0H,MAAElB,CAAAA,MAAF,EAAb,CAAyBxG,YAAA,EAAzB,CACEM,UAGA;AAHIoH,MAAEC,CAAAA,KAAF,CAAQ,GAAR,CAGJ,CAFAD,MAAEE,CAAAA,MAAF,CAAS,CAAT,CAEA,CAAAH,SAAA,CAAIF,MAAJ,CAAgBvH,YAAhB,CAAoB,CAApB,CAAA,CAAyBM,UAVV,CAyBnB,MAAOmH,UArCmE,CAyC1EnJ,GAAGF,CAAAA,SAAUyJ,CAAAA,UAAb,CADE/H,IAAKgI,CAAAA,KAAT,CAC4BC,QAAoB,CAACtD,CAAD,CAAI,CAChD,MAAO,GAAP,CAAY3E,IAAKgI,CAAAA,KAAL,CAAWrD,CAAX,CADoC,CADpD,CAK4BsD,QAAoB,CAACtD,CAAD,CAAI,CAEhD,IAAIlF,EAAI,CACC,KAAT,EAAIyI,CAAJ,GACEzI,CACA,EADK,EACL,CAAAyI,CAAA,IAAO,EAFT,CAIS,GAAT,EAAIA,CAAJ,GACEzI,CACA,EADK,CACL,CAAAyI,CAAA,IAAO,CAFT,CAIS,EAAT,EAAIA,CAAJ,GACEzI,CACA,EADK,CACL,CAAAyI,CAAA,IAAO,CAFT,CAIS,EAAT,EAAIA,CAAJ,GACEzI,CACA,EADK,CACL,CAAAyI,CAAA,IAAO,CAFT,CAIA,OAAOzI,EAAP,CAAWyI,CAnBqC,CAuBpD1J,GAAGF,CAAAA,SAAU6J,CAAAA,SAAb,CAAyBC,QAAmB,CAACzD,CAAD,CAAI,CAE9C,GAAU,CAAV,GAAIA,CAAJ,CAAa,MAAO,GAGpB,KAAIlF,EAAI,CACa,EAArB,IAAKyI,CAAL,CAAS,IAAT,IACEzI,CACA,EADK,EACL,CAAAyI,CAAA,IAAO,EAFT,CAImB,EAAnB,IAAKA,CAAL,CAAS,GAAT,IACEzI,CACA,EADK,CACL,CAAAyI,CAAA,IAAO,CAFT,CAIkB,EAAlB,IAAKA,CAAL,CAAS,EAAT,IACEzI,CACA,EADK,CACL,CAAAyI,CAAA,IAAO,CAFT,CAIkB,EAAlB,IAAKA,CAAL,CAAS,CAAT,IACEzI,CACA,EADK,CACL,CAAAyI,CAAA,IAAO,CAFT,CAIkB,EAAlB,IAAKA,CAAL,CAAS,CAAT,GACEzI,CAAA,EAEF,OAAOA,EAzBuC,CA6BhDjB,GAAGF,CAAAA,SAAUkD,CAAAA,SAAb;AAAyB6G,QAAmB,EAAG,CAE7C,IAAIC,GAAK,IAAKP,CAAAA,UAAL,CADD,IAAKjJ,CAAAA,KAAL6F,CAAW,IAAK5F,CAAAA,MAAhB4F,CAAyB,CAAzBA,CACC,CACT,OAA2B,GAA3B,EAAQ,IAAK5F,CAAAA,MAAb,CAAsB,CAAtB,EAAgCuJ,EAHa,CAoB/C9J,GAAGF,CAAAA,SAAUiK,CAAAA,QAAb,CAAwBC,QAAkB,EAAG,CAC3C,GAAI,IAAK9B,CAAAA,MAAL,EAAJ,CAAmB,MAAO,EAG1B,KADA,IAAIjH,EAAI,CAAR,CACSS,EAAI,CAAb,CAAgBA,CAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,CAAiCmB,CAAA,EAAjC,CAAsC,CACpC,IAAIM,EAAI,IAAK2H,CAAAA,SAAL,CAAe,IAAKrJ,CAAAA,KAAL,CAAWoB,CAAX,CAAf,CACRT,EAAA,EAAKe,CACL,IAAU,EAAV,GAAIA,CAAJ,CAAc,KAHsB,CAKtC,MAAOf,EAToC,CAY7CjB,GAAGF,CAAAA,SAAUkJ,CAAAA,UAAb,CAA0BiB,QAAoB,EAAG,CAC/C,MAAOzI,KAAKyE,CAAAA,IAAL,CAAU,IAAKjD,CAAAA,SAAL,EAAV,CAA6B,CAA7B,CADwC,CAIjDhD,GAAGF,CAAAA,SAAUoK,CAAAA,MAAb,CAAsBC,QAAgB,CAACC,KAAD,CAAQ,CAC5C,MAAsB,EAAtB,GAAI,IAAK/J,CAAAA,QAAT,CACS,IAAKgK,CAAAA,GAAL,EAAWC,CAAAA,KAAX,CAAiBF,KAAjB,CAAwBG,CAAAA,KAAxB,CAA8B,CAA9B,CADT,CAGO,IAAKtD,CAAAA,KAAL,EAJqC,CAO9CjH,GAAGF,CAAAA,SAAU0K,CAAAA,QAAb,CAAwBC,QAAkB,CAACL,KAAD,CAAQ,CAChD,MAAI,KAAKM,CAAAA,KAAL,CAAWN,KAAX,CAAmB,CAAnB,CAAJ,CACS,IAAKO,CAAAA,IAAL,CAAUP,KAAV,CAAiBG,CAAAA,KAAjB,CAAuB,CAAvB,CAA0BK,CAAAA,IAA1B,EADT;AAGO,IAAK3D,CAAAA,KAAL,EAJyC,CAOlDjH,GAAGF,CAAAA,SAAU+K,CAAAA,KAAb,CAAqBC,QAAe,EAAG,CACrC,MAAyB,EAAzB,GAAO,IAAKzK,CAAAA,QADyB,CAKvCL,GAAGF,CAAAA,SAAUiL,CAAAA,GAAb,CAAmBC,QAAa,EAAG,CACjC,MAAO,KAAK/D,CAAAA,KAAL,EAAa2D,CAAAA,IAAb,EAD0B,CAInC5K,GAAGF,CAAAA,SAAU8K,CAAAA,IAAb,CAAoBK,QAAc,EAAG,CAC9B,IAAK/C,CAAAA,MAAL,EAAL,GACE,IAAK7H,CAAAA,QADP,EACmB,CADnB,CAIA,OAAO,KAL4B,CASrCL,GAAGF,CAAAA,SAAUoL,CAAAA,IAAb,CAAoBC,QAAc,CAACtJ,GAAD,CAAM,CACtC,IAAA,CAAO,IAAKtB,CAAAA,MAAZ,CAAqBsB,GAAItB,CAAAA,MAAzB,CAAA,CACE,IAAKD,CAAAA,KAAL,CAAW,IAAKC,CAAAA,MAAL,EAAX,CAAA,CAA4B,CAG9B,KAAK,IAAImB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBG,GAAItB,CAAAA,MAAxB,CAAgCmB,CAAA,EAAhC,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,EAAgCG,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAGlC,OAAO,KAAKc,CAAAA,KAAL,EAT+B,CAYxCxC,GAAGF,CAAAA,SAAUsL,CAAAA,GAAb,CAAmBC,QAAa,CAACxJ,GAAD,CAAM,CACpCxC,MAAA,CAA0C,CAA1C,IAAQ,IAAKgB,CAAAA,QAAb,CAAwBwB,GAAIxB,CAAAA,QAA5B,EACA,OAAO,KAAK6K,CAAAA,IAAL,CAAUrJ,GAAV,CAF6B,CAMtC7B,GAAGF,CAAAA,SAAUwL,CAAAA,EAAb,CAAkBC,QAAY,CAAC1J,GAAD,CAAM,CAClC,MAAI,KAAKtB,CAAAA,MAAT;AAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAamE,CAAAA,GAAb,CAAiBvJ,GAAjB,CAArC,CACOA,GAAIoF,CAAAA,KAAJ,EAAYmE,CAAAA,GAAZ,CAAgB,IAAhB,CAF2B,CAKpCpL,GAAGF,CAAAA,SAAU0L,CAAAA,GAAb,CAAmBC,QAAa,CAAC5J,GAAD,CAAM,CACpC,MAAI,KAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAaiE,CAAAA,IAAb,CAAkBrJ,GAAlB,CAArC,CACOA,GAAIoF,CAAAA,KAAJ,EAAYiE,CAAAA,IAAZ,CAAiB,IAAjB,CAF6B,CAMtClL,GAAGF,CAAAA,SAAU4L,CAAAA,KAAb,CAAqBC,QAAe,CAAC9J,GAAD,CAAM,CAItC,IAAAG,EADE,IAAKzB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CACMsB,GADN,CAGM,IAGN,KAAK,IAAIH,EAAI,CAAb,CAAgBA,CAAhB,CAAoBM,CAAEzB,CAAAA,MAAtB,CAA8BmB,CAAA,EAA9B,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,EAAgCG,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAGlC,KAAKnB,CAAAA,MAAL,CAAcyB,CAAEzB,CAAAA,MAEhB,OAAO,KAAKiC,CAAAA,KAAL,EAfiC,CAkB1CxC,GAAGF,CAAAA,SAAU8L,CAAAA,IAAb,CAAoBC,QAAc,CAAChK,GAAD,CAAM,CACtCxC,MAAA,CAA0C,CAA1C,IAAQ,IAAKgB,CAAAA,QAAb,CAAwBwB,GAAIxB,CAAAA,QAA5B,EACA,OAAO,KAAKqL,CAAAA,KAAL,CAAW7J,GAAX,CAF+B,CAMxC7B,GAAGF,CAAAA,SAAUgM,CAAAA,GAAb,CAAmBC,QAAa,CAAClK,GAAD,CAAM,CACpC,MAAI,KAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAa2E,CAAAA,IAAb,CAAkB/J,GAAlB,CAArC;AACOA,GAAIoF,CAAAA,KAAJ,EAAY2E,CAAAA,IAAZ,CAAiB,IAAjB,CAF6B,CAKtC5L,GAAGF,CAAAA,SAAUkM,CAAAA,IAAb,CAAoBC,QAAc,CAACpK,GAAD,CAAM,CACtC,MAAI,KAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAayE,CAAAA,KAAb,CAAmB7J,GAAnB,CAArC,CACOA,GAAIoF,CAAAA,KAAJ,EAAYyE,CAAAA,KAAZ,CAAkB,IAAlB,CAF+B,CAMxC1L,GAAGF,CAAAA,SAAUoM,CAAAA,KAAb,CAAqBC,QAAe,CAACtK,GAAD,CAAM,CAIxC,GAAI,IAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CACE,IAAAwB,EAAI,IADN,KAIEA,EACA,CADIF,GACJ,CAAAG,GAAA,CAAI,IAGN,KAAK,IAAIN,EAAI,CAAb,CAAgBA,CAAhB,CAAoBM,GAAEzB,CAAAA,MAAtB,CAA8BmB,CAAA,EAA9B,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgBK,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAAhB,CAA6BM,GAAE1B,CAAAA,KAAF,CAAQoB,CAAR,CAG/B,IAAI,IAAJ,GAAaK,CAAb,CACE,IAAA,CAAOL,CAAP,CAAWK,CAAExB,CAAAA,MAAb,CAAqBmB,CAAA,EAArB,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgBK,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAIpB,KAAKnB,CAAAA,MAAL,CAAcwB,CAAExB,CAAAA,MAEhB,OAAO,KAAKiC,CAAAA,KAAL,EAxBiC,CA2B1CxC,GAAGF,CAAAA,SAAUsM,CAAAA,IAAb,CAAoBC,QAAc,CAACxK,GAAD,CAAM,CACtCxC,MAAA,CAA0C,CAA1C,IAAQ,IAAKgB,CAAAA,QAAb,CAAwBwB,GAAIxB,CAAAA,QAA5B,EACA,OAAO,KAAK6L,CAAAA,KAAL,CAAWrK,GAAX,CAF+B,CAMxC7B,GAAGF,CAAAA,SAAUwM,CAAAA,GAAb;AAAmBC,QAAa,CAAC1K,GAAD,CAAM,CACpC,MAAI,KAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAamF,CAAAA,IAAb,CAAkBvK,GAAlB,CAArC,CACOA,GAAIoF,CAAAA,KAAJ,EAAYmF,CAAAA,IAAZ,CAAiB,IAAjB,CAF6B,CAKtCpM,GAAGF,CAAAA,SAAU0M,CAAAA,IAAb,CAAoBC,QAAc,CAAC5K,GAAD,CAAM,CACtC,MAAI,KAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAaiF,CAAAA,KAAb,CAAmBrK,GAAnB,CAArC,CACOA,GAAIoF,CAAAA,KAAJ,EAAYiF,CAAAA,KAAZ,CAAkB,IAAlB,CAF+B,CAMxClM,GAAGF,CAAAA,SAAUwK,CAAAA,KAAb,CAAqBoC,QAAe,CAACtC,KAAD,CAAQ,CAC1C/K,MAAA,CAAwB,QAAxB,GAAO,MAAO+K,MAAd,EAA6C,CAA7C,EAAoCA,KAApC,CAEA,KAAIuC,YAAcnL,IAAKyE,CAAAA,IAAL,CAAUmE,KAAV,CAAkB,EAAlB,CAAduC,CAAsC,CAC3BvC,MAAXwC,EAAmB,EAGvB,KAAKzF,CAAAA,OAAL,CAAawF,WAAb,CAEe,EAAf,CAAIC,KAAJ,EACED,WAAA,EAIF,KAAK,IAAIjL,EAAI,CAAb,CAAgBA,CAAhB,CAAoBiL,WAApB,CAAiCjL,CAAA,EAAjC,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgB,CAAC,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAjB,CAAiC,QAIpB,EAAf,CAAIkL,KAAJ,GACE,IAAKtM,CAAAA,KAAL,CAAWoB,CAAX,CADF,CACkB,CAAC,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CADnB,CACoC,QADpC,EACkD,EADlD,CACuDkL,KADvD,CAKA;MAAO,KAAKpK,CAAAA,KAAL,EAxBmC,CA2B5CxC,GAAGF,CAAAA,SAAU6K,CAAAA,IAAb,CAAoBkC,QAAc,CAACzC,KAAD,CAAQ,CACxC,MAAO,KAAKnD,CAAAA,KAAL,EAAaqD,CAAAA,KAAb,CAAmBF,KAAnB,CADiC,CAK1CpK,GAAGF,CAAAA,SAAUgN,CAAAA,IAAb,CAAoBC,QAAc,CAACC,GAAD,CAAM1N,GAAN,CAAW,CAC3CD,MAAA,CAAsB,QAAtB,GAAO,MAAO2N,IAAd,EAAyC,CAAzC,EAAkCA,GAAlC,CAEA,KAAI9G,IAAO8G,GAAP9G,CAAa,EAAbA,CAAmB,CACZ8G,IAAPC,EAAa,EAEjB,KAAK9F,CAAAA,OAAL,CAAajB,GAAb,CAAmB,CAAnB,CAGE,KAAK5F,CAAAA,KAAL,CAAW4F,GAAX,CAAA,CADE5G,GAAJ,CACoB,IAAKgB,CAAAA,KAAL,CAAW4F,GAAX,CADpB,CACuC,CADvC,EAC4C+G,GAD5C,CAGoB,IAAK3M,CAAAA,KAAL,CAAW4F,GAAX,CAHpB,CAGsC,EAAE,CAAF,EAAO+G,GAAP,CAGtC,OAAO,KAAKzK,CAAAA,KAAL,EAdoC,CAkB7CxC,GAAGF,CAAAA,SAAUoN,CAAAA,IAAb,CAAoBC,QAAc,CAACtL,GAAD,CAAM,CAItC,GAAsB,CAAtB,GAAI,IAAKxB,CAAAA,QAAT,EAA4C,CAA5C,GAA2BwB,GAAIxB,CAAAA,QAA/B,CAIE,MAHA,KAAKA,CAAAA,QAGE,CAHS,CAGT,CAFH,IAAK6C,CAAAA,IAAL,CAAUrB,GAAV,CAEG,CADP,IAAKxB,CAAAA,QACE,EADU,CACV,CAAA,IAAKkH,CAAAA,SAAL,EAGF,IAAsB,CAAtB,GAAI,IAAKlH,CAAAA,QAAT,EAA4C,CAA5C,GAA2BwB,GAAIxB,CAAAA,QAA/B,CAA+C,CACpDwB,GAAIxB,CAAAA,QAAJ,CAAe,CACf,KAAAY;AAAI,IAAKiC,CAAAA,IAAL,CAAUrB,GAAV,CACJA,IAAIxB,CAAAA,QAAJ,CAAe,CACf,OAAOY,EAAEsG,CAAAA,SAAF,EAJ6C,CAStD,GAAI,IAAKhH,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CACE,IAAAwB,EAAI,IADN,KAIEA,EACA,CADIF,GACJ,CAAAG,GAAA,CAAI,IAIN,KAAK,IAAIN,EADLO,CACKP,CADG,CACZ,CAAgBA,CAAhB,CAAoBM,GAAEzB,CAAAA,MAAtB,CAA8BmB,CAAA,EAA9B,CACET,CAEQ,EAFHc,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAEG,CAFU,CAEV,GAFgBM,GAAE1B,CAAAA,KAAF,CAAQoB,CAAR,CAEhB,CAF6B,CAE7B,EAFkCO,CAElC,CADR,IAAK3B,CAAAA,KAAL,CAAWoB,CAAX,CACQ,CADQT,CACR,CADY,QACZ,CAAAA,CAAA,IAAM,EAEhB,KAAA,CAAiB,CAAjB,GAAOgB,CAAP,EAAsBP,CAAtB,CAA0BK,CAAExB,CAAAA,MAA5B,CAAoCmB,CAAA,EAApC,CACET,CAEQ,EAFHc,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAEG,CAFU,CAEV,EAFeO,CAEf,CADR,IAAK3B,CAAAA,KAAL,CAAWoB,CAAX,CACQ,CADQT,CACR,CADY,QACZ,CAAAA,CAAA,IAAM,EAGhB,KAAKV,CAAAA,MAAL,CAAcwB,CAAExB,CAAAA,MAChB,IAAc,CAAd,GAAI0B,CAAJ,CACE,IAAK3B,CAAAA,KAAL,CAAW,IAAKC,CAAAA,MAAhB,CACA,CAD0B0B,CAC1B,CAAA,IAAK1B,CAAAA,MAAL,EAFF,KAIO,IAAIwB,CAAJ,GAAU,IAAV,CACL,IAAA,CAAOL,CAAP,CAAWK,CAAExB,CAAAA,MAAb,CAAqBmB,CAAA,EAArB,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgBK,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAIpB,OAAO,KAnD+B,CAuDxC1B,GAAGF,CAAAA,SAAUsN,CAAAA,GAAb,CAAmBC,QAAa,CAACxL,GAAD,CAAM,CAEpC,GAAqB,CAArB,GAAIA,GAAIxB,CAAAA,QAAR,EAA4C,CAA5C,GAA0B,IAAKA,CAAAA,QAA/B,CAA+C,CAC7CwB,GAAIxB,CAAAA,QAAJ;AAAe,CACf,KAAA8I,IAAM,IAAKzE,CAAAA,GAAL,CAAS7C,GAAT,CACNA,IAAIxB,CAAAA,QAAJ,EAAgB,CAChB,OAAO8I,IAJsC,CAKxC,MAAqB,EAArB,GAAItH,GAAIxB,CAAAA,QAAR,EAA4C,CAA5C,GAA0B,IAAKA,CAAAA,QAA/B,EACL,IAAKA,CAAAA,QAGE8I,CAHS,CAGTA,CAFPA,GAEOA,CAFDtH,GAAI6C,CAAAA,GAAJ,CAAQ,IAAR,CAECyE,CADP,IAAK9I,CAAAA,QACE8I,CADS,CACTA,CAAAA,GAJF,EAOH,IAAK5I,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAAqC,IAAK0G,CAAAA,KAAL,EAAaiG,CAAAA,IAAb,CAAkBrL,GAAlB,CAArC,CAEOA,GAAIoF,CAAAA,KAAJ,EAAYiG,CAAAA,IAAZ,CAAiB,IAAjB,CAhB6B,CAoBtClN,GAAGF,CAAAA,SAAUoD,CAAAA,IAAb,CAAoBoK,QAAc,CAACzL,GAAD,CAAM,CAEtC,GAAqB,CAArB,GAAIA,GAAIxB,CAAAA,QAAR,CAAwB,CACtBwB,GAAIxB,CAAAA,QAAJ,CAAe,CACf,KAAIY,EAAI,IAAKiM,CAAAA,IAAL,CAAUrL,GAAV,CACRA,IAAIxB,CAAAA,QAAJ,CAAe,CACf,OAAOY,EAAEsG,CAAAA,SAAF,EAJe,CAOjB,GAAsB,CAAtB,GAAI,IAAKlH,CAAAA,QAAT,CAIL,MAHA,KAAKA,CAAAA,QAGE,CAHS,CAGT,CAFP,IAAK6M,CAAAA,IAAL,CAAUrL,GAAV,CAEO,CADP,IAAKxB,CAAAA,QACE,CADS,CACT,CAAA,IAAKkH,CAAAA,SAAL,EAILlC,EAAAA,CAAM,IAAKA,CAAAA,GAAL,CAASxD,GAAT,CAGV,IAAY,CAAZ,GAAIwD,CAAJ,CAIE,MAHA,KAAKhF,CAAAA,QAGE,CAHS,CAGT,CAFP,IAAKE,CAAAA,MAEE,CAFO,CAEP,CADP,IAAKD,CAAAA,KAAL,CAAW,CAAX,CACO;AADS,CACT,CAAA,IAKT,IAAU,CAAV,CAAI+E,CAAJ,CACE,IAAAtD,EAAI,IADN,KAIEA,EACA,CADIF,GACJ,CAAAG,GAAA,CAAI,IAIN,KADA,IAAIC,MAAQ,CAAZ,CACSP,EAAI,CAAb,CAAgBA,CAAhB,CAAoBM,GAAEzB,CAAAA,MAAtB,CAA8BmB,CAAA,EAA9B,CACET,CAEA,EAFKc,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAEL,CAFkB,CAElB,GAFwBM,GAAE1B,CAAAA,KAAF,CAAQoB,CAAR,CAExB,CAFqC,CAErC,EAF0CO,KAE1C,CADAA,KACA,CADQhB,CACR,EADa,EACb,CAAA,IAAKX,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgBT,CAAhB,CAAoB,QAEtB,KAAA,CAAiB,CAAjB,GAAOgB,KAAP,EAAsBP,CAAtB,CAA0BK,CAAExB,CAAAA,MAA5B,CAAoCmB,CAAA,EAApC,CACET,CAEA,EAFKc,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAEL,CAFkB,CAElB,EAFuBO,KAEvB,CADAA,KACA,CADQhB,CACR,EADa,EACb,CAAA,IAAKX,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgBT,CAAhB,CAAoB,QAItB,IAAc,CAAd,GAAIgB,KAAJ,EAAmBP,CAAnB,CAAuBK,CAAExB,CAAAA,MAAzB,EAAmCwB,CAAnC,GAAyC,IAAzC,CACE,IAAA,CAAOL,CAAP,CAAWK,CAAExB,CAAAA,MAAb,CAAqBmB,CAAA,EAArB,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgBK,CAAEzB,CAAAA,KAAF,CAAQoB,CAAR,CAIpB,KAAKnB,CAAAA,MAAL,CAAciB,IAAKe,CAAAA,GAAL,CAAS,IAAKhC,CAAAA,MAAd,CAAsBmB,CAAtB,CAEVK,EAAJ,GAAU,IAAV,GACE,IAAK1B,CAAAA,QADP,CACkB,CADlB,CAIA,OAAO,KAAKmC,CAAAA,KAAL,EA9D+B,CAkExCxC,GAAGF,CAAAA,SAAU4E,CAAAA,GAAb,CAAmB6I,QAAa,CAAC1L,GAAD,CAAM,CACpC,MAAO,KAAKoF,CAAAA,KAAL,EAAa/D,CAAAA,IAAb,CAAkBrB,GAAlB,CAD6B,CAgDtC,KAAI2L,YAAcA,QAAqB,CAAC5L,IAAD;AAAOC,GAAP,CAAYC,GAAZ,CAAiB,CACtD,IAAIC,EAAIH,IAAKtB,CAAAA,KAAb,CACI0B,EAAIH,GAAIvB,CAAAA,KADZ,CAEImN,EAAI3L,GAAIxB,CAAAA,KAFZ,CAGIO,EAAI,CAHR,CAOI6M,GAAK3L,CAAA,CAAE,CAAF,CAAL2L,CAAY,CAPhB,CAQIC,IAAMD,EAANC,CAAW,IARf,CASIC,IAAMF,EAANE,GAAa,EATjB,CAUIC,GAAK9L,CAAA,CAAE,CAAF,CAAL8L,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKjM,CAAA,CAAE,CAAF,CAALiM,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKpM,CAAA,CAAE,CAAF,CAALoM,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKvM,CAAA,CAAE,CAAF,CAALuM,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAK1M,CAAA,CAAE,CAAF,CAAL0M,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAK7M,CAAA,CAAE,CAAF,CAAL6M,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKhN,CAAA,CAAE,CAAF,CAALgN,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKnN,CAAA,CAAE,CAAF,CAALmN,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACLD,GAANE,IAAa,EACjB,KAAIC,GAAKtN,CAAA,CAAE,CAAF,CAALsN,CAAY,CACZC,EAAAA,CAAMD,EAANC,CAAW,IACLD,GAANE,IAAa,EACjB,KAAIC,GAAKxN,CAAA,CAAE,CAAF,CAALwN,CAAY,CAAhB,CACIC,IAAMD,EAANC,CAAW,IADf,CAEIC,IAAMF,EAANE,GAAa,EAFjB,CAGIC,GAAK3N,CAAA,CAAE,CAAF,CAAL2N,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAK9N,CAAA,CAAE,CAAF,CAAL8N,CAAY,CACZC,GAAAA,CAAMD,EAANC;AAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKjO,CAAA,CAAE,CAAF,CAALiO,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKpO,CAAA,CAAE,CAAF,CAALoO,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKvO,CAAA,CAAE,CAAF,CAALuO,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAK1O,CAAA,CAAE,CAAF,CAAL0O,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAK7O,CAAA,CAAE,CAAF,CAAL6O,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACf,KAAIC,IAAMF,EAANE,GAAa,EAAjB,CACIC,GAAKhP,CAAA,CAAE,CAAF,CAALgP,CAAY,CACZC,GAAAA,CAAMD,EAANC,CAAW,IACLD,GAANE,IAAa,EACjB,KAAIC,GAAKnP,CAAA,CAAE,CAAF,CAALmP,CAAY,CACZC,EAAAA,CAAMD,EAANC,CAAW,IACLD,GAANE,IAAa,EAEjBvP,IAAIzB,CAAAA,QAAJ,CAAeuB,IAAKvB,CAAAA,QAApB,CAA+BwB,GAAIxB,CAAAA,QACnCyB,IAAIvB,CAAAA,MAAJ,CAAa,EAEb,KAAA+Q,GAAK9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe8B,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe+B,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAe6B,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAe8B,GAAf,CACL,KAAI+B,IAAQ5Q,CAAR4Q,CAAYH,EAAZG,CAAkB,CAAlBA,IAAyBD,IAAzBC,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrD5Q,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCC,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA;AAAM,QAENH,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe2B,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe4B,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe0B,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe2B,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAekC,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAeiC,GAAf,CAAX,CAAkC,CAClC,KAAI6B,IAAQ7Q,CAAR6Q,CAAYJ,EAAZI,CAAkB,CAAlBA,IAAyBF,IAAzBE,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrD7Q,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCE,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENJ,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAewB,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAeyB,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAeuB,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAewB,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe+B,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV;AAAe8B,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeqC,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAeoC,GAAf,CAAX,CAAkC,CAClC,KAAI2B,IAAQ9Q,CAAR8Q,CAAYL,EAAZK,CAAkB,CAAlBA,IAAyBH,IAAzBG,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrD9Q,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCG,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENL,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAeqB,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAesB,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAeoB,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAeqB,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe4B,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAekC,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAegC,EAAf,CAAb;AAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAeiC,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAewC,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAesC,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAeuC,GAAf,CAAX,CAAkC,CAClC,KAAIyB,IAAQ/Q,CAAR+Q,CAAYN,EAAZM,CAAkB,CAAlBA,IAAyBJ,IAAzBI,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrD/Q,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCI,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENN,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAekB,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAemB,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeiB,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAekB,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAewB,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAeyB,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAewB,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe+B,GAAf,CAAb,CAAoC,CACpCwB,KAAA;AAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe8B,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeqC,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAeoC,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe0C,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe2C,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAeyC,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAe0C,GAAf,CAAX,CAAkC,CAClC,KAAIuB,IAAQhR,CAARgR,CAAYP,EAAZO,CAAkB,CAAlBA,IAAyBL,IAAzBK,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrDhR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCK,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENP,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAee,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAegB,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAec,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAee,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAeqB,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV;AAAesB,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeoB,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeqB,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe4B,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAekC,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAeiC,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAewC,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAesC,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAeuC,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe6C,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe8C,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAe4C,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN;AAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAe6C,GAAf,CAAX,CAAkC,CAClC,KAAIqB,IAAQjR,CAARiR,CAAYR,EAAZQ,CAAkB,CAAlBA,IAAyBN,IAAzBM,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrDjR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCM,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENR,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeY,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAea,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeW,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeY,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAekB,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAemB,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeiB,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAekB,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAewB,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAeyB,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAewB,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe+B,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV;AAAe6B,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAe8B,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAeqC,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAeoC,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe0C,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe2C,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAeyC,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe0C,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAegD,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeiD,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAe+C,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAegD,GAAf,CAAX,CAAkC,CAClC,KAAImB,IAAQlR,CAARkR,CAAYT,EAAZS,CAAkB,CAAlBA,IAAyBP,IAAzBO,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrDlR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCO,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENT,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeS,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV;AAAeU,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeQ,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeS,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAee,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAegB,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAec,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAee,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAeqB,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAesB,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeoB,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeqB,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe4B,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAekC,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV;AAAeiC,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAewC,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAesC,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAeuC,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe6C,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAe8C,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe4C,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe6C,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAemD,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeoD,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAekD,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAemD,GAAf,CAAX,CAAkC,CAClC,KAAIiB,IAAQnR,CAARmR,CAAYV,EAAZU,CAAkB,CAAlBA,IAAyBR,IAAzBQ,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrDnR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCQ,EAAlC,GAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENV,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeM,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeO,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV;AAAeK,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeM,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeY,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAea,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeW,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeY,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAekB,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAemB,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeiB,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAekB,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAewB,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAeyB,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAewB,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe+B,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe8B,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV;AAAeoC,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAeqC,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAeoC,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe0C,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe2C,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAeyC,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe0C,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAegD,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeiD,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAe+C,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAegD,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAesD,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeuD,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAeqD,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAesD,EAAf,CAAX,CAAkC,CAClC,KAAIe,IAAQpR,CAARoR,CAAYX,EAAZW,CAAkB,CAAlBA,IAAyBT,IAAzBS,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrDpR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCS,EAAlC;AAAyC,EAAzC,EAAgD,CAChDA,GAAA,EAAM,QAENX,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeG,GAAf,CACL+B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeI,GAAf,CACN8B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeE,GAAf,CAAb,CAAoC,CACpC3F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeG,GAAf,CACL4B,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeS,EAAf,CAAX,CAAkC,CAClC4B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeU,GAAf,CAAb,CAAoC,CACpC2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeQ,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeS,GAAf,CAAX,CAAkC,CAClCyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAee,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAegB,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAec,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAee,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeqB,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAesB,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeoB,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeqB,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV;AAAe4B,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAekC,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeiC,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAewC,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAesC,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAeuC,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe6C,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAe8C,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe4C,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe6C,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAemD,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeoD,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAekD,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV;AAAemD,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAeyD,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5D,GAAV,CAAe0D,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAewD,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU3D,GAAV,CAAeyD,EAAf,CAAX,CAAkC,CAC9Ba,IAAAA,EAAQrR,CAARqR,CAAYZ,EAAZY,CAAkB,CAAlBA,IAAyBV,IAAzBU,CAA+B,IAA/BA,GAA0C,EAA1CA,EAAiD,CACrDrR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCU,GAAlC,GAAyC,EAAzC,EAAgD,CAChDA,IAAA,EAAM,QAENZ,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeM,EAAf,CACL4B,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeO,GAAf,CACN2B,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeK,EAAf,CAAb,CAAoC,CACpC9F,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeM,GAAf,CACLyB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeY,EAAf,CAAX,CAAkC,CAClCyB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAea,GAAf,CAAb,CAAoC,CACpCwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeW,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeY,GAAf,CAAX,CAAkC,CAClCsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAekB,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAemB,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeiB,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV;AAAekB,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAewB,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeyB,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAewB,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAe+B,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAe8B,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAeqC,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeoC,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe0C,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe2C,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAeyC,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAe0C,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAegD,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV;AAAeiD,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAe+C,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAegD,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAesD,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzD,EAAV,CAAeuD,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAeqD,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUxD,GAAV,CAAesD,EAAf,CAAX,CAAkC,CAC9Bc,GAAAA,EAAStR,CAATsR,CAAab,EAAba,CAAmB,CAAnBA,IAA0BX,IAA1BW,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtDtR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCW,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPb,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeS,EAAf,CACLyB,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeU,GAAf,CACNwB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeQ,EAAf,CAAb,CAAoC,CACpCjG,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeS,GAAf,CACLsB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAee,EAAf,CAAX,CAAkC,CAClCsB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAegB,GAAf,CAAb,CAAoC,CACpCqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAec,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAee,GAAf,CAAX,CAAkC,CAClCmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeqB,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV;AAAesB,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeoB,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeqB,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAe4B,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAekC,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeiC,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAewC,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAesC,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeuC,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe6C,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAe8C,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAe4C,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV;AAAe6C,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAemD,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtD,EAAV,CAAeoD,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAekD,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUrD,GAAV,CAAemD,EAAf,CAAX,CAAkC,CAC9Be,GAAAA,EAASvR,CAATuR,CAAad,EAAbc,CAAmB,CAAnBA,IAA0BZ,IAA1BY,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtDvR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCY,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPd,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeY,EAAf,CACLsB,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAea,GAAf,CACNqB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeW,EAAf,CAAb,CAAoC,CACpCpG,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeY,GAAf,CACLmB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAekB,EAAf,CAAX,CAAkC,CAClCmB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAemB,GAAf,CAAb,CAAoC,CACpCkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeiB,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAekB,GAAf,CAAX,CAAkC,CAClCgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAewB,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeyB,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV;AAAewB,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAe+B,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAe8B,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAeqC,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeoC,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe0C,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe2C,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAeyC,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe0C,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAegD,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnD,EAAV,CAAeiD,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAe+C,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUlD,GAAV,CAAegD,EAAf,CAAX,CAAkC,CAC9BgB,GAAAA,EAASxR,CAATwR,CAAaf,EAAbe,CAAmB,CAAnBA,IAA0Bb,IAA1Ba,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtDxR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb;AAAqB,EAArB,EAA4B,CAA5B,GAAkCa,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPf,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAee,EAAf,CACLmB,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAegB,GAAf,CACNkB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAec,EAAf,CAAb,CAAoC,CACpCvG,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAee,GAAf,CACLgB,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeqB,EAAf,CAAX,CAAkC,CAClCgB,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAesB,GAAf,CAAb,CAAoC,CACpCe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeoB,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeqB,GAAf,CAAX,CAAkC,CAClCa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAe4B,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAekC,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeiC,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV;AAAewC,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAesC,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeuC,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe6C,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhD,EAAV,CAAe8C,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe4C,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU/C,GAAV,CAAe6C,EAAf,CAAX,CAAkC,CAC9BiB,GAAAA,EAASzR,CAATyR,CAAahB,EAAbgB,CAAmB,CAAnBA,IAA0Bd,IAA1Bc,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtDzR,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCc,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPhB,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAekB,EAAf,CACLgB,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAemB,GAAf,CACNe,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeiB,EAAf,CAAb,CAAoC,CACpC1G,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAekB,GAAf,CACLa,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAewB,EAAf,CAAX,CAAkC,CAClCa,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeyB,GAAf,CAAb,CAAoC,CACpCY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAewB,GAAf,CAAX,CAAkC,CAClCU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV;AAAe+B,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAe8B,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeqC,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAemC,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeoC,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAe0C,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU7C,EAAV,CAAe2C,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAeyC,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAU5C,GAAV,CAAe0C,EAAf,CAAX,CAAkC,CAC9BkB,GAAAA,EAAS1R,CAAT0R,CAAajB,EAAbiB,CAAmB,CAAnBA,IAA0Bf,IAA1Be,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtD1R,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCe,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPjB,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeqB,EAAf,CACLa,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAesB,GAAf,CACNY,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeoB,EAAf,CAAb,CAAoC,CACpC7G,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeqB,GAAf,CACLU,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAe2B,EAAf,CAAX,CAAkC,CAClCU,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV;AAAe4B,GAAf,CAAb,CAAoC,CACpCS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAe2B,GAAf,CAAX,CAAkC,CAClCO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAekC,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAegC,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeiC,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAeuC,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAU1C,EAAV,CAAewC,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAesC,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUzC,GAAV,CAAeuC,EAAf,CAAX,CAAkC,CAC9BmB,GAAAA,EAAS3R,CAAT2R,CAAalB,EAAbkB,CAAmB,CAAnBA,IAA0BhB,IAA1BgB,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtD3R,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCgB,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPlB,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAewB,EAAf,CACLU,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAeyB,GAAf,CACNS,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAeuB,EAAf,CAAb,CAAoC,CACpChH,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAewB,GAAf,CACLO,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCO,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV;AAAe+B,EAAf,CAAb,CAAoC,CACpCM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAe6B,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAe8B,EAAf,CAAX,CAAkC,CAClCI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeoC,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUvC,EAAV,CAAeqC,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAemC,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUtC,GAAV,CAAeoC,EAAf,CAAX,CAAkC,CAC9BoB,GAAAA,EAAS5R,CAAT4R,CAAanB,EAAbmB,CAAmB,CAAnBA,IAA0BjB,IAA1BiB,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtD5R,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCiB,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPnB,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAe2B,EAAf,CACLO,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAe4B,EAAf,CACNM,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAe0B,EAAf,CAAb,CAAoC,CACpCnH,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAe2B,EAAf,CACLI,GAAA,CAAMA,EAAN,CAAW9P,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAeiC,CAAf,CAAX,CAAkC,CAClCI,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUpC,EAAV,CAAekC,EAAf,CAAb,CAAoC,CACpCG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAegC,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAMA,GAAN,CAAWtI,IAAK+P,CAAAA,IAAL,CAAUnC,EAAV,CAAeiC,EAAf,CAAX,CAAkC,CAC9BqB,GAAAA,EAAS7R,CAAT6R,CAAapB,EAAboB,CAAmB,CAAnBA,IAA0BlB,IAA1BkB,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtD7R,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B;CAAkCkB,EAAlC,GAA0C,EAA1C,EAAiD,CACjDA,GAAA,EAAO,QAEPpB,GAAA,CAAK9P,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAe8B,CAAf,CACLI,KAAA,CAAMhQ,IAAK+P,CAAAA,IAAL,CAAUjC,CAAV,CAAe+B,EAAf,CACNG,KAAA,CAAOA,IAAP,CAAahQ,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAe6B,CAAf,CAAb,CAAoC,CACpCtH,IAAA,CAAKtI,IAAK+P,CAAAA,IAAL,CAAUhC,EAAV,CAAe8B,EAAf,CACDsB,IAAAA,EAAS9R,CAAT8R,CAAarB,EAAbqB,CAAmB,CAAnBA,IAA0BnB,IAA1BmB,CAAgC,IAAhCA,GAA2C,EAA3CA,EAAkD,CACtD9R,EAAA,EAAOiJ,GAAP,EAAa0H,IAAb,GAAqB,EAArB,EAA4B,CAA5B,GAAkCmB,GAAlC,GAA0C,EAA1C,EAAiD,CAEjDlF,EAAA,CAAE,CAAF,CAAA,CAAOgE,EACPhE,EAAA,CAAE,CAAF,CAAA,CAAOiE,EACPjE,EAAA,CAAE,CAAF,CAAA,CAAOkE,EACPlE,EAAA,CAAE,CAAF,CAAA,CAAOmE,EACPnE,EAAA,CAAE,CAAF,CAAA,CAAOoE,EACPpE,EAAA,CAAE,CAAF,CAAA,CAAOqE,EACPrE,EAAA,CAAE,CAAF,CAAA,CAAOsE,EACPtE,EAAA,CAAE,CAAF,CAAA,CAAOuE,EACPvE,EAAA,CAAE,CAAF,CAAA,CAAOwE,EACPxE,EAAA,CAAE,CAAF,CAAA,CAAOyE,GACPzE,EAAA,CAAE,EAAF,CAAA,CAAQ0E,EACR1E,EAAA,CAAE,EAAF,CAAA,CAAQ2E,EACR3E,EAAA,CAAE,EAAF,CAAA,CAAQ4E,EACR5E,EAAA,CAAE,EAAF,CAAA,CAAQ6E,EACR7E,EAAA,CAAE,EAAF,CAAA,CAAQ8E,EACR9E,EAAA,CAAE,EAAF,CAAA,CAAQ+E,EACR/E,EAAA,CAAE,EAAF,CAAA,CAAQgF,EACRhF,EAAA,CAAE,EAAF,CAAA,CAAQiF,EACRjF,EAAA,CAAE,EAAF,CAAA,CAnBAkF,GAmBA,CAnBO,QAoBG,EAAV,GAAI9R,CAAJ,GACE4M,CAAA,CAAE,EAAF,CACA,CADQ5M,CACR,CAAAiB,GAAIvB,CAAAA,MAAJ,EAFF,CAIA,OAAOuB,IA1jB+C,CA8jBnDN,KAAK+P,CAAAA,IAAV,GACE/D,WADF,CACgB7L,UADhB,CAkDA3B,GAAGF,CAAAA,SAAU8S,CAAAA,KAAb,CAAqBC,QAAe,CAAChR,GAAD,CAAMC,GAAN,CAAW,CAE7C,IAAIP,IAAM,IAAKhB,CAAAA,MAAXgB,CAAoBM,GAAItB,CAAAA,MAC5B,IAAoB,EAApB;AAAI,IAAKA,CAAAA,MAAT,EAAyC,EAAzC,GAA0BsB,GAAItB,CAAAA,MAA9B,CACE4I,GAAA,CAAMqE,WAAA,CAAY,IAAZ,CAAkB3L,GAAlB,CAAuBC,GAAvB,CADR,KAEO,IAAU,EAAV,CAAIP,GAAJ,CACL4H,GAAA,CAAMxH,UAAA,CAAW,IAAX,CAAiBE,GAAjB,CAAsBC,GAAtB,CADD,KAEA,IAAU,IAAV,CAAIP,GAAJ,CAAgB,CACKO,GArDxBzB,CAAAA,QAAJ,CAqDuBwB,GArDJxB,CAAAA,QAAnB,CAqDiBuB,IArDkBvB,CAAAA,QAqDPyB,IApDxBvB,CAAAA,MAAJ,CAoDiBqB,IApDCrB,CAAAA,MAAlB,CAoDuBsB,GApDQtB,CAAAA,MAI/B,KAFA,IAAI0B,MAAQ,CAAZ,CAESC,EADL4Q,GACK5Q,CADK,CACd,CAAgBA,CAAhB,CAgD4BJ,GAhDJvB,CAAAA,MAAxB,CAAiC,CAAjC,CAAoC2B,CAAA,EAApC,CAAyC,CAGvC,IAAIC,OAAS2Q,GACbA,IAAA,CAAU,CACE7Q,MAARG,EAAgB,QAEpB,KADA,IAAIC,KAAOb,IAAKC,CAAAA,GAAL,CAASS,CAAT,CA0CUL,GA1CMtB,CAAAA,MAAhB,CAAyB,CAAzB,CAAX,CACS+B,EAAId,IAAKe,CAAAA,GAAL,CAAS,CAAT,CAAYL,CAAZ,CAyCEN,IAzCmBrB,CAAAA,MAArB,CAA8B,CAA9B,CAAb,CAA+C+B,CAA/C,EAAoDD,IAApD,CAA0DC,CAAA,EAA1D,CAA+D,CAI7D,IAAIrB,GAqCSW,IAvCAtB,CAAAA,KAAL,CADA4B,CACA,CADII,CACJ,CAEJrB,CAFoB,CAEpBA,GAqCeY,GAtCPvB,CAAAA,KAAJ,CAAUgC,CAAV,CACJrB,CADmB,CACnBA,CAAJ,CAEIqQ,GAAKrQ,CAALqQ,CAAS,QACbnP,OAAA,CAAUA,MAAV,EAAqBlB,CAArB,CAAyB,QAAzB,CAAsC,CAAtC,EAA4C,CAC5CqQ,GAAA,CAAMA,EAAN,CAAWlP,KAAX,CAAoB,CACpBA,MAAA,CAAQkP,EAAR,CAAa,QACbnP,OAAA,CAAUA,MAAV,EAAoBmP,EAApB,GAA2B,EAA3B;AAAkC,CAElCwB,IAAA,EAAW3Q,MAAX,GAAsB,EACtBA,OAAA,EAAU,QAbmD,CAyCrCL,GA1BtBxB,CAAAA,KAAJ,CAAU4B,CAAV,CAAA,CAAeE,KACfH,MAAA,CAAQE,MAvB+B,CA0B3B,CAAd,GAAIF,KAAJ,CAsB4BH,GArBtBxB,CAAAA,KAAJ,CAAU4B,CAAV,CADF,CACiBD,KADjB,CAsB4BH,GAnBtBvB,CAAAA,MAAJ,EAGF,IAAA,CAgB4BuB,GAhBjBU,CAAAA,KAAJ,EAegB,CAAhB,IAVP,IAAA,CAAYuQ,CADDC,IAAIvQ,IACHsQ,EAAAA,IAAL,CAaYnR,IAbZ,CAakBC,GAblB,CAauBC,GAbvB,CAgBP,OAAOqH,IAbsC,CAwB/C1G,KAAK3C,CAAAA,SAAUmT,CAAAA,OAAf,CAAyBC,QAAiB,CAACC,CAAD,CAAI,CAG5C,IAFA,IAAIzJ,EAAQ1E,KAAJ,CAAUmO,CAAV,CAAR,CACIC,EAAIpT,EAAGF,CAAAA,SAAUyJ,CAAAA,UAAb,CAAwB4J,CAAxB,CAAJC,CAAiC,CADrC,CAES1R,EAAI,CAAb,CAAgBA,CAAhB,CAAoByR,CAApB,CAAuBzR,CAAA,EAAvB,CACEgI,CAAA,CAAEhI,CAAF,CAAA,CAAO,IAAK2R,CAAAA,MAAL,CAAY3R,CAAZ,CAAe0R,CAAf,CAAkBD,CAAlB,CAGT,OAAOzJ,EAPqC,CAW9CjH,KAAK3C,CAAAA,SAAUuT,CAAAA,MAAf,CAAwBC,QAAgB,CAAC5Q,CAAD,CAAI0Q,CAAJ,CAAOD,CAAP,CAAU,CAChD,GAAU,CAAV,GAAIzQ,CAAJ,EAAeA,CAAf,GAAqByQ,CAArB,CAAyB,CAAzB,CAA4B,MAAOzQ,EAGnC,KAAK,IAAIhB,EADL6R,CACK7R,CADA,CACT,CAAgBA,CAAhB,CAAoB0R,CAApB,CAAuB1R,CAAA,EAAvB,CACE6R,CACA,GADO7Q,CACP,CADW,CACX,GADkB0Q,CAClB,CADsB1R,CACtB,CAD0B,CAC1B,CAAAgB,CAAA,GAAM,CAGR,OAAO6Q,EATyC,CAclD9Q,KAAK3C,CAAAA,SAAU0T,CAAAA,OAAf,CAAyBC,QAAiB,CAACC,GAAD,CAAMC,GAAN,CAAWC,GAAX,CAAgBC,IAAhB,CAAsBC,IAAtB,CAA4BX,CAA5B,CAA+B,CACvE,IAAK,IAAIzR,EAAI,CAAb,CAAgBA,CAAhB,CAAoByR,CAApB,CAAuBzR,CAAA,EAAvB,CACEmS,IAAA,CAAKnS,CAAL,CACA;AADUiS,GAAA,CAAID,GAAA,CAAIhS,CAAJ,CAAJ,CACV,CAAAoS,IAAA,CAAKpS,CAAL,CAAA,CAAUkS,GAAA,CAAIF,GAAA,CAAIhS,CAAJ,CAAJ,CAH2D,CAOzEe,KAAK3C,CAAAA,SAAUiU,CAAAA,SAAf,CAA2BC,QAAmB,CAACL,GAAD,CAAMC,GAAN,CAAWC,IAAX,CAAiBC,IAAjB,CAAuBX,CAAvB,CAA0BO,GAA1B,CAA+B,CAC3E,IAAKF,CAAAA,OAAL,CAAaE,GAAb,CAAkBC,GAAlB,CAAuBC,GAAvB,CAA4BC,IAA5B,CAAkCC,IAAlC,CAAwCX,CAAxC,CAEA,KAASc,GAAT,CAAa,CAAb,CAAgBA,GAAhB,CAAoBd,CAApB,CAAuBc,GAAvB,GAA6B,CAA7B,CAAgC,CAC1Bb,GAAAA,CAAIa,GAAJb,EAAS,CAETc,IAAAA,CAAQ1S,IAAK2S,CAAAA,GAAL,CAAS,CAAT,CAAa3S,IAAK4S,CAAAA,EAAlB,CAAuBhB,GAAvB,CAGZ,KAFA,IAAIiB,MAAQ7S,IAAK8S,CAAAA,GAAL,CAAS,CAAT,CAAa9S,IAAK4S,CAAAA,EAAlB,CAAuBhB,GAAvB,CAAZ,CAEStQ,EAAI,CAAb,CAAgBA,CAAhB,CAAoBqQ,CAApB,CAAuBrQ,CAAvB,EAA4BsQ,GAA5B,CAIE,IAHA,IAAImB,OAASL,GAAb,CACIM,OAASH,KADb,CAGS/R,EAAI,CAAb,CAAgBA,CAAhB,CAAoB2R,GAApB,CAAuB3R,CAAA,EAAvB,CAA4B,CAC1B,IAAImS,GAAKZ,IAAA,CAAK/Q,CAAL,CAASR,CAAT,CAAT,CACIoS,GAAKZ,IAAA,CAAKhR,CAAL,CAASR,CAAT,CADT,CAGIqS,GAAKd,IAAA,CAAK/Q,CAAL,CAASR,CAAT,CAAa2R,GAAb,CAHT,CAIIW,GAAKd,IAAA,CAAKhR,CAAL,CAASR,CAAT,CAAa2R,GAAb,CAJT,CAMIY,GAAKN,MAALM,CAAcF,EAAdE,CAAmBL,MAAnBK,CAA4BD,EAEhCA,GAAA,CAAKL,MAAL,CAAcK,EAAd,CAAmBJ,MAAnB,CAA4BG,EAC5BA,GAAA,CAAKE,EAELhB,KAAA,CAAK/Q,CAAL,CAASR,CAAT,CAAA,CAAcmS,EAAd,CAAmBE,EACnBb,KAAA,CAAKhR,CAAL,CAASR,CAAT,CAAA,CAAcoS,EAAd,CAAmBE,EAEnBf,KAAA,CAAK/Q,CAAL,CAASR,CAAT,CAAa2R,GAAb,CAAA,CAAkBQ,EAAlB,CAAuBE,EACvBb,KAAA,CAAKhR,CAAL,CAASR,CAAT,CAAa2R,GAAb,CAAA,CAAkBS,EAAlB,CAAuBE,EAGnBtS,EAAJ,GAAU8Q,GAAV,GACEyB,EAGA,CAHKX,GAGL,CAHaK,MAGb;AAHsBF,KAGtB,CAH8BG,MAG9B,CADAA,MACA,CADSN,GACT,CADiBM,MACjB,CAD0BH,KAC1B,CADkCE,MAClC,CAAAA,MAAA,CAASM,EAJX,CAnB0B,CAVA,CAH2C,CA2C7EpS,KAAK3C,CAAAA,SAAUgV,CAAAA,WAAf,CAA6BC,QAAqB,CAAChS,CAAD,CAAIY,CAAJ,CAAO,CACnDwP,CAAAA,CAAI3R,IAAKe,CAAAA,GAAL,CAASoB,CAAT,CAAYZ,CAAZ,CAAJoQ,CAAqB,CACrB6B,EAAAA,CAAM7B,CAAN6B,CAAU,CACd,KAAItT,EAAI,CACR,KAAKyR,CAAL,CAASA,CAAT,CAAa,CAAb,CAAiB,CAAjB,CAAoBA,CAApB,CAA2BA,CAA3B,IAAiC,CAAjC,CACEzR,CAAA,EAGF,OAAO,EAAP,EAAYA,CAAZ,CAAgB,CAAhB,CAAoBsT,CARmC,CAWzDvS,KAAK3C,CAAAA,SAAUmV,CAAAA,SAAf,CAA2BC,QAAmB,CAACvB,GAAD,CAAMC,GAAN,CAAWT,CAAX,CAAc,CAC1D,GAAI,EAAK,CAAL,EAAAA,CAAA,CAAJ,CAEA,IAAK,IAAIzR,EAAI,CAAb,CAAgBA,CAAhB,CAAoByR,CAApB,CAAwB,CAAxB,CAA2BzR,CAAA,EAA3B,CAAgC,CAC9B,IAAIgI,EAAIiK,GAAA,CAAIjS,CAAJ,CAERiS,IAAA,CAAIjS,CAAJ,CAAA,CAASiS,GAAA,CAAIR,CAAJ,CAAQzR,CAAR,CAAY,CAAZ,CACTiS,IAAA,CAAIR,CAAJ,CAAQzR,CAAR,CAAY,CAAZ,CAAA,CAAiBgI,CAEjBA,EAAA,CAAIkK,GAAA,CAAIlS,CAAJ,CAEJkS,IAAA,CAAIlS,CAAJ,CAAA,CAAS,CAACkS,GAAA,CAAIT,CAAJ,CAAQzR,CAAR,CAAY,CAAZ,CACVkS,IAAA,CAAIT,CAAJ,CAAQzR,CAAR,CAAY,CAAZ,CAAA,CAAiB,CAACgI,CATY,CAH0B,CAgB5DjH,KAAK3C,CAAAA,SAAUqV,CAAAA,YAAf,CAA8BC,QAAsB,CAACC,EAAD,CAAKlC,CAAL,CAAQ,CAE1D,IADA,IAAIlR,MAAQ,CAAZ,CACSP,EAAI,CAAb,CAAgBA,CAAhB,CAAoByR,CAApB,CAAwB,CAAxB,CAA2BzR,CAAA,EAA3B,CACMyE,KAOF,CAPsC,IAOtC,CAPM3E,IAAK8T,CAAAA,KAAL,CAAWD,EAAA,CAAG,CAAH,CAAO3T,CAAP,CAAW,CAAX,CAAX,CAA2ByR,CAA3B,CAON,CANA3R,IAAK8T,CAAAA,KAAL,CAAWD,EAAA,CAAG,CAAH,CAAO3T,CAAP,CAAX,CAAuByR,CAAvB,CAMA,CALAlR,KAKA,CAHFoT,EAAA,CAAG3T,CAAH,CAGE,CAHMyE,KAGN,CAHU,QAGV,CAAAlE,KAAA;AADM,QAAR,CAAIkE,KAAJ,CACU,CADV,CAGUA,KAHV,CAGc,QAHd,CAG0B,CAI5B,OAAOkP,GAhBmD,CAmB5D5S,KAAK3C,CAAAA,SAAUyV,CAAAA,UAAf,CAA4BC,QAAoB,CAACH,EAAD,CAAK9T,GAAL,CAAUoS,GAAV,CAAeR,CAAf,CAAkB,CAEhE,IADA,IAAIlR,MAAQ,CAAZ,CACSP,EAAI,CAAb,CAAgBA,CAAhB,CAAoBH,GAApB,CAAyBG,CAAA,EAAzB,CACUO,KAGiC,EAHxBoT,EAAA,CAAG3T,CAAH,CAGwB,CAHhB,CAGgB,CADzCiS,GAAA,CAAI,CAAJ,CAAQjS,CAAR,CACyC,CAD5BO,KAC4B,CADpB,IACoB,CADJA,KACI,IADM,EACN,CAAzC0R,GAAA,CAAI,CAAJ,CAAQjS,CAAR,CAAY,CAAZ,CAAyC,CAAxBO,KAAwB,CAAhB,IAAgB,CAAAA,KAAA,IAAU,EAIrD,KAAKP,CAAL,CAAS,CAAT,CAAaH,GAAb,CAAkBG,CAAlB,CAAsByR,CAAtB,CAAyB,EAAEzR,CAA3B,CACEiS,GAAA,CAAIjS,CAAJ,CAAA,CAAS,CAGXrC,OAAA,CAAiB,CAAjB,GAAO4C,KAAP,CACA5C,OAAA,CAA6B,CAA7B,IAAQ4C,KAAR,CAAiB,CAAA,IAAjB,EAfgE,CAkBlEQ,KAAK3C,CAAAA,SAAU2V,CAAAA,IAAf,CAAsBC,QAAc,CAACvC,CAAD,CAAI,CAEtC,IADA,IAAIwC,GAAS3Q,KAAJ,CAAUmO,CAAV,CAAT,CACSzR,EAAI,CAAb,CAAgBA,CAAhB,CAAoByR,CAApB,CAAuBzR,CAAA,EAAvB,CACEiU,EAAA,CAAGjU,CAAH,CAAA,CAAQ,CAGV,OAAOiU,GAN+B,CASxClT,KAAK3C,CAAAA,SAAUiT,CAAAA,IAAf,CAAsB6C,QAAc,CAAClT,CAAD,CAAIC,CAAJ,CAAOb,GAAP,CAAY,CAC9C,IAAIqR,EAAI,CAAJA,CAAQ,IAAK2B,CAAAA,WAAL,CAAiBpS,CAAEnC,CAAAA,MAAnB,CAA2BoC,CAAEpC,CAAAA,MAA7B,CAAZ,CAEImT,IAAM,IAAKT,CAAAA,OAAL,CAAaE,CAAb,CAFV,CAII0C,EAAI,IAAKJ,CAAAA,IAAL,CAAUtC,CAAV,CAJR,CAMIQ,IAAU3O,KAAJ,CAAUmO,CAAV,CANV,CAOI2C,KAAW9Q,KAAJ,CAAUmO,CAAV,CAPX;AAQI4C,KAAW/Q,KAAJ,CAAUmO,CAAV,CARX,CAUI6C,KAAWhR,KAAJ,CAAUmO,CAAV,CAVX,CAWI8C,MAAYjR,KAAJ,CAAUmO,CAAV,CAXZ,CAYI+C,MAAYlR,KAAJ,CAAUmO,CAAV,CAZZ,CAcIgD,KAAOrU,GAAIxB,CAAAA,KACf6V,KAAK5V,CAAAA,MAAL,CAAc4S,CAEd,KAAKoC,CAAAA,UAAL,CAAgB7S,CAAEpC,CAAAA,KAAlB,CAAyBoC,CAAEnC,CAAAA,MAA3B,CAAmCoT,GAAnC,CAAwCR,CAAxC,CACA,KAAKoC,CAAAA,UAAL,CAAgB5S,CAAErC,CAAAA,KAAlB,CAAyBqC,CAAEpC,CAAAA,MAA3B,CAAmCyV,IAAnC,CAAyC7C,CAAzC,CAEA,KAAKY,CAAAA,SAAL,CAAeJ,GAAf,CAAoBkC,CAApB,CAAuBC,IAAvB,CAA6BC,IAA7B,CAAmC5C,CAAnC,CAAsCO,GAAtC,CACA,KAAKK,CAAAA,SAAL,CAAeiC,IAAf,CAAqBH,CAArB,CAAwBI,KAAxB,CAA+BC,KAA/B,CAAsC/C,CAAtC,CAAyCO,GAAzC,CAEA,KAAShS,GAAT,CAAa,CAAb,CAAgBA,GAAhB,CAAoByR,CAApB,CAAuBzR,GAAA,EAAvB,CACMmT,IAEJ,CAFSiB,IAAA,CAAKpU,GAAL,CAET,CAFmBuU,KAAA,CAAMvU,GAAN,CAEnB,CAF8BqU,IAAA,CAAKrU,GAAL,CAE9B,CAFwCwU,KAAA,CAAMxU,GAAN,CAExC,CADAqU,IAAA,CAAKrU,GAAL,CACA,CADUoU,IAAA,CAAKpU,GAAL,CACV,CADoBwU,KAAA,CAAMxU,GAAN,CACpB,CAD+BqU,IAAA,CAAKrU,GAAL,CAC/B,CADyCuU,KAAA,CAAMvU,GAAN,CACzC,CAAAoU,IAAA,CAAKpU,GAAL,CAAA,CAAUmT,IAGZ,KAAKI,CAAAA,SAAL,CAAea,IAAf,CAAqBC,IAArB,CAA2B5C,CAA3B,CACA,KAAKY,CAAAA,SAAL,CAAe+B,IAAf,CAAqBC,IAArB,CAA2BI,IAA3B,CAAiCN,CAAjC,CAAoC1C,CAApC,CAAuCO,GAAvC,CACA,KAAKuB,CAAAA,SAAL,CAAekB,IAAf,CAAqBN,CAArB,CAAwB1C,CAAxB,CACA,KAAKgC,CAAAA,YAAL,CAAkBgB,IAAlB,CAAwBhD,CAAxB,CAEArR;GAAIzB,CAAAA,QAAJ,CAAeqC,CAAErC,CAAAA,QAAjB,CAA4BsC,CAAEtC,CAAAA,QAC9ByB,IAAIvB,CAAAA,MAAJ,CAAamC,CAAEnC,CAAAA,MAAf,CAAwBoC,CAAEpC,CAAAA,MAC1B,OAAOuB,IAAIU,CAAAA,KAAJ,EArCuC,CAyChDxC,GAAGF,CAAAA,SAAUwB,CAAAA,GAAb,CAAmB8U,QAAa,CAACvU,GAAD,CAAM,CACpC,IAAIC,IAAM,IAAI9B,EAAJ,CAAO,IAAP,CACV8B,IAAIxB,CAAAA,KAAJ,CAAgB0E,KAAJ,CAAU,IAAKzE,CAAAA,MAAf,CAAwBsB,GAAItB,CAAAA,MAA5B,CACZ,OAAO,KAAKqS,CAAAA,KAAL,CAAW/Q,GAAX,CAAgBC,GAAhB,CAH6B,CAOtC9B,GAAGF,CAAAA,SAAUuW,CAAAA,IAAb,CAAoBC,QAAc,CAACzU,GAAD,CAAM,CACtC,IAAIC,IAAM,IAAI9B,EAAJ,CAAO,IAAP,CACV8B,IAAIxB,CAAAA,KAAJ,CAAgB0E,KAAJ,CAAU,IAAKzE,CAAAA,MAAf,CAAwBsB,GAAItB,CAAAA,MAA5B,CACZ,OAlOYwS,CADDC,IAAIvQ,IACHsQ,EAAAA,IAAL,CAkOWnR,IAlOX,CAkOiBC,GAlOjB,CAkOsBC,GAlOtB,CA+N+B,CAOxC9B,GAAGF,CAAAA,SAAUyR,CAAAA,IAAb,CAAoBgF,QAAc,CAAC1U,GAAD,CAAM,CACtC,MAAO,KAAKoF,CAAAA,KAAL,EAAa2L,CAAAA,KAAb,CAAmB/Q,GAAnB,CAAwB,IAAxB,CAD+B,CAIxC7B,GAAGF,CAAAA,SAAU6G,CAAAA,KAAb,CAAqB6P,QAAe,CAAC3U,GAAD,CAAM,CACxCxC,MAAA,CAAsB,QAAtB,GAAO,MAAOwC,IAAd,CACAxC,OAAA,CAAa,QAAb,CAAOwC,GAAP,CAIA,KADA,IAAII;AAAQ,CAAZ,CACSP,EAAI,CAAb,CAAgBA,CAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,CAAiCmB,CAAA,EAAjC,CAAsC,CACpC,IAAIyE,GAAK,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAALyE,CAAqB,CAArBA,EAA0BtE,GAA9B,CACIyP,IAAMnL,CAANmL,CAAU,QAAVA,GAAwBrP,KAAxBqP,CAAgC,QAAhCA,CACJrP,MAAA,GAAU,EACVA,MAAA,EAAUkE,CAAV,CAAc,QAAd,CAA2B,CAE3BlE,MAAA,EAASqP,EAAT,GAAgB,EAChB,KAAKhR,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgB4P,EAAhB,CAAqB,QAPe,CAUxB,CAAd,GAAIrP,KAAJ,GACE,IAAK3B,CAAAA,KAAL,CAAWoB,CAAX,CACA,CADgBO,KAChB,CAAA,IAAK1B,CAAAA,MAAL,EAFF,CAKA,OAAO,KArBiC,CAwB1CP,GAAGF,CAAAA,SAAU2W,CAAAA,IAAb,CAAoBC,QAAc,CAAC7U,GAAD,CAAM,CACtC,MAAO,KAAKoF,CAAAA,KAAL,EAAaN,CAAAA,KAAb,CAAmB9E,GAAnB,CAD+B,CAKxC7B,GAAGF,CAAAA,SAAUqE,CAAAA,GAAb,CAAmBwS,QAAa,EAAG,CACjC,MAAO,KAAKrV,CAAAA,GAAL,CAAS,IAAT,CAD0B,CAKnCtB,GAAGF,CAAAA,SAAU8W,CAAAA,IAAb,CAAoBC,QAAc,EAAG,CACnC,MAAO,KAAKtF,CAAAA,IAAL,CAAU,IAAKtK,CAAAA,KAAL,EAAV,CAD4B,CAKrCjH,GAAGF,CAAAA,SAAU+G,CAAAA,GAAb,CAAmBiQ,QAAa,CAACjV,GAAD,CAAM,CApxCpC,IAFA,IAAIsE,EAAQnB,KAAJ,CAuxCWnD,GAvxCGmB,CAAAA,SAAJ,EAAV,CAAR,CAESgK,IAAM,CAAf,CAAkBA,GAAlB,CAAwB7G,CAAE5F,CAAAA,MAA1B,CAAkCyM,GAAA,EAAlC,CAAyC,CAEvC,IAAIC,KAAOD,GAAPC,CAAa,EAEjB9G,EAAA,CAAE6G,GAAF,CAAA;CAixCiBnL,GAjxCHvB,CAAAA,KAAJ,CAHC0M,GAGD,CAHO,EAGP,CAHa,CAGb,CAAV,CAA4B,CAA5B,EAAiCC,IAAjC,IAA4CA,IAJL,CAsxCzC,GAAiB,CAAjB,GA/wCO9G,CA+wCD5F,CAAAA,MAAN,CAAoB,MAAO,KAAIP,EAAJ,CAAO,CAAP,CAGvBmJ,IAAAA,CAAM,IACV,KAASzH,GAAT,CAAa,CAAb,CAAgBA,GAAhB,CAnxCOyE,CAmxCe5F,CAAAA,MAAtB,EACe,CADf,GAnxCO4F,CAoxCD,CAAEzE,GAAF,CADN,CAA8BA,GAAA,EAAA,CAAKyH,GAAL,CAAWA,GAAIhF,CAAAA,GAAJ,EAAzC,EAIA,GAAI,EAAEzC,GAAN,CAvxCOyE,CAuxCK5F,CAAAA,MAAZ,CACE,IAAS6I,IAAT,CAAaD,GAAIhF,CAAAA,GAAJ,EAAb,CAAwBzC,GAAxB,CAxxCKyE,CAwxCyB5F,CAAAA,MAA9B,CAAsCmB,GAAA,EAAA,CAAK0H,IAAL,CAASA,IAAEjF,CAAAA,GAAF,EAA/C,CACe,CAAb,GAzxCGgC,CAyxCC,CAAEzE,GAAF,CAAJ,GAEAyH,GAFA,CAEMA,GAAI7H,CAAAA,GAAJ,CAAQ8H,IAAR,CAFN,CAMJ,OAAOD,IAlB6B,CAsBtCnJ,GAAGF,CAAAA,SAAUmD,CAAAA,MAAb,CAAsB8T,QAAgB,CAACC,IAAD,CAAO,CAC3C3X,MAAA,CAAuB,QAAvB,GAAO,MAAO2X,KAAd,EAA2C,CAA3C,EAAmCA,IAAnC,CACA,KAAI/V,EAAI+V,IAAJ/V,CAAW,EACXgT,KAAAA,EAAK+C,IAAL/C,CAAYhT,CAAZgT,EAAiB,EACrB,KAAIgD,UAAa,QAAbA,GAA4B,EAA5BA,CAAiChW,CAAjCgW,EAAyC,EAAzCA,CAA8ChW,CAAlD,CACIS,CAEJ,IAAU,CAAV,GAAIT,CAAJ,CAAa,CACX,IAAIgB,MAAQ,CAEZ,KAAKP,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgB,IAAKnB,CAAAA,MAArB,CAA6BmB,CAAA,EAA7B,CAAkC,CAChC,IAAIwV,SAAW,IAAK5W,CAAAA,KAAL,CAAWoB,CAAX,CAAXwV,CAA2BD,SAE/B,KAAK3W,CAAAA,KAAL,CAAWoB,CAAX,CAAA,EADU,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CACV;AAD0B,CAC1B,EAD+BwV,QAC/B,EAD4CjW,CAC5C,CAAoBgB,KACpBA,MAAA,CAAQiV,QAAR,GAAsB,EAAtB,CAA2BjW,CAJK,CAO9BgB,KAAJ,GACE,IAAK3B,CAAAA,KAAL,CAAWoB,CAAX,CACA,CADgBO,KAChB,CAAA,IAAK1B,CAAAA,MAAL,EAFF,CAVW,CAgBb,GAAU,CAAV,GAAI0T,IAAJ,CAAa,CACX,IAAKvS,CAAL,CAAS,IAAKnB,CAAAA,MAAd,CAAuB,CAAvB,CAA+B,CAA/B,EAA0BmB,CAA1B,CAAkCA,CAAA,EAAlC,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAeuS,IAAf,CAAA,CAAoB,IAAK3T,CAAAA,KAAL,CAAWoB,CAAX,CAGtB,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBuS,IAAhB,CAAmBvS,CAAA,EAAnB,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgB,CAGlB,KAAKnB,CAAAA,MAAL,EAAe0T,IATJ,CAYb,MAAO,KAAKzR,CAAAA,KAAL,EAnCoC,CAsC7CxC,GAAGF,CAAAA,SAAUqX,CAAAA,KAAb,CAAqBC,QAAe,CAACJ,IAAD,CAAO,CAEzC3X,MAAA,CAAyB,CAAzB,GAAO,IAAKgB,CAAAA,QAAZ,CACA,OAAO,KAAK4C,CAAAA,MAAL,CAAY+T,IAAZ,CAHkC,CAS3ChX,GAAGF,CAAAA,SAAUwJ,CAAAA,MAAb,CAAsB+N,QAAgB,CAACL,IAAD,CAAOM,IAAP,CAAaC,QAAb,CAAuB,CAC3DlY,MAAA,CAAuB,QAAvB,GAAO,MAAO2X,KAAd,EAA2C,CAA3C,EAAmCA,IAAnC,CAQA,KAAI/V,EAAI+V,IAAJ/V,CAAW,EAAf,CACIgT,EAAIzS,IAAKC,CAAAA,GAAL,EAAUuV,IAAV,CAAiB/V,CAAjB,EAAsB,EAAtB,CAA0B,IAAKV,CAAAA,MAA/B,CACJiX,KAAAA,CAAO,QAAPA,CAAqB,QAArBA,GAAmCvW,CAAnCuW,EAAyCvW,CAI7CwW,KAAA,CAAIjW,IAAKe,CAAAA,GAAL,CAAS,CAAT;CAZA+U,IAAJG,EACOH,IADPG,CACeH,IADfG,CACsB,EADtBA,EAC6B,EAD7BA,CAGM,CASF,EADCxD,CACD,CAGJ,IANkBsD,QAMlB,CAAiB,CACf,IAAK,IAAI7V,EAAI,CAAb,CAAgBA,CAAhB,CAAoBuS,CAApB,CAAuBvS,CAAA,EAAvB,CAPgB6V,QAQFjX,CAAAA,KAAZ,CAAkBoB,CAAlB,CAAA,CAAuB,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CART6V,SAUJhX,CAAAA,MAAZ,CAAqB0T,CAJN,CAOjB,GAAU,CAAV,GAAIA,CAAJ,CAEO,GAAI,IAAK1T,CAAAA,MAAT,CAAkB0T,CAAlB,CAEL,IADA,IAAK1T,CAAAA,MACA,EADU0T,CACV,CAAAvS,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB,IAAKnB,CAAAA,MAArB,CAA6BmB,CAAA,EAA7B,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgB,IAAKpB,CAAAA,KAAL,CAAWoB,CAAX,CAAeuS,CAAf,CAHb,KAML,KAAK3T,CAAAA,KAAL,CAAW,CAAX,CACA,CADgB,CAChB,CAAA,IAAKC,CAAAA,MAAL,CAAc,CAGZ0B,EAAAA,CAAQ,CACZ,KAAKP,CAAL,CAAS,IAAKnB,CAAAA,MAAd,CAAuB,CAAvB,CAA+B,CAA/B,EAA0BmB,CAA1B,GAA+C,CAA/C,GAAqCO,CAArC,EAAoDP,CAApD,EAAyD+V,IAAzD,EAA6D/V,CAAA,EAA7D,CAAkE,CAChE,IAAIgF,KAAO,IAAKpG,CAAAA,KAAL,CAAWoB,CAAX,CAAPgF,CAAuB,CAC3B,KAAKpG,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAiBO,CAAjB,EAA2B,EAA3B,CAAgChB,CAAhC,CAAuCyF,IAAvC,GAAgDzF,CAChDgB,EAAA,CAAQyE,IAAR,CAAe8Q,IAHiD,CA1BhDD,QAiClB,EAA6B,CAA7B,GAAmBtV,CAAnB,GAjCkBsV,QAkCJjX,CAAAA,KAAZ,CAlCgBiX,QAkCchX,CAAAA,MAAZ,EAAlB,CADF,CAC4C0B,CAD5C,CAIoB,EAApB,GAAI,IAAK1B,CAAAA,MAAT,GACE,IAAKD,CAAAA,KAAL,CAAW,CAAX,CACA,CADgB,CAChB,CAAA,IAAKC,CAAAA,MAAL,CAAc,CAFhB,CAKA,OAAO,KAAKiC,CAAAA,KAAL,EAtDoD,CAyD7DxC,GAAGF,CAAAA,SAAU4X,CAAAA,KAAb;AAAqBC,QAAe,CAACX,IAAD,CAAOM,IAAP,CAAaC,QAAb,CAAuB,CAEzDlY,MAAA,CAAyB,CAAzB,GAAO,IAAKgB,CAAAA,QAAZ,CACA,OAAO,KAAKiJ,CAAAA,MAAL,CAAY0N,IAAZ,CAAkBM,IAAlB,CAAwBC,QAAxB,CAHkD,CAO3DvX,GAAGF,CAAAA,SAAU8X,CAAAA,IAAb,CAAoBC,QAAc,CAACb,IAAD,CAAO,CACvC,MAAO,KAAK/P,CAAAA,KAAL,EAAakQ,CAAAA,KAAb,CAAmBH,IAAnB,CADgC,CAIzChX,GAAGF,CAAAA,SAAUgY,CAAAA,KAAb,CAAqBC,QAAe,CAACf,IAAD,CAAO,CACzC,MAAO,KAAK/P,CAAAA,KAAL,EAAahE,CAAAA,MAAb,CAAoB+T,IAApB,CADkC,CAK3ChX,GAAGF,CAAAA,SAAUkY,CAAAA,IAAb,CAAoBC,QAAc,CAACjB,IAAD,CAAO,CACvC,MAAO,KAAK/P,CAAAA,KAAL,EAAayQ,CAAAA,KAAb,CAAmBV,IAAnB,CADgC,CAIzChX,GAAGF,CAAAA,SAAUoY,CAAAA,KAAb,CAAqBC,QAAe,CAACnB,IAAD,CAAO,CACzC,MAAO,KAAK/P,CAAAA,KAAL,EAAaqC,CAAAA,MAAb,CAAoB0N,IAApB,CADkC,CAK3ChX,GAAGF,CAAAA,SAAU4K,CAAAA,KAAb,CAAqB0N,QAAe,CAACpL,GAAD,CAAM,CACxC3N,MAAA,CAAsB,QAAtB,GAAO,MAAO2N,IAAd,EAAyC,CAAzC,EAAkCA,GAAlC,CACA,KAAI/L,EAAI+L,GAAJ/L,CAAU,EACVgT,IAAAA,EAAKjH,GAALiH,CAAWhT,CAAXgT,EAAgB,EAIpB,OAAI,KAAK1T,CAAAA,MAAT,EAAmB0T,GAAnB,CAA6B,CAAA,CAA7B,CAKO,CAAC,EAFA,IAAK3T,CAAAA,KAAL6F,CAAW8N,GAAX9N,CAEA;AARA,CAQA,EARKlF,CAQL,CAZgC,CAgB1CjB,GAAGF,CAAAA,SAAUuY,CAAAA,MAAb,CAAsBC,QAAgB,CAACtB,IAAD,CAAO,CAC3C3X,MAAA,CAAuB,QAAvB,GAAO,MAAO2X,KAAd,EAA2C,CAA3C,EAAmCA,IAAnC,CACA,KAAI/V,EAAI+V,IAAJ/V,CAAW,EACXgT,KAAAA,EAAK+C,IAAL/C,CAAYhT,CAAZgT,EAAiB,EAErB5U,OAAA,CAAyB,CAAzB,GAAO,IAAKgB,CAAAA,QAAZ,CAA4B,yCAA5B,CAEA,IAAI,IAAKE,CAAAA,MAAT,EAAmB0T,IAAnB,CACE,MAAO,KAGC,EAAV,GAAIhT,CAAJ,EACEgT,IAAA,EAEF,KAAK1T,CAAAA,MAAL,CAAciB,IAAKC,CAAAA,GAAL,CAASwS,IAAT,CAAY,IAAK1T,CAAAA,MAAjB,CAEJ,EAAV,GAAIU,CAAJ,GAEE,IAAKX,CAAAA,KAAL,CAAW,IAAKC,CAAAA,MAAhB,CAAyB,CAAzB,CAFF,EACa,QADb,CAC2B,QAD3B,GACyCU,CADzC,EAC+CA,CAD/C,CAKA,OAAO,KAAKuB,CAAAA,KAAL,EArBoC,CAyB7CxC,GAAGF,CAAAA,SAAUyY,CAAAA,KAAb,CAAqBC,QAAe,CAACxB,IAAD,CAAO,CACzC,MAAO,KAAK/P,CAAAA,KAAL,EAAaoR,CAAAA,MAAb,CAAoBrB,IAApB,CADkC,CAK3ChX,GAAGF,CAAAA,SAAUyK,CAAAA,KAAb,CAAqBkO,QAAe,CAAC5W,GAAD,CAAM,CACxCxC,MAAA,CAAsB,QAAtB,GAAO,MAAOwC,IAAd,CACAxC,OAAA,CAAa,QAAb,CAAOwC,GAAP,CACA;GAAU,CAAV,CAAIA,GAAJ,CAAa,MAAO,KAAK0C,CAAAA,KAAL,CAAW,CAAC1C,GAAZ,CAGpB,IAAsB,CAAtB,GAAI,IAAKxB,CAAAA,QAAT,CAAyB,CACvB,GAAoB,CAApB,GAAI,IAAKE,CAAAA,MAAT,GAA0B,IAAKD,CAAAA,KAAL,CAAW,CAAX,CAA1B,CAA0C,CAA1C,EAA+CuB,GAA/C,CAGE,MAFA,KAAKvB,CAAAA,KAAL,CAAW,CAAX,CAEO,CAFSuB,GAET,EAFgB,IAAKvB,CAAAA,KAAL,CAAW,CAAX,CAEhB,CAFgC,CAEhC,EADP,IAAKD,CAAAA,QACE,CADS,CACT,CAAA,IAGT,KAAKA,CAAAA,QAAL,CAAgB,CAChB,KAAKkE,CAAAA,KAAL,CAAW1C,GAAX,CACA,KAAKxB,CAAAA,QAAL,CAAgB,CAChB,OAAO,KAVgB,CAczB,MAAO,KAAKuG,CAAAA,MAAL,CAAY/E,GAAZ,CApBiC,CAuB1C7B,GAAGF,CAAAA,SAAU8G,CAAAA,MAAb,CAAsB8R,QAAgB,CAAC7W,GAAD,CAAM,CAC1C,IAAKvB,CAAAA,KAAL,CAAW,CAAX,CAAA,EAAiBuB,GAGjB,KAASH,GAAT,CAAa,CAAb,CAAgBA,GAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,EAAoD,QAApD,EAAmC,IAAKD,CAAAA,KAAL,CAAWoB,GAAX,CAAnC,CAA+DA,GAAA,EAA/D,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,GAAX,CACA,EADiB,QACjB,CAAIA,GAAJ,GAAU,IAAKnB,CAAAA,MAAf,CAAwB,CAAxB,CACE,IAAKD,CAAAA,KAAL,CAAWoB,GAAX,CAAe,CAAf,CADF,CACsB,CADtB,CAGE,IAAKpB,CAAAA,KAAL,CAAWoB,GAAX,CAAe,CAAf,CAAA,EAGJ,KAAKnB,CAAAA,MAAL,CAAciB,IAAKe,CAAAA,GAAL,CAAS,IAAKhC,CAAAA,MAAd,CAAsBmB,GAAtB,CAA0B,CAA1B,CAEd,OAAO,KAdmC,CAkB5C1B,GAAGF,CAAAA,SAAUyE,CAAAA,KAAb;AAAqBoU,QAAe,CAAC9W,GAAD,CAAM,CACxCxC,MAAA,CAAsB,QAAtB,GAAO,MAAOwC,IAAd,CACAxC,OAAA,CAAa,QAAb,CAAOwC,GAAP,CACA,IAAU,CAAV,CAAIA,GAAJ,CAAa,MAAO,KAAK0I,CAAAA,KAAL,CAAW,CAAC1I,GAAZ,CAEpB,IAAsB,CAAtB,GAAI,IAAKxB,CAAAA,QAAT,CAIE,MAHA,KAAKA,CAAAA,QAGE,CAHS,CAGT,CAFP,IAAKkK,CAAAA,KAAL,CAAW1I,GAAX,CAEO,CADP,IAAKxB,CAAAA,QACE,CADS,CACT,CAAA,IAGT,KAAKC,CAAAA,KAAL,CAAW,CAAX,CAAA,EAAiBuB,GAEjB,IAAoB,CAApB,GAAI,IAAKtB,CAAAA,MAAT,EAAyC,CAAzC,CAAyB,IAAKD,CAAAA,KAAL,CAAW,CAAX,CAAzB,CACE,IAAKA,CAAAA,KAAL,CAAW,CAAX,CACA,CADgB,CAAC,IAAKA,CAAAA,KAAL,CAAW,CAAX,CACjB,CAAA,IAAKD,CAAAA,QAAL,CAAgB,CAFlB,KAKE,KAASqB,GAAT,CAAa,CAAb,CAAgBA,GAAhB,CAAoB,IAAKnB,CAAAA,MAAzB,EAAmD,CAAnD,CAAmC,IAAKD,CAAAA,KAAL,CAAWoB,GAAX,CAAnC,CAAsDA,GAAA,EAAtD,CACE,IAAKpB,CAAAA,KAAL,CAAWoB,GAAX,CACA,EADiB,QACjB,CAAA,EAAA,IAAKpB,CAAAA,KAAL,CAAWoB,GAAX,CAAe,CAAf,CAIJ,OAAO,KAAKc,CAAAA,KAAL,EAzBiC,CA4B1CxC,GAAGF,CAAAA,SAAU8Y,CAAAA,IAAb,CAAoBC,QAAc,CAAChX,GAAD,CAAM,CACtC,MAAO,KAAKoF,CAAAA,KAAL,EAAasD,CAAAA,KAAb,CAAmB1I,GAAnB,CAD+B,CAIxC7B,GAAGF,CAAAA,SAAUgZ,CAAAA,IAAb,CAAoBC,QAAc,CAAClX,GAAD,CAAM,CACtC,MAAO,KAAKoF,CAAAA,KAAL,EAAa1C,CAAAA,KAAb,CAAmB1C,GAAnB,CAD+B,CAIxC7B;EAAGF,CAAAA,SAAUkZ,CAAAA,IAAb,CAAoBC,QAAc,EAAG,CACnC,IAAK5Y,CAAAA,QAAL,CAAgB,CAEhB,OAAO,KAH4B,CAMrCL,GAAGF,CAAAA,SAAUuK,CAAAA,GAAb,CAAmB6O,QAAa,EAAG,CACjC,MAAO,KAAKjS,CAAAA,KAAL,EAAa+R,CAAAA,IAAb,EAD0B,CAInChZ,GAAGF,CAAAA,SAAUqZ,CAAAA,YAAb,CAA4BC,QAAsB,CAACvX,GAAD,CAAMP,GAAN,CAAW0C,KAAX,CAAkB,CAElE,IAAItC,CAEJ,KAAKyF,CAAAA,OAAL,CAHUtF,GAAItB,CAAAA,MAGd,CAHuByD,KAGvB,CAEA,KACI/B,MAAQ,CACZ,KAAKP,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBG,GAAItB,CAAAA,MAApB,CAA4BmB,CAAA,EAA5B,CAAiC,CAC/B,IAAAyE,GAAK,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAAesC,KAAf,CAALmC,CAA6B,CAA7BA,EAAkClE,KAC9BmD,MAAAA,EAASvD,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAAT0D,CAAwB,CAAxBA,EAA6B9D,GACjC6E,EAAA,EAAKf,KAAL,CAAa,QACbnD,MAAA,EAASkE,CAAT,EAAc,EAAd,GAAsBf,KAAtB,CAA8B,QAA9B,CAA2C,CAA3C,CACA,KAAK9E,CAAAA,KAAL,CAAWoB,CAAX,CAAesC,KAAf,CAAA,CAAwBmC,CAAxB,CAA4B,QALG,CAOjC,IAAA,CAAOzE,CAAP,CAAW,IAAKnB,CAAAA,MAAhB,CAAyByD,KAAzB,CAAgCtC,CAAA,EAAhC,CACEyE,CAEA,EAFK,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAAesC,KAAf,CAEL,CAF6B,CAE7B,EAFkC/B,KAElC,CADAA,KACA,CADQkE,CACR,EADa,EACb,CAAA,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAAesC,KAAf,CAAA,CAAwBmC,CAAxB,CAA4B,QAG9B,IAAc,CAAd,GAAIlE,KAAJ,CAAiB,MAAO,KAAKO,CAAAA,KAAL,EAGxBnD;MAAA,CAAiB,CAAC,CAAlB,GAAO4C,KAAP,CAEA,KAAKP,CAAL,CADAO,KACA,CADQ,CACR,CAAYP,CAAZ,CAAgB,IAAKnB,CAAAA,MAArB,CAA6BmB,CAAA,EAA7B,CACEyE,CAEA,CAFI,EAAE,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAAF,CAAkB,CAAlB,CAEJ,CAF2BO,KAE3B,CADAA,KACA,CADQkE,CACR,EADa,EACb,CAAA,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAAA,CAAgByE,CAAhB,CAAoB,QAEtB,KAAK9F,CAAAA,QAAL,CAAgB,CAEhB,OAAO,KAAKmC,CAAAA,KAAL,EAjC2D,CAoCpExC,GAAGF,CAAAA,SAAUuZ,CAAAA,QAAb,CAAwBC,QAAkB,CAACzX,GAAD,CAAM0X,IAAN,CAAY,CAGpD,IAAIxX,EAAI,IAAKkF,CAAAA,KAAL,EAAR,CACIjF,EAAIH,GADR,CAII2X,IAAMxX,CAAE1B,CAAAA,KAAF,CAAQ0B,CAAEzB,CAAAA,MAAV,CAAmB,CAAnB,CAANiZ,CAA8B,CAElCxV,IAAA,CAAQ,EAAR,CADc,IAAKuF,CAAAA,UAALkQ,CAAgBD,GAAhBC,CAEA,EAAd,GAAIzV,GAAJ,GACEhC,CAEA,CAFIA,CAAE8V,CAAAA,KAAF,CAAQ9T,GAAR,CAEJ,CADAjC,CAAEkB,CAAAA,MAAF,CAASe,GAAT,CACA,CAAAwV,GAAA,CAAMxX,CAAE1B,CAAAA,KAAF,CAAQ0B,CAAEzB,CAAAA,MAAV,CAAmB,CAAnB,CAAN,CAA8B,CAHhC,CAOA,KAAIoD,EAAI5B,CAAExB,CAAAA,MAANoD,CAAe3B,CAAEzB,CAAAA,MAGrB,IAAa,KAAb,GAAIgZ,IAAJ,CAAoB,CAClB,IAAAnQ,EAAI,IAAIpJ,EAAJ,CAAO,IAAP,CACJoJ,EAAE7I,CAAAA,MAAF,CAAWoD,CAAX,CAAe,CACfyF,EAAE9I,CAAAA,KAAF,CAAc0E,KAAJ,CAAUoE,CAAE7I,CAAAA,MAAZ,CACV,KAAK,IAAImB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB0H,CAAE7I,CAAAA,MAAtB,CAA8BmB,CAAA,EAA9B,CACE0H,CAAE9I,CAAAA,KAAF,CAAQoB,CAAR,CAAA,CAAa,CALG,CAShBgY,CAAAA,CAAO3X,CAAEkF,CAAAA,KAAF,EAAUkS,CAAAA,YAAV,CAAuBnX,CAAvB;AAA0B,CAA1B,CAA6B2B,CAA7B,CACW,EAAtB,GAAI+V,CAAKrZ,CAAAA,QAAT,GACE0B,CACA,CADI2X,CACJ,CAAItQ,CAAJ,GACEA,CAAE9I,CAAAA,KAAF,CAAQqD,CAAR,CADF,CACe,CADf,CAFF,CAOA,KAAarB,EAAAqB,CAAb,CAAyB,CAAzB,EAAoBrB,CAApB,CAA4BA,CAAA,EAA5B,CAAiC,CAC3BqX,CAAAA,CAAmC,QAAnCA,EAAM5X,CAAEzB,CAAAA,KAAF,CAAQ0B,CAAEzB,CAAAA,MAAV,CAAmB+B,CAAnB,CAANqX,CAA8B,CAA9BA,GACD5X,CAAEzB,CAAAA,KAAF,CAAQ0B,CAAEzB,CAAAA,MAAV,CAAmB+B,CAAnB,CAAuB,CAAvB,CADCqX,CAC2B,CAD3BA,CAKJA,EAAA,CAAKnY,IAAKC,CAAAA,GAAL,CAAUkY,CAAV,CAAeH,GAAf,CAAsB,CAAtB,CAAyB,QAAzB,CAGL,KADAzX,CAAEoX,CAAAA,YAAF,CAAenX,CAAf,CAAkB2X,CAAlB,CAAsBrX,CAAtB,CACA,CAAsB,CAAtB,GAAOP,CAAE1B,CAAAA,QAAT,CAAA,CACEsZ,CAAA,EAGA,CAFA5X,CAAE1B,CAAAA,QAEF,CAFa,CAEb,CADA0B,CAAEoX,CAAAA,YAAF,CAAenX,CAAf,CAAkB,CAAlB,CAAqBM,CAArB,CACA,CAAKP,CAAEmG,CAAAA,MAAF,EAAL,GACEnG,CAAE1B,CAAAA,QADJ,EACgB,CADhB,CAIE+I,EAAJ,GACEA,CAAE9I,CAAAA,KAAF,CAAQgC,CAAR,CADF,CACeqX,CADf,CAjB+B,CAqB7BvQ,CAAJ,EACEA,CAAE5G,CAAAA,KAAF,EAEFT,EAAES,CAAAA,KAAF,EAGa,MAAb,GAAI+W,IAAJ,EAAgC,CAAhC,GAAsBvV,GAAtB,EACEjC,CAAEuH,CAAAA,MAAF,CAAStF,GAAT,CAGF,OAAO,CACLQ,IAAK4E,CAAL5E,EAAU,IADL,CAELiC,IAAK1E,CAFA,CApE6C,CA8EtD/B,GAAGF,CAAAA,SAAU8Z,CAAAA,MAAb,CAAsBC,QAAgB,CAAChY,GAAD,CAAM0X,IAAN,CAAYO,QAAZ,CAAsB,CAC1Dza,MAAA,CAAO,CAACwC,GAAIqG,CAAAA,MAAJ,EAAR,CAEA,IAAI,IAAKA,CAAAA,MAAL,EAAJ,CACE,MAAO,CACL1D,IAAK,IAAIxE,EAAJ,CAAO,CAAP,CADA,CAELyG,IAAK,IAAIzG,EAAJ,CAAO,CAAP,CAFA,CAJiD,KAUtDwE,GACJ,IAAsB,CAAtB;AAAI,IAAKnE,CAAAA,QAAT,EAA4C,CAA5C,GAA2BwB,GAAIxB,CAAAA,QAA/B,CAA+C,CAC7C,IAAA8I,IAAM,IAAK4B,CAAAA,GAAL,EAAW6O,CAAAA,MAAX,CAAkB/X,GAAlB,CAAuB0X,IAAvB,CAEO,MAAb,GAAIA,IAAJ,GACE/U,GADF,CACQ2E,GAAI3E,CAAAA,GAAIuG,CAAAA,GAAR,EADR,CAIA,IAAa,KAAb,GAAIwO,IAAJ,CAAoB,CAClB,IAAA9S,IAAM0C,GAAI1C,CAAAA,GAAIsE,CAAAA,GAAR,EACF+O,SAAJ,EAAiC,CAAjC,GAAgBrT,GAAIpG,CAAAA,QAApB,EACEoG,GAAIyG,CAAAA,IAAJ,CAASrL,GAAT,CAHgB,CAOpB,MAAO,CACA2C,GADA,CAEAiC,GAFA,CAdsC,CAoB/C,MAAsB,EAAtB,GAAI,IAAKpG,CAAAA,QAAT,EAA4C,CAA5C,GAA2BwB,GAAIxB,CAAAA,QAA/B,EACE8I,GAMO,CAND,IAAKyQ,CAAAA,MAAL,CAAY/X,GAAIkJ,CAAAA,GAAJ,EAAZ,CAAuBwO,IAAvB,CAMC,CAJM,KAIN,GAJHA,IAIG,GAHL/U,GAGK,CAHC2E,GAAI3E,CAAAA,GAAIuG,CAAAA,GAAR,EAGD,EAAA,CACAvG,GADA,CAELiC,IAAK0C,GAAI1C,CAAAA,GAFJ,CAPT,EAauC,CAAvC,IAAK,IAAKpG,CAAAA,QAAV,CAAqBwB,GAAIxB,CAAAA,QAAzB,GACE8I,GASO,CATD,IAAK4B,CAAAA,GAAL,EAAW6O,CAAAA,MAAX,CAAkB/X,GAAIkJ,CAAAA,GAAJ,EAAlB,CAA6BwO,IAA7B,CASC,CAPM,KAON,GAPHA,IAOG,GANL9S,GACA,CADM0C,GAAI1C,CAAAA,GAAIsE,CAAAA,GAAR,EACN,CAAI+O,QAAJ,EAAiC,CAAjC,GAAgBrT,GAAIpG,CAAAA,QAApB,EACEoG,GAAIvD,CAAAA,IAAJ,CAASrB,GAAT,CAIG,EAAA,CACL2C,IAAK2E,GAAI3E,CAAAA,GADJ,CAEAiC,GAFA,CAVT,EAmBI5E,GAAItB,CAAAA,MAAR;AAAiB,IAAKA,CAAAA,MAAtB,EAAgD,CAAhD,CAAgC,IAAK8E,CAAAA,GAAL,CAASxD,GAAT,CAAhC,CACS,CACL2C,IAAK,IAAIxE,EAAJ,CAAO,CAAP,CADA,CAELyG,IAAK,IAFA,CADT,CAQmB,CAAnB,GAAI5E,GAAItB,CAAAA,MAAR,CACe,KAAb,GAAIgZ,IAAJ,CACS,CACL/U,IAAK,IAAKuV,CAAAA,IAAL,CAAUlY,GAAIvB,CAAAA,KAAJ,CAAU,CAAV,CAAV,CADA,CAELmG,IAAK,IAFA,CADT,CAOa,KAAb,GAAI8S,IAAJ,CACS,CACL/U,IAAK,IADA,CAELiC,IAAK,IAAIzG,EAAJ,CAAO,IAAKmI,CAAAA,IAAL,CAAUtG,GAAIvB,CAAAA,KAAJ,CAAU,CAAV,CAAV,CAAP,CAFA,CADT,CAOO,CACLkE,IAAK,IAAKuV,CAAAA,IAAL,CAAUlY,GAAIvB,CAAAA,KAAJ,CAAU,CAAV,CAAV,CADA,CAELmG,IAAK,IAAIzG,EAAJ,CAAO,IAAKmI,CAAAA,IAAL,CAAUtG,GAAIvB,CAAAA,KAAJ,CAAU,CAAV,CAAV,CAAP,CAFA,CAfT,CAqBO,IAAK+Y,CAAAA,QAAL,CAAcxX,GAAd,CAAmB0X,IAAnB,CA5FmD,CAgG5DvZ,GAAGF,CAAAA,SAAU0E,CAAAA,GAAb,CAAmBwV,QAAa,CAACnY,GAAD,CAAM,CACpC,MAAO,KAAK+X,CAAAA,MAAL,CAAY/X,GAAZ,CAAiB,KAAjB,CAAwB,CAAA,CAAxB,CAA+B2C,CAAAA,GADF,CAKtCxE,GAAGF,CAAAA,SAAU2G,CAAAA,GAAb,CAAmBwT,QAAa,CAACpY,GAAD,CAAM,CACpC,MAAO,KAAK+X,CAAAA,MAAL,CAAY/X,GAAZ,CAAiB,KAAjB,CAAwB,CAAA,CAAxB,CAA+B4E,CAAAA,GADF,CAItCzG,GAAGF,CAAAA,SAAU2E,CAAAA,IAAb,CAAoByV,QAAc,CAACrY,GAAD,CAAM,CACtC,MAAO,KAAK+X,CAAAA,MAAL,CAAY/X,GAAZ,CAAiB,KAAjB,CAAwB,CAAA,CAAxB,CAA8B4E,CAAAA,GADC,CAKxCzG,GAAGF,CAAAA,SAAUqa,CAAAA,QAAb;AAAwBC,QAAkB,CAACvY,GAAD,CAAM,CAC9C,IAAIwY,GAAK,IAAKT,CAAAA,MAAL,CAAY/X,GAAZ,CAGT,IAAIwY,EAAG5T,CAAAA,GAAIyB,CAAAA,MAAP,EAAJ,CAAqB,MAAOmS,GAAG7V,CAAAA,GAE/B,KAAIiC,IAA0B,CAApB,GAAA4T,EAAG7V,CAAAA,GAAInE,CAAAA,QAAP,CAAwBga,EAAG5T,CAAAA,GAAIvD,CAAAA,IAAP,CAAYrB,GAAZ,CAAxB,CAA2CwY,EAAG5T,CAAAA,GAAxD,CAEI6T,KAAOzY,GAAIqW,CAAAA,KAAJ,CAAU,CAAV,CACPjU,IAAAA,CAAKpC,GAAIwH,CAAAA,KAAJ,CAAU,CAAV,CACLhE,IAAAA,CAAMoB,GAAIpB,CAAAA,GAAJ,CAAQiV,IAAR,CAGV,OAAU,EAAV,CAAIjV,GAAJ,EAAsB,CAAtB,GAAepB,GAAf,EAAmC,CAAnC,GAA2BoB,GAA3B,CAA6CgV,EAAG7V,CAAAA,GAAhD,CAG2B,CAApB,GAAA6V,EAAG7V,CAAAA,GAAInE,CAAAA,QAAP,CAAwBga,EAAG7V,CAAAA,GAAID,CAAAA,KAAP,CAAa,CAAb,CAAxB,CAA0C8V,EAAG7V,CAAAA,GAAI+F,CAAAA,KAAP,CAAa,CAAb,CAhBH,CAmBhDvK,GAAGF,CAAAA,SAAUqI,CAAAA,IAAb,CAAoBoS,QAAc,CAAC1Y,GAAD,CAAM,CACtCxC,MAAA,CAAc,QAAd,EAAOwC,GAAP,CAIA,KAHA,IAAIiB,EAAK,QAALA,CAAgBjB,GAApB,CAEI2Y,IAAM,CAFV,CAGS9Y,EAAI,IAAKnB,CAAAA,MAATmB,CAAkB,CAA3B,CAAmC,CAAnC,EAA8BA,CAA9B,CAAsCA,CAAA,EAAtC,CACE8Y,GAAA,EAAO1X,CAAP,CAAW0X,GAAX,EAAkB,IAAKla,CAAAA,KAAL,CAAWoB,CAAX,CAAlB,CAAkC,CAAlC,GAAwCG,GAG1C,OAAO2Y,IAT+B,CAaxCxa,GAAGF,CAAAA,SAAUsI,CAAAA,KAAb,CAAqBqS,QAAe,CAAC5Y,GAAD,CAAM,CACxCxC,MAAA,CAAc,QAAd,EAAOwC,GAAP,CAGA,KADA,IAAII,MAAQ,CAAZ,CACSP,EAAI,IAAKnB,CAAAA,MAATmB;AAAkB,CAA3B,CAAmC,CAAnC,EAA8BA,CAA9B,CAAsCA,CAAA,EAAtC,CACMyE,KAEI,EAFC,IAAK7F,CAAAA,KAAL,CAAWoB,CAAX,CAED,CAFiB,CAEjB,EAF8B,QAE9B,CAFsBO,KAEtB,CADR,IAAK3B,CAAAA,KAAL,CAAWoB,CAAX,CACQ,CADSyE,KACT,CADatE,GACb,CADoB,CACpB,CAAAsE,KAAA,EAAItE,GAGd,OAAO,KAAKW,CAAAA,KAAL,EAViC,CAa1CxC,GAAGF,CAAAA,SAAUia,CAAAA,IAAb,CAAoBW,QAAc,CAAC7Y,GAAD,CAAM,CACtC,MAAO,KAAKoF,CAAAA,KAAL,EAAamB,CAAAA,KAAb,CAAmBvG,GAAnB,CAD+B,CAIxC7B,GAAGF,CAAAA,SAAU6a,CAAAA,IAAb,CAAoBC,QAAc,CAAC9X,CAAD,CAAI,CACpCzD,MAAA,CAAsB,CAAtB,GAAOyD,CAAEzC,CAAAA,QAAT,CACAhB,OAAA,CAAO,CAACyD,CAAEoF,CAAAA,MAAF,EAAR,CAEA,KAAIxF,EAAI,IAAR,CACIC,EAAIG,CAAEmE,CAAAA,KAAF,EAGNvE,EAAA,CADiB,CAAnB,GAAIA,CAAErC,CAAAA,QAAN,CACMqC,CAAE+B,CAAAA,IAAF,CAAO3B,CAAP,CADN,CAGMJ,CAAEuE,CAAAA,KAAF,EAIF4T,EAAAA,CAAI,IAAI7a,EAAJ,CAAO,CAAP,CASR,KARA,IAAI8a,EAAI,IAAI9a,EAAJ,CAAO,CAAP,CAAR,CAGI+a,EAAI,IAAI/a,EAAJ,CAAO,CAAP,CAHR,CAIIgb,EAAI,IAAIhb,EAAJ,CAAO,CAAP,CAJR,CAMIib,EAAI,CAER,CAAOvY,CAAEwY,CAAAA,MAAF,EAAP,EAAqBvY,CAAEuY,CAAAA,MAAF,EAArB,CAAA,CACExY,CAAE4G,CAAAA,MAAF,CAAS,CAAT,CAEA,CADA3G,CAAE2G,CAAAA,MAAF,CAAS,CAAT,CACA,CAAA,EAAE2R,CAMJ,KAHA,IAAIE,GAAKxY,CAAEsE,CAAAA,KAAF,EAAT,CACImU,GAAK1Y,CAAEuE,CAAAA,KAAF,EAET,CAAO,CAACvE,CAAEwF,CAAAA,MAAF,EAAR,CAAA,CAAoB,CAClB,IADkB,IACTxG,EAAI,CADK,CACF2Z,GAAK,CAArB,CAA8C,CAA9C,IAAyB3Y,CAAEpC,CAAAA,KAAF,CAAQ,CAAR,CAAzB,CAAsC+a,EAAtC;AAAuD,EAAvD,CAAmD3Z,CAAnD,CAA2D,EAAEA,CAAF,CAAK2Z,EAAL,GAAY,CAAvE,EACA,GAAQ,CAAR,CAAI3Z,CAAJ,CAEE,IADAgB,CAAE4G,CAAAA,MAAF,CAAS5H,CAAT,CACA,CAAa,CAAb,CAAOA,CAAA,EAAP,CAAA,CAAgB,CACd,GAAImZ,CAAES,CAAAA,KAAF,EAAJ,EAAiBR,CAAEQ,CAAAA,KAAF,EAAjB,CACET,CAAE3N,CAAAA,IAAF,CAAOiO,EAAP,CACA,CAAAL,CAAE5X,CAAAA,IAAF,CAAOkY,EAAP,CAGFP,EAAEvR,CAAAA,MAAF,CAAS,CAAT,CACAwR,EAAExR,CAAAA,MAAF,CAAS,CAAT,CAPc,CAWThH,CAAAA,CAAI,CAAb,KAAgBiZ,EAAhB,CAAqB,CAArB,CAA8C,CAA9C,IAAyB5Y,CAAErC,CAAAA,KAAF,CAAQ,CAAR,CAAzB,CAAsCib,EAAtC,GAAuD,EAAvD,CAAmDjZ,CAAnD,CAA2D,EAAEA,CAAF,CAAKiZ,EAAL,GAAY,CAAvE,EACA,GAAQ,CAAR,CAAIjZ,CAAJ,CAEE,IADAK,CAAE2G,CAAAA,MAAF,CAAShH,CAAT,CACA,CAAa,CAAb,CAAOA,CAAA,EAAP,CAAA,CAAgB,CACd,GAAIyY,CAAEO,CAAAA,KAAF,EAAJ,EAAiBN,CAAEM,CAAAA,KAAF,EAAjB,CACEP,CAAE7N,CAAAA,IAAF,CAAOiO,EAAP,CACA,CAAAH,CAAE9X,CAAAA,IAAF,CAAOkY,EAAP,CAGFL,EAAEzR,CAAAA,MAAF,CAAS,CAAT,CACA0R,EAAE1R,CAAAA,MAAF,CAAS,CAAT,CAPc,CAWF,CAAhB,EAAI5G,CAAE2C,CAAAA,GAAF,CAAM1C,CAAN,CAAJ,EACED,CAAEQ,CAAAA,IAAF,CAAOP,CAAP,CAEA,CADAkY,CAAE3X,CAAAA,IAAF,CAAO6X,CAAP,CACA,CAAAD,CAAE5X,CAAAA,IAAF,CAAO8X,CAAP,CAHF,GAKErY,CAAEO,CAAAA,IAAF,CAAOR,CAAP,CAEA,CADAqY,CAAE7X,CAAAA,IAAF,CAAO2X,CAAP,CACA,CAAAG,CAAE9X,CAAAA,IAAF,CAAO4X,CAAP,CAPF,CA7BkB,CAwCpB,MAAO,CACL/Y,EAAGgZ,CADE,CAEL/Y,EAAGgZ,CAFE,CAGLQ,IAAK7Y,CAAEM,CAAAA,MAAF,CAASgY,CAAT,CAHA,CAxE6B,CAkFtCjb,GAAGF,CAAAA,SAAUuE,CAAAA,MAAb,CAAsBoX,QAAgB,CAAC3Y,CAAD,CAAI,CACxCzD,MAAA,CAAsB,CAAtB,GAAOyD,CAAEzC,CAAAA,QAAT,CACAhB,OAAA,CAAO,CAACyD,CAAEoF,CAAAA,MAAF,EAAR,CAEA,KAAInG,EAAI,IAAR,CACIC,EAAIc,CAAEmE,CAAAA,KAAF,EAGNlF,EAAA,CADiB,CAAnB,GAAIA,CAAE1B,CAAAA,QAAN,CACM0B,CAAE0C,CAAAA,IAAF,CAAO3B,CAAP,CADN;AAGMf,CAAEkF,CAAAA,KAAF,EAQN,KALA,IAAIyU,GAAK,IAAI1b,EAAJ,CAAO,CAAP,CAAT,CACI2b,GAAK,IAAI3b,EAAJ,CAAO,CAAP,CADT,CAGI4b,MAAQ5Z,CAAEiF,CAAAA,KAAF,EAEZ,CAAmB,CAAnB,CAAOlF,CAAE8Z,CAAAA,IAAF,CAAO,CAAP,CAAP,EAAoC,CAApC,CAAwB7Z,CAAE6Z,CAAAA,IAAF,CAAO,CAAP,CAAxB,CAAA,CAAuC,CACrC,IADqC,IAC5Bna,EAAI,CADwB,CACrB2Z,GAAK,CAArB,CAA8C,CAA9C,IAAyBtZ,CAAEzB,CAAAA,KAAF,CAAQ,CAAR,CAAzB,CAAsC+a,EAAtC,GAAuD,EAAvD,CAAmD3Z,CAAnD,CAA2D,EAAEA,CAAF,CAAK2Z,EAAL,GAAY,CAAvE,EACA,GAAQ,CAAR,CAAI3Z,CAAJ,CAEE,IADAK,CAAEuH,CAAAA,MAAF,CAAS5H,CAAT,CACA,CAAa,CAAb,CAAOA,CAAA,EAAP,CAAA,CACMga,EAAGJ,CAAAA,KAAH,EAIJ,EAHEI,EAAGxO,CAAAA,IAAH,CAAQ0O,KAAR,CAGF,CAAAF,EAAGpS,CAAAA,MAAH,CAAU,CAAV,CAIKhH,EAAAA,CAAI,CAAb,KAAgBiZ,EAAhB,CAAqB,CAArB,CAA8C,CAA9C,IAAyBvZ,CAAE1B,CAAAA,KAAF,CAAQ,CAAR,CAAzB,CAAsCib,EAAtC,GAAuD,EAAvD,CAAmDjZ,CAAnD,CAA2D,EAAEA,CAAF,CAAKiZ,EAAL,GAAY,CAAvE,EACA,GAAQ,CAAR,CAAIjZ,CAAJ,CAEE,IADAN,CAAEsH,CAAAA,MAAF,CAAShH,CAAT,CACA,CAAa,CAAb,CAAOA,CAAA,EAAP,CAAA,CACMqZ,EAAGL,CAAAA,KAAH,EAIJ,EAHEK,EAAGzO,CAAAA,IAAH,CAAQ0O,KAAR,CAGF,CAAAD,EAAGrS,CAAAA,MAAH,CAAU,CAAV,CAIY,EAAhB,EAAIvH,CAAEsD,CAAAA,GAAF,CAAMrD,CAAN,CAAJ,EACED,CAAEmB,CAAAA,IAAF,CAAOlB,CAAP,CACA,CAAA0Z,EAAGxY,CAAAA,IAAH,CAAQyY,EAAR,CAFF,GAIE3Z,CAAEkB,CAAAA,IAAF,CAAOnB,CAAP,CACA,CAAA4Z,EAAGzY,CAAAA,IAAH,CAAQwY,EAAR,CALF,CAzBqC,CAoCrCvS,CAAA,CADgB,CAAlB,GAAIpH,CAAE8Z,CAAAA,IAAF,CAAO,CAAP,CAAJ,CACQH,EADR,CAGQC,EAGU,EAAlB,CAAIxS,CAAI0S,CAAAA,IAAJ,CAAS,CAAT,CAAJ,EACE1S,CAAI+D,CAAAA,IAAJ,CAASpK,CAAT,CAGF,OAAOqG,EA/DiC,CAkE1CnJ,GAAGF,CAAAA,SAAU0b,CAAAA,GAAb,CAAmBM,QAAa,CAACja,GAAD,CAAM,CACpC,GAAI,IAAKqG,CAAAA,MAAL,EAAJ,CAAmB,MAAOrG,IAAIwI,CAAAA,GAAJ,EAC1B;GAAIxI,GAAIqG,CAAAA,MAAJ,EAAJ,CAAkB,MAAO,KAAKmC,CAAAA,GAAL,EAEzB,KAAItI,EAAI,IAAKkF,CAAAA,KAAL,EACJjF,IAAAA,CAAIH,GAAIoF,CAAAA,KAAJ,EACRlF,EAAE1B,CAAAA,QAAF,CAAa,CAIb,KAAK,IAAI2D,MAHThC,GAAE3B,CAAAA,QAGO2D,CAHI,CAGb,CAAoBjC,CAAEmZ,CAAAA,MAAF,EAApB,EAAkClZ,GAAEkZ,CAAAA,MAAF,EAAlC,CAA8ClX,KAAA,EAA9C,CACEjC,CAAEuH,CAAAA,MAAF,CAAS,CAAT,CACA,CAAAtH,GAAEsH,CAAAA,MAAF,CAAS,CAAT,CAGF,GAAG,CACD,IAAA,CAAOvH,CAAEmZ,CAAAA,MAAF,EAAP,CAAA,CACEnZ,CAAEuH,CAAAA,MAAF,CAAS,CAAT,CAEF,KAAA,CAAOtH,GAAEkZ,CAAAA,MAAF,EAAP,CAAA,CACElZ,GAAEsH,CAAAA,MAAF,CAAS,CAAT,CAGF,KAAIrI,EAAIc,CAAEsD,CAAAA,GAAF,CAAMrD,GAAN,CACR,IAAQ,CAAR,CAAIf,CAAJ,CAEMyI,CAEJ,CAFQ3H,CAER,CADAA,CACA,CADIC,GACJ,CAAAA,GAAA,CAAI0H,CAJN,KAKO,IAAU,CAAV,GAAIzI,CAAJ,EAA6B,CAA7B,GAAee,GAAE6Z,CAAAA,IAAF,CAAO,CAAP,CAAf,CACL,KAGF9Z,EAAEmB,CAAAA,IAAF,CAAOlB,GAAP,CAlBC,CAAH,MAmBS,CAnBT,CAqBA,OAAOA,IAAEiB,CAAAA,MAAF,CAASe,KAAT,CApC6B,CAwCtChE,GAAGF,CAAAA,SAAUic,CAAAA,IAAb,CAAoBC,QAAc,CAACna,GAAD,CAAM,CACtC,MAAO,KAAK8Y,CAAAA,IAAL,CAAU9Y,GAAV,CAAeE,CAAAA,CAAE0C,CAAAA,IAAjB,CAAsB5C,GAAtB,CAD+B,CAIxC7B,GAAGF,CAAAA,SAAUob,CAAAA,MAAb,CAAsBe,QAAgB,EAAG,CACvC,MAA+B,EAA/B,IAAQ,IAAK3b,CAAAA,KAAL,CAAW,CAAX,CAAR,CAAwB,CAAxB,CADuC,CAIzCN,GAAGF,CAAAA,SAAUwb,CAAAA,KAAb;AAAqBY,QAAe,EAAG,CACrC,MAA+B,EAA/B,IAAQ,IAAK5b,CAAAA,KAAL,CAAW,CAAX,CAAR,CAAwB,CAAxB,CADqC,CAKvCN,GAAGF,CAAAA,SAAUuJ,CAAAA,KAAb,CAAqB8S,QAAe,CAACta,GAAD,CAAM,CACxC,MAAO,KAAKvB,CAAAA,KAAL,CAAW,CAAX,CAAP,CAAuBuB,GADiB,CAK1C7B,GAAGF,CAAAA,SAAUsc,CAAAA,KAAb,CAAqBC,QAAe,CAACrP,GAAD,CAAM,CACxC3N,MAAA,CAAsB,QAAtB,GAAO,MAAO2N,IAAd,CACA,KAAI/L,EAAI+L,GAAJ/L,CAAU,EACVgT,IAAAA,EAAKjH,GAALiH,CAAWhT,CAAXgT,EAAgB,EAChB7K,EAAAA,CAAI,CAAJA,EAASnI,CAGb,IAAI,IAAKV,CAAAA,MAAT,EAAmB0T,GAAnB,CAGE,MAFA,KAAK9M,CAAAA,OAAL,CAAa8M,GAAb,CAAiB,CAAjB,CAEO,CADP,IAAK3T,CAAAA,KAAL,CAAW2T,GAAX,CACO,EADU7K,CACV,CAAA,IAKT,KAAA,CAA0B,CAA1B,GAAgBnH,CAAhB,EAA+BP,GAA/B,CAAmC,IAAKnB,CAAAA,MAAxC,CAAgDmB,GAAA,EAAhD,CAAqD,CACnD,IAAIyE,EAAI,IAAK7F,CAAAA,KAAL,CAAWoB,GAAX,CAAJyE,CAAoB,CACxBA,EAAA,EAAKlE,CACLA,EAAA,CAAQkE,CAAR,GAAc,EACdA,EAAA,EAAK,QACL,KAAK7F,CAAAA,KAAL,CAAWoB,GAAX,CAAA,CAAgByE,CALmC,CAOvC,CAAd,GAAIlE,CAAJ,GACE,IAAK3B,CAAAA,KAAL,CAAWoB,GAAX,CACA,CADgBO,CAChB,CAAA,IAAK1B,CAAAA,MAAL,EAFF,CAIA,OAAO,KA1BiC,CA6B1CP,GAAGF,CAAAA,SAAUoI,CAAAA,MAAb,CAAsBoU,QAAgB,EAAG,CACvC,MAAuB,EAAvB,GAAO,IAAK/b,CAAAA,MAAZ,EAA8C,CAA9C,GAA4B,IAAKD,CAAAA,KAAL,CAAW,CAAX,CADW,CAIzCN,GAAGF,CAAAA,SAAU+b,CAAAA,IAAb;AAAoBU,QAAc,CAAC1a,GAAD,CAAM,CACtC,IAAIxB,SAAiB,CAAjBA,CAAWwB,GAEf,IAAsB,CAAtB,GAAI,IAAKxB,CAAAA,QAAT,EAA2B,CAACA,QAA5B,CAAsC,MAAO,CAAC,CAC9C,IAAsB,CAAtB,GAAI,IAAKA,CAAAA,QAAT,EAA2BA,QAA3B,CAAqC,MAAO,EAE5C,KAAKmC,CAAAA,KAAL,EAGkB,EAAlB,CAAI,IAAKjC,CAAAA,MAAT,CACE4I,GADF,CACQ,CADR,EAGM9I,QAOJ,GANEwB,GAMF,CANQ,CAACA,GAMT,EAHAxC,MAAA,CAAc,QAAd,EAAOwC,GAAP,CAAyB,mBAAzB,CAGA,CADIsE,QACJ,CADQ,IAAK7F,CAAAA,KAAL,CAAW,CAAX,CACR,CADwB,CACxB,CAAA6I,GAAA,CAAMhD,QAAA,GAAMtE,GAAN,CAAY,CAAZ,CAAgBsE,QAAA,CAAItE,GAAJ,CAAU,CAAC,CAAX,CAAe,CAVvC,CAYA,OAAsB,EAAtB,GAAI,IAAKxB,CAAAA,QAAT,CAAgC,CAAC8I,GAAjC,CAAuC,CAAvC,CACOA,GAtB+B,CA6BxCnJ,GAAGF,CAAAA,SAAUuF,CAAAA,GAAb,CAAmBmX,QAAa,CAAC3a,GAAD,CAAM,CACpC,GAAsB,CAAtB,GAAI,IAAKxB,CAAAA,QAAT,EAA4C,CAA5C,GAA2BwB,GAAIxB,CAAAA,QAA/B,CAA+C,MAAO,CAAC,CACvD,IAAsB,CAAtB,GAAI,IAAKA,CAAAA,QAAT,EAA4C,CAA5C,GAA2BwB,GAAIxB,CAAAA,QAA/B,CAA+C,MAAO,EAElD8I,IAAAA,CAAM,IAAKsT,CAAAA,IAAL,CAAU5a,GAAV,CACV,OAAsB,EAAtB,GAAI,IAAKxB,CAAAA,QAAT,CAAgC,CAAC8I,GAAjC,CAAuC,CAAvC,CACOA,GAN6B,CAUtCnJ,GAAGF,CAAAA,SAAU2c,CAAAA,IAAb;AAAoBC,QAAc,CAAC7a,GAAD,CAAM,CAEtC,GAAI,IAAKtB,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAA8B,MAAO,EACrC,IAAI,IAAKA,CAAAA,MAAT,CAAkBsB,GAAItB,CAAAA,MAAtB,CAA8B,MAAO,CAAC,CAGtC,KADA,IAAI4I,IAAM,CAAV,CACSzH,EAAI,IAAKnB,CAAAA,MAATmB,CAAkB,CAA3B,CAAmC,CAAnC,EAA8BA,CAA9B,CAAsCA,CAAA,EAAtC,CAA2C,CACzC,IAAIK,EAAI,IAAKzB,CAAAA,KAAL,CAAWoB,CAAX,CAAJK,CAAoB,CAAxB,CACIC,EAAIH,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAAJM,CAAmB,CAEvB,IAAID,CAAJ,GAAUC,CAAV,CAAA,CACID,CAAJ,CAAQC,CAAR,CACEmH,GADF,CACQ,CAAC,CADT,CAEWpH,CAFX,CAEeC,CAFf,GAGEmH,GAHF,CAGQ,CAHR,CAKA,MANA,CAJyC,CAY3C,MAAOA,IAlB+B,CAqBxCnJ,GAAGF,CAAAA,SAAUgE,CAAAA,GAAb,CAAmB6Y,QAAa,CAAC9a,GAAD,CAAM,CACpC,MAA0B,EAA1B,GAAO,IAAKga,CAAAA,IAAL,CAAUha,GAAV,CAD6B,CAItC7B,GAAGF,CAAAA,SAAU8c,CAAAA,EAAb,CAAkBC,QAAY,CAAChb,GAAD,CAAM,CAClC,MAAyB,EAAzB,GAAO,IAAKwD,CAAAA,GAAL,CAASxD,GAAT,CAD2B,CAIpC7B,GAAGF,CAAAA,SAAUgd,CAAAA,IAAb,CAAoBC,QAAc,CAAClb,GAAD,CAAM,CACtC,MAAyB,EAAzB,EAAO,IAAKga,CAAAA,IAAL,CAAUha,GAAV,CAD+B,CAIxC7B,GAAGF,CAAAA,SAAUkd,CAAAA,GAAb,CAAmBC,QAAa,CAACpb,GAAD,CAAM,CACpC,MAAwB,EAAxB,EAAO,IAAKwD,CAAAA,GAAL,CAASxD,GAAT,CAD6B,CAItC7B,GAAGF,CAAAA,SAAUod,CAAAA,GAAb,CAAmBC,QAAa,CAACtb,GAAD,CAAM,CACpC,MAA0B,CAAC,CAA3B,GAAO,IAAKga,CAAAA,IAAL,CAAUha,GAAV,CAD6B,CAItC7B;EAAGF,CAAAA,SAAUsd,CAAAA,EAAb,CAAkBC,QAAY,CAACxb,GAAD,CAAM,CAClC,MAAyB,CAAC,CAA1B,GAAO,IAAKwD,CAAAA,GAAL,CAASxD,GAAT,CAD2B,CAIpC7B,GAAGF,CAAAA,SAAUwd,CAAAA,IAAb,CAAoBC,QAAc,CAAC1b,GAAD,CAAM,CACtC,MAAyB,EAAzB,EAAO,IAAKga,CAAAA,IAAL,CAAUha,GAAV,CAD+B,CAIxC7B,GAAGF,CAAAA,SAAU0d,CAAAA,GAAb,CAAmBC,QAAa,CAAC5b,GAAD,CAAM,CACpC,MAAwB,EAAxB,EAAO,IAAKwD,CAAAA,GAAL,CAASxD,GAAT,CAD6B,CAItC7B,GAAGF,CAAAA,SAAU4d,CAAAA,GAAb,CAAmBC,QAAa,CAAC9b,GAAD,CAAM,CACpC,MAA0B,EAA1B,GAAO,IAAKga,CAAAA,IAAL,CAAUha,GAAV,CAD6B,CAItC7B,GAAGF,CAAAA,SAAU8d,CAAAA,EAAb,CAAkBC,QAAY,CAAChc,GAAD,CAAM,CAClC,MAAyB,EAAzB,GAAO,IAAKwD,CAAAA,GAAL,CAASxD,GAAT,CAD2B,CAQpC7B,GAAGQ,CAAAA,GAAH,CAASsd,QAAa,CAACjc,GAAD,CAAM,CAC1B,MAAO,KAAI6B,GAAJ,CAAQ7B,GAAR,CADmB,CAI5B7B,GAAGF,CAAAA,SAAUie,CAAAA,KAAb,CAAqBC,QAAe,CAACC,GAAD,CAAM,CACxC5e,MAAA,CAAO,CAAC,IAAKmB,CAAAA,GAAb,CAAkB,uCAAlB,CACAnB,OAAA,CAAyB,CAAzB,GAAO,IAAKgB,CAAAA,QAAZ,CAA4B,+BAA5B,CACA,OAAO4d,IAAIC,CAAAA,SAAJ,CAAc,IAAd,CAAoBC,CAAAA,SAApB,CAA8BF,GAA9B,CAHiC,CAM1Cje;EAAGF,CAAAA,SAAUse,CAAAA,OAAb,CAAuBC,QAAiB,EAAG,CACzChf,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,sDAAjB,CACA,OAAO,KAAKA,CAAAA,GAAI8d,CAAAA,WAAT,CAAqB,IAArB,CAFkC,CAK3Cte,GAAGF,CAAAA,SAAUqe,CAAAA,SAAb,CAAyBI,QAAmB,CAACN,GAAD,CAAM,CAChD,IAAKzd,CAAAA,GAAL,CAAWyd,GACX,OAAO,KAFyC,CAKlDje,GAAGF,CAAAA,SAAU0e,CAAAA,QAAb,CAAwBC,QAAkB,CAACR,GAAD,CAAM,CAC9C5e,MAAA,CAAO,CAAC,IAAKmB,CAAAA,GAAb,CAAkB,uCAAlB,CACA,OAAO,KAAK2d,CAAAA,SAAL,CAAeF,GAAf,CAFuC,CAKhDje,GAAGF,CAAAA,SAAU4e,CAAAA,MAAb,CAAsBC,QAAgB,CAAC9c,GAAD,CAAM,CAC1CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,OAAO,KAAKA,CAAAA,GAAI4M,CAAAA,GAAT,CAAa,IAAb,CAAmBvL,GAAnB,CAFmC,CAK5C7B,GAAGF,CAAAA,SAAU8e,CAAAA,OAAb,CAAuBC,QAAiB,CAAChd,GAAD,CAAM,CAC5CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,qCAAjB,CACA;MAAO,KAAKA,CAAAA,GAAI0M,CAAAA,IAAT,CAAc,IAAd,CAAoBrL,GAApB,CAFqC,CAK9C7B,GAAGF,CAAAA,SAAUgf,CAAAA,MAAb,CAAsBC,QAAgB,CAACld,GAAD,CAAM,CAC1CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,OAAO,KAAKA,CAAAA,GAAIkE,CAAAA,GAAT,CAAa,IAAb,CAAmB7C,GAAnB,CAFmC,CAK5C7B,GAAGF,CAAAA,SAAUkf,CAAAA,OAAb,CAAuBC,QAAiB,CAACpd,GAAD,CAAM,CAC5CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,qCAAjB,CACA,OAAO,KAAKA,CAAAA,GAAI0C,CAAAA,IAAT,CAAc,IAAd,CAAoBrB,GAApB,CAFqC,CAK9C7B,GAAGF,CAAAA,SAAUof,CAAAA,MAAb,CAAsBC,QAAgB,CAACtd,GAAD,CAAM,CAC1CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,OAAO,KAAKA,CAAAA,GAAI4e,CAAAA,GAAT,CAAa,IAAb,CAAmBvd,GAAnB,CAFmC,CAK5C7B,GAAGF,CAAAA,SAAUuf,CAAAA,MAAb,CAAsBC,QAAgB,CAACzd,GAAD,CAAM,CAC1CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,KAAKA,CAAAA,GAAI+e,CAAAA,QAAT,CAAkB,IAAlB;AAAwB1d,GAAxB,CACA,OAAO,KAAKrB,CAAAA,GAAIc,CAAAA,GAAT,CAAa,IAAb,CAAmBO,GAAnB,CAHmC,CAM5C7B,GAAGF,CAAAA,SAAU0f,CAAAA,OAAb,CAAuBC,QAAiB,CAAC5d,GAAD,CAAM,CAC5CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,KAAKA,CAAAA,GAAI+e,CAAAA,QAAT,CAAkB,IAAlB,CAAwB1d,GAAxB,CACA,OAAO,KAAKrB,CAAAA,GAAI+Q,CAAAA,IAAT,CAAc,IAAd,CAAoB1P,GAApB,CAHqC,CAM9C7B,GAAGF,CAAAA,SAAU4f,CAAAA,MAAb,CAAsBC,QAAgB,EAAG,CACvCtgB,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,KAAKA,CAAAA,GAAIof,CAAAA,QAAT,CAAkB,IAAlB,CACA,OAAO,KAAKpf,CAAAA,GAAI2D,CAAAA,GAAT,CAAa,IAAb,CAHgC,CAMzCnE,GAAGF,CAAAA,SAAU+f,CAAAA,OAAb,CAAuBC,QAAiB,EAAG,CACzCzgB,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,qCAAjB,CACA,KAAKA,CAAAA,GAAIof,CAAAA,QAAT,CAAkB,IAAlB,CACA,OAAO,KAAKpf,CAAAA,GAAIoW,CAAAA,IAAT,CAAc,IAAd,CAHkC,CAO3C5W,GAAGF,CAAAA,SAAUigB,CAAAA,OAAb,CAAuBC,QAAiB,EAAG,CACzC3gB,MAAA,CAAO,IAAKmB,CAAAA,GAAZ;AAAiB,qCAAjB,CACA,KAAKA,CAAAA,GAAIof,CAAAA,QAAT,CAAkB,IAAlB,CACA,OAAO,KAAKpf,CAAAA,GAAIyf,CAAAA,IAAT,CAAc,IAAd,CAHkC,CAM3CjgB,GAAGF,CAAAA,SAAUogB,CAAAA,OAAb,CAAuBC,QAAiB,EAAG,CACzC9gB,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,qCAAjB,CACA,KAAKA,CAAAA,GAAIof,CAAAA,QAAT,CAAkB,IAAlB,CACA,OAAO,KAAKpf,CAAAA,GAAIub,CAAAA,IAAT,CAAc,IAAd,CAHkC,CAO3C/b,GAAGF,CAAAA,SAAUsgB,CAAAA,MAAb,CAAsBC,QAAgB,EAAG,CACvChhB,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,CAAiB,oCAAjB,CACA,KAAKA,CAAAA,GAAIof,CAAAA,QAAT,CAAkB,IAAlB,CACA,OAAO,KAAKpf,CAAAA,GAAIuK,CAAAA,GAAT,CAAa,IAAb,CAHgC,CAMzC/K,GAAGF,CAAAA,SAAUwgB,CAAAA,MAAb,CAAsBC,QAAgB,CAAC1e,GAAD,CAAM,CAC1CxC,MAAA,CAAO,IAAKmB,CAAAA,GAAZ,EAAmB,CAACqB,GAAIrB,CAAAA,GAAxB,CAA6B,mBAA7B,CACA,KAAKA,CAAAA,GAAIof,CAAAA,QAAT,CAAkB,IAAlB,CACA,OAAO,KAAKpf,CAAAA,GAAIqG,CAAAA,GAAT,CAAa,IAAb,CAAmBhF,GAAnB,CAHmC,CAO5C;IAAI2e,OAAS,CACXC,KAAM,IADK,CAEXC,KAAM,IAFK,CAGXC,KAAM,IAHK,CAIXC,OAAQ,IAJG,CAkBbhe,OAAO9C,CAAAA,SAAUsD,CAAAA,IAAjB,CAAwByd,QAAc,EAAG,CACvC,IAAI1d,IAAM,IAAInD,EAAJ,CAAO,IAAP,CACVmD,IAAI7C,CAAAA,KAAJ,CAAgB0E,KAAJ,CAAUxD,IAAKyE,CAAAA,IAAL,CAAU,IAAKlD,CAAAA,CAAf,CAAmB,EAAnB,CAAV,CACZ,OAAOI,IAHgC,CAMzCP,OAAO9C,CAAAA,SAAUghB,CAAAA,OAAjB,CAA2BC,QAAiB,CAAClf,GAAD,CAAM,CAMhD,EAAG,CACD,IAAKmf,CAAAA,KAAL,CAAW/f,GAAX,CAAc,IAAKkC,CAAAA,GAAnB,CACAlC,IAAA,CAAI,IAAKggB,CAAAA,KAAL,CAAWhgB,GAAX,CACJA,IAAA,CAAIA,GAAEiM,CAAAA,IAAF,CAAO,IAAK/J,CAAAA,GAAZ,CACJ,KAAA+d,KAAOjgB,GAAE+B,CAAAA,SAAF,EAJN,CAAH,MAKSke,IALT,CAKgB,IAAKne,CAAAA,CALrB,CAOIsC,KAAAA,CAAM6b,IAAA,CAAO,IAAKne,CAAAA,CAAZ,CAAgB,CAAC,CAAjB,CAAqB9B,GAAEwb,CAAAA,IAAF,CAAO,IAAK3Z,CAAAA,CAAZ,CACnB,EAAZ,GAAIuC,IAAJ,EACEpE,GAAEX,CAAAA,KAAF,CAAQ,CAAR,CACA,CADa,CACb,CAAAW,GAAEV,CAAAA,MAAF,CAAW,CAFb,EAGiB,CAAV,CAAI8E,IAAJ,CACLpE,GAAEiC,CAAAA,IAAF,CAAO,IAAKJ,CAAAA,CAAZ,CADK,CAGWqe,IAAAA,EAAhB,GAAIlgB,GAAEuB,CAAAA,KAAN,CAEEvB,GAAEuB,CAAAA,KAAF,EAFF,CAKEvB,GAAEmgB,CAAAA,MAAF,EAIJ,OAAOngB,IA7ByC,CAgClD2B,OAAO9C,CAAAA,SAAUkhB,CAAAA,KAAjB,CAAyBK,QAAe,CAACC,KAAD;AAAQxf,GAAR,CAAa,CACnDwf,KAAMhY,CAAAA,MAAN,CAAa,IAAKvG,CAAAA,CAAlB,CAAqB,CAArB,CAAwBjB,GAAxB,CADmD,CAIrDc,OAAO9C,CAAAA,SAAUmhB,CAAAA,KAAjB,CAAyBM,QAAe,CAAC1f,GAAD,CAAM,CAC5C,MAAOA,IAAI0P,CAAAA,IAAJ,CAAS,IAAKrP,CAAAA,CAAd,CADqC,CAU9CzC,SAAA,CAAS4D,IAAT,CAAeT,MAAf,CAEAS,KAAKvD,CAAAA,SAAUkhB,CAAAA,KAAf,CAAuBQ,QAAe,CAACF,KAAD,CAAQG,MAAR,CAAgB,CAKpD,IADA,IAAIC,OAASlgB,IAAKC,CAAAA,GAAL,CAAS6f,KAAM/gB,CAAAA,MAAf,CAAuB,CAAvB,CAAb,CACSmB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBggB,MAApB,CAA4BhgB,CAAA,EAA5B,CACE+f,MAAOnhB,CAAAA,KAAP,CAAaoB,CAAb,CAAA,CAAkB4f,KAAMhhB,CAAAA,KAAN,CAAYoB,CAAZ,CAEpB+f,OAAOlhB,CAAAA,MAAP,CAAgBmhB,MAEhB,IAAoB,CAApB,EAAIJ,KAAM/gB,CAAAA,MAAV,CACE+gB,KAAMhhB,CAAAA,KAAN,CAAY,CAAZ,CACA,CADiB,CACjB,CAAAghB,KAAM/gB,CAAAA,MAAN,CAAe,CAFjB,KAAA,CAOIohB,MAAAA,CAAOL,KAAMhhB,CAAAA,KAAN,CAAY,CAAZ,CACXmhB,OAAOnhB,CAAAA,KAAP,CAAamhB,MAAOlhB,CAAAA,MAAP,EAAb,CAAA,CAAgCohB,MAAhC,CAhBWnK,OAkBX,KAAK9V,CAAL,CAAS,EAAT,CAAaA,CAAb,CAAiB4f,KAAM/gB,CAAAA,MAAvB,CAA+BmB,CAAA,EAA/B,CACMkgB,MAEJ,CAFWN,KAAMhhB,CAAAA,KAAN,CAAYoB,CAAZ,CAEX,CAF4B,CAE5B,CADA4f,KAAMhhB,CAAAA,KAAN,CAAYoB,CAAZ,CAAgB,EAAhB,CACA,EADwBkgB,MACxB,CArBSpK,OAqBT,GADwC,CACxC,CAD8CmK,MAC9C,GADuD,EACvD,CAAAA,MAAA;AAAOC,MAETD,OAAA,IAAU,EACVL,MAAMhhB,CAAAA,KAAN,CAAYoB,CAAZ,CAAgB,EAAhB,CAAA,CAAsBigB,MAEpBL,MAAM/gB,CAAAA,MAAN,CADW,CAAb,GAAIohB,MAAJ,EAAiC,EAAjC,CAAkBL,KAAM/gB,CAAAA,MAAxB,CACE+gB,KAAM/gB,CAAAA,MADR,CACkB,EADlB,CAGE+gB,KAAM/gB,CAAAA,MAHR,CAGkB,CApBlB,CAVoD,CAkCtD8C,KAAKvD,CAAAA,SAAUmhB,CAAAA,KAAf,CAAuBY,QAAe,CAAChgB,GAAD,CAAM,CAE1CA,GAAIvB,CAAAA,KAAJ,CAAUuB,GAAItB,CAAAA,MAAd,CAAA,CAAwB,CACxBsB,IAAIvB,CAAAA,KAAJ,CAAUuB,GAAItB,CAAAA,MAAd,CAAuB,CAAvB,CAAA,CAA4B,CAC5BsB,IAAItB,CAAAA,MAAJ,EAAc,CAId,KADA,IAAI+Q,GAAK,CAAT,CACS5P,EAAI,CAAb,CAAgBA,CAAhB,CAAoBG,GAAItB,CAAAA,MAAxB,CAAgCmB,CAAA,EAAhC,CAAqC,CACnC,IAAIyE,EAAItE,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAAJyE,CAAmB,CACvBmL,GAAA,EAAU,GAAV,CAAMnL,CACNtE,IAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAAA,CAAe4P,EAAf,CAAoB,QACpBA,GAAA,CAAS,EAAT,CAAKnL,CAAL,EAAkBmL,EAAlB,CAAuB,QAAvB,CAAoC,CAApC,CAJmC,CAQH,CAAlC,GAAIzP,GAAIvB,CAAAA,KAAJ,CAAUuB,GAAItB,CAAAA,MAAd,CAAuB,CAAvB,CAAJ,GACEsB,GAAItB,CAAAA,MAAJ,EACA,CAAkC,CAAlC,GAAIsB,GAAIvB,CAAAA,KAAJ,CAAUuB,GAAItB,CAAAA,MAAd,CAAuB,CAAvB,CAAJ,EACEsB,GAAItB,CAAAA,MAAJ,EAHJ,CAMA,OAAOsB,IAtBmC,CA+B5CpC,SAAA,CAAS8D,IAAT,CAAeX,MAAf,CAQAnD,SAAA,CAAS+D,IAAT,CAAeZ,MAAf,CASAnD,SAAA,CAASgE,MAAT,CAAiBb,MAAjB,CAEAa,OAAO3D,CAAAA,SAAUmhB,CAAAA,KAAjB;AAAyBa,QAAe,CAACjgB,GAAD,CAAM,CAG5C,IADA,IAAII,MAAQ,CAAZ,CACSP,EAAI,CAAb,CAAgBA,CAAhB,CAAoBG,GAAItB,CAAAA,MAAxB,CAAgCmB,CAAA,EAAhC,CAAqC,CAC/BoI,KAAAA,CAA0B,EAA1BA,EAAMjI,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAANoI,CAAqB,CAArBA,EAAiC7H,KACrC,KAAIqP,GAAKxH,KAALwH,CAAU,QACdxH,MAAA,IAAQ,EAERjI,IAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CAAA,CAAe4P,EALoB,CAQvB,CAAd,GAAIrP,KAAJ,GACEJ,GAAIvB,CAAAA,KAAJ,CAAUuB,GAAItB,CAAAA,MAAJ,EAAV,CADF,CAC4B0B,KAD5B,CAGA,OAAOJ,IAdqC,CAkB9C7B,GAAG6D,CAAAA,MAAH,CAAYke,QAAe,CAAClf,IAAD,CAAO,CAEhC,GAAI2d,MAAA,CAAO3d,IAAP,CAAJ,CAAkB,MAAO2d,OAAA,CAAO3d,IAAP,CAGzB,IAAa,MAAb,GAAIA,IAAJ,CACE,IAAAe,MAAQ,IAAIP,IADd,KAEO,IAAa,MAAb,GAAIR,IAAJ,CACLe,KAAA,CAAQ,IAAIL,IADP,KAEA,IAAa,MAAb,GAAIV,IAAJ,CACLe,KAAA,CAAQ,IAAIJ,IADP,KAEA,IAAa,QAAb,GAAIX,IAAJ,CACLe,KAAA,CAAQ,IAAIH,MADP,KAGL,MAAUjE,MAAJ,CAAU,gBAAV,CAA6BqD,IAA7B,CAAN,CAIF,MAFA2d,OAAA,CAAO3d,IAAP,CAEA,CAFee,KAhBiB,CAoClCF,IAAI5D,CAAAA,SAAU8f,CAAAA,QAAd,CAAyBoC,QAAkB,CAACjgB,CAAD,CAAI,CAC7C1C,MAAA,CAAsB,CAAtB;AAAO0C,CAAE1B,CAAAA,QAAT,CAAyB,+BAAzB,CACAhB,OAAA,CAAO0C,CAAEvB,CAAAA,GAAT,CAAc,iCAAd,CAF6C,CAK/CkD,IAAI5D,CAAAA,SAAUyf,CAAAA,QAAd,CAAyB0C,QAAkB,CAAClgB,CAAD,CAAIC,CAAJ,CAAO,CAChD3C,MAAA,CAAqC,CAArC,IAAQ0C,CAAE1B,CAAAA,QAAV,CAAqB2B,CAAE3B,CAAAA,QAAvB,EAAwC,+BAAxC,CACAhB,OAAA,CAAO0C,CAAEvB,CAAAA,GAAT,EAAgBuB,CAAEvB,CAAAA,GAAlB,GAA0BwB,CAAExB,CAAAA,GAA5B,CACE,iCADF,CAFgD,CAMlDkD,IAAI5D,CAAAA,SAAUoE,CAAAA,IAAd,CAAqBge,QAAc,CAACngB,CAAD,CAAI,CACrC,MAAI,KAAK6B,CAAAA,KAAT,CAAuB,IAAKA,CAAAA,KAAMkd,CAAAA,OAAX,CAAmB/e,CAAnB,CAAsBoc,CAAAA,SAAtB,CAAgC,IAAhC,CAAvB,CACOpc,CAAE0C,CAAAA,IAAF,CAAO,IAAKd,CAAAA,CAAZ,CAAewa,CAAAA,SAAf,CAAyB,IAAzB,CAF8B,CAKvCza,IAAI5D,CAAAA,SAAUiL,CAAAA,GAAd,CAAoBoX,QAAa,CAACpgB,CAAD,CAAI,CACnC,MAAIA,EAAEmG,CAAAA,MAAF,EAAJ,CACSnG,CAAEkF,CAAAA,KAAF,EADT,CAIO,IAAKtD,CAAAA,CAAEe,CAAAA,GAAP,CAAW3C,CAAX,CAAcoc,CAAAA,SAAd,CAAwB,IAAxB,CAL4B,CAQrCza,IAAI5D,CAAAA,SAAUsN,CAAAA,GAAd,CAAoBgV,QAAa,CAACrgB,CAAD,CAAIC,CAAJ,CAAO,CACtC,IAAKud,CAAAA,QAAL,CAAcxd,CAAd;AAAiBC,CAAjB,CAEImH,EAAAA,CAAMpH,CAAEqL,CAAAA,GAAF,CAAMpL,CAAN,CACa,EAAvB,EAAImH,CAAI9D,CAAAA,GAAJ,CAAQ,IAAK1B,CAAAA,CAAb,CAAJ,EACEwF,CAAIjG,CAAAA,IAAJ,CAAS,IAAKS,CAAAA,CAAd,CAEF,OAAOwF,EAAIgV,CAAAA,SAAJ,CAAc,IAAd,CAP+B,CAUxCza,IAAI5D,CAAAA,SAAUoN,CAAAA,IAAd,CAAqBmV,QAAc,CAACtgB,CAAD,CAAIC,CAAJ,CAAO,CACxC,IAAKud,CAAAA,QAAL,CAAcxd,CAAd,CAAiBC,CAAjB,CAEImH,EAAAA,CAAMpH,CAAEmL,CAAAA,IAAF,CAAOlL,CAAP,CACa,EAAvB,EAAImH,CAAI9D,CAAAA,GAAJ,CAAQ,IAAK1B,CAAAA,CAAb,CAAJ,EACEwF,CAAIjG,CAAAA,IAAJ,CAAS,IAAKS,CAAAA,CAAd,CAEF,OAAOwF,EAPiC,CAU1CzF,IAAI5D,CAAAA,SAAU4E,CAAAA,GAAd,CAAoB4d,QAAa,CAACvgB,CAAD,CAAIC,CAAJ,CAAO,CACtC,IAAKud,CAAAA,QAAL,CAAcxd,CAAd,CAAiBC,CAAjB,CAEImH,EAAAA,CAAMpH,CAAE2C,CAAAA,GAAF,CAAM1C,CAAN,CACQ,EAAlB,CAAImH,CAAI0S,CAAAA,IAAJ,CAAS,CAAT,CAAJ,EACE1S,CAAI+D,CAAAA,IAAJ,CAAS,IAAKvJ,CAAAA,CAAd,CAEF,OAAOwF,EAAIgV,CAAAA,SAAJ,CAAc,IAAd,CAP+B,CAUxCza,IAAI5D,CAAAA,SAAUoD,CAAAA,IAAd,CAAqBqf,QAAc,CAACxgB,CAAD,CAAIC,CAAJ,CAAO,CACxC,IAAKud,CAAAA,QAAL,CAAcxd,CAAd,CAAiBC,CAAjB,CAEImH,EAAAA,CAAMpH,CAAEmB,CAAAA,IAAF,CAAOlB,CAAP,CACQ,EAAlB,CAAImH,CAAI0S,CAAAA,IAAJ,CAAS,CAAT,CAAJ,EACE1S,CAAI+D,CAAAA,IAAJ,CAAS,IAAKvJ,CAAAA,CAAd,CAEF,OAAOwF,EAPiC,CAU1CzF,IAAI5D,CAAAA,SAAUsf,CAAAA,GAAd,CAAoBoD,QAAa,CAACzgB,CAAD,CAAIF,GAAJ,CAAS,CACxC,IAAK+d,CAAAA,QAAL,CAAc7d,CAAd,CACA,OAAO,KAAKmC,CAAAA,IAAL,CAAUnC,CAAE+V,CAAAA,KAAF,CAAQjW,GAAR,CAAV,CAFiC,CAK1C6B,IAAI5D,CAAAA,SAAUyR,CAAAA,IAAd,CAAqBkR,QAAc,CAAC1gB,CAAD;AAAIC,CAAJ,CAAO,CACxC,IAAKud,CAAAA,QAAL,CAAcxd,CAAd,CAAiBC,CAAjB,CACA,OAAO,KAAKkC,CAAAA,IAAL,CAAUnC,CAAEwP,CAAAA,IAAF,CAAOvP,CAAP,CAAV,CAFiC,CAK1C0B,IAAI5D,CAAAA,SAAUwB,CAAAA,GAAd,CAAoBohB,QAAa,CAAC3gB,CAAD,CAAIC,CAAJ,CAAO,CACtC,IAAKud,CAAAA,QAAL,CAAcxd,CAAd,CAAiBC,CAAjB,CACA,OAAO,KAAKkC,CAAAA,IAAL,CAAUnC,CAAET,CAAAA,GAAF,CAAMU,CAAN,CAAV,CAF+B,CAKxC0B,IAAI5D,CAAAA,SAAU8W,CAAAA,IAAd,CAAqB+L,QAAc,CAAC5gB,CAAD,CAAI,CACrC,MAAO,KAAKwP,CAAAA,IAAL,CAAUxP,CAAV,CAAaA,CAAEkF,CAAAA,KAAF,EAAb,CAD8B,CAIvCvD,IAAI5D,CAAAA,SAAUqE,CAAAA,GAAd,CAAoBye,QAAa,CAAC7gB,CAAD,CAAI,CACnC,MAAO,KAAKT,CAAAA,GAAL,CAASS,CAAT,CAAYA,CAAZ,CAD4B,CAIrC2B,IAAI5D,CAAAA,SAAUmgB,CAAAA,IAAd,CAAqB4C,QAAc,CAAC9gB,CAAD,CAAI,CACrC,GAAIA,CAAEmG,CAAAA,MAAF,EAAJ,CAAgB,MAAOnG,EAAEkF,CAAAA,KAAF,EAEvB,KAAI6b,KAAO,IAAKnf,CAAAA,CAAE0F,CAAAA,KAAP,CAAa,CAAb,CACXhK,OAAA,CAAoB,CAApB,GAAOyjB,IAAP,CAAc,CAAd,CAGA,IAAa,CAAb,GAAIA,IAAJ,CAEE,MADIjc,KACG,CADG,IAAKlD,CAAAA,CAAEyJ,CAAAA,GAAP,CAAW,IAAIpN,EAAJ,CAAO,CAAP,CAAX,CAAsBsJ,CAAAA,MAAtB,CAA6B,CAA7B,CACH,CAAA,IAAKzC,CAAAA,GAAL,CAAS9E,CAAT,CAAY8E,IAAZ,CAQT,KAFA,IAAIuC,EAAI,IAAKzF,CAAAA,CAAEmV,CAAAA,IAAP,CAAY,CAAZ,CAAR,CACI7E,EAAI,CACR,CAAO,CAAC7K,CAAElB,CAAAA,MAAF,EAAR,EAAqC,CAArC,GAAsBkB,CAAEC,CAAAA,KAAF,CAAQ,CAAR,CAAtB,CAAA,CACE4K,CAAA,EACA,CAAA7K,CAAEE,CAAAA,MAAF,CAAS,CAAT,CAEFjK,OAAA,CAAO,CAAC+J,CAAElB,CAAAA,MAAF,EAAR,CAEI6a;IAAAA,CAAgBhF,CAAV,IAAI/d,EAAJ,CAAO,CAAP,CAAU+d,EAAAA,KAAV,CAAgB,IAAhB,CACV,KAAIiF,KAAOD,IAAI3C,CAAAA,MAAJ,EAAX,CAII6C,KAAO,IAAKtf,CAAAA,CAAEmV,CAAAA,IAAP,CAAY,CAAZ,CAAexP,CAAAA,MAAf,CAAsB,CAAtB,CAJX,CAKI4Z,EAAI,IAAKvf,CAAAA,CAAEX,CAAAA,SAAP,EAGR,KAFAkgB,CAEA,CAFsBnF,CAAlB,IAAI/d,EAAJ,CAAO,CAAP,CAAWkjB,CAAX,CAAeA,CAAf,CAAkBnF,EAAAA,KAAlB,CAAwB,IAAxB,CAEJ,CAAuC,CAAvC,GAAO,IAAKlX,CAAAA,GAAL,CAASqc,CAAT,CAAYD,IAAZ,CAAkB5d,CAAAA,GAAlB,CAAsB2d,IAAtB,CAAP,CAAA,CACEE,CAAEtE,CAAAA,OAAF,CAAUoE,IAAV,CAGEniB,KAAAA,CAAI,IAAKgG,CAAAA,GAAL,CAASqc,CAAT,CAAY9Z,CAAZ,CACJnI,KAAAA,CAAI,IAAK4F,CAAAA,GAAL,CAAS9E,CAAT,CAAYqH,CAAEwP,CAAAA,IAAF,CAAO,CAAP,CAAUtP,CAAAA,MAAV,CAAiB,CAAjB,CAAZ,CACJI,EAAAA,CAAI,IAAK7C,CAAAA,GAAL,CAAS9E,CAAT,CAAYqH,CAAZ,CAER,KADIzF,CACJ,CADQsQ,CACR,CAAsB,CAAtB,GAAOvK,CAAErE,CAAAA,GAAF,CAAM0d,IAAN,CAAP,CAAA,CAAyB,CACnB5f,CAAAA,CAAMuG,CACV,KAAShI,CAAT,CAAa,CAAb,CAAiC,CAAjC,GAAgByB,CAAIkC,CAAAA,GAAJ,CAAQ0d,IAAR,CAAhB,CAAoCrhB,CAAA,EAApC,CACEyB,CAAA,CAAMA,CAAIuc,CAAAA,MAAJ,EAERrgB,OAAA,CAAOqC,CAAP,CAAWiC,CAAX,CACI3B,KAAAA,CAAI,IAAK6E,CAAAA,GAAL,CAAShG,IAAT,CAAsBoC,CAAV,IAAIjD,EAAJ,CAAO,CAAP,CAAUiD,EAAAA,MAAV,CAAiBU,CAAjB,CAAqBjC,CAArB,CAAyB,CAAzB,CAAZ,CAERT,KAAA,CAAIA,IAAEoe,CAAAA,MAAF,CAASrd,IAAT,CACJnB,KAAA,CAAImB,IAAE0d,CAAAA,MAAF,EACJhW,EAAA,CAAIA,CAAE2V,CAAAA,MAAF,CAASxe,IAAT,CACJ8C,EAAA,CAAIjC,CAXmB,CAczB,MAAOT,KAtD8B,CAyDvCyC,IAAI5D,CAAAA,SAAUic,CAAAA,IAAd,CAAqBoH,QAAc,CAACphB,CAAD,CAAI,CACjCqhB,CAAAA,CAAMrhB,CAAEsC,CAAAA,MAAF,CAAS,IAAKV,CAAAA,CAAd,CACV;MAAqB,EAArB,GAAIyf,CAAI/iB,CAAAA,QAAR,EACE+iB,CAAI/iB,CAAAA,QACG,CADQ,CACR,CAAA,IAAK6D,CAAAA,IAAL,CAAUkf,CAAV,CAAehD,CAAAA,MAAf,EAFT,EAIS,IAAKlc,CAAAA,IAAL,CAAUkf,CAAV,CAN4B,CAUvC1f,IAAI5D,CAAAA,SAAU+G,CAAAA,GAAd,CAAoBwc,QAAa,CAACthB,CAAD,CAAIF,GAAJ,CAAS,CACxC,GAAIA,GAAIqG,CAAAA,MAAJ,EAAJ,CAAkB,MAAiB6V,CAAV,IAAI/d,EAAJ,CAAO,CAAP,CAAU+d,EAAAA,KAAV,CAAgB,IAAhB,CACzB,IAAoB,CAApB,GAAIlc,GAAIga,CAAAA,IAAJ,CAAS,CAAT,CAAJ,CAAuB,MAAO9Z,EAAEkF,CAAAA,KAAF,EAG9B,KAAIqc,IAAUte,KAAJ,CAAU,EAAV,CACVse,IAAA,CAAI,CAAJ,CAAA,CAAmBvF,CAAV,IAAI/d,EAAJ,CAAO,CAAP,CAAU+d,EAAAA,KAAV,CAAgB,IAAhB,CACTuF,IAAA,CAAI,CAAJ,CAAA,CAASvhB,CACT,KAAK,IAAIL,EAAI,CAAb,CAAgBA,CAAhB,CAAoB4hB,GAAI/iB,CAAAA,MAAxB,CAAgCmB,CAAA,EAAhC,CACE4hB,GAAA,CAAI5hB,CAAJ,CAAA,CAAS,IAAKJ,CAAAA,GAAL,CAASgiB,GAAA,CAAI5hB,CAAJ,CAAQ,CAAR,CAAT,CAAqBK,CAArB,CAGPoH,EAAAA,CAAMma,GAAA,CAAI,CAAJ,CACV,KAAIC,QAAU,CAAd,CACIC,WAAa,CADjB,CAEIpiB,MAAQS,GAAImB,CAAAA,SAAJ,EAAR5B,CAA0B,EAChB,EAAd,GAAIA,KAAJ,GACEA,KADF,CACU,EADV,CAIA,KAAKM,CAAL,CAASG,GAAItB,CAAAA,MAAb,CAAsB,CAAtB,CAA8B,CAA9B,EAAyBmB,CAAzB,CAAiCA,CAAA,EAAjC,CAAsC,CACpC,IAAIgF,KAAO7E,GAAIvB,CAAAA,KAAJ,CAAUoB,CAAV,CACX,KAAaY,EAAAlB,KAAb,CAA6B,CAA7B,EAAwBkB,KAAxB,CAAgCA,KAAA,EAAhC,CAAqC,CACnC,IAAI0K,IAAOtG,IAAPsG,EAAe1K,KAAf0K,CAAoB,CACpB7D,EAAJ,GAAYma,GAAA,CAAI,CAAJ,CAAZ;CACEna,CADF,CACQ,IAAKhF,CAAAA,GAAL,CAASgF,CAAT,CADR,CAIA,IAAY,CAAZ,GAAI6D,GAAJ,EAA6B,CAA7B,GAAiBuW,OAAjB,CACEC,UAAA,CAAa,CADf,KAQA,IAHAD,OAGI,GAHQ,CAGR,CAFJA,OAEI,EAFOvW,GAEP,CADJwW,UAAA,EACI,CAhCSC,CAgCT,GAAAD,UAAA,EAAoC,CAApC,GAA8B9hB,CAA9B,EAA+C,CAA/C,GAAyCY,KAA7C,CAEA6G,CAEA,CAFM,IAAK7H,CAAAA,GAAL,CAAS6H,CAAT,CAAcma,GAAA,CAAIC,OAAJ,CAAd,CAEN,CAAAA,OAAA,CADAC,UACA,CADa,CAjBsB,CAoBrCpiB,KAAA,CAAQ,EAtB4B,CAyBtC,MAAO+H,EA7CiC,CAgD1CzF,IAAI5D,CAAAA,SAAUoe,CAAAA,SAAd,CAA0BwF,QAAmB,CAAC7hB,GAAD,CAAM,CACjD,IAAIZ,EAAIY,GAAI4C,CAAAA,IAAJ,CAAS,IAAKd,CAAAA,CAAd,CAER,OAAO1C,EAAA,GAAMY,GAAN,CAAYZ,CAAEgG,CAAAA,KAAF,EAAZ,CAAwBhG,CAHkB,CAMnDyC,IAAI5D,CAAAA,SAAUwe,CAAAA,WAAd,CAA4BqF,QAAqB,CAAC9hB,GAAD,CAAM,CACjDsH,GAAAA,CAAMtH,GAAIoF,CAAAA,KAAJ,EACVkC,IAAI3I,CAAAA,GAAJ,CAAU,IACV,OAAO2I,IAH8C,CAUvDnJ,GAAG4jB,CAAAA,IAAH,CAAUC,QAAc,CAAChiB,GAAD,CAAM,CAC5B,MAAO,KAAIkC,IAAJ,CAASlC,GAAT,CADqB,CAoB9BpC,SAAA,CAASsE,IAAT,CAAeL,GAAf,CAEAK,KAAKjE,CAAAA,SAAUoe,CAAAA,SAAf,CAA2B4F,QAAmB,CAACjiB,GAAD,CAAM,CAClD,MAAO,KAAKqC,CAAAA,IAAL,CAAUrC,GAAIiW,CAAAA,KAAJ,CAAU,IAAK9T,CAAAA,KAAf,CAAV,CAD2C,CAIpDD;IAAKjE,CAAAA,SAAUwe,CAAAA,WAAf,CAA6ByF,QAAqB,CAACliB,GAAD,CAAM,CAClDZ,GAAAA,CAAI,IAAKiD,CAAAA,IAAL,CAAUrC,GAAIP,CAAAA,GAAJ,CAAQ,IAAK8C,CAAAA,IAAb,CAAV,CACRnD,IAAET,CAAAA,GAAF,CAAQ,IACR,OAAOS,IAH+C,CAMxD8C,KAAKjE,CAAAA,SAAUyR,CAAAA,IAAf,CAAsByS,QAAc,CAACjiB,CAAD,CAAIC,CAAJ,CAAO,CACzC,GAAID,CAAEmG,CAAAA,MAAF,EAAJ,EAAkBlG,CAAEkG,CAAAA,MAAF,EAAlB,CAGE,MAFAnG,EAAEzB,CAAAA,KAAF,CAAQ,CAAR,CAEOyB,CAFM,CAENA,CADPA,CAAExB,CAAAA,MACKwB,CADI,CACJA,CAAAA,CAGL2H,EAAAA,CAAI3H,CAAEwP,CAAAA,IAAF,CAAOvP,CAAP,CACJnB,EAAAA,CAAI6I,CAAE6O,CAAAA,KAAF,CAAQ,IAAKvU,CAAAA,KAAb,CAAoB1C,CAAAA,GAApB,CAAwB,IAAKgD,CAAAA,IAA7B,CAAmC+T,CAAAA,MAAnC,CAA0C,IAAKrU,CAAAA,KAA/C,CAAsD1C,CAAAA,GAAtD,CAA0D,IAAKqC,CAAAA,CAA/D,CAEJwF,EAAAA,CADA8a,CACA9a,CADIO,CAAExG,CAAAA,IAAF,CAAOrC,CAAP,CAAUyI,CAAAA,MAAV,CAAiB,IAAKtF,CAAAA,KAAtB,CAGa,EAArB,EAAIigB,CAAE5e,CAAAA,GAAF,CAAM,IAAK1B,CAAAA,CAAX,CAAJ,CACEwF,CADF,CACQ8a,CAAE/gB,CAAAA,IAAF,CAAO,IAAKS,CAAAA,CAAZ,CADR,CAEuB,CAFvB,CAEWsgB,CAAEpI,CAAAA,IAAF,CAAO,CAAP,CAFX,GAGE1S,CAHF,CAGQ8a,CAAE/W,CAAAA,IAAF,CAAO,IAAKvJ,CAAAA,CAAZ,CAHR,CAMA,OAAOwF,EAAIgV,CAAAA,SAAJ,CAAc,IAAd,CAlBkC,CAqB3Cpa,KAAKjE,CAAAA,SAAUwB,CAAAA,GAAf,CAAqB4iB,QAAa,CAACniB,CAAD,CAAIC,CAAJ,CAAO,CACvC,GAAID,CAAEmG,CAAAA,MAAF,EAAJ,EAAkBlG,CAAEkG,CAAAA,MAAF,EAAlB,CAA8B,MAAiBiW,CAAV,IAAIne,EAAJ,CAAO,CAAP,CAAUme,EAAAA,SAAV,CAAoB,IAApB,CAEjCzU,EAAAA,CAAI3H,CAAET,CAAAA,GAAF,CAAMU,CAAN,CACJnB;CAAAA,CAAI6I,CAAE6O,CAAAA,KAAF,CAAQ,IAAKvU,CAAAA,KAAb,CAAoB1C,CAAAA,GAApB,CAAwB,IAAKgD,CAAAA,IAA7B,CAAmC+T,CAAAA,MAAnC,CAA0C,IAAKrU,CAAAA,KAA/C,CAAsD1C,CAAAA,GAAtD,CAA0D,IAAKqC,CAAAA,CAA/D,CAEJwF,EAAAA,CADA8a,CACA9a,CADIO,CAAExG,CAAAA,IAAF,CAAOrC,CAAP,CAAUyI,CAAAA,MAAV,CAAiB,IAAKtF,CAAAA,KAAtB,CAEa,EAArB,EAAIigB,CAAE5e,CAAAA,GAAF,CAAM,IAAK1B,CAAAA,CAAX,CAAJ,CACEwF,CADF,CACQ8a,CAAE/gB,CAAAA,IAAF,CAAO,IAAKS,CAAAA,CAAZ,CADR,CAEuB,CAFvB,CAEWsgB,CAAEpI,CAAAA,IAAF,CAAO,CAAP,CAFX,GAGE1S,CAHF,CAGQ8a,CAAE/W,CAAAA,IAAF,CAAO,IAAKvJ,CAAAA,CAAZ,CAHR,CAMA,OAAOwF,EAAIgV,CAAAA,SAAJ,CAAc,IAAd,CAbgC,CAgBzCpa,KAAKjE,CAAAA,SAAUic,CAAAA,IAAf,CAAsBoI,QAAc,CAACpiB,CAAD,CAAI,CAGtC,MADU,KAAKmC,CAAAA,IAALiF,CAAUpH,CAAEsC,CAAAA,MAAF,CAAS,IAAKV,CAAAA,CAAd,CAAiBrC,CAAAA,GAAjB,CAAqB,IAAK2C,CAAAA,EAA1B,CAAVkF,CACCgV,CAAAA,SAAJ,CAAc,IAAd,CAH+B,CAh3Gd,CAA3B,CAAD,CAq3GqB,WAr3GrB,GAq3GG,MAAOhf,gBAr3GV,EAq3GoCA,eAr3GpC,CAq3G4C,IAr3G5C,CADiG;\",\n\"sources\":[\"node_modules/bn_DOT_js/lib/bn.js\"],\n\"sourcesContent\":[\"shadow$provide[\\\"module$node_modules$bn_DOT_js$lib$bn\\\"] = function(global,require,module,exports) {\\n(function (module, exports) {\\n  'use strict';\\n\\n  // Utils\\n  function assert (val, msg) {\\n    if (!val) throw new Error(msg || 'Assertion failed');\\n  }\\n\\n  // Could use `inherits` module, but don't want to move from single file\\n  // architecture yet.\\n  function inherits (ctor, superCtor) {\\n    ctor.super_ = superCtor;\\n    var TempCtor = function () {};\\n    TempCtor.prototype = superCtor.prototype;\\n    ctor.prototype = new TempCtor();\\n    ctor.prototype.constructor = ctor;\\n  }\\n\\n  // BN\\n\\n  function BN (number, base, endian) {\\n    if (BN.isBN(number)) {\\n      return number;\\n    }\\n\\n    this.negative = 0;\\n    this.words = null;\\n    this.length = 0;\\n\\n    // Reduction context\\n    this.red = null;\\n\\n    if (number !== null) {\\n      if (base === 'le' || base === 'be') {\\n        endian = base;\\n        base = 10;\\n      }\\n\\n      this._init(number || 0, base || 10, endian || 'be');\\n    }\\n  }\\n  if (typeof module === 'object') {\\n    module.exports = BN;\\n  } else {\\n    exports.BN = BN;\\n  }\\n\\n  BN.BN = BN;\\n  BN.wordSize = 26;\\n\\n  var Buffer;\\n  try {\\n    if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\\n      Buffer = window.Buffer;\\n    } else {\\n      Buffer = require('buffer').Buffer;\\n    }\\n  } catch (e) {\\n  }\\n\\n  BN.isBN = function isBN (num) {\\n    if (num instanceof BN) {\\n      return true;\\n    }\\n\\n    return num !== null && typeof num === 'object' &&\\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\\n  };\\n\\n  BN.max = function max (left, right) {\\n    if (left.cmp(right) > 0) return left;\\n    return right;\\n  };\\n\\n  BN.min = function min (left, right) {\\n    if (left.cmp(right) < 0) return left;\\n    return right;\\n  };\\n\\n  BN.prototype._init = function init (number, base, endian) {\\n    if (typeof number === 'number') {\\n      return this._initNumber(number, base, endian);\\n    }\\n\\n    if (typeof number === 'object') {\\n      return this._initArray(number, base, endian);\\n    }\\n\\n    if (base === 'hex') {\\n      base = 16;\\n    }\\n    assert(base === (base | 0) && base >= 2 && base <= 36);\\n\\n    number = number.toString().replace(/\\\\s+/g, '');\\n    var start = 0;\\n    if (number[0] === '-') {\\n      start++;\\n      this.negative = 1;\\n    }\\n\\n    if (start < number.length) {\\n      if (base === 16) {\\n        this._parseHex(number, start, endian);\\n      } else {\\n        this._parseBase(number, base, start);\\n        if (endian === 'le') {\\n          this._initArray(this.toArray(), base, endian);\\n        }\\n      }\\n    }\\n  };\\n\\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\\n    if (number < 0) {\\n      this.negative = 1;\\n      number = -number;\\n    }\\n    if (number < 0x4000000) {\\n      this.words = [ number & 0x3ffffff ];\\n      this.length = 1;\\n    } else if (number < 0x10000000000000) {\\n      this.words = [\\n        number & 0x3ffffff,\\n        (number / 0x4000000) & 0x3ffffff\\n      ];\\n      this.length = 2;\\n    } else {\\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\\n      this.words = [\\n        number & 0x3ffffff,\\n        (number / 0x4000000) & 0x3ffffff,\\n        1\\n      ];\\n      this.length = 3;\\n    }\\n\\n    if (endian !== 'le') return;\\n\\n    // Reverse the bytes\\n    this._initArray(this.toArray(), base, endian);\\n  };\\n\\n  BN.prototype._initArray = function _initArray (number, base, endian) {\\n    // Perhaps a Uint8Array\\n    assert(typeof number.length === 'number');\\n    if (number.length <= 0) {\\n      this.words = [ 0 ];\\n      this.length = 1;\\n      return this;\\n    }\\n\\n    this.length = Math.ceil(number.length / 3);\\n    this.words = new Array(this.length);\\n    for (var i = 0; i < this.length; i++) {\\n      this.words[i] = 0;\\n    }\\n\\n    var j, w;\\n    var off = 0;\\n    if (endian === 'be') {\\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\\n        this.words[j] |= (w << off) & 0x3ffffff;\\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\\n        off += 24;\\n        if (off >= 26) {\\n          off -= 26;\\n          j++;\\n        }\\n      }\\n    } else if (endian === 'le') {\\n      for (i = 0, j = 0; i < number.length; i += 3) {\\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\\n        this.words[j] |= (w << off) & 0x3ffffff;\\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\\n        off += 24;\\n        if (off >= 26) {\\n          off -= 26;\\n          j++;\\n        }\\n      }\\n    }\\n    return this.strip();\\n  };\\n\\n  function parseHex4Bits (string, index) {\\n    var c = string.charCodeAt(index);\\n    // 'A' - 'F'\\n    if (c >= 65 && c <= 70) {\\n      return c - 55;\\n    // 'a' - 'f'\\n    } else if (c >= 97 && c <= 102) {\\n      return c - 87;\\n    // '0' - '9'\\n    } else {\\n      return (c - 48) & 0xf;\\n    }\\n  }\\n\\n  function parseHexByte (string, lowerBound, index) {\\n    var r = parseHex4Bits(string, index);\\n    if (index - 1 >= lowerBound) {\\n      r |= parseHex4Bits(string, index - 1) << 4;\\n    }\\n    return r;\\n  }\\n\\n  BN.prototype._parseHex = function _parseHex (number, start, endian) {\\n    // Create possibly bigger array to ensure that it fits the number\\n    this.length = Math.ceil((number.length - start) / 6);\\n    this.words = new Array(this.length);\\n    for (var i = 0; i < this.length; i++) {\\n      this.words[i] = 0;\\n    }\\n\\n    // 24-bits chunks\\n    var off = 0;\\n    var j = 0;\\n\\n    var w;\\n    if (endian === 'be') {\\n      for (i = number.length - 1; i >= start; i -= 2) {\\n        w = parseHexByte(number, start, i) << off;\\n        this.words[j] |= w & 0x3ffffff;\\n        if (off >= 18) {\\n          off -= 18;\\n          j += 1;\\n          this.words[j] |= w >>> 26;\\n        } else {\\n          off += 8;\\n        }\\n      }\\n    } else {\\n      var parseLength = number.length - start;\\n      for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\\n        w = parseHexByte(number, start, i) << off;\\n        this.words[j] |= w & 0x3ffffff;\\n        if (off >= 18) {\\n          off -= 18;\\n          j += 1;\\n          this.words[j] |= w >>> 26;\\n        } else {\\n          off += 8;\\n        }\\n      }\\n    }\\n\\n    this.strip();\\n  };\\n\\n  function parseBase (str, start, end, mul) {\\n    var r = 0;\\n    var len = Math.min(str.length, end);\\n    for (var i = start; i < len; i++) {\\n      var c = str.charCodeAt(i) - 48;\\n\\n      r *= mul;\\n\\n      // 'a'\\n      if (c >= 49) {\\n        r += c - 49 + 0xa;\\n\\n      // 'A'\\n      } else if (c >= 17) {\\n        r += c - 17 + 0xa;\\n\\n      // '0' - '9'\\n      } else {\\n        r += c;\\n      }\\n    }\\n    return r;\\n  }\\n\\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\\n    // Initialize as zero\\n    this.words = [ 0 ];\\n    this.length = 1;\\n\\n    // Find length of limb in base\\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\\n      limbLen++;\\n    }\\n    limbLen--;\\n    limbPow = (limbPow / base) | 0;\\n\\n    var total = number.length - start;\\n    var mod = total % limbLen;\\n    var end = Math.min(total, total - mod) + start;\\n\\n    var word = 0;\\n    for (var i = start; i < end; i += limbLen) {\\n      word = parseBase(number, i, i + limbLen, base);\\n\\n      this.imuln(limbPow);\\n      if (this.words[0] + word < 0x4000000) {\\n        this.words[0] += word;\\n      } else {\\n        this._iaddn(word);\\n      }\\n    }\\n\\n    if (mod !== 0) {\\n      var pow = 1;\\n      word = parseBase(number, i, number.length, base);\\n\\n      for (i = 0; i < mod; i++) {\\n        pow *= base;\\n      }\\n\\n      this.imuln(pow);\\n      if (this.words[0] + word < 0x4000000) {\\n        this.words[0] += word;\\n      } else {\\n        this._iaddn(word);\\n      }\\n    }\\n\\n    this.strip();\\n  };\\n\\n  BN.prototype.copy = function copy (dest) {\\n    dest.words = new Array(this.length);\\n    for (var i = 0; i < this.length; i++) {\\n      dest.words[i] = this.words[i];\\n    }\\n    dest.length = this.length;\\n    dest.negative = this.negative;\\n    dest.red = this.red;\\n  };\\n\\n  BN.prototype.clone = function clone () {\\n    var r = new BN(null);\\n    this.copy(r);\\n    return r;\\n  };\\n\\n  BN.prototype._expand = function _expand (size) {\\n    while (this.length < size) {\\n      this.words[this.length++] = 0;\\n    }\\n    return this;\\n  };\\n\\n  // Remove leading `0` from `this`\\n  BN.prototype.strip = function strip () {\\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\\n      this.length--;\\n    }\\n    return this._normSign();\\n  };\\n\\n  BN.prototype._normSign = function _normSign () {\\n    // -0 = 0\\n    if (this.length === 1 && this.words[0] === 0) {\\n      this.negative = 0;\\n    }\\n    return this;\\n  };\\n\\n  BN.prototype.inspect = function inspect () {\\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\\n  };\\n\\n  /*\\n\\n  var zeros = [];\\n  var groupSizes = [];\\n  var groupBases = [];\\n\\n  var s = '';\\n  var i = -1;\\n  while (++i < BN.wordSize) {\\n    zeros[i] = s;\\n    s += '0';\\n  }\\n  groupSizes[0] = 0;\\n  groupSizes[1] = 0;\\n  groupBases[0] = 0;\\n  groupBases[1] = 0;\\n  var base = 2 - 1;\\n  while (++base < 36 + 1) {\\n    var groupSize = 0;\\n    var groupBase = 1;\\n    while (groupBase < (1 << BN.wordSize) / base) {\\n      groupBase *= base;\\n      groupSize += 1;\\n    }\\n    groupSizes[base] = groupSize;\\n    groupBases[base] = groupBase;\\n  }\\n\\n  */\\n\\n  var zeros = [\\n    '',\\n    '0',\\n    '00',\\n    '000',\\n    '0000',\\n    '00000',\\n    '000000',\\n    '0000000',\\n    '00000000',\\n    '000000000',\\n    '0000000000',\\n    '00000000000',\\n    '000000000000',\\n    '0000000000000',\\n    '00000000000000',\\n    '000000000000000',\\n    '0000000000000000',\\n    '00000000000000000',\\n    '000000000000000000',\\n    '0000000000000000000',\\n    '00000000000000000000',\\n    '000000000000000000000',\\n    '0000000000000000000000',\\n    '00000000000000000000000',\\n    '000000000000000000000000',\\n    '0000000000000000000000000'\\n  ];\\n\\n  var groupSizes = [\\n    0, 0,\\n    25, 16, 12, 11, 10, 9, 8,\\n    8, 7, 7, 7, 7, 6, 6,\\n    6, 6, 6, 6, 6, 5, 5,\\n    5, 5, 5, 5, 5, 5, 5,\\n    5, 5, 5, 5, 5, 5, 5\\n  ];\\n\\n  var groupBases = [\\n    0, 0,\\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\\n  ];\\n\\n  BN.prototype.toString = function toString (base, padding) {\\n    base = base || 10;\\n    padding = padding | 0 || 1;\\n\\n    var out;\\n    if (base === 16 || base === 'hex') {\\n      out = '';\\n      var off = 0;\\n      var carry = 0;\\n      for (var i = 0; i < this.length; i++) {\\n        var w = this.words[i];\\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\\n        carry = (w >>> (24 - off)) & 0xffffff;\\n        if (carry !== 0 || i !== this.length - 1) {\\n          out = zeros[6 - word.length] + word + out;\\n        } else {\\n          out = word + out;\\n        }\\n        off += 2;\\n        if (off >= 26) {\\n          off -= 26;\\n          i--;\\n        }\\n      }\\n      if (carry !== 0) {\\n        out = carry.toString(16) + out;\\n      }\\n      while (out.length % padding !== 0) {\\n        out = '0' + out;\\n      }\\n      if (this.negative !== 0) {\\n        out = '-' + out;\\n      }\\n      return out;\\n    }\\n\\n    if (base === (base | 0) && base >= 2 && base <= 36) {\\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\\n      var groupSize = groupSizes[base];\\n      // var groupBase = Math.pow(base, groupSize);\\n      var groupBase = groupBases[base];\\n      out = '';\\n      var c = this.clone();\\n      c.negative = 0;\\n      while (!c.isZero()) {\\n        var r = c.modn(groupBase).toString(base);\\n        c = c.idivn(groupBase);\\n\\n        if (!c.isZero()) {\\n          out = zeros[groupSize - r.length] + r + out;\\n        } else {\\n          out = r + out;\\n        }\\n      }\\n      if (this.isZero()) {\\n        out = '0' + out;\\n      }\\n      while (out.length % padding !== 0) {\\n        out = '0' + out;\\n      }\\n      if (this.negative !== 0) {\\n        out = '-' + out;\\n      }\\n      return out;\\n    }\\n\\n    assert(false, 'Base should be between 2 and 36');\\n  };\\n\\n  BN.prototype.toNumber = function toNumber () {\\n    var ret = this.words[0];\\n    if (this.length === 2) {\\n      ret += this.words[1] * 0x4000000;\\n    } else if (this.length === 3 && this.words[2] === 0x01) {\\n      // NOTE: at this stage it is known that the top bit is set\\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\\n    } else if (this.length > 2) {\\n      assert(false, 'Number can only safely store up to 53 bits');\\n    }\\n    return (this.negative !== 0) ? -ret : ret;\\n  };\\n\\n  BN.prototype.toJSON = function toJSON () {\\n    return this.toString(16);\\n  };\\n\\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\\n    assert(typeof Buffer !== 'undefined');\\n    return this.toArrayLike(Buffer, endian, length);\\n  };\\n\\n  BN.prototype.toArray = function toArray (endian, length) {\\n    return this.toArrayLike(Array, endian, length);\\n  };\\n\\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\\n    var byteLength = this.byteLength();\\n    var reqLength = length || Math.max(1, byteLength);\\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\\n    assert(reqLength > 0, 'Requested array length <= 0');\\n\\n    this.strip();\\n    var littleEndian = endian === 'le';\\n    var res = new ArrayType(reqLength);\\n\\n    var b, i;\\n    var q = this.clone();\\n    if (!littleEndian) {\\n      // Assume big-endian\\n      for (i = 0; i < reqLength - byteLength; i++) {\\n        res[i] = 0;\\n      }\\n\\n      for (i = 0; !q.isZero(); i++) {\\n        b = q.andln(0xff);\\n        q.iushrn(8);\\n\\n        res[reqLength - i - 1] = b;\\n      }\\n    } else {\\n      for (i = 0; !q.isZero(); i++) {\\n        b = q.andln(0xff);\\n        q.iushrn(8);\\n\\n        res[i] = b;\\n      }\\n\\n      for (; i < reqLength; i++) {\\n        res[i] = 0;\\n      }\\n    }\\n\\n    return res;\\n  };\\n\\n  if (Math.clz32) {\\n    BN.prototype._countBits = function _countBits (w) {\\n      return 32 - Math.clz32(w);\\n    };\\n  } else {\\n    BN.prototype._countBits = function _countBits (w) {\\n      var t = w;\\n      var r = 0;\\n      if (t >= 0x1000) {\\n        r += 13;\\n        t >>>= 13;\\n      }\\n      if (t >= 0x40) {\\n        r += 7;\\n        t >>>= 7;\\n      }\\n      if (t >= 0x8) {\\n        r += 4;\\n        t >>>= 4;\\n      }\\n      if (t >= 0x02) {\\n        r += 2;\\n        t >>>= 2;\\n      }\\n      return r + t;\\n    };\\n  }\\n\\n  BN.prototype._zeroBits = function _zeroBits (w) {\\n    // Short-cut\\n    if (w === 0) return 26;\\n\\n    var t = w;\\n    var r = 0;\\n    if ((t & 0x1fff) === 0) {\\n      r += 13;\\n      t >>>= 13;\\n    }\\n    if ((t & 0x7f) === 0) {\\n      r += 7;\\n      t >>>= 7;\\n    }\\n    if ((t & 0xf) === 0) {\\n      r += 4;\\n      t >>>= 4;\\n    }\\n    if ((t & 0x3) === 0) {\\n      r += 2;\\n      t >>>= 2;\\n    }\\n    if ((t & 0x1) === 0) {\\n      r++;\\n    }\\n    return r;\\n  };\\n\\n  // Return number of used bits in a BN\\n  BN.prototype.bitLength = function bitLength () {\\n    var w = this.words[this.length - 1];\\n    var hi = this._countBits(w);\\n    return (this.length - 1) * 26 + hi;\\n  };\\n\\n  function toBitArray (num) {\\n    var w = new Array(num.bitLength());\\n\\n    for (var bit = 0; bit < w.length; bit++) {\\n      var off = (bit / 26) | 0;\\n      var wbit = bit % 26;\\n\\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\\n    }\\n\\n    return w;\\n  }\\n\\n  // Number of trailing zero bits\\n  BN.prototype.zeroBits = function zeroBits () {\\n    if (this.isZero()) return 0;\\n\\n    var r = 0;\\n    for (var i = 0; i < this.length; i++) {\\n      var b = this._zeroBits(this.words[i]);\\n      r += b;\\n      if (b !== 26) break;\\n    }\\n    return r;\\n  };\\n\\n  BN.prototype.byteLength = function byteLength () {\\n    return Math.ceil(this.bitLength() / 8);\\n  };\\n\\n  BN.prototype.toTwos = function toTwos (width) {\\n    if (this.negative !== 0) {\\n      return this.abs().inotn(width).iaddn(1);\\n    }\\n    return this.clone();\\n  };\\n\\n  BN.prototype.fromTwos = function fromTwos (width) {\\n    if (this.testn(width - 1)) {\\n      return this.notn(width).iaddn(1).ineg();\\n    }\\n    return this.clone();\\n  };\\n\\n  BN.prototype.isNeg = function isNeg () {\\n    return this.negative !== 0;\\n  };\\n\\n  // Return negative clone of `this`\\n  BN.prototype.neg = function neg () {\\n    return this.clone().ineg();\\n  };\\n\\n  BN.prototype.ineg = function ineg () {\\n    if (!this.isZero()) {\\n      this.negative ^= 1;\\n    }\\n\\n    return this;\\n  };\\n\\n  // Or `num` with `this` in-place\\n  BN.prototype.iuor = function iuor (num) {\\n    while (this.length < num.length) {\\n      this.words[this.length++] = 0;\\n    }\\n\\n    for (var i = 0; i < num.length; i++) {\\n      this.words[i] = this.words[i] | num.words[i];\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.ior = function ior (num) {\\n    assert((this.negative | num.negative) === 0);\\n    return this.iuor(num);\\n  };\\n\\n  // Or `num` with `this`\\n  BN.prototype.or = function or (num) {\\n    if (this.length > num.length) return this.clone().ior(num);\\n    return num.clone().ior(this);\\n  };\\n\\n  BN.prototype.uor = function uor (num) {\\n    if (this.length > num.length) return this.clone().iuor(num);\\n    return num.clone().iuor(this);\\n  };\\n\\n  // And `num` with `this` in-place\\n  BN.prototype.iuand = function iuand (num) {\\n    // b = min-length(num, this)\\n    var b;\\n    if (this.length > num.length) {\\n      b = num;\\n    } else {\\n      b = this;\\n    }\\n\\n    for (var i = 0; i < b.length; i++) {\\n      this.words[i] = this.words[i] & num.words[i];\\n    }\\n\\n    this.length = b.length;\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.iand = function iand (num) {\\n    assert((this.negative | num.negative) === 0);\\n    return this.iuand(num);\\n  };\\n\\n  // And `num` with `this`\\n  BN.prototype.and = function and (num) {\\n    if (this.length > num.length) return this.clone().iand(num);\\n    return num.clone().iand(this);\\n  };\\n\\n  BN.prototype.uand = function uand (num) {\\n    if (this.length > num.length) return this.clone().iuand(num);\\n    return num.clone().iuand(this);\\n  };\\n\\n  // Xor `num` with `this` in-place\\n  BN.prototype.iuxor = function iuxor (num) {\\n    // a.length > b.length\\n    var a;\\n    var b;\\n    if (this.length > num.length) {\\n      a = this;\\n      b = num;\\n    } else {\\n      a = num;\\n      b = this;\\n    }\\n\\n    for (var i = 0; i < b.length; i++) {\\n      this.words[i] = a.words[i] ^ b.words[i];\\n    }\\n\\n    if (this !== a) {\\n      for (; i < a.length; i++) {\\n        this.words[i] = a.words[i];\\n      }\\n    }\\n\\n    this.length = a.length;\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.ixor = function ixor (num) {\\n    assert((this.negative | num.negative) === 0);\\n    return this.iuxor(num);\\n  };\\n\\n  // Xor `num` with `this`\\n  BN.prototype.xor = function xor (num) {\\n    if (this.length > num.length) return this.clone().ixor(num);\\n    return num.clone().ixor(this);\\n  };\\n\\n  BN.prototype.uxor = function uxor (num) {\\n    if (this.length > num.length) return this.clone().iuxor(num);\\n    return num.clone().iuxor(this);\\n  };\\n\\n  // Not ``this`` with ``width`` bitwidth\\n  BN.prototype.inotn = function inotn (width) {\\n    assert(typeof width === 'number' && width >= 0);\\n\\n    var bytesNeeded = Math.ceil(width / 26) | 0;\\n    var bitsLeft = width % 26;\\n\\n    // Extend the buffer with leading zeroes\\n    this._expand(bytesNeeded);\\n\\n    if (bitsLeft > 0) {\\n      bytesNeeded--;\\n    }\\n\\n    // Handle complete words\\n    for (var i = 0; i < bytesNeeded; i++) {\\n      this.words[i] = ~this.words[i] & 0x3ffffff;\\n    }\\n\\n    // Handle the residue\\n    if (bitsLeft > 0) {\\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\\n    }\\n\\n    // And remove leading zeroes\\n    return this.strip();\\n  };\\n\\n  BN.prototype.notn = function notn (width) {\\n    return this.clone().inotn(width);\\n  };\\n\\n  // Set `bit` of `this`\\n  BN.prototype.setn = function setn (bit, val) {\\n    assert(typeof bit === 'number' && bit >= 0);\\n\\n    var off = (bit / 26) | 0;\\n    var wbit = bit % 26;\\n\\n    this._expand(off + 1);\\n\\n    if (val) {\\n      this.words[off] = this.words[off] | (1 << wbit);\\n    } else {\\n      this.words[off] = this.words[off] & ~(1 << wbit);\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  // Add `num` to `this` in-place\\n  BN.prototype.iadd = function iadd (num) {\\n    var r;\\n\\n    // negative + positive\\n    if (this.negative !== 0 && num.negative === 0) {\\n      this.negative = 0;\\n      r = this.isub(num);\\n      this.negative ^= 1;\\n      return this._normSign();\\n\\n    // positive + negative\\n    } else if (this.negative === 0 && num.negative !== 0) {\\n      num.negative = 0;\\n      r = this.isub(num);\\n      num.negative = 1;\\n      return r._normSign();\\n    }\\n\\n    // a.length > b.length\\n    var a, b;\\n    if (this.length > num.length) {\\n      a = this;\\n      b = num;\\n    } else {\\n      a = num;\\n      b = this;\\n    }\\n\\n    var carry = 0;\\n    for (var i = 0; i < b.length; i++) {\\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\\n      this.words[i] = r & 0x3ffffff;\\n      carry = r >>> 26;\\n    }\\n    for (; carry !== 0 && i < a.length; i++) {\\n      r = (a.words[i] | 0) + carry;\\n      this.words[i] = r & 0x3ffffff;\\n      carry = r >>> 26;\\n    }\\n\\n    this.length = a.length;\\n    if (carry !== 0) {\\n      this.words[this.length] = carry;\\n      this.length++;\\n    // Copy the rest of the words\\n    } else if (a !== this) {\\n      for (; i < a.length; i++) {\\n        this.words[i] = a.words[i];\\n      }\\n    }\\n\\n    return this;\\n  };\\n\\n  // Add `num` to `this`\\n  BN.prototype.add = function add (num) {\\n    var res;\\n    if (num.negative !== 0 && this.negative === 0) {\\n      num.negative = 0;\\n      res = this.sub(num);\\n      num.negative ^= 1;\\n      return res;\\n    } else if (num.negative === 0 && this.negative !== 0) {\\n      this.negative = 0;\\n      res = num.sub(this);\\n      this.negative = 1;\\n      return res;\\n    }\\n\\n    if (this.length > num.length) return this.clone().iadd(num);\\n\\n    return num.clone().iadd(this);\\n  };\\n\\n  // Subtract `num` from `this` in-place\\n  BN.prototype.isub = function isub (num) {\\n    // this - (-num) = this + num\\n    if (num.negative !== 0) {\\n      num.negative = 0;\\n      var r = this.iadd(num);\\n      num.negative = 1;\\n      return r._normSign();\\n\\n    // -this - num = -(this + num)\\n    } else if (this.negative !== 0) {\\n      this.negative = 0;\\n      this.iadd(num);\\n      this.negative = 1;\\n      return this._normSign();\\n    }\\n\\n    // At this point both numbers are positive\\n    var cmp = this.cmp(num);\\n\\n    // Optimization - zeroify\\n    if (cmp === 0) {\\n      this.negative = 0;\\n      this.length = 1;\\n      this.words[0] = 0;\\n      return this;\\n    }\\n\\n    // a > b\\n    var a, b;\\n    if (cmp > 0) {\\n      a = this;\\n      b = num;\\n    } else {\\n      a = num;\\n      b = this;\\n    }\\n\\n    var carry = 0;\\n    for (var i = 0; i < b.length; i++) {\\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\\n      carry = r >> 26;\\n      this.words[i] = r & 0x3ffffff;\\n    }\\n    for (; carry !== 0 && i < a.length; i++) {\\n      r = (a.words[i] | 0) + carry;\\n      carry = r >> 26;\\n      this.words[i] = r & 0x3ffffff;\\n    }\\n\\n    // Copy rest of the words\\n    if (carry === 0 && i < a.length && a !== this) {\\n      for (; i < a.length; i++) {\\n        this.words[i] = a.words[i];\\n      }\\n    }\\n\\n    this.length = Math.max(this.length, i);\\n\\n    if (a !== this) {\\n      this.negative = 1;\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  // Subtract `num` from `this`\\n  BN.prototype.sub = function sub (num) {\\n    return this.clone().isub(num);\\n  };\\n\\n  function smallMulTo (self, num, out) {\\n    out.negative = num.negative ^ self.negative;\\n    var len = (self.length + num.length) | 0;\\n    out.length = len;\\n    len = (len - 1) | 0;\\n\\n    // Peel one iteration (compiler can't do it, because of code complexity)\\n    var a = self.words[0] | 0;\\n    var b = num.words[0] | 0;\\n    var r = a * b;\\n\\n    var lo = r & 0x3ffffff;\\n    var carry = (r / 0x4000000) | 0;\\n    out.words[0] = lo;\\n\\n    for (var k = 1; k < len; k++) {\\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\\n      // note that ncarry could be >= 0x3ffffff\\n      var ncarry = carry >>> 26;\\n      var rword = carry & 0x3ffffff;\\n      var maxJ = Math.min(k, num.length - 1);\\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\\n        var i = (k - j) | 0;\\n        a = self.words[i] | 0;\\n        b = num.words[j] | 0;\\n        r = a * b + rword;\\n        ncarry += (r / 0x4000000) | 0;\\n        rword = r & 0x3ffffff;\\n      }\\n      out.words[k] = rword | 0;\\n      carry = ncarry | 0;\\n    }\\n    if (carry !== 0) {\\n      out.words[k] = carry | 0;\\n    } else {\\n      out.length--;\\n    }\\n\\n    return out.strip();\\n  }\\n\\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\\n  // multiplication (like elliptic secp256k1).\\n  var comb10MulTo = function comb10MulTo (self, num, out) {\\n    var a = self.words;\\n    var b = num.words;\\n    var o = out.words;\\n    var c = 0;\\n    var lo;\\n    var mid;\\n    var hi;\\n    var a0 = a[0] | 0;\\n    var al0 = a0 & 0x1fff;\\n    var ah0 = a0 >>> 13;\\n    var a1 = a[1] | 0;\\n    var al1 = a1 & 0x1fff;\\n    var ah1 = a1 >>> 13;\\n    var a2 = a[2] | 0;\\n    var al2 = a2 & 0x1fff;\\n    var ah2 = a2 >>> 13;\\n    var a3 = a[3] | 0;\\n    var al3 = a3 & 0x1fff;\\n    var ah3 = a3 >>> 13;\\n    var a4 = a[4] | 0;\\n    var al4 = a4 & 0x1fff;\\n    var ah4 = a4 >>> 13;\\n    var a5 = a[5] | 0;\\n    var al5 = a5 & 0x1fff;\\n    var ah5 = a5 >>> 13;\\n    var a6 = a[6] | 0;\\n    var al6 = a6 & 0x1fff;\\n    var ah6 = a6 >>> 13;\\n    var a7 = a[7] | 0;\\n    var al7 = a7 & 0x1fff;\\n    var ah7 = a7 >>> 13;\\n    var a8 = a[8] | 0;\\n    var al8 = a8 & 0x1fff;\\n    var ah8 = a8 >>> 13;\\n    var a9 = a[9] | 0;\\n    var al9 = a9 & 0x1fff;\\n    var ah9 = a9 >>> 13;\\n    var b0 = b[0] | 0;\\n    var bl0 = b0 & 0x1fff;\\n    var bh0 = b0 >>> 13;\\n    var b1 = b[1] | 0;\\n    var bl1 = b1 & 0x1fff;\\n    var bh1 = b1 >>> 13;\\n    var b2 = b[2] | 0;\\n    var bl2 = b2 & 0x1fff;\\n    var bh2 = b2 >>> 13;\\n    var b3 = b[3] | 0;\\n    var bl3 = b3 & 0x1fff;\\n    var bh3 = b3 >>> 13;\\n    var b4 = b[4] | 0;\\n    var bl4 = b4 & 0x1fff;\\n    var bh4 = b4 >>> 13;\\n    var b5 = b[5] | 0;\\n    var bl5 = b5 & 0x1fff;\\n    var bh5 = b5 >>> 13;\\n    var b6 = b[6] | 0;\\n    var bl6 = b6 & 0x1fff;\\n    var bh6 = b6 >>> 13;\\n    var b7 = b[7] | 0;\\n    var bl7 = b7 & 0x1fff;\\n    var bh7 = b7 >>> 13;\\n    var b8 = b[8] | 0;\\n    var bl8 = b8 & 0x1fff;\\n    var bh8 = b8 >>> 13;\\n    var b9 = b[9] | 0;\\n    var bl9 = b9 & 0x1fff;\\n    var bh9 = b9 >>> 13;\\n\\n    out.negative = self.negative ^ num.negative;\\n    out.length = 19;\\n    /* k = 0 */\\n    lo = Math.imul(al0, bl0);\\n    mid = Math.imul(al0, bh0);\\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\\n    hi = Math.imul(ah0, bh0);\\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\\n    w0 &= 0x3ffffff;\\n    /* k = 1 */\\n    lo = Math.imul(al1, bl0);\\n    mid = Math.imul(al1, bh0);\\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\\n    hi = Math.imul(ah1, bh0);\\n    lo = (lo + Math.imul(al0, bl1)) | 0;\\n    mid = (mid + Math.imul(al0, bh1)) | 0;\\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\\n    w1 &= 0x3ffffff;\\n    /* k = 2 */\\n    lo = Math.imul(al2, bl0);\\n    mid = Math.imul(al2, bh0);\\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\\n    hi = Math.imul(ah2, bh0);\\n    lo = (lo + Math.imul(al1, bl1)) | 0;\\n    mid = (mid + Math.imul(al1, bh1)) | 0;\\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\\n    lo = (lo + Math.imul(al0, bl2)) | 0;\\n    mid = (mid + Math.imul(al0, bh2)) | 0;\\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\\n    w2 &= 0x3ffffff;\\n    /* k = 3 */\\n    lo = Math.imul(al3, bl0);\\n    mid = Math.imul(al3, bh0);\\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\\n    hi = Math.imul(ah3, bh0);\\n    lo = (lo + Math.imul(al2, bl1)) | 0;\\n    mid = (mid + Math.imul(al2, bh1)) | 0;\\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\\n    lo = (lo + Math.imul(al1, bl2)) | 0;\\n    mid = (mid + Math.imul(al1, bh2)) | 0;\\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\\n    lo = (lo + Math.imul(al0, bl3)) | 0;\\n    mid = (mid + Math.imul(al0, bh3)) | 0;\\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\\n    w3 &= 0x3ffffff;\\n    /* k = 4 */\\n    lo = Math.imul(al4, bl0);\\n    mid = Math.imul(al4, bh0);\\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\\n    hi = Math.imul(ah4, bh0);\\n    lo = (lo + Math.imul(al3, bl1)) | 0;\\n    mid = (mid + Math.imul(al3, bh1)) | 0;\\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\\n    lo = (lo + Math.imul(al2, bl2)) | 0;\\n    mid = (mid + Math.imul(al2, bh2)) | 0;\\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\\n    lo = (lo + Math.imul(al1, bl3)) | 0;\\n    mid = (mid + Math.imul(al1, bh3)) | 0;\\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\\n    lo = (lo + Math.imul(al0, bl4)) | 0;\\n    mid = (mid + Math.imul(al0, bh4)) | 0;\\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\\n    w4 &= 0x3ffffff;\\n    /* k = 5 */\\n    lo = Math.imul(al5, bl0);\\n    mid = Math.imul(al5, bh0);\\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\\n    hi = Math.imul(ah5, bh0);\\n    lo = (lo + Math.imul(al4, bl1)) | 0;\\n    mid = (mid + Math.imul(al4, bh1)) | 0;\\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\\n    lo = (lo + Math.imul(al3, bl2)) | 0;\\n    mid = (mid + Math.imul(al3, bh2)) | 0;\\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\\n    lo = (lo + Math.imul(al2, bl3)) | 0;\\n    mid = (mid + Math.imul(al2, bh3)) | 0;\\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\\n    lo = (lo + Math.imul(al1, bl4)) | 0;\\n    mid = (mid + Math.imul(al1, bh4)) | 0;\\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\\n    lo = (lo + Math.imul(al0, bl5)) | 0;\\n    mid = (mid + Math.imul(al0, bh5)) | 0;\\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\\n    w5 &= 0x3ffffff;\\n    /* k = 6 */\\n    lo = Math.imul(al6, bl0);\\n    mid = Math.imul(al6, bh0);\\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\\n    hi = Math.imul(ah6, bh0);\\n    lo = (lo + Math.imul(al5, bl1)) | 0;\\n    mid = (mid + Math.imul(al5, bh1)) | 0;\\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\\n    lo = (lo + Math.imul(al4, bl2)) | 0;\\n    mid = (mid + Math.imul(al4, bh2)) | 0;\\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\\n    lo = (lo + Math.imul(al3, bl3)) | 0;\\n    mid = (mid + Math.imul(al3, bh3)) | 0;\\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\\n    lo = (lo + Math.imul(al2, bl4)) | 0;\\n    mid = (mid + Math.imul(al2, bh4)) | 0;\\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\\n    lo = (lo + Math.imul(al1, bl5)) | 0;\\n    mid = (mid + Math.imul(al1, bh5)) | 0;\\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\\n    lo = (lo + Math.imul(al0, bl6)) | 0;\\n    mid = (mid + Math.imul(al0, bh6)) | 0;\\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\\n    w6 &= 0x3ffffff;\\n    /* k = 7 */\\n    lo = Math.imul(al7, bl0);\\n    mid = Math.imul(al7, bh0);\\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\\n    hi = Math.imul(ah7, bh0);\\n    lo = (lo + Math.imul(al6, bl1)) | 0;\\n    mid = (mid + Math.imul(al6, bh1)) | 0;\\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\\n    lo = (lo + Math.imul(al5, bl2)) | 0;\\n    mid = (mid + Math.imul(al5, bh2)) | 0;\\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\\n    lo = (lo + Math.imul(al4, bl3)) | 0;\\n    mid = (mid + Math.imul(al4, bh3)) | 0;\\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\\n    lo = (lo + Math.imul(al3, bl4)) | 0;\\n    mid = (mid + Math.imul(al3, bh4)) | 0;\\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\\n    lo = (lo + Math.imul(al2, bl5)) | 0;\\n    mid = (mid + Math.imul(al2, bh5)) | 0;\\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\\n    lo = (lo + Math.imul(al1, bl6)) | 0;\\n    mid = (mid + Math.imul(al1, bh6)) | 0;\\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\\n    lo = (lo + Math.imul(al0, bl7)) | 0;\\n    mid = (mid + Math.imul(al0, bh7)) | 0;\\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\\n    w7 &= 0x3ffffff;\\n    /* k = 8 */\\n    lo = Math.imul(al8, bl0);\\n    mid = Math.imul(al8, bh0);\\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\\n    hi = Math.imul(ah8, bh0);\\n    lo = (lo + Math.imul(al7, bl1)) | 0;\\n    mid = (mid + Math.imul(al7, bh1)) | 0;\\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\\n    lo = (lo + Math.imul(al6, bl2)) | 0;\\n    mid = (mid + Math.imul(al6, bh2)) | 0;\\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\\n    lo = (lo + Math.imul(al5, bl3)) | 0;\\n    mid = (mid + Math.imul(al5, bh3)) | 0;\\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\\n    lo = (lo + Math.imul(al4, bl4)) | 0;\\n    mid = (mid + Math.imul(al4, bh4)) | 0;\\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\\n    lo = (lo + Math.imul(al3, bl5)) | 0;\\n    mid = (mid + Math.imul(al3, bh5)) | 0;\\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\\n    lo = (lo + Math.imul(al2, bl6)) | 0;\\n    mid = (mid + Math.imul(al2, bh6)) | 0;\\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\\n    lo = (lo + Math.imul(al1, bl7)) | 0;\\n    mid = (mid + Math.imul(al1, bh7)) | 0;\\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\\n    lo = (lo + Math.imul(al0, bl8)) | 0;\\n    mid = (mid + Math.imul(al0, bh8)) | 0;\\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\\n    w8 &= 0x3ffffff;\\n    /* k = 9 */\\n    lo = Math.imul(al9, bl0);\\n    mid = Math.imul(al9, bh0);\\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\\n    hi = Math.imul(ah9, bh0);\\n    lo = (lo + Math.imul(al8, bl1)) | 0;\\n    mid = (mid + Math.imul(al8, bh1)) | 0;\\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\\n    lo = (lo + Math.imul(al7, bl2)) | 0;\\n    mid = (mid + Math.imul(al7, bh2)) | 0;\\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\\n    lo = (lo + Math.imul(al6, bl3)) | 0;\\n    mid = (mid + Math.imul(al6, bh3)) | 0;\\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\\n    lo = (lo + Math.imul(al5, bl4)) | 0;\\n    mid = (mid + Math.imul(al5, bh4)) | 0;\\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\\n    lo = (lo + Math.imul(al4, bl5)) | 0;\\n    mid = (mid + Math.imul(al4, bh5)) | 0;\\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\\n    lo = (lo + Math.imul(al3, bl6)) | 0;\\n    mid = (mid + Math.imul(al3, bh6)) | 0;\\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\\n    lo = (lo + Math.imul(al2, bl7)) | 0;\\n    mid = (mid + Math.imul(al2, bh7)) | 0;\\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\\n    lo = (lo + Math.imul(al1, bl8)) | 0;\\n    mid = (mid + Math.imul(al1, bh8)) | 0;\\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\\n    lo = (lo + Math.imul(al0, bl9)) | 0;\\n    mid = (mid + Math.imul(al0, bh9)) | 0;\\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\\n    w9 &= 0x3ffffff;\\n    /* k = 10 */\\n    lo = Math.imul(al9, bl1);\\n    mid = Math.imul(al9, bh1);\\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\\n    hi = Math.imul(ah9, bh1);\\n    lo = (lo + Math.imul(al8, bl2)) | 0;\\n    mid = (mid + Math.imul(al8, bh2)) | 0;\\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\\n    lo = (lo + Math.imul(al7, bl3)) | 0;\\n    mid = (mid + Math.imul(al7, bh3)) | 0;\\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\\n    lo = (lo + Math.imul(al6, bl4)) | 0;\\n    mid = (mid + Math.imul(al6, bh4)) | 0;\\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\\n    lo = (lo + Math.imul(al5, bl5)) | 0;\\n    mid = (mid + Math.imul(al5, bh5)) | 0;\\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\\n    lo = (lo + Math.imul(al4, bl6)) | 0;\\n    mid = (mid + Math.imul(al4, bh6)) | 0;\\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\\n    lo = (lo + Math.imul(al3, bl7)) | 0;\\n    mid = (mid + Math.imul(al3, bh7)) | 0;\\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\\n    lo = (lo + Math.imul(al2, bl8)) | 0;\\n    mid = (mid + Math.imul(al2, bh8)) | 0;\\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\\n    lo = (lo + Math.imul(al1, bl9)) | 0;\\n    mid = (mid + Math.imul(al1, bh9)) | 0;\\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\\n    w10 &= 0x3ffffff;\\n    /* k = 11 */\\n    lo = Math.imul(al9, bl2);\\n    mid = Math.imul(al9, bh2);\\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\\n    hi = Math.imul(ah9, bh2);\\n    lo = (lo + Math.imul(al8, bl3)) | 0;\\n    mid = (mid + Math.imul(al8, bh3)) | 0;\\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\\n    lo = (lo + Math.imul(al7, bl4)) | 0;\\n    mid = (mid + Math.imul(al7, bh4)) | 0;\\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\\n    lo = (lo + Math.imul(al6, bl5)) | 0;\\n    mid = (mid + Math.imul(al6, bh5)) | 0;\\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\\n    lo = (lo + Math.imul(al5, bl6)) | 0;\\n    mid = (mid + Math.imul(al5, bh6)) | 0;\\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\\n    lo = (lo + Math.imul(al4, bl7)) | 0;\\n    mid = (mid + Math.imul(al4, bh7)) | 0;\\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\\n    lo = (lo + Math.imul(al3, bl8)) | 0;\\n    mid = (mid + Math.imul(al3, bh8)) | 0;\\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\\n    lo = (lo + Math.imul(al2, bl9)) | 0;\\n    mid = (mid + Math.imul(al2, bh9)) | 0;\\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\\n    w11 &= 0x3ffffff;\\n    /* k = 12 */\\n    lo = Math.imul(al9, bl3);\\n    mid = Math.imul(al9, bh3);\\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\\n    hi = Math.imul(ah9, bh3);\\n    lo = (lo + Math.imul(al8, bl4)) | 0;\\n    mid = (mid + Math.imul(al8, bh4)) | 0;\\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\\n    lo = (lo + Math.imul(al7, bl5)) | 0;\\n    mid = (mid + Math.imul(al7, bh5)) | 0;\\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\\n    lo = (lo + Math.imul(al6, bl6)) | 0;\\n    mid = (mid + Math.imul(al6, bh6)) | 0;\\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\\n    lo = (lo + Math.imul(al5, bl7)) | 0;\\n    mid = (mid + Math.imul(al5, bh7)) | 0;\\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\\n    lo = (lo + Math.imul(al4, bl8)) | 0;\\n    mid = (mid + Math.imul(al4, bh8)) | 0;\\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\\n    lo = (lo + Math.imul(al3, bl9)) | 0;\\n    mid = (mid + Math.imul(al3, bh9)) | 0;\\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\\n    w12 &= 0x3ffffff;\\n    /* k = 13 */\\n    lo = Math.imul(al9, bl4);\\n    mid = Math.imul(al9, bh4);\\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\\n    hi = Math.imul(ah9, bh4);\\n    lo = (lo + Math.imul(al8, bl5)) | 0;\\n    mid = (mid + Math.imul(al8, bh5)) | 0;\\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\\n    lo = (lo + Math.imul(al7, bl6)) | 0;\\n    mid = (mid + Math.imul(al7, bh6)) | 0;\\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\\n    lo = (lo + Math.imul(al6, bl7)) | 0;\\n    mid = (mid + Math.imul(al6, bh7)) | 0;\\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\\n    lo = (lo + Math.imul(al5, bl8)) | 0;\\n    mid = (mid + Math.imul(al5, bh8)) | 0;\\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\\n    lo = (lo + Math.imul(al4, bl9)) | 0;\\n    mid = (mid + Math.imul(al4, bh9)) | 0;\\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\\n    w13 &= 0x3ffffff;\\n    /* k = 14 */\\n    lo = Math.imul(al9, bl5);\\n    mid = Math.imul(al9, bh5);\\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\\n    hi = Math.imul(ah9, bh5);\\n    lo = (lo + Math.imul(al8, bl6)) | 0;\\n    mid = (mid + Math.imul(al8, bh6)) | 0;\\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\\n    lo = (lo + Math.imul(al7, bl7)) | 0;\\n    mid = (mid + Math.imul(al7, bh7)) | 0;\\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\\n    lo = (lo + Math.imul(al6, bl8)) | 0;\\n    mid = (mid + Math.imul(al6, bh8)) | 0;\\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\\n    lo = (lo + Math.imul(al5, bl9)) | 0;\\n    mid = (mid + Math.imul(al5, bh9)) | 0;\\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\\n    w14 &= 0x3ffffff;\\n    /* k = 15 */\\n    lo = Math.imul(al9, bl6);\\n    mid = Math.imul(al9, bh6);\\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\\n    hi = Math.imul(ah9, bh6);\\n    lo = (lo + Math.imul(al8, bl7)) | 0;\\n    mid = (mid + Math.imul(al8, bh7)) | 0;\\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\\n    lo = (lo + Math.imul(al7, bl8)) | 0;\\n    mid = (mid + Math.imul(al7, bh8)) | 0;\\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\\n    lo = (lo + Math.imul(al6, bl9)) | 0;\\n    mid = (mid + Math.imul(al6, bh9)) | 0;\\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\\n    w15 &= 0x3ffffff;\\n    /* k = 16 */\\n    lo = Math.imul(al9, bl7);\\n    mid = Math.imul(al9, bh7);\\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\\n    hi = Math.imul(ah9, bh7);\\n    lo = (lo + Math.imul(al8, bl8)) | 0;\\n    mid = (mid + Math.imul(al8, bh8)) | 0;\\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\\n    lo = (lo + Math.imul(al7, bl9)) | 0;\\n    mid = (mid + Math.imul(al7, bh9)) | 0;\\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\\n    w16 &= 0x3ffffff;\\n    /* k = 17 */\\n    lo = Math.imul(al9, bl8);\\n    mid = Math.imul(al9, bh8);\\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\\n    hi = Math.imul(ah9, bh8);\\n    lo = (lo + Math.imul(al8, bl9)) | 0;\\n    mid = (mid + Math.imul(al8, bh9)) | 0;\\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\\n    w17 &= 0x3ffffff;\\n    /* k = 18 */\\n    lo = Math.imul(al9, bl9);\\n    mid = Math.imul(al9, bh9);\\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\\n    hi = Math.imul(ah9, bh9);\\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\\n    w18 &= 0x3ffffff;\\n    o[0] = w0;\\n    o[1] = w1;\\n    o[2] = w2;\\n    o[3] = w3;\\n    o[4] = w4;\\n    o[5] = w5;\\n    o[6] = w6;\\n    o[7] = w7;\\n    o[8] = w8;\\n    o[9] = w9;\\n    o[10] = w10;\\n    o[11] = w11;\\n    o[12] = w12;\\n    o[13] = w13;\\n    o[14] = w14;\\n    o[15] = w15;\\n    o[16] = w16;\\n    o[17] = w17;\\n    o[18] = w18;\\n    if (c !== 0) {\\n      o[19] = c;\\n      out.length++;\\n    }\\n    return out;\\n  };\\n\\n  // Polyfill comb\\n  if (!Math.imul) {\\n    comb10MulTo = smallMulTo;\\n  }\\n\\n  function bigMulTo (self, num, out) {\\n    out.negative = num.negative ^ self.negative;\\n    out.length = self.length + num.length;\\n\\n    var carry = 0;\\n    var hncarry = 0;\\n    for (var k = 0; k < out.length - 1; k++) {\\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\\n      // note that ncarry could be >= 0x3ffffff\\n      var ncarry = hncarry;\\n      hncarry = 0;\\n      var rword = carry & 0x3ffffff;\\n      var maxJ = Math.min(k, num.length - 1);\\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\\n        var i = k - j;\\n        var a = self.words[i] | 0;\\n        var b = num.words[j] | 0;\\n        var r = a * b;\\n\\n        var lo = r & 0x3ffffff;\\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\\n        lo = (lo + rword) | 0;\\n        rword = lo & 0x3ffffff;\\n        ncarry = (ncarry + (lo >>> 26)) | 0;\\n\\n        hncarry += ncarry >>> 26;\\n        ncarry &= 0x3ffffff;\\n      }\\n      out.words[k] = rword;\\n      carry = ncarry;\\n      ncarry = hncarry;\\n    }\\n    if (carry !== 0) {\\n      out.words[k] = carry;\\n    } else {\\n      out.length--;\\n    }\\n\\n    return out.strip();\\n  }\\n\\n  function jumboMulTo (self, num, out) {\\n    var fftm = new FFTM();\\n    return fftm.mulp(self, num, out);\\n  }\\n\\n  BN.prototype.mulTo = function mulTo (num, out) {\\n    var res;\\n    var len = this.length + num.length;\\n    if (this.length === 10 && num.length === 10) {\\n      res = comb10MulTo(this, num, out);\\n    } else if (len < 63) {\\n      res = smallMulTo(this, num, out);\\n    } else if (len < 1024) {\\n      res = bigMulTo(this, num, out);\\n    } else {\\n      res = jumboMulTo(this, num, out);\\n    }\\n\\n    return res;\\n  };\\n\\n  // Cooley-Tukey algorithm for FFT\\n  // slightly revisited to rely on looping instead of recursion\\n\\n  function FFTM (x, y) {\\n    this.x = x;\\n    this.y = y;\\n  }\\n\\n  FFTM.prototype.makeRBT = function makeRBT (N) {\\n    var t = new Array(N);\\n    var l = BN.prototype._countBits(N) - 1;\\n    for (var i = 0; i < N; i++) {\\n      t[i] = this.revBin(i, l, N);\\n    }\\n\\n    return t;\\n  };\\n\\n  // Returns binary-reversed representation of `x`\\n  FFTM.prototype.revBin = function revBin (x, l, N) {\\n    if (x === 0 || x === N - 1) return x;\\n\\n    var rb = 0;\\n    for (var i = 0; i < l; i++) {\\n      rb |= (x & 1) << (l - i - 1);\\n      x >>= 1;\\n    }\\n\\n    return rb;\\n  };\\n\\n  // Performs \\\"tweedling\\\" phase, therefore 'emulating'\\n  // behaviour of the recursive algorithm\\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\\n    for (var i = 0; i < N; i++) {\\n      rtws[i] = rws[rbt[i]];\\n      itws[i] = iws[rbt[i]];\\n    }\\n  };\\n\\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\\n    this.permute(rbt, rws, iws, rtws, itws, N);\\n\\n    for (var s = 1; s < N; s <<= 1) {\\n      var l = s << 1;\\n\\n      var rtwdf = Math.cos(2 * Math.PI / l);\\n      var itwdf = Math.sin(2 * Math.PI / l);\\n\\n      for (var p = 0; p < N; p += l) {\\n        var rtwdf_ = rtwdf;\\n        var itwdf_ = itwdf;\\n\\n        for (var j = 0; j < s; j++) {\\n          var re = rtws[p + j];\\n          var ie = itws[p + j];\\n\\n          var ro = rtws[p + j + s];\\n          var io = itws[p + j + s];\\n\\n          var rx = rtwdf_ * ro - itwdf_ * io;\\n\\n          io = rtwdf_ * io + itwdf_ * ro;\\n          ro = rx;\\n\\n          rtws[p + j] = re + ro;\\n          itws[p + j] = ie + io;\\n\\n          rtws[p + j + s] = re - ro;\\n          itws[p + j + s] = ie - io;\\n\\n          /* jshint maxdepth : false */\\n          if (j !== l) {\\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\\n\\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\\n            rtwdf_ = rx;\\n          }\\n        }\\n      }\\n    }\\n  };\\n\\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\\n    var N = Math.max(m, n) | 1;\\n    var odd = N & 1;\\n    var i = 0;\\n    for (N = N / 2 | 0; N; N = N >>> 1) {\\n      i++;\\n    }\\n\\n    return 1 << i + 1 + odd;\\n  };\\n\\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\\n    if (N <= 1) return;\\n\\n    for (var i = 0; i < N / 2; i++) {\\n      var t = rws[i];\\n\\n      rws[i] = rws[N - i - 1];\\n      rws[N - i - 1] = t;\\n\\n      t = iws[i];\\n\\n      iws[i] = -iws[N - i - 1];\\n      iws[N - i - 1] = -t;\\n    }\\n  };\\n\\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\\n    var carry = 0;\\n    for (var i = 0; i < N / 2; i++) {\\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\\n        Math.round(ws[2 * i] / N) +\\n        carry;\\n\\n      ws[i] = w & 0x3ffffff;\\n\\n      if (w < 0x4000000) {\\n        carry = 0;\\n      } else {\\n        carry = w / 0x4000000 | 0;\\n      }\\n    }\\n\\n    return ws;\\n  };\\n\\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\\n    var carry = 0;\\n    for (var i = 0; i < len; i++) {\\n      carry = carry + (ws[i] | 0);\\n\\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\\n    }\\n\\n    // Pad with zeroes\\n    for (i = 2 * len; i < N; ++i) {\\n      rws[i] = 0;\\n    }\\n\\n    assert(carry === 0);\\n    assert((carry & ~0x1fff) === 0);\\n  };\\n\\n  FFTM.prototype.stub = function stub (N) {\\n    var ph = new Array(N);\\n    for (var i = 0; i < N; i++) {\\n      ph[i] = 0;\\n    }\\n\\n    return ph;\\n  };\\n\\n  FFTM.prototype.mulp = function mulp (x, y, out) {\\n    var N = 2 * this.guessLen13b(x.length, y.length);\\n\\n    var rbt = this.makeRBT(N);\\n\\n    var _ = this.stub(N);\\n\\n    var rws = new Array(N);\\n    var rwst = new Array(N);\\n    var iwst = new Array(N);\\n\\n    var nrws = new Array(N);\\n    var nrwst = new Array(N);\\n    var niwst = new Array(N);\\n\\n    var rmws = out.words;\\n    rmws.length = N;\\n\\n    this.convert13b(x.words, x.length, rws, N);\\n    this.convert13b(y.words, y.length, nrws, N);\\n\\n    this.transform(rws, _, rwst, iwst, N, rbt);\\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\\n\\n    for (var i = 0; i < N; i++) {\\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\\n      rwst[i] = rx;\\n    }\\n\\n    this.conjugate(rwst, iwst, N);\\n    this.transform(rwst, iwst, rmws, _, N, rbt);\\n    this.conjugate(rmws, _, N);\\n    this.normalize13b(rmws, N);\\n\\n    out.negative = x.negative ^ y.negative;\\n    out.length = x.length + y.length;\\n    return out.strip();\\n  };\\n\\n  // Multiply `this` by `num`\\n  BN.prototype.mul = function mul (num) {\\n    var out = new BN(null);\\n    out.words = new Array(this.length + num.length);\\n    return this.mulTo(num, out);\\n  };\\n\\n  // Multiply employing FFT\\n  BN.prototype.mulf = function mulf (num) {\\n    var out = new BN(null);\\n    out.words = new Array(this.length + num.length);\\n    return jumboMulTo(this, num, out);\\n  };\\n\\n  // In-place Multiplication\\n  BN.prototype.imul = function imul (num) {\\n    return this.clone().mulTo(num, this);\\n  };\\n\\n  BN.prototype.imuln = function imuln (num) {\\n    assert(typeof num === 'number');\\n    assert(num < 0x4000000);\\n\\n    // Carry\\n    var carry = 0;\\n    for (var i = 0; i < this.length; i++) {\\n      var w = (this.words[i] | 0) * num;\\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\\n      carry >>= 26;\\n      carry += (w / 0x4000000) | 0;\\n      // NOTE: lo is 27bit maximum\\n      carry += lo >>> 26;\\n      this.words[i] = lo & 0x3ffffff;\\n    }\\n\\n    if (carry !== 0) {\\n      this.words[i] = carry;\\n      this.length++;\\n    }\\n\\n    return this;\\n  };\\n\\n  BN.prototype.muln = function muln (num) {\\n    return this.clone().imuln(num);\\n  };\\n\\n  // `this` * `this`\\n  BN.prototype.sqr = function sqr () {\\n    return this.mul(this);\\n  };\\n\\n  // `this` * `this` in-place\\n  BN.prototype.isqr = function isqr () {\\n    return this.imul(this.clone());\\n  };\\n\\n  // Math.pow(`this`, `num`)\\n  BN.prototype.pow = function pow (num) {\\n    var w = toBitArray(num);\\n    if (w.length === 0) return new BN(1);\\n\\n    // Skip leading zeroes\\n    var res = this;\\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\\n      if (w[i] !== 0) break;\\n    }\\n\\n    if (++i < w.length) {\\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\\n        if (w[i] === 0) continue;\\n\\n        res = res.mul(q);\\n      }\\n    }\\n\\n    return res;\\n  };\\n\\n  // Shift-left in-place\\n  BN.prototype.iushln = function iushln (bits) {\\n    assert(typeof bits === 'number' && bits >= 0);\\n    var r = bits % 26;\\n    var s = (bits - r) / 26;\\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\\n    var i;\\n\\n    if (r !== 0) {\\n      var carry = 0;\\n\\n      for (i = 0; i < this.length; i++) {\\n        var newCarry = this.words[i] & carryMask;\\n        var c = ((this.words[i] | 0) - newCarry) << r;\\n        this.words[i] = c | carry;\\n        carry = newCarry >>> (26 - r);\\n      }\\n\\n      if (carry) {\\n        this.words[i] = carry;\\n        this.length++;\\n      }\\n    }\\n\\n    if (s !== 0) {\\n      for (i = this.length - 1; i >= 0; i--) {\\n        this.words[i + s] = this.words[i];\\n      }\\n\\n      for (i = 0; i < s; i++) {\\n        this.words[i] = 0;\\n      }\\n\\n      this.length += s;\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.ishln = function ishln (bits) {\\n    // TODO(indutny): implement me\\n    assert(this.negative === 0);\\n    return this.iushln(bits);\\n  };\\n\\n  // Shift-right in-place\\n  // NOTE: `hint` is a lowest bit before trailing zeroes\\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\\n    assert(typeof bits === 'number' && bits >= 0);\\n    var h;\\n    if (hint) {\\n      h = (hint - (hint % 26)) / 26;\\n    } else {\\n      h = 0;\\n    }\\n\\n    var r = bits % 26;\\n    var s = Math.min((bits - r) / 26, this.length);\\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\\n    var maskedWords = extended;\\n\\n    h -= s;\\n    h = Math.max(0, h);\\n\\n    // Extended mode, copy masked part\\n    if (maskedWords) {\\n      for (var i = 0; i < s; i++) {\\n        maskedWords.words[i] = this.words[i];\\n      }\\n      maskedWords.length = s;\\n    }\\n\\n    if (s === 0) {\\n      // No-op, we should not move anything at all\\n    } else if (this.length > s) {\\n      this.length -= s;\\n      for (i = 0; i < this.length; i++) {\\n        this.words[i] = this.words[i + s];\\n      }\\n    } else {\\n      this.words[0] = 0;\\n      this.length = 1;\\n    }\\n\\n    var carry = 0;\\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\\n      var word = this.words[i] | 0;\\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\\n      carry = word & mask;\\n    }\\n\\n    // Push carried bits as a mask\\n    if (maskedWords && carry !== 0) {\\n      maskedWords.words[maskedWords.length++] = carry;\\n    }\\n\\n    if (this.length === 0) {\\n      this.words[0] = 0;\\n      this.length = 1;\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\\n    // TODO(indutny): implement me\\n    assert(this.negative === 0);\\n    return this.iushrn(bits, hint, extended);\\n  };\\n\\n  // Shift-left\\n  BN.prototype.shln = function shln (bits) {\\n    return this.clone().ishln(bits);\\n  };\\n\\n  BN.prototype.ushln = function ushln (bits) {\\n    return this.clone().iushln(bits);\\n  };\\n\\n  // Shift-right\\n  BN.prototype.shrn = function shrn (bits) {\\n    return this.clone().ishrn(bits);\\n  };\\n\\n  BN.prototype.ushrn = function ushrn (bits) {\\n    return this.clone().iushrn(bits);\\n  };\\n\\n  // Test if n bit is set\\n  BN.prototype.testn = function testn (bit) {\\n    assert(typeof bit === 'number' && bit >= 0);\\n    var r = bit % 26;\\n    var s = (bit - r) / 26;\\n    var q = 1 << r;\\n\\n    // Fast case: bit is much higher than all existing words\\n    if (this.length <= s) return false;\\n\\n    // Check bit and return\\n    var w = this.words[s];\\n\\n    return !!(w & q);\\n  };\\n\\n  // Return only lowers bits of number (in-place)\\n  BN.prototype.imaskn = function imaskn (bits) {\\n    assert(typeof bits === 'number' && bits >= 0);\\n    var r = bits % 26;\\n    var s = (bits - r) / 26;\\n\\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\\n\\n    if (this.length <= s) {\\n      return this;\\n    }\\n\\n    if (r !== 0) {\\n      s++;\\n    }\\n    this.length = Math.min(s, this.length);\\n\\n    if (r !== 0) {\\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\\n      this.words[this.length - 1] &= mask;\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  // Return only lowers bits of number\\n  BN.prototype.maskn = function maskn (bits) {\\n    return this.clone().imaskn(bits);\\n  };\\n\\n  // Add plain number `num` to `this`\\n  BN.prototype.iaddn = function iaddn (num) {\\n    assert(typeof num === 'number');\\n    assert(num < 0x4000000);\\n    if (num < 0) return this.isubn(-num);\\n\\n    // Possible sign change\\n    if (this.negative !== 0) {\\n      if (this.length === 1 && (this.words[0] | 0) < num) {\\n        this.words[0] = num - (this.words[0] | 0);\\n        this.negative = 0;\\n        return this;\\n      }\\n\\n      this.negative = 0;\\n      this.isubn(num);\\n      this.negative = 1;\\n      return this;\\n    }\\n\\n    // Add without checks\\n    return this._iaddn(num);\\n  };\\n\\n  BN.prototype._iaddn = function _iaddn (num) {\\n    this.words[0] += num;\\n\\n    // Carry\\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\\n      this.words[i] -= 0x4000000;\\n      if (i === this.length - 1) {\\n        this.words[i + 1] = 1;\\n      } else {\\n        this.words[i + 1]++;\\n      }\\n    }\\n    this.length = Math.max(this.length, i + 1);\\n\\n    return this;\\n  };\\n\\n  // Subtract plain number `num` from `this`\\n  BN.prototype.isubn = function isubn (num) {\\n    assert(typeof num === 'number');\\n    assert(num < 0x4000000);\\n    if (num < 0) return this.iaddn(-num);\\n\\n    if (this.negative !== 0) {\\n      this.negative = 0;\\n      this.iaddn(num);\\n      this.negative = 1;\\n      return this;\\n    }\\n\\n    this.words[0] -= num;\\n\\n    if (this.length === 1 && this.words[0] < 0) {\\n      this.words[0] = -this.words[0];\\n      this.negative = 1;\\n    } else {\\n      // Carry\\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\\n        this.words[i] += 0x4000000;\\n        this.words[i + 1] -= 1;\\n      }\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.addn = function addn (num) {\\n    return this.clone().iaddn(num);\\n  };\\n\\n  BN.prototype.subn = function subn (num) {\\n    return this.clone().isubn(num);\\n  };\\n\\n  BN.prototype.iabs = function iabs () {\\n    this.negative = 0;\\n\\n    return this;\\n  };\\n\\n  BN.prototype.abs = function abs () {\\n    return this.clone().iabs();\\n  };\\n\\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\\n    var len = num.length + shift;\\n    var i;\\n\\n    this._expand(len);\\n\\n    var w;\\n    var carry = 0;\\n    for (i = 0; i < num.length; i++) {\\n      w = (this.words[i + shift] | 0) + carry;\\n      var right = (num.words[i] | 0) * mul;\\n      w -= right & 0x3ffffff;\\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\\n      this.words[i + shift] = w & 0x3ffffff;\\n    }\\n    for (; i < this.length - shift; i++) {\\n      w = (this.words[i + shift] | 0) + carry;\\n      carry = w >> 26;\\n      this.words[i + shift] = w & 0x3ffffff;\\n    }\\n\\n    if (carry === 0) return this.strip();\\n\\n    // Subtraction overflow\\n    assert(carry === -1);\\n    carry = 0;\\n    for (i = 0; i < this.length; i++) {\\n      w = -(this.words[i] | 0) + carry;\\n      carry = w >> 26;\\n      this.words[i] = w & 0x3ffffff;\\n    }\\n    this.negative = 1;\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\\n    var shift = this.length - num.length;\\n\\n    var a = this.clone();\\n    var b = num;\\n\\n    // Normalize\\n    var bhi = b.words[b.length - 1] | 0;\\n    var bhiBits = this._countBits(bhi);\\n    shift = 26 - bhiBits;\\n    if (shift !== 0) {\\n      b = b.ushln(shift);\\n      a.iushln(shift);\\n      bhi = b.words[b.length - 1] | 0;\\n    }\\n\\n    // Initialize quotient\\n    var m = a.length - b.length;\\n    var q;\\n\\n    if (mode !== 'mod') {\\n      q = new BN(null);\\n      q.length = m + 1;\\n      q.words = new Array(q.length);\\n      for (var i = 0; i < q.length; i++) {\\n        q.words[i] = 0;\\n      }\\n    }\\n\\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\\n    if (diff.negative === 0) {\\n      a = diff;\\n      if (q) {\\n        q.words[m] = 1;\\n      }\\n    }\\n\\n    for (var j = m - 1; j >= 0; j--) {\\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\\n        (a.words[b.length + j - 1] | 0);\\n\\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\\n      // (0x7ffffff)\\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\\n\\n      a._ishlnsubmul(b, qj, j);\\n      while (a.negative !== 0) {\\n        qj--;\\n        a.negative = 0;\\n        a._ishlnsubmul(b, 1, j);\\n        if (!a.isZero()) {\\n          a.negative ^= 1;\\n        }\\n      }\\n      if (q) {\\n        q.words[j] = qj;\\n      }\\n    }\\n    if (q) {\\n      q.strip();\\n    }\\n    a.strip();\\n\\n    // Denormalize\\n    if (mode !== 'div' && shift !== 0) {\\n      a.iushrn(shift);\\n    }\\n\\n    return {\\n      div: q || null,\\n      mod: a\\n    };\\n  };\\n\\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\\n  //       to `div` to request div only, or be absent to\\n  //       request both div & mod\\n  //       2) `positive` is true if unsigned mod is requested\\n  BN.prototype.divmod = function divmod (num, mode, positive) {\\n    assert(!num.isZero());\\n\\n    if (this.isZero()) {\\n      return {\\n        div: new BN(0),\\n        mod: new BN(0)\\n      };\\n    }\\n\\n    var div, mod, res;\\n    if (this.negative !== 0 && num.negative === 0) {\\n      res = this.neg().divmod(num, mode);\\n\\n      if (mode !== 'mod') {\\n        div = res.div.neg();\\n      }\\n\\n      if (mode !== 'div') {\\n        mod = res.mod.neg();\\n        if (positive && mod.negative !== 0) {\\n          mod.iadd(num);\\n        }\\n      }\\n\\n      return {\\n        div: div,\\n        mod: mod\\n      };\\n    }\\n\\n    if (this.negative === 0 && num.negative !== 0) {\\n      res = this.divmod(num.neg(), mode);\\n\\n      if (mode !== 'mod') {\\n        div = res.div.neg();\\n      }\\n\\n      return {\\n        div: div,\\n        mod: res.mod\\n      };\\n    }\\n\\n    if ((this.negative & num.negative) !== 0) {\\n      res = this.neg().divmod(num.neg(), mode);\\n\\n      if (mode !== 'div') {\\n        mod = res.mod.neg();\\n        if (positive && mod.negative !== 0) {\\n          mod.isub(num);\\n        }\\n      }\\n\\n      return {\\n        div: res.div,\\n        mod: mod\\n      };\\n    }\\n\\n    // Both numbers are positive at this point\\n\\n    // Strip both numbers to approximate shift value\\n    if (num.length > this.length || this.cmp(num) < 0) {\\n      return {\\n        div: new BN(0),\\n        mod: this\\n      };\\n    }\\n\\n    // Very short reduction\\n    if (num.length === 1) {\\n      if (mode === 'div') {\\n        return {\\n          div: this.divn(num.words[0]),\\n          mod: null\\n        };\\n      }\\n\\n      if (mode === 'mod') {\\n        return {\\n          div: null,\\n          mod: new BN(this.modn(num.words[0]))\\n        };\\n      }\\n\\n      return {\\n        div: this.divn(num.words[0]),\\n        mod: new BN(this.modn(num.words[0]))\\n      };\\n    }\\n\\n    return this._wordDiv(num, mode);\\n  };\\n\\n  // Find `this` / `num`\\n  BN.prototype.div = function div (num) {\\n    return this.divmod(num, 'div', false).div;\\n  };\\n\\n  // Find `this` % `num`\\n  BN.prototype.mod = function mod (num) {\\n    return this.divmod(num, 'mod', false).mod;\\n  };\\n\\n  BN.prototype.umod = function umod (num) {\\n    return this.divmod(num, 'mod', true).mod;\\n  };\\n\\n  // Find Round(`this` / `num`)\\n  BN.prototype.divRound = function divRound (num) {\\n    var dm = this.divmod(num);\\n\\n    // Fast case - exact division\\n    if (dm.mod.isZero()) return dm.div;\\n\\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\\n\\n    var half = num.ushrn(1);\\n    var r2 = num.andln(1);\\n    var cmp = mod.cmp(half);\\n\\n    // Round down\\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\\n\\n    // Round up\\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\\n  };\\n\\n  BN.prototype.modn = function modn (num) {\\n    assert(num <= 0x3ffffff);\\n    var p = (1 << 26) % num;\\n\\n    var acc = 0;\\n    for (var i = this.length - 1; i >= 0; i--) {\\n      acc = (p * acc + (this.words[i] | 0)) % num;\\n    }\\n\\n    return acc;\\n  };\\n\\n  // In-place division by number\\n  BN.prototype.idivn = function idivn (num) {\\n    assert(num <= 0x3ffffff);\\n\\n    var carry = 0;\\n    for (var i = this.length - 1; i >= 0; i--) {\\n      var w = (this.words[i] | 0) + carry * 0x4000000;\\n      this.words[i] = (w / num) | 0;\\n      carry = w % num;\\n    }\\n\\n    return this.strip();\\n  };\\n\\n  BN.prototype.divn = function divn (num) {\\n    return this.clone().idivn(num);\\n  };\\n\\n  BN.prototype.egcd = function egcd (p) {\\n    assert(p.negative === 0);\\n    assert(!p.isZero());\\n\\n    var x = this;\\n    var y = p.clone();\\n\\n    if (x.negative !== 0) {\\n      x = x.umod(p);\\n    } else {\\n      x = x.clone();\\n    }\\n\\n    // A * x + B * y = x\\n    var A = new BN(1);\\n    var B = new BN(0);\\n\\n    // C * x + D * y = y\\n    var C = new BN(0);\\n    var D = new BN(1);\\n\\n    var g = 0;\\n\\n    while (x.isEven() && y.isEven()) {\\n      x.iushrn(1);\\n      y.iushrn(1);\\n      ++g;\\n    }\\n\\n    var yp = y.clone();\\n    var xp = x.clone();\\n\\n    while (!x.isZero()) {\\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\\n      if (i > 0) {\\n        x.iushrn(i);\\n        while (i-- > 0) {\\n          if (A.isOdd() || B.isOdd()) {\\n            A.iadd(yp);\\n            B.isub(xp);\\n          }\\n\\n          A.iushrn(1);\\n          B.iushrn(1);\\n        }\\n      }\\n\\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\\n      if (j > 0) {\\n        y.iushrn(j);\\n        while (j-- > 0) {\\n          if (C.isOdd() || D.isOdd()) {\\n            C.iadd(yp);\\n            D.isub(xp);\\n          }\\n\\n          C.iushrn(1);\\n          D.iushrn(1);\\n        }\\n      }\\n\\n      if (x.cmp(y) >= 0) {\\n        x.isub(y);\\n        A.isub(C);\\n        B.isub(D);\\n      } else {\\n        y.isub(x);\\n        C.isub(A);\\n        D.isub(B);\\n      }\\n    }\\n\\n    return {\\n      a: C,\\n      b: D,\\n      gcd: y.iushln(g)\\n    };\\n  };\\n\\n  // This is reduced incarnation of the binary EEA\\n  // above, designated to invert members of the\\n  // _prime_ fields F(p) at a maximal speed\\n  BN.prototype._invmp = function _invmp (p) {\\n    assert(p.negative === 0);\\n    assert(!p.isZero());\\n\\n    var a = this;\\n    var b = p.clone();\\n\\n    if (a.negative !== 0) {\\n      a = a.umod(p);\\n    } else {\\n      a = a.clone();\\n    }\\n\\n    var x1 = new BN(1);\\n    var x2 = new BN(0);\\n\\n    var delta = b.clone();\\n\\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\\n      if (i > 0) {\\n        a.iushrn(i);\\n        while (i-- > 0) {\\n          if (x1.isOdd()) {\\n            x1.iadd(delta);\\n          }\\n\\n          x1.iushrn(1);\\n        }\\n      }\\n\\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\\n      if (j > 0) {\\n        b.iushrn(j);\\n        while (j-- > 0) {\\n          if (x2.isOdd()) {\\n            x2.iadd(delta);\\n          }\\n\\n          x2.iushrn(1);\\n        }\\n      }\\n\\n      if (a.cmp(b) >= 0) {\\n        a.isub(b);\\n        x1.isub(x2);\\n      } else {\\n        b.isub(a);\\n        x2.isub(x1);\\n      }\\n    }\\n\\n    var res;\\n    if (a.cmpn(1) === 0) {\\n      res = x1;\\n    } else {\\n      res = x2;\\n    }\\n\\n    if (res.cmpn(0) < 0) {\\n      res.iadd(p);\\n    }\\n\\n    return res;\\n  };\\n\\n  BN.prototype.gcd = function gcd (num) {\\n    if (this.isZero()) return num.abs();\\n    if (num.isZero()) return this.abs();\\n\\n    var a = this.clone();\\n    var b = num.clone();\\n    a.negative = 0;\\n    b.negative = 0;\\n\\n    // Remove common factor of two\\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\\n      a.iushrn(1);\\n      b.iushrn(1);\\n    }\\n\\n    do {\\n      while (a.isEven()) {\\n        a.iushrn(1);\\n      }\\n      while (b.isEven()) {\\n        b.iushrn(1);\\n      }\\n\\n      var r = a.cmp(b);\\n      if (r < 0) {\\n        // Swap `a` and `b` to make `a` always bigger than `b`\\n        var t = a;\\n        a = b;\\n        b = t;\\n      } else if (r === 0 || b.cmpn(1) === 0) {\\n        break;\\n      }\\n\\n      a.isub(b);\\n    } while (true);\\n\\n    return b.iushln(shift);\\n  };\\n\\n  // Invert number in the field F(num)\\n  BN.prototype.invm = function invm (num) {\\n    return this.egcd(num).a.umod(num);\\n  };\\n\\n  BN.prototype.isEven = function isEven () {\\n    return (this.words[0] & 1) === 0;\\n  };\\n\\n  BN.prototype.isOdd = function isOdd () {\\n    return (this.words[0] & 1) === 1;\\n  };\\n\\n  // And first word and num\\n  BN.prototype.andln = function andln (num) {\\n    return this.words[0] & num;\\n  };\\n\\n  // Increment at the bit position in-line\\n  BN.prototype.bincn = function bincn (bit) {\\n    assert(typeof bit === 'number');\\n    var r = bit % 26;\\n    var s = (bit - r) / 26;\\n    var q = 1 << r;\\n\\n    // Fast case: bit is much higher than all existing words\\n    if (this.length <= s) {\\n      this._expand(s + 1);\\n      this.words[s] |= q;\\n      return this;\\n    }\\n\\n    // Add bit and propagate, if needed\\n    var carry = q;\\n    for (var i = s; carry !== 0 && i < this.length; i++) {\\n      var w = this.words[i] | 0;\\n      w += carry;\\n      carry = w >>> 26;\\n      w &= 0x3ffffff;\\n      this.words[i] = w;\\n    }\\n    if (carry !== 0) {\\n      this.words[i] = carry;\\n      this.length++;\\n    }\\n    return this;\\n  };\\n\\n  BN.prototype.isZero = function isZero () {\\n    return this.length === 1 && this.words[0] === 0;\\n  };\\n\\n  BN.prototype.cmpn = function cmpn (num) {\\n    var negative = num < 0;\\n\\n    if (this.negative !== 0 && !negative) return -1;\\n    if (this.negative === 0 && negative) return 1;\\n\\n    this.strip();\\n\\n    var res;\\n    if (this.length > 1) {\\n      res = 1;\\n    } else {\\n      if (negative) {\\n        num = -num;\\n      }\\n\\n      assert(num <= 0x3ffffff, 'Number is too big');\\n\\n      var w = this.words[0] | 0;\\n      res = w === num ? 0 : w < num ? -1 : 1;\\n    }\\n    if (this.negative !== 0) return -res | 0;\\n    return res;\\n  };\\n\\n  // Compare two numbers and return:\\n  // 1 - if `this` > `num`\\n  // 0 - if `this` == `num`\\n  // -1 - if `this` < `num`\\n  BN.prototype.cmp = function cmp (num) {\\n    if (this.negative !== 0 && num.negative === 0) return -1;\\n    if (this.negative === 0 && num.negative !== 0) return 1;\\n\\n    var res = this.ucmp(num);\\n    if (this.negative !== 0) return -res | 0;\\n    return res;\\n  };\\n\\n  // Unsigned comparison\\n  BN.prototype.ucmp = function ucmp (num) {\\n    // At this point both numbers have the same sign\\n    if (this.length > num.length) return 1;\\n    if (this.length < num.length) return -1;\\n\\n    var res = 0;\\n    for (var i = this.length - 1; i >= 0; i--) {\\n      var a = this.words[i] | 0;\\n      var b = num.words[i] | 0;\\n\\n      if (a === b) continue;\\n      if (a < b) {\\n        res = -1;\\n      } else if (a > b) {\\n        res = 1;\\n      }\\n      break;\\n    }\\n    return res;\\n  };\\n\\n  BN.prototype.gtn = function gtn (num) {\\n    return this.cmpn(num) === 1;\\n  };\\n\\n  BN.prototype.gt = function gt (num) {\\n    return this.cmp(num) === 1;\\n  };\\n\\n  BN.prototype.gten = function gten (num) {\\n    return this.cmpn(num) >= 0;\\n  };\\n\\n  BN.prototype.gte = function gte (num) {\\n    return this.cmp(num) >= 0;\\n  };\\n\\n  BN.prototype.ltn = function ltn (num) {\\n    return this.cmpn(num) === -1;\\n  };\\n\\n  BN.prototype.lt = function lt (num) {\\n    return this.cmp(num) === -1;\\n  };\\n\\n  BN.prototype.lten = function lten (num) {\\n    return this.cmpn(num) <= 0;\\n  };\\n\\n  BN.prototype.lte = function lte (num) {\\n    return this.cmp(num) <= 0;\\n  };\\n\\n  BN.prototype.eqn = function eqn (num) {\\n    return this.cmpn(num) === 0;\\n  };\\n\\n  BN.prototype.eq = function eq (num) {\\n    return this.cmp(num) === 0;\\n  };\\n\\n  //\\n  // A reduce context, could be using montgomery or something better, depending\\n  // on the `m` itself.\\n  //\\n  BN.red = function red (num) {\\n    return new Red(num);\\n  };\\n\\n  BN.prototype.toRed = function toRed (ctx) {\\n    assert(!this.red, 'Already a number in reduction context');\\n    assert(this.negative === 0, 'red works only with positives');\\n    return ctx.convertTo(this)._forceRed(ctx);\\n  };\\n\\n  BN.prototype.fromRed = function fromRed () {\\n    assert(this.red, 'fromRed works only with numbers in reduction context');\\n    return this.red.convertFrom(this);\\n  };\\n\\n  BN.prototype._forceRed = function _forceRed (ctx) {\\n    this.red = ctx;\\n    return this;\\n  };\\n\\n  BN.prototype.forceRed = function forceRed (ctx) {\\n    assert(!this.red, 'Already a number in reduction context');\\n    return this._forceRed(ctx);\\n  };\\n\\n  BN.prototype.redAdd = function redAdd (num) {\\n    assert(this.red, 'redAdd works only with red numbers');\\n    return this.red.add(this, num);\\n  };\\n\\n  BN.prototype.redIAdd = function redIAdd (num) {\\n    assert(this.red, 'redIAdd works only with red numbers');\\n    return this.red.iadd(this, num);\\n  };\\n\\n  BN.prototype.redSub = function redSub (num) {\\n    assert(this.red, 'redSub works only with red numbers');\\n    return this.red.sub(this, num);\\n  };\\n\\n  BN.prototype.redISub = function redISub (num) {\\n    assert(this.red, 'redISub works only with red numbers');\\n    return this.red.isub(this, num);\\n  };\\n\\n  BN.prototype.redShl = function redShl (num) {\\n    assert(this.red, 'redShl works only with red numbers');\\n    return this.red.shl(this, num);\\n  };\\n\\n  BN.prototype.redMul = function redMul (num) {\\n    assert(this.red, 'redMul works only with red numbers');\\n    this.red._verify2(this, num);\\n    return this.red.mul(this, num);\\n  };\\n\\n  BN.prototype.redIMul = function redIMul (num) {\\n    assert(this.red, 'redMul works only with red numbers');\\n    this.red._verify2(this, num);\\n    return this.red.imul(this, num);\\n  };\\n\\n  BN.prototype.redSqr = function redSqr () {\\n    assert(this.red, 'redSqr works only with red numbers');\\n    this.red._verify1(this);\\n    return this.red.sqr(this);\\n  };\\n\\n  BN.prototype.redISqr = function redISqr () {\\n    assert(this.red, 'redISqr works only with red numbers');\\n    this.red._verify1(this);\\n    return this.red.isqr(this);\\n  };\\n\\n  // Square root over p\\n  BN.prototype.redSqrt = function redSqrt () {\\n    assert(this.red, 'redSqrt works only with red numbers');\\n    this.red._verify1(this);\\n    return this.red.sqrt(this);\\n  };\\n\\n  BN.prototype.redInvm = function redInvm () {\\n    assert(this.red, 'redInvm works only with red numbers');\\n    this.red._verify1(this);\\n    return this.red.invm(this);\\n  };\\n\\n  // Return negative clone of `this` % `red modulo`\\n  BN.prototype.redNeg = function redNeg () {\\n    assert(this.red, 'redNeg works only with red numbers');\\n    this.red._verify1(this);\\n    return this.red.neg(this);\\n  };\\n\\n  BN.prototype.redPow = function redPow (num) {\\n    assert(this.red && !num.red, 'redPow(normalNum)');\\n    this.red._verify1(this);\\n    return this.red.pow(this, num);\\n  };\\n\\n  // Prime numbers with efficient reduction\\n  var primes = {\\n    k256: null,\\n    p224: null,\\n    p192: null,\\n    p25519: null\\n  };\\n\\n  // Pseudo-Mersenne prime\\n  function MPrime (name, p) {\\n    // P = 2 ^ N - K\\n    this.name = name;\\n    this.p = new BN(p, 16);\\n    this.n = this.p.bitLength();\\n    this.k = new BN(1).iushln(this.n).isub(this.p);\\n\\n    this.tmp = this._tmp();\\n  }\\n\\n  MPrime.prototype._tmp = function _tmp () {\\n    var tmp = new BN(null);\\n    tmp.words = new Array(Math.ceil(this.n / 13));\\n    return tmp;\\n  };\\n\\n  MPrime.prototype.ireduce = function ireduce (num) {\\n    // Assumes that `num` is less than `P^2`\\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\\n    var r = num;\\n    var rlen;\\n\\n    do {\\n      this.split(r, this.tmp);\\n      r = this.imulK(r);\\n      r = r.iadd(this.tmp);\\n      rlen = r.bitLength();\\n    } while (rlen > this.n);\\n\\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\\n    if (cmp === 0) {\\n      r.words[0] = 0;\\n      r.length = 1;\\n    } else if (cmp > 0) {\\n      r.isub(this.p);\\n    } else {\\n      if (r.strip !== undefined) {\\n        // r is BN v4 instance\\n        r.strip();\\n      } else {\\n        // r is BN v5 instance\\n        r._strip();\\n      }\\n    }\\n\\n    return r;\\n  };\\n\\n  MPrime.prototype.split = function split (input, out) {\\n    input.iushrn(this.n, 0, out);\\n  };\\n\\n  MPrime.prototype.imulK = function imulK (num) {\\n    return num.imul(this.k);\\n  };\\n\\n  function K256 () {\\n    MPrime.call(\\n      this,\\n      'k256',\\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\\n  }\\n  inherits(K256, MPrime);\\n\\n  K256.prototype.split = function split (input, output) {\\n    // 256 = 9 * 26 + 22\\n    var mask = 0x3fffff;\\n\\n    var outLen = Math.min(input.length, 9);\\n    for (var i = 0; i < outLen; i++) {\\n      output.words[i] = input.words[i];\\n    }\\n    output.length = outLen;\\n\\n    if (input.length <= 9) {\\n      input.words[0] = 0;\\n      input.length = 1;\\n      return;\\n    }\\n\\n    // Shift by 9 limbs\\n    var prev = input.words[9];\\n    output.words[output.length++] = prev & mask;\\n\\n    for (i = 10; i < input.length; i++) {\\n      var next = input.words[i] | 0;\\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\\n      prev = next;\\n    }\\n    prev >>>= 22;\\n    input.words[i - 10] = prev;\\n    if (prev === 0 && input.length > 10) {\\n      input.length -= 10;\\n    } else {\\n      input.length -= 9;\\n    }\\n  };\\n\\n  K256.prototype.imulK = function imulK (num) {\\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\\n    num.words[num.length] = 0;\\n    num.words[num.length + 1] = 0;\\n    num.length += 2;\\n\\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\\n    var lo = 0;\\n    for (var i = 0; i < num.length; i++) {\\n      var w = num.words[i] | 0;\\n      lo += w * 0x3d1;\\n      num.words[i] = lo & 0x3ffffff;\\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\\n    }\\n\\n    // Fast length reduction\\n    if (num.words[num.length - 1] === 0) {\\n      num.length--;\\n      if (num.words[num.length - 1] === 0) {\\n        num.length--;\\n      }\\n    }\\n    return num;\\n  };\\n\\n  function P224 () {\\n    MPrime.call(\\n      this,\\n      'p224',\\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\\n  }\\n  inherits(P224, MPrime);\\n\\n  function P192 () {\\n    MPrime.call(\\n      this,\\n      'p192',\\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\\n  }\\n  inherits(P192, MPrime);\\n\\n  function P25519 () {\\n    // 2 ^ 255 - 19\\n    MPrime.call(\\n      this,\\n      '25519',\\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\\n  }\\n  inherits(P25519, MPrime);\\n\\n  P25519.prototype.imulK = function imulK (num) {\\n    // K = 0x13\\n    var carry = 0;\\n    for (var i = 0; i < num.length; i++) {\\n      var hi = (num.words[i] | 0) * 0x13 + carry;\\n      var lo = hi & 0x3ffffff;\\n      hi >>>= 26;\\n\\n      num.words[i] = lo;\\n      carry = hi;\\n    }\\n    if (carry !== 0) {\\n      num.words[num.length++] = carry;\\n    }\\n    return num;\\n  };\\n\\n  // Exported mostly for testing purposes, use plain name instead\\n  BN._prime = function prime (name) {\\n    // Cached version of prime\\n    if (primes[name]) return primes[name];\\n\\n    var prime;\\n    if (name === 'k256') {\\n      prime = new K256();\\n    } else if (name === 'p224') {\\n      prime = new P224();\\n    } else if (name === 'p192') {\\n      prime = new P192();\\n    } else if (name === 'p25519') {\\n      prime = new P25519();\\n    } else {\\n      throw new Error('Unknown prime ' + name);\\n    }\\n    primes[name] = prime;\\n\\n    return prime;\\n  };\\n\\n  //\\n  // Base reduction engine\\n  //\\n  function Red (m) {\\n    if (typeof m === 'string') {\\n      var prime = BN._prime(m);\\n      this.m = prime.p;\\n      this.prime = prime;\\n    } else {\\n      assert(m.gtn(1), 'modulus must be greater than 1');\\n      this.m = m;\\n      this.prime = null;\\n    }\\n  }\\n\\n  Red.prototype._verify1 = function _verify1 (a) {\\n    assert(a.negative === 0, 'red works only with positives');\\n    assert(a.red, 'red works only with red numbers');\\n  };\\n\\n  Red.prototype._verify2 = function _verify2 (a, b) {\\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\\n    assert(a.red && a.red === b.red,\\n      'red works only with red numbers');\\n  };\\n\\n  Red.prototype.imod = function imod (a) {\\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\\n    return a.umod(this.m)._forceRed(this);\\n  };\\n\\n  Red.prototype.neg = function neg (a) {\\n    if (a.isZero()) {\\n      return a.clone();\\n    }\\n\\n    return this.m.sub(a)._forceRed(this);\\n  };\\n\\n  Red.prototype.add = function add (a, b) {\\n    this._verify2(a, b);\\n\\n    var res = a.add(b);\\n    if (res.cmp(this.m) >= 0) {\\n      res.isub(this.m);\\n    }\\n    return res._forceRed(this);\\n  };\\n\\n  Red.prototype.iadd = function iadd (a, b) {\\n    this._verify2(a, b);\\n\\n    var res = a.iadd(b);\\n    if (res.cmp(this.m) >= 0) {\\n      res.isub(this.m);\\n    }\\n    return res;\\n  };\\n\\n  Red.prototype.sub = function sub (a, b) {\\n    this._verify2(a, b);\\n\\n    var res = a.sub(b);\\n    if (res.cmpn(0) < 0) {\\n      res.iadd(this.m);\\n    }\\n    return res._forceRed(this);\\n  };\\n\\n  Red.prototype.isub = function isub (a, b) {\\n    this._verify2(a, b);\\n\\n    var res = a.isub(b);\\n    if (res.cmpn(0) < 0) {\\n      res.iadd(this.m);\\n    }\\n    return res;\\n  };\\n\\n  Red.prototype.shl = function shl (a, num) {\\n    this._verify1(a);\\n    return this.imod(a.ushln(num));\\n  };\\n\\n  Red.prototype.imul = function imul (a, b) {\\n    this._verify2(a, b);\\n    return this.imod(a.imul(b));\\n  };\\n\\n  Red.prototype.mul = function mul (a, b) {\\n    this._verify2(a, b);\\n    return this.imod(a.mul(b));\\n  };\\n\\n  Red.prototype.isqr = function isqr (a) {\\n    return this.imul(a, a.clone());\\n  };\\n\\n  Red.prototype.sqr = function sqr (a) {\\n    return this.mul(a, a);\\n  };\\n\\n  Red.prototype.sqrt = function sqrt (a) {\\n    if (a.isZero()) return a.clone();\\n\\n    var mod3 = this.m.andln(3);\\n    assert(mod3 % 2 === 1);\\n\\n    // Fast case\\n    if (mod3 === 3) {\\n      var pow = this.m.add(new BN(1)).iushrn(2);\\n      return this.pow(a, pow);\\n    }\\n\\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\\n    //\\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\\n    var q = this.m.subn(1);\\n    var s = 0;\\n    while (!q.isZero() && q.andln(1) === 0) {\\n      s++;\\n      q.iushrn(1);\\n    }\\n    assert(!q.isZero());\\n\\n    var one = new BN(1).toRed(this);\\n    var nOne = one.redNeg();\\n\\n    // Find quadratic non-residue\\n    // NOTE: Max is such because of generalized Riemann hypothesis.\\n    var lpow = this.m.subn(1).iushrn(1);\\n    var z = this.m.bitLength();\\n    z = new BN(2 * z * z).toRed(this);\\n\\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\\n      z.redIAdd(nOne);\\n    }\\n\\n    var c = this.pow(z, q);\\n    var r = this.pow(a, q.addn(1).iushrn(1));\\n    var t = this.pow(a, q);\\n    var m = s;\\n    while (t.cmp(one) !== 0) {\\n      var tmp = t;\\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\\n        tmp = tmp.redSqr();\\n      }\\n      assert(i < m);\\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\\n\\n      r = r.redMul(b);\\n      c = b.redSqr();\\n      t = t.redMul(c);\\n      m = i;\\n    }\\n\\n    return r;\\n  };\\n\\n  Red.prototype.invm = function invm (a) {\\n    var inv = a._invmp(this.m);\\n    if (inv.negative !== 0) {\\n      inv.negative = 0;\\n      return this.imod(inv).redNeg();\\n    } else {\\n      return this.imod(inv);\\n    }\\n  };\\n\\n  Red.prototype.pow = function pow (a, num) {\\n    if (num.isZero()) return new BN(1).toRed(this);\\n    if (num.cmpn(1) === 0) return a.clone();\\n\\n    var windowSize = 4;\\n    var wnd = new Array(1 << windowSize);\\n    wnd[0] = new BN(1).toRed(this);\\n    wnd[1] = a;\\n    for (var i = 2; i < wnd.length; i++) {\\n      wnd[i] = this.mul(wnd[i - 1], a);\\n    }\\n\\n    var res = wnd[0];\\n    var current = 0;\\n    var currentLen = 0;\\n    var start = num.bitLength() % 26;\\n    if (start === 0) {\\n      start = 26;\\n    }\\n\\n    for (i = num.length - 1; i >= 0; i--) {\\n      var word = num.words[i];\\n      for (var j = start - 1; j >= 0; j--) {\\n        var bit = (word >> j) & 1;\\n        if (res !== wnd[0]) {\\n          res = this.sqr(res);\\n        }\\n\\n        if (bit === 0 && current === 0) {\\n          currentLen = 0;\\n          continue;\\n        }\\n\\n        current <<= 1;\\n        current |= bit;\\n        currentLen++;\\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\\n\\n        res = this.mul(res, wnd[current]);\\n        currentLen = 0;\\n        current = 0;\\n      }\\n      start = 26;\\n    }\\n\\n    return res;\\n  };\\n\\n  Red.prototype.convertTo = function convertTo (num) {\\n    var r = num.umod(this.m);\\n\\n    return r === num ? r.clone() : r;\\n  };\\n\\n  Red.prototype.convertFrom = function convertFrom (num) {\\n    var res = num.clone();\\n    res.red = null;\\n    return res;\\n  };\\n\\n  //\\n  // Montgomery method engine\\n  //\\n\\n  BN.mont = function mont (num) {\\n    return new Mont(num);\\n  };\\n\\n  function Mont (m) {\\n    Red.call(this, m);\\n\\n    this.shift = this.m.bitLength();\\n    if (this.shift % 26 !== 0) {\\n      this.shift += 26 - (this.shift % 26);\\n    }\\n\\n    this.r = new BN(1).iushln(this.shift);\\n    this.r2 = this.imod(this.r.sqr());\\n    this.rinv = this.r._invmp(this.m);\\n\\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\\n    this.minv = this.minv.umod(this.r);\\n    this.minv = this.r.sub(this.minv);\\n  }\\n  inherits(Mont, Red);\\n\\n  Mont.prototype.convertTo = function convertTo (num) {\\n    return this.imod(num.ushln(this.shift));\\n  };\\n\\n  Mont.prototype.convertFrom = function convertFrom (num) {\\n    var r = this.imod(num.mul(this.rinv));\\n    r.red = null;\\n    return r;\\n  };\\n\\n  Mont.prototype.imul = function imul (a, b) {\\n    if (a.isZero() || b.isZero()) {\\n      a.words[0] = 0;\\n      a.length = 1;\\n      return a;\\n    }\\n\\n    var t = a.imul(b);\\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\\n    var u = t.isub(c).iushrn(this.shift);\\n    var res = u;\\n\\n    if (u.cmp(this.m) >= 0) {\\n      res = u.isub(this.m);\\n    } else if (u.cmpn(0) < 0) {\\n      res = u.iadd(this.m);\\n    }\\n\\n    return res._forceRed(this);\\n  };\\n\\n  Mont.prototype.mul = function mul (a, b) {\\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\\n\\n    var t = a.mul(b);\\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\\n    var u = t.isub(c).iushrn(this.shift);\\n    var res = u;\\n    if (u.cmp(this.m) >= 0) {\\n      res = u.isub(this.m);\\n    } else if (u.cmpn(0) < 0) {\\n      res = u.iadd(this.m);\\n    }\\n\\n    return res._forceRed(this);\\n  };\\n\\n  Mont.prototype.invm = function invm (a) {\\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\\n    return res._forceRed(this);\\n  };\\n})(typeof module === 'undefined' || module, this);\\n\\n};\"],\n\"names\":[\"shadow$provide\",\"global\",\"require\",\"module\",\"exports\",\"assert\",\"val\",\"msg\",\"Error\",\"inherits\",\"ctor\",\"superCtor\",\"super_\",\"TempCtor\",\"prototype\",\"constructor\",\"BN\",\"number\",\"base\",\"endian\",\"isBN\",\"negative\",\"words\",\"length\",\"red\",\"_init\",\"parseHex4Bits\",\"string\",\"index\",\"c\",\"charCodeAt\",\"parseHexByte\",\"lowerBound\",\"r\",\"parseBase\",\"str\",\"start\",\"end\",\"mul\",\"len\",\"Math\",\"min\",\"i\",\"smallMulTo\",\"self\",\"num\",\"out\",\"a\",\"b\",\"carry\",\"k\",\"ncarry\",\"rword\",\"maxJ\",\"j\",\"max\",\"strip\",\"FFTM\",\"x\",\"y\",\"MPrime\",\"name\",\"p\",\"n\",\"bitLength\",\"iushln\",\"isub\",\"tmp\",\"_tmp\",\"K256\",\"call\",\"P224\",\"P192\",\"P25519\",\"Red\",\"m\",\"prime\",\"_prime\",\"gtn\",\"Mont\",\"shift\",\"r2\",\"imod\",\"sqr\",\"rinv\",\"_invmp\",\"minv\",\"isubn\",\"div\",\"umod\",\"sub\",\"wordSize\",\"Buffer\",\"window\",\"e\",\"BN.isBN\",\"Array\",\"isArray\",\"BN.max\",\"left\",\"right\",\"cmp\",\"BN.min\",\"BN.prototype._init\",\"_initNumber\",\"_initArray\",\"toString\",\"replace\",\"_parseHex\",\"_parseBase\",\"toArray\",\"BN.prototype._initNumber\",\"BN.prototype._initArray\",\"ceil\",\"off\",\"w\",\"BN.prototype._parseHex\",\"BN.prototype._parseBase\",\"limbLen\",\"limbPow\",\"total\",\"mod\",\"word\",\"imuln\",\"_iaddn\",\"pow\",\"copy\",\"BN.prototype.copy\",\"dest\",\"clone\",\"BN.prototype.clone\",\"_expand\",\"BN.prototype._expand\",\"size\",\"BN.prototype.strip\",\"_normSign\",\"BN.prototype._normSign\",\"inspect\",\"BN.prototype.inspect\",\"zeros\",\"groupSizes\",\"groupBases\",\"BN.prototype.toString\",\"padding\",\"groupSize\",\"groupBase\",\"isZero\",\"modn\",\"idivn\",\"toNumber\",\"BN.prototype.toNumber\",\"ret\",\"toJSON\",\"BN.prototype.toJSON\",\"toBuffer\",\"BN.prototype.toBuffer\",\"toArrayLike\",\"BN.prototype.toArray\",\"BN.prototype.toArrayLike\",\"ArrayType\",\"byteLength\",\"reqLength\",\"littleEndian\",\"res\",\"q\",\"andln\",\"iushrn\",\"_countBits\",\"clz32\",\"BN.prototype._countBits\",\"t\",\"_zeroBits\",\"BN.prototype._zeroBits\",\"BN.prototype.bitLength\",\"hi\",\"zeroBits\",\"BN.prototype.zeroBits\",\"BN.prototype.byteLength\",\"toTwos\",\"BN.prototype.toTwos\",\"width\",\"abs\",\"inotn\",\"iaddn\",\"fromTwos\",\"BN.prototype.fromTwos\",\"testn\",\"notn\",\"ineg\",\"isNeg\",\"BN.prototype.isNeg\",\"neg\",\"BN.prototype.neg\",\"BN.prototype.ineg\",\"iuor\",\"BN.prototype.iuor\",\"ior\",\"BN.prototype.ior\",\"or\",\"BN.prototype.or\",\"uor\",\"BN.prototype.uor\",\"iuand\",\"BN.prototype.iuand\",\"iand\",\"BN.prototype.iand\",\"and\",\"BN.prototype.and\",\"uand\",\"BN.prototype.uand\",\"iuxor\",\"BN.prototype.iuxor\",\"ixor\",\"BN.prototype.ixor\",\"xor\",\"BN.prototype.xor\",\"uxor\",\"BN.prototype.uxor\",\"BN.prototype.inotn\",\"bytesNeeded\",\"bitsLeft\",\"BN.prototype.notn\",\"setn\",\"BN.prototype.setn\",\"bit\",\"wbit\",\"iadd\",\"BN.prototype.iadd\",\"add\",\"BN.prototype.add\",\"BN.prototype.isub\",\"BN.prototype.sub\",\"comb10MulTo\",\"o\",\"a0\",\"al0\",\"ah0\",\"a1\",\"al1\",\"ah1\",\"a2\",\"al2\",\"ah2\",\"a3\",\"al3\",\"ah3\",\"a4\",\"al4\",\"ah4\",\"a5\",\"al5\",\"ah5\",\"a6\",\"al6\",\"ah6\",\"a7\",\"al7\",\"ah7\",\"a8\",\"al8\",\"ah8\",\"a9\",\"al9\",\"ah9\",\"b0\",\"bl0\",\"bh0\",\"b1\",\"bl1\",\"bh1\",\"b2\",\"bl2\",\"bh2\",\"b3\",\"bl3\",\"bh3\",\"b4\",\"bl4\",\"bh4\",\"b5\",\"bl5\",\"bh5\",\"b6\",\"bl6\",\"bh6\",\"b7\",\"bl7\",\"bh7\",\"b8\",\"bl8\",\"bh8\",\"b9\",\"bl9\",\"bh9\",\"lo\",\"imul\",\"mid\",\"w0\",\"w1\",\"w2\",\"w3\",\"w4\",\"w5\",\"w6\",\"w7\",\"w8\",\"w9\",\"w10\",\"w11\",\"w12\",\"w13\",\"w14\",\"w15\",\"w16\",\"w17\",\"w18\",\"mulTo\",\"BN.prototype.mulTo\",\"hncarry\",\"mulp\",\"fftm\",\"makeRBT\",\"FFTM.prototype.makeRBT\",\"N\",\"l\",\"revBin\",\"FFTM.prototype.revBin\",\"rb\",\"permute\",\"FFTM.prototype.permute\",\"rbt\",\"rws\",\"iws\",\"rtws\",\"itws\",\"transform\",\"FFTM.prototype.transform\",\"s\",\"rtwdf\",\"cos\",\"PI\",\"itwdf\",\"sin\",\"rtwdf_\",\"itwdf_\",\"re\",\"ie\",\"ro\",\"io\",\"rx\",\"guessLen13b\",\"FFTM.prototype.guessLen13b\",\"odd\",\"conjugate\",\"FFTM.prototype.conjugate\",\"normalize13b\",\"FFTM.prototype.normalize13b\",\"ws\",\"round\",\"convert13b\",\"FFTM.prototype.convert13b\",\"stub\",\"FFTM.prototype.stub\",\"ph\",\"FFTM.prototype.mulp\",\"_\",\"rwst\",\"iwst\",\"nrws\",\"nrwst\",\"niwst\",\"rmws\",\"BN.prototype.mul\",\"mulf\",\"BN.prototype.mulf\",\"BN.prototype.imul\",\"BN.prototype.imuln\",\"muln\",\"BN.prototype.muln\",\"BN.prototype.sqr\",\"isqr\",\"BN.prototype.isqr\",\"BN.prototype.pow\",\"BN.prototype.iushln\",\"bits\",\"carryMask\",\"newCarry\",\"ishln\",\"BN.prototype.ishln\",\"BN.prototype.iushrn\",\"hint\",\"extended\",\"mask\",\"h\",\"ishrn\",\"BN.prototype.ishrn\",\"shln\",\"BN.prototype.shln\",\"ushln\",\"BN.prototype.ushln\",\"shrn\",\"BN.prototype.shrn\",\"ushrn\",\"BN.prototype.ushrn\",\"BN.prototype.testn\",\"imaskn\",\"BN.prototype.imaskn\",\"maskn\",\"BN.prototype.maskn\",\"BN.prototype.iaddn\",\"BN.prototype._iaddn\",\"BN.prototype.isubn\",\"addn\",\"BN.prototype.addn\",\"subn\",\"BN.prototype.subn\",\"iabs\",\"BN.prototype.iabs\",\"BN.prototype.abs\",\"_ishlnsubmul\",\"BN.prototype._ishlnsubmul\",\"_wordDiv\",\"BN.prototype._wordDiv\",\"mode\",\"bhi\",\"bhiBits\",\"diff\",\"qj\",\"divmod\",\"BN.prototype.divmod\",\"positive\",\"divn\",\"BN.prototype.div\",\"BN.prototype.mod\",\"BN.prototype.umod\",\"divRound\",\"BN.prototype.divRound\",\"dm\",\"half\",\"BN.prototype.modn\",\"acc\",\"BN.prototype.idivn\",\"BN.prototype.divn\",\"egcd\",\"BN.prototype.egcd\",\"A\",\"B\",\"C\",\"D\",\"g\",\"isEven\",\"yp\",\"xp\",\"im\",\"isOdd\",\"jm\",\"gcd\",\"BN.prototype._invmp\",\"x1\",\"x2\",\"delta\",\"cmpn\",\"BN.prototype.gcd\",\"invm\",\"BN.prototype.invm\",\"BN.prototype.isEven\",\"BN.prototype.isOdd\",\"BN.prototype.andln\",\"bincn\",\"BN.prototype.bincn\",\"BN.prototype.isZero\",\"BN.prototype.cmpn\",\"BN.prototype.cmp\",\"ucmp\",\"BN.prototype.ucmp\",\"BN.prototype.gtn\",\"gt\",\"BN.prototype.gt\",\"gten\",\"BN.prototype.gten\",\"gte\",\"BN.prototype.gte\",\"ltn\",\"BN.prototype.ltn\",\"lt\",\"BN.prototype.lt\",\"lten\",\"BN.prototype.lten\",\"lte\",\"BN.prototype.lte\",\"eqn\",\"BN.prototype.eqn\",\"eq\",\"BN.prototype.eq\",\"BN.red\",\"toRed\",\"BN.prototype.toRed\",\"ctx\",\"convertTo\",\"_forceRed\",\"fromRed\",\"BN.prototype.fromRed\",\"convertFrom\",\"BN.prototype._forceRed\",\"forceRed\",\"BN.prototype.forceRed\",\"redAdd\",\"BN.prototype.redAdd\",\"redIAdd\",\"BN.prototype.redIAdd\",\"redSub\",\"BN.prototype.redSub\",\"redISub\",\"BN.prototype.redISub\",\"redShl\",\"BN.prototype.redShl\",\"shl\",\"redMul\",\"BN.prototype.redMul\",\"_verify2\",\"redIMul\",\"BN.prototype.redIMul\",\"redSqr\",\"BN.prototype.redSqr\",\"_verify1\",\"redISqr\",\"BN.prototype.redISqr\",\"redSqrt\",\"BN.prototype.redSqrt\",\"sqrt\",\"redInvm\",\"BN.prototype.redInvm\",\"redNeg\",\"BN.prototype.redNeg\",\"redPow\",\"BN.prototype.redPow\",\"primes\",\"k256\",\"p224\",\"p192\",\"p25519\",\"MPrime.prototype._tmp\",\"ireduce\",\"MPrime.prototype.ireduce\",\"split\",\"imulK\",\"rlen\",\"undefined\",\"_strip\",\"MPrime.prototype.split\",\"input\",\"MPrime.prototype.imulK\",\"K256.prototype.split\",\"output\",\"outLen\",\"prev\",\"next\",\"K256.prototype.imulK\",\"P25519.prototype.imulK\",\"BN._prime\",\"Red.prototype._verify1\",\"Red.prototype._verify2\",\"Red.prototype.imod\",\"Red.prototype.neg\",\"Red.prototype.add\",\"Red.prototype.iadd\",\"Red.prototype.sub\",\"Red.prototype.isub\",\"Red.prototype.shl\",\"Red.prototype.imul\",\"Red.prototype.mul\",\"Red.prototype.isqr\",\"Red.prototype.sqr\",\"Red.prototype.sqrt\",\"mod3\",\"one\",\"nOne\",\"lpow\",\"z\",\"Red.prototype.invm\",\"inv\",\"Red.prototype.pow\",\"wnd\",\"current\",\"currentLen\",\"windowSize\",\"Red.prototype.convertTo\",\"Red.prototype.convertFrom\",\"mont\",\"BN.mont\",\"Mont.prototype.convertTo\",\"Mont.prototype.convertFrom\",\"Mont.prototype.imul\",\"u\",\"Mont.prototype.mul\",\"Mont.prototype.invm\"]\n}\n"]