{"version":3,"file":"/pc/all/libs/jsencrypt.js.map","sources":["/pc/all/libs/jsencrypt.js"],"sourcesContent":["var JSEncryptExports = {};\n(function(exports) {\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary&0xffffff)==0xefcafe);\n\n// (public) Constructor\nfunction BigInteger(a,b,c) {\n if(a != null)\n if(\"number\" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && \"string\" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n}\n\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this[i++]+w[j]+c;\n c = Math.floor(v/0x4000000);\n w[j++] = v&0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this[i]&0x7fff;\n var h = this[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w[j++] = l&0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this[i]&0x3fff;\n var h = this[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w[j++] = l&0xfffffff;\n }\n return c;\n}\nif(j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n}\nelse if(j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i];\n r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this[0] = x;\n else if(x < -1) this[0] = x+this.DV;\n else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n// (protected) set from string and radix\nfunction bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this[this.t++] = x;\n else if(sh+k > this.DB) {\n this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));\n }\n else\n this[this.t-1] |= x<= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t;\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if(this.s < 0) return \"-\"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1< 0) {\n if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this[i]&((1<>(p+=this.DB-k);\n }\n else {\n d = (this[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:\"0\";\n}\n\n// (public) -this\nfunction bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n// (public) |this|\nfunction bnAbs() { return (this.s<0)?this.negate():this; }\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;\n return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];\n for(i = n-1; i >= 0; --i) r[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r[i-n] = this[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<= 0; --i) {\n r[i+ds+1] = (this[i]>>cbs)|c;\n c = (this[i]&bm)<= 0; --i) r[i] = 0;\n r[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r[i-ds-1] |= (this[i]&bm)<>bs;\n }\n if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c -= a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r[i++] = this.DV+c;\n else if(c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x[i],r,2*i,0,1);\n if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r[i+x.t] -= x.DV;\n r[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm[pm.t-1]);\t// normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }\n else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<1)?y[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<= 0) {\n r[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y);\t// \"negative\" y so we can replace sub with am later\n while(y.t < ys) y[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);\n if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) {\t// Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r);\t// Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n}\n\n// Modular reduction using \"classic\" algorithm\nfunction Classic(m) { this.m = m; }\nfunction cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n}\nfunction cRevert(x) { return x; }\nfunction cReduce(x) { x.divRemTo(this.m,null,x); }\nfunction cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\nfunction cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this[0];\n if((x&1) == 0) return 0;\n var y = x&3;\t\t// y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf;\t// y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff;\t// y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;\t// y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV;\t\t// y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while(x.t <= this.mt2)\t// pad x so am has enough room later\n x[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (protected) true iff this is even\nfunction bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }\n\n// (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\nfunction bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1< 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n}\n\n// (public) this^e % m, 0 <= e < 2^32\nfunction bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n// Copyright (c) 2005-2009 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n\n// Extended JavaScript BN functions, required for RSA private ops.\n\n// Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n// Version 1.2: square() API, isProbablePrime fix\n\n// (public)\nfunction bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n// (public) return value as integer\nfunction bnIntValue() {\n if(this.s < 0) {\n if(this.t == 1) return this[0]-this.DV;\n else if(this.t == 0) return -1;\n }\n else if(this.t == 1) return this[0];\n else if(this.t == 0) return 0;\n // assumes 16 < DB < 32\n return ((this[1]&((1<<(32-this.DB))-1))<>24; }\n\n// (public) return value as short (assumes DB>=16)\nfunction bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }\n\n// (protected) return x s.t. r^x < DV\nfunction bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n// (public) 0 if this == 0, 1 if this > 0\nfunction bnSigNum() {\n if(this.s < 0) return -1;\n else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n else return 1;\n}\n\n// (protected) convert to radix string\nfunction bnpToRadix(b) {\n if(b == null) b = 10;\n if(this.signum() == 0 || b < 2 || b > 36) return \"0\";\n var cs = this.chunkSize(b);\n var a = Math.pow(b,cs);\n var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\n this.divRemTo(d,y,z);\n while(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n }\n return z.intValue().toString(b) + r;\n}\n\n// (protected) convert from radix string\nfunction bnpFromRadix(s,b) {\n this.fromInt(0);\n if(b == null) b = 10;\n var cs = this.chunkSize(b);\n var d = Math.pow(b,cs), mi = false, j = 0, w = 0;\n for(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == \"-\" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n }\n if(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n }\n if(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n// (protected) alternate constructor\nfunction bnpFromNumber(a,b,c) {\n if(\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1))\t// force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1< 0) {\n if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this[i]&((1<>(p+=this.DB-8);\n }\n else {\n d = (this[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n }\n return r;\n}\n\nfunction bnEquals(a) { return(this.compareTo(a)==0); }\nfunction bnMin(a) { return(this.compareTo(a)<0)?this:a; }\nfunction bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n// (protected) r = this op a (bitwise)\nfunction bnpBitwiseTo(a,op,r) {\n var i, f, m = Math.min(a.t,this.t);\n for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);\n if(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r[i] = op(this[i],f);\n r.t = this.t;\n }\n else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);\n r.t = a.t;\n }\n r.s = op(this.s,a.s);\n r.clamp();\n}\n\n// (public) this & a\nfunction op_and(x,y) { return x&y; }\nfunction bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n// (public) this | a\nfunction op_or(x,y) { return x|y; }\nfunction bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n// (public) this ^ a\nfunction op_xor(x,y) { return x^y; }\nfunction bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n// (public) this & ~a\nfunction op_andnot(x,y) { return x&~y; }\nfunction bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n// (public) ~this\nfunction bnNot() {\n var r = nbi();\n for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];\n r.t = this.t;\n r.s = ~this.s;\n return r;\n}\n\n// (public) this << n\nfunction bnShiftLeft(n) {\n var r = nbi();\n if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\n return r;\n}\n\n// (public) this >> n\nfunction bnShiftRight(n) {\n var r = nbi();\n if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\n return r;\n}\n\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if(x == 0) return -1;\n var r = 0;\n if((x&0xffff) == 0) { x >>= 16; r += 16; }\n if((x&0xff) == 0) { x >>= 8; r += 8; }\n if((x&0xf) == 0) { x >>= 4; r += 4; }\n if((x&3) == 0) { x >>= 2; r += 2; }\n if((x&1) == 0) ++r;\n return r;\n}\n\n// (public) returns index of lowest 1-bit (or -1 if none)\nfunction bnGetLowestSetBit() {\n for(var i = 0; i < this.t; ++i)\n if(this[i] != 0) return i*this.DB+lbit(this[i]);\n if(this.s < 0) return this.t*this.DB;\n return -1;\n}\n\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while(x != 0) { x &= x-1; ++r; }\n return r;\n}\n\n// (public) return number of set bits\nfunction bnBitCount() {\n var r = 0, x = this.s&this.DM;\n for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);\n return r;\n}\n\n// (public) true iff nth bit is set\nfunction bnTestBit(n) {\n var j = Math.floor(n/this.DB);\n if(j >= this.t) return(this.s!=0);\n return((this[j]&(1<<(n%this.DB)))!=0);\n}\n\n// (protected) this op (1<>= this.DB;\n }\n if(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c += a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c<0)?-1:0;\n if(c > 0) r[i++] = c;\n else if(c < -1) r[i++] = this.DV+c;\n r.t = i;\n r.clamp();\n}\n\n// (public) this + a\nfunction bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n// (public) this - a\nfunction bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n// (public) this * a\nfunction bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n// (public) this^2\nfunction bnSquare() { var r = nbi(); this.squareTo(r); return r; }\n\n// (public) this / a\nfunction bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n// (public) this % a\nfunction bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n// (public) [this/a,this%a]\nfunction bnDivideAndRemainder(a) {\n var q = nbi(), r = nbi();\n this.divRemTo(a,q,r);\n return new Array(q,r);\n}\n\n// (protected) this *= n, this >= 0, 1 < n < DV\nfunction bnpDMultiply(n) {\n this[this.t] = this.am(0,n-1,this,0,0,this.t);\n ++this.t;\n this.clamp();\n}\n\n// (protected) this += n << w words, this >= 0\nfunction bnpDAddOffset(n,w) {\n if(n == 0) return;\n while(this.t <= w) this[this.t++] = 0;\n this[w] += n;\n while(this[w] >= this.DV) {\n this[w] -= this.DV;\n if(++w >= this.t) this[this.t++] = 0;\n ++this[w];\n }\n}\n\n// A \"null\" reducer\nfunction NullExp() {}\nfunction nNop(x) { return x; }\nfunction nMulTo(x,y,r) { x.multiplyTo(y,r); }\nfunction nSqrTo(x,r) { x.squareTo(r); }\n\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\n\n// (public) this^e\nfunction bnPow(e) { return this.exp(e,new NullExp()); }\n\n// (protected) r = lower n words of \"this * a\", a.t <= n\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyLowerTo(a,n,r) {\n var i = Math.min(this.t+a.t,n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while(i > 0) r[--i] = 0;\n var j;\n for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);\n for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);\n r.clamp();\n}\n\n// (protected) r = \"this * a\" without lower n words, n > 0\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyUpperTo(a,n,r) {\n --n;\n var i = r.t = this.t+a.t-n;\n r.s = 0; // assumes a,this >= 0\n while(--i >= 0) r[i] = 0;\n for(i = Math.max(n-this.t,0); i < a.t; ++i)\n r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);\n r.clamp();\n r.drShiftTo(1,r);\n}\n\n// Barrett modular reduction\nfunction Barrett(m) {\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2*m.t,this.r2);\n this.mu = this.r2.divide(m);\n this.m = m;\n}\n\nfunction barrettConvert(x) {\n if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\n else if(x.compareTo(this.m) < 0) return x;\n else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n}\n\nfunction barrettRevert(x) { return x; }\n\n// x = x mod m (HAC 14.42)\nfunction barrettReduce(x) {\n x.drShiftTo(this.m.t-1,this.r2);\n if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\n this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\n this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\n while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\n x.subTo(this.r2,x);\n while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n}\n\n// r = x^2 mod m; x != r\nfunction barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n// r = x*y mod m; x,y != r\nfunction barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\n\n// (public) this^e % m (HAC 14.85)\nfunction bnModPow(e,m) {\n var i = e.bitLength(), k, r = nbv(1), z;\n if(i <= 0) return r;\n else if(i < 18) k = 1;\n else if(i < 48) k = 3;\n else if(i < 144) k = 4;\n else if(i < 768) k = 5;\n else k = 6;\n if(i < 8)\n z = new Classic(m);\n else if(m.isEven())\n z = new Barrett(m);\n else\n z = new Montgomery(m);\n\n // precomputation\n var g = new Array(), n = 3, k1 = k-1, km = (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n }\n\n var j = e.t-1, w, is1 = true, r2 = nbi(), t;\n i = nbits(e[j])-1;\n while(j >= 0) {\n if(i >= k1) w = (e[j]>>(i-k1))&km;\n else {\n w = (e[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) {\t// ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e[j]&(1< 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n }\n while(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n }\n else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n }\n if(g > 0) y.lShiftTo(g,y);\n return y;\n}\n\n// (protected) this % n, n < 2^26\nfunction bnpModInt(n) {\n if(n <= 0) return 0;\n var d = this.DV%n, r = (this.s<0)?n-1:0;\n if(this.t > 0)\n if(d == 0) r = this[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;\n return r;\n}\n\n// (public) 1/this % m (HAC 14.61)\nfunction bnModInverse(m) {\n var ac = m.isEven();\n if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n var u = m.clone(), v = this.clone();\n var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\n while(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n }\n else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n }\n else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n }\n else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n }\n if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n if(d.compareTo(m) >= 0) return d.subtract(m);\n if(d.signum() < 0) d.addTo(m,d); else return d;\n if(d.signum() < 0) return d.add(m); else return d;\n}\n\nvar lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];\nvar lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n// (public) test primality with certainty >= 1-.5^t\nfunction bnIsProbablePrime(t) {\n var i, x = this.abs();\n if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x[0] == lowprimes[i]) return true;\n return false;\n }\n if(x.isEven()) return false;\n i = 1;\n while(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n }\n return x.millerRabin(t);\n}\n\n// (protected) true if probably prime (HAC 4.24, Miller-Rabin)\nfunction bnpMillerRabin(t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if(k <= 0) return false;\n var r = n1.shiftRight(k);\n t = (t+1)>>1;\n if(t > lowprimes.length) t = lowprimes.length;\n var a = nbi();\n for(var i = 0; i < t; ++i) {\n //Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n }\n return true;\n}\n\n// protected\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\n\n// public\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n// JSBN-specific extension\nBigInteger.prototype.square = bnSquare;\n\n// BigInteger interfaces not implemented in jsbn:\n\n// BigInteger(int signum, byte[] magnitude)\n// double doubleValue()\n// float floatValue()\n// int hashCode()\n// long longValue()\n// static BigInteger valueOf(long val)\n// prng4.js - uses Arcfour as a PRNG\n\nfunction Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = new Array();\n}\n\n// Initialize arcfour context from key, an array of ints, each from [0..255]\nfunction ARC4init(key) {\n var i, j, t;\n for(i = 0; i < 256; ++i)\n this.S[i] = i;\n j = 0;\n for(i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n}\n\nfunction ARC4next() {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n}\n\nArcfour.prototype.init = ARC4init;\nArcfour.prototype.next = ARC4next;\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n// Random number generator - requires a PRNG backend, e.g. prng4.js\nvar rng_state;\nvar rng_pool;\nvar rng_pptr;\n\n// Initialize the pool with junk if needed.\nif(rng_pool == null) {\n rng_pool = new Array();\n rng_pptr = 0;\n var t;\n if(window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t)\n rng_pool[rng_pptr++] = z[t] & 255;\n } \n \n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var onMouseMoveListener = function(ev) {\n this.count = this.count || 0;\n if (this.count >= 256 || rng_pptr >= rng_psize) {\n if (window.removeEventListener)\n window.removeEventListener(\"mousemove\", onMouseMoveListener);\n else if (window.detachEvent)\n window.detachEvent(\"onmousemove\", onMouseMoveListener);\n return;\n }\n this.count += 1;\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n };\n if (window.addEventListener)\n window.addEventListener(\"mousemove\", onMouseMoveListener);\n else if (window.attachEvent)\n window.attachEvent(\"onmousemove\", onMouseMoveListener);\n \n}\n\nfunction rng_get_byte() {\n if(rng_state == null) {\n rng_state = prng_newstate();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)\n rng_pool[rng_pptr] = 0;\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\n\nfunction rng_get_bytes(ba) {\n var i;\n for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n}\n\nfunction SecureRandom() {}\n\nSecureRandom.prototype.nextBytes = rng_get_bytes;\n// Depends on jsbn.js and rng.js\n\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n\n// convert a (hex) string to a bignum object\nfunction parseBigInt(str,r) {\n return new BigInteger(str,r);\n}\n\nfunction linebrk(s,n) {\n var ret = \"\";\n var i = 0;\n while(i + n < s.length) {\n ret += s.substring(i,i+n) + \"\\n\";\n i += n;\n }\n return ret + s.substring(i,s.length);\n}\n\nfunction byte2Hex(b) {\n if(b < 0x10)\n return \"0\" + b.toString(16);\n else\n return b.toString(16);\n}\n\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s,n) {\n if(n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = new Array();\n var i = s.length - 1;\n while(i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if(c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new SecureRandom();\n var x = new Array();\n while(n > 2) { // random non-zero pad\n x[0] = 0;\n while(x[0] == 0) rng.nextBytes(x);\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new BigInteger(ba);\n}\n\n// \"empty\" RSA key constructor\nfunction RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n}\n\n// Set the public key fields N and e from hex strings\nfunction RSASetPublic(N,E) {\n if(N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = parseBigInt(N,16);\n this.e = parseInt(E,16);\n }\n else\n console.error(\"Invalid RSA public key\");\n}\n\n// Perform raw public operation on \"x\": return x^e (mod n)\nfunction RSADoPublic(x) {\n return x.modPowInt(this.e, this.n);\n}\n\n// Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\nfunction RSAEncrypt(text) {\n var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);\n if(m == null) return null;\n var c = this.doPublic(m);\n if(c == null) return null;\n var h = c.toString(16);\n if((h.length & 1) == 0) return h; else return \"0\" + h;\n}\n\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n//function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n//}\n\n// protected\nRSAKey.prototype.doPublic = RSADoPublic;\n\n// public\nRSAKey.prototype.setPublic = RSASetPublic;\nRSAKey.prototype.encrypt = RSAEncrypt;\n//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n// Depends on rsa.js and jsbn2.js\n\n// Version 1.1: support utf-8 decoding in pkcs1unpad2\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d,n) {\n var b = d.toByteArray();\n var i = 0;\n while(i < b.length && b[i] == 0) ++i;\n if(b.length-i != n-1 || b[i] != 2)\n return null;\n ++i;\n while(b[i] != 0)\n if(++i >= b.length) return null;\n var ret = \"\";\n while(++i < b.length) {\n var c = b[i] & 255;\n if(c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i+1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i+1] & 63) << 6) | (b[i+2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n\n// Set the private key fields N, e, and d from hex strings\nfunction RSASetPrivate(N,E,D) {\n if(N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = parseBigInt(N,16);\n this.e = parseInt(E,16);\n this.d = parseBigInt(D,16);\n }\n else\n console.error(\"Invalid RSA private key\");\n}\n\n// Set the private key fields N, e, d and CRT params from hex strings\nfunction RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) {\n if(N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = parseBigInt(N,16);\n this.e = parseInt(E,16);\n this.d = parseBigInt(D,16);\n this.p = parseBigInt(P,16);\n this.q = parseBigInt(Q,16);\n this.dmp1 = parseBigInt(DP,16);\n this.dmq1 = parseBigInt(DQ,16);\n this.coeff = parseBigInt(C,16);\n }\n else\n console.error(\"Invalid RSA private key\");\n}\n\n// Generate a new random private key B bits long, using public expt E\nfunction RSAGenerate(B,E) {\n var rng = new SecureRandom();\n var qs = B>>1;\n this.e = parseInt(E,16);\n var ee = new BigInteger(E,16);\n for(;;) {\n for(;;) {\n this.p = new BigInteger(B-qs,1,rng);\n if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;\n }\n for(;;) {\n this.q = new BigInteger(qs,1,rng);\n if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;\n }\n if(this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(BigInteger.ONE);\n var q1 = this.q.subtract(BigInteger.ONE);\n var phi = p1.multiply(q1);\n if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n}\n\n// Perform raw private operation on \"x\": return x^d (mod n)\nfunction RSADoPrivate(x) {\n if(this.p == null || this.q == null)\n return x.modPow(this.d, this.n);\n\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n\n while(xp.compareTo(xq) < 0)\n xp = xp.add(this.p);\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n}\n\n// Return the PKCS#1 RSA decryption of \"ctext\".\n// \"ctext\" is an even-length hex string and the output is a plain string.\nfunction RSADecrypt(ctext) {\n var c = parseBigInt(ctext, 16);\n var m = this.doPrivate(c);\n if(m == null) return null;\n return pkcs1unpad2(m, (this.n.bitLength()+7)>>3);\n}\n\n// Return the PKCS#1 RSA decryption of \"ctext\".\n// \"ctext\" is a Base64-encoded string and the output is a plain string.\n//function RSAB64Decrypt(ctext) {\n// var h = b64tohex(ctext);\n// if(h) return this.decrypt(h); else return null;\n//}\n\n// protected\nRSAKey.prototype.doPrivate = RSADoPrivate;\n\n// public\nRSAKey.prototype.setPrivate = RSASetPrivate;\nRSAKey.prototype.setPrivateEx = RSASetPrivateEx;\nRSAKey.prototype.generate = RSAGenerate;\nRSAKey.prototype.decrypt = RSADecrypt;\n//RSAKey.prototype.b64_decrypt = RSAB64Decrypt;\n// Copyright (c) 2011 Kevin M Burns Jr.\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n//\n// Extension to jsbn which adds facilities for asynchronous RSA key generation\n// Primarily created to avoid execution timeout on mobile devices\n//\n// http://www-cs-students.stanford.edu/~tjw/jsbn/\n//\n// ---\n\n(function(){\n\n// Generate a new random private key B bits long, using public expt E\nvar RSAGenerateAsync = function (B, E, callback) {\n //var rng = new SeededRandom();\n var rng = new SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function() {\n var loop4 = function() {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(BigInteger.ONE);\n var q1 = rsa.q.subtract(BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function(){callback()},0); // escape\n } else {\n setTimeout(loop1,0);\n }\n };\n var loop3 = function() {\n rsa.q = nbi();\n rsa.q.fromNumberAsync(qs, 1, rng, function(){\n rsa.q.subtract(BigInteger.ONE).gcda(ee, function(r){\n if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4,0);\n } else {\n setTimeout(loop3,0);\n }\n });\n });\n };\n var loop2 = function() {\n rsa.p = nbi();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function(){\n rsa.p.subtract(BigInteger.ONE).gcda(ee, function(r){\n if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3,0);\n } else {\n setTimeout(loop2,0);\n }\n });\n });\n };\n setTimeout(loop2,0);\n };\n setTimeout(loop1,0);\n};\nRSAKey.prototype.generateAsync = RSAGenerateAsync;\n\n// Public API method\nvar bnGCDAsync = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit(),\n g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) g = i;\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function() {\n if ((i = x.getLowestSetBit()) > 0){ x.rShiftTo(i, x); }\n if ((i = y.getLowestSetBit()) > 0){ y.rShiftTo(i, y); }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n } else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if(!(x.signum() > 0)) {\n if (g > 0) y.lShiftTo(g, y);\n setTimeout(function(){callback(y)},0); // escape\n } else {\n setTimeout(gcda1,0);\n }\n };\n setTimeout(gcda1,10);\n};\nBigInteger.prototype.gcda = bnGCDAsync;\n\n// (protected) alternate constructor\nvar bnpFromNumberAsync = function (a,b,c,callback) {\n if(\"number\" == typeof b) {\n if(a < 2) {\n this.fromInt(1);\n } else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1)){\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n }\n if(this.isEven()) {\n this.dAddOffset(1,0);\n }\n var bnp = this;\n var bnpfn1 = function(){\n bnp.dAddOffset(2,0);\n if(bnp.bitLength() > a) bnp.subTo(BigInteger.ONE.shiftLeft(a-1),bnp);\n if(bnp.isProbablePrime(b)) {\n setTimeout(function(){callback()},0); // escape\n } else {\n setTimeout(bnpfn1,0);\n }\n };\n setTimeout(bnpfn1,0);\n }\n } else {\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1<> 6) + b64map.charAt(c & 63);\n }\n if(i+1 == h.length) {\n c = parseInt(h.substring(i,i+1),16);\n ret += b64map.charAt(c << 2);\n }\n else if(i+2 == h.length) {\n c = parseInt(h.substring(i,i+2),16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while((ret.length & 3) > 0) ret += b64pad;\n return ret;\n}\n\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\"\n var i;\n var k = 0; // b64 state, 0-3\n var slop;\n for(i = 0; i < s.length; ++i) {\n if(s.charAt(i) == b64pad) break;\n v = b64map.indexOf(s.charAt(i));\n if(v < 0) continue;\n if(k == 0) {\n ret += int2char(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if(k == 1) {\n ret += int2char((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if(k == 2) {\n ret += int2char(slop);\n ret += int2char(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += int2char((slop << 2) | (v >> 4));\n ret += int2char(v & 0xf);\n k = 0;\n }\n }\n if(k == 1)\n ret += int2char(slop << 2);\n return ret;\n}\n\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n //piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = new Array();\n for(i = 0; 2*i < h.length; ++i) {\n a[i] = parseInt(h.substring(2*i,2*i+2),16);\n }\n return a;\n}\n/*! asn1-1.0.2.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n\nvar JSX = JSX || {};\nJSX.env = JSX.env || {};\n\nvar L = JSX, OP = Object.prototype, FUNCTION_TOSTRING = '[object Function]',ADD = [\"toString\", \"valueOf\"];\n\nJSX.env.parseUA = function(agent) {\n\n var numberify = function(s) {\n var c = 0;\n return parseFloat(s.replace(/\\./g, function() {\n return (c++ == 1) ? '' : '.';\n }));\n },\n\n nav = navigator,\n o = {\n ie: 0,\n opera: 0,\n gecko: 0,\n webkit: 0,\n chrome: 0,\n mobile: null,\n air: 0,\n ipad: 0,\n iphone: 0,\n ipod: 0,\n ios: null,\n android: 0,\n webos: 0,\n caja: nav && nav.cajaVersion,\n secure: false,\n os: null\n\n },\n\n ua = agent || (navigator && navigator.userAgent),\n loc = window && window.location,\n href = loc && loc.href,\n m;\n\n o.secure = href && (href.toLowerCase().indexOf(\"https\") === 0);\n\n if (ua) {\n\n if ((/windows|win32/i).test(ua)) {\n o.os = 'windows';\n } else if ((/macintosh/i).test(ua)) {\n o.os = 'macintosh';\n } else if ((/rhino/i).test(ua)) {\n o.os = 'rhino';\n }\n if ((/KHTML/).test(ua)) {\n o.webkit = 1;\n }\n m = ua.match(/AppleWebKit\\/([^\\s]*)/);\n if (m && m[1]) {\n o.webkit = numberify(m[1]);\n if (/ Mobile\\//.test(ua)) {\n o.mobile = 'Apple'; // iPhone or iPod Touch\n m = ua.match(/OS ([^\\s]*)/);\n if (m && m[1]) {\n m = numberify(m[1].replace('_', '.'));\n }\n o.ios = m;\n o.ipad = o.ipod = o.iphone = 0;\n m = ua.match(/iPad|iPod|iPhone/);\n if (m && m[0]) {\n o[m[0].toLowerCase()] = o.ios;\n }\n } else {\n m = ua.match(/NokiaN[^\\/]*|Android \\d\\.\\d|webOS\\/\\d\\.\\d/);\n if (m) {\n o.mobile = m[0];\n }\n if (/webOS/.test(ua)) {\n o.mobile = 'WebOS';\n m = ua.match(/webOS\\/([^\\s]*);/);\n if (m && m[1]) {\n o.webos = numberify(m[1]);\n }\n }\n if (/ Android/.test(ua)) {\n o.mobile = 'Android';\n m = ua.match(/Android ([^\\s]*);/);\n if (m && m[1]) {\n o.android = numberify(m[1]);\n }\n }\n }\n m = ua.match(/Chrome\\/([^\\s]*)/);\n if (m && m[1]) {\n o.chrome = numberify(m[1]); // Chrome\n } else {\n m = ua.match(/AdobeAIR\\/([^\\s]*)/);\n if (m) {\n o.air = m[0]; // Adobe AIR 1.0 or better\n }\n }\n }\n if (!o.webkit) {\n m = ua.match(/Opera[\\s\\/]([^\\s]*)/);\n if (m && m[1]) {\n o.opera = numberify(m[1]);\n m = ua.match(/Version\\/([^\\s]*)/);\n if (m && m[1]) {\n o.opera = numberify(m[1]); // opera 10+\n }\n m = ua.match(/Opera Mini[^;]*/);\n if (m) {\n o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316\n }\n } else { // not opera or webkit\n m = ua.match(/MSIE\\s([^;]*)/);\n if (m && m[1]) {\n o.ie = numberify(m[1]);\n } else { // not opera, webkit, or ie\n m = ua.match(/Gecko\\/([^\\s]*)/);\n if (m) {\n o.gecko = 1; // Gecko detected, look for revision\n m = ua.match(/rv:([^\\s\\)]*)/);\n if (m && m[1]) {\n o.gecko = numberify(m[1]);\n }\n }\n }\n }\n }\n }\n return o;\n};\n\nJSX.env.ua = JSX.env.parseUA();\n\nJSX.isFunction = function(o) {\n return (typeof o === 'function') || OP.toString.apply(o) === FUNCTION_TOSTRING;\n};\n\nJSX._IEEnumFix = (JSX.env.ua.ie) ? function(r, s) {\n var i, fname, f;\n for (i=0;iMIT License\n */\n\n/** \n * kjur's class library name space\n *

\n * This name space provides following name spaces:\n *

    \n *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • \n *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • \n *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature \n * class and utilities
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nif (typeof KJUR == \"undefined\" || !KJUR) KJUR = {};\n\n/**\n * kjur's ASN.1 class library name space\n *

\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to \n * org.bouncycastle.asn1 package of \n * well known BouncyCaslte Cryptography Library.\n *\n *

PROVIDING ASN.1 PRIMITIVES

\n * Here are ASN.1 DER primitive classes.\n *
    \n *
  • {@link KJUR.asn1.DERBoolean}
  • \n *
  • {@link KJUR.asn1.DERInteger}
  • \n *
  • {@link KJUR.asn1.DERBitString}
  • \n *
  • {@link KJUR.asn1.DEROctetString}
  • \n *
  • {@link KJUR.asn1.DERNull}
  • \n *
  • {@link KJUR.asn1.DERObjectIdentifier}
  • \n *
  • {@link KJUR.asn1.DERUTF8String}
  • \n *
  • {@link KJUR.asn1.DERNumericString}
  • \n *
  • {@link KJUR.asn1.DERPrintableString}
  • \n *
  • {@link KJUR.asn1.DERTeletexString}
  • \n *
  • {@link KJUR.asn1.DERIA5String}
  • \n *
  • {@link KJUR.asn1.DERUTCTime}
  • \n *
  • {@link KJUR.asn1.DERGeneralizedTime}
  • \n *
  • {@link KJUR.asn1.DERSequence}
  • \n *
  • {@link KJUR.asn1.DERSet}
  • \n *
\n *\n *

OTHER ASN.1 CLASSES

\n *
    \n *
  • {@link KJUR.asn1.ASN1Object}
  • \n *
  • {@link KJUR.asn1.DERAbstractString}
  • \n *
  • {@link KJUR.asn1.DERAbstractTime}
  • \n *
  • {@link KJUR.asn1.DERAbstractStructured}
  • \n *
  • {@link KJUR.asn1.DERTaggedObject}
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) KJUR.asn1 = {};\n\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @classs ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function() {\n this.integerToByteHex = function(i) {\n\tvar h = i.toString(16);\n\tif ((h.length % 2) == 1) h = '0' + h;\n\treturn h;\n };\n this.bigIntToMinTwosComplementsHex = function(bigIntegerValue) {\n\tvar h = bigIntegerValue.toString(16);\n\tif (h.substr(0, 1) != '-') {\n\t if (h.length % 2 == 1) {\n\t\th = '0' + h;\n\t } else {\n\t\tif (! h.match(/^[0-7]/)) {\n\t\t h = '00' + h;\n\t\t}\n\t }\n\t} else {\n\t var hPos = h.substr(1);\n\t var xorLen = hPos.length;\n\t if (xorLen % 2 == 1) {\n\t\txorLen += 1;\n\t } else {\n\t\tif (! h.match(/^[0-7]/)) {\n\t\t xorLen += 2;\n\t\t}\n\t }\n\t var hMask = '';\n\t for (var i = 0; i < xorLen; i++) {\n\t\thMask += 'f';\n\t }\n\t var biMask = new BigInteger(hMask, 16);\n\t var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE);\n\t h = biNeg.toString(16).replace(/^-/, '');\n\t}\n\treturn h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function(dataHex, pemHeader) {\n\tvar dataWA = CryptoJS.enc.Hex.parse(dataHex);\n\tvar dataB64 = CryptoJS.enc.Base64.stringify(dataWA);\n\tvar pemBody = dataB64.replace(/(.{64})/g, \"$1\\r\\n\");\n pemBody = pemBody.replace(/\\r\\n$/, '');\n\treturn \"-----BEGIN \" + pemHeader + \"-----\\r\\n\" + \n pemBody + \n \"\\r\\n-----END \" + pemHeader + \"-----\\r\\n\";\n };\n};\n\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n\n// ********************************************************************\n\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function() {\n var isModified = true;\n var hTLV = null;\n var hT = '00'\n var hL = '00';\n var hV = '';\n\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function() {\n\tif (typeof this.hV == \"undefined\" || this.hV == null) {\n\t throw \"this.hV is null or undefined.\";\n\t}\n\tif (this.hV.length % 2 == 1) {\n\t throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n\t}\n\tvar n = this.hV.length / 2;\n\tvar hN = n.toString(16);\n\tif (hN.length % 2 == 1) {\n\t hN = \"0\" + hN;\n\t}\n\tif (n < 128) {\n\t return hN;\n\t} else {\n\t var hNlen = hN.length / 2;\n\t if (hNlen > 15) {\n\t\tthrow \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n\t }\n\t var head = 128 + hNlen;\n\t return head.toString(16) + hN;\n\t}\n };\n\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function() {\n\tif (this.hTLV == null || this.isModified) {\n\t this.hV = this.getFreshValueHex();\n\t this.hL = this.getLengthHexFromValue();\n\t this.hTLV = this.hT + this.hL + this.hV;\n\t this.isModified = false;\n\t //console.error(\"first time: \" + this.hTLV);\n\t}\n\treturn this.hTLV;\n };\n\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function() {\n\tthis.getEncodedHex();\n\treturn this.hV;\n }\n\n this.getFreshValueHex = function() {\n\treturn '';\n };\n};\n\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function(params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function() {\n\treturn this.s;\n };\n\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function(newS) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.s = newS;\n\tthis.hV = stohex(this.s);\n };\n\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function(newHexString) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.s = null;\n\tthis.hV = newHexString;\n };\n\n this.getFreshValueHex = function() {\n\treturn this.hV;\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['str'] != \"undefined\") {\n\t this.setString(params['str']);\n\t} else if (typeof params['hex'] != \"undefined\") {\n\t this.setStringHex(params['hex']);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function(params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function(d) {\n\tutc = d.getTime() + (d.getTimezoneOffset() * 60000);\n\tvar utcDate = new Date(utc);\n\treturn utcDate;\n };\n\n this.formatDate = function(dateObject, type) {\n\tvar pad = this.zeroPadding;\n\tvar d = this.localDateToUTC(dateObject);\n\tvar year = String(d.getFullYear());\n\tif (type == 'utc') year = year.substr(2, 2);\n\tvar month = pad(String(d.getMonth() + 1), 2);\n\tvar day = pad(String(d.getDate()), 2);\n\tvar hour = pad(String(d.getHours()), 2);\n\tvar min = pad(String(d.getMinutes()), 2);\n\tvar sec = pad(String(d.getSeconds()), 2);\n\treturn year + month + day + hour + min + sec + 'Z';\n };\n\n this.zeroPadding = function(s, len) {\n\tif (s.length >= len) return s;\n\treturn new Array(len - s.length + 1).join('0') + s;\n };\n\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function() {\n\treturn this.s;\n };\n\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function(newS) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.s = newS;\n\tthis.hV = stohex(this.s);\n };\n\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function(year, month, day, hour, min, sec) {\n\tvar dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n\tthis.setByDate(dateObject);\n };\n\n this.getFreshValueHex = function() {\n\treturn this.hV;\n };\n};\nJSX.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function(params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function(asn1ObjectArray) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.asn1Array = asn1ObjectArray;\n };\n\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function(asn1Object) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.asn1Array.push(asn1Object);\n };\n\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n\tif (typeof params['array'] != \"undefined\") {\n\t this.asn1Array = params['array'];\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n\n\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function() {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\nJSX.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function(params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function(bigIntegerValue) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function(intValue) {\n\tvar bi = new BigInteger(String(intValue), 10);\n\tthis.setByBigInteger(bi);\n };\n\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function(newHexString) {\n\tthis.hV = newHexString;\n };\n\n this.getFreshValueHex = function() {\n\treturn this.hV;\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['bigint'] != \"undefined\") {\n\t this.setByBigInteger(params['bigint']);\n\t} else if (typeof params['int'] != \"undefined\") {\n\t this.setByInteger(params['int']);\n\t} else if (typeof params['hex'] != \"undefined\") {\n\t this.setValueHex(params['hex']);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description \n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • bin - specify binary string (ex. '10111')
  • \n *
  • array - specify array of boolean (ex. [true,false,true,true])
  • \n *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERBitString = function(params) {\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.hV = newHexStringIncludingUnusedBits;\n };\n\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function(unusedBits, hValue) {\n\tif (unusedBits < 0 || 7 < unusedBits) {\n\t throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n\t}\n\tvar hUnusedBits = \"0\" + unusedBits;\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.hV = hUnusedBits + hValue;\n };\n\n /**\n * set ASN.1 DER BitString by binary string\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of \n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n */\n this.setByBinaryString = function(binaryString) {\n\tbinaryString = binaryString.replace(/0+$/, '');\n\tvar unusedBits = 8 - binaryString.length % 8;\n\tif (unusedBits == 8) unusedBits = 0;\n\tfor (var i = 0; i <= unusedBits; i++) {\n\t binaryString += '0';\n\t}\n\tvar h = '';\n\tfor (var i = 0; i < binaryString.length - 1; i += 8) {\n\t var b = binaryString.substr(i, 8);\n\t var x = parseInt(b, 2).toString(16);\n\t if (x.length == 1) x = '0' + x;\n\t h += x; \n\t}\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.hV = '0' + unusedBits + h;\n };\n\n /**\n * set ASN.1 TLV value(V) by an array of boolean\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored.\n */\n this.setByBooleanArray = function(booleanArray) {\n\tvar s = '';\n\tfor (var i = 0; i < booleanArray.length; i++) {\n\t if (booleanArray[i] == true) {\n\t\ts += '1';\n\t } else {\n\t\ts += '0';\n\t }\n\t}\n\tthis.setByBinaryString(s);\n };\n\n /**\n * generate an array of false with specified length\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean faluse\n * @description\n * This static method may be useful to initialize boolean array.\n */\n this.newFalseArray = function(nLength) {\n\tvar a = new Array(nLength);\n\tfor (var i = 0; i < nLength; i++) {\n\t a[i] = false;\n\t}\n\treturn a;\n };\n\n this.getFreshValueHex = function() {\n\treturn this.hV;\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['hex'] != \"undefined\") {\n\t this.setHexValueIncludingUnusedBits(params['hex']);\n\t} else if (typeof params['bin'] != \"undefined\") {\n\t this.setByBinaryString(params['bin']);\n\t} else if (typeof params['array'] != \"undefined\") {\n\t this.setByBooleanArray(params['array']);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DEROctetString = function(params) {\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\nJSX.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function() {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\nJSX.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function(params) {\n var itox = function(i) {\n\tvar h = i.toString(16);\n\tif (h.length == 1) h = '0' + h;\n\treturn h;\n };\n var roidtox = function(roid) {\n\tvar h = '';\n\tvar bi = new BigInteger(roid, 10);\n\tvar b = bi.toString(2);\n\tvar padLen = 7 - b.length % 7;\n\tif (padLen == 7) padLen = 0;\n\tvar bPad = '';\n\tfor (var i = 0; i < padLen; i++) bPad += '0';\n\tb = bPad + b;\n\tfor (var i = 0; i < b.length - 1; i += 7) {\n\t var b8 = b.substr(i, 7);\n\t if (i != b.length - 7) b8 = '1' + b8;\n\t h += itox(parseInt(b8, 2));\n\t}\n\treturn h;\n }\n\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function(newHexString) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.s = null;\n\tthis.hV = newHexString;\n };\n\n /**\n * set value by a OID string\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n */\n this.setValueOidString = function(oidString) {\n\tif (! oidString.match(/^[0-9.]+$/)) {\n\t throw \"malformed oid string: \" + oidString;\n\t}\n\tvar h = '';\n\tvar a = oidString.split('.');\n\tvar i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n\th += itox(i0);\n\ta.splice(0, 2);\n\tfor (var i = 0; i < a.length; i++) {\n\t h += roidtox(a[i]);\n\t}\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.s = null;\n\tthis.hV = h;\n };\n\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n */\n this.setValueName = function(oidName) {\n\tif (typeof KJUR.asn1.x509.OID.name2oidList[oidName] != \"undefined\") {\n\t var oid = KJUR.asn1.x509.OID.name2oidList[oidName];\n\t this.setValueOidString(oid);\n\t} else {\n\t throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n\t}\n };\n\n this.getFreshValueHex = function() {\n\treturn this.hV;\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['oid'] != \"undefined\") {\n\t this.setValueOidString(params['oid']);\n\t} else if (typeof params['hex'] != \"undefined\") {\n\t this.setValueHex(params['hex']);\n\t} else if (typeof params['name'] != \"undefined\") {\n\t this.setValueName(params['name']);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function(params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\nJSX.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function(params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\nJSX.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function(params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\nJSX.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function(params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\nJSX.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function(params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\nJSX.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
\n * NOTE: 'params' can be omitted.\n *

EXAMPLES

\n * @example\n * var d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * var d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n *\n * var d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n */\nKJUR.asn1.DERUTCTime = function(params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n */\n this.setByDate = function(dateObject) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.date = dateObject;\n\tthis.s = this.formatDate(this.date, 'utc');\n\tthis.hV = stohex(this.s);\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['str'] != \"undefined\") {\n\t this.setString(params['str']);\n\t} else if (typeof params['hex'] != \"undefined\") {\n\t this.setStringHex(params['hex']);\n\t} else if (typeof params['date'] != \"undefined\") {\n\t this.setByDate(params['date']);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERGeneralizedTime = function(params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * var o = new DERUTCTime();\n * var date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n * o.setByDate(date);\n */\n this.setByDate = function(dateObject) {\n\tthis.hTLV = null;\n\tthis.isModified = true;\n\tthis.date = dateObject;\n\tthis.s = this.formatDate(this.date, 'gen');\n\tthis.hV = stohex(this.s);\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['str'] != \"undefined\") {\n\t this.setString(params['str']);\n\t} else if (typeof params['hex'] != \"undefined\") {\n\t this.setStringHex(params['hex']);\n\t} else if (typeof params['date'] != \"undefined\") {\n\t this.setByDate(params['date']);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function(params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function() {\n\tvar h = '';\n\tfor (var i = 0; i < this.asn1Array.length; i++) {\n\t var asn1Obj = this.asn1Array[i];\n\t h += asn1Obj.getEncodedHex();\n\t}\n\tthis.hV = h;\n\treturn this.hV;\n };\n};\nJSX.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSet = function(params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.getFreshValueHex = function() {\n\tvar a = new Array();\n\tfor (var i = 0; i < this.asn1Array.length; i++) {\n\t var asn1Obj = this.asn1Array[i];\n\t a.push(asn1Obj.getEncodedHex());\n\t}\n\ta.sort();\n\tthis.hV = a.join('');\n\treturn this.hV;\n };\n};\nJSX.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump, \n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n *
    \n *
  • explicit - specify true if this is explicit tag otherwise false \n * (default is 'true').
  • \n *
  • tag - specify tag (default is 'a0' which means [0])
  • \n *
  • obj - specify ASN1Object which is tagged
  • \n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function(params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) {\n\tthis.hT = tagNoHex;\n\tthis.isExplicit = isExplicitFlag;\n\tthis.asn1Object = asn1Object;\n\tif (this.isExplicit) {\n\t this.hV = this.asn1Object.getEncodedHex();\n\t this.hTLV = null;\n\t this.isModified = true;\n\t} else {\n\t this.hV = null;\n\t this.hTLV = asn1Object.getEncodedHex();\n\t this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n\t this.isModified = false;\n\t}\n };\n\n this.getFreshValueHex = function() {\n\treturn this.hV;\n };\n\n if (typeof params != \"undefined\") {\n\tif (typeof params['tag'] != \"undefined\") {\n\t this.hT = params['tag'];\n\t}\n\tif (typeof params['explicit'] != \"undefined\") {\n\t this.isExplicit = params['explicit'];\n\t}\n\tif (typeof params['obj'] != \"undefined\") {\n\t this.asn1Object = params['obj'];\n\t this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n\t}\n }\n};\nJSX.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n(function (undefined) {\n\"use strict\";\n\nvar Hex = {},\n decoder;\n\nHex.decode = function(a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\",\n ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = [];\n for (i = 0; i < 16; ++i)\n decoder[hex.charAt(i)] = i;\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i)\n decoder[hex.charAt(i)] = i;\n for (i = 0; i < ignore.length; ++i)\n decoder[ignore.charAt(i)] = -1;\n }\n var out = [],\n bits = 0,\n char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == '=')\n break;\n c = decoder[c];\n if (c == -1)\n continue;\n if (c === undefined)\n throw 'Illegal character at offset ' + i;\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n } else {\n bits <<= 4;\n }\n }\n if (char_count)\n throw \"Hex encoding incomplete: 4 bits missing\";\n return out;\n};\n\n// export globals\nwindow.Hex = Hex;\n})();// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n(function (undefined) {\n\"use strict\";\n\nvar Base64 = {},\n decoder;\n\nBase64.decode = function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = [];\n for (i = 0; i < 64; ++i)\n decoder[b64.charAt(i)] = i;\n for (i = 0; i < ignore.length; ++i)\n decoder[ignore.charAt(i)] = -1;\n }\n var out = [];\n var bits = 0, char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == '=')\n break;\n c = decoder[c];\n if (c == -1)\n continue;\n if (c === undefined)\n throw 'Illegal character at offset ' + i;\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n } else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw \"Base64 encoding incomplete: at least 2 bits missing\";\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n};\n\nBase64.re = /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/;\nBase64.unarmor = function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1])\n a = m[1];\n else if (m[2])\n a = m[2];\n else\n throw \"RegExp out of sync\";\n }\n return Base64.decode(a);\n};\n\n// export globals\nwindow.Base64 = Base64;\n})();// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n// \n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n(function (undefined) {\n\"use strict\";\n\nvar hardLimit = 100,\n ellipsis = \"\\u2026\",\n DOM = {\n tag: function (tagName, className) {\n var t = document.createElement(tagName);\n t.className = className;\n return t;\n },\n text: function (str) {\n return document.createTextNode(str);\n }\n };\n\nfunction Stream(enc, pos) {\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n } else {\n this.enc = enc;\n this.pos = pos;\n }\n}\nStream.prototype.get = function (pos) {\n if (pos === undefined)\n pos = this.pos++;\n if (pos >= this.enc.length)\n throw 'Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length;\n return this.enc[pos];\n};\nStream.prototype.hexDigits = \"0123456789ABCDEF\";\nStream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n};\nStream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true)\n switch (i & 0xF) {\n case 0x7: s += \" \"; break;\n case 0xF: s += \"\\n\"; break;\n default: s += \" \";\n }\n }\n return s;\n};\nStream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i)\n s += String.fromCharCode(this.get(i));\n return s;\n};\nStream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ) {\n var c = this.get(i++);\n if (c < 128)\n s += String.fromCharCode(c);\n else if ((c > 191) && (c < 224))\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n else\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n return s;\n};\nStream.prototype.parseStringBMP = function (start, end) {\n var str = \"\"\n for (var i = start; i < end; i += 2) {\n var high_byte = this.get(i);\n var low_byte = this.get(i + 1);\n str += String.fromCharCode( (high_byte << 8) + low_byte );\n }\n\n return str;\n};\nStream.prototype.reTime = /^((?:1[89]|2\\d)?\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nStream.prototype.parseTime = function (start, end) {\n var s = this.parseStringISO(start, end),\n m = this.reTime.exec(s);\n if (!m)\n return \"Unrecognized time: \" + s;\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7])\n s += \".\" + m[7];\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != 'Z') {\n s += m[8];\n if (m[9])\n s += \":\" + m[9];\n }\n }\n return s;\n};\nStream.prototype.parseInteger = function (start, end) {\n //TODO support negative numbers\n var len = end - start;\n if (len > 4) {\n len <<= 3;\n var s = this.get(start);\n if (s === 0)\n len -= 8;\n else\n while (s < 128) {\n s <<= 1;\n --len;\n }\n return \"(\" + len + \" bit)\";\n }\n var n = 0;\n for (var i = start; i < end; ++i)\n n = (n << 8) | this.get(i);\n return n;\n};\nStream.prototype.parseBitString = function (start, end) {\n var unusedBit = this.get(start),\n lenBit = ((end - start - 1) << 3) - unusedBit,\n s = \"(\" + lenBit + \" bit)\";\n if (lenBit <= 20) {\n var skip = unusedBit;\n s += \" \";\n for (var i = end - 1; i > start; --i) {\n var b = this.get(i);\n for (var j = skip; j < 8; ++j)\n s += (b >> j) & 1 ? \"1\" : \"0\";\n skip = 0;\n }\n }\n return s;\n};\nStream.prototype.parseOctetString = function (start, end) {\n var len = end - start,\n s = \"(\" + len + \" byte) \";\n if (len > hardLimit)\n end = start + hardLimit;\n for (var i = start; i < end; ++i)\n s += this.hexByte(this.get(i)); //TODO: also try Latin1?\n if (len > hardLimit)\n s += ellipsis;\n return s;\n};\nStream.prototype.parseOID = function (start, end) {\n var s = '',\n n = 0,\n bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n = (n << 7) | (v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === '') {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n } else\n s += \".\" + ((bits >= 31) ? \"bigint\" : n);\n n = bits = 0;\n }\n }\n return s;\n};\n\nfunction ASN1(stream, header, length, tag, sub) {\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n}\nASN1.prototype.typeName = function () {\n if (this.tag === undefined)\n return \"unknown\";\n var tagClass = this.tag >> 6,\n tagConstructed = (this.tag >> 5) & 1,\n tagNumber = this.tag & 0x1F;\n switch (tagClass) {\n case 0: // universal\n switch (tagNumber) {\n case 0x00: return \"EOC\";\n case 0x01: return \"BOOLEAN\";\n case 0x02: return \"INTEGER\";\n case 0x03: return \"BIT_STRING\";\n case 0x04: return \"OCTET_STRING\";\n case 0x05: return \"NULL\";\n case 0x06: return \"OBJECT_IDENTIFIER\";\n case 0x07: return \"ObjectDescriptor\";\n case 0x08: return \"EXTERNAL\";\n case 0x09: return \"REAL\";\n case 0x0A: return \"ENUMERATED\";\n case 0x0B: return \"EMBEDDED_PDV\";\n case 0x0C: return \"UTF8String\";\n case 0x10: return \"SEQUENCE\";\n case 0x11: return \"SET\";\n case 0x12: return \"NumericString\";\n case 0x13: return \"PrintableString\"; // ASCII subset\n case 0x14: return \"TeletexString\"; // aka T61String\n case 0x15: return \"VideotexString\";\n case 0x16: return \"IA5String\"; // ASCII\n case 0x17: return \"UTCTime\";\n case 0x18: return \"GeneralizedTime\";\n case 0x19: return \"GraphicString\";\n case 0x1A: return \"VisibleString\"; // ASCII subset\n case 0x1B: return \"GeneralString\";\n case 0x1C: return \"UniversalString\";\n case 0x1E: return \"BMPString\";\n default: return \"Universal_\" + tagNumber.toString(16);\n }\n case 1: return \"Application_\" + tagNumber.toString(16);\n case 2: return \"[\" + tagNumber + \"]\"; // Context\n case 3: return \"Private_\" + tagNumber.toString(16);\n }\n};\nASN1.prototype.reSeemsASCII = /^[ -~]+$/;\nASN1.prototype.content = function () {\n if (this.tag === undefined)\n return null;\n var tagClass = this.tag >> 6,\n tagNumber = this.tag & 0x1F,\n content = this.posContent(),\n len = Math.abs(this.length);\n if (tagClass !== 0) { // universal\n if (this.sub !== null)\n return \"(\" + this.sub.length + \" elem)\";\n //TODO: TRY TO PARSE ASCII STRING\n var s = this.stream.parseStringISO(content, content + Math.min(len, hardLimit));\n if (this.reSeemsASCII.test(s))\n return s.substring(0, 2 * hardLimit) + ((s.length > 2 * hardLimit) ? ellipsis : \"\");\n else\n return this.stream.parseOctetString(content, content + len);\n }\n switch (tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len);\n //case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len);\n //case 0x07: // ObjectDescriptor\n //case 0x08: // EXTERNAL\n //case 0x09: // REAL\n //case 0x0A: // ENUMERATED\n //case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n return \"(\" + this.sub.length + \" elem)\";\n case 0x0C: // UTF8String\n return this.stream.parseStringUTF(content, content + len);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n //case 0x19: // GraphicString\n case 0x1A: // VisibleString\n //case 0x1B: // GeneralString\n //case 0x1C: // UniversalString\n return this.stream.parseStringISO(content, content + len);\n case 0x1E: // BMPString\n return this.stream.parseStringBMP(content, content + len);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len);\n }\n return null;\n};\nASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? 'null' : this.sub.length) + \"]\";\n};\nASN1.prototype.print = function (indent) {\n if (indent === undefined) indent = '';\n document.writeln(indent + this);\n if (this.sub !== null) {\n indent += ' ';\n for (var i = 0, max = this.sub.length; i < max; ++i)\n this.sub[i].print(indent);\n }\n};\nASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) indent = '';\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0)\n s += \"+\";\n s += this.length;\n if (this.tag & 0x20)\n s += \" (constructed)\";\n else if (((this.tag == 0x03) || (this.tag == 0x04)) && (this.sub !== null))\n s += \" (encapsulates)\";\n s += \"\\n\";\n if (this.sub !== null) {\n indent += ' ';\n for (var i = 0, max = this.sub.length; i < max; ++i)\n s += this.sub[i].toPrettyString(indent);\n }\n return s;\n};\nASN1.prototype.toDOM = function () {\n var node = DOM.tag(\"div\", \"node\");\n node.asn1 = this;\n var head = DOM.tag(\"div\", \"head\");\n var s = this.typeName().replace(/_/g, \" \");\n head.innerHTML = s;\n var content = this.content();\n if (content !== null) {\n content = String(content).replace(/\";\n s += \"Length: \" + this.header + \"+\";\n if (this.length >= 0)\n s += this.length;\n else\n s += (-this.length) + \" (undefined)\";\n if (this.tag & 0x20)\n s += \"
(constructed)\";\n else if (((this.tag == 0x03) || (this.tag == 0x04)) && (this.sub !== null))\n s += \"
(encapsulates)\";\n //TODO if (this.tag == 0x03) s += \"Unused bits: \"\n if (content !== null) {\n s += \"
Value:
\" + content + \"\";\n if ((typeof oids === 'object') && (this.tag == 0x06)) {\n var oid = oids[content];\n if (oid) {\n if (oid.d) s += \"
\" + oid.d;\n if (oid.c) s += \"
\" + oid.c;\n if (oid.w) s += \"
(warning!)\";\n }\n }\n }\n value.innerHTML = s;\n node.appendChild(value);\n var sub = DOM.tag(\"div\", \"sub\");\n if (this.sub !== null) {\n for (var i = 0, max = this.sub.length; i < max; ++i)\n sub.appendChild(this.sub[i].toDOM());\n }\n node.appendChild(sub);\n head.onclick = function () {\n node.className = (node.className == \"node collapsed\") ? \"node\" : \"node collapsed\";\n };\n return node;\n};\nASN1.prototype.posStart = function () {\n return this.stream.pos;\n};\nASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n};\nASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n};\nASN1.prototype.fakeHover = function (current) {\n this.node.className += \" hover\";\n if (current)\n this.head.className += \" hover\";\n};\nASN1.prototype.fakeOut = function (current) {\n var re = / ?hover/;\n this.node.className = this.node.className.replace(re, \"\");\n if (current)\n this.head.className = this.head.className.replace(re, \"\");\n};\nASN1.prototype.toHexDOM_sub = function (node, className, stream, start, end) {\n if (start >= end)\n return;\n var sub = DOM.tag(\"span\", className);\n sub.appendChild(DOM.text(\n stream.hexDump(start, end)));\n node.appendChild(sub);\n};\nASN1.prototype.toHexDOM = function (root) {\n var node = DOM.tag(\"span\", \"hex\");\n if (root === undefined) root = node;\n this.head.hexNode = node;\n this.head.onmouseover = function () { this.hexNode.className = \"hexCurrent\"; };\n this.head.onmouseout = function () { this.hexNode.className = \"hex\"; };\n node.asn1 = this;\n node.onmouseover = function () {\n var current = !root.selected;\n if (current) {\n root.selected = this.asn1;\n this.className = \"hexCurrent\";\n }\n this.asn1.fakeHover(current);\n };\n node.onmouseout = function () {\n var current = (root.selected == this.asn1);\n this.asn1.fakeOut(current);\n if (current) {\n root.selected = null;\n this.className = \"hex\";\n }\n };\n this.toHexDOM_sub(node, \"tag\", this.stream, this.posStart(), this.posStart() + 1);\n this.toHexDOM_sub(node, (this.length >= 0) ? \"dlen\" : \"ulen\", this.stream, this.posStart() + 1, this.posContent());\n if (this.sub === null)\n node.appendChild(DOM.text(\n this.stream.hexDump(this.posContent(), this.posEnd())));\n else if (this.sub.length > 0) {\n var first = this.sub[0];\n var last = this.sub[this.sub.length - 1];\n this.toHexDOM_sub(node, \"intro\", this.stream, this.posContent(), first.posStart());\n for (var i = 0, max = this.sub.length; i < max; ++i)\n node.appendChild(this.sub[i].toHexDOM(root));\n this.toHexDOM_sub(node, \"outro\", this.stream, last.posEnd(), this.posEnd());\n }\n return node;\n};\nASN1.prototype.toHexString = function (root) {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n};\nASN1.decodeLength = function (stream) {\n var buf = stream.get(),\n len = buf & 0x7F;\n if (len == buf)\n return len;\n if (len > 3)\n throw \"Length over 24 bits not supported at position \" + (stream.pos - 1);\n if (len === 0)\n return -1; // undefined\n buf = 0;\n for (var i = 0; i < len; ++i)\n buf = (buf << 8) | stream.get();\n return buf;\n};\nASN1.hasContent = function (tag, len, stream) {\n if (tag & 0x20) // constructed\n return true;\n if ((tag < 0x03) || (tag > 0x04))\n return false;\n var p = new Stream(stream);\n if (tag == 0x03) p.get(); // BitString unused bits, must be in [0, 7]\n var subTag = p.get();\n if ((subTag >> 6) & 0x01) // not (universal or context)\n return false;\n try {\n var subLength = ASN1.decodeLength(p);\n return ((p.pos - stream.pos) + subLength == len);\n } catch (exception) {\n return false;\n }\n};\nASN1.decode = function (stream) {\n if (!(stream instanceof Stream))\n stream = new Stream(stream, 0);\n var streamStart = new Stream(stream),\n tag = stream.get(),\n len = ASN1.decodeLength(stream),\n header = stream.pos - streamStart.pos,\n sub = null;\n if (ASN1.hasContent(tag, len, stream)) {\n // it has content, so we decode it\n var start = stream.pos;\n if (tag == 0x03) stream.get(); // skip BitString unused bits, must be in [0, 7]\n sub = [];\n if (len >= 0) {\n // definite length\n var end = start + len;\n while (stream.pos < end)\n sub[sub.length] = ASN1.decode(stream);\n if (stream.pos != end)\n throw \"Content size is not correct for container starting at offset \" + start;\n } else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag === 0)\n break;\n sub[sub.length] = s;\n }\n len = start - stream.pos;\n } catch (e) {\n throw \"Exception while decoding undefined length content: \" + e;\n }\n }\n } else\n stream.pos += len; // skip content\n return new ASN1(streamStart, header, len, tag, sub);\n};\nASN1.test = function () {\n var test = [\n { value: [0x27], expected: 0x27 },\n { value: [0x81, 0xC9], expected: 0xC9 },\n { value: [0x83, 0xFE, 0xDC, 0xBA], expected: 0xFEDCBA }\n ];\n for (var i = 0, max = test.length; i < max; ++i) {\n var pos = 0,\n stream = new Stream(test[i].value, 0),\n res = ASN1.decodeLength(stream);\n if (res != test[i].expected)\n document.write(\"In test[\" + i + \"] expected \" + test[i].expected + \" got \" + res + \"\\n\");\n }\n};\n\n// export globals\nwindow.ASN1 = ASN1;\n})();/**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\nASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n};\n\n/**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\nRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem);\n var asn1 = ASN1.decode(der);\n\n //Fixes a bug with OpenSSL 1.0+ private keys\n if(asn1.sub.length === 3){\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); //bigint\n this.n = parseBigInt(modulus, 16);\n\n public_exponent = asn1.sub[2].getHexStringValue(); //int\n this.e = parseInt(public_exponent, 16);\n\n var private_exponent = asn1.sub[3].getHexStringValue(); //bigint\n this.d = parseBigInt(private_exponent, 16);\n\n var prime1 = asn1.sub[4].getHexStringValue(); //bigint\n this.p = parseBigInt(prime1, 16);\n\n var prime2 = asn1.sub[5].getHexStringValue(); //bigint\n this.q = parseBigInt(prime2, 16);\n\n var exponent1 = asn1.sub[6].getHexStringValue(); //bigint\n this.dmp1 = parseBigInt(exponent1, 16);\n\n var exponent2 = asn1.sub[7].getHexStringValue(); //bigint\n this.dmq1 = parseBigInt(exponent2, 16);\n\n var coefficient = asn1.sub[8].getHexStringValue(); //bigint\n this.coeff = parseBigInt(coefficient, 16);\n\n }\n else if (asn1.sub.length === 2) {\n\n // Parse the public key.\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n\n modulus = sequence.sub[0].getHexStringValue();\n this.n = parseBigInt(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n};\n\n/**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\nRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n 'array': [\n new KJUR.asn1.DERInteger({'int': 0}),\n new KJUR.asn1.DERInteger({'bigint': this.n}),\n new KJUR.asn1.DERInteger({'int': this.e}),\n new KJUR.asn1.DERInteger({'bigint': this.d}),\n new KJUR.asn1.DERInteger({'bigint': this.p}),\n new KJUR.asn1.DERInteger({'bigint': this.q}),\n new KJUR.asn1.DERInteger({'bigint': this.dmp1}),\n new KJUR.asn1.DERInteger({'bigint': this.dmq1}),\n new KJUR.asn1.DERInteger({'bigint': this.coeff})\n ]\n };\n var seq = new KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n};\n\n/**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\nRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return hex2b64(this.getPrivateBaseKey());\n};\n\n/**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\nRSAKey.prototype.getPublicBaseKey = function () {\n var options = {\n 'array': [\n new KJUR.asn1.DERObjectIdentifier({'oid': '1.2.840.113549.1.1.1'}), //RSA Encryption pkcs #1 oid\n new KJUR.asn1.DERNull()\n ]\n };\n var first_sequence = new KJUR.asn1.DERSequence(options);\n\n options = {\n 'array': [\n new KJUR.asn1.DERInteger({'bigint': this.n}),\n new KJUR.asn1.DERInteger({'int': this.e})\n ]\n };\n var second_sequence = new KJUR.asn1.DERSequence(options);\n\n options = {\n 'hex': '00' + second_sequence.getEncodedHex()\n };\n var bit_string = new KJUR.asn1.DERBitString(options);\n\n options = {\n 'array': [\n first_sequence,\n bit_string\n ]\n };\n var seq = new KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n};\n\n/**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\nRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return hex2b64(this.getPublicBaseKey());\n};\n\n/**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\nRSAKey.prototype.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = '(.{1,' + width + '})( +|$\\n?)|(.{1,' + width + '})';\n return str.match(RegExp(regex, 'g')).join('\\n');\n};\n\n/**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\nRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += this.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n};\n\n/**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\nRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += this.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n};\n\n/**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\nRSAKey.prototype.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return (\n obj.hasOwnProperty('n') &&\n obj.hasOwnProperty('e')\n );\n};\n\n/**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\nRSAKey.prototype.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (\n obj.hasOwnProperty('n') &&\n obj.hasOwnProperty('e') &&\n obj.hasOwnProperty('d') &&\n obj.hasOwnProperty('p') &&\n obj.hasOwnProperty('q') &&\n obj.hasOwnProperty('dmp1') &&\n obj.hasOwnProperty('dmq1') &&\n obj.hasOwnProperty('coeff')\n );\n};\n\n/**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\nRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n\n if (obj.hasOwnProperty('d')) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n};\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = function (key) {\n // Call the super constructor.\n RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === 'string') {\n this.parseKey(key);\n }\n else if (\n this.hasPrivateKeyProperty(key) ||\n this.hasPublicKeyProperty(key)\n ) {\n // Set the values for the key.\n this.parsePropertiesFrom(key);\n }\n }\n};\n\n// Derive from RSAKey.\nJSEncryptRSAKey.prototype = new RSAKey();\n\n// Reset the contructor.\nJSEncryptRSAKey.prototype.constructor = JSEncryptRSAKey;\n\n\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = function (options) {\n options = options || {};\n this.default_key_size = parseInt(options.default_key_size) || 1024;\n this.default_public_exponent = options.default_public_exponent || '010001'; //65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n};\n\n/**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\nJSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn('A key was already set, overriding existing.');\n }\n this.key = new JSEncryptRSAKey(key);\n};\n\n/**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\nJSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n};\n\n/**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\nJSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n};\n\n/**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} string base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\nJSEncrypt.prototype.decrypt = function (string) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt(b64tohex(string));\n }\n catch (ex) {\n return false;\n }\n};\n\n/**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} string the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\nJSEncrypt.prototype.encrypt = function (string) {\n // Return the encrypted string.\n try {\n return hex2b64(this.getKey().encrypt(string));\n }\n catch (ex) {\n return false;\n }\n};\n\n/**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\nJSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === '[object Function]') {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n};\n\n/**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\nJSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n};\n\n/**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\nJSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n};\n\n\n/**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\nJSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n};\n\n/**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\nJSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n};\n\nexports.JSEncrypt = JSEncrypt;\n})(JSEncryptExports);\nvar JSEncrypt = JSEncryptExports.JSEncrypt;\n"],"names":["JSEncryptExports","exports","BigInteger","a","b","c","this","fromNumber","fromString","nbi","am1","i","x","w","j","n","v","Math","floor","am2","xl","xh","l","h","m","am3","int2char","BI_RM","charAt","intAt","s","BI_RC","charCodeAt","bnpCopyTo","r","t","bnpFromInt","DV","nbv","fromInt","bnpFromString","k","fromRadix","length","mi","sh","DB","clamp","ZERO","subTo","bnpClamp","DM","bnToString","negate","toString","toRadix","d","km","p","bnNegate","bnAbs","bnCompareTo","nbits","bnBitLength","bnpDLShiftTo","bnpDRShiftTo","max","bnpLShiftTo","bs","cbs","bm","ds","bnpRShiftTo","bnpSubTo","min","bnpMultiplyTo","abs","y","am","bnpSquareTo","bnpDivRemTo","q","pm","pt","copyTo","ts","ms","nsh","lShiftTo","ys","y0","yt","F1","F2","d1","FV","d2","e","dlShiftTo","compareTo","ONE","qd","drShiftTo","rShiftTo","bnMod","divRemTo","Classic","cConvert","mod","cRevert","cReduce","cMulTo","multiplyTo","reduce","cSqrTo","squareTo","bnpInvDigit","Montgomery","mp","invDigit","mpl","mph","um","mt2","montConvert","montRevert","montReduce","u0","montSqrTo","montMulTo","bnpIsEven","bnpExp","z","r2","g","convert","sqrTo","mulTo","revert","bnModPowInt","isEven","exp","bnClone","bnIntValue","bnByteValue","bnShortValue","bnpChunkSize","LN2","log","bnSigNum","bnpToRadix","signum","cs","chunkSize","pow","intValue","substr","bnpFromRadix","dMultiply","dAddOffset","bnpFromNumber","testBit","bitwiseTo","shiftLeft","op_or","isProbablePrime","bitLength","Array","nextBytes","bnToByteArray","bnEquals","bnMin","bnMax","bnpBitwiseTo","op","f","op_and","bnAnd","bnOr","op_xor","bnXor","op_andnot","bnAndNot","bnNot","bnShiftLeft","bnShiftRight","lbit","bnGetLowestSetBit","cbit","bnBitCount","bnTestBit","bnpChangeBit","bnSetBit","changeBit","bnClearBit","bnFlipBit","bnpAddTo","bnAdd","addTo","bnSubtract","bnMultiply","bnSquare","bnDivide","bnRemainder","bnDivideAndRemainder","bnpDMultiply","bnpDAddOffset","NullExp","nNop","nMulTo","nSqrTo","bnPow","bnpMultiplyLowerTo","bnpMultiplyUpperTo","Barrett","q3","mu","divide","barrettConvert","barrettRevert","barrettReduce","multiplyUpperTo","multiplyLowerTo","barrettSqrTo","barrettMulTo","bnModPow","k1","g2","is1","bnGCD","clone","getLowestSetBit","bnpModInt","bnModInverse","ac","u","subtract","add","bnIsProbablePrime","lowprimes","lplim","modInt","millerRabin","bnpMillerRabin","n1","shiftRight","random","modPow","modPowInt","Arcfour","S","ARC4init","key","ARC4next","prng_newstate","rng_get_byte","rng_state","rng_psize","rng_pptr","rng_pool","init","next","rng_get_bytes","ba","SecureRandom","parseBigInt","str","pkcs1pad2","rng","RSAKey","dmp1","dmq1","coeff","RSASetPublic","N","E","parseInt","RSADoPublic","RSAEncrypt","text","doPublic","pkcs1unpad2","toByteArray","ret","String","fromCharCode","RSASetPrivate","D","RSASetPrivateEx","P","Q","DP","DQ","C","RSAGenerate","B","qs","ee","gcd","p1","q1","phi","multiply","modInverse","RSADoPrivate","xp","xq","RSADecrypt","ctext","doPrivate","hex2b64","substring","b64map","b64pad","b64tohex","slop","indexOf","dbits","canary","j_lm","navigator","appName","prototype","BI_FP","rr","vv","byteValue","shortValue","equals","and","or","xor","andNot","not","bitCount","setBit","clearBit","flipBit","remainder","divideAndRemainder","square","window","crypto","getRandomValues","Uint32Array","onMouseMoveListener","ev","count","removeEventListener","detachEvent","mouseCoordinates","addEventListener","attachEvent","setPublic","encrypt","setPrivate","setPrivateEx","generate","decrypt","RSAGenerateAsync","callback","rsa","loop1","loop4","setTimeout","loop3","fromNumberAsync","gcda","loop2","generateAsync","bnGCDAsync","gcda1","bnpFromNumberAsync","bnp","bnpfn1","JSX","env","L","OP","Object","FUNCTION_TOSTRING","ADD","parseUA","agent","numberify","parseFloat","replace","nav","o","ie","opera","gecko","webkit","chrome","mobile","air","ipad","iphone","ipod","ios","android","webos","caja","cajaVersion","secure","os","ua","userAgent","loc","location","href","toLowerCase","test","match","isFunction","apply","_IEEnumFix","fname","extend","subc","superc","overrides","Error","F","constructor","superclass","hasOwnProperty","KJUR","asn1","ASN1Util","integerToByteHex","bigIntToMinTwosComplementsHex","bigIntegerValue","hPos","xorLen","hMask","biMask","biNeg","getPEMStringFromHex","dataHex","pemHeader","dataWA","CryptoJS","enc","Hex","parse","dataB64","Base64","stringify","pemBody","ASN1Object","hV","getLengthHexFromValue","hN","hNlen","head","getEncodedHex","hTLV","isModified","getFreshValueHex","hL","hT","getValueHex","DERAbstractString","params","call","getString","setString","newS","stohex","setStringHex","newHexString","DERAbstractTime","localDateToUTC","utc","getTime","getTimezoneOffset","utcDate","Date","formatDate","dateObject","type","pad","zeroPadding","year","getFullYear","month","getMonth","day","getDate","hour","getHours","getMinutes","sec","getSeconds","len","join","setByDateValue","UTC","setByDate","DERAbstractStructured","setByASN1ObjectArray","asn1ObjectArray","asn1Array","appendASN1Object","asn1Object","push","DERBoolean","DERInteger","setByBigInteger","setByInteger","bi","setValueHex","DERBitString","setHexValueIncludingUnusedBits","newHexStringIncludingUnusedBits","setUnusedBitsAndHexValue","unusedBits","hValue","hUnusedBits","setByBinaryString","binaryString","setByBooleanArray","booleanArray","newFalseArray","nLength","DEROctetString","DERNull","DERObjectIdentifier","itox","roidtox","roid","padLen","bPad","b8","setValueOidString","oidString","split","i0","splice","setValueName","oidName","x509","OID","name2oidList","oid","DERUTF8String","DERNumericString","DERPrintableString","DERTeletexString","DERIA5String","DERUTCTime","date","DERGeneralizedTime","DERSequence","asn1Obj","DERSet","sort","DERTaggedObject","isExplicit","setASN1Object","isExplicitFlag","tagNoHex","undefined","decoder","decode","hex","ignore","out","bits","char_count","b64","re","unarmor","exec","Stream","pos","ASN1","stream","header","tag","sub","hardLimit","ellipsis","DOM","tagName","className","document","createElement","createTextNode","get","hexDigits","hexByte","hexDump","start","end","raw","parseStringISO","parseStringUTF","parseStringBMP","high_byte","low_byte","reTime","parseTime","parseInteger","parseBitString","unusedBit","lenBit","skip","parseOctetString","parseOID","typeName","tagClass","tagNumber","reSeemsASCII","content","posContent","print","indent","writeln","toPrettyString","toDOM","node","innerHTML","preview","appendChild","value","oids","onclick","posStart","posEnd","fakeHover","current","fakeOut","toHexDOM_sub","toHexDOM","root","hexNode","onmouseover","onmouseout","selected","first","last","toHexString","decodeLength","buf","hasContent","subTag","subLength","exception","streamStart","expected","res","write","getHexStringValue","hexString","offset","parseKey","pem","modulus","public_exponent","reHex","der","private_exponent","prime1","prime2","exponent1","exponent2","coefficient","bit_string","sequence","ex","getPrivateBaseKey","options","array","int","bigint","seq","getPrivateBaseKeyB64","getPublicBaseKey","first_sequence","second_sequence","getPublicBaseKeyB64","wordwrap","width","regex","RegExp","getPrivateKey","getPublicKey","hasPublicKeyProperty","obj","hasPrivateKeyProperty","parsePropertiesFrom","JSEncryptRSAKey","JSEncrypt","default_key_size","default_public_exponent","setKey","setPrivateKey","privkey","setPublicKey","pubkey","string","getKey","cb","getPrivateKeyB64","getPublicKeyB64"],"mappings":"AAAA,GAAIA,sBACJ,SAAUC,GAeV,QAASC,GAAWC,EAAEC,EAAEC,GACd,MAALF,IACE,gBAAmBA,GAAGG,KAAKC,WAAWJ,EAAEC,EAAEC,GAChC,MAALD,GAAa,gBAAmBD,GAAGG,KAAKE,WAAWL,EAAE,KACxDG,KAAKE,WAAWL,EAAEC,IAI3B,QAASK,KAAQ,MAAO,IAAIP,GAAW,MAUvC,QAASQ,GAAIC,EAAEC,EAAEC,EAAEC,EAAET,EAAEU,GACrB,OAAQA,GAAK,GAAG,CACd,GAAIC,GAAIJ,EAAEN,KAAKK,KAAKE,EAAEC,GAAGT,CACzBA,GAAIY,KAAKC,MAAMF,EAAE,UACjBH,EAAEC,KAAS,SAAFE,EAEX,MAAOX,GAKT,QAASc,GAAIR,EAAEC,EAAEC,EAAEC,EAAET,EAAEU,GAErB,IADA,GAAIK,GAAO,MAAFR,EAAUS,EAAKT,GAAG,KACnBG,GAAK,GAAG,CACd,GAAIO,GAAY,MAARhB,KAAKK,GACTY,EAAIjB,KAAKK,MAAM,GACfa,EAAIH,EAAGC,EAAEC,EAAEH,CACfE,GAAIF,EAAGE,IAAM,MAAFE,IAAW,IAAIX,EAAEC,IAAM,WAAFT,GAChCA,GAAKiB,IAAI,KAAKE,IAAI,IAAIH,EAAGE,GAAGlB,IAAI,IAChCQ,EAAEC,KAAS,WAAFQ,EAEX,MAAOjB,GAIT,QAASoB,GAAId,EAAEC,EAAEC,EAAEC,EAAET,EAAEU,GAErB,IADA,GAAIK,GAAO,MAAFR,EAAUS,EAAKT,GAAG,KACnBG,GAAK,GAAG,CACd,GAAIO,GAAY,MAARhB,KAAKK,GACTY,EAAIjB,KAAKK,MAAM,GACfa,EAAIH,EAAGC,EAAEC,EAAEH,CACfE,GAAIF,EAAGE,IAAM,MAAFE,IAAW,IAAIX,EAAEC,GAAGT,EAC/BA,GAAKiB,GAAG,KAAKE,GAAG,IAAIH,EAAGE,EACvBV,EAAEC,KAAS,UAAFQ,EAEX,MAAOjB,GAmCT,QAASqB,GAASX,GAAK,MAAOY,IAAMC,OAAOb,GAC3C,QAASc,GAAMC,EAAEnB,GACf,GAAIN,GAAI0B,GAAMD,EAAEE,WAAWrB,GAC3B,OAAW,OAAHN,EAAS,GAAGA,EAItB,QAAS4B,GAAUC,GACjB,IAAI,GAAIvB,GAAIL,KAAK6B,EAAE,EAAGxB,GAAK,IAAKA,EAAGuB,EAAEvB,GAAKL,KAAKK,EAC/CuB,GAAEC,EAAI7B,KAAK6B,EACXD,EAAEJ,EAAIxB,KAAKwB,EAIb,QAASM,GAAWxB,GAClBN,KAAK6B,EAAI,EACT7B,KAAKwB,EAAO,EAAFlB,EAAK,GAAG,EACfA,EAAI,EAAGN,KAAK,GAAKM,EACR,GAAJA,EAAQN,KAAK,GAAKM,EAAEN,KAAK+B,GAC5B/B,KAAK6B,EAAI,EAIhB,QAASG,GAAI3B,GAAK,GAAIuB,GAAIzB,GAAqB,OAAdyB,GAAEK,QAAQ5B,GAAWuB,EAGtD,QAASM,GAAcV,EAAE1B,GACvB,GAAIqC,EACJ,IAAQ,IAALrC,EAASqC,EAAI,MACX,IAAQ,GAALrC,EAAQqC,EAAI,MACf,IAAQ,KAALrC,EAAUqC,EAAI,MACjB,IAAQ,GAALrC,EAAQqC,EAAI,MACf,IAAQ,IAALrC,EAASqC,EAAI,MAChB,CAAA,GAAQ,GAALrC,EACoB,WAArBE,MAAKoC,UAAUZ,EAAE1B,EADRqC,GAAI,EAEpBnC,KAAK6B,EAAI,EACT7B,KAAKwB,EAAI,CAET,KADA,GAAInB,GAAImB,EAAEa,OAAQC,GAAK,EAAOC,EAAK,IAC3BlC,GAAK,GAAG,CACd,GAAIC,GAAQ,GAAH6B,EAAW,IAALX,EAAEnB,GAAQkB,EAAMC,EAAEnB,EAC1B,GAAJC,EACiB,KAAfkB,EAAEF,OAAOjB,KAAWiC,GAAK,IAG9BA,GAAK,EACI,GAANC,EACDvC,KAAKA,KAAK6B,KAAOvB,EACXiC,EAAGJ,EAAInC,KAAKwC,IAClBxC,KAAKA,KAAK6B,EAAE,KAAOvB,GAAI,GAAIN,KAAKwC,GAAGD,GAAK,IAAKA,EAC7CvC,KAAKA,KAAK6B,KAAQvB,GAAIN,KAAKwC,GAAGD,GAG9BvC,KAAKA,KAAK6B,EAAE,IAAMvB,GAAGiC,EACvBA,GAAMJ,EACHI,GAAMvC,KAAKwC,KAAID,GAAMvC,KAAKwC,KAEvB,GAALL,GAAyB,IAAT,IAALX,EAAE,MACdxB,KAAKwB,EAAI,GACNe,EAAK,IAAGvC,KAAKA,KAAK6B,EAAE,KAAQ,GAAI7B,KAAKwC,GAAGD,GAAK,GAAIA,IAEtDvC,KAAKyC,QACFH,GAAI1C,EAAW8C,KAAKC,MAAM3C,KAAKA,MAIpC,QAAS4C,KAEP,IADA,GAAI7C,GAAIC,KAAKwB,EAAExB,KAAK6C,GACd7C,KAAK6B,EAAI,GAAK7B,KAAKA,KAAK6B,EAAE,IAAM9B,KAAKC,KAAK6B,EAIlD,QAASiB,GAAWhD,GAClB,GAAGE,KAAKwB,EAAI,EAAG,MAAO,IAAIxB,KAAK+C,SAASC,SAASlD,EACjD,IAAIqC,EACJ,IAAQ,IAALrC,EAASqC,EAAI,MACX,IAAQ,GAALrC,EAAQqC,EAAI,MACf,IAAQ,GAALrC,EAAQqC,EAAI,MACf,IAAQ,IAALrC,EAASqC,EAAI,MAChB,CAAA,GAAQ,GAALrC,EACH,MAAOE,MAAKiD,QAAQnD,EADTqC,GAAI,EAEpB,GAAmBe,GAAfC,GAAM,GAAGhB,GAAG,EAAMjB,GAAI,EAAOU,EAAI,GAAIvB,EAAIL,KAAK6B,EAC9CuB,EAAIpD,KAAKwC,GAAInC,EAAEL,KAAKwC,GAAIL,CAC5B,IAAG9B,IAAM,EAEP,IADG+C,EAAIpD,KAAKwC,KAAOU,EAAIlD,KAAKK,IAAI+C,GAAK,IAAKlC,GAAI,EAAMU,EAAIR,EAAS8B,IAC3D7C,GAAK,GACF8B,EAAJiB,GACDF,GAAKlD,KAAKK,IAAK,GAAG+C,GAAG,IAAMjB,EAAEiB,EAC7BF,GAAKlD,OAAOK,KAAK+C,GAAGpD,KAAKwC,GAAGL,KAG5Be,EAAKlD,KAAKK,KAAK+C,GAAGjB,GAAIgB,EACd,GAALC,IAAUA,GAAKpD,KAAKwC,KAAMnC,IAE5B6C,EAAI,IAAGhC,GAAI,GACXA,IAAGU,GAAKR,EAAS8B,GAGxB,OAAOhC,GAAEU,EAAE,IAIb,QAASyB,KAAa,GAAIzB,GAAIzB,GAAsC,OAA/BP,GAAW8C,KAAKC,MAAM3C,KAAK4B,GAAWA,EAG3E,QAAS0B,KAAU,MAAQtD,MAAKwB,EAAE,EAAGxB,KAAK+C,SAAS/C,KAGnD,QAASuD,GAAY1D,GACnB,GAAI+B,GAAI5B,KAAKwB,EAAE3B,EAAE2B,CACjB,IAAQ,GAALI,EAAQ,MAAOA,EAClB,IAAIvB,GAAIL,KAAK6B,CAEb,IADAD,EAAIvB,EAAER,EAAEgC,EACA,GAALD,EAAQ,MAAQ5B,MAAKwB,EAAE,GAAII,EAAEA,CAChC,QAAQvB,GAAK,GAAG,GAAuB,IAAnBuB,EAAE5B,KAAKK,GAAGR,EAAEQ,IAAU,MAAOuB,EACjD,OAAO,GAIT,QAAS4B,GAAMlD,GACb,GAAWuB,GAAPD,EAAI,CAMR,OALiB,KAAbC,EAAEvB,IAAI,MAAYA,EAAIuB,EAAGD,GAAK,IACnB,IAAXC,EAAEvB,GAAG,KAAWA,EAAIuB,EAAGD,GAAK,GACjB,IAAXC,EAAEvB,GAAG,KAAWA,EAAIuB,EAAGD,GAAK,GACjB,IAAXC,EAAEvB,GAAG,KAAWA,EAAIuB,EAAGD,GAAK,GACjB,IAAXC,EAAEvB,GAAG,KAAWA,EAAIuB,EAAGD,GAAK,GACzBA,EAIT,QAAS6B,KACP,MAAGzD,MAAK6B,GAAK,EAAU,EAChB7B,KAAKwC,IAAIxC,KAAK6B,EAAE,GAAG2B,EAAMxD,KAAKA,KAAK6B,EAAE,GAAI7B,KAAKwB,EAAExB,KAAK6C,IAI9D,QAASa,GAAajD,EAAEmB,GACtB,GAAIvB,EACJ,KAAIA,EAAIL,KAAK6B,EAAE,EAAGxB,GAAK,IAAKA,EAAGuB,EAAEvB,EAAEI,GAAKT,KAAKK,EAC7C,KAAIA,EAAII,EAAE,EAAGJ,GAAK,IAAKA,EAAGuB,EAAEvB,GAAK,CACjCuB,GAAEC,EAAI7B,KAAK6B,EAAEpB,EACbmB,EAAEJ,EAAIxB,KAAKwB,EAIb,QAASmC,GAAalD,EAAEmB,GACtB,IAAI,GAAIvB,GAAII,EAAGJ,EAAIL,KAAK6B,IAAKxB,EAAGuB,EAAEvB,EAAEI,GAAKT,KAAKK,EAC9CuB,GAAEC,EAAIlB,KAAKiD,IAAI5D,KAAK6B,EAAEpB,EAAE,GACxBmB,EAAEJ,EAAIxB,KAAKwB,EAIb,QAASqC,GAAYpD,EAAEmB,GACrB,GAG0DvB,GAHtDyD,EAAKrD,EAAET,KAAKwC,GACZuB,EAAM/D,KAAKwC,GAAGsB,EACdE,GAAM,GAAGD,GAAK,EACdE,EAAKtD,KAAKC,MAAMH,EAAET,KAAKwC,IAAKzC,EAAKC,KAAKwB,GAAGsC,EAAI9D,KAAK6C,EACtD,KAAIxC,EAAIL,KAAK6B,EAAE,EAAGxB,GAAK,IAAKA,EAC1BuB,EAAEvB,EAAE4D,EAAG,GAAMjE,KAAKK,IAAI0D,EAAKhE,EAC3BA,GAAKC,KAAKK,GAAG2D,IAAKF,CAEpB,KAAIzD,EAAI4D,EAAG,EAAG5D,GAAK,IAAKA,EAAGuB,EAAEvB,GAAK,CAClCuB,GAAEqC,GAAMlE,EACR6B,EAAEC,EAAI7B,KAAK6B,EAAEoC,EAAG,EAChBrC,EAAEJ,EAAIxB,KAAKwB,EACXI,EAAEa,QAIJ,QAASyB,GAAYzD,EAAEmB,GACrBA,EAAEJ,EAAIxB,KAAKwB,CACX,IAAIyC,GAAKtD,KAAKC,MAAMH,EAAET,KAAKwC,GAC3B,IAAGyB,GAAMjE,KAAK6B,EAAc,YAATD,EAAEC,EAAI,EACzB,IAAIiC,GAAKrD,EAAET,KAAKwC,GACZuB,EAAM/D,KAAKwC,GAAGsB,EACdE,GAAM,GAAGF,GAAI,CACjBlC,GAAE,GAAK5B,KAAKiE,IAAKH,CACjB,KAAI,GAAIzD,GAAI4D,EAAG,EAAG5D,EAAIL,KAAK6B,IAAKxB,EAC9BuB,EAAEvB,EAAE4D,EAAG,KAAOjE,KAAKK,GAAG2D,IAAKD,EAC3BnC,EAAEvB,EAAE4D,GAAMjE,KAAKK,IAAIyD,CAElBA,GAAK,IAAGlC,EAAE5B,KAAK6B,EAAEoC,EAAG,KAAOjE,KAAKwB,EAAEwC,IAAKD,GAC1CnC,EAAEC,EAAI7B,KAAK6B,EAAEoC,EACbrC,EAAEa,QAIJ,QAAS0B,GAAStE,EAAE+B,GAElB,IADA,GAAIvB,GAAI,EAAGN,EAAI,EAAGmB,EAAIP,KAAKyD,IAAIvE,EAAEgC,EAAE7B,KAAK6B,GAC9BX,EAAJb,GACJN,GAAKC,KAAKK,GAAGR,EAAEQ,GACfuB,EAAEvB,KAAON,EAAEC,KAAK6C,GAChB9C,IAAMC,KAAKwC,EAEb,IAAG3C,EAAEgC,EAAI7B,KAAK6B,EAAG,CAEf,IADA9B,GAAKF,EAAE2B,EACDnB,EAAIL,KAAK6B,GACb9B,GAAKC,KAAKK,GACVuB,EAAEvB,KAAON,EAAEC,KAAK6C,GAChB9C,IAAMC,KAAKwC,EAEbzC,IAAKC,KAAKwB,MAEP,CAEH,IADAzB,GAAKC,KAAKwB,EACJnB,EAAIR,EAAEgC,GACV9B,GAAKF,EAAEQ,GACPuB,EAAEvB,KAAON,EAAEC,KAAK6C,GAChB9C,IAAMC,KAAKwC,EAEbzC,IAAKF,EAAE2B,EAETI,EAAEJ,EAAO,EAAFzB,EAAK,GAAG,EACR,GAAJA,EAAQ6B,EAAEvB,KAAOL,KAAK+B,GAAGhC,EACpBA,EAAI,IAAG6B,EAAEvB,KAAON,GACxB6B,EAAEC,EAAIxB,EACNuB,EAAEa,QAKJ,QAAS4B,GAAcxE,EAAE+B,GACvB,GAAItB,GAAIN,KAAKsE,MAAOC,EAAI1E,EAAEyE,MACtBjE,EAAIC,EAAEuB,CAEV,KADAD,EAAEC,EAAIxB,EAAEkE,EAAE1C,IACFxB,GAAK,GAAGuB,EAAEvB,GAAK,CACvB,KAAIA,EAAI,EAAGA,EAAIkE,EAAE1C,IAAKxB,EAAGuB,EAAEvB,EAAEC,EAAEuB,GAAKvB,EAAEkE,GAAG,EAAED,EAAElE,GAAGuB,EAAEvB,EAAE,EAAEC,EAAEuB,EACxDD,GAAEJ,EAAI,EACNI,EAAEa,QACCzC,KAAKwB,GAAK3B,EAAE2B,GAAG5B,EAAW8C,KAAKC,MAAMf,EAAEA,GAI5C,QAAS6C,GAAY7C,GAGnB,IAFA,GAAItB,GAAIN,KAAKsE,MACTjE,EAAIuB,EAAEC,EAAI,EAAEvB,EAAEuB,IACVxB,GAAK,GAAGuB,EAAEvB,GAAK,CACvB,KAAIA,EAAI,EAAGA,EAAIC,EAAEuB,EAAE,IAAKxB,EAAG,CACzB,GAAIN,GAAIO,EAAEkE,GAAGnE,EAAEC,EAAED,GAAGuB,EAAE,EAAEvB,EAAE,EAAE,IACxBuB,EAAEvB,EAAEC,EAAEuB,IAAIvB,EAAEkE,GAAGnE,EAAE,EAAE,EAAEC,EAAED,GAAGuB,EAAE,EAAEvB,EAAE,EAAEN,EAAEO,EAAEuB,EAAExB,EAAE,KAAOC,EAAEyB,KACrDH,EAAEvB,EAAEC,EAAEuB,IAAMvB,EAAEyB,GACdH,EAAEvB,EAAEC,EAAEuB,EAAE,GAAK,GAGdD,EAAEC,EAAI,IAAGD,EAAEA,EAAEC,EAAE,IAAMvB,EAAEkE,GAAGnE,EAAEC,EAAED,GAAGuB,EAAE,EAAEvB,EAAE,EAAE,IAC5CuB,EAAEJ,EAAI,EACNI,EAAEa,QAKJ,QAASiC,GAAYxD,EAAEyD,EAAE/C,GACvB,GAAIgD,GAAK1D,EAAEoD,KACX,MAAGM,EAAG/C,GAAK,GAAX,CACA,GAAIgD,GAAK7E,KAAKsE,KACd,IAAGO,EAAGhD,EAAI+C,EAAG/C,EAGX,MAFQ,OAAL8C,GAAWA,EAAE1C,QAAQ,QAChB,MAALL,GAAW5B,KAAK8E,OAAOlD,GAGpB,OAALA,IAAWA,EAAIzB,IAClB,IAAIoE,GAAIpE,IAAO4E,EAAK/E,KAAKwB,EAAGwD,EAAK9D,EAAEM,EAC/ByD,EAAMjF,KAAKwC,GAAGgB,EAAMoB,EAAGA,EAAG/C,EAAE,GAC7BoD,GAAM,GAAKL,EAAGM,SAASD,EAAIV,GAAIM,EAAGK,SAASD,EAAIrD,KAC3CgD,EAAGE,OAAOP,GAAIM,EAAGC,OAAOlD,GAC/B,IAAIuD,GAAKZ,EAAE1C,EACPuD,EAAKb,EAAEY,EAAG,EACd,IAAS,GAANC,EAAH,CACA,GAAIC,GAAKD,GAAI,GAAGpF,KAAKsF,KAAMH,EAAG,EAAGZ,EAAEY,EAAG,IAAInF,KAAKuF,GAAG,GAC9CC,EAAKxF,KAAKyF,GAAGJ,EAAIK,GAAM,GAAG1F,KAAKsF,IAAID,EAAIM,EAAI,GAAG3F,KAAKuF,GACnDlF,EAAIuB,EAAEC,EAAGrB,EAAIH,EAAE8E,EAAItD,EAAQ,MAAH8C,EAASxE,IAAMwE,CAQ3C,KAPAJ,EAAEqB,UAAUpF,EAAEqB,GACXD,EAAEiE,UAAUhE,IAAM,IACnBD,EAAEA,EAAEC,KAAO,EACXD,EAAEe,MAAMd,EAAED,IAEZhC,EAAWkG,IAAIF,UAAUT,EAAGtD,GAC5BA,EAAEc,MAAM4B,EAAEA,GACJA,EAAE1C,EAAIsD,GAAIZ,EAAEA,EAAE1C,KAAO,CAC3B,QAAQrB,GAAK,GAAG,CAEd,GAAIuF,GAAMnE,IAAIvB,IAAI+E,EAAIpF,KAAK6C,GAAGlC,KAAKC,MAAMgB,EAAEvB,GAAGmF,GAAI5D,EAAEvB,EAAE,GAAGsF,GAAGD,EAC5D,KAAI9D,EAAEvB,IAAIkE,EAAEC,GAAG,EAAEuB,EAAGnE,EAAEpB,EAAE,EAAE2E,IAAOY,EAG/B,IAFAxB,EAAEqB,UAAUpF,EAAEqB,GACdD,EAAEe,MAAMd,EAAED,GACJA,EAAEvB,KAAO0F,GAAInE,EAAEe,MAAMd,EAAED,GAGzB,MAAL+C,IACD/C,EAAEoE,UAAUb,EAAGR,GACZI,GAAMC,GAAIpF,EAAW8C,KAAKC,MAAMgC,EAAEA,IAEvC/C,EAAEC,EAAIsD,EACNvD,EAAEa,QACCwC,EAAM,GAAGrD,EAAEqE,SAAShB,EAAIrD,GACnB,EAALmD,GAAQnF,EAAW8C,KAAKC,MAAMf,EAAEA,KAIrC,QAASsE,GAAMrG,GACb,GAAI+B,GAAIzB,GAGR,OAFAH,MAAKsE,MAAM6B,SAAStG,EAAE,KAAK+B,GACxB5B,KAAKwB,EAAI,GAAKI,EAAEiE,UAAUjG,EAAW8C,MAAQ,GAAG7C,EAAE8C,MAAMf,EAAEA,GACtDA,EAIT,QAASwE,GAAQlF,GAAKlB,KAAKkB,EAAIA,EAC/B,QAASmF,GAAS/F,GAChB,MAAGA,GAAEkB,EAAI,GAAKlB,EAAEuF,UAAU7F,KAAKkB,IAAM,EAAUZ,EAAEgG,IAAItG,KAAKkB,GAC9CZ,EAEd,QAASiG,GAAQjG,GAAK,MAAOA,GAC7B,QAASkG,GAAQlG,GAAKA,EAAE6F,SAASnG,KAAKkB,EAAE,KAAKZ,GAC7C,QAASmG,GAAOnG,EAAEiE,EAAE3C,GAAKtB,EAAEoG,WAAWnC,EAAE3C,GAAI5B,KAAK2G,OAAO/E,GACxD,QAASgF,GAAOtG,EAAEsB,GAAKtB,EAAEuG,SAASjF,GAAI5B,KAAK2G,OAAO/E,GAkBlD,QAASkF,KACP,GAAG9G,KAAK6B,EAAI,EAAG,MAAO,EACtB,IAAIvB,GAAIN,KAAK,EACb,IAAY,IAAN,EAAFM,GAAW,MAAO,EACtB,IAAIiE,GAAM,EAAFjE,CAQR,OAPAiE,GAAKA,GAAG,GAAK,GAAFjE,GAAOiE,GAAI,GACtBA,EAAKA,GAAG,GAAK,IAAFjE,GAAQiE,GAAI,IACvBA,EAAKA,GAAG,IAAO,MAAFjE,GAAUiE,EAAG,QAAU,MAGpCA,EAAKA,GAAG,EAAEjE,EAAEiE,EAAEvE,KAAK+B,IAAK/B,KAAK+B,GAErBwC,EAAE,EAAGvE,KAAK+B,GAAGwC,GAAGA,EAI1B,QAASwC,GAAW7F,GAClBlB,KAAKkB,EAAIA,EACTlB,KAAKgH,GAAK9F,EAAE+F,WACZjH,KAAKkH,IAAc,MAARlH,KAAKgH,GAChBhH,KAAKmH,IAAMnH,KAAKgH,IAAI,GACpBhH,KAAKoH,IAAM,GAAIlG,EAAEsB,GAAG,IAAK,EACzBxC,KAAKqH,IAAM,EAAEnG,EAAEW,EAIjB,QAASyF,GAAYhH,GACnB,GAAIsB,GAAIzB,GAIR,OAHAG,GAAEgE,MAAMsB,UAAU5F,KAAKkB,EAAEW,EAAED,GAC3BA,EAAEuE,SAASnG,KAAKkB,EAAE,KAAKU,GACpBtB,EAAEkB,EAAI,GAAKI,EAAEiE,UAAUjG,EAAW8C,MAAQ,GAAG1C,KAAKkB,EAAEyB,MAAMf,EAAEA,GACxDA,EAIT,QAAS2F,GAAWjH,GAClB,GAAIsB,GAAIzB,GAGR,OAFAG,GAAEwE,OAAOlD,GACT5B,KAAK2G,OAAO/E,GACLA,EAIT,QAAS4F,GAAWlH,GAClB,KAAMA,EAAEuB,GAAK7B,KAAKqH,KAChB/G,EAAEA,EAAEuB,KAAO,CACb,KAAI,GAAIxB,GAAI,EAAGA,EAAIL,KAAKkB,EAAEW,IAAKxB,EAAG,CAEhC,GAAIG,GAAS,MAALF,EAAED,GACNoH,EAAMjH,EAAER,KAAKkH,MAAO1G,EAAER,KAAKmH,KAAK7G,EAAED,IAAI,IAAIL,KAAKkH,IAAKlH,KAAKoH,KAAK,IAAK9G,EAAEuC,EAKzE,KAHArC,EAAIH,EAAEL,KAAKkB,EAAEW,EACbvB,EAAEE,IAAMR,KAAKkB,EAAEsD,GAAG,EAAEiD,EAAGnH,EAAED,EAAE,EAAEL,KAAKkB,EAAEW,GAE9BvB,EAAEE,IAAMF,EAAEyB,IAAMzB,EAAEE,IAAMF,EAAEyB,GAAIzB,IAAIE,KAE1CF,EAAEmC,QACFnC,EAAE0F,UAAUhG,KAAKkB,EAAEW,EAAEvB,GAClBA,EAAEuF,UAAU7F,KAAKkB,IAAM,GAAGZ,EAAEqC,MAAM3C,KAAKkB,EAAEZ,GAI9C,QAASoH,GAAUpH,EAAEsB,GAAKtB,EAAEuG,SAASjF,GAAI5B,KAAK2G,OAAO/E,GAGrD,QAAS+F,GAAUrH,EAAEiE,EAAE3C,GAAKtB,EAAEoG,WAAWnC,EAAE3C,GAAI5B,KAAK2G,OAAO/E,GAS3D,QAASgG,KAAc,MAA0C,KAAjC5H,KAAK6B,EAAE,EAAY,EAAR7B,KAAK,GAAMA,KAAKwB,GAG3D,QAASqG,GAAOlC,EAAEmC,GAChB,GAAGnC,EAAI,YAAkB,EAAJA,EAAO,MAAO/F,GAAWkG,GAC9C,IAAIlE,GAAIzB,IAAO4H,EAAK5H,IAAO6H,EAAIF,EAAEG,QAAQjI,MAAOK,EAAImD,EAAMmC,GAAG,CAE7D,KADAqC,EAAElD,OAAOlD,KACDvB,GAAK,GAEX,GADAyH,EAAEI,MAAMtG,EAAEmG,IACNpC,EAAG,GAAGtF,GAAM,EAAGyH,EAAEK,MAAMJ,EAAGC,EAAEpG,OAC3B,CAAE,GAAIC,GAAID,CAAGA,GAAImG,EAAIA,EAAKlG,EAEjC,MAAOiG,GAAEM,OAAOxG,GAIlB,QAASyG,GAAY1C,EAAEzE,GACrB,GAAI4G,EAEJ,OAD0BA,GAAnB,IAAJnC,GAAWzE,EAAEoH,SAAc,GAAIlC,GAAQlF,GAAa,GAAI6F,GAAW7F,GAC/DlB,KAAKuI,IAAI5C,EAAEmC,GA0CpB,QAASU,KAAY,GAAI5G,GAAIzB,GAAuB,OAAhBH,MAAK8E,OAAOlD,GAAWA,EAG3D,QAAS6G,KACP,GAAGzI,KAAKwB,EAAI,EAAG,CACb,GAAa,GAAVxB,KAAK6B,EAAQ,MAAO7B,MAAK,GAAGA,KAAK+B,EAC/B,IAAa,GAAV/B,KAAK6B,EAAQ,MAAO,OAEzB,CAAA,GAAa,GAAV7B,KAAK6B,EAAQ,MAAO7B,MAAK,EAC5B,IAAa,GAAVA,KAAK6B,EAAQ,MAAO,GAE5B,OAAS7B,KAAK,IAAK,GAAI,GAAGA,KAAKwC,IAAK,IAAKxC,KAAKwC,GAAIxC,KAAK,GAIzD,QAAS0I,KAAgB,MAAgB,IAAR1I,KAAK6B,EAAM7B,KAAKwB,EAAGxB,KAAK,IAAI,IAAK,GAGlE,QAAS2I,KAAiB,MAAgB,IAAR3I,KAAK6B,EAAM7B,KAAKwB,EAAGxB,KAAK,IAAI,IAAK,GAGnE,QAAS4I,GAAahH,GAAK,MAAOjB,MAAKC,MAAMD,KAAKkI,IAAI7I,KAAKwC,GAAG7B,KAAKmI,IAAIlH,IAGvE,QAASmH,KACP,MAAG/I,MAAKwB,EAAI,EAAU,GACdxB,KAAK6B,GAAK,GAAgB,GAAV7B,KAAK6B,GAAU7B,KAAK,IAAM,EAAW,EACjD,EAId,QAASgJ,GAAWlJ,GAElB,GADQ,MAALA,IAAWA,EAAI,IACE,GAAjBE,KAAKiJ,UAAqB,EAAJnJ,GAASA,EAAI,GAAI,MAAO,GACjD,IAAIoJ,GAAKlJ,KAAKmJ,UAAUrJ,GACpBD,EAAIc,KAAKyI,IAAItJ,EAAEoJ,GACfhG,EAAIlB,EAAInC,GAAI0E,EAAIpE,IAAO2H,EAAI3H,IAAOyB,EAAI,EAE1C,KADA5B,KAAKmG,SAASjD,EAAEqB,EAAEuD,GACZvD,EAAE0E,SAAW,GACjBrH,GAAK/B,EAAEiI,EAAEuB,YAAYrG,SAASlD,GAAGwJ,OAAO,GAAK1H,EAC7C2C,EAAE4B,SAASjD,EAAEqB,EAAEuD,EAEjB,OAAOA,GAAEuB,WAAWrG,SAASlD,GAAK8B,EAIpC,QAAS2H,GAAa/H,EAAE1B,GACtBE,KAAKiC,QAAQ,GACL,MAALnC,IAAWA,EAAI,GAGlB,KAAI,GAFAoJ,GAAKlJ,KAAKmJ,UAAUrJ,GACpBoD,EAAIvC,KAAKyI,IAAItJ,EAAEoJ,GAAK5G,GAAK,EAAO9B,EAAI,EAAGD,EAAI,EACvCF,EAAI,EAAGA,EAAImB,EAAEa,SAAUhC,EAAG,CAChC,GAAIC,GAAIiB,EAAMC,EAAEnB,EACT,GAAJC,EACiB,KAAfkB,EAAEF,OAAOjB,IAA8B,GAAjBL,KAAKiJ,WAAe3G,GAAK,IAGpD/B,EAAIT,EAAES,EAAED,IACHE,GAAK0I,IACRlJ,KAAKwJ,UAAUtG,GACflD,KAAKyJ,WAAWlJ,EAAE,GAClBC,EAAI,EACJD,EAAI,IAGLC,EAAI,IACLR,KAAKwJ,UAAU7I,KAAKyI,IAAItJ,EAAEU,IAC1BR,KAAKyJ,WAAWlJ,EAAE,IAEjB+B,GAAI1C,EAAW8C,KAAKC,MAAM3C,KAAKA,MAIpC,QAAS0J,GAAc7J,EAAEC,EAAEC,GACzB,GAAG,gBAAmBD,GAEpB,GAAO,EAAJD,EAAOG,KAAKiC,QAAQ,OAMrB,KAJAjC,KAAKC,WAAWJ,EAAEE,GACdC,KAAK2J,QAAQ9J,EAAE,IACjBG,KAAK4J,UAAUhK,EAAWkG,IAAI+D,UAAUhK,EAAE,GAAGiK,GAAM9J,MAClDA,KAAKsI,UAAUtI,KAAKyJ,WAAW,EAAE,IAC7BzJ,KAAK+J,gBAAgBjK,IAC1BE,KAAKyJ,WAAW,EAAE,GACfzJ,KAAKgK,YAAcnK,GAAGG,KAAK2C,MAAM/C,EAAWkG,IAAI+D,UAAUhK,EAAE,GAAGG,UAInE,CAEH,GAAIM,GAAI,GAAI2J,OAASpI,EAAM,EAAFhC,CACzBS,GAAE+B,QAAUxC,GAAG,GAAG,EAClBC,EAAEoK,UAAU5J,GACTuB,EAAI,EAAGvB,EAAE,KAAQ,GAAGuB,GAAG,EAASvB,EAAE,GAAK,EAC1CN,KAAKE,WAAWI,EAAE,MAKtB,QAAS6J,MACP,GAAI9J,GAAIL,KAAK6B,EAAGD,EAAI,GAAIqI,MACxBrI,GAAE,GAAK5B,KAAKwB,CACZ,IAA+B0B,GAA3BE,EAAIpD,KAAKwC,GAAInC,EAAEL,KAAKwC,GAAI,EAAML,EAAI,CACtC,IAAG9B,IAAM,EAGP,IAFG+C,EAAIpD,KAAKwC,KAAOU,EAAIlD,KAAKK,IAAI+C,KAAOpD,KAAKwB,EAAExB,KAAK6C,KAAKO,IACtDxB,EAAEO,KAAOe,EAAGlD,KAAKwB,GAAIxB,KAAKwC,GAAGY,GACzB/C,GAAK,GACF,EAAJ+C,GACDF,GAAKlD,KAAKK,IAAK,GAAG+C,GAAG,IAAM,EAAEA,EAC7BF,GAAKlD,OAAOK,KAAK+C,GAAGpD,KAAKwC,GAAG,KAG5BU,EAAKlD,KAAKK,KAAK+C,GAAG,GAAI,IACd,GAALA,IAAUA,GAAKpD,KAAKwC,KAAMnC,IAEhB,IAAT,IAAF6C,KAAcA,GAAK,MACf,GAALf,IAAkB,IAAPnC,KAAKwB,KAAc,IAAF0B,MAAWf,GACvCA,EAAI,GAAKe,GAAKlD,KAAKwB,KAAGI,EAAEO,KAAOe,EAGtC,OAAOtB,GAGT,QAASwI,IAASvK,GAAK,MAA0B,IAAnBG,KAAK6F,UAAUhG,GAC7C,QAASwK,IAAMxK,GAAK,MAAOG,MAAK6F,UAAUhG,GAAG,EAAGG,KAAKH,EACrD,QAASyK,IAAMzK,GAAK,MAAOG,MAAK6F,UAAUhG,GAAG,EAAGG,KAAKH,EAGrD,QAAS0K,IAAa1K,EAAE2K,EAAG5I,GACzB,GAAIvB,GAAGoK,EAAGvJ,EAAIP,KAAKyD,IAAIvE,EAAEgC,EAAE7B,KAAK6B,EAChC,KAAIxB,EAAI,EAAOa,EAAJb,IAASA,EAAGuB,EAAEvB,GAAKmK,EAAGxK,KAAKK,GAAGR,EAAEQ,GAC3C,IAAGR,EAAEgC,EAAI7B,KAAK6B,EAAG,CAEf,IADA4I,EAAI5K,EAAE2B,EAAExB,KAAK6C,GACTxC,EAAIa,EAAGb,EAAIL,KAAK6B,IAAKxB,EAAGuB,EAAEvB,GAAKmK,EAAGxK,KAAKK,GAAGoK,EAC9C7I,GAAEC,EAAI7B,KAAK6B,MAER,CAEH,IADA4I,EAAIzK,KAAKwB,EAAExB,KAAK6C,GACZxC,EAAIa,EAAGb,EAAIR,EAAEgC,IAAKxB,EAAGuB,EAAEvB,GAAKmK,EAAGC,EAAE5K,EAAEQ,GACvCuB,GAAEC,EAAIhC,EAAEgC,EAEVD,EAAEJ,EAAIgJ,EAAGxK,KAAKwB,EAAE3B,EAAE2B,GAClBI,EAAEa,QAIJ,QAASiI,IAAOpK,EAAEiE,GAAK,MAAOjE,GAAEiE,EAChC,QAASoG,IAAM9K,GAAK,GAAI+B,GAAIzB,GAAmC,OAA5BH,MAAK4J,UAAU/J,EAAE6K,GAAO9I,GAAWA,EAGtE,QAASkI,IAAMxJ,EAAEiE,GAAK,MAAOjE,GAAEiE,EAC/B,QAASqG,IAAK/K,GAAK,GAAI+B,GAAIzB,GAAkC,OAA3BH,MAAK4J,UAAU/J,EAAEiK,GAAMlI,GAAWA,EAGpE,QAASiJ,IAAOvK,EAAEiE,GAAK,MAAOjE,GAAEiE,EAChC,QAASuG,IAAMjL,GAAK,GAAI+B,GAAIzB,GAAmC,OAA5BH,MAAK4J,UAAU/J,EAAEgL,GAAOjJ,GAAWA,EAGtE,QAASmJ,IAAUzK,EAAEiE,GAAK,MAAOjE,IAAGiE,EACpC,QAASyG,IAASnL,GAAK,GAAI+B,GAAIzB,GAAsC,OAA/BH,MAAK4J,UAAU/J,EAAEkL,GAAUnJ,GAAWA,EAG5E,QAASqJ,MAEP,IAAI,GADArJ,GAAIzB,IACAE,EAAI,EAAGA,EAAIL,KAAK6B,IAAKxB,EAAGuB,EAAEvB,GAAKL,KAAK6C,IAAI7C,KAAKK,EAGrD,OAFAuB,GAAEC,EAAI7B,KAAK6B,EACXD,EAAEJ,GAAKxB,KAAKwB,EACLI,EAIT,QAASsJ,IAAYzK,GACnB,GAAImB,GAAIzB,GAER,OADO,GAAJM,EAAOT,KAAKiG,UAAUxF,EAAEmB,GAAS5B,KAAKkF,SAASzE,EAAEmB,GAC7CA,EAIT,QAASuJ,IAAa1K,GACpB,GAAImB,GAAIzB,GAER,OADO,GAAJM,EAAOT,KAAKkF,UAAUzE,EAAEmB,GAAS5B,KAAKiG,SAASxF,EAAEmB,GAC7CA,EAIT,QAASwJ,IAAK9K,GACZ,GAAQ,GAALA,EAAQ,MAAO,EAClB,IAAIsB,GAAI,CAMR,OALiB,KAAX,MAAFtB,KAAkBA,IAAM,GAAIsB,GAAK,IACtB,IAAT,IAAFtB,KAAgBA,IAAM,EAAGsB,GAAK,GACpB,IAAR,GAAFtB,KAAeA,IAAM,EAAGsB,GAAK,GACrB,IAAN,EAAFtB,KAAaA,IAAM,EAAGsB,GAAK,GACnB,IAAN,EAAFtB,MAAasB,EACVA,EAIT,QAASyJ,MACP,IAAI,GAAIhL,GAAI,EAAGA,EAAIL,KAAK6B,IAAKxB,EAC3B,GAAc,GAAXL,KAAKK,GAAS,MAAOA,GAAEL,KAAKwC,GAAG4I,GAAKpL,KAAKK,GAC9C,OAAGL,MAAKwB,EAAI,EAAUxB,KAAK6B,EAAE7B,KAAKwC,GAC3B,GAIT,QAAS8I,IAAKhL,GAEZ,IADA,GAAIsB,GAAI,EACG,GAALtB,GAAUA,GAAKA,EAAE,IAAKsB,CAC5B,OAAOA,GAIT,QAAS2J,MAEP,IAAI,GADA3J,GAAI,EAAGtB,EAAIN,KAAKwB,EAAExB,KAAK6C,GACnBxC,EAAI,EAAGA,EAAIL,KAAK6B,IAAKxB,EAAGuB,GAAK0J,GAAKtL,KAAKK,GAAGC,EAClD,OAAOsB,GAIT,QAAS4J,IAAU/K,GACjB,GAAID,GAAIG,KAAKC,MAAMH,EAAET,KAAKwC,GAC1B,OAAGhC,IAAKR,KAAK6B,EAAkB,GAAR7B,KAAKwB,EACO,IAA3BxB,KAAKQ,GAAI,GAAIC,EAAET,KAAKwC,IAI9B,QAASiJ,IAAahL,EAAE+J,GACtB,GAAI5I,GAAIhC,EAAWkG,IAAI+D,UAAUpJ,EAEjC,OADAT,MAAK4J,UAAUhI,EAAE4I,EAAG5I,GACbA,EAIT,QAAS8J,IAASjL,GAAK,MAAOT,MAAK2L,UAAUlL,EAAEqJ,IAG/C,QAAS8B,IAAWnL,GAAK,MAAOT,MAAK2L,UAAUlL,EAAEsK,IAGjD,QAASc,IAAUpL,GAAK,MAAOT,MAAK2L,UAAUlL,EAAEoK,IAGhD,QAASiB,IAASjM,EAAE+B,GAElB,IADA,GAAIvB,GAAI,EAAGN,EAAI,EAAGmB,EAAIP,KAAKyD,IAAIvE,EAAEgC,EAAE7B,KAAK6B,GAC9BX,EAAJb,GACJN,GAAKC,KAAKK,GAAGR,EAAEQ,GACfuB,EAAEvB,KAAON,EAAEC,KAAK6C,GAChB9C,IAAMC,KAAKwC,EAEb,IAAG3C,EAAEgC,EAAI7B,KAAK6B,EAAG,CAEf,IADA9B,GAAKF,EAAE2B,EACDnB,EAAIL,KAAK6B,GACb9B,GAAKC,KAAKK,GACVuB,EAAEvB,KAAON,EAAEC,KAAK6C,GAChB9C,IAAMC,KAAKwC,EAEbzC,IAAKC,KAAKwB,MAEP,CAEH,IADAzB,GAAKC,KAAKwB,EACJnB,EAAIR,EAAEgC,GACV9B,GAAKF,EAAEQ,GACPuB,EAAEvB,KAAON,EAAEC,KAAK6C,GAChB9C,IAAMC,KAAKwC,EAEbzC,IAAKF,EAAE2B,EAETI,EAAEJ,EAAO,EAAFzB,EAAK,GAAG,EACZA,EAAI,EAAG6B,EAAEvB,KAAON,EACP,GAAJA,IAAQ6B,EAAEvB,KAAOL,KAAK+B,GAAGhC,GACjC6B,EAAEC,EAAIxB,EACNuB,EAAEa,QAIJ,QAASsJ,IAAMlM,GAAK,GAAI+B,GAAIzB,GAAwB,OAAjBH,MAAKgM,MAAMnM,EAAE+B,GAAWA,EAG3D,QAASqK,IAAWpM,GAAK,GAAI+B,GAAIzB,GAAwB,OAAjBH,MAAK2C,MAAM9C,EAAE+B,GAAWA,EAGhE,QAASsK,IAAWrM,GAAK,GAAI+B,GAAIzB,GAA6B,OAAtBH,MAAK0G,WAAW7G,EAAE+B,GAAWA,EAGrE,QAASuK,MAAa,GAAIvK,GAAIzB,GAAyB,OAAlBH,MAAK6G,SAASjF,GAAWA,EAG9D,QAASwK,IAASvM,GAAK,GAAI+B,GAAIzB,GAAgC,OAAzBH,MAAKmG,SAAStG,EAAE+B,EAAE,MAAcA,EAGtE,QAASyK,IAAYxM,GAAK,GAAI+B,GAAIzB,GAAgC,OAAzBH,MAAKmG,SAAStG,EAAE,KAAK+B,GAAWA,EAGzE,QAAS0K,IAAqBzM,GAC5B,GAAI8E,GAAIxE,IAAOyB,EAAIzB,GAEnB,OADAH,MAAKmG,SAAStG,EAAE8E,EAAE/C,GACX,GAAIqI,OAAMtF,EAAE/C,GAIrB,QAAS2K,IAAa9L,GACpBT,KAAKA,KAAK6B,GAAK7B,KAAKwE,GAAG,EAAE/D,EAAE,EAAET,KAAK,EAAE,EAAEA,KAAK6B,KACzC7B,KAAK6B,EACP7B,KAAKyC,QAIP,QAAS+J,IAAc/L,EAAEF,GACvB,GAAQ,GAALE,EAAH,CACA,KAAMT,KAAK6B,GAAKtB,GAAGP,KAAKA,KAAK6B,KAAO,CAEpC,KADA7B,KAAKO,IAAME,EACLT,KAAKO,IAAMP,KAAK+B,IACpB/B,KAAKO,IAAMP,KAAK+B,KACXxB,GAAKP,KAAK6B,IAAG7B,KAAKA,KAAK6B,KAAO,KACjC7B,KAAKO,IAKX,QAASkM,OACT,QAASC,IAAKpM,GAAK,MAAOA,GAC1B,QAASqM,IAAOrM,EAAEiE,EAAE3C,GAAKtB,EAAEoG,WAAWnC,EAAE3C,GACxC,QAASgL,IAAOtM,EAAEsB,GAAKtB,EAAEuG,SAASjF,GAQlC,QAASiL,IAAMlH,GAAK,MAAO3F,MAAKuI,IAAI5C,EAAE,GAAI8G,KAI1C,QAASK,IAAmBjN,EAAEY,EAAEmB,GAC9B,GAAIvB,GAAIM,KAAKyD,IAAIpE,KAAK6B,EAAEhC,EAAEgC,EAAEpB,EAG5B,KAFAmB,EAAEJ,EAAI,EACNI,EAAEC,EAAIxB,EACAA,EAAI,GAAGuB,IAAIvB,GAAK,CACtB,IAAIG,EACJ,KAAIA,EAAIoB,EAAEC,EAAE7B,KAAK6B,EAAOrB,EAAJH,IAASA,EAAGuB,EAAEvB,EAAEL,KAAK6B,GAAK7B,KAAKwE,GAAG,EAAE3E,EAAEQ,GAAGuB,EAAEvB,EAAE,EAAEL,KAAK6B,EACxE,KAAIrB,EAAIG,KAAKyD,IAAIvE,EAAEgC,EAAEpB,GAAQD,EAAJH,IAASA,EAAGL,KAAKwE,GAAG,EAAE3E,EAAEQ,GAAGuB,EAAEvB,EAAE,EAAEI,EAAEJ,EAC5DuB,GAAEa,QAKJ,QAASsK,IAAmBlN,EAAEY,EAAEmB,KAC5BnB,CACF,IAAIJ,GAAIuB,EAAEC,EAAI7B,KAAK6B,EAAEhC,EAAEgC,EAAEpB,CAEzB,KADAmB,EAAEJ,EAAI,IACEnB,GAAK,GAAGuB,EAAEvB,GAAK,CACvB,KAAIA,EAAIM,KAAKiD,IAAInD,EAAET,KAAK6B,EAAE,GAAIxB,EAAIR,EAAEgC,IAAKxB,EACvCuB,EAAE5B,KAAK6B,EAAExB,EAAEI,GAAKT,KAAKwE,GAAG/D,EAAEJ,EAAER,EAAEQ,GAAGuB,EAAE,EAAE,EAAE5B,KAAK6B,EAAExB,EAAEI,EAClDmB,GAAEa,QACFb,EAAEoE,UAAU,EAAEpE,GAIhB,QAASoL,IAAQ9L,GAEflB,KAAK+H,GAAK5H,IACVH,KAAKiN,GAAK9M,IACVP,EAAWkG,IAAIF,UAAU,EAAE1E,EAAEW,EAAE7B,KAAK+H,IACpC/H,KAAKkN,GAAKlN,KAAK+H,GAAGoF,OAAOjM,GACzBlB,KAAKkB,EAAIA,EAGX,QAASkM,IAAe9M,GACtB,GAAGA,EAAEkB,EAAI,GAAKlB,EAAEuB,EAAI,EAAE7B,KAAKkB,EAAEW,EAAG,MAAOvB,GAAEgG,IAAItG,KAAKkB,EAC7C,IAAGZ,EAAEuF,UAAU7F,KAAKkB,GAAK,EAAG,MAAOZ,EACjC,IAAIsB,GAAIzB,GAAoC,OAA7BG,GAAEwE,OAAOlD,GAAI5B,KAAK2G,OAAO/E,GAAWA,EAG5D,QAASyL,IAAc/M,GAAK,MAAOA,GAGnC,QAASgN,IAAchN,GAKrB,IAJAA,EAAE0F,UAAUhG,KAAKkB,EAAEW,EAAE,EAAE7B,KAAK+H,IACzBzH,EAAEuB,EAAI7B,KAAKkB,EAAEW,EAAE,IAAKvB,EAAEuB,EAAI7B,KAAKkB,EAAEW,EAAE,EAAGvB,EAAEmC,SAC3CzC,KAAKkN,GAAGK,gBAAgBvN,KAAK+H,GAAG/H,KAAKkB,EAAEW,EAAE,EAAE7B,KAAKiN,IAChDjN,KAAKkB,EAAEsM,gBAAgBxN,KAAKiN,GAAGjN,KAAKkB,EAAEW,EAAE,EAAE7B,KAAK+H,IACzCzH,EAAEuF,UAAU7F,KAAK+H,IAAM,GAAGzH,EAAEmJ,WAAW,EAAEzJ,KAAKkB,EAAEW,EAAE,EAExD,KADAvB,EAAEqC,MAAM3C,KAAK+H,GAAGzH,GACVA,EAAEuF,UAAU7F,KAAKkB,IAAM,GAAGZ,EAAEqC,MAAM3C,KAAKkB,EAAEZ,GAIjD,QAASmN,IAAanN,EAAEsB,GAAKtB,EAAEuG,SAASjF,GAAI5B,KAAK2G,OAAO/E,GAGxD,QAAS8L,IAAapN,EAAEiE,EAAE3C,GAAKtB,EAAEoG,WAAWnC,EAAE3C,GAAI5B,KAAK2G,OAAO/E,GAS9D,QAAS+L,IAAShI,EAAEzE,GAClB,GAAuBiB,GAAe2F,EAAlCzH,EAAIsF,EAAEqE,YAAgBpI,EAAII,EAAI,EAClC,IAAQ,GAAL3B,EAAQ,MAAOuB,EACFO,GAAJ,GAAJ9B,EAAY,EACR,GAAJA,EAAY,EACR,IAAJA,EAAa,EACT,IAAJA,EAAa,EACZ,EAEPyH,EADK,EAAJzH,EACG,GAAI+F,GAAQlF,GACVA,EAAEoH,SACJ,GAAI0E,IAAQ9L,GAEZ,GAAI6F,GAAW7F,EAGrB,IAAI8G,GAAI,GAAIiC,OAASxJ,EAAI,EAAGmN,EAAKzL,EAAE,EAAGgB,GAAM,GAAGhB,GAAG,CAElD,IADA6F,EAAE,GAAKF,EAAEG,QAAQjI,MACdmC,EAAI,EAAG,CACR,GAAI0L,GAAK1N,GAET,KADA2H,EAAEI,MAAMF,EAAE,GAAG6F,GACF1K,GAAL1C,GACJuH,EAAEvH,GAAKN,IACP2H,EAAEK,MAAM0F,EAAG7F,EAAEvH,EAAE,GAAGuH,EAAEvH,IACpBA,GAAK,EAIT,GAAeF,GAA2BsB,EAAtCrB,EAAImF,EAAE9D,EAAE,EAAMiM,GAAM,EAAM/F,EAAK5H,GAEnC,KADAE,EAAImD,EAAMmC,EAAEnF,IAAI,EACVA,GAAK,GAAG,CAQZ,IAPGH,GAAKuN,EAAIrN,EAAKoF,EAAEnF,IAAKH,EAAEuN,EAAKzK,GAE7B5C,GAAKoF,EAAEnF,IAAK,GAAIH,EAAE,GAAI,IAAMuN,EAAGvN,EAC5BG,EAAI,IAAGD,GAAKoF,EAAEnF,EAAE,IAAKR,KAAKwC,GAAGnC,EAAEuN,IAGpCnN,EAAI0B,EACW,IAAN,EAAF5B,IAAaA,IAAM,IAAKE,CAE/B,KADIJ,GAAKI,GAAK,IAAKJ,GAAKL,KAAKwC,KAAMhC,GAChCsN,EACD9F,EAAEzH,GAAGuE,OAAOlD,GACZkM,GAAM,MAEH,CACH,KAAMrN,EAAI,GAAKqH,EAAEI,MAAMtG,EAAEmG,GAAKD,EAAEI,MAAMH,EAAGnG,GAAInB,GAAK,CAC/CA,GAAI,EAAGqH,EAAEI,MAAMtG,EAAEmG,IAAYlG,EAAID,EAAGA,EAAImG,EAAIA,EAAKlG,GACpDiG,EAAEK,MAAMJ,EAAGC,EAAEzH,GAAGqB,GAGlB,KAAMpB,GAAK,GAAsB,IAAhBmF,EAAEnF,GAAI,GAAGH,IACxByH,EAAEI,MAAMtG,EAAEmG,GAAKlG,EAAID,EAAGA,EAAImG,EAAIA,EAAKlG,IAC9BxB,EAAI,IAAKA,EAAIL,KAAKwC,GAAG,IAAKhC,GAGnC,MAAOsH,GAAEM,OAAOxG,GAIlB,QAASmM,IAAMlO,GACb,GAAIS,GAAKN,KAAKwB,EAAE,EAAGxB,KAAK+C,SAAS/C,KAAKgO,QAClCzJ,EAAK1E,EAAE2B,EAAE,EAAG3B,EAAEkD,SAASlD,EAAEmO,OAC7B,IAAG1N,EAAEuF,UAAUtB,GAAK,EAAG,CAAE,GAAI1C,GAAIvB,CAAGA,GAAIiE,EAAGA,EAAI1C,EAC/C,GAAIxB,GAAIC,EAAE2N,kBAAmBjG,EAAIzD,EAAE0J,iBACnC,IAAO,EAAJjG,EAAO,MAAO1H,EAMjB,KALO0H,EAAJ3H,IAAO2H,EAAI3H,GACX2H,EAAI,IACL1H,EAAE2F,SAAS+B,EAAE1H,GACbiE,EAAE0B,SAAS+B,EAAEzD,IAETjE,EAAE2I,SAAW,IACb5I,EAAIC,EAAE2N,mBAAqB,GAAG3N,EAAE2F,SAAS5F,EAAEC,IAC3CD,EAAIkE,EAAE0J,mBAAqB,GAAG1J,EAAE0B,SAAS5F,EAAEkE,GAC5CjE,EAAEuF,UAAUtB,IAAM,GACnBjE,EAAEqC,MAAM4B,EAAEjE,GACVA,EAAE2F,SAAS,EAAE3F,KAGbiE,EAAE5B,MAAMrC,EAAEiE,GACVA,EAAE0B,SAAS,EAAE1B,GAIjB,OADGyD,GAAI,GAAGzD,EAAEW,SAAS8C,EAAEzD,GAChBA,EAIT,QAAS2J,IAAUzN,GACjB,GAAQ,GAALA,EAAQ,MAAO,EAClB,IAAIyC,GAAIlD,KAAK+B,GAAGtB,EAAGmB,EAAK5B,KAAKwB,EAAE,EAAGf,EAAE,EAAE,CACtC,IAAGT,KAAK6B,EAAI,EACV,GAAQ,GAALqB,EAAQtB,EAAI5B,KAAK,GAAGS,MAClB,KAAI,GAAIJ,GAAIL,KAAK6B,EAAE,EAAGxB,GAAK,IAAKA,EAAGuB,GAAKsB,EAAEtB,EAAE5B,KAAKK,IAAII,CAC5D,OAAOmB,GAIT,QAASuM,IAAajN,GACpB,GAAIkN,GAAKlN,EAAEoH,QACX,IAAItI,KAAKsI,UAAY8F,GAAqB,GAAdlN,EAAE+H,SAAe,MAAOrJ,GAAW8C,IAG/D,KAFA,GAAI2L,GAAInN,EAAE8M,QAAStN,EAAIV,KAAKgO,QACxBnO,EAAImC,EAAI,GAAIlC,EAAIkC,EAAI,GAAIjC,EAAIiC,EAAI,GAAIkB,EAAIlB,EAAI,GAC5B,GAAdqM,EAAEpF,UAAe,CACrB,KAAMoF,EAAE/F,UACN+F,EAAEpI,SAAS,EAAEoI,GACVD,GACGvO,EAAEyI,UAAaxI,EAAEwI,WAAYzI,EAAEmM,MAAMhM,KAAKH,GAAIC,EAAE6C,MAAMzB,EAAEpB,IAC5DD,EAAEoG,SAAS,EAAEpG,IAENC,EAAEwI,UAAUxI,EAAE6C,MAAMzB,EAAEpB,GAC/BA,EAAEmG,SAAS,EAAEnG,EAEf,MAAMY,EAAE4H,UACN5H,EAAEuF,SAAS,EAAEvF,GACV0N,GACGrO,EAAEuI,UAAapF,EAAEoF,WAAYvI,EAAEiM,MAAMhM,KAAKD,GAAImD,EAAEP,MAAMzB,EAAEgC,IAC5DnD,EAAEkG,SAAS,EAAElG,IAENmD,EAAEoF,UAAUpF,EAAEP,MAAMzB,EAAEgC,GAC/BA,EAAE+C,SAAS,EAAE/C,EAEZmL,GAAExI,UAAUnF,IAAM,GACnB2N,EAAE1L,MAAMjC,EAAE2N,GACPD,GAAIvO,EAAE8C,MAAM5C,EAAEF,GACjBC,EAAE6C,MAAMO,EAAEpD,KAGVY,EAAEiC,MAAM0L,EAAE3N,GACP0N,GAAIrO,EAAE4C,MAAM9C,EAAEE,GACjBmD,EAAEP,MAAM7C,EAAEoD,IAGd,MAAkC,IAA/BxC,EAAEmF,UAAUjG,EAAWkG,KAAkBlG,EAAW8C,KACpDQ,EAAE2C,UAAU3E,IAAM,EAAUgC,EAAEoL,SAASpN,GACvCgC,EAAE+F,SAAW,GAAG/F,EAAE8I,MAAM9K,EAAEgC,GAC1BA,EAAE+F,SAAW,EAAU/F,EAAEqL,IAAIrN,GAAgBgC,GADHA,EAQ/C,QAASsL,IAAkB3M,GACzB,GAAIxB,GAAGC,EAAIN,KAAKsE,KAChB,IAAU,GAAPhE,EAAEuB,GAAUvB,EAAE,IAAMmO,GAAUA,GAAUpM,OAAO,GAAI,CACpD,IAAIhC,EAAI,EAAGA,EAAIoO,GAAUpM,SAAUhC,EACjC,GAAGC,EAAE,IAAMmO,GAAUpO,GAAI,OAAO,CAClC,QAAO,EAET,GAAGC,EAAEgI,SAAU,OAAO,CAEtB,KADAjI,EAAI,EACEA,EAAIoO,GAAUpM,QAAQ,CAE1B,IADA,GAAInB,GAAIuN,GAAUpO,GAAIG,EAAIH,EAAE,EACtBG,EAAIiO,GAAUpM,QAAcqM,GAAJxN,GAAWA,GAAKuN,GAAUjO,IAExD,KADAU,EAAIZ,EAAEqO,OAAOzN,GACHV,EAAJH,GAAO,GAAGa,EAAEuN,GAAUpO,MAAQ,EAAG,OAAO,EAEhD,MAAOC,GAAEsO,YAAY/M,GAIvB,QAASgN,IAAehN,GACtB,GAAIiN,GAAK9O,KAAKsO,SAAS1O,EAAWkG,KAC9B3D,EAAI2M,EAAGb,iBACX,IAAQ,GAAL9L,EAAQ,OAAO,CAClB,IAAIP,GAAIkN,EAAGC,WAAW5M,EACtBN,GAAKA,EAAE,GAAI,EACRA,EAAI4M,GAAUpM,SAAQR,EAAI4M,GAAUpM,OAEvC,KAAI,GADAxC,GAAIM,IACAE,EAAI,EAAOwB,EAAJxB,IAASA,EAAG,CAEzBR,EAAEoC,QAAQwM,GAAU9N,KAAKC,MAAMD,KAAKqO,SAASP,GAAUpM,SACvD,IAAIkC,GAAI1E,EAAEoP,OAAOrN,EAAE5B,KACnB,IAAkC,GAA/BuE,EAAEsB,UAAUjG,EAAWkG,MAAgC,GAAnBvB,EAAEsB,UAAUiJ,GAAU,CAE3D,IADA,GAAItO,GAAI,EACFA,IAAM2B,GAAwB,GAAnBoC,EAAEsB,UAAUiJ,IAE3B,GADAvK,EAAIA,EAAE2K,UAAU,EAAElP,MACgB,GAA/BuE,EAAEsB,UAAUjG,EAAWkG,KAAW,OAAO,CAE9C,IAAsB,GAAnBvB,EAAEsB,UAAUiJ,GAAU,OAAO,GAGpC,OAAO,EAkET,QAASK,MACPnP,KAAKK,EAAI,EACTL,KAAKQ,EAAI,EACTR,KAAKoP,EAAI,GAAInF,OAIf,QAASoF,IAASC,GAChB,GAAIjP,GAAGG,EAAGqB,CACV,KAAIxB,EAAI,EAAO,IAAJA,IAAWA,EACpBL,KAAKoP,EAAE/O,GAAKA,CAEd,KADAG,EAAI,EACAH,EAAI,EAAO,IAAJA,IAAWA,EACpBG,EAAKA,EAAIR,KAAKoP,EAAE/O,GAAKiP,EAAIjP,EAAIiP,EAAIjN,QAAW,IAC5CR,EAAI7B,KAAKoP,EAAE/O,GACXL,KAAKoP,EAAE/O,GAAKL,KAAKoP,EAAE5O,GACnBR,KAAKoP,EAAE5O,GAAKqB,CAEd7B,MAAKK,EAAI,EACTL,KAAKQ,EAAI,EAGX,QAAS+O,MACP,GAAI1N,EAMJ,OALA7B,MAAKK,EAAKL,KAAKK,EAAI,EAAK,IACxBL,KAAKQ,EAAKR,KAAKQ,EAAIR,KAAKoP,EAAEpP,KAAKK,GAAM,IACrCwB,EAAI7B,KAAKoP,EAAEpP,KAAKK,GAChBL,KAAKoP,EAAEpP,KAAKK,GAAKL,KAAKoP,EAAEpP,KAAKQ,GAC7BR,KAAKoP,EAAEpP,KAAKQ,GAAKqB,EACV7B,KAAKoP,EAAGvN,EAAI7B,KAAKoP,EAAEpP,KAAKK,GAAM,KAOvC,QAASmP,MACP,MAAO,IAAIL,IA8Cb,QAASM,MACP,GAAgB,MAAbC,GAAmB,CAGpB,IAFAA,GAAYF,KAEMG,GAAXC,IAAsB,CAC3B,GAAIZ,GAASrO,KAAKC,MAAM,MAAQD,KAAKqO,SACrCa,IAASD,MAAuB,IAATZ,EAGzB,IADAU,GAAUI,KAAKD,IACXD,GAAW,EAAGA,GAAWC,GAASxN,SAAUuN,GAC9CC,GAASD,IAAY,CACvBA,IAAW,EAGb,MAAOF,IAAUK,OAGnB,QAASC,IAAcC,GACrB,GAAI5P,EACJ,KAAIA,EAAI,EAAGA,EAAI4P,EAAG5N,SAAUhC,EAAG4P,EAAG5P,GAAKoP,KAGzC,QAASS,OAQT,QAASC,IAAYC,EAAIxO,GACvB,MAAO,IAAIhC,GAAWwQ,EAAIxO,GAqB5B,QAASyO,IAAU7O,EAAEf,GACnB,GAAGA,EAAIe,EAAEa,OAAS,GAEhB,MAAO,KAIT,KAFA,GAAI4N,GAAK,GAAIhG,OACT5J,EAAImB,EAAEa,OAAS,EACbhC,GAAK,GAAKI,EAAI,GAAG,CACrB,GAAIV,GAAIyB,EAAEE,WAAWrB,IACd,KAAJN,EACDkQ,IAAKxP,GAAKV,EAEHA,EAAI,KAAa,KAAJA,GACpBkQ,IAAKxP,GAAU,GAAJV,EAAU,IACrBkQ,IAAKxP,GAAMV,GAAK,EAAK,MAGrBkQ,IAAKxP,GAAU,GAAJV,EAAU,IACrBkQ,IAAKxP,GAAOV,GAAK,EAAK,GAAM,IAC5BkQ,IAAKxP,GAAMV,GAAK,GAAM,KAG1BkQ,IAAKxP,GAAK,CAGV,KAFA,GAAI6P,GAAM,GAAIJ,IACV5P,EAAI,GAAI2J,OACNxJ,EAAI,GAAG,CAEX,IADAH,EAAE,GAAK,EACO,GAARA,EAAE,IAASgQ,EAAIpG,UAAU5J,EAC/B2P,KAAKxP,GAAKH,EAAE,GAId,MAFA2P,KAAKxP,GAAK,EACVwP,IAAKxP,GAAK,EACH,GAAIb,GAAWqQ,GAIxB,QAASM,MACPvQ,KAAKS,EAAI,KACTT,KAAK2F,EAAI,EACT3F,KAAKkD,EAAI,KACTlD,KAAKoD,EAAI,KACTpD,KAAK2E,EAAI,KACT3E,KAAKwQ,KAAO,KACZxQ,KAAKyQ,KAAO,KACZzQ,KAAK0Q,MAAQ,KAIf,QAASC,IAAaC,EAAEC,GACd,MAALD,GAAkB,MAALC,GAAaD,EAAEvO,OAAS,GAAKwO,EAAExO,OAAS,IACtDrC,KAAKS,EAAI0P,GAAYS,EAAE,IACvB5Q,KAAK2F,EAAImL,SAASD,EAAE,KAOxB,QAASE,IAAYzQ,GACnB,MAAOA,GAAE4O,UAAUlP,KAAK2F,EAAG3F,KAAKS,GAIlC,QAASuQ,IAAWC,GAClB,GAAI/P,GAAImP,GAAUY,EAAMjR,KAAKS,EAAEuJ,YAAY,GAAI,EAC/C,IAAQ,MAAL9I,EAAW,MAAO,KACrB,IAAInB,GAAIC,KAAKkR,SAAShQ,EACtB,IAAQ,MAALnB,EAAW,MAAO,KACrB,IAAIkB,GAAIlB,EAAEiD,SAAS,GACnB,OAAqB,KAAN,EAAX/B,EAAEoB,QAAyBpB,EAAe,IAAMA,EAqBtD,QAASkQ,IAAYjO,EAAEzC,GAGrB,IAFA,GAAIX,GAAIoD,EAAEkO,cACN/Q,EAAI,EACFA,EAAIP,EAAEuC,QAAkB,GAARvC,EAAEO,MAAWA,CACnC,IAAGP,EAAEuC,OAAOhC,GAAKI,EAAE,GAAa,GAARX,EAAEO,GACxB,MAAO,KAET,OADEA,EACY,GAARP,EAAEO,IACN,KAAKA,GAAKP,EAAEuC,OAAQ,MAAO,KAE7B,KADA,GAAIgP,GAAM,KACFhR,EAAIP,EAAEuC,QAAQ,CACpB,GAAItC,GAAW,IAAPD,EAAEO,EACH,KAAJN,EACDsR,GAAOC,OAAOC,aAAaxR,GAEpBA,EAAI,KAAa,IAAJA,GACpBsR,GAAOC,OAAOC,cAAmB,GAAJxR,IAAW,EAAe,GAATD,EAAEO,EAAE,MAChDA,IAGFgR,GAAOC,OAAOC,cAAmB,GAAJxR,IAAW,IAAiB,GAATD,EAAEO,EAAE,KAAY,EAAe,GAATP,EAAEO,EAAE,IAC1EA,GAAK,GAGT,MAAOgR,GAIT,QAASG,IAAcZ,EAAEC,EAAEY,GACjB,MAALb,GAAkB,MAALC,GAAaD,EAAEvO,OAAS,GAAKwO,EAAExO,OAAS,IACtDrC,KAAKS,EAAI0P,GAAYS,EAAE,IACvB5Q,KAAK2F,EAAImL,SAASD,EAAE,IACpB7Q,KAAKkD,EAAIiN,GAAYsB,EAAE,KAO3B,QAASC,IAAgBd,EAAEC,EAAEY,EAAEE,EAAEC,EAAEC,EAAGC,EAAGC,GAC/B,MAALnB,GAAkB,MAALC,GAAaD,EAAEvO,OAAS,GAAKwO,EAAExO,OAAS,IACtDrC,KAAKS,EAAI0P,GAAYS,EAAE,IACvB5Q,KAAK2F,EAAImL,SAASD,EAAE,IACpB7Q,KAAKkD,EAAIiN,GAAYsB,EAAE,IACvBzR,KAAKoD,EAAI+M,GAAYwB,EAAE,IACvB3R,KAAK2E,EAAIwL,GAAYyB,EAAE,IACvB5R,KAAKwQ,KAAOL,GAAY0B,EAAG,IAC3B7R,KAAKyQ,KAAON,GAAY2B,EAAG,IAC3B9R,KAAK0Q,MAAQP,GAAY4B,EAAE,KAO/B,QAASC,IAAYC,EAAEpB,GACrB,GAAIP,GAAM,GAAIJ,IACVgC,EAAKD,GAAG,CACZjS,MAAK2F,EAAImL,SAASD,EAAE,GAEpB,KADA,GAAIsB,GAAK,GAAIvS,GAAWiR,EAAE,MAClB,CACN,KACE7Q,KAAKoD,EAAI,GAAIxD,GAAWqS,EAAEC,EAAG,EAAE5B,GACyC,GAArEtQ,KAAKoD,EAAEkL,SAAS1O,EAAWkG,KAAKsM,IAAID,GAAItM,UAAUjG,EAAWkG,OAAa9F,KAAKoD,EAAE2G,gBAAgB,MAEtG,KACE/J,KAAK2E,EAAI,GAAI/E,GAAWsS,EAAG,EAAE5B,GAC2C,GAArEtQ,KAAK2E,EAAE2J,SAAS1O,EAAWkG,KAAKsM,IAAID,GAAItM,UAAUjG,EAAWkG,OAAa9F,KAAK2E,EAAEoF,gBAAgB,MAEtG,GAAG/J,KAAKoD,EAAEyC,UAAU7F,KAAK2E,IAAM,EAAG,CAChC,GAAI9C,GAAI7B,KAAKoD,CACbpD,MAAKoD,EAAIpD,KAAK2E,EACd3E,KAAK2E,EAAI9C,EAEX,GAAIwQ,GAAKrS,KAAKoD,EAAEkL,SAAS1O,EAAWkG,KAChCwM,EAAKtS,KAAK2E,EAAE2J,SAAS1O,EAAWkG,KAChCyM,EAAMF,EAAGG,SAASF,EACtB,IAA4C,GAAzCC,EAAIH,IAAID,GAAItM,UAAUjG,EAAWkG,KAAW,CAC7C9F,KAAKS,EAAIT,KAAKoD,EAAEoP,SAASxS,KAAK2E,GAC9B3E,KAAKkD,EAAIiP,EAAGM,WAAWF,GACvBvS,KAAKwQ,KAAOxQ,KAAKkD,EAAEoD,IAAI+L,GACvBrS,KAAKyQ,KAAOzQ,KAAKkD,EAAEoD,IAAIgM,GACvBtS,KAAK0Q,MAAQ1Q,KAAK2E,EAAE8N,WAAWzS,KAAKoD,EACpC,SAMN,QAASsP,IAAapS,GACpB,GAAa,MAAVN,KAAKoD,GAAuB,MAAVpD,KAAK2E,EACxB,MAAOrE,GAAE2O,OAAOjP,KAAKkD,EAAGlD,KAAKS,EAM/B,KAHA,GAAIkS,GAAKrS,EAAEgG,IAAItG,KAAKoD,GAAG6L,OAAOjP,KAAKwQ,KAAMxQ,KAAKoD,GAC1CwP,EAAKtS,EAAEgG,IAAItG,KAAK2E,GAAGsK,OAAOjP,KAAKyQ,KAAMzQ,KAAK2E,GAExCgO,EAAG9M,UAAU+M,GAAM,GACvBD,EAAKA,EAAGpE,IAAIvO,KAAKoD,EACnB,OAAOuP,GAAGrE,SAASsE,GAAIJ,SAASxS,KAAK0Q,OAAOpK,IAAItG,KAAKoD,GAAGoP,SAASxS,KAAK2E,GAAG4J,IAAIqE,GAK/E,QAASC,IAAWC,GAClB,GAAI/S,GAAIoQ,GAAY2C,EAAO,IACvB5R,EAAIlB,KAAK+S,UAAUhT,EACvB,OAAQ,OAALmB,EAAkB,KACdiQ,GAAYjQ,EAAIlB,KAAKS,EAAEuJ,YAAY,GAAI,GA6KhD,QAASgJ,IAAQ/R,GACf,GAAIZ,GACAN,EACAsR,EAAM,EACV,KAAIhR,EAAI,EAAGA,EAAE,GAAKY,EAAEoB,OAAQhC,GAAG,EAC7BN,EAAI+Q,SAAS7P,EAAEgS,UAAU5S,EAAEA,EAAE,GAAG,IAChCgR,GAAO6B,GAAO5R,OAAOvB,GAAK,GAAKmT,GAAO5R,OAAW,GAAJvB,EAU/C,KARGM,EAAE,GAAKY,EAAEoB,QACVtC,EAAI+Q,SAAS7P,EAAEgS,UAAU5S,EAAEA,EAAE,GAAG,IAChCgR,GAAO6B,GAAO5R,OAAOvB,GAAK,IAEpBM,EAAE,GAAKY,EAAEoB,SACftC,EAAI+Q,SAAS7P,EAAEgS,UAAU5S,EAAEA,EAAE,GAAG,IAChCgR,GAAO6B,GAAO5R,OAAOvB,GAAK,GAAKmT,GAAO5R,QAAY,EAAJvB,IAAU,KAEtC,EAAbsR,EAAIhP,QAAc,GAAGgP,GAAO8B,EACnC,OAAO9B,GAIT,QAAS+B,IAAS5R,GAChB,GACInB,GAEAgT,EAHAhC,EAAM,GAENlP,EAAI,CAER,KAAI9B,EAAI,EAAGA,EAAImB,EAAEa,QACZb,EAAEF,OAAOjB,IAAM8S,KADO9S,EAEzBK,EAAIwS,GAAOI,QAAQ9R,EAAEF,OAAOjB,IACrB,EAAJK,IACK,GAALyB,GACDkP,GAAOjQ,EAASV,GAAK,GACrB2S,EAAW,EAAJ3S,EACPyB,EAAI,GAEO,GAALA,GACNkP,GAAOjQ,EAAUiS,GAAQ,EAAM3S,GAAK,GACpC2S,EAAW,GAAJ3S,EACPyB,EAAI,GAEO,GAALA,GACNkP,GAAOjQ,EAASiS,GAChBhC,GAAOjQ,EAASV,GAAK,GACrB2S,EAAW,EAAJ3S,EACPyB,EAAI,IAGJkP,GAAOjQ,EAAUiS,GAAQ,EAAM3S,GAAK,GACpC2Q,GAAOjQ,EAAa,GAAJV,GAChByB,EAAI,GAKR,OAFQ,IAALA,IACDkP,GAAOjQ,EAASiS,GAAQ,IACnBhC,EA1uDT,GAAIkC,IAGAC,GAAS,eACTC,GAA2B,WAAX,SAAPD,GA0DVC,KAA8B,+BAArBC,UAAUC,SACpB/T,EAAWgU,UAAUpP,GAAK3D,EAC1B0S,GAAQ,IAEFE,IAA8B,YAArBC,UAAUC,SACzB/T,EAAWgU,UAAUpP,GAAKpE,EAC1BmT,GAAQ,KAGR3T,EAAWgU,UAAUpP,GAAKrD,EAC1BoS,GAAQ,IAGV3T,EAAWgU,UAAUpR,GAAK+Q,GAC1B3T,EAAWgU,UAAU/Q,IAAO,GAAG0Q,IAAO,EACtC3T,EAAWgU,UAAU7R,GAAM,GAAGwR,EAE9B,IAAIM,IAAQ,EACZjU,GAAWgU,UAAUnO,GAAK9E,KAAKyI,IAAI,EAAEyK,IACrCjU,EAAWgU,UAAUtO,GAAKuO,GAAMN,GAChC3T,EAAWgU,UAAUrO,GAAK,EAAEgO,GAAMM,EAGlC,IAEIC,IAAGC,GAFH1S,GAAQ,uCACRI,GAAQ,GAAIwI,MAGhB,KADA6J,GAAK,IAAIpS,WAAW,GAChBqS,GAAK,EAAS,GAANA,KAAWA,GAAItS,GAAMqS,MAAQC,EAEzC,KADAD,GAAK,IAAIpS,WAAW,GAChBqS,GAAK,GAAS,GAALA,KAAWA,GAAItS,GAAMqS,MAAQC,EAE1C,KADAD,GAAK,IAAIpS,WAAW,GAChBqS,GAAK,GAAS,GAALA,KAAWA,GAAItS,GAAMqS,MAAQC,EA8T1C3N,GAAQwN,UAAU3L,QAAU5B,EAC5BD,EAAQwN,UAAUxL,OAAS7B,EAC3BH,EAAQwN,UAAUjN,OAASH,EAC3BJ,EAAQwN,UAAUzL,MAAQ1B,EAC1BL,EAAQwN,UAAU1L,MAAQtB,EA+E1BG,EAAW6M,UAAU3L,QAAUX,EAC/BP,EAAW6M,UAAUxL,OAASb,EAC9BR,EAAW6M,UAAUjN,OAASa,EAC9BT,EAAW6M,UAAUzL,MAAQR,EAC7BZ,EAAW6M,UAAU1L,MAAQR,EA0B7B9H,EAAWgU,UAAU9O,OAASnD,EAC9B/B,EAAWgU,UAAU3R,QAAUH,EAC/BlC,EAAWgU,UAAU1T,WAAagC,EAClCtC,EAAWgU,UAAUnR,MAAQG,EAC7BhD,EAAWgU,UAAUhO,UAAYlC,EACjC9D,EAAWgU,UAAU5N,UAAYrC,EACjC/D,EAAWgU,UAAU1O,SAAWrB,EAChCjE,EAAWgU,UAAU3N,SAAW/B,EAChCtE,EAAWgU,UAAUjR,MAAQwB,EAC7BvE,EAAWgU,UAAUlN,WAAarC,EAClCzE,EAAWgU,UAAU/M,SAAWpC,EAChC7E,EAAWgU,UAAUzN,SAAWzB,EAChC9E,EAAWgU,UAAU3M,SAAWH,EAChClH,EAAWgU,UAAUtL,OAASV,EAC9BhI,EAAWgU,UAAUrL,IAAMV,EAG3BjI,EAAWgU,UAAU5Q,SAAWF,EAChClD,EAAWgU,UAAU7Q,OAASM,EAC9BzD,EAAWgU,UAAUtP,IAAMhB,EAC3B1D,EAAWgU,UAAU/N,UAAYtC,EACjC3D,EAAWgU,UAAU5J,UAAYvG,EACjC7D,EAAWgU,UAAUtN,IAAMJ,EAC3BtG,EAAWgU,UAAU1E,UAAY7G,EAGjCzI,EAAW8C,KAAOV,EAAI,GACtBpC,EAAWkG,IAAM9D,EAAI,GA+UrByK,GAAQmH,UAAU3L,QAAUyE,GAC5BD,GAAQmH,UAAUxL,OAASsE,GAC3BD,GAAQmH,UAAUzL,MAAQwE,GAC1BF,GAAQmH,UAAU1L,MAAQ0E,GAkE1BI,GAAQ4G,UAAU3L,QAAUmF,GAC5BJ,GAAQ4G,UAAUxL,OAASiF,GAC3BL,GAAQ4G,UAAUjN,OAAS2G,GAC3BN,GAAQ4G,UAAUzL,MAAQuF,GAC1BV,GAAQ4G,UAAU1L,MAAQuF,EA6I1B,IAAIgB,KAAa,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAC5oBC,IAAS,GAAG,IAAID,GAAUA,GAAUpM,OAAO,EA+C/CzC,GAAWgU,UAAUzK,UAAYP,EACjChJ,EAAWgU,UAAU3Q,QAAU+F,EAC/BpJ,EAAWgU,UAAUxR,UAAYmH,EACjC3J,EAAWgU,UAAU3T,WAAayJ,EAClC9J,EAAWgU,UAAUhK,UAAYW,GACjC3K,EAAWgU,UAAUjI,UAAYF,GACjC7L,EAAWgU,UAAU5H,MAAQF,GAC7BlM,EAAWgU,UAAUpK,UAAY+C,GACjC3M,EAAWgU,UAAUnK,WAAa+C,GAClC5M,EAAWgU,UAAUpG,gBAAkBV,GACvClN,EAAWgU,UAAUrG,gBAAkBR,GACvCnN,EAAWgU,UAAUjF,OAAST,GAC9BtO,EAAWgU,UAAUhF,YAAcC,GAGnCjP,EAAWgU,UAAU5F,MAAQxF,EAC7B5I,EAAWgU,UAAUvK,SAAWZ,EAChC7I,EAAWgU,UAAUI,UAAYtL,EACjC9I,EAAWgU,UAAUK,WAAatL,EAClC/I,EAAWgU,UAAU3K,OAASF,EAC9BnJ,EAAWgU,UAAUxC,YAAcjH,GACnCvK,EAAWgU,UAAUM,OAAS9J,GAC9BxK,EAAWgU,UAAUxP,IAAMiG,GAC3BzK,EAAWgU,UAAUhQ,IAAM0G,GAC3B1K,EAAWgU,UAAUO,IAAMxJ,GAC3B/K,EAAWgU,UAAUQ,GAAKxJ,GAC1BhL,EAAWgU,UAAUS,IAAMvJ,GAC3BlL,EAAWgU,UAAUU,OAAStJ,GAC9BpL,EAAWgU,UAAUW,IAAMtJ,GAC3BrL,EAAWgU,UAAU/J,UAAYqB,GACjCtL,EAAWgU,UAAU7E,WAAa5D,GAClCvL,EAAWgU,UAAU3F,gBAAkB5C,GACvCzL,EAAWgU,UAAUY,SAAWjJ,GAChC3L,EAAWgU,UAAUjK,QAAU6B,GAC/B5L,EAAWgU,UAAUa,OAAS/I,GAC9B9L,EAAWgU,UAAUc,SAAW9I,GAChChM,EAAWgU,UAAUe,QAAU9I,GAC/BjM,EAAWgU,UAAUrF,IAAMxC,GAC3BnM,EAAWgU,UAAUtF,SAAWrC,GAChCrM,EAAWgU,UAAUpB,SAAWtG,GAChCtM,EAAWgU,UAAUzG,OAASf,GAC9BxM,EAAWgU,UAAUgB,UAAYvI,GACjCzM,EAAWgU,UAAUiB,mBAAqBvI,GAC1C1M,EAAWgU,UAAU3E,OAAStB,GAC9B/N,EAAWgU,UAAUnB,WAAatE,GAClCvO,EAAWgU,UAAUxK,IAAMyD,GAC3BjN,EAAWgU,UAAUxB,IAAMrE,GAC3BnO,EAAWgU,UAAU7J,gBAAkByE,GAGvC5O,EAAWgU,UAAUkB,OAAS3I,GA4C9BgD,GAAQyE,UAAU9D,KAAOT,GACzBF,GAAQyE,UAAU7D,KAAOR,EASzB,IAEIG,IACAG,GACAD,GAJAD,GAAY,GAOhB,IAAe,MAAZE,GAAkB,CACnBA,GAAW,GAAI5F,OACf2F,GAAW,CACX,IAAI/N,GACJ,IAAGkT,OAAOC,QAAUD,OAAOC,OAAOC,gBAAiB,CAEjD,GAAInN,IAAI,GAAIoN,aAAY,IAExB,KADAH,OAAOC,OAAOC,gBAAgBnN,IACzBjG,GAAI,EAAGA,GAAIiG,GAAEzF,SAAUR,GAC1BgO,GAASD,MAAqB,IAAP9H,GAAEjG,IAK7B,GAAIsT,IAAsB,SAASC,GAEjC,GADApV,KAAKqV,MAAQrV,KAAKqV,OAAS,EACvBrV,KAAKqV,OAAS,KAAOzF,IAAYD,GAKnC,YAJIoF,OAAOO,oBACTP,OAAOO,oBAAoB,YAAaH,IACjCJ,OAAOQ,aACdR,OAAOQ,YAAY,cAAeJ,IAGtCnV,MAAKqV,OAAS,CACd,IAAIG,GAAmBJ,EAAG9U,EAAI8U,EAAG7Q,CACjCsL,IAASD,MAAiC,IAAnB4F,EAErBT,QAAOU,iBACTV,OAAOU,iBAAiB,YAAaN,IAC9BJ,OAAOW,aACdX,OAAOW,YAAY,cAAeP,IA4BtCjF,GAAa0D,UAAU1J,UAAY8F,GA2GnCO,GAAOqD,UAAU1C,SAAWH,GAG5BR,GAAOqD,UAAU+B,UAAYhF,GAC7BJ,GAAOqD,UAAUgC,QAAU5E,GA8H3BT,GAAOqD,UAAUb,UAAYL,GAG7BnC,GAAOqD,UAAUiC,WAAarE,GAC9BjB,GAAOqD,UAAUkC,aAAepE,GAChCnB,GAAOqD,UAAUmC,SAAW/D,GAC5BzB,GAAOqD,UAAUoC,QAAUnD,GAa3B,WAGA,GAAIoD,GAAmB,SAAUhE,EAAGpB,EAAGqF,GAEnC,GAAI5F,GAAM,GAAIJ,IACVgC,EAAKD,GAAK,CACdjS,MAAK2F,EAAImL,SAASD,EAAG,GACrB,IAAIsB,GAAK,GAAIvS,GAAWiR,EAAG,IACvBsF,EAAMnW,KAGNoW,EAAQ,WACR,GAAIC,GAAQ,WACR,GAAIF,EAAI/S,EAAEyC,UAAUsQ,EAAIxR,IAAM,EAAG,CAC7B,GAAI9C,GAAIsU,EAAI/S,CACZ+S,GAAI/S,EAAI+S,EAAIxR,EACZwR,EAAIxR,EAAI9C,EAEZ,GAAIwQ,GAAK8D,EAAI/S,EAAEkL,SAAS1O,EAAWkG,KAC/BwM,EAAK6D,EAAIxR,EAAE2J,SAAS1O,EAAWkG,KAC/ByM,EAAMF,EAAGG,SAASF,EACuB,IAAzCC,EAAIH,IAAID,GAAItM,UAAUjG,EAAWkG,MACjCqQ,EAAI1V,EAAI0V,EAAI/S,EAAEoP,SAAS2D,EAAIxR,GAC3BwR,EAAIjT,EAAIiP,EAAGM,WAAWF,GACtB4D,EAAI3F,KAAO2F,EAAIjT,EAAEoD,IAAI+L,GACrB8D,EAAI1F,KAAO0F,EAAIjT,EAAEoD,IAAIgM,GACrB6D,EAAIzF,MAAQyF,EAAIxR,EAAE8N,WAAW0D,EAAI/S,GACjCkT,WAAW,WAAWJ,KAAY,IAElCI,WAAWF,EAAM,IAGrBG,EAAQ,WACRJ,EAAIxR,EAAIxE,IACRgW,EAAIxR,EAAE6R,gBAAgBtE,EAAI,EAAG5B,EAAK,WAC9B6F,EAAIxR,EAAE2J,SAAS1O,EAAWkG,KAAK2Q,KAAKtE,EAAI,SAASvQ,GACV,GAA/BA,EAAEiE,UAAUjG,EAAWkG,MAAaqQ,EAAIxR,EAAEoF,gBAAgB,IAC1DuM,WAAWD,EAAM,GAEjBC,WAAWC,EAAM,QAK7BG,EAAQ,WACRP,EAAI/S,EAAIjD,IACRgW,EAAI/S,EAAEoT,gBAAgBvE,EAAIC,EAAI,EAAG5B,EAAK,WAClC6F,EAAI/S,EAAEkL,SAAS1O,EAAWkG,KAAK2Q,KAAKtE,EAAI,SAASvQ,GACV,GAA/BA,EAAEiE,UAAUjG,EAAWkG,MAAaqQ,EAAI/S,EAAE2G,gBAAgB,IAC1DuM,WAAWC,EAAM,GAEjBD,WAAWI,EAAM,OAKjCJ,YAAWI,EAAM,GAErBJ,YAAWF,EAAM,GAErB7F,IAAOqD,UAAU+C,cAAgBV,CAGjC,IAAIW,GAAa,SAAU/W,EAAGqW,GAC1B,GAAI5V,GAAKN,KAAKwB,EAAI,EAAKxB,KAAK+C,SAAW/C,KAAKgO,QACxCzJ,EAAK1E,EAAE2B,EAAI,EAAK3B,EAAEkD,SAAWlD,EAAEmO,OACnC,IAAI1N,EAAEuF,UAAUtB,GAAK,EAAG,CACpB,GAAI1C,GAAIvB,CACRA,GAAIiE,EACJA,EAAI1C,EAER,GAAIxB,GAAIC,EAAE2N,kBACNjG,EAAIzD,EAAE0J,iBACV,IAAQ,EAAJjG,EAEA,WADAkO,GAAS5V,EAGL0H,GAAJ3H,IAAO2H,EAAI3H,GACX2H,EAAI,IACJ1H,EAAE2F,SAAS+B,EAAG1H,GACdiE,EAAE0B,SAAS+B,EAAGzD,GAGlB,IAAIsS,GAAQ,YACHxW,EAAIC,EAAE2N,mBAAqB,GAAI3N,EAAE2F,SAAS5F,EAAGC,IAC7CD,EAAIkE,EAAE0J,mBAAqB,GAAI1J,EAAE0B,SAAS5F,EAAGkE,GAC9CjE,EAAEuF,UAAUtB,IAAM,GAClBjE,EAAEqC,MAAM4B,EAAGjE,GACXA,EAAE2F,SAAS,EAAG3F,KAEdiE,EAAE5B,MAAMrC,EAAGiE,GACXA,EAAE0B,SAAS,EAAG1B,IAEbjE,EAAE2I,SAAW,EAIdqN,WAAWO,EAAM,IAHb7O,EAAI,GAAGzD,EAAEW,SAAS8C,EAAGzD,GACzB+R,WAAW,WAAWJ,EAAS3R,IAAI,IAK3C+R,YAAWO,EAAM,IAErBjX,GAAWgU,UAAU6C,KAAOG,CAG5B,IAAIE,GAAqB,SAAUjX,EAAEC,EAAEC,EAAEmW,GACvC,GAAG,gBAAmBpW,GACpB,GAAO,EAAJD,EACCG,KAAKiC,QAAQ,OACV,CACLjC,KAAKC,WAAWJ,EAAEE,GACdC,KAAK2J,QAAQ9J,EAAE,IACjBG,KAAK4J,UAAUhK,EAAWkG,IAAI+D,UAAUhK,EAAE,GAAGiK,GAAM9J,MAElDA,KAAKsI,UACNtI,KAAKyJ,WAAW,EAAE,EAEpB,IAAIsN,GAAM/W,KACNgX,EAAS,WACXD,EAAItN,WAAW,EAAE,GACdsN,EAAI/M,YAAcnK,GAAGkX,EAAIpU,MAAM/C,EAAWkG,IAAI+D,UAAUhK,EAAE,GAAGkX,GAC7DA,EAAIhN,gBAAgBjK,GACnBwW,WAAW,WAAWJ,KAAY,GAElCI,WAAWU,EAAO,GAGxBV,YAAWU,EAAO,OAEf,CACL,GAAI1W,GAAI,GAAI2J,OAASpI,EAAM,EAAFhC,CACzBS,GAAE+B,QAAUxC,GAAG,GAAG,EAClBC,EAAEoK,UAAU5J,GACTuB,EAAI,EAAGvB,EAAE,KAAQ,GAAGuB,GAAG,EAASvB,EAAE,GAAK,EAC1CN,KAAKE,WAAWI,EAAE,MAGtBV,GAAWgU,UAAU4C,gBAAkBM,IAElC,IAAI5D,IAAO,mEACZC,GAAO,IAyEP8D,GAAMA,MACVA,IAAIC,IAAMD,GAAIC,OAEd,IAAIC,IAAIF,GAAKG,GAAKC,OAAOzD,UAAW0D,GAAoB,oBAAoBC,IAAO,WAAY,UAE/FN,IAAIC,IAAIM,QAAU,SAASC,GAEvB,GA+BAvW,GA/BIwW,EAAY,SAASlW,GACrB,GAAIzB,GAAI,CACR,OAAO4X,YAAWnW,EAAEoW,QAAQ,MAAO,WAC/B,MAAe,IAAP7X,IAAY,GAAK,QAIjC8X,EAAMnE,UACNoE,GACIC,GAAI,EACJC,MAAO,EACPC,MAAO,EACPC,OAAQ,EACRC,OAAQ,EACRC,OAAQ,KACRC,IAAK,EACLC,KAAM,EACNC,OAAQ,EACRC,KAAM,EACNC,IAAK,KACLC,QAAS,EACTC,MAAO,EACPC,KAAMf,GAAOA,EAAIgB,YACjBC,QAAQ,EACRC,GAAI,MAIRC,EAAKvB,GAAU/D,WAAaA,UAAUuF,UACtCC,EAAMnE,QAAUA,OAAOoE,SACvBC,EAAOF,GAAOA,EAAIE,IA2FlB,OAxFAtB,GAAEgB,OAASM,GAAiD,IAAxCA,EAAKC,cAAc/F,QAAQ,SAE3C0F,IAEI,iBAAmBM,KAAKN,GACxBlB,EAAEiB,GAAK,UACA,aAAeO,KAAKN,GAC3BlB,EAAEiB,GAAK,YACA,SAAWO,KAAKN,KACvBlB,EAAEiB,GAAK,SAEP,QAAUO,KAAKN,KACflB,EAAEI,OAAS,GAEfhX,EAAI8X,EAAGO,MAAM,yBACTrY,GAAKA,EAAE,KACP4W,EAAEI,OAASR,EAAUxW,EAAE,IACnB,YAAYoY,KAAKN,IACjBlB,EAAEM,OAAS,QACXlX,EAAI8X,EAAGO,MAAM,eACTrY,GAAKA,EAAE,KACPA,EAAIwW,EAAUxW,EAAE,GAAG0W,QAAQ,IAAK,OAEpCE,EAAEW,IAAMvX,EACR4W,EAAEQ,KAAOR,EAAEU,KAAOV,EAAES,OAAS,EAC7BrX,EAAI8X,EAAGO,MAAM,oBACTrY,GAAKA,EAAE,KACP4W,EAAE5W,EAAE,GAAGmY,eAAiBvB,EAAEW,OAG9BvX,EAAI8X,EAAGO,MAAM,6CACTrY,IACA4W,EAAEM,OAASlX,EAAE,IAEb,QAAQoY,KAAKN,KACblB,EAAEM,OAAS,QACXlX,EAAI8X,EAAGO,MAAM,oBACTrY,GAAKA,EAAE,KACP4W,EAAEa,MAAQjB,EAAUxW,EAAE,MAG1B,WAAWoY,KAAKN,KAChBlB,EAAEM,OAAS,UACXlX,EAAI8X,EAAGO,MAAM,qBACTrY,GAAKA,EAAE,KACP4W,EAAEY,QAAUhB,EAAUxW,EAAE,OAIpCA,EAAI8X,EAAGO,MAAM,oBACTrY,GAAKA,EAAE,GACP4W,EAAEK,OAAST,EAAUxW,EAAE,KAEvBA,EAAI8X,EAAGO,MAAM,sBACTrY,IACA4W,EAAEO,IAAMnX,EAAE,MAIjB4W,EAAEI,SACHhX,EAAI8X,EAAGO,MAAM,uBACTrY,GAAKA,EAAE,IACP4W,EAAEE,MAAQN,EAAUxW,EAAE,IACtBA,EAAI8X,EAAGO,MAAM,qBACTrY,GAAKA,EAAE,KACP4W,EAAEE,MAAQN,EAAUxW,EAAE,KAE1BA,EAAI8X,EAAGO,MAAM,mBACTrY,IACA4W,EAAEM,OAASlX,EAAE,MAGjBA,EAAI8X,EAAGO,MAAM,iBACTrY,GAAKA,EAAE,GACP4W,EAAEC,GAAKL,EAAUxW,EAAE,KAEnBA,EAAI8X,EAAGO,MAAM,mBACTrY,IACA4W,EAAEG,MAAQ,EACV/W,EAAI8X,EAAGO,MAAM,iBACTrY,GAAKA,EAAE,KACP4W,EAAEG,MAAQP,EAAUxW,EAAE,UAOvC4W,GAGXb,GAAIC,IAAI8B,GAAK/B,GAAIC,IAAIM,UAErBP,GAAIuC,WAAa,SAAS1B,GACtB,MAAqB,kBAANA,IAAqBV,GAAGpU,SAASyW,MAAM3B,KAAOR,IAGjEL,GAAIyC,WAAczC,GAAIC,IAAI8B,GAAK,GAAI,SAASpX,EAAGJ,GAC3C,GAAInB,GAAGsZ,EAAOlP,CACd,KAAKpK,EAAE,EAAEA,EAAEkX,GAAIlV,OAAOhC,GAAI,EAEtBsZ,EAAQpC,GAAIlX,GACZoK,EAAIjJ,EAAEmY,GAEFxC,GAAEqC,WAAW/O,IAAMA,GAAG2M,GAAGuC,KACzB/X,EAAE+X,GAAOlP,IAGjB,aAEJwM,GAAI2C,OAAS,SAASC,EAAMC,EAAQC,GAChC,IAAKD,IAASD,EACV,KAAM,IAAIG,OAAM,kEAGpB,IAAuB3Z,GAAnB4Z,EAAI,YASR,IARAA,EAAErG,UAAUkG,EAAOlG,UACnBiG,EAAKjG,UAAU,GAAIqG,GACnBJ,EAAKjG,UAAUsG,YAAYL,EAC3BA,EAAKM,WAAWL,EAAOlG,UACnBkG,EAAOlG,UAAUsG,aAAe9C,GAAG8C,cACnCJ,EAAOlG,UAAUsG,YAAYJ,GAG7BC,EAAW,CACX,IAAK1Z,IAAK0Z,GACF5C,GAAEiD,eAAeL,EAAW1Z,KAC5BwZ,EAAKjG,UAAUvT,GAAG0Z,EAAU1Z,GAIpC8W,IAAEuC,WAAWG,EAAKjG,UAAWmG,KAwClB,mBAARM,OAAwBA,OAAMA,SA2CjB,mBAAbA,MAAKC,MAAwBD,KAAKC,OAAMD,KAAKC,SAQxDD,KAAKC,KAAKC,SAAW,GAAI,YACrBva,KAAKwa,iBAAmB,SAASna,GACpC,GAAIY,GAAIZ,EAAE2C,SAAS,GAEnB,OADK/B,GAAEoB,OAAS,GAAM,IAAGpB,EAAI,IAAMA,GAC5BA,GAEJjB,KAAKya,8BAAgC,SAASC,GACjD,GAAIzZ,GAAIyZ,EAAgB1X,SAAS,GACjC,IAAsB,KAAlB/B,EAAEqI,OAAO,EAAG,GACRrI,EAAEoB,OAAS,GAAK,EACvBpB,EAAI,IAAMA,EAEJA,EAAEsY,MAAM,YACVtY,EAAI,KAAOA,OAGT,CACH,GAAI0Z,GAAO1Z,EAAEqI,OAAO,GAChBsR,EAASD,EAAKtY,MACduY,GAAS,GAAK,EACrBA,GAAU,EAEJ3Z,EAAEsY,MAAM,YACVqB,GAAU,EAIX,KAAK,GADDC,GAAQ,GACHxa,EAAI,EAAOua,EAAJva,EAAYA,IAC/Bwa,GAAS,GAEN,IAAIC,GAAS,GAAIlb,GAAWib,EAAO,IAC/BE,EAAQD,EAAOzG,IAAIqG,GAAiBnM,IAAI3O,EAAWkG,IACvD7E,GAAI8Z,EAAM/X,SAAS,IAAI4U,QAAQ,KAAM,IAEzC,MAAO3W,IAkBJjB,KAAKgb,oBAAsB,SAASC,EAASC,GAChD,GAAIC,GAASC,SAASC,IAAIC,IAAIC,MAAMN,GAChCO,EAAUJ,SAASC,IAAII,OAAOC,UAAUP,GACxCQ,EAAUH,EAAQ5D,QAAQ,WAAY,SAE1C,OADO+D,GAAUA,EAAQ/D,QAAQ,QAAS,IACnC,cAAgBsD,EAAY,YACrBS,EACA,gBAAkBT,EAAY,cAqB7Cb,KAAKC,KAAKsB,WAAa,WACnB,GAIIC,GAAK,EAST7b,MAAK8b,sBAAwB,WAChC,GAAsB,mBAAX9b,MAAK6b,IAAgC,MAAX7b,KAAK6b,GACtC,KAAM,+BAEV,IAAI7b,KAAK6b,GAAGxZ,OAAS,GAAK,EACtB,KAAM,oCAAsCwZ,EAAGxZ,OAAS,MAAQrC,KAAK6b,EAEzE,IAAIpb,GAAIT,KAAK6b,GAAGxZ,OAAS,EACrB0Z,EAAKtb,EAAEuC,SAAS,GAIpB,IAHI+Y,EAAG1Z,OAAS,GAAK,IACjB0Z,EAAK,IAAMA,GAEP,IAAJtb,EACA,MAAOsb,EAEP,IAAIC,GAAQD,EAAG1Z,OAAS,CACxB,IAAI2Z,EAAQ,GACf,KAAM,iDAAmDvb,EAAEuC,SAAS,GAEjE,IAAIiZ,GAAO,IAAMD,CACjB,OAAOC,GAAKjZ,SAAS,IAAM+Y,GAW5B/b,KAAKkc,cAAgB,WAQxB,OAPiB,MAAblc,KAAKmc,MAAgBnc,KAAKoc,cAC1Bpc,KAAK6b,GAAK7b,KAAKqc,mBACfrc,KAAKsc,GAAKtc,KAAK8b,wBACf9b,KAAKmc,KAAOnc,KAAKuc,GAAKvc,KAAKsc,GAAKtc,KAAK6b,GACrC7b,KAAKoc,YAAa,GAGfpc,KAAKmc,MAUTnc,KAAKwc,YAAc,WAEtB,MADAxc,MAAKkc,gBACElc,KAAK6b,IAGT7b,KAAKqc,iBAAmB,WAC3B,MAAO,KAsBRhC,KAAKC,KAAKmC,kBAAoB,SAASC,GACnCrC,KAAKC,KAAKmC,kBAAkBtC,WAAWD,YAAYyC,KAAK3c,KAWxDA,MAAK4c,UAAY,WACpB,MAAO5c,MAAKwB,GAUTxB,KAAK6c,UAAY,SAASC,GAC7B9c,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKwB,EAAIsb,EACT9c,KAAK6b,GAAKkB,OAAO/c,KAAKwB,IAUnBxB,KAAKgd,aAAe,SAASC,GAChCjd,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKwB,EAAI,KACTxB,KAAK6b,GAAKoB,GAGPjd,KAAKqc,iBAAmB,WAC3B,MAAOrc,MAAK6b,IAGY,mBAAVa,KACc,mBAAjBA,GAAY,IACnB1c,KAAK6c,UAAUH,EAAY,KACI,mBAAjBA,GAAY,KAC1B1c,KAAKgd,aAAaN,EAAY,OAInCzF,GAAI2C,OAAOS,KAAKC,KAAKmC,kBAAmBpC,KAAKC,KAAKsB,YAalDvB,KAAKC,KAAK4C,gBAAkB,WACxB7C,KAAKC,KAAK4C,gBAAgB/C,WAAWD,YAAYyC,KAAK3c,KAKtDA,MAAKmd,eAAiB,SAASja,GAClCka,IAAMla,EAAEma,UAAqC,IAAxBna,EAAEoa,mBACvB,IAAIC,GAAU,GAAIC,MAAKJ,IACvB,OAAOG,IAGJvd,KAAKyd,WAAa,SAASC,EAAYC,GAC1C,GAAIC,GAAM5d,KAAK6d,YACX3a,EAAIlD,KAAKmd,eAAeO,GACxBI,EAAOxM,OAAOpO,EAAE6a,cACR,QAARJ,IAAeG,EAAOA,EAAKxU,OAAO,EAAG,GACzC,IAAI0U,GAAQJ,EAAItM,OAAOpO,EAAE+a,WAAa,GAAI,GACtCC,EAAMN,EAAItM,OAAOpO,EAAEib,WAAY,GAC/BC,EAAOR,EAAItM,OAAOpO,EAAEmb,YAAa,GACjCja,EAAMwZ,EAAItM,OAAOpO,EAAEob,cAAe,GAClCC,EAAMX,EAAItM,OAAOpO,EAAEsb,cAAe,EACtC,OAAOV,GAAOE,EAAQE,EAAME,EAAOha,EAAMma,EAAM,KAG5Cve,KAAK6d,YAAc,SAASrc,EAAGid,GAClC,MAAIjd,GAAEa,QAAUoc,EAAYjd,EACrB,GAAIyI,OAAMwU,EAAMjd,EAAEa,OAAS,GAAGqc,KAAK,KAAOld,GAW9CxB,KAAK4c,UAAY,WACpB,MAAO5c,MAAKwB,GAUTxB,KAAK6c,UAAY,SAASC,GAC7B9c,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKwB,EAAIsb,EACT9c,KAAK6b,GAAKkB,OAAO/c,KAAKwB,IAenBxB,KAAK2e,eAAiB,SAASb,EAAME,EAAOE,EAAKE,EAAMha,EAAKma,GAC/D,GAAIb,GAAa,GAAIF,MAAKA,KAAKoB,IAAId,EAAME,EAAQ,EAAGE,EAAKE,EAAMha,EAAKma,EAAK,GACzEve,MAAK6e,UAAUnB,IAGZ1d,KAAKqc,iBAAmB,WAC3B,MAAOrc,MAAK6b,KAGb5E,GAAI2C,OAAOS,KAAKC,KAAK4C,gBAAiB7C,KAAKC,KAAKsB,YAahDvB,KAAKC,KAAKwE,sBAAwB,SAASpC,GACvCrC,KAAKC,KAAKmC,kBAAkBtC,WAAWD,YAAYyC,KAAK3c,KAUxDA,MAAK+e,qBAAuB,SAASC,GACxChf,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKif,UAAYD,GAUdhf,KAAKkf,iBAAmB,SAASC,GACpCnf,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKif,UAAUG,KAAKD,IAGjBnf,KAAKif,UAAY,GAAIhV,OACA,mBAAVyS,IACgB,mBAAnBA,GAAc,QACrB1c,KAAKif,UAAYvC,EAAc,QAIpCzF,GAAI2C,OAAOS,KAAKC,KAAKwE,sBAAuBzE,KAAKC,KAAKsB,YAgBtDvB,KAAKC,KAAK+E,WAAa,WACnBhF,KAAKC,KAAK+E,WAAWlF,WAAWD,YAAYyC,KAAK3c,MACjDA,KAAKuc,GAAK,KACVvc,KAAKmc,KAAO,UAEhBlF,GAAI2C,OAAOS,KAAKC,KAAK+E,WAAYhF,KAAKC,KAAKsB,YAmB3CvB,KAAKC,KAAKgF,WAAa,SAAS5C,GAC5BrC,KAAKC,KAAKgF,WAAWnF,WAAWD,YAAYyC,KAAK3c,MACjDA,KAAKuc,GAAK,KASVvc,KAAKuf,gBAAkB,SAAS7E,GACnC1a,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAK6b,GAAKxB,KAAKC,KAAKC,SAASE,8BAA8BC,IAUxD1a,KAAKwf,aAAe,SAASnW,GAChC,GAAIoW,GAAK,GAAI7f,GAAW0R,OAAOjI,GAAW,GAC1CrJ,MAAKuf,gBAAgBE,IAclBzf,KAAK0f,YAAc,SAASzC,GAC/Bjd,KAAK6b,GAAKoB,GAGPjd,KAAKqc,iBAAmB,WAC3B,MAAOrc,MAAK6b,IAGY,mBAAVa,KACiB,mBAApBA,GAAe,OACtB1c,KAAKuf,gBAAgB7C,EAAe,QACL,mBAAjBA,GAAO,OACrB1c,KAAKwf,aAAa9C,EAAO,QACM,mBAAjBA,GAAY,KAC1B1c,KAAK0f,YAAYhD,EAAY,OAIlCzF,GAAI2C,OAAOS,KAAKC,KAAKgF,WAAYjF,KAAKC,KAAKsB,YAmB3CvB,KAAKC,KAAKqF,aAAe,SAASjD,GAC9BrC,KAAKC,KAAKqF,aAAaxF,WAAWD,YAAYyC,KAAK3c,MACnDA,KAAKuc,GAAK,KASVvc,KAAK4f,+BAAiC,SAASC,GAClD7f,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAK6b,GAAKgE,GAWP7f,KAAK8f,yBAA2B,SAASC,EAAYC,GACxD,GAAiB,EAAbD,GAAsBA,EAAJ,EAClB,KAAM,yCAA2CA,CAErD,IAAIE,GAAc,IAAMF,CACxB/f,MAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAK6b,GAAKoE,EAAcD,GAcrBhgB,KAAKkgB,kBAAoB,SAASC,GACrCA,EAAeA,EAAavI,QAAQ,MAAO,GAC3C,IAAImI,GAAa,EAAII,EAAa9d,OAAS,CACzB,IAAd0d,IAAiBA,EAAa,EAClC,KAAK,GAAI1f,GAAI,EAAQ0f,GAAL1f,EAAiBA,IAC7B8f,GAAgB,GAGpB,KAAK,GADDlf,GAAI,GACCZ,EAAI,EAAGA,EAAI8f,EAAa9d,OAAS,EAAGhC,GAAK,EAAG,CACjD,GAAIP,GAAIqgB,EAAa7W,OAAOjJ,EAAG,GAC3BC,EAAIwQ,SAAShR,EAAG,GAAGkD,SAAS,GAChB;GAAZ1C,EAAE+B,SAAa/B,EAAI,IAAMA,GAC7BW,GAAKX,EAETN,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAK6b,GAAK,IAAMkE,EAAa9e,GAY1BjB,KAAKogB,kBAAoB,SAASC,GAErC,IAAK,GADD7e,GAAI,GACCnB,EAAI,EAAGA,EAAIggB,EAAahe,OAAQhC,IAExCmB,GAD0B,GAAnB6e,EAAahgB,GACf,IAEA,GAGNL,MAAKkgB,kBAAkB1e,IAapBxB,KAAKsgB,cAAgB,SAASC,GAEjC,IAAK,GADD1gB,GAAI,GAAIoK,OAAMsW,GACTlgB,EAAI,EAAOkgB,EAAJlgB,EAAaA,IACzBR,EAAEQ,IAAK,CAEX,OAAOR,IAGJG,KAAKqc,iBAAmB,WAC3B,MAAOrc,MAAK6b,IAGY,mBAAVa,KACc,mBAAjBA,GAAY,IACnB1c,KAAK4f,+BAA+BlD,EAAY,KACjB,mBAAjBA,GAAY,IAC1B1c,KAAKkgB,kBAAkBxD,EAAY,KACF,mBAAnBA,GAAc,OAC5B1c,KAAKogB,kBAAkB1D,EAAc,SAI1CzF,GAAI2C,OAAOS,KAAKC,KAAKqF,aAActF,KAAKC,KAAKsB,YAY7CvB,KAAKC,KAAKkG,eAAiB,SAAS9D,GAChCrC,KAAKC,KAAKkG,eAAerG,WAAWD,YAAYyC,KAAK3c,KAAM0c,GAC3D1c,KAAKuc,GAAK,MAEdtF,GAAI2C,OAAOS,KAAKC,KAAKkG,eAAgBnG,KAAKC,KAAKmC,mBAW/CpC,KAAKC,KAAKmG,QAAU,WAChBpG,KAAKC,KAAKmG,QAAQtG,WAAWD,YAAYyC,KAAK3c,MAC9CA,KAAKuc,GAAK,KACVvc,KAAKmc,KAAO,QAEhBlF,GAAI2C,OAAOS,KAAKC,KAAKmG,QAASpG,KAAKC,KAAKsB,YAmBxCvB,KAAKC,KAAKoG,oBAAsB,SAAShE,GACrC,GAAIiE,GAAO,SAAStgB,GACvB,GAAIY,GAAIZ,EAAE2C,SAAS,GAEnB,OADgB,IAAZ/B,EAAEoB,SAAapB,EAAI,IAAMA,GACtBA,GAEA2f,EAAU,SAASC,GAC1B,GAAI5f,GAAI,GACJwe,EAAK,GAAI7f,GAAWihB,EAAM,IAC1B/gB,EAAI2f,EAAGzc,SAAS,GAChB8d,EAAS,EAAIhhB,EAAEuC,OAAS,CACd,IAAVye,IAAaA,EAAS,EAE1B,KAAK,GADDC,GAAO,GACF1gB,EAAI,EAAOygB,EAAJzgB,EAAYA,IAAK0gB,GAAQ,GACzCjhB,GAAIihB,EAAOjhB,CACX,KAAK,GAAIO,GAAI,EAAGA,EAAIP,EAAEuC,OAAS,EAAGhC,GAAK,EAAG,CACtC,GAAI2gB,GAAKlhB,EAAEwJ,OAAOjJ,EAAG,EACjBA,IAAKP,EAAEuC,OAAS,IAAG2e,EAAK,IAAMA,GAClC/f,GAAK0f,EAAK7P,SAASkQ,EAAI,IAE3B,MAAO/f,GAGJoZ,MAAKC,KAAKoG,oBAAoBvG,WAAWD,YAAYyC,KAAK3c,MAC1DA,KAAKuc,GAAK,KASVvc,KAAK0f,YAAc,SAASzC,GAC/Bjd,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKwB,EAAI,KACTxB,KAAK6b,GAAKoB,GAUPjd,KAAKihB,kBAAoB,SAASC,GACrC,IAAMA,EAAU3H,MAAM,aAClB,KAAM,yBAA2B2H,CAErC,IAAIjgB,GAAI,GACJpB,EAAIqhB,EAAUC,MAAM,KACpBC,EAAsB,GAAjBtQ,SAASjR,EAAE,IAAWiR,SAASjR,EAAE,GAC1CoB,IAAK0f,EAAKS,GACVvhB,EAAEwhB,OAAO,EAAG,EACZ,KAAK,GAAIhhB,GAAI,EAAGA,EAAIR,EAAEwC,OAAQhC,IAC1BY,GAAK2f,EAAQ/gB,EAAEQ,GAEnBL,MAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKwB,EAAI,KACTxB,KAAK6b,GAAK5a,GAcPjB,KAAKshB,aAAe,SAASC,GAChC,GAAuD,mBAA5ClH,MAAKC,KAAKkH,KAAKC,IAAIC,aAAaH,GAIvC,KAAM,0CAA4CA,CAHlD,IAAII,GAAMtH,KAAKC,KAAKkH,KAAKC,IAAIC,aAAaH,EAC1CvhB,MAAKihB,kBAAkBU,IAMxB3hB,KAAKqc,iBAAmB,WAC3B,MAAOrc,MAAK6b,IAGY,mBAAVa,KACc,mBAAjBA,GAAY,IACnB1c,KAAKihB,kBAAkBvE,EAAY,KACJ,mBAAjBA,GAAY,IAC1B1c,KAAK0f,YAAYhD,EAAY,KACG,mBAAlBA,GAAa,MAC3B1c,KAAKshB,aAAa5E,EAAa,QAIpCzF,GAAI2C,OAAOS,KAAKC,KAAKoG,oBAAqBrG,KAAKC,KAAKsB,YAYpDvB,KAAKC,KAAKsH,cAAgB,SAASlF,GAC/BrC,KAAKC,KAAKsH,cAAczH,WAAWD,YAAYyC,KAAK3c,KAAM0c,GAC1D1c,KAAKuc,GAAK,MAEdtF,GAAI2C,OAAOS,KAAKC,KAAKsH,cAAevH,KAAKC,KAAKmC,mBAY9CpC,KAAKC,KAAKuH,iBAAmB,SAASnF,GAClCrC,KAAKC,KAAKuH,iBAAiB1H,WAAWD,YAAYyC,KAAK3c,KAAM0c,GAC7D1c,KAAKuc,GAAK,MAEdtF,GAAI2C,OAAOS,KAAKC,KAAKuH,iBAAkBxH,KAAKC,KAAKmC,mBAYjDpC,KAAKC,KAAKwH,mBAAqB,SAASpF,GACpCrC,KAAKC,KAAKwH,mBAAmB3H,WAAWD,YAAYyC,KAAK3c,KAAM0c,GAC/D1c,KAAKuc,GAAK,MAEdtF,GAAI2C,OAAOS,KAAKC,KAAKwH,mBAAoBzH,KAAKC,KAAKmC,mBAYnDpC,KAAKC,KAAKyH,iBAAmB,SAASrF,GAClCrC,KAAKC,KAAKyH,iBAAiB5H,WAAWD,YAAYyC,KAAK3c,KAAM0c,GAC7D1c,KAAKuc,GAAK,MAEdtF,GAAI2C,OAAOS,KAAKC,KAAKyH,iBAAkB1H,KAAKC,KAAKmC,mBAYjDpC,KAAKC,KAAK0H,aAAe,SAAStF,GAC9BrC,KAAKC,KAAK0H,aAAa7H,WAAWD,YAAYyC,KAAK3c,KAAM0c,GACzD1c,KAAKuc,GAAK,MAEdtF,GAAI2C,OAAOS,KAAKC,KAAK0H,aAAc3H,KAAKC,KAAKmC,mBA4B7CpC,KAAKC,KAAK2H,WAAa,SAASvF,GAC5BrC,KAAKC,KAAK2H,WAAW9H,WAAWD,YAAYyC,KAAK3c,KAAM0c,GACvD1c,KAAKuc,GAAK,KASVvc,KAAK6e,UAAY,SAASnB,GAC7B1d,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKkiB,KAAOxE,EACZ1d,KAAKwB,EAAIxB,KAAKyd,WAAWzd,KAAKkiB,KAAM,OACpCliB,KAAK6b,GAAKkB,OAAO/c,KAAKwB,IAGE,mBAAVkb,KACc,mBAAjBA,GAAY,IACnB1c,KAAK6c,UAAUH,EAAY,KACI,mBAAjBA,GAAY,IAC1B1c,KAAKgd,aAAaN,EAAY,KACE,mBAAlBA,GAAa,MAC3B1c,KAAK6e,UAAUnC,EAAa,QAIjCzF,GAAI2C,OAAOS,KAAKC,KAAK2H,WAAY5H,KAAKC,KAAK4C,iBAoB3C7C,KAAKC,KAAK6H,mBAAqB,SAASzF,GACpCrC,KAAKC,KAAK6H,mBAAmBhI,WAAWD,YAAYyC,KAAK3c,KAAM0c,GAC/D1c,KAAKuc,GAAK,KAcVvc,KAAK6e,UAAY,SAASnB,GAC7B1d,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,EAClBpc,KAAKkiB,KAAOxE,EACZ1d,KAAKwB,EAAIxB,KAAKyd,WAAWzd,KAAKkiB,KAAM,OACpCliB,KAAK6b,GAAKkB,OAAO/c,KAAKwB,IAGE,mBAAVkb,KACc,mBAAjBA,GAAY,IACnB1c,KAAK6c,UAAUH,EAAY,KACI,mBAAjBA,GAAY,IAC1B1c,KAAKgd,aAAaN,EAAY,KACE,mBAAlBA,GAAa,MAC3B1c,KAAK6e,UAAUnC,EAAa,QAIjCzF,GAAI2C,OAAOS,KAAKC,KAAK6H,mBAAoB9H,KAAKC,KAAK4C,iBAiBnD7C,KAAKC,KAAK8H,YAAc,SAAS1F,GAC7BrC,KAAKC,KAAK8H,YAAYjI,WAAWD,YAAYyC,KAAK3c,KAAM0c,GACxD1c,KAAKuc,GAAK,KACVvc,KAAKqc,iBAAmB,WAE3B,IAAK,GADDpb,GAAI,GACCZ,EAAI,EAAGA,EAAIL,KAAKif,UAAU5c,OAAQhC,IAAK,CAC5C,GAAIgiB,GAAUriB,KAAKif,UAAU5e,EAC7BY,IAAKohB,EAAQnG,gBAGjB,MADAlc,MAAK6b,GAAK5a,EACHjB,KAAK6b,KAGb5E,GAAI2C,OAAOS,KAAKC,KAAK8H,YAAa/H,KAAKC,KAAKwE,uBAiB5CzE,KAAKC,KAAKgI,OAAS,SAAS5F,GACxBrC,KAAKC,KAAKgI,OAAOnI,WAAWD,YAAYyC,KAAK3c,KAAM0c,GACnD1c,KAAKuc,GAAK,KACVvc,KAAKqc,iBAAmB,WAE3B,IAAK,GADDxc,GAAI,GAAIoK,OACH5J,EAAI,EAAGA,EAAIL,KAAKif,UAAU5c,OAAQhC,IAAK,CAC5C,GAAIgiB,GAAUriB,KAAKif,UAAU5e,EAC7BR,GAAEuf,KAAKiD,EAAQnG,iBAInB,MAFArc,GAAE0iB,OACFviB,KAAK6b,GAAKhc,EAAE6e,KAAK,IACV1e,KAAK6b,KAGb5E,GAAI2C,OAAOS,KAAKC,KAAKgI,OAAQjI,KAAKC,KAAKwE,uBA2BvCzE,KAAKC,KAAKkI,gBAAkB,SAAS9F,GACjCrC,KAAKC,KAAKkI,gBAAgBrI,WAAWD,YAAYyC,KAAK3c,MACtDA,KAAKuc,GAAK,KACVvc,KAAK6b,GAAK,GACV7b,KAAKyiB,YAAa,EAClBziB,KAAKmf,WAAa,KAWlBnf,KAAK0iB,cAAgB,SAASC,EAAgBC,EAAUzD,GAC3Dnf,KAAKuc,GAAKqG,EACV5iB,KAAKyiB,WAAaE,EAClB3iB,KAAKmf,WAAaA,EACdnf,KAAKyiB,YACLziB,KAAK6b,GAAK7b,KAAKmf,WAAWjD,gBAC1Blc,KAAKmc,KAAO,KACZnc,KAAKoc,YAAa,IAElBpc,KAAK6b,GAAK,KACV7b,KAAKmc,KAAOgD,EAAWjD,gBACvBlc,KAAKmc,KAAOnc,KAAKmc,KAAKvE,QAAQ,MAAOgL,GACrC5iB,KAAKoc,YAAa,IAInBpc,KAAKqc,iBAAmB,WAC3B,MAAOrc,MAAK6b,IAGY,mBAAVa,KACc,mBAAjBA,GAAY,MACnB1c,KAAKuc,GAAKG,EAAY,KAEO,mBAAtBA,GAAiB,WACxB1c,KAAKyiB,WAAa/F,EAAiB,UAEX,mBAAjBA,GAAY,MACnB1c,KAAKmf,WAAazC,EAAY,IAC9B1c,KAAK0iB,cAAc1iB,KAAKyiB,WAAYziB,KAAKuc,GAAIvc,KAAKmf,eAIvDlI,GAAI2C,OAAOS,KAAKC,KAAKkI,gBAAiBnI,KAAKC,KAAKsB,YAgBhD,SAAWiH,GACX,YAEA,IACIC,GADAxH,IAGJA,GAAIyH,OAAS,SAASljB,GAClB,GAAIQ,EACJ,IAAIyiB,IAAYD,EAAW,CACvB,GAAIG,GAAM,mBACNC,EAAS,uBAEb,KADAH,KACKziB,EAAI,EAAO,GAAJA,IAAUA,EAClByiB,EAAQE,EAAI1hB,OAAOjB,IAAMA,CAE7B,KADA2iB,EAAMA,EAAI3J,cACLhZ,EAAI,GAAQ,GAAJA,IAAUA,EACnByiB,EAAQE,EAAI1hB,OAAOjB,IAAMA,CAC7B,KAAKA,EAAI,EAAGA,EAAI4iB,EAAO5gB,SAAUhC,EAC7ByiB,EAAQG,EAAO3hB,OAAOjB,IAAM,GAEpC,GAAI6iB,MACAC,EAAO,EACPC,EAAa,CACjB,KAAK/iB,EAAI,EAAGA,EAAIR,EAAEwC,SAAUhC,EAAG,CAC3B,GAAIN,GAAIF,EAAEyB,OAAOjB,EACjB,IAAS,KAALN,EACA,KAEJ,IADAA,EAAI+iB,EAAQ/iB,GACH,IAALA,EAAJ,CAEA,GAAIA,IAAM8iB,EACN,KAAM,+BAAiCxiB,CAC3C8iB,IAAQpjB,IACFqjB,GAAc,GAChBF,EAAIA,EAAI7gB,QAAU8gB,EAClBA,EAAO,EACPC,EAAa,GAEbD,IAAS,GAGjB,GAAIC,EACA,KAAM,yCACV,OAAOF,IAIXnO,OAAOuG,IAAMA,KAiBb,SAAWuH,GACX,YAEA,IACIC,GADArH,IAGJA,GAAOsH,OAAS,SAAUljB,GACtB,GAAIQ,EACJ,IAAIyiB,IAAYD,EAAW,CACvB,GAAIQ,GAAM,mEACNJ,EAAS,wBAEb,KADAH,KACKziB,EAAI,EAAO,GAAJA,IAAUA,EAClByiB,EAAQO,EAAI/hB,OAAOjB,IAAMA,CAC7B,KAAKA,EAAI,EAAGA,EAAI4iB,EAAO5gB,SAAUhC,EAC7ByiB,EAAQG,EAAO3hB,OAAOjB,IAAM,GAEpC,GAAI6iB,MACAC,EAAO,EAAGC,EAAa,CAC3B,KAAK/iB,EAAI,EAAGA,EAAIR,EAAEwC,SAAUhC,EAAG,CAC3B,GAAIN,GAAIF,EAAEyB,OAAOjB,EACjB,IAAS,KAALN,EACA,KAEJ,IADAA,EAAI+iB,EAAQ/iB,GACH,IAALA,EAAJ,CAEA,GAAIA,IAAM8iB,EACN,KAAM,+BAAiCxiB,CAC3C8iB,IAAQpjB,IACFqjB,GAAc,GAChBF,EAAIA,EAAI7gB,QAAW8gB,GAAQ,GAC3BD,EAAIA,EAAI7gB,QAAW8gB,GAAQ,EAAK,IAChCD,EAAIA,EAAI7gB,QAAiB,IAAP8gB,EAClBA,EAAO,EACPC,EAAa,GAEbD,IAAS,GAGjB,OAAQC,GACN,IAAK,GACH,KAAM,qDACR,KAAK,GACHF,EAAIA,EAAI7gB,QAAW8gB,GAAQ,EAC3B,MACF,KAAK,GACHD,EAAIA,EAAI7gB,QAAW8gB,GAAQ,GAC3BD,EAAIA,EAAI7gB,QAAW8gB,GAAQ,EAAK,IAGpC,MAAOD,IAGXzH,EAAO6H,GAAK,4GACZ7H,EAAO8H,QAAU,SAAU1jB,GACvB,GAAIqB,GAAIua,EAAO6H,GAAGE,KAAK3jB,EACvB,IAAIqB,EACA,GAAIA,EAAE,GACFrB,EAAIqB,EAAE,OACL,CAAA,IAAIA,EAAE,GAGP,KAAM,oBAFNrB,GAAIqB,EAAE,GAId,MAAOua,GAAOsH,OAAOljB,IAIzBkV,OAAO0G,OAASA,KAkBhB,SAAWoH,GACX,YAeA,SAASY,GAAOpI,EAAKqI,GACbrI,YAAeoI,IACfzjB,KAAKqb,IAAMA,EAAIA,IACfrb,KAAK0jB,IAAMrI,EAAIqI,MAEf1jB,KAAKqb,IAAMA,EACXrb,KAAK0jB,IAAMA,GAoJnB,QAASC,GAAKC,EAAQC,EAAQxhB,EAAQyhB,EAAKC,GACvC/jB,KAAK4jB,OAASA,EACd5jB,KAAK6jB,OAASA,EACd7jB,KAAKqC,OAASA,EACdrC,KAAK8jB,IAAMA,EACX9jB,KAAK+jB,IAAMA,EA5Kf,GAAIC,GAAY,IACZC,EAAW,IACXC,GACIJ,IAAK,SAAUK,EAASC,GACpB,GAAIviB,GAAIwiB,SAASC,cAAcH,EAE/B,OADAtiB,GAAEuiB,UAAYA,EACPviB,GAEXoP,KAAM,SAAUb,GACZ,MAAOiU,UAASE,eAAenU,IAa3CqT,GAAO7P,UAAU4Q,IAAM,SAAUd,GAG7B,GAFIA,IAAQb,IACRa,EAAM1jB,KAAK0jB,OACXA,GAAO1jB,KAAKqb,IAAIhZ,OAChB,KAAM,0BAA4BqhB,EAAM,0BAA4B1jB,KAAKqb,IAAIhZ,MACjF,OAAOrC,MAAKqb,IAAIqI,IAEpBD,EAAO7P,UAAU6Q,UAAY,mBAC7BhB,EAAO7P,UAAU8Q,QAAU,SAAU5kB,GACjC,MAAOE,MAAKykB,UAAUnjB,OAAQxB,GAAK,EAAK,IAAOE,KAAKykB,UAAUnjB,OAAW,GAAJxB,IAEzE2jB,EAAO7P,UAAU+Q,QAAU,SAAUC,EAAOC,EAAKC,GAE7C,IAAK,GADDtjB,GAAI,GACCnB,EAAIukB,EAAWC,EAAJxkB,IAAWA,EAE3B,GADAmB,GAAKxB,KAAK0kB,QAAQ1kB,KAAKwkB,IAAInkB,IACvBykB,KAAQ,EACR,OAAY,GAAJzkB,GACR,IAAK,GAAKmB,GAAK,IAAM,MACrB,KAAK,IAAKA,GAAK,IAAM,MACrB,SAAUA,GAAK,IAGvB,MAAOA,IAEXiiB,EAAO7P,UAAUmR,eAAiB,SAAUH,EAAOC,GAE/C,IAAK,GADDrjB,GAAI,GACCnB,EAAIukB,EAAWC,EAAJxkB,IAAWA,EAC3BmB,GAAK8P,OAAOC,aAAavR,KAAKwkB,IAAInkB,GACtC,OAAOmB,IAEXiiB,EAAO7P,UAAUoR,eAAiB,SAAUJ,EAAOC,GAE/C,IAAK,GADDrjB,GAAI,GACCnB,EAAIukB,EAAWC,EAAJxkB,GAAW,CAC3B,GAAIN,GAAIC,KAAKwkB,IAAInkB,IAEbmB,IAAK8P,OAAOC,aADR,IAAJxR,EACyBA,EACnBA,EAAI,KAAa,IAAJA,GACY,GAAJA,IAAa,EAAsB,GAAhBC,KAAKwkB,IAAInkB,MAExB,GAAJN,IAAa,IAAwB,GAAhBC,KAAKwkB,IAAInkB,OAAgB,EAAsB,GAAhBL,KAAKwkB,IAAInkB,MAEhG,MAAOmB,IAEXiiB,EAAO7P,UAAUqR,eAAiB,SAAUL,EAAOC,GAE/C,IAAK,GADDzU,GAAM,GACD/P,EAAIukB,EAAWC,EAAJxkB,EAASA,GAAK,EAAG,CACjC,GAAI6kB,GAAYllB,KAAKwkB,IAAInkB,GACrB8kB,EAAWnlB,KAAKwkB,IAAInkB,EAAI,EAC5B+P,IAAOkB,OAAOC,cAAe2T,GAAa,GAAKC,GAGnD,MAAO/U,IAEXqT,EAAO7P,UAAUwR,OAAS,6JAC1B3B,EAAO7P,UAAUyR,UAAY,SAAUT,EAAOC,GAC1C,GAAIrjB,GAAIxB,KAAK+kB,eAAeH,EAAOC,GAC/B3jB,EAAIlB,KAAKolB,OAAO5B,KAAKhiB,EACzB,OAAKN,IAELM,EAAIN,EAAE,GAAK,IAAMA,EAAE,GAAK,IAAMA,EAAE,GAAK,IAAMA,EAAE,GACzCA,EAAE,KACFM,GAAK,IAAMN,EAAE,GACTA,EAAE,KACFM,GAAK,IAAMN,EAAE,GACTA,EAAE,KACFM,GAAK,IAAMN,EAAE,MAGrBA,EAAE,KACFM,GAAK,OACO,KAARN,EAAE,KACFM,GAAKN,EAAE,GACHA,EAAE,KACFM,GAAK,IAAMN,EAAE,MAGlBM,GAlBI,sBAAwBA,GAoBvCiiB,EAAO7P,UAAU0R,aAAe,SAAUV,EAAOC,GAE7C,GAAIpG,GAAMoG,EAAMD,CAChB,IAAInG,EAAM,EAAG,CACTA,IAAQ,CACR,IAAIjd,GAAIxB,KAAKwkB,IAAII,EACjB,IAAU,IAANpjB,EACAid,GAAO,MAEP,MAAW,IAAJjd,GACHA,IAAM,IACJid,CAEV,OAAO,IAAMA,EAAM,QAGvB,IAAK,GADDhe,GAAI,EACCJ,EAAIukB,EAAWC,EAAJxkB,IAAWA,EAC3BI,EAAKA,GAAK,EAAKT,KAAKwkB,IAAInkB,EAC5B,OAAOI,IAEXgjB,EAAO7P,UAAU2R,eAAiB,SAAUX,EAAOC,GAC/C,GAAIW,GAAYxlB,KAAKwkB,IAAII,GACrBa,GAAWZ,EAAMD,EAAQ,GAAM,GAAKY,EACpChkB,EAAI,IAAMikB,EAAS,OACvB,IAAc,IAAVA,EAAc,CACd,GAAIC,GAAOF,CACXhkB,IAAK,GACL,KAAK,GAAInB,GAAIwkB,EAAM,EAAGxkB,EAAIukB,IAASvkB,EAAG,CAElC,IAAK,GADDP,GAAIE,KAAKwkB,IAAInkB,GACRG,EAAIklB,EAAU,EAAJllB,IAASA,EACxBgB,GAAM1B,GAAKU,EAAK,EAAI,IAAM,GAC9BklB,GAAO,GAGf,MAAOlkB,IAEXiiB,EAAO7P,UAAU+R,iBAAmB,SAAUf,EAAOC,GACjD,GAAIpG,GAAMoG,EAAMD,EACZpjB,EAAI,IAAMid,EAAM,SAChBA,GAAMuF,IACNa,EAAMD,EAAQZ,EAClB,KAAK,GAAI3jB,GAAIukB,EAAWC,EAAJxkB,IAAWA,EAC3BmB,GAAKxB,KAAK0kB,QAAQ1kB,KAAKwkB,IAAInkB,GAG/B,OAFIoe,GAAMuF,IACNxiB,GAAKyiB,GACFziB,GAEXiiB,EAAO7P,UAAUgS,SAAW,SAAUhB,EAAOC,GAIzC,IAAK,GAHDrjB,GAAI,GACJf,EAAI,EACJ0iB,EAAO,EACF9iB,EAAIukB,EAAWC,EAAJxkB,IAAWA,EAAG,CAC9B,GAAIK,GAAIV,KAAKwkB,IAAInkB,EAGjB,IAFAI,EAAKA,GAAK,EAAU,IAAJC,EAChByiB,GAAQ,IACE,IAAJziB,GAAW,CACb,GAAU,KAANc,EAAU,CACV,GAAIN,GAAQ,GAAJT,EAAa,GAAJA,EAAS,EAAI,EAAI,CAClCe,GAAIN,EAAI,KAAOT,EAAQ,GAAJS,OAEnBM,IAAK,KAAQ2hB,GAAQ,GAAM,SAAW1iB,EAC1CA,GAAI0iB,EAAO,GAGnB,MAAO3hB,IAUXmiB,EAAK/P,UAAUiS,SAAW,WACtB,GAAI7lB,KAAK8jB,MAAQjB,EACb,MAAO,SACX,IAAIiD,GAAW9lB,KAAK8jB,KAAO,EAEvBiC,GADkB/lB,KAAK8jB,KAAO,EAAK,EACZ,GAAX9jB,KAAK8jB,IACrB,QAAQgC,GACR,IAAK,GACD,OAAQC,GACR,IAAK,GAAM,MAAO,KAClB,KAAK,GAAM,MAAO,SAClB,KAAK,GAAM,MAAO,SAClB,KAAK,GAAM,MAAO,YAClB,KAAK,GAAM,MAAO,cAClB,KAAK,GAAM,MAAO,MAClB,KAAK,GAAM,MAAO,mBAClB,KAAK,GAAM,MAAO,kBAClB,KAAK,GAAM,MAAO,UAClB,KAAK,GAAM,MAAO,MAClB,KAAK,IAAM,MAAO,YAClB,KAAK,IAAM,MAAO,cAClB,KAAK,IAAM,MAAO,YAClB,KAAK,IAAM,MAAO,UAClB,KAAK,IAAM,MAAO,KAClB,KAAK,IAAM,MAAO,eAClB,KAAK,IAAM,MAAO,iBAClB,KAAK,IAAM,MAAO,eAClB,KAAK,IAAM,MAAO,gBAClB,KAAK,IAAM,MAAO,WAClB,KAAK,IAAM,MAAO,SAClB,KAAK,IAAM,MAAO,iBAClB,KAAK,IAAM,MAAO,eAClB,KAAK,IAAM,MAAO,eAClB,KAAK,IAAM,MAAO,eAClB,KAAK,IAAM,MAAO,iBAClB,KAAK,IAAM,MAAO,WAClB,SAAW,MAAO,aAAeA,EAAU/iB,SAAS,IAExD,IAAK,GAAG,MAAO,eAAiB+iB,EAAU/iB,SAAS,GACnD,KAAK,GAAG,MAAO,IAAM+iB,EAAY,GACjC,KAAK,GAAG,MAAO,WAAaA,EAAU/iB,SAAS,MAGnD2gB,EAAK/P,UAAUoS,aAAe,WAC9BrC,EAAK/P,UAAUqS,QAAU,WACrB,GAAIjmB,KAAK8jB,MAAQjB,EACb,MAAO,KACX,IAAIiD,GAAW9lB,KAAK8jB,KAAO,EACvBiC,EAAuB,GAAX/lB,KAAK8jB,IACjBmC,EAAUjmB,KAAKkmB,aACfzH,EAAM9d,KAAK2D,IAAItE,KAAKqC,OACxB,IAAiB,IAAbyjB,EAAgB,CAChB,GAAiB,OAAb9lB,KAAK+jB,IACL,MAAO,IAAM/jB,KAAK+jB,IAAI1hB,OAAS,QAEnC,IAAIb,GAAIxB,KAAK4jB,OAAOmB,eAAekB,EAASA,EAAUtlB,KAAKyD,IAAIqa,EAAKuF,GACpE,OAAIhkB,MAAKgmB,aAAa1M,KAAK9X,GAChBA,EAAEyR,UAAU,EAAG,EAAI+Q,IAAexiB,EAAEa,OAAS,EAAI2hB,EAAaC,EAAW,IAEzEjkB,KAAK4jB,OAAO+B,iBAAiBM,EAASA,EAAUxH,GAE/D,OAAQsH,GACR,IAAK,GACD,MAAqC,KAA7B/lB,KAAK4jB,OAAOY,IAAIyB,GAAkB,QAAU,MACxD,KAAK,GACD,MAAOjmB,MAAK4jB,OAAO0B,aAAaW,EAASA,EAAUxH,EACvD,KAAK,GACD,MAAOze,MAAK+jB,IAAM,IAAM/jB,KAAK+jB,IAAI1hB,OAAS,SACtCrC,KAAK4jB,OAAO2B,eAAeU,EAASA,EAAUxH,EACtD,KAAK,GACD,MAAOze,MAAK+jB,IAAM,IAAM/jB,KAAK+jB,IAAI1hB,OAAS,SACtCrC,KAAK4jB,OAAO+B,iBAAiBM,EAASA,EAAUxH,EAExD,KAAK,GACD,MAAOze,MAAK4jB,OAAOgC,SAASK,EAASA,EAAUxH,EAMnD,KAAK,IACL,IAAK,IACD,MAAO,IAAMze,KAAK+jB,IAAI1hB,OAAS,QACnC,KAAK,IACD,MAAOrC,MAAK4jB,OAAOoB,eAAeiB,EAASA,EAAUxH,EACzD,KAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAEL,IAAK,IAGD,MAAOze,MAAK4jB,OAAOmB,eAAekB,EAASA,EAAUxH,EACzD,KAAK,IACD,MAAOze,MAAK4jB,OAAOqB,eAAegB,EAASA,EAAUxH,EACzD,KAAK,IACL,IAAK,IACD,MAAOze,MAAK4jB,OAAOyB,UAAUY,EAASA,EAAUxH,GAEpD,MAAO,OAEXkF,EAAK/P,UAAU5Q,SAAW,WACtB,MAAOhD,MAAK6lB,WAAa,IAAM7lB,KAAK4jB,OAAOF,IAAM,WAAa1jB,KAAK6jB,OAAS,WAAa7jB,KAAKqC,OAAS,SAAyB,OAAbrC,KAAK+jB,IAAgB,OAAS/jB,KAAK+jB,IAAI1hB,QAAU,KAExKshB,EAAK/P,UAAUuS,MAAQ,SAAUC,GAG7B,GAFIA,IAAWvD,IAAWuD,EAAS,IACnC/B,SAASgC,QAAQD,EAASpmB,MACT,OAAbA,KAAK+jB,IAAc,CACnBqC,GAAU,IACV,KAAK,GAAI/lB,GAAI,EAAGuD,EAAM5D,KAAK+jB,IAAI1hB,OAAYuB,EAAJvD,IAAWA,EAC9CL,KAAK+jB,IAAI1jB,GAAG8lB,MAAMC,KAG9BzC,EAAK/P,UAAU0S,eAAiB,SAAUF,GAClCA,IAAWvD,IAAWuD,EAAS,GACnC,IAAI5kB,GAAI4kB,EAASpmB,KAAK6lB,WAAa,KAAO7lB,KAAK4jB,OAAOF,GAStD,IARI1jB,KAAKqC,QAAU,IACfb,GAAK,KACTA,GAAKxB,KAAKqC,OACK,GAAXrC,KAAK8jB,IACLtiB,GAAK,iBACc,GAAZxB,KAAK8jB,KAA6B,GAAZ9jB,KAAK8jB,KAA+B,OAAb9jB,KAAK+jB,MACzDviB,GAAK,mBACTA,GAAK,KACY,OAAbxB,KAAK+jB,IAAc,CACnBqC,GAAU,IACV,KAAK,GAAI/lB,GAAI,EAAGuD,EAAM5D,KAAK+jB,IAAI1hB,OAAYuB,EAAJvD,IAAWA,EAC9CmB,GAAKxB,KAAK+jB,IAAI1jB,GAAGimB,eAAeF,GAExC,MAAO5kB,IAEXmiB,EAAK/P,UAAU2S,MAAQ,WACnB,GAAIC,GAAOtC,EAAIJ,IAAI,MAAO,OAC1B0C,GAAKlM,KAAOta,IACZ,IAAIic,GAAOiI,EAAIJ,IAAI,MAAO,QACtBtiB,EAAIxB,KAAK6lB,WAAWjO,QAAQ,KAAM,IACtCqE,GAAKwK,UAAYjlB,CACjB,IAAIykB,GAAUjmB,KAAKimB,SACnB,IAAgB,OAAZA,EAAkB,CAClBA,EAAU3U,OAAO2U,GAASrO,QAAQ,KAAM,OACxC,IAAI8O,GAAUxC,EAAIJ,IAAI,OAAQ,UAC9B4C,GAAQC,YAAYzC,EAAIjT,KAAKgV,IAC7BhK,EAAK0K,YAAYD,GAErBF,EAAKG,YAAY1K,GACjBjc,KAAKwmB,KAAOA,EACZxmB,KAAKic,KAAOA,CACZ,IAAI2K,GAAQ1C,EAAIJ,IAAI,MAAO,QAY3B,IAXAtiB,EAAI,WAAaxB,KAAK4jB,OAAOF,IAAM,QACnCliB,GAAK,WAAaxB,KAAK6jB,OAAS,IAE5BriB,GADAxB,KAAKqC,QAAU,EACVrC,KAAKqC,QAEHrC,KAAKqC,OAAU,eACX,GAAXrC,KAAK8jB,IACLtiB,GAAK,qBACc,GAAZxB,KAAK8jB,KAA6B,GAAZ9jB,KAAK8jB,KAA+B,OAAb9jB,KAAK+jB,MACzDviB,GAAK,uBAEO,OAAZykB,IACAzkB,GAAK,sBAAwBykB,EAAU,OAClB,gBAATY,OAAmC,GAAZ7mB,KAAK8jB,KAAc,CAClD,GAAInC,GAAMkF,KAAKZ,EACXtE,KACIA,EAAIze,IAAG1B,GAAK,QAAUmgB,EAAIze,GAC1Bye,EAAI5hB,IAAGyB,GAAK,QAAUmgB,EAAI5hB,GAC1B4hB,EAAIphB,IAAGiB,GAAK,oBAI5BolB,EAAMH,UAAYjlB,EAClBglB,EAAKG,YAAYC,EACjB,IAAI7C,GAAMG,EAAIJ,IAAI,MAAO,MACzB,IAAiB,OAAb9jB,KAAK+jB,IACL,IAAK,GAAI1jB,GAAI,EAAGuD,EAAM5D,KAAK+jB,IAAI1hB,OAAYuB,EAAJvD,IAAWA,EAC9C0jB,EAAI4C,YAAY3mB,KAAK+jB,IAAI1jB,GAAGkmB,QAMpC,OAJAC,GAAKG,YAAY5C,GACjB9H,EAAK6K,QAAU,WACXN,EAAKpC,UAA+B,kBAAlBoC,EAAKpC,UAAiC,OAAS,kBAE9DoC,GAEX7C,EAAK/P,UAAUmT,SAAW,WACtB,MAAO/mB,MAAK4jB,OAAOF,KAEvBC,EAAK/P,UAAUsS,WAAa,WACxB,MAAOlmB,MAAK4jB,OAAOF,IAAM1jB,KAAK6jB,QAElCF,EAAK/P,UAAUoT,OAAS,WACpB,MAAOhnB,MAAK4jB,OAAOF,IAAM1jB,KAAK6jB,OAASljB,KAAK2D,IAAItE,KAAKqC,SAEzDshB,EAAK/P,UAAUqT,UAAY,SAAUC,GACjClnB,KAAKwmB,KAAKpC,WAAa,SACnB8C,IACAlnB,KAAKic,KAAKmI,WAAa,WAE/BT,EAAK/P,UAAUuT,QAAU,SAAUD,GAC/B,GAAI5D,GAAK,SACTtjB,MAAKwmB,KAAKpC,UAAYpkB,KAAKwmB,KAAKpC,UAAUxM,QAAQ0L,EAAI,IAClD4D,IACAlnB,KAAKic,KAAKmI,UAAYpkB,KAAKic,KAAKmI,UAAUxM,QAAQ0L,EAAI,MAE9DK,EAAK/P,UAAUwT,aAAe,SAAUZ,EAAMpC,EAAWR,EAAQgB,EAAOC,GACpE,KAAID,GAASC,GAAb,CAEA,GAAId,GAAMG,EAAIJ,IAAI,OAAQM,EAC1BL,GAAI4C,YAAYzC,EAAIjT,KAChB2S,EAAOe,QAAQC,EAAOC,KAC1B2B,EAAKG,YAAY5C,KAErBJ,EAAK/P,UAAUyT,SAAW,SAAUC,GAChC,GAAId,GAAOtC,EAAIJ,IAAI,OAAQ,MAwB3B,IAvBIwD,IAASzE,IAAWyE,EAAOd,GAC/BxmB,KAAKic,KAAKsL,QAAUf,EACpBxmB,KAAKic,KAAKuL,YAAc,WAAcxnB,KAAKunB,QAAQnD,UAAY,cAC/DpkB,KAAKic,KAAKwL,WAAc,WAAcznB,KAAKunB,QAAQnD,UAAY,OAC/DoC,EAAKlM,KAAOta,KACZwmB,EAAKgB,YAAc,WACf,GAAIN,IAAWI,EAAKI,QAChBR,KACAI,EAAKI,SAAW1nB,KAAKsa,KACrBta,KAAKokB,UAAY,cAErBpkB,KAAKsa,KAAK2M,UAAUC,IAExBV,EAAKiB,WAAc,WACf,GAAIP,GAAWI,EAAKI,UAAY1nB,KAAKsa,IACrCta,MAAKsa,KAAK6M,QAAQD,GACdA,IACAI,EAAKI,SAAW,KAChB1nB,KAAKokB,UAAY,QAGzBpkB,KAAKonB,aAAaZ,EAAM,MAAOxmB,KAAK4jB,OAAQ5jB,KAAK+mB,WAAY/mB,KAAK+mB,WAAa,GAC/E/mB,KAAKonB,aAAaZ,EAAOxmB,KAAKqC,QAAU,EAAK,OAAS,OAAQrC,KAAK4jB,OAAQ5jB,KAAK+mB,WAAa,EAAG/mB,KAAKkmB,cACpF,OAAblmB,KAAK+jB,IACLyC,EAAKG,YAAYzC,EAAIjT,KACjBjR,KAAK4jB,OAAOe,QAAQ3kB,KAAKkmB,aAAclmB,KAAKgnB,gBAC/C,IAAIhnB,KAAK+jB,IAAI1hB,OAAS,EAAG,CAC1B,GAAIslB,GAAQ3nB,KAAK+jB,IAAI,GACjB6D,EAAO5nB,KAAK+jB,IAAI/jB,KAAK+jB,IAAI1hB,OAAS,EACtCrC,MAAKonB,aAAaZ,EAAM,QAASxmB,KAAK4jB,OAAQ5jB,KAAKkmB,aAAcyB,EAAMZ,WACvE,KAAK,GAAI1mB,GAAI,EAAGuD,EAAM5D,KAAK+jB,IAAI1hB,OAAYuB,EAAJvD,IAAWA,EAC9CmmB,EAAKG,YAAY3mB,KAAK+jB,IAAI1jB,GAAGgnB,SAASC,GAC1CtnB,MAAKonB,aAAaZ,EAAM,QAASxmB,KAAK4jB,OAAQgE,EAAKZ,SAAUhnB,KAAKgnB,UAEtE,MAAOR,IAEX7C,EAAK/P,UAAUiU,YAAc,WACzB,MAAO7nB,MAAK4jB,OAAOe,QAAQ3kB,KAAK+mB,WAAY/mB,KAAKgnB,UAAU,IAE/DrD,EAAKmE,aAAe,SAAUlE,GAC1B,GAAImE,GAAMnE,EAAOY,MACb/F,EAAY,IAANsJ,CACV,IAAItJ,GAAOsJ,EACP,MAAOtJ,EACX,IAAIA,EAAM,EACN,KAAM,kDAAoDmF,EAAOF,IAAM,EAC3E,IAAY,IAARjF,EACA,MAAO,EACXsJ,GAAM,CACN,KAAK,GAAI1nB,GAAI,EAAOoe,EAAJpe,IAAWA,EACvB0nB,EAAOA,GAAO,EAAKnE,EAAOY,KAC9B,OAAOuD,IAEXpE,EAAKqE,WAAa,SAAUlE,EAAKrF,EAAKmF,GAClC,GAAU,GAANE,EACA,OAAO,CACX,IAAW,EAANA,GAAgBA,EAAM,EACvB,OAAO,CACX,IAAI1gB,GAAI,GAAIqgB,GAAOG,EACR,IAAPE,GAAa1gB,EAAEohB,KACnB,IAAIyD,GAAS7kB,EAAEohB,KACf,IAAKyD,GAAU,EAAK,EAChB,OAAO,CACX,KACI,GAAIC,GAAYvE,EAAKmE,aAAa1kB,EAClC,OAASA,GAAEsgB,IAAME,EAAOF,IAAOwE,GAAazJ,EAC9C,MAAO0J,GACL,OAAO,IAGfxE,EAAKZ,OAAS,SAAUa,GACdA,YAAkBH,KACpBG,EAAS,GAAIH,GAAOG,EAAQ,GAChC,IAAIwE,GAAc,GAAI3E,GAAOG,GACzBE,EAAMF,EAAOY,MACb/F,EAAMkF,EAAKmE,aAAalE,GACxBC,EAASD,EAAOF,IAAM0E,EAAY1E,IAClCK,EAAM,IACV,IAAIJ,EAAKqE,WAAWlE,EAAKrF,EAAKmF,GAAS,CAEnC,GAAIgB,GAAQhB,EAAOF,GAGnB,IAFW,GAAPI,GAAaF,EAAOY,MACxBT,KACItF,GAAO,EAAG,CAGV,IADA,GAAIoG,GAAMD,EAAQnG,EACXmF,EAAOF,IAAMmB,GAChBd,EAAIA,EAAI1hB,QAAUshB,EAAKZ,OAAOa,EAClC,IAAIA,EAAOF,KAAOmB,EACd,KAAM,gEAAkED,MAG5E,KACI,OAAS,CACL,GAAIpjB,GAAImiB,EAAKZ,OAAOa,EACpB,IAAc,IAAVpiB,EAAEsiB,IACF,KACJC,GAAIA,EAAI1hB,QAAUb,EAEtBid,EAAMmG,EAAQhB,EAAOF,IACvB,MAAO/d,GACL,KAAM,sDAAwDA,OAItEie,GAAOF,KAAOjF,CAClB,OAAO,IAAIkF,GAAKyE,EAAavE,EAAQpF,EAAKqF,EAAKC,IAEnDJ,EAAKrK,KAAO,WAMR,IAAK,GALDA,KACEsN,OAAQ,IAAyByB,SAAU,KAC3CzB,OAAQ,IAAM,KAAmByB,SAAU,MAC3CzB,OAAQ,IAAM,IAAM,IAAM,KAAOyB,SAAU,WAExChoB,EAAI,EAAGuD,EAAM0V,EAAKjX,OAAYuB,EAAJvD,IAAWA,EAAG,CAC7C,GACIujB,GAAS,GAAIH,GAAOnK,EAAKjZ,GAAGumB,MAAO,GACnC0B,EAAM3E,EAAKmE,aAAalE,EACxB0E,IAAOhP,EAAKjZ,GAAGgoB,UACfhE,SAASkE,MAAM,WAAaloB,EAAI,cAAgBiZ,EAAKjZ,GAAGgoB,SAAW,QAAUC,EAAM,QAK/FvT,OAAO4O,KAAOA,KAMdA,KAAK/P,UAAU4U,kBAAoB,WACjC,GAAIC,GAAYzoB,KAAK6nB,cACjBa,EAAuB,EAAd1oB,KAAK6jB,OACdxhB,EAAuB,EAAdrC,KAAKqC,MAClB,OAAOomB,GAAUnf,OAAOof,EAAQrmB,IA+BlCkO,GAAOqD,UAAU+U,SAAW,SAAUC,GACpC,IACE,GAAIC,GAAU,EACVC,EAAkB,EAClBC,EAAQ,sCACRC,EAAMD,EAAMzP,KAAKsP,GAAOtN,IAAIyH,OAAO6F,GAAOnN,OAAO8H,QAAQqF,GACzDtO,EAAOqJ,KAAKZ,OAAOiG,EAMvB,IAHuB,IAApB1O,EAAKyJ,IAAI1hB,SACRiY,EAAOA,EAAKyJ,IAAI,GAAGA,IAAI,IAEH,IAApBzJ,EAAKyJ,IAAI1hB,OAAc,CAGzBwmB,EAAUvO,EAAKyJ,IAAI,GAAGyE,oBACtBxoB,KAAKS,EAAI0P,GAAY0Y,EAAS,IAE9BC,EAAkBxO,EAAKyJ,IAAI,GAAGyE,oBAC9BxoB,KAAK2F,EAAImL,SAASgY,EAAiB,GAEnC,IAAIG,GAAmB3O,EAAKyJ,IAAI,GAAGyE,mBACnCxoB,MAAKkD,EAAIiN,GAAY8Y,EAAkB,GAEvC,IAAIC,GAAS5O,EAAKyJ,IAAI,GAAGyE,mBACzBxoB,MAAKoD,EAAI+M,GAAY+Y,EAAQ,GAE7B,IAAIC,GAAS7O,EAAKyJ,IAAI,GAAGyE,mBACzBxoB,MAAK2E,EAAIwL,GAAYgZ,EAAQ,GAE7B,IAAIC,GAAY9O,EAAKyJ,IAAI,GAAGyE,mBAC5BxoB,MAAKwQ,KAAOL,GAAYiZ,EAAW,GAEnC,IAAIC,GAAY/O,EAAKyJ,IAAI,GAAGyE,mBAC5BxoB,MAAKyQ,KAAON,GAAYkZ,EAAW,GAEnC,IAAIC,GAAchP,EAAKyJ,IAAI,GAAGyE,mBAC9BxoB,MAAK0Q,MAAQP,GAAYmZ,EAAa,QAGnC,CAAA,GAAwB,IAApBhP,EAAKyJ,IAAI1hB,OAahB,OAAO,CAVP,IAAIknB,GAAajP,EAAKyJ,IAAI,GACtByF,EAAWD,EAAWxF,IAAI,EAE9B8E,GAAUW,EAASzF,IAAI,GAAGyE,oBAC1BxoB,KAAKS,EAAI0P,GAAY0Y,EAAS,IAC9BC,EAAkBU,EAASzF,IAAI,GAAGyE,oBAClCxoB,KAAK2F,EAAImL,SAASgY,EAAiB,IAMrC,OAAO,EAET,MAAOW,GACL,OAAO,IAsBXlZ,GAAOqD,UAAU8V,kBAAoB,WACnC,GAAIC,IACFC,OACE,GAAIvP,MAAKC,KAAKgF,YAAYuK,MAAO,IACjC,GAAIxP,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAKS,IACzC,GAAI4Z,MAAKC,KAAKgF,YAAYuK,MAAO7pB,KAAK2F,IACtC,GAAI0U,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAKkD,IACzC,GAAImX,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAKoD,IACzC,GAAIiX,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAK2E,IACzC,GAAI0V,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAKwQ,OACzC,GAAI6J,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAKyQ,OACzC,GAAI4J,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAK0Q,UAGzCqZ,EAAM,GAAI1P,MAAKC,KAAK8H,YAAYuH,EACpC,OAAOI,GAAI7N,iBAQb3L,GAAOqD,UAAUoW,qBAAuB,WACtC,MAAOhX,IAAQhT,KAAK0pB,sBAuBtBnZ,GAAOqD,UAAUqW,iBAAmB,WAClC,GAAIN,IACFC,OACE,GAAIvP,MAAKC,KAAKoG,qBAAqBiB,IAAO,yBAC1C,GAAItH,MAAKC,KAAKmG,UAGdyJ,EAAiB,GAAI7P,MAAKC,KAAK8H,YAAYuH,EAE/CA,IACEC,OACE,GAAIvP,MAAKC,KAAKgF,YAAYwK,OAAU9pB,KAAKS,IACzC,GAAI4Z,MAAKC,KAAKgF,YAAYuK,MAAO7pB,KAAK2F,KAG1C,IAAIwkB,GAAkB,GAAI9P,MAAKC,KAAK8H,YAAYuH,EAEhDA,IACE3G,IAAO,KAAOmH,EAAgBjO,gBAEhC,IAAIqN,GAAa,GAAIlP,MAAKC,KAAKqF,aAAagK,EAE5CA,IACEC,OACEM,EACAX,GAGJ,IAAIQ,GAAM,GAAI1P,MAAKC,KAAK8H,YAAYuH,EACpC,OAAOI,GAAI7N,iBAQb3L,GAAOqD,UAAUwW,oBAAsB,WACrC,MAAOpX,IAAQhT,KAAKiqB,qBAWtB1Z,GAAOqD,UAAUyW,SAAW,SAAUja,EAAKka,GAEzC,GADAA,EAAQA,GAAS,IACZla,EACH,MAAOA,EAET,IAAIma,GAAQ,QAAUD,EAAQ,oBAAsBA,EAAQ,IAC5D,OAAOla,GAAImJ,MAAMiR,OAAOD,EAAO,MAAM7L,KAAK,OAQ5CnO,GAAOqD,UAAU6W,cAAgB,WAC/B,GAAInb,GAAM,mCAGV,OAFAA,IAAOtP,KAAKqqB,SAASrqB,KAAKgqB,wBAA0B,KACpD1a,GAAO,iCASTiB,GAAOqD,UAAU8W,aAAe,WAC9B,GAAIpb,GAAM,8BAGV,OAFAA,IAAOtP,KAAKqqB,SAASrqB,KAAKoqB,uBAAyB,KACnD9a,GAAO,4BAeTiB,GAAOqD,UAAU+W,qBAAuB,SAAUC,GAEhD,MADAA,GAAMA,MAEJA,EAAIxQ,eAAe,MACnBwQ,EAAIxQ,eAAe,MAavB7J,GAAOqD,UAAUiX,sBAAwB,SAAUD,GAEjD,MADAA,GAAMA,MAEJA,EAAIxQ,eAAe,MACnBwQ,EAAIxQ,eAAe,MACnBwQ,EAAIxQ,eAAe,MACnBwQ,EAAIxQ,eAAe,MACnBwQ,EAAIxQ,eAAe,MACnBwQ,EAAIxQ,eAAe,SACnBwQ,EAAIxQ,eAAe,SACnBwQ,EAAIxQ,eAAe,UAUvB7J,GAAOqD,UAAUkX,oBAAsB,SAAUF,GAC/C5qB,KAAKS,EAAImqB,EAAInqB,EACbT,KAAK2F,EAAIilB,EAAIjlB,EAETilB,EAAIxQ,eAAe,OACrBpa,KAAKkD,EAAI0nB,EAAI1nB,EACblD,KAAKoD,EAAIwnB,EAAIxnB,EACbpD,KAAK2E,EAAIimB,EAAIjmB,EACb3E,KAAKwQ,KAAOoa,EAAIpa,KAChBxQ,KAAKyQ,KAAOma,EAAIna,KAChBzQ,KAAK0Q,MAAQka,EAAIla,OAWrB,IAAIqa,IAAkB,SAAUzb,GAE9BiB,GAAOoM,KAAK3c,MAERsP,IAEiB,gBAARA,GACTtP,KAAK2oB,SAASrZ,IAGdtP,KAAK6qB,sBAAsBvb,IAC3BtP,KAAK2qB,qBAAqBrb,KAG1BtP,KAAK8qB,oBAAoBxb,IAM/Byb,IAAgBnX,UAAY,GAAIrD,IAGhCwa,GAAgBnX,UAAUsG,YAAc6Q,EAYxC,IAAIC,IAAY,SAAUrB,GACxBA,EAAUA,MACV3pB,KAAKirB,iBAAmBna,SAAS6Y,EAAQsB,mBAAqB,KAC9DjrB,KAAKkrB,wBAA0BvB,EAAQuB,yBAA2B,SAClElrB,KAAK8I,IAAM6gB,EAAQ7gB,MAAO,EAE1B9I,KAAKsP,IAAM,KAUb0b,IAAUpX,UAAUuX,OAAS,SAAU7b,GACjCtP,KAAK8I,KAAO9I,KAAKsP,IAGrBtP,KAAKsP,IAAM,GAAIyb,IAAgBzb,IAQjC0b,GAAUpX,UAAUwX,cAAgB,SAAUC,GAE5CrrB,KAAKmrB,OAAOE,IAQdL,GAAUpX,UAAU0X,aAAe,SAAUC,GAE3CvrB,KAAKmrB,OAAOI,IAWdP,GAAUpX,UAAUoC,QAAU,SAAUwV,GAEtC,IACE,MAAOxrB,MAAKyrB,SAASzV,QAAQ5C,GAASoY,IAExC,MAAO/B,GACL,OAAO,IAYXuB,GAAUpX,UAAUgC,QAAU,SAAU4V,GAEtC,IACE,MAAOxY,IAAQhT,KAAKyrB,SAAS7V,QAAQ4V,IAEvC,MAAO/B,GACL,OAAO,IAYXuB,GAAUpX,UAAU6X,OAAS,SAAUC,GAErC,IAAK1rB,KAAKsP,IAAK,CAGb,GADAtP,KAAKsP,IAAM,GAAIyb,IACXW,GAA+B,yBAAtB1oB,SAAS2Z,KAAK+O,GAEzB,WADA1rB,MAAKsP,IAAIqH,cAAc3W,KAAKirB,iBAAkBjrB,KAAKkrB,wBAAyBQ,EAI9E1rB,MAAKsP,IAAIyG,SAAS/V,KAAKirB,iBAAkBjrB,KAAKkrB,yBAEhD,MAAOlrB,MAAKsP,KASd0b,GAAUpX,UAAU6W,cAAgB,WAElC,MAAOzqB,MAAKyrB,SAAShB,iBASvBO,GAAUpX,UAAU+X,iBAAmB,WAErC,MAAO3rB,MAAKyrB,SAASzB,wBAUvBgB,GAAUpX,UAAU8W,aAAe,WAEjC,MAAO1qB,MAAKyrB,SAASf,gBASvBM,GAAUpX,UAAUgY,gBAAkB,WAEpC,MAAO5rB,MAAKyrB,SAASrB,uBAGvBzqB,EAAQqrB,UAAYA,IACjBtrB,iBACH,IAAIsrB,WAAYtrB,iBAAiBsrB"}